diff --git a/Makefile.in b/Makefile.in index b64521d8d..588fbc555 100644 --- a/Makefile.in +++ b/Makefile.in @@ -97,6 +97,9 @@ PYTHONMOD_HEADER=@PYTHONMOD_HEADER@ PYUNBOUND_SRC= # libunbound_wrap.lo if python libunbound wrapper enabled. PYUNBOUND_OBJ=@PYUNBOUND_OBJ@ +SUBNET_SRC=edns-subnet/edns-subnet.c edns-subnet/subnetmod.c edns-subnet/addrtree.c edns-subnet/subnet-whitelist.c +SUBNET_OBJ=@SUBNET_OBJ@ +SUBNET_HEADER=@SUBNET_HEADER@ COMMON_SRC=services/cache/dns.c services/cache/infra.c services/cache/rrset.c \ util/as112.c util/data/dname.c util/data/msgencode.c util/data/msgparse.c \ util/data/msgreply.c util/data/packed_rrset.c iterator/iterator.c \ @@ -116,6 +119,8 @@ validator/autotrust.c validator/val_anchor.c validator/validator.c \ validator/val_kcache.c validator/val_kentry.c validator/val_neg.c \ validator/val_nsec3.c validator/val_nsec.c validator/val_secalgo.c \ validator/val_sigcrypt.c validator/val_utils.c dns64/dns64.c \ +edns-subnet/edns-subnet.c edns-subnet/subnetmod.c \ +edns-subnet/addrtree.c edns-subnet/subnet-whitelist.c \ cachedb/cachedb.c respip/respip.c $(CHECKLOCK_SRC) \ $(DNSTAP_SRC) $(DNSCRYPT_SRC) COMMON_OBJ_WITHOUT_NETCALL=dns.lo infra.lo rrset.lo dname.lo msgencode.lo \ @@ -128,7 +133,7 @@ random.lo rbtree.lo regional.lo rtt.lo dnstree.lo lookup3.lo lruhash.lo \ slabhash.lo timehist.lo tube.lo winsock_event.lo autotrust.lo val_anchor.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 \ -$(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) +$(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) COMMON_OBJ_WITHOUT_NETCALL+=respip.lo COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \ outside_network.lo @@ -153,10 +158,11 @@ str2wire.lo UNITTEST_SRC=testcode/unitanchor.c testcode/unitdname.c \ testcode/unitlruhash.c testcode/unitmain.c testcode/unitmsgparse.c \ testcode/unitneg.c testcode/unitregional.c testcode/unitslabhash.c \ -testcode/unitverify.c testcode/readhex.c testcode/testpkts.c testcode/unitldns.c +testcode/unitverify.c testcode/readhex.c testcode/testpkts.c testcode/unitldns.c \ +testcode/unitecs.c UNITTEST_OBJ=unitanchor.lo unitdname.lo unitlruhash.lo unitmain.lo \ unitmsgparse.lo unitneg.lo unitregional.lo unitslabhash.lo unitverify.lo \ -readhex.lo testpkts.lo unitldns.lo +readhex.lo testpkts.lo unitldns.lo unitecs.lo UNITTEST_OBJ_LINK=$(UNITTEST_OBJ) worker_cb.lo $(COMMON_OBJ) $(SLDNS_OBJ) \ $(COMPAT_OBJ) DAEMON_SRC=daemon/acl_list.c daemon/cachedump.c daemon/daemon.c \ @@ -598,6 +604,7 @@ depend: -e 's?$$(srcdir)/dnstap/dnstap_config.h??g' \ -e 's?$$(srcdir)/dnscrypt/dnscrypt_config.h??g' \ -e 's?$$(srcdir)/pythonmod/pythonmod.h?$$(PYTHONMOD_HEADER)?g' \ + -e 's?$$(srcdir)/edns-subnet/subnetmod.h $$(srcdir)/edns-subnet/subnet-whitelist.h $$(srcdir)/edns-subnet/edns-subnet.h $$(srcdir)/edns-subnet/addrtree.h?$$(SUBNET_HEADER)?g' \ -e 's!\(.*\)\.o[ :]*!\1.lo \1.o: !g' \ > $(DEPEND_TMP) cp $(DEPEND_TARGET) $(DEPEND_TMP2) @@ -622,7 +629,7 @@ dns.lo dns.o: $(srcdir)/services/cache/dns.c config.h $(srcdir)/iterator/iter_de 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)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.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 \ @@ -649,10 +656,11 @@ msgparse.lo msgparse.o: $(srcdir)/util/data/msgparse.c config.h $(srcdir)/util/d msgreply.lo msgreply.o: $(srcdir)/util/data/msgreply.c config.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h $(srcdir)/util/regional.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/module.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h + $(srcdir)/util/net_help.h $(srcdir)/util/data/dname.h \ + $(srcdir)/util/regional.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/data/msgencode.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/module.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h packed_rrset.lo packed_rrset.o: $(srcdir)/util/data/packed_rrset.c config.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/storage/lookup3.h $(srcdir)/util/alloc.h $(srcdir)/util/regional.h \ @@ -665,11 +673,11 @@ iterator.lo iterator.o: $(srcdir)/iterator/iterator.c config.h $(srcdir)/iterato $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/iterator/iter_donotq.h \ $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_scrub.h $(srcdir)/iterator/iter_priv.h \ $(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)/dnscrypt/cert.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)/services/mesh.h $(srcdir)/services/modstack.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)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.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)/services/mesh.h $(srcdir)/services/modstack.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 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 \ @@ -711,7 +719,7 @@ iter_utils.lo iter_utils.o: $(srcdir)/iterator/iter_utils.c config.h $(srcdir)/i $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/iterator/iter_donotq.h $(srcdir)/iterator/iter_delegpt.h $(srcdir)/iterator/iter_priv.h \ $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \ $(srcdir)/util/regional.h $(srcdir)/util/data/dname.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/validator/val_anchor.h \ @@ -719,7 +727,7 @@ iter_utils.lo iter_utils.o: $(srcdir)/iterator/iter_utils.c config.h $(srcdir)/i $(srcdir)/validator/val_sigcrypt.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h listen_dnsport.lo listen_dnsport.o: $(srcdir)/services/listen_dnsport.c config.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/log.h $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h \ $(srcdir)/sldns/sbuffer.h localzone.lo localzone.o: $(srcdir)/services/localzone.c config.h $(srcdir)/services/localzone.h \ @@ -729,11 +737,11 @@ localzone.lo localzone.o: $(srcdir)/services/localzone.c config.h $(srcdir)/serv $(srcdir)/sldns/rrdef.h $(srcdir)/services/view.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/sbuffer.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)/dnscrypt/cert.h $(srcdir)/util/as112.h + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/as112.h mesh.lo mesh.o: $(srcdir)/services/mesh.c config.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h $(srcdir)/services/outbound_list.h \ $(srcdir)/services/cache/dns.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h \ $(srcdir)/util/data/msgencode.h $(srcdir)/util/timehist.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.h \ @@ -744,11 +752,12 @@ modstack.lo modstack.o: $(srcdir)/services/modstack.c config.h $(srcdir)/service $(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/fptr_wlist.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(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)/cachedb/cachedb.h + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \ + $(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 $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/alloc.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.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 \ @@ -756,34 +765,34 @@ view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(s $(srcdir)/sldns/rrdef.h $(srcdir)/util/config_file.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 $(srcdir)/dnscrypt/cert.h \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ outside_network.lo outside_network.o: $(srcdir)/services/outside_network.c config.h \ $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ + $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/services/listen_dnsport.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/rtt.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/data/msgencode.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/net_help.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h \ $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h \ - $(srcdir)/dnstap/dnstap.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 $(srcdir)/dnscrypt/cert.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/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.h + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.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/tube.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h config_file.lo config_file.o: $(srcdir)/util/config_file.c config.h $(srcdir)/util/log.h \ $(srcdir)/util/configyyrename.h $(srcdir)/util/config_file.h util/configparser.h \ $(srcdir)/util/net_help.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/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/regional.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/data/dname.h \ - $(srcdir)/util/rtt.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h $(srcdir)/util/iana_ports.inc + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ + $(srcdir)/util/data/dname.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h \ + $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/util/iana_ports.inc configlexer.lo configlexer.o: util/configlexer.c config.h $(srcdir)/util/configyyrename.h \ $(srcdir)/util/config_file.h util/configparser.h configparser.lo configparser.o: util/configparser.c config.h $(srcdir)/util/configyyrename.h \ @@ -793,14 +802,14 @@ shm_main.lo shm_main.o: $(srcdir)/util/shm_side/shm_main.c config.h $(srcdir)/ut $(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)/dnscrypt/cert.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)/util/module.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/cache/rrset.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)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.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)/validator/validator.h $(srcdir)/validator/val_utils.h \ $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/tube.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)/dnscrypt/cert.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 \ $(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)/util/rbtree.h \ @@ -814,35 +823,34 @@ fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/ $(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/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/respip/respip.h \ - $(PYTHONMOD_HEADER) $(srcdir)/cachedb/cachedb.h + $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/net_help.h $(srcdir)/edns-subnet/addrtree.h \ + $(srcdir)/edns-subnet/edns-subnet.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 \ - $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.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/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ - $(srcdir)/services/modstack.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 $(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)/util/rbtree.h $(srcdir)/services/modstack.h module.lo module.o: $(srcdir)/util/module.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)/sldns/wire2str.h netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/ub_event.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/fptr_wlist.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/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h $(srcdir)/dnstap/dnstap.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)/sldns/parseutil.h \ - $(srcdir)/sldns/wire2str.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 $(srcdir)/dnscrypt/cert.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 \ $(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)/util/rbtree.h \ @@ -855,29 +863,29 @@ dnstree.lo dnstree.o: $(srcdir)/util/storage/dnstree.c config.h $(srcdir)/util/s lookup3.lo lookup3.o: $(srcdir)/util/storage/lookup3.c config.h $(srcdir)/util/storage/lookup3.h lruhash.lo lruhash.o: $(srcdir)/util/storage/lruhash.c config.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.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/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/dnscrypt/dnscrypt.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/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h slabhash.lo slabhash.o: $(srcdir)/util/storage/slabhash.c config.h $(srcdir)/util/storage/slabhash.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.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 $(srcdir)/dnscrypt/cert.h $(srcdir)/util/fptr_wlist.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)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ - $(srcdir)/util/ub_event.h + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/fptr_wlist.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)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/util/ub_event.h ub_event.lo ub_event.o: $(srcdir)/util/ub_event.c config.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h \ - $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/tube.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c config.h $(srcdir)/util/ub_event.h \ $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.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/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h \ - $(srcdir)/util/rbtree.h + $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.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/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h winsock_event.lo winsock_event.o: $(srcdir)/util/winsock_event.c config.h autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/validator/autotrust.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ @@ -885,11 +893,10 @@ autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/val $(srcdir)/validator/val_sigcrypt.h $(srcdir)/util/data/dname.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/net_help.h $(srcdir)/util/config_file.h $(srcdir)/util/regional.h $(srcdir)/util/random.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.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)/services/mesh.h $(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 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)/validator/autotrust.h \ @@ -904,8 +911,8 @@ validator.lo validator.o: $(srcdir)/validator/validator.c config.h $(srcdir)/val $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_neg.h $(srcdir)/validator/val_sigcrypt.h \ $(srcdir)/validator/autotrust.h $(srcdir)/services/cache/dns.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/net_help.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/sldns/wire2str.h + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/sldns/wire2str.h val_kcache.lo val_kcache.o: $(srcdir)/validator/val_kcache.c config.h $(srcdir)/validator/val_kcache.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/validator/val_kentry.h $(srcdir)/util/config_file.h $(srcdir)/util/data/dname.h \ @@ -914,15 +921,13 @@ 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)/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 + $(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)/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 \ $(srcdir)/util/rbtree.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/validator.h \ @@ -938,16 +943,14 @@ 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)/validator/val_secalgo.h $(srcdir)/validator/validator.h \ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.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)/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)/validator/validator.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ @@ -961,30 +964,39 @@ dns64.lo dns64.o: $(srcdir)/dns64/dns64.c config.h $(srcdir)/dns64/dns64.h $(src $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/services/cache/dns.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/util/storage/slabhash.h $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/regional.h -cachedb.lo cachedb.o: $(srcdir)/cachedb/cachedb.c config.h $(srcdir)/cachedb/cachedb.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/regional.h $(srcdir)/util/net_help.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/data/msgencode.h $(srcdir)/services/cache/dns.h $(srcdir)/validator/val_neg.h \ - $(srcdir)/util/rbtree.h $(srcdir)/validator/val_secalgo.h $(srcdir)/iterator/iter_utils.h \ - $(srcdir)/iterator/iter_resptype.h $(srcdir)/sldns/parseutil.h $(srcdir)/sldns/wire2str.h \ - $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/regional.h +edns-subnet.lo edns-subnet.o: $(srcdir)/edns-subnet/edns-subnet.c config.h \ + $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h +subnetmod.lo subnetmod.o: $(srcdir)/edns-subnet/subnetmod.c config.h $(srcdir)/edns-subnet/subnetmod.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)/services/outbound_list.h $(srcdir)/util/alloc.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/addrtree.h \ + $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/edns-subnet/subnet-whitelist.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h $(srcdir)/services/mesh.h $(srcdir)/util/netevent.h \ + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/services/modstack.h \ + $(srcdir)/services/cache/dns.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/sldns/sbuffer.h +addrtree.lo addrtree.o: $(srcdir)/edns-subnet/addrtree.c config.h $(srcdir)/util/log.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/edns-subnet/addrtree.h +subnet-whitelist.lo subnet-whitelist.o: $(srcdir)/edns-subnet/subnet-whitelist.c config.h \ + $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h \ + $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/regional.h $(srcdir)/util/config_file.h +cachedb.lo cachedb.o: $(srcdir)/cachedb/cachedb.c config.h respip.lo respip.o: $(srcdir)/respip/respip.c config.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)/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)/dnscrypt/cert.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 + $(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 -dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.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)/dnscrypt/cert.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 @@ -993,15 +1005,14 @@ 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 \ - $(srcdir)/util/log.h \ - $(srcdir)/testcode/unitmain.h $(srcdir)/util/alloc.h $(srcdir)/util/locks.h $(srcdir)/util/net_help.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)/services/cache/infra.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rbtree.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/random.h $(srcdir)/respip/respip.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/services/localzone.h $(srcdir)/services/view.h + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/random.h \ + $(srcdir)/respip/respip.h $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ + $(srcdir)/services/localzone.h $(srcdir)/services/view.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 \ @@ -1032,123 +1043,125 @@ testpkts.lo testpkts.o: $(srcdir)/testcode/testpkts.c config.h $(srcdir)/testcod $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h unitldns.lo unitldns.o: $(srcdir)/testcode/unitldns.c config.h $(srcdir)/util/log.h $(srcdir)/testcode/unitmain.h \ $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h +unitecs.lo unitecs.o: $(srcdir)/testcode/unitecs.c config.h $(srcdir)/util/log.h $(srcdir)/util/module.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.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)/testcode/unitmain.h $(srcdir)/edns-subnet/addrtree.h \ + $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/services/outbound_list.h $(srcdir)/util/alloc.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/edns-subnet.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)/dnscrypt/cert.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)/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 \ +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)/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)/dnscrypt/cert.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)/util/module.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.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)/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)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h \ $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/services/localzone.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)/dnscrypt/cert.h $(srcdir)/util/alloc.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)/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)/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)/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)/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)/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)/dnscrypt/cert.h $(srcdir)/util/alloc.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ - $(srcdir)/services/modstack.h $(srcdir)/services/mesh.h \ - $(srcdir)/util/rbtree.h $(srcdir)/services/outside_network.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h \ - $(srcdir)/validator/val_utils.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)/validator/val_kcache.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)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/listen_dnsport.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.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)/validator/val_kcache.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)/dnscrypt/cert.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 \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.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)/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/mesh.h $(srcdir)/services/localzone.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)/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/mesh.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)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/respip/respip.h $(srcdir)/libunbound/context.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h \ $(srcdir)/util/shm_side/shm_main.h 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)/dnscrypt/cert.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)/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 $(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)/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)/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 \ + $(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 testpkts.lo testpkts.o: $(srcdir)/testcode/testpkts.c config.h $(srcdir)/testcode/testpkts.h \ $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.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 \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.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)/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/mesh.h $(srcdir)/services/localzone.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)/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/mesh.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)/iterator/iter_fwd.h $(srcdir)/iterator/iter_hints.h $(srcdir)/validator/autotrust.h \ $(srcdir)/validator/val_anchor.h $(srcdir)/respip/respip.h $(srcdir)/libunbound/context.h \ @@ -1160,14 +1173,13 @@ acl_list.lo acl_list.o: $(srcdir)/daemon/acl_list.c config.h $(srcdir)/daemon/ac $(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)/dnscrypt/cert.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)/util/module.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.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)/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)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h \ @@ -1176,23 +1188,22 @@ daemon.lo daemon.o: $(srcdir)/daemon/daemon.c config.h \ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.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)/dnscrypt/cert.h $(srcdir)/util/alloc.h \ - $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ - $(srcdir)/util/module.h $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/daemon.h \ - $(srcdir)/services/modstack.h $(srcdir)/services/mesh.h \ - $(srcdir)/util/rbtree.h $(srcdir)/services/outside_network.h $(srcdir)/services/listen_dnsport.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h \ - $(srcdir)/validator/val_utils.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)/validator/val_kcache.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)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/services/outside_network.h $(srcdir)/services/listen_dnsport.h $(srcdir)/util/config_file.h \ + $(srcdir)/util/tube.h $(srcdir)/util/net_help.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.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)/validator/val_kcache.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)/dnscrypt/cert.h $(srcdir)/testcode/testpkts.h $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h \ - $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h + $(srcdir)/testcode/testpkts.h $(srcdir)/util/rbtree.h \ + $(srcdir)/testcode/fake_event.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h fake_event.lo fake_event.o: $(srcdir)/testcode/fake_event.c config.h $(srcdir)/testcode/fake_event.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h $(srcdir)/util/net_help.h \ - $(srcdir)/util/log.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 \ + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/log.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 \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/dname.h \ $(srcdir)/util/config_file.h $(srcdir)/services/listen_dnsport.h $(srcdir)/services/outside_network.h \ $(srcdir)/util/rbtree.h $(srcdir)/services/cache/infra.h \ @@ -1201,7 +1212,7 @@ fake_event.lo fake_event.o: $(srcdir)/testcode/fake_event.c config.h $(srcdir)/t $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/str2wire.h lock_verify.lo lock_verify.o: $(srcdir)/testcode/lock_verify.c config.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ + $(srcdir)/util/storage/lruhash.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/tube.h $(srcdir)/services/mesh.h \ $(srcdir)/services/modstack.h @@ -1213,7 +1224,7 @@ readhex.lo readhex.o: $(srcdir)/testcode/readhex.c config.h $(srcdir)/testcode/r $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/parseutil.h memstats.lo memstats.o: $(srcdir)/testcode/memstats.c config.h $(srcdir)/util/log.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/locks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ + $(srcdir)/util/storage/lruhash.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/tube.h $(srcdir)/services/mesh.h \ $(srcdir)/services/modstack.h @@ -1224,14 +1235,14 @@ 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)/respip/respip.h $(srcdir)/sldns/sbuffer.h $(PYTHONMOD_HEADER) + $(srcdir)/services/view.h $(srcdir)/respip/respip.h $(srcdir)/sldns/sbuffer.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)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.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/tube.h \ - $(srcdir)/services/mesh.h + $(srcdir)/dnscrypt/dnscrypt.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/tube.h $(srcdir)/services/mesh.h context.lo context.o: $(srcdir)/libunbound/context.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)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ @@ -1239,7 +1250,8 @@ context.lo context.o: $(srcdir)/libunbound/context.c config.h $(srcdir)/libunbou $(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)/dnscrypt/cert.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ + $(srcdir)/sldns/sbuffer.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 \ @@ -1249,22 +1261,22 @@ libunbound.lo libunbound.o: $(srcdir)/libunbound/libunbound.c $(srcdir)/libunbou $(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)/dnscrypt/cert.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.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/worker.h \ - $(srcdir)/sldns/sbuffer.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/services/outside_network.h \ - $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.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)/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)/util/data/dname.h $(srcdir)/util/data/msgencode.h $(srcdir)/iterator/iter_fwd.h \ - $(srcdir)/iterator/iter_hints.h $(srcdir)/sldns/str2wire.h + $(srcdir)/services/cache/rrset.h \ + $(srcdir)/util/storage/slabhash.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/worker.h $(srcdir)/sldns/sbuffer.h \ + $(srcdir)/libunbound/unbound-event.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)/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)/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 asynclook.lo asynclook.o: $(srcdir)/testcode/asynclook.c config.h $(srcdir)/libunbound/unbound.h \ @@ -1275,40 +1287,34 @@ streamtcp.lo streamtcp.o: $(srcdir)/testcode/streamtcp.c config.h $(srcdir)/util $(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 \ +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)/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)/dnscrypt/cert.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)/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 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 \ $(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)/dnscrypt/cert.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)/util/module.h \ - $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h \ - $(srcdir)/util/config_file.h $(srcdir)/util/ub_event.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)/util/module.h $(srcdir)/dnstap/dnstap.h \ + $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h $(srcdir)/util/ub_event.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 @@ -1316,14 +1322,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 @@ -1343,11 +1346,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/config.h.in b/config.h.in index 3c973e949..eacbc7f69 100644 --- a/config.h.in +++ b/config.h.in @@ -3,6 +3,9 @@ /* Directory to chroot to */ #undef CHROOT_DIR +/* Define this to enable client subnet option. */ +#undef CLIENT_SUBNET + /* Do sha512 definitions in config.h */ #undef COMPAT_SHA512 diff --git a/configure b/configure index 8481a5f38..a2a1a4410 100755 --- a/configure +++ b/configure @@ -674,6 +674,8 @@ staticexe PC_LIBEVENT_DEPENDENCY UNBOUND_EVENT_UNINSTALL UNBOUND_EVENT_INSTALL +SUBNET_HEADER +SUBNET_OBJ SSLLIB HAVE_SSL CONFIG_DATE @@ -788,6 +790,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -845,6 +848,7 @@ with_nettle with_ssl enable_sha1 enable_sha2 +enable_subnet enable_gost enable_ecdsa enable_dsa @@ -924,6 +928,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1176,6 +1181,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1313,7 +1327,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1466,6 +1480,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1524,6 +1539,7 @@ Optional Features: --disable-sha1 Disable SHA1 RRSIG support, does not disable nsec3 support --disable-sha2 Disable SHA256 and SHA512 RRSIG support + --enable-subnet Enable client subnet --disable-gost Disable GOST support --disable-ecdsa Disable ECDSA support --disable-dsa Disable DSA support @@ -7895,7 +7911,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; -netbsd*) +netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else @@ -11360,6 +11376,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie openbsd* | bitrig*) with_gnu_ld=no ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; esac ld_shlibs=yes @@ -11614,7 +11633,7 @@ _LT_EOF fi ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= @@ -12284,6 +12303,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi + link_all_deplibs=no else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' @@ -12305,7 +12325,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } esac ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else @@ -13400,9 +13420,6 @@ fi # before this can be enabled. hardcode_into_libs=yes - # Add ABI-specific directories to the system library path. - sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" - # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command @@ -13411,7 +13428,7 @@ fi # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on @@ -13423,6 +13440,18 @@ fi dynamic_linker='GNU/Linux ld.so' ;; +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + netbsd*) version_type=sunos need_lib_prefix=no @@ -15335,7 +15364,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15381,7 +15410,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15405,7 +15434,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15450,7 +15479,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -15474,7 +15503,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -17750,6 +17779,25 @@ $as_echo "#define USE_SHA2 1" >>confdefs.h ;; esac +# Check whether --enable-subnet was given. +if test "${enable_subnet+set}" = set; then : + enableval=$enable_subnet; +fi + +case "$enable_subnet" in + yes) + +$as_echo "#define CLIENT_SUBNET 1" >>confdefs.h + + SUBNET_OBJ="edns-subnet.lo subnetmod.lo addrtree.lo subnet-whitelist.lo" + + SUBNET_HEADER='$(srcdir)/edns-subnet/subnetmod.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/edns-subnet/addrtree.h' + + ;; + no|*) + ;; +esac + # check wether gost also works # Check whether --enable-gost was given. @@ -22042,7 +22090,6 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. diff --git a/configure.ac b/configure.ac index c50a070de..665747407 100644 --- a/configure.ac +++ b/configure.ac @@ -730,6 +730,19 @@ case "$enable_sha2" in ;; esac +AC_ARG_ENABLE(subnet, AC_HELP_STRING([--enable-subnet], [Enable client subnet])) +case "$enable_subnet" in + yes) + AC_DEFINE([CLIENT_SUBNET], [1], [Define this to enable client subnet option.]) + SUBNET_OBJ="edns-subnet.lo subnetmod.lo addrtree.lo subnet-whitelist.lo" + AC_SUBST(SUBNET_OBJ) + SUBNET_HEADER='$(srcdir)/edns-subnet/subnetmod.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/edns-subnet/subnet-whitelist.h $(srcdir)/edns-subnet/addrtree.h' + AC_SUBST(SUBNET_HEADER) + ;; + no|*) + ;; +esac + # check wether gost also works AC_DEFUN([AC_CHECK_GOST_WORKS], [AC_REQUIRE([AC_PROG_CC]) diff --git a/doc/Changelog b/doc/Changelog index 3cf0f4197..a6c52be93 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +21 March 2017: Ralph + - Merge EDNS Client subnet implementation from feature branch into main + branch, using new EDNS processing framework. + 21 March 2017: Wouter - Fix doxygen for dnscrypt files. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 772032cd0..e937b824b 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1476,6 +1476,43 @@ times. .B dnscrypt\-provider\-cert: \fI\fR Path to the certificate related to the \fBdnscrypt\-secret\-key\fRs. This option may be specified multiple times. +.SS "EDNS Client Subnet Module Options" +.LP +The ECS module must be configured in the \fBmodule\-config:\fR "subnetcache +validator iterator" directive and be compiled into the daemon to be +enabled. These settings go in the \fBserver:\fR section. +.LP +If the destination address is whitelisted with Unbound will add the EDNS0 option +to the query containing the relevant part of the client's address. When an +answer contains the ECS option the response and the option are placed in a +specialized cache. If the authority indicated no support, the response is stored +in the regular cache. +.LP +Additionally, when a client includes the option in its queries, Unbound will +forward the option to the authority regardless of the authorities presence in +the whitelist. In this case the lookup in the regular cache is skipped. +.LP +The maximum size of the ECS cache is controlled by 'msg-cache-size' in the +configuration file. On top of that, for each query only 100 different subnets +are allowed to be stored for each address family. Exceeding that number, older +entries will be purged from cache. +.TP +.B send\-client\-subnet: \fI\fR +Send client source address to this authority. Append /num to indicate a +classless delegation netblock, for example like 10.2.3.4/24 or 2001::11/64. Can +be given multiple times. Authorities not listed will not receive edns-subnet +information. +.TP +.B client\-subnet\-opcode: \fI\fR +Specify positive integer smaller than 65536. Defaults to 8. +.TP +.B max\-client\-subnet\-ipv6: \fI\fR +Specifies the maximum prefix length of the client source address we are willing +to expose to third parties for IPv6. Defaults to 64. +.TP +.B max\-clienti-subnet\-ipv4: \fI\fR +Specifies the maximum prefix length of the client source address we are willing +to expose to third parties for IPv4. Defaults to 24. .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 diff --git a/edns-subnet/addrtree.c b/edns-subnet/addrtree.c new file mode 100644 index 000000000..948c4f58a --- /dev/null +++ b/edns-subnet/addrtree.c @@ -0,0 +1,531 @@ +/* + * edns-subnet/addrtree.c -- radix tree for edns subnet cache. + * + * Copyright (c) 2013, 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 + * addrtree -- radix tree for edns subnet cache. + */ + +#include "config.h" +#include "util/log.h" +#include "util/data/msgreply.h" +#include "util/module.h" +#include "addrtree.h" + +/** + * Create a new edge + * @param node: Child node this edge will connect to. + * @param addr: full key to this edge. + * @param addrlen: length of relevant part of key for this node + * @param parent_node: Parent node for node + * @param parent_index: Index of child node at parent node + * @return new addredge or NULL on failure + */ +static struct addredge * +edge_create(struct addrnode *node, const addrkey_t *addr, + addrlen_t addrlen, struct addrnode *parent_node, int parent_index) +{ + size_t n; + struct addredge *edge = (struct addredge *)malloc( sizeof (*edge) ); + if (!edge) + return NULL; + edge->node = node; + edge->len = addrlen; + edge->parent_index = parent_index; + edge->parent_node = parent_node; + /* ceil() */ + n = (size_t)((addrlen / KEYWIDTH) + ((addrlen % KEYWIDTH != 0)?1:0)); + edge->str = (addrkey_t *)calloc(n, sizeof (addrkey_t)); + if (!edge->str) { + free(edge); + return NULL; + } + memcpy(edge->str, addr, n * sizeof (addrkey_t)); + /* Only manipulate other objects after successful alloc */ + node->parent_edge = edge; + log_assert(parent_node->edge[parent_index] == NULL); + parent_node->edge[parent_index] = edge; + return edge; +} + +/** + * Create a new node + * @param tree: Tree the node lives in. + * @param elem: Element to store at this node + * @param scope: Scopemask from server reply + * @param ttl: Element is valid up to this time. Absolute, seconds + * @return new addrnode or NULL on failure + */ +static struct addrnode * +node_create(struct addrtree *tree, void *elem, addrlen_t scope, + time_t ttl) +{ + struct addrnode* node = (struct addrnode *)malloc( sizeof (*node) ); + if (!node) + return NULL; + node->elem = elem; + tree->node_count++; + node->scope = scope; + node->ttl = ttl; + node->edge[0] = NULL; + node->edge[1] = NULL; + node->parent_edge = NULL; + node->next = NULL; + node->prev = NULL; + return node; +} + +/** Size in bytes of node and parent edge + * @param tree: tree the node lives in + * @param n: node which size must be calculated + * @return size in bytes. + **/ +static inline size_t +node_size(const struct addrtree *tree, const struct addrnode *n) +{ + return sizeof *n + sizeof *n->parent_edge + n->parent_edge->len + + (n->elem?tree->sizefunc(n->elem):0); +} + +struct addrtree * +addrtree_create(addrlen_t max_depth, void (*delfunc)(void *, void *), + size_t (*sizefunc)(void *), void *env, unsigned int max_node_count) +{ + struct addrtree *tree; + log_assert(delfunc != NULL); + log_assert(sizefunc != NULL); + tree = (struct addrtree *)malloc( sizeof (*tree) ); + if (!tree) + return NULL; + tree->root = node_create(tree, NULL, 0, 0); + if (!tree->root) { + free(tree); + return NULL; + } + tree->size_bytes = sizeof *tree + sizeof *tree->root; + tree->first = NULL; + tree->last = NULL; + tree->max_depth = max_depth; + tree->delfunc = delfunc; + tree->sizefunc = sizefunc; + tree->env = env; + tree->node_count = 0; + tree->max_node_count = max_node_count; + return tree; +} + +/** + * Scrub a node clean of elem + * @param tree: tree the node lives in. + * @param node: node to be cleaned. + */ +static void +clean_node(struct addrtree *tree, struct addrnode *node) +{ + if (!node->elem) return; + tree->size_bytes -= tree->sizefunc(node->elem); + tree->delfunc(tree->env, node->elem); + node->elem = NULL; +} + +/** Remove specified node from LRU list */ +static void +lru_pop(struct addrtree *tree, struct addrnode *node) +{ + if (node == tree->first) { + if (!node->next) { /* it is the last as well */ + tree->first = NULL; + tree->last = NULL; + } else { + tree->first = node->next; + tree->first->prev = NULL; + } + } else if (node == tree->last) { /* but not the first */ + tree->last = node->prev; + tree->last->next = NULL; + } else { + node->prev->next = node->next; + node->next->prev = node->prev; + } +} + +/** Add node to LRU list as most recently used. */ +static void +lru_push(struct addrtree *tree, struct addrnode *node) +{ + if (!tree->first) { + tree->first = node; + node->prev = NULL; + } else { + tree->last->next = node; + node->prev = tree->last; + } + tree->last = node; + node->next = NULL; +} + +/** Move node to the end of LRU list */ +static void +lru_update(struct addrtree *tree, struct addrnode *node) +{ + if (tree->root == node) return; + lru_pop(tree, node); + lru_push(tree, node); +} + +/** + * Purge a node from the tree. Node and parentedge are cleaned and + * free'd. + * @param tree: Tree the node lives in. + * @param node: Node to be freed + */ +static void +purge_node(struct addrtree *tree, struct addrnode *node) +{ + struct addredge *parent_edge, *child_edge = NULL; + int index; + int keep = node->edge[0] && node->edge[1]; + + clean_node(tree, node); + parent_edge = node->parent_edge; + if (keep || !parent_edge) return; + tree->node_count--; + index = parent_edge->parent_index; + child_edge = node->edge[!node->edge[0]]; + if (child_edge) { + child_edge->parent_node = parent_edge->parent_node; + child_edge->parent_index = index; + } + parent_edge->parent_node->edge[index] = child_edge; + tree->size_bytes -= node_size(tree, node); + free(parent_edge->str); + free(parent_edge); + lru_pop(tree, node); + free(node); +} + +/** + * If a limit is set remove old nodes while above that limit. + * @param tree: Tree to be cleaned up. + */ +static void +lru_cleanup(struct addrtree *tree) +{ + struct addrnode *n, *p; + int children; + if (tree->max_node_count == 0) return; + while (tree->node_count > tree->max_node_count) { + n = tree->first; + if (!n) break; + children = (n->edge[0] != NULL) + (n->edge[1] != NULL); + /** Don't remove this node, it is either the root or we can't + * do without it because it has 2 children */ + if (children == 2 || !n->parent_edge) { + lru_update(tree, n); + continue; + } + p = n->parent_edge->parent_node; + purge_node(tree, n); + /** Since we removed n, n's parent p is eligible for deletion + * if it is not the root node, caries no data and has only 1 + * child */ + children = (p->edge[0] != NULL) + (p->edge[1] != NULL); + if (!p->elem && children == 1 && p->parent_edge) { + purge_node(tree, p); + } + } +} + +inline size_t +addrtree_size(const struct addrtree *tree) +{ + return tree?tree->size_bytes:0; +} + +void addrtree_delete(struct addrtree *tree) +{ + struct addrnode *n; + if (!tree) return; + clean_node(tree, tree->root); + free(tree->root); + tree->size_bytes -= sizeof(struct addrnode); + while ((n = tree->first)) { + tree->first = n->next; + clean_node(tree, n); + tree->size_bytes -= node_size(tree, n); + free(n->parent_edge->str); + free(n->parent_edge); + free(n); + } + log_assert(sizeof *tree == addrtree_size(tree)); + free(tree); +} + +/** + * Get N'th bit from address + * @param addr: address to inspect + * @param addrlen: length of addr in bits + * @param n: index of bit to test. Must be in range [0, addrlen) + * @return 0 or 1 + */ +static int +getbit(const addrkey_t *addr, addrlen_t addrlen, addrlen_t n) +{ + log_assert(addrlen > n); + return (int)(addr[n/KEYWIDTH]>>((KEYWIDTH-1)-(n%KEYWIDTH))) & 1; +} + +/** + * Test for equality on N'th bit. + * @return 0 for equal, 1 otherwise + */ +static inline int +cmpbit(const addrkey_t *key1, const addrkey_t *key2, addrlen_t n) +{ + addrkey_t c = key1[n/KEYWIDTH] ^ key2[n/KEYWIDTH]; + return (int)(c >> ((KEYWIDTH-1)-(n%KEYWIDTH))) & 1; +} + +/** + * Common number of bits in prefix. + * @param s1: first prefix. + * @param l1: length of s1 in bits. + * @param s2: second prefix. + * @param l2: length of s2 in bits. + * @param skip: nr of bits already checked. + * @return common number of bits. + */ +static addrlen_t +bits_common(const addrkey_t *s1, addrlen_t l1, + const addrkey_t *s2, addrlen_t l2, addrlen_t skip) +{ + addrlen_t len, i; + len = (l1 > l2) ? l2 : l1; + log_assert(skip < len); + for (i = skip; i < len; i++) { + if (cmpbit(s1, s2, i)) return i; + } + return len; +} + +/** + * Tests if s1 is a substring of s2 + * @param s1: first prefix. + * @param l1: length of s1 in bits. + * @param s2: second prefix. + * @param l2: length of s2 in bits. + * @param skip: nr of bits already checked. + * @return 1 for substring, 0 otherwise + */ +static int +issub(const addrkey_t *s1, addrlen_t l1, + const addrkey_t *s2, addrlen_t l2, addrlen_t skip) +{ + return bits_common(s1, l1, s2, l2, skip) == l1; +} + +void +addrtree_insert(struct addrtree *tree, const addrkey_t *addr, + addrlen_t sourcemask, addrlen_t scope, void *elem, time_t ttl, + time_t now) +{ + struct addrnode *newnode, *node; + struct addredge *edge; + int index; + addrlen_t common, depth; + + node = tree->root; + log_assert(node != NULL); + + /* Protect our cache against too much fine-grained data */ + if (tree->max_depth < scope) scope = tree->max_depth; + /* Server answer was less specific than question */ + if (scope < sourcemask) sourcemask = scope; + + depth = 0; + while (1) { + log_assert(depth <= sourcemask); + /* Case 1: update existing node */ + if (depth == sourcemask) { + /* update this node's scope and data */ + clean_node(tree, node); + node->ttl = ttl; + node->elem = elem; + node->scope = scope; + tree->size_bytes += tree->sizefunc(elem); + return; + } + index = getbit(addr, sourcemask, depth); + /* Get an edge to an unexpired node */ + edge = node->edge[index]; + while (edge) { + /* Purge all expired nodes on path */ + if (!edge->node->elem || edge->node->ttl >= now) + break; + purge_node(tree, edge->node); + edge = node->edge[index]; + } + /* Case 2: New leafnode */ + if (!edge) { + newnode = node_create(tree, elem, scope, ttl); + if (!newnode) return; + if (!edge_create(newnode, addr, sourcemask, node, + index)) { + clean_node(tree, newnode); + tree->node_count--; + free(newnode); + return; + } + tree->size_bytes += node_size(tree, newnode); + lru_push(tree, newnode); + lru_cleanup(tree); + return; + } + /* Case 3: Traverse edge */ + common = bits_common(edge->str, edge->len, addr, sourcemask, + depth); + if (common == edge->len) { + /* We update the scope of intermediate nodes. Apparently + * the * authority changed its mind. If we would not do + * this we might not be able to reach our new node. */ + node->scope = scope; + depth = edge->len; + node = edge->node; + continue; + } + /* Case 4: split. */ + if (!(newnode = node_create(tree, NULL, 0, 0))) + return; + node->edge[index] = NULL; + if (!edge_create(newnode, addr, common, node, index)) { + node->edge[index] = edge; + clean_node(tree, newnode); + tree->node_count--; + free(newnode); + return; + } + lru_push(tree, newnode); + /* connect existing child to our new node */ + index = getbit(edge->str, edge->len, common); + newnode->edge[index] = edge; + edge->parent_node = newnode; + edge->parent_index = (int)index; + + if (common == sourcemask) { + /* Data is stored in the node */ + newnode->elem = elem; + newnode->scope = scope; + newnode->ttl = ttl; + } + + tree->size_bytes += node_size(tree, newnode); + + if (common != sourcemask) { + /* Data is stored in other leafnode */ + node = newnode; + newnode = node_create(tree, elem, scope, ttl); + if (!edge_create(newnode, addr, sourcemask, node, + index^1)) { + clean_node(tree, newnode); + tree->node_count--; + free(newnode); + return; + } + tree->size_bytes += node_size(tree, newnode); + lru_push(tree, newnode); + } + lru_cleanup(tree); + return; + } +} + +struct addrnode * +addrtree_find(struct addrtree *tree, const addrkey_t *addr, + addrlen_t sourcemask, time_t now) +{ + struct addrnode *node = tree->root; + struct addredge *edge = NULL; + addrlen_t depth = 0; + + log_assert(node != NULL); + while (1) { + /* Current node more specific then question. */ + log_assert(depth <= sourcemask); + /* does this node have data? if yes, see if we have a match */ + if (node->elem && node->ttl >= now) { + /* saved at wrong depth */; + log_assert(node->scope >= depth) + if (depth == node->scope || + (node->scope > sourcemask && + depth == sourcemask)) { + /* Authority indicates it does not have a more + * precise answer or we cannot ask a more + * specific question. */ + lru_update(tree, node); + return node; + } + } + /* This is our final depth, but we haven't found an answer. */ + if (depth == sourcemask) + return NULL; + /* Find an edge to traverse */ + edge = node->edge[getbit(addr, sourcemask, depth)]; + if (!edge || !edge->node) + return NULL; + if (edge->len > sourcemask ) + return NULL; + if (!issub(edge->str, edge->len, addr, sourcemask, depth)) + return NULL; + log_assert(depth < edge->len); + depth = edge->len; + node = edge->node; + } +} + +/** Wrappers for static functions to unit test */ +int unittest_wrapper_addrtree_cmpbit(const addrkey_t *key1, + const addrkey_t *key2, addrlen_t n) { + return cmpbit(key1, key2, n); +} +addrlen_t unittest_wrapper_addrtree_bits_common(const addrkey_t *s1, + addrlen_t l1, const addrkey_t *s2, addrlen_t l2, addrlen_t skip) { + return bits_common(s1, l1, s2, l2, skip); +} +int unittest_wrapper_addrtree_getbit(const addrkey_t *addr, + addrlen_t addrlen, addrlen_t n) { + return getbit(addr, addrlen, n); +} +int unittest_wrapper_addrtree_issub(const addrkey_t *s1, addrlen_t l1, + const addrkey_t *s2, addrlen_t l2, addrlen_t skip) { + return issub(s1, l1, s2, l2, skip); +} diff --git a/edns-subnet/addrtree.h b/edns-subnet/addrtree.h new file mode 100644 index 000000000..857e677f9 --- /dev/null +++ b/edns-subnet/addrtree.h @@ -0,0 +1,187 @@ +/* + * edns-subnet/addrtree.h -- radix tree for edns subnet cache. + * + * Copyright (c) 2013, 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 + * The addrtree is a radix tree designed for edns subnet. Most notable + * is the addition of 'scope' to a node. Scope is only relevant for + * nodes with elem set, it indicates the number of bits the authority + * desires. + * + * For retrieving data one needs an address and address length + * (sourcemask). While traversing the tree the first matching node is + * returned. A node matches when + * node.scope<=sourcemask && node.elem!=NULL + * (This is the most specific answer the authority has.) + * or + * node.sourcemask==sourcemask && node.elem!=NULL + * (This is the most specific question the client can ask.) + * + * Insertion needs an address, sourcemask and scope. The length of the + * address is capped by min(sourcemask, scope). While traversing the + * tree the scope of all visited nodes is updated. This ensures we are + * always able to find the most specific answer available. + */ + +#ifndef ADDRTREE_H +#define ADDRTREE_H + +typedef uint8_t addrlen_t; +typedef uint8_t addrkey_t; +#define KEYWIDTH 8 + +struct addrtree { + struct addrnode *root; + /** Number of elements in the tree (not always equal to number of + * nodes) */ + unsigned int node_count; + /** Maximum number of allowed nodes, will be enforced by LRU list. + * Excluding the root node, 0 for unlimited */ + unsigned int max_node_count; + /** Size of tree in bytes */ + size_t size_bytes; + /** Maximum prefix length we are willing to cache. */ + addrlen_t max_depth; + /** External function to delete elem. Called as + * delfunc(addrnode->elem, addrtree->env) */ + void (*delfunc)(void *, void *); + /** Environment for delfunc */ + void *env; + /** External function returning size of elem. Called as + * sizefunc(addrnode->elem) */ + size_t (*sizefunc)(void *); + /** first node in LRU list, first candidate to go */ + struct addrnode* first; + /** last node in LRU list, last candidate to go */ + struct addrnode *last; +}; + +struct addrnode { + /** Payload of node, may be NULL */ + void *elem; + /** Abs time in seconds in which elem is meaningful */ + time_t ttl; + /** Number of significant bits in address. */ + addrlen_t scope; + /** A node can have 0-2 edges, set to NULL for unused */ + struct addredge *edge[2]; + /** edge between this node and parent */ + struct addredge *parent_edge; + /** previous node in LRU list */ + struct addrnode *prev; + /** next node in LRU list */ + struct addrnode *next; +}; + +struct addredge { + /** address of connected node */ + addrkey_t *str; + /** lenght in bits of str */ + addrlen_t len; + /** child node this edge is connected to */ + struct addrnode *node; + /** Parent node this ege is connected to */ + struct addrnode *parent_node; + /** Index of this edge in parent_node */ + int parent_index; +}; + +/** + * Size of tree in bytes. + * @param tree: Tree. + * @return size of tree in bytes. + */ +size_t addrtree_size(const struct addrtree *tree); + +/** + * Create a new tree. + * @param max_depth: Tree will cap keys to this length. + * @param delfunc: f(element, env) delete element. + * @param sizefunc: f(element) returning the size of element. + * @param env: Module environment for alloc information. + * @param max_node_count: Maximum size of this data structure in nodes. + * 0 for unlimited. + * @return new addrtree or NULL on failure. + */ +struct addrtree * +addrtree_create(addrlen_t max_depth, void (*delfunc)(void *, void *), + size_t (*sizefunc)(void *), void *env, unsigned int max_node_count); + +/** + * Free tree and all nodes below. + * @param tree: Tree to be freed. + */ +void addrtree_delete(struct addrtree *tree); + +/** + * Insert an element in the tree. Failures are silent. Sourcemask and + * scope might be changed according to local policy. Caller should no + * longer access elem, it could be free'd now or later during future + * inserts. + * + * @param tree: Tree insert elem in. + * @param addr: key for element lookup. + * @param sourcemask: Length of addr in bits. + * @param scope: Number of significant bits in addr. + * @param elem: data to store in the tree. + * @param ttl: elem is valid up to this time, seconds. + * @param now: Current time in seconds. + */ +void addrtree_insert(struct addrtree *tree, const addrkey_t *addr, + addrlen_t sourcemask, addrlen_t scope, void *elem, time_t ttl, + time_t now); + +/** + * Find a node containing an element in the tree. + * + * @param tree: Tree to search. + * @param addr: key for element lookup. + * @param sourcemask: Length of addr in bits. + * @param now: Current time in seconds. + * @return addrnode or NULL on miss. + */ +struct addrnode * addrtree_find(struct addrtree *tree, + const addrkey_t *addr, addrlen_t sourcemask, time_t now); + +/** Wrappers for static functions to unit test */ +int unittest_wrapper_addrtree_cmpbit(const addrkey_t *key1, + const addrkey_t *key2, addrlen_t n); +addrlen_t unittest_wrapper_addrtree_bits_common(const addrkey_t *s1, + addrlen_t l1, const addrkey_t *s2, addrlen_t l2, addrlen_t skip); +int unittest_wrapper_addrtree_getbit(const addrkey_t *addr, + addrlen_t addrlen, addrlen_t n); +int unittest_wrapper_addrtree_issub(const addrkey_t *s1, addrlen_t l1, + const addrkey_t *s2, addrlen_t l2, addrlen_t skip); +#endif /* ADDRTREE_H */ diff --git a/edns-subnet/edns-subnet.c b/edns-subnet/edns-subnet.c new file mode 100644 index 000000000..1f0e334ce --- /dev/null +++ b/edns-subnet/edns-subnet.c @@ -0,0 +1,70 @@ +/* + * edns-subnet/edns-subnet.c - Subnet option related constants + * + * Copyright (c) 2013, 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 + * Subnet option related constants. + */ + +#include "config.h" + +#ifdef CLIENT_SUBNET /* keeps splint happy */ +#include "edns-subnet/edns-subnet.h" +#include + +/** Opcode for edns subnet option, as assigned by IANA. */ +uint16_t EDNSSUBNET_OPCODE = 8; +uint8_t EDNSSUBNET_MAX_SUBNET_IP4 = 24; +uint8_t EDNSSUBNET_MAX_SUBNET_IP6 = 64; + +int +copy_clear(uint8_t* dst, size_t dstlen, uint8_t* src, size_t srclen, size_t n) +{ + size_t intpart = n / 8; /* bytes */ + size_t fracpart = n % 8; /* bits */ + size_t written = intpart; + if (intpart > dstlen || intpart > srclen) + return 1; + if (fracpart && (intpart+1 > dstlen || intpart+1 > srclen)) + return 1; + memcpy(dst, src, intpart); + if (fracpart) { + dst[intpart] = src[intpart] & ~(0xFF >> fracpart); + written++; + } + memset(dst + written, 0, dstlen - written); + return 0; +} + +#endif /* CLIENT_SUBNET */ diff --git a/edns-subnet/edns-subnet.h b/edns-subnet/edns-subnet.h new file mode 100644 index 000000000..6111f62e7 --- /dev/null +++ b/edns-subnet/edns-subnet.h @@ -0,0 +1,73 @@ +/* + * edns-subnet/edns-subnet.h - Subnet option related constants + * + * Copyright (c) 2013, 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 + * Subnet option related constants. + */ + +#include "util/net_help.h" + +#ifndef EDNSSUBNET_EDNSSUBNET_H +#define EDNSSUBNET_EDNSSUBNET_H + +/** In use by the edns subnet option code, as assigned by IANA */ +#define EDNSSUBNET_ADDRFAM_IP4 1 +#define EDNSSUBNET_ADDRFAM_IP6 2 + +/** Opcode for edns subnet option */ +extern uint16_t EDNSSUBNET_OPCODE; +/** Maximum number of bits we are willing to expose */ +extern uint8_t EDNSSUBNET_MAX_SUBNET_IP4; +extern uint8_t EDNSSUBNET_MAX_SUBNET_IP6; + +/** + * ECS option + */ +struct ecs_data { + uint16_t subnet_addr_fam; + uint8_t subnet_source_mask; + uint8_t subnet_scope_mask; + uint8_t subnet_addr[INET6_SIZE]; + int subnet_validdata; +}; + +/** + * copy the first n BITS from src to dst iff both src and dst + * are large enough, return 0 on succes + */ +int +copy_clear(uint8_t* dst, size_t dstlen, uint8_t* src, size_t srclen, size_t n); + +#endif /* EDNSSUBNET_EDNSSUBNET_H */ diff --git a/edns-subnet/subnet-whitelist.c b/edns-subnet/subnet-whitelist.c new file mode 100644 index 000000000..1cfdb4be3 --- /dev/null +++ b/edns-subnet/subnet-whitelist.c @@ -0,0 +1,153 @@ +/* + * edns-subnet/subnet-whitelist.c - Hosts we actively try to send subnet option + * to. + * + * Copyright (c) 2013, 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 + * + * Keep track of the white listed servers for subnet option. Based + * on acl_list.c|h + */ + +#include "config.h" + +#ifdef CLIENT_SUBNET /* keeps splint happy */ +#include "edns-subnet/edns-subnet.h" +#include "edns-subnet/subnet-whitelist.h" +#include "util/regional.h" +#include "util/log.h" +#include "util/config_file.h" +#include "util/net_help.h" +#include "util/storage/dnstree.h" + +struct ednssubnet_upstream* +upstream_create(void) +{ + struct ednssubnet_upstream* upstream = + (struct ednssubnet_upstream*)calloc(1, + sizeof(struct ednssubnet_upstream)); + if(!upstream) + return NULL; + upstream->region = regional_create(); + if(!upstream->region) { + upstream_delete(upstream); + return NULL; + } + return upstream; +} + +void +upstream_delete(struct ednssubnet_upstream* upstream) +{ + if(!upstream) + return; + regional_destroy(upstream->region); + free(upstream); +} + +/** insert new address into upstream structure */ +static int +upstream_insert(struct ednssubnet_upstream* upstream, + struct sockaddr_storage* addr, socklen_t addrlen, int net) +{ + struct addr_tree_node* node = (struct addr_tree_node*)regional_alloc( + upstream->region, sizeof(*node)); + if(!node) + return 0; + if(!addr_tree_insert(&upstream->tree, node, addr, addrlen, net)) { + verbose(VERB_QUERY, + "duplicate send-client-subnet address ignored."); + } + return 1; +} + +/** apply edns-subnet string */ +static int +upstream_str_cfg(struct ednssubnet_upstream* upstream, const char* str) +{ + struct sockaddr_storage addr; + int net; + socklen_t addrlen; + verbose(VERB_ALGO, "send-client-subnet: %s", str); + if(!netblockstrtoaddr(str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) { + log_err("cannot parse send-client-subnet netblock: %s", str); + return 0; + } + if(!upstream_insert(upstream, &addr, addrlen, net)) { + log_err("out of memory"); + return 0; + } + return 1; +} + +/** read client_subnet config */ +static int +read_upstream(struct ednssubnet_upstream* upstream, struct config_file* cfg) +{ + struct config_strlist* p; + for(p = cfg->client_subnet; p; p = p->next) { + log_assert(p->str); + if(!upstream_str_cfg(upstream, p->str)) + return 0; + } + return 1; +} + +int +upstream_apply_cfg(struct ednssubnet_upstream* upstream, + struct config_file* cfg) +{ + regional_free_all(upstream->region); + addr_tree_init(&upstream->tree); + if(!read_upstream(upstream, cfg)) + return 0; + addr_tree_init_parents(&upstream->tree); + return 1; +} + +int +upstream_is_whitelisted(struct ednssubnet_upstream* upstream, + struct sockaddr_storage* addr, socklen_t addrlen) +{ + return addr_tree_lookup(&upstream->tree, addr, addrlen) != NULL; +} + +size_t +upstream_get_mem(struct ednssubnet_upstream* upstream) +{ + if(!upstream) return 0; + return sizeof(*upstream) + regional_get_mem(upstream->region); +} + +#endif /* CLIENT_SUBNET */ diff --git a/edns-subnet/subnet-whitelist.h b/edns-subnet/subnet-whitelist.h new file mode 100644 index 000000000..c08b40d86 --- /dev/null +++ b/edns-subnet/subnet-whitelist.h @@ -0,0 +1,102 @@ +/* + * edns-subnet/subnet-whitelist.h - Hosts we actively try to send subnet option + * to. + * + * Copyright (c) 2013, 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 + * + * Keep track of the white listed servers for subnet option. Based + * on acl_list.c|h + */ + +#ifndef EDNSSUBNET_WHITELIST_H +#define EDNSSUBNET_WHITELIST_H +#include "util/storage/dnstree.h" + +struct config_file; +struct regional; + +/** + * ednssubnet_upstream structure + */ +struct ednssubnet_upstream { + /** regional for allocation */ + struct regional* region; + /** + * Tree of the address spans that are whitelisted. + * contents of type addr_tree_node. Each node is an address span + * Unbound will append subnet option for. + */ + rbtree_type tree; +}; + +/** + * Create ednssubnet_upstream structure + * @return new structure or NULL on error. + */ +struct ednssubnet_upstream* upstream_create(void); + +/** + * Delete ednssubnet_upstream structure. + * @param upstream: to delete. + */ +void upstream_delete(struct ednssubnet_upstream* upstream); + +/** + * Process ednssubnet_upstream config. + * @param upstream: where to store. + * @param cfg: config options. + * @return 0 on error. + */ +int upstream_apply_cfg(struct ednssubnet_upstream* upstream, + struct config_file* cfg); + +/** + * See if an address is whitelisted. + * @param upstream: structure for address storage. + * @param addr: address to check + * @param addrlen: length of addr. + * @return: true if the address is whitelisted for subnet option. + */ +int upstream_is_whitelisted(struct ednssubnet_upstream* upstream, + struct sockaddr_storage* addr, socklen_t addrlen); + +/** + * Get memory used by ednssubnet_upstream structure. + * @param upstream: structure for address storage. + * @return bytes in use. + */ +size_t upstream_get_mem(struct ednssubnet_upstream* upstream); + +#endif /* EDNSSUBNET_WHITELIST_H */ diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c new file mode 100644 index 000000000..1ae851ba7 --- /dev/null +++ b/edns-subnet/subnetmod.c @@ -0,0 +1,755 @@ +/* + * edns-subnet/subnetmod.c - edns subnet module. Must be called before validator + * and iterator. + * + * Copyright (c) 2013, 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 + * subnet module for unbound. + */ + +#include "config.h" + +#ifdef CLIENT_SUBNET /* keeps splint happy */ + +#include "edns-subnet/subnetmod.h" +#include "edns-subnet/edns-subnet.h" +#include "edns-subnet/addrtree.h" +#include "edns-subnet/subnet-whitelist.h" + +#include "services/mesh.h" +#include "services/cache/dns.h" +#include "util/module.h" +#include "util/regional.h" +#include "util/storage/slabhash.h" +#include "util/config_file.h" +#include "util/data/msgreply.h" +#include "sldns/sbuffer.h" + +#define ECS_MAX_TREESIZE 100 + +/** externally called */ +void +subnet_data_delete(void *d, void *ATTR_UNUSED(arg)) +{ + struct subnet_msg_cache_data *r; + r = (struct subnet_msg_cache_data*)d; + addrtree_delete(r->tree4); + addrtree_delete(r->tree6); + free(r); +} + +/** externally called */ +size_t +msg_cache_sizefunc(void *k, void *d) +{ + struct msgreply_entry *q = (struct msgreply_entry*)k; + struct subnet_msg_cache_data *r = (struct subnet_msg_cache_data*)d; + size_t s = sizeof(struct msgreply_entry) + + sizeof(struct subnet_msg_cache_data) + + q->key.qname_len + lock_get_mem(&q->entry.lock); + s += addrtree_size(r->tree4); + s += addrtree_size(r->tree6); + return s; +} + +/** new query for ecs module */ +static int +subnet_new_qstate(struct module_qstate *qstate, int id) +{ + struct subnet_qstate *sq = (struct subnet_qstate*)regional_alloc( + qstate->region, sizeof(struct subnet_qstate)); + if(!sq) + return 0; + qstate->minfo[id] = sq; + memset(sq, 0, sizeof(*sq)); + return 1; +} + +/** Add ecs struct to edns list, after parsing it to wire format. */ +static void +ecs_opt_list_append(struct ecs_data* ecs, struct edns_option** list, + struct module_qstate *qstate) +{ + size_t sn_octs, sn_octs_remainder; + sldns_buffer* buf = qstate->env->scratch_buffer; + + if(ecs->subnet_validdata) { + log_assert(ecs->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP4 || + ecs->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP6); + log_assert(ecs->subnet_addr_fam != EDNSSUBNET_ADDRFAM_IP4 || + ecs->subnet_source_mask <= INET_SIZE*8); + log_assert(ecs->subnet_addr_fam != EDNSSUBNET_ADDRFAM_IP6 || + ecs->subnet_source_mask <= INET6_SIZE*8); + + sn_octs = ecs->subnet_source_mask / 8; + sn_octs_remainder = + (size_t)((ecs->subnet_source_mask % 8)>0?1:0); + + log_assert(sn_octs + sn_octs_remainder <= INET6_SIZE); + + sldns_buffer_clear(buf); + sldns_buffer_write_u16(buf, ecs->subnet_addr_fam); + sldns_buffer_write_u8(buf, ecs->subnet_source_mask); + sldns_buffer_write_u8(buf, ecs->subnet_scope_mask); + sldns_buffer_write(buf, ecs->subnet_addr, sn_octs); + if(sn_octs_remainder) + sldns_buffer_write_u8(buf, ecs->subnet_addr[sn_octs] & + ~(0xFF >> (ecs->subnet_source_mask % 8))); + sldns_buffer_flip(buf); + + edns_opt_list_append(list, EDNSSUBNET_OPCODE, + sn_octs + sn_octs_remainder + 4, + sldns_buffer_begin(buf), qstate->region); + } +} + +int ecs_whitelist_check(struct query_info* ATTR_UNUSED(qinfo), + uint16_t ATTR_UNUSED(flags), struct module_qstate* qstate, + struct sockaddr_storage* addr, socklen_t addrlen, + uint8_t* ATTR_UNUSED(zone), size_t ATTR_UNUSED(zonelen), + struct regional* ATTR_UNUSED(region), void* cbargs) +{ + int id = *((int*)cbargs); + struct subnet_qstate *sq; + struct subnet_env *sn_env; + + if(!(sq=(struct subnet_qstate*)qstate->minfo[id])) + return 1; + sn_env = (struct subnet_env*)qstate->env->modinfo[id]; + + /* Cache by default, might be disabled after parsing EDNS option + * received from nameserver. */ + qstate->no_cache_store = 0; + + if(sq->ecs_server_out.subnet_validdata && (sq->subnet_downstream || + upstream_is_whitelisted(sn_env->edns_subnet_upstreams, + addr, addrlen))) { + /* Address on whitelist or client query contains ECS option, we + * want to sent out ECS. Only add option if it is not already + * set. */ + if(!(sq->subnet_sent)) { + ecs_opt_list_append(&sq->ecs_server_out, + &qstate->edns_opts_back_out, qstate); + sq->subnet_sent = 1; + } + } + else if(sq->subnet_sent) { + /* Outgoing ECS option is set, but we don't want to sent it to + * this address, remove option. */ + edns_opt_list_remove(&qstate->edns_opts_back_out, + EDNSSUBNET_OPCODE); + sq->subnet_sent = 0; + } + return 1; +} + + +int +subnetmod_init(struct module_env *env, int id) +{ + struct subnet_env *sn_env = (struct subnet_env*)calloc(1, + sizeof(struct subnet_env)); + if(!sn_env) { + log_err("malloc failure"); + return 0; + } + alloc_init(&sn_env->alloc, NULL, 0); + env->modinfo[id] = (void*)sn_env; + /* Copy msg_cache settings */ + sn_env->subnet_msg_cache = slabhash_create(env->cfg->msg_cache_slabs, + HASH_DEFAULT_STARTARRAY, env->cfg->msg_cache_size, + msg_cache_sizefunc, query_info_compare, query_entry_delete, + subnet_data_delete, NULL); + if(!sn_env->subnet_msg_cache) { + log_err("subnet: could not create cache"); + free(sn_env); + env->modinfo[id] = NULL; + return 0; + } + /* whitelist for edns subnet capable servers */ + sn_env->edns_subnet_upstreams = upstream_create(); + if(!sn_env->edns_subnet_upstreams || + !upstream_apply_cfg(sn_env->edns_subnet_upstreams, env->cfg)) { + log_err("subnet: could not create ECS whitelist"); + slabhash_delete(sn_env->subnet_msg_cache); + free(sn_env); + env->modinfo[id] = NULL; + return 0; + } + + verbose(VERB_QUERY, "subnet: option registered (%d)", EDNSSUBNET_OPCODE); + /* Create new mesh state for all queries. */ + env->unique_mesh = 1; + if(!edns_register_option(EDNSSUBNET_OPCODE, + 1 /* bypass cache */, 0 /* no aggregation */, env)) { + log_err("subnet: could not register opcode"); + upstream_delete(sn_env->edns_subnet_upstreams); + slabhash_delete(sn_env->subnet_msg_cache); + free(sn_env); + env->modinfo[id] = NULL; + return 0; + } + inplace_cb_query_register(ecs_whitelist_check, &id, sizeof(id), env); + inplace_cb_edns_back_parsed_register(ecs_edns_back_parsed, &id, + sizeof(id), env); + lock_rw_init(&sn_env->biglock); + return 1; +} + +void +subnetmod_deinit(struct module_env *env, int id) +{ + struct subnet_env *sn_env; + if(!env || !env->modinfo[id]) + return; + sn_env = (struct subnet_env*)env->modinfo[id]; + lock_rw_destroy(&sn_env->biglock); + inplace_cb_edns_back_parsed_delete(env); + inplace_cb_query_delete(env); + upstream_delete(sn_env->edns_subnet_upstreams); + slabhash_delete(sn_env->subnet_msg_cache); + alloc_clear(&sn_env->alloc); + free(sn_env); + env->modinfo[id] = NULL; +} + +/** Tells client that upstream has no/improper support */ +static void +cp_edns_bad_response(struct ecs_data *target, struct ecs_data *source) +{ + target->subnet_scope_mask = 0; + target->subnet_source_mask = source->subnet_source_mask; + target->subnet_addr_fam = source->subnet_addr_fam; + memcpy(target->subnet_addr, source->subnet_addr, INET6_SIZE); + target->subnet_validdata = 1; +} + +static void +delfunc(void *envptr, void *elemptr) { + struct reply_info *elem = (struct reply_info *)elemptr; + struct subnet_env *env = (struct subnet_env *)envptr; + reply_info_parsedelete(elem, &env->alloc); +} + +static size_t +sizefunc(void *elemptr) { + struct reply_info *elem = (struct reply_info *)elemptr; + return sizeof (struct reply_info) - sizeof (struct rrset_ref) + + elem->rrset_count * sizeof (struct rrset_ref) + + elem->rrset_count * sizeof (struct ub_packed_rrset_key *); +} + +/** + * Select tree from cache entry based on edns data. + * If for address family not present it will create a new one. + * NULL on failure to create. */ +static struct addrtree* +get_tree(struct subnet_msg_cache_data *data, struct ecs_data *edns, + struct subnet_env *env) +{ + struct addrtree *tree; + if (edns->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP4) { + if (!data->tree4) + data->tree4 = addrtree_create(EDNSSUBNET_MAX_SUBNET_IP4, + &delfunc, &sizefunc, env, ECS_MAX_TREESIZE); + tree = data->tree4; + } else { + if (!data->tree6) + data->tree6 = addrtree_create(EDNSSUBNET_MAX_SUBNET_IP6, + &delfunc, &sizefunc, env, ECS_MAX_TREESIZE); + tree = data->tree6; + } + return tree; +} + +static void +update_cache(struct module_qstate *qstate, int id) +{ + struct msgreply_entry *mrep_entry; + struct addrtree *tree; + struct reply_info *rep; + struct query_info qinf; + struct subnet_env *sne = qstate->env->modinfo[id]; + struct subnet_qstate *sq = (struct subnet_qstate*)qstate->minfo[id]; + struct slabhash *subnet_msg_cache = sne->subnet_msg_cache; + struct ecs_data *edns = &sq->ecs_client_in; + size_t i; + + /** We already calculated hash upon lookup */ + hashvalue_type h = qstate->minfo[id] ? + ((struct subnet_qstate*)qstate->minfo[id])->qinfo_hash : + query_info_hash(&qstate->qinfo, qstate->query_flags); + /** Step 1, general qinfo lookup */ + struct lruhash_entry *lru_entry = slabhash_lookup(subnet_msg_cache, h, + &qstate->qinfo, 1); + int acquired_lock = (lru_entry != NULL); + if (!lru_entry) { + qinf = qstate->qinfo; + qinf.qname = memdup(qstate->qinfo.qname, + qstate->qinfo.qname_len); + if(!qinf.qname) { + log_err("memdup failed"); + return; + } + mrep_entry = query_info_entrysetup(&qinf, NULL, h); + free(qinf.qname); /* if qname 'consumed', it is set to NULL */ + if (!mrep_entry) { + log_err("query_info_entrysetup failed"); + return; + } + lru_entry = &mrep_entry->entry; + lru_entry->data = calloc(1, + sizeof(struct subnet_msg_cache_data)); + if (!lru_entry->data) { + log_err("malloc failed"); + return; + } + } + /** Step 2, find the correct tree */ + if (!(tree = get_tree(lru_entry->data, edns, sne))) { + if (acquired_lock) lock_rw_unlock(&lru_entry->lock); + log_err("Subnet cache insertion failed"); + return; + } + rep = reply_info_copy(qstate->return_msg->rep, &sne->alloc, NULL); + if (!rep) { + if (acquired_lock) lock_rw_unlock(&lru_entry->lock); + log_err("Subnet cache insertion failed"); + return; + } + + /* store RRsets */ + for(i=0; irrset_count; i++) { + rep->ref[i].key = rep->rrsets[i]; + rep->ref[i].id = rep->rrsets[i]->id; + } + reply_info_set_ttls(rep, *qstate->env->now); + rep->flags |= (BIT_RA | BIT_QR); /* fix flags to be sensible for */ + rep->flags &= ~(BIT_AA | BIT_CD);/* a reply based on the cache */ + addrtree_insert(tree, (addrkey_t*)edns->subnet_addr, + edns->subnet_source_mask, + sq->ecs_server_in.subnet_scope_mask, rep, + rep->ttl + *qstate->env->now, *qstate->env->now); + if (acquired_lock) { + lock_rw_unlock(&lru_entry->lock); + } else { + slabhash_insert(subnet_msg_cache, h, lru_entry, lru_entry->data, + NULL); + } +} + +/* return true iff reply is sent. */ +static int +lookup_and_reply(struct module_qstate *qstate, int id, struct subnet_qstate *sq) +{ + struct lruhash_entry *e; + struct module_env *env = qstate->env; + struct subnet_env *sne = (struct subnet_env*)env->modinfo[id]; + hashvalue_type h = query_info_hash(&qstate->qinfo, qstate->query_flags); + struct subnet_msg_cache_data *data; + struct ecs_data *ecs = &sq->ecs_client_in; + struct addrtree *tree; + struct addrnode *node; + uint8_t scope; + + memset(&sq->ecs_client_out, 0, sizeof(sq->ecs_client_out)); + + if (sq) sq->qinfo_hash = h; /** Might be useful on cache miss */ + e = slabhash_lookup(sne->subnet_msg_cache, h, &qstate->qinfo, 1); + if (!e) return 0; /** qinfo not in cache */ + data = e->data; + tree = (ecs->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP4)? + data->tree4 : data->tree6; + if (!tree) { /** qinfo in cache but not for this family */ + lock_rw_unlock(&e->lock); + return 0; + } + node = addrtree_find(tree, (addrkey_t*)ecs->subnet_addr, + ecs->subnet_source_mask, *env->now); + if (!node) { /** plain old cache miss */ + lock_rw_unlock(&e->lock); + return 0; + } + + qstate->return_msg = tomsg(env, &qstate->qinfo, + (struct reply_info *)node->elem, qstate->region, *env->now, + env->scratch); + scope = (uint8_t)node->scope; + lock_rw_unlock(&e->lock); + + if (!qstate->return_msg) { /** TTL expired */ + return 0; + } + + if (sq->subnet_downstream) { /* relay to interested client */ + sq->ecs_client_out.subnet_scope_mask = scope; + sq->ecs_client_out.subnet_addr_fam = ecs->subnet_addr_fam; + sq->ecs_client_out.subnet_source_mask = ecs->subnet_source_mask; + memcpy(&sq->ecs_client_out.subnet_addr, &ecs->subnet_addr, + INET6_SIZE); + sq->ecs_client_out.subnet_validdata = 1; + } + return 1; +} + +/** + * Test first bits of addresses for equality. Caller is responsible + * for making sure that both a and b are at least net/8 octets long. + * @param a: first address. + * @param a: seconds address. + * @param net: Number of bits to test. + * @return: 1 if equal, 0 otherwise. + */ +static int +common_prefix(uint8_t *a, uint8_t *b, uint8_t net) +{ + size_t n = (size_t)net / 8; + return !memcmp(a, b, n) && ((net % 8) == 0 || a[n] == b[n]); +} + +static enum module_ext_state +eval_response(struct module_qstate *qstate, int id, struct subnet_qstate *sq) +{ + struct subnet_env *sne = qstate->env->modinfo[id]; + + struct ecs_data *c_in = &sq->ecs_client_in; /* rcvd from client */ + struct ecs_data *c_out = &sq->ecs_client_out;/* will send to client */ + struct ecs_data *s_in = &sq->ecs_server_in; /* rcvd from auth */ + struct ecs_data *s_out = &sq->ecs_server_out;/* sent to auth */ + + memset(c_out, 0, sizeof(*c_out)); + + if (!qstate->return_msg) return module_error; + + /** We have not asked for subnet data */ + if (!sq->subnet_sent) { + if (s_in->subnet_validdata) + verbose(VERB_QUERY, "subnet: received spurious data"); + if (sq->subnet_downstream) /** Copy back to client */ + cp_edns_bad_response(c_out, c_in); + return module_finished; + } + + /** subnet sent but nothing came back */ + if (!s_in->subnet_validdata) { + /** The authority indicated no support for edns subnet. As a + * consequence the answer ended up in the regular cache. It + * is still usefull to put it in the edns subnet cache for + * when a client explicitly asks for subnet specific answer. */ + verbose(VERB_QUERY, "subnet: Authority indicates no support"); + lock_rw_wrlock(&sne->biglock); + update_cache(qstate, id); + lock_rw_unlock(&sne->biglock); + if (sq->subnet_downstream) + cp_edns_bad_response(c_out, c_in); + return module_finished; + } + + /** Being here means we have asked for and got a subnet specific + * answer. Also, the answer from the authority is not yet cached + * anywhere. */ + + /** can we accept response? */ + if(s_out->subnet_addr_fam != s_in->subnet_addr_fam || + s_out->subnet_source_mask != s_in->subnet_source_mask || + !common_prefix(s_out->subnet_addr, s_in->subnet_addr, + s_out->subnet_source_mask)) + { + /** we can not accept, restart query without option */ + verbose(VERB_QUERY, "subnet: forged data"); + s_out->subnet_validdata = 0; + (void)edns_opt_list_remove(&qstate->edns_opts_back_out, + EDNSSUBNET_OPCODE); + sq->subnet_sent = 0; + return module_wait_module; + } + + lock_rw_wrlock(&sne->biglock); + update_cache(qstate, id); + lock_rw_unlock(&sne->biglock); + + if (sq->subnet_downstream) { + /** Client wants to see the answer, echo option back + * and adjust the scope. */ + c_out->subnet_addr_fam = c_in->subnet_addr_fam; + c_out->subnet_source_mask = c_in->subnet_source_mask; + memcpy(&c_out->subnet_addr, &c_in->subnet_addr, INET6_SIZE); + c_out->subnet_scope_mask = s_in->subnet_scope_mask; + c_out->subnet_validdata = 1; + } + return module_finished; +} + +/** Parse EDNS opt data containing ECS */ +static int +parse_subnet_option(struct edns_option* ecs_option, + struct ecs_data* ecs) +{ + memset(ecs, 0, sizeof(*ecs)); + if (ecs_option->opt_len < 4) + return 0; + + ecs->subnet_addr_fam = sldns_read_uint16(ecs_option->opt_data); + ecs->subnet_source_mask = ecs_option->opt_data[2]; + ecs->subnet_scope_mask = ecs_option->opt_data[3]; + /* remaing bytes indicate address */ + + /* validate input*/ + /* option length matches calculated length? */ + if (ecs_option->opt_len != (size_t)((ecs->subnet_source_mask+7)/8 + 4)) + return 0; + if (ecs_option->opt_len - 4 > INET6_SIZE || ecs_option->opt_len == 0) + return 0; + if (ecs->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP4) { + if (ecs->subnet_source_mask > 32 || ecs->subnet_scope_mask > 32) + return 0; + } else if (ecs->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP6) { + if (ecs->subnet_source_mask > 128 || + ecs->subnet_scope_mask > 128) + return 0; + } else + return 0; + + /* valid ECS data, write to ecs_data */ + if (copy_clear(ecs->subnet_addr, INET6_SIZE, ecs_option->opt_data + 4, + ecs_option->opt_len - 4, ecs->subnet_source_mask)) + return 0; + ecs->subnet_validdata = 1; + return 1; +} + +static void +subnet_option_from_ss(struct sockaddr_storage *ss, struct ecs_data* ecs) +{ + void* sinaddr; + /* Construct subnet option from original query */ + if(((struct sockaddr_in*)ss)->sin_family == AF_INET) { + ecs->subnet_source_mask = EDNSSUBNET_MAX_SUBNET_IP4; + ecs->subnet_addr_fam = EDNSSUBNET_ADDRFAM_IP4; + sinaddr = &((struct sockaddr_in*)ss)->sin_addr; + if (!copy_clear( ecs->subnet_addr, INET6_SIZE, + (uint8_t *)sinaddr, INET_SIZE, + EDNSSUBNET_MAX_SUBNET_IP4)) { + ecs->subnet_validdata = 1; + } + } +#ifdef INET6 + else { + ecs->subnet_source_mask = EDNSSUBNET_MAX_SUBNET_IP6; + ecs->subnet_addr_fam = EDNSSUBNET_ADDRFAM_IP6; + sinaddr = &((struct sockaddr_in6*)ss)->sin6_addr; + if (!copy_clear( ecs->subnet_addr, INET6_SIZE, + (uint8_t *)sinaddr, INET6_SIZE, + EDNSSUBNET_MAX_SUBNET_IP6)) { + ecs->subnet_validdata = 1; + } + } +#else + /* We don't know how to handle ip6, just pass */ +#endif /* INET6 */ +} + +int +ecs_edns_back_parsed(struct module_qstate* qstate, void* cbargs) +{ + int id = *((int*)cbargs); + struct subnet_qstate *sq; + struct edns_option* ecs_opt; + + if(!(sq=(struct subnet_qstate*)qstate->minfo[id])) + return 1; + if((ecs_opt = edns_opt_list_find( + qstate->edns_opts_back_in, EDNSSUBNET_OPCODE))) { + if(parse_subnet_option(ecs_opt, &sq->ecs_server_in) && + sq->subnet_sent && sq->ecs_server_in.subnet_validdata) + /* Only skip global cache store if we sent an ECS option + * and received one back. Answers from non-whitelisted + * servers will end up in global cache. Ansers for + * queries with 0 source will not (unless nameserver + * does not support ECS). */ + qstate->no_cache_store = 1; + } + + return 1; +} + +void +subnetmod_operate(struct module_qstate *qstate, enum module_ev event, + int id, struct outbound_entry* outbound) +{ + struct subnet_env *sne = qstate->env->modinfo[id]; + struct subnet_qstate *sq = (struct subnet_qstate*)qstate->minfo[id]; + + verbose(VERB_QUERY, "subnet[module %d] operate: extstate:%s " + "event:%s", id, strextstate(qstate->ext_state[id]), + strmodulevent(event)); + log_query_info(VERB_QUERY, "subnet operate: query", &qstate->qinfo); + + if(event == module_event_new && sq == NULL) { + struct edns_option* ecs_opt; + if(!subnet_new_qstate(qstate, id)) { + qstate->return_msg = NULL; + qstate->ext_state[id] = module_finished; + return; + } + + sq = (struct subnet_qstate*)qstate->minfo[id]; + + if((ecs_opt = edns_opt_list_find( + qstate->edns_opts_front_in, EDNSSUBNET_OPCODE))) { + if(parse_subnet_option(ecs_opt, &sq->ecs_client_in)) { + sq->subnet_downstream = 1; + } + } + else if(qstate->mesh_info->reply_list) { + subnet_option_from_ss( + &qstate->mesh_info->reply_list->query_reply.addr, + &sq->ecs_client_in); + } + + if(sq->ecs_client_in.subnet_validdata == 0) { + /* No clients are interested in result or we could not + * parse it, we don't do client subnet */ + sq->ecs_server_out.subnet_validdata = 0; + verbose(VERB_ALGO, "subnet: pass to next module"); + qstate->ext_state[id] = module_wait_module; + return; + } + + lock_rw_wrlock(&sne->biglock); + if (lookup_and_reply(qstate, id, sq)) { + lock_rw_unlock(&sne->biglock); + verbose(VERB_QUERY, "subnet: answered from cache"); + qstate->ext_state[id] = module_finished; + + ecs_opt_list_append(&sq->ecs_client_out, + &qstate->edns_opts_front_out, qstate); + return; + } + lock_rw_unlock(&sne->biglock); + + sq->ecs_server_out.subnet_addr_fam = + sq->ecs_client_in.subnet_addr_fam; + sq->ecs_server_out.subnet_source_mask = + sq->ecs_client_in.subnet_source_mask; + memcpy(&sq->ecs_server_out.subnet_addr, + sq->ecs_client_in.subnet_addr, INET6_SIZE); + sq->ecs_server_out.subnet_scope_mask = 0; + sq->ecs_server_out.subnet_validdata = 1; + if(sq->ecs_server_out.subnet_source_mask != 0 && + sq->subnet_downstream) + /* ECS specific data required, do not look at the global + * cache in other modules. */ + qstate->no_cache_lookup = 1; + + /* pass request to next module */ + verbose(VERB_ALGO, + "subnet: not found in cache. pass to next module"); + qstate->ext_state[id] = module_wait_module; + return; + } + /* Query handed back by next module, we have a 'final' answer */ + if(sq && event == module_event_moddone) { + qstate->ext_state[id] = eval_response(qstate, id, sq); + if(qstate->ext_state[id] == module_finished) { + ecs_opt_list_append(&sq->ecs_client_out, + &qstate->edns_opts_front_out, qstate); + } + return; + } + if(sq && outbound) { + return; + } + /* We are being revisited */ + if(event == module_event_pass || event == module_event_new) { + /* Just pass it on, we already did the work */ + verbose(VERB_ALGO, "subnet: pass to next module"); + qstate->ext_state[id] = module_wait_module; + return; + } + if(!sq && (event == module_event_moddone)) { + /* during priming, module done but we never started */ + qstate->ext_state[id] = module_finished; + return; + } + log_err("subnet: bad event %s", strmodulevent(event)); + qstate->ext_state[id] = module_error; + return; +} + +void +subnetmod_clear(struct module_qstate *ATTR_UNUSED(qstate), + int ATTR_UNUSED(id)) +{ + /* qstate has no data outside region */ +} + +void +subnetmod_inform_super(struct module_qstate *ATTR_UNUSED(qstate), + int ATTR_UNUSED(id), struct module_qstate *ATTR_UNUSED(super)) +{ + /* Not used */ +} + +size_t +subnetmod_get_mem(struct module_env *env, int id) +{ + struct subnet_env *sn_env = env->modinfo[id]; + if (!sn_env) return 0; + return sizeof(*sn_env) + + slabhash_get_mem(sn_env->subnet_msg_cache); +} + +/** + * The module function block + */ +static struct module_func_block subnetmod_block = { + "subnet", &subnetmod_init, &subnetmod_deinit, &subnetmod_operate, + &subnetmod_inform_super, &subnetmod_clear, &subnetmod_get_mem +}; + +struct module_func_block* +subnetmod_get_funcblock(void) +{ + return &subnetmod_block; +} + +/** Wrappers for static functions to unit test */ +size_t +unittest_wrapper_subnetmod_sizefunc(void *elemptr) +{ + return sizefunc(elemptr); +} + +#endif /* CLIENT_SUBNET */ diff --git a/edns-subnet/subnetmod.h b/edns-subnet/subnetmod.h new file mode 100644 index 000000000..9e6526294 --- /dev/null +++ b/edns-subnet/subnetmod.h @@ -0,0 +1,126 @@ +/* + * edns-subnet/subnetmod.h - edns subnet module. Must be called before validator + * and iterator. + * + * Copyright (c) 2013, 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 + * subnet module for unbound. + */ + +#ifndef SUBNETMOD_H +#define SUBNETMOD_H +#include "util/module.h" +#include "services/outbound_list.h" +#include "util/alloc.h" +#include "util/net_help.h" +#include "util/storage/slabhash.h" +#include "edns-subnet/addrtree.h" +#include "edns-subnet/edns-subnet.h" + +/** + * Global state for the subnet module. + */ +struct subnet_env { + /** shared message cache + * key: struct query_info* + * data: struct subnet_msg_cache_data* */ + struct slabhash* subnet_msg_cache; + /** access control, which upstream servers we send client address */ + struct ednssubnet_upstream* edns_subnet_upstreams; + /** allocation service */ + struct alloc_cache alloc; + lock_rw_type biglock; +}; + +struct subnet_msg_cache_data { + struct addrtree* tree4; + struct addrtree* tree6; +}; + +struct subnet_qstate { + /** We need the hash for both cache lookup and insert */ + hashvalue_type qinfo_hash; + /** ecs_data for client communication */ + struct ecs_data ecs_client_in; + struct ecs_data ecs_client_out; + /** ecss data for server communication */ + struct ecs_data ecs_server_in; + struct ecs_data ecs_server_out; + int subnet_downstream; + int subnet_sent; +}; + +void subnet_data_delete(void* d, void* ATTR_UNUSED(arg)); +size_t msg_cache_sizefunc(void* k, void* d); + +/** + * Get the module function block. + * @return: function block with function pointers to module methods. + */ +struct module_func_block* subnetmod_get_funcblock(void); + +/** subnet module init */ +int subnetmod_init(struct module_env* env, int id); + +/** subnet module deinit */ +void subnetmod_deinit(struct module_env* env, int id); + +/** subnet module operate on a query */ +void subnetmod_operate(struct module_qstate* qstate, enum module_ev event, + int id, struct outbound_entry* outbound); + +/** subnet module */ +void subnetmod_inform_super(struct module_qstate* qstate, int id, + struct module_qstate* super); + +/** subnet module cleanup query state */ +void subnetmod_clear(struct module_qstate* qstate, int id); + +/** subnet module alloc size routine */ +size_t subnetmod_get_mem(struct module_env* env, int id); + +/** Wrappers for static functions to unit test */ +size_t unittest_wrapper_subnetmod_sizefunc(void *elemptr); + +/** Whitelist check, called just before query is sent upstream. */ +int ecs_whitelist_check(struct query_info* qinfo, uint16_t flags, + struct module_qstate* qstate, struct sockaddr_storage* addr, + socklen_t addrlen, uint8_t* zone, size_t zonelen, + struct regional* region, void* cbargs); + +/** Check whether reponse from server contains ECS record, if so, skip cache + * store. Called just after parsing EDNS data from server. */ +int ecs_edns_back_parsed(struct module_qstate* qstate, void* cbargs); + +#endif /* SUBNETMOD_H */ diff --git a/iterator/iterator.c b/iterator/iterator.c index cd0a03c78..7e3c77f6d 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -3202,6 +3202,10 @@ process_response(struct module_qstate* qstate, struct iter_qstate* iq, /* like packet got dropped */ goto handle_it; } + if(!inplace_cb_edns_back_parsed_call(qstate->env, qstate)) { + log_err("unable to call edns_back_parsed callback"); + goto handle_it; + } } /* remove CD-bit, we asked for in case we handle validation ourself */ diff --git a/ltmain.sh b/ltmain.sh index 0f0a2da3f..2ad8be848 100644 --- a/ltmain.sh +++ b/ltmain.sh @@ -31,7 +31,7 @@ PROGRAM=libtool PACKAGE=libtool -VERSION=2.4.6 +VERSION="2.4.6 Debian-2.4.6-1" package_revision=2.4.6 @@ -1977,7 +1977,7 @@ func_version () # End: # Set a version string. -scriptversion='(GNU libtool) 2.4.6' +scriptversion='(GNU libtool) 2.4.6 Debian-2.4.6-1' # func_echo ARG... @@ -2068,12 +2068,12 @@ include the following information: compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) - version: $progname (GNU libtool) 2.4.6 + version: $progname $scriptversion automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . -GNU libtool home page: . +GNU libtool home page: . General help using GNU software: ." exit 0 } @@ -7272,10 +7272,13 @@ func_mode_link () # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang + # -fsanitize=* Clang/GCC memory and address sanitizer -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*|-fsanitize=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" @@ -7568,7 +7571,10 @@ func_mode_link () case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then @@ -7887,19 +7893,19 @@ func_mode_link () # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done continue fi # $pass = conv @@ -8823,6 +8829,9 @@ func_mode_link () revision=$number_minor lt_irix_increment=no ;; + *) + func_fatal_configuration "$modename: unknown library version type '$version_type'" + ;; esac ;; no) diff --git a/services/cache/dns.c b/services/cache/dns.c index 7beb76164..e86c6b842 100644 --- a/services/cache/dns.c +++ b/services/cache/dns.c @@ -479,8 +479,7 @@ gen_dns_msg(struct regional* region, struct query_info* q, size_t num) return msg; } -/** generate dns_msg from cached message */ -static struct dns_msg* +struct dns_msg* tomsg(struct module_env* env, struct query_info* q, struct reply_info* r, struct regional* region, time_t now, struct regional* scratch) { diff --git a/services/cache/dns.h b/services/cache/dns.h index 15a4a236b..5415a4728 100644 --- a/services/cache/dns.h +++ b/services/cache/dns.h @@ -126,6 +126,19 @@ struct delegpt* dns_cache_find_delegation(struct module_env* env, uint8_t* qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, struct regional* region, struct dns_msg** msg, time_t timenow); +/** + * generate dns_msg from cached message + * @param env: module environment with the DNS cache. + * @param q: query info, contains qname that will make up the dns message. + * @param r: reply info that, together with qname, will make up the dns message. + * @param region: where to allocate dns message. + * @param now: the time now, for check if TTL on cache entry is ok. + * @param scratch: where to allocate temporary data. + * */ +struct dns_msg* tomsg(struct module_env* env, struct query_info* q, + struct reply_info* r, struct regional* region, time_t now, + struct regional* scratch); + /** * Find cached message * @param env: module environment with the DNS cache. diff --git a/services/mesh.c b/services/mesh.c index 540f44f35..80d42adbf 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -348,7 +348,7 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo, struct edns_data* edns, struct comm_reply* rep, uint16_t qid) { struct mesh_state* s = NULL; - int unique = edns_unique_mesh_state(edns->opt_list, mesh->env); + int unique = unique_mesh_state(edns->opt_list, mesh->env); int was_detached = 0; int was_noreply = 0; int added = 0; @@ -470,7 +470,7 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo, uint16_t qid, mesh_cb_func_type cb, void* cb_arg) { struct mesh_state* s = NULL; - int unique = edns_unique_mesh_state(edns->opt_list, mesh->env); + int unique = unique_mesh_state(edns->opt_list, mesh->env); int was_detached = 0; int was_noreply = 0; int added = 0; diff --git a/services/modstack.c b/services/modstack.c index 97d67a1e1..f9d3f6071 100644 --- a/services/modstack.c +++ b/services/modstack.c @@ -54,6 +54,9 @@ #ifdef USE_CACHEDB #include "cachedb/cachedb.h" #endif +#ifdef CLIENT_SUBNET +#include "edns-subnet/subnetmod.h" +#endif /** count number of modules (words) in the string */ static int @@ -127,6 +130,9 @@ module_list_avail(void) #endif #ifdef USE_CACHEDB "cachedb", +#endif +#ifdef CLIENT_SUBNET + "subnetcache", #endif "respip", "validator", @@ -149,6 +155,9 @@ module_funcs_avail(void) #endif #ifdef USE_CACHEDB &cachedb_get_funcblock, +#endif +#ifdef CLIENT_SUBNET + &subnetmod_get_funcblock, #endif &respip_get_funcblock, &val_get_funcblock, diff --git a/sldns/rrdef.h b/sldns/rrdef.h index 618e62c67..af7bca1d2 100644 --- a/sldns/rrdef.h +++ b/sldns/rrdef.h @@ -422,7 +422,7 @@ enum sldns_enum_edns_option LDNS_EDNS_DAU = 5, /* RFC6975 */ LDNS_EDNS_DHU = 6, /* RFC6975 */ LDNS_EDNS_N3U = 7, /* RFC6975 */ - LDNS_EDNS_CLIENT_SUBNET = 8, /* draft-vandergaast-edns-client-subnet */ + LDNS_EDNS_CLIENT_SUBNET = 8, /* RFC7871 */ LDNS_EDNS_KEEPALIVE = 11, /* draft-ietf-dnsop-edns-tcp-keepalive*/ LDNS_EDNS_PADDING = 12 /* RFC7830 */ }; diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index b112a79fa..ddf8b3a75 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -455,6 +455,8 @@ morechecks(struct config_file* cfg, const char* fname) && strcmp(cfg->module_conf, "cachedb iterator") != 0 && strcmp(cfg->module_conf, "dns64 validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "dns64 cachedb iterator") != 0 +#endif +#if defined(WITH_PYTHONMODULE) && defined(USE_CACHEDB) && strcmp(cfg->module_conf, "python dns64 cachedb iterator") != 0 && strcmp(cfg->module_conf, "python dns64 validator cachedb iterator") != 0 && strcmp(cfg->module_conf, "dns64 python cachedb iterator") != 0 @@ -464,6 +466,18 @@ morechecks(struct config_file* cfg, const char* fname) && strcmp(cfg->module_conf, "cachedb python iterator") != 0 && strcmp(cfg->module_conf, "validator cachedb python iterator") != 0 && strcmp(cfg->module_conf, "validator python cachedb iterator") != 0 +#endif +#ifdef CLIENT_SUBNET + && strcmp(cfg->module_conf, "subnetcache iterator") != 0 + && strcmp(cfg->module_conf, "subnetcache validator iterator") != 0 +#endif +#if defined(WITH_PYTHONMODULE) && defined(CLIENT_SUBNET) + && strcmp(cfg->module_conf, "python subnetcache iterator") != 0 + && strcmp(cfg->module_conf, "subnetcache python iterator") != 0 + && strcmp(cfg->module_conf, "subnetcache validator iterator") != 0 + && strcmp(cfg->module_conf, "python subnetcache validator iterator") != 0 + && strcmp(cfg->module_conf, "subnetcache python validator iterator") != 0 + && strcmp(cfg->module_conf, "subnetcache validator python iterator") != 0 #endif ) { fatal_exit("module conf '%s' is not known to work", diff --git a/testcode/fake_event.c b/testcode/fake_event.c index 207208938..154013a8c 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1070,8 +1070,13 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet, sldns_buffer_write_u16(pend->buffer, qinfo->qclass); sldns_buffer_flip(pend->buffer); if(1) { - /* add edns */ struct edns_data edns; + if(!inplace_cb_query_call(env, qinfo, flags, addr, addrlen, + zone, zonelen, qstate, qstate->region)) { + free(pend); + return NULL; + } + /* add edns */ edns.edns_present = 1; edns.ext_rcode = 0; edns.edns_version = EDNS_ADVERTISED_VERSION; diff --git a/testcode/testbound.c b/testcode/testbound.c index dd858b5bd..180b2c256 100644 --- a/testcode/testbound.c +++ b/testcode/testbound.c @@ -77,6 +77,7 @@ testbound_usage(void) printf("-2 detect SHA256 support (exit code 0 or 1)\n"); printf("-g detect GOST support (exit code 0 or 1)\n"); printf("-e detect ECDSA support (exit code 0 or 1)\n"); + printf("-c detect CLIENT_SUBNET support (exit code 0 or 1)\n"); printf("-s testbound self-test - unit test of testbound parts.\n"); printf("-o str unbound commandline options separated by spaces.\n"); printf("Version %s\n", PACKAGE_VERSION); @@ -325,6 +326,15 @@ main(int argc, char* argv[]) #else printf("GOST not supported\n"); exit(1); +#endif + break; + case 'c': +#ifdef CLIENT_SUBNET + printf("CLIENT_SUBNET supported\n"); + exit(0); +#else + printf("CLIENT_SUBNET not supported\n"); + exit(1); #endif break; case 'p': diff --git a/testcode/testpkts.c b/testcode/testpkts.c index 1ffaf1b7e..e1a7768ab 100644 --- a/testcode/testpkts.c +++ b/testcode/testpkts.c @@ -98,6 +98,7 @@ entry_add_reply(struct entry* entry) pkt->packet_sleep = 0; pkt->reply_pkt = NULL; pkt->reply_from_hex = NULL; + pkt->raw_ednsdata = NULL; /* link at end */ while(*p) p = &((*p)->next); @@ -134,6 +135,8 @@ static void matchline(char* line, struct entry* e) e->match_do = 1; } else if(str_keyword(&parse, "noedns")) { e->match_noedns = 1; + } else if(str_keyword(&parse, "ednsdata")) { + e->match_ednsdata_raw = 1; } else if(str_keyword(&parse, "UDP")) { e->match_transport = transport_udp; } else if(str_keyword(&parse, "TCP")) { @@ -230,6 +233,8 @@ static void adjustline(char* line, struct entry* e, e->copy_id = 1; } else if(str_keyword(&parse, "copy_query")) { e->copy_query = 1; + } else if(str_keyword(&parse, "copy_ednsdata_assume_clientsubnet")) { + e->copy_ednsdata_assume_clientsubnet = 1; } else if(str_keyword(&parse, "sleep=")) { e->sleeptime = (unsigned int) strtol(parse, (char**)&parse, 10); while(isspace((unsigned char)*parse)) @@ -267,6 +272,7 @@ static struct entry* new_entry(void) e->reply_list = NULL; e->copy_id = 0; e->copy_query = 0; + e->copy_ednsdata_assume_clientsubnet = 0; e->sleeptime = 0; e->next = NULL; return e; @@ -484,25 +490,28 @@ static void add_rr(char* rrstr, uint8_t* pktbuf, size_t pktsize, else error("internal error bad section %d", (int)add_section); } -/* add EDNS 4096 DO opt record */ +/* add EDNS 4096 opt record */ static void -add_do_flag(uint8_t* pktbuf, size_t pktsize, size_t* pktlen) +add_edns(uint8_t* pktbuf, size_t pktsize, int do_flag, uint8_t *ednsdata, + uint16_t ednslen, size_t* pktlen) { uint8_t edns[] = {0x00, /* root label */ 0x00, LDNS_RR_TYPE_OPT, /* type */ 0x10, 0x00, /* class is UDPSIZE 4096 */ 0x00, /* TTL[0] is ext rcode */ 0x00, /* TTL[1] is edns version */ - 0x80, 0x00, /* TTL[2-3] is edns flags, DO */ - 0x00, 0x00 /* rdatalength (0 options) */ + (uint8_t)(do_flag?0x80:0x00), 0x00, /* TTL[2-3] is edns flags, DO */ + (uint8_t)((ednslen >> 8) & 0xff), + (uint8_t)(ednslen & 0xff), /* rdatalength */ }; if(*pktlen < LDNS_HEADER_SIZE) return; - if(*pktlen + sizeof(edns) > pktsize) + if(*pktlen + sizeof(edns) + ednslen > pktsize) error("not enough space for EDNS OPT record"); memmove(pktbuf+*pktlen, edns, sizeof(edns)); + memmove(pktbuf+*pktlen+sizeof(edns), ednsdata, ednslen); sldns_write_uint16(pktbuf+10, LDNS_ARCOUNT(pktbuf)+1); - *pktlen += sizeof(edns); + *pktlen += (sizeof(edns) + ednslen); } /* Reads one entry from file. Returns entry or NULL on error. */ @@ -516,7 +525,9 @@ read_entry(FILE* in, const char* name, struct sldns_file_parse_state* pstate, sldns_pkt_section add_section = LDNS_SECTION_QUESTION; struct reply_packet *cur_reply = NULL; int reading_hex = 0; + int reading_hex_ednsdata = 0; sldns_buffer* hex_data_buffer = NULL; + sldns_buffer* hex_ednsdata_buffer = NULL; uint8_t pktbuf[MAX_PACKETLEN]; size_t pktlen = LDNS_HEADER_SIZE; int do_flag = 0; /* DO flag in EDNS */ @@ -583,21 +594,45 @@ read_entry(FILE* in, const char* name, struct sldns_file_parse_state* pstate, cur_reply->reply_from_hex = hex_buffer2wire(hex_data_buffer); sldns_buffer_free(hex_data_buffer); hex_data_buffer = NULL; + } else if(reading_hex) { + sldns_buffer_printf(hex_data_buffer, "%s", line); + } else if(str_keyword(&parse, "HEX_EDNSDATA_BEGIN")) { + hex_ednsdata_buffer = sldns_buffer_new(MAX_PACKETLEN); + reading_hex_ednsdata = 1; + } else if(str_keyword(&parse, "HEX_EDNSDATA_END")) { + if (!reading_hex_ednsdata) { + error("%s line %d: HEX_EDNSDATA_END read but no" + "HEX_EDNSDATA_BEGIN keyword seen", name, pstate->lineno); + } + reading_hex_ednsdata = 0; + cur_reply->raw_ednsdata = hex_buffer2wire(hex_ednsdata_buffer); + sldns_buffer_free(hex_ednsdata_buffer); + hex_ednsdata_buffer = NULL; + } else if(reading_hex_ednsdata) { + sldns_buffer_printf(hex_ednsdata_buffer, "%s", line); } else if(str_keyword(&parse, "ENTRY_END")) { if(hex_data_buffer) sldns_buffer_free(hex_data_buffer); + if(hex_ednsdata_buffer) + sldns_buffer_free(hex_ednsdata_buffer); if(pktlen != 0) { - if(do_flag) - add_do_flag(pktbuf, sizeof(pktbuf), - &pktlen); + if(do_flag || cur_reply->raw_ednsdata) { + if(cur_reply->raw_ednsdata && + sldns_buffer_limit(cur_reply->raw_ednsdata)) + add_edns(pktbuf, sizeof(pktbuf), do_flag, + sldns_buffer_begin(cur_reply->raw_ednsdata), + (uint16_t)sldns_buffer_limit(cur_reply->raw_ednsdata), + &pktlen); + else + add_edns(pktbuf, sizeof(pktbuf), do_flag, + NULL, 0, &pktlen); + } cur_reply->reply_pkt = memdup(pktbuf, pktlen); cur_reply->reply_len = pktlen; if(!cur_reply->reply_pkt) error("out of memory"); } return current; - } else if(reading_hex) { - sldns_buffer_printf(hex_data_buffer, "%s", line); } else { add_rr(skip_whitespace?parse:line, pktbuf, sizeof(pktbuf), &pktlen, pstate, add_section, @@ -605,10 +640,14 @@ read_entry(FILE* in, const char* name, struct sldns_file_parse_state* pstate, } } - if (reading_hex) { + if(reading_hex) { error("%s: End of file reached while still reading hex, " "missing HEX_ANSWER_END\n", name); } + if(reading_hex_ednsdata) { + error("%s: End of file reached while still reading edns data, " + "missing HEX_EDNSDATA_END\n", name); + } if(current) { error("%s: End of file reached while reading entry. " "missing ENTRY_END\n", name); @@ -778,16 +817,16 @@ pkt_find_edns_opt(uint8_t** p, size_t* plen) wlen -= LDNS_HEADER_SIZE; /* skip other records with wire2str_scan */ - for(i=0; i < LDNS_QDCOUNT(p); i++) + for(i=0; i < LDNS_QDCOUNT(*p); i++) (void)sldns_wire2str_rrquestion_scan(&w, &wlen, &snull, &sl, *p, *plen); - for(i=0; i < LDNS_ANCOUNT(p); i++) + for(i=0; i < LDNS_ANCOUNT(*p); i++) (void)sldns_wire2str_rr_scan(&w, &wlen, &snull, &sl, *p, *plen); - for(i=0; i < LDNS_NSCOUNT(p); i++) + for(i=0; i < LDNS_NSCOUNT(*p); i++) (void)sldns_wire2str_rr_scan(&w, &wlen, &snull, &sl, *p, *plen); /* walk through additional section */ - for(i=0; i < LDNS_ARCOUNT(p); i++) { + for(i=0; i < LDNS_ARCOUNT(*p); i++) { /* if this is OPT then done */ uint8_t* dstart = w; size_t dlen = wlen; @@ -1338,6 +1377,31 @@ static int subdomain_dname(uint8_t* q, size_t qlen, uint8_t* p, size_t plen) return 0; } +/** Match OPT RDATA (not the EDNS payload size or flags) */ +static int +match_ednsdata(uint8_t* q, size_t qlen, uint8_t* p, size_t plen) +{ + uint8_t* walk_q = q; + size_t walk_qlen = qlen; + uint8_t* walk_p = p; + size_t walk_plen = plen; + + if(!pkt_find_edns_opt(&walk_q, &walk_qlen)) + walk_qlen = 0; + if(!pkt_find_edns_opt(&walk_p, &walk_plen)) + walk_plen = 0; + + /* class + ttl + rdlen = 8 */ + if(walk_qlen <= 8 && walk_plen <= 8) { + verbose(3, "NO edns opt, move on"); + return 1; + } + if(walk_qlen != walk_plen) + return 0; + + return (memcmp(walk_p+8, walk_q+8, walk_qlen-8) == 0); +} + /* finds entry in list, or returns NULL */ struct entry* find_match(struct entry* entries, uint8_t* query_pkt, size_t len, @@ -1409,6 +1473,11 @@ find_match(struct entry* entries, uint8_t* query_pkt, size_t len, verbose(3, "bad; EDNS OPT present\n"); continue; } + if(p->match_ednsdata_raw && + !match_ednsdata(query_pkt, len, reply, rlen)) { + verbose(3, "bad EDNS data match.\n"); + continue; + } if(p->match_transport != transport_any && p->match_transport != transport) { verbose(3, "bad transport\n"); continue; @@ -1494,6 +1563,29 @@ adjust_packet(struct entry* match, uint8_t** answer_pkt, size_t *answer_len, if(match->copy_id && reslen >= 1) res[0] = orig[0]; + if(match->copy_ednsdata_assume_clientsubnet) { + /** Assume there is only one EDNS option, which is ECS. + * Copy source mask from query to scope mask in reply. Assume + * rest of ECS data in response (eg address) matches the query. + */ + uint8_t* walk_q = orig; + size_t walk_qlen = origlen; + uint8_t* walk_p = res; + size_t walk_plen = reslen; + + if(!pkt_find_edns_opt(&walk_q, &walk_qlen)) { + walk_qlen = 0; + } + if(!pkt_find_edns_opt(&walk_p, &walk_plen)) { + walk_plen = 0; + } + /* class + ttl + rdlen + optcode + optlen + ecs fam + ecs source + * + ecs scope = index 15 */ + if(walk_qlen >= 15 && walk_plen >= 15) { + walk_p[15] = walk_q[14]; + } + } + if(match->sleeptime > 0) { verbose(3, "sleeping for %d seconds\n", match->sleeptime); #ifdef HAVE_SLEEP @@ -1587,6 +1679,7 @@ void delete_replylist(struct reply_packet* replist) np = p->next; free(p->reply_pkt); sldns_buffer_free(p->reply_from_hex); + sldns_buffer_free(p->raw_ednsdata); free(p); p=np; } diff --git a/testcode/testpkts.h b/testcode/testpkts.h index d045d366d..b175cab06 100644 --- a/testcode/testpkts.h +++ b/testcode/testpkts.h @@ -53,6 +53,7 @@ struct sldns_file_parse_state; ; 'rcode' makes the query match the rcode from the reply ; 'question' makes the query match the question section ; 'answer' makes the query match the answer section + ; 'ednsdata' matches queries to HEX_EDNS section. MATCH [opcode] [qtype] [qname] [serial=] [all] [ttl] MATCH [UDP|TCP] DO MATCH ... @@ -87,6 +88,11 @@ struct sldns_file_parse_state; ; be parsed, ADJUST rules for the answer packet ; are ignored. Only copy_id is done. HEX_ANSWER_END + HEX_EDNS_BEGIN ; follow with hex data. + ; Raw EDNS data to match against. It must be an + ; exact match (all options are matched) and will be + ; evaluated only when 'MATCH ednsdata' given. + HEX_EDNS_END ENTRY_END @@ -147,6 +153,8 @@ struct reply_packet { uint8_t* reply_pkt; /** length of reply pkt */ size_t reply_len; + /** Additional EDNS data for matching queries. */ + struct sldns_buffer* raw_ednsdata; /** or reply pkt in hex if not parsable */ struct sldns_buffer* reply_from_hex; /** seconds to sleep before giving packet */ @@ -182,6 +190,8 @@ struct entry { uint8_t match_do; /** match absence of EDNS OPT record in query */ uint8_t match_noedns; + /** match edns data field given in hex */ + uint8_t match_ednsdata_raw; /** match query serial with this value. */ uint32_t ixfr_soa_serial; /** match on UDP/TCP */ @@ -195,6 +205,9 @@ struct entry { uint8_t copy_id; /** copy the query nametypeclass from query into the answer */ uint8_t copy_query; + /** copy ednsdata to reply, assume it is clientsubnet and + * adjust scopemask to match sourcemask */ + uint8_t copy_ednsdata_assume_clientsubnet; /** in seconds */ unsigned int sleeptime; diff --git a/testcode/unitecs.c b/testcode/unitecs.c new file mode 100644 index 000000000..3584b0f98 --- /dev/null +++ b/testcode/unitecs.c @@ -0,0 +1,284 @@ +/* + * testcode/unitecs.c - unit test for ecs routines. + * + * Copyright (c) 2013, 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 REGENTS 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 + * Calls ecs related unit tests. Exits with code 1 on a failure. + */ + +#include "config.h" + +#ifdef CLIENT_SUBNET + +#include "util/log.h" +#include "util/module.h" +#include "testcode/unitmain.h" +#include "edns-subnet/addrtree.h" +#include "edns-subnet/subnetmod.h" + +/* + void printkey(addrkey_t *k, addrlen_t bits) + { + int byte; + int bytes = bits/8 + ((bits%8)>0); + char msk = 0xFF; + for (byte = 0; byte < bytes; byte++) { + //~ if (byte+1 == bytes) + //~ msk = 0xFF<<(8-bits%8); + printf("%02x ", k[byte]&msk); + } + } + + void print_tree(struct addrnode* node, int indent, int maxdepth) + { + struct addredge* edge; + int i, s, byte; + if (indent == 0) printf("-----Tree-----\n"); + if (indent > maxdepth) { + printf("\n"); + return; + } + printf("[node elem:%d] (%d)\n", node->elem != NULL, node); + for (i = 0; i<2; i++) { + if (node->edge[i]) { + for (s = 0; s < indent; s++) printf(" "); + printkey(node->edge[i]->str, node->edge[i]->len); + printf("(len %d bits, %d bytes) ", node->edge[i]->len, + node->edge[i]->len/8 + ((node->edge[i]->len%8)>0)); + print_tree(node->edge[i]->node, indent+1, maxdepth); + } + } + if (indent == 0) printf("-----Tree-----"); + } +*/ + +/* what should we check? + * X - is it balanced? (a node with 1 child shoudl not have + * a node with 1 child MUST have elem + * child must be sub of parent + * edge must be longer than parent edge + * */ +static int addrtree_inconsistent_subtree(struct addrtree* tree, + struct addredge* parent_edge, addrlen_t depth) +{ + struct addredge* edge; + struct addrnode* node = parent_edge->node; + int childcount, i, r; + if (depth > tree->max_depth) return 15; + childcount = (node->edge[0] != NULL) + (node->edge[1] != NULL); + /* Only nodes with 2 children should possibly have no element. */ + if (childcount < 2 && !node->elem) return 10; + for (i = 0; i<2; i++) { + edge = node->edge[i]; + if (!edge) continue; + if (!edge->node) return 11; + if (!edge->str) return 12; + if (edge->len <= parent_edge->len) return 13; + if (!unittest_wrapper_addrtree_issub(parent_edge->str, + parent_edge->len, edge->str, edge->len, 0)) + return 14; + if ((r = addrtree_inconsistent_subtree(tree, edge, depth+1)) != 0) + return 100+r; + } + return 0; +} + +static int addrtree_inconsistent(struct addrtree* tree) +{ + struct addredge* edge; + int i, r; + + if (!tree) return 0; + if (!tree->root) return 1; + + for (i = 0; i<2; i++) { + edge = tree->root->edge[i]; + if (!edge) continue; + if (!edge->node) return 3; + if (!edge->str) return 4; + if ((r = addrtree_inconsistent_subtree(tree, edge, 1)) != 0) + return r; + } + return 0; +} + +static addrlen_t randomkey(addrkey_t **k, int maxlen) +{ + int byte; + int bits = rand() % maxlen; + int bytes = bits/8 + (bits%8>0); /*ceil*/ + *k = (addrkey_t *) malloc(bytes * sizeof(addrkey_t)); + for (byte = 0; byte < bytes; byte++) { + (*k)[byte] = (addrkey_t)(rand() & 0xFF); + } + return (addrlen_t)bits; +} + +static void elemfree(void *envptr, void *elemptr) +{ + struct reply_info *elem = (struct reply_info *)elemptr; + (void)envptr; + free(elem); +} + +static void consistency_test(void) +{ + addrlen_t l; + time_t i; + unsigned int count; + addrkey_t *k; + struct addrtree* t; + struct module_env env; + struct reply_info *elem; + time_t timenow = 0; + unit_show_func("edns-subnet/addrtree.h", "Tree consistency check"); + srand(9195); /* just some value for reproducibility */ + + t = addrtree_create(100, &elemfree, &unittest_wrapper_subnetmod_sizefunc, &env, 0); + count = t->node_count; + unit_assert(count == 0); + for (i = 0; i < 1000; i++) { + l = randomkey(&k, 128); + elem = (struct reply_info *) calloc(1, sizeof(struct reply_info)); + addrtree_insert(t, k, l, 64, elem, timenow + 10, timenow); + /* This should always hold because no items ever expire. They + * could be overwritten, though. */ + unit_assert( count <= t->node_count ); + count = t->node_count; + free(k); + unit_assert( !addrtree_inconsistent(t) ); + } + addrtree_delete(t); + + unit_show_func("edns-subnet/addrtree.h", "Tree consistency with purge"); + t = addrtree_create(8, &elemfree, &unittest_wrapper_subnetmod_sizefunc, &env, 0); + unit_assert(t->node_count == 0); + for (i = 0; i < 1000; i++) { + l = randomkey(&k, 128); + elem = (struct reply_info *) calloc(1, sizeof(struct reply_info)); + addrtree_insert(t, k, l, 64, elem, i + 10, i); + free(k); + unit_assert( !addrtree_inconsistent(t) ); + } + addrtree_delete(t); + + unit_show_func("edns-subnet/addrtree.h", "Tree consistency with limit"); + t = addrtree_create(8, &elemfree, &unittest_wrapper_subnetmod_sizefunc, &env, 27); + unit_assert(t->node_count == 0); + for (i = 0; i < 1000; i++) { + l = randomkey(&k, 128); + elem = (struct reply_info *) calloc(1, sizeof(struct reply_info)); + addrtree_insert(t, k, l, 64, elem, i + 10, i); + unit_assert( t->node_count <= 27); + free(k); + unit_assert( !addrtree_inconsistent(t) ); + } + addrtree_delete(t); +} + +static void issub_test(void) +{ + addrkey_t k1[] = {0x55, 0x55, 0x5A}; + addrkey_t k2[] = {0x55, 0x5D, 0x5A}; + unit_show_func("edns-subnet/addrtree.h", "issub"); + unit_assert( !unittest_wrapper_addrtree_issub(k1, 24, k2, 24, 0) ); + unit_assert( unittest_wrapper_addrtree_issub(k1, 8, k2, 16, 0) ); + unit_assert( unittest_wrapper_addrtree_issub(k2, 12, k1, 13, 0) ); + unit_assert( !unittest_wrapper_addrtree_issub(k1, 16, k2, 12, 0) ); + unit_assert( unittest_wrapper_addrtree_issub(k1, 12, k2, 12, 0) ); + unit_assert( !unittest_wrapper_addrtree_issub(k1, 13, k2, 13, 0) ); + unit_assert( unittest_wrapper_addrtree_issub(k1, 24, k2, 24, 13) ); + unit_assert( !unittest_wrapper_addrtree_issub(k1, 24, k2, 20, 13) ); + unit_assert( unittest_wrapper_addrtree_issub(k1, 20, k2, 24, 13) ); +} + +static void getbit_test(void) +{ + addrkey_t k1[] = {0x55, 0x55, 0x5A}; + int i; + unit_show_func("edns-subnet/addrtree.h", "getbit"); + for(i = 0; i<20; i++) { + unit_assert( unittest_wrapper_addrtree_getbit(k1, 20, (addrlen_t)i) == (i&1) ); + } +} + +static void bits_common_test(void) +{ + addrkey_t k1[] = {0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0}; + addrkey_t k2[] = {0,0,0,0,0,0,0,0}; + addrlen_t i; + + unit_show_func("edns-subnet/addrtree.h", "bits_common"); + for(i = 0; i<64; i++) { + unit_assert( unittest_wrapper_addrtree_bits_common(k1, 64, k1, 64, i) == 64 ); + } + for(i = 0; i<8; i++) { + k2[i] = k1[i]^(1< #endif +#ifdef CLIENT_SUBNET +#include "edns-subnet/edns-subnet.h" +#endif #ifdef HAVE_PWD_H #include #endif @@ -173,6 +176,12 @@ config_create(void) cfg->out_ifs = NULL; cfg->stubs = NULL; cfg->forwards = NULL; +#ifdef CLIENT_SUBNET + cfg->client_subnet = NULL; + cfg->client_subnet_opcode = 8; + cfg->max_client_subnet_ipv4 = 24; + cfg->max_client_subnet_ipv6 = 64; +#endif cfg->views = NULL; cfg->acls = NULL; cfg->harden_short_bufsize = 0; @@ -238,7 +247,11 @@ config_create(void) if(!(cfg->control_cert_file = strdup(RUN_DIR"/unbound_control.pem"))) goto error_exit; +#ifdef CLIENT_SUBNET + if(!(cfg->module_conf = strdup("subnetcache validator iterator"))) goto error_exit; +#else if(!(cfg->module_conf = strdup("validator iterator"))) goto error_exit; +#endif if(!(cfg->val_nsec3_key_iterations = strdup("1024 150 2048 500 4096 2500"))) goto error_exit; #if defined(DNSTAP_SOCKET_PATH) @@ -503,6 +516,12 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STR("module-config:", module_conf) else S_STR("python-script:", python_script) else S_YNO("disable-dnssec-lame-check:", disable_dnssec_lame_check) +#ifdef CLIENT_SUBNET + else S_STRLIST("send-client-subnet", client_subnet) + else S_NUMBER_OR_ZERO("max-client-subnet-ipv4:", max_client_subnet_ipv4) + else S_NUMBER_OR_ZERO("max-client-subnet-ipv6:", max_client_subnet_ipv6) + else S_NUMBER_OR_ZERO("client-subnet-opcode:", client_subnet_opcode) +#endif else if(strcmp(opt, "ip-ratelimit:") == 0) { IS_NUMBER_OR_ZERO; cfg->ip_ratelimit = atoi(val); infra_ip_ratelimit=cfg->ip_ratelimit; @@ -818,6 +837,12 @@ config_get_option(struct config_file* cfg, const char* opt, else O_UNS(opt, "val-override-date", val_date_override) else O_YNO(opt, "minimal-responses", minimal_responses) else O_YNO(opt, "rrset-roundrobin", rrset_roundrobin) +#ifdef CLIENT_SUBNET + else O_LST(opt, "send-client-subnet", client_subnet) + else O_DEC(opt, "max-client-subnet-ipv4", max_client_subnet_ipv4) + else O_DEC(opt, "max-client-subnet-ipv6", max_client_subnet_ipv6) + else O_DEC(opt, "client-subnet-opcode", client_subnet_opcode) +#endif else O_YNO(opt, "unblock-lan-zones", unblock_lan_zones) else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones) else O_DEC(opt, "max-udp-size", max_udp_size) @@ -1100,6 +1125,9 @@ config_delete(struct config_file* cfg) config_delviews(cfg->views); config_delstrlist(cfg->donotqueryaddrs); config_delstrlist(cfg->root_hints); +#ifdef CLIENT_SUBNET + config_delstrlist(cfg->client_subnet); +#endif free(cfg->identity); free(cfg->version); free(cfg->module_conf); @@ -1596,6 +1624,11 @@ config_apply(struct config_file* config) MAX_NEG_TTL = (time_t)config->max_negative_ttl; RTT_MIN_TIMEOUT = config->infra_cache_min_rtt; EDNS_ADVERTISED_SIZE = (uint16_t)config->edns_buffer_size; +#ifdef CLIENT_SUBNET + EDNSSUBNET_OPCODE = (uint16_t)config->client_subnet_opcode; + EDNSSUBNET_MAX_SUBNET_IP4 = (uint8_t)config->max_client_subnet_ipv4; + EDNSSUBNET_MAX_SUBNET_IP6 = (uint8_t)config->max_client_subnet_ipv6; +#endif MINIMAL_RESPONSES = config->minimal_responses; RRSET_ROUNDROBIN = config->rrset_roundrobin; log_set_time_asc(config->log_time_ascii); diff --git a/util/config_file.h b/util/config_file.h index 18919a65d..6f32dee1d 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -172,6 +172,16 @@ struct config_file { struct config_view* views; /** list of donotquery addresses, linked list */ struct config_strlist* donotqueryaddrs; +#ifdef CLIENT_SUBNET + /** list of servers we send edns-client-subnet option to and + * accept option from, linked list */ + struct config_strlist* client_subnet; + /** opcode assigned by IANA for edns0-client-subnet option */ + int client_subnet_opcode; + /** Subnet length we are willing to give up privacy for */ + int max_client_subnet_ipv4; + int max_client_subnet_ipv6; +#endif /** list of access control entries, linked list */ struct config_str2list* acls; /** use default localhost donotqueryaddr entries */ diff --git a/util/configlexer.c b/util/configlexer.c index fae16b883..4bfe4d089 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 0 +#define YY_FLEX_SUBMINOR_VERSION 1 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -89,25 +89,13 @@ typedef unsigned int flex_uint32_t; #endif /* ! FLEXINT_H */ -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST +/* TODO: this is always defined, so inline it */ #define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) #else -#define yyconst +#define yynoreturn #endif /* Returned upon end-of-file. */ @@ -168,7 +156,7 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE; typedef size_t yy_size_t; #endif -extern yy_size_t yyleng; +extern int yyleng; extern FILE *yyin, *yyout; @@ -184,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 \ @@ -207,12 +195,12 @@ struct yy_buffer_state /* Size of input buffer in bytes, not including room for EOB * characters. */ - yy_size_t yy_buf_size; + int yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - yy_size_t yy_n_chars; + int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -235,7 +223,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. */ @@ -263,7 +251,7 @@ struct yy_buffer_state /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ -static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ +static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general @@ -282,11 +270,11 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; -static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ -yy_size_t yyleng; +static int yy_n_chars; /* number of characters read into yy_ch_buf */ +int yyleng; /* Points to current character in buffer. */ -static char *yy_c_buf_p = (char *) 0; +static char *yy_c_buf_p = NULL; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ @@ -311,7 +299,7 @@ static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); 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,yy_size_t len ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); void *yyalloc (yy_size_t ); void *yyrealloc (void *,yy_size_t ); @@ -345,7 +333,7 @@ void yyfree (void * ); typedef unsigned char YY_CHAR; -FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; +FILE *yyin = NULL, *yyout = NULL; typedef int yy_state_type; @@ -362,10 +350,7 @@ extern char *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 ); -#if defined(__GNUC__) && __GNUC__ >= 3 -__attribute__((__noreturn__)) -#endif -static void yy_fatal_error (yyconst char msg[] ); +static void yynoreturn yy_fatal_error (yyconst char* msg ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. @@ -373,13 +358,13 @@ static void yy_fatal_error (yyconst char msg[] ); #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ (yytext_ptr) -= (yy_more_len); \ - yyleng = (size_t) (yy_cp - (yytext_ptr)); \ + yyleng = (int) (yy_cp - (yytext_ptr)); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 216 -#define YY_END_OF_BUFFER 217 +#define YY_NUM_RULES 220 +#define YY_END_OF_BUFFER 221 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -387,239 +372,244 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[2092] = +static yyconst flex_int16_t yy_accept[2150] = { 0, - 1, 1, 198, 198, 202, 202, 206, 206, 210, 210, - 1, 1, 217, 214, 1, 196, 196, 215, 2, 215, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 198, 199, 199, 200, 215, 202, 203, 203, 204, 215, - 209, 206, 207, 207, 208, 215, 210, 211, 211, 212, - 215, 213, 197, 2, 201, 215, 213, 214, 0, 1, - 2, 2, 2, 2, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 1, 1, 202, 202, 206, 206, 210, 210, 214, 214, + 1, 1, 221, 218, 1, 200, 200, 219, 2, 219, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 202, 203, 203, 204, 219, 206, 207, 207, 208, 219, + 213, 210, 211, 211, 212, 219, 214, 215, 215, 216, + 219, 217, 201, 2, 205, 219, 217, 218, 0, 1, + 2, 2, 2, 2, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 198, - 0, 202, 0, 209, 0, 206, 210, 0, 213, 0, - 2, 2, 213, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 202, 0, 206, 0, 213, 0, 210, 214, 0, 217, + 0, 2, 2, 217, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 213, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 213, 214, 214, 214, 214, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 217, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 77, - 214, 214, 214, 214, 214, 214, 8, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 88, 213, 214, 214, + 217, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 77, 218, 218, 218, + 218, 218, 218, 8, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 218, 218, 218, 218, 88, 217, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 214, 214, 214, 214, 214, 214, 214, 214, 213, 214, - 214, 214, 214, 214, 37, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 163, 214, 14, 15, - 214, 18, 17, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 149, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 3, 214, 214, 214, 214, 214, 214, 214, 214, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 217, + 218, 218, 218, 218, 218, 37, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 167, 218, + 14, 15, 218, 18, 17, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 153, 218, 218, 218, 218, 218, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 213, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 205, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 40, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 218, 218, 218, 218, 218, 3, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 217, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 209, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 41, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 138, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 20, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 97, - 214, 205, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 190, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 113, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 218, 218, 218, 218, 40, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 41, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 142, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 20, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 101, 218, 209, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 194, 218, 218, 218, 218, 218, 218, 218, 218, - 214, 214, 96, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 75, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 25, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 38, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 39, 214, 214, + 218, 218, 218, 117, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 100, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 75, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 25, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 38, 218, 218, 218, 218, 218, 218, 218, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 114, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 28, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 178, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 32, 214, 33, 214, 214, 214, - 78, 214, 79, 214, 214, 76, 214, 214, 214, 214, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 39, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 118, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 28, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 182, 218, 218, 218, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 7, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 156, 214, 214, - 214, 214, 99, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 29, 214, 214, 214, 214, 214, 214, 214, - 130, 214, 129, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 218, 218, 218, 218, 218, 218, 218, 32, 218, 33, + 218, 218, 218, 78, 218, 79, 218, 218, 76, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 7, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 160, 218, 218, 218, 218, 103, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 29, 218, 218, 218, - 214, 16, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 42, 214, 214, 214, 214, 214, 137, 214, - 214, 214, 214, 81, 80, 214, 214, 214, 214, 214, - 214, 214, 214, 124, 214, 214, 214, 214, 214, 214, - 214, 214, 89, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 60, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 64, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 218, 218, 218, 218, 134, 218, 133, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 16, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 42, 218, 218, + 218, 218, 218, 218, 141, 218, 218, 218, 218, 81, + 80, 218, 218, 218, 218, 218, 218, 218, 218, 128, + 218, 218, 218, 218, 218, 218, 218, 218, 89, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 60, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 214, 36, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 127, 128, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 6, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 188, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 26, 214, 214, 214, 214, 214, 214, 214, 214, - 120, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 142, 214, 121, 214, 214, 154, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 64, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 36, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 131, + 132, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 6, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 192, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 26, 218, 218, 218, 218, 218, 218, 218, 218, 124, - 27, 214, 214, 214, 214, 84, 214, 85, 214, 83, - 214, 214, 214, 214, 214, 214, 214, 214, 94, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 177, 214, 214, 122, 214, 214, 214, 214, 214, 125, - 214, 153, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 74, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 34, 214, 214, 22, 214, 214, 214, - 214, 19, 214, 104, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 49, 51, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 146, 218, 125, 218, 218, 158, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 27, 218, 218, 218, 218, 84, 218, 85, 218, 83, + 218, 218, 218, 218, 218, 218, 218, 218, 98, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 181, 218, 218, 126, 218, 218, 218, 218, 218, 129, + 218, 218, 157, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 74, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 192, 214, 214, 164, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 86, 214, 214, - 214, 214, 214, 214, 214, 93, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 98, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 148, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 112, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 108, + 218, 218, 218, 218, 218, 34, 218, 218, 22, 218, + 218, 218, 218, 19, 218, 108, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 49, 51, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 196, 218, 218, 168, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 86, 218, 218, 218, 218, 218, 218, 218, 97, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 102, 218, 218, 218, 218, 218, 218, 218, - 214, 115, 214, 214, 214, 214, 214, 92, 214, 214, - 70, 214, 140, 214, 214, 214, 214, 214, 155, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 169, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 111, 214, 214, 214, 214, 214, 52, - 53, 214, 214, 214, 214, 214, 35, 59, 116, 214, - 131, 214, 157, 126, 214, 214, 45, 214, 118, 214, - 214, 214, 214, 214, 9, 214, 214, 214, 73, 214, - 214, 214, 214, 182, 214, 139, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 218, 218, 218, 218, 218, 218, 152, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 116, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 112, 218, 119, 218, 218, 218, + 218, 218, 92, 218, 218, 70, 218, 218, 144, 218, + 218, 218, 218, 218, 159, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 173, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 115, + 218, 218, 218, 218, 218, 52, 53, 218, 218, 218, + 218, 218, 35, 59, 120, 218, 135, 218, 161, 130, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 100, - 191, 214, 214, 168, 214, 214, 214, 214, 214, 214, - 214, 214, 150, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 117, 214, 214, 44, 46, 214, 214, - 214, 214, 214, 214, 214, 72, 214, 214, 214, 214, - 180, 214, 187, 214, 214, 214, 214, 144, 23, 24, - 214, 214, 214, 214, 214, 214, 214, 214, 69, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 218, 218, 218, 45, 218, 122, 218, 218, 218, 218, + 218, 9, 218, 218, 218, 73, 218, 218, 218, 218, + 186, 218, 143, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 104, 195, + 218, 218, 172, 218, 218, 218, 218, 218, 218, 218, + 218, 154, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 121, 218, 218, 218, 44, 46, 218, 218, - 214, 146, 143, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 43, 214, 214, 214, 214, 214, - 214, 214, 214, 95, 13, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 12, 214, - 214, 21, 214, 214, 214, 186, 214, 189, 47, 214, - 152, 145, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 107, 106, 214, 214, 214, 214, - 147, 141, 214, 214, 193, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 54, 214, 214, 214, 181, + 218, 218, 218, 218, 218, 72, 218, 218, 218, 218, + 184, 218, 191, 218, 218, 218, 218, 218, 148, 23, + 24, 218, 218, 218, 218, 218, 218, 218, 218, 69, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 150, 147, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 43, 218, 218, 218, + 218, 218, 218, 218, 218, 99, 13, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 12, 218, 218, 21, 218, 218, 218, 190, 218, + 193, 47, 218, 156, 218, 149, 218, 218, 218, 218, - 214, 214, 151, 214, 214, 214, 214, 214, 214, 214, - 214, 48, 214, 214, 82, 214, 101, 103, 132, 214, - 214, 214, 105, 214, 214, 158, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 165, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 133, 214, 214, 179, 214, 214, 30, 214, - 214, 214, 214, 4, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 161, 214, 214, 214, 214, - 194, 214, 214, 214, 214, 214, 167, 214, 214, 136, - 214, 214, 214, 214, 214, 214, 214, 214, 57, 214, + 218, 218, 218, 218, 218, 218, 218, 218, 111, 110, + 218, 218, 218, 218, 218, 151, 145, 218, 218, 197, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 54, 218, 218, 218, 185, 218, 218, 218, 155, 218, + 218, 218, 218, 218, 218, 218, 218, 48, 218, 218, + 218, 82, 218, 105, 107, 136, 218, 218, 218, 109, + 218, 218, 162, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 169, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 31, 185, 162, 214, 11, 214, 214, 214, 214, 214, - 214, 134, 61, 214, 214, 214, 110, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 166, 90, - 214, 87, 214, 214, 214, 63, 67, 62, 214, 55, - 214, 10, 214, 214, 214, 183, 214, 214, 109, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 68, 66, 214, 56, 214, 123, 214, - 214, 135, 214, 214, 214, 214, 102, 50, 214, 195, - 214, 214, 214, 214, 214, 214, 91, 65, 58, 214, - 184, 214, 214, 214, 160, 214, 214, 214, 214, 214, + 137, 218, 218, 183, 218, 218, 218, 30, 218, 218, + 218, 218, 4, 218, 218, 93, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 165, 218, 218, 218, 218, + 218, 198, 218, 218, 218, 218, 218, 171, 218, 218, + 140, 218, 218, 218, 218, 218, 218, 218, 218, 57, + 218, 31, 189, 166, 218, 218, 11, 218, 218, 218, + 218, 218, 218, 138, 61, 218, 218, 218, 114, 218, + 218, 218, 218, 94, 218, 218, 218, 218, 218, 218, + 218, 170, 90, 218, 87, 218, 218, 218, 63, 67, + 62, 218, 55, 218, 218, 10, 218, 218, 218, 187, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 71, 214, 159, 176, 214, 214, - 214, 214, 214, 214, 5, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 119, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 172, 214, 214, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 170, - 214, 173, 174, 214, 214, 214, 214, 214, 171, 175, - 0 + 218, 218, 113, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 68, 66, 218, + 56, 218, 218, 218, 127, 218, 218, 139, 218, 218, + 218, 218, 106, 50, 218, 199, 218, 218, 218, 218, + 218, 218, 91, 65, 95, 96, 58, 218, 188, 218, + 218, 218, 164, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 71, 218, 163, 180, 218, 218, 218, 218, + 218, 218, 5, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 123, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 176, 218, 218, 218, 218, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 174, 218, 177, + 178, 218, 218, 218, 218, 218, 175, 179, 0 } ; static yyconst YY_CHAR yy_ec[256] = @@ -662,479 +652,491 @@ static yyconst YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_uint16_t yy_base[2106] = +static yyconst flex_uint16_t yy_base[2164] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 3356, 3053, 81, 4111, 4111, 4111, 96, 52, - 72, 107, 111, 70, 91, 109, 124, 98, 114, 117, - 133, 136, 64, 144, 129, 145, 156, 165, 158, 173, - 3023, 4111, 4111, 4111, 164, 2711, 4111, 4111, 4111, 137, - 2662, 2391, 4111, 4111, 4111, 196, 2295, 4111, 4111, 4111, - 189, 2145, 4111, 200, 4111, 204, 167, 2019, 208, 147, - 0, 215, 0, 0, 209, 147, 202, 210, 211, 204, - 219, 216, 217, 221, 230, 223, 227, 233, 220, 228, - 232, 245, 241, 248, 63, 242, 252, 253, 249, 258, + 90, 112, 2240, 2121, 81, 4228, 4228, 4228, 96, 52, + 72, 107, 111, 70, 91, 109, 124, 98, 127, 114, + 133, 136, 64, 144, 146, 150, 156, 177, 167, 182, + 2077, 4228, 4228, 4228, 182, 2049, 4228, 4228, 4228, 173, + 1931, 1589, 4228, 4228, 4228, 206, 1411, 4228, 4228, 4228, + 194, 1269, 4228, 210, 4228, 214, 174, 948, 218, 147, + 0, 225, 0, 0, 189, 143, 97, 219, 212, 145, + 179, 214, 221, 223, 227, 234, 229, 170, 231, 232, + 233, 237, 244, 238, 253, 63, 236, 257, 258, 254, - 259, 262, 265, 264, 266, 270, 274, 276, 275, 282, - 281, 283, 285, 289, 170, 288, 286, 296, 300, 298, - 311, 295, 299, 297, 314, 317, 319, 303, 320, 1944, - 333, 1887, 336, 1418, 345, 1167, 1012, 337, 980, 351, - 355, 0, 347, 349, 340, 351, 352, 353, 356, 357, - 88, 364, 362, 368, 376, 375, 379, 380, 363, 384, - 385, 374, 387, 396, 392, 394, 398, 386, 402, 403, - 411, 405, 414, 421, 418, 422, 426, 423, 424, 433, - 434, 441, 442, 437, 438, 440, 443, 447, 448, 449, - 452, 450, 454, 456, 458, 459, 460, 467, 462, 474, + 260, 263, 264, 266, 268, 270, 269, 276, 277, 280, + 286, 284, 287, 285, 290, 292, 293, 296, 300, 308, + 299, 315, 301, 306, 297, 321, 320, 317, 324, 326, + 872, 337, 760, 340, 686, 344, 352, 248, 348, 158, + 355, 359, 0, 351, 353, 361, 341, 357, 360, 362, + 363, 364, 366, 373, 371, 369, 378, 382, 383, 388, + 381, 386, 390, 393, 394, 396, 399, 405, 406, 407, + 409, 410, 411, 408, 419, 430, 422, 432, 433, 434, + 436, 445, 437, 446, 447, 444, 448, 449, 450, 452, + 453, 454, 456, 459, 463, 460, 465, 466, 468, 467, - 466, 359, 476, 477, 473, 475, 484, 494, 495, 491, - 479, 496, 490, 497, 504, 501, 513, 499, 500, 503, - 511, 515, 520, 522, 525, 530, 516, 528, 531, 521, - 533, 535, 539, 536, 547, 542, 550, 551, 549, 559, - 546, 555, 557, 558, 560, 562, 563, 564, 567, 569, - 572, 574, 582, 577, 575, 579, 583, 584, 589, 591, - 598, 594, 604, 595, 606, 608, 609, 611, 614, 622, - 613, 620, 624, 626, 616, 633, 629, 630, 632, 639, - 634, 638, 641, 651, 647, 640, 655, 656, 658, 660, - 662, 680, 666, 664, 690, 665, 668, 670, 677, 704, + 479, 474, 483, 480, 482, 481, 496, 486, 487, 494, + 497, 504, 501, 502, 506, 507, 508, 517, 509, 519, + 512, 510, 521, 522, 523, 528, 529, 533, 537, 543, + 530, 541, 544, 534, 546, 549, 547, 554, 562, 555, + 564, 559, 565, 572, 557, 567, 568, 571, 573, 575, + 576, 579, 580, 581, 586, 587, 596, 588, 593, 592, + 597, 600, 595, 602, 613, 618, 619, 607, 611, 620, + 623, 631, 628, 634, 625, 636, 637, 638, 639, 648, + 643, 650, 646, 655, 656, 653, 652, 665, 670, 657, + 669, 672, 676, 675, 677, 679, 697, 683, 678, 707, - 678, 688, 691, 669, 700, 709, 693, 702, 705, 716, - 707, 711, 712, 723, 718, 724, 725, 722, 726, 729, - 730, 735, 731, 737, 739, 742, 750, 743, 761, 744, - 756, 760, 758, 751, 766, 768, 769, 774, 776, 777, - 772, 778, 779, 780, 785, 786, 790, 784, 796, 4111, - 798, 791, 794, 800, 801, 803, 4111, 804, 806, 811, - 813, 808, 814, 816, 810, 829, 833, 820, 831, 828, - 832, 835, 837, 838, 840, 841, 861, 844, 846, 842, - 854, 863, 855, 870, 847, 873, 868, 845, 876, 878, - 879, 881, 884, 885, 888, 889, 4111, 890, 898, 896, + 681, 684, 695, 685, 694, 704, 708, 714, 715, 717, + 718, 725, 720, 723, 724, 732, 721, 729, 731, 744, + 737, 739, 743, 747, 645, 748, 749, 751, 750, 754, + 756, 762, 766, 771, 778, 758, 775, 773, 782, 783, + 784, 786, 788, 789, 798, 793, 794, 795, 796, 799, + 802, 804, 806, 812, 809, 818, 4228, 820, 810, 816, + 813, 823, 825, 4228, 826, 827, 828, 835, 832, 833, + 834, 845, 855, 836, 856, 840, 852, 851, 858, 859, + 860, 861, 862, 864, 884, 867, 869, 865, 877, 886, + 876, 893, 870, 897, 891, 868, 899, 901, 902, 904, - 882, 899, 902, 906, 907, 915, 911, 913, 914, 917, - 918, 920, 924, 931, 928, 927, 933, 943, 935, 945, - 948, 938, 946, 947, 949, 950, 958, 956, 953, 962, - 955, 969, 965, 964, 973, 961, 982, 968, 972, 984, - 974, 993, 990, 991, 992, 995, 997, 998, 1003, 1001, - 1004, 1005, 1013, 1009, 1008, 1019, 1021, 1010, 1023, 1030, - 1027, 1031, 1033, 1029, 1041, 1038, 1039, 1048, 1043, 1044, - 1046, 1045, 1060, 1055, 1047, 1061, 1057, 1065, 1066, 1068, - 1058, 1069, 1070, 1071, 1073, 1075, 1078, 1079, 1087, 1082, - 1083, 1090, 1092, 1095, 1098, 1099, 1085, 1100, 1105, 1109, + 907, 908, 911, 912, 4228, 913, 921, 919, 905, 922, + 925, 929, 936, 932, 940, 937, 938, 939, 942, 943, + 945, 950, 957, 952, 959, 963, 973, 969, 971, 978, + 953, 955, 975, 976, 977, 985, 982, 980, 983, 987, + 995, 991, 990, 997, 992, 1001, 993, 1003, 1012, 999, + 1020, 1006, 1016, 1018, 1021, 1023, 1024, 1025, 1027, 1030, + 1029, 1031, 1041, 1036, 1034, 1046, 1047, 1033, 1048, 1056, + 1053, 1060, 1061, 1063, 1071, 1059, 1066, 1073, 1055, 1069, + 1077, 1075, 1076, 1089, 1084, 1057, 1090, 1086, 1091, 1094, + 1096, 1097, 1098, 1099, 1100, 1102, 1101, 1104, 1106, 1113, - 1110, 1111, 1118, 1107, 1119, 1120, 1108, 1121, 1127, 1128, - 1133, 1124, 1134, 1138, 4111, 1142, 1139, 1140, 1141, 1146, - 1154, 1149, 1150, 1151, 1152, 1158, 4111, 1156, 4111, 4111, - 1161, 4111, 4111, 1160, 1173, 1162, 1174, 1181, 1189, 1190, - 1188, 1165, 1185, 1187, 1195, 1200, 1204, 1205, 1201, 1213, - 1210, 1217, 1218, 1219, 1184, 1207, 1222, 1224, 1225, 1227, - 1229, 1231, 1230, 1234, 1232, 1236, 1247, 1255, 1250, 1251, - 1252, 1254, 1238, 1258, 1259, 1261, 1240, 1264, 1267, 1271, - 1268, 4111, 1269, 1270, 1274, 1276, 1272, 1282, 1284, 306, - 1285, 4111, 1289, 1293, 1290, 1295, 1294, 1297, 1298, 1301, + 1108, 1110, 1124, 1111, 1120, 1128, 1122, 1126, 1130, 1132, + 1135, 1134, 1137, 1144, 1136, 1146, 1147, 1148, 1150, 1152, + 1155, 1160, 1151, 1165, 1161, 4228, 1163, 1173, 1168, 1171, + 1169, 1176, 1183, 1178, 1179, 1180, 1184, 1187, 4228, 1185, + 4228, 4228, 1190, 4228, 4228, 1189, 1195, 1208, 1202, 1210, + 1219, 1220, 1218, 1193, 1215, 1191, 1225, 1230, 1234, 1235, + 1231, 1242, 1240, 1244, 1248, 1249, 1250, 1237, 1252, 1254, + 1255, 1257, 1259, 1261, 1260, 1264, 1265, 1267, 1277, 1285, + 1286, 1268, 1281, 1283, 1284, 1288, 1289, 1290, 1293, 1296, + 1217, 1299, 1304, 1300, 4228, 1301, 1302, 1305, 1309, 1303, - 1303, 1302, 1304, 1305, 1307, 1313, 1309, 1308, 1319, 1310, - 1326, 1333, 1334, 1331, 1329, 1332, 1336, 1337, 1338, 1349, - 1342, 1346, 1347, 1356, 1351, 1354, 1355, 1362, 1357, 1359, - 1365, 1366, 1367, 1368, 1391, 1369, 1374, 1377, 1376, 1375, - 1380, 1382, 1383, 1399, 1389, 1404, 1405, 1406, 1409, 1410, - 1413, 1415, 1416, 1423, 1386, 1430, 1427, 1419, 1432, 1426, - 1436, 1438, 1442, 1441, 1443, 1444, 1445, 1451, 1452, 4111, - 1460, 1455, 1459, 1461, 1468, 1465, 1466, 1467, 1471, 1472, - 1473, 1475, 1479, 1469, 1477, 1481, 1483, 1486, 1493, 4111, - 1490, 1496, 1497, 1498, 1499, 1500, 1502, 1506, 1516, 1508, + 1315, 1313, 1318, 1320, 1321, 4228, 1323, 1330, 1322, 1326, + 1333, 1335, 1334, 1337, 1336, 1338, 1340, 1341, 1339, 1347, + 1349, 1346, 1351, 1353, 1361, 1368, 1370, 1365, 1366, 1367, + 1371, 1372, 1377, 1380, 1381, 1382, 1383, 1392, 1388, 1390, + 1391, 1395, 1397, 1398, 1399, 1401, 1403, 1404, 1405, 1427, + 1406, 1410, 1413, 1415, 1416, 1419, 1437, 1421, 1445, 1433, + 1446, 1441, 1449, 1452, 1451, 1453, 1455, 1423, 1466, 1459, + 1467, 1470, 1461, 1463, 1472, 1475, 1479, 1477, 1483, 1481, + 1484, 1485, 1493, 1490, 4228, 1505, 1497, 1488, 1498, 1508, + 1501, 1509, 1422, 1510, 1513, 1512, 1514, 1515, 1516, 1517, - 4111, 1513, 1523, 1524, 1515, 1519, 1520, 1526, 1536, 1527, - 1531, 1532, 1535, 1537, 1538, 1544, 4111, 1539, 1546, 1548, - 1550, 1552, 1555, 1557, 1558, 1559, 1563, 1564, 1571, 1567, - 1569, 4111, 1566, 1579, 1570, 1568, 1591, 1592, 1575, 1588, - 1595, 1587, 1589, 1596, 1601, 1598, 1600, 1599, 1602, 4111, - 1604, 849, 1605, 1607, 1610, 1617, 1620, 1621, 1624, 1625, - 1628, 1631, 1632, 1615, 1633, 1635, 1637, 1613, 1638, 1641, - 1643, 1644, 1646, 4111, 1653, 1655, 1661, 1657, 1645, 1658, - 1663, 1669, 1666, 1670, 1667, 4111, 1678, 1679, 1673, 1680, - 1681, 1684, 1687, 1689, 1688, 1690, 1691, 1692, 1693, 1696, + 1518, 1523, 1525, 1530, 4228, 1526, 1522, 1527, 1535, 1537, + 1539, 1543, 1546, 1551, 1553, 1549, 4228, 1554, 1564, 1556, + 1565, 1559, 1561, 1567, 1572, 1569, 1571, 1575, 1578, 1576, + 1579, 1580, 1586, 4228, 1587, 1588, 1591, 1595, 1590, 1600, + 1602, 1601, 1603, 1606, 1607, 1614, 1610, 1611, 4228, 1609, + 1621, 1612, 1613, 1634, 1635, 1617, 1631, 1638, 1630, 1633, + 1639, 1644, 1641, 1643, 1642, 1645, 4228, 1646, 130, 1648, + 1653, 1654, 1656, 1663, 1655, 1664, 1667, 1669, 1671, 1673, + 1675, 1658, 1679, 1676, 1680, 1682, 1684, 1687, 1688, 1689, + 1692, 4228, 1695, 1701, 1693, 1702, 1704, 1703, 1710, 1712, - 1697, 1703, 4111, 1710, 1705, 1706, 1702, 1713, 1715, 1726, - 1721, 1723, 1728, 1729, 1731, 1724, 1738, 1734, 1742, 1736, - 1743, 1746, 1749, 1752, 1753, 1754, 1739, 1762, 1765, 1755, - 1763, 1764, 1769, 1774, 1766, 4111, 1771, 1776, 1779, 1781, - 1789, 1785, 1786, 1787, 1792, 1793, 1794, 1796, 1798, 1804, - 1802, 1805, 1811, 4111, 1812, 1808, 1816, 1818, 1819, 1822, - 1824, 1825, 1827, 1828, 1831, 1830, 1832, 1833, 1840, 1841, - 1842, 1843, 4111, 1850, 1851, 1852, 1859, 1854, 1855, 1860, - 1862, 1864, 1865, 1866, 1873, 1868, 1870, 1869, 1875, 1876, - 1872, 1878, 1879, 1886, 1895, 1883, 1896, 4111, 1880, 1908, + 1713, 1715, 1714, 4228, 1723, 1724, 1718, 1725, 1726, 1729, + 1730, 1731, 1734, 1735, 1736, 1741, 1742, 1738, 1739, 1746, + 4228, 1766, 1748, 1761, 1750, 1763, 1752, 1773, 1765, 1771, + 1774, 1775, 1777, 1779, 1786, 1781, 1778, 1789, 1791, 1792, + 1793, 1795, 1799, 1800, 1802, 1801, 1809, 1810, 1806, 1813, + 1812, 1822, 1751, 1807, 4228, 1820, 1814, 1825, 1827, 1839, + 1831, 1835, 1834, 1840, 1837, 1841, 1847, 1842, 1846, 1849, + 1858, 1850, 1862, 4228, 1863, 1859, 1867, 1869, 1852, 1874, + 1870, 1876, 1878, 1879, 1880, 1881, 1882, 1883, 1888, 1890, + 1891, 1892, 4228, 1900, 1901, 1902, 1909, 1904, 1893, 1908, - 1900, 1904, 1905, 1898, 1910, 1918, 1911, 1923, 1922, 1921, - 1914, 1924, 1927, 1929, 1928, 1931, 4111, 1935, 1930, 1936, - 1937, 1938, 1941, 1942, 1940, 1953, 1947, 1960, 1943, 1962, - 1963, 1966, 1967, 1968, 1969, 1976, 1978, 1979, 1982, 4111, - 1985, 1986, 1987, 1975, 1992, 1977, 1988, 2000, 2004, 1995, - 2001, 2002, 2005, 2006, 2008, 2010, 2017, 2009, 2012, 2014, - 2018, 2022, 2013, 2023, 2025, 2039, 2029, 2044, 2030, 2045, - 2040, 2046, 2047, 2048, 4111, 2051, 2052, 2057, 2058, 2061, - 2059, 2062, 2070, 2073, 4111, 2066, 4111, 2069, 2075, 2085, - 4111, 2081, 4111, 2087, 2078, 4111, 2088, 2089, 2083, 2092, + 1911, 1914, 1915, 1916, 1923, 1918, 1920, 1921, 1922, 1924, + 1925, 1927, 1928, 1930, 1941, 1944, 1929, 1945, 4228, 1937, + 1955, 1951, 1957, 1958, 1959, 1961, 1962, 1967, 1969, 1971, + 1968, 1970, 1973, 1976, 1978, 1980, 1982, 4228, 1984, 1985, + 1986, 1992, 1987, 1991, 1993, 1990, 1995, 2007, 2010, 2011, + 2012, 1996, 2013, 2016, 2017, 2018, 2025, 2026, 2030, 2032, + 4228, 2035, 2036, 2037, 2024, 2039, 2027, 2043, 2051, 2053, + 2048, 2054, 2055, 2056, 2063, 2058, 2059, 2060, 2067, 2064, + 2069, 2070, 2071, 2065, 2072, 2076, 2080, 2082, 2086, 2095, + 2087, 2096, 2097, 2099, 2101, 2103, 4228, 2104, 2102, 2107, - 2093, 2095, 2096, 2102, 2099, 2104, 2105, 2097, 2109, 2108, - 2110, 2113, 4111, 2115, 2116, 2121, 2122, 2125, 2126, 2127, - 2128, 2131, 2136, 2139, 2148, 2132, 2149, 4111, 2140, 2156, - 2141, 2153, 4111, 2133, 2161, 2163, 2150, 2158, 2166, 2165, - 2167, 2172, 2176, 2174, 2171, 2181, 2182, 2185, 2189, 2191, - 2184, 2193, 2194, 2201, 2198, 2205, 2196, 2204, 2211, 2208, - 2197, 2200, 2206, 2216, 2217, 2221, 2222, 2224, 2223, 2225, - 2227, 2228, 4111, 2237, 2232, 2229, 2238, 2239, 2242, 2240, - 4111, 2244, 4111, 2247, 2258, 2261, 2262, 2250, 2263, 2266, - 2248, 2268, 2269, 2276, 2274, 2271, 2281, 2282, 2283, 2285, + 2111, 2113, 2112, 2115, 2119, 2126, 2128, 4228, 2123, 4228, + 2125, 2134, 2137, 4228, 2143, 4228, 2145, 2136, 4228, 2146, + 2147, 2138, 2129, 2150, 2151, 2140, 2158, 2159, 2160, 2161, + 2165, 2166, 2167, 2169, 2168, 4228, 2175, 2172, 2170, 2178, + 2176, 2182, 2183, 2185, 2186, 2189, 2193, 2192, 2204, 2196, + 2205, 4228, 2200, 2207, 2201, 2211, 4228, 2208, 2212, 2218, + 2210, 2215, 2221, 2222, 2223, 2233, 2231, 2235, 2229, 2237, + 2227, 2241, 2253, 2245, 2248, 2249, 2250, 2260, 2256, 2263, + 2255, 2259, 2272, 2262, 2258, 2265, 2269, 2273, 2274, 2279, + 2277, 2281, 2280, 2282, 2283, 2284, 4228, 2293, 2286, 2294, - 2284, 4111, 2286, 2287, 2288, 2290, 2293, 2298, 2307, 2304, - 2292, 2315, 4111, 2318, 2299, 2319, 2326, 2321, 4111, 2323, - 2331, 2328, 2329, 4111, 4111, 2330, 2334, 2333, 2335, 2336, - 2345, 2340, 2344, 4111, 2348, 2337, 2350, 2358, 2359, 2360, - 2352, 2351, 4111, 2366, 2368, 2369, 2370, 2372, 2373, 2371, - 2382, 2375, 2378, 2380, 2389, 2391, 2393, 4111, 2395, 2397, - 2399, 2401, 2402, 2403, 2405, 2407, 2409, 2408, 2410, 2411, - 2415, 2412, 2416, 2418, 2429, 2430, 2419, 2431, 2432, 2438, - 2435, 2442, 2439, 2444, 2445, 2453, 2448, 4111, 2462, 2446, - 2463, 2454, 2458, 2466, 2467, 2475, 2459, 2470, 2474, 2482, + 2295, 2296, 2304, 2298, 4228, 2307, 4228, 2301, 2309, 2312, + 2315, 2317, 2319, 2321, 2320, 2323, 2331, 2325, 2338, 2345, + 2328, 2333, 2335, 2341, 2347, 2339, 4228, 2349, 2350, 2356, + 2354, 2352, 2359, 2365, 2360, 2358, 2379, 4228, 2377, 2367, + 2381, 2382, 2389, 2384, 4228, 2386, 2394, 2391, 2392, 4228, + 4228, 2393, 2397, 2396, 2398, 2399, 2408, 2403, 2407, 4228, + 2411, 2400, 2413, 2421, 2422, 2423, 2415, 2414, 4228, 2429, + 2431, 2432, 2433, 2435, 2436, 2434, 2438, 2445, 2442, 2441, + 2443, 2451, 2452, 2457, 4228, 2460, 2461, 2463, 2464, 2466, + 2467, 2469, 2471, 2472, 2473, 2474, 2475, 2478, 2479, 2480, - 2477, 4111, 2486, 2481, 2483, 2488, 2484, 2491, 2489, 2493, - 2498, 2501, 4111, 4111, 2496, 2503, 2506, 2507, 2508, 2511, - 2512, 2516, 2518, 4111, 2519, 2526, 2523, 2522, 2531, 2533, - 2536, 2539, 2532, 2528, 2530, 2538, 2551, 2540, 2545, 2546, - 2552, 2553, 4111, 2555, 2560, 2559, 2556, 2561, 2565, 2566, - 2569, 2572, 2576, 2578, 2585, 2581, 2589, 2592, 2584, 2587, - 2597, 4111, 2594, 2596, 2595, 2601, 2608, 2603, 2611, 2604, - 4111, 2609, 2613, 2618, 2620, 2615, 2621, 2623, 2624, 2622, - 4111, 2629, 4111, 2633, 2632, 4111, 2637, 2638, 2640, 2642, - 2641, 2648, 2643, 2645, 2652, 2653, 2655, 2656, 2664, 2657, + 2481, 2485, 2498, 2493, 2494, 2495, 2503, 2497, 2505, 2499, + 2507, 2508, 2516, 2518, 4228, 2525, 2509, 2528, 2511, 2523, + 2530, 2531, 2539, 2534, 2524, 2535, 2543, 2538, 4228, 2551, + 2540, 2541, 2557, 2542, 2559, 2549, 2552, 2563, 2566, 4228, + 4228, 2561, 2567, 2572, 2575, 2573, 2576, 2577, 2578, 2581, + 2582, 4228, 2584, 2592, 2591, 2587, 2599, 2601, 2597, 2600, + 2604, 2602, 2606, 2608, 2609, 2610, 2614, 2615, 2617, 2619, + 4228, 2618, 2621, 2624, 2626, 2627, 2629, 2635, 2631, 2645, + 2641, 2646, 2648, 2655, 2651, 2658, 2659, 2654, 2661, 2669, + 4228, 2664, 2666, 2665, 2656, 2678, 2667, 2685, 2671, 4228, - 4111, 2665, 2660, 2667, 2673, 4111, 2669, 4111, 2674, 4111, - 2679, 2675, 2686, 2681, 2683, 2685, 2692, 2688, 4111, 2693, - 2695, 2701, 2697, 2699, 2704, 2705, 2707, 2703, 2708, 2712, - 4111, 2710, 2713, 4111, 2709, 2722, 2721, 2727, 2728, 4111, - 2725, 4111, 2726, 2737, 2738, 2741, 2742, 2743, 2745, 2747, - 2749, 2757, 2753, 2754, 2752, 4111, 2755, 2756, 2762, 2771, - 2763, 2759, 2781, 2768, 2780, 2776, 2783, 2785, 2787, 2789, - 2793, 2794, 2790, 4111, 2795, 2801, 4111, 2797, 2798, 2804, - 2805, 4111, 2807, 4111, 2808, 2809, 2811, 2816, 2820, 2817, - 2828, 2812, 2829, 2830, 2832, 2840, 2815, 2837, 4111, 4111, + 2684, 2674, 2691, 2693, 2682, 2694, 2695, 2698, 2699, 2697, + 4228, 2704, 4228, 2707, 2696, 4228, 2700, 2711, 2714, 2715, + 2716, 2718, 2719, 2720, 2722, 2725, 2726, 2727, 2734, 2731, + 4228, 2735, 2733, 2737, 2741, 4228, 2743, 4228, 2738, 4228, + 2748, 2752, 2755, 2753, 2756, 2758, 2762, 2759, 4228, 2764, + 2765, 2768, 2772, 2773, 2774, 2775, 2776, 2777, 2778, 2783, + 4228, 2779, 2780, 4228, 2790, 2782, 2791, 2792, 2798, 4228, + 2801, 2804, 4228, 2807, 2812, 2796, 2808, 2814, 2815, 2818, + 2817, 2819, 2830, 2826, 2825, 2828, 4228, 2827, 2829, 2833, + 2840, 2834, 2837, 2848, 2845, 2851, 2844, 2854, 2858, 2852, - 2842, 2838, 2844, 2848, 2846, 2850, 2859, 2851, 2855, 2860, - 4111, 2862, 2852, 4111, 2861, 2864, 2867, 2863, 2870, 2871, - 2876, 2874, 2877, 2879, 2880, 2882, 2883, 4111, 2884, 2887, - 2888, 2895, 2896, 2893, 2897, 4111, 2891, 2899, 2901, 2900, - 2907, 2909, 2915, 2920, 2924, 2911, 2925, 2927, 2930, 2932, - 2934, 2936, 2929, 2941, 2937, 2944, 2946, 2947, 4111, 2949, - 2951, 2952, 2957, 2958, 2953, 2960, 2961, 2965, 2967, 2968, - 2969, 2973, 4111, 2970, 2974, 2978, 2975, 2981, 2982, 2985, - 2987, 2989, 2991, 2994, 2999, 4111, 2992, 2998, 3000, 3002, - 3005, 3006, 3009, 3012, 3010, 3013, 3016, 3024, 3028, 4111, + 2860, 2847, 2866, 2863, 2867, 4228, 2869, 2870, 4228, 2871, + 2873, 2876, 2880, 4228, 2877, 4228, 2881, 2882, 2878, 2886, + 2889, 2890, 2892, 2885, 2898, 2900, 2901, 2912, 2907, 2908, + 4228, 4228, 2910, 2916, 2913, 2918, 2919, 2921, 2923, 2930, + 2927, 2926, 2929, 4228, 2935, 2936, 4228, 2937, 2938, 2940, + 2942, 2944, 2946, 2945, 2948, 2950, 2951, 2953, 2952, 2955, + 4228, 2960, 2959, 2965, 2967, 2969, 2968, 2970, 4228, 2972, + 2976, 2981, 2983, 2971, 2988, 2992, 2995, 2998, 2999, 3000, + 3002, 3006, 3005, 3008, 3010, 3011, 3017, 3019, 3021, 3023, + 3012, 3024, 4228, 3027, 3029, 3025, 3034, 3031, 3035, 3036, - 3020, 4111, 3029, 3033, 3037, 3035, 3021, 4111, 3039, 3042, - 4111, 3045, 4111, 3046, 3047, 3048, 3050, 3056, 4111, 3059, - 3060, 3067, 3064, 3066, 3069, 3071, 3072, 3073, 3074, 4111, - 3077, 3076, 3085, 3082, 3078, 3088, 3089, 3090, 3091, 3095, - 3099, 3096, 3097, 4111, 3101, 3104, 3112, 3105, 3114, 4111, - 4111, 3107, 3118, 3120, 3110, 3124, 4111, 4111, 4111, 3127, - 4111, 3122, 4111, 4111, 3128, 3130, 4111, 3132, 4111, 3141, - 3137, 3134, 3139, 3142, 4111, 3143, 3144, 3146, 4111, 3148, - 3155, 3151, 3152, 4111, 3154, 4111, 3158, 3164, 3160, 3166, - 3170, 3171, 3173, 3175, 3178, 3179, 3180, 3181, 3183, 3185, + 3045, 3048, 3038, 3040, 3050, 3052, 4228, 3042, 3053, 3056, + 2973, 3059, 3054, 3064, 3060, 3065, 3066, 3067, 3070, 3075, + 4228, 3074, 3078, 3081, 3082, 3084, 3085, 3088, 3087, 3089, + 3091, 3094, 3103, 3107, 4228, 3096, 4228, 3101, 3112, 3115, + 3117, 3099, 4228, 3114, 3122, 4228, 3104, 3123, 4228, 3124, + 3125, 3128, 3132, 3134, 4228, 3137, 3138, 3145, 3141, 3142, + 3146, 3149, 3150, 3151, 3152, 4228, 3154, 3157, 3163, 3166, + 3155, 3159, 3167, 3165, 3168, 3172, 3180, 3176, 3173, 4228, + 3178, 3184, 3192, 3185, 3195, 4228, 4228, 3187, 3198, 3200, + 3183, 3204, 4228, 4228, 4228, 3207, 4228, 3190, 4228, 4228, - 3187, 3188, 3186, 3190, 3192, 3194, 3196, 3200, 3202, 3203, - 3204, 3209, 3207, 3208, 3210, 3214, 3212, 3222, 3223, 4111, - 4111, 3227, 2766, 4111, 3228, 3229, 3231, 3232, 3233, 3234, - 3237, 3235, 4111, 3239, 3240, 3241, 3243, 3246, 3244, 3251, - 3256, 3257, 3264, 3266, 3273, 3260, 3268, 3258, 3270, 3271, - 3274, 3279, 3280, 4111, 3281, 3285, 4111, 4111, 3286, 3289, - 3288, 3293, 3295, 3297, 3298, 4111, 3299, 3301, 3310, 3303, - 4111, 3312, 4111, 3318, 3300, 3321, 3323, 4111, 4111, 4111, - 3324, 3307, 3315, 3326, 3327, 3331, 3330, 3333, 4111, 3337, - 3334, 3338, 3340, 3345, 3347, 3350, 3348, 3360, 3351, 3359, + 3210, 3211, 3213, 4228, 3218, 4228, 3202, 3219, 3214, 3221, + 3222, 4228, 3223, 3224, 3226, 4228, 3228, 3235, 3231, 3232, + 4228, 3234, 4228, 3238, 3241, 3245, 3244, 3248, 3251, 3252, + 3254, 3256, 3259, 3260, 3261, 3263, 3266, 3268, 3269, 3270, + 3267, 3274, 3276, 3271, 3282, 3277, 3283, 3284, 3288, 3286, + 3291, 3292, 3293, 3294, 3300, 3304, 3311, 3312, 4228, 4228, + 3301, 3306, 4228, 3308, 3315, 3316, 3320, 3318, 3321, 3324, + 3322, 4228, 3326, 3330, 3329, 3336, 3331, 3332, 3334, 3335, + 3337, 3345, 3349, 3359, 3354, 3355, 3357, 3358, 3360, 3361, + 3362, 3364, 4228, 3365, 3368, 3371, 4228, 4228, 3369, 3375, - 3362, 4111, 4111, 3363, 3370, 3366, 3373, 3368, 3374, 3375, - 3365, 3377, 3378, 3381, 4111, 3386, 3382, 3388, 3390, 3391, - 3392, 3394, 3396, 4111, 4111, 3397, 3398, 3402, 3408, 3404, - 3410, 3399, 3412, 3409, 3413, 3425, 3422, 3415, 4111, 3426, - 3427, 4111, 3429, 3431, 3432, 4111, 3436, 4111, 4111, 3439, - 4111, 4111, 3434, 3441, 3444, 3446, 3451, 3453, 3456, 3448, - 3457, 3464, 3460, 3461, 4111, 4111, 3468, 3463, 3469, 3476, - 4111, 4111, 3472, 3478, 4111, 3473, 3474, 3479, 3482, 3483, - 3480, 3488, 3485, 3489, 3490, 3495, 3501, 3505, 3499, 3507, - 3493, 3508, 3510, 3511, 3516, 4111, 3518, 3520, 3514, 4111, + 3383, 3377, 3373, 3385, 3393, 4228, 3379, 3395, 3387, 3396, + 4228, 3401, 4228, 3403, 3398, 3405, 3406, 3408, 4228, 4228, + 4228, 3412, 3410, 3414, 3415, 3416, 3418, 3419, 3420, 4228, + 3422, 3425, 3426, 3429, 3434, 3436, 3439, 3440, 3447, 3443, + 3442, 3450, 3452, 4228, 4228, 3453, 3460, 3456, 3464, 3463, + 3465, 3462, 3468, 3469, 3473, 3472, 4228, 3476, 3475, 3474, + 3481, 3482, 3486, 3487, 3489, 4228, 4228, 3485, 3490, 3493, + 3497, 3499, 3500, 3501, 3503, 3505, 3507, 3514, 3520, 3513, + 3517, 4228, 3506, 3523, 4228, 3525, 3526, 3527, 4228, 3530, + 4228, 4228, 3533, 4228, 3528, 4228, 3534, 3537, 3544, 3546, - 3522, 3524, 4111, 3525, 3527, 3533, 3530, 3535, 3546, 3528, - 3538, 4111, 3542, 3544, 4111, 3548, 4111, 4111, 4111, 3549, - 3552, 3555, 4111, 3557, 3559, 4111, 3566, 3558, 3561, 3574, - 3570, 3572, 3569, 3577, 3576, 3584, 3579, 3586, 4111, 3580, - 3583, 3588, 3589, 3591, 3592, 3593, 3596, 3597, 3603, 3600, - 3607, 3610, 4111, 3612, 3614, 4111, 3617, 3618, 4111, 3620, - 3621, 3622, 3624, 4111, 3627, 3625, 3630, 3632, 3634, 3635, - 3636, 3637, 3647, 3650, 3655, 4111, 3649, 3638, 3659, 3642, - 4111, 3663, 3651, 3671, 3664, 3667, 4111, 3673, 3669, 4111, - 3675, 3678, 3676, 3679, 3686, 3692, 3694, 3695, 4111, 3697, + 3551, 3553, 3556, 3539, 3545, 3541, 3561, 3558, 4228, 4228, + 3569, 3547, 3565, 3572, 3573, 4228, 4228, 3574, 3564, 4228, + 3575, 3576, 3578, 3580, 3581, 3582, 3585, 3586, 3587, 3588, + 3589, 3591, 3602, 3597, 3599, 3606, 3608, 3609, 3610, 3611, + 4228, 3615, 3616, 3617, 4228, 3621, 3622, 3623, 4228, 3624, + 3629, 3633, 3636, 3625, 3644, 3639, 3641, 4228, 3647, 3648, + 3649, 4228, 3651, 4228, 4228, 4228, 3653, 3654, 3656, 4228, + 3659, 3662, 4228, 3668, 3660, 3670, 3672, 3679, 3675, 3682, + 3671, 3678, 3684, 3691, 3674, 3687, 4228, 3688, 3689, 3694, + 3695, 3696, 3697, 3698, 3701, 3703, 3705, 3709, 3713, 3715, - 4111, 4111, 4111, 3698, 4111, 3702, 3689, 3687, 3704, 3706, - 3709, 4111, 4111, 3708, 3711, 3712, 4111, 3715, 3718, 3719, - 3720, 3721, 3722, 3723, 3727, 3728, 3726, 3725, 4111, 4111, - 3731, 4111, 3734, 3737, 3640, 4111, 4111, 4111, 3740, 4111, - 3744, 4111, 3750, 3752, 3753, 4111, 3755, 3756, 4111, 3757, - 3759, 3760, 3763, 3765, 3769, 3773, 3758, 3766, 3776, 3777, - 3779, 3780, 3786, 4111, 4111, 3788, 4111, 3790, 4111, 3791, - 3793, 4111, 3794, 3795, 3798, 3802, 4111, 4111, 3677, 4111, - 3809, 3804, 3805, 3807, 3811, 3808, 4111, 4111, 4111, 3812, - 4111, 3816, 3814, 3817, 4111, 3819, 3822, 3821, 3823, 3827, + 4228, 3717, 3719, 4228, 3722, 3723, 3724, 4228, 3726, 3727, + 3728, 3730, 4228, 3731, 3736, 4228, 3733, 3738, 3741, 3742, + 3744, 3743, 3746, 3754, 3752, 4228, 3748, 3758, 3765, 3759, + 3766, 4228, 3767, 3768, 3775, 3771, 3774, 4228, 3777, 3779, + 4228, 3781, 3785, 3782, 3786, 3793, 3795, 3800, 3797, 4228, + 3804, 4228, 4228, 4228, 3783, 3806, 4228, 3809, 3801, 3810, + 3811, 3813, 3814, 4228, 4228, 3816, 3818, 3821, 4228, 3822, + 3823, 3827, 3825, 4228, 3828, 3829, 3833, 3831, 3835, 3834, + 3839, 4228, 4228, 3838, 4228, 3841, 3846, 3850, 4228, 4228, + 4228, 3857, 4228, 3862, 3861, 4228, 3864, 3848, 3867, 4228, - 3825, 3832, 3828, 3837, 3833, 3839, 3845, 3846, 3849, 3852, - 3853, 3861, 3856, 3858, 4111, 3859, 4111, 4111, 3860, 3869, - 3871, 3862, 3867, 3864, 4111, 3872, 3866, 3875, 3878, 3873, - 3882, 3884, 3881, 3893, 3890, 3896, 3897, 3898, 3905, 3904, - 3906, 3907, 3908, 3915, 3910, 3911, 4111, 3914, 3912, 3916, - 3920, 3921, 3918, 3925, 3936, 3938, 3940, 3934, 3928, 3943, - 3946, 3948, 3930, 3951, 3950, 4111, 3952, 3954, 3958, 3960, - 3961, 3963, 3964, 3965, 3968, 3971, 3973, 3975, 3980, 4111, - 3976, 4111, 4111, 3984, 3985, 3986, 3991, 3993, 4111, 4111, - 4111, 4019, 4026, 4033, 4040, 4047, 680, 4054, 4061, 4068, + 3869, 3870, 4228, 3871, 3873, 3874, 3877, 3879, 3883, 3887, + 3872, 3880, 3884, 3891, 3893, 3890, 3900, 4228, 4228, 3902, + 4228, 3904, 3907, 3911, 4228, 3908, 3913, 4228, 3914, 3915, + 3918, 3920, 4228, 4228, 3921, 4228, 3928, 3923, 3925, 3927, + 3929, 3932, 4228, 4228, 4228, 4228, 4228, 3931, 4228, 3935, + 3936, 3938, 4228, 3940, 3941, 3942, 3944, 3943, 3945, 3949, + 3953, 3958, 3960, 3966, 3968, 3950, 3971, 3963, 3972, 3980, + 3975, 3978, 4228, 3979, 4228, 4228, 3981, 3990, 3991, 3982, + 3986, 3983, 4228, 3992, 3993, 3995, 3997, 3998, 4004, 4011, + 4001, 4013, 4018, 4019, 4021, 4003, 4031, 4028, 4029, 4015, - 4075, 4082, 4089, 4096, 4103 + 4030, 4038, 4033, 4035, 4228, 4037, 4039, 4040, 4041, 4043, + 4045, 4046, 4055, 4060, 4057, 4063, 4047, 4068, 4064, 4069, + 4053, 4073, 4074, 4228, 4075, 4077, 4079, 4081, 4083, 4085, + 4086, 4087, 4090, 4092, 4095, 4097, 4101, 4228, 4102, 4228, + 4228, 4106, 4091, 4103, 4113, 4115, 4228, 4228, 4228, 4136, + 4143, 4150, 4157, 4164, 101, 4171, 4178, 4185, 4192, 4199, + 4206, 4213, 4220 } ; -static yyconst flex_int16_t yy_def[2106] = +static yyconst flex_int16_t yy_def[2164] = { 0, - 2091, 1, 2092, 2092, 2093, 2093, 2094, 2094, 2095, 2095, - 2096, 2096, 2091, 2097, 2091, 2091, 2091, 2091, 2098, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2099, 2091, 2091, 2091, 2099, 2100, 2091, 2091, 2091, 2100, - 2101, 2091, 2091, 2091, 2091, 2101, 2102, 2091, 2091, 2091, - 2102, 2103, 2091, 2104, 2091, 2103, 2103, 2097, 2097, 2091, - 2105, 2098, 2105, 2098, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, + 2149, 1, 2150, 2150, 2151, 2151, 2152, 2152, 2153, 2153, + 2154, 2154, 2149, 2155, 2149, 2149, 2149, 2149, 2156, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2157, 2149, 2149, 2149, 2157, 2158, 2149, 2149, 2149, 2158, + 2159, 2149, 2149, 2149, 2149, 2159, 2160, 2149, 2149, 2149, + 2160, 2161, 2149, 2162, 2149, 2161, 2161, 2155, 2155, 2149, + 2163, 2156, 2163, 2156, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2099, - 2099, 2100, 2100, 2101, 2101, 2091, 2102, 2102, 2103, 2103, - 2104, 2104, 2103, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2157, 2157, 2158, 2158, 2159, 2159, 2149, 2160, 2160, 2161, + 2161, 2162, 2162, 2161, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2103, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2103, 2097, 2097, 2097, 2097, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2161, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, - 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2103, 2097, 2097, + 2161, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, + 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, + 2155, 2155, 2155, 2155, 2149, 2161, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2103, 2097, - 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2091, 2091, - 2097, 2091, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2161, + 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, + 2149, 2149, 2155, 2149, 2149, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2103, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, + 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2161, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, - 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, - 2097, 2103, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, + 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2161, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, - 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, + 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2091, 2097, 2091, 2097, 2097, 2097, - 2091, 2097, 2091, 2097, 2097, 2091, 2097, 2097, 2097, 2097, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, - 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2091, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2149, + 2155, 2155, 2155, 2149, 2155, 2149, 2155, 2155, 2149, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2149, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, - 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2091, 2097, - 2097, 2097, 2097, 2091, 2091, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, + 2155, 2155, 2155, 2155, 2149, 2155, 2149, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, + 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2149, + 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, - 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2091, 2091, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2091, 2097, 2091, 2097, 2097, 2091, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, + 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, - 2091, 2097, 2097, 2097, 2097, 2091, 2097, 2091, 2097, 2091, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2091, 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2091, - 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2091, 2097, 2097, 2091, 2097, 2097, 2097, - 2097, 2091, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2091, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2149, 2155, 2149, 2155, 2155, 2149, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2149, 2155, 2155, 2155, 2155, 2149, 2155, 2149, 2155, 2149, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2149, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2149, + 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2091, 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, + 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2149, 2155, + 2155, 2155, 2155, 2149, 2155, 2149, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2149, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2149, 2155, 2155, 2149, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, - 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, - 2091, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2091, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2091, - 2091, 2097, 2097, 2097, 2097, 2097, 2091, 2091, 2091, 2097, - 2091, 2097, 2091, 2091, 2097, 2097, 2091, 2097, 2091, 2097, - 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2091, 2097, - 2097, 2097, 2097, 2091, 2097, 2091, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, + 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2149, 2155, 2149, 2155, 2155, 2155, + 2155, 2155, 2149, 2155, 2155, 2149, 2155, 2155, 2149, 2155, + 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, + 2155, 2155, 2155, 2155, 2155, 2149, 2149, 2155, 2155, 2155, + 2155, 2155, 2149, 2149, 2149, 2155, 2149, 2155, 2149, 2149, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, - 2091, 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2091, 2097, 2097, 2091, 2091, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, - 2091, 2097, 2091, 2097, 2097, 2097, 2097, 2091, 2091, 2091, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, + 2155, 2155, 2155, 2149, 2155, 2149, 2155, 2155, 2155, 2155, + 2155, 2149, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, + 2149, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2149, + 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2149, 2155, 2155, 2155, 2149, 2149, 2155, 2155, - 2097, 2091, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2091, 2091, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, - 2097, 2091, 2097, 2097, 2097, 2091, 2097, 2091, 2091, 2097, - 2091, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2091, 2091, 2097, 2097, 2097, 2097, - 2091, 2091, 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2091, + 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, + 2149, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2149, 2149, + 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2149, 2149, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2149, 2149, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2149, 2155, 2155, 2149, 2155, 2155, 2155, 2149, 2155, + 2149, 2149, 2155, 2149, 2155, 2149, 2155, 2155, 2155, 2155, - 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2091, 2097, 2097, 2091, 2097, 2091, 2091, 2091, 2097, - 2097, 2097, 2091, 2097, 2097, 2091, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2091, 2097, 2097, 2091, 2097, 2097, 2091, 2097, - 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, - 2091, 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2091, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2149, + 2155, 2155, 2155, 2155, 2155, 2149, 2149, 2155, 2155, 2149, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2149, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2149, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, + 2155, 2149, 2155, 2149, 2149, 2149, 2155, 2155, 2155, 2149, + 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, - 2091, 2091, 2091, 2097, 2091, 2097, 2097, 2097, 2097, 2097, - 2097, 2091, 2091, 2097, 2097, 2097, 2091, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2091, - 2097, 2091, 2097, 2097, 2097, 2091, 2091, 2091, 2097, 2091, - 2097, 2091, 2097, 2097, 2097, 2091, 2097, 2097, 2091, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2091, 2091, 2097, 2091, 2097, 2091, 2097, - 2097, 2091, 2097, 2097, 2097, 2097, 2091, 2091, 2097, 2091, - 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2091, 2091, 2097, - 2091, 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, + 2149, 2155, 2155, 2149, 2155, 2155, 2155, 2149, 2155, 2155, + 2155, 2155, 2149, 2155, 2155, 2149, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, + 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2155, + 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, + 2155, 2149, 2149, 2149, 2155, 2155, 2149, 2155, 2155, 2155, + 2155, 2155, 2155, 2149, 2149, 2155, 2155, 2155, 2149, 2155, + 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2149, 2149, 2155, 2149, 2155, 2155, 2155, 2149, 2149, + 2149, 2155, 2149, 2155, 2155, 2149, 2155, 2155, 2155, 2149, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2091, 2097, 2091, 2091, 2097, 2097, - 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2091, 2097, 2097, 2097, 2097, - 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2091, - 2097, 2091, 2091, 2097, 2097, 2097, 2097, 2097, 2091, 2091, - 0, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, + 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2149, 2155, + 2149, 2155, 2155, 2155, 2149, 2155, 2155, 2149, 2155, 2155, + 2155, 2155, 2149, 2149, 2155, 2149, 2155, 2155, 2155, 2155, + 2155, 2155, 2149, 2149, 2149, 2149, 2149, 2155, 2149, 2155, + 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2149, 2155, 2149, 2149, 2155, 2155, 2155, 2155, + 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, - 2091, 2091, 2091, 2091, 2091 + 2155, 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2149, 2155, 2155, 2155, 2155, 2155, 2155, + 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2149, 2155, 2149, + 2149, 2155, 2155, 2155, 2155, 2155, 2149, 2149, 0, 2149, + 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, + 2149, 2149, 2149 } ; -static yyconst flex_uint16_t yy_nxt[4152] = +static yyconst flex_uint16_t yy_nxt[4269] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, 14, 14, 18, 20, 21, 14, 22, 23, 24, 25, @@ -1143,459 +1145,471 @@ static yyconst flex_uint16_t yy_nxt[4152] = 42, 43, 44, 42, 43, 44, 47, 48, 47, 48, 49, 45, 49, 68, 45, 68, 68, 50, 68, 50, 52, 53, 54, 55, 68, 18, 52, 53, 54, 55, - 171, 18, 56, 58, 59, 60, 69, 69, 56, 58, - 59, 60, 70, 69, 61, 69, 71, 86, 75, 76, - 61, 15, 16, 17, 63, 64, 65, 73, 106, 73, + 173, 18, 56, 58, 59, 60, 69, 69, 56, 58, + 59, 60, 70, 69, 61, 69, 71, 87, 75, 76, + 61, 15, 16, 17, 63, 64, 65, 73, 107, 73, - 73, 69, 73, 66, 69, 88, 77, 87, 73, 74, - 220, 69, 67, 15, 16, 17, 63, 64, 65, 89, - 69, 78, 69, 90, 69, 66, 96, 69, 79, 81, - 69, 91, 97, 82, 67, 80, 83, 69, 84, 85, - 132, 92, 69, 132, 93, 98, 69, 99, 70, 69, - 103, 94, 71, 95, 104, 100, 112, 69, 69, 113, - 69, 101, 107, 114, 145, 102, 108, 130, 130, 69, - 105, 69, 109, 115, 117, 110, 116, 118, 69, 122, - 140, 123, 111, 69, 119, 125, 69, 127, 120, 121, - 126, 128, 137, 137, 143, 129, 124, 134, 195, 134, + 73, 68, 73, 66, 69, 89, 77, 88, 73, 74, + 69, 69, 67, 15, 16, 17, 63, 64, 65, 90, + 69, 78, 69, 91, 69, 66, 97, 69, 79, 82, + 147, 92, 80, 83, 67, 81, 84, 69, 85, 86, + 69, 93, 99, 141, 94, 98, 69, 100, 70, 69, + 104, 95, 71, 96, 105, 101, 69, 69, 69, 69, + 146, 102, 108, 69, 114, 103, 109, 151, 115, 69, + 106, 141, 110, 113, 118, 111, 133, 119, 116, 133, + 69, 117, 112, 69, 120, 131, 131, 141, 121, 122, + 69, 123, 69, 124, 126, 69, 128, 138, 138, 127, - 134, 73, 134, 73, 73, 139, 73, 139, 139, 68, - 139, 68, 68, 142, 68, 69, 73, 69, 73, 73, - 68, 73, 69, 69, 69, 144, 147, 73, 74, 69, - 69, 150, 69, 69, 69, 146, 69, 157, 151, 148, - 69, 69, 149, 69, 152, 69, 69, 153, 154, 164, - 159, 162, 155, 156, 69, 69, 158, 161, 69, 163, - 160, 69, 69, 165, 167, 69, 69, 168, 166, 175, - 173, 69, 69, 176, 172, 69, 179, 69, 69, 69, - 169, 170, 180, 69, 182, 178, 177, 69, 69, 69, - 174, 181, 183, 186, 69, 69, 69, 191, 69, 69, + 129, 144, 69, 162, 130, 145, 152, 135, 125, 135, + 135, 73, 135, 73, 73, 140, 73, 140, 140, 68, + 140, 68, 68, 143, 68, 69, 73, 69, 73, 73, + 68, 73, 69, 153, 69, 148, 69, 73, 74, 154, + 69, 159, 69, 150, 69, 69, 69, 69, 149, 69, + 69, 69, 155, 156, 166, 163, 161, 69, 157, 158, + 160, 139, 167, 164, 165, 168, 69, 69, 174, 169, + 69, 69, 170, 69, 177, 175, 69, 69, 178, 69, + 181, 69, 69, 69, 182, 171, 172, 180, 184, 69, + 69, 179, 183, 69, 188, 176, 185, 69, 69, 69, - 188, 69, 69, 184, 189, 185, 187, 199, 69, 69, - 69, 69, 69, 69, 190, 193, 69, 197, 192, 69, - 196, 194, 198, 200, 69, 201, 203, 69, 204, 206, - 69, 205, 69, 69, 210, 208, 130, 130, 211, 132, - 137, 137, 132, 713, 209, 202, 134, 214, 134, 134, - 207, 134, 139, 69, 139, 139, 73, 139, 73, 73, - 140, 73, 69, 212, 69, 69, 69, 213, 142, 69, - 69, 221, 69, 216, 284, 69, 69, 69, 222, 215, - 223, 69, 224, 225, 218, 217, 226, 69, 69, 69, - 219, 227, 69, 69, 234, 235, 229, 69, 69, 69, + 69, 193, 186, 69, 190, 69, 69, 187, 191, 69, + 69, 189, 69, 69, 69, 202, 195, 192, 194, 69, + 197, 69, 196, 199, 203, 198, 201, 200, 69, 204, + 69, 208, 206, 69, 69, 207, 209, 69, 211, 69, + 131, 131, 212, 133, 214, 135, 133, 135, 135, 205, + 135, 138, 138, 137, 69, 213, 140, 210, 140, 140, + 73, 140, 73, 73, 141, 73, 69, 215, 217, 218, + 69, 216, 143, 69, 69, 69, 69, 69, 219, 69, + 225, 222, 69, 228, 69, 229, 69, 226, 224, 227, + 221, 69, 220, 230, 69, 69, 69, 223, 231, 69, - 69, 230, 236, 237, 239, 69, 231, 69, 228, 69, - 238, 69, 232, 233, 240, 69, 69, 245, 69, 241, - 246, 247, 242, 243, 69, 248, 244, 69, 254, 256, - 249, 69, 255, 258, 69, 69, 69, 69, 252, 69, - 261, 257, 250, 253, 251, 259, 69, 69, 263, 264, - 69, 69, 262, 69, 69, 69, 69, 265, 260, 267, - 69, 69, 69, 69, 266, 69, 269, 69, 273, 69, - 271, 69, 69, 69, 279, 69, 268, 277, 272, 69, - 69, 282, 274, 270, 286, 275, 69, 69, 69, 69, - 69, 276, 69, 280, 281, 278, 285, 69, 289, 283, + 233, 69, 238, 69, 240, 234, 69, 69, 241, 69, + 235, 243, 69, 239, 244, 232, 236, 237, 69, 69, + 69, 69, 69, 69, 69, 252, 245, 250, 251, 242, + 253, 247, 69, 246, 248, 69, 259, 258, 249, 260, + 262, 256, 254, 69, 255, 69, 69, 69, 257, 69, + 69, 261, 265, 267, 268, 266, 263, 69, 69, 69, + 69, 69, 69, 69, 269, 69, 69, 69, 271, 69, + 264, 273, 69, 69, 270, 275, 69, 277, 69, 69, + 69, 69, 276, 272, 281, 282, 284, 69, 274, 279, + 287, 278, 69, 69, 69, 69, 69, 289, 280, 69, - 288, 290, 292, 69, 69, 287, 293, 69, 69, 140, - 69, 299, 69, 69, 69, 295, 69, 69, 298, 300, - 301, 296, 297, 294, 69, 291, 69, 302, 69, 69, - 304, 303, 305, 69, 69, 69, 307, 308, 69, 309, - 310, 69, 312, 69, 69, 313, 69, 311, 69, 69, - 314, 316, 69, 306, 319, 69, 317, 321, 318, 69, - 69, 315, 69, 69, 69, 322, 324, 323, 69, 320, - 69, 69, 69, 69, 329, 69, 69, 69, 330, 325, - 69, 332, 69, 334, 328, 69, 326, 69, 69, 337, - 69, 327, 69, 338, 331, 69, 69, 69, 333, 336, + 69, 290, 283, 291, 295, 285, 286, 69, 294, 69, + 69, 297, 293, 288, 69, 69, 298, 69, 292, 141, + 69, 69, 69, 69, 304, 69, 306, 305, 296, 303, + 69, 301, 69, 299, 69, 69, 69, 308, 300, 302, + 307, 69, 69, 69, 311, 313, 69, 69, 314, 310, + 69, 315, 309, 316, 69, 318, 69, 69, 319, 69, + 69, 317, 69, 320, 323, 322, 312, 69, 69, 325, + 69, 327, 69, 328, 321, 69, 324, 69, 69, 330, + 69, 69, 326, 329, 69, 69, 69, 335, 69, 69, + 331, 336, 69, 69, 69, 340, 338, 334, 332, 69, - 339, 340, 69, 335, 69, 344, 350, 69, 69, 341, - 342, 69, 343, 348, 349, 346, 347, 69, 345, 69, - 351, 69, 69, 357, 69, 352, 69, 69, 353, 69, - 355, 356, 358, 69, 354, 69, 359, 69, 361, 69, - 365, 360, 69, 69, 364, 69, 69, 69, 367, 362, - 368, 69, 69, 69, 69, 370, 369, 371, 377, 363, - 69, 372, 366, 376, 69, 378, 379, 373, 69, 69, - 374, 69, 375, 69, 380, 69, 384, 69, 140, 69, - 68, 69, 69, 69, 382, 383, 395, 406, 381, 386, - 69, 69, 385, 69, 394, 387, 388, 396, 400, 398, + 69, 69, 333, 343, 344, 69, 69, 337, 69, 69, + 69, 339, 342, 69, 346, 69, 351, 341, 345, 350, + 69, 353, 347, 348, 69, 349, 69, 354, 355, 356, + 357, 69, 69, 69, 352, 358, 69, 359, 69, 361, + 360, 69, 362, 364, 69, 363, 365, 69, 366, 69, + 69, 69, 69, 367, 368, 372, 69, 374, 69, 69, + 431, 69, 369, 69, 375, 69, 69, 371, 69, 69, + 69, 370, 378, 376, 379, 386, 373, 385, 69, 377, + 380, 381, 69, 69, 382, 69, 383, 384, 69, 69, + 69, 69, 69, 392, 141, 387, 69, 69, 69, 136, - 399, 69, 397, 69, 69, 389, 69, 390, 391, 392, - 401, 402, 393, 69, 403, 69, 408, 69, 69, 405, - 69, 404, 69, 412, 69, 69, 409, 410, 407, 69, - 415, 69, 411, 416, 417, 69, 69, 69, 69, 69, - 414, 422, 69, 69, 69, 413, 423, 424, 69, 421, - 69, 418, 69, 419, 420, 69, 69, 69, 427, 428, - 432, 431, 425, 69, 69, 434, 426, 433, 435, 69, - 429, 69, 430, 69, 69, 437, 439, 438, 436, 69, - 441, 69, 69, 445, 440, 69, 442, 69, 444, 69, - 69, 69, 69, 69, 446, 443, 448, 69, 69, 69, + 403, 410, 391, 388, 390, 389, 394, 69, 69, 393, + 69, 402, 395, 396, 404, 406, 407, 69, 409, 405, + 69, 69, 397, 408, 398, 399, 400, 69, 69, 401, + 69, 69, 417, 69, 69, 415, 69, 69, 69, 421, + 411, 412, 69, 414, 69, 69, 416, 413, 419, 424, + 69, 420, 69, 418, 425, 426, 69, 69, 423, 422, + 69, 69, 69, 69, 69, 432, 433, 69, 428, 69, + 427, 69, 429, 134, 430, 69, 437, 436, 440, 69, + 441, 434, 435, 442, 69, 444, 69, 438, 69, 439, + 447, 69, 445, 443, 446, 69, 69, 69, 450, 69, - 452, 449, 451, 69, 69, 450, 447, 69, 453, 69, - 455, 69, 456, 69, 69, 458, 69, 69, 454, 69, - 466, 69, 459, 69, 69, 457, 69, 69, 461, 69, - 467, 470, 468, 69, 460, 462, 471, 463, 465, 464, - 472, 69, 69, 469, 69, 69, 69, 474, 69, 475, - 69, 69, 478, 69, 69, 69, 480, 69, 69, 69, - 69, 492, 140, 476, 473, 479, 477, 69, 69, 481, - 500, 491, 493, 482, 69, 483, 69, 489, 490, 494, - 484, 69, 485, 69, 496, 497, 69, 498, 495, 69, - 486, 69, 69, 487, 69, 69, 499, 69, 69, 504, + 448, 69, 69, 453, 451, 454, 69, 69, 69, 69, + 455, 69, 69, 457, 452, 69, 449, 69, 458, 69, + 462, 461, 69, 69, 459, 69, 69, 460, 456, 69, + 463, 69, 465, 69, 466, 469, 69, 468, 69, 69, + 69, 69, 476, 464, 467, 69, 69, 69, 69, 69, + 471, 478, 482, 69, 477, 475, 470, 472, 69, 473, + 474, 479, 481, 483, 69, 69, 480, 485, 69, 69, + 486, 69, 69, 69, 69, 69, 489, 69, 69, 491, + 69, 69, 69, 69, 503, 132, 487, 484, 490, 69, + 69, 492, 488, 511, 502, 504, 493, 69, 494, 69, - 488, 69, 69, 140, 501, 510, 505, 509, 508, 69, - 502, 69, 69, 512, 503, 69, 507, 506, 515, 69, - 69, 511, 517, 514, 69, 513, 69, 69, 69, 519, - 69, 69, 516, 69, 522, 521, 518, 69, 526, 529, - 69, 69, 520, 527, 69, 530, 69, 532, 69, 523, - 531, 69, 524, 525, 528, 534, 69, 533, 69, 69, - 69, 69, 69, 69, 536, 540, 69, 539, 69, 69, - 538, 69, 535, 541, 69, 69, 545, 69, 69, 537, - 543, 69, 69, 546, 542, 69, 69, 69, 544, 548, - 554, 547, 551, 140, 549, 69, 552, 69, 550, 553, + 500, 501, 505, 495, 69, 496, 69, 507, 508, 506, + 69, 509, 69, 497, 69, 69, 498, 69, 69, 510, + 69, 69, 515, 499, 69, 69, 141, 512, 521, 516, + 520, 519, 69, 513, 69, 69, 523, 514, 69, 518, + 517, 526, 69, 527, 522, 69, 525, 529, 524, 69, + 69, 69, 69, 69, 531, 69, 69, 528, 69, 534, + 533, 69, 530, 69, 538, 69, 69, 532, 69, 539, + 69, 541, 69, 548, 535, 542, 69, 536, 540, 537, + 543, 544, 69, 545, 69, 546, 69, 547, 69, 69, + 69, 69, 552, 69, 551, 69, 69, 550, 69, 553, - 557, 556, 555, 69, 69, 69, 69, 559, 69, 560, - 69, 69, 558, 562, 69, 563, 69, 69, 69, 566, - 569, 69, 69, 69, 571, 138, 69, 564, 570, 565, - 568, 561, 69, 567, 69, 572, 69, 576, 578, 573, - 69, 574, 69, 69, 69, 577, 69, 580, 581, 579, - 575, 69, 69, 582, 69, 585, 69, 69, 69, 69, - 69, 69, 588, 590, 583, 584, 587, 591, 69, 593, - 69, 69, 592, 69, 69, 586, 595, 589, 69, 69, - 597, 69, 69, 69, 69, 594, 69, 602, 69, 596, - 600, 69, 69, 603, 608, 69, 69, 598, 69, 599, + 69, 555, 557, 69, 69, 69, 69, 549, 69, 558, + 69, 554, 69, 560, 69, 564, 69, 559, 561, 69, + 556, 566, 562, 563, 565, 69, 568, 569, 570, 69, + 567, 69, 571, 69, 69, 572, 69, 69, 69, 574, + 69, 575, 69, 69, 69, 578, 69, 69, 582, 69, + 584, 577, 579, 576, 69, 583, 581, 573, 580, 69, + 69, 69, 585, 589, 587, 586, 69, 591, 69, 69, + 69, 590, 69, 69, 69, 588, 69, 592, 594, 69, + 598, 593, 69, 595, 69, 596, 69, 599, 69, 69, + 69, 600, 597, 601, 604, 608, 605, 69, 607, 69, - 69, 604, 601, 69, 611, 69, 605, 607, 69, 612, - 606, 69, 69, 69, 609, 610, 614, 616, 69, 613, - 69, 69, 69, 69, 69, 618, 617, 619, 615, 621, - 620, 69, 69, 69, 69, 626, 622, 69, 623, 624, - 140, 69, 625, 627, 629, 628, 69, 69, 632, 635, - 630, 69, 69, 69, 69, 69, 633, 637, 631, 69, - 634, 640, 69, 69, 69, 69, 638, 69, 136, 69, - 641, 69, 636, 69, 69, 69, 645, 639, 69, 654, - 646, 642, 652, 647, 650, 644, 69, 69, 655, 643, - 648, 651, 653, 649, 69, 656, 657, 69, 69, 666, + 603, 606, 69, 69, 69, 609, 611, 69, 602, 69, + 69, 69, 69, 69, 69, 69, 616, 69, 610, 69, + 622, 69, 617, 69, 69, 612, 69, 613, 626, 614, + 618, 615, 619, 69, 621, 69, 620, 69, 625, 69, + 623, 69, 624, 69, 627, 69, 628, 69, 69, 69, + 69, 629, 632, 633, 634, 635, 631, 69, 630, 69, + 69, 69, 636, 69, 69, 141, 638, 637, 69, 639, + 642, 643, 641, 69, 69, 640, 69, 644, 69, 646, + 650, 69, 69, 648, 69, 645, 69, 647, 652, 69, + 655, 69, 69, 69, 653, 649, 69, 69, 69, 656, - 69, 69, 69, 69, 658, 659, 665, 660, 69, 679, - 661, 669, 670, 69, 69, 662, 667, 69, 69, 672, - 69, 663, 664, 69, 671, 668, 69, 674, 675, 673, - 69, 69, 69, 676, 678, 69, 677, 69, 69, 680, - 69, 684, 69, 69, 69, 69, 683, 69, 690, 69, - 689, 69, 701, 69, 691, 681, 682, 685, 686, 688, - 69, 687, 692, 69, 69, 69, 693, 69, 69, 697, - 694, 69, 69, 695, 69, 696, 698, 69, 704, 699, - 69, 69, 69, 69, 69, 69, 702, 69, 703, 69, - 708, 706, 707, 700, 709, 69, 711, 69, 69, 710, + 69, 651, 69, 69, 69, 660, 69, 654, 69, 661, + 657, 667, 662, 665, 668, 69, 670, 659, 658, 663, + 666, 69, 664, 69, 671, 669, 672, 681, 69, 683, + 69, 69, 69, 69, 673, 674, 680, 675, 69, 718, + 676, 684, 685, 69, 69, 677, 682, 69, 69, 687, + 69, 678, 679, 69, 686, 69, 689, 69, 690, 688, + 691, 69, 69, 69, 693, 69, 692, 69, 69, 695, + 69, 699, 69, 69, 69, 694, 698, 69, 69, 705, + 69, 69, 141, 704, 709, 696, 697, 700, 701, 703, + 69, 702, 707, 708, 69, 706, 69, 69, 69, 69, - 705, 714, 69, 69, 716, 717, 69, 69, 69, 715, - 69, 69, 712, 719, 69, 69, 69, 69, 69, 725, - 69, 69, 69, 69, 718, 724, 69, 731, 720, 728, - 721, 732, 69, 722, 723, 726, 730, 727, 729, 69, - 735, 736, 69, 733, 69, 69, 69, 69, 737, 69, - 69, 69, 743, 734, 741, 69, 744, 739, 745, 69, - 69, 738, 69, 748, 69, 740, 750, 69, 69, 69, - 69, 742, 69, 747, 752, 140, 754, 746, 69, 69, - 69, 69, 69, 765, 749, 753, 751, 69, 69, 69, - 69, 766, 769, 69, 757, 69, 69, 755, 786, 69, + 710, 69, 69, 69, 711, 712, 69, 714, 717, 69, + 715, 720, 69, 69, 69, 69, 69, 69, 69, 713, + 719, 724, 69, 722, 723, 716, 69, 725, 69, 727, + 726, 69, 721, 69, 69, 69, 69, 731, 733, 69, + 729, 728, 734, 69, 736, 732, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 742, 735, 730, 741, 69, + 69, 745, 69, 749, 69, 748, 69, 737, 738, 739, + 740, 743, 746, 744, 69, 752, 747, 753, 69, 69, + 69, 69, 754, 69, 69, 69, 750, 761, 751, 758, + 69, 760, 756, 69, 69, 69, 69, 762, 755, 765, - 771, 758, 69, 756, 69, 767, 773, 759, 770, 760, - 772, 774, 69, 761, 768, 762, 775, 69, 69, 69, - 763, 776, 69, 69, 778, 764, 69, 780, 69, 69, - 785, 135, 69, 777, 779, 784, 69, 781, 787, 69, - 69, 788, 783, 69, 793, 69, 789, 782, 790, 69, - 794, 69, 797, 795, 69, 69, 69, 69, 69, 791, - 798, 796, 799, 803, 69, 69, 792, 805, 69, 804, - 800, 806, 69, 69, 69, 809, 801, 802, 69, 69, - 69, 69, 69, 810, 69, 69, 69, 808, 69, 812, - 69, 807, 69, 813, 69, 815, 69, 817, 811, 69, + 757, 69, 767, 69, 69, 69, 759, 769, 141, 764, + 69, 69, 69, 763, 69, 771, 69, 69, 69, 69, + 783, 766, 768, 69, 139, 770, 69, 784, 69, 69, + 774, 772, 69, 787, 69, 69, 69, 775, 773, 776, + 69, 785, 802, 777, 830, 778, 69, 788, 790, 779, + 69, 780, 791, 786, 69, 789, 781, 792, 69, 69, + 793, 782, 69, 794, 69, 69, 69, 796, 69, 795, + 798, 804, 69, 803, 69, 805, 69, 797, 799, 69, + 69, 812, 801, 69, 806, 69, 811, 800, 69, 807, + 69, 808, 69, 815, 69, 816, 69, 69, 69, 813, - 823, 814, 818, 69, 819, 821, 69, 816, 822, 69, - 69, 69, 69, 69, 820, 69, 827, 828, 829, 69, - 831, 69, 824, 832, 830, 826, 69, 825, 69, 69, - 835, 839, 69, 69, 833, 836, 69, 69, 837, 69, - 69, 838, 834, 843, 69, 69, 840, 845, 69, 69, - 69, 69, 69, 841, 842, 848, 849, 69, 851, 69, - 844, 69, 854, 69, 847, 69, 846, 853, 69, 850, - 69, 69, 69, 857, 855, 852, 69, 69, 862, 69, - 69, 69, 69, 69, 69, 863, 856, 864, 69, 858, - 861, 859, 69, 868, 867, 866, 860, 865, 869, 870, + 814, 69, 809, 69, 817, 821, 69, 822, 818, 810, + 69, 69, 823, 824, 69, 827, 819, 820, 69, 828, + 825, 69, 69, 69, 826, 69, 69, 69, 69, 69, + 69, 69, 831, 835, 833, 69, 69, 841, 69, 69, + 69, 829, 832, 69, 837, 839, 834, 840, 69, 836, + 69, 838, 69, 842, 843, 846, 69, 847, 844, 69, + 851, 848, 69, 845, 69, 850, 69, 69, 849, 69, + 856, 854, 69, 857, 69, 852, 855, 69, 69, 862, + 69, 858, 69, 853, 69, 69, 859, 864, 69, 69, + 137, 69, 69, 69, 860, 861, 866, 868, 869, 69, - 69, 69, 69, 871, 69, 69, 872, 873, 69, 69, - 877, 69, 69, 69, 69, 69, 875, 69, 69, 874, - 69, 876, 879, 69, 886, 898, 69, 887, 69, 878, - 69, 880, 883, 69, 69, 884, 882, 69, 69, 888, - 881, 69, 889, 885, 69, 69, 69, 894, 69, 892, - 69, 69, 890, 895, 69, 891, 69, 69, 69, 69, - 893, 910, 901, 896, 903, 899, 69, 906, 69, 897, - 69, 69, 900, 907, 69, 904, 69, 902, 905, 69, - 69, 908, 69, 69, 909, 912, 69, 913, 915, 911, - 917, 69, 69, 69, 69, 919, 918, 69, 914, 916, + 69, 69, 863, 69, 69, 867, 871, 874, 69, 865, + 873, 870, 875, 69, 69, 69, 69, 872, 877, 69, + 69, 882, 69, 69, 69, 69, 69, 69, 883, 884, + 69, 876, 878, 881, 69, 879, 887, 886, 888, 880, + 885, 889, 890, 69, 69, 891, 69, 69, 69, 892, + 893, 69, 69, 897, 69, 69, 69, 69, 69, 69, + 895, 69, 894, 906, 896, 899, 69, 69, 69, 69, + 907, 69, 898, 908, 900, 903, 69, 69, 902, 909, + 69, 904, 69, 901, 69, 910, 69, 905, 69, 69, + 915, 913, 69, 69, 919, 69, 911, 69, 912, 916, - 69, 69, 69, 69, 69, 69, 69, 923, 920, 69, - 69, 928, 922, 921, 924, 69, 69, 933, 69, 69, - 925, 929, 927, 69, 926, 932, 69, 935, 69, 930, - 931, 937, 934, 939, 69, 936, 69, 69, 940, 69, - 938, 69, 69, 944, 69, 947, 946, 69, 948, 69, - 942, 69, 69, 941, 943, 69, 69, 945, 950, 69, - 949, 951, 69, 953, 952, 69, 69, 69, 69, 958, - 957, 955, 959, 960, 954, 69, 69, 69, 69, 69, - 961, 956, 69, 967, 69, 968, 962, 69, 970, 69, - 969, 963, 69, 964, 69, 965, 974, 966, 69, 69, + 69, 69, 69, 914, 917, 69, 69, 922, 69, 927, + 924, 920, 918, 929, 69, 69, 69, 69, 921, 928, + 931, 925, 923, 69, 926, 69, 69, 69, 69, 930, + 934, 69, 933, 936, 932, 938, 69, 69, 69, 69, + 940, 939, 69, 69, 69, 935, 937, 69, 69, 69, + 944, 69, 69, 941, 69, 69, 945, 943, 942, 69, + 949, 69, 990, 69, 69, 69, 946, 948, 953, 947, + 950, 951, 952, 954, 69, 955, 69, 959, 69, 69, + 960, 958, 956, 957, 69, 961, 69, 69, 69, 965, + 69, 69, 69, 968, 69, 969, 970, 962, 963, 69, - 69, 975, 69, 973, 971, 69, 69, 69, 977, 69, - 972, 69, 976, 979, 985, 69, 981, 69, 69, 978, - 980, 69, 984, 987, 69, 69, 989, 982, 988, 69, - 991, 69, 69, 986, 993, 69, 983, 69, 69, 996, - 69, 69, 994, 69, 69, 69, 69, 1001, 990, 998, - 1000, 999, 992, 69, 69, 69, 69, 1006, 1007, 995, - 1003, 997, 1004, 69, 69, 69, 1009, 69, 69, 1005, - 1008, 1002, 69, 69, 1013, 69, 1010, 69, 69, 69, - 1017, 69, 69, 69, 1012, 69, 69, 1011, 69, 69, - 1023, 69, 69, 69, 1021, 1018, 69, 1014, 1015, 69, + 964, 967, 69, 966, 69, 69, 69, 974, 69, 972, + 973, 971, 69, 69, 69, 69, 980, 981, 977, 69, + 69, 976, 69, 69, 982, 69, 69, 69, 975, 978, + 983, 991, 979, 69, 984, 69, 989, 992, 69, 985, + 69, 986, 993, 987, 69, 988, 996, 69, 69, 995, + 69, 997, 69, 69, 69, 69, 994, 999, 998, 69, + 69, 1001, 69, 69, 1002, 69, 1000, 1007, 1003, 1004, + 1008, 69, 69, 1005, 1010, 69, 69, 1012, 1009, 1011, + 69, 1014, 69, 69, 1006, 1015, 1016, 69, 1017, 69, + 1019, 69, 69, 69, 69, 69, 69, 1024, 1021, 1013, - 133, 1019, 1016, 1020, 1027, 1024, 1022, 1028, 69, 69, - 1026, 69, 1031, 69, 1030, 1032, 1025, 69, 69, 1029, - 1033, 69, 1034, 69, 69, 1035, 1037, 69, 1039, 1038, - 1042, 69, 1036, 1040, 69, 69, 69, 69, 1041, 1043, - 69, 69, 69, 69, 69, 1044, 1045, 1048, 69, 69, - 69, 69, 1051, 69, 69, 69, 69, 131, 1047, 1049, - 69, 1052, 1054, 1046, 1050, 1055, 69, 1060, 1053, 1056, - 1057, 1059, 1058, 69, 1062, 69, 69, 1064, 1061, 69, - 69, 69, 69, 1069, 1063, 1070, 1066, 1068, 69, 69, - 69, 69, 69, 1071, 1065, 69, 1072, 1073, 69, 69, + 1023, 69, 1022, 69, 69, 69, 69, 1029, 1030, 1026, + 1018, 1027, 1020, 69, 69, 69, 1032, 69, 1028, 1025, + 1031, 69, 69, 1036, 69, 1034, 1033, 69, 69, 69, + 1040, 69, 1035, 69, 69, 69, 69, 69, 69, 1047, + 69, 69, 69, 69, 136, 1041, 1044, 1037, 1038, 1045, + 69, 1042, 1039, 1043, 69, 1046, 1052, 69, 69, 1051, + 1048, 1050, 1056, 1054, 69, 1053, 1049, 1057, 69, 1055, + 69, 69, 69, 1058, 69, 69, 1066, 1064, 1059, 1063, + 69, 69, 69, 69, 69, 1060, 69, 1061, 1067, 69, + 1062, 69, 1068, 69, 1065, 69, 1072, 69, 69, 69, - 69, 69, 1067, 1074, 1078, 69, 1076, 1080, 69, 1075, - 1077, 1082, 1081, 69, 69, 69, 1083, 69, 69, 69, - 1079, 69, 69, 69, 1091, 69, 69, 69, 1084, 1090, - 69, 69, 69, 1085, 1086, 69, 69, 1087, 69, 1099, - 1089, 1092, 69, 69, 1093, 1088, 1094, 1097, 1103, 1096, - 1095, 1098, 69, 69, 1101, 1100, 1102, 69, 69, 69, - 69, 69, 1104, 1108, 69, 69, 1105, 1109, 1106, 1113, - 69, 69, 69, 1107, 69, 69, 1114, 1118, 1115, 69, - 1110, 1112, 69, 69, 1111, 1119, 69, 1121, 69, 1122, - 1116, 69, 1123, 1124, 69, 1117, 69, 1120, 69, 1125, + 69, 1075, 1069, 69, 69, 69, 69, 1071, 69, 69, + 1088, 1073, 1070, 1083, 1079, 1074, 1076, 1078, 1077, 1080, + 69, 1081, 1082, 69, 69, 69, 69, 1084, 1085, 69, + 69, 69, 1093, 1094, 1087, 1090, 1092, 69, 69, 69, + 69, 1089, 1086, 69, 1095, 69, 1096, 1097, 69, 69, + 69, 1091, 69, 1098, 1102, 1100, 69, 1101, 1104, 1099, + 1106, 69, 134, 1105, 69, 1107, 69, 69, 69, 69, + 1112, 69, 69, 69, 1116, 1103, 69, 69, 69, 1115, + 69, 1108, 69, 69, 69, 69, 1109, 1110, 1111, 69, + 132, 1114, 1121, 69, 1124, 69, 1117, 1113, 1125, 69, - 69, 69, 69, 1128, 1127, 69, 69, 1126, 69, 69, - 69, 1129, 69, 1132, 1134, 69, 1135, 69, 69, 1137, - 1131, 69, 69, 69, 1133, 1140, 69, 1143, 69, 69, - 1130, 1142, 1138, 1139, 69, 69, 1146, 1136, 69, 69, - 69, 69, 1141, 1147, 69, 69, 69, 1144, 1145, 69, - 1150, 1152, 69, 69, 69, 1154, 1156, 1153, 140, 1148, - 1149, 69, 69, 69, 1151, 1155, 69, 1157, 1158, 69, - 1161, 69, 1160, 1159, 69, 1162, 69, 1163, 69, 69, - 69, 1164, 1166, 1172, 69, 69, 1165, 69, 1169, 69, - 1167, 1170, 1173, 1174, 69, 69, 1178, 69, 69, 1175, + 69, 1118, 1119, 1120, 1123, 1128, 1122, 1127, 69, 69, + 69, 1126, 69, 1129, 69, 69, 69, 69, 1133, 1138, + 69, 1131, 1134, 1130, 69, 69, 69, 1132, 69, 1139, + 1140, 1137, 69, 1144, 69, 1135, 69, 1136, 69, 69, + 1145, 69, 69, 1147, 1149, 1141, 1142, 69, 1148, 69, + 69, 69, 1143, 69, 1146, 1150, 69, 1151, 69, 69, + 69, 1154, 1153, 69, 69, 1152, 1155, 1156, 1159, 1158, + 1160, 69, 69, 69, 69, 1163, 1161, 1157, 69, 69, + 69, 69, 69, 69, 1166, 69, 1168, 1169, 69, 69, + 1165, 69, 1172, 1162, 1173, 69, 69, 1171, 69, 69, - 1168, 1177, 69, 1171, 69, 1179, 69, 69, 1183, 69, - 69, 69, 1185, 69, 69, 1180, 1184, 69, 69, 69, - 1176, 69, 1187, 1188, 69, 1181, 1189, 1182, 1190, 69, - 69, 1197, 1186, 1191, 69, 69, 69, 69, 69, 1192, - 69, 69, 69, 1193, 1194, 69, 1195, 1204, 1196, 1202, - 69, 69, 69, 69, 1200, 69, 1198, 69, 1199, 1206, - 69, 69, 1201, 69, 1207, 1203, 1205, 1208, 1216, 1209, - 1213, 69, 1210, 1214, 69, 69, 69, 1211, 1215, 69, - 1219, 69, 69, 1223, 69, 1212, 1224, 69, 1218, 69, - 1220, 1222, 1217, 1221, 69, 69, 69, 69, 69, 69, + 1164, 1167, 69, 1170, 1177, 69, 69, 1176, 1179, 69, + 1180, 1181, 1183, 69, 69, 1174, 1175, 69, 69, 1185, + 69, 69, 1178, 69, 69, 69, 1189, 1184, 69, 1182, + 1187, 69, 1190, 1186, 69, 69, 69, 1193, 1199, 2149, + 69, 1191, 69, 1192, 69, 1188, 69, 1194, 69, 1196, + 69, 1201, 1197, 1200, 69, 1202, 1195, 1204, 69, 1206, + 1205, 69, 69, 69, 1198, 1203, 69, 1210, 69, 69, + 1212, 69, 69, 69, 1211, 69, 69, 1214, 69, 1207, + 1216, 1208, 69, 1209, 1215, 69, 69, 69, 1224, 1217, + 69, 1213, 69, 69, 69, 69, 69, 69, 1218, 69, - 69, 69, 1233, 69, 1225, 69, 69, 1226, 138, 1230, - 1228, 69, 69, 1227, 1229, 1235, 1236, 69, 1232, 1234, - 69, 1237, 1242, 1241, 1231, 1244, 1239, 1243, 69, 1240, - 1245, 69, 69, 1247, 69, 1238, 69, 1246, 1250, 69, - 1248, 69, 69, 69, 69, 1252, 69, 69, 69, 69, - 69, 1253, 1259, 69, 1251, 1255, 1249, 69, 69, 1256, - 1262, 69, 1254, 69, 69, 69, 1257, 1264, 1258, 1260, - 1263, 69, 69, 69, 1268, 1261, 1265, 1266, 1267, 69, - 1271, 69, 69, 69, 69, 69, 69, 1269, 69, 1277, - 1273, 69, 136, 69, 1270, 69, 1272, 1274, 1275, 1280, + 1220, 1221, 1219, 1223, 1222, 1229, 69, 69, 69, 69, + 1227, 69, 1231, 1225, 69, 1226, 1233, 69, 1228, 1230, + 69, 1240, 69, 1232, 1241, 69, 1234, 1236, 69, 1235, + 69, 1242, 69, 69, 69, 1237, 69, 1244, 69, 1239, + 1238, 69, 1246, 2149, 69, 1251, 69, 1250, 69, 1243, + 1245, 69, 69, 1248, 69, 1247, 1249, 1252, 69, 1254, + 69, 1253, 69, 69, 1258, 69, 1255, 69, 1256, 69, + 1261, 69, 69, 69, 1263, 2149, 1257, 1264, 69, 1265, + 69, 1260, 1267, 1262, 1272, 1268, 1270, 1259, 1274, 1269, + 69, 1271, 69, 1266, 69, 69, 1276, 69, 1273, 69, - 1278, 1281, 69, 1276, 69, 1283, 69, 1282, 69, 1279, - 69, 1286, 69, 1284, 69, 69, 69, 1288, 69, 1285, - 69, 69, 69, 69, 69, 69, 1287, 1292, 69, 69, - 1293, 69, 69, 1296, 1297, 1294, 1289, 1302, 1291, 1295, - 1290, 1301, 69, 69, 69, 69, 1300, 1298, 69, 1299, - 1306, 69, 69, 1303, 1308, 69, 1310, 69, 69, 69, - 1312, 69, 1311, 1304, 1313, 1305, 69, 69, 1307, 1314, - 1316, 69, 69, 1309, 1318, 69, 69, 1315, 1319, 69, - 69, 1320, 1321, 69, 1322, 1323, 1324, 69, 69, 1328, - 69, 1325, 1317, 1330, 69, 69, 69, 69, 1331, 69, + 1275, 1279, 69, 1277, 69, 69, 69, 69, 1281, 69, + 69, 69, 69, 69, 1282, 1288, 69, 1280, 1284, 1278, + 69, 69, 1285, 1291, 69, 1283, 69, 69, 69, 1286, + 1293, 1287, 1289, 1292, 69, 69, 69, 1297, 1290, 1294, + 1295, 1296, 69, 1300, 69, 69, 69, 69, 69, 69, + 1298, 69, 1307, 1302, 69, 69, 69, 1299, 69, 1301, + 1303, 1304, 1310, 1311, 69, 69, 1305, 1308, 1312, 1313, + 69, 1306, 1309, 69, 69, 1316, 69, 69, 1314, 69, + 69, 1318, 69, 1315, 69, 69, 69, 69, 69, 1317, + 1322, 69, 69, 69, 69, 1323, 1326, 1331, 69, 1324, - 1334, 69, 69, 1326, 69, 1336, 69, 1327, 1332, 69, - 1329, 69, 1339, 1340, 69, 1342, 69, 1333, 1341, 69, - 69, 69, 1337, 1335, 69, 69, 1347, 1344, 1338, 69, - 1345, 69, 69, 1351, 1343, 69, 69, 1350, 1354, 69, - 1355, 69, 1353, 69, 69, 69, 69, 1349, 1356, 69, - 1346, 69, 69, 69, 1358, 1348, 1352, 1357, 69, 69, - 1365, 1359, 1360, 1361, 69, 69, 69, 1362, 69, 69, - 1367, 1363, 69, 69, 69, 1372, 1371, 1374, 69, 69, - 1366, 1377, 69, 1373, 1364, 69, 1368, 1369, 1370, 69, - 1375, 69, 1381, 1382, 69, 1376, 1383, 69, 69, 1385, + 1319, 1327, 1321, 1325, 1320, 1332, 69, 69, 69, 1330, + 69, 69, 69, 1329, 1328, 1336, 69, 1338, 69, 1340, + 69, 69, 69, 1342, 69, 1341, 1334, 1333, 1335, 69, + 1337, 69, 1344, 1339, 1343, 1346, 69, 69, 69, 1348, + 1345, 69, 1349, 69, 69, 1350, 1351, 69, 69, 1347, + 1358, 69, 69, 69, 69, 69, 69, 1356, 1360, 1352, + 1353, 1354, 69, 1361, 69, 69, 1355, 1362, 1357, 1364, + 69, 1359, 69, 1366, 69, 1363, 69, 1369, 1370, 69, + 69, 1365, 1367, 1371, 1373, 69, 69, 1368, 69, 69, + 69, 69, 1378, 1375, 69, 69, 2149, 69, 1376, 1382, - 69, 1384, 69, 1379, 1388, 69, 1378, 69, 69, 69, - 69, 1380, 1387, 1390, 69, 1393, 69, 69, 1395, 1389, - 1391, 69, 69, 1386, 69, 1397, 69, 1398, 69, 1396, - 1399, 69, 1400, 69, 69, 69, 69, 69, 1394, 1392, - 1402, 1403, 69, 1404, 1405, 69, 69, 1406, 1401, 1407, - 69, 69, 1411, 69, 69, 69, 69, 1408, 69, 1413, - 1414, 69, 1409, 1410, 1412, 69, 69, 1416, 69, 69, - 69, 1421, 1419, 69, 1420, 135, 1415, 69, 69, 1423, - 69, 1428, 69, 1417, 1422, 1418, 69, 69, 69, 1426, - 1424, 1425, 69, 1432, 69, 1427, 69, 1434, 69, 69, + 69, 1372, 1381, 1374, 69, 69, 1385, 1384, 1386, 1387, + 69, 1380, 69, 69, 69, 69, 1377, 69, 1388, 69, + 1379, 69, 69, 69, 1383, 1393, 1389, 69, 69, 1396, + 69, 69, 69, 1392, 69, 1390, 1398, 69, 1391, 69, + 69, 1394, 69, 1403, 69, 1397, 1404, 1406, 69, 1401, + 1400, 1405, 1399, 1395, 69, 1407, 1402, 1409, 69, 69, + 1408, 69, 1413, 1414, 69, 1415, 1417, 69, 69, 69, + 1416, 69, 69, 1411, 69, 1410, 1420, 69, 69, 69, + 69, 1412, 69, 1422, 69, 1425, 1419, 69, 1430, 1421, + 1423, 69, 1427, 1418, 1424, 69, 1428, 69, 69, 2149, - 1435, 69, 1431, 1429, 1436, 69, 69, 1430, 69, 1437, - 69, 1433, 69, 1438, 69, 1440, 69, 69, 69, 1441, - 69, 69, 69, 69, 133, 69, 69, 1452, 1439, 1443, - 1444, 1448, 1445, 1442, 69, 69, 1447, 1453, 69, 69, - 69, 69, 1446, 1450, 1449, 1455, 1451, 1457, 1456, 1459, - 69, 69, 1454, 1458, 69, 69, 69, 1462, 69, 1461, - 69, 1463, 69, 1464, 1467, 69, 69, 69, 69, 69, - 69, 1468, 69, 1470, 1473, 69, 69, 1460, 1465, 69, - 1469, 69, 1466, 1472, 69, 1474, 1478, 1471, 1477, 69, - 1706, 1475, 1476, 69, 69, 1479, 69, 1481, 69, 1482, + 1429, 1434, 1426, 1431, 69, 1432, 69, 69, 69, 69, + 69, 69, 69, 69, 1435, 1433, 1436, 69, 1437, 1438, + 69, 1441, 1439, 1440, 69, 1442, 1444, 69, 69, 69, + 1447, 69, 69, 69, 1446, 69, 1443, 1445, 69, 69, + 69, 1454, 1449, 1452, 69, 1453, 69, 69, 69, 1456, + 69, 69, 1448, 1450, 69, 1461, 69, 1451, 1455, 1459, + 1457, 69, 1465, 1460, 1458, 69, 69, 1462, 69, 69, + 1467, 69, 69, 1468, 1469, 69, 1463, 69, 69, 1464, + 1470, 69, 1473, 1466, 1471, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 1474, 69, 69, 1486, 1472, 1476, - 69, 1480, 69, 69, 1485, 1486, 69, 69, 69, 1483, - 69, 69, 1484, 1489, 69, 1488, 1487, 69, 69, 1490, - 69, 69, 69, 1491, 69, 69, 1495, 1496, 69, 69, - 69, 1492, 1500, 69, 1494, 1493, 1509, 1497, 1499, 1501, - 1502, 69, 69, 69, 1503, 69, 1504, 1507, 1505, 1498, - 69, 69, 1508, 69, 1511, 69, 1513, 69, 1506, 69, - 1512, 69, 1514, 69, 69, 69, 1517, 1519, 69, 1518, - 1510, 1515, 69, 69, 69, 69, 69, 69, 1520, 1521, - 69, 1516, 1524, 69, 69, 1522, 1530, 69, 1527, 69, - 69, 1526, 69, 69, 1531, 69, 69, 69, 1533, 1523, + 1477, 1478, 1481, 69, 69, 69, 1480, 1475, 1485, 69, + 1488, 69, 1483, 1484, 69, 1482, 1479, 69, 1489, 1491, + 69, 69, 1487, 1490, 1493, 69, 1495, 69, 69, 1496, + 69, 69, 69, 1497, 1492, 1494, 1498, 1501, 69, 69, + 69, 69, 69, 69, 1502, 1507, 69, 69, 1499, 1504, + 69, 1503, 1500, 69, 1508, 1511, 1506, 69, 69, 1505, + 69, 69, 1509, 1512, 69, 69, 1513, 69, 1515, 1514, + 1510, 69, 1516, 69, 1517, 1519, 69, 1518, 1521, 69, + 69, 1520, 69, 69, 69, 1522, 69, 1524, 1525, 69, + 69, 69, 1523, 69, 69, 69, 1530, 1526, 69, 69, - 69, 69, 1528, 1525, 69, 1529, 69, 1532, 69, 69, - 69, 1544, 69, 69, 69, 1535, 1536, 1545, 1541, 1543, - 69, 1534, 69, 1537, 69, 1538, 1546, 1539, 69, 1549, - 1540, 1542, 1550, 69, 1547, 1548, 1551, 69, 69, 1552, - 69, 1554, 69, 69, 1557, 69, 1558, 69, 1559, 69, - 69, 1553, 1555, 1561, 69, 1556, 1563, 69, 1564, 69, - 69, 1560, 69, 1567, 69, 69, 69, 1566, 1562, 1569, - 69, 69, 1571, 69, 69, 1573, 1572, 1575, 69, 1565, - 69, 69, 69, 69, 1568, 1579, 69, 69, 69, 1570, - 1574, 69, 1583, 1584, 69, 69, 1577, 1586, 69, 1576, + 1531, 1535, 69, 69, 1537, 69, 1527, 1528, 1534, 1529, + 1532, 69, 1536, 69, 69, 1539, 1533, 1538, 1540, 1542, + 69, 69, 1546, 69, 1543, 69, 69, 1541, 1544, 69, + 1549, 69, 69, 1550, 69, 1548, 69, 1553, 1555, 69, + 69, 1545, 69, 69, 1547, 1554, 1551, 1556, 69, 69, + 69, 69, 1557, 69, 1552, 69, 1560, 69, 69, 69, + 1566, 69, 1563, 69, 69, 69, 69, 1567, 69, 1558, + 1562, 1569, 69, 69, 1565, 1559, 1561, 1564, 69, 1568, + 69, 69, 69, 69, 69, 69, 69, 1571, 1580, 69, + 1620, 1570, 1572, 1577, 69, 1573, 69, 1581, 1583, 1575, - 69, 1578, 69, 1580, 69, 69, 1582, 69, 1590, 1588, - 1581, 69, 69, 69, 1585, 69, 1593, 1592, 69, 69, - 1587, 1591, 69, 69, 1597, 69, 69, 1598, 1595, 69, - 1589, 1603, 1600, 69, 69, 1601, 131, 69, 1594, 1596, - 1599, 69, 69, 1602, 1608, 1604, 69, 1607, 69, 1609, - 69, 1606, 69, 1605, 1611, 69, 1612, 1610, 69, 69, - 69, 69, 1616, 69, 1614, 1617, 69, 1613, 1620, 69, - 1615, 1621, 69, 69, 1623, 1619, 1624, 69, 1622, 69, - 69, 1618, 69, 1626, 69, 69, 69, 69, 1630, 69, - 69, 69, 1632, 1625, 1631, 69, 1627, 1633, 69, 1628, + 1579, 69, 1574, 1576, 1578, 69, 1585, 1586, 69, 1582, + 1587, 69, 69, 69, 1584, 69, 1590, 1593, 69, 69, + 1594, 69, 1595, 69, 69, 69, 1589, 1588, 1591, 1597, + 69, 1592, 69, 1599, 69, 1600, 69, 69, 69, 1601, + 69, 1604, 69, 1596, 69, 1603, 1606, 69, 69, 69, + 1598, 69, 1609, 69, 1608, 69, 1602, 1605, 69, 1610, + 1612, 69, 1607, 69, 1616, 69, 69, 69, 1614, 69, + 1613, 1621, 69, 69, 1611, 1617, 1623, 69, 69, 69, + 69, 1627, 1615, 69, 1619, 1625, 1622, 69, 69, 1618, + 1629, 69, 1628, 1624, 69, 69, 1631, 69, 69, 1630, - 1634, 69, 69, 69, 69, 1629, 1641, 1638, 69, 69, - 69, 1635, 69, 1640, 69, 1642, 1637, 69, 69, 1646, - 69, 1636, 1645, 69, 1639, 69, 1647, 69, 1643, 1648, - 1644, 69, 1650, 69, 1649, 69, 1651, 69, 1653, 1654, - 69, 69, 1657, 69, 1658, 69, 1656, 69, 1659, 1652, - 69, 1660, 69, 1655, 69, 69, 69, 69, 1666, 69, - 1663, 69, 1668, 1661, 69, 69, 1671, 69, 69, 1665, - 1667, 69, 1672, 69, 1662, 1664, 1673, 69, 1674, 69, - 1670, 1675, 1669, 69, 69, 1678, 69, 1679, 69, 1677, - 1680, 69, 69, 69, 69, 1683, 69, 1676, 69, 69, + 69, 69, 69, 1635, 69, 1626, 1636, 69, 1633, 69, + 1641, 1638, 69, 1639, 69, 1637, 69, 69, 1634, 1632, + 69, 1640, 1646, 1644, 1642, 69, 1645, 69, 69, 1643, + 69, 1647, 1649, 1653, 1650, 69, 69, 69, 69, 1648, + 1655, 69, 1651, 1656, 1652, 69, 1659, 69, 1654, 1660, + 69, 69, 1662, 1663, 69, 69, 1661, 1658, 69, 69, + 1665, 1657, 69, 69, 69, 69, 1669, 69, 69, 1664, + 69, 1670, 69, 1671, 1666, 1672, 69, 1667, 69, 69, + 69, 69, 1677, 1668, 1673, 69, 69, 1680, 1674, 69, + 1679, 69, 1675, 69, 1676, 1681, 69, 69, 69, 1685, - 69, 69, 1689, 69, 1681, 69, 1687, 69, 1684, 69, - 1685, 1682, 1686, 69, 1690, 69, 69, 69, 1696, 1688, - 69, 69, 69, 69, 1702, 69, 1693, 69, 1700, 1692, - 1695, 1697, 1701, 1691, 1703, 69, 69, 1704, 1698, 1694, - 69, 69, 69, 1699, 69, 69, 69, 69, 69, 1714, - 69, 1715, 69, 69, 69, 1711, 69, 69, 1705, 69, - 1708, 1707, 1716, 1718, 69, 1710, 1709, 1712, 1713, 69, - 69, 69, 1717, 69, 1719, 1720, 1724, 69, 1725, 69, - 1726, 69, 1721, 69, 69, 1722, 69, 69, 1730, 1723, - 1729, 1727, 69, 69, 69, 1734, 1728, 1733, 69, 69, + 69, 1678, 1684, 69, 1682, 69, 1686, 1683, 69, 1699, + 1687, 69, 1689, 69, 1688, 69, 1690, 69, 1692, 1693, + 69, 1694, 1691, 69, 69, 1697, 69, 69, 1695, 1696, + 1698, 69, 69, 1700, 69, 69, 69, 69, 1706, 69, + 1703, 69, 1708, 1701, 69, 69, 1711, 69, 69, 1705, + 1707, 69, 1712, 1713, 69, 1704, 1702, 69, 69, 1715, + 1710, 69, 1709, 1714, 69, 69, 1719, 69, 1720, 69, + 1718, 1721, 69, 69, 69, 1716, 69, 1724, 1717, 69, + 69, 69, 69, 69, 69, 1722, 1730, 69, 1728, 69, + 69, 1725, 1723, 1726, 1727, 69, 69, 69, 1731, 69, - 1739, 69, 69, 1735, 1731, 1738, 69, 1732, 69, 1742, - 69, 69, 69, 69, 69, 1743, 69, 1736, 1745, 1737, - 69, 1740, 1746, 69, 1748, 69, 1741, 1744, 69, 1747, - 1749, 69, 1750, 1751, 69, 1752, 69, 69, 1753, 69, - 69, 1755, 1754, 69, 69, 1757, 69, 69, 1756, 1758, - 69, 69, 1762, 69, 1760, 2091, 1763, 1765, 69, 1766, - 69, 69, 1759, 69, 69, 1761, 1768, 1769, 1764, 1770, - 1767, 1771, 69, 69, 1772, 69, 69, 1774, 69, 69, - 1777, 69, 1775, 69, 1776, 1778, 69, 69, 69, 1773, - 69, 69, 1779, 1781, 69, 69, 1783, 1780, 1782, 69, + 1729, 69, 1737, 1734, 69, 69, 69, 69, 1738, 1741, + 1732, 1736, 1742, 69, 69, 1733, 1744, 69, 1743, 69, + 1735, 69, 1739, 1745, 69, 69, 1746, 1740, 69, 69, + 1748, 69, 1747, 69, 69, 69, 1756, 69, 1757, 69, + 1753, 1749, 69, 69, 69, 69, 1750, 69, 69, 69, + 69, 1751, 1758, 1752, 1754, 1755, 1760, 1766, 69, 1761, + 1759, 1767, 69, 1762, 1764, 1763, 1768, 69, 69, 1765, + 69, 69, 69, 69, 69, 69, 1772, 69, 69, 1776, + 1775, 69, 69, 1770, 69, 1769, 69, 1777, 69, 1771, + 69, 1781, 69, 1773, 1774, 1782, 69, 1785, 69, 1789, - 1786, 69, 1785, 69, 69, 69, 1784, 69, 1791, 69, - 69, 69, 69, 1789, 1790, 69, 1788, 69, 1792, 1787, - 1796, 69, 69, 69, 1800, 69, 69, 1799, 69, 1793, - 1802, 1794, 1798, 1805, 1795, 69, 1797, 1803, 69, 69, - 69, 1801, 69, 1804, 69, 69, 1808, 69, 1806, 69, - 1811, 1812, 69, 1807, 69, 1814, 1815, 69, 1809, 69, - 1810, 69, 1816, 1817, 69, 1818, 69, 1813, 1819, 69, - 69, 1822, 1823, 69, 69, 1825, 69, 69, 1824, 1820, - 1826, 69, 69, 1829, 1821, 69, 69, 69, 1828, 69, - 1830, 69, 69, 69, 1831, 69, 69, 1835, 69, 1827, + 69, 1778, 1780, 1779, 1784, 1783, 69, 1787, 69, 69, + 1786, 69, 1788, 1791, 69, 1792, 69, 1794, 69, 69, + 1796, 69, 1790, 69, 1795, 69, 1797, 69, 69, 69, + 1793, 69, 69, 69, 1801, 69, 1802, 1800, 69, 69, + 1799, 1804, 69, 1806, 1807, 1798, 1809, 69, 1810, 69, + 1805, 1803, 69, 69, 1813, 69, 69, 1808, 1812, 1811, + 69, 1814, 1816, 69, 1817, 69, 69, 1819, 2149, 69, + 1815, 1822, 1820, 69, 1821, 69, 69, 69, 69, 1818, + 1823, 69, 69, 1824, 1825, 69, 69, 69, 69, 69, + 1827, 1828, 1830, 1831, 69, 69, 1826, 1829, 69, 69, - 1839, 69, 69, 69, 1833, 1834, 69, 1838, 69, 1843, - 1841, 1832, 69, 1836, 69, 1844, 1837, 1840, 69, 1845, - 69, 69, 1842, 69, 69, 1847, 1848, 69, 1846, 69, - 1853, 69, 1850, 69, 1856, 69, 1854, 69, 69, 1859, - 69, 69, 1857, 69, 1851, 1855, 69, 1849, 69, 1852, - 1860, 69, 1861, 1863, 1865, 69, 1858, 69, 1864, 69, - 1866, 69, 69, 1862, 1867, 69, 1871, 1870, 69, 1868, - 69, 69, 69, 1874, 69, 1873, 1875, 1872, 1876, 69, - 1877, 1879, 69, 69, 1881, 69, 1869, 69, 1880, 69, - 69, 1885, 69, 69, 1878, 1883, 69, 69, 1887, 69, + 69, 1836, 69, 69, 1834, 1832, 69, 1833, 1835, 1841, + 69, 1837, 69, 69, 69, 1845, 69, 1838, 69, 69, + 69, 1848, 1843, 1839, 1847, 1840, 69, 69, 1852, 1844, + 69, 1842, 1849, 69, 1850, 1851, 69, 1846, 69, 69, + 69, 69, 1854, 69, 1857, 1858, 69, 69, 1869, 1853, + 69, 1861, 69, 1855, 69, 1856, 1862, 69, 69, 69, + 69, 1859, 1863, 1864, 69, 1865, 69, 1860, 1866, 69, + 1867, 69, 1868, 1870, 69, 1871, 1872, 69, 69, 1876, + 1879, 1873, 69, 1874, 1875, 69, 69, 69, 69, 69, + 1877, 69, 1878, 69, 69, 69, 1883, 1887, 69, 69, - 1890, 69, 69, 1882, 69, 69, 69, 1884, 1892, 69, - 69, 1889, 1888, 69, 1893, 1891, 69, 1886, 1896, 1899, - 69, 1897, 1894, 69, 1901, 69, 1902, 69, 1895, 1903, - 69, 69, 1905, 69, 69, 69, 1904, 69, 69, 1898, - 69, 1909, 1900, 69, 1912, 69, 1913, 69, 69, 69, - 69, 69, 1910, 69, 1906, 69, 1908, 1966, 1907, 1917, - 69, 1915, 69, 69, 69, 1911, 1918, 1914, 69, 1919, - 1916, 1921, 69, 1923, 1920, 1922, 69, 69, 1926, 1929, - 69, 1924, 69, 1925, 69, 1930, 69, 1932, 69, 69, - 69, 69, 69, 1996, 1927, 1928, 1933, 1935, 1936, 69, + 69, 69, 69, 1891, 69, 1892, 1881, 1882, 1889, 1886, + 69, 1884, 69, 1880, 1885, 69, 1893, 1895, 1888, 69, + 1890, 69, 69, 69, 69, 2149, 1894, 1901, 69, 69, + 69, 1898, 1902, 1904, 69, 69, 69, 69, 69, 1896, + 1905, 1908, 69, 1899, 1900, 1906, 69, 1897, 1903, 69, + 1909, 1912, 69, 1911, 69, 1907, 1913, 69, 1910, 1916, + 69, 69, 69, 1915, 69, 1914, 69, 69, 1921, 69, + 1917, 1920, 69, 69, 1918, 69, 1924, 1923, 1922, 1925, + 1926, 69, 1927, 69, 69, 69, 1930, 69, 69, 1919, + 1929, 69, 69, 1931, 1932, 69, 1934, 69, 1936, 1938, - 69, 1931, 69, 1934, 1937, 69, 1938, 69, 69, 1940, - 69, 69, 1941, 1939, 1942, 69, 1943, 69, 1946, 69, - 1944, 69, 69, 1949, 69, 69, 1945, 1947, 69, 1948, - 1950, 69, 69, 69, 69, 69, 69, 1953, 69, 69, - 69, 69, 1955, 1962, 69, 1954, 1964, 69, 1951, 1965, - 69, 1952, 1967, 69, 1957, 1956, 1958, 69, 1959, 1960, - 1961, 1968, 1969, 69, 1963, 69, 69, 1972, 69, 69, - 69, 69, 69, 69, 1976, 1977, 69, 1978, 69, 69, - 1971, 1975, 69, 1970, 1973, 1980, 69, 1979, 1974, 69, - 69, 2091, 69, 69, 1982, 1984, 1981, 1985, 1987, 69, + 69, 69, 69, 1928, 69, 1933, 1941, 69, 69, 69, + 69, 69, 1937, 1943, 69, 1935, 69, 1940, 69, 1944, + 1939, 1942, 69, 1948, 1947, 1950, 69, 1945, 69, 1952, + 69, 1953, 69, 1946, 1954, 69, 69, 69, 1957, 69, + 69, 69, 1956, 69, 69, 1961, 69, 1951, 1949, 69, + 1964, 69, 1955, 1965, 69, 69, 69, 69, 1969, 69, + 1958, 69, 1960, 1962, 1959, 69, 1971, 69, 1963, 1967, + 1970, 69, 69, 1972, 1966, 1975, 1968, 1974, 69, 69, + 69, 69, 1979, 2149, 69, 1977, 1982, 69, 69, 1983, + 69, 1973, 69, 1985, 69, 69, 69, 1976, 69, 69, - 1988, 69, 1989, 69, 69, 1991, 69, 69, 69, 1993, - 1983, 69, 1986, 1990, 1995, 69, 1997, 69, 69, 1992, - 69, 69, 69, 1999, 69, 69, 1994, 69, 2003, 69, - 69, 1998, 69, 2004, 69, 69, 69, 2002, 69, 2000, - 69, 69, 2001, 2007, 2006, 69, 69, 2005, 2008, 2015, - 69, 2017, 69, 2009, 2010, 2016, 2011, 2018, 69, 69, - 2013, 2014, 69, 2012, 2019, 69, 69, 2020, 2023, 69, - 2025, 69, 69, 69, 69, 69, 2028, 69, 2029, 69, - 69, 2022, 69, 2024, 69, 69, 69, 2026, 69, 2030, - 2021, 69, 2027, 2031, 69, 69, 2032, 69, 2034, 2033, + 1978, 1980, 1981, 1986, 1988, 1989, 69, 1990, 69, 1987, + 69, 1984, 1991, 69, 69, 1992, 1993, 69, 1994, 69, + 1995, 1996, 69, 69, 69, 2000, 69, 69, 1997, 69, + 2003, 69, 2001, 1999, 69, 69, 69, 2002, 69, 2004, + 69, 69, 69, 1998, 69, 2007, 69, 69, 69, 2009, + 2008, 69, 69, 2018, 69, 2005, 2006, 2016, 2019, 69, + 2012, 69, 2010, 69, 2011, 2013, 2014, 2020, 2015, 2021, + 69, 2017, 2022, 2023, 69, 69, 2025, 69, 2024, 2026, + 69, 2028, 69, 69, 69, 69, 69, 69, 2032, 2033, + 69, 2034, 69, 69, 2027, 2031, 69, 69, 2029, 2036, - 2038, 2035, 2039, 69, 2036, 2037, 69, 2041, 2042, 69, - 69, 69, 2046, 2040, 2043, 2044, 2047, 69, 69, 69, - 69, 69, 2051, 69, 69, 69, 2048, 69, 69, 69, - 2045, 69, 2054, 69, 69, 2058, 2059, 2053, 69, 2049, - 2050, 69, 2052, 69, 2055, 2091, 2057, 69, 2056, 69, - 2061, 69, 2062, 69, 2064, 2066, 69, 2060, 2063, 69, - 2065, 69, 2069, 69, 69, 69, 2067, 69, 2068, 2070, - 2072, 69, 2073, 69, 69, 2076, 69, 69, 69, 2079, - 2080, 69, 2071, 2091, 69, 2082, 69, 2083, 69, 69, - 2074, 2081, 2075, 69, 2085, 2077, 2078, 69, 69, 69, + 69, 2035, 2030, 69, 69, 2149, 69, 2149, 2038, 2040, + 2037, 2041, 2043, 69, 2044, 69, 2045, 69, 2039, 2046, + 69, 69, 2042, 2047, 69, 2049, 69, 69, 69, 2051, + 2048, 69, 2053, 69, 69, 2055, 69, 2054, 69, 2050, + 69, 69, 69, 2057, 69, 69, 2052, 2061, 69, 69, + 2056, 69, 2062, 69, 69, 69, 69, 69, 69, 2058, + 2059, 2060, 69, 69, 2065, 2064, 69, 2066, 2077, 2063, + 2073, 69, 2069, 69, 2067, 2068, 69, 2071, 2075, 69, + 2076, 69, 2074, 2070, 69, 69, 2072, 2081, 69, 2078, + 2083, 69, 69, 69, 69, 69, 69, 2086, 2087, 69, - 2084, 2091, 2086, 2089, 69, 2090, 69, 2091, 2091, 2091, - 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2087, 2088, 41, - 41, 41, 41, 41, 41, 41, 46, 46, 46, 46, - 46, 46, 46, 51, 51, 51, 51, 51, 51, 51, - 57, 57, 57, 57, 57, 57, 57, 62, 62, 62, - 62, 62, 62, 62, 72, 72, 2091, 72, 72, 72, - 72, 130, 130, 2091, 2091, 2091, 130, 130, 132, 132, - 2091, 2091, 132, 2091, 132, 134, 2091, 2091, 2091, 2091, - 2091, 134, 137, 137, 2091, 2091, 2091, 137, 137, 139, - 2091, 2091, 2091, 2091, 2091, 139, 141, 141, 2091, 141, + 2080, 2079, 2082, 69, 69, 69, 69, 2084, 69, 2088, + 69, 69, 2089, 2085, 69, 2090, 69, 69, 2149, 2091, + 2149, 2093, 2096, 2094, 69, 2092, 69, 2099, 69, 2097, + 2095, 69, 69, 2098, 69, 2103, 2100, 2101, 2104, 2102, + 2105, 69, 69, 69, 69, 2109, 69, 2107, 69, 2106, + 69, 69, 69, 69, 69, 2112, 69, 2116, 69, 69, + 69, 2111, 2108, 2117, 2149, 2110, 69, 2115, 69, 2119, + 69, 2113, 2114, 69, 2120, 2121, 69, 69, 2118, 2123, + 2124, 69, 69, 2122, 2125, 2127, 69, 69, 69, 2126, + 69, 2128, 69, 2130, 69, 2131, 69, 2134, 69, 69, - 141, 141, 141, 73, 73, 2091, 73, 73, 73, 73, - 13, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, - 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, - 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, - 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, - 2091 + 69, 2137, 2138, 69, 69, 69, 2129, 2140, 69, 2141, + 69, 2132, 2139, 2133, 69, 69, 69, 2135, 2136, 69, + 2143, 2142, 2149, 2145, 2144, 2147, 69, 2148, 69, 2149, + 2149, 2149, 2149, 2149, 2149, 2146, 41, 41, 41, 41, + 41, 41, 41, 46, 46, 46, 46, 46, 46, 46, + 51, 51, 51, 51, 51, 51, 51, 57, 57, 57, + 57, 57, 57, 57, 62, 62, 62, 62, 62, 62, + 62, 72, 72, 2149, 72, 72, 72, 72, 131, 131, + 2149, 2149, 2149, 131, 131, 133, 133, 2149, 2149, 133, + 2149, 133, 135, 2149, 2149, 2149, 2149, 2149, 135, 138, + + 138, 2149, 2149, 2149, 138, 138, 140, 2149, 2149, 2149, + 2149, 2149, 140, 142, 142, 2149, 142, 142, 142, 142, + 73, 73, 2149, 73, 73, 73, 73, 13, 2149, 2149, + 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, + 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, + 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, + 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149 } ; -static yyconst flex_int16_t yy_chk[4152] = +static yyconst flex_int16_t yy_chk[4269] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1604,456 +1618,468 @@ static yyconst flex_int16_t yy_chk[4152] = 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 5, 3, 6, 20, 4, 20, 20, 5, 20, 6, 7, 7, 7, 7, 20, 7, 8, 8, 8, 8, - 95, 8, 7, 9, 9, 9, 95, 33, 8, 10, + 96, 8, 7, 9, 9, 9, 96, 33, 8, 10, 10, 10, 15, 24, 9, 21, 15, 24, 21, 21, 10, 11, 11, 11, 11, 11, 11, 19, 33, 19, - 19, 151, 19, 11, 25, 25, 21, 24, 19, 19, - 151, 28, 11, 12, 12, 12, 12, 12, 12, 25, - 22, 22, 26, 26, 23, 12, 28, 29, 22, 23, - 30, 26, 29, 23, 12, 22, 23, 27, 23, 23, - 50, 27, 35, 50, 27, 30, 31, 31, 70, 32, - 32, 27, 70, 27, 32, 31, 35, 34, 36, 36, - 76, 31, 34, 36, 76, 31, 34, 45, 45, 37, - 32, 39, 34, 36, 37, 34, 36, 37, 38, 38, - 67, 38, 34, 115, 37, 39, 40, 40, 37, 37, - 39, 40, 61, 61, 67, 40, 38, 56, 115, 56, + 19, 2155, 19, 11, 25, 25, 21, 24, 19, 19, + 77, 28, 11, 12, 12, 12, 12, 12, 12, 25, + 22, 22, 26, 26, 23, 12, 28, 30, 22, 23, + 77, 26, 22, 23, 12, 22, 23, 27, 23, 23, + 29, 27, 30, 769, 27, 29, 31, 31, 70, 32, + 32, 27, 70, 27, 32, 31, 76, 34, 80, 35, + 76, 31, 34, 36, 36, 31, 34, 80, 36, 37, + 32, 140, 34, 35, 37, 34, 50, 37, 36, 50, + 39, 36, 34, 88, 37, 45, 45, 67, 37, 37, + 38, 38, 81, 38, 39, 40, 40, 61, 61, 39, + 40, 67, 75, 88, 40, 75, 81, 56, 38, 56, 56, 64, 56, 64, 64, 66, 64, 66, 66, 69, - 66, 69, 69, 64, 69, 77, 72, 80, 72, 72, - 69, 72, 75, 78, 79, 75, 78, 72, 72, 82, - 83, 80, 81, 89, 84, 77, 86, 85, 81, 78, - 87, 90, 79, 85, 81, 91, 88, 82, 82, 91, - 86, 89, 83, 84, 93, 96, 85, 88, 92, 90, - 87, 94, 99, 92, 94, 97, 98, 94, 93, 98, - 97, 100, 101, 98, 96, 102, 101, 104, 103, 105, - 94, 94, 102, 106, 104, 100, 99, 107, 109, 108, - 97, 103, 105, 108, 111, 110, 112, 112, 113, 117, + 66, 69, 69, 64, 69, 79, 72, 82, 72, 72, + 69, 72, 78, 82, 83, 78, 84, 72, 72, 82, + 85, 86, 87, 79, 89, 90, 91, 86, 78, 97, + 92, 94, 83, 83, 92, 89, 87, 93, 84, 85, + 86, 138, 93, 90, 91, 94, 95, 100, 97, 95, + 98, 99, 95, 101, 99, 98, 102, 103, 99, 104, + 102, 105, 107, 106, 103, 95, 95, 101, 105, 108, + 109, 100, 104, 110, 109, 98, 106, 112, 114, 111, - 110, 116, 114, 106, 110, 107, 109, 119, 122, 118, - 124, 120, 123, 119, 111, 114, 128, 117, 113, 590, - 116, 114, 118, 120, 121, 121, 122, 125, 123, 125, - 126, 124, 127, 129, 128, 126, 131, 131, 129, 133, - 138, 138, 133, 590, 127, 121, 135, 145, 135, 135, - 125, 135, 140, 145, 140, 140, 141, 140, 141, 141, - 143, 141, 144, 143, 146, 147, 148, 144, 141, 149, - 150, 152, 202, 147, 202, 153, 159, 152, 152, 146, - 153, 154, 154, 155, 149, 148, 156, 162, 156, 155, - 150, 156, 157, 158, 158, 159, 157, 160, 161, 168, + 113, 113, 107, 115, 111, 116, 117, 108, 111, 118, + 125, 110, 121, 119, 123, 120, 115, 112, 114, 124, + 116, 120, 115, 118, 121, 117, 119, 118, 122, 122, + 128, 125, 123, 127, 126, 124, 126, 129, 127, 130, + 132, 132, 128, 134, 130, 136, 134, 136, 136, 122, + 136, 139, 139, 137, 147, 129, 141, 126, 141, 141, + 142, 141, 142, 142, 144, 142, 145, 144, 146, 147, + 148, 145, 142, 149, 146, 150, 151, 152, 148, 153, + 154, 151, 156, 156, 155, 157, 154, 154, 153, 155, + 150, 157, 149, 158, 161, 158, 159, 152, 158, 162, - 163, 157, 160, 161, 163, 165, 157, 166, 156, 164, - 162, 167, 157, 157, 164, 169, 170, 168, 172, 165, - 169, 170, 166, 167, 171, 171, 167, 173, 174, 176, - 171, 175, 175, 177, 174, 176, 178, 179, 172, 177, - 180, 176, 171, 173, 171, 178, 180, 181, 182, 183, - 184, 185, 181, 186, 182, 183, 187, 184, 179, 186, - 188, 189, 190, 192, 185, 191, 188, 193, 192, 194, - 190, 195, 196, 197, 198, 199, 187, 196, 191, 201, - 198, 200, 193, 189, 204, 194, 205, 200, 206, 203, - 204, 195, 211, 199, 199, 197, 203, 207, 207, 201, + 159, 160, 160, 163, 162, 159, 164, 165, 163, 166, + 159, 165, 167, 161, 166, 158, 159, 159, 168, 169, + 170, 174, 171, 172, 173, 173, 167, 171, 172, 164, + 173, 169, 175, 168, 169, 177, 177, 176, 170, 178, + 179, 174, 173, 176, 173, 178, 179, 180, 175, 181, + 183, 178, 182, 184, 185, 183, 180, 186, 182, 184, + 185, 187, 188, 189, 186, 190, 191, 192, 188, 193, + 181, 190, 194, 196, 187, 192, 195, 194, 197, 198, + 200, 199, 193, 189, 198, 199, 201, 202, 191, 196, + 203, 195, 201, 204, 206, 205, 203, 205, 197, 208, - 206, 208, 209, 213, 210, 205, 210, 208, 209, 212, - 214, 215, 218, 219, 216, 211, 220, 215, 214, 216, - 217, 212, 213, 210, 221, 208, 217, 218, 222, 227, - 220, 219, 221, 223, 230, 224, 223, 224, 225, 225, - 226, 228, 228, 226, 229, 229, 231, 227, 232, 234, - 230, 232, 233, 222, 235, 236, 233, 237, 234, 241, - 235, 231, 239, 237, 238, 238, 240, 239, 242, 236, - 243, 244, 240, 245, 245, 246, 247, 248, 246, 241, - 249, 248, 250, 250, 244, 251, 242, 252, 255, 253, - 254, 243, 256, 254, 247, 253, 257, 258, 249, 252, + 209, 206, 200, 207, 211, 202, 202, 210, 210, 207, + 211, 212, 209, 204, 213, 214, 213, 212, 208, 215, + 216, 217, 219, 222, 218, 221, 220, 219, 211, 217, + 218, 215, 220, 213, 223, 224, 225, 222, 214, 216, + 221, 226, 227, 231, 225, 227, 228, 234, 228, 224, + 229, 229, 223, 230, 232, 232, 230, 233, 233, 235, + 237, 231, 236, 234, 237, 236, 226, 238, 240, 239, + 245, 241, 242, 242, 235, 239, 238, 241, 243, 244, + 246, 247, 240, 243, 248, 244, 249, 249, 250, 251, + 245, 250, 252, 253, 254, 254, 252, 248, 246, 255, - 255, 256, 259, 251, 260, 257, 262, 262, 264, 256, - 256, 261, 256, 261, 261, 259, 260, 263, 258, 265, - 263, 266, 267, 268, 268, 264, 271, 269, 264, 275, - 266, 267, 269, 272, 265, 270, 270, 273, 272, 274, - 276, 271, 277, 278, 275, 279, 276, 281, 278, 273, - 279, 282, 280, 286, 283, 280, 279, 280, 284, 274, - 285, 281, 277, 283, 284, 285, 286, 282, 287, 288, - 282, 289, 282, 290, 286, 291, 290, 294, 296, 293, - 2097, 297, 304, 298, 288, 289, 294, 304, 287, 291, - 299, 301, 290, 292, 293, 292, 292, 295, 298, 296, + 256, 258, 247, 257, 258, 260, 259, 251, 263, 257, + 261, 253, 256, 262, 260, 264, 262, 255, 259, 261, + 268, 263, 260, 260, 269, 260, 265, 264, 265, 265, + 266, 266, 267, 270, 262, 267, 271, 268, 275, 269, + 268, 273, 270, 272, 272, 271, 273, 274, 274, 276, + 277, 278, 279, 275, 276, 280, 281, 282, 325, 283, + 325, 280, 277, 282, 283, 287, 286, 279, 284, 285, + 290, 278, 285, 284, 285, 290, 281, 289, 288, 284, + 286, 287, 291, 289, 287, 292, 287, 288, 294, 293, + 295, 299, 296, 295, 301, 291, 298, 302, 304, 135, - 297, 302, 295, 295, 303, 292, 307, 292, 292, 292, - 299, 300, 292, 305, 301, 308, 306, 300, 309, 303, - 311, 302, 306, 310, 312, 313, 307, 308, 305, 310, - 313, 315, 309, 314, 314, 318, 314, 316, 317, 319, - 312, 319, 320, 321, 323, 311, 320, 321, 322, 318, - 324, 315, 325, 316, 317, 326, 328, 330, 323, 324, - 326, 325, 321, 327, 334, 328, 322, 327, 329, 331, - 324, 333, 324, 332, 329, 331, 333, 332, 330, 335, - 335, 336, 337, 339, 334, 341, 336, 338, 338, 339, - 340, 342, 343, 344, 340, 337, 342, 348, 345, 346, + 299, 305, 294, 291, 293, 292, 296, 305, 303, 295, + 297, 298, 297, 297, 300, 301, 302, 306, 304, 300, + 300, 307, 297, 303, 297, 297, 297, 308, 309, 297, + 310, 311, 312, 313, 317, 310, 314, 315, 312, 316, + 306, 307, 318, 309, 319, 316, 311, 308, 314, 319, + 321, 315, 322, 313, 320, 320, 323, 320, 318, 317, + 324, 326, 327, 329, 328, 326, 327, 330, 322, 331, + 321, 336, 323, 133, 324, 332, 330, 329, 331, 333, + 332, 327, 328, 333, 334, 335, 338, 330, 337, 330, + 338, 335, 336, 334, 337, 339, 340, 341, 341, 342, - 346, 343, 345, 347, 352, 344, 341, 353, 347, 349, - 349, 351, 351, 354, 355, 353, 356, 358, 348, 359, - 361, 362, 354, 365, 360, 352, 361, 363, 356, 364, - 362, 365, 363, 368, 355, 358, 366, 358, 360, 359, - 367, 370, 366, 364, 369, 371, 367, 368, 372, 369, - 373, 374, 372, 375, 376, 380, 374, 378, 388, 379, - 385, 381, 752, 370, 367, 373, 371, 381, 383, 375, - 388, 380, 381, 376, 377, 377, 382, 378, 379, 382, - 377, 387, 377, 384, 384, 385, 386, 386, 383, 389, - 377, 390, 391, 377, 392, 401, 387, 393, 394, 392, + 339, 343, 344, 344, 342, 345, 346, 347, 348, 349, + 346, 345, 350, 348, 343, 351, 340, 352, 349, 353, + 353, 352, 355, 359, 350, 354, 361, 351, 347, 360, + 354, 356, 356, 358, 358, 361, 362, 360, 363, 365, + 366, 367, 368, 355, 359, 369, 370, 371, 368, 374, + 363, 370, 374, 376, 369, 367, 362, 365, 372, 365, + 366, 371, 373, 375, 378, 377, 372, 376, 373, 375, + 377, 379, 380, 381, 382, 383, 380, 384, 388, 382, + 386, 396, 387, 393, 389, 131, 378, 375, 381, 391, + 389, 383, 379, 396, 388, 389, 384, 385, 385, 390, - 377, 395, 396, 398, 389, 399, 393, 398, 396, 400, - 390, 399, 402, 401, 391, 403, 395, 394, 404, 404, - 405, 400, 406, 403, 407, 402, 408, 409, 406, 408, - 410, 411, 405, 412, 411, 410, 407, 413, 414, 416, - 416, 415, 409, 414, 414, 417, 417, 419, 419, 412, - 418, 422, 412, 413, 415, 421, 418, 420, 420, 423, - 424, 421, 425, 426, 423, 427, 429, 426, 431, 428, - 425, 427, 422, 428, 436, 430, 432, 434, 433, 424, - 430, 438, 432, 433, 429, 439, 435, 441, 431, 435, - 439, 434, 436, 139, 435, 437, 437, 440, 435, 438, + 386, 387, 390, 385, 395, 385, 392, 392, 393, 391, + 394, 394, 397, 385, 398, 399, 385, 400, 409, 395, + 401, 402, 400, 385, 403, 404, 406, 397, 407, 401, + 406, 404, 408, 398, 407, 410, 409, 399, 411, 403, + 402, 412, 412, 413, 408, 414, 411, 415, 410, 413, + 416, 417, 418, 415, 417, 419, 420, 414, 421, 420, + 419, 68, 416, 422, 423, 424, 431, 418, 432, 423, + 423, 425, 425, 432, 421, 426, 426, 421, 424, 422, + 427, 428, 428, 429, 429, 430, 427, 431, 433, 434, + 435, 430, 436, 438, 435, 437, 439, 434, 436, 437, - 442, 441, 440, 443, 444, 445, 442, 444, 446, 445, - 447, 448, 443, 446, 450, 447, 449, 451, 452, 450, - 453, 455, 454, 458, 455, 137, 453, 448, 454, 449, - 452, 445, 456, 451, 457, 456, 459, 460, 462, 457, - 461, 458, 464, 460, 462, 461, 463, 464, 465, 463, - 459, 466, 467, 465, 465, 468, 469, 470, 472, 471, - 475, 468, 471, 472, 466, 467, 470, 473, 474, 474, - 477, 481, 473, 473, 476, 469, 476, 471, 478, 479, - 478, 480, 482, 483, 484, 475, 485, 483, 486, 477, - 481, 487, 488, 484, 489, 490, 491, 479, 497, 480, + 440, 439, 441, 443, 442, 445, 447, 433, 441, 442, + 444, 438, 450, 444, 446, 446, 448, 443, 444, 452, + 440, 448, 444, 445, 447, 449, 450, 451, 452, 453, + 449, 454, 453, 451, 455, 454, 456, 457, 458, 455, + 459, 456, 461, 460, 462, 459, 468, 465, 463, 464, + 465, 458, 460, 457, 463, 464, 462, 454, 461, 466, + 467, 469, 466, 470, 468, 467, 471, 472, 479, 470, + 486, 471, 476, 472, 473, 469, 474, 473, 475, 477, + 478, 474, 480, 475, 475, 476, 478, 479, 482, 483, + 481, 480, 477, 481, 483, 486, 484, 485, 485, 488, - 489, 485, 482, 492, 492, 493, 486, 488, 494, 493, - 487, 495, 496, 498, 490, 491, 495, 497, 499, 494, - 504, 507, 500, 501, 502, 499, 498, 500, 496, 502, - 501, 503, 505, 506, 508, 507, 503, 512, 504, 505, - 509, 510, 506, 508, 510, 509, 511, 513, 513, 516, - 511, 514, 517, 518, 519, 516, 513, 518, 512, 520, - 514, 521, 522, 523, 524, 525, 519, 521, 136, 528, - 522, 526, 517, 534, 531, 536, 526, 520, 542, 536, - 526, 523, 534, 526, 528, 525, 535, 537, 537, 524, - 526, 531, 535, 526, 538, 538, 539, 555, 543, 542, + 482, 484, 484, 487, 489, 487, 489, 490, 481, 491, + 492, 493, 494, 495, 497, 496, 494, 498, 488, 499, + 500, 501, 495, 502, 504, 490, 500, 491, 504, 492, + 496, 493, 497, 505, 499, 507, 498, 503, 503, 508, + 501, 506, 502, 509, 505, 510, 506, 512, 511, 515, + 513, 507, 510, 511, 512, 513, 509, 514, 508, 516, + 517, 518, 514, 519, 523, 520, 516, 515, 521, 517, + 520, 521, 519, 522, 525, 518, 527, 522, 524, 524, + 528, 529, 531, 525, 530, 523, 528, 524, 530, 532, + 533, 534, 535, 536, 531, 527, 533, 537, 540, 534, - 544, 541, 539, 540, 540, 540, 541, 540, 545, 555, - 540, 545, 546, 546, 549, 540, 543, 547, 548, 548, - 556, 540, 540, 551, 547, 544, 550, 550, 551, 549, - 552, 553, 554, 552, 554, 557, 553, 558, 559, 556, - 560, 560, 561, 563, 562, 565, 559, 564, 566, 566, - 565, 573, 577, 577, 567, 557, 558, 561, 562, 564, - 567, 563, 568, 569, 570, 571, 569, 572, 568, 573, - 570, 574, 575, 571, 576, 572, 574, 578, 580, 575, - 579, 581, 583, 584, 580, 587, 578, 585, 579, 586, - 585, 583, 584, 576, 586, 588, 588, 589, 591, 587, + 538, 529, 546, 543, 556, 538, 554, 532, 547, 538, + 535, 546, 538, 540, 547, 549, 549, 537, 536, 538, + 543, 548, 538, 550, 550, 548, 551, 554, 555, 556, + 591, 553, 551, 552, 552, 552, 553, 552, 557, 591, + 552, 557, 558, 558, 561, 552, 555, 559, 560, 560, + 568, 552, 552, 563, 559, 562, 562, 564, 563, 561, + 564, 565, 566, 567, 566, 569, 565, 570, 571, 568, + 572, 572, 573, 575, 574, 567, 571, 576, 577, 578, + 578, 582, 62, 577, 582, 569, 570, 573, 574, 576, + 579, 575, 580, 581, 583, 579, 584, 585, 580, 581, - 581, 591, 593, 595, 593, 594, 594, 597, 596, 591, - 598, 599, 589, 596, 600, 602, 601, 603, 604, 602, - 605, 608, 607, 610, 595, 601, 606, 608, 597, 605, - 598, 609, 609, 599, 600, 603, 607, 604, 606, 611, - 612, 613, 615, 610, 614, 616, 612, 613, 614, 617, - 618, 619, 619, 611, 617, 621, 620, 616, 621, 622, - 623, 615, 620, 624, 625, 616, 626, 626, 627, 624, - 629, 618, 630, 623, 628, 628, 630, 622, 631, 632, - 633, 634, 636, 636, 625, 629, 627, 637, 640, 639, - 638, 637, 640, 641, 633, 642, 643, 631, 655, 655, + 583, 586, 587, 588, 584, 585, 589, 587, 590, 590, + 588, 593, 592, 594, 596, 597, 600, 593, 598, 586, + 592, 598, 599, 596, 597, 589, 602, 599, 601, 601, + 600, 603, 594, 604, 605, 609, 607, 605, 607, 610, + 603, 602, 608, 608, 610, 605, 611, 613, 612, 615, + 614, 616, 619, 617, 618, 616, 609, 604, 615, 622, + 620, 619, 621, 623, 623, 622, 624, 611, 612, 613, + 614, 617, 620, 618, 625, 626, 621, 627, 628, 629, + 630, 626, 628, 627, 631, 632, 624, 634, 625, 631, + 633, 633, 630, 634, 635, 636, 637, 635, 629, 638, - 642, 634, 645, 632, 635, 638, 644, 635, 641, 635, - 643, 644, 644, 635, 639, 635, 645, 646, 647, 648, - 635, 646, 649, 650, 648, 635, 651, 649, 652, 653, - 654, 134, 658, 647, 648, 653, 654, 650, 656, 660, - 657, 657, 652, 656, 658, 659, 657, 651, 657, 661, - 659, 662, 662, 660, 664, 663, 665, 666, 667, 657, - 663, 661, 664, 668, 668, 669, 657, 671, 672, 669, - 665, 672, 673, 671, 674, 675, 666, 667, 676, 677, - 678, 675, 684, 676, 679, 680, 681, 674, 682, 678, - 685, 673, 683, 679, 686, 681, 687, 683, 677, 688, + 630, 639, 640, 640, 641, 638, 632, 642, 642, 637, + 643, 644, 645, 636, 646, 644, 647, 648, 649, 651, + 651, 639, 641, 652, 57, 643, 653, 652, 654, 655, + 647, 645, 656, 655, 658, 693, 668, 648, 646, 649, + 650, 653, 668, 650, 693, 650, 660, 656, 658, 650, + 657, 650, 659, 654, 662, 657, 650, 659, 659, 661, + 660, 650, 663, 661, 665, 664, 666, 663, 667, 662, + 664, 670, 670, 669, 673, 671, 674, 663, 665, 669, + 671, 674, 667, 672, 672, 675, 673, 666, 676, 672, + 678, 672, 677, 677, 680, 678, 679, 681, 682, 675, - 689, 680, 684, 691, 685, 687, 689, 682, 688, 692, - 693, 694, 695, 696, 686, 697, 694, 695, 696, 698, - 698, 700, 691, 699, 697, 693, 702, 692, 705, 699, - 703, 705, 706, 707, 700, 703, 703, 704, 704, 708, - 710, 704, 702, 709, 711, 712, 706, 711, 713, 709, - 714, 715, 718, 707, 708, 714, 715, 716, 718, 719, - 710, 720, 721, 721, 713, 722, 712, 720, 723, 716, - 724, 725, 726, 724, 722, 719, 727, 728, 729, 733, - 730, 736, 731, 735, 729, 730, 723, 731, 739, 725, - 728, 726, 734, 736, 735, 734, 727, 733, 737, 738, + 676, 688, 672, 684, 679, 683, 683, 684, 680, 672, + 687, 689, 686, 687, 691, 690, 681, 682, 686, 691, + 688, 690, 692, 694, 689, 696, 695, 697, 698, 699, + 700, 701, 694, 698, 696, 707, 702, 704, 703, 706, + 708, 692, 695, 704, 700, 702, 697, 703, 709, 699, + 710, 701, 711, 706, 707, 710, 712, 711, 708, 713, + 715, 712, 716, 709, 714, 714, 715, 718, 713, 720, + 720, 719, 722, 720, 723, 716, 719, 719, 721, 725, + 724, 721, 726, 718, 727, 725, 722, 727, 728, 730, + 52, 729, 731, 732, 723, 724, 729, 731, 732, 733, - 742, 740, 743, 739, 737, 738, 740, 741, 741, 744, - 745, 746, 748, 747, 745, 749, 743, 751, 753, 742, - 754, 744, 747, 755, 756, 768, 768, 757, 764, 746, - 756, 748, 753, 757, 758, 754, 751, 759, 760, 758, - 749, 761, 759, 755, 762, 763, 765, 764, 766, 762, - 767, 769, 760, 765, 770, 761, 771, 772, 779, 773, - 763, 779, 771, 766, 773, 769, 775, 775, 776, 767, - 778, 780, 770, 776, 777, 773, 781, 772, 773, 783, - 785, 777, 782, 784, 778, 781, 789, 782, 784, 780, - 787, 787, 788, 790, 791, 789, 788, 792, 783, 785, + 735, 736, 726, 739, 737, 730, 735, 738, 738, 728, + 737, 733, 739, 740, 742, 741, 743, 736, 741, 744, + 745, 746, 750, 747, 748, 752, 753, 746, 747, 748, + 756, 740, 742, 745, 751, 743, 752, 751, 753, 744, + 750, 754, 755, 759, 757, 756, 760, 754, 755, 757, + 758, 758, 761, 762, 763, 765, 764, 762, 766, 768, + 760, 770, 759, 773, 761, 764, 771, 772, 775, 773, + 774, 782, 763, 775, 765, 770, 774, 776, 768, 776, + 777, 771, 778, 766, 779, 777, 780, 772, 781, 784, + 782, 780, 783, 785, 786, 786, 778, 787, 779, 783, - 793, 795, 794, 796, 797, 798, 799, 793, 790, 800, - 801, 798, 792, 791, 794, 807, 802, 804, 805, 806, - 795, 799, 797, 804, 796, 802, 808, 806, 809, 800, - 801, 808, 805, 810, 811, 807, 812, 816, 810, 810, - 809, 813, 814, 814, 815, 817, 816, 818, 818, 820, - 812, 817, 827, 811, 813, 819, 821, 815, 820, 822, - 819, 821, 823, 823, 822, 824, 825, 826, 830, 828, - 827, 825, 829, 830, 824, 828, 831, 832, 829, 835, - 831, 826, 833, 833, 837, 834, 832, 834, 837, 838, - 835, 832, 839, 832, 840, 832, 841, 832, 842, 843, + 788, 789, 790, 781, 784, 791, 795, 789, 793, 793, + 791, 787, 785, 795, 794, 796, 798, 797, 788, 794, + 797, 791, 790, 799, 791, 800, 801, 803, 802, 796, + 800, 807, 799, 802, 798, 805, 805, 806, 808, 809, + 807, 806, 810, 811, 812, 801, 803, 813, 814, 815, + 811, 818, 819, 808, 816, 817, 812, 810, 809, 820, + 816, 823, 853, 825, 853, 827, 813, 815, 820, 814, + 817, 818, 819, 822, 824, 823, 826, 827, 829, 822, + 828, 826, 824, 825, 830, 828, 828, 831, 832, 832, + 833, 837, 834, 835, 836, 836, 837, 829, 830, 835, - 844, 841, 841, 840, 838, 845, 846, 847, 843, 848, - 839, 849, 842, 845, 851, 851, 847, 850, 852, 844, - 846, 856, 850, 853, 853, 855, 856, 848, 855, 857, - 858, 858, 859, 852, 860, 860, 849, 861, 862, 863, - 863, 864, 861, 866, 865, 867, 868, 868, 857, 865, - 867, 866, 859, 869, 870, 871, 872, 874, 875, 862, - 870, 864, 871, 874, 875, 876, 877, 878, 879, 872, - 876, 869, 877, 880, 881, 881, 878, 882, 883, 884, - 885, 886, 888, 887, 880, 891, 885, 879, 889, 890, - 890, 892, 893, 899, 888, 886, 896, 882, 883, 894, + 831, 834, 838, 833, 839, 840, 841, 841, 842, 839, + 840, 838, 843, 844, 846, 845, 847, 848, 844, 849, + 854, 843, 847, 848, 849, 851, 850, 857, 842, 845, + 850, 854, 846, 856, 851, 852, 852, 856, 858, 851, + 859, 851, 857, 851, 861, 851, 860, 863, 862, 859, + 865, 860, 860, 864, 866, 868, 858, 862, 861, 869, + 867, 864, 870, 872, 865, 879, 863, 870, 866, 867, + 871, 871, 876, 868, 873, 873, 875, 876, 872, 875, + 877, 878, 878, 881, 869, 879, 880, 880, 881, 882, + 883, 883, 884, 885, 886, 887, 888, 888, 885, 877, - 132, 886, 884, 887, 894, 891, 889, 895, 895, 897, - 893, 904, 899, 901, 897, 900, 892, 902, 903, 896, - 900, 900, 901, 905, 907, 902, 904, 911, 905, 904, - 908, 906, 903, 906, 910, 909, 908, 912, 907, 909, - 913, 915, 914, 919, 916, 910, 911, 914, 918, 920, - 921, 922, 918, 925, 923, 924, 929, 130, 913, 915, - 927, 919, 921, 912, 916, 922, 926, 927, 920, 923, - 924, 926, 925, 928, 929, 930, 931, 931, 928, 932, - 933, 934, 935, 936, 930, 937, 933, 935, 944, 936, - 946, 937, 938, 938, 932, 939, 939, 941, 941, 942, + 887, 889, 886, 890, 891, 892, 899, 894, 895, 890, + 882, 891, 884, 894, 895, 896, 897, 898, 892, 889, + 896, 900, 897, 901, 901, 899, 898, 902, 903, 904, + 905, 906, 900, 907, 908, 909, 905, 910, 911, 911, + 912, 913, 917, 914, 51, 906, 908, 902, 903, 909, + 920, 906, 904, 907, 915, 910, 916, 916, 918, 915, + 912, 914, 921, 918, 922, 917, 913, 921, 921, 920, + 923, 924, 925, 922, 926, 927, 929, 927, 923, 926, + 928, 931, 929, 932, 930, 924, 933, 925, 930, 934, + 925, 935, 931, 936, 928, 937, 935, 939, 940, 941, - 943, 947, 934, 942, 946, 945, 944, 948, 950, 943, - 945, 949, 948, 948, 951, 952, 949, 949, 953, 954, - 947, 955, 958, 956, 957, 959, 963, 960, 950, 956, - 957, 961, 68, 951, 952, 962, 964, 953, 965, 965, - 955, 958, 967, 969, 959, 954, 960, 963, 969, 962, - 961, 964, 966, 971, 967, 966, 968, 968, 970, 972, - 973, 974, 970, 974, 976, 977, 971, 974, 972, 978, - 978, 979, 981, 973, 980, 982, 979, 983, 980, 986, - 974, 977, 988, 983, 976, 984, 984, 988, 989, 989, - 981, 995, 990, 992, 992, 982, 999, 986, 990, 994, + 943, 939, 932, 946, 944, 942, 945, 934, 947, 952, + 952, 936, 933, 947, 943, 937, 940, 942, 941, 944, + 948, 945, 946, 949, 950, 951, 953, 948, 949, 954, + 955, 956, 957, 958, 951, 954, 956, 965, 957, 958, + 967, 953, 950, 959, 959, 960, 960, 962, 962, 963, + 964, 955, 966, 963, 967, 965, 968, 966, 969, 964, + 970, 971, 46, 969, 969, 970, 970, 972, 973, 974, + 975, 976, 977, 978, 979, 968, 975, 980, 984, 978, + 979, 971, 981, 982, 983, 985, 972, 973, 974, 986, + 41, 977, 984, 987, 987, 988, 980, 976, 988, 989, - 994, 997, 998, 998, 997, 1000, 1001, 995, 1002, 1003, - 1008, 999, 1005, 1002, 1004, 1004, 1005, 1006, 1007, 1007, - 1001, 1010, 1009, 1011, 1003, 1010, 1012, 1014, 1014, 1015, - 1000, 1012, 1008, 1009, 1016, 1017, 1017, 1006, 1018, 1019, - 1020, 1021, 1011, 1018, 1022, 1026, 1034, 1015, 1016, 1023, - 1021, 1023, 1024, 1029, 1031, 1025, 1027, 1024, 62, 1019, - 1020, 1025, 1027, 1037, 1022, 1026, 1032, 1029, 1030, 1030, - 1034, 1038, 1032, 1031, 1035, 1035, 1036, 1036, 1040, 1039, - 1041, 1037, 1039, 1043, 1045, 1042, 1038, 1044, 1042, 1043, - 1040, 1042, 1044, 1045, 1046, 1047, 1049, 1051, 1048, 1046, + 991, 981, 982, 983, 986, 991, 985, 990, 990, 992, + 993, 989, 994, 992, 995, 999, 996, 998, 996, 1000, + 1000, 994, 996, 993, 1001, 1003, 1002, 995, 1004, 1001, + 1002, 999, 1005, 1006, 14, 996, 1009, 998, 1011, 1006, + 1007, 1007, 1023, 1011, 1013, 1003, 1004, 1012, 1012, 1018, + 1013, 1022, 1005, 1026, 1009, 1015, 1015, 1017, 1017, 1020, + 1021, 1021, 1020, 1024, 1025, 1018, 1022, 1023, 1026, 1025, + 1027, 1027, 1028, 1029, 1030, 1030, 1028, 1024, 1031, 1032, + 1033, 1035, 1034, 1039, 1033, 1038, 1035, 1037, 1037, 1041, + 1032, 1040, 1040, 1029, 1041, 1042, 1043, 1039, 1044, 1045, - 1041, 1048, 1049, 1042, 1050, 1050, 1052, 1053, 1054, 1057, - 1061, 1055, 1056, 1062, 1054, 1051, 1055, 1058, 1056, 1063, - 1047, 1060, 1058, 1059, 1059, 1052, 1060, 1053, 1061, 1064, - 1065, 1068, 1057, 1062, 1066, 1067, 1069, 1068, 1070, 1063, - 1071, 1072, 1076, 1064, 1065, 1075, 1066, 1076, 1067, 1074, - 1074, 1077, 1078, 1080, 1071, 1079, 1069, 1082, 1070, 1078, - 1084, 1091, 1072, 1088, 1079, 1075, 1077, 1079, 1088, 1080, - 1085, 1085, 1082, 1086, 1086, 1087, 1089, 1082, 1087, 1090, - 1091, 1092, 1093, 1094, 1096, 1084, 1095, 1095, 1090, 1094, - 1092, 1093, 1089, 1092, 1097, 1098, 1099, 1101, 1100, 1103, + 1031, 1034, 1046, 1038, 1045, 1048, 1047, 1044, 1047, 1050, + 1048, 1049, 1051, 1053, 1055, 1042, 1043, 1049, 1051, 1054, + 1054, 1058, 1046, 1061, 1056, 1059, 1059, 1053, 1062, 1050, + 1056, 1060, 1060, 1055, 1063, 1064, 1065, 1063, 1067, 13, + 1071, 1061, 1069, 1062, 1067, 1058, 1066, 1064, 1068, 1066, + 1070, 1069, 1066, 1068, 1072, 1070, 1065, 1072, 1074, 1074, + 1073, 1075, 1076, 1077, 1066, 1071, 1073, 1078, 1081, 1079, + 1080, 1085, 1082, 1078, 1079, 1084, 1080, 1082, 1086, 1075, + 1084, 1076, 1087, 1077, 1083, 1083, 1088, 1089, 1092, 1085, + 1091, 1081, 1090, 1093, 1092, 1094, 1095, 1096, 1086, 1099, - 1104, 1105, 1105, 1106, 1096, 1111, 1107, 1097, 57, 1101, - 1099, 1108, 1115, 1098, 1100, 1107, 1108, 1110, 1104, 1106, - 1109, 1109, 1112, 1111, 1103, 1114, 1110, 1112, 1112, 1110, - 1115, 1114, 1116, 1117, 1118, 1109, 1120, 1116, 1121, 1117, - 1118, 1122, 1123, 1126, 1121, 1123, 1128, 1127, 1129, 1130, - 1136, 1123, 1131, 1132, 1122, 1127, 1120, 1133, 1131, 1128, - 1135, 1135, 1126, 1137, 1142, 1141, 1129, 1137, 1130, 1132, - 1136, 1138, 1139, 1140, 1141, 1133, 1138, 1139, 1140, 1144, - 1145, 1145, 1146, 1147, 1150, 1148, 1149, 1142, 1152, 1151, - 1147, 1153, 52, 1154, 1144, 1151, 1146, 1148, 1149, 1154, + 1088, 1089, 1087, 1091, 1090, 1098, 1098, 1100, 1101, 1102, + 1095, 1104, 1100, 1093, 1108, 1094, 1102, 1103, 1096, 1099, + 1106, 1109, 1109, 1101, 1110, 1110, 1103, 1104, 1111, 1103, + 1112, 1111, 1113, 1115, 1114, 1106, 1116, 1113, 1118, 1108, + 1106, 1121, 1115, 0, 1117, 1119, 1122, 1118, 1123, 1112, + 1114, 1119, 1126, 1117, 1124, 1116, 1117, 1120, 1120, 1122, + 1125, 1121, 1128, 1129, 1126, 1132, 1123, 1131, 1124, 1130, + 1130, 1136, 1133, 1135, 1132, 0, 1125, 1133, 1134, 1134, + 1140, 1129, 1135, 1131, 1139, 1135, 1137, 1128, 1141, 1136, + 1139, 1137, 1137, 1134, 1141, 1142, 1143, 1144, 1140, 1146, - 1152, 1155, 1155, 1150, 1156, 1157, 1157, 1156, 1159, 1153, - 1160, 1161, 1161, 1159, 1162, 1163, 1164, 1163, 1165, 1160, - 1166, 1168, 1167, 1169, 1170, 1172, 1162, 1167, 1171, 1173, - 1168, 1174, 1177, 1171, 1172, 1169, 1164, 1176, 1166, 1170, - 1165, 1175, 1175, 1176, 1178, 1179, 1174, 1172, 1181, 1173, - 1180, 1180, 1183, 1177, 1182, 1182, 1184, 1184, 1185, 1190, - 1186, 1187, 1185, 1178, 1187, 1179, 1186, 1192, 1181, 1189, - 1191, 1193, 1197, 1183, 1193, 1189, 1191, 1190, 1194, 1194, - 1195, 1195, 1196, 1198, 1197, 1197, 1197, 1199, 1196, 1200, - 1201, 1197, 1192, 1203, 1204, 1200, 1205, 1207, 1203, 1203, + 1142, 1147, 1143, 1144, 1148, 1149, 1152, 1147, 1149, 1154, + 1153, 1155, 1156, 1162, 1149, 1157, 1158, 1148, 1153, 1146, + 1159, 1157, 1154, 1161, 1161, 1152, 1163, 1168, 1167, 1155, + 1163, 1156, 1158, 1162, 1164, 1165, 1166, 1167, 1159, 1164, + 1165, 1166, 1170, 1171, 1171, 1172, 1173, 1176, 1174, 1175, + 1168, 1177, 1178, 1173, 1180, 1179, 1181, 1170, 1178, 1172, + 1174, 1175, 1181, 1182, 1182, 1183, 1176, 1179, 1183, 1184, + 1184, 1177, 1180, 1186, 1187, 1188, 1188, 1189, 1186, 1190, + 1191, 1190, 1192, 1187, 1193, 1194, 1195, 1196, 1197, 1189, + 1194, 1198, 1199, 1200, 1201, 1195, 1198, 1202, 1202, 1196, - 1206, 1206, 1209, 1198, 1208, 1208, 1210, 1199, 1204, 1215, - 1201, 1211, 1211, 1212, 1212, 1216, 1216, 1205, 1215, 1217, - 1218, 1219, 1209, 1207, 1220, 1221, 1221, 1218, 1210, 1222, - 1219, 1223, 1225, 1226, 1217, 1228, 1227, 1225, 1229, 1226, - 1230, 1234, 1228, 1235, 1229, 1233, 1230, 1223, 1231, 1231, - 1220, 1236, 1232, 1238, 1233, 1222, 1227, 1232, 1239, 1240, - 1240, 1234, 1235, 1236, 1237, 1241, 1242, 1237, 1244, 1247, - 1242, 1238, 1246, 1245, 1248, 1247, 1246, 1249, 1249, 1250, - 1241, 1251, 1251, 1248, 1239, 1252, 1242, 1244, 1245, 1253, - 1250, 1254, 1255, 1256, 1256, 1250, 1257, 1259, 1255, 1258, + 1191, 1199, 1193, 1197, 1192, 1203, 1204, 1205, 1206, 1201, + 1208, 1203, 1210, 1200, 1199, 1207, 1207, 1209, 1209, 1211, + 1211, 1212, 1217, 1213, 1219, 1212, 1205, 1204, 1206, 1213, + 1208, 1214, 1216, 1210, 1214, 1218, 1220, 1225, 1216, 1220, + 1217, 1218, 1221, 1221, 1222, 1222, 1223, 1224, 1226, 1219, + 1227, 1228, 1223, 1231, 1232, 1234, 1227, 1225, 1230, 1224, + 1224, 1224, 1236, 1230, 1230, 1237, 1224, 1231, 1226, 1233, + 1233, 1228, 1235, 1235, 1242, 1232, 1238, 1238, 1239, 1239, + 1243, 1234, 1236, 1242, 1244, 1244, 1246, 1237, 1245, 1247, + 1248, 1249, 1249, 1246, 1250, 1251, 0, 1253, 1247, 1254, - 1260, 1257, 1257, 1253, 1261, 1258, 1252, 1263, 1265, 1264, - 1261, 1254, 1260, 1264, 1266, 1267, 1268, 1270, 1269, 1263, - 1265, 1267, 1272, 1259, 1269, 1272, 1273, 1273, 1276, 1270, - 1274, 1274, 1275, 1275, 1277, 1280, 1278, 1279, 1268, 1266, - 1277, 1278, 1282, 1279, 1280, 1285, 1284, 1282, 1276, 1284, - 1287, 1288, 1289, 1289, 1291, 1290, 1293, 1285, 1294, 1291, - 1292, 1292, 1287, 1288, 1290, 1295, 1296, 1294, 1297, 1298, - 1300, 1299, 1297, 1303, 1298, 51, 1293, 1299, 1302, 1302, - 1304, 1307, 1307, 1295, 1300, 1296, 1305, 1309, 1312, 1304, - 1302, 1303, 1311, 1313, 1314, 1305, 1315, 1315, 1316, 1313, + 1256, 1243, 1253, 1245, 1255, 1254, 1257, 1256, 1258, 1259, + 1259, 1251, 1257, 1260, 1258, 1262, 1248, 1261, 1260, 1263, + 1250, 1264, 1265, 1266, 1255, 1265, 1261, 1267, 1268, 1268, + 1269, 1272, 1270, 1264, 1273, 1262, 1270, 1274, 1263, 1275, + 1276, 1266, 1277, 1275, 1279, 1269, 1276, 1278, 1278, 1273, + 1272, 1277, 1270, 1267, 1281, 1279, 1274, 1280, 1280, 1282, + 1279, 1283, 1284, 1285, 1285, 1286, 1287, 1288, 1284, 1295, + 1286, 1286, 1287, 1282, 1289, 1281, 1290, 1292, 1294, 1293, + 1297, 1283, 1290, 1293, 1299, 1296, 1289, 1302, 1302, 1292, + 1294, 1296, 1298, 1288, 1295, 1305, 1299, 1301, 1298, 0, - 1316, 1318, 1312, 1309, 1317, 1317, 1320, 1311, 1321, 1318, - 1323, 1314, 1324, 1320, 1322, 1322, 1328, 1325, 1326, 1323, - 1327, 1329, 1335, 1332, 46, 1330, 1333, 1335, 1321, 1325, - 1326, 1330, 1327, 1324, 1337, 1336, 1329, 1336, 1341, 1343, - 1338, 1339, 1328, 1332, 1330, 1338, 1333, 1341, 1339, 1344, - 1344, 1345, 1337, 1343, 1346, 1347, 1348, 1347, 1349, 1346, - 1350, 1348, 1351, 1349, 1352, 1355, 1353, 1354, 1357, 1358, - 1352, 1353, 1362, 1355, 1359, 1359, 1361, 1345, 1350, 1623, - 1354, 1364, 1351, 1358, 1360, 1360, 1364, 1357, 1363, 1366, - 1623, 1361, 1362, 1365, 1363, 1365, 1367, 1367, 1368, 1368, + 1301, 1306, 1297, 1303, 1303, 1304, 1304, 1306, 1307, 1315, + 1310, 1308, 1309, 1317, 1307, 1305, 1308, 1312, 1309, 1310, + 1314, 1315, 1312, 1314, 1318, 1317, 1319, 1319, 1320, 1321, + 1322, 1322, 1323, 1324, 1321, 1325, 1318, 1320, 1326, 1327, + 1328, 1329, 1324, 1327, 1330, 1328, 1333, 1329, 1332, 1332, + 1334, 1339, 1323, 1325, 1335, 1337, 1337, 1326, 1330, 1334, + 1332, 1341, 1343, 1335, 1333, 1342, 1344, 1339, 1343, 1345, + 1345, 1346, 1348, 1346, 1347, 1347, 1341, 1350, 1351, 1342, + 1348, 1352, 1352, 1344, 1350, 1353, 1354, 1355, 1356, 1357, + 1358, 1359, 1362, 1363, 1353, 1366, 1360, 1366, 1351, 1355, - 1369, 1366, 1370, 1373, 1370, 1371, 1371, 1372, 1375, 1369, - 1378, 1379, 1369, 1375, 1376, 1373, 1372, 1380, 1381, 1376, - 1383, 1385, 1386, 1378, 1387, 1392, 1383, 1385, 1397, 1388, - 1390, 1379, 1389, 1389, 1381, 1380, 1397, 1386, 1388, 1390, - 1391, 1391, 1393, 1394, 1392, 1395, 1393, 1396, 1394, 1387, - 1398, 1402, 1396, 1396, 1401, 1401, 1403, 1403, 1395, 1405, - 1402, 1404, 1404, 1406, 1408, 1413, 1407, 1409, 1409, 1408, - 1398, 1405, 1407, 1410, 1415, 1412, 1418, 1416, 1410, 1412, - 1417, 1406, 1416, 1419, 1420, 1413, 1422, 1422, 1419, 1421, - 1423, 1418, 1424, 1425, 1423, 1426, 1427, 1429, 1425, 1415, + 1356, 1357, 1360, 1365, 1367, 1368, 1359, 1354, 1365, 1376, + 1368, 1369, 1362, 1363, 1371, 1360, 1358, 1372, 1369, 1372, + 1374, 1377, 1367, 1371, 1375, 1375, 1377, 1378, 1379, 1378, + 1381, 1380, 1382, 1379, 1374, 1376, 1380, 1383, 1385, 1384, + 1388, 1386, 1389, 1383, 1384, 1390, 1390, 1392, 1381, 1386, + 1393, 1385, 1382, 1391, 1391, 1394, 1389, 1397, 1395, 1388, + 1402, 1394, 1392, 1395, 1396, 1400, 1396, 1398, 1398, 1397, + 1393, 1399, 1399, 1401, 1400, 1401, 1404, 1400, 1403, 1403, + 1405, 1402, 1407, 1408, 1410, 1404, 1411, 1407, 1408, 1412, + 1415, 1419, 1405, 1413, 1417, 1418, 1415, 1410, 1424, 1420, - 1430, 1431, 1420, 1417, 1437, 1421, 1434, 1424, 1432, 1433, - 1435, 1438, 1438, 1440, 1439, 1427, 1429, 1439, 1434, 1437, - 1441, 1426, 1442, 1430, 1446, 1431, 1440, 1432, 1443, 1443, - 1433, 1435, 1444, 1444, 1441, 1442, 1445, 1445, 1447, 1446, - 1448, 1448, 1453, 1449, 1450, 1450, 1451, 1451, 1452, 1452, - 1455, 1447, 1449, 1454, 1454, 1449, 1456, 1456, 1457, 1457, - 1458, 1453, 1460, 1461, 1461, 1462, 1465, 1460, 1455, 1463, - 1463, 1464, 1465, 1466, 1467, 1467, 1466, 1468, 1468, 1458, - 1469, 1470, 1471, 1474, 1462, 1472, 1472, 1475, 1477, 1464, - 1467, 1476, 1477, 1478, 1478, 1479, 1470, 1480, 1480, 1469, + 1417, 1421, 1421, 1422, 1423, 1423, 1411, 1412, 1420, 1413, + 1418, 1425, 1422, 1426, 1427, 1425, 1419, 1424, 1426, 1428, + 1429, 1430, 1433, 1433, 1428, 1428, 1435, 1427, 1429, 1434, + 1436, 1436, 1437, 1437, 1438, 1435, 1439, 1440, 1442, 1442, + 1441, 1430, 1443, 1440, 1434, 1441, 1438, 1443, 1445, 1446, + 1448, 1449, 1445, 1450, 1439, 1451, 1449, 1452, 1454, 1453, + 1455, 1455, 1452, 1456, 1457, 1459, 1458, 1456, 1460, 1446, + 1451, 1458, 1463, 1462, 1454, 1448, 1450, 1453, 1464, 1457, + 1465, 1467, 1466, 1468, 1474, 1470, 1511, 1460, 1471, 1471, + 1511, 1459, 1462, 1467, 1472, 1463, 1473, 1472, 1474, 1465, - 1481, 1471, 1482, 1474, 1483, 1487, 1476, 1484, 1484, 1482, - 1475, 1488, 1485, 1489, 1479, 1490, 1488, 1487, 1491, 1492, - 1481, 1485, 1493, 1495, 1492, 1494, 1496, 1493, 1490, 1497, - 1483, 1498, 1495, 1501, 1507, 1496, 41, 1498, 1489, 1491, - 1494, 1499, 1503, 1497, 1505, 1499, 1504, 1504, 1506, 1506, - 1505, 1503, 1509, 1501, 1507, 1510, 1507, 1506, 1512, 1514, - 1515, 1516, 1514, 1517, 1510, 1515, 14, 1509, 1518, 1518, - 1512, 1520, 1520, 1521, 1522, 1517, 1523, 1523, 1521, 1524, - 1522, 1516, 1525, 1525, 1526, 1527, 1528, 1529, 1529, 1532, - 1531, 1535, 1532, 1524, 1531, 1534, 1526, 1533, 1533, 1527, + 1470, 1475, 1464, 1466, 1468, 1476, 1476, 1477, 1477, 1473, + 1478, 1478, 1479, 1480, 1475, 1481, 1481, 1483, 1483, 1482, + 1484, 1484, 1485, 1485, 1486, 1491, 1480, 1479, 1482, 1487, + 1487, 1482, 1488, 1489, 1489, 1490, 1490, 1492, 1496, 1491, + 1494, 1495, 1495, 1486, 1498, 1494, 1497, 1497, 1499, 1500, + 1488, 1503, 1500, 1504, 1499, 1508, 1492, 1496, 1501, 1501, + 1502, 1502, 1498, 1505, 1506, 1506, 1509, 1513, 1504, 1510, + 1503, 1512, 1512, 1515, 1501, 1508, 1514, 1514, 1516, 1517, + 1518, 1518, 1505, 1519, 1510, 1516, 1513, 1522, 1520, 1509, + 1520, 1523, 1519, 1515, 1524, 1525, 1523, 1526, 1527, 1522, - 1534, 1536, 1537, 1538, 1539, 1528, 1541, 1538, 1540, 1542, - 1543, 1535, 1541, 1540, 1545, 1542, 1537, 1546, 1548, 1547, - 1552, 1536, 1546, 1555, 1539, 1547, 1548, 1549, 1543, 1549, - 1545, 1553, 1553, 1554, 1552, 1562, 1554, 1556, 1556, 1560, - 1560, 1565, 1566, 1566, 1568, 1568, 1565, 1572, 1570, 1555, - 1571, 1571, 1573, 1562, 1570, 1574, 1576, 1577, 1578, 1578, - 1574, 1580, 1581, 1572, 1582, 1583, 1585, 1585, 1581, 1577, - 1580, 1587, 1587, 1589, 1573, 1576, 1588, 1588, 1589, 1590, - 1583, 1590, 1582, 1591, 1592, 1593, 1593, 1594, 1594, 1592, - 1595, 1595, 1596, 1597, 1598, 1598, 1599, 1591, 1600, 1603, + 1529, 1528, 1530, 1527, 1531, 1517, 1528, 1532, 1525, 1536, + 1533, 1530, 1542, 1531, 1538, 1529, 1533, 1547, 1526, 1524, + 1534, 1532, 1540, 1538, 1534, 1539, 1539, 1544, 1540, 1536, + 1541, 1541, 1542, 1547, 1542, 1545, 1548, 1550, 1551, 1541, + 1550, 1552, 1544, 1551, 1545, 1553, 1554, 1554, 1548, 1556, + 1556, 1557, 1558, 1559, 1559, 1560, 1557, 1553, 1558, 1561, + 1561, 1552, 1562, 1563, 1564, 1565, 1565, 1567, 1571, 1560, + 1568, 1567, 1572, 1568, 1562, 1569, 1569, 1563, 1574, 1570, + 1573, 1575, 1574, 1564, 1570, 1576, 1579, 1577, 1571, 1578, + 1576, 1581, 1572, 1577, 1573, 1578, 1591, 1582, 1584, 1583, - 1601, 1602, 1604, 1604, 1596, 1605, 1602, 1606, 1599, 1607, - 1600, 1597, 1601, 1608, 1605, 1609, 1610, 1611, 1611, 1603, - 1613, 1614, 1612, 1615, 1617, 1617, 1608, 1616, 1615, 1607, - 1610, 1612, 1616, 1606, 1618, 1618, 1619, 1619, 1613, 1609, - 1622, 1625, 1626, 1614, 1627, 1628, 1629, 1630, 1632, 1632, - 1631, 1634, 1634, 1635, 1636, 1629, 1637, 1639, 1622, 1638, - 1626, 1625, 1635, 1637, 1640, 1628, 1627, 1630, 1631, 1641, - 1642, 1648, 1636, 1646, 1638, 1639, 1643, 1643, 1644, 1644, - 1645, 1647, 1640, 1649, 1650, 1641, 1645, 1651, 1649, 1642, - 1648, 1646, 1652, 1653, 1655, 1653, 1647, 1652, 1656, 1659, + 1588, 1575, 1582, 1598, 1579, 1583, 1584, 1581, 1585, 1607, + 1585, 1589, 1589, 1590, 1588, 1607, 1590, 1592, 1592, 1596, + 1596, 1598, 1591, 1601, 1602, 1603, 1603, 1609, 1601, 1602, + 1605, 1605, 1608, 1608, 1610, 1611, 1613, 1614, 1615, 1615, + 1611, 1617, 1618, 1609, 1619, 1620, 1622, 1622, 1618, 1614, + 1617, 1624, 1624, 1625, 1625, 1613, 1610, 1627, 1626, 1627, + 1620, 1628, 1619, 1626, 1629, 1630, 1631, 1631, 1632, 1632, + 1630, 1633, 1633, 1634, 1635, 1628, 1636, 1636, 1629, 1637, + 1641, 1638, 1639, 1640, 1644, 1634, 1642, 1642, 1640, 1643, + 1646, 1637, 1635, 1638, 1639, 1645, 1647, 1648, 1643, 1650, - 1661, 1661, 1660, 1655, 1650, 1660, 1662, 1651, 1663, 1664, - 1664, 1665, 1667, 1675, 1668, 1665, 1670, 1656, 1668, 1659, - 1682, 1662, 1669, 1669, 1672, 1672, 1663, 1667, 1683, 1670, - 1674, 1674, 1675, 1676, 1676, 1677, 1677, 1681, 1681, 1684, - 1685, 1683, 1682, 1687, 1686, 1685, 1688, 1691, 1684, 1686, - 1690, 1692, 1691, 1693, 1688, 13, 1692, 1694, 1694, 1695, - 1695, 1697, 1687, 1696, 1699, 1690, 1697, 1698, 1693, 1699, - 1696, 1700, 1700, 1698, 1701, 1701, 1704, 1705, 1711, 1706, - 1707, 1708, 1705, 1705, 1706, 1708, 1707, 1709, 1710, 1704, - 1712, 1713, 1709, 1711, 1714, 1717, 1713, 1710, 1712, 1716, + 1641, 1649, 1649, 1646, 1651, 1652, 1653, 1654, 1650, 1653, + 1644, 1648, 1654, 1655, 1661, 1645, 1656, 1656, 1655, 1662, + 1647, 1664, 1651, 1657, 1657, 1658, 1658, 1652, 1665, 1666, + 1662, 1668, 1661, 1667, 1669, 1671, 1671, 1670, 1673, 1673, + 1668, 1664, 1675, 1674, 1677, 1678, 1665, 1679, 1680, 1676, + 1681, 1666, 1674, 1667, 1669, 1670, 1676, 1682, 1682, 1677, + 1675, 1683, 1683, 1678, 1680, 1679, 1684, 1685, 1686, 1681, + 1687, 1688, 1684, 1689, 1690, 1691, 1688, 1692, 1694, 1692, + 1691, 1695, 1699, 1686, 1696, 1685, 1703, 1694, 1700, 1687, + 1702, 1700, 1707, 1689, 1690, 1701, 1701, 1704, 1704, 1709, - 1717, 1718, 1716, 1719, 1720, 1721, 1714, 1722, 1722, 1723, - 1726, 1727, 1732, 1720, 1721, 1728, 1719, 1730, 1723, 1718, - 1729, 1729, 1734, 1731, 1733, 1733, 1735, 1732, 1738, 1726, - 1735, 1727, 1731, 1738, 1728, 1737, 1730, 1736, 1736, 1740, - 1741, 1734, 1743, 1737, 1744, 1745, 1743, 1753, 1740, 1747, - 1747, 1750, 1750, 1741, 1754, 1754, 1755, 1755, 1744, 1756, - 1745, 1760, 1756, 1757, 1757, 1758, 1758, 1753, 1759, 1759, - 1761, 1762, 1763, 1763, 1764, 1767, 1768, 1762, 1764, 1760, - 1767, 1767, 1769, 1770, 1761, 1773, 1776, 1777, 1769, 1770, - 1773, 1774, 1778, 1781, 1774, 1779, 1780, 1778, 1783, 1768, + 1709, 1695, 1699, 1696, 1703, 1702, 1705, 1707, 1708, 1710, + 1705, 1715, 1708, 1712, 1712, 1714, 1714, 1716, 1716, 1717, + 1718, 1718, 1710, 1723, 1717, 1722, 1722, 1724, 1725, 1726, + 1715, 1727, 1728, 1729, 1726, 1731, 1727, 1725, 1732, 1733, + 1724, 1729, 1734, 1732, 1733, 1723, 1735, 1735, 1736, 1736, + 1731, 1728, 1737, 1738, 1739, 1741, 1740, 1734, 1738, 1737, + 1739, 1740, 1742, 1742, 1743, 1743, 1746, 1747, 0, 1748, + 1741, 1749, 1747, 1747, 1748, 1752, 1750, 1749, 1751, 1746, + 1750, 1753, 1754, 1751, 1752, 1756, 1755, 1760, 1759, 1758, + 1754, 1755, 1758, 1759, 1761, 1762, 1753, 1756, 1768, 1763, - 1782, 1782, 1784, 1785, 1777, 1777, 1791, 1781, 1786, 1786, - 1784, 1776, 1789, 1779, 1787, 1787, 1780, 1783, 1788, 1788, - 1790, 1792, 1785, 1793, 1794, 1790, 1791, 1799, 1789, 1795, - 1797, 1797, 1793, 1798, 1801, 1801, 1798, 1802, 1804, 1805, - 1805, 1810, 1802, 1807, 1794, 1799, 1806, 1792, 1808, 1795, - 1806, 1811, 1807, 1809, 1810, 1813, 1804, 1814, 1809, 1809, - 1811, 1816, 1820, 1808, 1813, 1821, 1821, 1820, 1822, 1814, - 1824, 1828, 1825, 1825, 1829, 1824, 1825, 1822, 1827, 1827, - 1828, 1830, 1833, 1831, 1832, 1832, 1816, 1830, 1831, 1835, - 1834, 1836, 1837, 1840, 1829, 1834, 1841, 1836, 1838, 1838, + 1764, 1764, 1765, 1769, 1762, 1760, 1770, 1761, 1763, 1771, + 1771, 1765, 1772, 1773, 1774, 1775, 1775, 1768, 1776, 1783, + 1777, 1778, 1773, 1769, 1777, 1770, 1780, 1778, 1783, 1774, + 1781, 1772, 1779, 1779, 1780, 1781, 1784, 1776, 1786, 1787, + 1788, 1795, 1786, 1790, 1790, 1793, 1793, 1797, 1806, 1784, + 1798, 1798, 1804, 1787, 1806, 1788, 1799, 1799, 1805, 1800, + 1812, 1795, 1800, 1801, 1801, 1802, 1802, 1797, 1803, 1803, + 1804, 1808, 1805, 1807, 1807, 1808, 1811, 1819, 1813, 1814, + 1819, 1811, 1811, 1812, 1813, 1814, 1815, 1818, 1821, 1822, + 1815, 1823, 1818, 1824, 1825, 1826, 1823, 1827, 1827, 1828, - 1842, 1842, 1843, 1833, 1844, 1845, 1846, 1835, 1844, 1847, - 1848, 1841, 1840, 1850, 1845, 1843, 1849, 1837, 1848, 1851, - 1851, 1849, 1846, 1852, 1854, 1854, 1855, 1855, 1847, 1857, - 1857, 1858, 1860, 1860, 1861, 1862, 1858, 1863, 1866, 1850, - 1865, 1865, 1852, 1867, 1868, 1868, 1869, 1869, 1870, 1871, - 1872, 1878, 1866, 1935, 1861, 1880, 1863, 1935, 1862, 1873, - 1873, 1871, 1877, 1874, 1883, 1867, 1874, 1870, 1875, 1875, - 1872, 1878, 1879, 1880, 1877, 1879, 1882, 1885, 1884, 1886, - 1886, 1882, 1889, 1883, 1884, 1888, 1888, 1891, 1891, 1893, - 1979, 1892, 1894, 1979, 1885, 1885, 1892, 1894, 1895, 1895, + 1829, 1830, 1831, 1831, 1832, 1832, 1822, 1822, 1829, 1826, + 1834, 1824, 1835, 1821, 1825, 1833, 1833, 1835, 1828, 1836, + 1830, 1837, 1838, 1839, 1840, 0, 1834, 1842, 1842, 1843, + 1844, 1838, 1843, 1846, 1846, 1847, 1848, 1850, 1854, 1836, + 1847, 1851, 1851, 1839, 1840, 1848, 1852, 1837, 1844, 1853, + 1852, 1855, 1856, 1854, 1857, 1850, 1855, 1855, 1853, 1859, + 1859, 1860, 1861, 1857, 1863, 1856, 1867, 1868, 1868, 1869, + 1860, 1867, 1871, 1875, 1861, 1872, 1872, 1871, 1869, 1872, + 1874, 1874, 1875, 1876, 1881, 1877, 1878, 1885, 1879, 1863, + 1877, 1882, 1878, 1879, 1880, 1880, 1882, 1883, 1884, 1886, - 1908, 1889, 1907, 1893, 1896, 1896, 1897, 1897, 1898, 1900, - 1900, 1904, 1904, 1898, 1906, 1906, 1907, 1909, 1910, 1910, - 1908, 1914, 1911, 1915, 1915, 1916, 1909, 1911, 1918, 1914, - 1916, 1919, 1920, 1921, 1922, 1923, 1924, 1920, 1928, 1927, - 1925, 1926, 1922, 1928, 1931, 1921, 1933, 1933, 1918, 1934, - 1934, 1919, 1939, 1939, 1924, 1923, 1925, 1941, 1926, 1926, - 1927, 1941, 1943, 1943, 1931, 1944, 1945, 1947, 1947, 1948, - 1950, 1957, 1951, 1952, 1952, 1953, 1953, 1954, 1954, 1958, - 1945, 1951, 1955, 1944, 1948, 1956, 1956, 1955, 1950, 1959, - 1960, 0, 1961, 1962, 1958, 1960, 1957, 1961, 1963, 1963, + 1886, 1888, 1889, 1876, 1884, 1881, 1890, 1890, 1891, 1892, + 1893, 1894, 1885, 1892, 1895, 1883, 1896, 1889, 1897, 1893, + 1888, 1891, 1898, 1897, 1896, 1899, 1899, 1894, 1900, 1902, + 1902, 1903, 1903, 1895, 1905, 1905, 1906, 1907, 1909, 1909, + 1910, 1911, 1907, 1912, 1914, 1914, 1917, 1900, 1898, 1915, + 1918, 1918, 1906, 1919, 1919, 1920, 1922, 1921, 1923, 1923, + 1910, 1927, 1912, 1915, 1911, 1925, 1925, 1924, 1917, 1921, + 1924, 1928, 1930, 1927, 1920, 1930, 1922, 1929, 1929, 1931, + 1933, 1934, 1935, 0, 1936, 1933, 1937, 1937, 1935, 1939, + 1939, 1928, 1940, 1942, 1942, 1944, 1955, 1931, 1943, 1945, - 1966, 1966, 1968, 1968, 1970, 1971, 1971, 1973, 1974, 1974, - 1959, 1975, 1962, 1970, 1976, 1976, 1981, 1982, 1983, 1973, - 1984, 1986, 1981, 1983, 1985, 1990, 1975, 1993, 1990, 1992, - 1994, 1982, 1996, 1992, 1998, 1997, 1999, 1986, 2001, 1984, - 2000, 2003, 1985, 1996, 1994, 2002, 2005, 1993, 1997, 2004, - 2004, 2006, 2006, 1998, 1999, 2005, 2000, 2007, 2007, 2008, - 2002, 2003, 2009, 2001, 2008, 2010, 2011, 2009, 2012, 2013, - 2014, 2014, 2016, 2019, 2012, 2022, 2020, 2024, 2021, 2027, - 2023, 2011, 2020, 2013, 2021, 2026, 2030, 2016, 2028, 2022, - 2010, 2029, 2019, 2023, 2033, 2031, 2024, 2032, 2027, 2026, + 1934, 1936, 1936, 1943, 1945, 1946, 1946, 1947, 1947, 1944, + 1949, 1940, 1948, 1948, 1959, 1949, 1951, 1951, 1955, 1956, + 1956, 1958, 1958, 1960, 1961, 1962, 1962, 1963, 1959, 1966, + 1967, 1967, 1963, 1961, 1968, 1970, 1971, 1966, 1973, 1968, + 1972, 1975, 1976, 1960, 1978, 1972, 1977, 1980, 1979, 1975, + 1973, 1984, 1981, 1986, 1986, 1970, 1971, 1981, 1987, 1987, + 1978, 1998, 1976, 1988, 1977, 1979, 1979, 1988, 1980, 1992, + 1992, 1984, 1994, 1994, 1995, 1994, 1997, 1997, 1995, 1998, + 1999, 2001, 2001, 2002, 2004, 2011, 2005, 2006, 2006, 2007, + 2007, 2008, 2008, 2012, 1999, 2005, 2009, 2013, 2002, 2010, - 2031, 2028, 2032, 2035, 2029, 2030, 2034, 2034, 2035, 2036, - 2037, 2038, 2039, 2033, 2036, 2037, 2040, 2040, 2039, 2041, - 2042, 2043, 2044, 2045, 2046, 2049, 2041, 2048, 2044, 2050, - 2038, 2053, 2048, 2051, 2052, 2052, 2053, 2046, 2054, 2042, - 2043, 2059, 2045, 2063, 2049, 0, 2051, 2058, 2050, 2055, - 2055, 2056, 2056, 2057, 2058, 2060, 2060, 2054, 2057, 2061, - 2059, 2062, 2063, 2065, 2064, 2067, 2061, 2068, 2062, 2064, - 2067, 2069, 2068, 2070, 2071, 2071, 2072, 2073, 2074, 2074, - 2075, 2075, 2065, 0, 2076, 2077, 2077, 2078, 2078, 2081, - 2069, 2076, 2070, 2079, 2081, 2072, 2073, 2084, 2085, 2086, + 2010, 2009, 2004, 2016, 2014, 0, 2015, 0, 2012, 2014, + 2011, 2015, 2017, 2017, 2020, 2020, 2022, 2022, 2013, 2023, + 2023, 2026, 2016, 2024, 2024, 2027, 2027, 2029, 2030, 2030, + 2026, 2031, 2032, 2032, 2035, 2037, 2038, 2035, 2039, 2029, + 2040, 2037, 2041, 2039, 2048, 2042, 2031, 2048, 2050, 2051, + 2038, 2052, 2050, 2054, 2055, 2056, 2058, 2057, 2059, 2040, + 2041, 2042, 2060, 2066, 2054, 2052, 2061, 2055, 2066, 2051, + 2062, 2062, 2058, 2063, 2056, 2057, 2068, 2060, 2064, 2064, + 2065, 2065, 2063, 2059, 2067, 2069, 2061, 2070, 2071, 2067, + 2072, 2072, 2074, 2070, 2077, 2080, 2082, 2078, 2079, 2081, - 2079, 0, 2084, 2087, 2087, 2088, 2088, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2085, 2086, 2092, - 2092, 2092, 2092, 2092, 2092, 2092, 2093, 2093, 2093, 2093, - 2093, 2093, 2093, 2094, 2094, 2094, 2094, 2094, 2094, 2094, - 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2096, 2096, 2096, - 2096, 2096, 2096, 2096, 2098, 2098, 0, 2098, 2098, 2098, - 2098, 2099, 2099, 0, 0, 0, 2099, 2099, 2100, 2100, - 0, 0, 2100, 0, 2100, 2101, 0, 0, 0, 0, - 0, 2101, 2102, 2102, 0, 0, 0, 2102, 2102, 2103, - 0, 0, 0, 0, 0, 2103, 2104, 2104, 0, 2104, + 2069, 2068, 2071, 2078, 2079, 2084, 2085, 2074, 2086, 2080, + 2087, 2088, 2081, 2077, 2091, 2082, 2096, 2089, 0, 2084, + 0, 2086, 2089, 2087, 2090, 2085, 2092, 2092, 2100, 2090, + 2088, 2093, 2094, 2091, 2095, 2096, 2093, 2094, 2097, 2095, + 2098, 2098, 2099, 2101, 2097, 2102, 2103, 2100, 2104, 2099, + 2106, 2102, 2107, 2108, 2109, 2106, 2110, 2110, 2111, 2112, + 2117, 2104, 2101, 2111, 0, 2103, 2121, 2109, 2113, 2113, + 2115, 2107, 2108, 2114, 2114, 2115, 2116, 2119, 2112, 2117, + 2118, 2118, 2120, 2116, 2119, 2121, 2122, 2123, 2125, 2120, + 2126, 2122, 2127, 2125, 2128, 2126, 2129, 2129, 2130, 2131, - 2104, 2104, 2104, 2105, 2105, 0, 2105, 2105, 2105, 2105, - 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, - 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, - 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, - 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, - 2091 + 2132, 2132, 2133, 2133, 2143, 2134, 2123, 2135, 2135, 2136, + 2136, 2127, 2134, 2128, 2137, 2139, 2144, 2130, 2131, 2142, + 2139, 2137, 0, 2143, 2142, 2145, 2145, 2146, 2146, 0, + 0, 0, 0, 0, 0, 2144, 2150, 2150, 2150, 2150, + 2150, 2150, 2150, 2151, 2151, 2151, 2151, 2151, 2151, 2151, + 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2153, 2153, 2153, + 2153, 2153, 2153, 2153, 2154, 2154, 2154, 2154, 2154, 2154, + 2154, 2156, 2156, 0, 2156, 2156, 2156, 2156, 2157, 2157, + 0, 0, 0, 2157, 2157, 2158, 2158, 0, 0, 2158, + 0, 2158, 2159, 0, 0, 0, 0, 0, 2159, 2160, + + 2160, 0, 0, 0, 2160, 2160, 2161, 0, 0, 0, + 0, 0, 2161, 2162, 2162, 0, 2162, 2162, 2162, 2162, + 2163, 2163, 0, 2163, 2163, 2163, 2163, 2149, 2149, 2149, + 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, + 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, + 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, + 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149 } ; static yy_state_type yy_last_accepting_state; @@ -2264,7 +2290,7 @@ static void config_end_include(void) #define YY_NO_INPUT 1 #endif -#line 2266 "" +#line 2292 "" #define INITIAL 0 #define quotedstring 1 @@ -2308,7 +2334,7 @@ FILE *yyget_out (void ); void yyset_out (FILE * _out_str ); -yy_size_t yyget_leng (void ); + int yyget_leng (void ); char *yyget_text (void ); @@ -2365,7 +2391,7 @@ static int input (void ); /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ -#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, @@ -2389,7 +2415,7 @@ static int input (void ); else \ { \ errno=0; \ - while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + while ( (result = (int) fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ @@ -2487,7 +2513,7 @@ YY_DECL { #line 207 "./util/configlexer.lex" -#line 2489 "" +#line 2515 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -2520,13 +2546,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 >= 2092 ) + if ( yy_current_state >= 2150 ) yy_c = yy_meta[(unsigned int) yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 4111 ); + while ( yy_base[yy_current_state] != 4228 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -3016,560 +3042,580 @@ YY_RULE_SETUP case 93: YY_RULE_SETUP #line 303 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 94: YY_RULE_SETUP #line 304 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 95: YY_RULE_SETUP #line 305 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 96: YY_RULE_SETUP #line 306 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 97: YY_RULE_SETUP #line 307 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 98: YY_RULE_SETUP #line 308 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 99: YY_RULE_SETUP #line 309 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 100: YY_RULE_SETUP #line 310 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 101: YY_RULE_SETUP #line 311 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 102: YY_RULE_SETUP #line 312 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 103: YY_RULE_SETUP #line 313 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 104: YY_RULE_SETUP #line 314 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 105: YY_RULE_SETUP #line 315 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 106: YY_RULE_SETUP #line 316 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 107: YY_RULE_SETUP #line 317 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 108: YY_RULE_SETUP #line 318 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 109: YY_RULE_SETUP #line 319 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 110: YY_RULE_SETUP #line 320 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 111: YY_RULE_SETUP #line 321 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 112: YY_RULE_SETUP #line 322 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 113: YY_RULE_SETUP #line 323 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 114: YY_RULE_SETUP #line 324 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 115: YY_RULE_SETUP #line 325 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 116: YY_RULE_SETUP #line 326 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 117: YY_RULE_SETUP #line 327 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 118: YY_RULE_SETUP #line 328 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 119: YY_RULE_SETUP #line 329 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 120: YY_RULE_SETUP -#line 331 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +#line 330 "./util/configlexer.lex" +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 121: YY_RULE_SETUP -#line 332 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +#line 331 "./util/configlexer.lex" +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 122: YY_RULE_SETUP -#line 333 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +#line 332 "./util/configlexer.lex" +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 123: YY_RULE_SETUP -#line 334 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +#line 333 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 124: YY_RULE_SETUP #line 335 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 125: YY_RULE_SETUP #line 336 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 126: YY_RULE_SETUP #line 337 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 127: YY_RULE_SETUP #line 338 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 128: YY_RULE_SETUP #line 339 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 129: YY_RULE_SETUP #line 340 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 130: YY_RULE_SETUP #line 341 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 131: YY_RULE_SETUP #line 342 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 132: YY_RULE_SETUP #line 343 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 133: YY_RULE_SETUP #line 344 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 134: YY_RULE_SETUP #line 345 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 135: YY_RULE_SETUP #line 346 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 136: YY_RULE_SETUP #line 347 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 137: YY_RULE_SETUP #line 348 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 138: YY_RULE_SETUP #line 349 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 139: YY_RULE_SETUP #line 350 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 140: YY_RULE_SETUP #line 351 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 141: YY_RULE_SETUP #line 352 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 142: YY_RULE_SETUP #line 353 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 143: YY_RULE_SETUP #line 354 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 144: YY_RULE_SETUP #line 355 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 145: YY_RULE_SETUP #line 356 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 146: YY_RULE_SETUP #line 357 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 147: YY_RULE_SETUP #line 358 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 148: YY_RULE_SETUP #line 359 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 149: YY_RULE_SETUP #line 360 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 150: YY_RULE_SETUP #line 361 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 151: YY_RULE_SETUP #line 362 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 152: YY_RULE_SETUP #line 363 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 153: YY_RULE_SETUP #line 364 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 154: YY_RULE_SETUP #line 365 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 155: YY_RULE_SETUP #line 366 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 156: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 157: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 158: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 159: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 160: YY_RULE_SETUP #line 371 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 161: YY_RULE_SETUP #line 372 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 162: YY_RULE_SETUP #line 373 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 163: YY_RULE_SETUP #line 374 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 164: YY_RULE_SETUP #line 375 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 165: YY_RULE_SETUP #line 376 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 166: YY_RULE_SETUP #line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 167: YY_RULE_SETUP #line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 168: YY_RULE_SETUP #line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 169: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 170: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 171: YY_RULE_SETUP -#line 383 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } +#line 382 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 172: YY_RULE_SETUP -#line 385 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } +#line 383 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 173: YY_RULE_SETUP -#line 387 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } +#line 384 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 174: YY_RULE_SETUP -#line 389 "./util/configlexer.lex" +#line 385 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 175: YY_RULE_SETUP -#line 391 "./util/configlexer.lex" +#line 387 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 176: YY_RULE_SETUP -#line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 389 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 177: YY_RULE_SETUP -#line 394 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 391 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 178: YY_RULE_SETUP -#line 395 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +#line 393 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 179: YY_RULE_SETUP -#line 396 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +#line 395 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 180: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 181: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 182: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 183: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 184: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 185: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 186: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 187: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 188: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 189: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 190: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 191: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 192: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 193: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 194: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 195: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 196: -/* rule 196 can match eol */ YY_RULE_SETUP #line 413 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PORT) } + YY_BREAK +case 197: +YY_RULE_SETUP +#line 414 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } + YY_BREAK +case 198: +YY_RULE_SETUP +#line 415 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } + YY_BREAK +case 199: +YY_RULE_SETUP +#line 416 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } + YY_BREAK +case 200: +/* rule 200 can match eol */ +YY_RULE_SETUP +#line 417 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 197: +case 201: YY_RULE_SETUP -#line 416 "./util/configlexer.lex" +#line 420 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 417 "./util/configlexer.lex" +#line 421 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 198: +case 202: YY_RULE_SETUP -#line 422 "./util/configlexer.lex" +#line 426 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 199: -/* rule 199 can match eol */ +case 203: +/* rule 203 can match eol */ YY_RULE_SETUP -#line 423 "./util/configlexer.lex" +#line 427 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 200: +case 204: YY_RULE_SETUP -#line 425 "./util/configlexer.lex" +#line 429 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -3582,34 +3628,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 201: +case 205: YY_RULE_SETUP -#line 437 "./util/configlexer.lex" +#line 441 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 438 "./util/configlexer.lex" +#line 442 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 202: +case 206: YY_RULE_SETUP -#line 443 "./util/configlexer.lex" +#line 447 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 203: -/* rule 203 can match eol */ +case 207: +/* rule 207 can match eol */ YY_RULE_SETUP -#line 444 "./util/configlexer.lex" +#line 448 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 204: +case 208: YY_RULE_SETUP -#line 446 "./util/configlexer.lex" +#line 450 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -3622,38 +3668,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 205: +case 209: YY_RULE_SETUP -#line 458 "./util/configlexer.lex" +#line 462 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 460 "./util/configlexer.lex" +#line 464 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 206: +case 210: YY_RULE_SETUP -#line 464 "./util/configlexer.lex" +#line 468 "./util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK -case 207: -/* rule 207 can match eol */ +case 211: +/* rule 211 can match eol */ YY_RULE_SETUP -#line 465 "./util/configlexer.lex" +#line 469 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK -case 208: +case 212: YY_RULE_SETUP -#line 466 "./util/configlexer.lex" +#line 470 "./util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK -case 209: +case 213: YY_RULE_SETUP -#line 467 "./util/configlexer.lex" +#line 471 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -3661,27 +3707,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 472 "./util/configlexer.lex" +#line 476 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 210: +case 214: YY_RULE_SETUP -#line 476 "./util/configlexer.lex" +#line 480 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 211: -/* rule 211 can match eol */ +case 215: +/* rule 215 can match eol */ YY_RULE_SETUP -#line 477 "./util/configlexer.lex" +#line 481 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 212: +case 216: YY_RULE_SETUP -#line 479 "./util/configlexer.lex" +#line 483 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -3691,7 +3737,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 485 "./util/configlexer.lex" +#line 489 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -3703,33 +3749,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 213: +case 217: YY_RULE_SETUP -#line 496 "./util/configlexer.lex" +#line 500 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 214: +case 218: YY_RULE_SETUP -#line 500 "./util/configlexer.lex" +#line 504 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 215: +case 219: YY_RULE_SETUP -#line 504 "./util/configlexer.lex" +#line 508 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 216: +case 220: YY_RULE_SETUP -#line 508 "./util/configlexer.lex" +#line 512 "./util/configlexer.lex" ECHO; YY_BREAK -#line 3731 "" +#line 3777 "" case YY_END_OF_BUFFER: { @@ -3928,7 +3974,7 @@ static int yy_get_next_buffer (void) if ( b->yy_is_our_buffer ) { - yy_size_t new_size = b->yy_buf_size * 2; + int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -3941,7 +3987,7 @@ static int yy_get_next_buffer (void) } else /* Can't grow it, we don't own it. */ - b->yy_ch_buf = 0; + b->yy_ch_buf = NULL; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( @@ -3983,9 +4029,9 @@ static int yy_get_next_buffer (void) else ret_val = EOB_ACT_CONTINUE_SCAN; - if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ - yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + 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,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); @@ -4020,10 +4066,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 >= 2092 ) + if ( yy_current_state >= 2150 ) yy_c = yy_meta[(unsigned int) yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; } return yy_current_state; @@ -4048,11 +4094,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 >= 2092 ) + if ( yy_current_state >= 2150 ) yy_c = yy_meta[(unsigned int) yy_c]; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 2091); + yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; + yy_is_jam = (yy_current_state == 2149); return yy_is_jam ? 0 : yy_current_state; } @@ -4085,7 +4131,7 @@ static int yy_get_next_buffer (void) else { /* need more input */ - yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); + int offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) @@ -4109,7 +4155,7 @@ static int yy_get_next_buffer (void) case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) - return EOF; + return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; @@ -4357,7 +4403,7 @@ void yypop_buffer_state (void) */ static void yyensure_buffer_stack (void) { - yy_size_t num_to_alloc; + int num_to_alloc; if (!(yy_buffer_stack)) { @@ -4371,9 +4417,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; @@ -4402,7 +4448,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 ) { @@ -4412,7 +4458,7 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ - return 0; + return NULL; b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) @@ -4421,7 +4467,7 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; - b->yy_input_file = 0; + b->yy_input_file = NULL; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; @@ -4444,7 +4490,7 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) { - return yy_scan_bytes(yystr,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 @@ -4454,7 +4500,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, yy_size_t _yybytes_len ) +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; @@ -4462,7 +4508,7 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len yy_size_t i; /* Get memory for full buffer, including space for trailing EOB's. */ - n = _yybytes_len + 2; + n = (yy_size_t) _yybytes_len + 2; buf = (char *) yyalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); @@ -4488,7 +4534,7 @@ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len #define YY_EXIT_FAILURE 2 #endif -static void yy_fatal_error (yyconst char* msg ) +static void yynoreturn yy_fatal_error (yyconst char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); @@ -4501,7 +4547,7 @@ static void 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; \ @@ -4518,7 +4564,7 @@ static void yy_fatal_error (yyconst char* msg ) */ int yyget_lineno (void) { - + return yylineno; } @@ -4541,7 +4587,7 @@ FILE *yyget_out (void) /** Get the length of the current token. * */ -yy_size_t yyget_leng (void) +int yyget_leng (void) { return yyleng; } @@ -4597,10 +4643,10 @@ static int yy_init_globals (void) * This function is called from yylex_destroy(), so don't allocate here. */ - (yy_buffer_stack) = 0; + (yy_buffer_stack) = NULL; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; - (yy_c_buf_p) = (char *) 0; + (yy_c_buf_p) = NULL; (yy_init) = 0; (yy_start) = 0; @@ -4609,8 +4655,8 @@ static int yy_init_globals (void) yyin = stdin; yyout = stdout; #else - yyin = (FILE *) 0; - yyout = (FILE *) 0; + yyin = NULL; + yyout = NULL; #endif /* For future reference: Set errno on error, since we are called by @@ -4668,7 +4714,7 @@ static int yy_flex_strlen (yyconst char * s ) void *yyalloc (yy_size_t size ) { - return (void *) malloc( size ); + return malloc(size); } void *yyrealloc (void * ptr, yy_size_t size ) @@ -4681,7 +4727,7 @@ void *yyrealloc (void * ptr, yy_size_t size ) * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ - return (void *) realloc( (char *) ptr, size ); + return realloc(ptr, size); } void yyfree (void * ptr ) @@ -4691,7 +4737,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 508 "./util/configlexer.lex" +#line 512 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index 1c59d535a..940032049 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -300,6 +300,10 @@ view-first{COLON} { YDVAR(1, VAR_VIEW_FIRST) } do-not-query-address{COLON} { YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } do-not-query-localhost{COLON} { YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } access-control{COLON} { YDVAR(2, VAR_ACCESS_CONTROL) } +send-client-subnet{COLON} { YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +client-subnet-opcode{COLON} { YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +max-client-subnet-ipv4{COLON} { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +max-client-subnet-ipv6{COLON} { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } hide-identity{COLON} { YDVAR(1, VAR_HIDE_IDENTITY) } hide-version{COLON} { YDVAR(1, VAR_HIDE_VERSION) } hide-trustanchor{COLON} { YDVAR(1, VAR_HIDE_TRUSTANCHOR) } diff --git a/util/configparser.c b/util/configparser.c index c105f9a20..5db697200 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -297,35 +297,39 @@ extern int yydebug; VAR_RATELIMIT_BELOW_DOMAIN = 426, VAR_IP_RATELIMIT_FACTOR = 427, VAR_RATELIMIT_FACTOR = 428, - VAR_CAPS_WHITELIST = 429, - VAR_CACHE_MAX_NEGATIVE_TTL = 430, - VAR_PERMIT_SMALL_HOLDDOWN = 431, - VAR_QNAME_MINIMISATION = 432, - VAR_QNAME_MINIMISATION_STRICT = 433, - VAR_IP_FREEBIND = 434, - VAR_DEFINE_TAG = 435, - VAR_LOCAL_ZONE_TAG = 436, - VAR_ACCESS_CONTROL_TAG = 437, - VAR_LOCAL_ZONE_OVERRIDE = 438, - VAR_ACCESS_CONTROL_TAG_ACTION = 439, - VAR_ACCESS_CONTROL_TAG_DATA = 440, - VAR_VIEW = 441, - VAR_ACCESS_CONTROL_VIEW = 442, - VAR_VIEW_FIRST = 443, - VAR_SERVE_EXPIRED = 444, - VAR_FAKE_DSA = 445, - VAR_FAKE_SHA1 = 446, - VAR_LOG_IDENTITY = 447, - VAR_HIDE_TRUSTANCHOR = 448, - VAR_USE_SYSTEMD = 449, - VAR_SHM_ENABLE = 450, - VAR_SHM_KEY = 451, - VAR_DNSCRYPT = 452, - VAR_DNSCRYPT_ENABLE = 453, - VAR_DNSCRYPT_PORT = 454, - VAR_DNSCRYPT_PROVIDER = 455, - VAR_DNSCRYPT_SECRET_KEY = 456, - VAR_DNSCRYPT_PROVIDER_CERT = 457 + VAR_SEND_CLIENT_SUBNET = 429, + VAR_CLIENT_SUBNET_OPCODE = 430, + VAR_MAX_CLIENT_SUBNET_IPV4 = 431, + VAR_MAX_CLIENT_SUBNET_IPV6 = 432, + VAR_CAPS_WHITELIST = 433, + VAR_CACHE_MAX_NEGATIVE_TTL = 434, + VAR_PERMIT_SMALL_HOLDDOWN = 435, + VAR_QNAME_MINIMISATION = 436, + VAR_QNAME_MINIMISATION_STRICT = 437, + VAR_IP_FREEBIND = 438, + VAR_DEFINE_TAG = 439, + VAR_LOCAL_ZONE_TAG = 440, + VAR_ACCESS_CONTROL_TAG = 441, + VAR_LOCAL_ZONE_OVERRIDE = 442, + VAR_ACCESS_CONTROL_TAG_ACTION = 443, + VAR_ACCESS_CONTROL_TAG_DATA = 444, + VAR_VIEW = 445, + VAR_ACCESS_CONTROL_VIEW = 446, + VAR_VIEW_FIRST = 447, + VAR_SERVE_EXPIRED = 448, + VAR_FAKE_DSA = 449, + VAR_FAKE_SHA1 = 450, + VAR_LOG_IDENTITY = 451, + VAR_HIDE_TRUSTANCHOR = 452, + VAR_USE_SYSTEMD = 453, + VAR_SHM_ENABLE = 454, + VAR_SHM_KEY = 455, + VAR_DNSCRYPT = 456, + VAR_DNSCRYPT_ENABLE = 457, + VAR_DNSCRYPT_PORT = 458, + VAR_DNSCRYPT_PROVIDER = 459, + VAR_DNSCRYPT_SECRET_KEY = 460, + VAR_DNSCRYPT_PROVIDER_CERT = 461 }; #endif /* Tokens. */ @@ -500,35 +504,39 @@ extern int yydebug; #define VAR_RATELIMIT_BELOW_DOMAIN 426 #define VAR_IP_RATELIMIT_FACTOR 427 #define VAR_RATELIMIT_FACTOR 428 -#define VAR_CAPS_WHITELIST 429 -#define VAR_CACHE_MAX_NEGATIVE_TTL 430 -#define VAR_PERMIT_SMALL_HOLDDOWN 431 -#define VAR_QNAME_MINIMISATION 432 -#define VAR_QNAME_MINIMISATION_STRICT 433 -#define VAR_IP_FREEBIND 434 -#define VAR_DEFINE_TAG 435 -#define VAR_LOCAL_ZONE_TAG 436 -#define VAR_ACCESS_CONTROL_TAG 437 -#define VAR_LOCAL_ZONE_OVERRIDE 438 -#define VAR_ACCESS_CONTROL_TAG_ACTION 439 -#define VAR_ACCESS_CONTROL_TAG_DATA 440 -#define VAR_VIEW 441 -#define VAR_ACCESS_CONTROL_VIEW 442 -#define VAR_VIEW_FIRST 443 -#define VAR_SERVE_EXPIRED 444 -#define VAR_FAKE_DSA 445 -#define VAR_FAKE_SHA1 446 -#define VAR_LOG_IDENTITY 447 -#define VAR_HIDE_TRUSTANCHOR 448 -#define VAR_USE_SYSTEMD 449 -#define VAR_SHM_ENABLE 450 -#define VAR_SHM_KEY 451 -#define VAR_DNSCRYPT 452 -#define VAR_DNSCRYPT_ENABLE 453 -#define VAR_DNSCRYPT_PORT 454 -#define VAR_DNSCRYPT_PROVIDER 455 -#define VAR_DNSCRYPT_SECRET_KEY 456 -#define VAR_DNSCRYPT_PROVIDER_CERT 457 +#define VAR_SEND_CLIENT_SUBNET 429 +#define VAR_CLIENT_SUBNET_OPCODE 430 +#define VAR_MAX_CLIENT_SUBNET_IPV4 431 +#define VAR_MAX_CLIENT_SUBNET_IPV6 432 +#define VAR_CAPS_WHITELIST 433 +#define VAR_CACHE_MAX_NEGATIVE_TTL 434 +#define VAR_PERMIT_SMALL_HOLDDOWN 435 +#define VAR_QNAME_MINIMISATION 436 +#define VAR_QNAME_MINIMISATION_STRICT 437 +#define VAR_IP_FREEBIND 438 +#define VAR_DEFINE_TAG 439 +#define VAR_LOCAL_ZONE_TAG 440 +#define VAR_ACCESS_CONTROL_TAG 441 +#define VAR_LOCAL_ZONE_OVERRIDE 442 +#define VAR_ACCESS_CONTROL_TAG_ACTION 443 +#define VAR_ACCESS_CONTROL_TAG_DATA 444 +#define VAR_VIEW 445 +#define VAR_ACCESS_CONTROL_VIEW 446 +#define VAR_VIEW_FIRST 447 +#define VAR_SERVE_EXPIRED 448 +#define VAR_FAKE_DSA 449 +#define VAR_FAKE_SHA1 450 +#define VAR_LOG_IDENTITY 451 +#define VAR_HIDE_TRUSTANCHOR 452 +#define VAR_USE_SYSTEMD 453 +#define VAR_SHM_ENABLE 454 +#define VAR_SHM_KEY 455 +#define VAR_DNSCRYPT 456 +#define VAR_DNSCRYPT_ENABLE 457 +#define VAR_DNSCRYPT_PORT 458 +#define VAR_DNSCRYPT_PROVIDER 459 +#define VAR_DNSCRYPT_SECRET_KEY 460 +#define VAR_DNSCRYPT_PROVIDER_CERT 461 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -539,7 +547,7 @@ union YYSTYPE char* str; -#line 543 "util/configparser.c" /* yacc.c:355 */ +#line 551 "util/configparser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -556,7 +564,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 560 "util/configparser.c" /* yacc.c:358 */ +#line 568 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -798,21 +806,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 411 +#define YYLAST 418 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 203 +#define YYNTOKENS 207 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 218 +#define YYNNTS 222 /* YYNRULES -- Number of rules. */ -#define YYNRULES 417 +#define YYNRULES 425 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 628 +#define YYNSTATES 640 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 457 +#define YYMAXUTOK 461 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -866,55 +874,57 @@ static const yytype_uint8 yytranslate[] = 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, 202 + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 146, 146, 146, 147, 147, 148, 148, 149, 149, - 149, 151, 155, 160, 161, 162, 162, 162, 163, 163, - 164, 164, 165, 165, 166, 166, 167, 167, 167, 168, - 168, 168, 169, 169, 170, 170, 171, 171, 172, 172, - 173, 173, 174, 174, 175, 175, 176, 176, 177, 177, - 177, 178, 178, 178, 179, 179, 179, 180, 180, 181, - 181, 182, 182, 183, 183, 184, 184, 184, 185, 185, - 186, 186, 187, 187, 187, 188, 188, 189, 189, 190, - 190, 191, 191, 191, 192, 192, 193, 193, 194, 194, - 195, 195, 196, 196, 197, 197, 197, 198, 198, 199, - 199, 199, 200, 200, 200, 201, 201, 201, 202, 202, - 202, 202, 203, 203, 203, 204, 204, 204, 205, 205, - 206, 206, 207, 207, 208, 208, 209, 209, 209, 210, - 210, 211, 211, 212, 213, 213, 214, 215, 215, 216, - 216, 217, 217, 217, 218, 218, 219, 219, 220, 220, - 221, 221, 222, 222, 222, 223, 223, 223, 224, 224, - 224, 225, 227, 239, 240, 241, 241, 241, 241, 241, - 242, 244, 256, 257, 258, 258, 258, 258, 259, 261, - 275, 276, 277, 277, 277, 277, 278, 278, 278, 280, - 289, 298, 309, 318, 327, 336, 347, 356, 369, 384, - 393, 402, 411, 420, 429, 438, 447, 456, 465, 474, - 483, 492, 501, 510, 519, 526, 533, 542, 551, 560, - 574, 583, 592, 601, 608, 615, 641, 649, 656, 663, - 670, 677, 685, 693, 701, 708, 715, 724, 733, 742, - 749, 756, 764, 772, 782, 792, 802, 815, 826, 834, - 847, 856, 865, 874, 884, 894, 902, 915, 924, 932, - 941, 949, 962, 971, 978, 988, 998, 1008, 1018, 1028, - 1038, 1048, 1058, 1065, 1072, 1079, 1088, 1097, 1106, 1113, - 1123, 1140, 1147, 1165, 1178, 1191, 1200, 1209, 1218, 1227, - 1237, 1247, 1256, 1265, 1278, 1291, 1300, 1307, 1316, 1325, - 1334, 1343, 1351, 1364, 1372, 1400, 1407, 1422, 1432, 1442, - 1449, 1456, 1465, 1479, 1498, 1517, 1529, 1541, 1553, 1564, - 1583, 1593, 1602, 1610, 1618, 1631, 1644, 1657, 1670, 1679, - 1688, 1698, 1708, 1718, 1725, 1732, 1741, 1751, 1761, 1771, - 1778, 1785, 1794, 1804, 1814, 1843, 1853, 1861, 1870, 1885, - 1894, 1899, 1900, 1901, 1901, 1901, 1902, 1902, 1902, 1903, - 1903, 1905, 1915, 1924, 1931, 1941, 1948, 1955, 1962, 1969, - 1974, 1975, 1976, 1976, 1977, 1977, 1978, 1978, 1979, 1980, - 1981, 1982, 1983, 1984, 1986, 1994, 2001, 2009, 2017, 2024, - 2031, 2040, 2049, 2058, 2067, 2076, 2085, 2090, 2091, 2092, - 2094, 2100, 2110, 2117, 2126, 2134, 2140, 2141, 2143, 2143, - 2143, 2144, 2144, 2146, 2155, 2165, 2172, 2179 + 0, 148, 148, 148, 149, 149, 150, 150, 151, 151, + 151, 153, 157, 162, 163, 164, 164, 164, 165, 165, + 166, 166, 167, 167, 168, 168, 169, 169, 169, 170, + 170, 170, 171, 171, 172, 172, 173, 173, 174, 174, + 175, 175, 176, 176, 177, 177, 178, 178, 179, 179, + 179, 180, 180, 180, 181, 181, 181, 182, 182, 183, + 183, 184, 184, 185, 185, 186, 186, 186, 187, 187, + 188, 188, 189, 189, 189, 190, 190, 191, 191, 192, + 192, 193, 193, 193, 194, 194, 195, 195, 196, 196, + 197, 197, 198, 198, 199, 199, 199, 200, 200, 201, + 201, 201, 202, 202, 202, 203, 203, 203, 204, 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, 215, 215, 216, 217, 217, 218, + 218, 219, 219, 220, 220, 221, 221, 221, 222, 222, + 223, 223, 224, 224, 225, 225, 226, 226, 226, 227, + 227, 227, 228, 228, 228, 229, 231, 243, 244, 245, + 245, 245, 245, 245, 246, 248, 260, 261, 262, 262, + 262, 262, 263, 265, 279, 280, 281, 281, 281, 281, + 282, 282, 282, 284, 293, 302, 313, 322, 331, 340, + 351, 360, 371, 386, 403, 420, 433, 448, 457, 466, + 475, 484, 493, 502, 511, 520, 529, 538, 547, 556, + 565, 574, 583, 590, 597, 606, 615, 624, 638, 647, + 656, 665, 672, 679, 705, 713, 720, 727, 734, 741, + 749, 757, 765, 772, 779, 788, 797, 806, 813, 820, + 828, 836, 846, 856, 866, 879, 890, 898, 911, 920, + 929, 938, 948, 958, 966, 979, 988, 996, 1005, 1013, + 1026, 1035, 1042, 1052, 1062, 1072, 1082, 1092, 1102, 1112, + 1122, 1129, 1136, 1143, 1152, 1161, 1170, 1177, 1187, 1204, + 1211, 1229, 1242, 1255, 1264, 1273, 1282, 1291, 1301, 1311, + 1320, 1329, 1342, 1355, 1364, 1371, 1380, 1389, 1398, 1407, + 1415, 1428, 1436, 1464, 1471, 1486, 1496, 1506, 1513, 1520, + 1529, 1543, 1562, 1581, 1593, 1605, 1617, 1628, 1647, 1657, + 1666, 1674, 1682, 1695, 1708, 1721, 1734, 1743, 1752, 1762, + 1772, 1782, 1789, 1796, 1805, 1815, 1825, 1835, 1842, 1849, + 1858, 1868, 1878, 1907, 1917, 1925, 1934, 1949, 1958, 1963, + 1964, 1965, 1965, 1965, 1966, 1966, 1966, 1967, 1967, 1969, + 1979, 1988, 1995, 2005, 2012, 2019, 2026, 2033, 2038, 2039, + 2040, 2040, 2041, 2041, 2042, 2042, 2043, 2044, 2045, 2046, + 2047, 2048, 2050, 2058, 2065, 2073, 2081, 2088, 2095, 2104, + 2113, 2122, 2131, 2140, 2149, 2154, 2155, 2156, 2158, 2164, + 2174, 2181, 2190, 2198, 2204, 2205, 2207, 2207, 2207, 2208, + 2208, 2210, 2219, 2229, 2236, 2243 }; #endif @@ -982,16 +992,18 @@ static const char *const yytname[] = "VAR_IP_RATELIMIT", "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE", "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE", "VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN", - "VAR_IP_RATELIMIT_FACTOR", "VAR_RATELIMIT_FACTOR", "VAR_CAPS_WHITELIST", - "VAR_CACHE_MAX_NEGATIVE_TTL", "VAR_PERMIT_SMALL_HOLDDOWN", - "VAR_QNAME_MINIMISATION", "VAR_QNAME_MINIMISATION_STRICT", - "VAR_IP_FREEBIND", "VAR_DEFINE_TAG", "VAR_LOCAL_ZONE_TAG", - "VAR_ACCESS_CONTROL_TAG", "VAR_LOCAL_ZONE_OVERRIDE", - "VAR_ACCESS_CONTROL_TAG_ACTION", "VAR_ACCESS_CONTROL_TAG_DATA", - "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW", "VAR_VIEW_FIRST", - "VAR_SERVE_EXPIRED", "VAR_FAKE_DSA", "VAR_FAKE_SHA1", "VAR_LOG_IDENTITY", - "VAR_HIDE_TRUSTANCHOR", "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE", - "VAR_SHM_KEY", "VAR_DNSCRYPT", "VAR_DNSCRYPT_ENABLE", + "VAR_IP_RATELIMIT_FACTOR", "VAR_RATELIMIT_FACTOR", + "VAR_SEND_CLIENT_SUBNET", "VAR_CLIENT_SUBNET_OPCODE", + "VAR_MAX_CLIENT_SUBNET_IPV4", "VAR_MAX_CLIENT_SUBNET_IPV6", + "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL", + "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION", + "VAR_QNAME_MINIMISATION_STRICT", "VAR_IP_FREEBIND", "VAR_DEFINE_TAG", + "VAR_LOCAL_ZONE_TAG", "VAR_ACCESS_CONTROL_TAG", + "VAR_LOCAL_ZONE_OVERRIDE", "VAR_ACCESS_CONTROL_TAG_ACTION", + "VAR_ACCESS_CONTROL_TAG_DATA", "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW", + "VAR_VIEW_FIRST", "VAR_SERVE_EXPIRED", "VAR_FAKE_DSA", "VAR_FAKE_SHA1", + "VAR_LOG_IDENTITY", "VAR_HIDE_TRUSTANCHOR", "VAR_USE_SYSTEMD", + "VAR_SHM_ENABLE", "VAR_SHM_KEY", "VAR_DNSCRYPT", "VAR_DNSCRYPT_ENABLE", "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER", "VAR_DNSCRYPT_SECRET_KEY", "VAR_DNSCRYPT_PROVIDER_CERT", "$accept", "toplevelvars", "toplevelvar", "serverstart", "contents_server", "content_server", "stubstart", @@ -999,8 +1011,10 @@ static const char *const yytname[] = "content_forward", "viewstart", "contents_view", "content_view", "server_num_threads", "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", - "server_shm_enable", "server_shm_key", "server_port", "server_interface", - "server_outgoing_interface", "server_outgoing_range", + "server_shm_enable", "server_shm_key", "server_port", + "server_send_client_subnet", "server_client_subnet_opcode", + "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6", + "server_interface", "server_outgoing_interface", "server_outgoing_range", "server_outgoing_port_permit", "server_outgoing_port_avoid", "server_outgoing_num_tcp", "server_incoming_num_tcp", "server_interface_automatic", "server_do_ip4", "server_do_ip6", @@ -1108,14 +1122,14 @@ static const yytype_uint16 yytoknum[] = 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 + 455, 456, 457, 458, 459, 460, 461 }; # endif -#define YYPACT_NINF -157 +#define YYPACT_NINF -197 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-157))) + (!!((Yystate) == (-197))) #define YYTABLE_NINF -1 @@ -1126,69 +1140,70 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -157, 0, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - 186, -38, -34, -39, -64, -130, -105, -156, -3, -2, - -1, 2, 3, 26, 29, 30, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 53, 54, 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, 82, 83, 84, - 86, 89, 91, 92, 93, 94, 95, 96, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 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, 136, 137, 138, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 216, 217, 218, 219, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, 223, 224, 225, 267, 268, 269, -157, - -157, -157, -157, -157, -157, -157, 270, 271, 272, 273, - 274, -157, -157, -157, -157, -157, -157, 275, 279, 283, - 284, 308, 309, 310, -157, -157, -157, -157, -157, -157, - -157, -157, 311, 321, 322, 323, 324, 325, 326, 327, - -157, -157, -157, -157, -157, -157, -157, -157, -157, 328, - 329, 330, 331, 332, 333, 362, 364, 373, 374, 375, - 376, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, 377, -157, -157, 378, 379, 380, - 381, 382, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, 383, 384, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, 385, 386, - 387, -157, -157, -157, -157, -157, -157, -157, -157, -157, - 388, 389, -157, -157, -157, -157, -157, -157, -157, -157, - -157, 390, 391, 392, 393, 394, 395, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, 396, -157, -157, - 397, 398, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, 399, 400, - 401, -157, -157, -157, -157, -157, -157, -157 + -197, 0, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + 98, -39, -35, 154, -65, -131, -106, -196, 2, 25, + 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 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, 82, 83, 85, 88, 90, 91, 92, 93, + 94, 95, 96, 99, 128, 129, 130, 131, 136, 137, + 179, 181, 182, 183, 185, 186, 187, 195, 196, 222, + 223, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 278, 280, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 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, + 337, 338, 339, 340, 341, 342, 343, 344, 345, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, 346, 347, 348, 349, 350, 351, -197, -197, -197, + -197, -197, -197, -197, 352, 353, 354, 355, 356, -197, + -197, -197, -197, -197, -197, 357, 358, 359, 360, 361, + 362, 363, -197, -197, -197, -197, -197, -197, -197, -197, + 364, 365, 366, 367, 368, 369, 370, 371, -197, -197, + -197, -197, -197, -197, -197, -197, -197, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, 384, -197, -197, 385, 386, 387, 388, 389, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, 390, 391, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, 392, 393, 394, -197, + -197, -197, -197, -197, -197, -197, -197, -197, 395, 396, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, 397, 398, 399, 400, 401, 402, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, 403, + -197, -197, 404, 405, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + 406, 407, 408, -197, -197, -197, -197, -197, -197, -197 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1196,8 +1211,8 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 12, 162, 171, 350, 396, 369, 179, - 405, 3, 14, 164, 173, 181, 352, 371, 398, 407, + 2, 0, 1, 12, 166, 175, 358, 404, 377, 183, + 413, 3, 14, 168, 177, 185, 360, 379, 406, 415, 4, 5, 6, 10, 8, 9, 7, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1213,106 +1228,109 @@ 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, 0, 0, 13, 15, 16, 75, 78, - 87, 158, 159, 17, 26, 66, 18, 79, 80, 37, - 59, 74, 19, 20, 22, 23, 21, 24, 25, 110, - 111, 112, 113, 114, 154, 76, 65, 91, 108, 109, - 27, 28, 29, 30, 31, 67, 81, 82, 97, 53, - 63, 54, 92, 47, 48, 161, 49, 50, 101, 105, - 118, 126, 141, 102, 60, 32, 33, 34, 89, 119, - 120, 121, 35, 36, 38, 39, 41, 42, 40, 124, - 43, 44, 45, 51, 70, 106, 84, 125, 77, 137, - 85, 86, 103, 104, 90, 46, 68, 71, 52, 55, - 93, 94, 69, 138, 95, 56, 57, 58, 107, 151, - 152, 160, 96, 64, 98, 99, 100, 139, 61, 62, - 83, 72, 73, 88, 115, 116, 117, 122, 123, 142, - 143, 145, 147, 148, 146, 149, 155, 127, 128, 131, - 132, 129, 130, 133, 134, 136, 135, 140, 150, 144, - 153, 156, 157, 0, 0, 0, 0, 0, 0, 163, - 165, 166, 167, 169, 170, 168, 0, 0, 0, 0, - 0, 172, 174, 175, 176, 177, 178, 0, 0, 0, - 0, 0, 0, 0, 180, 182, 183, 186, 187, 184, - 188, 185, 0, 0, 0, 0, 0, 0, 0, 0, - 351, 353, 355, 354, 360, 356, 357, 358, 359, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 370, 372, 373, 374, 375, 376, 377, 378, 379, - 380, 381, 382, 383, 0, 397, 399, 0, 0, 0, - 0, 0, 406, 408, 409, 410, 412, 411, 190, 189, - 196, 199, 197, 205, 206, 209, 207, 208, 210, 211, - 223, 224, 225, 226, 227, 248, 249, 250, 255, 256, - 202, 257, 258, 261, 259, 260, 263, 264, 265, 278, - 236, 237, 239, 240, 266, 281, 232, 234, 282, 288, - 289, 290, 203, 247, 301, 302, 233, 296, 219, 198, - 228, 279, 285, 267, 0, 0, 305, 204, 191, 218, - 271, 192, 200, 201, 229, 230, 303, 269, 273, 274, - 193, 306, 251, 277, 220, 235, 283, 284, 287, 295, - 231, 299, 297, 298, 241, 246, 275, 276, 242, 243, - 268, 291, 221, 222, 212, 213, 214, 215, 216, 307, - 308, 309, 252, 253, 254, 262, 310, 311, 0, 0, - 0, 270, 244, 401, 320, 324, 322, 321, 325, 323, - 0, 0, 328, 329, 272, 286, 300, 330, 331, 245, - 312, 0, 0, 0, 0, 0, 0, 292, 293, 294, - 402, 238, 217, 194, 195, 332, 333, 334, 337, 336, - 335, 338, 339, 340, 341, 342, 343, 0, 347, 348, - 0, 0, 349, 361, 363, 362, 365, 366, 367, 368, - 364, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 400, 413, 414, 415, 417, 416, 280, - 304, 319, 403, 404, 326, 327, 313, 314, 0, 0, - 0, 318, 344, 345, 346, 317, 315, 316 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, + 15, 16, 75, 78, 87, 162, 163, 17, 137, 138, + 139, 140, 26, 66, 18, 79, 80, 37, 59, 74, + 19, 20, 22, 23, 21, 24, 25, 110, 111, 112, + 113, 114, 158, 76, 65, 91, 108, 109, 27, 28, + 29, 30, 31, 67, 81, 82, 97, 53, 63, 54, + 92, 47, 48, 165, 49, 50, 101, 105, 118, 126, + 145, 102, 60, 32, 33, 34, 89, 119, 120, 121, + 35, 36, 38, 39, 41, 42, 40, 124, 43, 44, + 45, 51, 70, 106, 84, 125, 77, 141, 85, 86, + 103, 104, 90, 46, 68, 71, 52, 55, 93, 94, + 69, 142, 95, 56, 57, 58, 107, 155, 156, 164, + 96, 64, 98, 99, 100, 143, 61, 62, 83, 72, + 73, 88, 115, 116, 117, 122, 123, 146, 147, 149, + 151, 152, 150, 153, 159, 127, 128, 131, 132, 129, + 130, 133, 134, 136, 135, 144, 154, 148, 157, 160, + 161, 0, 0, 0, 0, 0, 0, 167, 169, 170, + 171, 173, 174, 172, 0, 0, 0, 0, 0, 176, + 178, 179, 180, 181, 182, 0, 0, 0, 0, 0, + 0, 0, 184, 186, 187, 190, 191, 188, 192, 189, + 0, 0, 0, 0, 0, 0, 0, 0, 359, 361, + 363, 362, 368, 364, 365, 366, 367, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, + 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 0, 405, 407, 0, 0, 0, 0, 0, + 414, 416, 417, 418, 420, 419, 194, 193, 200, 207, + 205, 213, 214, 217, 215, 216, 218, 219, 231, 232, + 233, 234, 235, 256, 257, 258, 263, 264, 210, 265, + 266, 269, 267, 268, 271, 272, 273, 286, 244, 245, + 247, 248, 274, 289, 240, 242, 290, 296, 297, 298, + 211, 255, 309, 310, 241, 304, 227, 206, 236, 287, + 293, 275, 0, 0, 313, 212, 195, 226, 279, 196, + 208, 209, 237, 238, 311, 277, 281, 282, 197, 314, + 259, 285, 228, 243, 291, 292, 295, 303, 239, 307, + 305, 306, 249, 254, 283, 284, 250, 251, 276, 299, + 229, 230, 220, 221, 222, 223, 224, 315, 316, 317, + 260, 261, 262, 270, 318, 319, 0, 0, 0, 278, + 252, 409, 328, 332, 330, 329, 333, 331, 0, 0, + 336, 337, 201, 202, 203, 204, 280, 294, 308, 338, + 339, 253, 320, 0, 0, 0, 0, 0, 0, 300, + 301, 302, 410, 246, 225, 198, 199, 340, 341, 342, + 345, 344, 343, 346, 347, 348, 349, 350, 351, 0, + 355, 356, 0, 0, 357, 369, 371, 370, 373, 374, + 375, 376, 372, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 403, 408, 421, 422, 423, 425, + 424, 288, 312, 327, 411, 412, 334, 335, 321, 322, + 0, 0, 0, 326, 352, 353, 354, 325, 323, 324 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, - -157, -157, -157, -157, -157, -157, -157, -157 + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 11, 12, 20, 175, 13, 21, 329, 14, - 22, 341, 15, 23, 354, 176, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, - 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 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, 330, 331, - 332, 333, 334, 335, 342, 343, 344, 345, 346, 355, - 356, 357, 358, 359, 360, 361, 16, 24, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 17, 25, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, 403, 18, 26, 405, 406, 319, 320, 321, 322, - 19, 27, 412, 413, 414, 415, 416, 417 + -1, 1, 11, 12, 20, 179, 13, 21, 337, 14, + 22, 349, 15, 23, 362, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 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, 338, 339, 340, 341, 342, 343, 350, 351, + 352, 353, 354, 363, 364, 365, 366, 367, 368, 369, + 16, 24, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 17, 25, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 18, 26, 413, 414, + 327, 328, 329, 330, 19, 27, 420, 421, 422, 423, + 424, 425 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1320,103 +1338,103 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_uint16 yytable[] = { - 2, 347, 323, 404, 324, 325, 336, 418, 419, 420, - 0, 3, 421, 422, 337, 338, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 362, 363, - 364, 365, 366, 367, 368, 369, 423, 348, 349, 424, - 425, 4, 407, 408, 409, 410, 411, 5, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 350, 440, 441, 326, 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, 6, 467, 468, 469, 327, 470, 328, 339, 471, - 340, 472, 473, 474, 475, 476, 477, 7, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 351, 352, 490, 491, 492, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, - 508, 509, 510, 511, 512, 8, 513, 514, 515, 353, - 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, - 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 9, 552, 553, 554, - 555, 556, 557, 558, 559, 560, 0, 10, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 561, 562, 563, 564, - 56, 57, 58, 565, 566, 567, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 568, 569, 570, - 571, 572, 573, 574, 575, 576, 100, 101, 102, 577, - 103, 104, 105, 578, 579, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 580, 581, - 582, 583, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 584, 585, 586, 587, 588, 589, 590, 591, 592, - 593, 594, 595, 596, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 165, 597, 166, 598, 167, 168, 169, 170, 171, - 172, 173, 174, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, - 626, 627 + 2, 331, 412, 332, 333, 344, 415, 416, 417, 418, + 419, 3, 426, 345, 346, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 370, 371, 372, + 373, 374, 375, 376, 377, 427, 428, 429, 430, 431, + 432, 4, 433, 434, 435, 436, 437, 5, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 334, 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, 6, 480, 481, 335, 482, 336, 347, 483, 348, + 484, 485, 486, 487, 488, 489, 490, 7, 0, 491, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 492, 493, + 494, 495, 56, 57, 58, 8, 496, 497, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 498, + 9, 499, 500, 501, 355, 502, 503, 504, 100, 101, + 102, 10, 103, 104, 105, 505, 506, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 356, 357, 507, 508, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 509, 510, 511, 512, 513, 514, 515, + 516, 517, 518, 519, 520, 358, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 521, 170, + 522, 171, 172, 173, 174, 175, 176, 177, 178, 523, + 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, + 534, 535, 536, 359, 360, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, + 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, + 562, 563, 564, 565, 566, 567, 361, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, + 631, 632, 633, 634, 635, 636, 637, 638, 639 }; static const yytype_int16 yycheck[] = { - 0, 40, 40, 108, 42, 43, 40, 10, 10, 10, - -1, 11, 10, 10, 48, 49, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 92, 93, - 94, 95, 96, 97, 98, 99, 10, 76, 77, 10, - 10, 41, 198, 199, 200, 201, 202, 47, 10, 10, + 0, 40, 108, 42, 43, 40, 202, 203, 204, 205, + 206, 11, 10, 48, 49, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 92, 93, 94, + 95, 96, 97, 98, 99, 10, 10, 10, 10, 10, + 10, 41, 10, 10, 10, 10, 10, 47, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 101, 10, 10, 103, 10, 10, 10, 10, + 10, 10, 10, 10, 103, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 91, 10, 10, 10, 133, 10, 135, 132, 10, - 134, 10, 10, 10, 10, 10, 10, 107, 10, 10, + 10, 91, 10, 10, 133, 10, 135, 132, 10, 134, + 10, 10, 10, 10, 10, 10, 10, 107, -1, 10, + 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, 10, 10, + 10, 10, 44, 45, 46, 145, 10, 10, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 10, + 190, 10, 10, 10, 40, 10, 10, 10, 100, 101, + 102, 201, 104, 105, 106, 10, 10, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 76, 77, 10, 10, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 101, 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, 10, 191, + 10, 193, 194, 195, 196, 197, 198, 199, 200, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 159, 160, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 159, 160, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 145, 10, 10, 10, 188, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 192, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 186, 10, 10, 10, - 10, 10, 10, 10, 10, 10, -1, 197, 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, 10, 10, 10, 10, - 44, 45, 46, 10, 10, 10, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 100, 101, 102, 10, - 104, 105, 106, 10, 10, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 10, 10, - 10, 10, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 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, 10, 187, 10, 189, 190, 191, 192, 193, - 194, 195, 196, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 204, 0, 11, 41, 47, 91, 107, 145, 186, - 197, 205, 206, 209, 212, 215, 379, 390, 405, 413, - 207, 210, 213, 216, 380, 391, 406, 414, 12, 13, + 0, 208, 0, 11, 41, 47, 91, 107, 145, 190, + 201, 209, 210, 213, 216, 219, 387, 398, 413, 421, + 211, 214, 217, 220, 388, 399, 414, 422, 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, 44, 45, 46, 50, @@ -1430,8 +1448,8 @@ static const yytype_uint16 yystos[] = 137, 138, 139, 140, 141, 142, 143, 144, 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, 187, 189, 190, 191, - 192, 193, 194, 195, 196, 208, 218, 219, 220, 221, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 191, 193, 194, 195, 196, 197, 198, 199, 200, 212, 222, 223, 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, @@ -1445,17 +1463,18 @@ static const yytype_uint16 yystos[] = 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, 409, - 410, 411, 412, 40, 42, 43, 103, 133, 135, 211, - 361, 362, 363, 364, 365, 366, 40, 48, 49, 132, - 134, 214, 367, 368, 369, 370, 371, 40, 76, 77, - 101, 159, 160, 188, 217, 372, 373, 374, 375, 376, - 377, 378, 92, 93, 94, 95, 96, 97, 98, 99, - 381, 382, 383, 384, 385, 386, 387, 388, 389, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 108, 407, 408, 198, 199, 200, - 201, 202, 415, 416, 417, 418, 419, 420, 10, 10, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 417, 418, 419, + 420, 40, 42, 43, 103, 133, 135, 215, 369, 370, + 371, 372, 373, 374, 40, 48, 49, 132, 134, 218, + 375, 376, 377, 378, 379, 40, 76, 77, 101, 159, + 160, 192, 221, 380, 381, 382, 383, 384, 385, 386, + 92, 93, 94, 95, 96, 97, 98, 99, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 108, 415, 416, 202, 203, 204, 205, 206, + 423, 424, 425, 426, 427, 428, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1476,32 +1495,32 @@ 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 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 203, 204, 204, 205, 205, 205, 205, 205, 205, - 205, 205, 206, 207, 207, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 209, 210, 210, 211, 211, 211, 211, 211, - 211, 212, 213, 213, 214, 214, 214, 214, 214, 215, - 216, 216, 217, 217, 217, 217, 217, 217, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 0, 207, 208, 208, 209, 209, 209, 209, 209, 209, + 209, 209, 210, 211, 211, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 213, 214, 214, 215, + 215, 215, 215, 215, 215, 216, 217, 217, 218, 218, + 218, 218, 218, 219, 220, 220, 221, 221, 221, 221, + 221, 221, 221, 222, 223, 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, @@ -1517,13 +1536,14 @@ static const yytype_uint16 yyr1[] = 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, 380, 381, 381, 381, 381, 381, 381, 381, - 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, - 391, 391, 392, 392, 392, 392, 392, 392, 392, 392, - 392, 392, 392, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 414, 415, 415, - 415, 415, 415, 416, 417, 418, 419, 420 + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 388, 389, 389, 389, 389, 389, 389, 389, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 399, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 422, 423, 423, 423, 423, + 423, 424, 425, 426, 427, 428 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1545,9 +1565,10 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, + 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 2, 0, 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, @@ -1556,21 +1577,21 @@ 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, 2, 2, 2, 3, 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, 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, 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, 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, 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, 2, 2, 2, 2, 2 }; @@ -2247,15 +2268,15 @@ yyreduce: switch (yyn) { case 12: -#line 156 "./util/configparser.y" /* yacc.c:1646 */ +#line 158 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(server:)\n")); } -#line 2255 "util/configparser.c" /* yacc.c:1646 */ +#line 2276 "util/configparser.c" /* yacc.c:1646 */ break; - case 162: -#line 228 "./util/configparser.y" /* yacc.c:1646 */ + case 166: +#line 232 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2266,11 +2287,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2270 "util/configparser.c" /* yacc.c:1646 */ +#line 2291 "util/configparser.c" /* yacc.c:1646 */ break; - case 171: -#line 245 "./util/configparser.y" /* yacc.c:1646 */ + case 175: +#line 249 "./util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2281,11 +2302,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2285 "util/configparser.c" /* yacc.c:1646 */ +#line 2306 "util/configparser.c" /* yacc.c:1646 */ break; - case 179: -#line 262 "./util/configparser.y" /* yacc.c:1646 */ + case 183: +#line 266 "./util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2298,11 +2319,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2302 "util/configparser.c" /* yacc.c:1646 */ +#line 2323 "util/configparser.c" /* yacc.c:1646 */ break; - case 189: -#line 281 "./util/configparser.y" /* yacc.c:1646 */ + case 193: +#line 285 "./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) @@ -2310,11 +2331,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2314 "util/configparser.c" /* yacc.c:1646 */ +#line 2335 "util/configparser.c" /* yacc.c:1646 */ break; - case 190: -#line 290 "./util/configparser.y" /* yacc.c:1646 */ + case 194: +#line 294 "./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) @@ -2322,11 +2343,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2326 "util/configparser.c" /* yacc.c:1646 */ +#line 2347 "util/configparser.c" /* yacc.c:1646 */ break; - case 191: -#line 299 "./util/configparser.y" /* yacc.c:1646 */ + case 195: +#line 303 "./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) @@ -2336,11 +2357,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2340 "util/configparser.c" /* yacc.c:1646 */ +#line 2361 "util/configparser.c" /* yacc.c:1646 */ break; - case 192: -#line 310 "./util/configparser.y" /* yacc.c:1646 */ + case 196: +#line 314 "./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) @@ -2348,11 +2369,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2352 "util/configparser.c" /* yacc.c:1646 */ +#line 2373 "util/configparser.c" /* yacc.c:1646 */ break; - case 193: -#line 319 "./util/configparser.y" /* yacc.c:1646 */ + case 197: +#line 323 "./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) @@ -2360,11 +2381,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2364 "util/configparser.c" /* yacc.c:1646 */ +#line 2385 "util/configparser.c" /* yacc.c:1646 */ break; - case 194: -#line 328 "./util/configparser.y" /* yacc.c:1646 */ + case 198: +#line 332 "./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) @@ -2372,11 +2393,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2376 "util/configparser.c" /* yacc.c:1646 */ +#line 2397 "util/configparser.c" /* yacc.c:1646 */ break; - case 195: -#line 337 "./util/configparser.y" /* yacc.c:1646 */ + case 199: +#line 341 "./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) @@ -2386,11 +2407,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2390 "util/configparser.c" /* yacc.c:1646 */ +#line 2411 "util/configparser.c" /* yacc.c:1646 */ break; - case 196: -#line 348 "./util/configparser.y" /* yacc.c:1646 */ + case 200: +#line 352 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2398,11 +2419,83 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2402 "util/configparser.c" /* yacc.c:1646 */ +#line 2423 "util/configparser.c" /* yacc.c:1646 */ break; - case 197: -#line 357 "./util/configparser.y" /* yacc.c:1646 */ + case 201: +#line 361 "./util/configparser.y" /* yacc.c:1646 */ + { + #ifdef CLIENT_SUBNET + OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, (yyvsp[0].str))) + fatal_exit("out of memory adding client-subnet"); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + } +#line 2437 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 202: +#line 372 "./util/configparser.y" /* yacc.c:1646 */ + { + #ifdef CLIENT_SUBNET + OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); + if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) + yyerror("option code expected"); + else if(atoi((yyvsp[0].str)) > 65535 || atoi((yyvsp[0].str)) < 0) + yyerror("option code must be in interval [0, 65535]"); + else cfg_parser->cfg->client_subnet_opcode = atoi((yyvsp[0].str)); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free((yyvsp[0].str)); + } +#line 2455 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 203: +#line 387 "./util/configparser.y" /* yacc.c:1646 */ + { + #ifdef CLIENT_SUBNET + OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); + if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) + yyerror("IPv4 subnet length expected"); + else if (atoi((yyvsp[0].str)) > 32) + cfg_parser->cfg->max_client_subnet_ipv4 = 32; + else if (atoi((yyvsp[0].str)) < 0) + cfg_parser->cfg->max_client_subnet_ipv4 = 0; + else cfg_parser->cfg->max_client_subnet_ipv4 = atoi((yyvsp[0].str)); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free((yyvsp[0].str)); + } +#line 2475 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 204: +#line 404 "./util/configparser.y" /* yacc.c:1646 */ + { + #ifdef CLIENT_SUBNET + OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); + if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) + yyerror("Ipv6 subnet length expected"); + else if (atoi((yyvsp[0].str)) > 128) + cfg_parser->cfg->max_client_subnet_ipv6 = 128; + else if (atoi((yyvsp[0].str)) < 0) + cfg_parser->cfg->max_client_subnet_ipv6 = 0; + else cfg_parser->cfg->max_client_subnet_ipv6 = atoi((yyvsp[0].str)); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free((yyvsp[0].str)); + } +#line 2495 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 205: +#line 421 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -2414,11 +2507,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 2418 "util/configparser.c" /* yacc.c:1646 */ +#line 2511 "util/configparser.c" /* yacc.c:1646 */ break; - case 198: -#line 370 "./util/configparser.y" /* yacc.c:1646 */ + case 206: +#line 434 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -2432,11 +2525,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 2436 "util/configparser.c" /* yacc.c:1646 */ +#line 2529 "util/configparser.c" /* yacc.c:1646 */ break; - case 199: -#line 385 "./util/configparser.y" /* yacc.c:1646 */ + case 207: +#line 449 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2444,11 +2537,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2448 "util/configparser.c" /* yacc.c:1646 */ +#line 2541 "util/configparser.c" /* yacc.c:1646 */ break; - case 200: -#line 394 "./util/configparser.y" /* yacc.c:1646 */ + case 208: +#line 458 "./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, @@ -2456,11 +2549,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2460 "util/configparser.c" /* yacc.c:1646 */ +#line 2553 "util/configparser.c" /* yacc.c:1646 */ break; - case 201: -#line 403 "./util/configparser.y" /* yacc.c:1646 */ + case 209: +#line 467 "./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, @@ -2468,11 +2561,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2472 "util/configparser.c" /* yacc.c:1646 */ +#line 2565 "util/configparser.c" /* yacc.c:1646 */ break; - case 202: -#line 412 "./util/configparser.y" /* yacc.c:1646 */ + case 210: +#line 476 "./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) @@ -2480,11 +2573,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2484 "util/configparser.c" /* yacc.c:1646 */ +#line 2577 "util/configparser.c" /* yacc.c:1646 */ break; - case 203: -#line 421 "./util/configparser.y" /* yacc.c:1646 */ + case 211: +#line 485 "./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) @@ -2492,11 +2585,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2496 "util/configparser.c" /* yacc.c:1646 */ +#line 2589 "util/configparser.c" /* yacc.c:1646 */ break; - case 204: -#line 430 "./util/configparser.y" /* yacc.c:1646 */ + case 212: +#line 494 "./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) @@ -2504,11 +2597,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2508 "util/configparser.c" /* yacc.c:1646 */ +#line 2601 "util/configparser.c" /* yacc.c:1646 */ break; - case 205: -#line 439 "./util/configparser.y" /* yacc.c:1646 */ + case 213: +#line 503 "./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) @@ -2516,11 +2609,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2520 "util/configparser.c" /* yacc.c:1646 */ +#line 2613 "util/configparser.c" /* yacc.c:1646 */ break; - case 206: -#line 448 "./util/configparser.y" /* yacc.c:1646 */ + case 214: +#line 512 "./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) @@ -2528,11 +2621,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2532 "util/configparser.c" /* yacc.c:1646 */ +#line 2625 "util/configparser.c" /* yacc.c:1646 */ break; - case 207: -#line 457 "./util/configparser.y" /* yacc.c:1646 */ + case 215: +#line 521 "./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) @@ -2540,11 +2633,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2544 "util/configparser.c" /* yacc.c:1646 */ +#line 2637 "util/configparser.c" /* yacc.c:1646 */ break; - case 208: -#line 466 "./util/configparser.y" /* yacc.c:1646 */ + case 216: +#line 530 "./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) @@ -2552,11 +2645,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2556 "util/configparser.c" /* yacc.c:1646 */ +#line 2649 "util/configparser.c" /* yacc.c:1646 */ break; - case 209: -#line 475 "./util/configparser.y" /* yacc.c:1646 */ + case 217: +#line 539 "./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) @@ -2564,11 +2657,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2568 "util/configparser.c" /* yacc.c:1646 */ +#line 2661 "util/configparser.c" /* yacc.c:1646 */ break; - case 210: -#line 484 "./util/configparser.y" /* yacc.c:1646 */ + case 218: +#line 548 "./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) @@ -2576,11 +2669,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2580 "util/configparser.c" /* yacc.c:1646 */ +#line 2673 "util/configparser.c" /* yacc.c:1646 */ break; - case 211: -#line 493 "./util/configparser.y" /* yacc.c:1646 */ + case 219: +#line 557 "./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) @@ -2588,11 +2681,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2592 "util/configparser.c" /* yacc.c:1646 */ +#line 2685 "util/configparser.c" /* yacc.c:1646 */ break; - case 212: -#line 502 "./util/configparser.y" /* yacc.c:1646 */ + case 220: +#line 566 "./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) @@ -2600,11 +2693,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2604 "util/configparser.c" /* yacc.c:1646 */ +#line 2697 "util/configparser.c" /* yacc.c:1646 */ break; - case 213: -#line 511 "./util/configparser.y" /* yacc.c:1646 */ + case 221: +#line 575 "./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) @@ -2612,31 +2705,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2616 "util/configparser.c" /* yacc.c:1646 */ +#line 2709 "util/configparser.c" /* yacc.c:1646 */ break; - case 214: -#line 520 "./util/configparser.y" /* yacc.c:1646 */ + case 222: +#line 584 "./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 2626 "util/configparser.c" /* yacc.c:1646 */ +#line 2719 "util/configparser.c" /* yacc.c:1646 */ break; - case 215: -#line 527 "./util/configparser.y" /* yacc.c:1646 */ + case 223: +#line 591 "./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 2636 "util/configparser.c" /* yacc.c:1646 */ +#line 2729 "util/configparser.c" /* yacc.c:1646 */ break; - case 216: -#line 534 "./util/configparser.y" /* yacc.c:1646 */ + case 224: +#line 598 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2644,11 +2737,11 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2648 "util/configparser.c" /* yacc.c:1646 */ +#line 2741 "util/configparser.c" /* yacc.c:1646 */ break; - case 217: -#line 543 "./util/configparser.y" /* yacc.c:1646 */ + case 225: +#line 607 "./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) @@ -2656,11 +2749,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2660 "util/configparser.c" /* yacc.c:1646 */ +#line 2753 "util/configparser.c" /* yacc.c:1646 */ break; - case 218: -#line 552 "./util/configparser.y" /* yacc.c:1646 */ + case 226: +#line 616 "./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) @@ -2668,11 +2761,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2672 "util/configparser.c" /* yacc.c:1646 */ +#line 2765 "util/configparser.c" /* yacc.c:1646 */ break; - case 219: -#line 561 "./util/configparser.y" /* yacc.c:1646 */ + case 227: +#line 625 "./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) @@ -2685,11 +2778,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2689 "util/configparser.c" /* yacc.c:1646 */ +#line 2782 "util/configparser.c" /* yacc.c:1646 */ break; - case 220: -#line 575 "./util/configparser.y" /* yacc.c:1646 */ + case 228: +#line 639 "./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) @@ -2697,11 +2790,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2701 "util/configparser.c" /* yacc.c:1646 */ +#line 2794 "util/configparser.c" /* yacc.c:1646 */ break; - case 221: -#line 584 "./util/configparser.y" /* yacc.c:1646 */ + case 229: +#line 648 "./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) @@ -2709,11 +2802,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2713 "util/configparser.c" /* yacc.c:1646 */ +#line 2806 "util/configparser.c" /* yacc.c:1646 */ break; - case 222: -#line 593 "./util/configparser.y" /* yacc.c:1646 */ + case 230: +#line 657 "./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) @@ -2721,31 +2814,31 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2725 "util/configparser.c" /* yacc.c:1646 */ +#line 2818 "util/configparser.c" /* yacc.c:1646 */ break; - case 223: -#line 602 "./util/configparser.y" /* yacc.c:1646 */ + case 231: +#line 666 "./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 2735 "util/configparser.c" /* yacc.c:1646 */ +#line 2828 "util/configparser.c" /* yacc.c:1646 */ break; - case 224: -#line 609 "./util/configparser.y" /* yacc.c:1646 */ + case 232: +#line 673 "./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 2745 "util/configparser.c" /* yacc.c:1646 */ +#line 2838 "util/configparser.c" /* yacc.c:1646 */ break; - case 225: -#line 616 "./util/configparser.y" /* yacc.c:1646 */ + case 233: +#line 680 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -2770,115 +2863,115 @@ yyreduce: } } } -#line 2774 "util/configparser.c" /* yacc.c:1646 */ +#line 2867 "util/configparser.c" /* yacc.c:1646 */ break; - case 226: -#line 642 "./util/configparser.y" /* yacc.c:1646 */ + case 234: +#line 706 "./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 2785 "util/configparser.c" /* yacc.c:1646 */ +#line 2878 "util/configparser.c" /* yacc.c:1646 */ break; - case 227: -#line 650 "./util/configparser.y" /* yacc.c:1646 */ + case 235: +#line 714 "./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 2795 "util/configparser.c" /* yacc.c:1646 */ +#line 2888 "util/configparser.c" /* yacc.c:1646 */ break; - case 228: -#line 657 "./util/configparser.y" /* yacc.c:1646 */ + case 236: +#line 721 "./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 2805 "util/configparser.c" /* yacc.c:1646 */ +#line 2898 "util/configparser.c" /* yacc.c:1646 */ break; - case 229: -#line 664 "./util/configparser.y" /* yacc.c:1646 */ + case 237: +#line 728 "./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 2815 "util/configparser.c" /* yacc.c:1646 */ +#line 2908 "util/configparser.c" /* yacc.c:1646 */ break; - case 230: -#line 671 "./util/configparser.y" /* yacc.c:1646 */ + case 238: +#line 735 "./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 2825 "util/configparser.c" /* yacc.c:1646 */ +#line 2918 "util/configparser.c" /* yacc.c:1646 */ break; - case 231: -#line 678 "./util/configparser.y" /* yacc.c:1646 */ + case 239: +#line 742 "./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 2836 "util/configparser.c" /* yacc.c:1646 */ +#line 2929 "util/configparser.c" /* yacc.c:1646 */ break; - case 232: -#line 686 "./util/configparser.y" /* yacc.c:1646 */ + case 240: +#line 750 "./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 2847 "util/configparser.c" /* yacc.c:1646 */ +#line 2940 "util/configparser.c" /* yacc.c:1646 */ break; - case 233: -#line 694 "./util/configparser.y" /* yacc.c:1646 */ + case 241: +#line 758 "./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 2858 "util/configparser.c" /* yacc.c:1646 */ +#line 2951 "util/configparser.c" /* yacc.c:1646 */ break; - case 234: -#line 702 "./util/configparser.y" /* yacc.c:1646 */ + case 242: +#line 766 "./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 2868 "util/configparser.c" /* yacc.c:1646 */ +#line 2961 "util/configparser.c" /* yacc.c:1646 */ break; - case 235: -#line 709 "./util/configparser.y" /* yacc.c:1646 */ + case 243: +#line 773 "./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 2878 "util/configparser.c" /* yacc.c:1646 */ +#line 2971 "util/configparser.c" /* yacc.c:1646 */ break; - case 236: -#line 716 "./util/configparser.y" /* yacc.c:1646 */ + case 244: +#line 780 "./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) @@ -2886,11 +2979,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2890 "util/configparser.c" /* yacc.c:1646 */ +#line 2983 "util/configparser.c" /* yacc.c:1646 */ break; - case 237: -#line 725 "./util/configparser.y" /* yacc.c:1646 */ + case 245: +#line 789 "./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) @@ -2898,11 +2991,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2902 "util/configparser.c" /* yacc.c:1646 */ +#line 2995 "util/configparser.c" /* yacc.c:1646 */ break; - case 238: -#line 734 "./util/configparser.y" /* yacc.c:1646 */ + case 246: +#line 798 "./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) @@ -2910,53 +3003,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2914 "util/configparser.c" /* yacc.c:1646 */ +#line 3007 "util/configparser.c" /* yacc.c:1646 */ break; - case 239: -#line 743 "./util/configparser.y" /* yacc.c:1646 */ + case 247: +#line 807 "./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 2924 "util/configparser.c" /* yacc.c:1646 */ +#line 3017 "util/configparser.c" /* yacc.c:1646 */ break; - case 240: -#line 750 "./util/configparser.y" /* yacc.c:1646 */ + case 248: +#line 814 "./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 2934 "util/configparser.c" /* yacc.c:1646 */ +#line 3027 "util/configparser.c" /* yacc.c:1646 */ break; - case 241: -#line 757 "./util/configparser.y" /* yacc.c:1646 */ + case 249: +#line 821 "./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 2945 "util/configparser.c" /* yacc.c:1646 */ +#line 3038 "util/configparser.c" /* yacc.c:1646 */ break; - case 242: -#line 765 "./util/configparser.y" /* yacc.c:1646 */ + case 250: +#line 829 "./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 2956 "util/configparser.c" /* yacc.c:1646 */ +#line 3049 "util/configparser.c" /* yacc.c:1646 */ break; - case 243: -#line 773 "./util/configparser.y" /* yacc.c:1646 */ + case 251: +#line 837 "./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) @@ -2965,11 +3058,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2969 "util/configparser.c" /* yacc.c:1646 */ +#line 3062 "util/configparser.c" /* yacc.c:1646 */ break; - case 244: -#line 783 "./util/configparser.y" /* yacc.c:1646 */ + case 252: +#line 847 "./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) @@ -2978,11 +3071,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2982 "util/configparser.c" /* yacc.c:1646 */ +#line 3075 "util/configparser.c" /* yacc.c:1646 */ break; - case 245: -#line 793 "./util/configparser.y" /* yacc.c:1646 */ + case 253: +#line 857 "./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) @@ -2991,11 +3084,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2995 "util/configparser.c" /* yacc.c:1646 */ +#line 3088 "util/configparser.c" /* yacc.c:1646 */ break; - case 246: -#line 803 "./util/configparser.y" /* yacc.c:1646 */ + case 254: +#line 867 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3007,11 +3100,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3011 "util/configparser.c" /* yacc.c:1646 */ +#line 3104 "util/configparser.c" /* yacc.c:1646 */ break; - case 247: -#line 816 "./util/configparser.y" /* yacc.c:1646 */ + case 255: +#line 880 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3021,22 +3114,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3025 "util/configparser.c" /* yacc.c:1646 */ +#line 3118 "util/configparser.c" /* yacc.c:1646 */ break; - case 248: -#line 827 "./util/configparser.y" /* yacc.c:1646 */ + case 256: +#line 891 "./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 3036 "util/configparser.c" /* yacc.c:1646 */ +#line 3129 "util/configparser.c" /* yacc.c:1646 */ break; - case 249: -#line 835 "./util/configparser.y" /* yacc.c:1646 */ + case 257: +#line 899 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3048,11 +3141,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3052 "util/configparser.c" /* yacc.c:1646 */ +#line 3145 "util/configparser.c" /* yacc.c:1646 */ break; - case 250: -#line 848 "./util/configparser.y" /* yacc.c:1646 */ + case 258: +#line 912 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3060,11 +3153,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3064 "util/configparser.c" /* yacc.c:1646 */ +#line 3157 "util/configparser.c" /* yacc.c:1646 */ break; - case 251: -#line 857 "./util/configparser.y" /* yacc.c:1646 */ + case 259: +#line 921 "./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) @@ -3072,11 +3165,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3076 "util/configparser.c" /* yacc.c:1646 */ +#line 3169 "util/configparser.c" /* yacc.c:1646 */ break; - case 252: -#line 866 "./util/configparser.y" /* yacc.c:1646 */ + case 260: +#line 930 "./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) @@ -3084,11 +3177,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3088 "util/configparser.c" /* yacc.c:1646 */ +#line 3181 "util/configparser.c" /* yacc.c:1646 */ break; - case 253: -#line 875 "./util/configparser.y" /* yacc.c:1646 */ + case 261: +#line 939 "./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) @@ -3097,11 +3190,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3101 "util/configparser.c" /* yacc.c:1646 */ +#line 3194 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: -#line 885 "./util/configparser.y" /* yacc.c:1646 */ + case 262: +#line 949 "./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) @@ -3110,22 +3203,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3114 "util/configparser.c" /* yacc.c:1646 */ +#line 3207 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: -#line 895 "./util/configparser.y" /* yacc.c:1646 */ + case 263: +#line 959 "./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 3125 "util/configparser.c" /* yacc.c:1646 */ +#line 3218 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: -#line 903 "./util/configparser.y" /* yacc.c:1646 */ + case 264: +#line 967 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3137,11 +3230,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3141 "util/configparser.c" /* yacc.c:1646 */ +#line 3234 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: -#line 916 "./util/configparser.y" /* yacc.c:1646 */ + case 265: +#line 980 "./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) @@ -3149,22 +3242,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3153 "util/configparser.c" /* yacc.c:1646 */ +#line 3246 "util/configparser.c" /* yacc.c:1646 */ break; - case 258: -#line 925 "./util/configparser.y" /* yacc.c:1646 */ + case 266: +#line 989 "./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 3164 "util/configparser.c" /* yacc.c:1646 */ +#line 3257 "util/configparser.c" /* yacc.c:1646 */ break; - case 259: -#line 933 "./util/configparser.y" /* yacc.c:1646 */ + case 267: +#line 997 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3172,22 +3265,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3176 "util/configparser.c" /* yacc.c:1646 */ +#line 3269 "util/configparser.c" /* yacc.c:1646 */ break; - case 260: -#line 942 "./util/configparser.y" /* yacc.c:1646 */ + case 268: +#line 1006 "./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 3187 "util/configparser.c" /* yacc.c:1646 */ +#line 3280 "util/configparser.c" /* yacc.c:1646 */ break; - case 261: -#line 950 "./util/configparser.y" /* yacc.c:1646 */ + case 269: +#line 1014 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3199,11 +3292,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3203 "util/configparser.c" /* yacc.c:1646 */ +#line 3296 "util/configparser.c" /* yacc.c:1646 */ break; - case 262: -#line 963 "./util/configparser.y" /* yacc.c:1646 */ + case 270: +#line 1027 "./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) @@ -3211,21 +3304,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3215 "util/configparser.c" /* yacc.c:1646 */ +#line 3308 "util/configparser.c" /* yacc.c:1646 */ break; - case 263: -#line 972 "./util/configparser.y" /* yacc.c:1646 */ + case 271: +#line 1036 "./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 3225 "util/configparser.c" /* yacc.c:1646 */ +#line 3318 "util/configparser.c" /* yacc.c:1646 */ break; - case 264: -#line 979 "./util/configparser.y" /* yacc.c:1646 */ + case 272: +#line 1043 "./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) @@ -3234,11 +3327,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3238 "util/configparser.c" /* yacc.c:1646 */ +#line 3331 "util/configparser.c" /* yacc.c:1646 */ break; - case 265: -#line 989 "./util/configparser.y" /* yacc.c:1646 */ + case 273: +#line 1053 "./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) @@ -3247,11 +3340,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3251 "util/configparser.c" /* yacc.c:1646 */ +#line 3344 "util/configparser.c" /* yacc.c:1646 */ break; - case 266: -#line 999 "./util/configparser.y" /* yacc.c:1646 */ + case 274: +#line 1063 "./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) @@ -3260,11 +3353,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3264 "util/configparser.c" /* yacc.c:1646 */ +#line 3357 "util/configparser.c" /* yacc.c:1646 */ break; - case 267: -#line 1009 "./util/configparser.y" /* yacc.c:1646 */ + case 275: +#line 1073 "./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) @@ -3273,11 +3366,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3277 "util/configparser.c" /* yacc.c:1646 */ +#line 3370 "util/configparser.c" /* yacc.c:1646 */ break; - case 268: -#line 1019 "./util/configparser.y" /* yacc.c:1646 */ + case 276: +#line 1083 "./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) @@ -3286,11 +3379,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3290 "util/configparser.c" /* yacc.c:1646 */ +#line 3383 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: -#line 1029 "./util/configparser.y" /* yacc.c:1646 */ + case 277: +#line 1093 "./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) @@ -3299,11 +3392,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3303 "util/configparser.c" /* yacc.c:1646 */ +#line 3396 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 1039 "./util/configparser.y" /* yacc.c:1646 */ + case 278: +#line 1103 "./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) @@ -3312,11 +3405,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3316 "util/configparser.c" /* yacc.c:1646 */ +#line 3409 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 1049 "./util/configparser.y" /* yacc.c:1646 */ + case 279: +#line 1113 "./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) @@ -3325,41 +3418,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3329 "util/configparser.c" /* yacc.c:1646 */ +#line 3422 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 1059 "./util/configparser.y" /* yacc.c:1646 */ + case 280: +#line 1123 "./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 3339 "util/configparser.c" /* yacc.c:1646 */ +#line 3432 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 1066 "./util/configparser.y" /* yacc.c:1646 */ + case 281: +#line 1130 "./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 3349 "util/configparser.c" /* yacc.c:1646 */ +#line 3442 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 1073 "./util/configparser.y" /* yacc.c:1646 */ + case 282: +#line 1137 "./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 3359 "util/configparser.c" /* yacc.c:1646 */ +#line 3452 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 1080 "./util/configparser.y" /* yacc.c:1646 */ + case 283: +#line 1144 "./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) @@ -3367,11 +3460,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3371 "util/configparser.c" /* yacc.c:1646 */ +#line 3464 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 1089 "./util/configparser.y" /* yacc.c:1646 */ + case 284: +#line 1153 "./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) @@ -3379,11 +3472,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3383 "util/configparser.c" /* yacc.c:1646 */ +#line 3476 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 1098 "./util/configparser.y" /* yacc.c:1646 */ + case 285: +#line 1162 "./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) @@ -3391,21 +3484,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3395 "util/configparser.c" /* yacc.c:1646 */ +#line 3488 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 1107 "./util/configparser.y" /* yacc.c:1646 */ + case 286: +#line 1171 "./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 3405 "util/configparser.c" /* yacc.c:1646 */ +#line 3498 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 1114 "./util/configparser.y" /* yacc.c:1646 */ + case 287: +#line 1178 "./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) @@ -3414,11 +3507,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3418 "util/configparser.c" /* yacc.c:1646 */ +#line 3511 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 1124 "./util/configparser.y" /* yacc.c:1646 */ + case 288: +#line 1188 "./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 && @@ -3434,21 +3527,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 3438 "util/configparser.c" /* yacc.c:1646 */ +#line 3531 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 1141 "./util/configparser.y" /* yacc.c:1646 */ + case 289: +#line 1205 "./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 3448 "util/configparser.c" /* yacc.c:1646 */ +#line 3541 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 1148 "./util/configparser.y" /* yacc.c:1646 */ + case 290: +#line 1212 "./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) { @@ -3465,11 +3558,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3469 "util/configparser.c" /* yacc.c:1646 */ +#line 3562 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 1166 "./util/configparser.y" /* yacc.c:1646 */ + case 291: +#line 1230 "./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) { @@ -3481,11 +3574,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3485 "util/configparser.c" /* yacc.c:1646 */ +#line 3578 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 1179 "./util/configparser.y" /* yacc.c:1646 */ + case 292: +#line 1243 "./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) { @@ -3497,11 +3590,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3501 "util/configparser.c" /* yacc.c:1646 */ +#line 3594 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 1192 "./util/configparser.y" /* yacc.c:1646 */ + case 293: +#line 1256 "./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) @@ -3509,11 +3602,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3513 "util/configparser.c" /* yacc.c:1646 */ +#line 3606 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 1201 "./util/configparser.y" /* yacc.c:1646 */ + case 294: +#line 1265 "./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) @@ -3521,11 +3614,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3525 "util/configparser.c" /* yacc.c:1646 */ +#line 3618 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 1210 "./util/configparser.y" /* yacc.c:1646 */ + case 295: +#line 1274 "./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) @@ -3533,11 +3626,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3537 "util/configparser.c" /* yacc.c:1646 */ +#line 3630 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 1219 "./util/configparser.y" /* yacc.c:1646 */ + case 296: +#line 1283 "./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) @@ -3545,11 +3638,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3549 "util/configparser.c" /* yacc.c:1646 */ +#line 3642 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 1228 "./util/configparser.y" /* yacc.c:1646 */ + case 297: +#line 1292 "./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) @@ -3558,11 +3651,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3562 "util/configparser.c" /* yacc.c:1646 */ +#line 3655 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 1238 "./util/configparser.y" /* yacc.c:1646 */ + case 298: +#line 1302 "./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) @@ -3571,11 +3664,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3575 "util/configparser.c" /* yacc.c:1646 */ +#line 3668 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 1248 "./util/configparser.y" /* yacc.c:1646 */ + case 299: +#line 1312 "./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) @@ -3583,11 +3676,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3587 "util/configparser.c" /* yacc.c:1646 */ +#line 3680 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 1257 "./util/configparser.y" /* yacc.c:1646 */ + case 300: +#line 1321 "./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) @@ -3595,11 +3688,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3599 "util/configparser.c" /* yacc.c:1646 */ +#line 3692 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 1266 "./util/configparser.y" /* yacc.c:1646 */ + case 301: +#line 1330 "./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) @@ -3611,11 +3704,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3615 "util/configparser.c" /* yacc.c:1646 */ +#line 3708 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 1279 "./util/configparser.y" /* yacc.c:1646 */ + case 302: +#line 1343 "./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) @@ -3627,11 +3720,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3631 "util/configparser.c" /* yacc.c:1646 */ +#line 3724 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 1292 "./util/configparser.y" /* yacc.c:1646 */ + case 303: +#line 1356 "./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) @@ -3639,21 +3732,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3643 "util/configparser.c" /* yacc.c:1646 */ +#line 3736 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 1301 "./util/configparser.y" /* yacc.c:1646 */ + case 304: +#line 1365 "./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 3653 "util/configparser.c" /* yacc.c:1646 */ +#line 3746 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 1308 "./util/configparser.y" /* yacc.c:1646 */ + case 305: +#line 1372 "./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) @@ -3661,11 +3754,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3665 "util/configparser.c" /* yacc.c:1646 */ +#line 3758 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 1317 "./util/configparser.y" /* yacc.c:1646 */ + case 306: +#line 1381 "./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) @@ -3673,11 +3766,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3677 "util/configparser.c" /* yacc.c:1646 */ +#line 3770 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 1326 "./util/configparser.y" /* yacc.c:1646 */ + case 307: +#line 1390 "./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) @@ -3685,11 +3778,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3689 "util/configparser.c" /* yacc.c:1646 */ +#line 3782 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 1335 "./util/configparser.y" /* yacc.c:1646 */ + case 308: +#line 1399 "./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) @@ -3698,22 +3791,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3702 "util/configparser.c" /* yacc.c:1646 */ +#line 3795 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 1344 "./util/configparser.y" /* yacc.c:1646 */ + case 309: +#line 1408 "./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 3713 "util/configparser.c" /* yacc.c:1646 */ +#line 3806 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 1352 "./util/configparser.y" /* yacc.c:1646 */ + case 310: +#line 1416 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3725,22 +3818,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3729 "util/configparser.c" /* yacc.c:1646 */ +#line 3822 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 1365 "./util/configparser.y" /* yacc.c:1646 */ + case 311: +#line 1429 "./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 3740 "util/configparser.c" /* yacc.c:1646 */ +#line 3833 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 1373 "./util/configparser.y" /* yacc.c:1646 */ + case 312: +#line 1437 "./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 && @@ -3767,21 +3860,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 3771 "util/configparser.c" /* yacc.c:1646 */ +#line 3864 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 1401 "./util/configparser.y" /* yacc.c:1646 */ + case 313: +#line 1465 "./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 3781 "util/configparser.c" /* yacc.c:1646 */ +#line 3874 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 1408 "./util/configparser.y" /* yacc.c:1646 */ + case 314: +#line 1472 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -3795,11 +3888,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 3799 "util/configparser.c" /* yacc.c:1646 */ +#line 3892 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 1423 "./util/configparser.y" /* yacc.c:1646 */ + case 315: +#line 1487 "./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) @@ -3808,11 +3901,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3812 "util/configparser.c" /* yacc.c:1646 */ +#line 3905 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 1433 "./util/configparser.y" /* yacc.c:1646 */ + case 316: +#line 1497 "./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) @@ -3821,31 +3914,31 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3825 "util/configparser.c" /* yacc.c:1646 */ +#line 3918 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 1443 "./util/configparser.y" /* yacc.c:1646 */ + case 317: +#line 1507 "./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 3835 "util/configparser.c" /* yacc.c:1646 */ +#line 3928 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 1450 "./util/configparser.y" /* yacc.c:1646 */ + case 318: +#line 1514 "./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 3845 "util/configparser.c" /* yacc.c:1646 */ +#line 3938 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 1457 "./util/configparser.y" /* yacc.c:1646 */ + case 319: +#line 1521 "./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) @@ -3853,11 +3946,11 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3857 "util/configparser.c" /* yacc.c:1646 */ +#line 3950 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 1466 "./util/configparser.y" /* yacc.c:1646 */ + case 320: +#line 1530 "./util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -3870,11 +3963,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3874 "util/configparser.c" /* yacc.c:1646 */ +#line 3967 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 1480 "./util/configparser.y" /* yacc.c:1646 */ + case 321: +#line 1544 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -3892,11 +3985,11 @@ yyreduce: } } } -#line 3896 "util/configparser.c" /* yacc.c:1646 */ +#line 3989 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 1499 "./util/configparser.y" /* yacc.c:1646 */ + case 322: +#line 1563 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -3914,11 +4007,11 @@ yyreduce: } } } -#line 3918 "util/configparser.c" /* yacc.c:1646 */ +#line 4011 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 1518 "./util/configparser.y" /* yacc.c:1646 */ + case 323: +#line 1582 "./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, @@ -3929,11 +4022,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 3933 "util/configparser.c" /* yacc.c:1646 */ +#line 4026 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 1530 "./util/configparser.y" /* yacc.c:1646 */ + case 324: +#line 1594 "./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, @@ -3944,11 +4037,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 3948 "util/configparser.c" /* yacc.c:1646 */ +#line 4041 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 1542 "./util/configparser.y" /* yacc.c:1646 */ + case 325: +#line 1606 "./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, @@ -3959,11 +4052,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 3963 "util/configparser.c" /* yacc.c:1646 */ +#line 4056 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 1554 "./util/configparser.y" /* yacc.c:1646 */ + case 326: +#line 1618 "./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, @@ -3973,11 +4066,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 3977 "util/configparser.c" /* yacc.c:1646 */ +#line 4070 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 1565 "./util/configparser.y" /* yacc.c:1646 */ + case 327: +#line 1629 "./util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -3995,11 +4088,11 @@ yyreduce: } } } -#line 3999 "util/configparser.c" /* yacc.c:1646 */ +#line 4092 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 1584 "./util/configparser.y" /* yacc.c:1646 */ + case 328: +#line 1648 "./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) @@ -4007,11 +4100,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4011 "util/configparser.c" /* yacc.c:1646 */ +#line 4104 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 1594 "./util/configparser.y" /* yacc.c:1646 */ + case 329: +#line 1658 "./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) @@ -4019,33 +4112,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4023 "util/configparser.c" /* yacc.c:1646 */ +#line 4116 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 1603 "./util/configparser.y" /* yacc.c:1646 */ + case 330: +#line 1667 "./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 4034 "util/configparser.c" /* yacc.c:1646 */ +#line 4127 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1611 "./util/configparser.y" /* yacc.c:1646 */ + case 331: +#line 1675 "./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 4045 "util/configparser.c" /* yacc.c:1646 */ +#line 4138 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1619 "./util/configparser.y" /* yacc.c:1646 */ + case 332: +#line 1683 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4057,11 +4150,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4061 "util/configparser.c" /* yacc.c:1646 */ +#line 4154 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1632 "./util/configparser.y" /* yacc.c:1646 */ + case 333: +#line 1696 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4073,11 +4166,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4077 "util/configparser.c" /* yacc.c:1646 */ +#line 4170 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1645 "./util/configparser.y" /* yacc.c:1646 */ + case 334: +#line 1709 "./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) { @@ -4089,11 +4182,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 4093 "util/configparser.c" /* yacc.c:1646 */ +#line 4186 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1658 "./util/configparser.y" /* yacc.c:1646 */ + case 335: +#line 1722 "./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) { @@ -4105,11 +4198,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 4109 "util/configparser.c" /* yacc.c:1646 */ +#line 4202 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1671 "./util/configparser.y" /* yacc.c:1646 */ + case 336: +#line 1735 "./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) @@ -4117,11 +4210,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4121 "util/configparser.c" /* yacc.c:1646 */ +#line 4214 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1680 "./util/configparser.y" /* yacc.c:1646 */ + case 337: +#line 1744 "./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) @@ -4129,11 +4222,11 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4133 "util/configparser.c" /* yacc.c:1646 */ +#line 4226 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1689 "./util/configparser.y" /* yacc.c:1646 */ + case 338: +#line 1753 "./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) @@ -4142,11 +4235,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4146 "util/configparser.c" /* yacc.c:1646 */ +#line 4239 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1699 "./util/configparser.y" /* yacc.c:1646 */ + case 339: +#line 1763 "./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) @@ -4155,11 +4248,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4159 "util/configparser.c" /* yacc.c:1646 */ +#line 4252 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1709 "./util/configparser.y" /* yacc.c:1646 */ + case 340: +#line 1773 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -4168,31 +4261,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 4172 "util/configparser.c" /* yacc.c:1646 */ +#line 4265 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1719 "./util/configparser.y" /* yacc.c:1646 */ + case 341: +#line 1783 "./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 4182 "util/configparser.c" /* yacc.c:1646 */ +#line 4275 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1726 "./util/configparser.y" /* yacc.c:1646 */ + case 342: +#line 1790 "./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 4192 "util/configparser.c" /* yacc.c:1646 */ +#line 4285 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1733 "./util/configparser.y" /* yacc.c:1646 */ + case 343: +#line 1797 "./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) @@ -4200,11 +4293,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4204 "util/configparser.c" /* yacc.c:1646 */ +#line 4297 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1742 "./util/configparser.y" /* yacc.c:1646 */ + case 344: +#line 1806 "./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) @@ -4213,11 +4306,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4217 "util/configparser.c" /* yacc.c:1646 */ +#line 4310 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1752 "./util/configparser.y" /* yacc.c:1646 */ + case 345: +#line 1816 "./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) @@ -4226,11 +4319,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4230 "util/configparser.c" /* yacc.c:1646 */ +#line 4323 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1762 "./util/configparser.y" /* yacc.c:1646 */ + case 346: +#line 1826 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -4239,31 +4332,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 4243 "util/configparser.c" /* yacc.c:1646 */ +#line 4336 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1772 "./util/configparser.y" /* yacc.c:1646 */ + case 347: +#line 1836 "./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 4253 "util/configparser.c" /* yacc.c:1646 */ +#line 4346 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1779 "./util/configparser.y" /* yacc.c:1646 */ + case 348: +#line 1843 "./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 4263 "util/configparser.c" /* yacc.c:1646 */ +#line 4356 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1786 "./util/configparser.y" /* yacc.c:1646 */ + case 349: +#line 1850 "./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) @@ -4271,11 +4364,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4275 "util/configparser.c" /* yacc.c:1646 */ +#line 4368 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1795 "./util/configparser.y" /* yacc.c:1646 */ + case 350: +#line 1859 "./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) @@ -4284,11 +4377,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4288 "util/configparser.c" /* yacc.c:1646 */ +#line 4381 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1805 "./util/configparser.y" /* yacc.c:1646 */ + case 351: +#line 1869 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -4297,11 +4390,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 4301 "util/configparser.c" /* yacc.c:1646 */ +#line 4394 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1815 "./util/configparser.y" /* yacc.c:1646 */ + case 352: +#line 1879 "./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 && @@ -4329,11 +4422,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4333 "util/configparser.c" /* yacc.c:1646 */ +#line 4426 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1844 "./util/configparser.y" /* yacc.c:1646 */ + case 353: +#line 1908 "./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)); @@ -4342,22 +4435,22 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 4346 "util/configparser.c" /* yacc.c:1646 */ +#line 4439 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1854 "./util/configparser.y" /* yacc.c:1646 */ + case 354: +#line 1918 "./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 4357 "util/configparser.c" /* yacc.c:1646 */ +#line 4450 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1862 "./util/configparser.y" /* yacc.c:1646 */ + case 355: +#line 1926 "./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))) { @@ -4365,11 +4458,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4369 "util/configparser.c" /* yacc.c:1646 */ +#line 4462 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1871 "./util/configparser.y" /* yacc.c:1646 */ + case 356: +#line 1935 "./util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4383,11 +4476,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4387 "util/configparser.c" /* yacc.c:1646 */ +#line 4480 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1886 "./util/configparser.y" /* yacc.c:1646 */ + case 357: +#line 1950 "./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) @@ -4395,19 +4488,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4399 "util/configparser.c" /* yacc.c:1646 */ +#line 4492 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1895 "./util/configparser.y" /* yacc.c:1646 */ + case 358: +#line 1959 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 4407 "util/configparser.c" /* yacc.c:1646 */ +#line 4500 "util/configparser.c" /* yacc.c:1646 */ break; - case 361: -#line 1906 "./util/configparser.y" /* yacc.c:1646 */ + case 369: +#line 1970 "./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) @@ -4416,11 +4509,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4420 "util/configparser.c" /* yacc.c:1646 */ +#line 4513 "util/configparser.c" /* yacc.c:1646 */ break; - case 362: -#line 1916 "./util/configparser.y" /* yacc.c:1646 */ + case 370: +#line 1980 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4428,21 +4521,21 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4432 "util/configparser.c" /* yacc.c:1646 */ +#line 4525 "util/configparser.c" /* yacc.c:1646 */ break; - case 363: -#line 1925 "./util/configparser.y" /* yacc.c:1646 */ + case 371: +#line 1989 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4442 "util/configparser.c" /* yacc.c:1646 */ +#line 4535 "util/configparser.c" /* yacc.c:1646 */ break; - case 364: -#line 1932 "./util/configparser.y" /* yacc.c:1646 */ + case 372: +#line 1996 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4451,122 +4544,122 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4455 "util/configparser.c" /* yacc.c:1646 */ +#line 4548 "util/configparser.c" /* yacc.c:1646 */ break; - case 365: -#line 1942 "./util/configparser.y" /* yacc.c:1646 */ + case 373: +#line 2006 "./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 4465 "util/configparser.c" /* yacc.c:1646 */ +#line 4558 "util/configparser.c" /* yacc.c:1646 */ break; - case 366: -#line 1949 "./util/configparser.y" /* yacc.c:1646 */ + case 374: +#line 2013 "./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 4475 "util/configparser.c" /* yacc.c:1646 */ +#line 4568 "util/configparser.c" /* yacc.c:1646 */ break; - case 367: -#line 1956 "./util/configparser.y" /* yacc.c:1646 */ + case 375: +#line 2020 "./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 4485 "util/configparser.c" /* yacc.c:1646 */ +#line 4578 "util/configparser.c" /* yacc.c:1646 */ break; - case 368: -#line 1963 "./util/configparser.y" /* yacc.c:1646 */ + case 376: +#line 2027 "./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 4495 "util/configparser.c" /* yacc.c:1646 */ +#line 4588 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1970 "./util/configparser.y" /* yacc.c:1646 */ + case 377: +#line 2034 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 4503 "util/configparser.c" /* yacc.c:1646 */ +#line 4596 "util/configparser.c" /* yacc.c:1646 */ break; - case 384: -#line 1987 "./util/configparser.y" /* yacc.c:1646 */ + case 392: +#line 2051 "./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) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4514 "util/configparser.c" /* yacc.c:1646 */ +#line 4607 "util/configparser.c" /* yacc.c:1646 */ break; - case 385: -#line 1995 "./util/configparser.y" /* yacc.c:1646 */ + case 393: +#line 2059 "./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 4524 "util/configparser.c" /* yacc.c:1646 */ +#line 4617 "util/configparser.c" /* yacc.c:1646 */ break; - case 386: -#line 2002 "./util/configparser.y" /* yacc.c:1646 */ + case 394: +#line 2066 "./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) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4535 "util/configparser.c" /* yacc.c:1646 */ +#line 4628 "util/configparser.c" /* yacc.c:1646 */ break; - case 387: -#line 2010 "./util/configparser.y" /* yacc.c:1646 */ + case 395: +#line 2074 "./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) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4546 "util/configparser.c" /* yacc.c:1646 */ +#line 4639 "util/configparser.c" /* yacc.c:1646 */ break; - case 388: -#line 2018 "./util/configparser.y" /* yacc.c:1646 */ + case 396: +#line 2082 "./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 4556 "util/configparser.c" /* yacc.c:1646 */ +#line 4649 "util/configparser.c" /* yacc.c:1646 */ break; - case 389: -#line 2025 "./util/configparser.y" /* yacc.c:1646 */ + case 397: +#line 2089 "./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 4566 "util/configparser.c" /* yacc.c:1646 */ +#line 4659 "util/configparser.c" /* yacc.c:1646 */ break; - case 390: -#line 2032 "./util/configparser.y" /* yacc.c:1646 */ + case 398: +#line 2096 "./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) @@ -4574,11 +4667,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_resolver_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4578 "util/configparser.c" /* yacc.c:1646 */ +#line 4671 "util/configparser.c" /* yacc.c:1646 */ break; - case 391: -#line 2041 "./util/configparser.y" /* yacc.c:1646 */ + case 399: +#line 2105 "./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) @@ -4586,11 +4679,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_resolver_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4590 "util/configparser.c" /* yacc.c:1646 */ +#line 4683 "util/configparser.c" /* yacc.c:1646 */ break; - case 392: -#line 2050 "./util/configparser.y" /* yacc.c:1646 */ + case 400: +#line 2114 "./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) @@ -4598,11 +4691,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_client_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4602 "util/configparser.c" /* yacc.c:1646 */ +#line 4695 "util/configparser.c" /* yacc.c:1646 */ break; - case 393: -#line 2059 "./util/configparser.y" /* yacc.c:1646 */ + case 401: +#line 2123 "./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) @@ -4610,11 +4703,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_client_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4614 "util/configparser.c" /* yacc.c:1646 */ +#line 4707 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 2068 "./util/configparser.y" /* yacc.c:1646 */ + case 402: +#line 2132 "./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) @@ -4622,11 +4715,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_forwarder_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4626 "util/configparser.c" /* yacc.c:1646 */ +#line 4719 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 2077 "./util/configparser.y" /* yacc.c:1646 */ + case 403: +#line 2141 "./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) @@ -4634,29 +4727,29 @@ yyreduce: else cfg_parser->cfg->dnstap_log_forwarder_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4638 "util/configparser.c" /* yacc.c:1646 */ +#line 4731 "util/configparser.c" /* yacc.c:1646 */ break; - case 396: -#line 2086 "./util/configparser.y" /* yacc.c:1646 */ + case 404: +#line 2150 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 4646 "util/configparser.c" /* yacc.c:1646 */ +#line 4739 "util/configparser.c" /* yacc.c:1646 */ break; - case 400: -#line 2095 "./util/configparser.y" /* yacc.c:1646 */ + case 408: +#line 2159 "./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 4656 "util/configparser.c" /* yacc.c:1646 */ +#line 4749 "util/configparser.c" /* yacc.c:1646 */ break; - case 401: -#line 2101 "./util/configparser.y" /* yacc.c:1646 */ + case 409: +#line 2165 "./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) @@ -4665,21 +4758,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4669 "util/configparser.c" /* yacc.c:1646 */ +#line 4762 "util/configparser.c" /* yacc.c:1646 */ break; - case 402: -#line 2111 "./util/configparser.y" /* yacc.c:1646 */ + case 410: +#line 2175 "./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 4679 "util/configparser.c" /* yacc.c:1646 */ +#line 4772 "util/configparser.c" /* yacc.c:1646 */ break; - case 403: -#line 2118 "./util/configparser.y" /* yacc.c:1646 */ + case 411: +#line 2182 "./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)); @@ -4687,42 +4780,42 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 4691 "util/configparser.c" /* yacc.c:1646 */ +#line 4784 "util/configparser.c" /* yacc.c:1646 */ break; - case 404: -#line 2127 "./util/configparser.y" /* yacc.c:1646 */ + case 412: +#line 2191 "./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 4702 "util/configparser.c" /* yacc.c:1646 */ +#line 4795 "util/configparser.c" /* yacc.c:1646 */ break; - case 405: -#line 2135 "./util/configparser.y" /* yacc.c:1646 */ + case 413: +#line 2199 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); OUTYY(("\nP(dnscrypt:)\n")); } -#line 4711 "util/configparser.c" /* yacc.c:1646 */ +#line 4804 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 2147 "./util/configparser.y" /* yacc.c:1646 */ + case 421: +#line 2211 "./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) yyerror("expected yes or no."); else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4722 "util/configparser.c" /* yacc.c:1646 */ +#line 4815 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 2156 "./util/configparser.y" /* yacc.c:1646 */ + case 422: +#line 2220 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); @@ -4731,41 +4824,41 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4735 "util/configparser.c" /* yacc.c:1646 */ +#line 4828 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 2166 "./util/configparser.y" /* yacc.c:1646 */ + case 423: +#line 2230 "./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 4745 "util/configparser.c" /* yacc.c:1646 */ +#line 4838 "util/configparser.c" /* yacc.c:1646 */ break; - case 416: -#line 2173 "./util/configparser.y" /* yacc.c:1646 */ + case 424: +#line 2237 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 4755 "util/configparser.c" /* yacc.c:1646 */ +#line 4848 "util/configparser.c" /* yacc.c:1646 */ break; - case 417: -#line 2180 "./util/configparser.y" /* yacc.c:1646 */ + case 425: +#line 2244 "./util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 4765 "util/configparser.c" /* yacc.c:1646 */ +#line 4858 "util/configparser.c" /* yacc.c:1646 */ break; -#line 4769 "util/configparser.c" /* yacc.c:1646 */ +#line 4862 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -4993,7 +5086,7 @@ yyreturn: #endif return yyresult; } -#line 2186 "./util/configparser.y" /* yacc.c:1906 */ +#line 2250 "./util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index f30fba219..881c2e637 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -216,35 +216,39 @@ extern int yydebug; VAR_RATELIMIT_BELOW_DOMAIN = 426, VAR_IP_RATELIMIT_FACTOR = 427, VAR_RATELIMIT_FACTOR = 428, - VAR_CAPS_WHITELIST = 429, - VAR_CACHE_MAX_NEGATIVE_TTL = 430, - VAR_PERMIT_SMALL_HOLDDOWN = 431, - VAR_QNAME_MINIMISATION = 432, - VAR_QNAME_MINIMISATION_STRICT = 433, - VAR_IP_FREEBIND = 434, - VAR_DEFINE_TAG = 435, - VAR_LOCAL_ZONE_TAG = 436, - VAR_ACCESS_CONTROL_TAG = 437, - VAR_LOCAL_ZONE_OVERRIDE = 438, - VAR_ACCESS_CONTROL_TAG_ACTION = 439, - VAR_ACCESS_CONTROL_TAG_DATA = 440, - VAR_VIEW = 441, - VAR_ACCESS_CONTROL_VIEW = 442, - VAR_VIEW_FIRST = 443, - VAR_SERVE_EXPIRED = 444, - VAR_FAKE_DSA = 445, - VAR_FAKE_SHA1 = 446, - VAR_LOG_IDENTITY = 447, - VAR_HIDE_TRUSTANCHOR = 448, - VAR_USE_SYSTEMD = 449, - VAR_SHM_ENABLE = 450, - VAR_SHM_KEY = 451, - VAR_DNSCRYPT = 452, - VAR_DNSCRYPT_ENABLE = 453, - VAR_DNSCRYPT_PORT = 454, - VAR_DNSCRYPT_PROVIDER = 455, - VAR_DNSCRYPT_SECRET_KEY = 456, - VAR_DNSCRYPT_PROVIDER_CERT = 457 + VAR_SEND_CLIENT_SUBNET = 429, + VAR_CLIENT_SUBNET_OPCODE = 430, + VAR_MAX_CLIENT_SUBNET_IPV4 = 431, + VAR_MAX_CLIENT_SUBNET_IPV6 = 432, + VAR_CAPS_WHITELIST = 433, + VAR_CACHE_MAX_NEGATIVE_TTL = 434, + VAR_PERMIT_SMALL_HOLDDOWN = 435, + VAR_QNAME_MINIMISATION = 436, + VAR_QNAME_MINIMISATION_STRICT = 437, + VAR_IP_FREEBIND = 438, + VAR_DEFINE_TAG = 439, + VAR_LOCAL_ZONE_TAG = 440, + VAR_ACCESS_CONTROL_TAG = 441, + VAR_LOCAL_ZONE_OVERRIDE = 442, + VAR_ACCESS_CONTROL_TAG_ACTION = 443, + VAR_ACCESS_CONTROL_TAG_DATA = 444, + VAR_VIEW = 445, + VAR_ACCESS_CONTROL_VIEW = 446, + VAR_VIEW_FIRST = 447, + VAR_SERVE_EXPIRED = 448, + VAR_FAKE_DSA = 449, + VAR_FAKE_SHA1 = 450, + VAR_LOG_IDENTITY = 451, + VAR_HIDE_TRUSTANCHOR = 452, + VAR_USE_SYSTEMD = 453, + VAR_SHM_ENABLE = 454, + VAR_SHM_KEY = 455, + VAR_DNSCRYPT = 456, + VAR_DNSCRYPT_ENABLE = 457, + VAR_DNSCRYPT_PORT = 458, + VAR_DNSCRYPT_PROVIDER = 459, + VAR_DNSCRYPT_SECRET_KEY = 460, + VAR_DNSCRYPT_PROVIDER_CERT = 461 }; #endif /* Tokens. */ @@ -419,35 +423,39 @@ extern int yydebug; #define VAR_RATELIMIT_BELOW_DOMAIN 426 #define VAR_IP_RATELIMIT_FACTOR 427 #define VAR_RATELIMIT_FACTOR 428 -#define VAR_CAPS_WHITELIST 429 -#define VAR_CACHE_MAX_NEGATIVE_TTL 430 -#define VAR_PERMIT_SMALL_HOLDDOWN 431 -#define VAR_QNAME_MINIMISATION 432 -#define VAR_QNAME_MINIMISATION_STRICT 433 -#define VAR_IP_FREEBIND 434 -#define VAR_DEFINE_TAG 435 -#define VAR_LOCAL_ZONE_TAG 436 -#define VAR_ACCESS_CONTROL_TAG 437 -#define VAR_LOCAL_ZONE_OVERRIDE 438 -#define VAR_ACCESS_CONTROL_TAG_ACTION 439 -#define VAR_ACCESS_CONTROL_TAG_DATA 440 -#define VAR_VIEW 441 -#define VAR_ACCESS_CONTROL_VIEW 442 -#define VAR_VIEW_FIRST 443 -#define VAR_SERVE_EXPIRED 444 -#define VAR_FAKE_DSA 445 -#define VAR_FAKE_SHA1 446 -#define VAR_LOG_IDENTITY 447 -#define VAR_HIDE_TRUSTANCHOR 448 -#define VAR_USE_SYSTEMD 449 -#define VAR_SHM_ENABLE 450 -#define VAR_SHM_KEY 451 -#define VAR_DNSCRYPT 452 -#define VAR_DNSCRYPT_ENABLE 453 -#define VAR_DNSCRYPT_PORT 454 -#define VAR_DNSCRYPT_PROVIDER 455 -#define VAR_DNSCRYPT_SECRET_KEY 456 -#define VAR_DNSCRYPT_PROVIDER_CERT 457 +#define VAR_SEND_CLIENT_SUBNET 429 +#define VAR_CLIENT_SUBNET_OPCODE 430 +#define VAR_MAX_CLIENT_SUBNET_IPV4 431 +#define VAR_MAX_CLIENT_SUBNET_IPV6 432 +#define VAR_CAPS_WHITELIST 433 +#define VAR_CACHE_MAX_NEGATIVE_TTL 434 +#define VAR_PERMIT_SMALL_HOLDDOWN 435 +#define VAR_QNAME_MINIMISATION 436 +#define VAR_QNAME_MINIMISATION_STRICT 437 +#define VAR_IP_FREEBIND 438 +#define VAR_DEFINE_TAG 439 +#define VAR_LOCAL_ZONE_TAG 440 +#define VAR_ACCESS_CONTROL_TAG 441 +#define VAR_LOCAL_ZONE_OVERRIDE 442 +#define VAR_ACCESS_CONTROL_TAG_ACTION 443 +#define VAR_ACCESS_CONTROL_TAG_DATA 444 +#define VAR_VIEW 445 +#define VAR_ACCESS_CONTROL_VIEW 446 +#define VAR_VIEW_FIRST 447 +#define VAR_SERVE_EXPIRED 448 +#define VAR_FAKE_DSA 449 +#define VAR_FAKE_SHA1 450 +#define VAR_LOG_IDENTITY 451 +#define VAR_HIDE_TRUSTANCHOR 452 +#define VAR_USE_SYSTEMD 453 +#define VAR_SHM_ENABLE 454 +#define VAR_SHM_KEY 455 +#define VAR_DNSCRYPT 456 +#define VAR_DNSCRYPT_ENABLE 457 +#define VAR_DNSCRYPT_PORT 458 +#define VAR_DNSCRYPT_PROVIDER 459 +#define VAR_DNSCRYPT_SECRET_KEY 460 +#define VAR_DNSCRYPT_PROVIDER_CERT 461 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -458,7 +466,7 @@ union YYSTYPE char* str; -#line 462 "util/configparser.h" /* yacc.c:1909 */ +#line 470 "util/configparser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index b2ecc0edc..6ecb5301a 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -131,6 +131,8 @@ extern struct config_parser_state* cfg_parser; %token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE %token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN %token VAR_IP_RATELIMIT_FACTOR VAR_RATELIMIT_FACTOR +%token VAR_SEND_CLIENT_SUBNET VAR_CLIENT_SUBNET_OPCODE +%token VAR_MAX_CLIENT_SUBNET_IPV4 VAR_MAX_CLIENT_SUBNET_IPV6 %token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL VAR_PERMIT_SMALL_HOLDDOWN %token VAR_QNAME_MINIMISATION VAR_QNAME_MINIMISATION_STRICT VAR_IP_FREEBIND %token VAR_DEFINE_TAG VAR_LOCAL_ZONE_TAG VAR_ACCESS_CONTROL_TAG @@ -212,6 +214,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_ratelimit_for_domain | server_ratelimit_below_domain | server_ratelimit_factor | server_ip_ratelimit_factor | + server_send_client_subnet | server_client_subnet_opcode | + server_max_client_subnet_ipv4 | server_max_client_subnet_ipv6 | server_caps_whitelist | server_cache_max_negative_ttl | server_permit_small_holddown | server_qname_minimisation | server_ip_freebind | server_define_tag | server_local_zone_tag | @@ -353,6 +357,66 @@ server_port: VAR_PORT STRING_ARG free($2); } ; +server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG + { + #ifdef CLIENT_SUBNET + OUTYY(("P(server_send_client_subnet:%s)\n", $2)); + if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, $2)) + fatal_exit("out of memory adding client-subnet"); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + } + ; +server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG + { + #ifdef CLIENT_SUBNET + OUTYY(("P(client_subnet_opcode:%s)\n", $2)); + if(atoi($2) == 0 && strcmp($2, "0") != 0) + yyerror("option code expected"); + else if(atoi($2) > 65535 || atoi($2) < 0) + yyerror("option code must be in interval [0, 65535]"); + else cfg_parser->cfg->client_subnet_opcode = atoi($2); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free($2); + } + ; +server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG + { + #ifdef CLIENT_SUBNET + OUTYY(("P(max_client_subnet_ipv4:%s)\n", $2)); + if(atoi($2) == 0 && strcmp($2, "0") != 0) + yyerror("IPv4 subnet length expected"); + else if (atoi($2) > 32) + cfg_parser->cfg->max_client_subnet_ipv4 = 32; + else if (atoi($2) < 0) + cfg_parser->cfg->max_client_subnet_ipv4 = 0; + else cfg_parser->cfg->max_client_subnet_ipv4 = atoi($2); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free($2); + } + ; +server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG + { + #ifdef CLIENT_SUBNET + OUTYY(("P(max_client_subnet_ipv6:%s)\n", $2)); + if(atoi($2) == 0 && strcmp($2, "0") != 0) + yyerror("Ipv6 subnet length expected"); + else if (atoi($2) > 128) + cfg_parser->cfg->max_client_subnet_ipv6 = 128; + else if (atoi($2) < 0) + cfg_parser->cfg->max_client_subnet_ipv6 = 0; + else cfg_parser->cfg->max_client_subnet_ipv6 = atoi($2); + #else + OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); + #endif + free($2); + } + ; server_interface: VAR_INTERFACE STRING_ARG { OUTYY(("P(server_interface:%s)\n", $2)); diff --git a/util/data/msgreply.c b/util/data/msgreply.c index d1b7a4388..be1b191fb 100644 --- a/util/data/msgreply.c +++ b/util/data/msgreply.c @@ -1057,6 +1057,18 @@ int inplace_cb_query_call(struct module_env* env, struct query_info* qinfo, return 1; } +int inplace_cb_edns_back_parsed_call(struct module_env* env, + struct module_qstate* qstate) +{ + struct inplace_cb_edns_back_parsed* cb = + env->inplace_cb_lists[inplace_cb_edns_back_parsed]; + for(; cb; cb=cb->next) { + fptr_ok(fptr_whitelist_inplace_cb_edns_back_parsed(cb->cb)); + (void)(*cb->cb)(qstate, cb->cb_arg); + } + return 1; +} + struct edns_option* edns_opt_copy_region(struct edns_option* list, struct regional* region) { diff --git a/util/data/msgreply.h b/util/data/msgreply.h index 60aacc031..bccfd270c 100644 --- a/util/data/msgreply.h +++ b/util/data/msgreply.h @@ -52,6 +52,7 @@ struct edns_data; struct edns_option; struct inplace_cb_reply; struct inplace_cb_query; +struct inplace_cb_edns_back_parsed; struct module_qstate; struct module_env; struct msg_parse; @@ -622,6 +623,17 @@ int inplace_cb_query_call(struct module_env* env, struct query_info* qinfo, uint8_t* zone, size_t zonelen, struct module_qstate* qstate, struct regional* region); +/** + * Call the registered functions in the inplace_cb_edns_back_parsed linked list. + * This function is going to get called after receiving a reply from a + * nameserver. + * @param env: module environment. + * @param qstate: module qstate. + * @return false on failure (a callback function returned an error). + */ +int inplace_cb_edns_back_parsed_call(struct module_env* env, + struct module_qstate* qstate); + /** * Copy edns option list allocated to the new region */ diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index bf7b943ff..b28cf7b64 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -83,6 +83,9 @@ #ifdef USE_CACHEDB #include "cachedb/cachedb.h" #endif +#ifdef CLIENT_SUBNET +#include "edns-subnet/subnetmod.h" +#endif int fptr_whitelist_comm_point(comm_point_callback_type *fptr) @@ -219,6 +222,9 @@ fptr_whitelist_hash_sizefunc(lruhash_sizefunc_type fptr) else if(fptr == &rate_sizefunc) return 1; else if(fptr == &ip_rate_sizefunc) return 1; else if(fptr == &test_slabhash_sizefunc) return 1; +#ifdef CLIENT_SUBNET + else if(fptr == &msg_cache_sizefunc) return 1; +#endif return 0; } @@ -257,6 +263,9 @@ fptr_whitelist_hash_deldatafunc(lruhash_deldatafunc_type fptr) else if(fptr == &key_entry_deldatafunc) return 1; else if(fptr == &rate_deldatafunc) return 1; else if(fptr == &test_slabhash_deldata) return 1; +#ifdef CLIENT_SUBNET + else if(fptr == &subnet_data_delete) return 1; +#endif return 0; } @@ -325,6 +334,9 @@ fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id)) #endif #ifdef USE_CACHEDB else if(fptr == &cachedb_init) return 1; +#endif +#ifdef CLIENT_SUBNET + else if(fptr == &subnetmod_init) return 1; #endif return 0; } @@ -341,6 +353,9 @@ fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id)) #endif #ifdef USE_CACHEDB else if(fptr == &cachedb_deinit) return 1; +#endif +#ifdef CLIENT_SUBNET + else if(fptr == &subnetmod_deinit) return 1; #endif return 0; } @@ -358,6 +373,9 @@ fptr_whitelist_mod_operate(void (*fptr)(struct module_qstate* qstate, #endif #ifdef USE_CACHEDB else if(fptr == &cachedb_operate) return 1; +#endif +#ifdef CLIENT_SUBNET + else if(fptr == &subnetmod_operate) return 1; #endif return 0; } @@ -375,6 +393,9 @@ fptr_whitelist_mod_inform_super(void (*fptr)( #endif #ifdef USE_CACHEDB else if(fptr == &cachedb_inform_super) return 1; +#endif +#ifdef CLIENT_SUBNET + else if(fptr == &subnetmod_inform_super) return 1; #endif return 0; } @@ -392,6 +413,9 @@ fptr_whitelist_mod_clear(void (*fptr)(struct module_qstate* qstate, #endif #ifdef USE_CACHEDB else if(fptr == &cachedb_clear) return 1; +#endif +#ifdef CLIENT_SUBNET + else if(fptr == &subnetmod_clear) return 1; #endif return 0; } @@ -408,6 +432,9 @@ fptr_whitelist_mod_get_mem(size_t (*fptr)(struct module_env* env, int id)) #endif #ifdef USE_CACHEDB else if(fptr == &cachedb_get_mem) return 1; +#endif +#ifdef CLIENT_SUBNET + else if(fptr == &subnetmod_get_mem) return 1; #endif return 0; } @@ -471,5 +498,19 @@ int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_type* fptr, int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_type* ATTR_UNUSED(fptr)) { +#ifdef CLIENT_SUBNET + if(fptr == &ecs_whitelist_check) + return 1; +#endif + return 0; +} + +int fptr_whitelist_inplace_cb_edns_back_parsed( + inplace_cb_edns_back_parsed_func_type* ATTR_UNUSED(fptr)) +{ +#ifdef CLIENT_SUBNET + if(fptr == &ecs_edns_back_parsed) + return 1; +#endif return 0; } diff --git a/util/fptr_wlist.h b/util/fptr_wlist.h index 5ab69f887..3fe9a879a 100644 --- a/util/fptr_wlist.h +++ b/util/fptr_wlist.h @@ -351,6 +351,14 @@ int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_type* fptr, */ int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_type* fptr); +/** + * Check function pointer whitelist for inplace_cb_edns_back_parsed func values. + * @param fptr: function pointer to check. + * @return false if not in whitelist. + */ +int fptr_whitelist_inplace_cb_edns_back_parsed( + inplace_cb_edns_back_parsed_func_type* fptr); + /** Due to module breakage by fptr wlist, these test app declarations * are presented here */ /** diff --git a/util/module.c b/util/module.c index 91983b182..6af46c8e3 100644 --- a/util/module.c +++ b/util/module.c @@ -216,8 +216,8 @@ void inplace_cb_reply_servfail_delete(struct module_env* env) } int -inplace_cb_query_register(inplace_cb_query_func_type* cb, void* cb_arg, - struct module_env* env) +inplace_cb_query_register(inplace_cb_query_func_type* cb, void* cbarg, + size_t cbarg_len, struct module_env* env) { struct inplace_cb_query* callback; struct inplace_cb_query** prevp; @@ -234,7 +234,15 @@ inplace_cb_query_register(inplace_cb_query_func_type* cb, void* cb_arg, } callback->next = NULL; callback->cb = cb; - callback->cb_arg = cb_arg; + if(cbarg) { + if(!(callback->cb_arg = calloc(1, cbarg_len))){ + log_err("out of memory during edns callback argument" + "registration."); + free(callback); + return 0; + } + memcpy(callback->cb_arg, cbarg, cbarg_len); + } prevp = (struct inplace_cb_query**) &env->inplace_cb_lists[inplace_cb_query]; @@ -253,6 +261,7 @@ inplace_cb_query_delete(struct module_env* env) /* delete list */ while(curr) { tmp = curr->next; + free(curr->cb_arg); free(curr); curr = tmp; } @@ -260,6 +269,61 @@ inplace_cb_query_delete(struct module_env* env) env->inplace_cb_lists[inplace_cb_query] = NULL; } +int +inplace_cb_edns_back_parsed_register(inplace_cb_edns_back_parsed_func_type* cb, + void* cbarg, size_t cbarg_len, struct module_env* env) +{ + struct inplace_cb_edns_back_parsed* callback; + struct inplace_cb_edns_back_parsed** prevp; + if(env->worker) { + log_err("invalid edns callback registration: " + "trying to register callback after module init phase"); + return 0; + } + + callback = (struct inplace_cb_edns_back_parsed*)calloc(1, sizeof(*callback)); + if(callback == NULL) { + log_err("out of memory during edns callback registration."); + return 0; + } + callback->next = NULL; + callback->cb = cb; + if(cbarg) { + if(!(callback->cb_arg = calloc(1, cbarg_len))){ + log_err("out of memory during edns callback argument" + "registration."); + free(callback); + return 0; + } + memcpy(callback->cb_arg, cbarg, cbarg_len); + } + + prevp = (struct inplace_cb_edns_back_parsed**) + &env->inplace_cb_lists[inplace_cb_edns_back_parsed]; + /* append at end of list */ + while(*prevp != NULL) + prevp = &((*prevp)->next); + *prevp = callback; + return 1; +} + +void +inplace_cb_edns_back_parsed_delete(struct module_env* env) +{ + struct inplace_cb_edns_back_parsed* curr = + env->inplace_cb_lists[inplace_cb_edns_back_parsed]; + struct inplace_cb_edns_back_parsed* tmp; + /* delete list */ + while(curr) { + tmp = curr->next; + free(curr->cb_arg); + free(curr); + curr = tmp; + } + /* update head pointer */ + env->inplace_cb_lists[inplace_cb_edns_back_parsed] = NULL; +} + void inplace_cb_lists_delete(struct module_env* env) { @@ -292,9 +356,11 @@ edns_bypass_cache_stage(struct edns_option* list, struct module_env* env) } int -edns_unique_mesh_state(struct edns_option* list, struct module_env* env) +unique_mesh_state(struct edns_option* list, struct module_env* env) { size_t i; + if(env->unique_mesh) + return 1; for(; list; list=list->next) for(i=0; iedns_known_options_num; i++) if(env->edns_known_options[i].opt_code == list->opt_code && diff --git a/util/module.h b/util/module.h index 5803353e0..dfa84b1cf 100644 --- a/util/module.h +++ b/util/module.h @@ -197,6 +197,8 @@ enum inplace_cb_list_type { inplace_cb_reply_servfail, /* Inplace callbacks for when a query is ready to be sent to the back.*/ inplace_cb_query, + /* Inplace callback for when a reply is received from the back. */ + inplace_cb_edns_back_parsed, /* Total number of types. Used for array initialization. * Should always be last. */ inplace_cb_types_total @@ -290,6 +292,30 @@ struct inplace_cb_query { void* cb_arg; }; +/** + * Inplace callback function called after receiving reply from back. + * Called as func(qstate, cb_args) + * Where: + * qstate: the query state + * cb_args: argument passed when registering callback. + */ +typedef int inplace_cb_edns_back_parsed_func_type(struct module_qstate* qstate, + void* cb_args); + +/** + * Inplace callback list of registered routines to be called after receiving a + * reply from back. + */ +struct inplace_cb_edns_back_parsed { + /** next in list */ + struct inplace_cb_edns_back_parsed* next; + /** + * Inplace callback routine for cache stage response. + * called as cb(qstate, cb_args); + */ + inplace_cb_edns_back_parsed_func_type* cb; + void* cb_arg; +}; /** * Module environment. * Services and data provided to the module. @@ -454,6 +480,9 @@ struct module_env { struct edns_known_option* edns_known_options; /* Number of known edns options */ size_t edns_known_options_num; + + /* Make every mesh state unique, do not aggregate mesh states. */ + int unique_mesh; }; /** @@ -764,13 +793,15 @@ void inplace_cb_reply_servfail_delete(struct module_env* env); /** * Register an inplace callback function called before quering a nameserver. * @param cb: pointer to the callback function. - * @param cb_arg: optional argument for the callback function. + * @param cbarg: optional argument for the callback function. + * @param cbarg_len: length of the argument for the callback function, 0 if + * empty. * @param env: the module environment. * @return true on success, false on failure (out of memory or trying to * register after the environment is copied to the threads.) */ -int inplace_cb_query_register(inplace_cb_query_func_type* cb, void* cb_arg, - struct module_env* env); +int inplace_cb_query_register(inplace_cb_query_func_type* cb, void* cbarg, + size_t cbarg_len, struct module_env* env); /** * Delete the inplace_cb_query callback linked list. @@ -778,6 +809,26 @@ int inplace_cb_query_register(inplace_cb_query_func_type* cb, void* cb_arg, */ void inplace_cb_query_delete(struct module_env* env); +/** + * Register an inplace callback function called after receiving an reply from a + * namerserver. + * @param cb: pointer to the callback function. + * @param cbarg: optional argument for the callback function. + * @param cbarg_len: length of the argument for the callback function, 0 if + * empty. + * @param env: the module environment. + * @return true on success, false on failure (out of memory or trying to + * register after the environment is copied to the threads.) + */ +int inplace_cb_edns_back_parsed_register(inplace_cb_edns_back_parsed_func_type* cb, + void* cbarg, size_t cbarg_len, struct module_env* env); + +/** + * Delete the inplace_cb_edns_back_parsed callback linked list. + * @param env: the module environment. + */ +void inplace_cb_edns_back_parsed_delete(struct module_env* env); + /** * Delete all the inplace callback linked lists. * @param env: the module environment. @@ -805,13 +856,14 @@ int edns_bypass_cache_stage(struct edns_option* list, struct module_env* env); /** - * Check if an edns option needs a unique mesh state. + * Check if an unique mesh state is required. Might be triggered by EDNS option + * or set for the complete env. * @param list: the edns options. * @param env: the module environment. * @return true if an edns option needs a unique mesh state, * false otherwise. */ -int edns_unique_mesh_state(struct edns_option* list, struct module_env* env); +int unique_mesh_state(struct edns_option* list, struct module_env* env); /** * Log the known edns options.