From dc6c04b24382acca435878d6edb12dcc17cf3ca2 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 12 Aug 2022 09:54:29 +0200 Subject: [PATCH 01/60] - Fix to log accept error ENFILE and EMFILE errno, but slowly, once per 10 seconds. Also log accept failures when no slow down is used. --- doc/Changelog | 4 ++++ util/netevent.c | 14 ++++++++++++++ util/netevent.h | 2 ++ 3 files changed, 20 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 24605888b..0e67bf0b1 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +12 August 2022: Wouter + - Fix to log accept error ENFILE and EMFILE errno, but slowly, once + per 10 seconds. Also log accept failures when no slow down is used. + 5 August 2022: Wouter - Fix #734 [FR] enable unbound-checkconf to detect more (basic) errors. diff --git a/util/netevent.c b/util/netevent.c index 841e09787..c2b1ac7d4 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -132,6 +132,8 @@ struct internal_base { struct ub_event* slow_accept; /** true if slow_accept is enabled */ int slow_accept_enabled; + /** last log time for slow logging of file descriptor errors */ + time_t last_slow_log; }; /** @@ -889,6 +891,15 @@ int comm_point_perform_accept(struct comm_point* c, struct timeval tv; verbose(VERB_ALGO, "out of file descriptors: " "slow accept"); + ub_comm_base_now(b); + if(b->eb->last_slow_log+SLOW_LOG_TIME <= + b->eb->secs) { + b->eb->last_slow_log = b->eb->secs; + log_err("accept failed, slow down " + "accept for %d msec: %s", + NETEVENT_SLOW_ACCEPT_TIME, + sock_strerror(errno)); + } b->eb->slow_accept_enabled = 1; fptr_ok(fptr_whitelist_stop_accept( b->stop_accept)); @@ -909,6 +920,9 @@ int comm_point_perform_accept(struct comm_point* c, /* we do not want to log here, * error: "event_add failed." */ } + } else { + log_err("accept, with no slow down, " + "failed: %s", sock_strerror(errno)); } return -1; } diff --git a/util/netevent.h b/util/netevent.h index 9f4d28ba9..4e82703e0 100644 --- a/util/netevent.h +++ b/util/netevent.h @@ -102,6 +102,8 @@ typedef int comm_point_callback_type(struct comm_point*, void*, int, /** timeout to slow accept calls when not possible, in msec. */ #define NETEVENT_SLOW_ACCEPT_TIME 2000 +/** timeout to slow down log print, so it does not spam the logs, in sec */ +#define SLOW_LOG_TIME 10 /** * A communication point dispatcher. Thread specific. From e6f878ee7124d09610b3c110ba59fd2666f3ec92 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 22 Aug 2022 09:12:08 +0200 Subject: [PATCH 02/60] - Fix #741: systemd socket activation fails on IPv6. --- doc/Changelog | 3 +++ services/listen_dnsport.c | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 0e67bf0b1..352516525 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +22 August 2022: Wouter + - Fix #741: systemd socket activation fails on IPv6. + 12 August 2022: Wouter - Fix to log accept error ENFILE and EMFILE errno, but slowly, once per 10 seconds. Also log accept failures when no slow down is used. diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 467419b09..1263e0ead 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -458,7 +458,14 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr, int action; # endif # if defined(IPV6_V6ONLY) - if(v6only) { + if(v6only +# ifdef HAVE_SYSTEMD + /* Systemd wants to control if the socket is v6 only + * or both, with BindIPv6Only=default, ipv6-only or + * both in systemd.socket, so it is not set here. */ + && !got_fd_from_systemd +# endif + ) { int val=(v6only==2)?0:1; if (setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, (void*)&val, (socklen_t)sizeof(val)) < 0) { @@ -776,7 +783,14 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, (void)reuseport; #endif /* defined(SO_REUSEPORT) */ #if defined(IPV6_V6ONLY) - if(addr->ai_family == AF_INET6 && v6only) { + if(addr->ai_family == AF_INET6 && v6only +# ifdef HAVE_SYSTEMD + /* Systemd wants to control if the socket is v6 only + * or both, with BindIPv6Only=default, ipv6-only or + * both in systemd.socket, so it is not set here. */ + && !got_fd_from_systemd +# endif + ) { if(setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, (void*)&on, (socklen_t)sizeof(on)) < 0) { log_err("setsockopt(..., IPV6_V6ONLY, ...) failed: %s", From 2fa1c17cd9d1af515c2fa997726c9433d387f3f3 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 31 Aug 2022 10:09:39 +0200 Subject: [PATCH 03/60] - Fix to avoid process wide fcntl calls mixed with nonblocking operations after a blocked write. --- doc/Changelog | 4 ++++ util/netevent.c | 56 +++++++++++++++++++++++++++++++++---------------- 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 352516525..ed3812c69 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +31 August 2022: Wouter + - Fix to avoid process wide fcntl calls mixed with nonblocking + operations after a blocked write. + 22 August 2022: Wouter - Fix #741: systemd socket activation fails on IPv6. diff --git a/util/netevent.c b/util/netevent.c index c2b1ac7d4..5bc8d8bcd 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -379,19 +379,30 @@ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, WSAGetLastError() == WSAENOBUFS || WSAGetLastError() == WSAEWOULDBLOCK) { #endif - int e; - fd_set_block(c->fd); - if (!is_connected) { - sent = sendto(c->fd, (void*)sldns_buffer_begin(packet), - sldns_buffer_remaining(packet), 0, - addr, addrlen); - } else { - sent = send(c->fd, (void*)sldns_buffer_begin(packet), - sldns_buffer_remaining(packet), 0); + /* if we set the fd blocking, other threads suddenly + * have a blocking fd that they operate on */ + while( +#ifndef USE_WINSOCK + errno == EAGAIN || +# ifdef EWOULDBLOCK + errno == EWOULDBLOCK || +# endif + errno == ENOBUFS +#else + WSAGetLastError() == WSAEINPROGRESS || + WSAGetLastError() == WSAENOBUFS || + WSAGetLastError() == WSAEWOULDBLOCK +#endif + ) { + if (!is_connected) { + sent = sendto(c->fd, (void*)sldns_buffer_begin(packet), + sldns_buffer_remaining(packet), 0, + addr, addrlen); + } else { + sent = send(c->fd, (void*)sldns_buffer_begin(packet), + sldns_buffer_remaining(packet), 0); + } } - e = errno; - fd_set_nonblock(c->fd); - errno = e; } } if(sent == -1) { @@ -568,12 +579,21 @@ comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet, WSAGetLastError() == WSAENOBUFS || WSAGetLastError() == WSAEWOULDBLOCK) { #endif - int e; - fd_set_block(c->fd); - sent = sendmsg(c->fd, &msg, 0); - e = errno; - fd_set_nonblock(c->fd); - errno = e; + while( +#ifndef USE_WINSOCK + errno == EAGAIN || +# ifdef EWOULDBLOCK + errno == EWOULDBLOCK || +# endif + errno == ENOBUFS +#else + WSAGetLastError() == WSAEINPROGRESS || + WSAGetLastError() == WSAENOBUFS || + WSAGetLastError() == WSAEWOULDBLOCK +#endif + ) { + sent = sendmsg(c->fd, &msg, 0); + } } } if(sent == -1) { From 10a5a5880a8a902a3d09a485eacbc02be9e7cbdd Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 31 Aug 2022 10:11:25 +0200 Subject: [PATCH 04/60] - Patch from Vadim Fedorenko that adds MSG_DONTWAIT to receive operations, so that instruction reordering does not cause mistakenly blocking socket operations. --- dnstap/dtstream.c | 2 +- dnstap/unbound-dnstap-socket.c | 2 +- doc/Changelog | 3 +++ util/net_help.h | 5 +++++ util/netevent.c | 12 ++++++------ 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index a1dd9703e..377ae9916 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -954,7 +954,7 @@ static int dtio_write_more(struct dt_io_thread* dtio) * -1: continue, >0: number of bytes read into buffer */ static ssize_t receive_bytes(struct dt_io_thread* dtio, void* buf, size_t len) { ssize_t r; - r = recv(dtio->fd, (void*)buf, len, 0); + r = recv(dtio->fd, (void*)buf, len, MSG_DONTWAIT); if(r == -1) { char* to = dtio->socket_path; if(!to) to = dtio->ip_str; diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 63292fbca..1cc450277 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -617,7 +617,7 @@ static void log_data_frame(uint8_t* pkt, size_t len) static ssize_t receive_bytes(struct tap_data* data, int fd, void* buf, size_t len) { - ssize_t ret = recv(fd, buf, len, 0); + ssize_t ret = recv(fd, buf, len, MSG_DONTWAIT); if(ret == 0) { /* closed */ if(verbosity) log_info("dnstap client stream closed from %s", diff --git a/doc/Changelog b/doc/Changelog index ed3812c69..10d16e6eb 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,9 @@ 31 August 2022: Wouter - Fix to avoid process wide fcntl calls mixed with nonblocking operations after a blocked write. + - Patch from Vadim Fedorenko that adds MSG_DONTWAIT to receive + operations, so that instruction reordering does not cause mistakenly + blocking socket operations. 22 August 2022: Wouter - Fix #741: systemd socket activation fails on IPv6. diff --git a/util/net_help.h b/util/net_help.h index 4dd398460..fc23b2181 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -96,6 +96,11 @@ extern uint16_t EDNS_ADVERTISED_SIZE; /** return a random 16-bit number given a random source */ #define GET_RANDOM_ID(rnd) (((unsigned)ub_random(rnd)>>8) & 0xffff) +/** define MSG_DONTWAIT for unsupported platforms */ +#ifndef MSG_DONTWAIT +#define MSG_DONTWAIT 0 +#endif + /** minimal responses when positive answer */ extern int MINIMAL_RESPONSES; diff --git a/util/netevent.c b/util/netevent.c index 5bc8d8bcd..6e2412f5a 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -701,7 +701,7 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg) msg.msg_controllen = sizeof(ancil.buf); #endif /* S_SPLINT_S */ msg.msg_flags = 0; - rcv = recvmsg(fd, &msg, 0); + rcv = recvmsg(fd, &msg, MSG_DONTWAIT); if(rcv == -1) { if(errno != EAGAIN && errno != EINTR && udp_recv_needs_log(errno)) { @@ -781,7 +781,7 @@ comm_point_udp_callback(int fd, short event, void* arg) log_assert(fd != -1); log_assert(sldns_buffer_remaining(rep.c->buffer) > 0); rcv = recvfrom(fd, (void*)sldns_buffer_begin(rep.c->buffer), - sldns_buffer_remaining(rep.c->buffer), 0, + sldns_buffer_remaining(rep.c->buffer), MSG_DONTWAIT, (struct sockaddr*)&rep.addr, &rep.addrlen); if(rcv == -1) { #ifndef USE_WINSOCK @@ -1703,7 +1703,7 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) if(c->tcp_byte_count < sizeof(uint16_t)) { /* read length bytes */ r = recv(fd,(void*)sldns_buffer_at(c->buffer,c->tcp_byte_count), - sizeof(uint16_t)-c->tcp_byte_count, 0); + sizeof(uint16_t)-c->tcp_byte_count, MSG_DONTWAIT); if(r == 0) { if(c->tcp_req_info) return tcp_req_info_handle_read_close(c->tcp_req_info); @@ -1794,7 +1794,7 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) if(sldns_buffer_remaining(c->buffer) == 0) log_err("in comm_point_tcp_handle_read buffer_remaining is not > 0 as expected, continuing with (harmless) 0 length recv"); r = recv(fd, (void*)sldns_buffer_current(c->buffer), - sldns_buffer_remaining(c->buffer), 0); + sldns_buffer_remaining(c->buffer), MSG_DONTWAIT); if(r == 0) { if(c->tcp_req_info) return tcp_req_info_handle_read_close(c->tcp_req_info); @@ -2336,7 +2336,7 @@ http_read_more(int fd, struct comm_point* c) ssize_t r; log_assert(sldns_buffer_remaining(c->buffer) > 0); r = recv(fd, (void*)sldns_buffer_current(c->buffer), - sldns_buffer_remaining(c->buffer), 0); + sldns_buffer_remaining(c->buffer), MSG_DONTWAIT); if(r == 0) { return 0; } else if(r == -1) { @@ -2774,7 +2774,7 @@ ssize_t http2_recv_cb(nghttp2_session* ATTR_UNUSED(session), uint8_t* buf, } #endif /* HAVE_SSL */ - ret = recv(h2_session->c->fd, buf, len, 0); + ret = recv(h2_session->c->fd, buf, len, MSG_DONTWAIT); if(ret == 0) { return NGHTTP2_ERR_EOF; } else if(ret < 0) { From ec5812a748bdade749409cba331c9f32cac9a15a Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 31 Aug 2022 11:54:11 +0200 Subject: [PATCH 05/60] - Fix to wait for blocked write on UDP sockets, with a timeout if it takes too long the packet is dropped. --- config.h.in | 6 ++++ configure | 4 +-- configure.ac | 4 +-- doc/Changelog | 2 ++ util/netevent.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++--- 5 files changed, 98 insertions(+), 8 deletions(-) diff --git a/config.h.in b/config.h.in index cc1fbe864..2a5214803 100644 --- a/config.h.in +++ b/config.h.in @@ -457,6 +457,12 @@ /* Define to 1 if you have the `OSSL_PARAM_BLD_new' function. */ #undef HAVE_OSSL_PARAM_BLD_NEW +/* Define to 1 if you have the `poll' function. */ +#undef HAVE_POLL + +/* Define to 1 if you have the header file. */ +#undef HAVE_POLL_H + /* Define if you have POSIX threads libraries and header files. */ #undef HAVE_PTHREAD diff --git a/configure b/configure index f40187910..5e489d4ba 100755 --- a/configure +++ b/configure @@ -14772,7 +14772,7 @@ fi fi # Checks for header files. -for ac_header in stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/select.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h ifaddrs.h +for ac_header in stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/select.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h ifaddrs.h poll.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default @@ -20591,7 +20591,7 @@ if test "$ac_res" != no; then : fi -for ac_func in tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs if_nametoindex +for ac_func in tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs if_nametoindex poll do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" diff --git a/configure.ac b/configure.ac index bf8aa9d8c..63902646e 100644 --- a/configure.ac +++ b/configure.ac @@ -397,7 +397,7 @@ PKG_PROG_PKG_CONFIG fi # Checks for header files. -AC_CHECK_HEADERS([stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/select.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h ifaddrs.h],,, [AC_INCLUDES_DEFAULT]) +AC_CHECK_HEADERS([stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/select.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h ifaddrs.h poll.h],,, [AC_INCLUDES_DEFAULT]) # net/if.h portability for Darwin see: # https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Header-Portability.html AC_CHECK_HEADERS([net/if.h],,, [ @@ -1644,7 +1644,7 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([ AC_MSG_RESULT(no)) AC_SEARCH_LIBS([setusercontext], [util]) -AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs if_nametoindex]) +AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs if_nametoindex poll]) AC_CHECK_FUNCS([setresuid],,[AC_CHECK_FUNCS([setreuid])]) AC_CHECK_FUNCS([setresgid],,[AC_CHECK_FUNCS([setregid])]) diff --git a/doc/Changelog b/doc/Changelog index 10d16e6eb..212df9a88 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -4,6 +4,8 @@ - Patch from Vadim Fedorenko that adds MSG_DONTWAIT to receive operations, so that instruction reordering does not cause mistakenly blocking socket operations. + - Fix to wait for blocked write on UDP sockets, with a timeout if it + takes too long the packet is dropped. 22 August 2022: Wouter - Fix #741: systemd socket activation fails on IPv6. diff --git a/util/netevent.c b/util/netevent.c index 6e2412f5a..cf9a38f61 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -60,6 +60,9 @@ #ifdef HAVE_NETDB_H #include #endif +#ifdef HAVE_POLL_H +#include +#endif #ifdef HAVE_OPENSSL_SSL_H #include @@ -107,6 +110,9 @@ #define NUM_UDP_PER_SELECT 1 #endif +/** timeout in millisec to wait for write to unblock, packets dropped after.*/ +#define SEND_BLOCKED_WAIT_TIMEOUT 200 + /** * The internal event structure for keeping ub_event info for the event. * Possibly other structures (list, tree) this is part of. @@ -369,13 +375,14 @@ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, * we want to send the answer, and we will wait for * the ethernet interface buffer to have space. */ #ifndef USE_WINSOCK - if(errno == EAGAIN || + if(errno == EAGAIN || errno == EINTR || # ifdef EWOULDBLOCK errno == EWOULDBLOCK || # endif errno == ENOBUFS) { #else if(WSAGetLastError() == WSAEINPROGRESS || + WSAGetLastError() == WSAEINTR || WSAGetLastError() == WSAENOBUFS || WSAGetLastError() == WSAEWOULDBLOCK) { #endif @@ -383,17 +390,54 @@ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, * have a blocking fd that they operate on */ while( #ifndef USE_WINSOCK - errno == EAGAIN || + errno == EAGAIN || errno == EINTR || # ifdef EWOULDBLOCK errno == EWOULDBLOCK || # endif errno == ENOBUFS #else WSAGetLastError() == WSAEINPROGRESS || + WSAGetLastError() == WSAEINTR || WSAGetLastError() == WSAENOBUFS || WSAGetLastError() == WSAEWOULDBLOCK #endif ) { +#if defined(HAVE_POLL) || defined(USE_WINSOCK) + struct pollfd p; + int pret; + memset(&p, 0, sizeof(p)); + p.fd = c->fd; + p.events = POLLOUT | POLLERR | POLLHUP; +# ifndef USE_WINSOCK + pret = poll(&p, 1, SEND_BLOCKED_WAIT_TIMEOUT); +# else + pret = WSAPoll(&p, 1, + SEND_BLOCKED_WAIT_TIMEOUT); +# endif + if(pret == 0) { + /* timer expired */ + verbose(VERB_OPS, "send udp blocked " + "for long, dropping packet."); + return 0; + } else if(pret < 0 && +#ifndef USE_WINSOCK + errno != EAGAIN && errno != EINTR && +# ifdef EWOULDBLOCK + errno != EWOULDBLOCK && +# endif + errno != ENOBUFS +#else + WSAGetLastError() != WSAEINPROGRESS && + WSAGetLastError() != WSAEINTR && + WSAGetLastError() != WSAENOBUFS && + WSAGetLastError() != WSAEWOULDBLOCK +#endif + ) { + log_err("poll udp out failed: %s", + sock_strerror(errno)); + return 0; + } +#endif /* defined(HAVE_POLL) || defined(USE_WINSOCK) */ if (!is_connected) { sent = sendto(c->fd, (void*)sldns_buffer_begin(packet), sldns_buffer_remaining(packet), 0, @@ -569,29 +613,67 @@ comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet, * we want to send the answer, and we will wait for * the ethernet interface buffer to have space. */ #ifndef USE_WINSOCK - if(errno == EAGAIN || + if(errno == EAGAIN || errno == EINTR || # ifdef EWOULDBLOCK errno == EWOULDBLOCK || # endif errno == ENOBUFS) { #else if(WSAGetLastError() == WSAEINPROGRESS || + WSAGetLastError() == WSAEINTR || WSAGetLastError() == WSAENOBUFS || WSAGetLastError() == WSAEWOULDBLOCK) { #endif while( #ifndef USE_WINSOCK - errno == EAGAIN || + errno == EAGAIN || errno == EINTR || # ifdef EWOULDBLOCK errno == EWOULDBLOCK || # endif errno == ENOBUFS #else WSAGetLastError() == WSAEINPROGRESS || + WSAGetLastError() == WSAEINTR || WSAGetLastError() == WSAENOBUFS || WSAGetLastError() == WSAEWOULDBLOCK #endif ) { +#if defined(HAVE_POLL) || defined(USE_WINSOCK) + struct pollfd p; + int pret; + memset(&p, 0, sizeof(p)); + p.fd = c->fd; + p.events = POLLOUT | POLLERR | POLLHUP; +# ifndef USE_WINSOCK + pret = poll(&p, 1, SEND_BLOCKED_WAIT_TIMEOUT); +# else + pret = WSAPoll(&p, 1, + SEND_BLOCKED_WAIT_TIMEOUT); +# endif + if(pret == 0) { + /* timer expired */ + verbose(VERB_OPS, "send udp blocked " + "for long, dropping packet."); + return 0; + } else if(pret < 0 && +#ifndef USE_WINSOCK + errno != EAGAIN && errno != EINTR && +# ifdef EWOULDBLOCK + errno != EWOULDBLOCK && +# endif + errno != ENOBUFS +#else + WSAGetLastError() != WSAEINPROGRESS && + WSAGetLastError() != WSAEINTR && + WSAGetLastError() != WSAENOBUFS && + WSAGetLastError() != WSAEWOULDBLOCK +#endif + ) { + log_err("poll udp out failed: %s", + sock_strerror(errno)); + return 0; + } +#endif /* defined(HAVE_POLL) || defined(USE_WINSOCK) */ sent = sendmsg(c->fd, &msg, 0); } } From 1f5cc259747256b37a0706294328d0d443dea403 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 31 Aug 2022 16:45:15 +0200 Subject: [PATCH 06/60] - Fix for wait for udp send to stop when packet is successfully sent. --- doc/Changelog | 1 + util/netevent.c | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 212df9a88..2ea68e1a2 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -6,6 +6,7 @@ blocking socket operations. - Fix to wait for blocked write on UDP sockets, with a timeout if it takes too long the packet is dropped. + - Fix for wait for udp send to stop when packet is successfully sent. 22 August 2022: Wouter - Fix #741: systemd socket activation fails on IPv6. diff --git a/util/netevent.c b/util/netevent.c index cf9a38f61..9c5fb3af3 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -388,7 +388,7 @@ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, #endif /* if we set the fd blocking, other threads suddenly * have a blocking fd that they operate on */ - while( + while(sent == -1 && ( #ifndef USE_WINSOCK errno == EAGAIN || errno == EINTR || # ifdef EWOULDBLOCK @@ -401,7 +401,7 @@ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, WSAGetLastError() == WSAENOBUFS || WSAGetLastError() == WSAEWOULDBLOCK #endif - ) { + )) { #if defined(HAVE_POLL) || defined(USE_WINSOCK) struct pollfd p; int pret; @@ -624,7 +624,7 @@ comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet, WSAGetLastError() == WSAENOBUFS || WSAGetLastError() == WSAEWOULDBLOCK) { #endif - while( + while(sent == -1 && ( #ifndef USE_WINSOCK errno == EAGAIN || errno == EINTR || # ifdef EWOULDBLOCK @@ -637,7 +637,7 @@ comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet, WSAGetLastError() == WSAENOBUFS || WSAGetLastError() == WSAEWOULDBLOCK #endif - ) { + )) { #if defined(HAVE_POLL) || defined(USE_WINSOCK) struct pollfd p; int pret; From eb3378396f452222feb8fbf99bc617532cc6914c Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 1 Sep 2022 09:16:05 +0200 Subject: [PATCH 07/60] - Fix to update config tests to fix checking if nonblocking sockets work on OpenBSD. --- acx_nlnetlabs.m4 | 6 +++++- configure | 3 +++ doc/Changelog | 4 ++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/acx_nlnetlabs.m4 b/acx_nlnetlabs.m4 index 1574f97bf..cf436ec54 100644 --- a/acx_nlnetlabs.m4 +++ b/acx_nlnetlabs.m4 @@ -2,7 +2,8 @@ # Copyright 2009, Wouter Wijngaards, NLnet Labs. # BSD licensed. # -# Version 43 +# Version 44 +# 2022-09-01 fix checking if nonblocking sockets work on OpenBSD. # 2021-08-17 fix sed script in ssldir split handling. # 2021-08-17 fix for openssl to detect split version, with ssldir_include # and ssldir_lib output directories. @@ -963,6 +964,9 @@ AC_LANG_SOURCE([[ #ifdef HAVE_SYS_TYPES_H #include #endif +#ifdef HAVE_SYS_SELECT_H +#include +#endif #ifdef HAVE_SYS_SOCKET_H #include #endif diff --git a/configure b/configure index 5e489d4ba..cd44265fb 100755 --- a/configure +++ b/configure @@ -16031,6 +16031,9 @@ else #ifdef HAVE_SYS_TYPES_H #include #endif +#ifdef HAVE_SYS_SELECT_H +#include +#endif #ifdef HAVE_SYS_SOCKET_H #include #endif diff --git a/doc/Changelog b/doc/Changelog index 2ea68e1a2..b3f532698 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +1 September 2022: Wouter + - Fix to update config tests to fix checking if nonblocking sockets + work on OpenBSD. + 31 August 2022: Wouter - Fix to avoid process wide fcntl calls mixed with nonblocking operations after a blocked write. From 2450b4653af64fea8430897964a27ffca3d7e8da Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 1 Sep 2022 14:00:29 +0200 Subject: [PATCH 08/60] - Slow down log frequency of write wait failures. --- doc/Changelog | 1 + util/netevent.c | 20 ++++++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index b3f532698..6c627a68a 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 1 September 2022: Wouter - Fix to update config tests to fix checking if nonblocking sockets work on OpenBSD. + - Slow down log frequency of write wait failures. 31 August 2022: Wouter - Fix to avoid process wide fcntl calls mixed with nonblocking diff --git a/util/netevent.c b/util/netevent.c index 9c5fb3af3..de7078851 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -140,6 +140,8 @@ struct internal_base { int slow_accept_enabled; /** last log time for slow logging of file descriptor errors */ time_t last_slow_log; + /** last log time for slow logging of write wait failures */ + time_t last_writewait_log; }; /** @@ -416,8 +418,13 @@ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet, # endif if(pret == 0) { /* timer expired */ - verbose(VERB_OPS, "send udp blocked " - "for long, dropping packet."); + struct comm_base* b = c->ev->base; + if(b->eb->last_writewait_log+SLOW_LOG_TIME <= + b->eb->secs) { + b->eb->last_writewait_log = b->eb->secs; + verbose(VERB_OPS, "send udp blocked " + "for long, dropping packet."); + } return 0; } else if(pret < 0 && #ifndef USE_WINSOCK @@ -652,8 +659,13 @@ comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet, # endif if(pret == 0) { /* timer expired */ - verbose(VERB_OPS, "send udp blocked " - "for long, dropping packet."); + struct comm_base* b = c->ev->base; + if(b->eb->last_writewait_log+SLOW_LOG_TIME <= + b->eb->secs) { + b->eb->last_writewait_log = b->eb->secs; + verbose(VERB_OPS, "send udp blocked " + "for long, dropping packet."); + } return 0; } else if(pret < 0 && #ifndef USE_WINSOCK From d66e1cccf8324ccbc76bc408c1aa24f1014dd16e Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 1 Sep 2022 14:01:56 +0200 Subject: [PATCH 09/60] - Fix to set out of file descriptor warning to operational verbosity. --- doc/Changelog | 1 + util/netevent.c | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 6c627a68a..b4abf6f0d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,7 @@ - Fix to update config tests to fix checking if nonblocking sockets work on OpenBSD. - Slow down log frequency of write wait failures. + - Fix to set out of file descriptor warning to operational verbosity. 31 August 2022: Wouter - Fix to avoid process wide fcntl calls mixed with nonblocking diff --git a/util/netevent.c b/util/netevent.c index de7078851..9030a792c 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -1009,8 +1009,9 @@ int comm_point_perform_accept(struct comm_point* c, if(b->eb->last_slow_log+SLOW_LOG_TIME <= b->eb->secs) { b->eb->last_slow_log = b->eb->secs; - log_err("accept failed, slow down " - "accept for %d msec: %s", + verbose(VERB_OPS, "accept failed, " + "slow down accept for %d " + "msec: %s", NETEVENT_SLOW_ACCEPT_TIME, sock_strerror(errno)); } From 57230d7f229cdf1caab90daef3b07be3e32e34c5 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 1 Sep 2022 15:14:20 +0200 Subject: [PATCH 10/60] - Fix to log a verbose message at operational notice level if a thread is not responding, to stats requests. It is logged with thread identifiers. --- config.h.in | 9 +++++++ configure | 70 ++++++++++++++++++++++++++++++++++++++++++++++++- configure.ac | 6 ++++- daemon/stats.c | 26 ++++++++++++++++++ daemon/worker.c | 3 +++ daemon/worker.h | 4 +++ doc/Changelog | 3 +++ util/tube.c | 42 +++++++++++++++++++++++++++++ util/tube.h | 8 ++++++ 9 files changed, 169 insertions(+), 2 deletions(-) diff --git a/config.h.in b/config.h.in index 2a5214803..2caecf30d 100644 --- a/config.h.in +++ b/config.h.in @@ -298,6 +298,9 @@ /* Define to 1 if you have the `getrlimit' function. */ #undef HAVE_GETRLIMIT +/* Define to 1 if you have the `gettid' function. */ +#undef HAVE_GETTID + /* Define to 1 if you have the `glob' function. */ #undef HAVE_GLOB @@ -806,12 +809,18 @@ /* Shared data */ #undef SHARE_DIR +/* The size of `pthread_t', as computed by sizeof. */ +#undef SIZEOF_PTHREAD_T + /* The size of `size_t', as computed by sizeof. */ #undef SIZEOF_SIZE_T /* The size of `time_t', as computed by sizeof. */ #undef SIZEOF_TIME_T +/* The size of `unsigned long', as computed by sizeof. */ +#undef SIZEOF_UNSIGNED_LONG + /* define if (v)snprintf does not return length needed, (but length used) */ #undef SNPRINTF_RET_BROKEN diff --git a/configure b/configure index cd44265fb..c1f244e4f 100755 --- a/configure +++ b/configure @@ -15256,6 +15256,74 @@ cat >>confdefs.h <<_ACEOF _ACEOF +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5 +$as_echo_n "checking size of unsigned long... " >&6; } +if ${ac_cv_sizeof_unsigned_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_unsigned_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (unsigned long) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_unsigned_long=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5 +$as_echo "$ac_cv_sizeof_unsigned_long" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long +_ACEOF + + +if test x_$ub_have_pthreads != x_yes; then + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of pthread_t" >&5 +$as_echo_n "checking size of pthread_t... " >&6; } +if ${ac_cv_sizeof_pthread_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (pthread_t))" "ac_cv_sizeof_pthread_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_pthread_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (pthread_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_pthread_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pthread_t" >&5 +$as_echo "$ac_cv_sizeof_pthread_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_PTHREAD_T $ac_cv_sizeof_pthread_t +_ACEOF + + +fi # add option to disable the evil rpath @@ -20594,7 +20662,7 @@ if test "$ac_res" != no; then : fi -for ac_func in tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs if_nametoindex poll +for ac_func in tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs if_nametoindex poll gettid do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" diff --git a/configure.ac b/configure.ac index 63902646e..a2b1a8201 100644 --- a/configure.ac +++ b/configure.ac @@ -487,6 +487,10 @@ AC_INCLUDES_DEFAULT #endif ]) AC_CHECK_SIZEOF(size_t) +AC_CHECK_SIZEOF([unsigned long]) +if test x_$ub_have_pthreads != x_yes; then + AC_CHECK_SIZEOF(pthread_t) +fi # add option to disable the evil rpath ACX_ARG_RPATH @@ -1644,7 +1648,7 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([ AC_MSG_RESULT(no)) AC_SEARCH_LIBS([setusercontext], [util]) -AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs if_nametoindex poll]) +AC_CHECK_FUNCS([tzset sigprocmask fcntl getpwnam endpwent getrlimit setrlimit setsid chroot kill chown sleep usleep random srandom recvmsg sendmsg writev socketpair glob initgroups strftime localtime_r setusercontext _beginthreadex endservent endprotoent fsync shmget accept4 getifaddrs if_nametoindex poll gettid]) AC_CHECK_FUNCS([setresuid],,[AC_CHECK_FUNCS([setreuid])]) AC_CHECK_FUNCS([setresgid],,[AC_CHECK_FUNCS([setregid])]) diff --git a/daemon/stats.c b/daemon/stats.c index 57c428271..02348aada 100644 --- a/daemon/stats.c +++ b/daemon/stats.c @@ -69,6 +69,10 @@ #ifdef HAVE_SSL #include #endif +#include /* DEBUG */ + +/** How long to wait for threads to transmit statistics, in msec. */ +#define STATS_THREAD_WAIT 60000 /** add timers and the values do not overflow or become negative */ static void @@ -380,6 +384,28 @@ void server_stats_obtain(struct worker* worker, struct worker* who, worker_send_cmd(who, worker_cmd_stats); else worker_send_cmd(who, worker_cmd_stats_noreset); verbose(VERB_ALGO, "wait for stats reply"); + if(tube_wait_timeout(worker->cmd, STATS_THREAD_WAIT) == 0) { + verbose(VERB_OPS, "no response from thread %d" +#ifdef HAVE_GETTID + " LWP %u" +#endif +#if defined(HAVE_PTHREAD) && defined(SIZEOF_PTHREAD_T) && defined(SIZEOF_UNSIGNED_LONG) +# if SIZEOF_PTHREAD_T == SIZEOF_UNSIGNED_LONG + " pthread 0x%lx" +# endif +#endif + , + who->thread_num +#ifdef HAVE_GETTID + , (unsigned)who->thread_tid +#endif +#if defined(HAVE_PTHREAD) && defined(SIZEOF_PTHREAD_T) && defined(SIZEOF_UNSIGNED_LONG) +# if SIZEOF_PTHREAD_T == SIZEOF_UNSIGNED_LONG + , (unsigned long)*((unsigned long*)&who->thr_id) +# endif +#endif + ); + } if(!tube_read_msg(worker->cmd, &reply, &len, 0)) fatal_exit("failed to read stats over cmd channel"); if(len != (uint32_t)sizeof(*s)) diff --git a/daemon/worker.c b/daemon/worker.c index 010c4dc0a..4a06f53ec 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1903,6 +1903,9 @@ worker_init(struct worker* worker, struct config_file *cfg, struct dt_env* dtenv = &worker->dtenv; #else void* dtenv = NULL; +#endif +#ifdef HAVE_GETTID + worker->thread_tid = gettid(); #endif worker->need_to_exit = 0; worker->base = comm_base_create(do_sigs); diff --git a/daemon/worker.h b/daemon/worker.h index 3887d0405..3fb52abd9 100644 --- a/daemon/worker.h +++ b/daemon/worker.h @@ -86,6 +86,10 @@ struct worker { struct daemon* daemon; /** thread id */ ub_thread_type thr_id; +#ifdef HAVE_GETTID + /** thread tid, the LWP id. */ + pid_t thread_tid; +#endif /** pipe, for commands for this worker */ struct tube* cmd; /** the event base this worker works with */ diff --git a/doc/Changelog b/doc/Changelog index b4abf6f0d..8af4c6e0d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -3,6 +3,9 @@ work on OpenBSD. - Slow down log frequency of write wait failures. - Fix to set out of file descriptor warning to operational verbosity. + - Fix to log a verbose message at operational notice level if a + thread is not responding, to stats requests. It is logged with + thread identifiers. 31 August 2022: Wouter - Fix to avoid process wide fcntl calls mixed with nonblocking diff --git a/util/tube.c b/util/tube.c index 40556e720..43455feef 100644 --- a/util/tube.c +++ b/util/tube.c @@ -424,6 +424,28 @@ int tube_wait(struct tube* tube) return pollit(tube->sr, NULL); } +int tube_wait_timeout(struct tube* tube, int msec) +{ + struct timeval t; + int fd = tube->sr; + fd_set r; + t.tv_sec = msec/1000; + t.tv_usec = (msec%1000)*1000; +#ifndef S_SPLINT_S + FD_ZERO(&r); + FD_SET(FD_SET_T fd, &r); +#endif + while(1) { + if(select(fd+1, &r, NULL, NULL, &t) == -1) { + if(errno == EAGAIN || errno == EINTR) + continue; + return -1; + } + break; + } + return (int)(FD_ISSET(fd, &r)); +} + int tube_read_fd(struct tube* tube) { return tube->sr; @@ -649,6 +671,26 @@ int tube_wait(struct tube* tube) return 1; } +int tube_wait_timeout(struct tube* tube, int msec) +{ + /* block on eventhandle */ + DWORD res = WSAWaitForMultipleEvents( + 1 /* one event in array */, + &tube->event /* the event to wait for, our pipe signal */, + 0 /* wait for all events is false */, + msec /* wait for timeout */, + 0 /* we are not alertable for IO completion routines */ + ); + if(res == WSA_WAIT_TIMEOUT) { + return 0; + } + if(res == WSA_WAIT_IO_COMPLETION) { + /* a bit unexpected, since we were not alertable */ + return -1; + } + return 1; +} + int tube_read_fd(struct tube* ATTR_UNUSED(tube)) { /* nothing sensible on Windows */ diff --git a/util/tube.h b/util/tube.h index 5b1fdb8e8..5e4fb8644 100644 --- a/util/tube.h +++ b/util/tube.h @@ -204,6 +204,14 @@ int tube_poll(struct tube* tube); */ int tube_wait(struct tube* tube); +/** + * Wait for data to be ready with a timeout. + * @param tube: the tube to wait on. + * @param msec: timeout in milliseconds. + * @return 1 if there is something to read within timeout, readability. + * 0 on a timeout. On failures -1, like errors. */ +int tube_wait_timeout(struct tube* tube, int msec); + /** * Get FD that is readable when new information arrives. * @param tube From 5bbaf78c3f8d53931cb827006182cd48561ea634 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 2 Sep 2022 10:11:23 +0200 Subject: [PATCH 11/60] - Remove include that was there for debug purposes. --- daemon/stats.c | 1 - doc/Changelog | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/daemon/stats.c b/daemon/stats.c index 02348aada..fde411a1e 100644 --- a/daemon/stats.c +++ b/daemon/stats.c @@ -69,7 +69,6 @@ #ifdef HAVE_SSL #include #endif -#include /* DEBUG */ /** How long to wait for threads to transmit statistics, in msec. */ #define STATS_THREAD_WAIT 60000 diff --git a/doc/Changelog b/doc/Changelog index 8af4c6e0d..e11a28b48 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +2 September 2022: Wouter + - Remove include that was there for debug purposes. + 1 September 2022: Wouter - Fix to update config tests to fix checking if nonblocking sockets work on OpenBSD. From 007db2c327791918abe5920e4ca7f91750172725 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 2 Sep 2022 10:21:00 +0200 Subject: [PATCH 12/60] - Fix to check pthread_t size after pthread has been detected. --- configure | 134 +++++++++++++++++++++++++------------------------- configure.ac | 6 +-- doc/Changelog | 1 + 3 files changed, 69 insertions(+), 72 deletions(-) diff --git a/configure b/configure index c1f244e4f..b2b655da1 100755 --- a/configure +++ b/configure @@ -15256,74 +15256,6 @@ cat >>confdefs.h <<_ACEOF _ACEOF -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5 -$as_echo_n "checking size of unsigned long... " >&6; } -if ${ac_cv_sizeof_unsigned_long+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_unsigned_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (unsigned long) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_unsigned_long=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5 -$as_echo "$ac_cv_sizeof_unsigned_long" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long -_ACEOF - - -if test x_$ub_have_pthreads != x_yes; then - # The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of pthread_t" >&5 -$as_echo_n "checking size of pthread_t... " >&6; } -if ${ac_cv_sizeof_pthread_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (pthread_t))" "ac_cv_sizeof_pthread_t" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_pthread_t" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (pthread_t) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_pthread_t=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pthread_t" >&5 -$as_echo "$ac_cv_sizeof_pthread_t" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_PTHREAD_T $ac_cv_sizeof_pthread_t -_ACEOF - - -fi # add option to disable the evil rpath @@ -17172,6 +17104,72 @@ _ACEOF fi + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5 +$as_echo_n "checking size of unsigned long... " >&6; } +if ${ac_cv_sizeof_unsigned_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_unsigned_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (unsigned long) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_unsigned_long=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5 +$as_echo "$ac_cv_sizeof_unsigned_long" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long +_ACEOF + + + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of pthread_t" >&5 +$as_echo_n "checking size of pthread_t... " >&6; } +if ${ac_cv_sizeof_pthread_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (pthread_t))" "ac_cv_sizeof_pthread_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_pthread_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (pthread_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_pthread_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_pthread_t" >&5 +$as_echo "$ac_cv_sizeof_pthread_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_PTHREAD_T $ac_cv_sizeof_pthread_t +_ACEOF + + if echo "$CFLAGS" | $GREP -e "-pthread" >/dev/null; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread unused during linking" >&5 diff --git a/configure.ac b/configure.ac index a2b1a8201..a8f9da6a5 100644 --- a/configure.ac +++ b/configure.ac @@ -487,10 +487,6 @@ AC_INCLUDES_DEFAULT #endif ]) AC_CHECK_SIZEOF(size_t) -AC_CHECK_SIZEOF([unsigned long]) -if test x_$ub_have_pthreads != x_yes; then - AC_CHECK_SIZEOF(pthread_t) -fi # add option to disable the evil rpath ACX_ARG_RPATH @@ -611,6 +607,8 @@ if test x_$withval != x_no; then CC="$PTHREAD_CC" ub_have_pthreads=yes AC_CHECK_TYPES([pthread_spinlock_t, pthread_rwlock_t],,,[#include ]) + AC_CHECK_SIZEOF([unsigned long]) + AC_CHECK_SIZEOF(pthread_t) if echo "$CFLAGS" | $GREP -e "-pthread" >/dev/null; then AC_MSG_CHECKING([if -pthread unused during linking]) diff --git a/doc/Changelog b/doc/Changelog index e11a28b48..613541571 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 2 September 2022: Wouter - Remove include that was there for debug purposes. + - Fix to check pthread_t size after pthread has been detected. 1 September 2022: Wouter - Fix to update config tests to fix checking if nonblocking sockets From cfc656294ee8f704bcfda96a23232e93e6c7bd6a Mon Sep 17 00:00:00 2001 From: ryndia <68096721+ryndia@users.noreply.github.com> Date: Wed, 7 Sep 2022 20:16:20 +0400 Subject: [PATCH 13/60] Update arc4random.c --- compat/arc4random.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/compat/arc4random.c b/compat/arc4random.c index b536d3143..ae342d3a4 100644 --- a/compat/arc4random.c +++ b/compat/arc4random.c @@ -22,7 +22,7 @@ /* * ChaCha based random number generator for OpenBSD. */ - +#define REKEY_BASE (1024*1024) //base 2 #include #include #include @@ -179,7 +179,7 @@ static void _rs_stir(void) { u_char rnd[KEYSZ + IVSZ]; - + uint32_t rekey_fuzz = 0; if (getentropy(rnd, sizeof rnd) == -1) { if(errno != ENOSYS || fallback_getentropy_urandom(rnd, sizeof rnd) == -1) { @@ -201,7 +201,9 @@ _rs_stir(void) rs->rs_have = 0; memset(rsx->rs_buf, 0, sizeof(rsx->rs_buf)); - rs->rs_count = 1600000; + /*rs->rs_count = 1600000;*/ + chacha_encrypt_bytes(&rsx->rs_chacha, (uint8_t *)&rekey_fuzz,(uint8_t *)&rekey_fuzz, sizeof(rekey_fuzz)); + rs->rs_count = REKEY_BASE + (rekey_fuzz % REKEY_BASE); } static inline void From c30bdff93928cce8ccdeb669d5f38f981c8364eb Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Thu, 19 Aug 2021 16:12:19 +0200 Subject: [PATCH 14/60] Initial commit for interface based ACL. --- Makefile.in | 8 +- daemon/acl_list.c | 454 +++- daemon/acl_list.h | 38 +- daemon/daemon.c | 21 +- daemon/daemon.h | 2 + daemon/worker.c | 4 + dnstap/dtstream.c | 2 +- dnstap/unbound-dnstap-socket.c | 2 +- doc/example.conf.in | 3 +- doc/unbound.conf.5.in | 8 +- iterator/iter_hints.c | 2 +- libunbound/libunbound.c | 4 +- services/authzone.c | 6 +- services/listen_dnsport.c | 81 +- services/listen_dnsport.h | 11 +- smallapp/unbound-checkconf.c | 4 +- smallapp/unbound-control.c | 4 +- testcode/delayer.c | 2 +- testcode/fake_event.c | 1 + testcode/perf.c | 2 +- testcode/replay.c | 11 +- testcode/streamtcp.c | 2 +- util/config_file.c | 15 +- util/config_file.h | 10 + util/configlexer.c | 4208 ++++++++++++++++---------------- util/configlexer.lex | 5 + util/configparser.c | 4080 ++++++++++++++++--------------- util/configparser.h | 20 +- util/configparser.y | 103 +- util/fptr_wlist.c | 2 + util/net_help.c | 6 +- util/net_help.h | 3 +- 32 files changed, 4865 insertions(+), 4259 deletions(-) diff --git a/Makefile.in b/Makefile.in index 3189731ad..bf78a694d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -139,7 +139,7 @@ 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_SRC) respip/respip.c $(CHECKLOCK_SRC) \ -$(DNSTAP_SRC) $(DNSCRYPT_SRC) $(IPSECMOD_SRC) $(IPSET_SRC) +$(DNSTAP_SRC) $(DNSCRYPT_SRC) $(IPSECMOD_SRC) $(IPSET_SRC) daemon/acl_list.c COMMON_OBJ_WITHOUT_NETCALL=dns.lo infra.lo rrset.lo dname.lo msgencode.lo \ as112.lo msgparse.lo msgreply.lo packed_rrset.lo iterator.lo iter_delegpt.lo \ iter_donotq.lo iter_fwd.lo iter_hints.lo iter_priv.lo iter_resptype.lo \ @@ -154,7 +154,7 @@ val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo $(CACHEDB_OBJ) authzone.lo $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \ $(IPSECMOD_OBJ) $(IPSET_OBJ) $(DYNLIBMOD_OBJ) respip.lo COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \ -outside_network.lo +outside_network.lo acl_list.lo COMMON_OBJ=$(COMMON_OBJ_WITHOUT_UB_EVENT) ub_event.lo # set to $COMMON_OBJ or to "" if --enableallsymbols COMMON_OBJ_ALL_SYMBOLS=@COMMON_OBJ_ALL_SYMBOLS@ @@ -186,9 +186,9 @@ readhex.lo testpkts.lo unitldns.lo unitecs.lo unitauth.lo unitzonemd.lo \ unittcpreuse.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 \ +DAEMON_SRC=daemon/cachedump.c daemon/daemon.c \ daemon/remote.c daemon/stats.c daemon/unbound.c daemon/worker.c @WIN_DAEMON_SRC@ -DAEMON_OBJ=acl_list.lo cachedump.lo daemon.lo \ +DAEMON_OBJ=cachedump.lo daemon.lo \ shm_main.lo remote.lo stats.lo unbound.lo \ worker.lo @WIN_DAEMON_OBJ@ DAEMON_OBJ_LINK=$(DAEMON_OBJ) $(COMMON_OBJ_ALL_SYMBOLS) $(SLDNS_OBJ) \ diff --git a/daemon/acl_list.c b/daemon/acl_list.c index aecb3e0c6..2006f9592 100644 --- a/daemon/acl_list.c +++ b/daemon/acl_list.c @@ -46,9 +46,10 @@ #include "util/config_file.h" #include "util/net_help.h" #include "services/localzone.h" +#include "services/listen_dnsport.h" #include "sldns/str2wire.h" -struct acl_list* +struct acl_list* acl_list_create(void) { struct acl_list* acl = (struct acl_list*)calloc(1, @@ -63,10 +64,10 @@ acl_list_create(void) return acl; } -void +void acl_list_delete(struct acl_list* acl) { - if(!acl) + if(!acl) return; regional_destroy(acl->region); free(acl); @@ -74,8 +75,8 @@ acl_list_delete(struct acl_list* acl) /** insert new address into acl_list structure */ static struct acl_addr* -acl_list_insert(struct acl_list* acl, struct sockaddr_storage* addr, - socklen_t addrlen, int net, enum acl_access control, +acl_list_insert(struct acl_list* acl, struct sockaddr_storage* addr, + socklen_t addrlen, int net, enum acl_access control, int complain_duplicates) { struct acl_addr* node = regional_alloc_zero(acl->region, @@ -90,6 +91,31 @@ acl_list_insert(struct acl_list* acl, struct sockaddr_storage* addr, return node; } +/** parse str to acl_access enum */ +static int +parse_acl_access(const char* str, enum acl_access* control) +{ + if(strcmp(str, "allow") == 0) + *control = acl_allow; + else if(strcmp(str, "deny") == 0) + *control = acl_deny; + else if(strcmp(str, "refuse") == 0) + *control = acl_refuse; + else if(strcmp(str, "deny_non_local") == 0) + *control = acl_deny_non_local; + else if(strcmp(str, "refuse_non_local") == 0) + *control = acl_refuse_non_local; + else if(strcmp(str, "allow_snoop") == 0) + *control = acl_allow_snoop; + else if(strcmp(str, "allow_setrd") == 0) + *control = acl_allow_setrd; + else { + log_err("access control type %s unknown", str); + return 0; + } + return 1; +} + /** apply acl_list string */ static int acl_list_str_cfg(struct acl_list* acl, const char* str, const char* s2, @@ -99,29 +125,14 @@ acl_list_str_cfg(struct acl_list* acl, const char* str, const char* s2, int net; socklen_t addrlen; enum acl_access control; - if(strcmp(s2, "allow") == 0) - control = acl_allow; - else if(strcmp(s2, "deny") == 0) - control = acl_deny; - else if(strcmp(s2, "refuse") == 0) - control = acl_refuse; - else if(strcmp(s2, "deny_non_local") == 0) - control = acl_deny_non_local; - else if(strcmp(s2, "refuse_non_local") == 0) - control = acl_refuse_non_local; - else if(strcmp(s2, "allow_snoop") == 0) - control = acl_allow_snoop; - else if(strcmp(s2, "allow_setrd") == 0) - control = acl_allow_setrd; - else { - log_err("access control type %s unknown", str); + if(!parse_acl_access(s2, &control)) { return 0; } if(!netblockstrtoaddr(str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) { log_err("cannot parse access control: %s %s", str, s2); return 0; } - if(!acl_list_insert(acl, &addr, addrlen, net, control, + if(!acl_list_insert(acl, &addr, addrlen, net, control, complain_duplicates)) { log_err("out of memory"); return 0; @@ -131,19 +142,27 @@ acl_list_str_cfg(struct acl_list* acl, const char* str, const char* s2, /** find or create node (NULL on parse or error) */ static struct acl_addr* -acl_find_or_create(struct acl_list* acl, const char* str) +acl_find_or_create(struct acl_list* acl, const char* str, int is_interface, + int port) { struct acl_addr* node; struct sockaddr_storage addr; - int net; socklen_t addrlen; - if(!netblockstrtoaddr(str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) { - log_err("cannot parse netblock: %s", str); - return NULL; + int net = (str_is_ip6(str)?128:32); + if(is_interface) { + if(!extstrtoaddr(str, &addr, &addrlen, port)) { + log_err("cannot parse interface: %s", str); + return NULL; + } + } else { + if(!netblockstrtoaddr(str, UNBOUND_DNS_PORT, &addr, &addrlen, &net)) { + log_err("cannot parse netblock: %s", str); + return NULL; + } } /* find or create node */ if(!(node=(struct acl_addr*)addr_tree_find(&acl->tree, &addr, - addrlen, net))) { + addrlen, net)) && !is_interface) { /* create node, type 'allow' since otherwise tags are * pointless, can override with specific access-control: cfg */ if(!(node=(struct acl_addr*)acl_list_insert(acl, &addr, @@ -155,13 +174,54 @@ acl_find_or_create(struct acl_list* acl, const char* str) return node; } +/** apply acl_interface string */ +static int +acl_interface_str_cfg(struct acl_list* acl_interface, const char* interface, + const char* s2, int port) +{ + struct acl_addr* node; + enum acl_access control; + if(!parse_acl_access(s2, &control)) { + return 0; + } + if(!(node=acl_find_or_create(acl_interface, interface, 1, port))) { + log_err("cannot update ACL on non-existing interface: %s %d", + interface, port); + return 0; + } + node->control = control; + return 1; +} + +struct acl_addr* +acl_interface_insert(struct acl_list* acl_interface, const char* interface, + const char* s2, int port) +{ + struct acl_addr* node; + struct sockaddr_storage addr; + socklen_t addrlen; + enum acl_access control; + int net = (str_is_ip6(interface)?128:32); + if(!parse_acl_access(s2, &control)) { + return NULL; + } + if((node=acl_find_or_create(acl_interface, interface, 1, port))) { + return node; + } + if(!extstrtoaddr(interface, &addr, &addrlen, port)) { + log_err("cannot parse access control: %s %s", interface, s2); + return NULL; + } + return acl_list_insert(acl_interface, &addr, addrlen, net, control, 1); +} + /** apply acl_tag string */ static int acl_list_tags_cfg(struct acl_list* acl, const char* str, uint8_t* bitmap, - size_t bitmaplen) + size_t bitmaplen, int is_interface, int port) { struct acl_addr* node; - if(!(node=acl_find_or_create(acl, str))) + if(!(node=acl_find_or_create(acl, str, is_interface, port))) return 0; node->taglen = bitmaplen; node->taglist = regional_alloc_init(acl->region, bitmap, bitmaplen); @@ -175,10 +235,10 @@ acl_list_tags_cfg(struct acl_list* acl, const char* str, uint8_t* bitmap, /** apply acl_view string */ static int acl_list_view_cfg(struct acl_list* acl, const char* str, const char* str2, - struct views* vs) + struct views* vs, int is_interface, int port) { struct acl_addr* node; - if(!(node=acl_find_or_create(acl, str))) + if(!(node=acl_find_or_create(acl, str, is_interface, port))) return 0; node->view = views_find_view(vs, str2, 0 /* get read lock*/); if(!node->view) { @@ -192,12 +252,13 @@ acl_list_view_cfg(struct acl_list* acl, const char* str, const char* str2, /** apply acl_tag_action string */ static int acl_list_tag_action_cfg(struct acl_list* acl, struct config_file* cfg, - const char* str, const char* tag, const char* action) + const char* str, const char* tag, const char* action, + int is_interface, int port) { struct acl_addr* node; int tagid; enum localzone_type t; - if(!(node=acl_find_or_create(acl, str))) + if(!(node=acl_find_or_create(acl, str, is_interface, port))) return 0; /* allocate array if not yet */ if(!node->tag_actions) { @@ -281,12 +342,13 @@ check_data(const char* data, const struct config_strlist* head) /** apply acl_tag_data string */ static int acl_list_tag_data_cfg(struct acl_list* acl, struct config_file* cfg, - const char* str, const char* tag, const char* data) + const char* str, const char* tag, const char* data, + int is_interface, int port) { struct acl_addr* node; int tagid; char* dupdata; - if(!(node=acl_find_or_create(acl, str))) + if(!(node=acl_find_or_create(acl, str, is_interface, port))) return 0; /* allocate array if not yet */ if(!node->tag_datas) { @@ -329,11 +391,11 @@ acl_list_tag_data_cfg(struct acl_list* acl, struct config_file* cfg, } /** read acl_list config */ -static int -read_acl_list(struct acl_list* acl, struct config_file* cfg) +static int +read_acl_list(struct acl_list* acl, struct config_str2list* acls) { struct config_str2list* p; - for(p = cfg->acls; p; p = p->next) { + for(p = acls; p; p = p->next) { log_assert(p->str && p->str2); if(!acl_list_str_cfg(acl, p->str, p->str2, 1)) return 0; @@ -341,15 +403,38 @@ read_acl_list(struct acl_list* acl, struct config_file* cfg) return 1; } -/** read acl tags config */ -static int -read_acl_tags(struct acl_list* acl, struct config_file* cfg) +/** read acl view config */ +static int +read_acl_view(struct acl_list* acl, struct config_str2list** acl_view, + struct views* v) { - struct config_strbytelist* np, *p = cfg->acl_tags; - cfg->acl_tags = NULL; + struct config_str2list* np, *p = *acl_view; + *acl_view = NULL; while(p) { log_assert(p->str && p->str2); - if(!acl_list_tags_cfg(acl, p->str, p->str2, p->str2len)) { + if(!acl_list_view_cfg(acl, p->str, p->str2, v, 0, 0)) { + config_deldblstrlist(p); + return 0; + } + /* free the items as we go to free up memory */ + np = p->next; + free(p->str); + free(p->str2); + free(p); + p = np; + } + return 1; +} + +/** read acl tags config */ +static int +read_acl_tags(struct acl_list* acl, struct config_strbytelist** acl_tags) +{ + struct config_strbytelist* np, *p = *acl_tags; + *acl_tags = NULL; + while(p) { + log_assert(p->str && p->str2); + if(!acl_list_tags_cfg(acl, p->str, p->str2, p->str2len, 0, 0)) { config_del_strbytelist(p); return 0; } @@ -363,38 +448,18 @@ read_acl_tags(struct acl_list* acl, struct config_file* cfg) return 1; } -/** read acl view config */ -static int -read_acl_view(struct acl_list* acl, struct config_file* cfg, struct views* v) -{ - struct config_str2list* np, *p = cfg->acl_view; - cfg->acl_view = NULL; - while(p) { - log_assert(p->str && p->str2); - if(!acl_list_view_cfg(acl, p->str, p->str2, v)) { - return 0; - } - /* free the items as we go to free up memory */ - np = p->next; - free(p->str); - free(p->str2); - free(p); - p = np; - } - return 1; -} - /** read acl tag actions config */ -static int -read_acl_tag_actions(struct acl_list* acl, struct config_file* cfg) +static int +read_acl_tag_actions(struct acl_list* acl, struct config_file* cfg, + struct config_str3list** acl_tag_actions) { struct config_str3list* p, *np; - p = cfg->acl_tag_actions; - cfg->acl_tag_actions = NULL; + p = *acl_tag_actions; + *acl_tag_actions = NULL; while(p) { log_assert(p->str && p->str2 && p->str3); if(!acl_list_tag_action_cfg(acl, cfg, p->str, p->str2, - p->str3)) { + p->str3, 0, 0)) { config_deltrplstrlist(p); return 0; } @@ -410,15 +475,17 @@ read_acl_tag_actions(struct acl_list* acl, struct config_file* cfg) } /** read acl tag datas config */ -static int -read_acl_tag_datas(struct acl_list* acl, struct config_file* cfg) +static int +read_acl_tag_datas(struct acl_list* acl, struct config_file* cfg, + struct config_str3list** acl_tag_datas) { struct config_str3list* p, *np; - p = cfg->acl_tag_datas; - cfg->acl_tag_datas = NULL; + p = *acl_tag_datas; + *acl_tag_datas = NULL; while(p) { log_assert(p->str && p->str2 && p->str3); - if(!acl_list_tag_data_cfg(acl, cfg, p->str, p->str2, p->str3)) { + if(!acl_list_tag_data_cfg(acl, cfg, p->str, p->str2, p->str3, + 0, 0)) { config_deltrplstrlist(p); return 0; } @@ -433,30 +500,27 @@ read_acl_tag_datas(struct acl_list* acl, struct config_file* cfg) return 1; } -int +int acl_list_apply_cfg(struct acl_list* acl, struct config_file* cfg, struct views* v) { regional_free_all(acl->region); addr_tree_init(&acl->tree); - if(!read_acl_list(acl, cfg)) + if(!read_acl_list(acl, cfg->acls)) return 0; - if(!read_acl_view(acl, cfg, v)) + if(!read_acl_view(acl, &cfg->acl_view, v)) return 0; - if(!read_acl_tags(acl, cfg)) + if(!read_acl_tags(acl, &cfg->acl_tags)) return 0; - if(!read_acl_tag_actions(acl, cfg)) + if(!read_acl_tag_actions(acl, cfg, &cfg->acl_tag_actions)) return 0; - if(!read_acl_tag_datas(acl, cfg)) + if(!read_acl_tag_datas(acl, cfg, &cfg->acl_tag_datas)) return 0; /* insert defaults, with '0' to ignore them if they are duplicates */ - if(!acl_list_str_cfg(acl, "0.0.0.0/0", "refuse", 0)) - return 0; + /* the 'refuse' defaults for /0 are now done per interface instead */ if(!acl_list_str_cfg(acl, "127.0.0.0/8", "allow", 0)) return 0; if(cfg->do_ip6) { - if(!acl_list_str_cfg(acl, "::0/0", "refuse", 0)) - return 0; if(!acl_list_str_cfg(acl, "::1", "allow", 0)) return 0; if(!acl_list_str_cfg(acl, "::ffff:127.0.0.1", "allow", 0)) @@ -466,7 +530,221 @@ acl_list_apply_cfg(struct acl_list* acl, struct config_file* cfg, return 1; } -enum acl_access +int +acl_interface_compare(const void* k1, const void* k2) +{ + struct addr_tree_node* n1 = (struct addr_tree_node*)k1; + struct addr_tree_node* n2 = (struct addr_tree_node*)k2; + return sockaddr_cmp(&n1->addr, n1->addrlen, &n2->addr, + n2->addrlen); + /* We don't care about comparing node->net. All addresses in the + * acl_interface tree have either 32 (ipv4) or 128 (ipv6). */ +} + +void +acl_interface_init(struct acl_list* acl_interface) +{ + regional_free_all(acl_interface->region); + /* We want comparison in the tree to include both IP and port. + * Initialise with the given compare fucntion but keep treating it as + * an addr_tree. */ + rbtree_init(&acl_interface->tree, &acl_interface_compare); +} + +static int +read_acl_interface_action(struct acl_list* acl_interface, + struct config_str2list* acls, int port) +{ + struct config_str2list* p; + for(p = acls; p; p = p->next) { + char** resif = NULL; + int num_resif = 0; + int i; + log_assert(p->str && p->str2); + if(!resolve_interface_names(&p->str, 1, NULL, &resif, &num_resif)) + return 0; + for(i = 0; istr2, port)){ + config_del_strarray(resif, num_resif); + return 0; + } + } + config_del_strarray(resif, num_resif); + } + return 1; +} + +/** read acl view config for interface */ +static int +read_acl_interface_view(struct acl_list* acl_interface, + struct config_str2list** acl_view, + struct views* v, int port) +{ + struct config_str2list* np, *p = *acl_view; + *acl_view = NULL; + while(p) { + char** resif = NULL; + int num_resif = 0; + int i; + log_assert(p->str && p->str2); + if(!resolve_interface_names(&p->str, 1, NULL, &resif, &num_resif)) { + config_deldblstrlist(p); + return 0; + } + for(i = 0; istr, p->str2, + v, 1, port)) { + config_del_strarray(resif, num_resif); + config_deldblstrlist(p); + return 0; + } + } + config_del_strarray(resif, num_resif); + /* free the items as we go to free up memory */ + np = p->next; + free(p->str); + free(p->str2); + free(p); + p = np; + } + return 1; +} + +/** read acl tags config for interface */ +static int +read_acl_interface_tags(struct acl_list* acl_interface, + struct config_strbytelist** acl_tags, int port) +{ + struct config_strbytelist* np, *p = *acl_tags; + *acl_tags = NULL; + while(p) { + char** resif = NULL; + int num_resif = 0; + int i; + log_assert(p->str && p->str2); + if(!resolve_interface_names(&p->str, 1, NULL, &resif, &num_resif)) { + config_del_strbytelist(p); + return 0; + } + for(i = 0; istr, p->str2, + p->str2len, 1, port)) { + config_del_strbytelist(p); + config_del_strarray(resif, num_resif); + return 0; + } + } + config_del_strarray(resif, num_resif); + /* free the items as we go to free up memory */ + np = p->next; + free(p->str); + free(p->str2); + free(p); + p = np; + } + return 1; +} + +/** read acl tag actions config for interface*/ +static int +read_acl_interface_tag_actions(struct acl_list* acl_interface, + struct config_file* cfg, + struct config_str3list** acl_tag_actions, int port) +{ + struct config_str3list* p, *np; + p = *acl_tag_actions; + *acl_tag_actions = NULL; + while(p) { + char** resif = NULL; + int num_resif = 0; + int i; + log_assert(p->str && p->str2 && p->str3); + if(!resolve_interface_names(&p->str, 1, NULL, &resif, &num_resif)) { + config_deltrplstrlist(p); + return 0; + } + for(i = 0; istr, + p->str2, p->str3, 1, port)) { + config_deltrplstrlist(p); + config_del_strarray(resif, num_resif); + return 0; + } + } + config_del_strarray(resif, num_resif); + /* free the items as we go to free up memory */ + np = p->next; + free(p->str); + free(p->str2); + free(p->str3); + free(p); + p = np; + } + return 1; +} + +/** read acl tag datas config for interface */ +static int +read_acl_interface_tag_datas(struct acl_list* acl_interface, + struct config_file* cfg, + struct config_str3list** acl_tag_datas, int port) +{ + struct config_str3list* p, *np; + p = *acl_tag_datas; + *acl_tag_datas = NULL; + while(p) { + char** resif = NULL; + int num_resif = 0; + int i; + log_assert(p->str && p->str2 && p->str3); + if(!resolve_interface_names(&p->str, 1, NULL, &resif, &num_resif)) { + config_deltrplstrlist(p); + return 0; + } + for(i = 0; istr, + p->str2, p->str3, 1, port)) { + config_deltrplstrlist(p); + config_del_strarray(resif, num_resif); + return 0; + } + } + config_del_strarray(resif, num_resif); + /* free the items as we go to free up memory */ + np = p->next; + free(p->str); + free(p->str2); + free(p->str3); + free(p); + p = np; + } + return 1; +} + +int +acl_interface_apply_cfg(struct acl_list* acl_interface, struct config_file* cfg, + struct views* v) +{ + if(!read_acl_interface_action(acl_interface, cfg->interface_actions, + cfg->port)) + return 0; + if(!read_acl_interface_view(acl_interface, &cfg->interface_view, v, + cfg->port)) + return 0; + if(!read_acl_interface_tags(acl_interface, &cfg->interface_tags, + cfg->port)) + return 0; + if(!read_acl_interface_tag_actions(acl_interface, cfg, + &cfg->interface_tag_actions, cfg->port)) + return 0; + if(!read_acl_interface_tag_datas(acl_interface, cfg, + &cfg->interface_tag_datas, cfg->port)) + return 0; + addr_tree_init_parents(&acl_interface->tree); + return 1; +} + +enum acl_access acl_get_control(struct acl_addr* acl) { if(acl) return acl->control; @@ -481,7 +759,7 @@ acl_addr_lookup(struct acl_list* acl, struct sockaddr_storage* addr, addr, addrlen); } -size_t +size_t acl_list_get_mem(struct acl_list* acl) { if(!acl) return 0; diff --git a/daemon/acl_list.h b/daemon/acl_list.h index c09e832a1..6617ec8c4 100644 --- a/daemon/acl_list.h +++ b/daemon/acl_list.h @@ -36,7 +36,7 @@ /** * \file * - * This file keeps track of the list of clients that are allowed to + * This file keeps track of the list of clients that are allowed to * access the server. */ @@ -74,7 +74,7 @@ enum acl_access { struct acl_list { /** regional for allocation */ struct regional* region; - /** + /** * Tree of the addresses that are allowed/blocked. * contents of type acl_addr. */ @@ -108,7 +108,7 @@ struct acl_addr { }; /** - * Create acl structure + * Create acl structure * @return new structure or NULL on error. */ struct acl_list* acl_list_create(void); @@ -119,6 +119,19 @@ struct acl_list* acl_list_create(void); */ void acl_list_delete(struct acl_list* acl); +/** + * Insert interface in the alc_list. This should happen when the listening + * interface is setup. + * @param acl_interface: acl_list to insert to. + * @param interface: interface (IP) in string format. + * @param s2: acl_access in string format. + * @param port: default port. + * @return new structure or NULL on error. + */ +struct acl_addr* +acl_interface_insert(struct acl_list* acl_interface, const char* interface, + const char* s2, int port); + /** * Process access control config. * @param acl: where to store. @@ -129,6 +142,25 @@ void acl_list_delete(struct acl_list* acl); int acl_list_apply_cfg(struct acl_list* acl, struct config_file* cfg, struct views* v); +/** compare ACL interface "addr_tree" nodes (+port) */ +int acl_interface_compare(const void* k1, const void* k2); + +/** + * Initialise (also clean) the acl_interface struct. + * @param acl_interface: where to store. + */ +void acl_interface_init(struct acl_list* acl_interface); + +/** + * Process interface control config. + * @param acl_interface: where to store. + * @param cfg: config options. + * @param v: views structure + * @return 0 on error. + */ +int acl_interface_apply_cfg(struct acl_list* acl_interface, struct config_file* cfg, + struct views* v); + /** * Lookup access control status for acl structure. * @param acl: structure for acl storage. diff --git a/daemon/daemon.c b/daemon/daemon.c index 4ed531855..28a06175d 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -271,8 +271,17 @@ daemon_init(void) free(daemon); return NULL; } + daemon->acl_interface = acl_list_create(); + if(!daemon->acl_interface) { + acl_list_delete(daemon->acl); + edns_known_options_delete(daemon->env); + free(daemon->env); + free(daemon); + return NULL; + } daemon->tcl = tcl_list_create(); if(!daemon->tcl) { + acl_list_delete(daemon->acl_interface); acl_list_delete(daemon->acl); edns_known_options_delete(daemon->env); free(daemon->env); @@ -284,6 +293,7 @@ daemon_init(void) log_err("gettimeofday: %s", strerror(errno)); daemon->time_last_stat = daemon->time_boot; if((daemon->env->auth_zones = auth_zones_create()) == 0) { + acl_list_delete(daemon->acl_interface); acl_list_delete(daemon->acl); tcl_list_delete(daemon->tcl); edns_known_options_delete(daemon->env); @@ -293,6 +303,7 @@ daemon_init(void) } if(!(daemon->env->edns_strings = edns_strings_create())) { auth_zones_delete(daemon->env->auth_zones); + acl_list_delete(daemon->acl_interface); acl_list_delete(daemon->acl); tcl_list_delete(daemon->tcl); edns_known_options_delete(daemon->env); @@ -320,6 +331,8 @@ daemon_open_shared_ports(struct daemon* daemon) free(daemon->ports); daemon->ports = NULL; } + /* clean acl_interface */ + acl_interface_init(daemon->acl_interface); if(!resolve_interface_names(daemon->cfg->ifs, daemon->cfg->num_ifs, NULL, &resif, &num_resif)) return 0; @@ -329,7 +342,8 @@ daemon_open_shared_ports(struct daemon* daemon) daemon->reuseport = 1; #endif /* try to use reuseport */ - p0 = listening_ports_open(daemon->cfg, resif, num_resif, &daemon->reuseport); + p0 = listening_ports_open(daemon->cfg, daemon->acl_interface, + resif, num_resif, &daemon->reuseport); if(!p0) { listening_ports_free(p0); config_del_strarray(resif, num_resif); @@ -355,6 +369,7 @@ daemon_open_shared_ports(struct daemon* daemon) for(i=1; inum_ports; i++) { if(!(daemon->ports[i]= listening_ports_open(daemon->cfg, + daemon->acl_interface, resif, num_resif, &daemon->reuseport)) || !daemon->reuseport ) { @@ -604,6 +619,9 @@ daemon_fork(struct daemon* daemon) if(!acl_list_apply_cfg(daemon->acl, daemon->cfg, daemon->views)) fatal_exit("Could not setup access control list"); + if(!acl_interface_apply_cfg(daemon->acl_interface, daemon->cfg, + daemon->views)) + fatal_exit("Could not setup interface control list"); if(!tcl_list_apply_cfg(daemon->tcl, daemon->cfg)) fatal_exit("Could not setup TCP connection limits"); if(daemon->cfg->dnscrypt) { @@ -780,6 +798,7 @@ daemon_delete(struct daemon* daemon) ub_randfree(daemon->rand); alloc_clear(&daemon->superalloc); acl_list_delete(daemon->acl); + acl_list_delete(daemon->acl_interface); tcl_list_delete(daemon->tcl); listen_desetup_locks(); free(daemon->chroot); diff --git a/daemon/daemon.h b/daemon/daemon.h index 3effbafb7..58713e9ce 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -113,6 +113,8 @@ struct daemon { struct module_stack mods; /** access control, which client IPs are allowed to connect */ struct acl_list* acl; + /** access control, which interfaces are allowed to connect */ + struct acl_list* acl_interface; /** TCP connection limit, limit connections from client IPs */ struct tcl_list* tcl; /** local authority zones */ diff --git a/daemon/worker.c b/daemon/worker.c index 4a06f53ec..94b7d9b53 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1330,6 +1330,10 @@ worker_handle_request(struct comm_point* c, void* arg, int error, #endif acladdr = acl_addr_lookup(worker->daemon->acl, &repinfo->addr, repinfo->addrlen); + /* If there is no ACL based on client IP use the interface ACL. */ + if(!acladdr) { + acladdr = c->socket->acl; + } acl = acl_get_control(acladdr); if((ret=deny_refuse_all(c, acl, worker, repinfo, acladdr, diff --git a/dnstap/dtstream.c b/dnstap/dtstream.c index 377ae9916..9153f0404 100644 --- a/dnstap/dtstream.c +++ b/dnstap/dtstream.c @@ -1960,7 +1960,7 @@ static int dtio_open_output_tcp(struct dt_io_thread* dtio) memset(&addr, 0, sizeof(addr)); addrlen = (socklen_t)sizeof(addr); - if(!extstrtoaddr(dtio->ip_str, &addr, &addrlen)) { + if(!extstrtoaddr(dtio->ip_str, &addr, &addrlen, UNBOUND_DNS_PORT)) { log_err("could not parse IP '%s'", dtio->ip_str); return 0; } diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 1cc450277..3bf889463 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -272,7 +272,7 @@ static int make_tcp_accept(char* ip) memset(&addr, 0, sizeof(addr)); len = (socklen_t)sizeof(addr); - if(!extstrtoaddr(ip, &addr, &len)) { + if(!extstrtoaddr(ip, &addr, &len, UNBOUND_DNS_PORT)) { log_err("could not parse IP '%s'", ip); return -1; } diff --git a/doc/example.conf.in b/doc/example.conf.in index 27281608f..2bd106448 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -17,7 +17,7 @@ server: # whitespace is not necessary, but looks cleaner. # verbosity number, 0 is least verbose. 1 is default. - verbosity: 1 + # verbosity: 1 # print statistics to the log (for every thread) every N seconds. # Set to "" or 0 to disable. Default is disabled. @@ -50,6 +50,7 @@ server: # interface: 192.0.2.154 # interface: 192.0.2.154@5003 # interface: 2001:DB8::5 + # interface: eth0@5003 # enable this feature to copy the source address of queries to reply. # Socket options are not supported on all platforms. experimental. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 3e6baaa92..23a0237e6 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -118,7 +118,7 @@ The number of threads to create to serve clients. Use 1 for no threading. .B port: \fI The port number, default 53, on which the server responds to queries. .TP -.B interface: \fI +.B interface: \fI Interface to use to connect to the network. This interface is listened to for queries from clients, and answers to clients are given from it. Can be given multiple times to work on several interfaces. If none are @@ -129,7 +129,7 @@ A port number can be specified with @port (without spaces between interface and port number), if not specified the default port (from \fBport\fR) is used. .TP -.B ip\-address: \fI +.B ip\-address: \fI Same as interface: (for ease of compatibility with nsd.conf). .TP .B interface\-automatic: \fI @@ -1823,9 +1823,11 @@ section for options. To setup the correct self\-signed certificates use the The option is used to enable remote control, default is "no". If turned off, the server does not listen for control commands. .TP 5 -.B control\-interface: \fI +.B control\-interface: \fI Give IPv4 or IPv6 addresses or local socket path to listen on for control commands. +If an interface name is used instead of an ip address, the list of ip addresses +on that interface are used. By default localhost (127.0.0.1 and ::1) is listened to. Use 0.0.0.0 and ::0 to listen to all interfaces. If you change this and permissions have been dropped, you must restart diff --git a/iterator/iter_hints.c b/iterator/iter_hints.c index 9b1a200bb..a60d9a6b1 100644 --- a/iterator/iter_hints.c +++ b/iterator/iter_hints.c @@ -100,7 +100,7 @@ ah(struct delegpt* dp, const char* sv, const char* ip) return 0; } if(!delegpt_add_ns_mlc(dp, dname, 0, NULL, UNBOUND_DNS_PORT) || - !extstrtoaddr(ip, &addr, &addrlen) || + !extstrtoaddr(ip, &addr, &addrlen, UNBOUND_DNS_PORT) || !delegpt_add_target_mlc(dp, dname, dname_len, &addr, addrlen, 0, 0)) { free(dname); diff --git a/libunbound/libunbound.c b/libunbound/libunbound.c index 038b7b927..ea5ef24bb 100644 --- a/libunbound/libunbound.c +++ b/libunbound/libunbound.c @@ -951,7 +951,7 @@ ub_ctx_set_fwd(struct ub_ctx* ctx, const char* addr) lock_basic_unlock(&ctx->cfglock); /* check syntax for addr */ - if(!extstrtoaddr(addr, &storage, &stlen)) { + if(!extstrtoaddr(addr, &storage, &stlen, UNBOUND_DNS_PORT)) { errno=EINVAL; return UB_SYNTAX; } @@ -1031,7 +1031,7 @@ int ub_ctx_set_stub(struct ub_ctx* ctx, const char* zone, const char* addr, if(addr) { struct sockaddr_storage storage; socklen_t stlen; - if(!extstrtoaddr(addr, &storage, &stlen)) { + if(!extstrtoaddr(addr, &storage, &stlen, UNBOUND_DNS_PORT)) { errno=EINVAL; return UB_SYNTAX; } diff --git a/services/authzone.c b/services/authzone.c index b9e0b11ef..6de1e4319 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -3699,7 +3699,7 @@ addr_matches_master(struct auth_master* master, struct sockaddr_storage* addr, /* compare address (but not port number, that is the destination * port of the master, the port number of the received notify is * allowed to by any port on that master) */ - if(extstrtoaddr(master->host, &a, &alen) && + if(extstrtoaddr(master->host, &a, &alen, UNBOUND_DNS_PORT) && sockaddr_cmp_addr(addr, addrlen, &a, alen)==0) { *fromhost = master; return 1; @@ -5381,7 +5381,7 @@ xfr_transfer_lookup_host(struct auth_xfer* xfr, struct module_env* env) struct edns_data edns; sldns_buffer* buf = env->scratch_buffer; if(!master) return 0; - if(extstrtoaddr(master->host, &addr, &addrlen)) { + if(extstrtoaddr(master->host, &addr, &addrlen, UNBOUND_DNS_PORT)) { /* not needed, host is in IP addr format */ return 0; } @@ -6572,7 +6572,7 @@ xfr_probe_lookup_host(struct auth_xfer* xfr, struct module_env* env) struct edns_data edns; sldns_buffer* buf = env->scratch_buffer; if(!master) return 0; - if(extstrtoaddr(master->host, &addr, &addrlen)) { + if(extstrtoaddr(master->host, &addr, &addrlen, UNBOUND_DNS_PORT)) { /* not needed, host is in IP addr format */ return 0; } diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 1263e0ead..fb2c53ba2 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -124,12 +124,12 @@ verbose_print_addr(struct addrinfo *addr) (void)strlcpy(buf, "(null)", sizeof(buf)); } buf[sizeof(buf)-1] = 0; - verbose(VERB_ALGO, "creating %s%s socket %s %d", + verbose(VERB_ALGO, "creating %s%s socket %s %d", addr->ai_socktype==SOCK_DGRAM?"udp": addr->ai_socktype==SOCK_STREAM?"tcp":"otherproto", addr->ai_family==AF_INET?"4": addr->ai_family==AF_INET6?"6": - "_otherfam", buf, + "_otherfam", buf, ntohs(((struct sockaddr_in*)addr->ai_addr)->sin_port)); } } @@ -140,7 +140,9 @@ verbose_print_unbound_socket(struct unbound_socket* ub_sock) if(verbosity >= VERB_ALGO) { log_info("listing of unbound_socket structure:"); verbose_print_addr(ub_sock->addr); - log_info("s is: %d, fam is: %s", ub_sock->s, ub_sock->fam == AF_INET?"AF_INET":"AF_INET6"); + log_info("s is: %d, fam is: %s, acl: %s", ub_sock->s, + ub_sock->fam == AF_INET?"AF_INET":"AF_INET6", + ub_sock->acl?"yes":"no"); } } @@ -1046,6 +1048,7 @@ make_sock(int stype, const char* ifname, const char* port, ub_sock->addr = res; ub_sock->s = s; ub_sock->fam = hints->ai_family; + ub_sock->acl = NULL; return s; } @@ -1193,6 +1196,7 @@ if_is_ssl(const char* ifname, const char* port, int ssl_port, * @param hints: for getaddrinfo. family and flags have to be set by caller. * @param port: Port number to use (as string). * @param list: list of open ports, appended to, changed to point to list head. + * @param acl_interface: acl list with options for the interface. * @param rcv: receive buffer size for UDP * @param snd: send buffer size for UDP * @param ssl_port: ssl service port number @@ -1210,9 +1214,9 @@ if_is_ssl(const char* ifname, const char* port, int ssl_port, * @return: returns false on error. */ static int -ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, +ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, struct addrinfo *hints, const char* port, struct listen_port** list, - size_t rcv, size_t snd, int ssl_port, + struct acl_list* acl_interface, size_t rcv, size_t snd, int ssl_port, struct config_strlist* tls_additional_port, int https_port, int* reuseport, int transparent, int tcp_mss, int freebind, int http2_nodelay, int use_systemd, int dnscrypt_port, int dscp) @@ -1221,8 +1225,9 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, int is_https = if_is_https(ifname, port, https_port); int nodelay = is_https && http2_nodelay; struct unbound_socket* ub_sock; + struct acl_addr* acl_node; #ifdef USE_DNSCRYPT - int is_dnscrypt = ((strchr(ifname, '@') && + int is_dnscrypt = ((strchr(ifname, '@') && atoi(strchr(ifname, '@')+1) == dnscrypt_port) || (!strchr(ifname, '@') && atoi(port) == dnscrypt_port)); #else @@ -1235,9 +1240,10 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, if(do_auto) { ub_sock = calloc(1, sizeof(struct unbound_socket)); + acl_node = NULL; if(!ub_sock) return 0; - if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, + if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd, dscp, ub_sock)) == -1) { freeaddrinfo(ub_sock->addr); @@ -1255,19 +1261,29 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, free(ub_sock); return 0; } - if(!port_insert(list, s, - is_dnscrypt?listen_type_udpancil_dnscrypt:listen_type_udpancil, ub_sock)) { + if(!port_insert(list, s, is_dnscrypt + ?listen_type_udpancil_dnscrypt:listen_type_udpancil, + ub_sock)) { sock_close(s); freeaddrinfo(ub_sock->addr); free(ub_sock); return 0; } + if(!(acl_node = acl_interface_insert(acl_interface, ifname, + "refuse", ntohs(((struct sockaddr_in*)ub_sock->addr->ai_addr)->sin_port)))) { + sock_close(s); + freeaddrinfo(ub_sock->addr); + free(ub_sock); + return 0; + } + ub_sock->acl = acl_node; } else if(do_udp) { ub_sock = calloc(1, sizeof(struct unbound_socket)); + acl_node = NULL; if(!ub_sock) return 0; /* regular udp socket */ - if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, + if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, &noip6, rcv, snd, reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd, dscp, ub_sock)) == -1) { freeaddrinfo(ub_sock->addr); @@ -1278,19 +1294,28 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, } return 0; } - if(!port_insert(list, s, - is_dnscrypt?listen_type_udp_dnscrypt:listen_type_udp, ub_sock)) { + if(!port_insert(list, s, is_dnscrypt + ?listen_type_udp_dnscrypt:listen_type_udp, ub_sock)) { sock_close(s); freeaddrinfo(ub_sock->addr); free(ub_sock); return 0; } + if(!(acl_node = acl_interface_insert(acl_interface, ifname, + "refuse", ntohs(((struct sockaddr_in*)ub_sock->addr->ai_addr)->sin_port)))) { + sock_close(s); + freeaddrinfo(ub_sock->addr); + free(ub_sock); + return 0; + } + ub_sock->acl = acl_node; } if(do_tcp) { int is_ssl = if_is_ssl(ifname, port, ssl_port, tls_additional_port); enum listen_type port_type; ub_sock = calloc(1, sizeof(struct unbound_socket)); + acl_node = NULL; if(!ub_sock) return 0; if(is_ssl) @@ -1301,7 +1326,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, port_type = listen_type_tcp_dnscrypt; else port_type = listen_type_tcp; - if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1, + if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1, &noip6, 0, 0, reuseport, transparent, tcp_mss, nodelay, freebind, use_systemd, dscp, ub_sock)) == -1) { freeaddrinfo(ub_sock->addr); @@ -1320,6 +1345,14 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, free(ub_sock); return 0; } + if(!(acl_node = acl_interface_insert(acl_interface, ifname, + "refuse", ntohs(((struct sockaddr_in*)ub_sock->addr->ai_addr)->sin_port)))) { + sock_close(s); + freeaddrinfo(ub_sock->addr); + free(ub_sock); + return 0; + } + ub_sock->acl = acl_node; } return 1; } @@ -1716,9 +1749,9 @@ int resolve_interface_names(char** ifs, int num_ifs, #endif /* HAVE_GETIFADDRS */ } -struct listen_port* -listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs, - int* reuseport) +struct listen_port* +listening_ports_open(struct config_file* cfg, struct acl_list* acl_interface, + char** ifs, int num_ifs, int* reuseport) { struct listen_port* list = NULL; struct addrinfo hints; @@ -1807,9 +1840,9 @@ listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs, } if(do_ip6) { hints.ai_family = AF_INET6; - if(!ports_create_if(do_auto?"::0":"::1", - do_auto, cfg->do_udp, do_tcp, - &hints, portbuf, &list, + if(!ports_create_if(do_auto?"::0":"::1", + do_auto, cfg->do_udp, do_tcp, + &hints, portbuf, &list, acl_interface, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, cfg->https_port, reuseport, cfg->ip_transparent, @@ -1822,9 +1855,9 @@ listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs, } if(do_ip4) { hints.ai_family = AF_INET; - if(!ports_create_if(do_auto?"0.0.0.0":"127.0.0.1", - do_auto, cfg->do_udp, do_tcp, - &hints, portbuf, &list, + if(!ports_create_if(do_auto?"0.0.0.0":"127.0.0.1", + do_auto, cfg->do_udp, do_tcp, + &hints, portbuf, &list, acl_interface, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, cfg->https_port, reuseport, cfg->ip_transparent, @@ -1841,7 +1874,7 @@ listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs, continue; hints.ai_family = AF_INET6; if(!ports_create_if(ifs[i], 0, cfg->do_udp, - do_tcp, &hints, portbuf, &list, + do_tcp, &hints, portbuf, &list, acl_interface, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, cfg->https_port, reuseport, cfg->ip_transparent, @@ -1856,7 +1889,7 @@ listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs, continue; hints.ai_family = AF_INET; if(!ports_create_if(ifs[i], 0, cfg->do_udp, - do_tcp, &hints, portbuf, &list, + do_tcp, &hints, portbuf, &list, acl_interface, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, cfg->https_port, reuseport, cfg->ip_transparent, diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index 0e63236bc..70b3da0f0 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -43,6 +43,7 @@ #define LISTEN_DNSPORT_H #include "util/netevent.h" +#include "daemon/acl_list.h" #ifdef HAVE_NGHTTP2_NGHTTP2_H #include #endif @@ -107,11 +108,13 @@ enum listen_type { */ struct unbound_socket { /** socket-address structure */ - struct addrinfo * addr; + struct addrinfo* addr; /** socket descriptor returned by socket() syscall */ - int s; + int s; /** address family (AF_INET/IF_INET6) */ - int fam; + int fam; + /** ACL on the socket (listening interface) */ + struct acl_addr* acl; }; /** @@ -135,6 +138,7 @@ struct listen_port { * interfaces for IP4 and/or IP6, for UDP and/or TCP. * On the given port number. It creates the sockets. * @param cfg: settings on what ports to open. + * @param acl_interface: acl list for interface options. * @param ifs: interfaces to open, array of IP addresses, "ip[@port]". * @param num_ifs: length of ifs. * @param reuseport: set to true if you want reuseport, or NULL to not have it, @@ -143,6 +147,7 @@ struct listen_port { * @return: linked list of ports or NULL on error. */ struct listen_port* listening_ports_open(struct config_file* cfg, + struct acl_list* acl_interface, char** ifs, int num_ifs, int* reuseport); /** diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index c25182bd2..39b507499 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -316,7 +316,7 @@ warn_hosts(const char* typ, struct config_stub* list) struct config_strlist* h; for(s=list; s; s=s->next) { for(h=s->hosts; h; h=h->next) { - if(extstrtoaddr(h->str, &a, &alen)) { + if(extstrtoaddr(h->str, &a, &alen, UNBOUND_DNS_PORT)) { fprintf(stderr, "unbound-checkconf: warning:" " %s %s: \"%s\" is an IP%s address, " "and when looked up as a host name " @@ -361,7 +361,7 @@ interfacechecks(struct config_file* cfg) } /* search for duplicates in the returned addresses */ for(j=0; jifs[i], resif[i][j]) != 0) fatal_exit("cannot parse interface address '%s' from the interface specified as '%s'", resif[i][j], cfg->ifs[i]); diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index d473702c4..34fb801bb 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -601,7 +601,7 @@ contact_server(const char* svr, struct config_file* cfg, int statuscmd) struct sockaddr_storage addr2; socklen_t addrlen2; if(extstrtoaddr(cfg->control_ifs.first->str, &addr2, - &addrlen2)) { + &addrlen2, UNBOUND_DNS_PORT)) { svr = cfg->control_ifs.first->str; } else { if(!resolve_interface_names(NULL, 0, @@ -629,7 +629,7 @@ contact_server(const char* svr, struct config_file* cfg, int statuscmd) svr = "::1"; } if(strchr(svr, '@')) { - if(!extstrtoaddr(svr, &addr, &addrlen)) + if(!extstrtoaddr(svr, &addr, &addrlen, UNBOUND_DNS_PORT)) fatal_exit("could not parse IP@port: %s", svr); #ifdef HAVE_SYS_UN_H } else if(svr[0] == '/') { diff --git a/testcode/delayer.c b/testcode/delayer.c index e915961f5..647a4e24c 100644 --- a/testcode/delayer.c +++ b/testcode/delayer.c @@ -974,7 +974,7 @@ service(const char* bind_str, int bindport, const char* serv_str, dl_tv_add(&reuse, &delay); if(reuse.tv_sec == 0) reuse.tv_sec = 1; - if(!extstrtoaddr(serv_str, &srv_addr, &srv_len)) { + if(!extstrtoaddr(serv_str, &srv_addr, &srv_len, UNBOUND_DNS_PORT)) { printf("cannot parse forward address: %s\n", serv_str); exit(1); } diff --git a/testcode/fake_event.c b/testcode/fake_event.c index be06a4721..a50e2f3b1 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1341,6 +1341,7 @@ int resolve_interface_names(char** ATTR_UNUSED(ifs), int ATTR_UNUSED(num_ifs), } struct listen_port* listening_ports_open(struct config_file* ATTR_UNUSED(cfg), + struct acl_list* ATTR_UNUSED(acl_interface), char** ATTR_UNUSED(ifs), int ATTR_UNUSED(num_ifs), int* ATTR_UNUSED(reuseport)) { diff --git a/testcode/perf.c b/testcode/perf.c index 55d6483c7..7fb524e22 100644 --- a/testcode/perf.c +++ b/testcode/perf.c @@ -618,7 +618,7 @@ int main(int argc, char* argv[]) printf("error: pass server IP address on commandline.\n"); usage(nm); } - if(!extstrtoaddr(argv[0], &info.dest, &info.destlen)) { + if(!extstrtoaddr(argv[0], &info.dest, &info.destlen, UNBOUND_DNS_PORT)) { printf("Could not parse ip: %s\n", argv[0]); exit(1); } diff --git a/testcode/replay.c b/testcode/replay.c index 2487c146f..43101d6ac 100644 --- a/testcode/replay.c +++ b/testcode/replay.c @@ -179,7 +179,8 @@ replay_range_read(char* remain, FILE* in, const char* name, while(isspace((unsigned char)*parse)) parse++; strip_end_white(parse); - if(!extstrtoaddr(parse, &rng->addr, &rng->addrlen)) { + if(!extstrtoaddr(parse, &rng->addr, &rng->addrlen, + UNBOUND_DNS_PORT)) { log_err("Line %d: could not read ADDRESS: %s", pstate->lineno, parse); free(rng); @@ -287,7 +288,8 @@ replay_moment_read(char* remain, FILE* in, const char* name, } else if(parse_keyword(&remain, "QUERY")) { mom->evt_type = repevt_front_query; readentry = 1; - if(!extstrtoaddr("127.0.0.1", &mom->addr, &mom->addrlen)) + if(!extstrtoaddr("127.0.0.1", &mom->addr, &mom->addrlen, + UNBOUND_DNS_PORT)) fatal_exit("internal error"); } else if(parse_keyword(&remain, "CHECK_ANSWER")) { mom->evt_type = repevt_front_reply; @@ -354,7 +356,7 @@ replay_moment_read(char* remain, FILE* in, const char* name, m++; while(isspace((unsigned char)*m)) m++; - if(!extstrtoaddr(s, &mom->addr, &mom->addrlen)) + if(!extstrtoaddr(s, &mom->addr, &mom->addrlen, UNBOUND_DNS_PORT)) fatal_exit("bad infra_rtt address %s", s); strip_end_white(m); mom->variable = strdup(remain); @@ -372,7 +374,8 @@ replay_moment_read(char* remain, FILE* in, const char* name, while(isspace((unsigned char)*remain)) remain++; strip_end_white(remain); - if(!extstrtoaddr(remain, &mom->addr, &mom->addrlen)) { + if(!extstrtoaddr(remain, &mom->addr, &mom->addrlen, + UNBOUND_DNS_PORT)) { log_err("line %d: could not parse ADDRESS: %s", pstate->lineno, remain); free(mom); diff --git a/testcode/streamtcp.c b/testcode/streamtcp.c index ecc83c1cf..0761e9d18 100644 --- a/testcode/streamtcp.c +++ b/testcode/streamtcp.c @@ -89,7 +89,7 @@ open_svr(const char* svr, int udp) int fd = -1; /* svr can be ip@port */ memset(&addr, 0, sizeof(addr)); - if(!extstrtoaddr(svr, &addr, &addrlen)) { + if(!extstrtoaddr(svr, &addr, &addrlen, UNBOUND_DNS_PORT)) { printf("fatal: bad server specs '%s'\n", svr); exit(1); } diff --git a/util/config_file.c b/util/config_file.c index 9721ca696..158169c42 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -822,7 +822,7 @@ int config_set_option(struct config_file* cfg, const char* opt, * stub-ssl-upstream, forward-zone, auth-zone * name, forward-addr, forward-host, * ratelimit-for-domain, ratelimit-below-domain, - * local-zone-tag, access-control-view, + * local-zone-tag, access-control-view, interface-*, * send-client-subnet, client-subnet-always-forward, * max-client-subnet-ipv4, max-client-subnet-ipv6, * min-client-subnet-ipv4, min-client-subnet-ipv6, @@ -1252,6 +1252,11 @@ config_get_option(struct config_file* cfg, const char* opt, else O_LS3(opt, "access-control-tag-action", acl_tag_actions) else O_LS3(opt, "access-control-tag-data", acl_tag_datas) else O_LS2(opt, "access-control-view", acl_view) + else O_LS2(opt, "interface-action", interface_actions) + else O_LTG(opt, "interface-tag", interface_tags) + else O_LS3(opt, "interface-tag-action", interface_tag_actions) + else O_LS3(opt, "interface-tag-data", interface_tag_datas) + else O_LS2(opt, "interface-view", interface_view) else O_YNO(opt, "pad-responses", pad_responses) else O_DEC(opt, "pad-responses-block-size", pad_responses_block_size) else O_YNO(opt, "pad-queries", pad_queries) @@ -1607,10 +1612,16 @@ config_delete(struct config_file* cfg) config_deltrplstrlist(cfg->local_zone_overrides); config_del_strarray(cfg->tagname, cfg->num_tags); config_del_strbytelist(cfg->local_zone_tags); - config_del_strbytelist(cfg->acl_tags); config_del_strbytelist(cfg->respip_tags); + config_deldblstrlist(cfg->acl_view); + config_del_strbytelist(cfg->acl_tags); config_deltrplstrlist(cfg->acl_tag_actions); config_deltrplstrlist(cfg->acl_tag_datas); + config_deldblstrlist(cfg->interface_actions); + config_deldblstrlist(cfg->interface_view); + config_del_strbytelist(cfg->interface_tags); + config_deltrplstrlist(cfg->interface_tag_actions); + config_deltrplstrlist(cfg->interface_tag_datas); config_delstrlist(cfg->control_ifs.first); free(cfg->server_key_file); free(cfg->server_cert_file); diff --git a/util/config_file.h b/util/config_file.h index 90b4db834..bbc6d4ac1 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -461,6 +461,16 @@ struct config_file { struct config_str3list* acl_tag_datas; /** list of aclname, view*/ struct config_str2list* acl_view; + /** list of interface action entries, linked list */ + struct config_str2list* interface_actions; + /** list of interface, tagbitlist */ + struct config_strbytelist* interface_tags; + /** list of interface, tagname, localzonetype */ + struct config_str3list* interface_tag_actions; + /** list of interface, tagname, redirectdata */ + struct config_str3list* interface_tag_datas; + /** list of interface, view*/ + struct config_str2list* interface_view; /** list of IP-netblock, tagbitlist */ struct config_strbytelist* respip_tags; /** list of response-driven access control entries, linked list */ diff --git a/util/configlexer.c b/util/configlexer.c index eeac5ba2f..0323464e3 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 363 -#define YY_END_OF_BUFFER 364 +#define YY_NUM_RULES 368 +#define YY_END_OF_BUFFER 369 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,404 +363,407 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3600] = +static const flex_int16_t yy_accept[3628] = { 0, - 1, 1, 337, 337, 341, 341, 345, 345, 349, 349, - 1, 1, 353, 353, 357, 357, 364, 361, 1, 335, - 335, 362, 2, 362, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 337, 338, 338, 339, - 362, 341, 342, 342, 343, 362, 348, 345, 346, 346, - 347, 362, 349, 350, 350, 351, 362, 360, 336, 2, - 340, 362, 360, 356, 353, 354, 354, 355, 362, 357, - 358, 358, 359, 362, 361, 0, 1, 2, 2, 2, - 2, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 1, 1, 342, 342, 346, 346, 350, 350, 354, 354, + 1, 1, 358, 358, 362, 362, 369, 366, 1, 340, + 340, 367, 2, 367, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 342, 343, 343, 344, + 367, 346, 347, 347, 348, 367, 353, 350, 351, 351, + 352, 367, 354, 355, 355, 356, 367, 365, 341, 2, + 345, 367, 365, 361, 358, 359, 359, 360, 367, 362, + 363, 363, 364, 367, 366, 0, 1, 2, 2, 2, + 2, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 337, - 0, 341, 0, 348, 0, 345, 349, 0, 360, 0, - 2, 2, 360, 356, 0, 353, 357, 0, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 342, + 0, 346, 0, 353, 0, 350, 354, 0, 365, 0, + 2, 2, 365, 361, 0, 358, 362, 0, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 360, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 365, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 334, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 133, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 143, 361, 361, 361, 361, 361, 361, - 361, 360, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 366, 366, 366, 339, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 133, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 143, 366, 366, 366, 366, 366, 366, + 366, 365, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 115, 361, 333, 361, 361, 361, 361, 361, - 361, 361, 361, 8, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 115, 366, 338, 366, 366, 366, 366, 366, + 366, 366, 366, 8, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 134, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 148, 361, - 361, 360, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 134, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 148, 366, + 366, 365, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 326, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 331, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 360, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 69, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 255, 361, 14, 15, 361, 19, 18, - 361, 361, 239, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 365, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 69, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 260, 366, 14, 15, 366, 19, 18, + 366, 366, 240, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 141, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 237, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 3, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 141, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 238, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 3, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 360, 361, 361, 361, 361, - 361, 361, 361, 320, 361, 361, 319, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 365, 366, 366, 366, 366, + 366, 366, 366, 325, 366, 366, 324, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 344, 361, 361, - 361, 361, 361, 361, 361, 361, 68, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 72, 361, 289, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 327, 328, 361, 361, 361, - 361, 361, 361, 361, 361, 73, 361, 361, 142, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 137, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 226, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 349, 366, 366, + 366, 366, 366, 366, 366, 366, 68, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 72, 366, 294, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 332, 333, 366, 366, 366, + 366, 366, 366, 366, 366, 73, 366, 366, 142, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 137, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 227, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 21, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 168, 361, 361, 361, 361, 361, 360, 344, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 113, - 361, 361, 361, 361, 361, 361, 361, 297, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 195, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 21, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 169, 366, 366, 366, 366, 366, 365, 349, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 113, + 366, 366, 366, 366, 366, 366, 366, 302, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 196, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 167, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 112, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 168, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 112, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 35, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 36, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 70, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 140, 361, 361, 361, - 360, 361, 361, 361, 361, 361, 132, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 71, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 259, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 35, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 36, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 70, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 140, 366, 366, 366, + 365, 366, 366, 366, 366, 366, 132, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 71, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 264, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 196, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 58, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 197, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 58, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 277, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 63, 361, 64, - 361, 361, 361, 361, 361, 116, 361, 117, 361, 361, - 361, 361, 361, 114, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 7, 361, 361, - 361, 361, 360, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 282, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 63, 366, 64, + 366, 366, 366, 366, 366, 116, 366, 117, 366, 366, + 366, 366, 366, 114, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 7, 366, 366, + 366, 366, 365, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 248, 361, 361, 361, 361, 171, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 260, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 49, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 59, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 218, - 361, 217, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 249, 366, 366, 366, 366, 172, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 265, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 49, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 59, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 219, 366, 218, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 16, 17, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 74, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 225, 361, 361, 361, 361, 361, 361, 119, 361, - 118, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 209, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 149, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 16, 17, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 74, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 226, 366, 366, 366, 366, 366, 366, + 119, 366, 118, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 210, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 149, - 361, 360, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 107, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 95, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 238, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 100, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 67, 361, 361, 361, 361, 361, 361, + 366, 366, 366, 365, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 107, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 95, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 239, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 100, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 67, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 212, 213, 361, 361, 361, 291, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 6, 361, 361, 361, 361, 361, 361, 361, 310, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 295, 361, - 361, 361, 361, 361, 361, 361, 321, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 46, 361, 361, 361, 361, 361, 48, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 213, 214, 366, + 366, 366, 296, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 6, 366, 366, 366, + 366, 366, 366, 366, 315, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 300, 366, 366, 366, 366, 366, 366, + 366, 326, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 46, 366, 366, 366, - 361, 96, 361, 361, 361, 361, 361, 56, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 360, - 361, 205, 361, 361, 361, 144, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 230, 361, 206, 361, - 361, 361, 245, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 57, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 146, 125, 361, 126, 361, - 361, 361, 361, 124, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 164, 361, 361, 54, 361, 361, 361, + 366, 366, 48, 366, 366, 366, 96, 366, 366, 366, + 366, 366, 56, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 365, 366, 206, 366, 366, 366, + 144, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 231, 366, 207, 366, 366, 366, 246, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 57, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 146, 125, 366, 126, 366, 366, 366, 366, 124, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 165, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 276, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 207, 361, 361, 361, 361, 361, - 210, 361, 216, 361, 361, 361, 361, 361, 361, 244, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 111, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 138, 361, 361, - 361, 361, 361, 361, 361, 361, 65, 361, 361, 361, - 29, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 54, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 281, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 208, 366, 366, 366, 366, 366, 211, 366, + 217, 366, 366, 366, 366, 366, 366, 245, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 111, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 138, 366, 366, 366, 366, + 366, 366, 366, 366, 65, 366, 366, 366, 29, 366, - 361, 361, 361, 20, 361, 361, 361, 361, 361, 361, - 361, 30, 39, 361, 176, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 203, - 361, 361, 360, 361, 361, 361, 361, 361, 361, 82, - 84, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 299, 361, 361, 361, 361, 256, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 127, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 163, 361, 50, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 20, 366, 366, 366, 366, 366, 366, 366, 30, + 39, 366, 177, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 204, 366, 366, + 365, 366, 366, 366, 366, 366, 366, 82, 84, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 304, 366, 366, 366, 366, 261, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 127, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 314, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 170, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 308, 361, 361, 361, - 236, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 324, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 188, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 120, 361, 361, 361, 361, 361, + 366, 366, 366, 164, 366, 50, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 255, 366, 366, 366, + 366, 366, 366, 366, 319, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 171, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 313, 366, + 366, 366, 237, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 329, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 189, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 183, 361, - 197, 361, 361, 361, 361, 361, 361, 361, 360, 361, - 152, 361, 361, 361, 361, 361, 106, 361, 361, 361, - 361, 228, 361, 361, 361, 361, 361, 361, 246, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 268, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 145, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 187, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 120, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 184, 366, 198, 366, 366, 366, 366, 366, 366, 366, + 365, 366, 152, 366, 366, 366, 366, 366, 106, 366, + 366, 366, 366, 229, 366, 366, 366, 366, 366, 366, + 247, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 273, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 145, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 85, 361, 86, 361, 361, 361, 361, - 361, 361, 66, 317, 361, 361, 361, 361, 361, 94, - 198, 361, 219, 361, 249, 361, 361, 211, 292, 361, - 361, 361, 361, 361, 361, 78, 361, 200, 361, 361, - 361, 361, 361, 361, 9, 361, 361, 361, 361, 361, - 110, 361, 361, 361, 361, 361, 281, 361, 361, 361, - 361, 227, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 188, 366, 366, + 366, 366, 366, 366, 366, 85, 366, 86, 366, 366, + 366, 366, 366, 258, 366, 366, 366, 366, 66, 322, + 366, 366, 366, 366, 366, 94, 199, 366, 220, 366, + 250, 366, 366, 212, 297, 366, 366, 366, 366, 366, + 366, 78, 366, 201, 366, 366, 366, 366, 366, 366, + 9, 366, 366, 366, 366, 366, 110, 366, 366, 366, + 366, 366, 286, 366, 366, 366, 366, 228, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 360, 361, 361, 361, - 361, 186, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 172, 361, 298, 361, 361, 361, 361, 361, - 267, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 240, 361, 361, 361, 361, 361, 361, 290, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 169, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 318, 361, 199, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 365, 366, 366, 366, 366, 187, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 173, 366, + 303, 366, 366, 366, 366, 366, 272, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 241, 366, + 366, 366, 366, 366, 366, 295, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 170, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 77, 79, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 109, 361, - 361, 361, 361, 361, 279, 361, 361, 361, 361, 294, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 232, 37, 31, 33, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 38, - 361, 32, 34, 361, 40, 361, 361, 361, 361, 361, - 361, 361, 105, 361, 182, 361, 361, 361, 361, 361, - 361, 361, 360, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 234, 231, 361, 361, 361, 361, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 323, 366, 200, 366, 366, 366, + 366, 366, 366, 366, 366, 77, 79, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 109, 366, 366, + 366, 366, 366, 284, 366, 366, 366, 366, 299, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 233, 37, 31, 33, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 38, 366, + 32, 34, 366, 40, 366, 366, 366, 366, 366, 366, + 366, 105, 366, 183, 366, 366, 366, 366, 366, 366, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 76, 361, 361, 361, 147, - 361, 128, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 165, 51, 361, 361, 361, 352, 13, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 312, 361, 315, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 12, 361, 361, 22, - 361, 361, 361, 361, 361, 361, 285, 361, 361, 361, - 361, 296, 361, 361, 361, 361, 80, 361, 242, 361, - 361, 361, 361, 361, 233, 361, 361, 75, 361, 361, + 366, 365, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 235, 232, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 76, 366, 366, 366, 147, 366, + 128, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 166, 51, 366, 366, 366, 357, 13, 366, 366, + 366, 366, 366, 366, 366, 153, 366, 366, 366, 366, + 366, 366, 366, 317, 366, 320, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 12, 366, + 366, 22, 366, 366, 366, 366, 366, 366, 290, 366, - 361, 361, 361, 361, 23, 361, 361, 47, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 181, 180, 361, 361, 352, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 235, 229, 361, 247, 361, 361, - 300, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 193, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 87, 361, 361, - 361, 361, 361, 280, 361, 361, 361, 361, 215, 361, - 361, 361, 361, 361, 241, 361, 361, 361, 361, 361, + 366, 366, 366, 301, 366, 366, 366, 366, 80, 366, + 243, 366, 366, 366, 366, 366, 234, 366, 366, 75, + 366, 366, 366, 366, 366, 366, 23, 366, 366, 47, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 182, 181, 366, 366, 357, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 236, 230, 366, 248, + 366, 366, 305, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 194, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 87, - 361, 361, 361, 361, 287, 361, 361, 361, 322, 323, - 178, 361, 361, 361, 81, 361, 361, 361, 361, 189, - 361, 361, 361, 121, 123, 122, 361, 361, 361, 25, - 361, 361, 173, 361, 175, 361, 220, 361, 361, 361, - 361, 179, 361, 361, 361, 361, 250, 361, 361, 361, - 361, 361, 361, 361, 154, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 258, 361, 361, - 361, 361, 361, 361, 361, 331, 361, 27, 361, 293, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 92, 221, 361, + 366, 366, 366, 366, 366, 366, 366, 285, 366, 366, + 366, 366, 216, 366, 366, 366, 366, 366, 242, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 292, 366, + 366, 366, 327, 328, 179, 366, 366, 366, 81, 366, + 366, 366, 366, 190, 366, 366, 366, 121, 123, 122, + 366, 366, 366, 25, 366, 366, 174, 366, 176, 366, + 221, 366, 366, 366, 366, 180, 366, 366, 366, 366, + 251, 366, 366, 366, 366, 366, 366, 366, 155, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 263, 366, 366, 366, 366, 366, 366, 366, 336, - 361, 361, 278, 361, 316, 361, 214, 361, 361, 361, - 361, 361, 288, 60, 361, 361, 361, 361, 361, 361, - 4, 361, 361, 361, 361, 136, 361, 153, 361, 361, - 361, 194, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 253, 41, 42, 361, 361, 361, 361, 361, 361, 361, - 301, 361, 361, 361, 361, 361, 361, 361, 266, 361, - 361, 361, 361, 361, 361, 361, 361, 224, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 91, 90, 361, 361, 61, 361, 284, 361, + 366, 27, 366, 298, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 92, 222, 366, 366, 257, 366, 366, 283, 366, + 321, 366, 215, 366, 366, 366, 366, 366, 293, 60, + 366, 366, 366, 366, 366, 366, 4, 366, 366, 366, + 366, 136, 366, 154, 366, 366, 366, 195, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 254, 41, 42, 366, + 366, 366, 366, 366, 366, 366, 306, 366, 366, 366, + 366, 366, 366, 366, 271, 366, 366, 366, 366, 366, - 254, 361, 361, 361, 361, 361, 11, 361, 361, 361, - 361, 361, 361, 361, 361, 135, 361, 361, 361, 361, - 361, 222, 97, 361, 361, 44, 361, 361, 361, 361, - 361, 361, 361, 361, 185, 361, 361, 361, 361, 361, - 361, 361, 156, 361, 361, 361, 361, 257, 361, 361, - 361, 361, 361, 265, 361, 361, 361, 361, 150, 361, - 361, 361, 129, 131, 130, 361, 361, 361, 99, 103, - 98, 166, 361, 361, 361, 361, 88, 361, 286, 361, - 361, 361, 361, 361, 361, 10, 361, 361, 361, 361, - 361, 282, 325, 361, 361, 361, 361, 361, 361, 330, + 366, 366, 366, 225, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 91, 90, + 366, 366, 61, 366, 366, 289, 366, 259, 366, 366, + 366, 366, 366, 11, 366, 366, 366, 366, 366, 366, + 366, 366, 135, 366, 366, 366, 366, 366, 223, 97, + 366, 366, 44, 366, 366, 366, 366, 366, 366, 366, + 366, 186, 366, 366, 366, 366, 366, 366, 366, 157, + 366, 366, 366, 366, 262, 366, 366, 366, 366, 366, + 270, 366, 366, 366, 366, 150, 366, 366, 366, 129, + 131, 130, 366, 366, 366, 99, 103, 98, 167, 366, - 43, 361, 361, 361, 361, 361, 184, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 104, 102, 361, 55, 361, 361, 89, 361, - 313, 361, 361, 361, 361, 24, 361, 361, 361, 361, - 361, 208, 361, 361, 361, 361, 361, 361, 223, 361, - 361, 361, 361, 361, 361, 361, 361, 204, 361, 361, - 174, 83, 361, 361, 361, 361, 361, 302, 361, 361, - 361, 361, 361, 361, 361, 262, 361, 361, 261, 151, - 361, 361, 101, 52, 361, 361, 157, 158, 161, 162, + 366, 366, 366, 88, 366, 256, 291, 366, 366, 366, + 366, 366, 366, 10, 366, 366, 366, 366, 366, 287, + 330, 366, 366, 366, 366, 366, 366, 335, 43, 366, + 366, 366, 366, 366, 185, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 104, 102, 366, 55, 366, 366, 89, 366, 318, 366, + 366, 366, 366, 24, 366, 366, 366, 366, 366, 209, + 366, 366, 366, 366, 366, 366, 224, 366, 366, 366, + 366, 366, 366, 366, 366, 205, 366, 366, 175, 83, - 159, 160, 93, 311, 361, 361, 283, 139, 361, 361, - 361, 26, 361, 177, 361, 361, 361, 361, 202, 361, - 252, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 191, 190, 45, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 309, 361, - 361, 361, 361, 108, 361, 251, 361, 275, 306, 361, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 332, 361, 53, 62, 5, 361, 361, 243, 361, 361, + 366, 366, 366, 366, 366, 307, 366, 366, 366, 366, + 366, 366, 366, 267, 366, 366, 266, 151, 366, 366, + 101, 52, 366, 366, 158, 159, 162, 163, 160, 161, + 93, 316, 366, 366, 288, 139, 366, 366, 366, 26, + 366, 178, 366, 366, 366, 366, 203, 366, 253, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 192, 191, 45, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 314, 366, 366, 366, - 307, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 263, 28, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 264, 361, 361, 361, 155, 361, - 361, 361, 361, 361, 361, 361, 361, 192, 361, 201, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 303, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 329, 361, 361, - 271, 361, 361, 361, 361, 361, 304, 361, 361, 361, - 361, 361, 361, 305, 361, 361, 361, 269, 361, 272, - 273, 361, 361, 361, 361, 361, 270, 274, 0 + 366, 108, 366, 252, 366, 280, 311, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 337, 366, + 53, 62, 5, 366, 366, 244, 366, 366, 312, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 268, 28, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 269, 366, 366, 366, 156, 366, 366, 366, + 366, 366, 366, 366, 366, 193, 366, 202, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 308, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 334, 366, 366, 276, 366, + 366, 366, 366, 366, 309, 366, 366, 366, 366, 366, + 366, 310, 366, 366, 366, 274, 366, 277, 278, 366, + 366, 366, 366, 366, 275, 279, 0 } ; static const YY_CHAR yy_ec[256] = @@ -803,17 +806,17 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3618] = +static const flex_int16_t yy_base[3646] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 96, 118, 124, 136, 4341, 4181, 81, 7019, - 7019, 7019, 129, 52, 130, 63, 131, 152, 70, 140, + 90, 112, 96, 118, 124, 136, 4833, 4680, 81, 7073, + 7073, 7073, 129, 52, 130, 63, 131, 152, 70, 140, 149, 156, 57, 88, 76, 173, 175, 95, 197, 145, - 185, 199, 208, 213, 178, 123, 3534, 7019, 7019, 7019, - 107, 3162, 7019, 7019, 7019, 154, 3102, 2669, 7019, 7019, - 7019, 245, 2592, 7019, 7019, 7019, 163, 2519, 7019, 249, - 7019, 253, 148, 2320, 2287, 7019, 7019, 7019, 257, 2134, - 7019, 7019, 7019, 233, 1825, 263, 201, 0, 267, 0, + 185, 199, 208, 213, 178, 123, 4078, 7073, 7073, 7073, + 107, 3686, 7073, 7073, 7073, 154, 3641, 2669, 7073, 7073, + 7073, 245, 2592, 7073, 7073, 7073, 163, 2519, 7073, 249, + 7073, 253, 148, 2320, 2287, 7073, 7073, 7073, 257, 2134, + 7073, 7073, 7073, 233, 1825, 263, 201, 0, 267, 0, 0, 165, 191, 221, 252, 205, 181, 265, 92, 261, 216, 263, 271, 272, 210, 279, 274, 282, 278, 291, @@ -838,15 +841,15 @@ static const flex_int16_t yy_base[3618] = 660, 663, 670, 669, 671, 672, 673, 675, 652, 682, 678, 686, 679, 692, 691, 693, 695, 697, 699, 698, - 700, 702, 703, 705, 7019, 716, 706, 721, 717, 728, + 700, 702, 703, 705, 7073, 716, 706, 721, 717, 728, 723, 707, 725, 732, 735, 718, 731, 734, 733, 736, 739, 740, 741, 743, 747, 750, 748, 753, 752, 763, 767, 759, 774, 760, 761, 772, 782, 775, 768, 776, 795, 790, 796, 802, 804, 805, 807, 808, 806, 809, 811, 812, 813, 827, 816, 829, 823, 819, 830, 832, - 839, 840, 7019, 836, 837, 851, 844, 853, 857, 854, + 839, 840, 7073, 836, 837, 851, 844, 853, 857, 854, 863, 846, 869, 867, 872, 873, 885, 907, 875, 880, - 874, 876, 890, 7019, 893, 897, 931, 877, 900, 919, + 874, 876, 890, 7073, 893, 897, 931, 877, 900, 919, 914, 881, 905, 917, 916, 921, 935, 915, 922, 937, 954, 952, 936, 939, 938, 955, 949, 967, 962, 965, @@ -856,15 +859,15 @@ static const flex_int16_t yy_base[3618] = 1016, 1038, 1036, 1045, 1049, 1041, 1051, 1053, 1056, 1057, 1058, 1059, 1069, 1064, 1065, 1067, 1070, 1072, 1073, 1078, 1076, 1079, 1081, 1083, 1084, 1087, 1092, 1094, 1098, 1085, - 1099, 1101, 7019, 1107, 7019, 1105, 1102, 1109, 1111, 1112, - 1113, 1114, 1115, 7019, 1117, 1121, 1116, 1124, 1125, 1122, + 1099, 1101, 7073, 1107, 7073, 1105, 1102, 1109, 1111, 1112, + 1113, 1114, 1115, 7073, 1117, 1121, 1116, 1124, 1125, 1122, 1146, 1142, 1129, 1141, 1145, 1144, 1150, 1151, 1159, 1154, 1161, 1162, 1155, 1163, 1157, 1166, 1128, 1167, 1170, 1171, - 1173, 1175, 1177, 1195, 7019, 1178, 1181, 1182, 1184, 1186, + 1173, 1175, 1177, 1195, 7073, 1178, 1181, 1182, 1184, 1186, 1199, 1191, 1206, 1208, 1212, 1218, 1200, 1183, 1226, 1222, 1224, 1225, 1229, 1230, 1232, 1234, 1235, 1238, 1239, 1241, - 1244, 1242, 1246, 1249, 1248, 1247, 1255, 1258, 7019, 1260, + 1244, 1242, 1246, 1249, 1248, 1247, 1255, 1258, 7073, 1260, 1263, 1271, 1278, 1262, 1265, 1273, 1276, 1279, 1277, 1281, 1283, 1282, 1286, 1289, 1288, 1299, 1291, 1304, 1300, 1302, 1301, 1306, 1308, 1311, 1307, 1309, 1328, 1317, 1319, 1332, @@ -873,7 +876,7 @@ static const flex_int16_t yy_base[3618] = 1364, 1366, 1370, 1372, 1374, 1375, 1380, 1379, 1377, 1381, 1392, 1390, 1388, 1397, 1394, 1403, 1399, 1391, 1406, 1410, - 1413, 1414, 7019, 1422, 1419, 1418, 1420, 1425, 1423, 1431, + 1413, 1414, 7073, 1422, 1419, 1418, 1420, 1425, 1423, 1431, 1432, 1433, 1434, 1437, 1435, 1438, 1443, 1444, 1445, 1439, 1447, 1452, 1454, 1455, 1456, 1465, 1472, 1471, 1473, 1457, 1467, 1476, 1477, 1479, 1486, 1483, 1491, 1484, 1489, 1492, @@ -886,21 +889,21 @@ static const flex_int16_t yy_base[3618] = 1599, 1595, 1606, 1614, 1608, 1596, 1616, 1617, 1619, 1620, 1621, 1625, 1623, 1628, 1632, 1626, 1629, 1637, 1635, 1641, 1643, 1644, 1645, 1586, 1655, 1646, 1656, 1657, 1660, 1662, - 1663, 1665, 1647, 1667, 1672, 1670, 1675, 1676, 7019, 1664, + 1663, 1665, 1647, 1667, 1672, 1670, 1675, 1676, 7073, 1664, 1688, 1677, 1686, 1684, 1687, 1689, 1698, 1691, 1693, 1695, - 1694, 1701, 1722, 7019, 1702, 7019, 7019, 848, 7019, 7019, - 1705, 1703, 7019, 1704, 1710, 1706, 1720, 1725, 1732, 1737, + 1694, 1701, 1722, 7073, 1702, 7073, 7073, 848, 7073, 7073, + 1705, 1703, 7073, 1704, 1710, 1706, 1720, 1725, 1732, 1737, 1728, 1730, 1735, 1723, 1746, 1750, 1745, 1753, 1755, 1756, 1759, 1747, 1760, 1761, 1767, 1770, 1772, 1773, 1708, 1783, 1778, 1788, 1779, 1790, 1791, 1796, 1781, 1797, 1800, 1803, 1804, 1793, 1806, 1807, 1809, 1811, 1813, 1808, 1815, 1817, - 1820, 1821, 1822, 1830, 1826, 1835, 1842, 7019, 1832, 1845, + 1820, 1821, 1822, 1830, 1826, 1835, 1842, 7073, 1832, 1845, 1840, 1849, 1846, 1853, 1852, 1848, 1850, 1857, 1861, 1862, 1863, 1864, 1867, 1865, 1866, 1873, 1868, 1875, 1876, 1878, - 1880, 1883, 1882, 7019, 1888, 1890, 1891, 1893, 1894, 1892, + 1880, 1883, 1882, 7073, 1888, 1890, 1891, 1893, 1894, 1892, 1900, 1896, 1902, 1904, 1906, 1917, 1907, 1908, 1914, 1912, - 1923, 1918, 1920, 1922, 7019, 1924, 1935, 1928, 1936, 1930, + 1923, 1918, 1920, 1922, 7073, 1924, 1935, 1928, 1936, 1930, 1937, 1939, 1940, 1943, 1944, 1945, 1946, 1947, 1948, 1958, 1955, 1954, 1956, 1960, 1961, 1970, 1969, 1971, 1973, 1981, @@ -908,706 +911,712 @@ static const flex_int16_t yy_base[3618] = 1996, 2003, 1998, 2005, 2000, 2001, 2019, 2022, 2020, 2006, 2017, 2018, 2009, 2026, 2034, 2038, 2033, 2031, 2035, 2045, 2040, 2042, 2043, 2046, 2047, 2058, 2044, 2062, 2053, 2055, - 2056, 2064, 2067, 7019, 2068, 2070, 7019, 2072, 2071, 2073, + 2056, 2064, 2067, 7073, 2068, 2070, 7073, 2072, 2071, 2073, 2095, 2074, 2078, 2081, 2080, 2083, 2089, 2087, 2099, 2105, 2101, 2118, 2088, 2107, 2119, 2109, 2122, 2114, 2120, 2128, 2129, 2130, 2131, 2133, 2139, 2136, 2149, 2152, 2148, 2156, 2159, 2132, 2155, 2157, 2176, 2158, 2160, 2164, 2161, 2162, 2166, 2172, 2167, 2179, 2168, 2169, 2181, 2191, 2189, 2186, - 2192, 2199, 2200, 2201, 2204, 2205, 2206, 7019, 2213, 2208, - 2212, 2216, 2090, 2220, 2217, 2223, 7019, 2224, 2225, 2227, + 2192, 2199, 2200, 2201, 2204, 2205, 2206, 7073, 2213, 2208, + 2212, 2216, 2090, 2220, 2217, 2223, 7073, 2224, 2225, 2227, 2235, 2228, 2230, 2236, 2232, 2239, 2238, 2244, 2245, 2246, - 2251, 2247, 2265, 7019, 2250, 7019, 2248, 2240, 2263, 2261, - 2267, 2269, 2270, 2271, 2272, 7019, 7019, 2273, 2274, 2288, - 2290, 2292, 2282, 2279, 2293, 7019, 2295, 2302, 7019, 2299, + 2251, 2247, 2265, 7073, 2250, 7073, 2248, 2240, 2263, 2261, + 2267, 2269, 2270, 2271, 2272, 7073, 7073, 2273, 2274, 2288, + 2290, 2292, 2282, 2279, 2293, 7073, 2295, 2302, 7073, 2299, 2304, 2298, 2297, 2305, 2308, 2309, 2310, 2319, 2314, 2324, - 2315, 2323, 2327, 7019, 2331, 2333, 2316, 2335, 2338, 2329, - 2339, 2342, 2344, 2346, 7019, 2350, 2351, 2353, 2360, 2362, + 2315, 2323, 2327, 7073, 2331, 2333, 2316, 2335, 2338, 2329, + 2339, 2342, 2344, 2346, 7073, 2350, 2351, 2353, 2360, 2362, 2355, 2352, 2363, 2368, 2357, 2365, 2371, 2373, 2372, 2380, - 2383, 2387, 2388, 2389, 2392, 2390, 2402, 7019, 2398, 2379, + 2383, 2387, 2388, 2389, 2392, 2390, 2402, 7073, 2398, 2379, 2399, 2406, 2404, 2408, 2401, 2405, 2411, 2412, 2413, 2415, 2417, 2422, 2421, 2423, 2424, 2425, 2434, 2435, 2427, 2438, 2440, 2431, 2437, 2445, 2446, 2382, 2447, 2449, 2448, 2452, - 7019, 2453, 2455, 2460, 2456, 2466, 2459, 171, 2462, 2463, + 7073, 2453, 2455, 2460, 2456, 2466, 2459, 171, 2462, 2463, 2469, 2470, 2473, 2484, 2474, 2486, 2491, 2487, 2488, 2490, - 2495, 2496, 2497, 2499, 2498, 2489, 2502, 2501, 2505, 7019, - 2507, 2512, 2514, 2515, 2517, 2518, 2520, 7019, 2527, 2521, + 2495, 2496, 2497, 2499, 2498, 2489, 2502, 2501, 2505, 7073, + 2507, 2512, 2514, 2515, 2517, 2518, 2520, 7073, 2527, 2521, 2528, 2541, 2535, 2529, 2544, 2537, 2545, 2546, 2548, 2549, - 2550, 2557, 2554, 2552, 2558, 2560, 7019, 2565, 2567, 2570, + 2550, 2557, 2554, 2552, 2558, 2560, 7073, 2565, 2567, 2570, 2561, 2571, 2573, 2574, 2578, 2580, 2582, 2584, 2585, 2590, 2586, 2588, 2589, 2591, 2599, 2602, 2612, 2594, 2603, 2604, - 2611, 2608, 2616, 2615, 2618, 2620, 2625, 2621, 7019, 2630, + 2611, 2608, 2616, 2615, 2618, 2620, 2625, 2621, 7073, 2630, 2622, 2631, 2632, 2629, 2636, 2633, 2639, 2648, 2644, 2646, 2653, 2654, 2667, 2656, 2650, 2664, 2661, 2665, 2673, 2677, 2674, 2678, 2684, 2681, 2687, 2689, 2691, 2695, 2699, 2696, 2697, 2698, 2700, 2701, 2710, 2712, 2715, 2718, 2708, 2716, - 2723, 2724, 2726, 2742, 2733, 7019, 2731, 2737, 2729, 2741, + 2723, 2724, 2726, 2742, 2733, 7073, 2731, 2737, 2729, 2741, 2749, 2745, 2746, 2751, 2753, 2755, 2757, 2758, 2759, 2766, 2761, 2763, 2770, 2765, 2769, 2771, 2772, 2780, 2782, 2783, - 2784, 2791, 2786, 2793, 2707, 7019, 2794, 2798, 2788, 2795, + 2784, 2791, 2786, 2793, 2707, 7073, 2794, 2798, 2788, 2795, 2806, 2796, 2810, 2811, 2813, 2799, 2802, 2814, 2822, 2817, - 2815, 2824, 2819, 2831, 2828, 2829, 2834, 2826, 7019, 2840, + 2815, 2824, 2819, 2831, 2828, 2829, 2834, 2826, 7073, 2840, 2830, 2841, 2842, 2846, 2848, 2849, 2850, 2856, 2858, 2851, - 2861, 2862, 2864, 2865, 2868, 7019, 2873, 2875, 2871, 2874, - 2883, 2878, 2882, 2884, 2886, 2888, 7019, 2889, 2891, 2890, - 2892, 2893, 2896, 2903, 2904, 2899, 7019, 2912, 2902, 2910, + 2861, 2862, 2864, 2865, 2868, 7073, 2873, 2875, 2871, 2874, + 2883, 2878, 2882, 2884, 2886, 2888, 7073, 2889, 2891, 2890, + 2892, 2893, 2896, 2903, 2904, 2899, 7073, 2912, 2902, 2910, 2911, 2914, 2915, 2917, 2920, 2918, 2923, 2924, 2927, 2934, - 2928, 2936, 7019, 2925, 2946, 2937, 2943, 2939, 2949, 2950, - 2953, 2954, 2957, 2956, 2960, 7019, 2967, 2969, 2964, 2978, + 2928, 2936, 7073, 2925, 2946, 2937, 2943, 2939, 2949, 2950, + 2953, 2954, 2957, 2956, 2960, 7073, 2967, 2969, 2964, 2978, 2970, 2976, 2979, 2980, 2981, 2982, 2983, 2984, 2988, 2990, - 7019, 2991, 2994, 2995, 2998, 2992, 3000, 3003, 3014, 3007, + 7073, 2991, 2994, 2995, 2998, 2992, 3000, 3003, 3014, 3007, 3009, 3011, 3006, 3016, 3017, 3015, 3021, 3028, 3024, 3023, 3027, 3033, 3036, 3038, 3040, 3039, 3043, 3051, 3052, 3047, 3054, 3057, 3058, 3050, 3060, 3062, 3069, 3071, 3074, 3072, - 3075, 7019, 3078, 3079, 3080, 3070, 3082, 3084, 3085, 3086, - 3090, 3087, 3095, 3092, 3096, 3099, 3112, 3114, 3101, 3104, - 3109, 3115, 3116, 3117, 3119, 3120, 3123, 3130, 3126, 3127, - 3129, 3139, 3132, 3136, 3143, 3135, 3144, 3145, 3146, 3148, - 3152, 3149, 3153, 3156, 3158, 3150, 3159, 3160, 3174, 3176, + 3075, 7073, 3078, 3079, 3080, 3070, 3082, 3084, 3085, 3086, + 3090, 3087, 3096, 3101, 3099, 3092, 3109, 3116, 3102, 3117, + 3105, 3112, 3114, 3120, 3119, 3121, 3126, 3133, 3129, 3128, + 3130, 3142, 3132, 3137, 3145, 3135, 3140, 3146, 3147, 3149, + 3150, 3152, 3155, 3157, 3160, 3153, 3161, 3162, 3176, 3178, - 3177, 3179, 3171, 3180, 3181, 3185, 7019, 3188, 3190, 3186, - 3192, 3193, 3197, 3198, 3205, 3200, 3207, 3208, 3211, 3210, - 3213, 3218, 3219, 3221, 3222, 3229, 3225, 7019, 3226, 7019, - 3227, 3228, 3231, 3240, 3235, 7019, 3246, 7019, 3236, 3250, - 3241, 3243, 3247, 7019, 3251, 3252, 3256, 3253, 3258, 3260, - 3264, 3265, 3266, 3267, 3268, 3275, 3270, 3274, 3277, 3281, - 3280, 3284, 3287, 3289, 3290, 3292, 3291, 3294, 3298, 3299, - 3300, 3307, 3309, 3310, 3311, 3312, 3313, 7019, 3317, 3320, - 3314, 3325, 3322, 3324, 3326, 3332, 3333, 3334, 3335, 3339, - 3337, 3341, 3346, 3349, 3343, 3350, 3353, 3360, 3362, 3354, + 3179, 3167, 3169, 3181, 3183, 3185, 7073, 3188, 3189, 3186, + 3192, 3193, 3198, 3195, 3205, 3202, 3203, 3213, 3210, 3214, + 3219, 3208, 3211, 3221, 3220, 3231, 3227, 7073, 3224, 7073, + 3222, 3232, 3233, 3241, 3236, 7073, 3239, 7073, 3244, 3246, + 3248, 3249, 3250, 7073, 3251, 3252, 3255, 3253, 3257, 3258, + 3261, 3260, 3263, 3267, 3269, 3274, 3270, 3278, 3279, 3280, + 3284, 3285, 3288, 3286, 3290, 3291, 3292, 3294, 3298, 3299, + 3303, 3301, 3306, 3310, 3311, 3312, 3313, 7073, 3317, 3324, + 3320, 3329, 3314, 3322, 3328, 3326, 3335, 3332, 3336, 3338, + 3339, 3341, 3348, 3344, 3350, 3351, 3352, 3358, 3362, 3360, - 3369, 7019, 3364, 3367, 3368, 3371, 7019, 3375, 3372, 3381, - 3383, 3376, 3373, 3379, 3385, 3392, 3386, 3389, 3395, 3399, - 3403, 3406, 3407, 7019, 3400, 3408, 3398, 3416, 3421, 3412, - 3424, 3428, 3425, 3431, 3433, 3435, 3437, 3414, 3438, 3439, - 3440, 3441, 3449, 3451, 3452, 3448, 3461, 3447, 3454, 3463, - 3464, 3450, 3457, 3465, 3466, 3467, 3471, 3473, 3472, 3474, - 3475, 3476, 3482, 3488, 7019, 3480, 3491, 3483, 3500, 3489, - 3497, 3498, 3493, 3502, 7019, 3505, 3506, 3510, 3508, 3511, - 3514, 3516, 3517, 3519, 3522, 3521, 3525, 3533, 3524, 7019, - 3528, 7019, 3527, 3535, 3547, 3550, 3539, 3544, 3553, 3555, + 3370, 7073, 3365, 3367, 3368, 3369, 7073, 3372, 3373, 3381, + 3383, 3374, 3376, 3378, 3386, 3390, 3385, 3392, 3395, 3396, + 3406, 3405, 3398, 7073, 3407, 3408, 3409, 3418, 3412, 3419, + 3426, 3428, 3424, 3430, 3432, 3441, 3437, 3423, 3427, 3425, + 3438, 3446, 3453, 3454, 3456, 3452, 3461, 3439, 3459, 3466, + 3463, 3451, 3440, 3467, 3470, 3471, 3473, 3474, 3475, 3472, + 3476, 3477, 3481, 3482, 7073, 3483, 3484, 3478, 3498, 3494, + 3499, 3501, 3502, 3503, 3504, 3508, 7073, 3510, 3507, 3513, + 3511, 3519, 3522, 3512, 3525, 3528, 3529, 3530, 3532, 3531, + 3534, 7073, 3533, 7073, 3535, 3541, 3552, 3555, 3547, 3556, - 3557, 3558, 3559, 3560, 3561, 3565, 3567, 3569, 3568, 3573, - 3571, 3581, 3589, 3572, 3574, 3586, 3590, 3591, 3576, 3601, - 3593, 3597, 7019, 7019, 3596, 3602, 3603, 3606, 3607, 3610, - 3612, 3614, 3619, 3617, 3618, 3625, 3634, 7019, 3630, 3631, - 3629, 3632, 3636, 3647, 3638, 3649, 3658, 3640, 3653, 3660, - 3655, 7019, 3642, 3657, 3665, 3663, 3666, 3670, 7019, 3672, - 7019, 3668, 3673, 3674, 3677, 3678, 3679, 3681, 3682, 3684, - 3686, 3689, 3696, 3704, 3705, 3706, 3701, 3708, 3690, 3702, - 3711, 3713, 3715, 3722, 3718, 3719, 3721, 7019, 3724, 3725, - 3727, 3729, 3726, 3732, 3733, 3741, 3736, 7019, 3742, 3743, + 3558, 3563, 3557, 3564, 3566, 3565, 3567, 3569, 3573, 3575, + 3576, 3578, 3577, 3542, 3580, 3585, 3581, 3591, 3582, 3593, + 3594, 3603, 3606, 3596, 7073, 7073, 3598, 3599, 3612, 3605, + 3609, 3614, 3624, 3620, 3622, 3616, 3626, 3628, 3636, 7073, + 3631, 3633, 3637, 3638, 3640, 3650, 3642, 3652, 3655, 3653, + 3656, 3663, 3661, 7073, 3662, 3664, 3671, 3666, 3672, 3674, + 7073, 3669, 7073, 3673, 3676, 3680, 3683, 3684, 3685, 3687, + 3688, 3690, 3693, 3696, 3702, 3704, 3711, 3706, 3708, 3713, + 3714, 3715, 3716, 3718, 3719, 3726, 3722, 3724, 3725, 7073, + 3728, 3729, 3737, 3731, 3730, 3742, 3746, 3739, 3738, 7073, - 3744, 3748, 3749, 3755, 3751, 3756, 3757, 3762, 3758, 3766, - 3763, 3765, 7019, 3767, 3769, 3780, 3771, 3778, 3779, 3782, - 3784, 3791, 7019, 3788, 3792, 3800, 3798, 3795, 3802, 3803, - 3799, 3805, 3808, 3810, 3809, 3811, 3812, 3813, 3815, 3817, - 3820, 3818, 3831, 3832, 3824, 3834, 3841, 3823, 7019, 3840, - 3845, 3846, 3847, 3848, 3849, 3853, 3854, 3858, 3860, 3850, - 3862, 3871, 3852, 3866, 3874, 3876, 3877, 3884, 3879, 7019, - 3886, 3883, 3891, 3888, 3889, 3894, 3899, 3890, 3900, 3903, - 3892, 3896, 3904, 3906, 3912, 3915, 3922, 3918, 3908, 3921, - 3923, 3925, 3924, 7019, 3935, 3926, 3927, 3936, 3941, 3933, + 3745, 3753, 3752, 3754, 3757, 3759, 3760, 3763, 3764, 3768, + 3770, 3769, 3765, 3773, 7073, 3771, 3774, 3786, 3781, 3778, + 3782, 3792, 3795, 3800, 7073, 3797, 3801, 3809, 3805, 3806, + 3787, 3808, 3807, 3812, 3813, 3814, 3815, 3816, 3817, 3823, + 3822, 3819, 3829, 3825, 3828, 3836, 3839, 3843, 3850, 3846, + 7073, 3847, 3830, 3852, 3848, 3853, 3855, 3856, 3858, 3861, + 3866, 3862, 3869, 3874, 3876, 3877, 3878, 3880, 3881, 3889, + 3884, 7073, 3892, 3888, 3896, 3895, 3891, 3901, 3894, 3902, + 3903, 3910, 3905, 3907, 3912, 3913, 3914, 3919, 3927, 3923, + 3911, 3925, 3926, 3938, 3929, 3930, 3933, 3934, 7073, 3953, - 3951, 3946, 3947, 3949, 3954, 3950, 3956, 3958, 3959, 3960, - 3963, 3964, 7019, 7019, 3966, 3968, 3971, 7019, 3973, 3969, - 3983, 3972, 3975, 3979, 3986, 3985, 3987, 3989, 3994, 3991, - 3997, 7019, 4004, 4002, 4005, 4003, 4009, 4012, 4008, 7019, - 4011, 4020, 4019, 4021, 4022, 4024, 4027, 4025, 4029, 4032, - 4033, 4034, 4036, 4045, 4048, 4038, 4040, 4043, 7019, 4049, - 4050, 4052, 4054, 4056, 4059, 4061, 7019, 4062, 4064, 4065, - 4067, 4070, 4075, 4082, 4077, 4084, 4071, 4085, 4087, 4089, - 4090, 4091, 4095, 4102, 4098, 4097, 4100, 4101, 4104, 4107, - 4109, 7019, 4117, 4118, 4119, 4120, 4122, 7019, 4124, 4133, + 3941, 3944, 3954, 3951, 3945, 3963, 3958, 3948, 3961, 3965, + 3966, 3969, 3971, 3972, 3973, 3976, 3977, 7073, 7073, 3979, + 3980, 3981, 7073, 3984, 3983, 3995, 3985, 3987, 3988, 3996, + 3999, 3998, 4000, 4002, 4008, 4012, 7073, 4016, 4013, 4020, + 4015, 4017, 4025, 4021, 7073, 4022, 4033, 4030, 4031, 4037, + 4032, 4038, 4039, 4043, 4044, 4040, 4045, 4048, 4056, 4059, + 4054, 4051, 4060, 7073, 4061, 4062, 4063, 4070, 4065, 4067, + 4072, 7073, 4073, 4075, 4076, 4082, 4085, 4091, 4093, 4095, + 4099, 4083, 4096, 4100, 4102, 4101, 4103, 4105, 4114, 4109, + 4113, 4112, 4116, 4131, 4132, 4118, 7073, 4115, 4126, 4120, - 4136, 7019, 4137, 4128, 4135, 4138, 4147, 7019, 4143, 4142, - 4144, 4148, 4145, 4157, 4152, 4159, 4161, 4158, 4162, 4163, - 4164, 7019, 4166, 4165, 4167, 7019, 4180, 4185, 4188, 4190, - 4171, 4175, 4173, 4192, 4193, 4194, 7019, 4195, 7019, 4198, - 4196, 4204, 7019, 4202, 4206, 4207, 4210, 4211, 4216, 4217, - 4223, 4225, 4213, 4219, 4227, 4215, 4231, 4232, 4236, 4229, - 4239, 4238, 4240, 7019, 4241, 4243, 4246, 4249, 4244, 4250, - 4257, 4259, 4252, 4260, 4262, 7019, 7019, 4268, 7019, 4269, - 4263, 4270, 4274, 7019, 4276, 4278, 4283, 4280, 4281, 4285, - 4284, 4289, 4293, 7019, 4295, 4298, 7019, 4296, 4300, 4309, + 4134, 4136, 7073, 4144, 4147, 4151, 7073, 4154, 4138, 4150, + 4149, 4158, 7073, 4153, 4156, 4157, 4162, 4159, 4172, 4167, + 4174, 4171, 4173, 4175, 4176, 4178, 7073, 4179, 4177, 4180, + 7073, 4183, 4187, 4194, 4198, 4182, 4205, 4200, 4203, 4201, + 4204, 7073, 4209, 7073, 4212, 4210, 4216, 7073, 4211, 4218, + 4219, 4221, 4225, 4226, 4227, 4233, 4229, 4235, 4237, 4238, + 4239, 4240, 4242, 4249, 4241, 4245, 4248, 4250, 7073, 4251, + 4253, 4260, 4261, 4257, 4267, 4265, 4272, 4262, 4273, 4275, + 7073, 7073, 4280, 7073, 4282, 4276, 4281, 4286, 7073, 4289, + 4287, 4296, 4291, 4293, 4298, 4295, 4306, 4299, 7073, 4310, - 4304, 4305, 4307, 4308, 4310, 4313, 4315, 4320, 4321, 4316, - 4323, 4317, 4324, 4338, 7019, 4325, 4326, 4330, 4347, 4334, - 4341, 4348, 4350, 4353, 7019, 4354, 4356, 4360, 4362, 4363, - 7019, 4365, 7019, 4364, 4366, 4368, 4369, 4372, 4383, 7019, - 4379, 4376, 4385, 4386, 4387, 4393, 4389, 4396, 4388, 4397, - 4398, 4405, 4402, 4400, 4404, 4409, 4411, 7019, 4410, 4414, - 4421, 4422, 4424, 4417, 4425, 4433, 4426, 4434, 4430, 4438, - 4440, 4437, 4441, 4443, 4447, 4450, 4451, 7019, 4453, 4452, - 4458, 4459, 4468, 4463, 4465, 4466, 7019, 4470, 4471, 4472, - 7019, 4473, 4479, 4481, 4484, 4485, 4487, 4488, 4491, 4489, + 4311, 7073, 4303, 4314, 4321, 4316, 4317, 4318, 4319, 4322, + 4327, 4325, 4329, 4331, 4332, 4333, 4334, 4335, 4337, 4354, + 4338, 4349, 7073, 4342, 4350, 4357, 4359, 4356, 4363, 4364, + 4365, 4366, 7073, 4371, 4375, 4372, 4379, 4378, 7073, 4380, + 7073, 4381, 4382, 4388, 4392, 4387, 4401, 7073, 4396, 4393, + 4403, 4397, 4404, 4408, 4411, 4412, 4413, 4414, 4405, 4421, + 4419, 4420, 4418, 4428, 4426, 7073, 4429, 4435, 4437, 4438, + 4440, 4441, 4442, 4450, 4447, 4443, 4446, 4453, 4455, 4458, + 4459, 4465, 4463, 4468, 4457, 7073, 4467, 4474, 4476, 4477, + 4485, 4480, 4481, 4482, 7073, 4487, 4488, 4491, 7073, 4489, - 4494, 4495, 4492, 7019, 4500, 4501, 4496, 4493, 4504, 4502, - 4515, 7019, 7019, 4517, 7019, 4518, 4519, 4520, 4521, 4522, - 4525, 4527, 4528, 4530, 4531, 4532, 4540, 4538, 4541, 7019, - 4545, 4552, 4548, 4556, 4559, 4563, 4558, 4560, 4562, 7019, - 7019, 4566, 4571, 4567, 4574, 4577, 4569, 4575, 4585, 4583, - 4589, 4592, 4594, 4601, 7019, 4580, 4587, 4596, 4598, 7019, - 4602, 4603, 4605, 4604, 4606, 4612, 4609, 4613, 4610, 4614, - 4617, 4620, 4622, 4621, 4623, 4629, 4631, 4632, 4634, 4635, - 4638, 4639, 4643, 7019, 4646, 4645, 4647, 4648, 4650, 4652, - 4656, 4658, 4659, 4660, 4668, 7019, 4663, 7019, 4661, 4669, + 4495, 4497, 4501, 4503, 4504, 4505, 4508, 4507, 4511, 4512, + 4509, 7073, 4516, 4517, 4510, 4513, 4526, 4533, 4519, 7073, + 7073, 4534, 7073, 4535, 4520, 4536, 4538, 4539, 4545, 4547, + 4548, 4550, 4544, 4552, 4555, 4558, 4560, 7073, 4561, 4572, + 4565, 4575, 4576, 4583, 4578, 4582, 4568, 7073, 7073, 4585, + 4591, 4586, 4594, 4596, 4567, 4589, 4604, 4600, 4601, 4609, + 4610, 4618, 7073, 4599, 4611, 4616, 4613, 7073, 4614, 4619, + 4621, 4622, 4623, 4625, 4626, 4627, 4629, 4630, 4636, 4641, + 4638, 4646, 4632, 4640, 4649, 4648, 4654, 4656, 4655, 4657, + 4659, 7073, 4662, 4663, 4664, 4665, 4669, 4671, 4672, 4676, - 4680, 4670, 4665, 4688, 4677, 4689, 4684, 4690, 4691, 4693, - 4694, 4699, 4700, 4704, 4696, 4707, 4708, 4712, 4710, 4716, - 4718, 4721, 7019, 4723, 4724, 4725, 4727, 4730, 4732, 4733, - 4735, 4736, 4738, 4740, 4741, 4743, 4748, 4749, 4750, 4751, - 4753, 4756, 7019, 4757, 4761, 4758, 4765, 4766, 4769, 4770, - 4778, 4771, 4780, 4773, 4782, 4783, 7019, 4786, 4788, 4790, - 7019, 4791, 4793, 4794, 4795, 4796, 4799, 4802, 4804, 4803, - 4805, 7019, 4813, 4806, 4815, 4814, 4816, 4819, 4823, 4824, - 4829, 4827, 4831, 4839, 7019, 4841, 4832, 4840, 4843, 4846, - 4847, 4849, 4851, 4852, 7019, 4853, 4861, 4862, 4854, 4874, + 4674, 4677, 4685, 7073, 4678, 7073, 4681, 4687, 4690, 4700, + 4688, 4704, 4705, 4706, 4699, 4689, 4707, 4711, 4714, 4717, + 4718, 4723, 4719, 4725, 4726, 4727, 7073, 4730, 4732, 4735, + 4737, 4742, 4744, 4745, 7073, 4747, 4738, 4748, 4751, 4754, + 4756, 4757, 4760, 4761, 4765, 4762, 4766, 4770, 4773, 4767, + 4774, 4775, 4780, 4778, 7073, 4782, 4785, 4786, 4789, 4790, + 4791, 4793, 4795, 4800, 4803, 4804, 4806, 4807, 7073, 4810, + 4811, 4813, 7073, 4814, 4817, 4815, 4818, 4820, 4827, 4822, + 4831, 4828, 4829, 7073, 4840, 4835, 4842, 4837, 4845, 4846, + 4847, 4848, 4852, 4850, 4854, 4857, 7073, 4867, 4858, 4866, - 4879, 4855, 4865, 4881, 4872, 4882, 4863, 4883, 4886, 4864, - 4885, 4890, 4891, 4892, 4893, 4903, 4904, 4902, 7019, 4895, - 7019, 4905, 4908, 4909, 4918, 4913, 4911, 4923, 4916, 4919, - 7019, 4926, 4927, 4929, 4930, 4931, 7019, 4932, 4933, 4935, - 4934, 7019, 4948, 4947, 4936, 4953, 4938, 4954, 7019, 4958, - 4959, 4961, 4969, 4970, 4967, 4972, 4960, 4977, 4968, 4973, - 4975, 4981, 4985, 4983, 4984, 7019, 4986, 4988, 4993, 4995, - 4996, 4998, 4999, 5002, 5005, 5004, 5006, 7019, 5010, 5011, - 5012, 5013, 5014, 5016, 5017, 5018, 5027, 5024, 5025, 5029, - 5034, 5035, 5036, 5038, 5040, 7019, 5043, 5042, 5044, 5051, + 4868, 4865, 4869, 4872, 4876, 4878, 7073, 4879, 4880, 4883, + 4886, 4895, 4897, 4887, 4892, 4900, 4898, 4905, 4896, 4899, + 4906, 4902, 4911, 4914, 4915, 4916, 4913, 4932, 4934, 4929, + 7073, 4917, 7073, 4918, 4930, 4935, 4946, 4941, 4943, 4944, + 4948, 4947, 7073, 4949, 4954, 4956, 4951, 4959, 7073, 4919, + 4957, 4960, 4962, 7073, 4958, 4971, 4963, 4972, 4978, 4979, + 7073, 4982, 4985, 4986, 4993, 4995, 4990, 4997, 4992, 5000, + 4998, 4994, 5002, 5003, 5011, 5009, 5007, 7073, 5013, 5015, + 5020, 5022, 5024, 5016, 5026, 5014, 5028, 5031, 5033, 7073, + 5036, 5037, 5038, 5039, 5040, 5043, 5042, 5044, 5051, 5050, - 5052, 5048, 5060, 7019, 5057, 7019, 5050, 5067, 5069, 5070, - 5061, 5074, 7019, 7019, 5076, 5071, 5077, 5079, 5081, 7019, - 7019, 5083, 7019, 5084, 7019, 5085, 5088, 7019, 7019, 5086, - 5092, 5093, 5095, 5096, 5098, 7019, 5106, 7019, 5109, 5107, - 5110, 5108, 5094, 5112, 7019, 5113, 5119, 5121, 5123, 5126, - 7019, 5120, 5128, 5136, 5131, 5137, 7019, 5139, 5140, 5141, - 5144, 7019, 5145, 5148, 5150, 5151, 5154, 5153, 5156, 5157, - 5158, 5164, 5165, 5168, 5167, 5170, 5171, 5175, 5180, 5182, - 5184, 5185, 5186, 5188, 5191, 5194, 5198, 5189, 5196, 5200, - 5202, 5203, 5205, 5207, 5208, 5210, 5214, 5215, 5218, 5211, + 5052, 5048, 5055, 5060, 5063, 5061, 5065, 7073, 5069, 5067, + 5070, 5077, 5078, 5076, 5085, 7073, 5080, 7073, 5086, 5088, + 5090, 5092, 5093, 7073, 5096, 5098, 5097, 5103, 7073, 7073, + 5105, 5112, 5107, 5111, 5108, 7073, 7073, 5114, 7073, 5115, + 7073, 5116, 5118, 7073, 7073, 5120, 5121, 5122, 5124, 5126, + 5128, 7073, 5136, 7073, 5138, 5137, 5139, 5142, 5141, 5144, + 7073, 5145, 5148, 5150, 5153, 5155, 7073, 5152, 5160, 5173, + 5156, 5168, 7073, 5170, 5172, 5159, 5171, 7073, 5176, 5180, + 5181, 5182, 5184, 5185, 5187, 5188, 5191, 5194, 5195, 5196, + 5197, 5199, 5204, 5203, 5211, 5213, 5215, 5206, 5216, 5220, - 5225, 5219, 5220, 5228, 5229, 5230, 5235, 5236, 5238, 5239, - 5241, 5242, 5243, 5244, 5246, 5251, 5247, 5256, 5254, 5260, - 5262, 7019, 5248, 5252, 5264, 5269, 5270, 5271, 5273, 5280, - 5282, 5285, 7019, 5288, 7019, 5290, 5283, 5292, 5293, 5294, - 7019, 5295, 5296, 5297, 5298, 5299, 5300, 5302, 5305, 5306, - 5310, 5316, 7019, 5307, 5322, 5313, 5323, 5326, 5330, 7019, - 5331, 5333, 5334, 5336, 5337, 5339, 5338, 5341, 5342, 5347, - 5343, 5344, 5349, 5357, 5350, 5358, 5361, 7019, 5365, 5369, - 5372, 5371, 5373, 5375, 5374, 5378, 5377, 5379, 5383, 5380, - 5381, 5385, 5396, 5401, 5398, 7019, 5388, 7019, 5402, 5404, + 5221, 5223, 5226, 5228, 5229, 5230, 5231, 5232, 5236, 5238, + 5235, 5244, 5246, 5239, 5248, 5255, 5256, 5257, 5241, 5259, + 5258, 5260, 5266, 5262, 5273, 5268, 5270, 5274, 5275, 5277, + 5276, 5279, 5283, 5284, 5288, 5286, 5289, 7073, 5282, 5292, + 5293, 5302, 5296, 5303, 5306, 5313, 5318, 5319, 7073, 5321, + 7073, 5323, 5307, 5315, 5309, 5327, 7073, 5329, 5330, 5331, + 5332, 5334, 5335, 5336, 5337, 5333, 5340, 5344, 7073, 5346, + 5360, 5347, 5341, 5356, 5367, 7073, 5362, 5369, 5354, 5364, + 5370, 5373, 5374, 5375, 5376, 5379, 5377, 5378, 5384, 5387, + 5381, 5390, 5391, 7073, 5399, 5403, 5406, 5392, 5404, 5405, - 5405, 5406, 5408, 5409, 5410, 5412, 7019, 7019, 5415, 5416, - 5418, 5420, 5422, 5424, 5428, 5425, 5429, 5439, 7019, 5432, - 5440, 5441, 5449, 5438, 7019, 5450, 5433, 5452, 5455, 7019, - 5456, 5457, 5458, 5459, 5464, 5461, 5470, 5471, 5473, 5467, - 5474, 5475, 5478, 7019, 7019, 7019, 7019, 5484, 5479, 5488, - 5481, 5489, 5490, 5491, 5496, 5497, 5493, 5498, 5499, 7019, - 5508, 7019, 7019, 5504, 7019, 5510, 5511, 5512, 5513, 5516, - 5519, 5522, 7019, 5523, 7019, 5524, 5526, 5527, 5533, 5537, - 5534, 5540, 5544, 5541, 5545, 5546, 5547, 5555, 5551, 5552, - 5554, 5557, 5561, 5567, 7019, 7019, 5558, 5573, 5574, 5576, + 5407, 5409, 5411, 5413, 5414, 5415, 5417, 5418, 5419, 5425, + 5431, 5428, 5436, 5441, 7073, 5424, 7073, 5442, 5444, 5445, + 5432, 5448, 5449, 5446, 5450, 7073, 7073, 5447, 5455, 5456, + 5461, 5462, 5458, 5465, 5468, 5470, 5471, 7073, 5472, 5474, + 5478, 5484, 5481, 7073, 5486, 5488, 5489, 5491, 7073, 5492, + 5493, 5495, 5496, 5506, 5498, 5511, 5507, 5513, 5500, 5503, + 5514, 5519, 7073, 7073, 7073, 7073, 5520, 5523, 5525, 5526, + 5527, 5528, 5529, 5533, 5535, 5531, 5532, 5536, 7073, 5547, + 7073, 7073, 5543, 7073, 5549, 5550, 5553, 5555, 5537, 5557, + 5559, 7073, 5560, 7073, 5565, 5568, 5561, 5572, 5578, 5569, - 5563, 5578, 5579, 5586, 5581, 5582, 5588, 5584, 5590, 5589, - 5600, 5601, 5591, 5592, 5603, 7019, 5605, 5606, 5613, 7019, - 5607, 7019, 5609, 5615, 5617, 5608, 5618, 5621, 5623, 5624, - 5627, 5628, 7019, 7019, 5629, 5640, 5635, 7019, 7019, 5637, - 5638, 5639, 5642, 5644, 5645, 5646, 5648, 5649, 5651, 5654, - 5650, 7019, 5655, 7019, 5660, 5663, 5672, 5662, 5674, 5679, - 5675, 5682, 5678, 5681, 5683, 5685, 7019, 5686, 5684, 7019, - 5694, 5696, 5698, 5691, 5701, 5692, 7019, 5703, 5706, 5710, - 5712, 7019, 5714, 5715, 5716, 5717, 7019, 5723, 7019, 5718, - 5720, 5727, 5734, 5729, 7019, 5730, 5731, 7019, 5736, 5743, + 5562, 5580, 5582, 5583, 5584, 5585, 5592, 5590, 5593, 5591, + 5596, 5598, 5600, 7073, 7073, 5604, 5608, 5609, 5611, 5613, + 5614, 5615, 5622, 5620, 5621, 5623, 5625, 5627, 5628, 5636, + 5637, 5633, 5634, 5642, 7073, 5643, 5639, 5645, 7073, 5647, + 7073, 5651, 5652, 5653, 5654, 5655, 5660, 5661, 5662, 5664, + 5666, 7073, 7073, 5665, 5680, 5675, 7073, 7073, 5667, 5676, + 5677, 5679, 5685, 5682, 5687, 7073, 5690, 5691, 5692, 5688, + 5694, 5702, 5695, 7073, 5704, 7073, 5705, 5707, 5713, 5708, + 5716, 5721, 5717, 5724, 5723, 5720, 5726, 5727, 7073, 5729, + 5730, 7073, 5737, 5736, 5740, 5734, 5742, 5745, 7073, 5746, - 5745, 5737, 5746, 5747, 7019, 5749, 5751, 7019, 5752, 5754, - 5755, 5758, 5761, 5763, 5764, 5765, 5766, 5773, 5771, 5774, - 7019, 7019, 5781, 5779, 135, 5788, 5768, 5785, 5786, 5789, - 5796, 5792, 5793, 5799, 7019, 7019, 5802, 7019, 5800, 5801, - 7019, 5794, 5809, 5810, 5803, 5813, 5814, 5815, 5816, 5823, - 5824, 5825, 5826, 5827, 5829, 7019, 5845, 5848, 5831, 5834, - 5851, 5853, 5855, 5857, 5859, 5849, 5861, 5843, 5841, 5862, - 5864, 5868, 5870, 5871, 5872, 5873, 5874, 7019, 5878, 5882, - 5883, 5879, 5884, 7019, 5889, 5890, 5896, 5898, 7019, 5900, - 5901, 5904, 5905, 5906, 7019, 5891, 5908, 5912, 5916, 5917, + 5749, 5753, 5755, 7073, 5757, 5758, 5759, 5761, 7073, 5766, + 7073, 5763, 5768, 5769, 5777, 5772, 7073, 5774, 5778, 7073, + 5786, 5788, 5790, 5792, 5780, 5791, 7073, 5797, 5782, 7073, + 5798, 5802, 5805, 5808, 5799, 5810, 5803, 5811, 5812, 5819, + 5821, 5823, 7073, 7073, 5828, 5825, 135, 5837, 5815, 5824, + 5832, 5833, 5840, 5750, 5841, 5843, 7073, 7073, 5846, 7073, + 5847, 5850, 7073, 5835, 5854, 5848, 5856, 5858, 5859, 5861, + 5862, 5865, 5866, 5867, 5868, 5869, 5871, 7073, 5890, 5892, + 5875, 5896, 5897, 5899, 5901, 5903, 5905, 5893, 5907, 5908, + 5885, 5910, 5913, 5914, 5915, 5916, 5917, 5919, 5921, 7073, - 5918, 5919, 5921, 5928, 7019, 5925, 5923, 5929, 7019, 7019, - 7019, 5934, 5941, 5931, 7019, 5943, 5935, 5944, 5946, 7019, - 5948, 5950, 5951, 7019, 7019, 7019, 5952, 5953, 5956, 7019, - 5954, 5961, 7019, 5960, 7019, 5957, 7019, 5962, 5966, 5975, - 5970, 7019, 5968, 5980, 5981, 5982, 7019, 5985, 5988, 5990, - 5991, 5992, 5994, 5996, 7019, 6003, 5999, 6002, 6006, 5998, - 6008, 6009, 6010, 6011, 6023, 6014, 6019, 7019, 6021, 6022, - 6026, 6032, 6024, 6034, 6035, 7019, 6028, 7019, 6037, 7019, - 6038, 6040, 6041, 6042, 6047, 6044, 6045, 6055, 6052, 6058, - 6061, 6059, 6065, 6066, 6070, 6072, 6067, 7019, 7019, 6080, + 5923, 5927, 5929, 5872, 5931, 5934, 5935, 7073, 5943, 5938, + 5947, 5944, 7073, 5951, 5948, 5952, 5954, 5955, 7073, 5956, + 5959, 5966, 5967, 5960, 5962, 5968, 5970, 5978, 7073, 5973, + 5975, 5976, 7073, 7073, 7073, 5982, 5989, 5983, 7073, 5991, + 5992, 5993, 5994, 7073, 5996, 5998, 5999, 7073, 7073, 7073, + 6000, 6003, 6001, 7073, 6002, 6015, 7073, 6004, 7073, 6005, + 7073, 6014, 6023, 6020, 6024, 7073, 6027, 6017, 6029, 6034, + 7073, 6037, 6040, 6042, 6044, 6031, 6045, 6047, 7073, 6054, + 6050, 6056, 6058, 6049, 6059, 6060, 6063, 6062, 6072, 6065, + 6070, 7073, 6073, 6074, 6078, 6075, 6082, 6084, 6085, 7073, - 6075, 6077, 7019, 6073, 7019, 6085, 7019, 6082, 6087, 6088, - 6089, 6090, 7019, 7019, 6097, 6091, 6099, 6106, 6101, 6102, - 7019, 6109, 6104, 6107, 6113, 7019, 6120, 7019, 6115, 6122, - 6123, 7019, 6117, 6130, 6132, 6119, 6125, 6137, 6127, 6133, - 6140, 6147, 6143, 6146, 6144, 6149, 6150, 6151, 6152, 6166, - 7019, 7019, 7019, 6157, 6153, 6174, 6171, 6172, 6182, 6159, - 7019, 6178, 6180, 6181, 6184, 6191, 6187, 6189, 7019, 6190, - 6192, 6193, 6194, 6196, 6197, 6198, 6199, 7019, 6201, 6212, - 6220, 6217, 6209, 6221, 6225, 6228, 6230, 6232, 6233, 6213, - 6240, 6236, 7019, 7019, 6238, 6235, 7019, 6243, 7019, 6244, + 6086, 7073, 6088, 7073, 6089, 6091, 6092, 6093, 6094, 6095, + 6096, 6108, 6107, 6098, 6109, 6113, 6114, 6117, 6120, 6124, + 6121, 7073, 7073, 6131, 6127, 7073, 6128, 6136, 7073, 6126, + 7073, 6138, 7073, 6129, 6133, 6139, 6142, 6146, 7073, 7073, + 6153, 6148, 6150, 6160, 6155, 6156, 7073, 6161, 6157, 6163, + 6165, 7073, 6172, 7073, 6167, 6176, 6169, 7073, 6173, 6180, + 6184, 6177, 6181, 6186, 6188, 6189, 6190, 6197, 6193, 6194, + 6196, 6203, 6200, 6204, 6208, 6213, 7073, 7073, 7073, 6209, + 6217, 6224, 6220, 6222, 6229, 6226, 7073, 6227, 6231, 6228, + 6234, 6241, 6238, 6240, 7073, 6236, 6242, 6243, 6245, 6247, - 7019, 6245, 6247, 6249, 6248, 6252, 7019, 6255, 6250, 6256, - 6257, 6258, 6206, 6260, 6262, 7019, 6264, 6272, 6265, 6273, - 6274, 7019, 7019, 6277, 6281, 7019, 6284, 6286, 6287, 6294, - 6290, 6289, 6296, 6299, 7019, 6303, 6300, 6293, 6306, 6309, - 6308, 6310, 7019, 6311, 6312, 6315, 6317, 7019, 6318, 6322, - 6323, 6321, 6324, 7019, 6325, 6327, 6334, 6339, 7019, 6332, - 6343, 6345, 7019, 7019, 7019, 6349, 6351, 6353, 7019, 7019, - 7019, 7019, 6355, 6356, 6359, 6363, 7019, 6360, 7019, 6365, - 6369, 6373, 6377, 6382, 6368, 7019, 6381, 6374, 6385, 6387, - 6388, 7019, 7019, 6389, 6391, 6392, 6393, 6395, 6396, 7019, + 6250, 6249, 6252, 7073, 6263, 6267, 6271, 6254, 6264, 6272, + 6274, 6276, 6280, 6282, 6283, 6284, 6257, 6285, 7073, 7073, + 6287, 6288, 7073, 6292, 6294, 7073, 6289, 7073, 6295, 6297, + 6299, 6298, 6300, 7073, 6303, 6305, 6306, 6307, 6309, 6313, + 6312, 6315, 7073, 6316, 6330, 6323, 6326, 6327, 7073, 7073, + 6328, 6336, 7073, 6338, 6339, 6333, 6346, 6341, 6342, 6352, + 6354, 7073, 6356, 6357, 6348, 6355, 6358, 6361, 6364, 7073, + 6366, 6365, 6367, 6369, 7073, 6372, 6376, 6377, 6378, 6380, + 7073, 6381, 6371, 6388, 6393, 7073, 6383, 6397, 6396, 7073, + 7073, 7073, 6402, 6405, 6406, 7073, 7073, 7073, 7073, 6408, - 7019, 6397, 6399, 6400, 6401, 6403, 7019, 6407, 6408, 6415, - 6417, 6419, 6424, 6428, 6421, 6429, 6430, 6438, 6441, 6431, - 6433, 6440, 6444, 6445, 6443, 6447, 6457, 6452, 6454, 6460, - 6455, 6463, 7019, 7019, 6465, 7019, 6467, 6469, 7019, 6471, - 7019, 6473, 6475, 6477, 6480, 7019, 6482, 6484, 6486, 6488, - 6490, 7019, 6491, 6493, 6495, 6496, 6497, 6498, 7019, 6502, - 6503, 6507, 6499, 6504, 6508, 6510, 6513, 7019, 6515, 6524, - 7019, 7019, 6519, 6525, 6521, 6526, 6531, 7019, 6529, 6539, - 6534, 6535, 6536, 6538, 6541, 7019, 6544, 6542, 7019, 7019, - 6554, 6545, 7019, 7019, 6543, 6546, 7019, 7019, 7019, 7019, + 6411, 6412, 6414, 7073, 6415, 7073, 7073, 6418, 6422, 6426, + 6428, 6435, 6421, 7073, 6429, 6436, 6438, 6439, 6440, 7073, + 7073, 6441, 6443, 6444, 6446, 6448, 6449, 7073, 7073, 6450, + 6452, 6456, 6453, 6455, 7073, 6458, 6461, 6468, 6465, 6471, + 6478, 6480, 6473, 6481, 6482, 6490, 6493, 6483, 6485, 6492, + 6496, 6497, 6495, 6499, 6509, 6504, 6506, 6512, 6507, 6515, + 7073, 7073, 6517, 7073, 6519, 6521, 7073, 6523, 7073, 6525, + 6527, 6529, 6532, 7073, 6534, 6536, 6538, 6540, 6542, 7073, + 6543, 6545, 6547, 6548, 6549, 6550, 7073, 6554, 6555, 6559, + 6551, 6556, 6560, 6562, 6565, 7073, 6567, 6576, 7073, 7073, - 7019, 7019, 7019, 7019, 6559, 6562, 7019, 7019, 6561, 6553, - 6568, 7019, 6571, 7019, 6563, 6572, 6573, 6575, 7019, 6576, - 7019, 6578, 6580, 6579, 6161, 6582, 6587, 6583, 6585, 6589, - 6592, 6593, 6594, 6602, 6598, 6600, 6599, 6612, 6603, 6614, - 6606, 6616, 7019, 7019, 7019, 6615, 6619, 6624, 6625, 6628, - 6630, 6633, 6636, 6637, 6638, 6640, 6641, 6642, 6644, 6645, - 6654, 6649, 6650, 6652, 6665, 6651, 6667, 6673, 7019, 6675, - 6653, 6659, 6677, 7019, 6655, 7019, 6661, 7019, 7019, 6681, - 6682, 6684, 6685, 6693, 6694, 6686, 6689, 6690, 6691, 6698, - 7019, 6706, 7019, 7019, 7019, 6695, 6699, 7019, 6701, 6703, + 6571, 6577, 6573, 6578, 6583, 7073, 6581, 6591, 6586, 6587, + 6588, 6590, 6593, 7073, 6596, 6594, 7073, 7073, 6606, 6597, + 7073, 7073, 6595, 6598, 7073, 7073, 7073, 7073, 7073, 7073, + 7073, 7073, 6611, 6614, 7073, 7073, 6613, 6605, 6620, 7073, + 6623, 7073, 6615, 6624, 6625, 6627, 7073, 6628, 7073, 6630, + 6632, 6631, 6635, 6634, 6639, 6641, 6644, 6646, 6645, 6648, + 6650, 6651, 6655, 6652, 6656, 6666, 6659, 6669, 6662, 6670, + 7073, 7073, 7073, 6658, 6674, 6680, 6676, 6684, 6686, 6689, + 6691, 6681, 6692, 6693, 6697, 6698, 6695, 6699, 6707, 6704, + 6705, 6706, 6709, 6710, 6716, 6722, 7073, 6724, 6713, 6719, - 7019, 6708, 6712, 6710, 6711, 6713, 6714, 6718, 6720, 6722, - 7019, 7019, 6727, 6730, 6731, 6735, 6732, 6742, 6738, 6740, - 6741, 6744, 6743, 6757, 7019, 6753, 6754, 6756, 7019, 6760, - 6758, 6761, 6763, 6765, 6772, 6767, 6770, 7019, 6773, 7019, - 6776, 6769, 6780, 6771, 6779, 6787, 6788, 6791, 6792, 7019, - 6793, 6794, 6797, 6801, 6803, 6806, 6807, 6799, 6809, 6810, - 6820, 6813, 6817, 6821, 6823, 6825, 6826, 7019, 6832, 6827, - 7019, 6829, 6833, 6835, 6836, 6839, 7019, 6844, 6837, 6841, - 6847, 6850, 6851, 7019, 6853, 6862, 6857, 7019, 6863, 7019, - 7019, 6865, 6859, 6866, 6872, 6874, 7019, 7019, 7019, 6899, + 6726, 7073, 6727, 7073, 6729, 7073, 7073, 6732, 6733, 6735, + 6736, 6745, 6746, 6737, 6741, 6744, 6748, 6750, 7073, 6757, + 7073, 7073, 7073, 6752, 6758, 7073, 6760, 6761, 7073, 6759, + 6762, 6764, 6768, 6769, 6766, 6770, 6771, 6787, 7073, 7073, + 6772, 6777, 6780, 6789, 6791, 6790, 6793, 6797, 6798, 6800, + 6801, 6810, 7073, 6807, 6808, 6812, 7073, 6814, 6809, 6815, + 6816, 6817, 6825, 6821, 6824, 7073, 6826, 7073, 6830, 6832, + 6833, 6823, 6831, 6834, 6845, 6843, 6839, 7073, 6849, 6853, + 6851, 6855, 6857, 6859, 6860, 6861, 6863, 6866, 6872, 6869, + 6876, 6877, 6873, 6881, 6878, 7073, 6888, 6879, 7073, 6885, - 6906, 6913, 6920, 6927, 6934, 6941, 88, 6948, 6955, 6962, - 6969, 6976, 6983, 6990, 6997, 7004, 7011 + 6889, 6882, 6891, 6895, 7073, 6900, 6893, 6902, 6903, 6906, + 6907, 7073, 6909, 6916, 6911, 7073, 6917, 7073, 7073, 6919, + 6913, 6920, 6926, 6928, 7073, 7073, 7073, 6953, 6960, 6967, + 6974, 6981, 6988, 6995, 88, 7002, 7009, 7016, 7023, 7030, + 7037, 7044, 7051, 7058, 7065 } ; -static const flex_int16_t yy_def[3618] = +static const flex_int16_t yy_def[3646] = { 0, - 3599, 1, 3600, 3600, 3601, 3601, 3602, 3602, 3603, 3603, - 3604, 3604, 3605, 3605, 3606, 3606, 3599, 3607, 3599, 3599, - 3599, 3599, 3608, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3609, 3599, 3599, 3599, - 3609, 3610, 3599, 3599, 3599, 3610, 3611, 3599, 3599, 3599, - 3599, 3611, 3612, 3599, 3599, 3599, 3612, 3613, 3599, 3614, - 3599, 3613, 3613, 3615, 3599, 3599, 3599, 3599, 3615, 3616, - 3599, 3599, 3599, 3616, 3607, 3607, 3599, 3617, 3608, 3617, - 3608, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3627, 1, 3628, 3628, 3629, 3629, 3630, 3630, 3631, 3631, + 3632, 3632, 3633, 3633, 3634, 3634, 3627, 3635, 3627, 3627, + 3627, 3627, 3636, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3637, 3627, 3627, 3627, + 3637, 3638, 3627, 3627, 3627, 3638, 3639, 3627, 3627, 3627, + 3627, 3639, 3640, 3627, 3627, 3627, 3640, 3641, 3627, 3642, + 3627, 3641, 3641, 3643, 3627, 3627, 3627, 3627, 3643, 3644, + 3627, 3627, 3627, 3644, 3635, 3635, 3627, 3645, 3636, 3645, + 3636, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3609, - 3609, 3610, 3610, 3611, 3611, 3599, 3612, 3612, 3613, 3613, - 3614, 3614, 3613, 3615, 3615, 3599, 3616, 3616, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3637, + 3637, 3638, 3638, 3639, 3639, 3627, 3640, 3640, 3641, 3641, + 3642, 3642, 3641, 3643, 3643, 3627, 3644, 3644, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3613, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3613, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, - 3607, 3613, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3613, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3599, 3599, 3607, 3599, 3599, - 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3641, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3627, 3627, 3635, 3627, 3627, + 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3613, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3607, 3599, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3641, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3599, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3599, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3599, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3599, 3607, 3607, 3607, 3607, 3607, 3613, 3613, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3627, 3635, 3635, 3635, 3635, 3635, 3641, 3641, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, - 3613, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3641, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3599, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3613, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3627, + 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3599, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, - 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3599, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, - 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3627, 3627, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, - 3607, 3613, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3599, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, + 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3613, - 3607, 3599, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3599, 3607, - 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3599, 3607, 3599, 3607, - 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3607, 3599, 3607, 3607, 3607, + 3635, 3635, 3627, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3641, 3635, 3627, 3635, 3635, 3635, + 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3627, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3599, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3599, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, - 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3627, 3635, - 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3599, 3599, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, - 3607, 3607, 3613, 3607, 3607, 3607, 3607, 3607, 3607, 3599, - 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3599, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3599, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, + 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, - 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, - 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3613, 3607, - 3599, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, - 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3641, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3599, 3607, 3599, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3599, 3607, 3607, 3607, 3607, 3607, 3599, - 3599, 3607, 3599, 3607, 3599, 3607, 3607, 3599, 3599, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3599, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, - 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3627, + 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, 3627, 3635, + 3627, 3635, 3635, 3627, 3627, 3635, 3635, 3635, 3635, 3635, + 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3613, 3607, 3607, 3607, - 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3599, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3599, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3641, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3599, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3599, 3599, 3599, 3599, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, - 3607, 3599, 3599, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3613, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3599, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3627, 3627, 3627, 3627, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3627, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3599, - 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3599, 3607, 3607, 3607, 3599, 3599, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3599, 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3599, - 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, - 3607, 3599, 3607, 3607, 3607, 3607, 3599, 3607, 3599, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3599, 3607, 3607, + 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3627, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3627, 3635, + 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3627, 3627, 3635, 3635, 3635, 3627, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3599, 3599, 3607, 3607, 3613, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3599, 3607, 3599, 3607, 3607, - 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3599, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, + 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3627, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3627, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3627, 3627, 3635, 3635, 3641, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, 3627, + 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3599, 3599, - 3599, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3599, - 3607, 3607, 3607, 3599, 3599, 3599, 3607, 3607, 3607, 3599, - 3607, 3607, 3599, 3607, 3599, 3607, 3599, 3607, 3607, 3607, - 3607, 3599, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3599, 3607, 3599, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3599, 3607, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3635, 3635, 3627, 3627, 3627, 3635, 3635, 3635, 3627, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3627, 3627, 3627, + 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3635, 3627, 3635, + 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, + 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, - 3607, 3607, 3599, 3607, 3599, 3607, 3599, 3607, 3607, 3607, - 3607, 3607, 3599, 3599, 3607, 3607, 3607, 3607, 3607, 3607, - 3599, 3607, 3607, 3607, 3607, 3599, 3607, 3599, 3607, 3607, - 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3599, 3599, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3599, 3607, 3607, 3599, 3607, 3599, 3607, + 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3627, 3627, 3635, 3635, 3627, 3635, 3635, 3627, 3635, + 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3627, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3627, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3599, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, - 3607, 3599, 3599, 3607, 3607, 3599, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, 3599, 3607, - 3607, 3607, 3599, 3599, 3599, 3607, 3607, 3607, 3599, 3599, - 3599, 3599, 3607, 3607, 3607, 3607, 3599, 3607, 3599, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, - 3607, 3599, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3599, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, + 3635, 3635, 3627, 3635, 3635, 3627, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3627, + 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3627, + 3627, 3627, 3635, 3635, 3635, 3627, 3627, 3627, 3627, 3635, - 3599, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3599, 3607, 3599, 3607, 3607, 3599, 3607, - 3599, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3607, - 3607, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3599, 3599, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3599, 3599, - 3607, 3607, 3599, 3599, 3607, 3607, 3599, 3599, 3599, 3599, + 3635, 3635, 3635, 3627, 3635, 3627, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, + 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3627, 3627, 3635, 3627, 3635, 3635, 3627, 3635, 3627, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3627, - 3599, 3599, 3599, 3599, 3607, 3607, 3599, 3599, 3607, 3607, - 3607, 3599, 3607, 3599, 3607, 3607, 3607, 3607, 3599, 3607, - 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3599, 3599, 3599, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, - 3607, 3607, 3607, 3599, 3607, 3599, 3607, 3599, 3599, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3599, 3607, 3599, 3599, 3599, 3607, 3607, 3599, 3607, 3607, + 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3627, 3635, 3635, + 3627, 3627, 3635, 3635, 3627, 3627, 3627, 3627, 3627, 3627, + 3627, 3627, 3635, 3635, 3627, 3627, 3635, 3635, 3635, 3627, + 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3627, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3627, 3627, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3599, 3599, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3599, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3599, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3607, - 3607, 3607, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, - 3599, 3607, 3607, 3607, 3607, 3607, 3599, 3607, 3607, 3607, - 3607, 3607, 3607, 3599, 3607, 3607, 3607, 3599, 3607, 3599, - 3599, 3607, 3607, 3607, 3607, 3607, 3599, 3599, 0, 3599, + 3635, 3627, 3635, 3627, 3635, 3627, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3627, 3627, 3627, 3635, 3635, 3627, 3635, 3635, 3627, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3627, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3635, - 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, - 3599, 3599, 3599, 3599, 3599, 3599, 3599 + 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3635, 3627, 3635, 3635, 3635, 3627, 3635, 3627, 3627, 3635, + 3635, 3635, 3635, 3635, 3627, 3627, 0, 3627, 3627, 3627, + 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, + 3627, 3627, 3627, 3627, 3627 } ; -static const flex_int16_t yy_nxt[7060] = +static const flex_int16_t yy_nxt[7114] = { 0, 18, 19, 20, 21, 22, 23, 22, 18, 18, 18, 18, 18, 22, 24, 25, 26, 27, 28, 29, 30, @@ -1948,446 +1957,453 @@ static const flex_int16_t yy_nxt[7060] = 86, 1654, 1658, 86, 86, 86, 1657, 86, 1664, 1665, 86, 86, 1659, 86, 1663, 86, 1670, 1666, 1671, 1667, 1669, 1672, 86, 86, 86, 86, 1673, 86, 86, 1674, - 1675, 86, 86, 86, 1668, 86, 1676, 86, 86, 86, + 1677, 86, 86, 86, 1668, 86, 1678, 86, 86, 86, - 86, 1678, 1677, 86, 1683, 86, 1682, 1679, 86, 86, - 1686, 1680, 86, 1681, 86, 165, 1685, 86, 1694, 1689, - 1684, 1691, 86, 1687, 1690, 86, 1692, 86, 86, 86, - 86, 1688, 86, 86, 1693, 1698, 86, 1702, 1697, 86, - 86, 1695, 86, 86, 1703, 86, 1706, 1696, 86, 86, - 1709, 1699, 86, 1700, 1701, 1708, 86, 86, 86, 86, - 1704, 86, 86, 86, 1707, 86, 86, 1710, 1705, 86, - 1718, 86, 86, 86, 1719, 163, 1711, 1712, 1713, 1715, - 1714, 1717, 1720, 1716, 86, 1722, 1723, 86, 1724, 86, - 86, 1721, 86, 86, 86, 1725, 1726, 1727, 86, 86, + 86, 1680, 1679, 86, 1685, 86, 1684, 1681, 1675, 86, + 1676, 1682, 86, 1683, 86, 86, 1691, 1687, 86, 1688, + 1686, 1692, 86, 1693, 1690, 86, 1689, 86, 1694, 86, + 86, 1696, 86, 86, 86, 1695, 1699, 1697, 1700, 86, + 1704, 86, 86, 86, 1698, 86, 86, 1705, 86, 1708, + 86, 1701, 1711, 86, 1702, 86, 1710, 1703, 86, 86, + 86, 1706, 86, 86, 1709, 86, 86, 1712, 86, 1707, + 86, 1720, 1713, 86, 86, 86, 1721, 1717, 1714, 1715, + 86, 1716, 86, 1719, 1728, 1722, 1718, 1724, 1725, 86, + 1726, 86, 86, 1723, 86, 1729, 86, 1727, 86, 86, - 1730, 86, 1728, 86, 1731, 86, 86, 1729, 1734, 1738, - 86, 86, 1740, 86, 1735, 1743, 1739, 1732, 86, 1733, - 86, 86, 1737, 86, 86, 1736, 86, 1745, 1741, 1744, - 1746, 86, 86, 1742, 86, 86, 1751, 1752, 86, 86, - 86, 86, 86, 1749, 86, 1756, 1755, 1757, 86, 86, - 1748, 1747, 1760, 86, 86, 1750, 86, 1753, 1759, 86, - 86, 1754, 1761, 86, 86, 86, 86, 1765, 1758, 86, - 1762, 86, 1763, 86, 1770, 1768, 1764, 86, 86, 86, - 86, 86, 1776, 86, 1777, 1774, 1766, 86, 86, 1767, - 86, 1769, 1771, 86, 86, 1775, 1778, 86, 1773, 1772, + 1732, 86, 86, 1730, 1733, 86, 86, 1736, 86, 1731, + 1740, 86, 1742, 1741, 1737, 86, 86, 1734, 86, 1735, + 1745, 86, 1739, 86, 86, 1738, 86, 86, 1746, 1744, + 1743, 1747, 86, 86, 86, 86, 1748, 86, 1753, 1754, + 86, 1749, 1750, 1751, 86, 86, 86, 1758, 1759, 86, + 1757, 1761, 86, 1752, 86, 1755, 1756, 86, 1763, 86, + 1762, 86, 86, 86, 86, 86, 86, 1767, 86, 1760, + 86, 86, 1772, 86, 86, 1770, 86, 1764, 1765, 1766, + 86, 1778, 86, 86, 1779, 1776, 1768, 86, 1769, 1773, + 1771, 86, 86, 86, 1774, 1775, 1777, 86, 86, 86, - 86, 1783, 86, 86, 86, 86, 1788, 86, 1779, 1780, - 1786, 86, 86, 86, 1791, 1789, 1784, 1782, 1781, 1787, - 86, 1785, 86, 86, 86, 86, 86, 86, 1795, 1798, - 86, 1797, 1790, 86, 1794, 170, 1799, 86, 86, 86, - 1800, 1793, 1792, 1801, 1796, 86, 86, 86, 86, 1809, - 86, 1802, 86, 1804, 86, 1803, 86, 1810, 1813, 86, - 1807, 1815, 86, 86, 1805, 1806, 86, 86, 1817, 1819, - 1811, 1814, 1808, 86, 1812, 86, 1821, 86, 1818, 1823, - 86, 86, 86, 1816, 86, 86, 86, 1820, 86, 86, - 1825, 1822, 86, 1826, 86, 1828, 86, 1829, 86, 86, + 1780, 86, 1785, 86, 86, 86, 1790, 86, 1782, 1788, + 1781, 86, 86, 1786, 86, 1791, 86, 1793, 1784, 86, + 1789, 1787, 1783, 86, 86, 86, 86, 170, 1797, 1800, + 86, 1799, 1792, 86, 1796, 86, 1794, 86, 1795, 86, + 1801, 86, 86, 1804, 1798, 86, 1802, 1803, 86, 86, + 1811, 86, 86, 1805, 86, 1806, 1812, 86, 1807, 1808, + 1815, 86, 1809, 86, 86, 86, 1816, 1819, 1817, 1821, + 1810, 86, 1813, 86, 1814, 86, 1820, 1823, 86, 1825, + 86, 86, 86, 86, 1818, 86, 86, 86, 1827, 86, + 1828, 86, 1824, 1822, 86, 1830, 86, 1831, 86, 86, - 1824, 1833, 86, 1830, 1831, 86, 1834, 1832, 86, 1827, - 1841, 86, 86, 86, 1836, 1838, 86, 1835, 1839, 86, - 86, 86, 1845, 1843, 1842, 86, 1846, 86, 1837, 86, - 1840, 1851, 1848, 1849, 86, 1852, 1847, 86, 86, 1844, - 1858, 86, 1856, 1853, 86, 1854, 86, 1855, 86, 1850, - 86, 86, 86, 86, 86, 1857, 1863, 1862, 1864, 1865, - 86, 86, 86, 86, 86, 86, 1866, 86, 1867, 1859, - 86, 1860, 1869, 1861, 86, 1870, 86, 86, 86, 86, - 86, 1872, 1871, 1868, 86, 86, 86, 86, 86, 86, - 1873, 1882, 1881, 86, 1876, 86, 86, 1874, 1877, 1875, + 1826, 1832, 1835, 86, 1836, 86, 1834, 1833, 86, 86, + 1829, 86, 1840, 1843, 1845, 1841, 1837, 1838, 86, 86, + 86, 86, 86, 1844, 1851, 86, 1848, 1842, 1839, 1847, + 1846, 86, 86, 1853, 1850, 1854, 86, 86, 86, 86, + 86, 86, 1855, 86, 1856, 86, 1857, 1849, 1858, 1860, + 86, 86, 86, 86, 86, 1859, 1852, 1862, 1861, 86, + 1865, 1866, 1864, 1867, 86, 86, 86, 86, 1869, 86, + 1868, 1863, 86, 1875, 86, 1870, 86, 1871, 1872, 86, + 86, 1873, 1874, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 1884, 1883, 86, 86, 86, 86, 1878, 1876, - 1878, 86, 86, 1879, 86, 1885, 86, 1888, 1884, 1887, - 86, 86, 1880, 86, 1883, 86, 1886, 1894, 86, 86, - 1892, 86, 1889, 86, 86, 1898, 1890, 86, 1896, 86, - 86, 1891, 86, 1897, 86, 86, 1893, 86, 86, 1895, - 86, 86, 1899, 1900, 1903, 1905, 86, 161, 86, 1904, - 1902, 1912, 86, 1908, 1901, 1906, 1909, 86, 1907, 1913, - 86, 1910, 1914, 86, 1915, 1911, 86, 1918, 86, 1917, - 86, 86, 86, 86, 86, 1916, 1922, 1921, 86, 1923, - 86, 86, 86, 1919, 86, 86, 86, 86, 1931, 86, - 1920, 1926, 1933, 1930, 86, 1928, 1925, 1924, 1929, 86, + 1879, 1880, 1886, 1877, 1889, 1890, 1881, 86, 1887, 1888, + 1882, 86, 86, 1885, 86, 86, 86, 86, 1897, 1895, + 86, 86, 1899, 86, 86, 86, 86, 1891, 1892, 1894, + 1898, 1901, 86, 1903, 1893, 86, 1902, 1896, 86, 1905, + 1900, 86, 86, 86, 86, 86, 86, 86, 86, 1936, + 1904, 1908, 1910, 1911, 86, 86, 1912, 1917, 1909, 1907, + 86, 1914, 1906, 1913, 1918, 86, 1915, 1919, 86, 86, + 86, 86, 1920, 1916, 1922, 1923, 86, 86, 86, 86, + 86, 1927, 86, 1924, 1926, 1928, 86, 1921, 86, 86, + 86, 86, 1937, 86, 86, 86, 1925, 1931, 86, 1935, - 1927, 1932, 86, 86, 86, 1938, 86, 1934, 1939, 86, - 86, 1941, 1935, 1940, 86, 86, 86, 1945, 1937, 86, - 86, 1936, 1942, 86, 1948, 86, 1950, 86, 1949, 1947, - 86, 86, 86, 1944, 1943, 1946, 1952, 1954, 86, 1953, - 1951, 1958, 86, 86, 86, 86, 1959, 86, 1955, 86, - 1963, 86, 1956, 86, 1965, 86, 1957, 1960, 1969, 1961, - 86, 1967, 86, 1964, 1962, 1968, 86, 1971, 86, 1966, - 86, 86, 1975, 86, 1972, 1973, 86, 1979, 86, 86, - 1970, 86, 1977, 86, 1974, 86, 86, 86, 1978, 1976, - 86, 86, 86, 1980, 86, 86, 1985, 86, 1984, 86, + 1933, 1929, 1930, 1934, 86, 1938, 86, 86, 1932, 86, + 1944, 86, 86, 1941, 1939, 1945, 86, 1940, 86, 86, + 1942, 1947, 86, 1943, 1946, 86, 1950, 86, 1953, 86, + 1949, 1952, 1954, 86, 1951, 86, 1948, 86, 1955, 86, + 1959, 86, 1957, 1963, 86, 1958, 86, 1960, 1964, 86, + 86, 86, 1956, 86, 165, 86, 1968, 1970, 1965, 1962, + 1961, 1966, 1973, 86, 1972, 86, 86, 1969, 86, 86, + 1976, 1974, 1967, 1971, 86, 86, 86, 86, 1980, 86, + 1977, 1984, 86, 1975, 86, 86, 86, 86, 1982, 86, + 1985, 1979, 1981, 86, 1983, 1978, 86, 86, 86, 163, - 1981, 1986, 86, 86, 1988, 1982, 1983, 1987, 1992, 86, - 1989, 1994, 1995, 1990, 86, 86, 1991, 86, 86, 86, - 1998, 86, 1996, 1999, 86, 2002, 86, 1997, 86, 2004, - 1993, 86, 86, 2000, 86, 86, 2008, 86, 86, 86, - 86, 2003, 86, 2001, 2010, 86, 86, 2011, 2006, 86, - 2013, 2014, 2007, 2005, 86, 86, 86, 86, 2009, 2012, - 2019, 170, 86, 2015, 86, 2018, 2017, 2022, 86, 86, - 86, 86, 2016, 2020, 2026, 86, 86, 2021, 86, 86, - 86, 2024, 86, 2023, 86, 2027, 2028, 2033, 2029, 2025, - 2030, 86, 86, 86, 2037, 86, 2034, 86, 2036, 2031, + 86, 86, 1990, 86, 1989, 1986, 86, 1991, 1987, 86, + 1993, 1999, 1988, 1992, 1997, 86, 1994, 86, 2000, 86, + 1995, 86, 2001, 1996, 86, 2003, 86, 86, 86, 86, + 2007, 86, 86, 2009, 2002, 86, 1998, 86, 86, 86, + 2013, 86, 86, 86, 86, 2008, 2005, 2004, 2006, 2016, + 86, 86, 86, 2011, 2015, 86, 2012, 2010, 86, 86, + 2018, 2020, 2014, 2017, 2019, 86, 86, 170, 2024, 2022, + 86, 2027, 86, 86, 2021, 2023, 86, 86, 86, 2025, + 2031, 86, 86, 86, 86, 2026, 86, 86, 2029, 2033, + 2034, 86, 2028, 2038, 86, 86, 2030, 2032, 2035, 86, - 2038, 86, 2032, 2039, 86, 86, 2040, 2042, 86, 2035, - 2043, 86, 86, 86, 2041, 86, 86, 2045, 86, 2046, - 2044, 86, 86, 86, 86, 86, 86, 2051, 86, 2052, - 86, 86, 2047, 86, 2053, 2056, 86, 86, 2054, 2049, - 2048, 2050, 2057, 2055, 86, 86, 2064, 86, 2065, 2060, - 2062, 2059, 2063, 86, 86, 2058, 2061, 2066, 86, 86, - 86, 86, 86, 86, 2072, 86, 86, 86, 2075, 2067, - 2076, 86, 2077, 86, 2079, 86, 2070, 2068, 2069, 86, - 2073, 2071, 2074, 2078, 86, 2080, 2081, 86, 2084, 86, - 86, 2086, 86, 2088, 2085, 2087, 86, 86, 2090, 86, + 86, 2041, 2050, 2036, 2042, 86, 2039, 2037, 86, 2040, + 86, 2043, 2044, 86, 86, 2045, 2047, 2048, 86, 86, + 86, 86, 86, 2046, 2051, 86, 86, 86, 86, 86, + 86, 2049, 86, 2056, 2057, 86, 86, 2061, 86, 2058, + 2052, 86, 86, 86, 2054, 2055, 2065, 2053, 2059, 86, + 2060, 2062, 86, 2066, 2067, 2069, 86, 2070, 2064, 86, + 86, 86, 2073, 86, 2063, 86, 86, 2068, 86, 86, + 2077, 86, 2080, 2081, 86, 86, 2072, 2075, 2082, 86, + 2071, 2084, 86, 2078, 2074, 2079, 2076, 86, 2085, 86, + 86, 86, 2089, 86, 86, 2083, 2091, 86, 2090, 2093, - 2082, 86, 86, 86, 86, 86, 2091, 86, 2083, 86, - 2093, 2094, 86, 86, 2089, 2097, 86, 86, 2096, 86, - 2098, 86, 2100, 2095, 2101, 86, 2102, 2092, 86, 2104, - 2099, 86, 2112, 2103, 86, 86, 86, 86, 86, 86, - 86, 2109, 2114, 2105, 2106, 2107, 86, 2115, 86, 86, - 2108, 2118, 2110, 2116, 86, 2117, 2111, 2113, 2121, 86, - 86, 2120, 86, 86, 86, 2119, 2125, 86, 2122, 86, - 2127, 86, 86, 86, 2130, 2131, 86, 86, 2133, 86, - 2123, 86, 86, 2124, 86, 86, 86, 2140, 86, 2126, - 2138, 2128, 86, 2135, 2129, 2136, 86, 2132, 86, 86, + 2092, 86, 86, 2095, 86, 86, 2099, 86, 86, 86, + 2086, 2087, 2088, 2096, 86, 86, 86, 2098, 86, 2094, + 86, 2101, 2102, 86, 86, 86, 86, 86, 2107, 2097, + 2105, 2106, 86, 2103, 2109, 2100, 86, 2108, 86, 86, + 86, 2104, 86, 86, 2114, 2117, 86, 86, 2110, 2111, + 2112, 86, 2121, 2120, 86, 2113, 2115, 86, 86, 2116, + 2122, 86, 2118, 2119, 86, 2123, 86, 86, 2124, 2126, + 2129, 86, 2125, 2128, 86, 2127, 86, 2133, 86, 86, + 2130, 2131, 86, 2135, 86, 86, 86, 2138, 2139, 86, + 86, 2141, 86, 86, 86, 2132, 86, 86, 86, 2148, - 86, 2139, 86, 2137, 86, 2143, 2134, 86, 2146, 2144, - 86, 2149, 2151, 2141, 2142, 86, 86, 86, 86, 2154, - 2150, 86, 86, 2155, 86, 86, 2148, 2157, 2145, 2153, - 2147, 2158, 86, 86, 86, 86, 2152, 86, 86, 2159, - 86, 2163, 86, 2156, 2160, 86, 86, 86, 2165, 86, - 2168, 86, 2169, 86, 2164, 2170, 86, 2161, 86, 2162, - 2173, 86, 86, 86, 2166, 86, 2178, 86, 2172, 86, - 2177, 2171, 86, 2167, 86, 86, 2174, 86, 86, 2184, - 86, 2183, 2175, 86, 86, 2176, 2185, 2187, 86, 2181, - 86, 2180, 2186, 2179, 2182, 86, 2191, 86, 86, 2188, + 86, 86, 2146, 2143, 2136, 2134, 2144, 2137, 86, 86, + 2140, 86, 86, 86, 2147, 86, 2154, 2145, 2142, 2151, + 2152, 86, 2149, 2157, 2150, 86, 86, 2159, 86, 86, + 86, 2158, 2162, 86, 86, 86, 2163, 2161, 86, 2153, + 2165, 2156, 2166, 86, 86, 86, 86, 2155, 2160, 2167, + 86, 86, 86, 86, 2164, 2171, 86, 86, 86, 2168, + 2173, 86, 2176, 2177, 86, 2169, 2178, 86, 2172, 86, + 2170, 2174, 86, 86, 86, 86, 86, 2181, 86, 2180, + 86, 2185, 2186, 86, 2175, 86, 86, 2179, 86, 86, + 2192, 161, 2191, 2182, 2183, 86, 86, 2184, 86, 2188, - 86, 2189, 86, 86, 86, 2192, 2190, 2195, 86, 2199, - 86, 86, 2193, 86, 86, 86, 2204, 86, 2202, 2194, - 86, 2205, 86, 2196, 2197, 2201, 2206, 2203, 2198, 2200, - 86, 86, 86, 86, 2212, 86, 2213, 86, 2211, 2207, - 2214, 86, 2208, 2216, 2217, 2215, 86, 2209, 86, 86, - 86, 86, 2210, 2219, 2221, 86, 86, 86, 86, 2223, - 86, 86, 2225, 2220, 2227, 86, 2229, 2218, 2222, 2224, - 86, 86, 86, 2230, 86, 86, 170, 86, 86, 86, - 86, 2233, 2243, 2226, 86, 2237, 86, 2228, 86, 2234, - 2231, 2235, 2244, 86, 86, 2232, 2238, 2236, 86, 2239, + 2189, 2193, 2187, 2195, 86, 2190, 86, 2194, 86, 86, + 2196, 2199, 86, 86, 86, 86, 86, 2200, 86, 2197, + 2203, 2207, 86, 2201, 2198, 86, 86, 86, 86, 86, + 2210, 86, 2202, 86, 2204, 2214, 2205, 2215, 2206, 86, + 2208, 2209, 2211, 2212, 86, 86, 2213, 86, 2220, 86, + 2216, 86, 2219, 2218, 2222, 2217, 2221, 86, 2224, 2223, + 86, 2225, 86, 86, 86, 2229, 86, 86, 2227, 86, + 86, 86, 86, 2231, 2228, 86, 2233, 2226, 2230, 2235, + 86, 2237, 2232, 2238, 86, 86, 86, 86, 86, 170, + 86, 86, 86, 86, 2241, 86, 86, 2234, 2245, 2246, - 2240, 86, 2241, 86, 2242, 86, 86, 86, 86, 86, - 2245, 86, 2246, 2248, 2249, 86, 2247, 86, 2251, 86, - 86, 2250, 2255, 86, 86, 2254, 86, 2252, 86, 86, - 86, 2253, 86, 2256, 2257, 2258, 86, 2260, 86, 2259, - 86, 2262, 86, 2267, 86, 86, 2261, 2264, 2265, 86, - 2266, 86, 86, 86, 86, 2272, 86, 86, 2263, 86, - 2268, 2269, 86, 86, 2278, 86, 2273, 2271, 2275, 2270, - 86, 2276, 86, 86, 2274, 86, 86, 2277, 2282, 2279, - 2284, 86, 86, 86, 2280, 2285, 2281, 86, 2283, 86, - 2291, 86, 2286, 86, 86, 2293, 86, 86, 86, 2287, + 86, 2247, 2236, 2242, 2243, 2239, 2248, 86, 2240, 2244, + 2249, 86, 2251, 86, 86, 2250, 86, 86, 86, 2252, + 2254, 2253, 86, 86, 86, 86, 2255, 2256, 2257, 86, + 2259, 86, 86, 2263, 86, 2258, 2260, 2262, 86, 86, + 86, 2268, 86, 2261, 2265, 2266, 86, 2264, 86, 2267, + 86, 86, 86, 86, 86, 86, 2275, 2273, 86, 2270, + 2274, 86, 86, 86, 86, 2280, 86, 2277, 2269, 2271, + 86, 2272, 2276, 86, 86, 86, 2281, 2279, 86, 2278, + 86, 2286, 2283, 2284, 2282, 86, 86, 2287, 86, 86, + 2285, 2290, 2292, 86, 86, 86, 2289, 2288, 2293, 86, - 2294, 2296, 86, 2288, 2289, 2290, 86, 2298, 86, 86, - 2292, 86, 2299, 86, 2297, 2295, 2302, 86, 86, 2301, - 86, 86, 86, 86, 2307, 2304, 86, 2308, 86, 86, - 86, 2303, 2300, 86, 86, 2309, 86, 86, 86, 86, - 3599, 2306, 2305, 86, 2313, 2311, 2312, 86, 2314, 2310, - 3599, 86, 2316, 2317, 86, 2322, 2315, 2318, 2320, 2323, - 86, 86, 2321, 86, 2326, 2324, 86, 86, 2327, 86, - 2319, 2330, 2329, 86, 2325, 86, 86, 86, 86, 86, - 2332, 86, 86, 2333, 2338, 86, 2328, 2334, 2336, 86, - 2340, 2331, 86, 2337, 2341, 2335, 86, 2343, 86, 86, + 86, 2291, 86, 2299, 86, 2294, 86, 2301, 86, 86, + 2295, 86, 86, 2302, 2298, 2296, 86, 2297, 2304, 86, + 2305, 2300, 2306, 86, 86, 2307, 2303, 86, 2310, 86, + 86, 86, 86, 2309, 86, 86, 2315, 2312, 86, 2308, + 86, 2316, 86, 2311, 86, 86, 86, 86, 86, 2317, + 86, 86, 2314, 2313, 2319, 86, 2320, 2324, 2322, 2318, + 2321, 2326, 86, 86, 2329, 2325, 2327, 86, 2330, 86, + 86, 2335, 86, 2323, 2328, 2332, 86, 86, 86, 86, + 2338, 2331, 2334, 2339, 86, 86, 2333, 2336, 86, 2341, + 2342, 86, 86, 86, 86, 86, 2337, 2344, 2345, 2340, - 86, 86, 86, 2342, 2339, 2345, 86, 2347, 2346, 86, - 86, 86, 2352, 86, 2348, 86, 2356, 86, 86, 2349, - 2353, 2357, 86, 86, 86, 2344, 2354, 86, 2350, 2355, - 86, 2351, 2358, 2361, 86, 86, 2362, 86, 86, 86, - 2366, 2360, 2359, 86, 2367, 2364, 86, 86, 2363, 2368, - 86, 86, 2372, 86, 86, 2374, 86, 2375, 2365, 2370, - 86, 2369, 2373, 86, 86, 86, 86, 2371, 2377, 2376, - 2379, 86, 86, 2382, 2380, 2384, 86, 2381, 86, 86, - 2385, 86, 2378, 86, 86, 86, 86, 2387, 2386, 2390, - 2391, 2388, 86, 2383, 86, 2389, 2395, 86, 86, 2392, + 86, 86, 2346, 2343, 2348, 86, 86, 2350, 2352, 86, + 86, 2353, 2347, 2349, 86, 2355, 86, 86, 86, 2351, + 2354, 86, 2357, 2358, 86, 86, 86, 86, 2364, 2359, + 2360, 86, 86, 86, 86, 2368, 2356, 2365, 2363, 86, + 2369, 86, 86, 2367, 2361, 2362, 2366, 2370, 86, 2373, + 86, 86, 2374, 86, 86, 86, 86, 2378, 2380, 86, + 86, 2371, 2372, 86, 2375, 2379, 86, 2384, 86, 2376, + 86, 86, 86, 2386, 2382, 2377, 86, 2381, 86, 2387, + 86, 86, 2383, 2385, 2391, 2388, 2389, 86, 2390, 86, + 86, 2394, 2396, 86, 86, 86, 2392, 2397, 86, 2393, - 86, 86, 86, 2394, 86, 86, 86, 86, 86, 86, - 2403, 2407, 2393, 86, 86, 86, 2396, 86, 2397, 2398, - 2399, 2401, 2408, 2402, 2409, 2404, 2405, 2400, 86, 2406, - 86, 86, 86, 86, 86, 86, 2411, 2413, 86, 2419, - 86, 86, 2421, 86, 86, 86, 2410, 2418, 2415, 2412, - 2420, 86, 2416, 86, 86, 2414, 2425, 2424, 86, 2428, - 2417, 170, 2422, 2430, 2423, 86, 2432, 2426, 2431, 86, - 2433, 86, 86, 86, 2434, 86, 86, 2427, 2437, 86, - 86, 2435, 86, 2429, 86, 2438, 2442, 86, 86, 2441, - 86, 2443, 2446, 86, 2444, 2436, 86, 2452, 86, 2439, + 86, 86, 86, 2399, 86, 2398, 2402, 2400, 86, 2403, + 86, 2395, 2401, 2407, 86, 2404, 86, 86, 86, 2406, + 86, 86, 86, 86, 86, 86, 86, 2415, 2405, 86, + 86, 2419, 86, 86, 2408, 2409, 2410, 2411, 2413, 86, + 2414, 2416, 2417, 2418, 2420, 2412, 86, 86, 86, 86, + 2422, 86, 86, 2423, 2425, 2421, 2426, 86, 86, 2431, + 86, 86, 2433, 86, 2427, 86, 2424, 2430, 86, 2428, + 2432, 86, 2436, 86, 86, 2434, 2437, 2429, 170, 2440, + 86, 86, 2442, 2444, 2435, 86, 2438, 2443, 86, 86, + 2445, 86, 2456, 2439, 2446, 86, 86, 2449, 86, 86, - 86, 2447, 86, 2448, 2449, 86, 2445, 86, 2451, 86, - 2440, 86, 2450, 2454, 86, 86, 86, 86, 86, 86, - 2453, 2457, 86, 86, 2460, 86, 86, 86, 2464, 2466, - 86, 2455, 2459, 86, 86, 86, 86, 2467, 2462, 2469, - 2456, 2458, 86, 2461, 86, 86, 2463, 86, 86, 2465, - 2468, 86, 86, 2475, 2470, 2478, 86, 2473, 86, 86, - 86, 86, 2472, 86, 2476, 86, 2474, 2479, 2471, 86, - 2477, 86, 86, 86, 86, 2489, 86, 2480, 86, 2481, - 2482, 86, 86, 86, 2487, 2494, 2483, 2491, 2485, 2484, - 86, 2490, 2486, 86, 2488, 2497, 2492, 86, 2495, 2493, + 2441, 2448, 86, 2447, 86, 2450, 2454, 86, 2453, 86, + 2455, 2458, 86, 86, 86, 2460, 2464, 86, 2459, 2451, + 2457, 2461, 86, 86, 86, 2463, 86, 86, 2462, 86, + 2452, 86, 86, 2466, 86, 86, 86, 2469, 86, 86, + 86, 2472, 86, 86, 2465, 86, 2467, 2476, 2478, 86, + 2471, 86, 2468, 86, 86, 2474, 2473, 2470, 2479, 86, + 2475, 86, 86, 2482, 2481, 2477, 2480, 86, 86, 86, + 86, 2490, 86, 2485, 2487, 86, 86, 86, 86, 2483, + 2484, 2488, 86, 2491, 86, 86, 2486, 86, 2489, 86, + 86, 86, 2501, 86, 86, 2492, 2493, 2494, 86, 2499, - 2496, 86, 86, 86, 86, 2498, 86, 86, 2503, 86, - 2499, 2504, 86, 86, 3599, 2505, 2506, 86, 2501, 2502, - 86, 86, 2509, 86, 2507, 86, 2510, 2500, 2513, 86, - 2514, 86, 2511, 2508, 86, 2512, 86, 86, 86, 2515, - 86, 2516, 2520, 86, 2521, 86, 86, 2523, 86, 86, - 2525, 86, 2519, 86, 86, 2528, 86, 2517, 2518, 2527, - 2529, 86, 86, 86, 86, 2522, 86, 2524, 2526, 86, - 86, 86, 2531, 2536, 86, 2535, 2530, 2538, 86, 86, - 2533, 2532, 86, 86, 86, 2543, 86, 2540, 2534, 2541, - 2537, 86, 2545, 86, 2542, 86, 86, 2539, 2548, 86, + 86, 86, 86, 86, 2497, 2495, 2502, 2503, 2496, 2505, + 2498, 2500, 86, 86, 2504, 2506, 2508, 86, 86, 86, + 86, 2507, 2510, 2509, 86, 2511, 2512, 86, 2515, 2516, + 86, 86, 86, 2517, 2513, 2518, 86, 2514, 86, 86, + 86, 2522, 2524, 86, 2523, 86, 2525, 2519, 86, 2526, + 86, 86, 2521, 2520, 2529, 86, 2530, 86, 86, 2527, + 86, 86, 2528, 2531, 86, 2532, 2536, 86, 2537, 86, + 86, 2533, 2539, 86, 86, 86, 2535, 2541, 86, 86, + 86, 2534, 2544, 86, 2543, 2545, 86, 86, 86, 2538, + 2542, 86, 2540, 86, 2546, 86, 2547, 2552, 86, 86, - 2544, 86, 2551, 86, 86, 2546, 86, 86, 86, 86, - 2547, 2557, 86, 2556, 2549, 86, 86, 86, 86, 86, - 2550, 2553, 2559, 2555, 2552, 2562, 86, 86, 86, 86, - 2554, 2560, 86, 2561, 2558, 2564, 86, 86, 3599, 2563, - 86, 2565, 86, 2570, 86, 86, 2572, 2566, 2576, 2571, - 2567, 2568, 86, 86, 86, 2573, 86, 2577, 2578, 86, - 86, 2579, 86, 2569, 86, 86, 86, 86, 86, 2583, - 2574, 2585, 2575, 2581, 86, 86, 86, 86, 86, 2586, - 2587, 2589, 2588, 2582, 2580, 86, 2590, 86, 2593, 2591, - 2594, 2584, 86, 2592, 86, 86, 86, 2599, 86, 86, + 2551, 2554, 86, 86, 86, 2548, 86, 2549, 86, 2556, + 2550, 2558, 2557, 86, 2559, 2561, 86, 86, 2553, 86, + 86, 2555, 2564, 86, 86, 2567, 86, 86, 86, 2560, + 86, 86, 3627, 86, 2563, 86, 2562, 2572, 2565, 2573, + 86, 86, 86, 2566, 86, 2569, 2571, 2568, 86, 2575, + 86, 2570, 2578, 86, 2574, 86, 2576, 2577, 86, 86, + 86, 86, 2580, 86, 2581, 86, 2586, 86, 2579, 2588, + 86, 86, 2587, 2589, 2592, 2584, 2582, 2583, 86, 86, + 86, 86, 86, 2593, 2594, 86, 2595, 2585, 2590, 86, + 2591, 86, 86, 86, 2599, 2597, 86, 2601, 2602, 86, - 2595, 2596, 2598, 86, 86, 86, 86, 2600, 86, 2597, - 2605, 2606, 2601, 2602, 2603, 86, 86, 86, 86, 2607, - 2604, 86, 86, 2611, 86, 2612, 86, 2613, 2608, 170, - 2610, 86, 86, 2615, 2617, 2614, 86, 2616, 2609, 86, - 86, 2622, 86, 86, 86, 86, 86, 86, 86, 86, - 2633, 86, 2618, 2624, 2619, 2620, 2621, 2625, 2623, 2628, - 86, 86, 2626, 2627, 2629, 2630, 86, 86, 2634, 2631, - 2635, 86, 86, 86, 86, 2636, 2638, 2639, 2632, 2637, - 86, 86, 86, 86, 2641, 86, 86, 2642, 86, 2640, - 86, 2643, 2648, 2644, 86, 2647, 86, 86, 86, 86, + 86, 2603, 2605, 2596, 2606, 86, 2598, 2609, 86, 86, + 86, 86, 86, 86, 2604, 86, 2610, 2600, 86, 86, + 2608, 2607, 2614, 2611, 86, 2613, 86, 86, 86, 86, + 86, 86, 86, 2616, 2612, 2615, 2617, 2618, 2619, 2621, + 2620, 2622, 86, 86, 2641, 86, 2623, 86, 86, 2627, + 2624, 2625, 2626, 2628, 86, 2629, 86, 86, 2632, 86, + 86, 170, 86, 2630, 86, 2631, 2633, 86, 2638, 86, + 86, 86, 86, 86, 2645, 86, 86, 3627, 2636, 2639, + 2634, 2640, 2635, 2637, 86, 86, 2642, 2644, 2643, 2646, + 2649, 86, 86, 2650, 2651, 86, 2647, 2648, 86, 86, - 2645, 86, 2650, 2651, 2652, 2653, 86, 2646, 86, 86, - 2649, 86, 86, 2654, 2655, 86, 2660, 86, 86, 86, - 2656, 2657, 2659, 86, 86, 86, 86, 86, 2662, 86, - 86, 86, 2661, 2667, 2670, 2658, 2669, 86, 86, 2672, - 86, 2666, 86, 2671, 2663, 2664, 2665, 86, 86, 86, - 2668, 86, 2678, 86, 2676, 86, 86, 86, 2682, 2683, - 2673, 86, 2681, 86, 86, 86, 2674, 2675, 2679, 2684, - 86, 2680, 2677, 86, 86, 2685, 3599, 2687, 2694, 2686, - 86, 2688, 86, 86, 86, 2689, 2690, 86, 2692, 86, - 86, 2696, 86, 2693, 86, 2698, 86, 86, 86, 86, + 2654, 2652, 2655, 86, 2653, 86, 86, 86, 86, 2657, + 86, 86, 2656, 86, 2659, 86, 86, 2663, 2664, 2658, + 86, 2661, 86, 2660, 86, 2666, 86, 86, 86, 86, + 2667, 2668, 2669, 86, 2662, 86, 2665, 86, 2672, 86, + 2670, 86, 2671, 2676, 86, 2675, 86, 2674, 2673, 86, + 86, 86, 86, 86, 2678, 86, 86, 86, 2686, 2677, + 2683, 86, 2685, 86, 86, 86, 2688, 2682, 86, 2687, + 2679, 2680, 2681, 86, 86, 2684, 86, 2694, 86, 2689, + 86, 2692, 86, 86, 2698, 2699, 3627, 2690, 2697, 86, + 86, 86, 2691, 86, 2695, 2693, 2696, 2700, 86, 86, - 2691, 86, 2695, 2697, 2702, 86, 86, 86, 86, 86, - 2707, 86, 2700, 2705, 2706, 2699, 2709, 2701, 2708, 86, - 86, 86, 86, 86, 2711, 86, 86, 2704, 3599, 2713, - 2714, 2703, 86, 86, 86, 2716, 86, 2712, 2719, 86, - 2710, 86, 2720, 2722, 86, 2715, 2717, 2721, 2718, 86, - 86, 2725, 86, 86, 86, 3599, 2726, 86, 86, 2729, - 2730, 86, 2723, 86, 86, 2724, 86, 86, 2731, 86, - 86, 86, 2736, 2727, 2735, 2728, 2733, 86, 86, 2734, - 86, 86, 2732, 86, 86, 2737, 2740, 2744, 86, 2743, - 2739, 2738, 2745, 86, 2746, 86, 2747, 86, 86, 86, + 2701, 86, 2702, 86, 2705, 86, 86, 2707, 2706, 86, + 86, 86, 2708, 2703, 2709, 2704, 86, 2711, 86, 2713, + 86, 86, 2712, 2715, 86, 86, 2717, 86, 86, 86, + 2716, 86, 2714, 86, 86, 86, 2710, 86, 2721, 86, + 2726, 86, 2724, 2719, 2725, 2728, 2718, 2720, 2727, 86, + 86, 86, 86, 2730, 86, 86, 2723, 86, 86, 3627, + 2722, 86, 2733, 86, 2735, 86, 86, 2738, 86, 86, + 2729, 2731, 86, 86, 2739, 2736, 2732, 2734, 2737, 2740, + 2741, 86, 2744, 86, 86, 86, 86, 2742, 2745, 86, + 2748, 2746, 2749, 86, 86, 86, 2743, 86, 86, 2750, - 2741, 86, 86, 2742, 86, 2751, 2750, 86, 2752, 86, - 2748, 86, 2753, 86, 2754, 86, 86, 2749, 86, 2760, - 86, 86, 2762, 86, 86, 2756, 2763, 86, 86, 2755, - 2765, 86, 86, 86, 2759, 2757, 2766, 2758, 86, 2764, - 2761, 86, 86, 86, 2768, 2767, 2770, 2773, 86, 86, - 2775, 86, 86, 2769, 86, 86, 86, 86, 2774, 86, - 170, 86, 2771, 2772, 86, 86, 2782, 86, 2778, 86, - 2784, 2780, 2783, 86, 2777, 86, 2785, 86, 2776, 2788, - 2779, 2781, 86, 86, 86, 2791, 86, 2789, 2786, 2793, - 2787, 2794, 2795, 86, 2796, 86, 86, 2792, 86, 2797, + 86, 86, 2747, 2755, 86, 2754, 2752, 86, 86, 86, + 86, 2753, 86, 2751, 2759, 2763, 86, 86, 2756, 86, + 2758, 2757, 2762, 2764, 86, 2765, 86, 2766, 86, 86, + 2760, 2767, 2761, 86, 86, 2770, 86, 2771, 2769, 86, + 2772, 86, 86, 86, 86, 86, 3627, 2768, 86, 86, + 2779, 86, 86, 2773, 86, 2775, 2781, 86, 2782, 86, + 2784, 86, 2774, 2783, 2776, 2778, 2777, 2780, 86, 86, + 86, 86, 86, 86, 2788, 86, 2786, 2789, 2792, 86, + 2785, 86, 2787, 86, 2793, 2794, 86, 86, 86, 86, + 86, 2790, 86, 2791, 2801, 86, 170, 86, 2803, 86, - 2790, 86, 2798, 86, 2799, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 2800, 86, 2801, 2810, 86, 86, - 86, 2808, 2803, 86, 2815, 2802, 86, 2805, 2804, 86, - 2814, 2807, 2806, 2809, 2816, 86, 86, 2812, 2811, 86, - 2817, 2813, 2820, 86, 86, 2822, 86, 86, 2819, 86, - 86, 86, 86, 2821, 86, 86, 86, 86, 2818, 2826, - 86, 2833, 86, 86, 2832, 2823, 2827, 2824, 2825, 2834, - 86, 86, 2828, 2829, 86, 2831, 2830, 2838, 86, 2840, - 2837, 2839, 86, 2835, 86, 86, 86, 86, 86, 2836, - 86, 86, 86, 86, 86, 2846, 86, 3599, 86, 2850, + 2797, 86, 86, 2796, 2799, 86, 86, 2795, 2802, 86, + 2804, 2800, 2798, 2807, 2805, 86, 86, 2806, 2810, 86, + 86, 2812, 86, 2811, 2813, 2814, 86, 2808, 86, 2809, + 2815, 86, 86, 2816, 86, 2817, 86, 2818, 2819, 2820, + 86, 2821, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 2829, 3627, 86, 86, 2822, 2827, 86, 2833, 86, + 86, 2824, 2823, 2834, 2831, 2826, 2825, 86, 2828, 86, + 2830, 2832, 2835, 86, 2836, 86, 2837, 86, 2838, 2839, + 86, 2841, 86, 86, 2840, 2842, 86, 86, 86, 86, + 86, 86, 86, 2845, 86, 2843, 2852, 86, 2851, 2853, - 2851, 86, 2841, 2843, 2842, 2845, 2844, 2848, 2852, 86, - 2854, 86, 2847, 2849, 86, 86, 2853, 86, 86, 86, - 2855, 86, 86, 86, 2856, 86, 2860, 2861, 86, 86, - 2858, 86, 2867, 86, 2866, 86, 2857, 86, 86, 2859, - 2870, 86, 86, 2862, 2863, 86, 86, 2865, 2864, 2871, - 2868, 86, 86, 86, 86, 2869, 2873, 2872, 2876, 2875, - 2874, 2877, 86, 86, 2878, 86, 2880, 2882, 86, 86, - 86, 86, 86, 2886, 86, 2885, 2887, 86, 2879, 2884, - 86, 2883, 2889, 86, 86, 2881, 86, 86, 86, 2890, - 2895, 86, 86, 2888, 86, 2891, 2892, 86, 2896, 2893, + 86, 2844, 2846, 86, 86, 86, 2847, 2848, 2849, 2850, + 2856, 2857, 86, 2859, 2854, 2858, 86, 86, 86, 86, + 86, 2855, 86, 2860, 86, 2866, 86, 86, 86, 2865, + 86, 86, 86, 2862, 3627, 2861, 2864, 86, 86, 2863, + 2874, 86, 2870, 2872, 86, 86, 2873, 2867, 2868, 86, + 2869, 2875, 2871, 2876, 86, 86, 2877, 86, 86, 86, + 86, 86, 86, 86, 2878, 2881, 2882, 2883, 86, 86, + 2880, 86, 2888, 2889, 86, 86, 2879, 2892, 86, 2884, + 2886, 86, 2885, 86, 86, 86, 2887, 86, 2895, 2891, + 2890, 86, 2893, 2897, 86, 2898, 2899, 86, 2894, 86, - 2898, 86, 86, 86, 86, 2905, 86, 2899, 2894, 86, - 86, 86, 86, 2902, 2897, 2900, 2901, 86, 2903, 2904, - 2908, 86, 2909, 86, 86, 86, 86, 2907, 2910, 86, - 2912, 2906, 86, 3599, 2913, 86, 86, 86, 2911, 86, - 86, 2915, 2918, 2916, 2919, 2921, 86, 86, 2914, 2922, - 86, 2917, 2923, 86, 86, 2920, 2925, 170, 86, 86, - 86, 2926, 2930, 2927, 86, 86, 2932, 86, 86, 2931, - 86, 86, 2924, 2935, 86, 2934, 86, 2928, 2929, 2936, - 86, 2942, 2933, 2940, 2937, 2938, 86, 86, 2941, 86, - 2939, 86, 86, 2945, 86, 86, 2943, 86, 2946, 86, + 2896, 86, 86, 2904, 86, 86, 86, 2900, 86, 86, + 2908, 86, 2907, 86, 2901, 2906, 86, 2905, 2909, 86, + 86, 2902, 2903, 2911, 86, 2912, 86, 86, 2915, 2914, + 2910, 2917, 86, 86, 2918, 2913, 86, 2920, 86, 86, + 86, 86, 86, 2927, 86, 86, 86, 2916, 86, 86, + 86, 2924, 2921, 2922, 2923, 2925, 86, 2926, 2919, 2930, + 86, 2931, 86, 86, 2929, 2928, 86, 2932, 86, 2936, + 86, 2934, 86, 86, 86, 86, 2935, 2933, 86, 2937, + 2938, 86, 86, 2940, 2943, 86, 2941, 2945, 2939, 2942, + 2944, 86, 2947, 170, 2946, 86, 86, 86, 86, 2952, - 2947, 86, 86, 86, 86, 86, 2944, 2952, 2953, 2954, - 2948, 2950, 2949, 86, 86, 2956, 86, 2955, 86, 86, - 86, 86, 86, 2951, 2958, 2957, 86, 2961, 86, 2959, - 86, 86, 2960, 2962, 86, 2963, 86, 86, 2968, 2964, - 86, 86, 86, 2966, 2965, 2967, 2970, 2972, 86, 2969, - 86, 86, 86, 86, 2973, 86, 2978, 86, 86, 86, - 2971, 86, 86, 86, 86, 2979, 2984, 86, 86, 2974, - 2981, 2975, 2976, 86, 2977, 86, 86, 2982, 2980, 2983, - 2988, 2991, 2985, 2986, 2989, 86, 2992, 86, 86, 2994, - 2995, 86, 86, 2987, 86, 86, 86, 86, 86, 86, + 3627, 2949, 2948, 86, 86, 86, 86, 2954, 2953, 86, + 2957, 86, 2958, 86, 2956, 2950, 2951, 86, 2962, 2955, + 2960, 86, 86, 2963, 86, 2961, 86, 86, 86, 2967, + 2959, 2964, 2965, 86, 86, 86, 86, 2968, 86, 2969, + 86, 86, 2966, 2974, 2975, 2970, 86, 86, 2972, 86, + 86, 2976, 86, 2971, 2978, 86, 86, 2980, 86, 2977, + 86, 2981, 2973, 2979, 86, 86, 86, 86, 86, 2983, + 2984, 2985, 2982, 86, 86, 86, 2990, 86, 86, 86, + 86, 2987, 2988, 2989, 2992, 2986, 2991, 2994, 86, 86, + 86, 3627, 86, 86, 2995, 86, 2993, 3000, 86, 2996, - 2990, 3001, 2996, 2998, 86, 86, 2993, 86, 2999, 86, - 3000, 86, 3002, 3005, 86, 3003, 86, 3007, 3004, 86, - 3006, 2997, 3009, 86, 3010, 86, 3011, 86, 86, 86, - 86, 86, 3012, 86, 3013, 3015, 86, 3008, 3017, 3014, - 86, 3019, 86, 86, 86, 3023, 3020, 86, 3024, 86, - 86, 3016, 3018, 3027, 3021, 3025, 86, 3026, 86, 86, - 86, 3030, 86, 3022, 86, 86, 3033, 86, 86, 3034, - 3035, 86, 3028, 3029, 86, 3037, 86, 86, 86, 86, - 3041, 86, 3031, 3042, 86, 3032, 86, 86, 3044, 3036, - 3038, 3043, 86, 3040, 86, 3046, 3039, 3045, 86, 86, + 86, 86, 3001, 86, 86, 86, 3005, 86, 86, 2997, + 2998, 2999, 3003, 3004, 3008, 86, 3006, 86, 86, 3002, + 86, 86, 3007, 3015, 3012, 3013, 86, 3009, 3016, 86, + 86, 3018, 3010, 86, 86, 3019, 86, 86, 3011, 86, + 86, 3020, 86, 86, 3025, 3022, 3014, 86, 3017, 86, + 86, 3023, 3026, 86, 3029, 86, 3024, 3027, 86, 86, + 3031, 3028, 86, 86, 3021, 3033, 86, 3034, 86, 3035, + 86, 86, 86, 3030, 86, 3036, 86, 3037, 3039, 86, + 3032, 86, 86, 3038, 3043, 86, 3041, 86, 3077, 3044, + 86, 86, 3047, 86, 3042, 86, 3040, 3045, 3048, 86, - 3047, 86, 86, 3052, 3048, 86, 86, 86, 3051, 86, - 3054, 3055, 86, 86, 86, 86, 86, 3058, 3049, 3050, - 3056, 3057, 86, 86, 3061, 3060, 86, 86, 86, 86, - 3053, 3064, 3059, 3062, 3063, 3068, 86, 86, 86, 86, - 86, 3070, 86, 3067, 86, 3065, 3080, 86, 3066, 3071, - 3074, 3069, 3075, 3072, 86, 3077, 86, 3076, 86, 3073, - 3078, 86, 86, 3079, 86, 3081, 86, 3082, 86, 3083, - 86, 3084, 86, 3085, 86, 86, 3088, 86, 3086, 3087, - 3089, 86, 3091, 86, 86, 86, 86, 86, 3093, 3090, - 3098, 86, 86, 3094, 3099, 86, 86, 86, 3101, 3100, + 3049, 86, 3050, 86, 86, 86, 3052, 3046, 3051, 3054, + 86, 86, 86, 3055, 3057, 86, 86, 3053, 86, 3058, + 3059, 86, 3061, 86, 86, 86, 3065, 3060, 86, 3062, + 3627, 3056, 86, 3066, 86, 3068, 86, 86, 86, 3064, + 3067, 86, 3063, 3069, 3070, 86, 86, 3076, 86, 3071, + 86, 3072, 3075, 86, 86, 3079, 86, 3073, 3078, 86, + 86, 86, 3085, 86, 3080, 3074, 3082, 86, 3081, 86, + 3084, 86, 86, 3083, 86, 86, 3088, 3092, 86, 86, + 86, 86, 86, 3094, 86, 86, 3086, 3087, 86, 3091, + 3089, 3095, 3098, 3093, 3090, 3096, 3627, 3099, 86, 3101, - 3092, 3103, 86, 86, 86, 3095, 3096, 3097, 3105, 86, - 3104, 86, 3107, 86, 86, 3102, 3106, 86, 86, 86, - 3113, 86, 3112, 3108, 3114, 86, 3109, 3110, 3111, 86, - 86, 86, 86, 3115, 86, 3120, 86, 3599, 86, 3116, - 3121, 86, 86, 3118, 86, 3123, 3124, 86, 86, 3119, - 3117, 3122, 3125, 3126, 86, 3128, 86, 86, 3127, 86, - 3132, 86, 3129, 86, 86, 86, 86, 86, 3139, 86, - 86, 3136, 3133, 86, 86, 86, 3134, 3131, 3137, 86, - 3142, 86, 3130, 86, 3143, 3140, 3146, 3138, 86, 3144, - 3135, 3141, 3145, 86, 86, 86, 3149, 3151, 86, 3150, + 3125, 3097, 3100, 86, 3102, 86, 86, 3103, 3104, 86, + 86, 3105, 86, 3106, 86, 3107, 86, 3108, 86, 3109, + 86, 86, 3110, 86, 3113, 3111, 86, 86, 86, 86, + 86, 3115, 86, 3117, 86, 3122, 86, 3114, 3118, 3123, + 86, 3112, 86, 3126, 86, 3124, 3116, 86, 86, 3627, + 3119, 86, 3120, 3127, 3121, 3129, 86, 86, 3130, 3131, + 86, 86, 3132, 3133, 86, 86, 3128, 86, 86, 86, + 3134, 3139, 86, 86, 3135, 86, 3136, 3137, 3140, 86, + 86, 86, 3142, 86, 3141, 3146, 86, 3138, 86, 86, + 3147, 86, 3144, 3150, 3143, 86, 86, 3149, 3145, 3148, - 3152, 86, 3153, 86, 86, 86, 3147, 86, 3148, 86, - 3158, 86, 86, 3154, 3157, 86, 86, 3159, 3161, 86, - 3160, 86, 86, 86, 86, 3155, 3156, 86, 3165, 3162, - 3167, 3169, 86, 3163, 86, 86, 86, 86, 3170, 86, - 3171, 86, 3166, 3164, 3172, 86, 3173, 86, 86, 3178, - 86, 86, 3168, 86, 86, 86, 3174, 86, 86, 3182, - 86, 3177, 3175, 3176, 3179, 86, 3180, 3181, 86, 3183, - 3187, 86, 86, 3184, 86, 3189, 3186, 3185, 86, 86, - 86, 3190, 3193, 86, 3194, 86, 86, 3196, 86, 3199, - 86, 3188, 3197, 86, 3198, 86, 3191, 3201, 86, 3195, + 3151, 3152, 86, 3154, 86, 86, 86, 86, 3158, 86, + 3153, 86, 86, 86, 86, 86, 86, 86, 86, 3155, + 3159, 3162, 3165, 3163, 3160, 3157, 3627, 86, 86, 3166, + 86, 3156, 3168, 86, 3170, 3164, 86, 86, 3161, 3167, + 86, 3169, 86, 3173, 86, 3172, 3171, 86, 3175, 3177, + 86, 3176, 3178, 86, 3179, 86, 3174, 86, 86, 3627, + 86, 3184, 86, 86, 3181, 3183, 3180, 86, 3185, 86, + 3187, 86, 86, 86, 3186, 86, 86, 3182, 86, 3193, + 3188, 3191, 3195, 86, 3189, 86, 86, 86, 86, 3199, + 3196, 86, 3197, 3192, 3190, 86, 3198, 86, 86, 86, - 86, 86, 86, 86, 86, 3192, 3204, 3200, 3206, 3207, - 86, 3202, 86, 3210, 86, 86, 3203, 86, 3205, 86, - 86, 3209, 86, 3213, 3208, 3216, 86, 3217, 86, 3219, - 86, 3214, 86, 86, 3212, 86, 86, 3211, 86, 3215, - 86, 3220, 3222, 86, 3223, 86, 86, 3224, 3218, 3226, - 86, 3228, 3221, 86, 3231, 3229, 86, 86, 3225, 86, - 86, 3235, 86, 86, 86, 86, 86, 3237, 3238, 3227, - 86, 3233, 86, 3230, 86, 3232, 3454, 3234, 3236, 86, - 3239, 3242, 3240, 3243, 86, 86, 3241, 86, 3244, 3245, - 3246, 86, 3248, 86, 86, 86, 3247, 86, 3251, 3249, + 3204, 86, 86, 3194, 86, 86, 86, 86, 86, 86, + 3208, 86, 3201, 3202, 3200, 3205, 3209, 3206, 3207, 3203, + 86, 86, 86, 3215, 3210, 3213, 86, 86, 3211, 3212, + 86, 3214, 3219, 86, 86, 3216, 3220, 86, 3222, 86, + 86, 86, 86, 3223, 86, 3217, 86, 3225, 3226, 86, + 3228, 86, 86, 3221, 3224, 86, 3218, 3231, 3229, 86, + 3227, 86, 3230, 86, 3233, 3234, 86, 3237, 86, 86, + 86, 3232, 3236, 86, 86, 3240, 86, 3243, 86, 3244, + 86, 3235, 86, 3246, 3241, 86, 86, 3247, 3239, 86, + 86, 3238, 3249, 86, 86, 3242, 3250, 86, 3253, 86, - 86, 3254, 86, 86, 86, 86, 86, 86, 3259, 86, - 86, 86, 86, 3263, 86, 3255, 3250, 3252, 3253, 86, - 3258, 3262, 86, 3256, 3264, 86, 86, 3261, 3291, 3260, - 86, 3257, 3265, 86, 86, 3266, 3267, 3269, 86, 3268, - 3270, 86, 3271, 86, 3272, 86, 86, 3275, 86, 86, - 3277, 86, 3274, 86, 3276, 3279, 86, 86, 86, 3273, - 86, 86, 86, 86, 3278, 86, 3285, 3286, 86, 86, - 86, 86, 3292, 86, 3293, 86, 3280, 86, 86, 3295, - 3281, 3283, 3282, 3284, 3289, 86, 86, 86, 3288, 3287, - 86, 3290, 3298, 3300, 86, 3294, 3301, 86, 3296, 86, + 3245, 86, 86, 86, 3258, 3251, 86, 86, 3248, 86, + 86, 3256, 3255, 86, 3252, 3262, 86, 86, 3254, 3260, + 3264, 86, 86, 3257, 3265, 3259, 86, 3266, 3263, 3261, + 86, 3269, 3270, 86, 3267, 86, 3272, 86, 3271, 86, + 86, 86, 86, 3275, 86, 3274, 3276, 86, 3278, 86, + 3268, 86, 3281, 86, 86, 86, 86, 3273, 86, 3286, + 86, 3282, 86, 86, 3302, 86, 3277, 86, 3279, 3280, + 86, 3285, 3293, 3283, 3289, 3290, 86, 86, 3288, 3291, + 86, 3284, 3287, 3292, 86, 86, 3296, 86, 3297, 86, + 3295, 3294, 3298, 86, 3299, 86, 86, 86, 86, 3304, - 86, 3304, 86, 86, 3302, 3297, 86, 86, 3307, 86, - 3306, 3299, 86, 86, 3303, 3305, 86, 3308, 3310, 86, - 3309, 86, 86, 86, 86, 86, 3311, 3313, 86, 3315, - 86, 86, 3316, 3314, 86, 86, 86, 86, 86, 3312, - 86, 3328, 3325, 3326, 3317, 86, 3599, 86, 3318, 3320, - 3319, 3321, 86, 3322, 3323, 3324, 86, 3329, 86, 3331, - 3327, 3333, 86, 3334, 86, 3330, 86, 3336, 86, 86, - 3335, 3332, 86, 86, 3337, 3339, 86, 3341, 86, 3342, - 3343, 86, 86, 3344, 3345, 3349, 86, 86, 3340, 3346, - 86, 3338, 3347, 3348, 86, 86, 3351, 3352, 86, 3350, + 86, 86, 86, 3303, 3306, 86, 3307, 86, 86, 3300, + 86, 86, 86, 86, 3313, 3314, 86, 3305, 86, 86, + 86, 3308, 86, 3301, 3320, 86, 86, 3321, 86, 86, + 3309, 3311, 3310, 3312, 3317, 3319, 86, 3323, 3316, 86, + 86, 86, 3318, 86, 3315, 3326, 86, 3322, 3328, 86, + 3329, 86, 86, 3332, 86, 86, 3324, 3330, 3325, 86, + 3331, 86, 3327, 3334, 3335, 86, 3333, 86, 86, 86, + 86, 86, 3336, 3337, 86, 3338, 3341, 86, 86, 86, + 86, 3339, 86, 3343, 86, 86, 3342, 3344, 3340, 86, + 86, 86, 3627, 86, 86, 3356, 86, 3345, 3353, 3354, - 86, 86, 86, 3355, 86, 86, 86, 3359, 86, 86, - 86, 3358, 86, 86, 86, 3354, 86, 3363, 3353, 3362, - 86, 86, 3599, 3364, 3356, 3357, 3367, 3368, 86, 3360, - 86, 3365, 86, 3370, 86, 3361, 3371, 86, 3366, 3369, - 3372, 86, 86, 86, 86, 3377, 86, 3374, 3379, 3373, - 3378, 86, 3375, 86, 86, 3376, 86, 86, 86, 3386, - 86, 3381, 3383, 3384, 3387, 86, 3389, 86, 86, 3380, - 86, 3388, 3390, 86, 3382, 3385, 86, 3393, 86, 3394, - 86, 3392, 86, 3391, 86, 3397, 86, 3398, 86, 3399, - 86, 3395, 3400, 86, 3401, 86, 3402, 86, 3403, 86, + 3346, 86, 3347, 3348, 3355, 3349, 86, 3350, 3351, 86, + 86, 3357, 3352, 3359, 3361, 86, 3358, 3362, 86, 86, + 3364, 86, 3360, 3363, 86, 86, 3367, 86, 86, 3365, + 3369, 86, 3370, 3371, 86, 86, 3372, 3373, 3377, 86, + 3374, 86, 86, 3368, 3366, 3375, 3376, 3378, 86, 86, + 3380, 86, 86, 86, 86, 3383, 86, 86, 3379, 86, + 3387, 86, 86, 86, 3386, 86, 86, 3382, 86, 86, + 3381, 86, 3390, 3391, 86, 3392, 3384, 3385, 86, 3395, + 3396, 86, 3388, 3393, 86, 3398, 86, 3397, 3389, 3394, + 3399, 86, 3400, 86, 86, 86, 86, 3405, 86, 3402, - 3404, 86, 3396, 86, 86, 3407, 86, 3408, 86, 86, - 86, 86, 86, 3406, 3412, 86, 86, 86, 3409, 3414, - 86, 86, 3410, 86, 3418, 3419, 86, 3415, 86, 3405, - 3416, 3411, 86, 3417, 86, 3413, 3421, 86, 86, 86, - 3425, 3423, 86, 3420, 86, 3427, 3428, 86, 86, 86, - 3422, 86, 86, 3430, 86, 86, 86, 86, 86, 86, - 3424, 3429, 3426, 3434, 3435, 3443, 86, 86, 3431, 3432, - 3433, 3436, 86, 3437, 86, 86, 86, 3440, 3441, 3439, - 3444, 86, 3438, 3445, 86, 86, 86, 3442, 86, 86, - 3448, 86, 86, 86, 3447, 86, 86, 3453, 86, 3446, + 3407, 3401, 3406, 86, 3403, 86, 86, 3404, 86, 86, + 86, 3414, 86, 3409, 3411, 3412, 3415, 86, 3417, 86, + 86, 3408, 86, 3416, 3418, 86, 3410, 3413, 86, 3421, + 86, 3422, 86, 3420, 86, 3419, 86, 3425, 86, 3426, + 86, 3427, 86, 3423, 3428, 86, 3429, 86, 3430, 86, + 3431, 86, 3432, 86, 3424, 86, 86, 3435, 86, 3436, + 86, 86, 86, 86, 86, 3434, 3440, 86, 86, 86, + 3437, 3442, 86, 86, 3438, 86, 3446, 3447, 86, 3443, + 86, 3433, 3444, 3439, 86, 3445, 86, 3441, 3449, 86, + 86, 86, 3453, 3451, 86, 3448, 86, 3455, 3456, 86, - 86, 3456, 86, 3450, 3452, 86, 86, 86, 3449, 3457, - 3455, 86, 86, 86, 3451, 86, 86, 3458, 3465, 86, - 3459, 3460, 3462, 3464, 3463, 86, 3469, 86, 86, 86, - 3467, 3461, 86, 3466, 3471, 3468, 3474, 86, 86, 3470, - 3476, 86, 3472, 86, 3477, 3478, 86, 3475, 3479, 86, - 86, 86, 3473, 86, 86, 86, 3482, 86, 86, 3483, - 3484, 3487, 86, 86, 86, 86, 86, 86, 86, 3480, - 3490, 3481, 86, 3486, 86, 3489, 3488, 3491, 86, 3493, - 86, 3496, 3485, 3499, 3492, 3494, 86, 3495, 86, 3498, - 86, 3497, 3500, 3501, 86, 86, 3502, 86, 86, 86, + 86, 86, 3450, 86, 86, 3458, 86, 86, 86, 86, + 86, 86, 3452, 3457, 3454, 3462, 3463, 3471, 86, 86, + 3459, 3460, 3461, 3464, 86, 3465, 86, 86, 86, 3468, + 3469, 3467, 3472, 86, 3466, 3473, 86, 86, 86, 3470, + 86, 86, 3476, 86, 86, 86, 3475, 86, 86, 3481, + 3482, 3474, 86, 3484, 86, 3478, 3480, 86, 86, 86, + 3477, 86, 3483, 86, 86, 86, 3479, 3485, 86, 86, + 3493, 86, 86, 3491, 3488, 86, 3486, 3487, 3490, 86, + 3492, 3497, 86, 86, 3495, 3500, 3489, 86, 3499, 86, + 3494, 3496, 3502, 86, 86, 3498, 3504, 86, 3503, 86, - 3505, 3506, 86, 86, 86, 3503, 86, 86, 86, 3510, - 3511, 86, 86, 3507, 86, 3508, 86, 3504, 3512, 86, - 3516, 86, 3509, 86, 86, 86, 86, 86, 3515, 3513, - 3518, 86, 3514, 86, 3525, 86, 3523, 3520, 3524, 3521, - 86, 3517, 3519, 86, 86, 86, 3522, 3529, 86, 3531, - 3530, 86, 3532, 86, 86, 86, 86, 86, 3533, 3534, - 3526, 3527, 3535, 3528, 3537, 3538, 86, 86, 3540, 86, - 86, 86, 3539, 86, 86, 3536, 86, 3541, 86, 3546, - 86, 3543, 86, 86, 86, 86, 86, 3549, 3550, 86, - 3542, 3551, 86, 86, 3552, 3544, 3548, 3545, 3553, 3547, + 3505, 3506, 86, 3507, 86, 86, 86, 3501, 86, 3510, + 86, 86, 86, 3508, 3515, 3511, 3512, 86, 86, 86, + 86, 3519, 86, 86, 3518, 3509, 86, 3514, 3521, 86, + 3517, 3516, 86, 3513, 3522, 86, 3523, 86, 3526, 86, + 86, 3524, 86, 3520, 3529, 86, 86, 3530, 86, 86, + 86, 3525, 3533, 3534, 86, 3527, 3531, 86, 86, 86, + 3528, 86, 3539, 86, 3535, 86, 3538, 3536, 3532, 3540, + 86, 86, 86, 86, 86, 86, 3537, 86, 3544, 86, + 3546, 86, 86, 86, 86, 86, 3541, 3543, 3551, 3552, + 86, 3542, 3545, 86, 3548, 3549, 3547, 3559, 3550, 3553, - 86, 86, 3557, 3554, 86, 86, 86, 86, 3561, 3558, - 86, 3555, 86, 3556, 86, 3563, 86, 3564, 3559, 86, - 86, 3568, 86, 86, 3565, 3571, 86, 3566, 3569, 3562, - 86, 3567, 3560, 86, 86, 3570, 86, 3572, 86, 86, - 86, 3573, 86, 3575, 3577, 86, 86, 3579, 86, 86, - 86, 3580, 86, 3583, 86, 3574, 3584, 86, 3576, 3578, - 86, 3587, 3588, 86, 86, 3590, 86, 3581, 3582, 3585, - 86, 3589, 86, 3586, 3591, 86, 86, 3592, 86, 86, - 3599, 3593, 3599, 3594, 3597, 86, 3598, 86, 3599, 3599, - 3599, 3595, 3599, 3599, 3599, 3599, 3599, 3599, 3596, 47, + 86, 3557, 86, 86, 86, 3554, 86, 3560, 3555, 3558, + 86, 86, 3556, 86, 86, 3561, 3562, 3565, 3563, 3566, + 86, 86, 86, 86, 3568, 86, 3567, 86, 86, 86, + 86, 3569, 3574, 3564, 86, 3571, 86, 86, 86, 86, + 3577, 3570, 3578, 86, 86, 86, 86, 86, 3572, 3573, + 3576, 3581, 86, 3575, 3579, 3582, 86, 3580, 86, 3585, + 3584, 3586, 86, 3583, 86, 3587, 86, 3589, 86, 3591, + 86, 3592, 86, 86, 86, 3596, 86, 3593, 3627, 86, + 3594, 3599, 86, 3590, 3597, 86, 86, 3598, 3588, 86, + 86, 86, 86, 3595, 86, 86, 3600, 3601, 86, 3603, - 47, 47, 47, 47, 47, 47, 52, 52, 52, 52, - 52, 52, 52, 57, 57, 57, 57, 57, 57, 57, - 63, 63, 63, 63, 63, 63, 63, 68, 68, 68, - 68, 68, 68, 68, 74, 74, 74, 74, 74, 74, - 74, 80, 80, 80, 80, 80, 80, 80, 89, 89, - 3599, 89, 89, 89, 89, 160, 160, 3599, 3599, 3599, - 160, 160, 162, 162, 3599, 3599, 162, 3599, 162, 164, - 3599, 3599, 3599, 3599, 3599, 164, 167, 167, 3599, 3599, - 3599, 167, 167, 169, 3599, 3599, 3599, 3599, 3599, 169, - 171, 171, 3599, 171, 171, 171, 171, 174, 3599, 3599, + 3605, 86, 86, 3607, 86, 3602, 86, 3608, 86, 3611, + 3604, 3606, 3612, 86, 3609, 86, 86, 3615, 3616, 86, + 86, 3618, 86, 3610, 86, 3613, 86, 3617, 3619, 86, + 86, 3620, 86, 86, 3614, 3621, 3627, 3622, 3625, 86, + 3626, 86, 3627, 3627, 3627, 3623, 3627, 3627, 3627, 3627, + 3627, 3627, 3624, 47, 47, 47, 47, 47, 47, 47, + 52, 52, 52, 52, 52, 52, 52, 57, 57, 57, + 57, 57, 57, 57, 63, 63, 63, 63, 63, 63, + 63, 68, 68, 68, 68, 68, 68, 68, 74, 74, + 74, 74, 74, 74, 74, 80, 80, 80, 80, 80, - 3599, 3599, 3599, 174, 177, 177, 3599, 3599, 3599, 177, - 177, 90, 90, 3599, 90, 90, 90, 90, 17, 3599, - 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, - 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, - 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, - 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599 + 80, 80, 89, 89, 3627, 89, 89, 89, 89, 160, + 160, 3627, 3627, 3627, 160, 160, 162, 162, 3627, 3627, + 162, 3627, 162, 164, 3627, 3627, 3627, 3627, 3627, 164, + 167, 167, 3627, 3627, 3627, 167, 167, 169, 3627, 3627, + 3627, 3627, 3627, 169, 171, 171, 3627, 171, 171, 171, + 171, 174, 3627, 3627, 3627, 3627, 3627, 174, 177, 177, + 3627, 3627, 3627, 177, 177, 90, 90, 3627, 90, 90, + 90, 90, 17, 3627, 3627, 3627, 3627, 3627, 3627, 3627, + 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, + 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, + + 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, + 3627, 3627, 3627 } ; -static const flex_int16_t yy_chk[7060] = +static const flex_int16_t yy_chk[7114] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2397,14 +2413,14 @@ static const flex_int16_t yy_chk[7060] = 5, 3, 6, 24, 4, 24, 24, 5, 24, 6, 7, 7, 7, 7, 24, 7, 8, 8, 8, 8, 33, 8, 7, 9, 9, 9, 26, 26, 8, 10, - 10, 10, 19, 29, 9, 33, 19, 29, 3607, 35, + 10, 10, 19, 29, 9, 33, 19, 29, 3635, 35, 10, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 34, 13, 11, 35, 99, 34, 29, 38, 13, 51, 51, 11, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 99, 14, 12, 15, 15, 15, 38, 23, 14, 23, 23, 12, 23, 46, 15, 16, 16, - 16, 23, 23, 25, 27, 27, 25, 25, 2925, 16, + 16, 23, 23, 25, 27, 27, 25, 25, 2947, 16, 25, 46, 27, 30, 30, 25, 27, 56, 40, 27, 56, 73, 31, 31, 25, 28, 67, 67, 30, 32, 28, 31, 40, 32, 28, 73, 32, 28, 92, 28, @@ -2730,441 +2746,448 @@ static const flex_int16_t yy_chk[7060] = 1446, 1449, 1447, 1456, 1448, 1450, 1450, 1449, 1451, 1451, 1453, 1453, 1454, 1455, 1445, 1457, 1454, 1458, 1459, 1460, - 1462, 1456, 1455, 1461, 1461, 1464, 1460, 1457, 1463, 1465, - 1464, 1458, 1466, 1459, 1469, 57, 1463, 1470, 1470, 1467, - 1462, 1468, 1471, 1465, 1467, 1467, 1468, 1468, 1472, 1473, - 1474, 1466, 1475, 1476, 1469, 1474, 1477, 1478, 1473, 1479, - 1480, 1471, 1481, 1478, 1479, 1483, 1482, 1472, 1486, 1484, - 1485, 1475, 1482, 1476, 1477, 1484, 1485, 1487, 1488, 1489, - 1480, 1490, 1492, 1496, 1483, 1491, 1493, 1486, 1481, 1494, - 1494, 1495, 1497, 1498, 1495, 52, 1487, 1488, 1489, 1491, - 1490, 1493, 1496, 1492, 1503, 1498, 1499, 1499, 1500, 1500, - 1501, 1497, 1502, 1504, 1505, 1501, 1502, 1503, 1506, 1510, + 1462, 1456, 1455, 1461, 1461, 1466, 1460, 1457, 1451, 1463, + 1451, 1458, 1465, 1459, 1464, 1469, 1467, 1463, 1471, 1464, + 1462, 1467, 1467, 1468, 1466, 1472, 1465, 1473, 1468, 1468, + 1470, 1470, 1475, 1474, 1476, 1469, 1473, 1471, 1474, 1477, + 1478, 1480, 1479, 1481, 1472, 1483, 1478, 1479, 1486, 1482, + 1484, 1475, 1485, 1487, 1476, 1482, 1484, 1477, 1485, 1488, + 1489, 1480, 1490, 1491, 1483, 1492, 1496, 1486, 1493, 1481, + 1494, 1494, 1487, 1495, 1497, 1498, 1495, 1491, 1488, 1489, + 1502, 1490, 1503, 1493, 1502, 1496, 1492, 1498, 1499, 1499, + 1500, 1500, 1501, 1497, 1504, 1503, 1505, 1501, 1506, 1510, - 1506, 1508, 1504, 1509, 1506, 1511, 1512, 1505, 1509, 1513, - 1513, 1514, 1515, 1516, 1510, 1518, 1514, 1506, 1515, 1508, - 1517, 1518, 1512, 1520, 1519, 1511, 1521, 1520, 1516, 1519, - 1521, 1522, 1523, 1517, 1524, 1525, 1526, 1527, 1527, 1529, - 1531, 1532, 1526, 1524, 1533, 1533, 1532, 1534, 1535, 1539, - 1523, 1522, 1539, 1534, 1541, 1525, 1542, 1529, 1537, 1537, - 1543, 1531, 1540, 1540, 1545, 1546, 1548, 1545, 1535, 1547, - 1541, 1549, 1542, 1550, 1550, 1548, 1543, 1551, 1552, 1553, - 1554, 1555, 1556, 1557, 1557, 1554, 1546, 1558, 1556, 1547, - 1559, 1549, 1551, 1561, 1560, 1555, 1558, 1562, 1553, 1552, + 1506, 1508, 1509, 1504, 1506, 1511, 1512, 1509, 1514, 1505, + 1513, 1513, 1515, 1514, 1510, 1516, 1517, 1506, 1515, 1508, + 1518, 1522, 1512, 1519, 1523, 1511, 1518, 1520, 1519, 1517, + 1516, 1520, 1521, 1525, 1524, 1531, 1521, 1529, 1526, 1527, + 1527, 1522, 1523, 1524, 1526, 1532, 1533, 1533, 1534, 1535, + 1532, 1537, 1537, 1525, 1534, 1529, 1531, 1539, 1540, 1540, + 1539, 1541, 1542, 1543, 1545, 1546, 1548, 1545, 1547, 1535, + 1549, 1550, 1550, 1552, 1551, 1548, 1553, 1541, 1542, 1543, + 1554, 1556, 1555, 1557, 1557, 1554, 1546, 1556, 1547, 1551, + 1549, 1558, 1559, 1560, 1552, 1553, 1555, 1561, 1562, 1564, - 1563, 1563, 1564, 1565, 1567, 1566, 1568, 1568, 1559, 1560, - 1566, 1569, 1570, 1571, 1571, 1569, 1564, 1562, 1561, 1567, - 1572, 1565, 1573, 1574, 1575, 1576, 1577, 1581, 1575, 1579, - 1579, 1577, 1570, 1580, 1574, 1583, 1580, 1584, 1582, 1585, - 1581, 1573, 1572, 1582, 1576, 1586, 1587, 1588, 1589, 1589, - 1591, 1583, 1590, 1585, 1592, 1584, 1595, 1590, 1593, 1593, - 1587, 1595, 1594, 1596, 1586, 1586, 1597, 1600, 1597, 1599, - 1591, 1594, 1588, 1598, 1592, 1599, 1601, 1603, 1598, 1604, - 1604, 1605, 1601, 1596, 1606, 1609, 1613, 1600, 1608, 1612, - 1606, 1603, 1614, 1608, 1610, 1610, 1611, 1611, 1615, 1617, + 1558, 1563, 1563, 1565, 1566, 1567, 1568, 1568, 1560, 1566, + 1559, 1569, 1570, 1564, 1572, 1569, 1571, 1571, 1562, 1573, + 1567, 1565, 1561, 1574, 1575, 1576, 1577, 1583, 1575, 1579, + 1579, 1577, 1570, 1581, 1574, 1584, 1572, 1580, 1573, 1586, + 1580, 1585, 1582, 1583, 1576, 1588, 1581, 1582, 1587, 1589, + 1589, 1590, 1591, 1584, 1592, 1585, 1590, 1594, 1586, 1586, + 1593, 1593, 1587, 1595, 1596, 1597, 1594, 1597, 1595, 1599, + 1588, 1598, 1591, 1600, 1592, 1599, 1598, 1601, 1603, 1604, + 1604, 1605, 1606, 1601, 1596, 1608, 1609, 1612, 1606, 1613, + 1608, 1614, 1603, 1600, 1610, 1610, 1611, 1611, 1617, 1615, - 1605, 1615, 1618, 1612, 1613, 1616, 1616, 1614, 1619, 1609, - 1621, 1627, 1620, 1625, 1618, 1620, 1621, 1617, 1620, 1622, - 1623, 1626, 1625, 1623, 1622, 1630, 1626, 1638, 1619, 1628, - 1620, 1631, 1628, 1629, 1629, 1632, 1627, 1631, 1633, 1623, - 1638, 1632, 1636, 1633, 1634, 1634, 1635, 1635, 1636, 1630, - 1637, 1639, 1640, 1641, 1642, 1637, 1643, 1642, 1644, 1645, - 1648, 1646, 1643, 1652, 1644, 1645, 1646, 1649, 1647, 1639, - 1653, 1640, 1649, 1641, 1647, 1650, 1650, 1651, 1654, 1655, - 1656, 1652, 1651, 1648, 1657, 1659, 1658, 1660, 1661, 1662, - 1653, 1662, 1661, 1666, 1656, 1663, 1668, 1654, 1657, 1655, + 1605, 1612, 1615, 1616, 1616, 1618, 1614, 1613, 1619, 1620, + 1609, 1623, 1620, 1621, 1623, 1620, 1617, 1618, 1622, 1621, + 1625, 1626, 1627, 1622, 1629, 1629, 1626, 1620, 1619, 1625, + 1623, 1628, 1630, 1631, 1628, 1632, 1638, 1633, 1640, 1631, + 1639, 1632, 1633, 1634, 1634, 1635, 1635, 1627, 1636, 1638, + 1637, 1641, 1648, 1653, 1636, 1637, 1630, 1640, 1639, 1642, + 1643, 1644, 1642, 1645, 1652, 1646, 1643, 1644, 1647, 1645, + 1646, 1641, 1649, 1653, 1647, 1648, 1651, 1649, 1650, 1650, + 1654, 1651, 1652, 1655, 1656, 1660, 1657, 1658, 1659, 1661, + 1662, 1668, 1662, 1661, 1663, 1664, 1666, 1667, 1656, 1654, - 1658, 1664, 1670, 1659, 1667, 1666, 1673, 1669, 1664, 1668, - 1671, 1672, 1660, 1669, 1663, 1674, 1667, 1676, 1676, 1677, - 1673, 1679, 1670, 1678, 1680, 1680, 1671, 1681, 1678, 1682, - 1683, 1672, 1684, 1679, 1686, 1685, 1674, 1689, 1687, 1677, - 1693, 1691, 1681, 1682, 1685, 1687, 1688, 47, 1694, 1686, - 1684, 1694, 1697, 1689, 1683, 1688, 1691, 1698, 1688, 1695, - 1695, 1691, 1696, 1696, 1697, 1693, 1699, 1700, 1700, 1699, - 1701, 1702, 1703, 1704, 1705, 1698, 1704, 1703, 1706, 1705, - 1707, 1709, 1708, 1701, 1711, 1714, 1710, 1715, 1712, 1719, - 1702, 1708, 1714, 1711, 1712, 1710, 1707, 1706, 1710, 1716, + 1657, 1658, 1664, 1655, 1668, 1669, 1659, 1670, 1666, 1667, + 1660, 1669, 1671, 1663, 1672, 1673, 1674, 1675, 1675, 1674, + 1679, 1676, 1678, 1678, 1681, 1684, 1680, 1670, 1671, 1673, + 1676, 1680, 1682, 1682, 1672, 1683, 1681, 1674, 1685, 1684, + 1679, 1686, 1687, 1688, 1690, 1689, 1693, 1691, 1695, 1714, + 1683, 1687, 1689, 1690, 1696, 1714, 1690, 1696, 1688, 1686, + 1699, 1693, 1685, 1691, 1697, 1697, 1693, 1698, 1698, 1700, + 1703, 1701, 1699, 1695, 1701, 1702, 1702, 1704, 1706, 1705, + 1707, 1706, 1708, 1703, 1705, 1707, 1709, 1700, 1710, 1711, + 1713, 1712, 1715, 1715, 1717, 1719, 1704, 1710, 1716, 1713, - 1709, 1713, 1713, 1717, 1718, 1719, 1721, 1715, 1720, 1725, - 1722, 1721, 1716, 1720, 1720, 1726, 1727, 1727, 1718, 1728, - 1729, 1717, 1722, 1730, 1730, 1731, 1731, 1732, 1730, 1729, - 1734, 1735, 1733, 1726, 1725, 1728, 1732, 1733, 1736, 1732, - 1731, 1737, 1741, 1739, 1740, 1742, 1737, 1737, 1734, 1743, - 1742, 1745, 1735, 1748, 1744, 1753, 1736, 1739, 1748, 1740, - 1744, 1746, 1746, 1743, 1741, 1747, 1749, 1750, 1751, 1745, - 1754, 1747, 1755, 1750, 1751, 1753, 1756, 1758, 1755, 1757, - 1749, 1762, 1757, 1758, 1754, 1760, 1763, 1764, 1757, 1756, - 1765, 1766, 1767, 1760, 1768, 1769, 1766, 1770, 1765, 1771, + 1712, 1708, 1709, 1712, 1718, 1716, 1720, 1721, 1711, 1724, + 1722, 1727, 1728, 1719, 1717, 1722, 1722, 1718, 1730, 1723, + 1720, 1724, 1731, 1721, 1723, 1729, 1729, 1732, 1732, 1736, + 1728, 1731, 1732, 1734, 1730, 1735, 1727, 1733, 1733, 1737, + 1735, 1738, 1734, 1739, 1741, 1734, 1742, 1736, 1739, 1739, + 1743, 1744, 1733, 1745, 57, 1747, 1744, 1746, 1741, 1738, + 1737, 1742, 1749, 1746, 1748, 1748, 1750, 1745, 1749, 1751, + 1752, 1750, 1743, 1747, 1753, 1755, 1752, 1756, 1757, 1758, + 1753, 1760, 1762, 1751, 1757, 1759, 1764, 1760, 1759, 1765, + 1762, 1756, 1758, 1766, 1759, 1755, 1767, 1768, 1769, 52, - 1762, 1767, 1772, 1779, 1769, 1763, 1764, 1768, 1773, 1773, - 1770, 1774, 1775, 1771, 1777, 1780, 1772, 1774, 1775, 1776, - 1778, 1778, 1776, 1779, 1781, 1782, 1782, 1777, 1783, 1784, - 1773, 1785, 1786, 1780, 1787, 1784, 1789, 1789, 1790, 1793, - 1791, 1783, 1792, 1781, 1791, 1794, 1795, 1792, 1786, 1797, - 1794, 1795, 1787, 1785, 1796, 1799, 1800, 1801, 1790, 1793, - 1801, 1802, 1803, 1796, 1805, 1800, 1799, 1804, 1804, 1806, - 1807, 1809, 1797, 1802, 1808, 1808, 1811, 1803, 1812, 1810, - 1814, 1806, 1815, 1805, 1817, 1809, 1810, 1816, 1811, 1807, - 1812, 1818, 1819, 1816, 1820, 1820, 1817, 1821, 1819, 1814, + 1770, 1771, 1768, 1772, 1767, 1764, 1773, 1769, 1765, 1774, + 1771, 1776, 1766, 1770, 1775, 1775, 1772, 1776, 1777, 1778, + 1773, 1779, 1778, 1774, 1777, 1780, 1780, 1781, 1782, 1783, + 1784, 1784, 1785, 1786, 1779, 1787, 1775, 1788, 1789, 1786, + 1791, 1791, 1792, 1795, 1794, 1785, 1782, 1781, 1783, 1794, + 1793, 1799, 1798, 1788, 1793, 1796, 1789, 1787, 1801, 1797, + 1796, 1798, 1792, 1795, 1797, 1803, 1802, 1804, 1803, 1801, + 1805, 1806, 1806, 1807, 1799, 1802, 1808, 1809, 1813, 1804, + 1810, 1810, 1812, 1811, 1816, 1805, 1814, 1817, 1808, 1812, + 1813, 1820, 1807, 1818, 1819, 1821, 1809, 1811, 1814, 1818, - 1821, 1824, 1815, 1822, 1822, 1825, 1824, 1826, 1828, 1818, - 1827, 1827, 1831, 1826, 1825, 1829, 1830, 1829, 1832, 1830, - 1828, 1833, 1835, 1834, 1836, 1837, 1838, 1835, 1839, 1836, - 1840, 1842, 1831, 1841, 1837, 1840, 1848, 1845, 1838, 1833, - 1832, 1834, 1841, 1839, 1843, 1844, 1846, 1846, 1847, 1843, - 1844, 1842, 1845, 1850, 1847, 1841, 1843, 1848, 1851, 1852, - 1853, 1854, 1855, 1860, 1855, 1863, 1856, 1857, 1857, 1850, - 1858, 1858, 1859, 1859, 1861, 1861, 1853, 1851, 1852, 1864, - 1856, 1854, 1856, 1860, 1862, 1862, 1863, 1865, 1866, 1866, - 1867, 1868, 1869, 1871, 1867, 1869, 1872, 1868, 1873, 1871, + 1831, 1821, 1831, 1816, 1822, 1822, 1819, 1817, 1823, 1820, + 1826, 1823, 1824, 1824, 1827, 1826, 1828, 1829, 1829, 1830, + 1833, 1832, 1828, 1827, 1832, 1834, 1835, 1836, 1837, 1838, + 1839, 1830, 1842, 1837, 1838, 1841, 1840, 1842, 1844, 1839, + 1833, 1845, 1843, 1853, 1835, 1836, 1845, 1834, 1840, 1846, + 1841, 1843, 1847, 1845, 1846, 1848, 1848, 1849, 1844, 1850, + 1852, 1855, 1853, 1849, 1843, 1854, 1856, 1847, 1857, 1858, + 1857, 1859, 1859, 1860, 1860, 1862, 1852, 1855, 1861, 1861, + 1850, 1863, 1863, 1858, 1854, 1858, 1856, 1864, 1864, 1865, + 1866, 1867, 1868, 1868, 1869, 1862, 1870, 1871, 1869, 1873, - 1864, 1874, 1875, 1878, 1873, 1881, 1874, 1876, 1865, 1882, - 1876, 1877, 1877, 1879, 1872, 1880, 1880, 1883, 1879, 1884, - 1881, 1889, 1883, 1878, 1884, 1885, 1885, 1875, 1886, 1887, - 1882, 1888, 1892, 1886, 1890, 1887, 1891, 1893, 1892, 1896, - 1897, 1889, 1895, 1888, 1888, 1888, 1900, 1895, 1895, 1898, - 1888, 1898, 1890, 1896, 1899, 1897, 1891, 1893, 1901, 1902, - 1903, 1900, 1904, 1906, 1901, 1899, 1905, 1905, 1902, 1907, - 1907, 1908, 1909, 1910, 1910, 1911, 1911, 1912, 1915, 1915, - 1903, 1916, 1920, 1904, 1917, 1922, 1919, 1923, 1923, 1906, - 1921, 1908, 1924, 1917, 1909, 1919, 1921, 1912, 1926, 1925, + 1871, 1874, 1870, 1875, 1877, 1873, 1879, 1879, 1876, 1875, + 1865, 1866, 1867, 1876, 1878, 1880, 1881, 1878, 1883, 1874, + 1884, 1881, 1882, 1882, 1891, 1885, 1886, 1887, 1887, 1877, + 1885, 1886, 1888, 1883, 1889, 1880, 1890, 1888, 1892, 1893, + 1889, 1884, 1895, 1896, 1891, 1894, 1897, 1898, 1890, 1890, + 1890, 1894, 1898, 1897, 1901, 1890, 1892, 1902, 1905, 1893, + 1900, 1908, 1895, 1896, 1904, 1900, 1900, 1903, 1901, 1903, + 1906, 1907, 1902, 1905, 1909, 1904, 1906, 1910, 1910, 1911, + 1907, 1908, 1912, 1912, 1913, 1914, 1915, 1915, 1916, 1916, + 1917, 1920, 1920, 1921, 1922, 1909, 1925, 1924, 1927, 1928, - 1927, 1922, 1928, 1920, 1930, 1926, 1916, 1929, 1929, 1927, - 1931, 1933, 1935, 1924, 1925, 1934, 1936, 1933, 1935, 1938, - 1934, 1939, 1937, 1939, 1941, 1938, 1931, 1942, 1928, 1937, - 1930, 1943, 1943, 1942, 1944, 1945, 1936, 1946, 1948, 1944, - 1947, 1948, 1949, 1941, 1945, 1950, 1951, 1952, 1950, 1953, - 1953, 1956, 1954, 1957, 1949, 1955, 1958, 1946, 1954, 1947, - 1958, 1955, 1960, 1961, 1951, 1962, 1963, 1963, 1957, 1964, - 1962, 1956, 1965, 1952, 1966, 1968, 1958, 1969, 1970, 1970, - 1971, 1969, 1960, 1972, 1977, 1961, 1971, 1973, 1973, 1966, - 1975, 1965, 1972, 1964, 1968, 1974, 1976, 1976, 1978, 1974, + 1928, 1929, 1926, 1922, 1913, 1911, 1924, 1914, 1926, 1930, + 1917, 1932, 1931, 1933, 1927, 1934, 1934, 1925, 1921, 1931, + 1932, 1935, 1929, 1938, 1930, 1936, 1939, 1940, 1941, 1938, + 1942, 1939, 1943, 1940, 1944, 1946, 1944, 1942, 1943, 1933, + 1947, 1936, 1948, 1948, 1949, 1951, 1947, 1935, 1941, 1949, + 1950, 1952, 1953, 1956, 1946, 1953, 1954, 1955, 1957, 1950, + 1955, 1958, 1958, 1959, 1962, 1951, 1960, 1961, 1954, 1959, + 1952, 1956, 1960, 1963, 1965, 1966, 1967, 1963, 1969, 1962, + 1970, 1967, 1968, 1968, 1957, 1971, 1973, 1961, 1974, 1975, + 1975, 47, 1974, 1963, 1965, 1976, 1982, 1966, 1977, 1970, - 1979, 1975, 1980, 1981, 1982, 1977, 1975, 1980, 1983, 1984, - 1986, 1985, 1978, 1987, 1988, 1984, 1989, 1989, 1987, 1979, - 1990, 1990, 1991, 1981, 1982, 1986, 1991, 1988, 1983, 1985, - 1993, 1994, 1995, 1996, 1997, 1997, 1999, 1999, 1996, 1993, - 2000, 2004, 1994, 2001, 2003, 2000, 2000, 1994, 2005, 2001, - 2003, 2006, 1995, 2005, 2007, 2010, 2009, 2011, 2013, 2010, - 2007, 2012, 2012, 2006, 2014, 2015, 2016, 2004, 2009, 2011, - 2014, 2018, 2016, 2017, 2017, 2019, 2020, 2021, 2024, 2023, - 2025, 2020, 2032, 2013, 2031, 2025, 2033, 2015, 2032, 2021, - 2018, 2023, 2033, 2027, 18, 2019, 2027, 2024, 2028, 2028, + 1971, 1976, 1969, 1978, 1978, 1973, 1979, 1977, 1980, 1983, + 1979, 1981, 1981, 1984, 1986, 1985, 1987, 1982, 1988, 1980, + 1985, 1989, 1990, 1983, 1980, 1992, 1991, 1989, 1998, 1993, + 1992, 1996, 1984, 2000, 1986, 1996, 1987, 1998, 1988, 1999, + 1990, 1991, 1993, 1994, 1994, 1995, 1995, 2001, 2002, 2002, + 1999, 2009, 2001, 2000, 2005, 1999, 2004, 2004, 2006, 2005, + 2005, 2008, 2011, 2010, 2006, 2012, 2014, 2008, 2010, 2015, + 2016, 2012, 2018, 2015, 2011, 2017, 2017, 2009, 2014, 2019, + 2020, 2021, 2016, 2022, 2022, 2019, 2023, 2021, 2024, 2025, + 2029, 2026, 2028, 2030, 2025, 2036, 2032, 2018, 2030, 2032, - 2029, 2029, 2030, 2030, 2031, 2034, 2035, 2036, 2038, 2041, - 2034, 2040, 2035, 2038, 2040, 2044, 2036, 2042, 2042, 2045, - 2046, 2041, 2047, 2047, 2048, 2046, 2053, 2044, 2056, 2049, - 2050, 2045, 2054, 2048, 2049, 2050, 2051, 2052, 2052, 2051, - 2055, 2054, 2060, 2059, 2057, 2058, 2053, 2056, 2057, 2059, - 2058, 2062, 2061, 2063, 2065, 2065, 2066, 2069, 2055, 2067, - 2060, 2061, 2068, 2070, 2070, 2073, 2065, 2063, 2067, 2062, - 2071, 2068, 2072, 2074, 2066, 2075, 2081, 2069, 2074, 2071, - 2078, 2078, 2080, 2082, 2072, 2080, 2073, 2083, 2075, 2085, - 2087, 2086, 2081, 2088, 2089, 2089, 2087, 2091, 2090, 2082, + 2033, 2033, 2020, 2026, 2028, 2023, 2034, 2034, 2024, 2029, + 2035, 2035, 2037, 2038, 2040, 2036, 2039, 2041, 2037, 2038, + 2040, 2039, 2043, 2046, 2049, 2045, 2041, 2043, 2045, 2047, + 2047, 2050, 2051, 2052, 2052, 2046, 2049, 2051, 2053, 2054, + 2055, 2057, 2057, 2050, 2054, 2055, 2056, 2053, 2058, 2056, + 2059, 2060, 2061, 2062, 2065, 2063, 2064, 2062, 2066, 2059, + 2063, 2067, 2064, 2068, 2070, 2070, 2071, 2066, 2058, 2060, + 2074, 2061, 2065, 2072, 2073, 2078, 2070, 2068, 2076, 2067, + 2075, 2075, 2072, 2073, 2071, 2077, 2079, 2076, 2080, 2086, + 2074, 2079, 2083, 2083, 2087, 2085, 2078, 2077, 2085, 2088, - 2090, 2092, 2092, 2083, 2085, 2086, 2093, 2095, 2095, 2098, - 2088, 2096, 2096, 2099, 2093, 2091, 2100, 2101, 2102, 2099, - 2103, 2104, 2100, 2105, 2105, 2102, 2106, 2106, 2107, 2110, - 2112, 2101, 2098, 2108, 2109, 2106, 2111, 2113, 2116, 2117, - 17, 2104, 2103, 2118, 2110, 2108, 2109, 2120, 2111, 2107, - 0, 2114, 2113, 2114, 2121, 2118, 2112, 2114, 2116, 2119, - 2119, 2122, 2117, 2123, 2122, 2120, 2124, 2126, 2123, 2127, - 2114, 2127, 2126, 2128, 2121, 2129, 2130, 2134, 2132, 2135, - 2129, 2136, 2137, 2130, 2137, 2138, 2124, 2132, 2135, 2142, - 2139, 2128, 2141, 2136, 2141, 2134, 2139, 2143, 2143, 2144, + 2091, 2080, 2090, 2092, 2093, 2086, 2094, 2094, 2096, 2092, + 2087, 2095, 2098, 2095, 2091, 2088, 2103, 2090, 2097, 2097, + 2098, 2093, 2100, 2100, 2101, 2101, 2096, 2104, 2105, 2106, + 2107, 2108, 2109, 2104, 2105, 2110, 2110, 2107, 2112, 2103, + 2111, 2111, 2113, 2106, 2114, 2115, 2116, 2117, 2118, 2111, + 2119, 2121, 2109, 2108, 2113, 2124, 2114, 2118, 2116, 2112, + 2115, 2120, 2122, 2125, 2122, 2119, 2120, 2120, 2122, 2128, + 2126, 2127, 2127, 2117, 2121, 2124, 2129, 2130, 2131, 2132, + 2130, 2122, 2126, 2131, 2134, 2136, 2125, 2128, 2135, 2134, + 2135, 2138, 2137, 2140, 2142, 2143, 2129, 2137, 2138, 2132, - 2145, 2149, 2147, 2142, 2138, 2145, 2146, 2147, 2146, 2148, - 2150, 2151, 2152, 2154, 2148, 2153, 2156, 2155, 2152, 2149, - 2153, 2156, 2156, 2159, 2157, 2144, 2154, 2160, 2150, 2155, - 2164, 2151, 2157, 2161, 2161, 2162, 2162, 2163, 2165, 2167, - 2166, 2160, 2159, 2169, 2167, 2164, 2166, 2168, 2163, 2168, - 2172, 2170, 2171, 2171, 2173, 2173, 2174, 2174, 2165, 2170, - 2175, 2169, 2172, 2176, 2177, 2180, 2179, 2170, 2176, 2175, - 2179, 2181, 2182, 2181, 2180, 2183, 2184, 2180, 2185, 2186, - 2183, 2183, 2177, 2188, 2189, 2190, 2192, 2185, 2184, 2189, - 2190, 2186, 2193, 2182, 2194, 2188, 2195, 2195, 2196, 2192, + 2146, 2144, 2140, 2136, 2143, 2145, 2150, 2145, 2147, 2149, + 2152, 2149, 2142, 2144, 2147, 2151, 2151, 2153, 2159, 2146, + 2150, 2154, 2153, 2154, 2155, 2156, 2157, 2158, 2160, 2155, + 2156, 2163, 2161, 2162, 2160, 2164, 2152, 2161, 2159, 2165, + 2164, 2164, 2167, 2163, 2157, 2158, 2162, 2165, 2168, 2169, + 2169, 2170, 2170, 2171, 2172, 2173, 2176, 2174, 2176, 2177, + 2175, 2167, 2168, 2174, 2171, 2175, 2178, 2179, 2179, 2172, + 2185, 2180, 2181, 2181, 2178, 2173, 2183, 2177, 2182, 2182, + 2187, 2184, 2178, 2180, 2187, 2183, 2184, 2188, 2185, 2189, + 2190, 2189, 2191, 2192, 2193, 2194, 2188, 2191, 2191, 2188, - 2197, 2198, 2200, 2194, 2199, 2203, 2208, 2201, 2202, 2207, - 2203, 2208, 2193, 2205, 2206, 2210, 2196, 2209, 2197, 2198, - 2199, 2201, 2209, 2202, 2210, 2205, 2206, 2200, 2211, 2207, - 2214, 2216, 2217, 2218, 2219, 2220, 2214, 2216, 2221, 2222, - 2222, 2223, 2224, 2224, 2225, 2226, 2211, 2221, 2218, 2214, - 2223, 2228, 2219, 2227, 2229, 2217, 2228, 2227, 2231, 2232, - 2220, 2233, 2225, 2234, 2226, 2232, 2235, 2229, 2234, 2234, - 2236, 2237, 2235, 2238, 2237, 2239, 2236, 2231, 2242, 2242, - 2244, 2238, 2247, 2233, 2243, 2243, 2245, 2245, 2248, 2244, - 2246, 2246, 2249, 2256, 2247, 2239, 2250, 2256, 2249, 2243, + 2196, 2197, 2200, 2193, 2198, 2192, 2197, 2194, 2201, 2198, + 2202, 2190, 2196, 2203, 2203, 2200, 2204, 2205, 2206, 2202, + 2208, 2207, 2211, 2215, 2209, 2210, 2216, 2211, 2201, 2213, + 2214, 2216, 2219, 2225, 2204, 2205, 2206, 2207, 2209, 2217, + 2210, 2213, 2214, 2215, 2217, 2208, 2218, 2222, 2224, 2226, + 2219, 2227, 2228, 2222, 2224, 2218, 2225, 2233, 2229, 2230, + 2230, 2231, 2232, 2232, 2226, 2234, 2222, 2229, 2235, 2227, + 2231, 2236, 2235, 2237, 2239, 2233, 2236, 2228, 2241, 2240, + 2255, 2247, 2242, 2243, 2234, 2240, 2237, 2242, 2242, 2243, + 2244, 2245, 2255, 2239, 2245, 2246, 2244, 2250, 2250, 2252, - 2257, 2250, 2251, 2251, 2252, 2252, 2248, 2253, 2254, 2258, - 2243, 2259, 2253, 2258, 2254, 2261, 2262, 2264, 2263, 2265, - 2257, 2262, 2267, 2269, 2265, 2266, 2268, 2270, 2269, 2271, - 2271, 2259, 2264, 2272, 2274, 2273, 2275, 2272, 2267, 2274, - 2261, 2263, 2276, 2266, 2277, 2278, 2268, 2279, 2280, 2270, - 2273, 2281, 2282, 2280, 2275, 2283, 2283, 2278, 2286, 2285, - 2287, 2288, 2277, 2289, 2281, 2290, 2279, 2285, 2276, 2291, - 2282, 2292, 2293, 2294, 2299, 2295, 2297, 2286, 2303, 2287, - 2288, 2295, 2300, 2302, 2293, 2302, 2289, 2299, 2291, 2290, - 2305, 2297, 2292, 2301, 2294, 2305, 2300, 2307, 2303, 2301, + 2241, 2247, 2256, 2246, 2251, 2251, 2253, 2253, 2252, 2254, + 2254, 2257, 2264, 2258, 2259, 2259, 2264, 2257, 2258, 2251, + 2256, 2260, 2260, 2261, 2265, 2262, 2267, 2269, 2261, 2266, + 2251, 2262, 2270, 2266, 2271, 2272, 2273, 2270, 2274, 2275, + 2276, 2273, 2277, 2278, 2265, 2283, 2267, 2277, 2279, 2279, + 2272, 2281, 2269, 2284, 2280, 2275, 2274, 2271, 2280, 2282, + 2276, 2286, 2285, 2283, 2282, 2278, 2281, 2287, 2289, 2288, + 2290, 2291, 2291, 2286, 2288, 2293, 2294, 2295, 2296, 2284, + 2285, 2289, 2297, 2293, 2298, 2299, 2287, 2301, 2290, 2300, + 2302, 2305, 2303, 18, 2307, 2294, 2295, 2296, 2303, 2301, - 2304, 2304, 2306, 2308, 2309, 2306, 2310, 2311, 2311, 2315, - 2307, 2312, 2312, 2313, 0, 2313, 2314, 2314, 2309, 2310, - 2316, 2317, 2317, 2319, 2315, 2318, 2318, 2308, 2320, 2320, - 2321, 2321, 2319, 2316, 2322, 2319, 2324, 2325, 2326, 2322, - 2327, 2324, 2328, 2328, 2329, 2329, 2330, 2331, 2331, 2332, - 2333, 2333, 2327, 2334, 2335, 2336, 2336, 2325, 2326, 2335, - 2337, 2337, 2338, 2339, 2340, 2330, 2341, 2332, 2334, 2342, - 2344, 2346, 2339, 2345, 2345, 2344, 2338, 2347, 2347, 2348, - 2341, 2340, 2349, 2350, 2352, 2352, 2354, 2349, 2342, 2350, - 2346, 2351, 2353, 2353, 2351, 2355, 2356, 2348, 2356, 2358, + 2308, 2311, 2316, 2309, 2299, 2297, 2305, 2307, 2298, 2309, + 2300, 2302, 2315, 2310, 2308, 2310, 2312, 2312, 2313, 2314, + 2317, 2311, 2314, 2313, 2318, 2315, 2316, 2319, 2319, 2320, + 2320, 2321, 2323, 2321, 2317, 2322, 2322, 2318, 2324, 2325, + 2326, 2326, 2328, 2328, 2326, 2329, 2329, 2323, 2330, 2330, + 2331, 2337, 2325, 2324, 2332, 2332, 2333, 2333, 2334, 2331, + 2336, 2338, 2331, 2334, 2339, 2336, 2340, 2340, 2341, 2341, + 2342, 2337, 2343, 2343, 2344, 2346, 2339, 2345, 2345, 2347, + 2350, 2338, 2348, 2348, 2347, 2349, 2349, 2351, 2352, 2342, + 2346, 2354, 2344, 2353, 2350, 2356, 2351, 2357, 2357, 2358, - 2352, 2359, 2360, 2360, 2362, 2354, 2363, 2364, 2365, 2366, - 2355, 2367, 2367, 2366, 2358, 2368, 2370, 2369, 2371, 2374, - 2359, 2363, 2369, 2365, 2362, 2373, 2373, 2376, 2375, 2377, - 2364, 2370, 2378, 2371, 2368, 2375, 2379, 2380, 0, 2374, - 2382, 2376, 2381, 2381, 2383, 2387, 2383, 2377, 2386, 2382, - 2378, 2379, 2384, 2388, 2386, 2384, 2389, 2387, 2388, 2390, - 2391, 2389, 2392, 2380, 2393, 2394, 2396, 2399, 2402, 2393, - 2384, 2396, 2384, 2391, 2397, 2398, 2407, 2410, 2403, 2397, - 2398, 2400, 2399, 2392, 2390, 2405, 2401, 2400, 2404, 2402, - 2405, 2394, 2401, 2403, 2404, 2406, 2408, 2410, 2411, 2409, + 2356, 2359, 2359, 2360, 2361, 2352, 2362, 2353, 2363, 2361, + 2354, 2363, 2362, 2364, 2364, 2365, 2365, 2366, 2358, 2367, + 2368, 2360, 2368, 2370, 2371, 2372, 2372, 2374, 2376, 2364, + 2375, 2377, 17, 2378, 2367, 2380, 2366, 2378, 2370, 2379, + 2379, 2382, 2383, 2371, 2381, 2375, 2377, 2374, 2386, 2381, + 2388, 2376, 2385, 2385, 2380, 2387, 2382, 2383, 2389, 2390, + 2391, 2392, 2387, 2394, 2388, 2393, 2393, 2395, 2386, 2395, + 2396, 2399, 2394, 2396, 2398, 2391, 2389, 2390, 2402, 2400, + 2398, 2401, 2403, 2399, 2400, 2404, 2401, 2392, 2396, 2405, + 2396, 2406, 2408, 2409, 2405, 2403, 2410, 2408, 2409, 2411, - 2406, 2407, 2409, 2412, 2413, 2414, 2415, 2411, 2420, 2408, - 2416, 2417, 2412, 2413, 2414, 2418, 2416, 2417, 2422, 2418, - 2415, 2423, 2424, 2424, 2427, 2425, 2426, 2426, 2420, 2429, - 2423, 2425, 2430, 2427, 2429, 2426, 2428, 2428, 2422, 2432, - 2433, 2434, 2434, 2435, 2436, 2438, 2439, 2441, 2440, 2445, - 2447, 2447, 2430, 2436, 2430, 2432, 2433, 2438, 2435, 2441, - 2444, 2443, 2439, 2440, 2443, 2444, 2446, 2448, 2448, 2445, - 2450, 2450, 2451, 2457, 2452, 2451, 2453, 2454, 2446, 2452, - 2455, 2459, 2453, 2454, 2456, 2456, 2460, 2457, 2461, 2455, - 2458, 2458, 2463, 2459, 2462, 2462, 2464, 2465, 2463, 2467, + 2414, 2410, 2412, 2402, 2413, 2415, 2404, 2416, 2412, 2419, + 2413, 2417, 2420, 2416, 2411, 2422, 2417, 2406, 2418, 2421, + 2415, 2414, 2421, 2418, 2423, 2420, 2427, 2424, 2425, 2426, + 2432, 2434, 2450, 2423, 2419, 2422, 2424, 2425, 2426, 2428, + 2427, 2429, 2430, 2435, 2450, 2428, 2430, 2429, 2436, 2436, + 2432, 2434, 2435, 2437, 2438, 2438, 2439, 2440, 2440, 2437, + 2442, 2441, 2444, 2438, 2447, 2439, 2441, 2445, 2446, 2446, + 2451, 2455, 2448, 2452, 2455, 2453, 2457, 0, 2444, 2447, + 2442, 2448, 2442, 2445, 2456, 2458, 2451, 2453, 2452, 2456, + 2459, 2459, 2460, 2460, 2462, 2462, 2457, 2458, 2463, 2464, - 2460, 2468, 2465, 2467, 2468, 2469, 2469, 2461, 2470, 2471, - 2464, 2472, 2473, 2470, 2471, 2474, 2476, 2476, 2475, 2477, - 2472, 2473, 2475, 2479, 2480, 2481, 2482, 2483, 2479, 2484, - 2485, 2486, 2477, 2484, 2487, 2474, 2486, 2488, 2489, 2489, - 2487, 2483, 2490, 2488, 2480, 2481, 2482, 2491, 2492, 2493, - 2485, 2494, 2495, 2495, 2493, 2498, 2497, 2499, 2500, 2501, - 2490, 2502, 2499, 2507, 2500, 2501, 2491, 2492, 2497, 2502, - 2505, 2498, 2494, 2503, 2511, 2503, 0, 2507, 2516, 2505, - 2508, 2508, 2509, 2510, 2516, 2509, 2510, 2512, 2512, 2515, - 2517, 2518, 2518, 2515, 2519, 2522, 2522, 2524, 2526, 2530, + 2465, 2463, 2466, 2467, 2464, 2469, 2465, 2472, 2466, 2468, + 2468, 2471, 2467, 2470, 2470, 2473, 2474, 2474, 2475, 2469, + 2477, 2472, 2476, 2471, 2475, 2477, 2479, 2486, 2480, 2484, + 2479, 2480, 2481, 2481, 2473, 2482, 2476, 2483, 2484, 2485, + 2482, 2487, 2483, 2488, 2488, 2487, 2489, 2486, 2485, 2491, + 2492, 2493, 2494, 2495, 2491, 2497, 2496, 2498, 2499, 2489, + 2496, 2502, 2498, 2500, 2499, 2501, 2501, 2495, 2503, 2500, + 2492, 2493, 2494, 2504, 2506, 2497, 2505, 2507, 2507, 2502, + 2510, 2505, 2509, 2511, 2512, 2513, 0, 2503, 2511, 2514, + 2512, 2513, 2504, 2517, 2509, 2506, 2510, 2514, 2515, 2519, - 2511, 2527, 2517, 2519, 2530, 2531, 2532, 2543, 2533, 2534, - 2535, 2535, 2526, 2533, 2534, 2524, 2539, 2527, 2537, 2537, - 2540, 2542, 2539, 2541, 2541, 2544, 2546, 2532, 0, 2543, - 2544, 2531, 2547, 2552, 2548, 2547, 2549, 2542, 2550, 2550, - 2540, 2553, 2552, 2554, 2555, 2546, 2548, 2553, 2549, 2554, - 2556, 2558, 2558, 2559, 2560, 0, 2559, 2561, 2563, 2563, - 2564, 2564, 2555, 2565, 2566, 2556, 2568, 2567, 2565, 2569, - 2570, 2571, 2570, 2560, 2569, 2561, 2567, 2572, 2573, 2568, - 2575, 2574, 2566, 2576, 2577, 2571, 2574, 2578, 2578, 2577, - 2573, 2572, 2579, 2579, 2580, 2580, 2581, 2581, 2582, 2583, + 2515, 2520, 2517, 2521, 2521, 2522, 2523, 2523, 2522, 2525, + 2527, 2526, 2525, 2519, 2526, 2520, 2528, 2528, 2531, 2532, + 2533, 2535, 2531, 2534, 2534, 2532, 2538, 2538, 2540, 2542, + 2535, 2543, 2533, 2546, 2547, 2548, 2527, 2549, 2546, 2550, + 2551, 2551, 2549, 2542, 2550, 2555, 2540, 2543, 2553, 2553, + 2556, 2555, 2557, 2557, 2559, 2558, 2548, 2560, 2562, 0, + 2547, 2563, 2560, 2564, 2563, 2568, 2565, 2566, 2566, 2571, + 2556, 2558, 2576, 2569, 2568, 2564, 2559, 2562, 2565, 2569, + 2570, 2572, 2574, 2574, 2577, 2575, 2570, 2571, 2575, 2579, + 2579, 2576, 2580, 2580, 2581, 2582, 2572, 2583, 2584, 2581, - 2575, 2584, 2588, 2576, 2585, 2585, 2584, 2586, 2586, 2589, - 2582, 2587, 2587, 2590, 2588, 2591, 2592, 2583, 2593, 2594, - 2594, 2595, 2596, 2596, 2600, 2590, 2597, 2597, 2598, 2589, - 2599, 2599, 2602, 2603, 2593, 2591, 2600, 2592, 2601, 2598, - 2595, 2604, 2605, 2606, 2602, 2601, 2604, 2607, 2607, 2608, - 2609, 2609, 2610, 2603, 2611, 2612, 2613, 2614, 2608, 2615, - 2617, 2623, 2605, 2606, 2616, 2624, 2616, 2619, 2612, 2618, - 2618, 2614, 2617, 2620, 2611, 2621, 2619, 2625, 2610, 2623, - 2613, 2615, 2626, 2627, 2628, 2626, 2629, 2624, 2620, 2628, - 2621, 2629, 2630, 2630, 2631, 2631, 2637, 2627, 2632, 2632, + 2585, 2586, 2577, 2586, 2587, 2585, 2583, 2588, 2589, 2590, + 2591, 2584, 2592, 2582, 2590, 2594, 2594, 2593, 2587, 2598, + 2589, 2588, 2593, 2595, 2595, 2596, 2596, 2597, 2597, 2599, + 2591, 2598, 2592, 2600, 2601, 2601, 2602, 2602, 2600, 2603, + 2603, 2604, 2605, 2606, 2607, 2608, 0, 2599, 2611, 2609, + 2610, 2610, 2614, 2604, 2619, 2606, 2612, 2612, 2613, 2613, + 2615, 2615, 2605, 2614, 2607, 2609, 2608, 2611, 2616, 2617, + 2618, 2621, 2620, 2622, 2619, 2624, 2617, 2620, 2623, 2623, + 2616, 2626, 2618, 2627, 2624, 2625, 2625, 2628, 2629, 2631, + 2630, 2621, 2632, 2622, 2632, 2639, 2633, 2634, 2634, 2636, - 2625, 2634, 2634, 2636, 2636, 2638, 2639, 2640, 2642, 2643, - 2644, 2645, 2646, 2647, 2637, 2648, 2638, 2648, 2649, 2650, - 2654, 2646, 2640, 2651, 2654, 2639, 2656, 2643, 2642, 2652, - 2652, 2645, 2644, 2647, 2655, 2655, 2657, 2650, 2649, 2658, - 2656, 2651, 2659, 2659, 2661, 2662, 2662, 2663, 2658, 2664, - 2665, 2667, 2666, 2661, 2668, 2669, 2671, 2672, 2657, 2666, - 2670, 2673, 2673, 2675, 2672, 2663, 2667, 2664, 2665, 2674, - 2674, 2676, 2668, 2669, 2677, 2671, 2670, 2679, 2679, 2681, - 2677, 2680, 2680, 2675, 2682, 2681, 2683, 2685, 2684, 2676, - 2687, 2686, 2688, 2690, 2691, 2687, 2689, 0, 2692, 2691, + 2628, 2635, 2637, 2627, 2630, 2640, 2641, 2626, 2633, 2643, + 2635, 2631, 2629, 2639, 2636, 2642, 2644, 2637, 2642, 2645, + 2653, 2644, 2655, 2643, 2645, 2646, 2646, 2640, 2654, 2641, + 2647, 2647, 2648, 2648, 2650, 2650, 2652, 2652, 2653, 2654, + 2656, 2655, 2658, 2659, 2660, 2661, 2666, 2662, 2663, 2664, + 2665, 2664, 0, 2667, 2673, 2656, 2662, 2668, 2668, 2670, + 2672, 2659, 2658, 2670, 2666, 2661, 2660, 2679, 2663, 2674, + 2665, 2667, 2671, 2671, 2672, 2677, 2673, 2680, 2674, 2675, + 2675, 2678, 2678, 2681, 2677, 2679, 2682, 2683, 2684, 2685, + 2687, 2688, 2686, 2682, 2691, 2680, 2689, 2689, 2688, 2690, - 2692, 2697, 2682, 2684, 2683, 2686, 2685, 2689, 2693, 2693, - 2695, 2695, 2688, 2690, 2694, 2699, 2694, 2700, 2701, 2702, - 2697, 2703, 2704, 2705, 2699, 2706, 2703, 2704, 2709, 2710, - 2701, 2711, 2712, 2712, 2711, 2713, 2700, 2714, 2716, 2702, - 2715, 2715, 2717, 2705, 2706, 2720, 2727, 2710, 2709, 2716, - 2713, 2724, 2718, 2721, 2722, 2714, 2718, 2717, 2722, 2721, - 2720, 2723, 2723, 2726, 2724, 2728, 2727, 2729, 2729, 2731, - 2732, 2733, 2734, 2734, 2736, 2733, 2735, 2735, 2726, 2732, - 2740, 2731, 2737, 2737, 2738, 2728, 2739, 2741, 2742, 2738, - 2743, 2743, 2749, 2736, 2751, 2739, 2740, 2748, 2748, 2741, + 2690, 2681, 2683, 2692, 2693, 2698, 2684, 2685, 2686, 2687, + 2693, 2695, 2695, 2697, 2691, 2696, 2696, 2699, 2700, 2697, + 2701, 2692, 2702, 2698, 2703, 2704, 2704, 2705, 2706, 2703, + 2707, 2708, 2709, 2700, 0, 2699, 2702, 2716, 2710, 2701, + 2712, 2712, 2708, 2710, 2711, 2721, 2711, 2705, 2706, 2713, + 2707, 2713, 2709, 2714, 2714, 2718, 2716, 2719, 2720, 2724, + 2728, 2722, 2723, 2725, 2718, 2721, 2722, 2723, 2729, 2730, + 2720, 2733, 2730, 2731, 2731, 2732, 2719, 2734, 2734, 2724, + 2728, 2735, 2725, 2736, 2737, 2739, 2729, 2740, 2737, 2733, + 2732, 2741, 2735, 2740, 2743, 2741, 2742, 2742, 2736, 2745, - 2750, 2750, 2752, 2753, 2754, 2757, 2757, 2751, 2742, 2755, - 2756, 2758, 2759, 2754, 2749, 2752, 2753, 2764, 2755, 2756, - 2761, 2761, 2764, 2766, 2767, 2768, 2769, 2759, 2766, 2770, - 2768, 2758, 2771, 0, 2769, 2772, 2774, 2776, 2767, 2777, - 2778, 2771, 2776, 2772, 2777, 2779, 2779, 2781, 2770, 2780, - 2780, 2774, 2781, 2782, 2784, 2778, 2783, 2783, 2785, 2786, - 2787, 2784, 2788, 2785, 2789, 2790, 2790, 2791, 2788, 2789, - 2792, 2797, 2782, 2793, 2793, 2792, 2801, 2786, 2787, 2794, - 2794, 2801, 2791, 2800, 2797, 2798, 2798, 2799, 2800, 2800, - 2799, 2802, 2803, 2804, 2805, 2806, 2802, 2808, 2805, 2804, + 2739, 2746, 2747, 2748, 2748, 2750, 2751, 2743, 2752, 2753, + 2753, 2755, 2752, 2759, 2745, 2751, 2760, 2750, 2754, 2754, + 2757, 2746, 2747, 2756, 2756, 2757, 2758, 2761, 2760, 2759, + 2755, 2762, 2762, 2767, 2767, 2758, 2768, 2769, 2769, 2770, + 2771, 2772, 2773, 2776, 2776, 2777, 2774, 2761, 2775, 2778, + 2789, 2773, 2770, 2771, 2772, 2774, 2783, 2775, 2768, 2780, + 2780, 2783, 2785, 2786, 2778, 2777, 2787, 2785, 2788, 2789, + 2790, 2787, 2791, 2793, 2797, 2801, 2788, 2786, 2795, 2790, + 2791, 2796, 2800, 2795, 2798, 2798, 2796, 2800, 2793, 2797, + 2799, 2799, 2802, 2802, 2801, 2803, 2804, 2805, 2806, 2807, - 2806, 2807, 2810, 2809, 2813, 2814, 2803, 2811, 2812, 2813, - 2807, 2809, 2808, 2811, 2812, 2815, 2815, 2814, 2817, 2818, - 2821, 2826, 2823, 2810, 2818, 2817, 2819, 2823, 2824, 2819, - 2825, 2827, 2821, 2824, 2828, 2825, 2829, 2830, 2830, 2826, - 2831, 2832, 2835, 2828, 2827, 2829, 2832, 2836, 2837, 2831, - 2840, 2841, 2842, 2836, 2837, 2843, 2844, 2844, 2845, 2846, - 2835, 2847, 2848, 2851, 2849, 2845, 2850, 2850, 2853, 2840, - 2847, 2841, 2842, 2855, 2843, 2858, 2856, 2848, 2846, 2849, - 2856, 2859, 2851, 2853, 2857, 2857, 2860, 2859, 2861, 2862, - 2863, 2863, 2860, 2855, 2864, 2862, 2865, 2869, 2866, 2868, + 0, 2804, 2803, 2808, 2810, 2807, 2809, 2809, 2808, 2811, + 2812, 2812, 2813, 2813, 2811, 2805, 2806, 2816, 2819, 2810, + 2817, 2817, 2818, 2819, 2819, 2818, 2820, 2821, 2822, 2823, + 2816, 2820, 2821, 2824, 2825, 2823, 2826, 2824, 2827, 2825, + 2828, 2829, 2822, 2830, 2831, 2826, 2832, 2833, 2828, 2830, + 2831, 2832, 2837, 2827, 2834, 2834, 2836, 2837, 2838, 2833, + 2840, 2838, 2829, 2836, 2842, 2843, 2844, 2845, 2846, 2842, + 2843, 2844, 2840, 2847, 2848, 2849, 2849, 2850, 2854, 2851, + 2859, 2846, 2847, 2848, 2851, 2845, 2850, 2855, 2856, 2860, + 2861, 0, 2862, 2855, 2856, 2864, 2854, 2863, 2863, 2859, - 2858, 2871, 2864, 2866, 2874, 2876, 2861, 2871, 2868, 2872, - 2869, 2873, 2872, 2875, 2875, 2873, 2878, 2878, 2874, 2879, - 2876, 2865, 2880, 2880, 2881, 2881, 2883, 2883, 2884, 2885, - 2886, 2890, 2884, 2891, 2885, 2888, 2888, 2879, 2891, 2886, - 2892, 2893, 2894, 2896, 2897, 2897, 2893, 2893, 2899, 2899, - 2902, 2890, 2892, 2902, 2894, 2900, 2900, 2901, 2901, 2903, - 2904, 2906, 2906, 2896, 2907, 2909, 2910, 2910, 2911, 2911, - 2912, 2912, 2903, 2904, 2913, 2914, 2914, 2915, 2916, 2917, - 2918, 2927, 2907, 2919, 2919, 2909, 2918, 2920, 2923, 2913, - 2915, 2920, 2924, 2917, 2923, 2926, 2916, 2924, 2928, 2929, + 2865, 2870, 2864, 2867, 2868, 2869, 2869, 2871, 2873, 2860, + 2861, 2862, 2867, 2868, 2872, 2872, 2870, 2875, 2877, 2865, + 2878, 2880, 2871, 2881, 2878, 2879, 2879, 2873, 2882, 2881, + 2883, 2884, 2875, 2886, 2882, 2885, 2885, 2884, 2877, 2887, + 2888, 2886, 2890, 2891, 2893, 2888, 2880, 2896, 2883, 2894, + 2893, 2890, 2894, 2895, 2897, 2897, 2891, 2895, 2898, 2900, + 2900, 2896, 2901, 2954, 2887, 2902, 2902, 2903, 2903, 2905, + 2905, 2906, 2907, 2898, 2908, 2906, 2912, 2907, 2910, 2910, + 2901, 2913, 2914, 2908, 2915, 2916, 2913, 2918, 2954, 2915, + 2915, 2919, 2919, 2925, 2914, 2929, 2912, 2916, 2921, 2921, - 2926, 2926, 2930, 2931, 2927, 2932, 2933, 2942, 2930, 2931, - 2933, 2934, 2934, 2939, 2940, 2937, 2945, 2940, 2928, 2929, - 2937, 2939, 2943, 2944, 2944, 2943, 2946, 2947, 2948, 2949, - 2932, 2946, 2942, 2945, 2945, 2950, 2950, 2951, 2952, 2953, - 2954, 2952, 2955, 2949, 2959, 2947, 2960, 2960, 2948, 2952, - 2955, 2951, 2957, 2953, 2969, 2958, 2968, 2957, 2957, 2954, - 2958, 2958, 2966, 2959, 2961, 2961, 2962, 2962, 2963, 2963, - 2964, 2964, 2965, 2965, 2967, 2970, 2968, 2971, 2966, 2967, - 2969, 2972, 2971, 2973, 2974, 2975, 2976, 2977, 2973, 2970, - 2979, 2979, 2982, 2974, 2980, 2980, 2981, 2983, 2982, 2981, + 2922, 2922, 2923, 2923, 2926, 2924, 2925, 2918, 2924, 2928, + 2928, 2931, 2935, 2929, 2932, 2932, 2937, 2926, 2933, 2933, + 2934, 2934, 2936, 2936, 2938, 2939, 2940, 2935, 2949, 2937, + 0, 2931, 2940, 2941, 2941, 2945, 2942, 2950, 2946, 2939, + 2942, 2945, 2938, 2946, 2948, 2951, 2952, 2953, 2964, 2948, + 2948, 2949, 2952, 2953, 2955, 2956, 2956, 2950, 2955, 2959, + 2961, 2966, 2966, 2962, 2959, 2951, 2962, 2965, 2961, 2967, + 2965, 2968, 2969, 2964, 2970, 2971, 2968, 2972, 2972, 2973, + 2974, 2975, 2976, 2974, 2977, 3004, 2967, 2967, 2981, 2971, + 2969, 2974, 2977, 2973, 2970, 2975, 0, 2979, 2991, 2980, - 2972, 2985, 2985, 2986, 2996, 2975, 2976, 2977, 2987, 2987, - 2986, 2988, 2990, 2990, 2991, 2983, 2988, 2992, 2993, 2994, - 2997, 2997, 2996, 2991, 2998, 2998, 2992, 2993, 2994, 2999, - 3000, 3001, 3002, 2999, 3003, 3004, 3007, 0, 3006, 3000, - 3004, 3004, 3008, 3002, 3014, 3007, 3008, 3012, 3017, 3003, - 3001, 3006, 3012, 3013, 3013, 3016, 3016, 3018, 3014, 3019, - 3021, 3021, 3017, 3022, 3023, 3027, 3028, 3031, 3032, 3029, - 3036, 3028, 3022, 3034, 3032, 3038, 3023, 3019, 3029, 3039, - 3038, 3043, 3018, 3041, 3039, 3034, 3043, 3031, 3040, 3040, - 3027, 3036, 3041, 3044, 3045, 3046, 3046, 3048, 3048, 3046, + 3004, 2976, 2979, 2979, 2980, 2980, 2988, 2981, 2982, 2982, + 2983, 2983, 2984, 2984, 2985, 2985, 2986, 2986, 2987, 2987, + 2989, 2990, 2988, 2992, 2991, 2989, 2993, 2994, 2995, 2996, + 2997, 2993, 2998, 2995, 2999, 3001, 3001, 2992, 2996, 3002, + 3002, 2990, 3003, 3005, 3005, 3003, 2994, 3006, 3007, 0, + 2997, 3010, 2998, 3006, 2999, 3009, 3009, 3012, 3010, 3011, + 3011, 3015, 3012, 3014, 3014, 3016, 3007, 3017, 3018, 3020, + 3015, 3021, 3021, 3024, 3016, 3025, 3017, 3018, 3022, 3022, + 3023, 3026, 3024, 3027, 3023, 3028, 3030, 3020, 3031, 3032, + 3028, 3028, 3026, 3032, 3025, 3036, 3038, 3031, 3027, 3030, - 3049, 3049, 3050, 3050, 3051, 3052, 3044, 3053, 3045, 3054, - 3056, 3060, 3057, 3051, 3054, 3058, 3056, 3057, 3059, 3059, - 3058, 3061, 3062, 3063, 3064, 3052, 3053, 3066, 3063, 3060, - 3065, 3067, 3067, 3061, 3069, 3070, 3065, 3073, 3069, 3071, - 3070, 3077, 3064, 3062, 3071, 3072, 3072, 3074, 3075, 3079, - 3079, 3081, 3066, 3082, 3083, 3084, 3073, 3086, 3087, 3084, - 3085, 3077, 3074, 3075, 3081, 3089, 3082, 3083, 3088, 3085, - 3089, 3090, 3092, 3086, 3091, 3091, 3088, 3087, 3093, 3094, - 3097, 3092, 3095, 3095, 3096, 3096, 3104, 3100, 3101, 3102, - 3102, 3090, 3100, 3100, 3101, 3108, 3093, 3106, 3106, 3097, + 3036, 3037, 3037, 3040, 3040, 3041, 3042, 3043, 3045, 3045, + 3038, 3046, 3047, 3051, 3053, 3055, 3052, 3058, 3060, 3041, + 3046, 3052, 3056, 3053, 3047, 3043, 0, 3062, 3056, 3058, + 3068, 3042, 3062, 3064, 3064, 3055, 3063, 3065, 3051, 3060, + 3067, 3063, 3069, 3068, 3076, 3067, 3065, 3070, 3070, 3072, + 3072, 3070, 3073, 3073, 3074, 3074, 3069, 3075, 3077, 0, + 3078, 3080, 3084, 3081, 3076, 3078, 3075, 3080, 3081, 3082, + 3083, 3083, 3085, 3086, 3082, 3088, 3087, 3077, 3090, 3089, + 3084, 3087, 3091, 3091, 3085, 3089, 3093, 3094, 3096, 3096, + 3093, 3095, 3094, 3088, 3086, 3097, 3095, 3098, 3099, 3101, - 3109, 3110, 3111, 3112, 3116, 3094, 3110, 3104, 3112, 3115, - 3115, 3108, 3117, 3118, 3119, 3120, 3109, 3123, 3111, 3118, - 3124, 3117, 3122, 3122, 3116, 3125, 3125, 3127, 3129, 3130, - 3133, 3123, 3136, 3127, 3120, 3130, 3131, 3119, 3137, 3124, - 3139, 3131, 3134, 3134, 3135, 3135, 3140, 3136, 3129, 3138, - 3138, 3139, 3133, 3141, 3142, 3140, 3143, 3145, 3137, 3144, - 3142, 3146, 3146, 3147, 3148, 3149, 3155, 3148, 3149, 3138, - 3154, 3144, 3160, 3141, 3425, 3143, 3425, 3145, 3147, 3150, - 3150, 3156, 3154, 3157, 3157, 3158, 3155, 3156, 3158, 3159, - 3160, 3162, 3163, 3163, 3164, 3159, 3162, 3165, 3166, 3164, + 3103, 3103, 3105, 3090, 3106, 3107, 3108, 3109, 3110, 3111, + 3108, 3114, 3098, 3099, 3097, 3105, 3109, 3106, 3107, 3101, + 3113, 3112, 3115, 3115, 3110, 3113, 3116, 3117, 3111, 3112, + 3118, 3114, 3119, 3119, 3121, 3116, 3120, 3120, 3124, 3130, + 3125, 3127, 3134, 3124, 3124, 3117, 3135, 3127, 3128, 3128, + 3132, 3132, 3136, 3121, 3125, 3137, 3118, 3136, 3134, 3138, + 3130, 3142, 3135, 3143, 3138, 3141, 3141, 3144, 3145, 3146, + 3149, 3137, 3143, 3144, 3148, 3148, 3150, 3151, 3151, 3153, + 3155, 3142, 3157, 3156, 3149, 3153, 3159, 3157, 3146, 3156, + 3162, 3145, 3160, 3160, 3163, 3150, 3161, 3161, 3164, 3164, - 3167, 3168, 3168, 3170, 3166, 3171, 3172, 3173, 3174, 3174, - 3175, 3176, 3177, 3179, 3179, 3170, 3165, 3167, 3167, 3213, - 3173, 3177, 3183, 3171, 3180, 3180, 3190, 3176, 3213, 3175, - 3182, 3172, 3181, 3181, 3184, 3182, 3183, 3185, 3185, 3184, - 3186, 3186, 3187, 3187, 3188, 3188, 3189, 3191, 3196, 3192, - 3195, 3195, 3190, 3191, 3192, 3198, 3198, 3200, 3202, 3189, - 3203, 3205, 3204, 3209, 3196, 3206, 3206, 3208, 3208, 3210, - 3211, 3212, 3214, 3214, 3215, 3215, 3200, 3217, 3219, 3218, - 3202, 3204, 3203, 3205, 3211, 3218, 3220, 3221, 3210, 3209, - 3224, 3212, 3221, 3225, 3225, 3217, 3227, 3227, 3219, 3228, + 3155, 3165, 3166, 3167, 3168, 3162, 3169, 3170, 3159, 3171, + 3168, 3166, 3165, 3173, 3163, 3172, 3172, 3174, 3164, 3170, + 3174, 3175, 3180, 3167, 3175, 3169, 3176, 3176, 3173, 3171, + 3181, 3182, 3183, 3183, 3180, 3184, 3185, 3182, 3184, 3186, + 3188, 3190, 3185, 3189, 3189, 3188, 3190, 3191, 3192, 3196, + 3181, 3193, 3194, 3194, 3192, 3197, 3198, 3186, 3199, 3200, + 3200, 3196, 3202, 3201, 3217, 3203, 3191, 3208, 3193, 3193, + 3217, 3199, 3208, 3197, 3203, 3205, 3205, 3209, 3202, 3206, + 3206, 3198, 3201, 3207, 3207, 3210, 3211, 3211, 3212, 3212, + 3210, 3209, 3213, 3213, 3214, 3214, 3215, 3216, 3218, 3221, - 3229, 3230, 3232, 3231, 3228, 3220, 3238, 3230, 3233, 3233, - 3232, 3224, 3234, 3237, 3229, 3231, 3236, 3234, 3237, 3239, - 3236, 3241, 3240, 3242, 3244, 3245, 3238, 3240, 3246, 3242, - 3247, 3249, 3244, 3241, 3252, 3250, 3251, 3253, 3255, 3239, - 3256, 3257, 3253, 3255, 3245, 3260, 0, 3257, 3246, 3249, - 3247, 3250, 3258, 3251, 3251, 3252, 3261, 3258, 3262, 3261, - 3256, 3266, 3266, 3267, 3267, 3260, 3268, 3273, 3273, 3274, - 3268, 3262, 3275, 3278, 3274, 3276, 3276, 3280, 3280, 3281, - 3281, 3285, 3281, 3282, 3282, 3285, 3282, 3288, 3278, 3283, - 3283, 3275, 3284, 3284, 3287, 3284, 3288, 3289, 3289, 3287, + 3221, 3222, 3227, 3218, 3224, 3224, 3225, 3225, 3229, 3215, + 3230, 3232, 3231, 3233, 3233, 3235, 3235, 3222, 3236, 3237, + 3238, 3227, 3239, 3216, 3241, 3241, 3240, 3242, 3242, 3244, + 3229, 3231, 3230, 3232, 3238, 3240, 3246, 3245, 3237, 3247, + 3248, 3251, 3239, 3245, 3236, 3248, 3256, 3244, 3252, 3252, + 3254, 3254, 3255, 3257, 3258, 3259, 3246, 3255, 3247, 3257, + 3256, 3265, 3251, 3259, 3260, 3260, 3258, 3261, 3266, 3263, + 3264, 3267, 3261, 3263, 3268, 3264, 3267, 3269, 3272, 3271, + 3273, 3265, 3274, 3269, 3283, 3276, 3268, 3271, 3266, 3277, + 3278, 3279, 0, 3280, 3282, 3284, 3287, 3272, 3280, 3282, - 3290, 3291, 3294, 3294, 3295, 3296, 3297, 3298, 3298, 3299, - 3302, 3297, 3303, 3304, 3305, 3291, 3306, 3304, 3290, 3303, - 3308, 3309, 0, 3305, 3295, 3296, 3309, 3310, 3310, 3299, - 3311, 3306, 3312, 3312, 3315, 3302, 3313, 3313, 3308, 3311, - 3314, 3314, 3316, 3317, 3320, 3318, 3321, 3316, 3319, 3315, - 3318, 3318, 3317, 3322, 3319, 3317, 3325, 3323, 3324, 3326, - 3326, 3321, 3323, 3324, 3327, 3328, 3329, 3329, 3331, 3320, - 3327, 3328, 3330, 3330, 3322, 3325, 3332, 3335, 3335, 3337, - 3337, 3332, 3338, 3331, 3340, 3342, 3342, 3343, 3343, 3344, - 3344, 3338, 3345, 3345, 3347, 3347, 3348, 3348, 3349, 3349, + 3273, 3284, 3274, 3276, 3283, 3277, 3285, 3278, 3278, 3289, + 3288, 3285, 3279, 3288, 3293, 3293, 3287, 3294, 3294, 3295, + 3300, 3300, 3289, 3295, 3301, 3302, 3303, 3303, 3305, 3301, + 3308, 3308, 3309, 3309, 3313, 3309, 3310, 3310, 3313, 3310, + 3311, 3311, 3315, 3305, 3302, 3312, 3312, 3315, 3312, 3316, + 3317, 3317, 3318, 3319, 3322, 3322, 3323, 3324, 3316, 3325, + 3326, 3326, 3327, 3330, 3325, 3331, 3333, 3319, 3334, 3332, + 3318, 3336, 3331, 3332, 3337, 3333, 3323, 3324, 3339, 3337, + 3338, 3338, 3327, 3334, 3340, 3340, 3343, 3339, 3330, 3336, + 3341, 3341, 3342, 3342, 3344, 3345, 3348, 3346, 3349, 3344, - 3350, 3350, 3340, 3351, 3353, 3354, 3354, 3355, 3355, 3356, - 3357, 3358, 3363, 3353, 3360, 3360, 3361, 3364, 3356, 3362, - 3362, 3365, 3357, 3366, 3366, 3367, 3367, 3363, 3369, 3351, - 3364, 3358, 3373, 3365, 3375, 3361, 3370, 3370, 3374, 3376, - 3376, 3374, 3379, 3369, 3377, 3379, 3380, 3381, 3382, 3383, - 3373, 3384, 3380, 3382, 3385, 3388, 3395, 3387, 3392, 3396, - 3375, 3381, 3377, 3387, 3388, 3410, 3410, 3391, 3383, 3384, - 3385, 3391, 3405, 3392, 3409, 3406, 3415, 3405, 3406, 3396, - 3411, 3411, 3395, 3413, 3413, 3416, 3417, 3409, 3418, 3420, - 3417, 3422, 3424, 3423, 3416, 3426, 3428, 3424, 3429, 3415, + 3347, 3343, 3346, 3346, 3345, 3350, 3347, 3345, 3353, 3351, + 3352, 3354, 3354, 3349, 3351, 3352, 3355, 3356, 3357, 3357, + 3359, 3348, 3355, 3356, 3358, 3358, 3350, 3353, 3360, 3363, + 3363, 3365, 3365, 3360, 3366, 3359, 3368, 3370, 3370, 3371, + 3371, 3372, 3372, 3366, 3373, 3373, 3375, 3375, 3376, 3376, + 3377, 3377, 3378, 3378, 3368, 3379, 3381, 3382, 3382, 3383, + 3383, 3384, 3385, 3386, 3391, 3381, 3388, 3388, 3389, 3392, + 3384, 3390, 3390, 3393, 3385, 3394, 3394, 3395, 3395, 3391, + 3397, 3379, 3392, 3386, 3401, 3393, 3403, 3389, 3398, 3398, + 3402, 3404, 3404, 3402, 3407, 3397, 3405, 3407, 3408, 3409, - 3427, 3427, 3430, 3420, 3423, 3431, 3432, 3433, 3418, 3428, - 3426, 3435, 3437, 3436, 3422, 3434, 3439, 3429, 3436, 3441, - 3430, 3431, 3433, 3435, 3434, 3438, 3440, 3440, 3446, 3442, - 3438, 3432, 3447, 3437, 3442, 3439, 3448, 3448, 3449, 3441, - 3450, 3450, 3446, 3451, 3451, 3452, 3452, 3449, 3453, 3453, - 3454, 3455, 3447, 3456, 3457, 3458, 3456, 3459, 3460, 3457, - 3458, 3461, 3462, 3463, 3466, 3464, 3471, 3461, 3475, 3454, - 3464, 3455, 3472, 3460, 3477, 3463, 3462, 3465, 3465, 3467, - 3467, 3471, 3459, 3475, 3466, 3468, 3468, 3470, 3470, 3473, - 3473, 3472, 3477, 3480, 3480, 3481, 3481, 3482, 3483, 3486, + 3410, 3411, 3401, 3412, 3408, 3410, 3413, 3416, 3423, 3415, + 3420, 3424, 3403, 3409, 3405, 3415, 3416, 3438, 3438, 3419, + 3411, 3412, 3413, 3419, 3433, 3420, 3437, 3434, 3443, 3433, + 3434, 3424, 3439, 3439, 3423, 3441, 3441, 3444, 3445, 3437, + 3446, 3448, 3445, 3450, 3452, 3451, 3444, 3454, 3453, 3452, + 3453, 3443, 3455, 3455, 3456, 3448, 3451, 3457, 3459, 3458, + 3446, 3460, 3454, 3461, 3462, 3464, 3450, 3456, 3463, 3465, + 3464, 3474, 3467, 3462, 3459, 3469, 3457, 3458, 3461, 3466, + 3463, 3468, 3468, 3470, 3466, 3474, 3460, 3475, 3470, 3477, + 3465, 3467, 3476, 3476, 3482, 3469, 3478, 3478, 3477, 3479, - 3484, 3485, 3487, 3488, 3489, 3482, 3484, 3485, 3496, 3489, - 3490, 3490, 3497, 3486, 3499, 3487, 3500, 3483, 3492, 3492, - 3500, 3502, 3488, 3504, 3505, 3503, 3506, 3507, 3499, 3496, - 3503, 3508, 3497, 3509, 3510, 3510, 3508, 3505, 3509, 3506, - 3513, 3502, 3504, 3514, 3515, 3517, 3507, 3516, 3516, 3518, - 3517, 3519, 3519, 3520, 3521, 3518, 3523, 3522, 3520, 3521, - 3513, 3514, 3522, 3515, 3524, 3526, 3526, 3527, 3528, 3528, - 3524, 3531, 3527, 3530, 3532, 3523, 3533, 3530, 3534, 3535, - 3536, 3532, 3542, 3537, 3544, 3535, 3539, 3539, 3541, 3541, - 3531, 3542, 3545, 3543, 3542, 3533, 3537, 3534, 3543, 3536, + 3479, 3480, 3480, 3481, 3481, 3483, 3484, 3475, 3487, 3484, + 3485, 3486, 3488, 3482, 3489, 3485, 3486, 3490, 3491, 3492, + 3489, 3493, 3493, 3494, 3492, 3483, 3499, 3488, 3495, 3495, + 3491, 3490, 3500, 3487, 3496, 3496, 3498, 3498, 3501, 3501, + 3503, 3499, 3505, 3494, 3508, 3508, 3509, 3509, 3510, 3511, + 3514, 3500, 3512, 3513, 3515, 3503, 3510, 3516, 3512, 3513, + 3505, 3517, 3518, 3518, 3514, 3524, 3517, 3515, 3511, 3520, + 3520, 3525, 3530, 3527, 3528, 3531, 3516, 3532, 3528, 3535, + 3531, 3533, 3534, 3536, 3537, 3541, 3524, 3527, 3536, 3537, + 3542, 3525, 3530, 3543, 3533, 3534, 3532, 3546, 3535, 3538, - 3546, 3547, 3547, 3544, 3548, 3549, 3551, 3552, 3552, 3548, - 3553, 3545, 3558, 3546, 3554, 3554, 3555, 3555, 3549, 3556, - 3557, 3559, 3559, 3560, 3556, 3562, 3562, 3557, 3560, 3553, - 3563, 3558, 3551, 3561, 3564, 3561, 3565, 3563, 3566, 3567, - 3570, 3564, 3572, 3566, 3569, 3569, 3573, 3572, 3574, 3575, - 3579, 3573, 3576, 3576, 3580, 3565, 3578, 3578, 3567, 3570, - 3581, 3581, 3582, 3582, 3583, 3585, 3585, 3574, 3575, 3579, - 3587, 3583, 3593, 3580, 3586, 3586, 3589, 3587, 3592, 3594, - 0, 3589, 0, 3592, 3595, 3595, 3596, 3596, 0, 0, - 0, 3593, 0, 0, 0, 0, 0, 0, 3594, 3600, + 3538, 3544, 3544, 3546, 3545, 3541, 3547, 3547, 3542, 3545, + 3548, 3549, 3543, 3550, 3551, 3548, 3549, 3552, 3550, 3554, + 3554, 3555, 3559, 3552, 3556, 3556, 3555, 3558, 3560, 3561, + 3562, 3558, 3563, 3551, 3564, 3560, 3572, 3565, 3563, 3567, + 3567, 3559, 3569, 3569, 3573, 3570, 3571, 3574, 3561, 3562, + 3565, 3571, 3577, 3564, 3570, 3572, 3576, 3570, 3575, 3575, + 3574, 3576, 3579, 3573, 3581, 3577, 3580, 3580, 3582, 3582, + 3583, 3583, 3584, 3585, 3586, 3587, 3587, 3584, 0, 3588, + 3585, 3590, 3590, 3581, 3588, 3589, 3593, 3589, 3579, 3591, + 3592, 3595, 3598, 3586, 3594, 3602, 3591, 3592, 3600, 3594, - 3600, 3600, 3600, 3600, 3600, 3600, 3601, 3601, 3601, 3601, - 3601, 3601, 3601, 3602, 3602, 3602, 3602, 3602, 3602, 3602, - 3603, 3603, 3603, 3603, 3603, 3603, 3603, 3604, 3604, 3604, - 3604, 3604, 3604, 3604, 3605, 3605, 3605, 3605, 3605, 3605, - 3605, 3606, 3606, 3606, 3606, 3606, 3606, 3606, 3608, 3608, - 0, 3608, 3608, 3608, 3608, 3609, 3609, 0, 0, 0, - 3609, 3609, 3610, 3610, 0, 0, 3610, 0, 3610, 3611, - 0, 0, 0, 0, 0, 3611, 3612, 3612, 0, 0, - 0, 3612, 3612, 3613, 0, 0, 0, 0, 0, 3613, - 3614, 3614, 0, 3614, 3614, 3614, 3614, 3615, 0, 0, + 3597, 3597, 3601, 3600, 3603, 3593, 3607, 3601, 3604, 3604, + 3595, 3598, 3606, 3606, 3602, 3608, 3609, 3609, 3610, 3610, + 3611, 3613, 3613, 3603, 3615, 3607, 3621, 3611, 3614, 3614, + 3617, 3615, 3620, 3622, 3608, 3617, 0, 3620, 3623, 3623, + 3624, 3624, 0, 0, 0, 3621, 0, 0, 0, 0, + 0, 0, 3622, 3628, 3628, 3628, 3628, 3628, 3628, 3628, + 3629, 3629, 3629, 3629, 3629, 3629, 3629, 3630, 3630, 3630, + 3630, 3630, 3630, 3630, 3631, 3631, 3631, 3631, 3631, 3631, + 3631, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3633, 3633, + 3633, 3633, 3633, 3633, 3633, 3634, 3634, 3634, 3634, 3634, - 0, 0, 0, 3615, 3616, 3616, 0, 0, 0, 3616, - 3616, 3617, 3617, 0, 3617, 3617, 3617, 3617, 3599, 3599, - 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, - 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, - 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, - 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599, 3599 + 3634, 3634, 3636, 3636, 0, 3636, 3636, 3636, 3636, 3637, + 3637, 0, 0, 0, 3637, 3637, 3638, 3638, 0, 0, + 3638, 0, 3638, 3639, 0, 0, 0, 0, 0, 3639, + 3640, 3640, 0, 0, 0, 3640, 3640, 3641, 0, 0, + 0, 0, 0, 3641, 3642, 3642, 0, 3642, 3642, 3642, + 3642, 3643, 0, 0, 0, 0, 0, 3643, 3644, 3644, + 0, 0, 0, 3644, 3644, 3645, 3645, 0, 3645, 3645, + 3645, 3645, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, + 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, + 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, + + 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, + 3627, 3627, 3627 } ; static yy_state_type yy_last_accepting_state; @@ -3370,7 +3393,7 @@ static void config_end_include(void) } #endif -#line 3371 "" +#line 3394 "" #define YY_NO_INPUT 1 #line 191 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -3379,9 +3402,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 3380 "" +#line 3403 "" -#line 3382 "" +#line 3405 "" #define INITIAL 0 #define quotedstring 1 @@ -3605,7 +3628,7 @@ YY_DECL { #line 211 "./util/configlexer.lex" -#line 3606 "" +#line 3629 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3638,13 +3661,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 >= 3600 ) + if ( yy_current_state >= 3628 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 7019 ); + while ( yy_base[yy_current_state] != 7073 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4434,959 +4457,984 @@ YY_RULE_SETUP case 153: YY_RULE_SETUP #line 367 "./util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(2, VAR_INTERFACE_ACTION) } YY_BREAK case 154: YY_RULE_SETUP #line 368 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 155: YY_RULE_SETUP #line 369 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 156: YY_RULE_SETUP #line 370 "./util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 157: YY_RULE_SETUP #line 371 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 158: YY_RULE_SETUP #line 372 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 159: YY_RULE_SETUP #line 373 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 160: YY_RULE_SETUP #line 374 "./util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 161: YY_RULE_SETUP #line 375 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 162: YY_RULE_SETUP #line 376 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 163: YY_RULE_SETUP #line 377 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 164: YY_RULE_SETUP #line 378 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 165: YY_RULE_SETUP #line 379 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 166: YY_RULE_SETUP #line 380 "./util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_HTTP_USER_AGENT) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 167: YY_RULE_SETUP #line 381 "./util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_HTTP_USER_AGENT) } YY_BREAK case 168: YY_RULE_SETUP #line 382 "./util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 169: YY_RULE_SETUP #line 383 "./util/configlexer.lex" -{ YDVAR(1, VAR_HTTP_USER_AGENT) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 170: YY_RULE_SETUP #line 384 "./util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_HTTP_USER_AGENT) } YY_BREAK case 171: YY_RULE_SETUP #line 385 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 172: YY_RULE_SETUP #line 386 "./util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 173: YY_RULE_SETUP #line 387 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 174: YY_RULE_SETUP #line 388 "./util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 175: YY_RULE_SETUP #line 389 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 176: YY_RULE_SETUP #line 390 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 177: YY_RULE_SETUP #line 391 "./util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 178: YY_RULE_SETUP #line 392 "./util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 179: YY_RULE_SETUP #line 393 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 180: YY_RULE_SETUP #line 394 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 181: YY_RULE_SETUP #line 395 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 182: YY_RULE_SETUP #line 396 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_MAX_RESTART) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 183: YY_RULE_SETUP #line 397 "./util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_MAX_RESTART) } YY_BREAK case 184: YY_RULE_SETUP #line 398 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 185: YY_RULE_SETUP #line 399 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 186: YY_RULE_SETUP #line 400 "./util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 187: YY_RULE_SETUP #line 401 "./util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 188: YY_RULE_SETUP #line 402 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 189: YY_RULE_SETUP #line 403 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 190: YY_RULE_SETUP #line 404 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 191: YY_RULE_SETUP #line 405 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 192: YY_RULE_SETUP #line 406 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } +{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } YY_BREAK case 193: YY_RULE_SETUP #line 407 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDE_SERVE_EXPIRED) } +{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } YY_BREAK case 194: YY_RULE_SETUP #line 408 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } +{ YDVAR(1, VAR_EDE_SERVE_EXPIRED) } YY_BREAK case 195: YY_RULE_SETUP #line 409 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } YY_BREAK case 196: YY_RULE_SETUP #line 410 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 197: YY_RULE_SETUP #line 411 "./util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 198: YY_RULE_SETUP #line 412 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 199: YY_RULE_SETUP #line 413 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 200: YY_RULE_SETUP #line 414 "./util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 201: YY_RULE_SETUP #line 415 "./util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 202: YY_RULE_SETUP -#line 417 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } +#line 416 "./util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 203: YY_RULE_SETUP #line 418 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_CHECK) } +{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } YY_BREAK case 204: YY_RULE_SETUP #line 419 "./util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } +{ YDVAR(1, VAR_ZONEMD_CHECK) } YY_BREAK case 205: YY_RULE_SETUP #line 420 "./util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } YY_BREAK case 206: YY_RULE_SETUP #line 421 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 207: YY_RULE_SETUP #line 422 "./util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 208: YY_RULE_SETUP #line 423 "./util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 209: YY_RULE_SETUP #line 424 "./util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 210: YY_RULE_SETUP #line 425 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 211: YY_RULE_SETUP #line 426 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 212: YY_RULE_SETUP #line 427 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 213: YY_RULE_SETUP #line 428 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 214: YY_RULE_SETUP #line 429 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 215: YY_RULE_SETUP #line 430 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 216: YY_RULE_SETUP #line 431 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 217: YY_RULE_SETUP #line 432 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 218: YY_RULE_SETUP #line 433 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 219: YY_RULE_SETUP #line 434 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 220: YY_RULE_SETUP #line 435 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 221: YY_RULE_SETUP #line 436 "./util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 222: YY_RULE_SETUP #line 437 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 223: YY_RULE_SETUP #line 438 "./util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 224: YY_RULE_SETUP #line 439 "./util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 225: YY_RULE_SETUP #line 440 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 226: YY_RULE_SETUP #line 441 "./util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 227: YY_RULE_SETUP #line 442 "./util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 228: YY_RULE_SETUP #line 443 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 229: YY_RULE_SETUP #line 444 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 230: YY_RULE_SETUP #line 445 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 231: YY_RULE_SETUP #line 446 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "./util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "./util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "./util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "./util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "./util/configlexer.lex" -{ YDVAR(1, VAR_DYNLIB_FILE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 239: YY_RULE_SETUP #line 454 "./util/configlexer.lex" -{ YDVAR(0, VAR_DYNLIB) } +{ YDVAR(1, VAR_DYNLIB_FILE) } YY_BREAK case 240: YY_RULE_SETUP #line 455 "./util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_DYNLIB) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "./util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 242: YY_RULE_SETUP #line 457 "./util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "./util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "./util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 246: YY_RULE_SETUP #line 461 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 247: YY_RULE_SETUP #line 462 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 248: YY_RULE_SETUP #line 463 "./util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 249: YY_RULE_SETUP #line 464 "./util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 250: YY_RULE_SETUP #line 465 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 251: YY_RULE_SETUP #line 466 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 252: YY_RULE_SETUP #line 467 "./util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 253: YY_RULE_SETUP #line 468 "./util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 254: YY_RULE_SETUP #line 469 "./util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 255: YY_RULE_SETUP #line 470 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(2, VAR_INTERFACE_TAG) } YY_BREAK case 256: YY_RULE_SETUP #line 471 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(3, VAR_INTERFACE_TAG_ACTION) } YY_BREAK case 257: YY_RULE_SETUP #line 472 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } +{ YDVAR(3, VAR_INTERFACE_TAG_DATA) } YY_BREAK case 258: YY_RULE_SETUP #line 473 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(2, VAR_INTERFACE_VIEW) } YY_BREAK case 259: YY_RULE_SETUP #line 474 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 260: YY_RULE_SETUP #line 475 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 261: YY_RULE_SETUP #line 476 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 262: YY_RULE_SETUP #line 477 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } YY_BREAK case 263: YY_RULE_SETUP #line 478 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 264: YY_RULE_SETUP -#line 480 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } +#line 479 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 265: YY_RULE_SETUP -#line 482 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 480 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 266: YY_RULE_SETUP -#line 483 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +#line 481 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 267: YY_RULE_SETUP -#line 484 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +#line 482 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 268: YY_RULE_SETUP -#line 485 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +#line 483 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 269: YY_RULE_SETUP -#line 486 "./util/configlexer.lex" +#line 485 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 270: YY_RULE_SETUP -#line 488 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } +#line 487 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 271: YY_RULE_SETUP -#line 490 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } +#line 488 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 272: YY_RULE_SETUP -#line 492 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } +#line 489 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 273: YY_RULE_SETUP -#line 494 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } +#line 490 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 274: YY_RULE_SETUP -#line 496 "./util/configlexer.lex" +#line 491 "./util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 275: YY_RULE_SETUP -#line 498 "./util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 493 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 276: YY_RULE_SETUP -#line 499 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 495 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 277: YY_RULE_SETUP -#line 500 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +#line 497 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 278: YY_RULE_SETUP -#line 501 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +#line 499 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 279: YY_RULE_SETUP -#line 502 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +#line 501 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 280: YY_RULE_SETUP #line 503 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 281: YY_RULE_SETUP #line 504 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 282: YY_RULE_SETUP #line 505 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 283: YY_RULE_SETUP #line 506 "./util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 284: YY_RULE_SETUP #line 507 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 285: YY_RULE_SETUP #line 508 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 286: YY_RULE_SETUP #line 509 "./util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_BACKOFF) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 287: YY_RULE_SETUP #line 510 "./util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_BACKOFF) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 288: YY_RULE_SETUP #line 511 "./util/configlexer.lex" -{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 289: YY_RULE_SETUP #line 512 "./util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 290: YY_RULE_SETUP #line 513 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 291: YY_RULE_SETUP #line 514 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_IP_RATELIMIT_BACKOFF) } YY_BREAK case 292: YY_RULE_SETUP #line 515 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_RATELIMIT_BACKOFF) } YY_BREAK case 293: YY_RULE_SETUP #line 516 "./util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) } YY_BREAK case 294: YY_RULE_SETUP #line 517 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 295: YY_RULE_SETUP #line 518 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 296: YY_RULE_SETUP #line 519 "./util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 297: YY_RULE_SETUP #line 520 "./util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 298: YY_RULE_SETUP #line 521 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 299: YY_RULE_SETUP #line 522 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 300: YY_RULE_SETUP #line 523 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 301: YY_RULE_SETUP #line 524 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 302: YY_RULE_SETUP #line 525 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 303: YY_RULE_SETUP #line 526 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 304: YY_RULE_SETUP #line 527 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 305: YY_RULE_SETUP -#line 529 "./util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +#line 528 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 306: YY_RULE_SETUP -#line 531 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 529 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 307: YY_RULE_SETUP -#line 532 "./util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +#line 530 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 308: YY_RULE_SETUP -#line 533 "./util/configlexer.lex" -{ YDVAR(1, VAR_PAD_RESPONSES) } +#line 531 "./util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 309: YY_RULE_SETUP -#line 534 "./util/configlexer.lex" -{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } +#line 532 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 310: YY_RULE_SETUP -#line 535 "./util/configlexer.lex" -{ YDVAR(1, VAR_PAD_QUERIES) } +#line 534 "./util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 311: YY_RULE_SETUP #line 536 "./util/configlexer.lex" -{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 312: YY_RULE_SETUP #line 537 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 313: YY_RULE_SETUP #line 538 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_PAD_RESPONSES) } YY_BREAK case 314: YY_RULE_SETUP #line 539 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } YY_BREAK case 315: YY_RULE_SETUP #line 540 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_PAD_QUERIES) } YY_BREAK case 316: YY_RULE_SETUP #line 541 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } YY_BREAK case 317: YY_RULE_SETUP #line 542 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 318: YY_RULE_SETUP #line 543 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 319: YY_RULE_SETUP #line 544 "./util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 320: YY_RULE_SETUP #line 545 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 321: YY_RULE_SETUP #line 546 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 322: YY_RULE_SETUP #line 547 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 323: YY_RULE_SETUP #line 548 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 324: YY_RULE_SETUP #line 549 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 325: YY_RULE_SETUP #line 550 "./util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 326: YY_RULE_SETUP #line 551 "./util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 327: YY_RULE_SETUP #line 552 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 328: YY_RULE_SETUP #line 553 "./util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 329: YY_RULE_SETUP #line 554 "./util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 330: YY_RULE_SETUP #line 555 "./util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 331: YY_RULE_SETUP #line 556 "./util/configlexer.lex" -{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 332: YY_RULE_SETUP #line 557 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 333: YY_RULE_SETUP #line 558 "./util/configlexer.lex" -{ YDVAR(1, VAR_NSID ) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 334: YY_RULE_SETUP #line 559 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDE ) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 335: -/* rule 335 can match eol */ YY_RULE_SETUP #line 560 "./util/configlexer.lex" +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } + YY_BREAK +case 336: +YY_RULE_SETUP +#line 561 "./util/configlexer.lex" +{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } + YY_BREAK +case 337: +YY_RULE_SETUP +#line 562 "./util/configlexer.lex" +{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } + YY_BREAK +case 338: +YY_RULE_SETUP +#line 563 "./util/configlexer.lex" +{ YDVAR(1, VAR_NSID ) } + YY_BREAK +case 339: +YY_RULE_SETUP +#line 564 "./util/configlexer.lex" +{ YDVAR(1, VAR_EDE ) } + YY_BREAK +case 340: +/* rule 340 can match eol */ +YY_RULE_SETUP +#line 565 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 336: +case 341: YY_RULE_SETUP -#line 563 "./util/configlexer.lex" +#line 568 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 564 "./util/configlexer.lex" +#line 569 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 337: +case 342: YY_RULE_SETUP -#line 569 "./util/configlexer.lex" +#line 574 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 338: -/* rule 338 can match eol */ +case 343: +/* rule 343 can match eol */ YY_RULE_SETUP -#line 570 "./util/configlexer.lex" +#line 575 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 339: +case 344: YY_RULE_SETUP -#line 572 "./util/configlexer.lex" +#line 577 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5399,34 +5447,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 340: +case 345: YY_RULE_SETUP -#line 584 "./util/configlexer.lex" +#line 589 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 585 "./util/configlexer.lex" +#line 590 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 341: +case 346: YY_RULE_SETUP -#line 590 "./util/configlexer.lex" +#line 595 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 342: -/* rule 342 can match eol */ +case 347: +/* rule 347 can match eol */ YY_RULE_SETUP -#line 591 "./util/configlexer.lex" +#line 596 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 343: +case 348: YY_RULE_SETUP -#line 593 "./util/configlexer.lex" +#line 598 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5439,38 +5487,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 344: +case 349: YY_RULE_SETUP -#line 605 "./util/configlexer.lex" +#line 610 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 607 "./util/configlexer.lex" +#line 612 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 345: +case 350: YY_RULE_SETUP -#line 611 "./util/configlexer.lex" +#line 616 "./util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK -case 346: -/* rule 346 can match eol */ +case 351: +/* rule 351 can match eol */ YY_RULE_SETUP -#line 612 "./util/configlexer.lex" +#line 617 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK -case 347: +case 352: YY_RULE_SETUP -#line 613 "./util/configlexer.lex" +#line 618 "./util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK -case 348: +case 353: YY_RULE_SETUP -#line 614 "./util/configlexer.lex" +#line 619 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 0); @@ -5478,27 +5526,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 619 "./util/configlexer.lex" +#line 624 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 349: +case 354: YY_RULE_SETUP -#line 623 "./util/configlexer.lex" +#line 628 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 350: -/* rule 350 can match eol */ +case 355: +/* rule 355 can match eol */ YY_RULE_SETUP -#line 624 "./util/configlexer.lex" +#line 629 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 351: +case 356: YY_RULE_SETUP -#line 626 "./util/configlexer.lex" +#line 631 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -5508,7 +5556,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 632 "./util/configlexer.lex" +#line 637 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -5523,39 +5571,39 @@ case YY_STATE_EOF(val): } YY_BREAK /* include-toplevel: directive */ -case 352: +case 357: YY_RULE_SETUP -#line 646 "./util/configlexer.lex" +#line 651 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel); } YY_BREAK case YY_STATE_EOF(include_toplevel): -#line 649 "./util/configlexer.lex" +#line 654 "./util/configlexer.lex" { yyerror("EOF inside include_toplevel directive"); BEGIN(inc_prev); } YY_BREAK -case 353: +case 358: YY_RULE_SETUP -#line 653 "./util/configlexer.lex" +#line 658 "./util/configlexer.lex" { LEXOUT(("ITSP ")); /* ignore */ } YY_BREAK -case 354: -/* rule 354 can match eol */ +case 359: +/* rule 359 can match eol */ YY_RULE_SETUP -#line 654 "./util/configlexer.lex" +#line 659 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK -case 355: +case 360: YY_RULE_SETUP -#line 655 "./util/configlexer.lex" +#line 660 "./util/configlexer.lex" { LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } YY_BREAK -case 356: +case 361: YY_RULE_SETUP -#line 656 "./util/configlexer.lex" +#line 661 "./util/configlexer.lex" { LEXOUT(("ITunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 1); @@ -5564,29 +5612,29 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_toplevel_quoted): -#line 662 "./util/configlexer.lex" +#line 667 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 357: +case 362: YY_RULE_SETUP -#line 666 "./util/configlexer.lex" +#line 671 "./util/configlexer.lex" { LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } YY_BREAK -case 358: -/* rule 358 can match eol */ +case 363: +/* rule 363 can match eol */ YY_RULE_SETUP -#line 667 "./util/configlexer.lex" +#line 672 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 359: +case 364: YY_RULE_SETUP -#line 671 "./util/configlexer.lex" +#line 676 "./util/configlexer.lex" { LEXOUT(("ITQE ")); yytext[yyleng - 1] = '\0'; @@ -5595,33 +5643,33 @@ YY_RULE_SETUP return (VAR_FORCE_TOPLEVEL); } YY_BREAK -case 360: +case 365: YY_RULE_SETUP -#line 679 "./util/configlexer.lex" +#line 684 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 361: +case 366: YY_RULE_SETUP -#line 683 "./util/configlexer.lex" +#line 688 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 362: +case 367: YY_RULE_SETUP -#line 687 "./util/configlexer.lex" +#line 692 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 363: +case 368: YY_RULE_SETUP -#line 691 "./util/configlexer.lex" +#line 696 "./util/configlexer.lex" ECHO; YY_BREAK -#line 5622 "" +#line 5670 "" case YY_END_OF_BUFFER: { @@ -5916,7 +5964,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3600 ) + if ( yy_current_state >= 3628 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5944,11 +5992,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 >= 3600 ) + if ( yy_current_state >= 3628 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3599); + yy_is_jam = (yy_current_state == 3627); return yy_is_jam ? 0 : yy_current_state; } @@ -6587,6 +6635,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 691 "./util/configlexer.lex" +#line 696 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index a46a74fb6..fc9aa7266 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -364,6 +364,7 @@ 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) } +interface-action{COLON} { YDVAR(2, VAR_INTERFACE_ACTION) } send-client-subnet{COLON} { YDVAR(1, VAR_SEND_CLIENT_SUBNET) } client-subnet-zone{COLON} { YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } client-subnet-always-forward{COLON} { YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } @@ -466,6 +467,10 @@ access-control-tag{COLON} { YDVAR(2, VAR_ACCESS_CONTROL_TAG) } access-control-tag-action{COLON} { YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } access-control-tag-data{COLON} { YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } access-control-view{COLON} { YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +interface-tag{COLON} { YDVAR(2, VAR_INTERFACE_TAG) } +interface-tag-action{COLON} { YDVAR(3, VAR_INTERFACE_TAG_ACTION) } +interface-tag-data{COLON} { YDVAR(3, VAR_INTERFACE_TAG_DATA) } +interface-view{COLON} { YDVAR(2, VAR_INTERFACE_VIEW) } local-zone-override{COLON} { YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } dnstap{COLON} { YDVAR(0, VAR_DNSTAP) } dnstap-enable{COLON} { YDVAR(1, VAR_DNSTAP_ENABLE) } diff --git a/util/configparser.c b/util/configparser.c index 802d9a651..7f3cd99e1 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -1,4 +1,4 @@ -/* A Bison parser, made by GNU Bison 3.7.6. */ +/* A Bison parser, made by GNU Bison 3.8.2. */ /* Bison implementation for Yacc-like parsers in C @@ -46,10 +46,10 @@ USER NAME SPACE" below. */ /* Identify Bison output, and Bison version. */ -#define YYBISON 30706 +#define YYBISON 30802 /* Bison version string. */ -#define YYBISON_VERSION "3.7.6" +#define YYBISON_VERSION "3.8.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -85,6 +85,7 @@ int ub_c_lex(void); void ub_c_error(const char *message); static void validate_respip_action(const char* action); +static void validate_acl_action(const char* action); /* these need to be global, otherwise they cannot be used inside yacc */ extern struct config_parser_state* cfg_parser; @@ -96,7 +97,7 @@ extern struct config_parser_state* cfg_parser; #endif -#line 100 "util/configparser.c" +#line 101 "util/configparser.c" # ifndef YY_CAST # ifdef __cplusplus @@ -452,359 +453,369 @@ enum yysymbol_kind_t YYSYMBOL_VAR_RPZ_SIGNAL_NXDOMAIN_RA = 325, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */ YYSYMBOL_VAR_INTERFACE_AUTOMATIC_PORTS = 326, /* VAR_INTERFACE_AUTOMATIC_PORTS */ YYSYMBOL_VAR_EDE = 327, /* VAR_EDE */ - YYSYMBOL_YYACCEPT = 328, /* $accept */ - YYSYMBOL_toplevelvars = 329, /* toplevelvars */ - YYSYMBOL_toplevelvar = 330, /* toplevelvar */ - YYSYMBOL_force_toplevel = 331, /* force_toplevel */ - YYSYMBOL_serverstart = 332, /* serverstart */ - YYSYMBOL_contents_server = 333, /* contents_server */ - YYSYMBOL_content_server = 334, /* content_server */ - YYSYMBOL_stubstart = 335, /* stubstart */ - YYSYMBOL_contents_stub = 336, /* contents_stub */ - YYSYMBOL_content_stub = 337, /* content_stub */ - YYSYMBOL_forwardstart = 338, /* forwardstart */ - YYSYMBOL_contents_forward = 339, /* contents_forward */ - YYSYMBOL_content_forward = 340, /* content_forward */ - YYSYMBOL_viewstart = 341, /* viewstart */ - YYSYMBOL_contents_view = 342, /* contents_view */ - YYSYMBOL_content_view = 343, /* content_view */ - YYSYMBOL_authstart = 344, /* authstart */ - YYSYMBOL_contents_auth = 345, /* contents_auth */ - YYSYMBOL_content_auth = 346, /* content_auth */ - YYSYMBOL_rpz_tag = 347, /* rpz_tag */ - YYSYMBOL_rpz_action_override = 348, /* rpz_action_override */ - YYSYMBOL_rpz_cname_override = 349, /* rpz_cname_override */ - YYSYMBOL_rpz_log = 350, /* rpz_log */ - YYSYMBOL_rpz_log_name = 351, /* rpz_log_name */ - YYSYMBOL_rpz_signal_nxdomain_ra = 352, /* rpz_signal_nxdomain_ra */ - YYSYMBOL_rpzstart = 353, /* rpzstart */ - YYSYMBOL_contents_rpz = 354, /* contents_rpz */ - YYSYMBOL_content_rpz = 355, /* content_rpz */ - YYSYMBOL_server_num_threads = 356, /* server_num_threads */ - YYSYMBOL_server_verbosity = 357, /* server_verbosity */ - YYSYMBOL_server_statistics_interval = 358, /* server_statistics_interval */ - YYSYMBOL_server_statistics_cumulative = 359, /* server_statistics_cumulative */ - YYSYMBOL_server_extended_statistics = 360, /* server_extended_statistics */ - YYSYMBOL_server_shm_enable = 361, /* server_shm_enable */ - YYSYMBOL_server_shm_key = 362, /* server_shm_key */ - YYSYMBOL_server_port = 363, /* server_port */ - YYSYMBOL_server_send_client_subnet = 364, /* server_send_client_subnet */ - YYSYMBOL_server_client_subnet_zone = 365, /* server_client_subnet_zone */ - YYSYMBOL_server_client_subnet_always_forward = 366, /* server_client_subnet_always_forward */ - YYSYMBOL_server_client_subnet_opcode = 367, /* server_client_subnet_opcode */ - YYSYMBOL_server_max_client_subnet_ipv4 = 368, /* server_max_client_subnet_ipv4 */ - YYSYMBOL_server_max_client_subnet_ipv6 = 369, /* server_max_client_subnet_ipv6 */ - YYSYMBOL_server_min_client_subnet_ipv4 = 370, /* server_min_client_subnet_ipv4 */ - YYSYMBOL_server_min_client_subnet_ipv6 = 371, /* server_min_client_subnet_ipv6 */ - YYSYMBOL_server_max_ecs_tree_size_ipv4 = 372, /* server_max_ecs_tree_size_ipv4 */ - YYSYMBOL_server_max_ecs_tree_size_ipv6 = 373, /* server_max_ecs_tree_size_ipv6 */ - YYSYMBOL_server_interface = 374, /* server_interface */ - YYSYMBOL_server_outgoing_interface = 375, /* server_outgoing_interface */ - YYSYMBOL_server_outgoing_range = 376, /* server_outgoing_range */ - YYSYMBOL_server_outgoing_port_permit = 377, /* server_outgoing_port_permit */ - YYSYMBOL_server_outgoing_port_avoid = 378, /* server_outgoing_port_avoid */ - YYSYMBOL_server_outgoing_num_tcp = 379, /* server_outgoing_num_tcp */ - YYSYMBOL_server_incoming_num_tcp = 380, /* server_incoming_num_tcp */ - YYSYMBOL_server_interface_automatic = 381, /* server_interface_automatic */ - YYSYMBOL_server_interface_automatic_ports = 382, /* server_interface_automatic_ports */ - YYSYMBOL_server_do_ip4 = 383, /* server_do_ip4 */ - YYSYMBOL_server_do_ip6 = 384, /* server_do_ip6 */ - YYSYMBOL_server_do_udp = 385, /* server_do_udp */ - YYSYMBOL_server_do_tcp = 386, /* server_do_tcp */ - YYSYMBOL_server_prefer_ip4 = 387, /* server_prefer_ip4 */ - YYSYMBOL_server_prefer_ip6 = 388, /* server_prefer_ip6 */ - YYSYMBOL_server_tcp_mss = 389, /* server_tcp_mss */ - YYSYMBOL_server_outgoing_tcp_mss = 390, /* server_outgoing_tcp_mss */ - YYSYMBOL_server_tcp_idle_timeout = 391, /* server_tcp_idle_timeout */ - YYSYMBOL_server_max_reuse_tcp_queries = 392, /* server_max_reuse_tcp_queries */ - YYSYMBOL_server_tcp_reuse_timeout = 393, /* server_tcp_reuse_timeout */ - YYSYMBOL_server_tcp_auth_query_timeout = 394, /* server_tcp_auth_query_timeout */ - YYSYMBOL_server_tcp_keepalive = 395, /* server_tcp_keepalive */ - YYSYMBOL_server_tcp_keepalive_timeout = 396, /* server_tcp_keepalive_timeout */ - YYSYMBOL_server_tcp_upstream = 397, /* server_tcp_upstream */ - YYSYMBOL_server_udp_upstream_without_downstream = 398, /* server_udp_upstream_without_downstream */ - YYSYMBOL_server_ssl_upstream = 399, /* server_ssl_upstream */ - YYSYMBOL_server_ssl_service_key = 400, /* server_ssl_service_key */ - YYSYMBOL_server_ssl_service_pem = 401, /* server_ssl_service_pem */ - YYSYMBOL_server_ssl_port = 402, /* server_ssl_port */ - YYSYMBOL_server_tls_cert_bundle = 403, /* server_tls_cert_bundle */ - YYSYMBOL_server_tls_win_cert = 404, /* server_tls_win_cert */ - YYSYMBOL_server_tls_additional_port = 405, /* server_tls_additional_port */ - YYSYMBOL_server_tls_ciphers = 406, /* server_tls_ciphers */ - YYSYMBOL_server_tls_ciphersuites = 407, /* server_tls_ciphersuites */ - YYSYMBOL_server_tls_session_ticket_keys = 408, /* server_tls_session_ticket_keys */ - YYSYMBOL_server_tls_use_sni = 409, /* server_tls_use_sni */ - YYSYMBOL_server_https_port = 410, /* server_https_port */ - YYSYMBOL_server_http_endpoint = 411, /* server_http_endpoint */ - YYSYMBOL_server_http_max_streams = 412, /* server_http_max_streams */ - YYSYMBOL_server_http_query_buffer_size = 413, /* server_http_query_buffer_size */ - YYSYMBOL_server_http_response_buffer_size = 414, /* server_http_response_buffer_size */ - YYSYMBOL_server_http_nodelay = 415, /* server_http_nodelay */ - YYSYMBOL_server_http_notls_downstream = 416, /* server_http_notls_downstream */ - YYSYMBOL_server_use_systemd = 417, /* server_use_systemd */ - YYSYMBOL_server_do_daemonize = 418, /* server_do_daemonize */ - YYSYMBOL_server_use_syslog = 419, /* server_use_syslog */ - YYSYMBOL_server_log_time_ascii = 420, /* server_log_time_ascii */ - YYSYMBOL_server_log_queries = 421, /* server_log_queries */ - YYSYMBOL_server_log_replies = 422, /* server_log_replies */ - YYSYMBOL_server_log_tag_queryreply = 423, /* server_log_tag_queryreply */ - YYSYMBOL_server_log_servfail = 424, /* server_log_servfail */ - YYSYMBOL_server_log_local_actions = 425, /* server_log_local_actions */ - YYSYMBOL_server_chroot = 426, /* server_chroot */ - YYSYMBOL_server_username = 427, /* server_username */ - YYSYMBOL_server_directory = 428, /* server_directory */ - YYSYMBOL_server_logfile = 429, /* server_logfile */ - YYSYMBOL_server_pidfile = 430, /* server_pidfile */ - YYSYMBOL_server_root_hints = 431, /* server_root_hints */ - YYSYMBOL_server_dlv_anchor_file = 432, /* server_dlv_anchor_file */ - YYSYMBOL_server_dlv_anchor = 433, /* server_dlv_anchor */ - YYSYMBOL_server_auto_trust_anchor_file = 434, /* server_auto_trust_anchor_file */ - YYSYMBOL_server_trust_anchor_file = 435, /* server_trust_anchor_file */ - YYSYMBOL_server_trusted_keys_file = 436, /* server_trusted_keys_file */ - YYSYMBOL_server_trust_anchor = 437, /* server_trust_anchor */ - YYSYMBOL_server_trust_anchor_signaling = 438, /* server_trust_anchor_signaling */ - YYSYMBOL_server_root_key_sentinel = 439, /* server_root_key_sentinel */ - YYSYMBOL_server_domain_insecure = 440, /* server_domain_insecure */ - YYSYMBOL_server_hide_identity = 441, /* server_hide_identity */ - YYSYMBOL_server_hide_version = 442, /* server_hide_version */ - YYSYMBOL_server_hide_trustanchor = 443, /* server_hide_trustanchor */ - YYSYMBOL_server_hide_http_user_agent = 444, /* server_hide_http_user_agent */ - YYSYMBOL_server_identity = 445, /* server_identity */ - YYSYMBOL_server_version = 446, /* server_version */ - YYSYMBOL_server_http_user_agent = 447, /* server_http_user_agent */ - YYSYMBOL_server_nsid = 448, /* server_nsid */ - YYSYMBOL_server_so_rcvbuf = 449, /* server_so_rcvbuf */ - YYSYMBOL_server_so_sndbuf = 450, /* server_so_sndbuf */ - YYSYMBOL_server_so_reuseport = 451, /* server_so_reuseport */ - YYSYMBOL_server_ip_transparent = 452, /* server_ip_transparent */ - YYSYMBOL_server_ip_freebind = 453, /* server_ip_freebind */ - YYSYMBOL_server_ip_dscp = 454, /* server_ip_dscp */ - YYSYMBOL_server_stream_wait_size = 455, /* server_stream_wait_size */ - YYSYMBOL_server_edns_buffer_size = 456, /* server_edns_buffer_size */ - YYSYMBOL_server_msg_buffer_size = 457, /* server_msg_buffer_size */ - YYSYMBOL_server_msg_cache_size = 458, /* server_msg_cache_size */ - YYSYMBOL_server_msg_cache_slabs = 459, /* server_msg_cache_slabs */ - YYSYMBOL_server_num_queries_per_thread = 460, /* server_num_queries_per_thread */ - YYSYMBOL_server_jostle_timeout = 461, /* server_jostle_timeout */ - YYSYMBOL_server_delay_close = 462, /* server_delay_close */ - YYSYMBOL_server_udp_connect = 463, /* server_udp_connect */ - YYSYMBOL_server_unblock_lan_zones = 464, /* server_unblock_lan_zones */ - YYSYMBOL_server_insecure_lan_zones = 465, /* server_insecure_lan_zones */ - YYSYMBOL_server_rrset_cache_size = 466, /* server_rrset_cache_size */ - YYSYMBOL_server_rrset_cache_slabs = 467, /* server_rrset_cache_slabs */ - YYSYMBOL_server_infra_host_ttl = 468, /* server_infra_host_ttl */ - YYSYMBOL_server_infra_lame_ttl = 469, /* server_infra_lame_ttl */ - YYSYMBOL_server_infra_cache_numhosts = 470, /* server_infra_cache_numhosts */ - YYSYMBOL_server_infra_cache_lame_size = 471, /* server_infra_cache_lame_size */ - YYSYMBOL_server_infra_cache_slabs = 472, /* server_infra_cache_slabs */ - YYSYMBOL_server_infra_cache_min_rtt = 473, /* server_infra_cache_min_rtt */ - YYSYMBOL_server_infra_cache_max_rtt = 474, /* server_infra_cache_max_rtt */ - YYSYMBOL_server_infra_keep_probing = 475, /* server_infra_keep_probing */ - YYSYMBOL_server_target_fetch_policy = 476, /* server_target_fetch_policy */ - YYSYMBOL_server_harden_short_bufsize = 477, /* server_harden_short_bufsize */ - YYSYMBOL_server_harden_large_queries = 478, /* server_harden_large_queries */ - YYSYMBOL_server_harden_glue = 479, /* server_harden_glue */ - YYSYMBOL_server_harden_dnssec_stripped = 480, /* server_harden_dnssec_stripped */ - YYSYMBOL_server_harden_below_nxdomain = 481, /* server_harden_below_nxdomain */ - YYSYMBOL_server_harden_referral_path = 482, /* server_harden_referral_path */ - YYSYMBOL_server_harden_algo_downgrade = 483, /* server_harden_algo_downgrade */ - YYSYMBOL_server_use_caps_for_id = 484, /* server_use_caps_for_id */ - YYSYMBOL_server_caps_whitelist = 485, /* server_caps_whitelist */ - YYSYMBOL_server_private_address = 486, /* server_private_address */ - YYSYMBOL_server_private_domain = 487, /* server_private_domain */ - YYSYMBOL_server_prefetch = 488, /* server_prefetch */ - YYSYMBOL_server_prefetch_key = 489, /* server_prefetch_key */ - YYSYMBOL_server_deny_any = 490, /* server_deny_any */ - YYSYMBOL_server_unwanted_reply_threshold = 491, /* server_unwanted_reply_threshold */ - YYSYMBOL_server_do_not_query_address = 492, /* server_do_not_query_address */ - YYSYMBOL_server_do_not_query_localhost = 493, /* server_do_not_query_localhost */ - YYSYMBOL_server_access_control = 494, /* server_access_control */ - YYSYMBOL_server_module_conf = 495, /* server_module_conf */ - YYSYMBOL_server_val_override_date = 496, /* server_val_override_date */ - YYSYMBOL_server_val_sig_skew_min = 497, /* server_val_sig_skew_min */ - YYSYMBOL_server_val_sig_skew_max = 498, /* server_val_sig_skew_max */ - YYSYMBOL_server_val_max_restart = 499, /* server_val_max_restart */ - YYSYMBOL_server_cache_max_ttl = 500, /* server_cache_max_ttl */ - YYSYMBOL_server_cache_max_negative_ttl = 501, /* server_cache_max_negative_ttl */ - YYSYMBOL_server_cache_min_ttl = 502, /* server_cache_min_ttl */ - YYSYMBOL_server_bogus_ttl = 503, /* server_bogus_ttl */ - YYSYMBOL_server_val_clean_additional = 504, /* server_val_clean_additional */ - YYSYMBOL_server_val_permissive_mode = 505, /* server_val_permissive_mode */ - YYSYMBOL_server_aggressive_nsec = 506, /* server_aggressive_nsec */ - YYSYMBOL_server_ignore_cd_flag = 507, /* server_ignore_cd_flag */ - YYSYMBOL_server_serve_expired = 508, /* server_serve_expired */ - YYSYMBOL_server_serve_expired_ttl = 509, /* server_serve_expired_ttl */ - YYSYMBOL_server_serve_expired_ttl_reset = 510, /* server_serve_expired_ttl_reset */ - YYSYMBOL_server_serve_expired_reply_ttl = 511, /* server_serve_expired_reply_ttl */ - YYSYMBOL_server_serve_expired_client_timeout = 512, /* server_serve_expired_client_timeout */ - YYSYMBOL_server_ede_serve_expired = 513, /* server_ede_serve_expired */ - YYSYMBOL_server_serve_original_ttl = 514, /* server_serve_original_ttl */ - YYSYMBOL_server_fake_dsa = 515, /* server_fake_dsa */ - YYSYMBOL_server_fake_sha1 = 516, /* server_fake_sha1 */ - YYSYMBOL_server_val_log_level = 517, /* server_val_log_level */ - YYSYMBOL_server_val_nsec3_keysize_iterations = 518, /* server_val_nsec3_keysize_iterations */ - YYSYMBOL_server_zonemd_permissive_mode = 519, /* server_zonemd_permissive_mode */ - YYSYMBOL_server_add_holddown = 520, /* server_add_holddown */ - YYSYMBOL_server_del_holddown = 521, /* server_del_holddown */ - YYSYMBOL_server_keep_missing = 522, /* server_keep_missing */ - YYSYMBOL_server_permit_small_holddown = 523, /* server_permit_small_holddown */ - YYSYMBOL_server_key_cache_size = 524, /* server_key_cache_size */ - YYSYMBOL_server_key_cache_slabs = 525, /* server_key_cache_slabs */ - YYSYMBOL_server_neg_cache_size = 526, /* server_neg_cache_size */ - YYSYMBOL_server_local_zone = 527, /* server_local_zone */ - YYSYMBOL_server_local_data = 528, /* server_local_data */ - YYSYMBOL_server_local_data_ptr = 529, /* server_local_data_ptr */ - YYSYMBOL_server_minimal_responses = 530, /* server_minimal_responses */ - YYSYMBOL_server_rrset_roundrobin = 531, /* server_rrset_roundrobin */ - YYSYMBOL_server_unknown_server_time_limit = 532, /* server_unknown_server_time_limit */ - YYSYMBOL_server_max_udp_size = 533, /* server_max_udp_size */ - YYSYMBOL_server_dns64_prefix = 534, /* server_dns64_prefix */ - YYSYMBOL_server_dns64_synthall = 535, /* server_dns64_synthall */ - YYSYMBOL_server_dns64_ignore_aaaa = 536, /* server_dns64_ignore_aaaa */ - YYSYMBOL_server_define_tag = 537, /* server_define_tag */ - YYSYMBOL_server_local_zone_tag = 538, /* server_local_zone_tag */ - YYSYMBOL_server_access_control_tag = 539, /* server_access_control_tag */ - YYSYMBOL_server_access_control_tag_action = 540, /* server_access_control_tag_action */ - YYSYMBOL_server_access_control_tag_data = 541, /* server_access_control_tag_data */ - YYSYMBOL_server_local_zone_override = 542, /* server_local_zone_override */ - YYSYMBOL_server_access_control_view = 543, /* server_access_control_view */ - YYSYMBOL_server_response_ip_tag = 544, /* server_response_ip_tag */ - YYSYMBOL_server_ip_ratelimit = 545, /* server_ip_ratelimit */ - YYSYMBOL_server_ratelimit = 546, /* server_ratelimit */ - YYSYMBOL_server_ip_ratelimit_size = 547, /* server_ip_ratelimit_size */ - YYSYMBOL_server_ratelimit_size = 548, /* server_ratelimit_size */ - YYSYMBOL_server_ip_ratelimit_slabs = 549, /* server_ip_ratelimit_slabs */ - YYSYMBOL_server_ratelimit_slabs = 550, /* server_ratelimit_slabs */ - YYSYMBOL_server_ratelimit_for_domain = 551, /* server_ratelimit_for_domain */ - YYSYMBOL_server_ratelimit_below_domain = 552, /* server_ratelimit_below_domain */ - YYSYMBOL_server_ip_ratelimit_factor = 553, /* server_ip_ratelimit_factor */ - YYSYMBOL_server_ratelimit_factor = 554, /* server_ratelimit_factor */ - YYSYMBOL_server_ip_ratelimit_backoff = 555, /* server_ip_ratelimit_backoff */ - YYSYMBOL_server_ratelimit_backoff = 556, /* server_ratelimit_backoff */ - YYSYMBOL_server_outbound_msg_retry = 557, /* server_outbound_msg_retry */ - YYSYMBOL_server_low_rtt = 558, /* server_low_rtt */ - YYSYMBOL_server_fast_server_num = 559, /* server_fast_server_num */ - YYSYMBOL_server_fast_server_permil = 560, /* server_fast_server_permil */ - YYSYMBOL_server_qname_minimisation = 561, /* server_qname_minimisation */ - YYSYMBOL_server_qname_minimisation_strict = 562, /* server_qname_minimisation_strict */ - YYSYMBOL_server_pad_responses = 563, /* server_pad_responses */ - YYSYMBOL_server_pad_responses_block_size = 564, /* server_pad_responses_block_size */ - YYSYMBOL_server_pad_queries = 565, /* server_pad_queries */ - YYSYMBOL_server_pad_queries_block_size = 566, /* server_pad_queries_block_size */ - YYSYMBOL_server_ipsecmod_enabled = 567, /* server_ipsecmod_enabled */ - YYSYMBOL_server_ipsecmod_ignore_bogus = 568, /* server_ipsecmod_ignore_bogus */ - YYSYMBOL_server_ipsecmod_hook = 569, /* server_ipsecmod_hook */ - YYSYMBOL_server_ipsecmod_max_ttl = 570, /* server_ipsecmod_max_ttl */ - YYSYMBOL_server_ipsecmod_whitelist = 571, /* server_ipsecmod_whitelist */ - YYSYMBOL_server_ipsecmod_strict = 572, /* server_ipsecmod_strict */ - YYSYMBOL_server_edns_client_string = 573, /* server_edns_client_string */ - YYSYMBOL_server_edns_client_string_opcode = 574, /* server_edns_client_string_opcode */ - YYSYMBOL_server_ede = 575, /* server_ede */ - YYSYMBOL_stub_name = 576, /* stub_name */ - YYSYMBOL_stub_host = 577, /* stub_host */ - YYSYMBOL_stub_addr = 578, /* stub_addr */ - YYSYMBOL_stub_first = 579, /* stub_first */ - YYSYMBOL_stub_no_cache = 580, /* stub_no_cache */ - YYSYMBOL_stub_ssl_upstream = 581, /* stub_ssl_upstream */ - YYSYMBOL_stub_tcp_upstream = 582, /* stub_tcp_upstream */ - YYSYMBOL_stub_prime = 583, /* stub_prime */ - YYSYMBOL_forward_name = 584, /* forward_name */ - YYSYMBOL_forward_host = 585, /* forward_host */ - YYSYMBOL_forward_addr = 586, /* forward_addr */ - YYSYMBOL_forward_first = 587, /* forward_first */ - YYSYMBOL_forward_no_cache = 588, /* forward_no_cache */ - YYSYMBOL_forward_ssl_upstream = 589, /* forward_ssl_upstream */ - YYSYMBOL_forward_tcp_upstream = 590, /* forward_tcp_upstream */ - YYSYMBOL_auth_name = 591, /* auth_name */ - YYSYMBOL_auth_zonefile = 592, /* auth_zonefile */ - YYSYMBOL_auth_master = 593, /* auth_master */ - YYSYMBOL_auth_url = 594, /* auth_url */ - YYSYMBOL_auth_allow_notify = 595, /* auth_allow_notify */ - YYSYMBOL_auth_zonemd_check = 596, /* auth_zonemd_check */ - YYSYMBOL_auth_zonemd_reject_absence = 597, /* auth_zonemd_reject_absence */ - YYSYMBOL_auth_for_downstream = 598, /* auth_for_downstream */ - YYSYMBOL_auth_for_upstream = 599, /* auth_for_upstream */ - YYSYMBOL_auth_fallback_enabled = 600, /* auth_fallback_enabled */ - YYSYMBOL_view_name = 601, /* view_name */ - YYSYMBOL_view_local_zone = 602, /* view_local_zone */ - YYSYMBOL_view_response_ip = 603, /* view_response_ip */ - YYSYMBOL_view_response_ip_data = 604, /* view_response_ip_data */ - YYSYMBOL_view_local_data = 605, /* view_local_data */ - YYSYMBOL_view_local_data_ptr = 606, /* view_local_data_ptr */ - YYSYMBOL_view_first = 607, /* view_first */ - YYSYMBOL_rcstart = 608, /* rcstart */ - YYSYMBOL_contents_rc = 609, /* contents_rc */ - YYSYMBOL_content_rc = 610, /* content_rc */ - YYSYMBOL_rc_control_enable = 611, /* rc_control_enable */ - YYSYMBOL_rc_control_port = 612, /* rc_control_port */ - YYSYMBOL_rc_control_interface = 613, /* rc_control_interface */ - YYSYMBOL_rc_control_use_cert = 614, /* rc_control_use_cert */ - YYSYMBOL_rc_server_key_file = 615, /* rc_server_key_file */ - YYSYMBOL_rc_server_cert_file = 616, /* rc_server_cert_file */ - YYSYMBOL_rc_control_key_file = 617, /* rc_control_key_file */ - YYSYMBOL_rc_control_cert_file = 618, /* rc_control_cert_file */ - YYSYMBOL_dtstart = 619, /* dtstart */ - YYSYMBOL_contents_dt = 620, /* contents_dt */ - YYSYMBOL_content_dt = 621, /* content_dt */ - YYSYMBOL_dt_dnstap_enable = 622, /* dt_dnstap_enable */ - YYSYMBOL_dt_dnstap_bidirectional = 623, /* dt_dnstap_bidirectional */ - YYSYMBOL_dt_dnstap_socket_path = 624, /* dt_dnstap_socket_path */ - YYSYMBOL_dt_dnstap_ip = 625, /* dt_dnstap_ip */ - YYSYMBOL_dt_dnstap_tls = 626, /* dt_dnstap_tls */ - YYSYMBOL_dt_dnstap_tls_server_name = 627, /* dt_dnstap_tls_server_name */ - YYSYMBOL_dt_dnstap_tls_cert_bundle = 628, /* dt_dnstap_tls_cert_bundle */ - YYSYMBOL_dt_dnstap_tls_client_key_file = 629, /* dt_dnstap_tls_client_key_file */ - YYSYMBOL_dt_dnstap_tls_client_cert_file = 630, /* dt_dnstap_tls_client_cert_file */ - YYSYMBOL_dt_dnstap_send_identity = 631, /* dt_dnstap_send_identity */ - YYSYMBOL_dt_dnstap_send_version = 632, /* dt_dnstap_send_version */ - YYSYMBOL_dt_dnstap_identity = 633, /* dt_dnstap_identity */ - YYSYMBOL_dt_dnstap_version = 634, /* dt_dnstap_version */ - YYSYMBOL_dt_dnstap_log_resolver_query_messages = 635, /* dt_dnstap_log_resolver_query_messages */ - YYSYMBOL_dt_dnstap_log_resolver_response_messages = 636, /* dt_dnstap_log_resolver_response_messages */ - YYSYMBOL_dt_dnstap_log_client_query_messages = 637, /* dt_dnstap_log_client_query_messages */ - YYSYMBOL_dt_dnstap_log_client_response_messages = 638, /* dt_dnstap_log_client_response_messages */ - YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 639, /* dt_dnstap_log_forwarder_query_messages */ - YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 640, /* dt_dnstap_log_forwarder_response_messages */ - YYSYMBOL_pythonstart = 641, /* pythonstart */ - YYSYMBOL_contents_py = 642, /* contents_py */ - YYSYMBOL_content_py = 643, /* content_py */ - YYSYMBOL_py_script = 644, /* py_script */ - YYSYMBOL_dynlibstart = 645, /* dynlibstart */ - YYSYMBOL_contents_dl = 646, /* contents_dl */ - YYSYMBOL_content_dl = 647, /* content_dl */ - YYSYMBOL_dl_file = 648, /* dl_file */ - YYSYMBOL_server_disable_dnssec_lame_check = 649, /* server_disable_dnssec_lame_check */ - YYSYMBOL_server_log_identity = 650, /* server_log_identity */ - YYSYMBOL_server_response_ip = 651, /* server_response_ip */ - YYSYMBOL_server_response_ip_data = 652, /* server_response_ip_data */ - YYSYMBOL_dnscstart = 653, /* dnscstart */ - YYSYMBOL_contents_dnsc = 654, /* contents_dnsc */ - YYSYMBOL_content_dnsc = 655, /* content_dnsc */ - YYSYMBOL_dnsc_dnscrypt_enable = 656, /* dnsc_dnscrypt_enable */ - YYSYMBOL_dnsc_dnscrypt_port = 657, /* dnsc_dnscrypt_port */ - YYSYMBOL_dnsc_dnscrypt_provider = 658, /* dnsc_dnscrypt_provider */ - YYSYMBOL_dnsc_dnscrypt_provider_cert = 659, /* dnsc_dnscrypt_provider_cert */ - YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 660, /* dnsc_dnscrypt_provider_cert_rotated */ - YYSYMBOL_dnsc_dnscrypt_secret_key = 661, /* dnsc_dnscrypt_secret_key */ - YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 662, /* dnsc_dnscrypt_shared_secret_cache_size */ - YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 663, /* dnsc_dnscrypt_shared_secret_cache_slabs */ - YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 664, /* dnsc_dnscrypt_nonce_cache_size */ - YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 665, /* dnsc_dnscrypt_nonce_cache_slabs */ - YYSYMBOL_cachedbstart = 666, /* cachedbstart */ - YYSYMBOL_contents_cachedb = 667, /* contents_cachedb */ - YYSYMBOL_content_cachedb = 668, /* content_cachedb */ - YYSYMBOL_cachedb_backend_name = 669, /* cachedb_backend_name */ - YYSYMBOL_cachedb_secret_seed = 670, /* cachedb_secret_seed */ - YYSYMBOL_redis_server_host = 671, /* redis_server_host */ - YYSYMBOL_redis_server_port = 672, /* redis_server_port */ - YYSYMBOL_redis_timeout = 673, /* redis_timeout */ - YYSYMBOL_redis_expire_records = 674, /* redis_expire_records */ - YYSYMBOL_server_tcp_connection_limit = 675, /* server_tcp_connection_limit */ - YYSYMBOL_ipsetstart = 676, /* ipsetstart */ - YYSYMBOL_contents_ipset = 677, /* contents_ipset */ - YYSYMBOL_content_ipset = 678, /* content_ipset */ - YYSYMBOL_ipset_name_v4 = 679, /* ipset_name_v4 */ - YYSYMBOL_ipset_name_v6 = 680 /* ipset_name_v6 */ + YYSYMBOL_VAR_INTERFACE_ACTION = 328, /* VAR_INTERFACE_ACTION */ + YYSYMBOL_VAR_INTERFACE_VIEW = 329, /* VAR_INTERFACE_VIEW */ + YYSYMBOL_VAR_INTERFACE_TAG = 330, /* VAR_INTERFACE_TAG */ + YYSYMBOL_VAR_INTERFACE_TAG_ACTION = 331, /* VAR_INTERFACE_TAG_ACTION */ + YYSYMBOL_VAR_INTERFACE_TAG_DATA = 332, /* VAR_INTERFACE_TAG_DATA */ + YYSYMBOL_YYACCEPT = 333, /* $accept */ + YYSYMBOL_toplevelvars = 334, /* toplevelvars */ + YYSYMBOL_toplevelvar = 335, /* toplevelvar */ + YYSYMBOL_force_toplevel = 336, /* force_toplevel */ + YYSYMBOL_serverstart = 337, /* serverstart */ + YYSYMBOL_contents_server = 338, /* contents_server */ + YYSYMBOL_content_server = 339, /* content_server */ + YYSYMBOL_stubstart = 340, /* stubstart */ + YYSYMBOL_contents_stub = 341, /* contents_stub */ + YYSYMBOL_content_stub = 342, /* content_stub */ + YYSYMBOL_forwardstart = 343, /* forwardstart */ + YYSYMBOL_contents_forward = 344, /* contents_forward */ + YYSYMBOL_content_forward = 345, /* content_forward */ + YYSYMBOL_viewstart = 346, /* viewstart */ + YYSYMBOL_contents_view = 347, /* contents_view */ + YYSYMBOL_content_view = 348, /* content_view */ + YYSYMBOL_authstart = 349, /* authstart */ + YYSYMBOL_contents_auth = 350, /* contents_auth */ + YYSYMBOL_content_auth = 351, /* content_auth */ + YYSYMBOL_rpz_tag = 352, /* rpz_tag */ + YYSYMBOL_rpz_action_override = 353, /* rpz_action_override */ + YYSYMBOL_rpz_cname_override = 354, /* rpz_cname_override */ + YYSYMBOL_rpz_log = 355, /* rpz_log */ + YYSYMBOL_rpz_log_name = 356, /* rpz_log_name */ + YYSYMBOL_rpz_signal_nxdomain_ra = 357, /* rpz_signal_nxdomain_ra */ + YYSYMBOL_rpzstart = 358, /* rpzstart */ + YYSYMBOL_contents_rpz = 359, /* contents_rpz */ + YYSYMBOL_content_rpz = 360, /* content_rpz */ + YYSYMBOL_server_num_threads = 361, /* server_num_threads */ + YYSYMBOL_server_verbosity = 362, /* server_verbosity */ + YYSYMBOL_server_statistics_interval = 363, /* server_statistics_interval */ + YYSYMBOL_server_statistics_cumulative = 364, /* server_statistics_cumulative */ + YYSYMBOL_server_extended_statistics = 365, /* server_extended_statistics */ + YYSYMBOL_server_shm_enable = 366, /* server_shm_enable */ + YYSYMBOL_server_shm_key = 367, /* server_shm_key */ + YYSYMBOL_server_port = 368, /* server_port */ + YYSYMBOL_server_send_client_subnet = 369, /* server_send_client_subnet */ + YYSYMBOL_server_client_subnet_zone = 370, /* server_client_subnet_zone */ + YYSYMBOL_server_client_subnet_always_forward = 371, /* server_client_subnet_always_forward */ + YYSYMBOL_server_client_subnet_opcode = 372, /* server_client_subnet_opcode */ + YYSYMBOL_server_max_client_subnet_ipv4 = 373, /* server_max_client_subnet_ipv4 */ + YYSYMBOL_server_max_client_subnet_ipv6 = 374, /* server_max_client_subnet_ipv6 */ + YYSYMBOL_server_min_client_subnet_ipv4 = 375, /* server_min_client_subnet_ipv4 */ + YYSYMBOL_server_min_client_subnet_ipv6 = 376, /* server_min_client_subnet_ipv6 */ + YYSYMBOL_server_max_ecs_tree_size_ipv4 = 377, /* server_max_ecs_tree_size_ipv4 */ + YYSYMBOL_server_max_ecs_tree_size_ipv6 = 378, /* server_max_ecs_tree_size_ipv6 */ + YYSYMBOL_server_interface = 379, /* server_interface */ + YYSYMBOL_server_outgoing_interface = 380, /* server_outgoing_interface */ + YYSYMBOL_server_outgoing_range = 381, /* server_outgoing_range */ + YYSYMBOL_server_outgoing_port_permit = 382, /* server_outgoing_port_permit */ + YYSYMBOL_server_outgoing_port_avoid = 383, /* server_outgoing_port_avoid */ + YYSYMBOL_server_outgoing_num_tcp = 384, /* server_outgoing_num_tcp */ + YYSYMBOL_server_incoming_num_tcp = 385, /* server_incoming_num_tcp */ + YYSYMBOL_server_interface_automatic = 386, /* server_interface_automatic */ + YYSYMBOL_server_interface_automatic_ports = 387, /* server_interface_automatic_ports */ + YYSYMBOL_server_do_ip4 = 388, /* server_do_ip4 */ + YYSYMBOL_server_do_ip6 = 389, /* server_do_ip6 */ + YYSYMBOL_server_do_udp = 390, /* server_do_udp */ + YYSYMBOL_server_do_tcp = 391, /* server_do_tcp */ + YYSYMBOL_server_prefer_ip4 = 392, /* server_prefer_ip4 */ + YYSYMBOL_server_prefer_ip6 = 393, /* server_prefer_ip6 */ + YYSYMBOL_server_tcp_mss = 394, /* server_tcp_mss */ + YYSYMBOL_server_outgoing_tcp_mss = 395, /* server_outgoing_tcp_mss */ + YYSYMBOL_server_tcp_idle_timeout = 396, /* server_tcp_idle_timeout */ + YYSYMBOL_server_max_reuse_tcp_queries = 397, /* server_max_reuse_tcp_queries */ + YYSYMBOL_server_tcp_reuse_timeout = 398, /* server_tcp_reuse_timeout */ + YYSYMBOL_server_tcp_auth_query_timeout = 399, /* server_tcp_auth_query_timeout */ + YYSYMBOL_server_tcp_keepalive = 400, /* server_tcp_keepalive */ + YYSYMBOL_server_tcp_keepalive_timeout = 401, /* server_tcp_keepalive_timeout */ + YYSYMBOL_server_tcp_upstream = 402, /* server_tcp_upstream */ + YYSYMBOL_server_udp_upstream_without_downstream = 403, /* server_udp_upstream_without_downstream */ + YYSYMBOL_server_ssl_upstream = 404, /* server_ssl_upstream */ + YYSYMBOL_server_ssl_service_key = 405, /* server_ssl_service_key */ + YYSYMBOL_server_ssl_service_pem = 406, /* server_ssl_service_pem */ + YYSYMBOL_server_ssl_port = 407, /* server_ssl_port */ + YYSYMBOL_server_tls_cert_bundle = 408, /* server_tls_cert_bundle */ + YYSYMBOL_server_tls_win_cert = 409, /* server_tls_win_cert */ + YYSYMBOL_server_tls_additional_port = 410, /* server_tls_additional_port */ + YYSYMBOL_server_tls_ciphers = 411, /* server_tls_ciphers */ + YYSYMBOL_server_tls_ciphersuites = 412, /* server_tls_ciphersuites */ + YYSYMBOL_server_tls_session_ticket_keys = 413, /* server_tls_session_ticket_keys */ + YYSYMBOL_server_tls_use_sni = 414, /* server_tls_use_sni */ + YYSYMBOL_server_https_port = 415, /* server_https_port */ + YYSYMBOL_server_http_endpoint = 416, /* server_http_endpoint */ + YYSYMBOL_server_http_max_streams = 417, /* server_http_max_streams */ + YYSYMBOL_server_http_query_buffer_size = 418, /* server_http_query_buffer_size */ + YYSYMBOL_server_http_response_buffer_size = 419, /* server_http_response_buffer_size */ + YYSYMBOL_server_http_nodelay = 420, /* server_http_nodelay */ + YYSYMBOL_server_http_notls_downstream = 421, /* server_http_notls_downstream */ + YYSYMBOL_server_use_systemd = 422, /* server_use_systemd */ + YYSYMBOL_server_do_daemonize = 423, /* server_do_daemonize */ + YYSYMBOL_server_use_syslog = 424, /* server_use_syslog */ + YYSYMBOL_server_log_time_ascii = 425, /* server_log_time_ascii */ + YYSYMBOL_server_log_queries = 426, /* server_log_queries */ + YYSYMBOL_server_log_replies = 427, /* server_log_replies */ + YYSYMBOL_server_log_tag_queryreply = 428, /* server_log_tag_queryreply */ + YYSYMBOL_server_log_servfail = 429, /* server_log_servfail */ + YYSYMBOL_server_log_local_actions = 430, /* server_log_local_actions */ + YYSYMBOL_server_chroot = 431, /* server_chroot */ + YYSYMBOL_server_username = 432, /* server_username */ + YYSYMBOL_server_directory = 433, /* server_directory */ + YYSYMBOL_server_logfile = 434, /* server_logfile */ + YYSYMBOL_server_pidfile = 435, /* server_pidfile */ + YYSYMBOL_server_root_hints = 436, /* server_root_hints */ + YYSYMBOL_server_dlv_anchor_file = 437, /* server_dlv_anchor_file */ + YYSYMBOL_server_dlv_anchor = 438, /* server_dlv_anchor */ + YYSYMBOL_server_auto_trust_anchor_file = 439, /* server_auto_trust_anchor_file */ + YYSYMBOL_server_trust_anchor_file = 440, /* server_trust_anchor_file */ + YYSYMBOL_server_trusted_keys_file = 441, /* server_trusted_keys_file */ + YYSYMBOL_server_trust_anchor = 442, /* server_trust_anchor */ + YYSYMBOL_server_trust_anchor_signaling = 443, /* server_trust_anchor_signaling */ + YYSYMBOL_server_root_key_sentinel = 444, /* server_root_key_sentinel */ + YYSYMBOL_server_domain_insecure = 445, /* server_domain_insecure */ + YYSYMBOL_server_hide_identity = 446, /* server_hide_identity */ + YYSYMBOL_server_hide_version = 447, /* server_hide_version */ + YYSYMBOL_server_hide_trustanchor = 448, /* server_hide_trustanchor */ + YYSYMBOL_server_hide_http_user_agent = 449, /* server_hide_http_user_agent */ + YYSYMBOL_server_identity = 450, /* server_identity */ + YYSYMBOL_server_version = 451, /* server_version */ + YYSYMBOL_server_http_user_agent = 452, /* server_http_user_agent */ + YYSYMBOL_server_nsid = 453, /* server_nsid */ + YYSYMBOL_server_so_rcvbuf = 454, /* server_so_rcvbuf */ + YYSYMBOL_server_so_sndbuf = 455, /* server_so_sndbuf */ + YYSYMBOL_server_so_reuseport = 456, /* server_so_reuseport */ + YYSYMBOL_server_ip_transparent = 457, /* server_ip_transparent */ + YYSYMBOL_server_ip_freebind = 458, /* server_ip_freebind */ + YYSYMBOL_server_ip_dscp = 459, /* server_ip_dscp */ + YYSYMBOL_server_stream_wait_size = 460, /* server_stream_wait_size */ + YYSYMBOL_server_edns_buffer_size = 461, /* server_edns_buffer_size */ + YYSYMBOL_server_msg_buffer_size = 462, /* server_msg_buffer_size */ + YYSYMBOL_server_msg_cache_size = 463, /* server_msg_cache_size */ + YYSYMBOL_server_msg_cache_slabs = 464, /* server_msg_cache_slabs */ + YYSYMBOL_server_num_queries_per_thread = 465, /* server_num_queries_per_thread */ + YYSYMBOL_server_jostle_timeout = 466, /* server_jostle_timeout */ + YYSYMBOL_server_delay_close = 467, /* server_delay_close */ + YYSYMBOL_server_udp_connect = 468, /* server_udp_connect */ + YYSYMBOL_server_unblock_lan_zones = 469, /* server_unblock_lan_zones */ + YYSYMBOL_server_insecure_lan_zones = 470, /* server_insecure_lan_zones */ + YYSYMBOL_server_rrset_cache_size = 471, /* server_rrset_cache_size */ + YYSYMBOL_server_rrset_cache_slabs = 472, /* server_rrset_cache_slabs */ + YYSYMBOL_server_infra_host_ttl = 473, /* server_infra_host_ttl */ + YYSYMBOL_server_infra_lame_ttl = 474, /* server_infra_lame_ttl */ + YYSYMBOL_server_infra_cache_numhosts = 475, /* server_infra_cache_numhosts */ + YYSYMBOL_server_infra_cache_lame_size = 476, /* server_infra_cache_lame_size */ + YYSYMBOL_server_infra_cache_slabs = 477, /* server_infra_cache_slabs */ + YYSYMBOL_server_infra_cache_min_rtt = 478, /* server_infra_cache_min_rtt */ + YYSYMBOL_server_infra_cache_max_rtt = 479, /* server_infra_cache_max_rtt */ + YYSYMBOL_server_infra_keep_probing = 480, /* server_infra_keep_probing */ + YYSYMBOL_server_target_fetch_policy = 481, /* server_target_fetch_policy */ + YYSYMBOL_server_harden_short_bufsize = 482, /* server_harden_short_bufsize */ + YYSYMBOL_server_harden_large_queries = 483, /* server_harden_large_queries */ + YYSYMBOL_server_harden_glue = 484, /* server_harden_glue */ + YYSYMBOL_server_harden_dnssec_stripped = 485, /* server_harden_dnssec_stripped */ + YYSYMBOL_server_harden_below_nxdomain = 486, /* server_harden_below_nxdomain */ + YYSYMBOL_server_harden_referral_path = 487, /* server_harden_referral_path */ + YYSYMBOL_server_harden_algo_downgrade = 488, /* server_harden_algo_downgrade */ + YYSYMBOL_server_use_caps_for_id = 489, /* server_use_caps_for_id */ + YYSYMBOL_server_caps_whitelist = 490, /* server_caps_whitelist */ + YYSYMBOL_server_private_address = 491, /* server_private_address */ + YYSYMBOL_server_private_domain = 492, /* server_private_domain */ + YYSYMBOL_server_prefetch = 493, /* server_prefetch */ + YYSYMBOL_server_prefetch_key = 494, /* server_prefetch_key */ + YYSYMBOL_server_deny_any = 495, /* server_deny_any */ + YYSYMBOL_server_unwanted_reply_threshold = 496, /* server_unwanted_reply_threshold */ + YYSYMBOL_server_do_not_query_address = 497, /* server_do_not_query_address */ + YYSYMBOL_server_do_not_query_localhost = 498, /* server_do_not_query_localhost */ + YYSYMBOL_server_access_control = 499, /* server_access_control */ + YYSYMBOL_server_interface_action = 500, /* server_interface_action */ + YYSYMBOL_server_module_conf = 501, /* server_module_conf */ + YYSYMBOL_server_val_override_date = 502, /* server_val_override_date */ + YYSYMBOL_server_val_sig_skew_min = 503, /* server_val_sig_skew_min */ + YYSYMBOL_server_val_sig_skew_max = 504, /* server_val_sig_skew_max */ + YYSYMBOL_server_val_max_restart = 505, /* server_val_max_restart */ + YYSYMBOL_server_cache_max_ttl = 506, /* server_cache_max_ttl */ + YYSYMBOL_server_cache_max_negative_ttl = 507, /* server_cache_max_negative_ttl */ + YYSYMBOL_server_cache_min_ttl = 508, /* server_cache_min_ttl */ + YYSYMBOL_server_bogus_ttl = 509, /* server_bogus_ttl */ + YYSYMBOL_server_val_clean_additional = 510, /* server_val_clean_additional */ + YYSYMBOL_server_val_permissive_mode = 511, /* server_val_permissive_mode */ + YYSYMBOL_server_aggressive_nsec = 512, /* server_aggressive_nsec */ + YYSYMBOL_server_ignore_cd_flag = 513, /* server_ignore_cd_flag */ + YYSYMBOL_server_serve_expired = 514, /* server_serve_expired */ + YYSYMBOL_server_serve_expired_ttl = 515, /* server_serve_expired_ttl */ + YYSYMBOL_server_serve_expired_ttl_reset = 516, /* server_serve_expired_ttl_reset */ + YYSYMBOL_server_serve_expired_reply_ttl = 517, /* server_serve_expired_reply_ttl */ + YYSYMBOL_server_serve_expired_client_timeout = 518, /* server_serve_expired_client_timeout */ + YYSYMBOL_server_ede_serve_expired = 519, /* server_ede_serve_expired */ + YYSYMBOL_server_serve_original_ttl = 520, /* server_serve_original_ttl */ + YYSYMBOL_server_fake_dsa = 521, /* server_fake_dsa */ + YYSYMBOL_server_fake_sha1 = 522, /* server_fake_sha1 */ + YYSYMBOL_server_val_log_level = 523, /* server_val_log_level */ + YYSYMBOL_server_val_nsec3_keysize_iterations = 524, /* server_val_nsec3_keysize_iterations */ + YYSYMBOL_server_zonemd_permissive_mode = 525, /* server_zonemd_permissive_mode */ + YYSYMBOL_server_add_holddown = 526, /* server_add_holddown */ + YYSYMBOL_server_del_holddown = 527, /* server_del_holddown */ + YYSYMBOL_server_keep_missing = 528, /* server_keep_missing */ + YYSYMBOL_server_permit_small_holddown = 529, /* server_permit_small_holddown */ + YYSYMBOL_server_key_cache_size = 530, /* server_key_cache_size */ + YYSYMBOL_server_key_cache_slabs = 531, /* server_key_cache_slabs */ + YYSYMBOL_server_neg_cache_size = 532, /* server_neg_cache_size */ + YYSYMBOL_server_local_zone = 533, /* server_local_zone */ + YYSYMBOL_server_local_data = 534, /* server_local_data */ + YYSYMBOL_server_local_data_ptr = 535, /* server_local_data_ptr */ + YYSYMBOL_server_minimal_responses = 536, /* server_minimal_responses */ + YYSYMBOL_server_rrset_roundrobin = 537, /* server_rrset_roundrobin */ + YYSYMBOL_server_unknown_server_time_limit = 538, /* server_unknown_server_time_limit */ + YYSYMBOL_server_max_udp_size = 539, /* server_max_udp_size */ + YYSYMBOL_server_dns64_prefix = 540, /* server_dns64_prefix */ + YYSYMBOL_server_dns64_synthall = 541, /* server_dns64_synthall */ + YYSYMBOL_server_dns64_ignore_aaaa = 542, /* server_dns64_ignore_aaaa */ + YYSYMBOL_server_define_tag = 543, /* server_define_tag */ + YYSYMBOL_server_local_zone_tag = 544, /* server_local_zone_tag */ + YYSYMBOL_server_access_control_tag = 545, /* server_access_control_tag */ + YYSYMBOL_server_access_control_tag_action = 546, /* server_access_control_tag_action */ + YYSYMBOL_server_access_control_tag_data = 547, /* server_access_control_tag_data */ + YYSYMBOL_server_local_zone_override = 548, /* server_local_zone_override */ + YYSYMBOL_server_access_control_view = 549, /* server_access_control_view */ + YYSYMBOL_server_interface_tag = 550, /* server_interface_tag */ + YYSYMBOL_server_interface_tag_action = 551, /* server_interface_tag_action */ + YYSYMBOL_server_interface_tag_data = 552, /* server_interface_tag_data */ + YYSYMBOL_server_interface_view = 553, /* server_interface_view */ + YYSYMBOL_server_response_ip_tag = 554, /* server_response_ip_tag */ + YYSYMBOL_server_ip_ratelimit = 555, /* server_ip_ratelimit */ + YYSYMBOL_server_ratelimit = 556, /* server_ratelimit */ + YYSYMBOL_server_ip_ratelimit_size = 557, /* server_ip_ratelimit_size */ + YYSYMBOL_server_ratelimit_size = 558, /* server_ratelimit_size */ + YYSYMBOL_server_ip_ratelimit_slabs = 559, /* server_ip_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_slabs = 560, /* server_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_for_domain = 561, /* server_ratelimit_for_domain */ + YYSYMBOL_server_ratelimit_below_domain = 562, /* server_ratelimit_below_domain */ + YYSYMBOL_server_ip_ratelimit_factor = 563, /* server_ip_ratelimit_factor */ + YYSYMBOL_server_ratelimit_factor = 564, /* server_ratelimit_factor */ + YYSYMBOL_server_ip_ratelimit_backoff = 565, /* server_ip_ratelimit_backoff */ + YYSYMBOL_server_ratelimit_backoff = 566, /* server_ratelimit_backoff */ + YYSYMBOL_server_outbound_msg_retry = 567, /* server_outbound_msg_retry */ + YYSYMBOL_server_low_rtt = 568, /* server_low_rtt */ + YYSYMBOL_server_fast_server_num = 569, /* server_fast_server_num */ + YYSYMBOL_server_fast_server_permil = 570, /* server_fast_server_permil */ + YYSYMBOL_server_qname_minimisation = 571, /* server_qname_minimisation */ + YYSYMBOL_server_qname_minimisation_strict = 572, /* server_qname_minimisation_strict */ + YYSYMBOL_server_pad_responses = 573, /* server_pad_responses */ + YYSYMBOL_server_pad_responses_block_size = 574, /* server_pad_responses_block_size */ + YYSYMBOL_server_pad_queries = 575, /* server_pad_queries */ + YYSYMBOL_server_pad_queries_block_size = 576, /* server_pad_queries_block_size */ + YYSYMBOL_server_ipsecmod_enabled = 577, /* server_ipsecmod_enabled */ + YYSYMBOL_server_ipsecmod_ignore_bogus = 578, /* server_ipsecmod_ignore_bogus */ + YYSYMBOL_server_ipsecmod_hook = 579, /* server_ipsecmod_hook */ + YYSYMBOL_server_ipsecmod_max_ttl = 580, /* server_ipsecmod_max_ttl */ + YYSYMBOL_server_ipsecmod_whitelist = 581, /* server_ipsecmod_whitelist */ + YYSYMBOL_server_ipsecmod_strict = 582, /* server_ipsecmod_strict */ + YYSYMBOL_server_edns_client_string = 583, /* server_edns_client_string */ + YYSYMBOL_server_edns_client_string_opcode = 584, /* server_edns_client_string_opcode */ + YYSYMBOL_server_ede = 585, /* server_ede */ + YYSYMBOL_stub_name = 586, /* stub_name */ + YYSYMBOL_stub_host = 587, /* stub_host */ + YYSYMBOL_stub_addr = 588, /* stub_addr */ + YYSYMBOL_stub_first = 589, /* stub_first */ + YYSYMBOL_stub_no_cache = 590, /* stub_no_cache */ + YYSYMBOL_stub_ssl_upstream = 591, /* stub_ssl_upstream */ + YYSYMBOL_stub_tcp_upstream = 592, /* stub_tcp_upstream */ + YYSYMBOL_stub_prime = 593, /* stub_prime */ + YYSYMBOL_forward_name = 594, /* forward_name */ + YYSYMBOL_forward_host = 595, /* forward_host */ + YYSYMBOL_forward_addr = 596, /* forward_addr */ + YYSYMBOL_forward_first = 597, /* forward_first */ + YYSYMBOL_forward_no_cache = 598, /* forward_no_cache */ + YYSYMBOL_forward_ssl_upstream = 599, /* forward_ssl_upstream */ + YYSYMBOL_forward_tcp_upstream = 600, /* forward_tcp_upstream */ + YYSYMBOL_auth_name = 601, /* auth_name */ + YYSYMBOL_auth_zonefile = 602, /* auth_zonefile */ + YYSYMBOL_auth_master = 603, /* auth_master */ + YYSYMBOL_auth_url = 604, /* auth_url */ + YYSYMBOL_auth_allow_notify = 605, /* auth_allow_notify */ + YYSYMBOL_auth_zonemd_check = 606, /* auth_zonemd_check */ + YYSYMBOL_auth_zonemd_reject_absence = 607, /* auth_zonemd_reject_absence */ + YYSYMBOL_auth_for_downstream = 608, /* auth_for_downstream */ + YYSYMBOL_auth_for_upstream = 609, /* auth_for_upstream */ + YYSYMBOL_auth_fallback_enabled = 610, /* auth_fallback_enabled */ + YYSYMBOL_view_name = 611, /* view_name */ + YYSYMBOL_view_local_zone = 612, /* view_local_zone */ + YYSYMBOL_view_response_ip = 613, /* view_response_ip */ + YYSYMBOL_view_response_ip_data = 614, /* view_response_ip_data */ + YYSYMBOL_view_local_data = 615, /* view_local_data */ + YYSYMBOL_view_local_data_ptr = 616, /* view_local_data_ptr */ + YYSYMBOL_view_first = 617, /* view_first */ + YYSYMBOL_rcstart = 618, /* rcstart */ + YYSYMBOL_contents_rc = 619, /* contents_rc */ + YYSYMBOL_content_rc = 620, /* content_rc */ + YYSYMBOL_rc_control_enable = 621, /* rc_control_enable */ + YYSYMBOL_rc_control_port = 622, /* rc_control_port */ + YYSYMBOL_rc_control_interface = 623, /* rc_control_interface */ + YYSYMBOL_rc_control_use_cert = 624, /* rc_control_use_cert */ + YYSYMBOL_rc_server_key_file = 625, /* rc_server_key_file */ + YYSYMBOL_rc_server_cert_file = 626, /* rc_server_cert_file */ + YYSYMBOL_rc_control_key_file = 627, /* rc_control_key_file */ + YYSYMBOL_rc_control_cert_file = 628, /* rc_control_cert_file */ + YYSYMBOL_dtstart = 629, /* dtstart */ + YYSYMBOL_contents_dt = 630, /* contents_dt */ + YYSYMBOL_content_dt = 631, /* content_dt */ + YYSYMBOL_dt_dnstap_enable = 632, /* dt_dnstap_enable */ + YYSYMBOL_dt_dnstap_bidirectional = 633, /* dt_dnstap_bidirectional */ + YYSYMBOL_dt_dnstap_socket_path = 634, /* dt_dnstap_socket_path */ + YYSYMBOL_dt_dnstap_ip = 635, /* dt_dnstap_ip */ + YYSYMBOL_dt_dnstap_tls = 636, /* dt_dnstap_tls */ + YYSYMBOL_dt_dnstap_tls_server_name = 637, /* dt_dnstap_tls_server_name */ + YYSYMBOL_dt_dnstap_tls_cert_bundle = 638, /* dt_dnstap_tls_cert_bundle */ + YYSYMBOL_dt_dnstap_tls_client_key_file = 639, /* dt_dnstap_tls_client_key_file */ + YYSYMBOL_dt_dnstap_tls_client_cert_file = 640, /* dt_dnstap_tls_client_cert_file */ + YYSYMBOL_dt_dnstap_send_identity = 641, /* dt_dnstap_send_identity */ + YYSYMBOL_dt_dnstap_send_version = 642, /* dt_dnstap_send_version */ + YYSYMBOL_dt_dnstap_identity = 643, /* dt_dnstap_identity */ + YYSYMBOL_dt_dnstap_version = 644, /* dt_dnstap_version */ + YYSYMBOL_dt_dnstap_log_resolver_query_messages = 645, /* dt_dnstap_log_resolver_query_messages */ + YYSYMBOL_dt_dnstap_log_resolver_response_messages = 646, /* dt_dnstap_log_resolver_response_messages */ + YYSYMBOL_dt_dnstap_log_client_query_messages = 647, /* dt_dnstap_log_client_query_messages */ + YYSYMBOL_dt_dnstap_log_client_response_messages = 648, /* dt_dnstap_log_client_response_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 649, /* dt_dnstap_log_forwarder_query_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 650, /* dt_dnstap_log_forwarder_response_messages */ + YYSYMBOL_pythonstart = 651, /* pythonstart */ + YYSYMBOL_contents_py = 652, /* contents_py */ + YYSYMBOL_content_py = 653, /* content_py */ + YYSYMBOL_py_script = 654, /* py_script */ + YYSYMBOL_dynlibstart = 655, /* dynlibstart */ + YYSYMBOL_contents_dl = 656, /* contents_dl */ + YYSYMBOL_content_dl = 657, /* content_dl */ + YYSYMBOL_dl_file = 658, /* dl_file */ + YYSYMBOL_server_disable_dnssec_lame_check = 659, /* server_disable_dnssec_lame_check */ + YYSYMBOL_server_log_identity = 660, /* server_log_identity */ + YYSYMBOL_server_response_ip = 661, /* server_response_ip */ + YYSYMBOL_server_response_ip_data = 662, /* server_response_ip_data */ + YYSYMBOL_dnscstart = 663, /* dnscstart */ + YYSYMBOL_contents_dnsc = 664, /* contents_dnsc */ + YYSYMBOL_content_dnsc = 665, /* content_dnsc */ + YYSYMBOL_dnsc_dnscrypt_enable = 666, /* dnsc_dnscrypt_enable */ + YYSYMBOL_dnsc_dnscrypt_port = 667, /* dnsc_dnscrypt_port */ + YYSYMBOL_dnsc_dnscrypt_provider = 668, /* dnsc_dnscrypt_provider */ + YYSYMBOL_dnsc_dnscrypt_provider_cert = 669, /* dnsc_dnscrypt_provider_cert */ + YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 670, /* dnsc_dnscrypt_provider_cert_rotated */ + YYSYMBOL_dnsc_dnscrypt_secret_key = 671, /* dnsc_dnscrypt_secret_key */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 672, /* dnsc_dnscrypt_shared_secret_cache_size */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 673, /* dnsc_dnscrypt_shared_secret_cache_slabs */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 674, /* dnsc_dnscrypt_nonce_cache_size */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 675, /* dnsc_dnscrypt_nonce_cache_slabs */ + YYSYMBOL_cachedbstart = 676, /* cachedbstart */ + YYSYMBOL_contents_cachedb = 677, /* contents_cachedb */ + YYSYMBOL_content_cachedb = 678, /* content_cachedb */ + YYSYMBOL_cachedb_backend_name = 679, /* cachedb_backend_name */ + YYSYMBOL_cachedb_secret_seed = 680, /* cachedb_secret_seed */ + YYSYMBOL_redis_server_host = 681, /* redis_server_host */ + YYSYMBOL_redis_server_port = 682, /* redis_server_port */ + YYSYMBOL_redis_timeout = 683, /* redis_timeout */ + YYSYMBOL_redis_expire_records = 684, /* redis_expire_records */ + YYSYMBOL_server_tcp_connection_limit = 685, /* server_tcp_connection_limit */ + YYSYMBOL_ipsetstart = 686, /* ipsetstart */ + YYSYMBOL_contents_ipset = 687, /* contents_ipset */ + YYSYMBOL_content_ipset = 688, /* content_ipset */ + YYSYMBOL_ipset_name_v4 = 689, /* ipset_name_v4 */ + YYSYMBOL_ipset_name_v6 = 690 /* ipset_name_v6 */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -962,12 +973,18 @@ typedef int yy_state_fast_t; # define YY_USE(E) /* empty */ #endif -#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ +#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ +# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") +# else +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# endif # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else @@ -1126,19 +1143,19 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 695 +#define YYLAST 711 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 328 +#define YYNTOKENS 333 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 353 +#define YYNNTS 358 /* YYNRULES -- Number of rules. */ -#define YYNRULES 683 +#define YYNRULES 693 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 1015 +#define YYNSTATES 1037 /* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 582 +#define YYMAXUTOK 587 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -1210,82 +1227,83 @@ static const yytype_int16 yytranslate[] = 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327 + 325, 326, 327, 328, 329, 330, 331, 332 }; #if YYDEBUG - /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 195, 195, 195, 196, 196, 197, 197, 198, 198, - 198, 199, 199, 200, 200, 201, 201, 202, 204, 211, - 217, 218, 219, 219, 219, 220, 220, 221, 221, 221, - 222, 222, 223, 223, 223, 224, 224, 225, 225, 225, - 226, 226, 226, 227, 227, 228, 228, 229, 229, 230, - 230, 231, 231, 232, 232, 233, 233, 234, 234, 235, - 235, 235, 236, 236, 237, 237, 237, 238, 238, 238, - 239, 239, 240, 240, 241, 241, 242, 242, 243, 243, - 243, 244, 244, 245, 245, 246, 246, 246, 247, 247, - 248, 248, 249, 249, 250, 250, 250, 251, 251, 252, - 252, 253, 253, 254, 254, 255, 255, 256, 256, 257, - 257, 258, 258, 259, 259, 259, 260, 260, 260, 261, - 261, 261, 262, 262, 262, 262, 263, 264, 264, 264, - 265, 265, 265, 266, 266, 267, 267, 268, 268, 268, - 269, 269, 269, 270, 270, 271, 271, 271, 272, 272, - 272, 273, 273, 273, 274, 274, 275, 275, 276, 276, - 277, 278, 278, 279, 279, 280, 280, 281, 281, 282, - 282, 283, 283, 284, 284, 285, 285, 286, 286, 287, - 287, 288, 288, 288, 289, 289, 290, 290, 291, 291, - 292, 293, 293, 294, 294, 295, 296, 296, 297, 297, - 298, 298, 298, 299, 299, 300, 300, 300, 301, 301, - 301, 302, 302, 303, 304, 304, 305, 305, 306, 306, - 307, 307, 308, 308, 308, 309, 309, 309, 310, 310, - 310, 311, 311, 312, 312, 313, 313, 314, 314, 315, - 315, 316, 316, 317, 317, 318, 318, 321, 335, 336, - 337, 337, 337, 337, 337, 338, 338, 338, 340, 354, - 355, 356, 356, 356, 356, 357, 357, 357, 359, 375, - 376, 377, 377, 377, 377, 378, 378, 378, 380, 401, - 402, 403, 403, 403, 403, 404, 404, 404, 405, 405, - 405, 408, 427, 444, 452, 462, 469, 479, 498, 499, - 500, 500, 500, 500, 500, 501, 501, 501, 502, 502, - 502, 502, 504, 513, 522, 533, 542, 551, 560, 571, - 580, 592, 606, 621, 632, 649, 666, 683, 700, 715, - 730, 743, 758, 767, 776, 785, 794, 803, 812, 819, - 828, 837, 846, 855, 864, 873, 882, 891, 904, 915, - 926, 937, 946, 959, 968, 977, 986, 993, 1000, 1009, - 1016, 1025, 1033, 1040, 1047, 1055, 1064, 1072, 1088, 1096, - 1104, 1112, 1120, 1128, 1137, 1146, 1160, 1169, 1178, 1187, - 1196, 1205, 1214, 1221, 1228, 1254, 1262, 1269, 1276, 1283, - 1290, 1298, 1306, 1314, 1321, 1332, 1343, 1350, 1359, 1368, - 1377, 1386, 1393, 1400, 1407, 1423, 1431, 1439, 1449, 1459, - 1469, 1483, 1491, 1504, 1515, 1523, 1536, 1545, 1554, 1563, - 1572, 1582, 1592, 1600, 1613, 1622, 1630, 1639, 1647, 1660, - 1669, 1678, 1688, 1695, 1705, 1715, 1725, 1735, 1745, 1755, - 1765, 1775, 1782, 1789, 1796, 1805, 1814, 1823, 1832, 1839, - 1849, 1869, 1876, 1894, 1907, 1920, 1933, 1942, 1951, 1960, - 1969, 1979, 1989, 2000, 2009, 2018, 2027, 2036, 2045, 2054, - 2063, 2072, 2085, 2098, 2107, 2114, 2123, 2132, 2141, 2150, - 2159, 2167, 2180, 2188, 2243, 2250, 2265, 2275, 2285, 2292, - 2299, 2306, 2315, 2323, 2337, 2358, 2379, 2391, 2403, 2415, - 2424, 2445, 2454, 2463, 2471, 2479, 2492, 2505, 2520, 2535, - 2544, 2553, 2563, 2573, 2582, 2588, 2597, 2606, 2616, 2626, - 2636, 2645, 2655, 2664, 2677, 2690, 2702, 2716, 2728, 2742, - 2751, 2762, 2771, 2781, 2788, 2795, 2804, 2813, 2823, 2833, - 2843, 2853, 2860, 2867, 2876, 2885, 2895, 2905, 2915, 2922, - 2929, 2936, 2944, 2954, 2964, 2974, 2984, 2994, 3004, 3060, - 3070, 3078, 3086, 3101, 3110, 3116, 3117, 3118, 3118, 3118, - 3119, 3119, 3119, 3120, 3120, 3122, 3132, 3141, 3148, 3155, - 3162, 3169, 3176, 3183, 3189, 3190, 3191, 3191, 3191, 3192, - 3192, 3192, 3193, 3194, 3194, 3195, 3195, 3196, 3196, 3197, - 3198, 3199, 3200, 3201, 3202, 3204, 3213, 3223, 3230, 3237, - 3246, 3253, 3260, 3267, 3274, 3283, 3292, 3299, 3306, 3316, - 3326, 3336, 3346, 3356, 3366, 3372, 3373, 3374, 3376, 3382, - 3388, 3389, 3390, 3392, 3398, 3408, 3415, 3424, 3432, 3438, - 3439, 3441, 3441, 3441, 3442, 3442, 3443, 3444, 3445, 3446, - 3447, 3449, 3459, 3468, 3475, 3484, 3491, 3500, 3508, 3521, - 3529, 3542, 3548, 3549, 3550, 3550, 3551, 3551, 3551, 3552, - 3554, 3566, 3578, 3590, 3605, 3618, 3631, 3642, 3648, 3649, - 3650, 3650, 3652, 3667 + 0, 198, 198, 198, 199, 199, 200, 200, 201, 201, + 201, 202, 202, 203, 203, 204, 204, 205, 207, 214, + 220, 221, 222, 222, 222, 223, 223, 224, 224, 224, + 225, 225, 226, 226, 226, 227, 227, 228, 228, 228, + 229, 229, 229, 230, 230, 231, 231, 232, 232, 233, + 233, 234, 234, 235, 235, 236, 236, 237, 237, 238, + 238, 238, 239, 239, 240, 240, 240, 241, 241, 241, + 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, + 246, 247, 247, 248, 248, 249, 249, 249, 250, 250, + 251, 251, 252, 252, 253, 253, 253, 254, 254, 255, + 255, 256, 256, 257, 257, 258, 258, 259, 259, 260, + 260, 261, 261, 262, 262, 262, 263, 263, 263, 264, + 264, 264, 265, 265, 265, 265, 266, 267, 267, 267, + 268, 268, 268, 269, 269, 270, 270, 271, 271, 271, + 272, 272, 272, 273, 273, 274, 274, 274, 275, 275, + 275, 276, 276, 276, 277, 277, 278, 278, 279, 279, + 280, 281, 281, 282, 282, 283, 283, 284, 284, 285, + 285, 286, 286, 287, 287, 288, 288, 289, 289, 290, + 290, 291, 291, 291, 292, 292, 293, 293, 294, 294, + 295, 295, 295, 296, 296, 297, 298, 298, 299, 299, + 300, 301, 301, 302, 302, 303, 303, 303, 304, 304, + 305, 305, 305, 306, 306, 306, 307, 307, 308, 309, + 309, 310, 310, 311, 311, 312, 312, 313, 313, 313, + 314, 314, 314, 315, 315, 315, 316, 316, 317, 317, + 318, 318, 319, 319, 320, 320, 321, 321, 322, 322, + 323, 323, 326, 340, 341, 342, 342, 342, 342, 342, + 343, 343, 343, 345, 359, 360, 361, 361, 361, 361, + 362, 362, 362, 364, 380, 381, 382, 382, 382, 382, + 383, 383, 383, 385, 406, 407, 408, 408, 408, 408, + 409, 409, 409, 410, 410, 410, 413, 432, 449, 457, + 467, 474, 484, 503, 504, 505, 505, 505, 505, 505, + 506, 506, 506, 507, 507, 507, 507, 509, 518, 527, + 538, 547, 556, 565, 576, 585, 597, 611, 626, 637, + 654, 671, 688, 705, 720, 735, 748, 763, 772, 781, + 790, 799, 808, 817, 824, 833, 842, 851, 860, 869, + 878, 887, 896, 909, 920, 931, 942, 951, 964, 973, + 982, 991, 998, 1005, 1014, 1021, 1030, 1038, 1045, 1052, + 1060, 1069, 1077, 1093, 1101, 1109, 1117, 1125, 1133, 1142, + 1151, 1165, 1174, 1183, 1192, 1201, 1210, 1219, 1226, 1233, + 1259, 1267, 1274, 1281, 1288, 1295, 1303, 1311, 1319, 1326, + 1337, 1348, 1355, 1364, 1373, 1382, 1391, 1398, 1405, 1412, + 1428, 1436, 1444, 1454, 1464, 1474, 1488, 1496, 1509, 1520, + 1528, 1541, 1550, 1559, 1568, 1577, 1587, 1597, 1605, 1618, + 1627, 1635, 1644, 1652, 1665, 1674, 1683, 1693, 1700, 1710, + 1720, 1730, 1740, 1750, 1760, 1770, 1780, 1787, 1794, 1801, + 1810, 1819, 1828, 1837, 1844, 1854, 1862, 1871, 1878, 1896, + 1909, 1922, 1935, 1944, 1953, 1962, 1971, 1981, 1991, 2002, + 2011, 2020, 2029, 2038, 2047, 2056, 2065, 2074, 2087, 2100, + 2109, 2116, 2125, 2134, 2143, 2152, 2161, 2169, 2182, 2190, + 2245, 2252, 2267, 2277, 2287, 2294, 2301, 2308, 2317, 2325, + 2339, 2360, 2381, 2393, 2405, 2417, 2426, 2447, 2459, 2471, + 2480, 2501, 2510, 2519, 2527, 2535, 2548, 2561, 2576, 2591, + 2600, 2609, 2619, 2629, 2638, 2644, 2653, 2662, 2672, 2682, + 2692, 2701, 2711, 2720, 2733, 2746, 2758, 2772, 2784, 2798, + 2807, 2818, 2827, 2837, 2844, 2851, 2860, 2869, 2879, 2889, + 2899, 2909, 2916, 2923, 2932, 2941, 2951, 2961, 2971, 2978, + 2985, 2992, 3000, 3010, 3020, 3030, 3040, 3050, 3060, 3116, + 3126, 3134, 3142, 3157, 3166, 3172, 3173, 3174, 3174, 3174, + 3175, 3175, 3175, 3176, 3176, 3178, 3188, 3197, 3204, 3211, + 3218, 3225, 3232, 3239, 3245, 3246, 3247, 3247, 3247, 3248, + 3248, 3248, 3249, 3250, 3250, 3251, 3251, 3252, 3252, 3253, + 3254, 3255, 3256, 3257, 3258, 3260, 3269, 3279, 3286, 3293, + 3302, 3309, 3316, 3323, 3330, 3339, 3348, 3355, 3362, 3372, + 3382, 3392, 3402, 3412, 3422, 3428, 3429, 3430, 3432, 3438, + 3444, 3445, 3446, 3448, 3454, 3464, 3471, 3480, 3488, 3494, + 3495, 3497, 3497, 3497, 3498, 3498, 3499, 3500, 3501, 3502, + 3503, 3505, 3515, 3524, 3531, 3540, 3547, 3556, 3564, 3577, + 3585, 3598, 3604, 3605, 3606, 3606, 3607, 3607, 3607, 3608, + 3610, 3622, 3634, 3646, 3661, 3674, 3687, 3698, 3704, 3705, + 3706, 3706, 3708, 3723 }; #endif @@ -1425,17 +1443,19 @@ static const char *const yytname[] = "VAR_EDNS_CLIENT_STRING", "VAR_EDNS_CLIENT_STRING_OPCODE", "VAR_NSID", "VAR_ZONEMD_PERMISSIVE_MODE", "VAR_ZONEMD_CHECK", "VAR_ZONEMD_REJECT_ABSENCE", "VAR_RPZ_SIGNAL_NXDOMAIN_RA", - "VAR_INTERFACE_AUTOMATIC_PORTS", "VAR_EDE", "$accept", "toplevelvars", - "toplevelvar", "force_toplevel", "serverstart", "contents_server", - "content_server", "stubstart", "contents_stub", "content_stub", - "forwardstart", "contents_forward", "content_forward", "viewstart", - "contents_view", "content_view", "authstart", "contents_auth", - "content_auth", "rpz_tag", "rpz_action_override", "rpz_cname_override", - "rpz_log", "rpz_log_name", "rpz_signal_nxdomain_ra", "rpzstart", - "contents_rpz", "content_rpz", "server_num_threads", "server_verbosity", - "server_statistics_interval", "server_statistics_cumulative", - "server_extended_statistics", "server_shm_enable", "server_shm_key", - "server_port", "server_send_client_subnet", "server_client_subnet_zone", + "VAR_INTERFACE_AUTOMATIC_PORTS", "VAR_EDE", "VAR_INTERFACE_ACTION", + "VAR_INTERFACE_VIEW", "VAR_INTERFACE_TAG", "VAR_INTERFACE_TAG_ACTION", + "VAR_INTERFACE_TAG_DATA", "$accept", "toplevelvars", "toplevelvar", + "force_toplevel", "serverstart", "contents_server", "content_server", + "stubstart", "contents_stub", "content_stub", "forwardstart", + "contents_forward", "content_forward", "viewstart", "contents_view", + "content_view", "authstart", "contents_auth", "content_auth", "rpz_tag", + "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", + "rpz_signal_nxdomain_ra", "rpzstart", "contents_rpz", "content_rpz", + "server_num_threads", "server_verbosity", "server_statistics_interval", + "server_statistics_cumulative", "server_extended_statistics", + "server_shm_enable", "server_shm_key", "server_port", + "server_send_client_subnet", "server_client_subnet_zone", "server_client_subnet_always_forward", "server_client_subnet_opcode", "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6", "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6", @@ -1491,7 +1511,7 @@ static const char *const yytname[] = "server_private_domain", "server_prefetch", "server_prefetch_key", "server_deny_any", "server_unwanted_reply_threshold", "server_do_not_query_address", "server_do_not_query_localhost", - "server_access_control", "server_module_conf", + "server_access_control", "server_interface_action", "server_module_conf", "server_val_override_date", "server_val_sig_skew_min", "server_val_sig_skew_max", "server_val_max_restart", "server_cache_max_ttl", "server_cache_max_negative_ttl", @@ -1513,40 +1533,41 @@ static const char *const yytname[] = "server_dns64_ignore_aaaa", "server_define_tag", "server_local_zone_tag", "server_access_control_tag", "server_access_control_tag_action", "server_access_control_tag_data", "server_local_zone_override", - "server_access_control_view", "server_response_ip_tag", - "server_ip_ratelimit", "server_ratelimit", "server_ip_ratelimit_size", - "server_ratelimit_size", "server_ip_ratelimit_slabs", - "server_ratelimit_slabs", "server_ratelimit_for_domain", - "server_ratelimit_below_domain", "server_ip_ratelimit_factor", - "server_ratelimit_factor", "server_ip_ratelimit_backoff", - "server_ratelimit_backoff", "server_outbound_msg_retry", - "server_low_rtt", "server_fast_server_num", "server_fast_server_permil", - "server_qname_minimisation", "server_qname_minimisation_strict", - "server_pad_responses", "server_pad_responses_block_size", - "server_pad_queries", "server_pad_queries_block_size", - "server_ipsecmod_enabled", "server_ipsecmod_ignore_bogus", - "server_ipsecmod_hook", "server_ipsecmod_max_ttl", - "server_ipsecmod_whitelist", "server_ipsecmod_strict", - "server_edns_client_string", "server_edns_client_string_opcode", - "server_ede", "stub_name", "stub_host", "stub_addr", "stub_first", - "stub_no_cache", "stub_ssl_upstream", "stub_tcp_upstream", "stub_prime", - "forward_name", "forward_host", "forward_addr", "forward_first", - "forward_no_cache", "forward_ssl_upstream", "forward_tcp_upstream", - "auth_name", "auth_zonefile", "auth_master", "auth_url", - "auth_allow_notify", "auth_zonemd_check", "auth_zonemd_reject_absence", - "auth_for_downstream", "auth_for_upstream", "auth_fallback_enabled", - "view_name", "view_local_zone", "view_response_ip", - "view_response_ip_data", "view_local_data", "view_local_data_ptr", - "view_first", "rcstart", "contents_rc", "content_rc", - "rc_control_enable", "rc_control_port", "rc_control_interface", - "rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file", - "rc_control_key_file", "rc_control_cert_file", "dtstart", "contents_dt", - "content_dt", "dt_dnstap_enable", "dt_dnstap_bidirectional", - "dt_dnstap_socket_path", "dt_dnstap_ip", "dt_dnstap_tls", - "dt_dnstap_tls_server_name", "dt_dnstap_tls_cert_bundle", - "dt_dnstap_tls_client_key_file", "dt_dnstap_tls_client_cert_file", - "dt_dnstap_send_identity", "dt_dnstap_send_version", - "dt_dnstap_identity", "dt_dnstap_version", + "server_access_control_view", "server_interface_tag", + "server_interface_tag_action", "server_interface_tag_data", + "server_interface_view", "server_response_ip_tag", "server_ip_ratelimit", + "server_ratelimit", "server_ip_ratelimit_size", "server_ratelimit_size", + "server_ip_ratelimit_slabs", "server_ratelimit_slabs", + "server_ratelimit_for_domain", "server_ratelimit_below_domain", + "server_ip_ratelimit_factor", "server_ratelimit_factor", + "server_ip_ratelimit_backoff", "server_ratelimit_backoff", + "server_outbound_msg_retry", "server_low_rtt", "server_fast_server_num", + "server_fast_server_permil", "server_qname_minimisation", + "server_qname_minimisation_strict", "server_pad_responses", + "server_pad_responses_block_size", "server_pad_queries", + "server_pad_queries_block_size", "server_ipsecmod_enabled", + "server_ipsecmod_ignore_bogus", "server_ipsecmod_hook", + "server_ipsecmod_max_ttl", "server_ipsecmod_whitelist", + "server_ipsecmod_strict", "server_edns_client_string", + "server_edns_client_string_opcode", "server_ede", "stub_name", + "stub_host", "stub_addr", "stub_first", "stub_no_cache", + "stub_ssl_upstream", "stub_tcp_upstream", "stub_prime", "forward_name", + "forward_host", "forward_addr", "forward_first", "forward_no_cache", + "forward_ssl_upstream", "forward_tcp_upstream", "auth_name", + "auth_zonefile", "auth_master", "auth_url", "auth_allow_notify", + "auth_zonemd_check", "auth_zonemd_reject_absence", "auth_for_downstream", + "auth_for_upstream", "auth_fallback_enabled", "view_name", + "view_local_zone", "view_response_ip", "view_response_ip_data", + "view_local_data", "view_local_data_ptr", "view_first", "rcstart", + "contents_rc", "content_rc", "rc_control_enable", "rc_control_port", + "rc_control_interface", "rc_control_use_cert", "rc_server_key_file", + "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file", + "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable", + "dt_dnstap_bidirectional", "dt_dnstap_socket_path", "dt_dnstap_ip", + "dt_dnstap_tls", "dt_dnstap_tls_server_name", + "dt_dnstap_tls_cert_bundle", "dt_dnstap_tls_client_key_file", + "dt_dnstap_tls_client_cert_file", "dt_dnstap_send_identity", + "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version", "dt_dnstap_log_resolver_query_messages", "dt_dnstap_log_resolver_response_messages", "dt_dnstap_log_client_query_messages", @@ -1576,48 +1597,7 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#ifdef YYPRINT -/* YYTOKNUM[NUM] -- (External) token number corresponding to the - (internal) symbol number NUM (which must be that of a token). */ -static const yytype_int16 yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, - 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, - 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, - 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, - 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, - 575, 576, 577, 578, 579, 580, 581, 582 -}; -#endif - -#define YYPACT_NINF (-312) +#define YYPACT_NINF (-284) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) @@ -1627,123 +1607,125 @@ static const yytype_int16 yytoknum[] = #define yytable_value_is_error(Yyn) \ 0 - /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ static const yytype_int16 yypact[] = { - -312, 0, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, 305, -39, -32, -43, -30, -44, -42, -98, - -110, -311, -231, -235, -305, 4, 6, 7, 8, 9, - 10, 23, 24, 25, 26, 27, 37, 38, 39, 40, - 41, 43, 44, 53, 54, 56, 57, 58, 59, 60, - 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, - 92, 93, 95, 96, 98, 99, 101, 103, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 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, 222, 223, - 224, 225, 226, 227, 228, 229, 234, 235, 236, 237, - 238, 239, 241, 250, 251, 252, 253, 256, 257, 263, - 265, 266, 267, 268, 269, 270, 272, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 298, 299, - 300, 302, 303, 304, 306, 340, 341, 342, 343, 347, - 348, 349, 391, 392, 393, 394, 395, 396, 397, 398, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, 399, 405, 409, 410, - 437, 438, 439, 441, -312, -312, -312, -312, -312, -312, - -312, -312, -312, 442, 450, 464, 465, 466, 467, 468, - -312, -312, -312, -312, -312, -312, -312, -312, 469, 470, - 471, 472, 473, 474, 475, -312, -312, -312, -312, -312, - -312, -312, -312, 476, 477, 478, 479, 480, 481, 482, - 483, 526, 528, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, 548, 549, 550, 551, 552, 553, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, 554, 555, 556, 557, 558, 569, 570, - 571, -312, -312, -312, -312, -312, -312, -312, -312, -312, - 572, 573, 574, 575, 577, 578, 579, 580, 581, 582, - 583, 586, 589, 592, 593, 602, 603, 604, 606, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, 607, - -312, -312, 608, -312, -312, 609, 610, 611, 612, 613, - 618, 619, 620, 623, 624, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, 625, 626, 627, 628, - 629, 630, -312, -312, -312, -312, -312, -312, -312, 631, - 632, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, 633, 634, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, 635, 636, 637, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, 638, - 639, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, 640, 641, 642, 643, 644, 645, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, 646, -312, -312, -312, -312, -312, -312, - -312, -312, -312, 647, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, 648, -312, -312, 649, 650, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, 651, 652, 653, -312, -312, -312, -312, - -312, -312, -312, -312, -312 + -284, 250, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -13, 201, 218, 52, 84, 38, 236, 209, + -81, -283, -93, -191, -276, 29, 30, 31, 80, 81, + 91, 92, 120, 121, 132, 146, 147, 148, 149, 161, + 162, 163, 164, 165, 208, 210, 230, 231, 234, 235, + 237, 254, 255, 256, 257, 259, 260, 263, 264, 265, + 268, 271, 274, 284, 285, 288, 289, 290, 291, 293, + 294, 295, 300, 302, 310, 311, 316, 317, 318, 319, + 320, 321, 331, 332, 333, 335, 338, 339, 345, 347, + 348, 349, 351, 357, 363, 364, 365, 366, 367, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 490, 491, 492, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 506, 507, 508, 509, 510, 511, 512, 513, 515, 516, + 517, 518, 519, 520, 521, 522, 524, 525, 526, 527, + 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 548, + 549, 550, 552, 553, 554, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, 555, 556, 558, 559, + 560, 561, 562, 563, -284, -284, -284, -284, -284, -284, + -284, -284, -284, 564, 565, 566, 567, 568, 569, 570, + -284, -284, -284, -284, -284, -284, -284, -284, 571, 572, + 573, 574, 575, 576, 577, -284, -284, -284, -284, -284, + -284, -284, -284, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, 588, 589, 590, 591, 592, 593, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, 594, 595, 596, 597, 598, 599, 600, + 601, -284, -284, -284, -284, -284, -284, -284, -284, -284, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, 621, + -284, -284, 622, -284, -284, 623, 624, 625, 626, 627, + 628, 629, 630, 631, 632, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, 633, 634, 635, 636, + 637, 638, -284, -284, -284, -284, -284, -284, -284, 639, + 640, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, 641, 642, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, 643, 644, 645, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, 646, + 647, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, 648, 649, 650, 651, 652, 653, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, 654, -284, -284, -284, -284, -284, -284, + -284, -284, -284, 655, -284, -284, -284, -284, -284, 656, + 657, 658, 659, 660, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + 661, -284, -284, 662, 663, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, 664, 665, + 666, -284, -284, -284, -284, -284, -284, 667, 668, -284, + -284, -284, -284, -284, -284, -284, -284 }; - /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE does not specify something else to do. Zero - means the default is an error. */ +/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ static const yytype_int16 yydefact[] = { - 2, 0, 1, 18, 19, 247, 258, 564, 624, 583, - 268, 638, 661, 278, 677, 297, 629, 3, 17, 21, - 249, 260, 270, 280, 299, 566, 585, 626, 631, 640, - 663, 679, 4, 5, 6, 10, 14, 15, 8, 9, + 2, 0, 1, 18, 19, 252, 263, 574, 634, 593, + 273, 648, 671, 283, 687, 302, 639, 3, 17, 21, + 254, 265, 275, 285, 304, 576, 595, 636, 641, 650, + 673, 689, 4, 5, 6, 10, 14, 15, 8, 9, 7, 16, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1767,325 +1749,331 @@ static const yytype_int16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 22, 23, 88, 91, 100, 208, 209, 24, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 37, - 79, 25, 92, 93, 48, 72, 87, 245, 26, 27, - 30, 31, 28, 29, 32, 33, 34, 242, 243, 244, - 35, 36, 124, 220, 125, 127, 128, 129, 222, 227, - 223, 234, 235, 236, 237, 130, 131, 132, 133, 134, - 135, 136, 204, 89, 78, 104, 122, 123, 232, 229, - 126, 38, 39, 40, 41, 42, 80, 94, 95, 111, - 66, 76, 67, 212, 213, 105, 58, 59, 211, 62, - 60, 61, 63, 240, 115, 119, 140, 151, 181, 154, - 233, 116, 73, 43, 44, 45, 102, 141, 142, 143, - 144, 46, 47, 49, 50, 52, 53, 51, 148, 149, - 155, 54, 55, 56, 64, 83, 120, 97, 150, 90, - 177, 98, 99, 117, 118, 230, 103, 57, 81, 84, - 65, 68, 106, 107, 108, 82, 178, 109, 69, 70, - 71, 221, 121, 195, 196, 197, 198, 199, 200, 201, - 202, 210, 110, 77, 241, 112, 113, 114, 179, 74, - 75, 96, 85, 86, 101, 137, 138, 231, 139, 145, - 146, 147, 182, 183, 185, 187, 188, 186, 189, 205, + 0, 0, 0, 0, 0, 20, 22, 23, 88, 91, + 100, 213, 214, 24, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 37, 79, 25, 92, 93, 48, + 72, 87, 250, 26, 27, 30, 31, 28, 29, 32, + 33, 34, 247, 248, 249, 35, 36, 124, 225, 125, + 127, 128, 129, 227, 232, 228, 239, 240, 241, 242, + 130, 131, 132, 133, 134, 135, 136, 209, 89, 78, + 104, 122, 123, 237, 234, 126, 38, 39, 40, 41, + 42, 80, 94, 95, 111, 66, 76, 67, 217, 218, + 105, 58, 59, 216, 62, 60, 61, 63, 245, 115, + 119, 140, 151, 181, 154, 238, 116, 73, 43, 44, + 45, 102, 141, 142, 143, 144, 46, 47, 49, 50, + 52, 53, 51, 148, 149, 155, 54, 55, 56, 64, + 83, 120, 97, 150, 90, 177, 98, 99, 117, 118, + 235, 103, 57, 81, 84, 190, 65, 68, 106, 107, + 108, 82, 178, 109, 69, 70, 71, 226, 121, 200, + 201, 202, 203, 204, 205, 206, 207, 215, 110, 77, + 246, 112, 113, 114, 179, 74, 75, 96, 85, 86, + 101, 137, 138, 236, 139, 145, 146, 147, 182, 183, + 185, 187, 188, 186, 189, 192, 193, 194, 191, 210, 152, 153, 158, 159, 156, 157, 160, 161, 163, 162, - 165, 164, 166, 224, 226, 225, 180, 190, 191, 192, - 193, 194, 214, 216, 215, 217, 218, 219, 238, 239, - 246, 184, 203, 206, 207, 228, 0, 0, 0, 0, - 0, 0, 0, 0, 248, 250, 251, 252, 254, 255, - 256, 257, 253, 0, 0, 0, 0, 0, 0, 0, - 259, 261, 262, 263, 264, 265, 266, 267, 0, 0, - 0, 0, 0, 0, 0, 269, 271, 272, 275, 276, - 273, 277, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 279, 281, 282, 283, 284, 288, 289, - 290, 285, 286, 287, 0, 0, 0, 0, 0, 0, - 302, 306, 307, 308, 309, 310, 298, 300, 301, 303, - 304, 305, 311, 0, 0, 0, 0, 0, 0, 0, - 0, 565, 567, 569, 568, 574, 570, 571, 572, 573, + 165, 164, 166, 229, 231, 230, 180, 195, 196, 197, + 198, 199, 219, 221, 220, 222, 223, 224, 243, 244, + 251, 184, 208, 211, 212, 233, 0, 0, 0, 0, + 0, 0, 0, 0, 253, 255, 256, 257, 259, 260, + 261, 262, 258, 0, 0, 0, 0, 0, 0, 0, + 264, 266, 267, 268, 269, 270, 271, 272, 0, 0, + 0, 0, 0, 0, 0, 274, 276, 277, 280, 281, + 278, 282, 279, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 284, 286, 287, 288, 289, 293, 294, + 295, 290, 291, 292, 0, 0, 0, 0, 0, 0, + 307, 311, 312, 313, 314, 315, 303, 305, 306, 308, + 309, 310, 316, 0, 0, 0, 0, 0, 0, 0, + 0, 575, 577, 579, 578, 584, 580, 581, 582, 583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, - 586, 588, 587, 589, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 0, - 625, 627, 0, 630, 632, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 639, 641, 642, 643, 645, - 646, 644, 647, 648, 649, 650, 0, 0, 0, 0, - 0, 0, 662, 664, 665, 666, 667, 668, 669, 0, - 0, 678, 680, 681, 313, 312, 319, 332, 330, 343, - 339, 340, 344, 341, 342, 345, 346, 347, 351, 352, - 382, 383, 384, 385, 386, 414, 415, 416, 422, 423, - 335, 424, 425, 428, 426, 427, 432, 433, 434, 448, - 397, 398, 401, 402, 435, 451, 391, 393, 452, 459, - 460, 461, 336, 413, 480, 481, 392, 474, 375, 331, - 387, 449, 456, 436, 0, 0, 484, 337, 314, 374, - 440, 315, 333, 334, 388, 389, 482, 438, 442, 443, - 349, 348, 316, 485, 417, 447, 376, 396, 453, 454, - 455, 458, 473, 390, 478, 476, 477, 405, 412, 444, - 445, 406, 407, 437, 463, 377, 378, 381, 353, 355, - 350, 356, 357, 358, 359, 366, 367, 368, 369, 370, - 371, 372, 486, 487, 489, 418, 419, 420, 421, 429, - 430, 431, 490, 491, 492, 0, 0, 0, 439, 408, - 410, 634, 501, 505, 503, 502, 506, 504, 513, 0, - 0, 509, 510, 511, 512, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 441, 457, 479, 517, 518, - 409, 493, 0, 0, 0, 0, 0, 0, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 635, 399, 400, - 403, 394, 462, 373, 317, 318, 395, 519, 520, 521, - 522, 523, 525, 524, 526, 527, 528, 354, 361, 514, - 516, 515, 360, 0, 380, 446, 488, 379, 411, 362, - 363, 365, 364, 0, 530, 404, 475, 338, 531, 532, - 533, 534, 539, 537, 538, 535, 536, 540, 541, 542, - 543, 545, 546, 544, 557, 0, 561, 562, 0, 0, - 563, 547, 555, 548, 549, 550, 554, 556, 551, 552, - 553, 291, 292, 293, 294, 295, 296, 575, 577, 576, - 579, 580, 581, 582, 578, 605, 607, 608, 609, 610, - 611, 612, 613, 614, 615, 606, 616, 617, 618, 619, - 620, 621, 622, 623, 628, 633, 651, 652, 653, 656, - 654, 655, 657, 658, 659, 660, 670, 671, 672, 673, - 674, 675, 682, 683, 450, 483, 500, 636, 637, 507, - 508, 494, 495, 0, 0, 0, 499, 676, 529, 558, - 559, 560, 498, 496, 497 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 594, + 596, 598, 597, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 614, 0, + 635, 637, 0, 640, 642, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 649, 651, 652, 653, 655, + 656, 654, 657, 658, 659, 660, 0, 0, 0, 0, + 0, 0, 672, 674, 675, 676, 677, 678, 679, 0, + 0, 688, 690, 691, 318, 317, 324, 337, 335, 348, + 344, 345, 349, 346, 347, 350, 351, 352, 356, 357, + 387, 388, 389, 390, 391, 419, 420, 421, 427, 428, + 340, 429, 430, 433, 431, 432, 437, 438, 439, 453, + 402, 403, 406, 407, 440, 457, 396, 398, 458, 465, + 466, 467, 341, 418, 486, 487, 397, 480, 380, 336, + 392, 454, 462, 441, 0, 0, 490, 342, 319, 379, + 445, 320, 338, 339, 393, 394, 488, 443, 447, 448, + 354, 353, 321, 491, 422, 452, 381, 401, 459, 460, + 461, 464, 479, 395, 484, 482, 483, 410, 417, 449, + 450, 411, 412, 442, 469, 382, 383, 386, 358, 360, + 355, 361, 362, 363, 364, 371, 372, 373, 374, 375, + 376, 377, 492, 493, 495, 423, 424, 425, 426, 434, + 435, 436, 496, 497, 498, 0, 0, 0, 444, 413, + 415, 644, 511, 515, 513, 512, 516, 514, 523, 0, + 0, 519, 520, 521, 522, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 446, 463, 485, 527, 528, + 414, 499, 0, 0, 0, 0, 0, 0, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 645, 404, 405, + 408, 399, 468, 378, 322, 323, 400, 529, 530, 531, + 532, 533, 535, 534, 536, 537, 538, 359, 366, 524, + 526, 525, 365, 0, 385, 451, 494, 384, 416, 367, + 368, 370, 369, 0, 540, 409, 481, 343, 541, 0, + 0, 0, 0, 0, 542, 543, 544, 549, 547, 548, + 545, 546, 550, 551, 552, 553, 555, 556, 554, 567, + 0, 571, 572, 0, 0, 573, 557, 565, 558, 559, + 560, 564, 566, 561, 562, 563, 296, 297, 298, 299, + 300, 301, 585, 587, 586, 589, 590, 591, 592, 588, + 615, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 616, 626, 627, 628, 629, 630, 631, 632, 633, 638, + 643, 661, 662, 663, 666, 664, 665, 667, 668, 669, + 670, 680, 681, 682, 683, 684, 685, 692, 693, 455, + 489, 510, 646, 647, 517, 518, 500, 501, 0, 0, + 0, 505, 686, 539, 456, 509, 506, 0, 0, 568, + 569, 570, 504, 502, 503, 507, 508 }; - /* YYPGOTO[NTERM-NUM]. */ +/* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -27, 654, 655, 656, 657, -312, -312, - 658, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, - -312, -312, -312 + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, 669, 670, + 671, 672, 673, -284, -284, 674, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284 }; - /* YYDEFGOTO[NTERM-NUM]. */ +/* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - 0, 1, 17, 18, 19, 32, 270, 20, 33, 504, - 21, 34, 520, 22, 35, 535, 23, 36, 553, 570, - 571, 572, 573, 574, 575, 24, 37, 576, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, - 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 505, 506, - 507, 508, 509, 510, 511, 512, 521, 522, 523, 524, - 525, 526, 527, 554, 555, 556, 557, 558, 559, 560, - 561, 562, 563, 536, 537, 538, 539, 540, 541, 542, - 25, 38, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 26, 39, 619, 620, 621, 622, 623, 624, 625, - 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, - 636, 637, 638, 27, 40, 640, 641, 28, 41, 643, - 644, 491, 492, 493, 494, 29, 42, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 30, 43, - 672, 673, 674, 675, 676, 677, 678, 495, 31, 44, - 681, 682, 683 + 0, 1, 17, 18, 19, 32, 275, 20, 33, 514, + 21, 34, 530, 22, 35, 545, 23, 36, 563, 580, + 581, 582, 583, 584, 585, 24, 37, 586, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 500, 515, 516, 517, 518, 519, 520, 521, + 522, 531, 532, 533, 534, 535, 536, 537, 564, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 546, 547, + 548, 549, 550, 551, 552, 25, 38, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 26, 39, 629, 630, + 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 27, 40, + 650, 651, 28, 41, 653, 654, 501, 502, 503, 504, + 29, 42, 665, 666, 667, 668, 669, 670, 671, 672, + 673, 674, 675, 30, 43, 682, 683, 684, 685, 686, + 687, 688, 505, 31, 44, 691, 692, 693 }; - /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule whose - number is the opposite. If YYTABLE_NINF, syntax error. */ +/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 2, 543, 528, 679, 680, 639, 496, 642, 497, 498, - 577, 3, 4, 513, 684, 543, 685, 686, 687, 688, - 689, 514, 515, 645, 646, 647, 648, 649, 650, 651, - 652, 653, 654, 690, 691, 692, 693, 694, 529, 530, - 666, 667, 668, 669, 670, 671, 5, 695, 696, 697, - 698, 699, 6, 700, 701, 583, 584, 585, 586, 587, - 588, 589, 590, 702, 703, 531, 704, 705, 706, 707, - 708, 499, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, - 618, 709, 710, 711, 712, 713, 7, 714, 715, 716, - 717, 718, 719, 720, 500, 721, 722, 501, 723, 724, - 516, 725, 517, 726, 8, 518, 502, 727, 728, 729, - 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, - 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, - 750, 751, 752, 753, 754, 755, 756, 532, 533, 757, - 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, - 768, 769, 770, 771, 772, 773, 774, 775, 776, 9, - 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 689, 690, 649, 652, 77, 78, 79, 694, + 695, 696, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 553, 676, 677, 678, 679, 680, 681, + 697, 698, 121, 122, 123, 124, 125, 538, 126, 127, + 128, 699, 700, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 553, + 701, 702, 155, 539, 540, 156, 157, 158, 159, 160, + 161, 162, 703, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 704, 705, 706, 707, + 541, 655, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 708, 709, 710, 711, 712, 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, 713, 218, + 714, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 715, 716, 542, 543, 717, 718, 506, 719, 507, 508, + 2, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 3, 4, 523, 720, 721, 722, 723, 248, 724, + 725, 524, 525, 726, 727, 728, 249, 250, 729, 251, + 252, 730, 253, 254, 731, 544, 255, 256, 257, 258, + 259, 260, 261, 262, 732, 733, 5, 263, 734, 735, + 736, 737, 6, 738, 739, 740, 264, 265, 266, 267, + 741, 509, 742, 268, 269, 270, 271, 272, 273, 274, + 743, 744, 555, 556, 557, 558, 745, 746, 747, 748, + 749, 750, 560, 593, 594, 595, 596, 597, 598, 599, + 600, 751, 752, 753, 510, 754, 7, 511, 755, 756, + 574, 575, 576, 577, 578, 757, 512, 758, 759, 760, + 526, 761, 527, 579, 8, 528, 554, 762, 555, 556, + 557, 558, 559, 763, 764, 765, 766, 767, 560, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 628, 768, 769, + 770, 771, 772, 773, 774, 775, 776, 561, 562, 777, + 778, 779, 780, 781, 782, 783, 784, 785, 786, 9, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, - 534, 797, 798, 799, 800, 801, 802, 803, 804, 805, - 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, - 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, - 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, - 836, 10, 837, 838, 839, 840, 841, 842, 843, 844, - 545, 546, 547, 548, 845, 846, 847, 848, 849, 850, - 550, 851, 544, 11, 545, 546, 547, 548, 549, 503, - 852, 853, 854, 855, 550, 519, 856, 857, 564, 565, - 566, 567, 568, 858, 12, 859, 860, 861, 862, 863, - 864, 569, 865, 13, 866, 867, 868, 869, 870, 871, - 872, 873, 874, 551, 552, 875, 876, 877, 878, 879, - 880, 881, 882, 883, 884, 885, 886, 14, 887, 888, - 889, 15, 890, 891, 892, 0, 893, 16, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 894, 895, 896, 897, 77, 78, 79, 898, 899, 900, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 901, 902, 903, 904, 905, 906, 907, 908, 909, - 121, 122, 123, 124, 125, 910, 126, 127, 128, 911, - 912, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 913, 914, 915, - 155, 916, 917, 156, 157, 158, 159, 160, 161, 162, - 918, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 919, 920, 921, 922, 923, 924, - 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, - 935, 936, 937, 938, 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, 939, 218, 940, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 941, 942, - 943, 944, 945, 946, 947, 948, 949, 950, 951, 238, - 239, 240, 241, 242, 243, 244, 245, 246, 247, 952, - 953, 954, 955, 956, 957, 958, 248, 959, 960, 961, - 962, 963, 964, 965, 249, 250, 966, 251, 252, 967, - 253, 254, 968, 969, 255, 256, 257, 258, 259, 260, - 261, 262, 970, 971, 972, 263, 973, 974, 975, 976, - 977, 978, 979, 980, 264, 265, 266, 267, 981, 982, - 983, 268, 269, 984, 985, 986, 987, 988, 989, 990, - 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, - 1011, 1012, 1013, 1014, 0, 0, 0, 0, 0, 0, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, + 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, + 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, + 847, 10, 848, 849, 850, 851, 852, 853, 854, 855, + 856, 857, 858, 859, 860, 861, 862, 863, 864, 513, + 865, 866, 867, 11, 868, 869, 870, 871, 872, 873, + 874, 875, 876, 877, 878, 529, 879, 880, 881, 882, + 883, 884, 885, 886, 12, 887, 888, 889, 890, 891, + 892, 893, 894, 13, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 14, 918, 919, + 920, 15, 921, 922, 923, 924, 925, 16, 926, 927, + 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, + 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, + 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, + 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, + 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, + 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, + 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, + 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, + 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, + 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 578, 579, 580, 581, 582 + 0, 0, 0, 0, 0, 0, 587, 588, 589, 590, + 591, 592 }; static const yytype_int16 yycheck[] = { - 0, 45, 45, 308, 309, 115, 45, 318, 47, 48, - 37, 11, 12, 45, 10, 45, 10, 10, 10, 10, - 10, 53, 54, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 10, 10, 10, 10, 10, 81, 82, - 275, 276, 277, 278, 279, 280, 46, 10, 10, 10, - 10, 10, 52, 10, 10, 97, 98, 99, 100, 101, - 102, 103, 104, 10, 10, 108, 10, 10, 10, 10, - 10, 110, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 10, 10, 10, 10, 10, 96, 10, 10, 10, - 10, 10, 10, 10, 143, 10, 10, 146, 10, 10, - 142, 10, 144, 10, 114, 147, 155, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 190, 191, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 308, 309, 115, 318, 49, 50, 51, 10, + 10, 10, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 45, 275, 276, 277, 278, 279, 280, + 10, 10, 105, 106, 107, 108, 109, 45, 111, 112, + 113, 10, 10, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 45, + 10, 10, 145, 81, 82, 148, 149, 150, 151, 152, + 153, 154, 10, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 10, 10, 10, 10, + 108, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 10, 10, 10, 10, 10, 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, 10, 232, + 10, 234, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 10, 10, 190, 191, 10, 10, 45, 10, 47, 48, + 0, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 11, 12, 45, 10, 10, 10, 10, 281, 10, + 10, 53, 54, 10, 10, 10, 289, 290, 10, 292, + 293, 10, 295, 296, 10, 233, 299, 300, 301, 302, + 303, 304, 305, 306, 10, 10, 46, 310, 10, 10, + 10, 10, 52, 10, 10, 10, 319, 320, 321, 322, + 10, 110, 10, 326, 327, 328, 329, 330, 331, 332, + 10, 10, 284, 285, 286, 287, 10, 10, 10, 10, + 10, 10, 294, 97, 98, 99, 100, 101, 102, 103, + 104, 10, 10, 10, 143, 10, 96, 146, 10, 10, + 312, 313, 314, 315, 316, 10, 155, 10, 10, 10, + 142, 10, 144, 325, 114, 147, 282, 10, 284, 285, + 286, 287, 288, 10, 10, 10, 10, 10, 294, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 323, 324, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 169, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 233, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 231, 10, 10, 10, 10, 10, 10, 10, 10, - 284, 285, 286, 287, 10, 10, 10, 10, 10, 10, - 294, 10, 282, 253, 284, 285, 286, 287, 288, 298, - 10, 10, 10, 10, 294, 297, 10, 10, 312, 313, - 314, 315, 316, 10, 274, 10, 10, 10, 10, 10, - 10, 325, 10, 283, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 323, 324, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 298, + 10, 10, 10, 253, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 297, 10, 10, 10, 10, + 10, 10, 10, 10, 274, 10, 10, 10, 10, 10, + 10, 10, 10, 283, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 307, 10, 10, - 10, 311, 10, 10, 10, -1, 10, 317, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 10, 10, 10, 10, 49, 50, 51, 10, 10, 10, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 105, 106, 107, 108, 109, 10, 111, 112, 113, 10, - 10, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 10, 10, 10, - 145, 10, 10, 148, 149, 150, 151, 152, 153, 154, - 10, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 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, 10, 232, 10, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 10, - 10, 10, 10, 10, 10, 10, 281, 10, 10, 10, - 10, 10, 10, 10, 289, 290, 10, 292, 293, 10, - 295, 296, 10, 10, 299, 300, 301, 302, 303, 304, - 305, 306, 10, 10, 10, 310, 10, 10, 10, 10, - 10, 10, 10, 10, 319, 320, 321, 322, 10, 10, - 10, 326, 327, 10, 10, 10, 10, 10, 10, 10, + 10, 311, 10, 10, 10, 10, 10, 317, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, -1, -1, -1, -1, -1, -1, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 37, 37, 37, 37, 37 + -1, -1, -1, -1, -1, -1, 37, 37, 37, 37, + 37, 37 }; - /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ +/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of + state STATE-NUM. */ static const yytype_int16 yystos[] = { - 0, 329, 0, 11, 12, 46, 52, 96, 114, 169, - 231, 253, 274, 283, 307, 311, 317, 330, 331, 332, - 335, 338, 341, 344, 353, 608, 619, 641, 645, 653, - 666, 676, 333, 336, 339, 342, 345, 354, 609, 620, - 642, 646, 654, 667, 677, 13, 14, 15, 16, 17, + 0, 334, 0, 11, 12, 46, 52, 96, 114, 169, + 231, 253, 274, 283, 307, 311, 317, 335, 336, 337, + 340, 343, 346, 349, 358, 618, 629, 651, 655, 663, + 676, 686, 338, 341, 344, 347, 350, 359, 619, 630, + 652, 656, 664, 677, 687, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 49, 50, 51, @@ -2108,7 +2096,7 @@ static const yytype_int16 yystos[] = 266, 267, 268, 269, 270, 271, 272, 273, 281, 289, 290, 292, 293, 295, 296, 299, 300, 301, 302, 303, 304, 305, 306, 310, 319, 320, 321, 322, 326, 327, - 334, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 328, 329, 330, 331, 332, 339, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, @@ -2130,26 +2118,27 @@ static const yytype_int16 yystos[] = 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, - 575, 649, 650, 651, 652, 675, 45, 47, 48, 110, - 143, 146, 155, 298, 337, 576, 577, 578, 579, 580, - 581, 582, 583, 45, 53, 54, 142, 144, 147, 297, - 340, 584, 585, 586, 587, 588, 589, 590, 45, 81, - 82, 108, 190, 191, 233, 343, 601, 602, 603, 604, - 605, 606, 607, 45, 282, 284, 285, 286, 287, 288, - 294, 323, 324, 346, 591, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 312, 313, 314, 315, 316, 325, - 347, 348, 349, 350, 351, 352, 355, 591, 592, 593, - 594, 595, 598, 97, 98, 99, 100, 101, 102, 103, - 104, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 659, 660, 661, 662, 685, 45, 47, 48, 110, + 143, 146, 155, 298, 342, 586, 587, 588, 589, 590, + 591, 592, 593, 45, 53, 54, 142, 144, 147, 297, + 345, 594, 595, 596, 597, 598, 599, 600, 45, 81, + 82, 108, 190, 191, 233, 348, 611, 612, 613, 614, + 615, 616, 617, 45, 282, 284, 285, 286, 287, 288, + 294, 323, 324, 351, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 312, 313, 314, 315, 316, 325, + 352, 353, 354, 355, 356, 357, 360, 601, 602, 603, + 604, 605, 608, 97, 98, 99, 100, 101, 102, 103, + 104, 620, 621, 622, 623, 624, 625, 626, 627, 628, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 621, - 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, - 632, 633, 634, 635, 636, 637, 638, 639, 640, 115, - 643, 644, 318, 647, 648, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 655, 656, 657, 658, 659, - 660, 661, 662, 663, 664, 665, 275, 276, 277, 278, - 279, 280, 668, 669, 670, 671, 672, 673, 674, 308, - 309, 678, 679, 680, 10, 10, 10, 10, 10, 10, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 115, + 653, 654, 318, 657, 658, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 665, 666, 667, 668, 669, + 670, 671, 672, 673, 674, 675, 275, 276, 277, 278, + 279, 280, 678, 679, 680, 681, 682, 683, 684, 308, + 309, 688, 689, 690, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -2182,44 +2171,45 @@ static const yytype_int16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10 }; - /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ static const yytype_int16 yyr1[] = { - 0, 328, 329, 329, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 331, 332, - 333, 333, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 335, 336, 336, - 337, 337, 337, 337, 337, 337, 337, 337, 338, 339, - 339, 340, 340, 340, 340, 340, 340, 340, 341, 342, - 342, 343, 343, 343, 343, 343, 343, 343, 344, 345, - 345, 346, 346, 346, 346, 346, 346, 346, 346, 346, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 354, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 0, 333, 334, 334, 335, 335, 335, 335, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 336, 337, + 338, 338, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, + 339, 339, 340, 341, 341, 342, 342, 342, 342, 342, + 342, 342, 342, 343, 344, 344, 345, 345, 345, 345, + 345, 345, 345, 346, 347, 347, 348, 348, 348, 348, + 348, 348, 348, 349, 350, 350, 351, 351, 351, 351, + 351, 351, 351, 351, 351, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 359, 360, 360, 360, 360, 360, + 360, 360, 360, 360, 360, 360, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, @@ -2244,22 +2234,23 @@ static const yytype_int16 yyr1[] = 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, 609, 610, 610, 610, - 610, 610, 610, 610, 610, 611, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 620, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 622, 623, 624, 625, 626, - 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, - 637, 638, 639, 640, 641, 642, 642, 643, 644, 645, - 646, 646, 647, 648, 649, 650, 651, 652, 653, 654, - 654, 655, 655, 655, 655, 655, 655, 655, 655, 655, - 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, - 665, 666, 667, 667, 668, 668, 668, 668, 668, 668, - 669, 670, 671, 672, 673, 674, 675, 676, 677, 677, - 678, 678, 679, 680 + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 614, 615, 616, 617, 618, 619, 619, 620, 620, 620, + 620, 620, 620, 620, 620, 621, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 630, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 631, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, + 647, 648, 649, 650, 651, 652, 652, 653, 654, 655, + 656, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 664, 665, 665, 665, 665, 665, 665, 665, 665, 665, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 677, 678, 678, 678, 678, 678, 678, + 679, 680, 681, 682, 683, 684, 685, 686, 687, 687, + 688, 688, 689, 690 }; - /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ static const yytype_int8 yyr2[] = { 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, @@ -2286,14 +2277,14 @@ static const yytype_int8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 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, @@ -2307,11 +2298,12 @@ static const yytype_int8 yyr2[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 3, 4, 4, 4, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 4, 4, 4, 3, 3, 4, 4, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, @@ -2342,6 +2334,7 @@ enum { YYENOMEM = -2 }; #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab +#define YYNOMEM goto yyexhaustedlab #define YYRECOVERING() (!!yyerrstatus) @@ -2382,10 +2375,7 @@ do { \ YYFPRINTF Args; \ } while (0) -/* This macro is provided for backward compatibility. */ -# ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -# endif + # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ @@ -2412,10 +2402,6 @@ yy_symbol_value_print (FILE *yyo, YY_USE (yyoutput); if (!yyvaluep) return; -# ifdef YYPRINT - if (yykind < YYNTOKENS) - YYPRINT (yyo, yytoknum[yykind], *yyvaluep); -# endif YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YY_USE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END @@ -2600,6 +2586,7 @@ yyparse (void) YYDPRINTF ((stderr, "Starting parse\n")); yychar = YYEMPTY; /* Cause a token to be read. */ + goto yysetstate; @@ -2625,7 +2612,7 @@ yysetstate: if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE - goto yyexhaustedlab; + YYNOMEM; #else { /* Get the current used size of the three stacks, in elements. */ @@ -2653,7 +2640,7 @@ yysetstate: # else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; + YYNOMEM; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; @@ -2664,7 +2651,7 @@ yysetstate: YY_CAST (union yyalloc *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) - goto yyexhaustedlab; + YYNOMEM; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE @@ -2686,6 +2673,7 @@ yysetstate: } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ + if (yystate == YYFINAL) YYACCEPT; @@ -2798,25 +2786,25 @@ yyreduce: switch (yyn) { case 18: /* force_toplevel: VAR_FORCE_TOPLEVEL */ -#line 205 "./util/configparser.y" +#line 208 "./util/configparser.y" { OUTYY(("\nP(force-toplevel)\n")); cfg_parser->started_toplevel = 0; } -#line 2807 "util/configparser.c" +#line 2795 "util/configparser.c" break; case 19: /* serverstart: VAR_SERVER */ -#line 212 "./util/configparser.y" +#line 215 "./util/configparser.y" { OUTYY(("\nP(server:)\n")); cfg_parser->started_toplevel = 1; } -#line 2816 "util/configparser.c" +#line 2804 "util/configparser.c" break; - case 247: /* stubstart: VAR_STUB_ZONE */ -#line 322 "./util/configparser.y" + case 252: /* stubstart: VAR_STUB_ZONE */ +#line 327 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2829,11 +2817,11 @@ yyreduce: yyerror("out of memory"); } } -#line 2833 "util/configparser.c" +#line 2821 "util/configparser.c" break; - case 258: /* forwardstart: VAR_FORWARD_ZONE */ -#line 341 "./util/configparser.y" + case 263: /* forwardstart: VAR_FORWARD_ZONE */ +#line 346 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2846,11 +2834,11 @@ yyreduce: yyerror("out of memory"); } } -#line 2850 "util/configparser.c" +#line 2838 "util/configparser.c" break; - case 268: /* viewstart: VAR_VIEW */ -#line 360 "./util/configparser.y" + case 273: /* viewstart: VAR_VIEW */ +#line 365 "./util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2865,11 +2853,11 @@ yyreduce: yyerror("out of memory"); } } -#line 2869 "util/configparser.c" +#line 2857 "util/configparser.c" break; - case 278: /* authstart: VAR_AUTH_ZONE */ -#line 381 "./util/configparser.y" + case 283: /* authstart: VAR_AUTH_ZONE */ +#line 386 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2889,11 +2877,11 @@ yyreduce: yyerror("out of memory"); } } -#line 2893 "util/configparser.c" +#line 2881 "util/configparser.c" break; - case 291: /* rpz_tag: VAR_TAGS STRING_ARG */ -#line 409 "./util/configparser.y" + case 296: /* rpz_tag: VAR_TAGS STRING_ARG */ +#line 414 "./util/configparser.y" { uint8_t* bitlist; size_t len = 0; @@ -2910,11 +2898,11 @@ yyreduce: } } -#line 2914 "util/configparser.c" +#line 2902 "util/configparser.c" break; - case 292: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG */ -#line 428 "./util/configparser.y" + case 297: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG */ +#line 433 "./util/configparser.y" { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && @@ -2929,21 +2917,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2933 "util/configparser.c" +#line 2921 "util/configparser.c" break; - case 293: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG */ -#line 445 "./util/configparser.y" + case 298: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG */ +#line 450 "./util/configparser.y" { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } -#line 2943 "util/configparser.c" +#line 2931 "util/configparser.c" break; - case 294: /* rpz_log: VAR_RPZ_LOG STRING_ARG */ -#line 453 "./util/configparser.y" + case 299: /* rpz_log: VAR_RPZ_LOG STRING_ARG */ +#line 458 "./util/configparser.y" { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2951,21 +2939,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2955 "util/configparser.c" +#line 2943 "util/configparser.c" break; - case 295: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG */ -#line 463 "./util/configparser.y" + case 300: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG */ +#line 468 "./util/configparser.y" { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } -#line 2965 "util/configparser.c" +#line 2953 "util/configparser.c" break; - case 296: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG */ -#line 470 "./util/configparser.y" + case 301: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG */ +#line 475 "./util/configparser.y" { OUTYY(("P(rpz_signal_nxdomain_ra:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2973,11 +2961,11 @@ yyreduce: else cfg_parser->cfg->auths->rpz_signal_nxdomain_ra = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2977 "util/configparser.c" +#line 2965 "util/configparser.c" break; - case 297: /* rpzstart: VAR_RPZ */ -#line 480 "./util/configparser.y" + case 302: /* rpzstart: VAR_RPZ */ +#line 485 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2995,11 +2983,11 @@ yyreduce: yyerror("out of memory"); } } -#line 2999 "util/configparser.c" +#line 2987 "util/configparser.c" break; - case 312: /* server_num_threads: VAR_NUM_THREADS STRING_ARG */ -#line 505 "./util/configparser.y" + case 317: /* server_num_threads: VAR_NUM_THREADS STRING_ARG */ +#line 510 "./util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3007,11 +2995,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3011 "util/configparser.c" +#line 2999 "util/configparser.c" break; - case 313: /* server_verbosity: VAR_VERBOSITY STRING_ARG */ -#line 514 "./util/configparser.y" + case 318: /* server_verbosity: VAR_VERBOSITY STRING_ARG */ +#line 519 "./util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3019,11 +3007,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3023 "util/configparser.c" +#line 3011 "util/configparser.c" break; - case 314: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG */ -#line 523 "./util/configparser.y" + case 319: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG */ +#line 528 "./util/configparser.y" { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -3033,11 +3021,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3037 "util/configparser.c" +#line 3025 "util/configparser.c" break; - case 315: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG */ -#line 534 "./util/configparser.y" + case 320: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG */ +#line 539 "./util/configparser.y" { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3045,11 +3033,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3049 "util/configparser.c" +#line 3037 "util/configparser.c" break; - case 316: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG */ -#line 543 "./util/configparser.y" + case 321: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG */ +#line 548 "./util/configparser.y" { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3057,11 +3045,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3061 "util/configparser.c" +#line 3049 "util/configparser.c" break; - case 317: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG */ -#line 552 "./util/configparser.y" + case 322: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG */ +#line 557 "./util/configparser.y" { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3069,11 +3057,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3073 "util/configparser.c" +#line 3061 "util/configparser.c" break; - case 318: /* server_shm_key: VAR_SHM_KEY STRING_ARG */ -#line 561 "./util/configparser.y" + case 323: /* server_shm_key: VAR_SHM_KEY STRING_ARG */ +#line 566 "./util/configparser.y" { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -3083,11 +3071,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3087 "util/configparser.c" +#line 3075 "util/configparser.c" break; - case 319: /* server_port: VAR_PORT STRING_ARG */ -#line 572 "./util/configparser.y" + case 324: /* server_port: VAR_PORT STRING_ARG */ +#line 577 "./util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3095,11 +3083,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3099 "util/configparser.c" +#line 3087 "util/configparser.c" break; - case 320: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG */ -#line 581 "./util/configparser.y" + case 325: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG */ +#line 586 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -3110,11 +3098,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3114 "util/configparser.c" +#line 3102 "util/configparser.c" break; - case 321: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG */ -#line 593 "./util/configparser.y" + case 326: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG */ +#line 598 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -3126,11 +3114,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3130 "util/configparser.c" +#line 3118 "util/configparser.c" break; - case 322: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG */ -#line 607 "./util/configparser.y" + case 327: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG */ +#line 612 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3144,11 +3132,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3148 "util/configparser.c" +#line 3136 "util/configparser.c" break; - case 323: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG */ -#line 622 "./util/configparser.y" + case 328: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG */ +#line 627 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3158,11 +3146,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3162 "util/configparser.c" +#line 3150 "util/configparser.c" break; - case 324: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG */ -#line 633 "./util/configparser.y" + case 329: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG */ +#line 638 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3178,11 +3166,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3182 "util/configparser.c" +#line 3170 "util/configparser.c" break; - case 325: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG */ -#line 650 "./util/configparser.y" + case 330: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG */ +#line 655 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3198,11 +3186,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3202 "util/configparser.c" +#line 3190 "util/configparser.c" break; - case 326: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG */ -#line 667 "./util/configparser.y" + case 331: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG */ +#line 672 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3218,11 +3206,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3222 "util/configparser.c" +#line 3210 "util/configparser.c" break; - case 327: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG */ -#line 684 "./util/configparser.y" + case 332: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG */ +#line 689 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3238,11 +3226,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3242 "util/configparser.c" +#line 3230 "util/configparser.c" break; - case 328: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG */ -#line 701 "./util/configparser.y" + case 333: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG */ +#line 706 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3256,11 +3244,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3260 "util/configparser.c" +#line 3248 "util/configparser.c" break; - case 329: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG */ -#line 716 "./util/configparser.y" + case 334: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG */ +#line 721 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3274,11 +3262,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3278 "util/configparser.c" +#line 3266 "util/configparser.c" break; - case 330: /* server_interface: VAR_INTERFACE STRING_ARG */ -#line 731 "./util/configparser.y" + case 335: /* server_interface: VAR_INTERFACE STRING_ARG */ +#line 736 "./util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3290,11 +3278,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3294 "util/configparser.c" +#line 3282 "util/configparser.c" break; - case 331: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG */ -#line 744 "./util/configparser.y" + case 336: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG */ +#line 749 "./util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3308,11 +3296,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3312 "util/configparser.c" +#line 3300 "util/configparser.c" break; - case 332: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG */ -#line 759 "./util/configparser.y" + case 337: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG */ +#line 764 "./util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3320,11 +3308,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3324 "util/configparser.c" +#line 3312 "util/configparser.c" break; - case 333: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG */ -#line 768 "./util/configparser.y" + case 338: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG */ +#line 773 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3332,11 +3320,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3336 "util/configparser.c" +#line 3324 "util/configparser.c" break; - case 334: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG */ -#line 777 "./util/configparser.y" + case 339: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG */ +#line 782 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3344,11 +3332,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3348 "util/configparser.c" +#line 3336 "util/configparser.c" break; - case 335: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG */ -#line 786 "./util/configparser.y" + case 340: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG */ +#line 791 "./util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3356,11 +3344,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3360 "util/configparser.c" +#line 3348 "util/configparser.c" break; - case 336: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG */ -#line 795 "./util/configparser.y" + case 341: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG */ +#line 800 "./util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3368,11 +3356,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3372 "util/configparser.c" +#line 3360 "util/configparser.c" break; - case 337: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG */ -#line 804 "./util/configparser.y" + case 342: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG */ +#line 809 "./util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3380,21 +3368,21 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3384 "util/configparser.c" +#line 3372 "util/configparser.c" break; - case 338: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG */ -#line 813 "./util/configparser.y" + case 343: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG */ +#line 818 "./util/configparser.y" { OUTYY(("P(server_interface_automatic_ports:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->if_automatic_ports); cfg_parser->cfg->if_automatic_ports = (yyvsp[0].str); } -#line 3394 "util/configparser.c" +#line 3382 "util/configparser.c" break; - case 339: /* server_do_ip4: VAR_DO_IP4 STRING_ARG */ -#line 820 "./util/configparser.y" + case 344: /* server_do_ip4: VAR_DO_IP4 STRING_ARG */ +#line 825 "./util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3402,11 +3390,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3406 "util/configparser.c" +#line 3394 "util/configparser.c" break; - case 340: /* server_do_ip6: VAR_DO_IP6 STRING_ARG */ -#line 829 "./util/configparser.y" + case 345: /* server_do_ip6: VAR_DO_IP6 STRING_ARG */ +#line 834 "./util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3414,11 +3402,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3418 "util/configparser.c" +#line 3406 "util/configparser.c" break; - case 341: /* server_do_udp: VAR_DO_UDP STRING_ARG */ -#line 838 "./util/configparser.y" + case 346: /* server_do_udp: VAR_DO_UDP STRING_ARG */ +#line 843 "./util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3426,11 +3414,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3430 "util/configparser.c" +#line 3418 "util/configparser.c" break; - case 342: /* server_do_tcp: VAR_DO_TCP STRING_ARG */ -#line 847 "./util/configparser.y" + case 347: /* server_do_tcp: VAR_DO_TCP STRING_ARG */ +#line 852 "./util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3438,11 +3426,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3442 "util/configparser.c" +#line 3430 "util/configparser.c" break; - case 343: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG */ -#line 856 "./util/configparser.y" + case 348: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG */ +#line 861 "./util/configparser.y" { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3450,11 +3438,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3454 "util/configparser.c" +#line 3442 "util/configparser.c" break; - case 344: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG */ -#line 865 "./util/configparser.y" + case 349: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG */ +#line 870 "./util/configparser.y" { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3462,11 +3450,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3466 "util/configparser.c" +#line 3454 "util/configparser.c" break; - case 345: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG */ -#line 874 "./util/configparser.y" + case 350: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG */ +#line 879 "./util/configparser.y" { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3474,11 +3462,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3478 "util/configparser.c" +#line 3466 "util/configparser.c" break; - case 346: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG */ -#line 883 "./util/configparser.y" + case 351: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG */ +#line 888 "./util/configparser.y" { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3486,11 +3474,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3490 "util/configparser.c" +#line 3478 "util/configparser.c" break; - case 347: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG */ -#line 892 "./util/configparser.y" + case 352: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG */ +#line 897 "./util/configparser.y" { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3502,11 +3490,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3506 "util/configparser.c" +#line 3494 "util/configparser.c" break; - case 348: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG */ -#line 905 "./util/configparser.y" + case 353: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG */ +#line 910 "./util/configparser.y" { OUTYY(("P(server_max_reuse_tcp_queries:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3516,11 +3504,11 @@ yyreduce: else cfg_parser->cfg->max_reuse_tcp_queries = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3520 "util/configparser.c" +#line 3508 "util/configparser.c" break; - case 349: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG */ -#line 916 "./util/configparser.y" + case 354: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG */ +#line 921 "./util/configparser.y" { OUTYY(("P(server_tcp_reuse_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3530,11 +3518,11 @@ yyreduce: else cfg_parser->cfg->tcp_reuse_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3534 "util/configparser.c" +#line 3522 "util/configparser.c" break; - case 350: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG */ -#line 927 "./util/configparser.y" + case 355: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG */ +#line 932 "./util/configparser.y" { OUTYY(("P(server_tcp_auth_query_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3544,11 +3532,11 @@ yyreduce: else cfg_parser->cfg->tcp_auth_query_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3548 "util/configparser.c" +#line 3536 "util/configparser.c" break; - case 351: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG */ -#line 938 "./util/configparser.y" + case 356: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG */ +#line 943 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3556,11 +3544,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3560 "util/configparser.c" +#line 3548 "util/configparser.c" break; - case 352: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG */ -#line 947 "./util/configparser.y" + case 357: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG */ +#line 952 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3572,11 +3560,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3576 "util/configparser.c" +#line 3564 "util/configparser.c" break; - case 353: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG */ -#line 960 "./util/configparser.y" + case 358: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG */ +#line 965 "./util/configparser.y" { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3584,11 +3572,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3588 "util/configparser.c" +#line 3576 "util/configparser.c" break; - case 354: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG */ -#line 969 "./util/configparser.y" + case 359: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG */ +#line 974 "./util/configparser.y" { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3596,11 +3584,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3600 "util/configparser.c" +#line 3588 "util/configparser.c" break; - case 355: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG */ -#line 978 "./util/configparser.y" + case 360: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG */ +#line 983 "./util/configparser.y" { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3608,31 +3596,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3612 "util/configparser.c" +#line 3600 "util/configparser.c" break; - case 356: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG */ -#line 987 "./util/configparser.y" + case 361: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG */ +#line 992 "./util/configparser.y" { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3622 "util/configparser.c" +#line 3610 "util/configparser.c" break; - case 357: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG */ -#line 994 "./util/configparser.y" + case 362: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG */ +#line 999 "./util/configparser.y" { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3632 "util/configparser.c" +#line 3620 "util/configparser.c" break; - case 358: /* server_ssl_port: VAR_SSL_PORT STRING_ARG */ -#line 1001 "./util/configparser.y" + case 363: /* server_ssl_port: VAR_SSL_PORT STRING_ARG */ +#line 1006 "./util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3640,21 +3628,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3644 "util/configparser.c" +#line 3632 "util/configparser.c" break; - case 359: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG */ -#line 1010 "./util/configparser.y" + case 364: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG */ +#line 1015 "./util/configparser.y" { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3654 "util/configparser.c" +#line 3642 "util/configparser.c" break; - case 360: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG */ -#line 1017 "./util/configparser.y" + case 365: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG */ +#line 1022 "./util/configparser.y" { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3662,53 +3650,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3666 "util/configparser.c" +#line 3654 "util/configparser.c" break; - case 361: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG */ -#line 1026 "./util/configparser.y" + case 366: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG */ +#line 1031 "./util/configparser.y" { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3677 "util/configparser.c" +#line 3665 "util/configparser.c" break; - case 362: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG */ -#line 1034 "./util/configparser.y" + case 367: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG */ +#line 1039 "./util/configparser.y" { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } -#line 3687 "util/configparser.c" +#line 3675 "util/configparser.c" break; - case 363: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG */ -#line 1041 "./util/configparser.y" + case 368: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG */ +#line 1046 "./util/configparser.y" { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } -#line 3697 "util/configparser.c" +#line 3685 "util/configparser.c" break; - case 364: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG */ -#line 1048 "./util/configparser.y" + case 369: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG */ +#line 1053 "./util/configparser.y" { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3708 "util/configparser.c" +#line 3696 "util/configparser.c" break; - case 365: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG */ -#line 1056 "./util/configparser.y" + case 370: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG */ +#line 1061 "./util/configparser.y" { OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3716,11 +3704,11 @@ yyreduce: else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3720 "util/configparser.c" +#line 3708 "util/configparser.c" break; - case 366: /* server_https_port: VAR_HTTPS_PORT STRING_ARG */ -#line 1065 "./util/configparser.y" + case 371: /* server_https_port: VAR_HTTPS_PORT STRING_ARG */ +#line 1070 "./util/configparser.y" { OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3728,11 +3716,11 @@ yyreduce: else cfg_parser->cfg->https_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3732 "util/configparser.c" +#line 3720 "util/configparser.c" break; - case 367: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG */ -#line 1073 "./util/configparser.y" + case 372: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG */ +#line 1078 "./util/configparser.y" { OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->http_endpoint); @@ -3748,11 +3736,11 @@ yyreduce: cfg_parser->cfg->http_endpoint = (yyvsp[0].str); } } -#line 3752 "util/configparser.c" +#line 3740 "util/configparser.c" break; - case 368: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG */ -#line 1089 "./util/configparser.y" + case 373: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG */ +#line 1094 "./util/configparser.y" { OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3760,11 +3748,11 @@ yyreduce: else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3764 "util/configparser.c" +#line 3752 "util/configparser.c" break; - case 369: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG */ -#line 1097 "./util/configparser.y" + case 374: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG */ +#line 1102 "./util/configparser.y" { OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -3772,11 +3760,11 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3776 "util/configparser.c" +#line 3764 "util/configparser.c" break; - case 370: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG */ -#line 1105 "./util/configparser.y" + case 375: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG */ +#line 1110 "./util/configparser.y" { OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -3784,11 +3772,11 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3788 "util/configparser.c" +#line 3776 "util/configparser.c" break; - case 371: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG */ -#line 1113 "./util/configparser.y" + case 376: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG */ +#line 1118 "./util/configparser.y" { OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3796,11 +3784,11 @@ yyreduce: else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3800 "util/configparser.c" +#line 3788 "util/configparser.c" break; - case 372: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG */ -#line 1121 "./util/configparser.y" + case 377: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG */ +#line 1126 "./util/configparser.y" { OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3808,11 +3796,11 @@ yyreduce: else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3812 "util/configparser.c" +#line 3800 "util/configparser.c" break; - case 373: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG */ -#line 1129 "./util/configparser.y" + case 378: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG */ +#line 1134 "./util/configparser.y" { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3820,11 +3808,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3824 "util/configparser.c" +#line 3812 "util/configparser.c" break; - case 374: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG */ -#line 1138 "./util/configparser.y" + case 379: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG */ +#line 1143 "./util/configparser.y" { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3832,11 +3820,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3836 "util/configparser.c" +#line 3824 "util/configparser.c" break; - case 375: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG */ -#line 1147 "./util/configparser.y" + case 380: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG */ +#line 1152 "./util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3849,11 +3837,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3853 "util/configparser.c" +#line 3841 "util/configparser.c" break; - case 376: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG */ -#line 1161 "./util/configparser.y" + case 381: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG */ +#line 1166 "./util/configparser.y" { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3861,11 +3849,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3865 "util/configparser.c" +#line 3853 "util/configparser.c" break; - case 377: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG */ -#line 1170 "./util/configparser.y" + case 382: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG */ +#line 1175 "./util/configparser.y" { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3873,11 +3861,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3877 "util/configparser.c" +#line 3865 "util/configparser.c" break; - case 378: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG */ -#line 1179 "./util/configparser.y" + case 383: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG */ +#line 1184 "./util/configparser.y" { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3885,11 +3873,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3889 "util/configparser.c" +#line 3877 "util/configparser.c" break; - case 379: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG */ -#line 1188 "./util/configparser.y" + case 384: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG */ +#line 1193 "./util/configparser.y" { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3897,11 +3885,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3901 "util/configparser.c" +#line 3889 "util/configparser.c" break; - case 380: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG */ -#line 1197 "./util/configparser.y" + case 385: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG */ +#line 1202 "./util/configparser.y" { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3909,11 +3897,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3913 "util/configparser.c" +#line 3901 "util/configparser.c" break; - case 381: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG */ -#line 1206 "./util/configparser.y" + case 386: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG */ +#line 1211 "./util/configparser.y" { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3921,31 +3909,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3925 "util/configparser.c" +#line 3913 "util/configparser.c" break; - case 382: /* server_chroot: VAR_CHROOT STRING_ARG */ -#line 1215 "./util/configparser.y" + case 387: /* server_chroot: VAR_CHROOT STRING_ARG */ +#line 1220 "./util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3935 "util/configparser.c" +#line 3923 "util/configparser.c" break; - case 383: /* server_username: VAR_USERNAME STRING_ARG */ -#line 1222 "./util/configparser.y" + case 388: /* server_username: VAR_USERNAME STRING_ARG */ +#line 1227 "./util/configparser.y" { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3945 "util/configparser.c" +#line 3933 "util/configparser.c" break; - case 384: /* server_directory: VAR_DIRECTORY STRING_ARG */ -#line 1229 "./util/configparser.y" + case 389: /* server_directory: VAR_DIRECTORY STRING_ARG */ +#line 1234 "./util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3970,105 +3958,105 @@ yyreduce: } } } -#line 3974 "util/configparser.c" +#line 3962 "util/configparser.c" break; - case 385: /* server_logfile: VAR_LOGFILE STRING_ARG */ -#line 1255 "./util/configparser.y" + case 390: /* server_logfile: VAR_LOGFILE STRING_ARG */ +#line 1260 "./util/configparser.y" { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3985 "util/configparser.c" +#line 3973 "util/configparser.c" break; - case 386: /* server_pidfile: VAR_PIDFILE STRING_ARG */ -#line 1263 "./util/configparser.y" + case 391: /* server_pidfile: VAR_PIDFILE STRING_ARG */ +#line 1268 "./util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3995 "util/configparser.c" +#line 3983 "util/configparser.c" break; - case 387: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG */ -#line 1270 "./util/configparser.y" + case 392: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG */ +#line 1275 "./util/configparser.y" { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4005 "util/configparser.c" +#line 3993 "util/configparser.c" break; - case 388: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG */ -#line 1277 "./util/configparser.y" + case 393: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG */ +#line 1282 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor-file ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 4015 "util/configparser.c" +#line 4003 "util/configparser.c" break; - case 389: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG */ -#line 1284 "./util/configparser.y" + case 394: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG */ +#line 1289 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 4025 "util/configparser.c" +#line 4013 "util/configparser.c" break; - case 390: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG */ -#line 1291 "./util/configparser.y" + case 395: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG */ +#line 1296 "./util/configparser.y" { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4036 "util/configparser.c" +#line 4024 "util/configparser.c" break; - case 391: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG */ -#line 1299 "./util/configparser.y" + case 396: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG */ +#line 1304 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4047 "util/configparser.c" +#line 4035 "util/configparser.c" break; - case 392: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG */ -#line 1307 "./util/configparser.y" + case 397: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG */ +#line 1312 "./util/configparser.y" { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4058 "util/configparser.c" +#line 4046 "util/configparser.c" break; - case 393: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG */ -#line 1315 "./util/configparser.y" + case 398: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG */ +#line 1320 "./util/configparser.y" { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4068 "util/configparser.c" +#line 4056 "util/configparser.c" break; - case 394: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG */ -#line 1322 "./util/configparser.y" + case 399: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG */ +#line 1327 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4078,11 +4066,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4082 "util/configparser.c" +#line 4070 "util/configparser.c" break; - case 395: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG */ -#line 1333 "./util/configparser.y" + case 400: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG */ +#line 1338 "./util/configparser.y" { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4092,21 +4080,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4096 "util/configparser.c" +#line 4084 "util/configparser.c" break; - case 396: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG */ -#line 1344 "./util/configparser.y" + case 401: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG */ +#line 1349 "./util/configparser.y" { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4106 "util/configparser.c" +#line 4094 "util/configparser.c" break; - case 397: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG */ -#line 1351 "./util/configparser.y" + case 402: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG */ +#line 1356 "./util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4114,11 +4102,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4118 "util/configparser.c" +#line 4106 "util/configparser.c" break; - case 398: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG */ -#line 1360 "./util/configparser.y" + case 403: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG */ +#line 1365 "./util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4126,11 +4114,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4130 "util/configparser.c" +#line 4118 "util/configparser.c" break; - case 399: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG */ -#line 1369 "./util/configparser.y" + case 404: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG */ +#line 1374 "./util/configparser.y" { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4138,11 +4126,11 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4142 "util/configparser.c" +#line 4130 "util/configparser.c" break; - case 400: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG */ -#line 1378 "./util/configparser.y" + case 405: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG */ +#line 1383 "./util/configparser.y" { OUTYY(("P(server_hide_user_agent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4150,41 +4138,41 @@ yyreduce: else cfg_parser->cfg->hide_http_user_agent = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4154 "util/configparser.c" +#line 4142 "util/configparser.c" break; - case 401: /* server_identity: VAR_IDENTITY STRING_ARG */ -#line 1387 "./util/configparser.y" + case 406: /* server_identity: VAR_IDENTITY STRING_ARG */ +#line 1392 "./util/configparser.y" { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 4164 "util/configparser.c" +#line 4152 "util/configparser.c" break; - case 402: /* server_version: VAR_VERSION STRING_ARG */ -#line 1394 "./util/configparser.y" + case 407: /* server_version: VAR_VERSION STRING_ARG */ +#line 1399 "./util/configparser.y" { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 4174 "util/configparser.c" +#line 4162 "util/configparser.c" break; - case 403: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG */ -#line 1401 "./util/configparser.y" + case 408: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG */ +#line 1406 "./util/configparser.y" { OUTYY(("P(server_http_user_agent:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->http_user_agent); cfg_parser->cfg->http_user_agent = (yyvsp[0].str); } -#line 4184 "util/configparser.c" +#line 4172 "util/configparser.c" break; - case 404: /* server_nsid: VAR_NSID STRING_ARG */ -#line 1408 "./util/configparser.y" + case 409: /* server_nsid: VAR_NSID STRING_ARG */ +#line 1413 "./util/configparser.y" { OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->nsid_cfg_str); @@ -4199,33 +4187,33 @@ yyreduce: yyerror("the NSID must be either a hex string or an " "ascii character string prepended with ascii_."); } -#line 4203 "util/configparser.c" +#line 4191 "util/configparser.c" break; - case 405: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG */ -#line 1424 "./util/configparser.y" + case 410: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG */ +#line 1429 "./util/configparser.y" { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4214 "util/configparser.c" +#line 4202 "util/configparser.c" break; - case 406: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG */ -#line 1432 "./util/configparser.y" + case 411: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG */ +#line 1437 "./util/configparser.y" { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4225 "util/configparser.c" +#line 4213 "util/configparser.c" break; - case 407: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG */ -#line 1440 "./util/configparser.y" + case 412: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG */ +#line 1445 "./util/configparser.y" { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4234,11 +4222,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4238 "util/configparser.c" +#line 4226 "util/configparser.c" break; - case 408: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG */ -#line 1450 "./util/configparser.y" + case 413: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG */ +#line 1455 "./util/configparser.y" { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4247,11 +4235,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4251 "util/configparser.c" +#line 4239 "util/configparser.c" break; - case 409: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG */ -#line 1460 "./util/configparser.y" + case 414: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG */ +#line 1465 "./util/configparser.y" { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4260,11 +4248,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4264 "util/configparser.c" +#line 4252 "util/configparser.c" break; - case 410: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG */ -#line 1470 "./util/configparser.y" + case 415: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG */ +#line 1475 "./util/configparser.y" { OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4277,22 +4265,22 @@ yyreduce: cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4281 "util/configparser.c" +#line 4269 "util/configparser.c" break; - case 411: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG */ -#line 1484 "./util/configparser.y" + case 416: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG */ +#line 1489 "./util/configparser.y" { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4292 "util/configparser.c" +#line 4280 "util/configparser.c" break; - case 412: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG */ -#line 1492 "./util/configparser.y" + case 417: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG */ +#line 1497 "./util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4304,11 +4292,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4308 "util/configparser.c" +#line 4296 "util/configparser.c" break; - case 413: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG */ -#line 1505 "./util/configparser.y" + case 418: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG */ +#line 1510 "./util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4318,22 +4306,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4322 "util/configparser.c" +#line 4310 "util/configparser.c" break; - case 414: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG */ -#line 1516 "./util/configparser.y" + case 419: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG */ +#line 1521 "./util/configparser.y" { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4333 "util/configparser.c" +#line 4321 "util/configparser.c" break; - case 415: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG */ -#line 1524 "./util/configparser.y" + case 420: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG */ +#line 1529 "./util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -4345,11 +4333,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4349 "util/configparser.c" +#line 4337 "util/configparser.c" break; - case 416: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG */ -#line 1537 "./util/configparser.y" + case 421: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG */ +#line 1542 "./util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4357,11 +4345,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4361 "util/configparser.c" +#line 4349 "util/configparser.c" break; - case 417: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG */ -#line 1546 "./util/configparser.y" + case 422: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG */ +#line 1551 "./util/configparser.y" { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4369,11 +4357,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4373 "util/configparser.c" +#line 4361 "util/configparser.c" break; - case 418: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG */ -#line 1555 "./util/configparser.y" + case 423: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG */ +#line 1560 "./util/configparser.y" { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4381,11 +4369,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4385 "util/configparser.c" +#line 4373 "util/configparser.c" break; - case 419: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG */ -#line 1564 "./util/configparser.y" + case 424: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG */ +#line 1569 "./util/configparser.y" { OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4393,11 +4381,11 @@ yyreduce: else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4397 "util/configparser.c" +#line 4385 "util/configparser.c" break; - case 420: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG */ -#line 1573 "./util/configparser.y" + case 425: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG */ +#line 1578 "./util/configparser.y" { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4406,11 +4394,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4410 "util/configparser.c" +#line 4398 "util/configparser.c" break; - case 421: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG */ -#line 1583 "./util/configparser.y" + case 426: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG */ +#line 1588 "./util/configparser.y" { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4419,22 +4407,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4423 "util/configparser.c" +#line 4411 "util/configparser.c" break; - case 422: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG */ -#line 1593 "./util/configparser.y" + case 427: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG */ +#line 1598 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4434 "util/configparser.c" +#line 4422 "util/configparser.c" break; - case 423: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG */ -#line 1601 "./util/configparser.y" + case 428: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG */ +#line 1606 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -4446,11 +4434,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4450 "util/configparser.c" +#line 4438 "util/configparser.c" break; - case 424: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG */ -#line 1614 "./util/configparser.y" + case 429: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG */ +#line 1619 "./util/configparser.y" { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4458,22 +4446,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4462 "util/configparser.c" +#line 4450 "util/configparser.c" break; - case 425: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG */ -#line 1623 "./util/configparser.y" + case 430: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG */ +#line 1628 "./util/configparser.y" { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4473 "util/configparser.c" +#line 4461 "util/configparser.c" break; - case 426: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG */ -#line 1631 "./util/configparser.y" + case 431: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG */ +#line 1636 "./util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4481,22 +4469,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4485 "util/configparser.c" +#line 4473 "util/configparser.c" break; - case 427: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG */ -#line 1640 "./util/configparser.y" + case 432: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG */ +#line 1645 "./util/configparser.y" { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4496 "util/configparser.c" +#line 4484 "util/configparser.c" break; - case 428: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG */ -#line 1648 "./util/configparser.y" + case 433: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG */ +#line 1653 "./util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -4508,11 +4496,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4512 "util/configparser.c" +#line 4500 "util/configparser.c" break; - case 429: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG */ -#line 1661 "./util/configparser.y" + case 434: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG */ +#line 1666 "./util/configparser.y" { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4520,11 +4508,11 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4524 "util/configparser.c" +#line 4512 "util/configparser.c" break; - case 430: /* server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG */ -#line 1670 "./util/configparser.y" + case 435: /* server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG */ +#line 1675 "./util/configparser.y" { OUTYY(("P(server_infra_cache_max_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4532,11 +4520,11 @@ yyreduce: else cfg_parser->cfg->infra_cache_max_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4536 "util/configparser.c" +#line 4524 "util/configparser.c" break; - case 431: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG */ -#line 1679 "./util/configparser.y" + case 436: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG */ +#line 1684 "./util/configparser.y" { OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4545,21 +4533,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4549 "util/configparser.c" +#line 4537 "util/configparser.c" break; - case 432: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG */ -#line 1689 "./util/configparser.y" + case 437: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG */ +#line 1694 "./util/configparser.y" { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 4559 "util/configparser.c" +#line 4547 "util/configparser.c" break; - case 433: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG */ -#line 1696 "./util/configparser.y" + case 438: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG */ +#line 1701 "./util/configparser.y" { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4568,11 +4556,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4572 "util/configparser.c" +#line 4560 "util/configparser.c" break; - case 434: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG */ -#line 1706 "./util/configparser.y" + case 439: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG */ +#line 1711 "./util/configparser.y" { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4581,11 +4569,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4585 "util/configparser.c" +#line 4573 "util/configparser.c" break; - case 435: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG */ -#line 1716 "./util/configparser.y" + case 440: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG */ +#line 1721 "./util/configparser.y" { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4594,11 +4582,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4598 "util/configparser.c" +#line 4586 "util/configparser.c" break; - case 436: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG */ -#line 1726 "./util/configparser.y" + case 441: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG */ +#line 1731 "./util/configparser.y" { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4607,11 +4595,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4611 "util/configparser.c" +#line 4599 "util/configparser.c" break; - case 437: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG */ -#line 1736 "./util/configparser.y" + case 442: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG */ +#line 1741 "./util/configparser.y" { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4620,11 +4608,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4624 "util/configparser.c" +#line 4612 "util/configparser.c" break; - case 438: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG */ -#line 1746 "./util/configparser.y" + case 443: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG */ +#line 1751 "./util/configparser.y" { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4633,11 +4621,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4637 "util/configparser.c" +#line 4625 "util/configparser.c" break; - case 439: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG */ -#line 1756 "./util/configparser.y" + case 444: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG */ +#line 1761 "./util/configparser.y" { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4646,11 +4634,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4650 "util/configparser.c" +#line 4638 "util/configparser.c" break; - case 440: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG */ -#line 1766 "./util/configparser.y" + case 445: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG */ +#line 1771 "./util/configparser.y" { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4659,41 +4647,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4663 "util/configparser.c" +#line 4651 "util/configparser.c" break; - case 441: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG */ -#line 1776 "./util/configparser.y" + case 446: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG */ +#line 1781 "./util/configparser.y" { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4673 "util/configparser.c" +#line 4661 "util/configparser.c" break; - case 442: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG */ -#line 1783 "./util/configparser.y" + case 447: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG */ +#line 1788 "./util/configparser.y" { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4683 "util/configparser.c" +#line 4671 "util/configparser.c" break; - case 443: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG */ -#line 1790 "./util/configparser.y" + case 448: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG */ +#line 1795 "./util/configparser.y" { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4693 "util/configparser.c" +#line 4681 "util/configparser.c" break; - case 444: /* server_prefetch: VAR_PREFETCH STRING_ARG */ -#line 1797 "./util/configparser.y" + case 449: /* server_prefetch: VAR_PREFETCH STRING_ARG */ +#line 1802 "./util/configparser.y" { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4701,11 +4689,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4705 "util/configparser.c" +#line 4693 "util/configparser.c" break; - case 445: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG */ -#line 1806 "./util/configparser.y" + case 450: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG */ +#line 1811 "./util/configparser.y" { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4713,11 +4701,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4717 "util/configparser.c" +#line 4705 "util/configparser.c" break; - case 446: /* server_deny_any: VAR_DENY_ANY STRING_ARG */ -#line 1815 "./util/configparser.y" + case 451: /* server_deny_any: VAR_DENY_ANY STRING_ARG */ +#line 1820 "./util/configparser.y" { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4725,11 +4713,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4729 "util/configparser.c" +#line 4717 "util/configparser.c" break; - case 447: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG */ -#line 1824 "./util/configparser.y" + case 452: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG */ +#line 1829 "./util/configparser.y" { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4737,21 +4725,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4741 "util/configparser.c" +#line 4729 "util/configparser.c" break; - case 448: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG */ -#line 1833 "./util/configparser.y" + case 453: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG */ +#line 1838 "./util/configparser.y" { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4751 "util/configparser.c" +#line 4739 "util/configparser.c" break; - case 449: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG */ -#line 1840 "./util/configparser.y" + case 454: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG */ +#line 1845 "./util/configparser.y" { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4760,44 +4748,44 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4764 "util/configparser.c" +#line 4752 "util/configparser.c" break; - case 450: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG */ -#line 1850 "./util/configparser.y" + case 455: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG */ +#line 1855 "./util/configparser.y" { 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 && - strcmp((yyvsp[0].str), "deny_non_local")!=0 && - strcmp((yyvsp[0].str), "refuse_non_local")!=0 && - strcmp((yyvsp[0].str), "allow_setrd")!=0 && - strcmp((yyvsp[0].str), "allow")!=0 && - strcmp((yyvsp[0].str), "allow_snoop")!=0) { - yyerror("expected deny, refuse, deny_non_local, " - "refuse_non_local, allow, allow_setrd or " - "allow_snoop in access control action"); - free((yyvsp[-1].str)); - free((yyvsp[0].str)); - } else { - if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str))) - fatal_exit("out of memory adding acl"); - } + validate_acl_action((yyvsp[0].str)); + if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str))) + fatal_exit("out of memory adding acl"); } -#line 4787 "util/configparser.c" +#line 4763 "util/configparser.c" break; - case 451: /* server_module_conf: VAR_MODULE_CONF STRING_ARG */ -#line 1870 "./util/configparser.y" + case 456: /* server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG */ +#line 1863 "./util/configparser.y" + { + OUTYY(("P(server_interface_action:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); + validate_acl_action((yyvsp[0].str)); + if(!cfg_str2list_insert( + &cfg_parser->cfg->interface_actions, (yyvsp[-1].str), (yyvsp[0].str))) + fatal_exit("out of memory adding acl"); + } +#line 4775 "util/configparser.c" + break; + + case 457: /* server_module_conf: VAR_MODULE_CONF STRING_ARG */ +#line 1872 "./util/configparser.y" { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4797 "util/configparser.c" +#line 4785 "util/configparser.c" break; - case 452: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG */ -#line 1877 "./util/configparser.y" + case 458: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG */ +#line 1879 "./util/configparser.y" { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4814,11 +4802,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4818 "util/configparser.c" +#line 4806 "util/configparser.c" break; - case 453: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG */ -#line 1895 "./util/configparser.y" + case 459: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG */ +#line 1897 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4830,11 +4818,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4834 "util/configparser.c" +#line 4822 "util/configparser.c" break; - case 454: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG */ -#line 1908 "./util/configparser.y" + case 460: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG */ +#line 1910 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4846,11 +4834,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4850 "util/configparser.c" +#line 4838 "util/configparser.c" break; - case 455: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG */ -#line 1921 "./util/configparser.y" + case 461: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG */ +#line 1923 "./util/configparser.y" { OUTYY(("P(server_val_max_restart:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4862,11 +4850,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4866 "util/configparser.c" +#line 4854 "util/configparser.c" break; - case 456: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG */ -#line 1934 "./util/configparser.y" + case 462: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG */ +#line 1936 "./util/configparser.y" { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4874,11 +4862,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4878 "util/configparser.c" +#line 4866 "util/configparser.c" break; - case 457: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG */ -#line 1943 "./util/configparser.y" + case 463: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG */ +#line 1945 "./util/configparser.y" { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4886,11 +4874,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4890 "util/configparser.c" +#line 4878 "util/configparser.c" break; - case 458: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG */ -#line 1952 "./util/configparser.y" + case 464: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG */ +#line 1954 "./util/configparser.y" { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4898,11 +4886,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4902 "util/configparser.c" +#line 4890 "util/configparser.c" break; - case 459: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG */ -#line 1961 "./util/configparser.y" + case 465: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG */ +#line 1963 "./util/configparser.y" { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4910,11 +4898,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4914 "util/configparser.c" +#line 4902 "util/configparser.c" break; - case 460: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG */ -#line 1970 "./util/configparser.y" + case 466: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG */ +#line 1972 "./util/configparser.y" { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4923,11 +4911,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4927 "util/configparser.c" +#line 4915 "util/configparser.c" break; - case 461: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG */ -#line 1980 "./util/configparser.y" + case 467: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG */ +#line 1982 "./util/configparser.y" { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4936,11 +4924,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4940 "util/configparser.c" +#line 4928 "util/configparser.c" break; - case 462: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG */ -#line 1990 "./util/configparser.y" + case 468: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG */ +#line 1992 "./util/configparser.y" { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4950,11 +4938,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4954 "util/configparser.c" +#line 4942 "util/configparser.c" break; - case 463: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG */ -#line 2001 "./util/configparser.y" + case 469: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG */ +#line 2003 "./util/configparser.y" { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4962,11 +4950,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4966 "util/configparser.c" +#line 4954 "util/configparser.c" break; - case 464: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG */ -#line 2010 "./util/configparser.y" + case 470: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG */ +#line 2012 "./util/configparser.y" { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4974,11 +4962,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4978 "util/configparser.c" +#line 4966 "util/configparser.c" break; - case 465: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG */ -#line 2019 "./util/configparser.y" + case 471: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG */ +#line 2021 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4986,11 +4974,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4990 "util/configparser.c" +#line 4978 "util/configparser.c" break; - case 466: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG */ -#line 2028 "./util/configparser.y" + case 472: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG */ +#line 2030 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4998,11 +4986,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5002 "util/configparser.c" +#line 4990 "util/configparser.c" break; - case 467: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG */ -#line 2037 "./util/configparser.y" + case 473: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG */ +#line 2039 "./util/configparser.y" { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5010,11 +4998,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5014 "util/configparser.c" +#line 5002 "util/configparser.c" break; - case 468: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG */ -#line 2046 "./util/configparser.y" + case 474: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG */ +#line 2048 "./util/configparser.y" { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5022,11 +5010,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5026 "util/configparser.c" +#line 5014 "util/configparser.c" break; - case 469: /* server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG */ -#line 2055 "./util/configparser.y" + case 475: /* server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG */ +#line 2057 "./util/configparser.y" { OUTYY(("P(server_ede_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5034,11 +5022,11 @@ yyreduce: else cfg_parser->cfg->ede_serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5038 "util/configparser.c" +#line 5026 "util/configparser.c" break; - case 470: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG */ -#line 2064 "./util/configparser.y" + case 476: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG */ +#line 2066 "./util/configparser.y" { OUTYY(("P(server_serve_original_ttl:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5046,11 +5034,11 @@ yyreduce: else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5050 "util/configparser.c" +#line 5038 "util/configparser.c" break; - case 471: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG */ -#line 2073 "./util/configparser.y" + case 477: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG */ +#line 2075 "./util/configparser.y" { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5062,11 +5050,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5066 "util/configparser.c" +#line 5054 "util/configparser.c" break; - case 472: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG */ -#line 2086 "./util/configparser.y" + case 478: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG */ +#line 2088 "./util/configparser.y" { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5078,11 +5066,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5082 "util/configparser.c" +#line 5070 "util/configparser.c" break; - case 473: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG */ -#line 2099 "./util/configparser.y" + case 479: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG */ +#line 2101 "./util/configparser.y" { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5090,21 +5078,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5094 "util/configparser.c" +#line 5082 "util/configparser.c" break; - case 474: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG */ -#line 2108 "./util/configparser.y" + case 480: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG */ +#line 2110 "./util/configparser.y" { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 5104 "util/configparser.c" +#line 5092 "util/configparser.c" break; - case 475: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG */ -#line 2115 "./util/configparser.y" + case 481: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG */ +#line 2117 "./util/configparser.y" { OUTYY(("P(server_zonemd_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5112,11 +5100,11 @@ yyreduce: else cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5116 "util/configparser.c" +#line 5104 "util/configparser.c" break; - case 476: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG */ -#line 2124 "./util/configparser.y" + case 482: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG */ +#line 2126 "./util/configparser.y" { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5124,11 +5112,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5128 "util/configparser.c" +#line 5116 "util/configparser.c" break; - case 477: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG */ -#line 2133 "./util/configparser.y" + case 483: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG */ +#line 2135 "./util/configparser.y" { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5136,11 +5124,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5140 "util/configparser.c" +#line 5128 "util/configparser.c" break; - case 478: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG */ -#line 2142 "./util/configparser.y" + case 484: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG */ +#line 2144 "./util/configparser.y" { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5148,11 +5136,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5152 "util/configparser.c" +#line 5140 "util/configparser.c" break; - case 479: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG */ -#line 2151 "./util/configparser.y" + case 485: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG */ +#line 2153 "./util/configparser.y" { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5161,22 +5149,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5165 "util/configparser.c" +#line 5153 "util/configparser.c" break; - case 480: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG */ -#line 2160 "./util/configparser.y" + case 486: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG */ +#line 2162 "./util/configparser.y" { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5176 "util/configparser.c" +#line 5164 "util/configparser.c" break; - case 481: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG */ -#line 2168 "./util/configparser.y" + case 487: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG */ +#line 2170 "./util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -5188,22 +5176,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5192 "util/configparser.c" +#line 5180 "util/configparser.c" break; - case 482: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG */ -#line 2181 "./util/configparser.y" + case 488: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG */ +#line 2183 "./util/configparser.y" { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5203 "util/configparser.c" +#line 5191 "util/configparser.c" break; - case 483: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ -#line 2189 "./util/configparser.y" + case 489: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ +#line 2191 "./util/configparser.y" { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5257,21 +5245,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5261 "util/configparser.c" +#line 5249 "util/configparser.c" break; - case 484: /* server_local_data: VAR_LOCAL_DATA STRING_ARG */ -#line 2244 "./util/configparser.y" + case 490: /* server_local_data: VAR_LOCAL_DATA STRING_ARG */ +#line 2246 "./util/configparser.y" { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 5271 "util/configparser.c" +#line 5259 "util/configparser.c" break; - case 485: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ -#line 2251 "./util/configparser.y" + case 491: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ +#line 2253 "./util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5285,11 +5273,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5289 "util/configparser.c" +#line 5277 "util/configparser.c" break; - case 486: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG */ -#line 2266 "./util/configparser.y" + case 492: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG */ +#line 2268 "./util/configparser.y" { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5298,11 +5286,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5302 "util/configparser.c" +#line 5290 "util/configparser.c" break; - case 487: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG */ -#line 2276 "./util/configparser.y" + case 493: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG */ +#line 2278 "./util/configparser.y" { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5311,41 +5299,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5315 "util/configparser.c" +#line 5303 "util/configparser.c" break; - case 488: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG */ -#line 2286 "./util/configparser.y" + case 494: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG */ +#line 2288 "./util/configparser.y" { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5325 "util/configparser.c" +#line 5313 "util/configparser.c" break; - case 489: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG */ -#line 2293 "./util/configparser.y" + case 495: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG */ +#line 2295 "./util/configparser.y" { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5335 "util/configparser.c" +#line 5323 "util/configparser.c" break; - case 490: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG */ -#line 2300 "./util/configparser.y" + case 496: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG */ +#line 2302 "./util/configparser.y" { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 5345 "util/configparser.c" +#line 5333 "util/configparser.c" break; - case 491: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG */ -#line 2307 "./util/configparser.y" + case 497: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG */ +#line 2309 "./util/configparser.y" { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5353,22 +5341,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5357 "util/configparser.c" +#line 5345 "util/configparser.c" break; - case 492: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG */ -#line 2316 "./util/configparser.y" + case 498: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG */ +#line 2318 "./util/configparser.y" { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } -#line 5368 "util/configparser.c" +#line 5356 "util/configparser.c" break; - case 493: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG */ -#line 2324 "./util/configparser.y" + case 499: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG */ +#line 2326 "./util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -5381,11 +5369,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5385 "util/configparser.c" +#line 5373 "util/configparser.c" break; - case 494: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG */ -#line 2338 "./util/configparser.y" + case 500: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG */ +#line 2340 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5405,11 +5393,11 @@ yyreduce: } } } -#line 5409 "util/configparser.c" +#line 5397 "util/configparser.c" break; - case 495: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG */ -#line 2359 "./util/configparser.y" + case 501: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG */ +#line 2361 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5429,11 +5417,11 @@ yyreduce: } } } -#line 5433 "util/configparser.c" +#line 5421 "util/configparser.c" break; - case 496: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ -#line 2380 "./util/configparser.y" + case 502: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ +#line 2382 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -5444,11 +5432,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5448 "util/configparser.c" +#line 5436 "util/configparser.c" break; - case 497: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ -#line 2392 "./util/configparser.y" + case 503: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ +#line 2394 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -5459,11 +5447,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5463 "util/configparser.c" +#line 5451 "util/configparser.c" break; - case 498: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG */ -#line 2404 "./util/configparser.y" + case 504: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG */ +#line 2406 "./util/configparser.y" { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -5474,11 +5462,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5478 "util/configparser.c" +#line 5466 "util/configparser.c" break; - case 499: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG */ -#line 2416 "./util/configparser.y" + case 505: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG */ +#line 2418 "./util/configparser.y" { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -5486,11 +5474,77 @@ yyreduce: yyerror("out of memory"); } } -#line 5490 "util/configparser.c" +#line 5478 "util/configparser.c" break; - case 500: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG */ -#line 2425 "./util/configparser.y" + case 506: /* server_interface_tag: VAR_INTERFACE_TAG STRING_ARG STRING_ARG */ +#line 2427 "./util/configparser.y" + { + size_t len = 0; + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), + &len); + free((yyvsp[0].str)); + OUTYY(("P(server_interface_tag:%s)\n", (yyvsp[-1].str))); + if(!bitlist) { + yyerror("could not parse tags, (define-tag them first)"); + free((yyvsp[-1].str)); + } + if(bitlist) { + if(!cfg_strbytelist_insert( + &cfg_parser->cfg->interface_tags, + (yyvsp[-1].str), bitlist, len)) { + yyerror("out of memory"); + free((yyvsp[-1].str)); + } + } + } +#line 5502 "util/configparser.c" + break; + + case 507: /* server_interface_tag_action: VAR_INTERFACE_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ +#line 2448 "./util/configparser.y" + { + OUTYY(("P(server_interface_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); + if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_actions, + (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { + yyerror("out of memory"); + free((yyvsp[-2].str)); + free((yyvsp[-1].str)); + free((yyvsp[0].str)); + } + } +#line 5517 "util/configparser.c" + break; + + case 508: /* server_interface_tag_data: VAR_INTERFACE_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ +#line 2460 "./util/configparser.y" + { + OUTYY(("P(server_interface_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); + if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_datas, + (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) { + yyerror("out of memory"); + free((yyvsp[-2].str)); + free((yyvsp[-1].str)); + free((yyvsp[0].str)); + } + } +#line 5532 "util/configparser.c" + break; + + case 509: /* server_interface_view: VAR_INTERFACE_VIEW STRING_ARG STRING_ARG */ +#line 2472 "./util/configparser.y" + { + OUTYY(("P(server_interface_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); + if(!cfg_str2list_insert(&cfg_parser->cfg->interface_view, + (yyvsp[-1].str), (yyvsp[0].str))) { + yyerror("out of memory"); + } + } +#line 5544 "util/configparser.c" + break; + + case 510: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG */ +#line 2481 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5510,11 +5564,11 @@ yyreduce: } } } -#line 5514 "util/configparser.c" +#line 5568 "util/configparser.c" break; - case 501: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG */ -#line 2446 "./util/configparser.y" + case 511: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG */ +#line 2502 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5522,11 +5576,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5526 "util/configparser.c" +#line 5580 "util/configparser.c" break; - case 502: /* server_ratelimit: VAR_RATELIMIT STRING_ARG */ -#line 2455 "./util/configparser.y" + case 512: /* server_ratelimit: VAR_RATELIMIT STRING_ARG */ +#line 2511 "./util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5534,33 +5588,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5538 "util/configparser.c" +#line 5592 "util/configparser.c" break; - case 503: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG */ -#line 2464 "./util/configparser.y" + case 513: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG */ +#line 2520 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5549 "util/configparser.c" +#line 5603 "util/configparser.c" break; - case 504: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG */ -#line 2472 "./util/configparser.y" + case 514: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG */ +#line 2528 "./util/configparser.y" { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5560 "util/configparser.c" +#line 5614 "util/configparser.c" break; - case 505: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG */ -#line 2480 "./util/configparser.y" + case 515: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG */ +#line 2536 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -5572,11 +5626,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5576 "util/configparser.c" +#line 5630 "util/configparser.c" break; - case 506: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG */ -#line 2493 "./util/configparser.y" + case 516: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG */ +#line 2549 "./util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -5588,11 +5642,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5592 "util/configparser.c" +#line 5646 "util/configparser.c" break; - case 507: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG */ -#line 2506 "./util/configparser.y" + case 517: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG */ +#line 2562 "./util/configparser.y" { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5606,11 +5660,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5610 "util/configparser.c" +#line 5664 "util/configparser.c" break; - case 508: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG */ -#line 2521 "./util/configparser.y" + case 518: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG */ +#line 2577 "./util/configparser.y" { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5624,11 +5678,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5628 "util/configparser.c" +#line 5682 "util/configparser.c" break; - case 509: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG */ -#line 2536 "./util/configparser.y" + case 519: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG */ +#line 2592 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5636,11 +5690,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5640 "util/configparser.c" +#line 5694 "util/configparser.c" break; - case 510: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG */ -#line 2545 "./util/configparser.y" + case 520: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG */ +#line 2601 "./util/configparser.y" { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5648,11 +5702,11 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5652 "util/configparser.c" +#line 5706 "util/configparser.c" break; - case 511: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG */ -#line 2554 "./util/configparser.y" + case 521: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG */ +#line 2610 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_backoff:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5661,11 +5715,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5665 "util/configparser.c" +#line 5719 "util/configparser.c" break; - case 512: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG */ -#line 2564 "./util/configparser.y" + case 522: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG */ +#line 2620 "./util/configparser.y" { OUTYY(("P(server_ratelimit_backoff:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5674,11 +5728,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5678 "util/configparser.c" +#line 5732 "util/configparser.c" break; - case 513: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG */ -#line 2574 "./util/configparser.y" + case 523: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG */ +#line 2630 "./util/configparser.y" { OUTYY(("P(server_outbound_msg_retry:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5686,20 +5740,20 @@ yyreduce: else cfg_parser->cfg->outbound_msg_retry = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5690 "util/configparser.c" +#line 5744 "util/configparser.c" break; - case 514: /* server_low_rtt: VAR_LOW_RTT STRING_ARG */ -#line 2583 "./util/configparser.y" + case 524: /* server_low_rtt: VAR_LOW_RTT STRING_ARG */ +#line 2639 "./util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5699 "util/configparser.c" +#line 5753 "util/configparser.c" break; - case 515: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG */ -#line 2589 "./util/configparser.y" + case 525: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG */ +#line 2645 "./util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5707,11 +5761,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5711 "util/configparser.c" +#line 5765 "util/configparser.c" break; - case 516: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG */ -#line 2598 "./util/configparser.y" + case 526: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG */ +#line 2654 "./util/configparser.y" { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5719,11 +5773,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5723 "util/configparser.c" +#line 5777 "util/configparser.c" break; - case 517: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG */ -#line 2607 "./util/configparser.y" + case 527: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG */ +#line 2663 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5732,11 +5786,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5736 "util/configparser.c" +#line 5790 "util/configparser.c" break; - case 518: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG */ -#line 2617 "./util/configparser.y" + case 528: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG */ +#line 2673 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5745,11 +5799,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5749 "util/configparser.c" +#line 5803 "util/configparser.c" break; - case 519: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG */ -#line 2627 "./util/configparser.y" + case 529: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG */ +#line 2683 "./util/configparser.y" { OUTYY(("P(server_pad_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5758,11 +5812,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5762 "util/configparser.c" +#line 5816 "util/configparser.c" break; - case 520: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG */ -#line 2637 "./util/configparser.y" + case 530: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG */ +#line 2693 "./util/configparser.y" { OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5770,11 +5824,11 @@ yyreduce: else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5774 "util/configparser.c" +#line 5828 "util/configparser.c" break; - case 521: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG */ -#line 2646 "./util/configparser.y" + case 531: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG */ +#line 2702 "./util/configparser.y" { OUTYY(("P(server_pad_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5783,11 +5837,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5787 "util/configparser.c" +#line 5841 "util/configparser.c" break; - case 522: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG */ -#line 2656 "./util/configparser.y" + case 532: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG */ +#line 2712 "./util/configparser.y" { OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5795,11 +5849,11 @@ yyreduce: else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5799 "util/configparser.c" +#line 5853 "util/configparser.c" break; - case 523: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG */ -#line 2665 "./util/configparser.y" + case 533: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG */ +#line 2721 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5811,11 +5865,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5815 "util/configparser.c" +#line 5869 "util/configparser.c" break; - case 524: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG */ -#line 2678 "./util/configparser.y" + case 534: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG */ +#line 2734 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5827,11 +5881,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5831 "util/configparser.c" +#line 5885 "util/configparser.c" break; - case 525: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG */ -#line 2691 "./util/configparser.y" + case 535: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG */ +#line 2747 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5842,11 +5896,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5846 "util/configparser.c" +#line 5900 "util/configparser.c" break; - case 526: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG */ -#line 2703 "./util/configparser.y" + case 536: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG */ +#line 2759 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5859,11 +5913,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5863 "util/configparser.c" +#line 5917 "util/configparser.c" break; - case 527: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG */ -#line 2717 "./util/configparser.y" + case 537: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG */ +#line 2773 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5874,11 +5928,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5878 "util/configparser.c" +#line 5932 "util/configparser.c" break; - case 528: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG */ -#line 2729 "./util/configparser.y" + case 538: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG */ +#line 2785 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5891,11 +5945,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5895 "util/configparser.c" +#line 5949 "util/configparser.c" break; - case 529: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG */ -#line 2743 "./util/configparser.y" + case 539: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG */ +#line 2799 "./util/configparser.y" { OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert( @@ -5903,11 +5957,11 @@ yyreduce: fatal_exit("out of memory adding " "edns-client-string"); } -#line 5907 "util/configparser.c" +#line 5961 "util/configparser.c" break; - case 530: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG */ -#line 2752 "./util/configparser.y" + case 540: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG */ +#line 2808 "./util/configparser.y" { OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5917,11 +5971,11 @@ yyreduce: else cfg_parser->cfg->edns_client_string_opcode = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5921 "util/configparser.c" +#line 5975 "util/configparser.c" break; - case 531: /* server_ede: VAR_EDE STRING_ARG */ -#line 2763 "./util/configparser.y" + case 541: /* server_ede: VAR_EDE STRING_ARG */ +#line 2819 "./util/configparser.y" { OUTYY(("P(server_ede:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5929,11 +5983,11 @@ yyreduce: else cfg_parser->cfg->ede = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5933 "util/configparser.c" +#line 5987 "util/configparser.c" break; - case 532: /* stub_name: VAR_NAME STRING_ARG */ -#line 2772 "./util/configparser.y" + case 542: /* stub_name: VAR_NAME STRING_ARG */ +#line 2828 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5942,31 +5996,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 5946 "util/configparser.c" +#line 6000 "util/configparser.c" break; - case 533: /* stub_host: VAR_STUB_HOST STRING_ARG */ -#line 2782 "./util/configparser.y" + case 543: /* stub_host: VAR_STUB_HOST STRING_ARG */ +#line 2838 "./util/configparser.y" { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5956 "util/configparser.c" +#line 6010 "util/configparser.c" break; - case 534: /* stub_addr: VAR_STUB_ADDR STRING_ARG */ -#line 2789 "./util/configparser.y" + case 544: /* stub_addr: VAR_STUB_ADDR STRING_ARG */ +#line 2845 "./util/configparser.y" { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 5966 "util/configparser.c" +#line 6020 "util/configparser.c" break; - case 535: /* stub_first: VAR_STUB_FIRST STRING_ARG */ -#line 2796 "./util/configparser.y" + case 545: /* stub_first: VAR_STUB_FIRST STRING_ARG */ +#line 2852 "./util/configparser.y" { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5974,11 +6028,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5978 "util/configparser.c" +#line 6032 "util/configparser.c" break; - case 536: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG */ -#line 2805 "./util/configparser.y" + case 546: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG */ +#line 2861 "./util/configparser.y" { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5986,11 +6040,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5990 "util/configparser.c" +#line 6044 "util/configparser.c" break; - case 537: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG */ -#line 2814 "./util/configparser.y" + case 547: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG */ +#line 2870 "./util/configparser.y" { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5999,11 +6053,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6003 "util/configparser.c" +#line 6057 "util/configparser.c" break; - case 538: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG */ -#line 2824 "./util/configparser.y" + case 548: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG */ +#line 2880 "./util/configparser.y" { OUTYY(("P(stub-tcp-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6012,11 +6066,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6016 "util/configparser.c" +#line 6070 "util/configparser.c" break; - case 539: /* stub_prime: VAR_STUB_PRIME STRING_ARG */ -#line 2834 "./util/configparser.y" + case 549: /* stub_prime: VAR_STUB_PRIME STRING_ARG */ +#line 2890 "./util/configparser.y" { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6025,11 +6079,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6029 "util/configparser.c" +#line 6083 "util/configparser.c" break; - case 540: /* forward_name: VAR_NAME STRING_ARG */ -#line 2844 "./util/configparser.y" + case 550: /* forward_name: VAR_NAME STRING_ARG */ +#line 2900 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -6038,31 +6092,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 6042 "util/configparser.c" +#line 6096 "util/configparser.c" break; - case 541: /* forward_host: VAR_FORWARD_HOST STRING_ARG */ -#line 2854 "./util/configparser.y" + case 551: /* forward_host: VAR_FORWARD_HOST STRING_ARG */ +#line 2910 "./util/configparser.y" { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6052 "util/configparser.c" +#line 6106 "util/configparser.c" break; - case 542: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG */ -#line 2861 "./util/configparser.y" + case 552: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG */ +#line 2917 "./util/configparser.y" { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6062 "util/configparser.c" +#line 6116 "util/configparser.c" break; - case 543: /* forward_first: VAR_FORWARD_FIRST STRING_ARG */ -#line 2868 "./util/configparser.y" + case 553: /* forward_first: VAR_FORWARD_FIRST STRING_ARG */ +#line 2924 "./util/configparser.y" { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6070,11 +6124,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6074 "util/configparser.c" +#line 6128 "util/configparser.c" break; - case 544: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG */ -#line 2877 "./util/configparser.y" + case 554: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG */ +#line 2933 "./util/configparser.y" { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6082,11 +6136,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6086 "util/configparser.c" +#line 6140 "util/configparser.c" break; - case 545: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG */ -#line 2886 "./util/configparser.y" + case 555: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG */ +#line 2942 "./util/configparser.y" { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6095,11 +6149,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6099 "util/configparser.c" +#line 6153 "util/configparser.c" break; - case 546: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG */ -#line 2896 "./util/configparser.y" + case 556: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG */ +#line 2952 "./util/configparser.y" { OUTYY(("P(forward-tcp-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6108,11 +6162,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6112 "util/configparser.c" +#line 6166 "util/configparser.c" break; - case 547: /* auth_name: VAR_NAME STRING_ARG */ -#line 2906 "./util/configparser.y" + case 557: /* auth_name: VAR_NAME STRING_ARG */ +#line 2962 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -6121,52 +6175,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 6125 "util/configparser.c" +#line 6179 "util/configparser.c" break; - case 548: /* auth_zonefile: VAR_ZONEFILE STRING_ARG */ -#line 2916 "./util/configparser.y" + case 558: /* auth_zonefile: VAR_ZONEFILE STRING_ARG */ +#line 2972 "./util/configparser.y" { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 6135 "util/configparser.c" +#line 6189 "util/configparser.c" break; - case 549: /* auth_master: VAR_MASTER STRING_ARG */ -#line 2923 "./util/configparser.y" + case 559: /* auth_master: VAR_MASTER STRING_ARG */ +#line 2979 "./util/configparser.y" { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6145 "util/configparser.c" +#line 6199 "util/configparser.c" break; - case 550: /* auth_url: VAR_URL STRING_ARG */ -#line 2930 "./util/configparser.y" + case 560: /* auth_url: VAR_URL STRING_ARG */ +#line 2986 "./util/configparser.y" { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6155 "util/configparser.c" +#line 6209 "util/configparser.c" break; - case 551: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG */ -#line 2937 "./util/configparser.y" + case 561: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG */ +#line 2993 "./util/configparser.y" { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6166 "util/configparser.c" +#line 6220 "util/configparser.c" break; - case 552: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG */ -#line 2945 "./util/configparser.y" + case 562: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG */ +#line 3001 "./util/configparser.y" { OUTYY(("P(zonemd-check:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6175,11 +6229,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6179 "util/configparser.c" +#line 6233 "util/configparser.c" break; - case 553: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG */ -#line 2955 "./util/configparser.y" + case 563: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG */ +#line 3011 "./util/configparser.y" { OUTYY(("P(zonemd-reject-absence:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6188,11 +6242,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6192 "util/configparser.c" +#line 6246 "util/configparser.c" break; - case 554: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG */ -#line 2965 "./util/configparser.y" + case 564: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG */ +#line 3021 "./util/configparser.y" { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6201,11 +6255,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6205 "util/configparser.c" +#line 6259 "util/configparser.c" break; - case 555: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG */ -#line 2975 "./util/configparser.y" + case 565: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG */ +#line 3031 "./util/configparser.y" { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6214,11 +6268,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6218 "util/configparser.c" +#line 6272 "util/configparser.c" break; - case 556: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG */ -#line 2985 "./util/configparser.y" + case 566: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG */ +#line 3041 "./util/configparser.y" { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6227,11 +6281,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6231 "util/configparser.c" +#line 6285 "util/configparser.c" break; - case 557: /* view_name: VAR_NAME STRING_ARG */ -#line 2995 "./util/configparser.y" + case 567: /* view_name: VAR_NAME STRING_ARG */ +#line 3051 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -6240,11 +6294,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 6244 "util/configparser.c" +#line 6298 "util/configparser.c" break; - case 558: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ -#line 3005 "./util/configparser.y" + case 568: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ +#line 3061 "./util/configparser.y" { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -6299,11 +6353,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 6303 "util/configparser.c" +#line 6357 "util/configparser.c" break; - case 559: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ -#line 3061 "./util/configparser.y" + case 569: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ +#line 3117 "./util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6312,33 +6366,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 6316 "util/configparser.c" +#line 6370 "util/configparser.c" break; - case 560: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ -#line 3071 "./util/configparser.y" + case 570: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ +#line 3127 "./util/configparser.y" { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6327 "util/configparser.c" +#line 6381 "util/configparser.c" break; - case 561: /* view_local_data: VAR_LOCAL_DATA STRING_ARG */ -#line 3079 "./util/configparser.y" + case 571: /* view_local_data: VAR_LOCAL_DATA STRING_ARG */ +#line 3135 "./util/configparser.y" { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 6338 "util/configparser.c" +#line 6392 "util/configparser.c" break; - case 562: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ -#line 3087 "./util/configparser.y" + case 572: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ +#line 3143 "./util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -6352,11 +6406,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 6356 "util/configparser.c" +#line 6410 "util/configparser.c" break; - case 563: /* view_first: VAR_VIEW_FIRST STRING_ARG */ -#line 3102 "./util/configparser.y" + case 573: /* view_first: VAR_VIEW_FIRST STRING_ARG */ +#line 3158 "./util/configparser.y" { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6364,20 +6418,20 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6368 "util/configparser.c" +#line 6422 "util/configparser.c" break; - case 564: /* rcstart: VAR_REMOTE_CONTROL */ -#line 3111 "./util/configparser.y" + case 574: /* rcstart: VAR_REMOTE_CONTROL */ +#line 3167 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); cfg_parser->started_toplevel = 1; } -#line 6377 "util/configparser.c" +#line 6431 "util/configparser.c" break; - case 575: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG */ -#line 3123 "./util/configparser.y" + case 585: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG */ +#line 3179 "./util/configparser.y" { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6386,11 +6440,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6390 "util/configparser.c" +#line 6444 "util/configparser.c" break; - case 576: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG */ -#line 3133 "./util/configparser.y" + case 586: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG */ +#line 3189 "./util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6398,80 +6452,80 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6402 "util/configparser.c" +#line 6456 "util/configparser.c" break; - case 577: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG */ -#line 3142 "./util/configparser.y" + case 587: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG */ +#line 3198 "./util/configparser.y" { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6412 "util/configparser.c" +#line 6466 "util/configparser.c" break; - case 578: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG */ -#line 3149 "./util/configparser.y" + case 588: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG */ +#line 3205 "./util/configparser.y" { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6422 "util/configparser.c" +#line 6476 "util/configparser.c" break; - case 579: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG */ -#line 3156 "./util/configparser.y" + case 589: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG */ +#line 3212 "./util/configparser.y" { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 6432 "util/configparser.c" +#line 6486 "util/configparser.c" break; - case 580: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG */ -#line 3163 "./util/configparser.y" + case 590: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG */ +#line 3219 "./util/configparser.y" { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 6442 "util/configparser.c" +#line 6496 "util/configparser.c" break; - case 581: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG */ -#line 3170 "./util/configparser.y" + case 591: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG */ +#line 3226 "./util/configparser.y" { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 6452 "util/configparser.c" +#line 6506 "util/configparser.c" break; - case 582: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG */ -#line 3177 "./util/configparser.y" + case 592: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG */ +#line 3233 "./util/configparser.y" { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 6462 "util/configparser.c" +#line 6516 "util/configparser.c" break; - case 583: /* dtstart: VAR_DNSTAP */ -#line 3184 "./util/configparser.y" + case 593: /* dtstart: VAR_DNSTAP */ +#line 3240 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); cfg_parser->started_toplevel = 1; } -#line 6471 "util/configparser.c" +#line 6525 "util/configparser.c" break; - case 605: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG */ -#line 3205 "./util/configparser.y" + case 615: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG */ +#line 3261 "./util/configparser.y" { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6479,11 +6533,11 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6483 "util/configparser.c" +#line 6537 "util/configparser.c" break; - case 606: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG */ -#line 3214 "./util/configparser.y" + case 616: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG */ +#line 3270 "./util/configparser.y" { OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6492,31 +6546,31 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6496 "util/configparser.c" +#line 6550 "util/configparser.c" break; - case 607: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG */ -#line 3224 "./util/configparser.y" + case 617: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG */ +#line 3280 "./util/configparser.y" { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 6506 "util/configparser.c" +#line 6560 "util/configparser.c" break; - case 608: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG */ -#line 3231 "./util/configparser.y" + case 618: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG */ +#line 3287 "./util/configparser.y" { OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_ip); cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); } -#line 6516 "util/configparser.c" +#line 6570 "util/configparser.c" break; - case 609: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG */ -#line 3238 "./util/configparser.y" + case 619: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG */ +#line 3294 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6524,51 +6578,51 @@ yyreduce: else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6528 "util/configparser.c" +#line 6582 "util/configparser.c" break; - case 610: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG */ -#line 3247 "./util/configparser.y" + case 620: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG */ +#line 3303 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_server_name); cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); } -#line 6538 "util/configparser.c" +#line 6592 "util/configparser.c" break; - case 611: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG */ -#line 3254 "./util/configparser.y" + case 621: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG */ +#line 3310 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_cert_bundle); cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); } -#line 6548 "util/configparser.c" +#line 6602 "util/configparser.c" break; - case 612: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG */ -#line 3261 "./util/configparser.y" + case 622: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG */ +#line 3317 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_key_file); cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); } -#line 6558 "util/configparser.c" +#line 6612 "util/configparser.c" break; - case 613: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG */ -#line 3268 "./util/configparser.y" + case 623: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG */ +#line 3324 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_cert_file); cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); } -#line 6568 "util/configparser.c" +#line 6622 "util/configparser.c" break; - case 614: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG */ -#line 3275 "./util/configparser.y" + case 624: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG */ +#line 3331 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6576,11 +6630,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6580 "util/configparser.c" +#line 6634 "util/configparser.c" break; - case 615: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG */ -#line 3284 "./util/configparser.y" + case 625: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG */ +#line 3340 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6588,31 +6642,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6592 "util/configparser.c" +#line 6646 "util/configparser.c" break; - case 616: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG */ -#line 3293 "./util/configparser.y" + case 626: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG */ +#line 3349 "./util/configparser.y" { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 6602 "util/configparser.c" +#line 6656 "util/configparser.c" break; - case 617: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG */ -#line 3300 "./util/configparser.y" + case 627: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG */ +#line 3356 "./util/configparser.y" { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 6612 "util/configparser.c" +#line 6666 "util/configparser.c" break; - case 618: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG */ -#line 3307 "./util/configparser.y" + case 628: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG */ +#line 3363 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6621,11 +6675,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6625 "util/configparser.c" +#line 6679 "util/configparser.c" break; - case 619: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG */ -#line 3317 "./util/configparser.y" + case 629: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG */ +#line 3373 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6634,11 +6688,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6638 "util/configparser.c" +#line 6692 "util/configparser.c" break; - case 620: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG */ -#line 3327 "./util/configparser.y" + case 630: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG */ +#line 3383 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6647,11 +6701,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6651 "util/configparser.c" +#line 6705 "util/configparser.c" break; - case 621: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG */ -#line 3337 "./util/configparser.y" + case 631: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG */ +#line 3393 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6660,11 +6714,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6664 "util/configparser.c" +#line 6718 "util/configparser.c" break; - case 622: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG */ -#line 3347 "./util/configparser.y" + case 632: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG */ +#line 3403 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6673,11 +6727,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6677 "util/configparser.c" +#line 6731 "util/configparser.c" break; - case 623: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG */ -#line 3357 "./util/configparser.y" + case 633: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG */ +#line 3413 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6686,49 +6740,49 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6690 "util/configparser.c" +#line 6744 "util/configparser.c" break; - case 624: /* pythonstart: VAR_PYTHON */ -#line 3367 "./util/configparser.y" + case 634: /* pythonstart: VAR_PYTHON */ +#line 3423 "./util/configparser.y" { OUTYY(("\nP(python:)\n")); cfg_parser->started_toplevel = 1; } -#line 6699 "util/configparser.c" +#line 6753 "util/configparser.c" break; - case 628: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG */ -#line 3377 "./util/configparser.y" + case 638: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG */ +#line 3433 "./util/configparser.y" { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6709 "util/configparser.c" +#line 6763 "util/configparser.c" break; - case 629: /* dynlibstart: VAR_DYNLIB */ -#line 3383 "./util/configparser.y" + case 639: /* dynlibstart: VAR_DYNLIB */ +#line 3439 "./util/configparser.y" { OUTYY(("\nP(dynlib:)\n")); cfg_parser->started_toplevel = 1; } -#line 6718 "util/configparser.c" +#line 6772 "util/configparser.c" break; - case 633: /* dl_file: VAR_DYNLIB_FILE STRING_ARG */ -#line 3393 "./util/configparser.y" + case 643: /* dl_file: VAR_DYNLIB_FILE STRING_ARG */ +#line 3449 "./util/configparser.y" { OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6728 "util/configparser.c" +#line 6782 "util/configparser.c" break; - case 634: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG */ -#line 3399 "./util/configparser.y" + case 644: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG */ +#line 3455 "./util/configparser.y" { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6737,21 +6791,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6741 "util/configparser.c" +#line 6795 "util/configparser.c" break; - case 635: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG */ -#line 3409 "./util/configparser.y" + case 645: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG */ +#line 3465 "./util/configparser.y" { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 6751 "util/configparser.c" +#line 6805 "util/configparser.c" break; - case 636: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ -#line 3416 "./util/configparser.y" + case 646: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ +#line 3472 "./util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6759,31 +6813,31 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6763 "util/configparser.c" +#line 6817 "util/configparser.c" break; - case 637: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ -#line 3425 "./util/configparser.y" + case 647: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ +#line 3481 "./util/configparser.y" { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6774 "util/configparser.c" +#line 6828 "util/configparser.c" break; - case 638: /* dnscstart: VAR_DNSCRYPT */ -#line 3433 "./util/configparser.y" + case 648: /* dnscstart: VAR_DNSCRYPT */ +#line 3489 "./util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); cfg_parser->started_toplevel = 1; } -#line 6783 "util/configparser.c" +#line 6837 "util/configparser.c" break; - case 651: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG */ -#line 3450 "./util/configparser.y" + case 661: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG */ +#line 3506 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6791,11 +6845,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6795 "util/configparser.c" +#line 6849 "util/configparser.c" break; - case 652: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG */ -#line 3460 "./util/configparser.y" + case 662: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG */ +#line 3516 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6803,21 +6857,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6807 "util/configparser.c" +#line 6861 "util/configparser.c" break; - case 653: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG */ -#line 3469 "./util/configparser.y" + case 663: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG */ +#line 3525 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 6817 "util/configparser.c" +#line 6871 "util/configparser.c" break; - case 654: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG */ -#line 3476 "./util/configparser.y" + case 664: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG */ +#line 3532 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -6825,21 +6879,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6829 "util/configparser.c" +#line 6883 "util/configparser.c" break; - case 655: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG */ -#line 3485 "./util/configparser.y" + case 665: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG */ +#line 3541 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 6839 "util/configparser.c" +#line 6893 "util/configparser.c" break; - case 656: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG */ -#line 3492 "./util/configparser.y" + case 666: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG */ +#line 3548 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -6847,22 +6901,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6851 "util/configparser.c" +#line 6905 "util/configparser.c" break; - case 657: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG */ -#line 3501 "./util/configparser.y" + case 667: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG */ +#line 3557 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6862 "util/configparser.c" +#line 6916 "util/configparser.c" break; - case 658: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG */ -#line 3509 "./util/configparser.y" + case 668: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG */ +#line 3565 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -6874,22 +6928,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6878 "util/configparser.c" +#line 6932 "util/configparser.c" break; - case 659: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG */ -#line 3522 "./util/configparser.y" + case 669: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG */ +#line 3578 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6889 "util/configparser.c" +#line 6943 "util/configparser.c" break; - case 660: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG */ -#line 3530 "./util/configparser.y" + case 670: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG */ +#line 3586 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -6901,20 +6955,20 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6905 "util/configparser.c" +#line 6959 "util/configparser.c" break; - case 661: /* cachedbstart: VAR_CACHEDB */ -#line 3543 "./util/configparser.y" + case 671: /* cachedbstart: VAR_CACHEDB */ +#line 3599 "./util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); cfg_parser->started_toplevel = 1; } -#line 6914 "util/configparser.c" +#line 6968 "util/configparser.c" break; - case 670: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG */ -#line 3555 "./util/configparser.y" + case 680: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG */ +#line 3611 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6925,11 +6979,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6929 "util/configparser.c" +#line 6983 "util/configparser.c" break; - case 671: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG */ -#line 3567 "./util/configparser.y" + case 681: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG */ +#line 3623 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6940,11 +6994,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6944 "util/configparser.c" +#line 6998 "util/configparser.c" break; - case 672: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG */ -#line 3579 "./util/configparser.y" + case 682: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG */ +#line 3635 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -6955,11 +7009,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6959 "util/configparser.c" +#line 7013 "util/configparser.c" break; - case 673: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG */ -#line 3591 "./util/configparser.y" + case 683: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG */ +#line 3647 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -6973,11 +7027,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6977 "util/configparser.c" +#line 7031 "util/configparser.c" break; - case 674: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG */ -#line 3606 "./util/configparser.y" + case 684: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG */ +#line 3662 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -6989,11 +7043,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 6993 "util/configparser.c" +#line 7047 "util/configparser.c" break; - case 675: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG */ -#line 3619 "./util/configparser.y" + case 685: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG */ +#line 3675 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); @@ -7005,11 +7059,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 7009 "util/configparser.c" +#line 7063 "util/configparser.c" break; - case 676: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG */ -#line 3632 "./util/configparser.y" + case 686: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG */ +#line 3688 "./util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -7019,20 +7073,20 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 7023 "util/configparser.c" +#line 7077 "util/configparser.c" break; - case 677: /* ipsetstart: VAR_IPSET */ -#line 3643 "./util/configparser.y" + case 687: /* ipsetstart: VAR_IPSET */ +#line 3699 "./util/configparser.y" { OUTYY(("\nP(ipset:)\n")); cfg_parser->started_toplevel = 1; } -#line 7032 "util/configparser.c" +#line 7086 "util/configparser.c" break; - case 682: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG */ -#line 3653 "./util/configparser.y" + case 692: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG */ +#line 3709 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -7046,11 +7100,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 7050 "util/configparser.c" +#line 7104 "util/configparser.c" break; - case 683: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG */ -#line 3668 "./util/configparser.y" + case 693: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG */ +#line 3724 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -7064,11 +7118,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 7068 "util/configparser.c" +#line 7122 "util/configparser.c" break; -#line 7072 "util/configparser.c" +#line 7126 "util/configparser.c" default: break; } @@ -7150,6 +7204,7 @@ yyerrorlab: label yyerrorlab therefore never appears in user code. */ if (0) YYERROR; + ++yynerrs; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -7210,7 +7265,7 @@ yyerrlab1: `-------------------------------------*/ yyacceptlab: yyresult = 0; - goto yyreturn; + goto yyreturnlab; /*-----------------------------------. @@ -7218,24 +7273,22 @@ yyacceptlab: `-----------------------------------*/ yyabortlab: yyresult = 1; - goto yyreturn; + goto yyreturnlab; -#if !defined yyoverflow -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ +/*-----------------------------------------------------------. +| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. | +`-----------------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; - goto yyreturn; -#endif + goto yyreturnlab; -/*-------------------------------------------------------. -| yyreturn -- parsing is finished, clean up and return. | -`-------------------------------------------------------*/ -yyreturn: +/*----------------------------------------------------------. +| yyreturnlab -- parsing is finished, clean up and return. | +`----------------------------------------------------------*/ +yyreturnlab: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at @@ -7262,7 +7315,7 @@ yyreturn: return yyresult; } -#line 3682 "./util/configparser.y" +#line 3738 "./util/configparser.y" /* parse helper routines could be here */ @@ -7283,4 +7336,19 @@ validate_respip_action(const char* action) } } - +static void +validate_acl_action(const char* action) +{ + if(strcmp(action, "deny")!=0 && + strcmp(action, "refuse")!=0 && + strcmp(action, "deny_non_local")!=0 && + strcmp(action, "refuse_non_local")!=0 && + strcmp(action, "allow_setrd")!=0 && + strcmp(action, "allow")!=0 && + strcmp(action, "allow_snoop")!=0) + { + yyerror("expected deny, refuse, deny_non_local, " + "refuse_non_local, allow, allow_setrd or " + "allow_snoop as access control action"); + } +} diff --git a/util/configparser.h b/util/configparser.h index f10bdc1a0..18101d2cc 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -1,4 +1,4 @@ -/* A Bison parser, made by GNU Bison 3.7.6. */ +/* A Bison parser, made by GNU Bison 3.8.2. */ /* Bison interface for Yacc-like parsers in C @@ -378,7 +378,12 @@ extern int yydebug; VAR_ZONEMD_REJECT_ABSENCE = 579, /* VAR_ZONEMD_REJECT_ABSENCE */ VAR_RPZ_SIGNAL_NXDOMAIN_RA = 580, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */ VAR_INTERFACE_AUTOMATIC_PORTS = 581, /* VAR_INTERFACE_AUTOMATIC_PORTS */ - VAR_EDE = 582 /* VAR_EDE */ + VAR_EDE = 582, /* VAR_EDE */ + VAR_INTERFACE_ACTION = 583, /* VAR_INTERFACE_ACTION */ + VAR_INTERFACE_VIEW = 584, /* VAR_INTERFACE_VIEW */ + VAR_INTERFACE_TAG = 585, /* VAR_INTERFACE_TAG */ + VAR_INTERFACE_TAG_ACTION = 586, /* VAR_INTERFACE_TAG_ACTION */ + VAR_INTERFACE_TAG_DATA = 587 /* VAR_INTERFACE_TAG_DATA */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -712,16 +717,21 @@ extern int yydebug; #define VAR_RPZ_SIGNAL_NXDOMAIN_RA 580 #define VAR_INTERFACE_AUTOMATIC_PORTS 581 #define VAR_EDE 582 +#define VAR_INTERFACE_ACTION 583 +#define VAR_INTERFACE_VIEW 584 +#define VAR_INTERFACE_TAG 585 +#define VAR_INTERFACE_TAG_ACTION 586 +#define VAR_INTERFACE_TAG_DATA 587 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 66 "./util/configparser.y" +#line 67 "./util/configparser.y" char* str; -#line 725 "util/configparser.h" +#line 735 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; @@ -732,6 +742,8 @@ typedef union YYSTYPE YYSTYPE; extern YYSTYPE yylval; + int yyparse (void); + #endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */ diff --git a/util/configparser.y b/util/configparser.y index bf4e8c59c..8f3672f5d 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -52,6 +52,7 @@ int ub_c_lex(void); void ub_c_error(const char *message); static void validate_respip_action(const char* action); +static void validate_acl_action(const char* action); /* these need to be global, otherwise they cannot be used inside yacc */ extern struct config_parser_state* cfg_parser; @@ -190,6 +191,8 @@ extern struct config_parser_state* cfg_parser; %token VAR_EDNS_CLIENT_STRING_OPCODE VAR_NSID %token VAR_ZONEMD_PERMISSIVE_MODE VAR_ZONEMD_CHECK VAR_ZONEMD_REJECT_ABSENCE %token VAR_RPZ_SIGNAL_NXDOMAIN_RA VAR_INTERFACE_AUTOMATIC_PORTS VAR_EDE +%token VAR_INTERFACE_ACTION VAR_INTERFACE_VIEW VAR_INTERFACE_TAG +%token VAR_INTERFACE_TAG_ACTION VAR_INTERFACE_TAG_DATA %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -289,6 +292,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_disable_dnssec_lame_check | server_access_control_tag | server_local_zone_override | server_access_control_tag_action | server_access_control_tag_data | server_access_control_view | + server_interface_action | server_interface_view | server_interface_tag | + server_interface_tag_action | server_interface_tag_data | server_qname_minimisation_strict | server_pad_responses | server_pad_responses_block_size | server_pad_queries | server_pad_queries_block_size | @@ -1849,21 +1854,18 @@ server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG { OUTYY(("P(server_access_control:%s %s)\n", $2, $3)); - if(strcmp($3, "deny")!=0 && strcmp($3, "refuse")!=0 && - strcmp($3, "deny_non_local")!=0 && - strcmp($3, "refuse_non_local")!=0 && - strcmp($3, "allow_setrd")!=0 && - strcmp($3, "allow")!=0 && - strcmp($3, "allow_snoop")!=0) { - yyerror("expected deny, refuse, deny_non_local, " - "refuse_non_local, allow, allow_setrd or " - "allow_snoop in access control action"); - free($2); - free($3); - } else { - if(!cfg_str2list_insert(&cfg_parser->cfg->acls, $2, $3)) - fatal_exit("out of memory adding acl"); - } + validate_acl_action($3); + if(!cfg_str2list_insert(&cfg_parser->cfg->acls, $2, $3)) + fatal_exit("out of memory adding acl"); + } + ; +server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG + { + OUTYY(("P(server_interface_action:%s %s)\n", $2, $3)); + validate_acl_action($3); + if(!cfg_str2list_insert( + &cfg_parser->cfg->interface_actions, $2, $3)) + fatal_exit("out of memory adding acl"); } ; server_module_conf: VAR_MODULE_CONF STRING_ARG @@ -2421,6 +2423,60 @@ server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG } } ; +server_interface_tag: VAR_INTERFACE_TAG STRING_ARG STRING_ARG + { + size_t len = 0; + uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3, + &len); + free($3); + OUTYY(("P(server_interface_tag:%s)\n", $2)); + if(!bitlist) { + yyerror("could not parse tags, (define-tag them first)"); + free($2); + } + if(bitlist) { + if(!cfg_strbytelist_insert( + &cfg_parser->cfg->interface_tags, + $2, bitlist, len)) { + yyerror("out of memory"); + free($2); + } + } + } + ; +server_interface_tag_action: VAR_INTERFACE_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG + { + OUTYY(("P(server_interface_tag_action:%s %s %s)\n", $2, $3, $4)); + if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_actions, + $2, $3, $4)) { + yyerror("out of memory"); + free($2); + free($3); + free($4); + } + } + ; +server_interface_tag_data: VAR_INTERFACE_TAG_DATA STRING_ARG STRING_ARG STRING_ARG + { + OUTYY(("P(server_interface_tag_data:%s %s %s)\n", $2, $3, $4)); + if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_datas, + $2, $3, $4)) { + yyerror("out of memory"); + free($2); + free($3); + free($4); + } + } + ; +server_interface_view: VAR_INTERFACE_VIEW STRING_ARG STRING_ARG + { + OUTYY(("P(server_interface_view:%s %s)\n", $2, $3)); + if(!cfg_str2list_insert(&cfg_parser->cfg->interface_view, + $2, $3)) { + yyerror("out of memory"); + } + } + ; server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG { size_t len = 0; @@ -3699,4 +3755,19 @@ validate_respip_action(const char* action) } } - +static void +validate_acl_action(const char* action) +{ + if(strcmp(action, "deny")!=0 && + strcmp(action, "refuse")!=0 && + strcmp(action, "deny_non_local")!=0 && + strcmp(action, "refuse_non_local")!=0 && + strcmp(action, "allow_setrd")!=0 && + strcmp(action, "allow")!=0 && + strcmp(action, "allow_snoop")!=0) + { + yyerror("expected deny, refuse, deny_non_local, " + "refuse_non_local, allow, allow_setrd or " + "allow_snoop as access control action"); + } +} diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index 05a22d402..750f45b50 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -44,6 +44,7 @@ * boundaries in the program. */ #include "config.h" +#include "daemon/acl_list.h" #include "util/fptr_wlist.h" #include "util/mini_event.h" #include "services/outside_network.h" @@ -244,6 +245,7 @@ fptr_whitelist_rbtree_cmp(int (*fptr) (const void *, const void *)) else if(fptr == &auth_zone_cmp) return 1; else if(fptr == &auth_data_cmp) return 1; else if(fptr == &auth_xfer_cmp) return 1; + else if(fptr == &acl_interface_compare) return 1; return 0; } diff --git a/util/net_help.c b/util/net_help.c index 8153dbdd1..54fad6986 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -233,12 +233,11 @@ log_addr(enum verbosity_value v, const char* str, else verbose(v, "%s %s port %d", str, dest, (int)port); } -int +int extstrtoaddr(const char* str, struct sockaddr_storage* addr, - socklen_t* addrlen) + socklen_t* addrlen, int port) { char* s; - int port = UNBOUND_DNS_PORT; if((s=strchr(str, '@'))) { char buf[MAX_ADDR_STRLEN]; if(s-str >= MAX_ADDR_STRLEN) { @@ -255,7 +254,6 @@ extstrtoaddr(const char* str, struct sockaddr_storage* addr, return ipstrtoaddr(str, port, addr, addrlen); } - int ipstrtoaddr(const char* ip, int port, struct sockaddr_storage* addr, socklen_t* addrlen) diff --git a/util/net_help.h b/util/net_help.h index fc23b2181..f1881b3ed 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -183,10 +183,11 @@ void log_err_addr(const char* str, const char* err, * @param str: the string * @param addr: where to store sockaddr. * @param addrlen: length of stored sockaddr is returned. + * @param port: default port. * @return 0 on error. */ int extstrtoaddr(const char* str, struct sockaddr_storage* addr, - socklen_t* addrlen); + socklen_t* addrlen, int port); /** * Convert ip address string and port to sockaddr. From 7e9fd2114b949e1fd77c3eb6e9c098fa55317a3e Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Fri, 8 Oct 2021 18:07:33 +0200 Subject: [PATCH 15/60] Cleared error messages for interface-* options. --- daemon/acl_list.c | 22 +++++++++++++++++----- daemon/worker.c | 2 +- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/daemon/acl_list.c b/daemon/acl_list.c index 2006f9592..5ec4122a4 100644 --- a/daemon/acl_list.c +++ b/daemon/acl_list.c @@ -185,7 +185,7 @@ acl_interface_str_cfg(struct acl_list* acl_interface, const char* interface, return 0; } if(!(node=acl_find_or_create(acl_interface, interface, 1, port))) { - log_err("cannot update ACL on non-existing interface: %s %d", + log_err("cannot update ACL on non-configured interface: %s %d", interface, port); return 0; } @@ -221,8 +221,11 @@ acl_list_tags_cfg(struct acl_list* acl, const char* str, uint8_t* bitmap, size_t bitmaplen, int is_interface, int port) { struct acl_addr* node; - if(!(node=acl_find_or_create(acl, str, is_interface, port))) + if(!(node=acl_find_or_create(acl, str, is_interface, port))) { + if(is_interface) + log_err("non-configured interface: %s", str); return 0; + } node->taglen = bitmaplen; node->taglist = regional_alloc_init(acl->region, bitmap, bitmaplen); if(!node->taglist) { @@ -238,8 +241,11 @@ acl_list_view_cfg(struct acl_list* acl, const char* str, const char* str2, struct views* vs, int is_interface, int port) { struct acl_addr* node; - if(!(node=acl_find_or_create(acl, str, is_interface, port))) + if(!(node=acl_find_or_create(acl, str, is_interface, port))) { + if(is_interface) + log_err("non-configured interface: %s", str); return 0; + } node->view = views_find_view(vs, str2, 0 /* get read lock*/); if(!node->view) { log_err("no view with name: %s", str2); @@ -258,8 +264,11 @@ acl_list_tag_action_cfg(struct acl_list* acl, struct config_file* cfg, struct acl_addr* node; int tagid; enum localzone_type t; - if(!(node=acl_find_or_create(acl, str, is_interface, port))) + if(!(node=acl_find_or_create(acl, str, is_interface, port))) { + if(is_interface) + log_err("non-configured interface: %s", str); return 0; + } /* allocate array if not yet */ if(!node->tag_actions) { node->tag_actions = (uint8_t*)regional_alloc_zero(acl->region, @@ -348,8 +357,11 @@ acl_list_tag_data_cfg(struct acl_list* acl, struct config_file* cfg, struct acl_addr* node; int tagid; char* dupdata; - if(!(node=acl_find_or_create(acl, str, is_interface, port))) + if(!(node=acl_find_or_create(acl, str, is_interface, port))) { + if(is_interface) + log_err("non-configured interface: %s", str); return 0; + } /* allocate array if not yet */ if(!node->tag_datas) { node->tag_datas = (struct config_strlist**)regional_alloc_zero( diff --git a/daemon/worker.c b/daemon/worker.c index 94b7d9b53..29c1961ed 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1331,7 +1331,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, acladdr = acl_addr_lookup(worker->daemon->acl, &repinfo->addr, repinfo->addrlen); /* If there is no ACL based on client IP use the interface ACL. */ - if(!acladdr) { + if(!acladdr && c->socket) { acladdr = c->socket->acl; } acl = acl_get_control(acladdr); From aec33b3d63f89d8f98546266f25137a016c9252f Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Fri, 8 Oct 2021 18:08:17 +0200 Subject: [PATCH 16/60] Documentation for interface-* options. --- doc/example.conf.in | 59 ++++++++++++++++++++++++++++++++++++++++--- doc/unbound.conf.5.in | 42 +++++++++++++++++++++++++++++- 2 files changed, 96 insertions(+), 5 deletions(-) diff --git a/doc/example.conf.in b/doc/example.conf.in index 2bd106448..51e51b58b 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -218,7 +218,8 @@ server: # the maximum number of hosts that are cached (roundtrip, EDNS, lame). # infra-cache-numhosts: 10000 - # define a number of tags here, use with local-zone, access-control. + # define a number of tags here, use with local-zone, access-control, + # interface-*. # repeat the define-tag statement to add additional tags. # define-tag: "tag1 tag2 tag3" @@ -274,9 +275,7 @@ server: # allow_snoop (recursive and nonrecursive ok) # deny_non_local (drop queries unless can be answered from local-data) # refuse_non_local (like deny_non_local but polite error reply). - # access-control: 0.0.0.0/0 refuse # access-control: 127.0.0.0/8 allow - # access-control: ::0/0 refuse # access-control: ::1 allow # access-control: ::ffff:127.0.0.1 allow @@ -285,7 +284,7 @@ server: # are tagged with one of these tags. # access-control-tag: 192.0.2.0/24 "tag2 tag3" - # set action for particular tag for given access control element + # set action for particular tag for given access control element. # if you have multiple tag values, the tag used to lookup the action # is the first tag match between access-control-tag and local-zone-tag # where "first" comes from the order of the define-tag values. @@ -297,6 +296,58 @@ server: # Set view for access control element # access-control-view: 192.0.2.0/24 viewname + # Similar to 'access-control:' but for interfaces. + # Control which listening interfaces are allowed to accept (recursive) + # queries for this server. + # The specified interfaces should be the same as the ones specified in + # 'interface:' followed by the action. + # The actions are the same as 'access-control:' above. + # By default all the interfaces configured are refused. + # Note: any 'access-control*:' setting overrides all 'interface-*:' + # settings for targeted clients. + # interface-action: 192.0.2.153 allow + # interface-action: 192.0.2.154 allow + # interface-action: 192.0.2.154@5003 allow + # interface-action: 2001:DB8::5 allow + # interface-action: eth0@5003 allow + + # Similar to 'access-control-tag:' but for interfaces. + # Tag interfaces with a list of tags (in "" with spaces between). + # Interfaces using these tags use localzones that are tagged with one + # of these tags. + # The specified interfaces should be the same as the ones specified in + # 'interface:' followed by the list of tags. + # Note: any 'access-control*:' setting overrides all 'interface-*:' + # settings for targeted clients. + # interface-tag: eth0@5003 "tag2 tag3" + + # Similar to 'access-control-tag-action:' but for interfaces. + # Set action for particular tag for a given interface element. + # If you have multiple tag values, the tag used to lookup the action + # is the first tag match between interface-tag and local-zone-tag + # where "first" comes from the order of the define-tag values. + # The specified interfaces should be the same as the ones specified in + # 'interface:' followed by the tag and action. + # Note: any 'access-control*:' setting overrides all 'interface-*:' + # settings for targeted clients. + # interface-tag-action: eth0@5003 tag3 refuse + + # Similar to 'access-control-tag-data:' but for interfaces. + # Set redirect data for a particular tag for an interface element. + # The specified interfaces should be the same as the ones specified in + # 'interface:' followed by the tag and the redirect data. + # Note: any 'access-control*:' setting overrides all 'interface-*:' + # settings for targeted clients. + # interface-tag-data: eth0@5003 tag2 "A 127.0.0.1" + + # Similar to 'access-control-view:' but for interfaces. + # Set view for an interface element. + # The specified interfaces should be the same as the ones specified in + # 'interface:' followed by the view name. + # Note: any 'access-control*:' setting overrides all 'interface-*:' + # settings for targeted clients. + # interface-view: eth0@5003 viewname + # if given, a chroot(2) is done to the given directory. # i.e. you can chroot to the working directory, for example, # for extra security, but make sure all files are in that directory. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 23a0237e6..73575d93a 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -675,7 +675,7 @@ The netblock is given as an IP4 or IP6 address with /size appended for a classless network block. The action can be \fIdeny\fR, \fIrefuse\fR, \fIallow\fR, \fIallow_setrd\fR, \fIallow_snoop\fR, \fIdeny_non_local\fR or \fIrefuse_non_local\fR. -The most specific netblock match is used, if none match \fIdeny\fR is used. +The most specific netblock match is used, if none match \fIrefuse\fR is used. The order of the access\-control statements therefore does not matter. .IP The action \fIdeny\fR stops queries from hosts from that netblock. @@ -741,6 +741,46 @@ Set redirect data for particular tag for given access control element. .B access\-control\-view: \fI Set view for given access control element. .TP +.B interface\-action: \fI +Similar to \fBaccess\-control:\fR but for interfaces. +.IP +The action is the same as the ones defined under \fBaccess\-control:\fR. +Interfaces are \fIrefuse\fRd by default. +By default only localhost (the IP netblock, not the loopback interface) is +\fIallow\fRed through the default \fBaccess\-control:\fR behavior. +.IP +Note that the interface needs to be already specified with \fBinterface:\fR +and that any \fBaccess-control*:\fR setting overrides all \fBinterface-*:\fR +settings for targeted clients. +.TP +.B interface\-tag: \fI <"list of tags"> +Similar to \fBaccess\-control-tag:\fR but for interfaces. +.IP +Note that the interface needs to be already specified with \fBinterface:\fR +and that any \fBaccess-control*:\fR setting overrides all \fBinterface-*:\fR +settings for targeted clients. +.TP +.B interface\-tag\-action: \fI +Similar to \fBaccess\-control-tag-action:\fR but for interfaces. +.IP +Note that the interface needs to be already specified with \fBinterface:\fR +and that any \fBaccess-control*:\fR setting overrides all \fBinterface-*:\fR +settings for targeted clients. +.TP +.B interface\-tag\-data: \fI <"resource record string"> +Similar to \fBaccess\-control-tag-data:\fR but for interfaces. +.IP +Note that the interface needs to be already specified with \fBinterface:\fR +and that any \fBaccess-control*:\fR setting overrides all \fBinterface-*:\fR +settings for targeted clients. +.TP +.B interface\-view: \fI +Similar to \fBaccess\-control-view:\fR but for interfaces. +.IP +Note that the interface needs to be already specified with \fBinterface:\fR +and that any \fBaccess-control*:\fR setting overrides all \fBinterface-*:\fR +settings for targeted clients. +.TP .B chroot: \fI If chroot is enabled, you should pass the configfile (from the commandline) as a full path from the original root. After the From fc123303ac792fb996b04c8c60ed04fe64354ddd Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Fri, 8 Oct 2021 18:21:24 +0200 Subject: [PATCH 17/60] - Add functionality to skip tdir tests from the .pre file; - Initial tests for interface-* options. --- testcode/do-tests.sh | 2 + testcode/mini_tdir.sh | 30 +++-- .../acl_interface.tdir/acl_interface.conf | 68 ++++++++++ testdata/acl_interface.tdir/acl_interface.dsc | 16 +++ testdata/acl_interface.tdir/acl_interface.pre | 54 ++++++++ .../acl_interface.tdir/acl_interface.test | 11 ++ .../acl_interface.test.scenario | 116 ++++++++++++++++++ .../acl_interface.tdir/acl_interface.testns | 13 ++ .../acl_interface.tdir/acl_interface.testns2 | 13 ++ testdata/common.sh | 8 ++ 10 files changed, 322 insertions(+), 9 deletions(-) create mode 100644 testdata/acl_interface.tdir/acl_interface.conf create mode 100644 testdata/acl_interface.tdir/acl_interface.dsc create mode 100644 testdata/acl_interface.tdir/acl_interface.pre create mode 100644 testdata/acl_interface.tdir/acl_interface.test create mode 100644 testdata/acl_interface.tdir/acl_interface.test.scenario create mode 100644 testdata/acl_interface.tdir/acl_interface.testns create mode 100644 testdata/acl_interface.tdir/acl_interface.testns2 diff --git a/testcode/do-tests.sh b/testcode/do-tests.sh index 2a1cfc4c9..1669d6c33 100755 --- a/testcode/do-tests.sh +++ b/testcode/do-tests.sh @@ -16,6 +16,7 @@ NEED_WHOAMI='07-confroot.tdir' NEED_IPV6='fwd_ancil.tdir fwd_tcp_tc6.tdir stub_udp6.tdir edns_cache.tdir' NEED_NOMINGW='tcp_sigpipe.tdir 07-confroot.tdir 08-host-lib.tdir fwd_ancil.tdir' NEED_DNSCRYPT_PROXY='dnscrypt_queries.tdir dnscrypt_queries_chacha.tdir' +NEED_UNSHARE='acl_interface.tdir' # test if dig and ldns-testns are available. test_tool_avail "dig" @@ -50,6 +51,7 @@ for test in `ls -d *.tdir`; do skip_if_in_list $test "$NEED_NC" "nc" skip_if_in_list $test "$NEED_WHOAMI" "whoami" skip_if_in_list $test "$NEED_DNSCRYPT_PROXY" "dnscrypt-proxy" + skip_if_in_list $test "$NEED_UNSHARE" "unshare" if echo $NEED_IPV6 | grep $test >/dev/null; then if test "$HAVE_IPV6" = no; then diff --git a/testcode/mini_tdir.sh b/testcode/mini_tdir.sh index 6bbece8d9..46a930f41 100755 --- a/testcode/mini_tdir.sh +++ b/testcode/mini_tdir.sh @@ -17,9 +17,9 @@ fi if test "$1" = "clean"; then if test $quiet = 0; then - echo "rm -f result.* .done* .tdir.var.master .tdir.var.test" + echo "rm -f result.* .done* .skip* .tdir.var.master .tdir.var.test" fi - rm -f result.* .done* .tdir.var.master .tdir.var.test + rm -f result.* .done* .skip* .tdir.var.master .tdir.var.test exit 0 fi if test "$1" = "fake"; then @@ -54,12 +54,15 @@ if test "$1" = "-f" && test "$2" = "report"; then echo "** PASSED ** $timelen $name: $desc" pass=`expr $pass + 1` fi + elif test -f ".skip-$name"; then + echo ">> SKIPPED<< $timelen $name: $desc" + skip=`expr $pass + 1` else if test -f "result.$name"; then echo "!! FAILED !! $timelen $name: $desc" fail=`expr $fail + 1` else - echo ".> SKIPPED<< $timelen $name: $desc" + echo ">> SKIPPED<< $timelen $name: $desc" skip=`expr $skip + 1` fi fi @@ -81,6 +84,10 @@ if test "$1" = "report" || test "$2" = "report"; then if test $quiet = 0; then echo "** PASSED ** : $name" fi + elif test -f ".skip-$name"; then + if test $quiet = 0; then + echo ">> SKIPPED<< : $name" + fi else if test -f "result.$name"; then echo "!! FAILED !! : $name" @@ -116,6 +123,7 @@ name=`basename $1 .tdir` dir=$name.$$ result=result.$name done=.done-$name +skip=.skip-$name success="no" if test -x "`which bash`"; then shell="bash" @@ -124,8 +132,8 @@ else fi # check already done -if test -f .done-$name; then - echo "minitdir .done-$name exists. skip test." +if test -f $done; then + echo "minitdir $done exists. skip test." exit 0 fi @@ -151,11 +159,15 @@ if test -f $name.pre; then fi echo "minitdir exe $name.pre" >> $result $shell $name.pre $args >> $result - if test $? -ne 0; then + exit_value=$? + if test $exit_value -eq 3; then + echo "$name: SKIPPED" >> $result + echo "$name: SKIPPED" > ../$skip + elif test $exit_value -ne 0; then echo "Warning: $name.pre did not exit successfully" fi fi -if test -f $name.test; then +if test -f $name.test -a ! -f ../$skip; then if test $quiet = 0; then echo "minitdir exe $name.test" fi @@ -167,14 +179,14 @@ if test -f $name.test; then success="no" else echo "$name: PASSED" >> $result - echo "$name: PASSED" > ../.done-$name + echo "$name: PASSED" > ../$done if test $quiet = 0; then echo "$name: PASSED" fi success="yes" fi fi -if test -f $name.post; then +if test -f $name.post -a ! -f ../$skip; then if test $quiet = 0; then echo "minitdir exe $name.post" fi diff --git a/testdata/acl_interface.tdir/acl_interface.conf b/testdata/acl_interface.tdir/acl_interface.conf new file mode 100644 index 000000000..0c2314770 --- /dev/null +++ b/testdata/acl_interface.tdir/acl_interface.conf @@ -0,0 +1,68 @@ +server: + verbosity: 7 + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + use-caps-for-id: yes + +# Interface configuration for IPv4 + interface: @IPV4_ADDR@@@PORT_ALLOW@ + interface: @IPV4_ADDR@@@PORT_DENY@ + interface: @IPV4_ADDR@@@PORT_REFUSE@ + interface: @IPV4_ADDR@@@PORT_VIEW_INT@ + interface: @IPV4_ADDR@@@PORT_VIEW_EXT@ + interface: @IPV4_ADDR@@@PORT_VIEW_INTEXT@ + + interface-action: @IPV4_ADDR@@@PORT_ALLOW@ allow + interface-action: @IPV4_ADDR@@@PORT_DENY@ deny + interface-action: @IPV4_ADDR@@@PORT_VIEW_INT@ allow + interface-action: @IPV4_ADDR@@@PORT_VIEW_EXT@ allow + interface-action: @IPV4_ADDR@@@PORT_VIEW_INTEXT@ allow + + interface-view: @IPV4_ADDR@@@PORT_VIEW_INT@ "int" + interface-view: @IPV4_ADDR@@@PORT_VIEW_EXT@ "ext" + interface-view: @IPV4_ADDR@@@PORT_VIEW_INTEXT@ "intext" + +# Mirrored interface configuration for IPv6 + interface: @IPV6_ADDR@@@PORT_ALLOW@ + interface: @IPV6_ADDR@@@PORT_DENY@ + interface: @IPV6_ADDR@@@PORT_REFUSE@ + interface: @IPV6_ADDR@@@PORT_VIEW_INT@ + interface: @IPV6_ADDR@@@PORT_VIEW_EXT@ + interface: @IPV6_ADDR@@@PORT_VIEW_INTEXT@ + + interface-action: @IPV6_ADDR@@@PORT_ALLOW@ allow + interface-action: @IPV6_ADDR@@@PORT_DENY@ deny + interface-action: @IPV6_ADDR@@@PORT_VIEW_INT@ allow + interface-action: @IPV6_ADDR@@@PORT_VIEW_EXT@ allow + interface-action: @IPV6_ADDR@@@PORT_VIEW_INTEXT@ allow + + interface-view: @IPV6_ADDR@@@PORT_VIEW_INT@ "int" + interface-view: @IPV6_ADDR@@@PORT_VIEW_EXT@ "ext" + interface-view: @IPV6_ADDR@@@PORT_VIEW_INTEXT@ "intext" + +# Views configuration +view: + name: "int" + view-first: yes + local-zone: "." refuse + local-zone: "internal" transparent +view: + name: "ext" + view-first: yes + local-zone: "internal" refuse +view: + name: "intext" + view-first: yes + +# Stubs configuration +forward-zone: + name: "." + forward-addr: @IPV4_ADDR@@@FORWARD_PORT@ + +stub-zone: + name: "internal" + stub-addr: @IPV4_ADDR@@@STUB_PORT@ diff --git a/testdata/acl_interface.tdir/acl_interface.dsc b/testdata/acl_interface.tdir/acl_interface.dsc new file mode 100644 index 000000000..3e5e94de8 --- /dev/null +++ b/testdata/acl_interface.tdir/acl_interface.dsc @@ -0,0 +1,16 @@ +BaseName: acl_interface +Version: 1.0 +Description: Check the interface-* settings +CreationDate: Fri 8 Oct 18:14:40 CEST 2021 +Maintainer: +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: acl_interface.pre +Post: +Test: acl_interface.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/acl_interface.tdir/acl_interface.pre b/testdata/acl_interface.tdir/acl_interface.pre new file mode 100644 index 000000000..14f2fb599 --- /dev/null +++ b/testdata/acl_interface.tdir/acl_interface.pre @@ -0,0 +1,54 @@ +# #-- acl_interface.pre--# +PRE="../.." +. ../common.sh + +# This test uses the unshare utility +if test ! -x "`which unshare 2>&1`"; then + skip_test "no unshare (from util-linux package) available, skip test" +fi + +get_random_port 8 + +PORT_ALLOW=$RND_PORT +PORT_DENY=$(($RND_PORT + 1)) +PORT_REFUSE=$(($RND_PORT + 2)) +PORT_VIEW_INT=$(($RND_PORT + 3)) +PORT_VIEW_EXT=$(($RND_PORT + 4)) +PORT_VIEW_INTEXT=$(($RND_PORT + 5)) +FORWARD_PORT=$(($RND_PORT + 6)) +STUB_PORT=$(($RND_PORT + 7)) + +IPV4_ADDR=192.168.1.1 +IPV6_ADDR=2001:db8::1 + +# make config file +sed \ + -e 's/@PORT_ALLOW\@/'$PORT_ALLOW'/' \ + -e 's/@PORT_DENY\@/'$PORT_DENY'/' \ + -e 's/@PORT_REFUSE\@/'$PORT_REFUSE'/' \ + -e 's/@PORT_VIEW_INT\@/'$PORT_VIEW_INT'/' \ + -e 's/@PORT_VIEW_EXT\@/'$PORT_VIEW_EXT'/' \ + -e 's/@PORT_VIEW_INTEXT\@/'$PORT_VIEW_INTEXT'/' \ + -e 's/@FORWARD_PORT\@/'$FORWARD_PORT'/' \ + -e 's/@STUB_PORT\@/'$STUB_PORT'/' \ + -e 's/@IPV4_ADDR\@/'$IPV4_ADDR'/' \ + -e 's/@IPV6_ADDR\@/'$IPV6_ADDR'/' \ + < acl_interface.conf > ub.conf + +if test -x "`which bash`"; then + shell="bash" +else + shell="sh" +fi + +echo "PORT_ALLOW=$PORT_ALLOW" >> .tpkg.var.test +echo "PORT_DENY=$PORT_DENY" >> .tpkg.var.test +echo "PORT_REFUSE=$PORT_REFUSE" >> .tpkg.var.test +echo "PORT_VIEW_INT=$PORT_VIEW_INT" >> .tpkg.var.test +echo "PORT_VIEW_EXT=$PORT_VIEW_EXT" >> .tpkg.var.test +echo "PORT_VIEW_INTEXT=$PORT_VIEW_INTEXT" >> .tpkg.var.test +echo "FORWARD_PORT=$FORWARD_PORT" >> .tpkg.var.test +echo "STUB_PORT=$STUB_PORT" >> .tpkg.var.test +echo "IPV4_ADDR=$IPV4_ADDR" >> .tpkg.var.test +echo "IPV6_ADDR=$IPV6_ADDR" >> .tpkg.var.test +echo "shell=$shell" >> .tpkg.var.test diff --git a/testdata/acl_interface.tdir/acl_interface.test b/testdata/acl_interface.tdir/acl_interface.test new file mode 100644 index 000000000..421081887 --- /dev/null +++ b/testdata/acl_interface.tdir/acl_interface.test @@ -0,0 +1,11 @@ +# #-- acl_interface.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test +PRE="../.." +. ../common.sh + +# Run the scenario in an unshared namespace +unshare -rUn $shell acl_interface.test.scenario +exit $? diff --git a/testdata/acl_interface.tdir/acl_interface.test.scenario b/testdata/acl_interface.tdir/acl_interface.test.scenario new file mode 100644 index 000000000..d30c64d3f --- /dev/null +++ b/testdata/acl_interface.tdir/acl_interface.test.scenario @@ -0,0 +1,116 @@ +# #-- acl_interface.test.scenario --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test +PRE="../.." +. ../common.sh + +ip addr add $IPV4_ADDR dev lo +ip addr add $IPV6_ADDR dev lo +ip link set lo up + +# start the forwarder in the background +get_ldns_testns +$LDNS_TESTNS -p $FORWARD_PORT acl_interface.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start the stub in the background +$LDNS_TESTNS -p $STUB_PORT acl_interface.testns2 >fwd2.log 2>&1 & +STUB_PID=$! +echo "STUB_PID=$STUB_PID" >> .tpkg.var.test + +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_ldns_testns_up fwd2.log +wait_unbound_up unbound.log + +# Query for the given domain to the given port +# $1: address family [4, 6] +# $2: port +# $3: dname +query () { + addr=$IPV4_ADDR + if test "$1" -eq 6; then + addr=$IPV6_ADDR + fi + echo "> dig -p $2 $3" + dig @"$addr" -p $2 $3 | tee outfile +} + +expect_refused () { + echo "> check answer for REFUSED" + if grep "REFUSED" outfile; then + echo "OK" + else + echo "Not OK" + exit 1 + fi +} + +expect_external_answer () { + echo "> check external answer" + if grep "1.2.3.4" outfile; then + echo "OK" + else + echo "Not OK" + exit 1 + fi +} + +expect_internal_answer () { + echo "> check internal answer" + if grep "10.20.30.40" outfile; then + echo "OK" + else + echo "Not OK" + exit 1 + fi +} + + +# do the test + +for i in 4 6; do + query $i $PORT_REFUSE "www.external" + expect_refused + + query $i $PORT_REFUSE "www.internal" + expect_refused + + query $i $PORT_ALLOW "www.external" + expect_external_answer + + query $i $PORT_ALLOW "www.internal" + expect_internal_answer + + query $i $PORT_VIEW_INT "www.internal" + expect_internal_answer + + query $i $PORT_VIEW_INT "www.external" + expect_refused + + query $i $PORT_VIEW_EXT "www.internal" + expect_refused + + query $i $PORT_VIEW_EXT "www.external" + expect_external_answer + + query $i $PORT_VIEW_INTEXT "www.internal" + expect_internal_answer + + query $i $PORT_VIEW_INTEXT "www.external" + expect_external_answer +done + +echo "> cat logfiles" +cat fwd.log +cat fwd2.log +cat unbound.log +exit 0 diff --git a/testdata/acl_interface.tdir/acl_interface.testns b/testdata/acl_interface.tdir/acl_interface.testns new file mode 100644 index 000000000..62abf6928 --- /dev/null +++ b/testdata/acl_interface.tdir/acl_interface.testns @@ -0,0 +1,13 @@ +; nameserver test file +$ORIGIN external. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 1.2.3.4 +ENTRY_END diff --git a/testdata/acl_interface.tdir/acl_interface.testns2 b/testdata/acl_interface.tdir/acl_interface.testns2 new file mode 100644 index 000000000..e9edfc8ba --- /dev/null +++ b/testdata/acl_interface.tdir/acl_interface.testns2 @@ -0,0 +1,13 @@ +; nameserver test file +$ORIGIN internal. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END diff --git a/testdata/common.sh b/testdata/common.sh index 280f5dac4..a449f1a64 100644 --- a/testdata/common.sh +++ b/testdata/common.sh @@ -27,6 +27,7 @@ # wait_petal_up : wait for petal to come up. # wait_nsd_up : wait for nsd to come up. # wait_server_up_or_fail: wait for server to come up or print a failure string +# skip_test x : print message and skip test (must be called in .pre) # kill_pid : kill a server, make sure and wait for it to go down. @@ -109,6 +110,13 @@ skip_if_in_list () { fi } +# Print a message and skip the test. Must be called in the .pre file. +# $1: message to print. +skip_test () { + echo "$1" + exit 3 +} + # function to get a number of random port numbers. # $1: number of random ports. # RND_PORT is returned as the starting port number From d301bfe4a2b005b0202b2e6cde6dd5fffe25239d Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Sun, 11 Sep 2022 20:57:41 +0200 Subject: [PATCH 18/60] - ACL per interface: refactor, complete testing and a bugfix for interface names. --- Makefile.in | 8 +- daemon/acl_list.c | 79 +++++++------ daemon/acl_list.h | 11 +- daemon/daemon.c | 46 +++++++- services/listen_dnsport.c | 43 ++----- services/listen_dnsport.h | 2 - testcode/fake_event.c | 3 +- .../acl_interface.tdir/acl_interface.conf | 74 +++++++++++- testdata/acl_interface.tdir/acl_interface.pre | 33 +++++- .../acl_interface.test.scenario | 105 ++++++++++++++++-- .../acl_interface.tdir/acl_interface.testns | 13 +++ util/fptr_wlist.c | 3 +- util/storage/dnstree.c | 13 +++ util/storage/dnstree.h | 10 ++ 14 files changed, 339 insertions(+), 104 deletions(-) diff --git a/Makefile.in b/Makefile.in index bf78a694d..3189731ad 100644 --- a/Makefile.in +++ b/Makefile.in @@ -139,7 +139,7 @@ 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_SRC) respip/respip.c $(CHECKLOCK_SRC) \ -$(DNSTAP_SRC) $(DNSCRYPT_SRC) $(IPSECMOD_SRC) $(IPSET_SRC) daemon/acl_list.c +$(DNSTAP_SRC) $(DNSCRYPT_SRC) $(IPSECMOD_SRC) $(IPSET_SRC) COMMON_OBJ_WITHOUT_NETCALL=dns.lo infra.lo rrset.lo dname.lo msgencode.lo \ as112.lo msgparse.lo msgreply.lo packed_rrset.lo iterator.lo iter_delegpt.lo \ iter_donotq.lo iter_fwd.lo iter_hints.lo iter_priv.lo iter_resptype.lo \ @@ -154,7 +154,7 @@ val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo $(CACHEDB_OBJ) authzone.lo $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \ $(IPSECMOD_OBJ) $(IPSET_OBJ) $(DYNLIBMOD_OBJ) respip.lo COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \ -outside_network.lo acl_list.lo +outside_network.lo COMMON_OBJ=$(COMMON_OBJ_WITHOUT_UB_EVENT) ub_event.lo # set to $COMMON_OBJ or to "" if --enableallsymbols COMMON_OBJ_ALL_SYMBOLS=@COMMON_OBJ_ALL_SYMBOLS@ @@ -186,9 +186,9 @@ readhex.lo testpkts.lo unitldns.lo unitecs.lo unitauth.lo unitzonemd.lo \ unittcpreuse.lo UNITTEST_OBJ_LINK=$(UNITTEST_OBJ) worker_cb.lo $(COMMON_OBJ) $(SLDNS_OBJ) \ $(COMPAT_OBJ) -DAEMON_SRC=daemon/cachedump.c daemon/daemon.c \ +DAEMON_SRC=daemon/acl_list.c daemon/cachedump.c daemon/daemon.c \ daemon/remote.c daemon/stats.c daemon/unbound.c daemon/worker.c @WIN_DAEMON_SRC@ -DAEMON_OBJ=cachedump.lo daemon.lo \ +DAEMON_OBJ=acl_list.lo cachedump.lo daemon.lo \ shm_main.lo remote.lo stats.lo unbound.lo \ worker.lo @WIN_DAEMON_OBJ@ DAEMON_OBJ_LINK=$(DAEMON_OBJ) $(COMMON_OBJ_ALL_SYMBOLS) $(SLDNS_OBJ) \ diff --git a/daemon/acl_list.c b/daemon/acl_list.c index 5ec4122a4..05b720bd5 100644 --- a/daemon/acl_list.c +++ b/daemon/acl_list.c @@ -142,8 +142,8 @@ acl_list_str_cfg(struct acl_list* acl, const char* str, const char* s2, /** find or create node (NULL on parse or error) */ static struct acl_addr* -acl_find_or_create(struct acl_list* acl, const char* str, int is_interface, - int port) +acl_find_or_create_str2addr(struct acl_list* acl, const char* str, + int is_interface, int port) { struct acl_addr* node; struct sockaddr_storage addr; @@ -174,6 +174,27 @@ acl_find_or_create(struct acl_list* acl, const char* str, int is_interface, return node; } +/** find or create node (NULL on error) */ +static struct acl_addr* +acl_find_or_create(struct acl_list* acl, struct sockaddr_storage* addr, + socklen_t addrlen, enum acl_access control) +{ + struct acl_addr* node; + int net = (addr_is_ip6(addr, addrlen)?128:32); + /* find or create node */ + if(!(node=(struct acl_addr*)addr_tree_find(&acl->tree, addr, + addrlen, net))) { + /* create node; + * can override with specific access-control: cfg */ + if(!(node=(struct acl_addr*)acl_list_insert(acl, addr, + addrlen, net, control, 1))) { + log_err("out of memory"); + return NULL; + } + } + return node; +} + /** apply acl_interface string */ static int acl_interface_str_cfg(struct acl_list* acl_interface, const char* interface, @@ -184,7 +205,7 @@ acl_interface_str_cfg(struct acl_list* acl_interface, const char* interface, if(!parse_acl_access(s2, &control)) { return 0; } - if(!(node=acl_find_or_create(acl_interface, interface, 1, port))) { + if(!(node=acl_find_or_create_str2addr(acl_interface, interface, 1, port))) { log_err("cannot update ACL on non-configured interface: %s %d", interface, port); return 0; @@ -194,25 +215,11 @@ acl_interface_str_cfg(struct acl_list* acl_interface, const char* interface, } struct acl_addr* -acl_interface_insert(struct acl_list* acl_interface, const char* interface, - const char* s2, int port) +acl_interface_insert(struct acl_list* acl_interface, + struct sockaddr_storage* addr, socklen_t addrlen, + enum acl_access control) { - struct acl_addr* node; - struct sockaddr_storage addr; - socklen_t addrlen; - enum acl_access control; - int net = (str_is_ip6(interface)?128:32); - if(!parse_acl_access(s2, &control)) { - return NULL; - } - if((node=acl_find_or_create(acl_interface, interface, 1, port))) { - return node; - } - if(!extstrtoaddr(interface, &addr, &addrlen, port)) { - log_err("cannot parse access control: %s %s", interface, s2); - return NULL; - } - return acl_list_insert(acl_interface, &addr, addrlen, net, control, 1); + return acl_find_or_create(acl_interface, addr, addrlen, control); } /** apply acl_tag string */ @@ -221,7 +228,7 @@ acl_list_tags_cfg(struct acl_list* acl, const char* str, uint8_t* bitmap, size_t bitmaplen, int is_interface, int port) { struct acl_addr* node; - if(!(node=acl_find_or_create(acl, str, is_interface, port))) { + if(!(node=acl_find_or_create_str2addr(acl, str, is_interface, port))) { if(is_interface) log_err("non-configured interface: %s", str); return 0; @@ -241,7 +248,7 @@ acl_list_view_cfg(struct acl_list* acl, const char* str, const char* str2, struct views* vs, int is_interface, int port) { struct acl_addr* node; - if(!(node=acl_find_or_create(acl, str, is_interface, port))) { + if(!(node=acl_find_or_create_str2addr(acl, str, is_interface, port))) { if(is_interface) log_err("non-configured interface: %s", str); return 0; @@ -264,7 +271,7 @@ acl_list_tag_action_cfg(struct acl_list* acl, struct config_file* cfg, struct acl_addr* node; int tagid; enum localzone_type t; - if(!(node=acl_find_or_create(acl, str, is_interface, port))) { + if(!(node=acl_find_or_create_str2addr(acl, str, is_interface, port))) { if(is_interface) log_err("non-configured interface: %s", str); return 0; @@ -357,7 +364,7 @@ acl_list_tag_data_cfg(struct acl_list* acl, struct config_file* cfg, struct acl_addr* node; int tagid; char* dupdata; - if(!(node=acl_find_or_create(acl, str, is_interface, port))) { + if(!(node=acl_find_or_create_str2addr(acl, str, is_interface, port))) { if(is_interface) log_err("non-configured interface: %s", str); return 0; @@ -557,10 +564,12 @@ void acl_interface_init(struct acl_list* acl_interface) { regional_free_all(acl_interface->region); - /* We want comparison in the tree to include both IP and port. - * Initialise with the given compare fucntion but keep treating it as - * an addr_tree. */ - rbtree_init(&acl_interface->tree, &acl_interface_compare); + /* We want comparison in the tree to include only address and port. + * We don't care about comparing node->net. All addresses in the + * acl_interface->tree should have either 32 (ipv4) or 128 (ipv6). + * Initialise with the appropriate compare fucntion but keep treating + * it as an addr_tree. */ + addr_tree_addrport_init(&acl_interface->tree); } static int @@ -604,7 +613,7 @@ read_acl_interface_view(struct acl_list* acl_interface, return 0; } for(i = 0; istr, p->str2, + if(!acl_list_view_cfg(acl_interface, resif[i], p->str2, v, 1, port)) { config_del_strarray(resif, num_resif); config_deldblstrlist(p); @@ -639,7 +648,7 @@ read_acl_interface_tags(struct acl_list* acl_interface, return 0; } for(i = 0; istr, p->str2, + if(!acl_list_tags_cfg(acl_interface, resif[i], p->str2, p->str2len, 1, port)) { config_del_strbytelist(p); config_del_strarray(resif, num_resif); @@ -676,8 +685,8 @@ read_acl_interface_tag_actions(struct acl_list* acl_interface, return 0; } for(i = 0; istr, - p->str2, p->str3, 1, port)) { + if(!acl_list_tag_action_cfg(acl_interface, cfg, + resif[i], p->str2, p->str3, 1, port)) { config_deltrplstrlist(p); config_del_strarray(resif, num_resif); return 0; @@ -714,8 +723,8 @@ read_acl_interface_tag_datas(struct acl_list* acl_interface, return 0; } for(i = 0; istr, - p->str2, p->str3, 1, port)) { + if(!acl_list_tag_data_cfg(acl_interface, cfg, + resif[i], p->str2, p->str3, 1, port)) { config_deltrplstrlist(p); config_del_strarray(resif, num_resif); return 0; diff --git a/daemon/acl_list.h b/daemon/acl_list.h index 6617ec8c4..930f978d3 100644 --- a/daemon/acl_list.h +++ b/daemon/acl_list.h @@ -123,14 +123,15 @@ void acl_list_delete(struct acl_list* acl); * Insert interface in the alc_list. This should happen when the listening * interface is setup. * @param acl_interface: acl_list to insert to. - * @param interface: interface (IP) in string format. - * @param s2: acl_access in string format. - * @param port: default port. + * @param addr: interface IP. + * @param addrlen: length of the interface IP. + * @param control: acl_access. * @return new structure or NULL on error. */ struct acl_addr* -acl_interface_insert(struct acl_list* acl_interface, const char* interface, - const char* s2, int port); +acl_interface_insert(struct acl_list* acl_interface, + struct sockaddr_storage* addr, socklen_t addrlen, + enum acl_access control); /** * Process access control config. diff --git a/daemon/daemon.c b/daemon/daemon.c index 28a06175d..71091133a 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -96,6 +96,9 @@ #ifdef HAVE_SYSTEMD #include #endif +#ifdef HAVE_NETDB_H +#include +#endif /** How many quit requests happened. */ static int sig_record_quit = 0; @@ -314,6 +317,29 @@ daemon_init(void) return daemon; } +static int setup_acl_for_ports(struct acl_list* list, + struct listen_port* port_list) +{ + struct acl_addr* acl_node; + struct addrinfo* addr; + for(; port_list; port_list=port_list->next) { + if(!port_list->socket) { + /* This is mainly for testbound where port_list is + * empty. */ + continue; + } + addr = port_list->socket->addr; + if(!(acl_node = acl_interface_insert(list, + (struct sockaddr_storage*)addr->ai_addr, + (socklen_t)addr->ai_addrlen, + acl_refuse))) { + return 0; + } + port_list->socket->acl = acl_node; + } + return 1; +} + int daemon_open_shared_ports(struct daemon* daemon) { @@ -342,8 +368,8 @@ daemon_open_shared_ports(struct daemon* daemon) daemon->reuseport = 1; #endif /* try to use reuseport */ - p0 = listening_ports_open(daemon->cfg, daemon->acl_interface, - resif, num_resif, &daemon->reuseport); + p0 = listening_ports_open(daemon->cfg, resif, num_resif, + &daemon->reuseport); if(!p0) { listening_ports_free(p0); config_del_strarray(resif, num_resif); @@ -364,12 +390,17 @@ daemon_open_shared_ports(struct daemon* daemon) return 0; } daemon->ports[0] = p0; + if(!setup_acl_for_ports(daemon->acl_interface, + daemon->ports[0])) { + listening_ports_free(p0); + config_del_strarray(resif, num_resif); + return 0; + } if(daemon->reuseport) { /* continue to use reuseport */ for(i=1; inum_ports; i++) { if(!(daemon->ports[i]= listening_ports_open(daemon->cfg, - daemon->acl_interface, resif, num_resif, &daemon->reuseport)) || !daemon->reuseport ) { @@ -380,6 +411,15 @@ daemon_open_shared_ports(struct daemon* daemon) config_del_strarray(resif, num_resif); return 0; } + if(!setup_acl_for_ports(daemon->acl_interface, + daemon->ports[i])) { + for(i=0; inum_ports; i++) + listening_ports_free(daemon->ports[i]); + free(daemon->ports); + daemon->ports = NULL; + config_del_strarray(resif, num_resif); + return 0; + } } } config_del_strarray(resif, num_resif); diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index fb2c53ba2..e823b3c12 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1196,7 +1196,6 @@ if_is_ssl(const char* ifname, const char* port, int ssl_port, * @param hints: for getaddrinfo. family and flags have to be set by caller. * @param port: Port number to use (as string). * @param list: list of open ports, appended to, changed to point to list head. - * @param acl_interface: acl list with options for the interface. * @param rcv: receive buffer size for UDP * @param snd: send buffer size for UDP * @param ssl_port: ssl service port number @@ -1216,7 +1215,7 @@ if_is_ssl(const char* ifname, const char* port, int ssl_port, static int ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, struct addrinfo *hints, const char* port, struct listen_port** list, - struct acl_list* acl_interface, size_t rcv, size_t snd, int ssl_port, + size_t rcv, size_t snd, int ssl_port, struct config_strlist* tls_additional_port, int https_port, int* reuseport, int transparent, int tcp_mss, int freebind, int http2_nodelay, int use_systemd, int dnscrypt_port, int dscp) @@ -1225,7 +1224,6 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, int is_https = if_is_https(ifname, port, https_port); int nodelay = is_https && http2_nodelay; struct unbound_socket* ub_sock; - struct acl_addr* acl_node; #ifdef USE_DNSCRYPT int is_dnscrypt = ((strchr(ifname, '@') && atoi(strchr(ifname, '@')+1) == dnscrypt_port) || @@ -1240,7 +1238,6 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, if(do_auto) { ub_sock = calloc(1, sizeof(struct unbound_socket)); - acl_node = NULL; if(!ub_sock) return 0; if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1, @@ -1269,17 +1266,8 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, free(ub_sock); return 0; } - if(!(acl_node = acl_interface_insert(acl_interface, ifname, - "refuse", ntohs(((struct sockaddr_in*)ub_sock->addr->ai_addr)->sin_port)))) { - sock_close(s); - freeaddrinfo(ub_sock->addr); - free(ub_sock); - return 0; - } - ub_sock->acl = acl_node; } else if(do_udp) { ub_sock = calloc(1, sizeof(struct unbound_socket)); - acl_node = NULL; if(!ub_sock) return 0; /* regular udp socket */ @@ -1301,21 +1289,12 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, free(ub_sock); return 0; } - if(!(acl_node = acl_interface_insert(acl_interface, ifname, - "refuse", ntohs(((struct sockaddr_in*)ub_sock->addr->ai_addr)->sin_port)))) { - sock_close(s); - freeaddrinfo(ub_sock->addr); - free(ub_sock); - return 0; - } - ub_sock->acl = acl_node; } if(do_tcp) { int is_ssl = if_is_ssl(ifname, port, ssl_port, tls_additional_port); enum listen_type port_type; ub_sock = calloc(1, sizeof(struct unbound_socket)); - acl_node = NULL; if(!ub_sock) return 0; if(is_ssl) @@ -1345,14 +1324,6 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, free(ub_sock); return 0; } - if(!(acl_node = acl_interface_insert(acl_interface, ifname, - "refuse", ntohs(((struct sockaddr_in*)ub_sock->addr->ai_addr)->sin_port)))) { - sock_close(s); - freeaddrinfo(ub_sock->addr); - free(ub_sock); - return 0; - } - ub_sock->acl = acl_node; } return 1; } @@ -1750,8 +1721,8 @@ int resolve_interface_names(char** ifs, int num_ifs, } struct listen_port* -listening_ports_open(struct config_file* cfg, struct acl_list* acl_interface, - char** ifs, int num_ifs, int* reuseport) +listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs, + int* reuseport) { struct listen_port* list = NULL; struct addrinfo hints; @@ -1842,7 +1813,7 @@ listening_ports_open(struct config_file* cfg, struct acl_list* acl_interface, hints.ai_family = AF_INET6; if(!ports_create_if(do_auto?"::0":"::1", do_auto, cfg->do_udp, do_tcp, - &hints, portbuf, &list, acl_interface, + &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, cfg->https_port, reuseport, cfg->ip_transparent, @@ -1857,7 +1828,7 @@ listening_ports_open(struct config_file* cfg, struct acl_list* acl_interface, hints.ai_family = AF_INET; if(!ports_create_if(do_auto?"0.0.0.0":"127.0.0.1", do_auto, cfg->do_udp, do_tcp, - &hints, portbuf, &list, acl_interface, + &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, cfg->https_port, reuseport, cfg->ip_transparent, @@ -1874,7 +1845,7 @@ listening_ports_open(struct config_file* cfg, struct acl_list* acl_interface, continue; hints.ai_family = AF_INET6; if(!ports_create_if(ifs[i], 0, cfg->do_udp, - do_tcp, &hints, portbuf, &list, acl_interface, + do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, cfg->https_port, reuseport, cfg->ip_transparent, @@ -1889,7 +1860,7 @@ listening_ports_open(struct config_file* cfg, struct acl_list* acl_interface, continue; hints.ai_family = AF_INET; if(!ports_create_if(ifs[i], 0, cfg->do_udp, - do_tcp, &hints, portbuf, &list, acl_interface, + do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, cfg->https_port, reuseport, cfg->ip_transparent, diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index 70b3da0f0..f27fa597b 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -138,7 +138,6 @@ struct listen_port { * interfaces for IP4 and/or IP6, for UDP and/or TCP. * On the given port number. It creates the sockets. * @param cfg: settings on what ports to open. - * @param acl_interface: acl list for interface options. * @param ifs: interfaces to open, array of IP addresses, "ip[@port]". * @param num_ifs: length of ifs. * @param reuseport: set to true if you want reuseport, or NULL to not have it, @@ -147,7 +146,6 @@ struct listen_port { * @return: linked list of ports or NULL on error. */ struct listen_port* listening_ports_open(struct config_file* cfg, - struct acl_list* acl_interface, char** ifs, int num_ifs, int* reuseport); /** diff --git a/testcode/fake_event.c b/testcode/fake_event.c index a50e2f3b1..03e1c04f3 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1341,11 +1341,10 @@ int resolve_interface_names(char** ATTR_UNUSED(ifs), int ATTR_UNUSED(num_ifs), } struct listen_port* listening_ports_open(struct config_file* ATTR_UNUSED(cfg), - struct acl_list* ATTR_UNUSED(acl_interface), char** ATTR_UNUSED(ifs), int ATTR_UNUSED(num_ifs), int* ATTR_UNUSED(reuseport)) { - return calloc(1, 1); + return calloc(1, sizeof(struct listen_port)); } void listening_ports_free(struct listen_port* list) diff --git a/testdata/acl_interface.tdir/acl_interface.conf b/testdata/acl_interface.tdir/acl_interface.conf index 0c2314770..157a2d7b7 100644 --- a/testdata/acl_interface.tdir/acl_interface.conf +++ b/testdata/acl_interface.tdir/acl_interface.conf @@ -6,22 +6,39 @@ server: chroot: "" username: "" do-not-query-localhost: no - use-caps-for-id: yes + use-caps-for-id: no + define-tag: "one two refuse" # Interface configuration for IPv4 interface: @IPV4_ADDR@@@PORT_ALLOW@ interface: @IPV4_ADDR@@@PORT_DENY@ interface: @IPV4_ADDR@@@PORT_REFUSE@ + interface: @IPV4_ADDR@@@PORT_TAG_1@ + interface: @IPV4_ADDR@@@PORT_TAG_2@ + interface: @IPV4_ADDR@@@PORT_TAG_3@ interface: @IPV4_ADDR@@@PORT_VIEW_INT@ interface: @IPV4_ADDR@@@PORT_VIEW_EXT@ interface: @IPV4_ADDR@@@PORT_VIEW_INTEXT@ interface-action: @IPV4_ADDR@@@PORT_ALLOW@ allow interface-action: @IPV4_ADDR@@@PORT_DENY@ deny + # interface-action: @IPV4_ADDR@@@PORT_REFUSE@ refuse # This is the default action + interface-action: @IPV4_ADDR@@@PORT_TAG_1@ allow + interface-action: @IPV4_ADDR@@@PORT_TAG_2@ allow + interface-action: @IPV4_ADDR@@@PORT_TAG_3@ allow interface-action: @IPV4_ADDR@@@PORT_VIEW_INT@ allow interface-action: @IPV4_ADDR@@@PORT_VIEW_EXT@ allow interface-action: @IPV4_ADDR@@@PORT_VIEW_INTEXT@ allow + interface-tag: @IPV4_ADDR@@@PORT_TAG_1@ "one" + interface-tag: @IPV4_ADDR@@@PORT_TAG_2@ "two" + interface-tag: @IPV4_ADDR@@@PORT_TAG_3@ "refuse" + interface-tag-action: @IPV4_ADDR@@@PORT_TAG_1@ one redirect + interface-tag-data: @IPV4_ADDR@@@PORT_TAG_1@ one "A 1.1.1.1" + interface-tag-action: @IPV4_ADDR@@@PORT_TAG_2@ two redirect + interface-tag-data: @IPV4_ADDR@@@PORT_TAG_2@ two "A 2.2.2.2" + interface-tag-action: @IPV4_ADDR@@@PORT_TAG_3@ refuse always_refuse + interface-view: @IPV4_ADDR@@@PORT_VIEW_INT@ "int" interface-view: @IPV4_ADDR@@@PORT_VIEW_EXT@ "ext" interface-view: @IPV4_ADDR@@@PORT_VIEW_INTEXT@ "intext" @@ -30,20 +47,75 @@ server: interface: @IPV6_ADDR@@@PORT_ALLOW@ interface: @IPV6_ADDR@@@PORT_DENY@ interface: @IPV6_ADDR@@@PORT_REFUSE@ + interface: @IPV6_ADDR@@@PORT_TAG_1@ + interface: @IPV6_ADDR@@@PORT_TAG_2@ + interface: @IPV6_ADDR@@@PORT_TAG_3@ interface: @IPV6_ADDR@@@PORT_VIEW_INT@ interface: @IPV6_ADDR@@@PORT_VIEW_EXT@ interface: @IPV6_ADDR@@@PORT_VIEW_INTEXT@ interface-action: @IPV6_ADDR@@@PORT_ALLOW@ allow interface-action: @IPV6_ADDR@@@PORT_DENY@ deny + # interface-action: @IPV6_ADDR@@@PORT_REFUSE@ refuse # This is the default action + interface-action: @IPV6_ADDR@@@PORT_TAG_1@ allow + interface-action: @IPV6_ADDR@@@PORT_TAG_2@ allow + interface-action: @IPV6_ADDR@@@PORT_TAG_3@ allow interface-action: @IPV6_ADDR@@@PORT_VIEW_INT@ allow interface-action: @IPV6_ADDR@@@PORT_VIEW_EXT@ allow interface-action: @IPV6_ADDR@@@PORT_VIEW_INTEXT@ allow + interface-tag: @IPV6_ADDR@@@PORT_TAG_1@ "one" + interface-tag: @IPV6_ADDR@@@PORT_TAG_2@ "two" + interface-tag: @IPV6_ADDR@@@PORT_TAG_3@ "refuse" + interface-tag-action: @IPV6_ADDR@@@PORT_TAG_1@ one redirect + interface-tag-data: @IPV6_ADDR@@@PORT_TAG_1@ one "A 1.1.1.1" + interface-tag-action: @IPV6_ADDR@@@PORT_TAG_2@ two redirect + interface-tag-data: @IPV6_ADDR@@@PORT_TAG_2@ two "A 2.2.2.2" + interface-tag-action: @IPV6_ADDR@@@PORT_TAG_3@ refuse always_refuse + interface-view: @IPV6_ADDR@@@PORT_VIEW_INT@ "int" interface-view: @IPV6_ADDR@@@PORT_VIEW_EXT@ "ext" interface-view: @IPV6_ADDR@@@PORT_VIEW_INTEXT@ "intext" +# Mirrored interface configuration for interface name + interface: @INTERFACE@@@PORT_ALLOW@ + interface: @INTERFACE@@@PORT_DENY@ + interface: @INTERFACE@@@PORT_REFUSE@ + interface: @INTERFACE@@@PORT_TAG_1@ + interface: @INTERFACE@@@PORT_TAG_2@ + interface: @INTERFACE@@@PORT_TAG_3@ + interface: @INTERFACE@@@PORT_VIEW_INT@ + interface: @INTERFACE@@@PORT_VIEW_EXT@ + interface: @INTERFACE@@@PORT_VIEW_INTEXT@ + + interface-action: @INTERFACE@@@PORT_ALLOW@ allow + interface-action: @INTERFACE@@@PORT_DENY@ deny + # interface-action: @INTERFACE@@@PORT_REFUSE@ refuse # This is the default action + interface-action: @INTERFACE@@@PORT_TAG_1@ allow + interface-action: @INTERFACE@@@PORT_TAG_2@ allow + interface-action: @INTERFACE@@@PORT_TAG_3@ allow + interface-action: @INTERFACE@@@PORT_VIEW_INT@ allow + interface-action: @INTERFACE@@@PORT_VIEW_EXT@ allow + interface-action: @INTERFACE@@@PORT_VIEW_INTEXT@ allow + + interface-tag: @INTERFACE@@@PORT_TAG_1@ "one" + interface-tag: @INTERFACE@@@PORT_TAG_2@ "two" + interface-tag: @INTERFACE@@@PORT_TAG_3@ "refuse" + interface-tag-action: @INTERFACE@@@PORT_TAG_1@ one redirect + interface-tag-data: @INTERFACE@@@PORT_TAG_1@ one "A 1.1.1.1" + interface-tag-action: @INTERFACE@@@PORT_TAG_2@ two redirect + interface-tag-data: @INTERFACE@@@PORT_TAG_2@ two "A 2.2.2.2" + interface-tag-action: @INTERFACE@@@PORT_TAG_3@ refuse always_refuse + + interface-view: @INTERFACE@@@PORT_VIEW_INT@ "int" + interface-view: @INTERFACE@@@PORT_VIEW_EXT@ "ext" + interface-view: @INTERFACE@@@PORT_VIEW_INTEXT@ "intext" + +# Local zones configuration + local-zone: local. transparent + local-data: "local. A 0.0.0.0" + local-zone-tag: local. "one two refuse" + # Views configuration view: name: "int" diff --git a/testdata/acl_interface.tdir/acl_interface.pre b/testdata/acl_interface.tdir/acl_interface.pre index 14f2fb599..ce5358c1b 100644 --- a/testdata/acl_interface.tdir/acl_interface.pre +++ b/testdata/acl_interface.tdir/acl_interface.pre @@ -7,25 +7,37 @@ if test ! -x "`which unshare 2>&1`"; then skip_test "no unshare (from util-linux package) available, skip test" fi -get_random_port 8 +get_random_port 11 PORT_ALLOW=$RND_PORT PORT_DENY=$(($RND_PORT + 1)) PORT_REFUSE=$(($RND_PORT + 2)) -PORT_VIEW_INT=$(($RND_PORT + 3)) -PORT_VIEW_EXT=$(($RND_PORT + 4)) -PORT_VIEW_INTEXT=$(($RND_PORT + 5)) -FORWARD_PORT=$(($RND_PORT + 6)) -STUB_PORT=$(($RND_PORT + 7)) +PORT_TAG_1=$(($RND_PORT + 3)) +PORT_TAG_2=$(($RND_PORT + 4)) +PORT_TAG_3=$(($RND_PORT + 5)) +PORT_VIEW_INT=$(($RND_PORT + 6)) +PORT_VIEW_EXT=$(($RND_PORT + 7)) +PORT_VIEW_INTEXT=$(($RND_PORT + 8)) +FORWARD_PORT=$(($RND_PORT + 9)) +STUB_PORT=$(($RND_PORT + 10)) IPV4_ADDR=192.168.1.1 IPV6_ADDR=2001:db8::1 +INTERFACE=eth24 +INTERFACE_ADDR_1=10.0.0.1 +INTERFACE_ADDR_2=10.0.0.2 +INTERFACE_ADDR_3=10.0.0.3 +INTERFACE_ADDR_4=10.0.0.4 + # make config file sed \ -e 's/@PORT_ALLOW\@/'$PORT_ALLOW'/' \ -e 's/@PORT_DENY\@/'$PORT_DENY'/' \ -e 's/@PORT_REFUSE\@/'$PORT_REFUSE'/' \ + -e 's/@PORT_TAG_1\@/'$PORT_TAG_1'/' \ + -e 's/@PORT_TAG_2\@/'$PORT_TAG_2'/' \ + -e 's/@PORT_TAG_3\@/'$PORT_TAG_3'/' \ -e 's/@PORT_VIEW_INT\@/'$PORT_VIEW_INT'/' \ -e 's/@PORT_VIEW_EXT\@/'$PORT_VIEW_EXT'/' \ -e 's/@PORT_VIEW_INTEXT\@/'$PORT_VIEW_INTEXT'/' \ @@ -33,6 +45,7 @@ sed \ -e 's/@STUB_PORT\@/'$STUB_PORT'/' \ -e 's/@IPV4_ADDR\@/'$IPV4_ADDR'/' \ -e 's/@IPV6_ADDR\@/'$IPV6_ADDR'/' \ + -e 's/@INTERFACE\@/'$INTERFACE'/' \ < acl_interface.conf > ub.conf if test -x "`which bash`"; then @@ -44,6 +57,9 @@ fi echo "PORT_ALLOW=$PORT_ALLOW" >> .tpkg.var.test echo "PORT_DENY=$PORT_DENY" >> .tpkg.var.test echo "PORT_REFUSE=$PORT_REFUSE" >> .tpkg.var.test +echo "PORT_TAG_1=$PORT_TAG_1" >> .tpkg.var.test +echo "PORT_TAG_2=$PORT_TAG_2" >> .tpkg.var.test +echo "PORT_TAG_3=$PORT_TAG_3" >> .tpkg.var.test echo "PORT_VIEW_INT=$PORT_VIEW_INT" >> .tpkg.var.test echo "PORT_VIEW_EXT=$PORT_VIEW_EXT" >> .tpkg.var.test echo "PORT_VIEW_INTEXT=$PORT_VIEW_INTEXT" >> .tpkg.var.test @@ -51,4 +67,9 @@ echo "FORWARD_PORT=$FORWARD_PORT" >> .tpkg.var.test echo "STUB_PORT=$STUB_PORT" >> .tpkg.var.test echo "IPV4_ADDR=$IPV4_ADDR" >> .tpkg.var.test echo "IPV6_ADDR=$IPV6_ADDR" >> .tpkg.var.test +echo "INTERFACE=$INTERFACE" >> .tpkg.var.test +echo "INTERFACE_ADDR_1=$INTERFACE_ADDR_1" >> .tpkg.var.test +echo "INTERFACE_ADDR_2=$INTERFACE_ADDR_2" >> .tpkg.var.test +echo "INTERFACE_ADDR_3=$INTERFACE_ADDR_3" >> .tpkg.var.test +echo "INTERFACE_ADDR_4=$INTERFACE_ADDR_4" >> .tpkg.var.test echo "shell=$shell" >> .tpkg.var.test diff --git a/testdata/acl_interface.tdir/acl_interface.test.scenario b/testdata/acl_interface.tdir/acl_interface.test.scenario index d30c64d3f..00b2b059f 100644 --- a/testdata/acl_interface.tdir/acl_interface.test.scenario +++ b/testdata/acl_interface.tdir/acl_interface.test.scenario @@ -10,6 +10,13 @@ ip addr add $IPV4_ADDR dev lo ip addr add $IPV6_ADDR dev lo ip link set lo up +ip link add $INTERFACE type dummy +ip addr add $INTERFACE_ADDR_1 dev $INTERFACE +ip addr add $INTERFACE_ADDR_2 dev $INTERFACE +ip addr add $INTERFACE_ADDR_3 dev $INTERFACE +ip addr add $INTERFACE_ADDR_4 dev $INTERFACE +ip link set $INTERFACE up + # start the forwarder in the background get_ldns_testns $LDNS_TESTNS -p $FORWARD_PORT acl_interface.testns >fwd.log 2>&1 & @@ -31,6 +38,14 @@ wait_ldns_testns_up fwd.log wait_ldns_testns_up fwd2.log wait_unbound_up unbound.log +end () { + echo "> cat logfiles" + cat fwd.log + cat fwd2.log + cat unbound.log + exit $1 +} + # Query for the given domain to the given port # $1: address family [4, 6] # $2: port @@ -44,13 +59,22 @@ query () { dig @"$addr" -p $2 $3 | tee outfile } +# Query for the given domain to the given port +# $1: address +# $2: port +# $3: dname +query_addr () { + echo "> dig @$1 -p $2 $3" + dig @"$1" -p $2 $3 | tee outfile +} + expect_refused () { echo "> check answer for REFUSED" if grep "REFUSED" outfile; then echo "OK" else echo "Not OK" - exit 1 + end 1 fi } @@ -60,7 +84,7 @@ expect_external_answer () { echo "OK" else echo "Not OK" - exit 1 + end 1 fi } @@ -70,10 +94,29 @@ expect_internal_answer () { echo "OK" else echo "Not OK" - exit 1 + end 1 fi } +expect_tag_one_answer () { + echo "> check tag 'one' answer" + if grep "1.1.1.1" outfile; then + echo "OK" + else + echo "Not OK" + end 1 + fi +} + +expect_tag_two_answer () { + echo "> check tag 'two' answer" + if grep "2.2.2.2" outfile; then + echo "OK" + else + echo "Not OK" + end 1 + fi +} # do the test @@ -90,6 +133,15 @@ for i in 4 6; do query $i $PORT_ALLOW "www.internal" expect_internal_answer + query $i $PORT_TAG_1 "local" + expect_tag_one_answer + + query $i $PORT_TAG_2 "local" + expect_tag_two_answer + + query $i $PORT_TAG_3 "local" + expect_refused + query $i $PORT_VIEW_INT "www.internal" expect_internal_answer @@ -109,8 +161,45 @@ for i in 4 6; do expect_external_answer done -echo "> cat logfiles" -cat fwd.log -cat fwd2.log -cat unbound.log -exit 0 +for addr in $INTERFACE_ADDR_1 $INTERFACE_ADDR_2 $INTERFACE_ADDR_3 $INTERFACE_ADDR_4; do + query_addr $addr $PORT_REFUSE "www.external" + expect_refused + + query_addr $addr $PORT_REFUSE "www.internal" + expect_refused + + query_addr $addr $PORT_ALLOW "www.external" + expect_external_answer + + query_addr $addr $PORT_ALLOW "www.internal" + expect_internal_answer + + query_addr $addr $PORT_TAG_1 "local" + expect_tag_one_answer + + query_addr $addr $PORT_TAG_2 "local" + expect_tag_two_answer + + query_addr $addr $PORT_TAG_3 "local" + expect_refused + + query_addr $addr $PORT_VIEW_INT "www.internal" + expect_internal_answer + + query_addr $addr $PORT_VIEW_INT "www.external" + expect_refused + + query_addr $addr $PORT_VIEW_EXT "www.internal" + expect_refused + + query_addr $addr $PORT_VIEW_EXT "www.external" + expect_external_answer + + query_addr $addr $PORT_VIEW_INTEXT "www.internal" + expect_internal_answer + + query_addr $addr $PORT_VIEW_INTEXT "www.external" + expect_external_answer +done + +end 0 diff --git a/testdata/acl_interface.tdir/acl_interface.testns b/testdata/acl_interface.tdir/acl_interface.testns index 62abf6928..d8c871b1c 100644 --- a/testdata/acl_interface.tdir/acl_interface.testns +++ b/testdata/acl_interface.tdir/acl_interface.testns @@ -11,3 +11,16 @@ www IN A SECTION ANSWER www IN A 1.2.3.4 ENTRY_END + +$ORIGIN local. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +@ IN A +SECTION ANSWER +@ IN A 127.0.0.1 +ENTRY_END diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index 750f45b50..dc8ab6693 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -44,7 +44,6 @@ * boundaries in the program. */ #include "config.h" -#include "daemon/acl_list.h" #include "util/fptr_wlist.h" #include "util/mini_event.h" #include "services/outside_network.h" @@ -222,6 +221,7 @@ fptr_whitelist_rbtree_cmp(int (*fptr) (const void *, const void *)) if(fptr == &mesh_state_compare) return 1; else if(fptr == &mesh_state_ref_compare) return 1; else if(fptr == &addr_tree_compare) return 1; + else if(fptr == &addr_tree_addrport_compare) return 1; else if(fptr == &local_zone_cmp) return 1; else if(fptr == &local_data_cmp) return 1; else if(fptr == &fwd_cmp) return 1; @@ -245,7 +245,6 @@ fptr_whitelist_rbtree_cmp(int (*fptr) (const void *, const void *)) else if(fptr == &auth_zone_cmp) return 1; else if(fptr == &auth_data_cmp) return 1; else if(fptr == &auth_xfer_cmp) return 1; - else if(fptr == &acl_interface_compare) return 1; return 0; } diff --git a/util/storage/dnstree.c b/util/storage/dnstree.c index f883044af..eef393f91 100644 --- a/util/storage/dnstree.c +++ b/util/storage/dnstree.c @@ -71,6 +71,14 @@ int addr_tree_compare(const void* k1, const void* k2) return 0; } +int addr_tree_addrport_compare(const void* k1, const void* k2) +{ + struct addr_tree_node* n1 = (struct addr_tree_node*)k1; + struct addr_tree_node* n2 = (struct addr_tree_node*)k2; + return sockaddr_cmp(&n1->addr, n1->addrlen, &n2->addr, + n2->addrlen); +} + void name_tree_init(rbtree_type* tree) { rbtree_init(tree, &name_tree_compare); @@ -81,6 +89,11 @@ void addr_tree_init(rbtree_type* tree) rbtree_init(tree, &addr_tree_compare); } +void addr_tree_addrport_init(rbtree_type* tree) +{ + rbtree_init(tree, &addr_tree_addrport_compare); +} + int name_tree_insert(rbtree_type* tree, struct name_tree_node* node, uint8_t* name, size_t len, int labs, uint16_t dclass) { diff --git a/util/storage/dnstree.h b/util/storage/dnstree.h index d54602fd7..8aaa94098 100644 --- a/util/storage/dnstree.h +++ b/util/storage/dnstree.h @@ -153,6 +153,13 @@ int name_tree_next_root(rbtree_type* tree, uint16_t* dclass); */ void addr_tree_init(rbtree_type* tree); +/** + * Init addr tree to be empty. + * The comparison function to be used is addr_tree_addrport_compare. + * @param tree: to init. + */ +void addr_tree_addrport_init(rbtree_type* tree); + /** * insert element into addr tree. * @param tree: addr tree @@ -207,4 +214,7 @@ int name_tree_compare(const void* k1, const void* k2); /** compare addr tree nodes */ int addr_tree_compare(const void* k1, const void* k2); +/** compare addr tree nodes (address and port only) */ +int addr_tree_addrport_compare(const void* k1, const void* k2); + #endif /* UTIL_STORAGE_DNSTREE_H */ From eb021703389116f8bd4270b2a804cec0d1f2aa04 Mon Sep 17 00:00:00 2001 From: Yorgos Thessalonikefs Date: Fri, 16 Sep 2022 14:43:23 +0200 Subject: [PATCH 19/60] Apply suggestions from code review Co-authored-by: Wouter Wijngaards --- daemon/acl_list.c | 2 +- daemon/acl_list.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/daemon/acl_list.c b/daemon/acl_list.c index 05b720bd5..8e8e1fc9b 100644 --- a/daemon/acl_list.c +++ b/daemon/acl_list.c @@ -567,7 +567,7 @@ acl_interface_init(struct acl_list* acl_interface) /* We want comparison in the tree to include only address and port. * We don't care about comparing node->net. All addresses in the * acl_interface->tree should have either 32 (ipv4) or 128 (ipv6). - * Initialise with the appropriate compare fucntion but keep treating + * Initialise with the appropriate compare function but keep treating * it as an addr_tree. */ addr_tree_addrport_init(&acl_interface->tree); } diff --git a/daemon/acl_list.h b/daemon/acl_list.h index 930f978d3..c717179ba 100644 --- a/daemon/acl_list.h +++ b/daemon/acl_list.h @@ -120,7 +120,7 @@ struct acl_list* acl_list_create(void); void acl_list_delete(struct acl_list* acl); /** - * Insert interface in the alc_list. This should happen when the listening + * Insert interface in the acl_list. This should happen when the listening * interface is setup. * @param acl_interface: acl_list to insert to. * @param addr: interface IP. From 307805b64fab476dbd82dc1e231e85a517b57a04 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Tue, 20 Sep 2022 11:36:01 +0200 Subject: [PATCH 20/60] Changelog entry for #753: - Merge #753: ACL per interface. (New interface-* configuration options). --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 613541571..a68d8d625 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +16 September 2022: George + - Merge #753: ACL per interface. (New interface-* configuration + options). + 2 September 2022: Wouter - Remove include that was there for debug purposes. - Fix to check pthread_t size after pthread has been detected. From 9b1647ebae4e3ca0227f5231f008c6c5104e127e Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Tue, 20 Sep 2022 14:45:20 +0200 Subject: [PATCH 21/60] - Convert tdir tests to use the new skip_test functionality. --- doc/Changelog | 3 +++ testcode/mini_tdir.sh | 8 +++---- testdata/07-confroot.tdir/07-confroot.dsc | 2 +- testdata/07-confroot.tdir/07-confroot.pre | 13 ++++++++++++ testdata/07-confroot.tdir/07-confroot.test | 7 ------- testdata/08-host-lib.tdir/08-host-lib.pre | 9 ++++++++ testdata/08-host-lib.tdir/08-host-lib.test | 8 ------- .../clang-analysis.tdir/clang-analysis.dsc | 2 +- .../clang-analysis.tdir/clang-analysis.pre | 21 +++++++++++++++++++ .../clang-analysis.tdir/clang-analysis.test | 14 ------------- .../dnscrypt_cert.tdir/dnscrypt_cert.post | 3 --- testdata/dnscrypt_cert.tdir/dnscrypt_cert.pre | 6 +++++- .../dnscrypt_cert.tdir/dnscrypt_cert.test | 3 --- testdata/dnscrypt_cert.tdir/precheck.sh | 16 -------------- .../dnscrypt_cert_chacha.post | 7 +------ .../dnscrypt_cert_chacha.pre | 20 +++++++++++------- .../dnscrypt_cert_chacha.test | 10 +-------- .../dnscrypt_cert_chacha.tdir/precheck.sh | 16 -------------- testdata/dnstap.tdir/dnstap.post | 1 - testdata/dnstap.tdir/dnstap.pre | 2 +- testdata/dnstap.tdir/dnstap.test | 1 - .../dnstap_reconnect.post | 1 - .../dnstap_reconnect.pre | 2 +- .../dnstap_reconnect.test | 1 - testdata/dnstap_tcp.tdir/dnstap_tcp.post | 1 - testdata/dnstap_tcp.tdir/dnstap_tcp.pre | 2 +- testdata/dnstap_tcp.tdir/dnstap_tcp.test | 1 - testdata/dnstap_tls.tdir/dnstap_tls.post | 1 - testdata/dnstap_tls.tdir/dnstap_tls.pre | 2 +- testdata/dnstap_tls.tdir/dnstap_tls.test | 1 - .../dnstap_tls_badcert.post | 1 - .../dnstap_tls_badcert.pre | 2 +- .../dnstap_tls_badcert.test | 1 - .../dnstap_tls_badname.post | 1 - .../dnstap_tls_badname.pre | 2 +- .../dnstap_tls_badname.test | 1 - .../dnstap_tls_clientauth.post | 1 - .../dnstap_tls_clientauth.pre | 2 +- .../dnstap_tls_clientauth.test | 1 - .../dnstap_tls_peername.post | 1 - .../dnstap_tls_peername.pre | 2 +- .../dnstap_tls_peername.test | 1 - .../doh_downstream.tdir/doh_downstream.post | 1 - .../doh_downstream.tdir/doh_downstream.pre | 2 +- .../doh_downstream.tdir/doh_downstream.test | 1 - .../doh_downstream_buffer_size.post | 1 - .../doh_downstream_buffer_size.pre | 2 +- .../doh_downstream_buffer_size.test | 1 - .../doh_downstream_endpoint.post | 1 - .../doh_downstream_endpoint.pre | 2 +- .../doh_downstream_endpoint.test | 1 - .../doh_downstream_notls.post | 1 - .../doh_downstream_notls.pre | 2 +- .../doh_downstream_notls.test | 1 - .../doh_downstream_post.post | 1 - .../doh_downstream_post.pre | 2 +- .../doh_downstream_post.test | 1 - testdata/dynlibmod.tdir/dynlibmod.post | 1 - testdata/dynlibmod.tdir/dynlibmod.pre | 2 +- testdata/dynlibmod.tdir/dynlibmod.test | 1 - testdata/fwd_ancil.tdir/fwd_ancil.post | 5 ----- testdata/fwd_ancil.tdir/fwd_ancil.pre | 6 ++---- testdata/fwd_ancil.tdir/fwd_ancil.test | 5 ----- testdata/ipset.tdir/ipset.post | 1 - testdata/ipset.tdir/ipset.pre | 2 +- testdata/ipset.tdir/ipset.test | 1 - testdata/nss_compile.tdir/nss_compile.dsc | 2 +- testdata/nss_compile.tdir/nss_compile.pre | 13 ++++++++++++ testdata/nss_compile.tdir/nss_compile.test | 7 ------- testdata/padding.tdir/padding.post | 1 - testdata/padding.tdir/padding.pre | 2 +- testdata/padding.tdir/padding.test | 1 - testdata/pylib.tdir/pylib.post | 7 ------- testdata/pylib.tdir/pylib.pre | 3 +-- testdata/pylib.tdir/pylib.test | 7 ------- testdata/pymod.tdir/pymod.post | 7 ------- testdata/pymod.tdir/pymod.pre | 3 +-- testdata/pymod.tdir/pymod.test | 6 ------ testdata/pymod_thread.tdir/pymod_thread.post | 7 ------- testdata/pymod_thread.tdir/pymod_thread.pre | 3 +-- testdata/pymod_thread.tdir/pymod_thread.test | 6 ------ testdata/root_anchor.tdir/root_anchor.dsc | 2 +- testdata/root_anchor.tdir/root_anchor.pre | 11 ++++++++++ testdata/root_anchor.tdir/root_anchor.test | 9 -------- testdata/root_hints.tdir/root_hints.dsc | 2 +- testdata/root_hints.tdir/root_hints.pre | 11 ++++++++++ testdata/root_hints.tdir/root_hints.test | 9 +------- 87 files changed, 131 insertions(+), 232 deletions(-) create mode 100644 testdata/07-confroot.tdir/07-confroot.pre create mode 100644 testdata/clang-analysis.tdir/clang-analysis.pre delete mode 100644 testdata/dnscrypt_cert.tdir/precheck.sh delete mode 100644 testdata/dnscrypt_cert_chacha.tdir/precheck.sh create mode 100644 testdata/nss_compile.tdir/nss_compile.pre create mode 100644 testdata/root_anchor.tdir/root_anchor.pre create mode 100644 testdata/root_hints.tdir/root_hints.pre diff --git a/doc/Changelog b/doc/Changelog index a68d8d625..7f330d8dd 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +20 September 2022: George + - Convert tdir tests to use the new skip_test functionality. + 16 September 2022: George - Merge #753: ACL per interface. (New interface-* configuration options). diff --git a/testcode/mini_tdir.sh b/testcode/mini_tdir.sh index 46a930f41..55c24c107 100755 --- a/testcode/mini_tdir.sh +++ b/testcode/mini_tdir.sh @@ -55,14 +55,14 @@ if test "$1" = "-f" && test "$2" = "report"; then pass=`expr $pass + 1` fi elif test -f ".skip-$name"; then - echo ">> SKIPPED<< $timelen $name: $desc" + echo ".. SKIPPED.. $timelen $name: $desc" skip=`expr $pass + 1` else if test -f "result.$name"; then echo "!! FAILED !! $timelen $name: $desc" fail=`expr $fail + 1` else - echo ">> SKIPPED<< $timelen $name: $desc" + echo ".. SKIPPED.. $timelen $name: $desc" skip=`expr $skip + 1` fi fi @@ -86,13 +86,13 @@ if test "$1" = "report" || test "$2" = "report"; then fi elif test -f ".skip-$name"; then if test $quiet = 0; then - echo ">> SKIPPED<< : $name" + echo ".. SKIPPED.. : $name" fi else if test -f "result.$name"; then echo "!! FAILED !! : $name" else - echo ">> SKIPPED<< : $name" + echo ".. SKIPPED.. : $name" fi fi done diff --git a/testdata/07-confroot.tdir/07-confroot.dsc b/testdata/07-confroot.tdir/07-confroot.dsc index f1cbe6e7d..a25301709 100644 --- a/testdata/07-confroot.tdir/07-confroot.dsc +++ b/testdata/07-confroot.tdir/07-confroot.dsc @@ -8,7 +8,7 @@ Component: CmdDepends: Depends: Help: -Pre: +Pre: 07-confroot.pre Post: Test: 07-confroot.test AuxFiles: diff --git a/testdata/07-confroot.tdir/07-confroot.pre b/testdata/07-confroot.tdir/07-confroot.pre new file mode 100644 index 000000000..4f966bddd --- /dev/null +++ b/testdata/07-confroot.tdir/07-confroot.pre @@ -0,0 +1,13 @@ +# #-- 07-confroot.pre --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." + +if uname | grep "MINGW" >/dev/null; then + # no chroot, no need to test. + # (test fails on / and \ comparisons, by the way). + skip_test "no chroot on windows, end test" +fi diff --git a/testdata/07-confroot.tdir/07-confroot.test b/testdata/07-confroot.tdir/07-confroot.test index d940aa873..9572330f7 100644 --- a/testdata/07-confroot.tdir/07-confroot.test +++ b/testdata/07-confroot.tdir/07-confroot.test @@ -6,13 +6,6 @@ PRE="../.." -if uname | grep "MINGW" >/dev/null; then - # no chroot, no need to test. - # (test fails on / en \ comparisons, by the way). - echo "no chroot on windows, end test" - exit 0 -fi - # create config file cwd=`pwd -P` subdir=$cwd/subdir diff --git a/testdata/08-host-lib.tdir/08-host-lib.pre b/testdata/08-host-lib.tdir/08-host-lib.pre index 84817891f..481b0ef2c 100644 --- a/testdata/08-host-lib.tdir/08-host-lib.pre +++ b/testdata/08-host-lib.tdir/08-host-lib.pre @@ -4,7 +4,16 @@ # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test +PRE="../.." . ../common.sh + +if grep FORK $PRE/config.h | grep "define" >/dev/null 2>&1; then + # nothing + : +else + skip_test "forking is not available; test skipped." +fi + get_random_port 2 FWD_PORT=$(($RND_PORT + 1)) echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test diff --git a/testdata/08-host-lib.tdir/08-host-lib.test b/testdata/08-host-lib.tdir/08-host-lib.test index 8de897776..18603294e 100644 --- a/testdata/08-host-lib.tdir/08-host-lib.test +++ b/testdata/08-host-lib.tdir/08-host-lib.test @@ -7,14 +7,6 @@ PRE="../.." . ../common.sh -if grep FORK $PRE/config.h | grep "define" >/dev/null 2>&1; then - # nothing - : -else - echo "forking is not available; test skipped." - exit 0 -fi - # test if fwder is up echo "> dig @127.0.0.1 -p $FWD_PORT www.example.com | tee outfile" dig @127.0.0.1 -p $FWD_PORT www.example.com | tee outfile diff --git a/testdata/clang-analysis.tdir/clang-analysis.dsc b/testdata/clang-analysis.tdir/clang-analysis.dsc index 20a62a3e3..b3a0609e3 100644 --- a/testdata/clang-analysis.tdir/clang-analysis.dsc +++ b/testdata/clang-analysis.tdir/clang-analysis.dsc @@ -7,7 +7,7 @@ Category: Component: Depends: Help: -Pre: +Pre: clang-analysis.pre Post: Test: clang-analysis.test AuxFiles: diff --git a/testdata/clang-analysis.tdir/clang-analysis.pre b/testdata/clang-analysis.tdir/clang-analysis.pre new file mode 100644 index 000000000..e9b9a26fa --- /dev/null +++ b/testdata/clang-analysis.tdir/clang-analysis.pre @@ -0,0 +1,21 @@ +# #-- clang-analysis.pre --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test +# common functions +. ../common.sh + +PRE="../.." +if test ! -x "`which clang 2>&1`"; then + skip_test "No clang in path" +fi +#echo "have clang" +# test if assertions are enabled +if grep "^#define UNBOUND_DEBUG" $PRE/config.h >/dev/null; then + : +else + skip_test "UNBOUND_DEBUG is not enabled, skip test" + # no unbound debug means no assertions, and clang analyzer uses + # the assertions to make inferences. +fi diff --git a/testdata/clang-analysis.tdir/clang-analysis.test b/testdata/clang-analysis.tdir/clang-analysis.test index 09c935860..388556a44 100644 --- a/testdata/clang-analysis.tdir/clang-analysis.test +++ b/testdata/clang-analysis.tdir/clang-analysis.test @@ -7,20 +7,6 @@ . ../common.sh PRE="../.." -if test ! -x "`which clang 2>&1`"; then - echo "No clang in path" - exit 0 -fi -#echo "have clang" -# test if assertions are enabled -if grep "^#define UNBOUND_DEBUG" $PRE/config.h >/dev/null; then - : -else - echo "UNBOUND_DEBUG is not enabled, skip test" - # no unbound debug means no assertions, and clang analyzer uses - # the assertions to make inferences. - exit 0 -fi # read value from Makefile # $1: result variable name diff --git a/testdata/dnscrypt_cert.tdir/dnscrypt_cert.post b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.post index 0346d3f84..fcb6c9d0e 100644 --- a/testdata/dnscrypt_cert.tdir/dnscrypt_cert.post +++ b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.post @@ -8,9 +8,6 @@ PRE="../.." . ../common.sh -# Check if we can run the test. -. ./precheck.sh - kill_pid $FWD_PID kill_pid $UNBOUND_PID diff --git a/testdata/dnscrypt_cert.tdir/dnscrypt_cert.pre b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.pre index bee9e8ac6..6cf52299c 100644 --- a/testdata/dnscrypt_cert.tdir/dnscrypt_cert.pre +++ b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.pre @@ -8,7 +8,11 @@ PRE="../.." . ../common.sh # Check if we can run the test. -. ./precheck.sh +if grep "define USE_DNSCRYPT 1" $PRE/config.h; then + echo "have dnscrypt" +else + skip_test "no dnscrypt" +fi get_random_port 3 UNBOUND_PORT=$RND_PORT diff --git a/testdata/dnscrypt_cert.tdir/dnscrypt_cert.test b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.test index f09753792..fdb88e8f9 100644 --- a/testdata/dnscrypt_cert.tdir/dnscrypt_cert.test +++ b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.test @@ -7,9 +7,6 @@ PRE="../.." . ../common.sh -# Check if we can run the test. -. ./precheck.sh - # do the test # Query plain request over DNSCrypt channel get closed diff --git a/testdata/dnscrypt_cert.tdir/precheck.sh b/testdata/dnscrypt_cert.tdir/precheck.sh deleted file mode 100644 index 00fa4bc76..000000000 --- a/testdata/dnscrypt_cert.tdir/precheck.sh +++ /dev/null @@ -1,16 +0,0 @@ -# dnscrypt precheck.sh - -# if no dnscrypt; exit -if grep "define USE_DNSCRYPT 1" $PRE/config.h; then - echo "have dnscrypt" -else - echo "no dnscrypt" - exit 0 -fi - -# if no xchacha20 support in unbound; exit -if grep "define USE_DNSCRYPT_XCHACHA20 1" $PRE/config.h; then - xchacha20=1 -else - xchacha20=0 -fi diff --git a/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.post b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.post index 54337df67..9537d9e82 100644 --- a/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.post +++ b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.post @@ -8,10 +8,5 @@ PRE="../.." . ../common.sh -# Check if we can run the test. -. ./precheck.sh - kill_pid $FWD_PID -if [ $xchacha20 -ne 0 ]; then - kill_pid $UNBOUND_PID -fi +kill_pid $UNBOUND_PID diff --git a/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.pre b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.pre index c77290a8a..4534fdf47 100644 --- a/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.pre +++ b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.pre @@ -7,8 +7,17 @@ PRE="../.." . ../common.sh -# Check if we can run the test. -. ./precheck.sh +# if no dnscrypt; exit +if grep "define USE_DNSCRYPT 1" $PRE/config.h; then + echo "have dnscrypt" +else + skip_test "no dnscrypt" +fi +if grep "define USE_DNSCRYPT_XCHACHA20 1" $PRE/config.h; then + echo "have XChacha20 support" +else + skip_test "no XChacha20 support" +fi get_random_port 3 UNBOUND_PORT=$RND_PORT @@ -34,10 +43,5 @@ echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test cat .tpkg.var.test wait_ldns_testns_up fwd.log -if [ $xchacha20 -eq 0 ]; then - # no xchacha20 support, we expect unbound to exit with an error message. - wait_server_up unbound.log "Certificate for XChacha20 but libsodium does not support it" -else - wait_unbound_up unbound.log -fi +wait_unbound_up unbound.log diff --git a/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.test b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.test index 4ef6942be..2db073ad6 100644 --- a/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.test +++ b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.test @@ -6,17 +6,9 @@ PRE="../.." . ../common.sh -# Check if we can run the test. -. ./precheck.sh # do the test -if [ $xchacha20 -eq 0 ]; then - # Unbound would exit before we can attempt any tests. - echo "OK" - exit 0 -fi - # Query plain request over DNSCrypt channel get closed # We use TCP to avoid hanging on waiting for UDP. # We expect `outfile` to contain no DNS payload @@ -104,7 +96,7 @@ do echo "> check answer" grep -F 'DNSC\000\002\000\000\1716\226\255*\244\002L\177g\025_\127tR\151\246R\203\178\153\248\006\137\"\138\173|G/,\160\152\015\010\172\184\220`\175\217\255,\162\018\178-d\007\246k0\003I[\205w\026)\204B\002\161\010\245\243W\191\189Z\216\210x\025\204\247\173\227t\138\018\162~\152\253\211\031z\\\002m5\008\254\2244\246\243W\191\189Z\216\210Y\160\2158Y\160\2158u\210\219\184' outfile cert_found=$? - if [ \( $cert_found -eq 0 -a $xchacha20 -eq 1 \) -o \( $cert_found -ne 0 -a $xchacha20 -eq 0 \) ]; then + if [ \( $cert_found -eq 0 \) ]; then echo "OK" else echo "Not OK" diff --git a/testdata/dnscrypt_cert_chacha.tdir/precheck.sh b/testdata/dnscrypt_cert_chacha.tdir/precheck.sh deleted file mode 100644 index 00fa4bc76..000000000 --- a/testdata/dnscrypt_cert_chacha.tdir/precheck.sh +++ /dev/null @@ -1,16 +0,0 @@ -# dnscrypt precheck.sh - -# if no dnscrypt; exit -if grep "define USE_DNSCRYPT 1" $PRE/config.h; then - echo "have dnscrypt" -else - echo "no dnscrypt" - exit 0 -fi - -# if no xchacha20 support in unbound; exit -if grep "define USE_DNSCRYPT_XCHACHA20 1" $PRE/config.h; then - xchacha20=1 -else - xchacha20=0 -fi diff --git a/testdata/dnstap.tdir/dnstap.post b/testdata/dnstap.tdir/dnstap.post index 6744b4b61..6d5e9d50d 100644 --- a/testdata/dnstap.tdir/dnstap.post +++ b/testdata/dnstap.tdir/dnstap.post @@ -7,7 +7,6 @@ # do your teardown here . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID diff --git a/testdata/dnstap.tdir/dnstap.pre b/testdata/dnstap.tdir/dnstap.pre index 6561d77e9..0f2e0231d 100644 --- a/testdata/dnstap.tdir/dnstap.pre +++ b/testdata/dnstap.tdir/dnstap.pre @@ -7,7 +7,7 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 3 UNBOUND_PORT=$RND_PORT diff --git a/testdata/dnstap.tdir/dnstap.test b/testdata/dnstap.tdir/dnstap.test index fbf8565ff..3a2dcc5e1 100644 --- a/testdata/dnstap.tdir/dnstap.test +++ b/testdata/dnstap.tdir/dnstap.test @@ -6,7 +6,6 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." diff --git a/testdata/dnstap_reconnect.tdir/dnstap_reconnect.post b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.post index 0056a20d9..44b8e6b97 100644 --- a/testdata/dnstap_reconnect.tdir/dnstap_reconnect.post +++ b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.post @@ -7,7 +7,6 @@ # do your teardown here . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID diff --git a/testdata/dnstap_reconnect.tdir/dnstap_reconnect.pre b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.pre index a1aba4f35..df031ac01 100644 --- a/testdata/dnstap_reconnect.tdir/dnstap_reconnect.pre +++ b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.pre @@ -7,7 +7,7 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 3 UNBOUND_PORT=$RND_PORT diff --git a/testdata/dnstap_reconnect.tdir/dnstap_reconnect.test b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.test index 94679bc66..8f28bc109 100644 --- a/testdata/dnstap_reconnect.tdir/dnstap_reconnect.test +++ b/testdata/dnstap_reconnect.tdir/dnstap_reconnect.test @@ -6,7 +6,6 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." diff --git a/testdata/dnstap_tcp.tdir/dnstap_tcp.post b/testdata/dnstap_tcp.tdir/dnstap_tcp.post index 8aad21e19..f9a52edf6 100644 --- a/testdata/dnstap_tcp.tdir/dnstap_tcp.post +++ b/testdata/dnstap_tcp.tdir/dnstap_tcp.post @@ -7,7 +7,6 @@ # do your teardown here . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID diff --git a/testdata/dnstap_tcp.tdir/dnstap_tcp.pre b/testdata/dnstap_tcp.tdir/dnstap_tcp.pre index 3006603c5..aea781de9 100644 --- a/testdata/dnstap_tcp.tdir/dnstap_tcp.pre +++ b/testdata/dnstap_tcp.tdir/dnstap_tcp.pre @@ -7,7 +7,7 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 4 UNBOUND_PORT=$RND_PORT diff --git a/testdata/dnstap_tcp.tdir/dnstap_tcp.test b/testdata/dnstap_tcp.tdir/dnstap_tcp.test index d57eecfdb..c9aef3e78 100644 --- a/testdata/dnstap_tcp.tdir/dnstap_tcp.test +++ b/testdata/dnstap_tcp.tdir/dnstap_tcp.test @@ -6,7 +6,6 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." diff --git a/testdata/dnstap_tls.tdir/dnstap_tls.post b/testdata/dnstap_tls.tdir/dnstap_tls.post index fe1824a06..8adfb1a02 100644 --- a/testdata/dnstap_tls.tdir/dnstap_tls.post +++ b/testdata/dnstap_tls.tdir/dnstap_tls.post @@ -7,7 +7,6 @@ # do your teardown here . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID diff --git a/testdata/dnstap_tls.tdir/dnstap_tls.pre b/testdata/dnstap_tls.tdir/dnstap_tls.pre index 1df914873..7a20ec2dd 100644 --- a/testdata/dnstap_tls.tdir/dnstap_tls.pre +++ b/testdata/dnstap_tls.tdir/dnstap_tls.pre @@ -7,7 +7,7 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 4 UNBOUND_PORT=$RND_PORT diff --git a/testdata/dnstap_tls.tdir/dnstap_tls.test b/testdata/dnstap_tls.tdir/dnstap_tls.test index f9a2bf00d..3a0bf10f0 100644 --- a/testdata/dnstap_tls.tdir/dnstap_tls.test +++ b/testdata/dnstap_tls.tdir/dnstap_tls.test @@ -6,7 +6,6 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." diff --git a/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.post b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.post index d71eb28ae..aa0dfbfa4 100644 --- a/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.post +++ b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.post @@ -7,7 +7,6 @@ # do your teardown here . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID diff --git a/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.pre b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.pre index eff7074d0..f077965e0 100644 --- a/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.pre +++ b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.pre @@ -7,7 +7,7 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 4 UNBOUND_PORT=$RND_PORT diff --git a/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.test b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.test index 0b85f64ac..b4d944a0f 100644 --- a/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.test +++ b/testdata/dnstap_tls_badcert.tdir/dnstap_tls_badcert.test @@ -6,7 +6,6 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." diff --git a/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.post b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.post index 59f05b81d..553aa2f87 100644 --- a/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.post +++ b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.post @@ -7,7 +7,6 @@ # do your teardown here . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID diff --git a/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.pre b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.pre index 0ffee6081..6a4a480b6 100644 --- a/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.pre +++ b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.pre @@ -7,7 +7,7 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 4 UNBOUND_PORT=$RND_PORT diff --git a/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.test b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.test index 248d8f222..907392f6d 100644 --- a/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.test +++ b/testdata/dnstap_tls_badname.tdir/dnstap_tls_badname.test @@ -6,7 +6,6 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." diff --git a/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.post b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.post index 83df2a72e..2ef2ac36f 100644 --- a/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.post +++ b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.post @@ -7,7 +7,6 @@ # do your teardown here . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID diff --git a/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.pre b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.pre index a035181ce..80a5cd61b 100644 --- a/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.pre +++ b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.pre @@ -7,7 +7,7 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 4 UNBOUND_PORT=$RND_PORT diff --git a/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.test b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.test index 5b9cce0a4..842c8190e 100644 --- a/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.test +++ b/testdata/dnstap_tls_clientauth.tdir/dnstap_tls_clientauth.test @@ -6,7 +6,6 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." diff --git a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.post b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.post index 3ca63ada4..733a36ea9 100644 --- a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.post +++ b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.post @@ -7,7 +7,6 @@ # do your teardown here . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill $UNBOUND_PID diff --git a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.pre b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.pre index 25b838d8b..50f9853d4 100644 --- a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.pre +++ b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.pre @@ -7,7 +7,7 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 4 UNBOUND_PORT=$RND_PORT diff --git a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.test b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.test index 03bcbadfd..b5a6adfc3 100644 --- a/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.test +++ b/testdata/dnstap_tls_peername.tdir/dnstap_tls_peername.test @@ -6,7 +6,6 @@ . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # test if the server is up. echo "> dig www.example.com." diff --git a/testdata/doh_downstream.tdir/doh_downstream.post b/testdata/doh_downstream.tdir/doh_downstream.post index 0e3c00b05..67972a7f0 100644 --- a/testdata/doh_downstream.tdir/doh_downstream.post +++ b/testdata/doh_downstream.tdir/doh_downstream.post @@ -6,7 +6,6 @@ # # do your teardown here PRE="../.." -if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID diff --git a/testdata/doh_downstream.tdir/doh_downstream.pre b/testdata/doh_downstream.tdir/doh_downstream.pre index 29bb805a1..220725440 100644 --- a/testdata/doh_downstream.tdir/doh_downstream.pre +++ b/testdata/doh_downstream.tdir/doh_downstream.pre @@ -6,7 +6,7 @@ PRE="../.." . ../common.sh -if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 2 UNBOUND_PORT=$RND_PORT diff --git a/testdata/doh_downstream.tdir/doh_downstream.test b/testdata/doh_downstream.tdir/doh_downstream.test index d66168fba..78e2e84eb 100644 --- a/testdata/doh_downstream.tdir/doh_downstream.test +++ b/testdata/doh_downstream.tdir/doh_downstream.test @@ -6,7 +6,6 @@ PRE="../.." . ../common.sh -if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_make (cd $PRE; $MAKE dohclient) diff --git a/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.post b/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.post index 881970a77..f15ebe555 100644 --- a/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.post +++ b/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.post @@ -6,7 +6,6 @@ # # do your teardown here PRE="../.." -if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi . ../common.sh kill_pid $UNBOUND_PID cat unbound.log diff --git a/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.pre b/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.pre index a58780ab3..ff68a4677 100644 --- a/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.pre +++ b/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.pre @@ -6,7 +6,7 @@ PRE="../.." . ../common.sh -if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 1 UNBOUND_PORT=$RND_PORT diff --git a/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.test b/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.test index 78c46081d..bbeb9eb2b 100644 --- a/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.test +++ b/testdata/doh_downstream_buffer_size.tdir/doh_downstream_buffer_size.test @@ -6,7 +6,6 @@ PRE="../.." . ../common.sh -if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_make (cd $PRE; $MAKE dohclient) diff --git a/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.post b/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.post index dcdf8627e..f15ebe555 100644 --- a/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.post +++ b/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.post @@ -7,6 +7,5 @@ # do your teardown here PRE="../.." . ../common.sh -if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $UNBOUND_PID cat unbound.log diff --git a/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.pre b/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.pre index cd0d11fd4..dd7acc290 100644 --- a/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.pre +++ b/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.pre @@ -6,7 +6,7 @@ PRE="../.." . ../common.sh -if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 1 UNBOUND_PORT=$RND_PORT echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test diff --git a/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.test b/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.test index 2a6954cab..d788e3667 100644 --- a/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.test +++ b/testdata/doh_downstream_endpoint.tdir/doh_downstream_endpoint.test @@ -6,7 +6,6 @@ PRE="../.." . ../common.sh -if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_make (cd $PRE; $MAKE dohclient) diff --git a/testdata/doh_downstream_notls.tdir/doh_downstream_notls.post b/testdata/doh_downstream_notls.tdir/doh_downstream_notls.post index 3ceaeade8..9fb51b6d3 100644 --- a/testdata/doh_downstream_notls.tdir/doh_downstream_notls.post +++ b/testdata/doh_downstream_notls.tdir/doh_downstream_notls.post @@ -6,7 +6,6 @@ # # do your teardown here PRE="../.." -if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi . ../common.sh kill_pid $FWD_PID kill_pid $UNBOUND_PID diff --git a/testdata/doh_downstream_notls.tdir/doh_downstream_notls.pre b/testdata/doh_downstream_notls.tdir/doh_downstream_notls.pre index e1f30a575..9c7233d64 100644 --- a/testdata/doh_downstream_notls.tdir/doh_downstream_notls.pre +++ b/testdata/doh_downstream_notls.tdir/doh_downstream_notls.pre @@ -6,7 +6,7 @@ PRE="../.." . ../common.sh -if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 2 UNBOUND_PORT=$RND_PORT diff --git a/testdata/doh_downstream_notls.tdir/doh_downstream_notls.test b/testdata/doh_downstream_notls.tdir/doh_downstream_notls.test index 87ff560d3..040285e8f 100644 --- a/testdata/doh_downstream_notls.tdir/doh_downstream_notls.test +++ b/testdata/doh_downstream_notls.tdir/doh_downstream_notls.test @@ -6,7 +6,6 @@ PRE="../.." . ../common.sh -if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_make (cd $PRE; $MAKE dohclient) diff --git a/testdata/doh_downstream_post.tdir/doh_downstream_post.post b/testdata/doh_downstream_post.tdir/doh_downstream_post.post index 98034a32c..2f8f5a8e0 100644 --- a/testdata/doh_downstream_post.tdir/doh_downstream_post.post +++ b/testdata/doh_downstream_post.tdir/doh_downstream_post.post @@ -7,7 +7,6 @@ # do your teardown here PRE="../.." . ../common.sh -if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $FWD_PID kill_pid $UNBOUND_PID cat unbound.log diff --git a/testdata/doh_downstream_post.tdir/doh_downstream_post.pre b/testdata/doh_downstream_post.tdir/doh_downstream_post.pre index 34df83d4b..a8ecd344b 100644 --- a/testdata/doh_downstream_post.tdir/doh_downstream_post.pre +++ b/testdata/doh_downstream_post.tdir/doh_downstream_post.pre @@ -6,7 +6,7 @@ PRE="../.." . ../common.sh -if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 2 UNBOUND_PORT=$RND_PORT FWD_PORT=$(($RND_PORT + 1)) diff --git a/testdata/doh_downstream_post.tdir/doh_downstream_post.test b/testdata/doh_downstream_post.tdir/doh_downstream_post.test index 6442d1e12..d6a512ae3 100644 --- a/testdata/doh_downstream_post.tdir/doh_downstream_post.test +++ b/testdata/doh_downstream_post.tdir/doh_downstream_post.test @@ -6,7 +6,6 @@ PRE="../.." . ../common.sh -if grep "define HAVE_NGHTTP2 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi get_make (cd $PRE; $MAKE dohclient) diff --git a/testdata/dynlibmod.tdir/dynlibmod.post b/testdata/dynlibmod.tdir/dynlibmod.post index caa0da4f5..99a4268a7 100644 --- a/testdata/dynlibmod.tdir/dynlibmod.post +++ b/testdata/dynlibmod.tdir/dynlibmod.post @@ -7,7 +7,6 @@ # do your teardown here . ../common.sh PRE="../.." -if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $FWD_PID kill $UNBOUND_PID kill $UNBOUND_PID >/dev/null 2>&1 diff --git a/testdata/dynlibmod.tdir/dynlibmod.pre b/testdata/dynlibmod.tdir/dynlibmod.pre index 94adaa723..fbf229b8b 100644 --- a/testdata/dynlibmod.tdir/dynlibmod.pre +++ b/testdata/dynlibmod.tdir/dynlibmod.pre @@ -7,7 +7,7 @@ . ../common.sh PRE="../.." -if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 3 UNBOUND_PORT=$RND_PORT diff --git a/testdata/dynlibmod.tdir/dynlibmod.test b/testdata/dynlibmod.tdir/dynlibmod.test index f99f6fbc4..2954acaff 100644 --- a/testdata/dynlibmod.tdir/dynlibmod.test +++ b/testdata/dynlibmod.tdir/dynlibmod.test @@ -6,7 +6,6 @@ . ../common.sh PRE="../.." -if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # compile the dynamic library module if grep "define USE_WINSOCK 1" $PRE/config.h; then diff --git a/testdata/fwd_ancil.tdir/fwd_ancil.post b/testdata/fwd_ancil.tdir/fwd_ancil.post index 6578151af..c11bd44cd 100644 --- a/testdata/fwd_ancil.tdir/fwd_ancil.post +++ b/testdata/fwd_ancil.tdir/fwd_ancil.post @@ -6,11 +6,6 @@ # # do your teardown here . ../common.sh -if test `hostname`"" = "dicht.nlnetlabs.nl"; then - echo "In jail, no ::1, skip test" - exit 0 -fi - kill_pid $FWD_PID if fgrep "service stopped" unbound.log; then exit 0 diff --git a/testdata/fwd_ancil.tdir/fwd_ancil.pre b/testdata/fwd_ancil.tdir/fwd_ancil.pre index e1ce37a7f..6c0fb7a0b 100644 --- a/testdata/fwd_ancil.tdir/fwd_ancil.pre +++ b/testdata/fwd_ancil.tdir/fwd_ancil.pre @@ -6,8 +6,7 @@ . ../common.sh if test `hostname`"" = "dicht.nlnetlabs.nl"; then - echo "In jail, no ::1, skip test" - exit 0 + skip_test "In jail, no ::1, skip test" fi get_random_port 2 @@ -38,7 +37,6 @@ wait_ldns_testns_up fwd.log # string 'Start of service' in log. wait_server_up_or_fail unbound.log "start of service" "disable interface-automatic" if fgrep "disable interface-automatic" unbound.log; then - echo "skip test" - exit 1 + skip_test "skip test" fi diff --git a/testdata/fwd_ancil.tdir/fwd_ancil.test b/testdata/fwd_ancil.tdir/fwd_ancil.test index b90360fb8..8da4754ce 100644 --- a/testdata/fwd_ancil.tdir/fwd_ancil.test +++ b/testdata/fwd_ancil.tdir/fwd_ancil.test @@ -7,11 +7,6 @@ PRE="../.." . ../common.sh -if test `hostname`"" = "dicht.nlnetlabs.nl"; then - echo "In jail, no ::1, skip test" - exit 0 -fi - if fgrep "disable interface-automatic" unbound.log; then echo "skip test" exit 0 diff --git a/testdata/ipset.tdir/ipset.post b/testdata/ipset.tdir/ipset.post index 7af512a4d..4c4c17b13 100644 --- a/testdata/ipset.tdir/ipset.post +++ b/testdata/ipset.tdir/ipset.post @@ -7,7 +7,6 @@ # do your teardown here . ../common.sh PRE="../.." -if grep "define USE_IPSET 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $FWD_PID kill_pid $UNBOUND_PID cat unbound.log diff --git a/testdata/ipset.tdir/ipset.pre b/testdata/ipset.tdir/ipset.pre index ee1aedc70..42c94fac4 100644 --- a/testdata/ipset.tdir/ipset.pre +++ b/testdata/ipset.tdir/ipset.pre @@ -7,7 +7,7 @@ . ../common.sh PRE="../.." -if grep "define USE_IPSET 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define USE_IPSET 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 2 UNBOUND_PORT=$RND_PORT diff --git a/testdata/ipset.tdir/ipset.test b/testdata/ipset.tdir/ipset.test index 9150e5e3f..4dab457ba 100644 --- a/testdata/ipset.tdir/ipset.test +++ b/testdata/ipset.tdir/ipset.test @@ -6,7 +6,6 @@ . ../common.sh PRE="../.." -if grep "define USE_IPSET 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi # Make all the queries. They need to succeed by the way. echo "> dig www.example.net." diff --git a/testdata/nss_compile.tdir/nss_compile.dsc b/testdata/nss_compile.tdir/nss_compile.dsc index 6c59d245f..a719a260d 100644 --- a/testdata/nss_compile.tdir/nss_compile.dsc +++ b/testdata/nss_compile.tdir/nss_compile.dsc @@ -8,7 +8,7 @@ Component: CmdDepends: Depends: Help: -Pre: +Pre: nss_compile.pre Post: Test: nss_compile.test AuxFiles: diff --git a/testdata/nss_compile.tdir/nss_compile.pre b/testdata/nss_compile.tdir/nss_compile.pre new file mode 100644 index 000000000..313f60383 --- /dev/null +++ b/testdata/nss_compile.tdir/nss_compile.pre @@ -0,0 +1,13 @@ +# #-- nss_compile.pre --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +if test "`hostname`" = "open.nlnetlabs.nl"; then + echo "on open, continue test" +else + skip_test "not on open, no test, do this explicitly" +fi +exit 0 diff --git a/testdata/nss_compile.tdir/nss_compile.test b/testdata/nss_compile.tdir/nss_compile.test index 82b194668..73afd6401 100644 --- a/testdata/nss_compile.tdir/nss_compile.test +++ b/testdata/nss_compile.tdir/nss_compile.test @@ -4,13 +4,6 @@ # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test -if test "`hostname`" = "open.nlnetlabs.nl"; then - echo "on open, continue test" -else - echo "not on open, no test, do this explicitly" - exit 0 -fi - . ../common.sh get_make PRE="../.." diff --git a/testdata/padding.tdir/padding.post b/testdata/padding.tdir/padding.post index 826798a8f..9121ccf25 100644 --- a/testdata/padding.tdir/padding.post +++ b/testdata/padding.tdir/padding.post @@ -7,7 +7,6 @@ # do your teardown here . ../common.sh PRE="../.." -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi kill_pid $DNSTAP_SOCKET_PID kill_pid $FWD_PID kill_pid `cat unbound2.pid` diff --git a/testdata/padding.tdir/padding.pre b/testdata/padding.tdir/padding.pre index 4a13d0229..fdb6386be 100644 --- a/testdata/padding.tdir/padding.pre +++ b/testdata/padding.tdir/padding.pre @@ -6,7 +6,7 @@ PRE="../.." . ../common.sh -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi +if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else skip_test "test skipped"; fi get_random_port 5 UNBOUND_PORT=$RND_PORT diff --git a/testdata/padding.tdir/padding.test b/testdata/padding.tdir/padding.test index 5111d8139..6161a49ae 100644 --- a/testdata/padding.tdir/padding.test +++ b/testdata/padding.tdir/padding.test @@ -8,7 +8,6 @@ echo There we go... PRE="../.." . ../common.sh -if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi echo "> query www.example.com. A" dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile diff --git a/testdata/pylib.tdir/pylib.post b/testdata/pylib.tdir/pylib.post index 875e06d0a..8dbde8d2e 100644 --- a/testdata/pylib.tdir/pylib.post +++ b/testdata/pylib.tdir/pylib.post @@ -8,13 +8,6 @@ PRE="../.." . ../common.sh -# if no python; exit -if grep "define WITH_PYUNBOUND 1" $PRE/config.h; then - echo "have pyunbound" -else - echo "no pyunbound" - exit 0 -fi # kill fwder kill_pid $FWD_PID diff --git a/testdata/pylib.tdir/pylib.pre b/testdata/pylib.tdir/pylib.pre index 30e005906..3a74b6019 100644 --- a/testdata/pylib.tdir/pylib.pre +++ b/testdata/pylib.tdir/pylib.pre @@ -10,8 +10,7 @@ PRE="../.." if grep "define WITH_PYUNBOUND 1" $PRE/config.h; then echo "have pyunbound" else - echo "no pyunbound" - exit 0 + skip_test "no pyunbound" fi # Copy the required libraries diff --git a/testdata/pylib.tdir/pylib.test b/testdata/pylib.tdir/pylib.test index 59f996459..a583daba4 100644 --- a/testdata/pylib.tdir/pylib.test +++ b/testdata/pylib.tdir/pylib.test @@ -5,13 +5,6 @@ [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." -if grep "define WITH_PYUNBOUND 1" $PRE/config.h; then - echo "have pyunbound" -else - echo "no pyunbound" - exit 0 -fi - if test "`uname 2>&1`" = "Darwin"; then echo export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:../../.libs" export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:../../.libs" diff --git a/testdata/pymod.tdir/pymod.post b/testdata/pymod.tdir/pymod.post index 368d285ed..5449ad474 100644 --- a/testdata/pymod.tdir/pymod.post +++ b/testdata/pymod.tdir/pymod.post @@ -8,13 +8,6 @@ PRE="../.." . ../common.sh -# if no python; exit -if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then - echo "have python module" -else - echo "no python module" - exit 0 -fi kill_pid $FWD_PID kill_pid $UNBOUND_PID diff --git a/testdata/pymod.tdir/pymod.pre b/testdata/pymod.tdir/pymod.pre index 9029a8742..f845d6f97 100644 --- a/testdata/pymod.tdir/pymod.pre +++ b/testdata/pymod.tdir/pymod.pre @@ -10,8 +10,7 @@ PRE="../.." if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then echo "have python module" else - echo "no python module" - exit 0 + skip_test "no python module" fi # get module python local cp $PRE/pythonmod/unboundmodule.py . diff --git a/testdata/pymod.tdir/pymod.test b/testdata/pymod.tdir/pymod.test index 43bf6e65f..5ea87282b 100644 --- a/testdata/pymod.tdir/pymod.test +++ b/testdata/pymod.tdir/pymod.test @@ -5,12 +5,6 @@ [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." -if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then - echo "have python module" -else - echo "no python module" - exit 0 -fi if test "`uname 2>&1`" = "Darwin"; then ldnsdir=`grep ldnsdir= ../../Makefile | sed -e 's/ldnsdir=//'` diff --git a/testdata/pymod_thread.tdir/pymod_thread.post b/testdata/pymod_thread.tdir/pymod_thread.post index e9b307548..b438958b2 100644 --- a/testdata/pymod_thread.tdir/pymod_thread.post +++ b/testdata/pymod_thread.tdir/pymod_thread.post @@ -8,13 +8,6 @@ PRE="../.." . ../common.sh -# if no python; exit -if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then - echo "have python module" -else - echo "no python module" - exit 0 -fi kill_pid $FWD_PID kill_pid $UNBOUND_PID diff --git a/testdata/pymod_thread.tdir/pymod_thread.pre b/testdata/pymod_thread.tdir/pymod_thread.pre index c16362a0b..79fdc0375 100644 --- a/testdata/pymod_thread.tdir/pymod_thread.pre +++ b/testdata/pymod_thread.tdir/pymod_thread.pre @@ -10,8 +10,7 @@ PRE="../.." if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then echo "have python module" else - echo "no python module" - exit 0 + skip_test "no python module" fi # get module python local cp $PRE/pythonmod/unboundmodule.py . diff --git a/testdata/pymod_thread.tdir/pymod_thread.test b/testdata/pymod_thread.tdir/pymod_thread.test index c6baa01be..7c55d19ab 100644 --- a/testdata/pymod_thread.tdir/pymod_thread.test +++ b/testdata/pymod_thread.tdir/pymod_thread.test @@ -5,12 +5,6 @@ [ -f .tpkg.var.test ] && source .tpkg.var.test PRE="../.." -if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then - echo "have python module" -else - echo "no python module" - exit 0 -fi if test "`uname 2>&1`" = "Darwin"; then ldnsdir=`grep ldnsdir= ../../Makefile | sed -e 's/ldnsdir=//'` diff --git a/testdata/root_anchor.tdir/root_anchor.dsc b/testdata/root_anchor.tdir/root_anchor.dsc index daf231da5..2ea179e89 100644 --- a/testdata/root_anchor.tdir/root_anchor.dsc +++ b/testdata/root_anchor.tdir/root_anchor.dsc @@ -8,7 +8,7 @@ Component: CmdDepends: Depends: Help: -Pre: +Pre: root_anchor.pre Post: Test: root_anchor.test AuxFiles: diff --git a/testdata/root_anchor.tdir/root_anchor.pre b/testdata/root_anchor.tdir/root_anchor.pre new file mode 100644 index 000000000..0357646cd --- /dev/null +++ b/testdata/root_anchor.tdir/root_anchor.pre @@ -0,0 +1,11 @@ +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +# only do this test if the network is up. +if dig @k.root-servers.net . SOA 2>&1 | grep NOERROR ; then + : +else + skip_test "network is not up" +fi diff --git a/testdata/root_anchor.tdir/root_anchor.test b/testdata/root_anchor.tdir/root_anchor.test index f75dadf67..bbff028be 100644 --- a/testdata/root_anchor.tdir/root_anchor.test +++ b/testdata/root_anchor.tdir/root_anchor.test @@ -5,15 +5,6 @@ PRE="../.." -# only do this test if the network is up. -echo "is the net up?" -if dig @k.root-servers.net . SOA 2>&1 | grep NOERROR ; then - echo yes -else - echo no - exit 0 -fi - # test that unbound-anchor, its builtin DNSKEY, works. # so the https is disabled (go to 127.0.0.1@10099). $PRE/unbound-anchor -u "127.0.0.1" -P 10099 -a test.ds -v diff --git a/testdata/root_hints.tdir/root_hints.dsc b/testdata/root_hints.tdir/root_hints.dsc index 5576fbaf9..c01f29074 100644 --- a/testdata/root_hints.tdir/root_hints.dsc +++ b/testdata/root_hints.tdir/root_hints.dsc @@ -8,7 +8,7 @@ Component: CmdDepends: Depends: Help: -Pre: +Pre: root_hints.pre Post: Test: root_hints.test AuxFiles: diff --git a/testdata/root_hints.tdir/root_hints.pre b/testdata/root_hints.tdir/root_hints.pre new file mode 100644 index 000000000..a75669312 --- /dev/null +++ b/testdata/root_hints.tdir/root_hints.pre @@ -0,0 +1,11 @@ +# #-- root_hints.pre --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +# dig 9 ? +digv=`dig -v 2>&1 | wc -l` +if test $digv -ne 1; then + skip_test "Dig too old. skip test" +fi diff --git a/testdata/root_hints.tdir/root_hints.test b/testdata/root_hints.tdir/root_hints.test index 6ae4ec7f4..a5c1dc195 100644 --- a/testdata/root_hints.tdir/root_hints.test +++ b/testdata/root_hints.tdir/root_hints.test @@ -1,4 +1,4 @@ -# #-- 06-ianaports.test --# +# #-- root_hints.test --# # source the master var file when it's there [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master # use .tpkg.var.test for in test variable passing @@ -6,13 +6,6 @@ PRE="../.." -# dig 9 ? -digv=`dig -v 2>&1 | wc -l` -if test $digv -ne 1; then - echo "Dig too old. skip test" - exit 0 -fi - eval `grep ^srcdir= $PRE/Makefile` echo "srcdir="$srcdir From 5f3b4605865a929e028511268caff320e34af079 Mon Sep 17 00:00:00 2001 From: Philip Homburg Date: Tue, 20 Sep 2022 14:47:19 +0200 Subject: [PATCH 22/60] Align with version 1.58 on cvsweb.openbsd.org --- compat/arc4random.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/compat/arc4random.c b/compat/arc4random.c index ae342d3a4..486ab89c6 100644 --- a/compat/arc4random.c +++ b/compat/arc4random.c @@ -22,7 +22,7 @@ /* * ChaCha based random number generator for OpenBSD. */ -#define REKEY_BASE (1024*1024) //base 2 + #include #include #include @@ -57,6 +57,8 @@ #define BLOCKSZ 64 #define RSBUFSZ (16*BLOCKSZ) +#define REKEY_BASE (1024*1024) /* NB. should be a power of 2 */ + /* Marked MAP_INHERIT_ZERO, so zero'd out in fork children. */ static struct { size_t rs_have; /* valid bytes at end of rs_buf */ @@ -180,6 +182,7 @@ _rs_stir(void) { u_char rnd[KEYSZ + IVSZ]; uint32_t rekey_fuzz = 0; + if (getentropy(rnd, sizeof rnd) == -1) { if(errno != ENOSYS || fallback_getentropy_urandom(rnd, sizeof rnd) == -1) { @@ -201,9 +204,10 @@ _rs_stir(void) rs->rs_have = 0; memset(rsx->rs_buf, 0, sizeof(rsx->rs_buf)); - /*rs->rs_count = 1600000;*/ - chacha_encrypt_bytes(&rsx->rs_chacha, (uint8_t *)&rekey_fuzz,(uint8_t *)&rekey_fuzz, sizeof(rekey_fuzz)); - rs->rs_count = REKEY_BASE + (rekey_fuzz % REKEY_BASE); + /* rekey interval should not be predictable */ + chacha_encrypt_bytes(&rsx->rs_chacha, (uint8_t *)&rekey_fuzz, + (uint8_t *)&rekey_fuzz, sizeof(rekey_fuzz)); + rs->rs_count = REKEY_BASE + (rekey_fuzz % REKEY_BASE); } static inline void From 99e12ae4b594a1f16b75a255cc410cb2117c975b Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Tue, 20 Sep 2022 14:47:24 +0200 Subject: [PATCH 23/60] - Remove unused testcode/mini_tpkg.sh file. --- doc/Changelog | 1 + testcode/mini_tpkg.sh | 128 ------------------------------------------ 2 files changed, 1 insertion(+), 128 deletions(-) delete mode 100755 testcode/mini_tpkg.sh diff --git a/doc/Changelog b/doc/Changelog index 7f330d8dd..ba5cd8841 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 20 September 2022: George - Convert tdir tests to use the new skip_test functionality. + - Remove unused testcode/mini_tpkg.sh file. 16 September 2022: George - Merge #753: ACL per interface. (New interface-* configuration diff --git a/testcode/mini_tpkg.sh b/testcode/mini_tpkg.sh deleted file mode 100755 index ebf27a7d4..000000000 --- a/testcode/mini_tpkg.sh +++ /dev/null @@ -1,128 +0,0 @@ -# tpkg that only exes the files. -args="../.." -if test "$1" = "-a"; then - args=$2 - shift - shift -fi - -if test "$1" = "clean"; then - echo "rm -f result.* .done* .tpkg.var.master .tpkg.var.test" - rm -f result.* .done* .tpkg.var.master .tpkg.var.test - exit 0 -fi -if test "$1" = "fake"; then - echo "minitpkg fake $2" - echo "fake" > .done-`basename $2 .tpkg` - exit 0 -fi -if test "$1" = "report" || test "$2" = "report"; then - echo "Minitpkg Report" - for result in *.tpkg; do - name=`basename $result .tpkg` - if test -f ".done-$name"; then - if test "$1" != "-q"; then - echo "** PASSED ** : $name" - fi - else - if test -f "result.$name"; then - echo "!! FAILED !! : $name" - else - echo ">> SKIPPED<< : $name" - fi - fi - done - exit 0 -fi - -if test "$1" != 'exe'; then - # usage - echo "mini tpkg. Reduced functionality for old shells." - echo " tpkg exe " - echo " tpkg fake " - echo " tpkg clean" - echo " tpkg [-q] report" - exit 1 -fi -shift - -# do not execute if the disk is too full -#DISKLIMIT=100000 -# This check is not portable (to Solaris 10). -#avail=`df . | tail -1 | awk '{print $4}'` -#if test "$avail" -lt "$DISKLIMIT"; then - #echo "minitpkg: The disk is too full! Only $avail." - #exit 1 -#fi - -name=`basename $1 .tpkg` -dir=$name.$$ -result=result.$name -done=.done-$name -success="no" -if test -x "`which bash`"; then - shell="bash" -else - shell="sh" -fi - -# check already done -if test -f .done-$name; then - echo "minitpkg .done-$name exists. skip test." - exit 0 -fi - -# Extract -echo "minitpkg extract $1 to $dir" -mkdir $dir -gzip -cd $name.tpkg | (cd $dir; tar xf -) -cd $dir -mv $name.dir/* . - -# EXE -echo "minitpkg exe $name" > $result -grep "Description:" $name.dsc >> $result 2>&1 -echo "DateRunStart: "`date "+%s" 2>/dev/null` >> $result -if test -f $name.pre; then - echo "minitpkg exe $name.pre" - echo "minitpkg exe $name.pre" >> $result - $shell $name.pre $args >> $result - if test $? -ne 0; then - echo "Warning: $name.pre did not exit successfully" - fi -fi -if test -f $name.test; then - echo "minitpkg exe $name.test" - echo "minitpkg exe $name.test" >> $result - $shell $name.test $args >>$result 2>&1 - if test $? -ne 0; then - echo "$name: FAILED" >> $result - echo "$name: FAILED" - success="no" - else - echo "$name: PASSED" >> $result - echo "$name: PASSED" > ../.done-$name - echo "$name: PASSED" - success="yes" - fi -fi -if test -f $name.post; then - echo "minitpkg exe $name.post" - echo "minitpkg exe $name.post" >> $result - $shell $name.post $args >> $result - if test $? -ne 0; then - echo "Warning: $name.post did not exit successfully" - fi -fi -echo "DateRunEnd: "`date "+%s" 2>/dev/null` >> $result - -mv $result .. -cd .. -rm -rf $dir -# compat for windows where deletion may not succeed initially (files locked -# by processes that still have to exit). -if test $? -eq 1; then - echo "minitpkg waiting for processes to terminate" - sleep 2 # some time to exit, and try again - rm -rf $dir -fi From bd3c5702a745a5b17aa8615a35b1da140bfa3fc7 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 21 Sep 2022 11:09:03 +0200 Subject: [PATCH 24/60] branch for 1.16.3 release. --- configure | 25 +++++++++++++------------ configure.ac | 5 +++-- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/configure b/configure index cc44a5750..f40187910 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for unbound 1.16.2. +# Generated by GNU Autoconf 2.69 for unbound 1.16.3. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.16.2' -PACKAGE_STRING='unbound 1.16.2' +PACKAGE_VERSION='1.16.3' +PACKAGE_STRING='unbound 1.16.3' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues' PACKAGE_URL='' @@ -1477,7 +1477,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures unbound 1.16.2 to adapt to many kinds of systems. +\`configure' configures unbound 1.16.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1543,7 +1543,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.16.2:";; + short | recursive ) echo "Configuration of unbound 1.16.3:";; esac cat <<\_ACEOF @@ -1785,7 +1785,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.16.2 +unbound configure 1.16.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2494,7 +2494,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by unbound $as_me 1.16.2, which was +It was created by unbound $as_me 1.16.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2846,11 +2846,11 @@ UNBOUND_VERSION_MAJOR=1 UNBOUND_VERSION_MINOR=16 -UNBOUND_VERSION_MICRO=2 +UNBOUND_VERSION_MICRO=3 LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=18 +LIBUNBOUND_REVISION=19 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2936,6 +2936,7 @@ LIBUNBOUND_AGE=1 # 1.16.0 had 9:16:1 # 1.16.1 had 9:17:1 # 1.16.2 had 9:18:1 +# 1.16.3 had 9:19:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -22014,7 +22015,7 @@ _ACEOF -version=1.16.2 +version=1.16.3 date=`date +'%b %e, %Y'` @@ -22533,7 +22534,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by unbound $as_me 1.16.2, which was +This file was extended by unbound $as_me 1.16.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22599,7 +22600,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -unbound config.status 1.16.2 +unbound config.status 1.16.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 224501b3a..bf8aa9d8c 100644 --- a/configure.ac +++ b/configure.ac @@ -11,14 +11,14 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) m4_define([VERSION_MINOR],[16]) -m4_define([VERSION_MICRO],[2]) +m4_define([VERSION_MICRO],[3]) AC_INIT([unbound],m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]),[unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues],[unbound]) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=18 +LIBUNBOUND_REVISION=19 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -104,6 +104,7 @@ LIBUNBOUND_AGE=1 # 1.16.0 had 9:16:1 # 1.16.1 had 9:17:1 # 1.16.2 had 9:18:1 +# 1.16.3 had 9:19:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary From 137719522a8ea5b380fbb6206d2466f402f5b554 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 21 Sep 2022 11:10:38 +0200 Subject: [PATCH 25/60] - Patch for CVE-2022-3204 Non-Responsive Delegation Attack. --- doc/Changelog | 3 +++ iterator/iter_delegpt.c | 3 +++ iterator/iter_delegpt.h | 2 ++ iterator/iter_utils.c | 3 +++ iterator/iter_utils.h | 9 +++++++++ iterator/iterator.c | 36 +++++++++++++++++++++++++++++++++++- services/cache/dns.c | 3 +++ services/mesh.c | 7 +++++++ services/mesh.h | 11 +++++++++++ 9 files changed, 76 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 13f0f1174..78f6c7afc 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +21 September 2022: Wouter + - Patch for CVE-2022-3204 Non-Responsive Delegation Attack. + 1 August 2022: Wouter - Fix the novel ghost domain issues CVE-2022-30698 and CVE-2022-30699. - Tests for ghost domain fixes. diff --git a/iterator/iter_delegpt.c b/iterator/iter_delegpt.c index 4bffa1b3a..fd07aaa13 100644 --- a/iterator/iter_delegpt.c +++ b/iterator/iter_delegpt.c @@ -78,6 +78,7 @@ struct delegpt* delegpt_copy(struct delegpt* dp, struct regional* region) if(!delegpt_add_ns(copy, region, ns->name, ns->lame, ns->tls_auth_name, ns->port)) return NULL; + copy->nslist->cache_lookup_count = ns->cache_lookup_count; copy->nslist->resolved = ns->resolved; copy->nslist->got4 = ns->got4; copy->nslist->got6 = ns->got6; @@ -121,6 +122,7 @@ delegpt_add_ns(struct delegpt* dp, struct regional* region, uint8_t* name, ns->namelen = len; dp->nslist = ns; ns->name = regional_alloc_init(region, name, ns->namelen); + ns->cache_lookup_count = 0; ns->resolved = 0; ns->got4 = 0; ns->got6 = 0; @@ -620,6 +622,7 @@ int delegpt_add_ns_mlc(struct delegpt* dp, uint8_t* name, uint8_t lame, } ns->next = dp->nslist; dp->nslist = ns; + ns->cache_lookup_count = 0; ns->resolved = 0; ns->got4 = 0; ns->got6 = 0; diff --git a/iterator/iter_delegpt.h b/iterator/iter_delegpt.h index 62c8edc51..586597a69 100644 --- a/iterator/iter_delegpt.h +++ b/iterator/iter_delegpt.h @@ -101,6 +101,8 @@ struct delegpt_ns { uint8_t* name; /** length of name */ size_t namelen; + /** number of cache lookups for the name */ + int cache_lookup_count; /** * If the name has been resolved. false if not queried for yet. * true if the A, AAAA queries have been generated. diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c index 3e13e595c..56b184a02 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c @@ -1209,6 +1209,9 @@ int iter_lookup_parent_glue_from_cache(struct module_env* env, struct delegpt_ns* ns; size_t num = delegpt_count_targets(dp); for(ns = dp->nslist; ns; ns = ns->next) { + if(ns->cache_lookup_count > ITERATOR_NAME_CACHELOOKUP_MAX_PSIDE) + continue; + ns->cache_lookup_count++; /* get cached parentside A */ akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_A, qinfo->qclass, diff --git a/iterator/iter_utils.h b/iterator/iter_utils.h index 8583fde58..850be96a6 100644 --- a/iterator/iter_utils.h +++ b/iterator/iter_utils.h @@ -62,6 +62,15 @@ struct ub_packed_rrset_key; struct module_stack; struct outside_network; +/* max number of lookups in the cache for target nameserver names. + * This stops, for large delegations, N*N lookups in the cache. */ +#define ITERATOR_NAME_CACHELOOKUP_MAX 3 +/* max number of lookups in the cache for parentside glue for nameserver names + * This stops, for larger delegations, N*N lookups in the cache. + * It is a little larger than the nonpside max, so it allows a couple extra + * lookups of parent side glue. */ +#define ITERATOR_NAME_CACHELOOKUP_MAX_PSIDE 5 + /** * Process config options and set iterator module state. * Sets default values if no config is found. diff --git a/iterator/iterator.c b/iterator/iterator.c index 25e5cfee4..da9b7990c 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -1218,6 +1218,15 @@ generate_dnskey_prefetch(struct module_qstate* qstate, (qstate->query_flags&BIT_RD) && !(qstate->query_flags&BIT_CD)){ return; } + /* we do not generate this prefetch when the query list is full, + * the query is fetched, if needed, when the validator wants it. + * At that time the validator waits for it, after spawning it. + * This means there is one state that uses cpu and a socket, the + * spawned while this one waits, and not several at the same time, + * if we had created the lookup here. And this helps to keep + * the total load down, but the query still succeeds to resolve. */ + if(mesh_jostle_exceeded(qstate->env->mesh)) + return; /* if the DNSKEY is in the cache this lookup will stop quickly */ log_nametypeclass(VERB_ALGO, "schedule dnskey prefetch", @@ -1911,6 +1920,14 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq, return 0; } query_count++; + /* If the mesh query list is full, exit the loop here. + * This makes the routine spawn one query at a time, + * and this means there is no query state load + * increase, because the spawned state uses cpu and a + * socket while this state waits for that spawned + * state. Next time we can look up further targets */ + if(mesh_jostle_exceeded(qstate->env->mesh)) + break; } /* Send the A request. */ if(ie->supports_ipv4 && @@ -1925,6 +1942,9 @@ query_for_targets(struct module_qstate* qstate, struct iter_qstate* iq, return 0; } query_count++; + /* If the mesh query list is full, exit the loop. */ + if(mesh_jostle_exceeded(qstate->env->mesh)) + break; } /* mark this target as in progress. */ @@ -2085,6 +2105,15 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, } ns->done_pside6 = 1; query_count++; + if(mesh_jostle_exceeded(qstate->env->mesh)) { + /* Wait for the lookup; do not spawn multiple + * lookups at a time. */ + verbose(VERB_ALGO, "try parent-side glue lookup"); + iq->num_target_queries += query_count; + target_count_increase(iq, query_count); + qstate->ext_state[id] = module_wait_subquery; + return 0; + } } if(ie->supports_ipv4 && !ns->done_pside4) { /* Send the A request. */ @@ -2560,7 +2589,12 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, if(iq->depth < ie->max_dependency_depth && iq->num_target_queries == 0 && (!iq->target_count || iq->target_count[TARGET_COUNT_NX]==0) - && iq->sent_count < TARGET_FETCH_STOP) { + && iq->sent_count < TARGET_FETCH_STOP + /* if the mesh query list is full, then do not waste cpu + * and sockets to fetch promiscuous targets. They can be + * looked up when needed. */ + && !mesh_jostle_exceeded(qstate->env->mesh) + ) { tf_policy = ie->target_fetch_policy[iq->depth]; } diff --git a/services/cache/dns.c b/services/cache/dns.c index 6bca8d85f..b6e569734 100644 --- a/services/cache/dns.c +++ b/services/cache/dns.c @@ -404,6 +404,9 @@ cache_fill_missing(struct module_env* env, uint16_t qclass, struct ub_packed_rrset_key* akey; time_t now = *env->now; for(ns = dp->nslist; ns; ns = ns->next) { + if(ns->cache_lookup_count > ITERATOR_NAME_CACHELOOKUP_MAX) + continue; + ns->cache_lookup_count++; akey = rrset_cache_lookup(env->rrset_cache, ns->name, ns->namelen, LDNS_RR_TYPE_A, qclass, 0, now, 0); if(akey) { diff --git a/services/mesh.c b/services/mesh.c index 30bcf7cda..2a4119426 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -2240,3 +2240,10 @@ mesh_serve_expired_callback(void* arg) mesh_do_callback(mstate, LDNS_RCODE_NOERROR, msg->rep, c, &tv); } } + +int mesh_jostle_exceeded(struct mesh_area* mesh) +{ + if(mesh->all.count < mesh->max_reply_states) + return 0; + return 1; +} diff --git a/services/mesh.h b/services/mesh.h index 3be9b63fa..25121a67b 100644 --- a/services/mesh.h +++ b/services/mesh.h @@ -685,4 +685,15 @@ struct dns_msg* mesh_serve_expired_lookup(struct module_qstate* qstate, struct query_info* lookup_qinfo); +/** + * See if the mesh has space for more queries. You can allocate queries + * anyway, but this checks for the allocated space. + * @param mesh: mesh area. + * @return true if the query list is full. + * It checks the number of all queries, not just number of reply states, + * that have a client address. So that spawned queries count too, + * that were created by the iterator, or other modules. + */ +int mesh_jostle_exceeded(struct mesh_area* mesh); + #endif /* SERVICES_MESH_H */ From 8e18f119654e31472e2d324d9045acb958eef344 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 21 Sep 2022 12:16:13 +0200 Subject: [PATCH 26/60] - This patch was released in 1.16.3, the code repository continues with the previous features and fixes for 1.17.0. --- configure | 27 ++++++++++++++------------- configure.ac | 7 ++++--- doc/Changelog | 2 ++ 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/configure b/configure index b2b655da1..a2837d185 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for unbound 1.16.3. +# Generated by GNU Autoconf 2.69 for unbound 1.17.0. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.16.3' -PACKAGE_STRING='unbound 1.16.3' +PACKAGE_VERSION='1.17.0' +PACKAGE_STRING='unbound 1.17.0' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues' PACKAGE_URL='' @@ -1477,7 +1477,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures unbound 1.16.3 to adapt to many kinds of systems. +\`configure' configures unbound 1.17.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1543,7 +1543,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.16.3:";; + short | recursive ) echo "Configuration of unbound 1.17.0:";; esac cat <<\_ACEOF @@ -1785,7 +1785,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.16.3 +unbound configure 1.17.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2494,7 +2494,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by unbound $as_me 1.16.3, which was +It was created by unbound $as_me 1.17.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2844,13 +2844,13 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu UNBOUND_VERSION_MAJOR=1 -UNBOUND_VERSION_MINOR=16 +UNBOUND_VERSION_MINOR=17 -UNBOUND_VERSION_MICRO=3 +UNBOUND_VERSION_MICRO=0 LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=19 +LIBUNBOUND_REVISION=20 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2937,6 +2937,7 @@ LIBUNBOUND_AGE=1 # 1.16.1 had 9:17:1 # 1.16.2 had 9:18:1 # 1.16.3 had 9:19:1 +# 1.17.0 had 9:20:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -22084,7 +22085,7 @@ _ACEOF -version=1.16.3 +version=1.17.0 date=`date +'%b %e, %Y'` @@ -22603,7 +22604,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by unbound $as_me 1.16.3, which was +This file was extended by unbound $as_me 1.17.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22669,7 +22670,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -unbound config.status 1.16.3 +unbound config.status 1.17.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index a8f9da6a5..57cc7e604 100644 --- a/configure.ac +++ b/configure.ac @@ -10,15 +10,15 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) -m4_define([VERSION_MINOR],[16]) -m4_define([VERSION_MICRO],[3]) +m4_define([VERSION_MINOR],[17]) +m4_define([VERSION_MICRO],[0]) AC_INIT([unbound],m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]),[unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues],[unbound]) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=19 +LIBUNBOUND_REVISION=20 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -105,6 +105,7 @@ LIBUNBOUND_AGE=1 # 1.16.1 had 9:17:1 # 1.16.2 had 9:18:1 # 1.16.3 had 9:19:1 +# 1.17.0 had 9:20:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary diff --git a/doc/Changelog b/doc/Changelog index 4bc6b695c..620e217b4 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,7 @@ 21 September 2022: Wouter - Patch for CVE-2022-3204 Non-Responsive Delegation Attack. + - This patch was released in 1.16.3, the code repository continues + with the previous features and fixes for 1.17.0. 20 September 2022: George - Convert tdir tests to use the new skip_test functionality. From e93c75a5d4261865ae386bbc952734a950246ad2 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 21 Sep 2022 15:23:04 +0200 Subject: [PATCH 27/60] - Fix doxygen warning in respip.h. --- doc/Changelog | 1 + services/view.c | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 620e217b4..824674488 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,7 @@ - Patch for CVE-2022-3204 Non-Responsive Delegation Attack. - This patch was released in 1.16.3, the code repository continues with the previous features and fixes for 1.17.0. + - Fix doxygen warning in respip.h. 20 September 2022: George - Convert tdir tests to use the new skip_test functionality. diff --git a/services/view.c b/services/view.c index db48ae954..72f364318 100644 --- a/services/view.c +++ b/services/view.c @@ -66,8 +66,9 @@ views_create(void) return v; } -/** This prototype is defined in in respip.h, but we want to avoid - * unnecessary dependencies */ +/* \noop (ignore this comment for doxygen) + * This prototype is defined in in respip.h, but we want to avoid + * unnecessary dependencies */ void respip_set_delete(struct respip_set *set); void From 5b9881675177db49329a0fd53117f98303b465cc Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Mon, 26 Sep 2022 15:51:28 +0200 Subject: [PATCH 28/60] - Better output for skipped tdir tests. --- doc/Changelog | 3 +++ testcode/mini_tdir.sh | 1 + 2 files changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 824674488..bbcef6f31 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +26 September 2022: George + - Better output for skipped tdir tests. + 21 September 2022: Wouter - Patch for CVE-2022-3204 Non-Responsive Delegation Attack. - This patch was released in 1.16.3, the code repository continues diff --git a/testcode/mini_tdir.sh b/testcode/mini_tdir.sh index 55c24c107..46914b38a 100755 --- a/testcode/mini_tdir.sh +++ b/testcode/mini_tdir.sh @@ -163,6 +163,7 @@ if test -f $name.pre; then if test $exit_value -eq 3; then echo "$name: SKIPPED" >> $result echo "$name: SKIPPED" > ../$skip + echo "$name: SKIPPED" elif test $exit_value -ne 0; then echo "Warning: $name.pre did not exit successfully" fi From 71f23ef354fae12e99963fe43200d38dfe796222 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Wed, 28 Sep 2022 09:57:56 +0200 Subject: [PATCH 29/60] extended_error_encode() for extended errors --- daemon/worker.c | 14 ++------------ util/data/msgencode.c | 18 ++++++++++++++---- util/data/msgencode.h | 19 ++++++++++++++++++- 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index 29c1961ed..c2a94be79 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1439,8 +1439,6 @@ worker_handle_request(struct comm_point* c, void* arg, int error, log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); memset(&reply_edns, 0, sizeof(reply_edns)); reply_edns.edns_present = 1; - reply_edns.udp_size = EDNS_ADVERTISED_SIZE; - LDNS_RCODE_SET(sldns_buffer_begin(c->buffer), ret); error_encode(c->buffer, ret, &qinfo, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer), sldns_buffer_read_u16_at(c->buffer, 2), &reply_edns); @@ -1449,22 +1447,14 @@ worker_handle_request(struct comm_point* c, void* arg, int error, } if(edns.edns_present) { if(edns.edns_version != 0) { - edns.ext_rcode = (uint8_t)(EDNS_RCODE_BADVERS>>4); - edns.edns_version = EDNS_ADVERTISED_VERSION; - edns.udp_size = EDNS_ADVERTISED_SIZE; - edns.bits &= EDNS_DO; edns.opt_list_in = NULL; edns.opt_list_out = NULL; edns.opt_list_inplace_cb_out = NULL; - edns.padding_block_size = 0; verbose(VERB_ALGO, "query with bad edns version."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); - error_encode(c->buffer, EDNS_RCODE_BADVERS&0xf, &qinfo, + extended_error_encode(c->buffer, EDNS_RCODE_BADVERS, &qinfo, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer), - sldns_buffer_read_u16_at(c->buffer, 2), NULL); - if(sldns_buffer_capacity(c->buffer) >= - sldns_buffer_limit(c->buffer)+calc_edns_field_size(&edns)) - attach_edns_record(c->buffer, &edns); + sldns_buffer_read_u16_at(c->buffer, 2), 0, &edns); regional_free_all(worker->scratchpad); goto send_reply; } diff --git a/util/data/msgencode.c b/util/data/msgencode.c index fe21cfb86..d832ddc91 100644 --- a/util/data/msgencode.c +++ b/util/data/msgencode.c @@ -959,14 +959,15 @@ qinfo_query_encode(sldns_buffer* pkt, struct query_info* qinfo) } void -error_encode(sldns_buffer* buf, int r, struct query_info* qinfo, - uint16_t qid, uint16_t qflags, struct edns_data* edns) +extended_error_encode(sldns_buffer* buf, uint16_t rcode, struct query_info* qinfo, + uint16_t qid, uint16_t qflags, uint16_t xflags, struct edns_data* edns) { uint16_t flags; sldns_buffer_clear(buf); sldns_buffer_write(buf, &qid, sizeof(uint16_t)); - flags = (uint16_t)(BIT_QR | BIT_RA | r); /* QR and retcode*/ + flags = (uint16_t)(BIT_QR | BIT_RA | (rcode & 0xF)); /* QR and retcode*/ + flags |= xflags; flags |= (qflags & (BIT_RD|BIT_CD)); /* copy RD and CD bit */ sldns_buffer_write_u16(buf, flags); if(qinfo) flags = 1; @@ -993,7 +994,7 @@ error_encode(sldns_buffer* buf, int r, struct query_info* qinfo, struct edns_data es = *edns; es.edns_version = EDNS_ADVERTISED_VERSION; es.udp_size = EDNS_ADVERTISED_SIZE; - es.ext_rcode = 0; + es.ext_rcode = (uint8_t)(rcode >> 4); es.bits &= EDNS_DO; if(sldns_buffer_limit(buf) + calc_edns_field_size(&es) > edns->udp_size) @@ -1001,3 +1002,12 @@ error_encode(sldns_buffer* buf, int r, struct query_info* qinfo, attach_edns_record(buf, &es); } } + +void +error_encode(sldns_buffer* buf, int r, struct query_info* qinfo, + uint16_t qid, uint16_t qflags, struct edns_data* edns) +{ + extended_error_encode(buf, (r & 0x000F), qinfo, qid, qflags + , (r & 0xFFF0), edns); +} + diff --git a/util/data/msgencode.h b/util/data/msgencode.h index 30dc515cb..1b37ca870 100644 --- a/util/data/msgencode.h +++ b/util/data/msgencode.h @@ -120,7 +120,7 @@ void attach_edns_record(struct sldns_buffer* pkt, struct edns_data* edns); * Encode an error. With QR and RA set. * * @param pkt: where to store the packet. - * @param r: RCODE value to encode. + * @param r: RCODE value to encode (may contain extra flags). * @param qinfo: if not NULL, the query is included. * @param qid: query ID to set in packet. network order. * @param qflags: original query flags (to copy RD and CD bits). host order. @@ -130,4 +130,21 @@ void attach_edns_record(struct sldns_buffer* pkt, struct edns_data* edns); void error_encode(struct sldns_buffer* pkt, int r, struct query_info* qinfo, uint16_t qid, uint16_t qflags, struct edns_data* edns); +/** + * Encode an extended error. With QR and RA set. + * + * @param pkt: where to store the packet. + * @param rcode: Extended RCODE value to encode. + * @param qinfo: if not NULL, the query is included. + * @param qid: query ID to set in packet. network order. + * @param qflags: original query flags (to copy RD and CD bits). host order. + * @param xflags: extra flags to set (such as for example BIT_AA and/or BIT_TC) + * @param edns: if not NULL, this is the query edns info, + * and an edns reply is attached. Only attached if EDNS record fits reply. + * Without edns extended errors (i.e. > 15 )will not be conveyed. + */ +void extended_error_encode(struct sldns_buffer* pkt, uint16_t rcode, + struct query_info* qinfo, uint16_t qid, uint16_t qflags, + uint16_t xflags, struct edns_data* edns); + #endif /* UTIL_DATA_MSGENCODE_H */ From 75f3fbdd6563dd87c93964e48a3fb7e6c520d74e Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Wed, 28 Sep 2022 10:28:19 +0200 Subject: [PATCH 30/60] Downstream DNS Cookies a la RFC7873 and RFC9018 Create server cookies for clients that send client cookies. Needs to be turned on in the config file with: answer-cookie: yes A cookie-secret can be configured for anycast setups. Also adds an access control list that will allow queries with either a valid cookie or over a stateful transport. --- Makefile.in | 8 +- daemon/acl_list.c | 2 + daemon/acl_list.h | 4 +- daemon/worker.c | 44 ++++++++++- doc/unbound.conf.5.in | 23 +++++- libunbound/libworker.c | 2 + services/authzone.c | 4 + sldns/rrdef.h | 4 + testcode/fake_event.c | 2 + util/config_file.c | 23 ++++++ util/config_file.h | 7 ++ util/configlexer.lex | 2 + util/configparser.y | 35 ++++++++- util/data/msgparse.c | 151 ++++++++++++++++++++++++++++++++++++- util/data/msgparse.h | 14 +++- util/siphash.c | 165 +++++++++++++++++++++++++++++++++++++++++ validator/autotrust.c | 2 + 17 files changed, 473 insertions(+), 19 deletions(-) create mode 100644 util/siphash.c diff --git a/Makefile.in b/Makefile.in index 3189731ad..718f47f5c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -128,7 +128,7 @@ util/config_file.c util/configlexer.c util/configparser.c \ util/shm_side/shm_main.c services/authzone.c \ util/fptr_wlist.c util/locks.c util/log.c util/mini_event.c util/module.c \ util/netevent.c util/net_help.c util/random.c util/rbtree.c util/regional.c \ -util/rtt.c util/edns.c util/storage/dnstree.c util/storage/lookup3.c \ +util/rtt.c util/siphash.c util/edns.c util/storage/dnstree.c util/storage/lookup3.c \ util/storage/lruhash.c util/storage/slabhash.c util/tcp_conn_limit.c \ util/timehist.c util/tube.c \ util/ub_event.c util/ub_event_pluggable.c util/winsock_event.c \ @@ -145,7 +145,7 @@ as112.lo msgparse.lo msgreply.lo packed_rrset.lo iterator.lo iter_delegpt.lo \ iter_donotq.lo iter_fwd.lo iter_hints.lo iter_priv.lo iter_resptype.lo \ iter_scrub.lo iter_utils.lo localzone.lo mesh.lo modstack.lo view.lo \ outbound_list.lo alloc.lo config_file.lo configlexer.lo configparser.lo \ -fptr_wlist.lo edns.lo locks.lo log.lo mini_event.lo module.lo net_help.lo \ +fptr_wlist.lo siphash.lo edns.lo locks.lo log.lo mini_event.lo module.lo net_help.lo \ random.lo rbtree.lo regional.lo rtt.lo dnstree.lo lookup3.lo lruhash.lo \ slabhash.lo tcp_conn_limit.lo timehist.lo tube.lo winsock_event.lo \ autotrust.lo val_anchor.lo rpz.lo \ @@ -915,7 +915,8 @@ config_file.lo config_file.o: $(srcdir)/util/config_file.c config.h $(srcdir)/ut 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 \ - $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h + $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/sldns/str2wire.h \ + $(srcdir)/sldns/rrdef.h shm_main.lo shm_main.o: $(srcdir)/util/shm_side/shm_main.c config.h $(srcdir)/util/shm_side/shm_main.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ @@ -1004,6 +1005,7 @@ rtt.lo rtt.o: $(srcdir)/util/rtt.c config.h $(srcdir)/util/rtt.h $(srcdir)/itera $(srcdir)/services/outbound_list.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/module.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h +siphash.lo siphash.o: $(srcdir)/util/siphash.c edns.lo edns.o: $(srcdir)/util/edns.c config.h $(srcdir)/util/edns.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/config_file.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/regional.h \ diff --git a/daemon/acl_list.c b/daemon/acl_list.c index 8e8e1fc9b..e6d0470a1 100644 --- a/daemon/acl_list.c +++ b/daemon/acl_list.c @@ -109,6 +109,8 @@ parse_acl_access(const char* str, enum acl_access* control) *control = acl_allow_snoop; else if(strcmp(str, "allow_setrd") == 0) *control = acl_allow_setrd; + else if (strcmp(str, "allow_cookie") == 0) + *control = acl_allow_cookie; else { log_err("access control type %s unknown", str); return 0; diff --git a/daemon/acl_list.h b/daemon/acl_list.h index c717179ba..8aece11bf 100644 --- a/daemon/acl_list.h +++ b/daemon/acl_list.h @@ -65,7 +65,9 @@ enum acl_access { /** allow full access for all queries, recursion and cache snooping */ acl_allow_snoop, /** allow full access for recursion queries and set RD flag regardless of request */ - acl_allow_setrd + acl_allow_setrd, + /** allow full access if valid cookie present or stateful transport */ + acl_allow_cookie }; /** diff --git a/daemon/worker.c b/daemon/worker.c index c2a94be79..1abf20a7b 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1432,8 +1432,10 @@ worker_handle_request(struct comm_point* c, void* arg, int error, } goto send_reply; } - if((ret=parse_edns_from_query_pkt(c->buffer, &edns, worker->env.cfg, c, - worker->scratchpad)) != 0) { + if((ret=parse_edns_from_query_pkt( + c->buffer, &edns, worker->env.cfg, c, repinfo, + (worker->env.now ? *worker->env.now : time(NULL)), + worker->scratchpad)) != 0) { struct edns_data reply_edns; verbose(VERB_ALGO, "worker parse edns: formerror."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); @@ -1466,6 +1468,44 @@ worker_handle_request(struct comm_point* c, void* arg, int error, edns.udp_size = NORMAL_UDP_SIZE; } } + /* "if, else if" sequence below deals with downstream DNS Cookies */ + if (acl != acl_allow_cookie) + ; /* pass; No cookie downstream processing whatsoever */ + + else if (edns.cookie_valid) + ; /* pass; Valid cookie is good! */ + + else if (c->type != comm_udp) + ; /* pass; Stateful transport */ + + else if (edns.cookie_present) { + /* Cookie present, but not valid: Cookie was bad! */ + extended_error_encode(c->buffer, + LDNS_EXT_RCODE_BADCOOKIE, &qinfo, + *(uint16_t*)(void *) + sldns_buffer_begin(c->buffer), + sldns_buffer_read_u16_at(c->buffer, 2), + 0, &edns); + regional_free_all(worker->scratchpad); + goto send_reply; + } else { + /* Cookie requered, but no cookie present on UDP */ + verbose(VERB_ALGO, "worker request: " + "need cookie or stateful transport"); + log_addr(VERB_ALGO, "from", + &repinfo->addr, repinfo->addrlen); + EDNS_OPT_LIST_APPEND_EDE(&edns.opt_list_out, + worker->scratchpad, LDNS_EDE_OTHER, + "DNS Cookie needed for UDP replies"); + error_encode(c->buffer, + (LDNS_RCODE_REFUSED|BIT_TC), &qinfo, + *(uint16_t*)(void *) + sldns_buffer_begin(c->buffer), + sldns_buffer_read_u16_at(c->buffer, 2), + &edns); + regional_free_all(worker->scratchpad); + goto send_reply; + } if(edns.udp_size > worker->daemon->cfg->max_udp_size && c->type == comm_udp) { verbose(VERB_QUERY, diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 73575d93a..e187452de 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -673,9 +673,9 @@ This option is experimental at this time. .B access\-control: \fI The netblock is given as an IP4 or IP6 address with /size appended for a classless network block. The action can be \fIdeny\fR, \fIrefuse\fR, -\fIallow\fR, \fIallow_setrd\fR, \fIallow_snoop\fR, \fIdeny_non_local\fR or -\fIrefuse_non_local\fR. -The most specific netblock match is used, if none match \fIrefuse\fR is used. +\fIallow\fR, \fIallow_setrd\fR, \fIallow_snoop\fR, \fIallow_cookie\fR, +\fIdeny_non_local\fR or \fIrefuse_non_local\fR. +The most specific netblock match is used, if none match \fIdeny\fR is used. The order of the access\-control statements therefore does not matter. .IP The action \fIdeny\fR stops queries from hosts from that netblock. @@ -710,6 +710,14 @@ the cache contents (for malicious acts). However, nonrecursive queries can also be a valuable debugging tool (when you want to examine the cache contents). In that case use \fIallow_snoop\fR for your administration host. .IP +When the \fBanswer\-cookie\fR option is enabled, the \fIallow_cookie\fR action +will allow access to UDP queries that contain a valid Server Cookie as +specified in RFC 7873 and RFC9018. UDP queries containing only a Client Cookie +and no Server Cookie, will receive a BADCOOKIE response including a Server +Cookie, allow clients to retry with that Server Cookie. The \fIallow_cookie\fR +will also accept requests over statefull transports, regardless of the precence +of a Cookie and regardless the \fBanswer\-cookie\fR setting. +.IP By default only localhost is \fIallow\fRed, the rest is \fIrefuse\fRd. The default is \fIrefuse\fRd, because that is protocol\-friendly. The DNS protocol is not designed to handle dropped packets due to policy, and @@ -1824,6 +1832,15 @@ Set the number of servers that should be used for fast server selection. Only use the fastest specified number of servers with the fast\-server\-permil option, that turns this on or off. The default is to use the fastest 3 servers. .TP 5 +.B answer\-cookie: \fI +Enable to answer to requests containig DNS Cookies as specified in RFC7873 and +RFC9018. Default is no. +.TP 5 +.B cookie\-secret: \fI<128 bit hex string> +Server's in an Anycast deployment need to be able to verify each other's +Server Cookies. For this they need to share the secret used to construct +and verify the Server Cookies. +Default is a 128 bits random secret generated at startup time. .B edns\-client\-string: \fI Include an EDNS0 option containing configured ascii string in queries with destination address matching the configured IP netblock. This configuration diff --git a/libunbound/libworker.c b/libunbound/libworker.c index 11bf5f9db..d5fabe6fb 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -604,6 +604,8 @@ setup_qinfo_edns(struct libworker* w, struct ctx_query* q, edns->opt_list_out = NULL; edns->opt_list_inplace_cb_out = NULL; edns->padding_block_size = 0; + edns->cookie_present = 0; + edns->cookie_valid = 0; if(sldns_buffer_capacity(w->back->udp_buff) < 65535) edns->udp_size = (uint16_t)sldns_buffer_capacity( w->back->udp_buff); diff --git a/services/authzone.c b/services/authzone.c index 6de1e4319..079a7eaf1 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -5419,6 +5419,8 @@ xfr_transfer_lookup_host(struct auth_xfer* xfr, struct module_env* env) edns.opt_list_out = NULL; edns.opt_list_inplace_cb_out = NULL; edns.padding_block_size = 0; + edns.cookie_present = 0; + edns.cookie_valid = 0; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); else edns.udp_size = 65535; @@ -6612,6 +6614,8 @@ xfr_probe_lookup_host(struct auth_xfer* xfr, struct module_env* env) edns.opt_list_out = NULL; edns.opt_list_inplace_cb_out = NULL; edns.padding_block_size = 0; + edns.cookie_present = 0; + edns.cookie_valid = 0; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); else edns.udp_size = 65535; diff --git a/sldns/rrdef.h b/sldns/rrdef.h index 999c22307..d5b0585fd 100644 --- a/sldns/rrdef.h +++ b/sldns/rrdef.h @@ -433,6 +433,7 @@ enum sldns_enum_edns_option LDNS_EDNS_DHU = 6, /* RFC6975 */ LDNS_EDNS_N3U = 7, /* RFC6975 */ LDNS_EDNS_CLIENT_SUBNET = 8, /* RFC7871 */ + LDNS_EDNS_COOKIE = 10, /* RFC7873 */ LDNS_EDNS_KEEPALIVE = 11, /* draft-ietf-dnsop-edns-tcp-keepalive*/ LDNS_EDNS_PADDING = 12, /* RFC7830 */ LDNS_EDNS_EDE = 15, /* RFC8914 */ @@ -482,6 +483,9 @@ typedef enum sldns_enum_ede_code sldns_ede_code; #define LDNS_TSIG_ERROR_BADNAME 20 #define LDNS_TSIG_ERROR_BADALG 21 +/** DNS Cookie extended rcode */ +#define LDNS_EXT_RCODE_BADCOOKIE 23 + /** * Contains all information about resource record types. * diff --git a/testcode/fake_event.c b/testcode/fake_event.c index 03e1c04f3..c93ceaa4c 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1263,6 +1263,8 @@ struct serviced_query* outnet_serviced_query(struct outside_network* outnet, if(dnssec) edns.bits = EDNS_DO; edns.padding_block_size = 0; + edns.cookie_present = 0; + edns.cookie_valid = 0; edns.opt_list_in = NULL; edns.opt_list_out = per_upstream_opt_list; edns.opt_list_inplace_cb_out = NULL; diff --git a/util/config_file.c b/util/config_file.c index 158169c42..a92342761 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -55,6 +55,7 @@ #include "util/regional.h" #include "util/fptr_wlist.h" #include "util/data/dname.h" +#include "util/random.h" #include "util/rtt.h" #include "services/cache/infra.h" #include "sldns/wire2str.h" @@ -87,6 +88,9 @@ struct config_parser_state* cfg_parser = 0; /** init ports possible for use */ static void init_outgoing_availports(int* array, int num); +/** init cookie with random data */ +static void init_cookie_secret(uint8_t* cookie_secret,size_t cookie_secret_len); + struct config_file* config_create(void) { @@ -364,6 +368,10 @@ config_create(void) cfg->ipsecmod_whitelist = NULL; cfg->ipsecmod_strict = 0; #endif + cfg->do_answer_cookie = 0; + memset(cfg->cookie_secret, 0, sizeof(cfg->cookie_secret)); + cfg->cookie_secret_len = 16; + init_cookie_secret(cfg->cookie_secret, cfg->cookie_secret_len); #ifdef USE_CACHEDB if(!(cfg->cachedb_backend = strdup("testframe"))) goto error_exit; if(!(cfg->cachedb_secret = strdup("default"))) goto error_exit; @@ -1660,6 +1668,21 @@ config_delete(struct config_file* cfg) free(cfg); } +static void +init_cookie_secret(uint8_t* cookie_secret, size_t cookie_secret_len) +{ + struct ub_randstate *rand = ub_initstate(NULL); + + if (!rand) + fatal_exit("could not init random generator"); + while (cookie_secret_len) { + *cookie_secret++ = (uint8_t)ub_random(rand); + cookie_secret_len--; + } + ub_randfree(rand); +} + + static void init_outgoing_availports(int* a, int num) { diff --git a/util/config_file.h b/util/config_file.h index bbc6d4ac1..3db4676b9 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -688,6 +688,13 @@ struct config_file { int redis_expire_records; #endif #endif + /** Downstream DNS Cookies */ + /** do answer with server cookie when request contained cookie option */ + int do_answer_cookie; + /** cookie secret */ + uint8_t cookie_secret[40]; + /** cookie secret length */ + size_t cookie_secret_len; /* ipset module */ #ifdef USE_IPSET diff --git a/util/configlexer.lex b/util/configlexer.lex index fc9aa7266..4fdb2cde0 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -558,6 +558,8 @@ name-v4{COLON} { YDVAR(1, VAR_IPSET_NAME_V4) } name-v6{COLON} { YDVAR(1, VAR_IPSET_NAME_V6) } udp-upstream-without-downstream{COLON} { YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } tcp-connection-limit{COLON} { YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +answer-cookie{COLON} { YDVAR(1, VAR_ANSWER_COOKIE ) } +cookie-secret{COLON} { YDVAR(1, VAR_COOKIE_SECRET) } edns-client-string{COLON} { YDVAR(2, VAR_EDNS_CLIENT_STRING) } edns-client-string-opcode{COLON} { YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } nsid{COLON} { YDVAR(1, VAR_NSID ) } diff --git a/util/configparser.y b/util/configparser.y index 8f3672f5d..980201460 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -42,11 +42,13 @@ #include #include #include +#include #include #include "util/configyyrename.h" #include "util/config_file.h" #include "util/net_help.h" +#include "sldns/str2wire.h" int ub_c_lex(void); void ub_c_error(const char *message); @@ -181,6 +183,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_FALLBACK_ENABLED VAR_TLS_ADDITIONAL_PORT VAR_LOW_RTT VAR_LOW_RTT_PERMIL %token VAR_FAST_SERVER_PERMIL VAR_FAST_SERVER_NUM %token VAR_ALLOW_NOTIFY VAR_TLS_WIN_CERT VAR_TCP_CONNECTION_LIMIT +%token VAR_ANSWER_COOKIE VAR_COOKIE_SECRET %token VAR_FORWARD_NO_CACHE VAR_STUB_NO_CACHE VAR_LOG_SERVFAIL VAR_DENY_ANY %token VAR_UNKNOWN_SERVER_TIME_LIMIT VAR_LOG_TAG_QUERYREPLY %token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES VAR_TLS_USE_SNI @@ -316,6 +319,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_unknown_server_time_limit | server_log_tag_queryreply | server_stream_wait_size | server_tls_ciphers | server_tls_ciphersuites | server_tls_session_ticket_keys | + server_answer_cookie | server_cookie_secret | server_tls_use_sni | server_edns_client_string | server_edns_client_string_opcode | server_nsid | server_zonemd_permissive_mode | server_max_reuse_tcp_queries | @@ -3695,6 +3699,30 @@ server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG } } ; +server_answer_cookie: VAR_ANSWER_COOKIE STRING_ARG + { + OUTYY(("P(server_answer_cookie:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->do_answer_cookie = (strcmp($2, "yes")==0); + free($2); + } + ; +server_cookie_secret: VAR_COOKIE_SECRET STRING_ARG + { + uint8_t secret[32]; + size_t secret_len = sizeof(secret); + + OUTYY(("P(server_cookie_secret:%s)\n", $2)); + if (sldns_str2wire_hex_buf($2, secret, &secret_len) + || ( secret_len != 16)) + yyerror("expected 128 bit hex string"); + else { + cfg_parser->cfg->cookie_secret_len = secret_len; + memcpy(cfg_parser->cfg->cookie_secret, secret, sizeof(secret)); + } + free($2); + } ipsetstart: VAR_IPSET { OUTYY(("\nP(ipset:)\n")); @@ -3764,10 +3792,11 @@ validate_acl_action(const char* action) strcmp(action, "refuse_non_local")!=0 && strcmp(action, "allow_setrd")!=0 && strcmp(action, "allow")!=0 && - strcmp(action, "allow_snoop")!=0) + strcmp(action, "allow_snoop")!=0 && + strcmp(action, "allow_cookie")!=0) { yyerror("expected deny, refuse, deny_non_local, " - "refuse_non_local, allow, allow_setrd or " - "allow_snoop as access control action"); + "refuse_non_local, allow, allow_setrd, " + "allow_snoop or allow_cookie as access control action"); } } diff --git a/util/data/msgparse.c b/util/data/msgparse.c index 5bb69d6ed..3059d555c 100644 --- a/util/data/msgparse.c +++ b/util/data/msgparse.c @@ -951,11 +951,67 @@ edns_opt_list_append_keepalive(struct edns_option** list, int msec, data, region); } +int siphash(const uint8_t *in, const size_t inlen, + const uint8_t *k, uint8_t *out, const size_t outlen); + +/** RFC 1982 comparison, uses unsigned integers, and tries to avoid + * compiler optimization (eg. by avoiding a-b<0 comparisons), + * this routine matches compare_serial(), for SOA serial number checks */ +static int +compare_1982(uint32_t a, uint32_t b) +{ + /* for 32 bit values */ + const uint32_t cutoff = ((uint32_t) 1 << (32 - 1)); + + if (a == b) { + return 0; + } else if ((a < b && b - a < cutoff) || (a > b && a - b > cutoff)) { + return -1; + } else { + return 1; + } +} + +/** if we know that b is larger than a, return the difference between them, + * that is the distance between them. in RFC1982 arith */ +static uint32_t +subtract_1982(uint32_t a, uint32_t b) +{ + /* for 32 bit values */ + const uint32_t cutoff = ((uint32_t) 1 << (32 - 1)); + + if(a == b) + return 0; + if(a < b && b - a < cutoff) { + return b-a; + } + if(a > b && a - b > cutoff) { + return ((uint32_t)0xffffffff) - (a-b-1); + } + /* wrong case, b smaller than a */ + return 0; +} + + +static uint8_t * +cookie_hash(uint8_t *hash, uint8_t *buf, + struct sockaddr_storage *addr, uint8_t *secret) +{ + if (addr->ss_family == AF_INET6) { + memcpy(buf+16, &((struct sockaddr_in6 *)addr)->sin6_addr, 16); + siphash(buf, 32, secret, hash, 8); + } else { + memcpy(buf+16, &((struct sockaddr_in *)addr)->sin_addr, 4); + siphash(buf, 20, secret, hash, 8); + } + return hash; +} + /** parse EDNS options from EDNS wireformat rdata */ static int parse_edns_options_from_query(uint8_t* rdata_ptr, size_t rdata_len, struct edns_data* edns, struct config_file* cfg, struct comm_point* c, - struct regional* region) + struct comm_reply* repinfo, uint32_t now, struct regional* region) { /* To respond with a Keepalive option, the client connection must have * received one message with a TCP Keepalive EDNS option, and that @@ -979,6 +1035,10 @@ parse_edns_options_from_query(uint8_t* rdata_ptr, size_t rdata_len, while(rdata_len >= 4) { uint16_t opt_code = sldns_read_uint16(rdata_ptr); uint16_t opt_len = sldns_read_uint16(rdata_ptr+2); + uint8_t server_cookie[40], hash[8]; + uint32_t cookie_time, subt_1982; + int comp_1982; + rdata_ptr += 4; rdata_len -= 4; if(opt_len > rdata_len) @@ -1041,6 +1101,86 @@ parse_edns_options_from_query(uint8_t* rdata_ptr, size_t rdata_len, edns->padding_block_size = cfg->pad_responses_block_size; break; + case LDNS_EDNS_COOKIE: + if(!cfg || !cfg->do_answer_cookie) + break; + if(opt_len != 8 && (opt_len < 16 || opt_len > 40)) { + verbose(VERB_ALGO, "worker request: " + "badly formatted cookie"); + return LDNS_RCODE_FORMERR; + } + edns->cookie_present = 1; + + /* Copy client cookie, version and timestamp for + * validation and creation purposes. + */ + memcpy(server_cookie, rdata_ptr, 16); + + /* In the "if, if else" block below, we validate a + * RFC9018 cookie. If it doesn't match the recipe, or + * if it doesn't validate, or if the cookie is too old + * (< 30 min), a new cookie is generated. + */ + if (opt_len != 24) + ; /* RFC9018 cookies are 24 bytes long */ + + else if (cfg->cookie_secret_len != 16) + ; /* RFC9018 cookies have 16 byte secrets */ + + else if (rdata_ptr[8] != 1) + ; /* RFC9018 cookies are cookie version 1 */ + + else if ((comp_1982 = compare_1982(now, + (cookie_time = sldns_read_uint32(rdata_ptr + 12)))) > 0 + && (subt_1982 = subtract_1982(cookie_time, now)) > 3600) + ; /* Cookie is older than 1 hour + * (see RFC9018 Section 4.3.) + */ + + else if (comp_1982 <= 0 + && subtract_1982(now, cookie_time) > 300) + ; /* Cookie time is more than 5 minutes in the + * future. (see RFC9018 Section 4.3.) + */ + + else if (memcmp( cookie_hash( hash, server_cookie + , &repinfo->addr + , cfg->cookie_secret) + , rdata_ptr + 16 , 8 ) == 0) { + + /* Cookie is valid! */ + edns->cookie_valid = 1; + if (comp_1982 > 0 && subt_1982 > 1800) + ; /* But older than 30 minutes, + * so create a new one anyway */ + + else if (!edns_opt_list_append( /* Reuse cookie */ + &edns->opt_list_out, LDNS_EDNS_COOKIE, opt_len, + rdata_ptr, region)) { + log_err("out of memory"); + return LDNS_RCODE_SERVFAIL; + } else + /* Cookie to be reused added to + * outgoing options. Done! + */ + break; + } + /* Add a new server cookie to outgoing cookies */ + server_cookie[ 8] = 1; /* Version */ + server_cookie[ 9] = 0; /* Reserved */ + server_cookie[10] = 0; /* Reserved */ + server_cookie[11] = 0; /* Reserved */ + sldns_write_uint32(server_cookie + 12, now); + cookie_hash( hash, server_cookie + , &repinfo->addr, cfg->cookie_secret); + memcpy(server_cookie + 16, hash, 8); + if (!edns_opt_list_append( &edns->opt_list_out + , LDNS_EDNS_COOKIE + , 24, server_cookie, region)) { + log_err("out of memory"); + return LDNS_RCODE_SERVFAIL; + } + break; default: break; } @@ -1115,6 +1255,8 @@ parse_extract_edns_from_response_msg(struct msg_parse* msg, edns->opt_list_out = NULL; edns->opt_list_inplace_cb_out = NULL; edns->padding_block_size = 0; + edns->cookie_present = 0; + edns->cookie_valid = 0; /* take the options */ rdata_len = found->rr_first->size-2; @@ -1170,7 +1312,8 @@ skip_pkt_rrs(sldns_buffer* pkt, int num) int parse_edns_from_query_pkt(sldns_buffer* pkt, struct edns_data* edns, - struct config_file* cfg, struct comm_point* c, struct regional* region) + struct config_file* cfg, struct comm_point* c, + struct comm_reply* repinfo, time_t now, struct regional* region) { size_t rdata_len; uint8_t* rdata_ptr; @@ -1206,6 +1349,8 @@ parse_edns_from_query_pkt(sldns_buffer* pkt, struct edns_data* edns, edns->opt_list_out = NULL; edns->opt_list_inplace_cb_out = NULL; edns->padding_block_size = 0; + edns->cookie_present = 0; + edns->cookie_valid = 0; /* take the options */ rdata_len = sldns_buffer_read_u16(pkt); @@ -1214,7 +1359,7 @@ parse_edns_from_query_pkt(sldns_buffer* pkt, struct edns_data* edns, rdata_ptr = sldns_buffer_current(pkt); /* ignore rrsigs */ return parse_edns_options_from_query(rdata_ptr, rdata_len, edns, cfg, - c, region); + c, repinfo, now, region); } void diff --git a/util/data/msgparse.h b/util/data/msgparse.h index 0c458e6e8..aebeb2a88 100644 --- a/util/data/msgparse.h +++ b/util/data/msgparse.h @@ -72,6 +72,7 @@ struct regional; struct edns_option; struct config_file; struct comm_point; +struct comm_reply; /** number of buckets in parse rrset hash table. Must be power of 2. */ #define PARSE_TABLE_SIZE 32 @@ -217,8 +218,6 @@ struct rr_parse { * region. */ struct edns_data { - /** if EDNS OPT record was present */ - int edns_present; /** Extended RCODE */ uint8_t ext_rcode; /** The EDNS version number */ @@ -238,7 +237,13 @@ struct edns_data { struct edns_option* opt_list_inplace_cb_out; /** block size to pad */ uint16_t padding_block_size; -}; + /** if EDNS OPT record was present */ + unsigned int edns_present : 1; + /** if a cookie was present */ + unsigned int cookie_present : 1; + /** if the cookie validated */ + unsigned int cookie_valid : 1; +}; /** * EDNS option @@ -315,7 +320,8 @@ int skip_pkt_rrs(struct sldns_buffer* pkt, int num); * RCODE formerr if OPT is badly formatted and so on. */ int parse_edns_from_query_pkt(struct sldns_buffer* pkt, struct edns_data* edns, - struct config_file* cfg, struct comm_point* c, struct regional* region); + struct config_file* cfg, struct comm_point* c, + struct comm_reply* repinfo, time_t now, struct regional* region); /** * Calculate hash value for rrset in packet. diff --git a/util/siphash.c b/util/siphash.c new file mode 100644 index 000000000..d69f4b579 --- /dev/null +++ b/util/siphash.c @@ -0,0 +1,165 @@ +/* + SipHash reference C implementation + + Copyright (c) 2012-2016 Jean-Philippe Aumasson + + Copyright (c) 2012-2014 Daniel J. Bernstein + + To the extent possible under law, the author(s) have dedicated all copyright + and related and neighboring rights to this software to the public domain + worldwide. This software is distributed without any warranty. + + You should have received a copy of the CC0 Public Domain Dedication along + with + this software. If not, see + . + */ +#include +#include +#include +#include + +/* default: SipHash-2-4 */ +#define cROUNDS 2 +#define dROUNDS 4 + +#define ROTL(x, b) (uint64_t)(((x) << (b)) | ((x) >> (64 - (b)))) + +#define U32TO8_LE(p, v) \ + (p)[0] = (uint8_t)((v)); \ + (p)[1] = (uint8_t)((v) >> 8); \ + (p)[2] = (uint8_t)((v) >> 16); \ + (p)[3] = (uint8_t)((v) >> 24); + +#define U64TO8_LE(p, v) \ + U32TO8_LE((p), (uint32_t)((v))); \ + U32TO8_LE((p) + 4, (uint32_t)((v) >> 32)); + +#define U8TO64_LE(p) \ + (((uint64_t)((p)[0])) | ((uint64_t)((p)[1]) << 8) | \ + ((uint64_t)((p)[2]) << 16) | ((uint64_t)((p)[3]) << 24) | \ + ((uint64_t)((p)[4]) << 32) | ((uint64_t)((p)[5]) << 40) | \ + ((uint64_t)((p)[6]) << 48) | ((uint64_t)((p)[7]) << 56)) + +#define SIPROUND \ + do { \ + v0 += v1; \ + v1 = ROTL(v1, 13); \ + v1 ^= v0; \ + v0 = ROTL(v0, 32); \ + v2 += v3; \ + v3 = ROTL(v3, 16); \ + v3 ^= v2; \ + v0 += v3; \ + v3 = ROTL(v3, 21); \ + v3 ^= v0; \ + v2 += v1; \ + v1 = ROTL(v1, 17); \ + v1 ^= v2; \ + v2 = ROTL(v2, 32); \ + } while (0) + +#ifdef DEBUG +#define TRACE \ + do { \ + printf("(%3d) v0 %08x %08x\n", (int)inlen, (uint32_t)(v0 >> 32), \ + (uint32_t)v0); \ + printf("(%3d) v1 %08x %08x\n", (int)inlen, (uint32_t)(v1 >> 32), \ + (uint32_t)v1); \ + printf("(%3d) v2 %08x %08x\n", (int)inlen, (uint32_t)(v2 >> 32), \ + (uint32_t)v2); \ + printf("(%3d) v3 %08x %08x\n", (int)inlen, (uint32_t)(v3 >> 32), \ + (uint32_t)v3); \ + } while (0) +#else +#define TRACE +#endif + +int siphash(const uint8_t *in, const size_t inlen, const uint8_t *k, + uint8_t *out, const size_t outlen) { + + assert((outlen == 8) || (outlen == 16)); + uint64_t v0 = 0x736f6d6570736575ULL; + uint64_t v1 = 0x646f72616e646f6dULL; + uint64_t v2 = 0x6c7967656e657261ULL; + uint64_t v3 = 0x7465646279746573ULL; + uint64_t k0 = U8TO64_LE(k); + uint64_t k1 = U8TO64_LE(k + 8); + uint64_t m; + int i; + const uint8_t *end = in + inlen - (inlen % sizeof(uint64_t)); + const int left = inlen & 7; + uint64_t b = ((uint64_t)inlen) << 56; + v3 ^= k1; + v2 ^= k0; + v1 ^= k1; + v0 ^= k0; + + if (outlen == 16) + v1 ^= 0xee; + + for (; in != end; in += 8) { + m = U8TO64_LE(in); + v3 ^= m; + + TRACE; + for (i = 0; i < cROUNDS; ++i) + SIPROUND; + + v0 ^= m; + } + + switch (left) { + case 7: + b |= ((uint64_t)in[6]) << 48; + case 6: + b |= ((uint64_t)in[5]) << 40; + case 5: + b |= ((uint64_t)in[4]) << 32; + case 4: + b |= ((uint64_t)in[3]) << 24; + case 3: + b |= ((uint64_t)in[2]) << 16; + case 2: + b |= ((uint64_t)in[1]) << 8; + case 1: + b |= ((uint64_t)in[0]); + break; + case 0: + break; + } + + v3 ^= b; + + TRACE; + for (i = 0; i < cROUNDS; ++i) + SIPROUND; + + v0 ^= b; + + if (outlen == 16) + v2 ^= 0xee; + else + v2 ^= 0xff; + + TRACE; + for (i = 0; i < dROUNDS; ++i) + SIPROUND; + + b = v0 ^ v1 ^ v2 ^ v3; + U64TO8_LE(out, b); + + if (outlen == 8) + return 0; + + v1 ^= 0xdd; + + TRACE; + for (i = 0; i < dROUNDS; ++i) + SIPROUND; + + b = v0 ^ v1 ^ v2 ^ v3; + U64TO8_LE(out + 8, b); + + return 0; +} diff --git a/validator/autotrust.c b/validator/autotrust.c index 3cdf9ceae..3011a0ace 100644 --- a/validator/autotrust.c +++ b/validator/autotrust.c @@ -2376,6 +2376,8 @@ probe_anchor(struct module_env* env, struct trust_anchor* tp) edns.opt_list_out = NULL; edns.opt_list_inplace_cb_out = NULL; edns.padding_block_size = 0; + edns.cookie_present = 0; + edns.cookie_valid = 0; if(sldns_buffer_capacity(buf) < 65535) edns.udp_size = (uint16_t)sldns_buffer_capacity(buf); else edns.udp_size = 65535; From bd2c20267403af9b78cbc6c51fe18df1395ff633 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Wed, 28 Sep 2022 10:34:06 +0200 Subject: [PATCH 31/60] The generated lexer and parser sources for configuring cookies --- util/configlexer.c | 5501 ++++++++++++++++++++++--------------------- util/configparser.c | 3917 +++++++++++++++--------------- util/configparser.h | 152 +- 3 files changed, 4822 insertions(+), 4748 deletions(-) diff --git a/util/configlexer.c b/util/configlexer.c index 0323464e3..2fc27d089 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -1,7 +1,7 @@ #include "config.h" #include "util/configyyrename.h" -#line 2 "" +#line 3 "" #define YY_INT_ALIGNED short int @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 368 -#define YY_END_OF_BUFFER 369 +#define YY_NUM_RULES 370 +#define YY_END_OF_BUFFER 371 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,407 +363,410 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3628] = +static const flex_int16_t yy_accept[3653] = { 0, - 1, 1, 342, 342, 346, 346, 350, 350, 354, 354, - 1, 1, 358, 358, 362, 362, 369, 366, 1, 340, - 340, 367, 2, 367, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 342, 343, 343, 344, - 367, 346, 347, 347, 348, 367, 353, 350, 351, 351, - 352, 367, 354, 355, 355, 356, 367, 365, 341, 2, - 345, 367, 365, 361, 358, 359, 359, 360, 367, 362, - 363, 363, 364, 367, 366, 0, 1, 2, 2, 2, - 2, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 1, 1, 344, 344, 348, 348, 352, 352, 356, 356, + 1, 1, 360, 360, 364, 364, 371, 368, 1, 342, + 342, 369, 2, 369, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 344, 345, 345, 346, + 369, 348, 349, 349, 350, 369, 355, 352, 353, 353, + 354, 369, 356, 357, 357, 358, 369, 367, 343, 2, + 347, 369, 367, 363, 360, 361, 361, 362, 369, 364, + 365, 365, 366, 369, 368, 0, 1, 2, 2, 2, + 2, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 342, - 0, 346, 0, 353, 0, 350, 354, 0, 365, 0, - 2, 2, 365, 361, 0, 358, 362, 0, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 344, 0, 348, 0, 355, 0, 352, 356, 0, 367, + 0, 2, 2, 367, 363, 0, 360, 364, 0, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 365, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 367, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 339, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 133, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 143, 366, 366, 366, 366, 366, 366, - 366, 365, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 341, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 133, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 143, 368, + 368, 368, 368, 368, 368, 368, 367, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 115, 366, 338, 366, 366, 366, 366, 366, - 366, 366, 366, 8, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 115, + 368, 340, 368, 368, 368, 368, 368, 368, 368, 368, + 8, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 134, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 148, 366, - 366, 365, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 134, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 148, 368, 368, 367, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 331, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 331, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 365, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 69, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 260, 366, 14, 15, 366, 19, 18, - 366, 366, 240, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 367, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 69, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 260, 368, 14, 15, 368, 19, + 18, 368, 368, 240, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 141, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 238, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 3, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 141, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 238, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 3, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 365, 366, 366, 366, 366, - 366, 366, 366, 325, 366, 366, 324, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 367, 368, 368, 368, + 368, 368, 368, 368, 368, 325, 368, 368, 324, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 349, 366, 366, - 366, 366, 366, 366, 366, 366, 68, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 72, 366, 294, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 332, 333, 366, 366, 366, - 366, 366, 366, 366, 366, 73, 366, 366, 142, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 137, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 227, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 351, 368, 368, 368, 368, 368, 368, 368, 368, 68, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 72, 368, 294, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 332, 333, + 368, 368, 368, 368, 368, 368, 368, 368, 73, 368, + 368, 142, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 137, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 227, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 21, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 169, 366, 366, 366, 366, 366, 365, 349, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 113, - 366, 366, 366, 366, 366, 366, 366, 302, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 196, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 21, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 169, 368, 368, 368, 368, 368, 367, + 351, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 113, 368, 368, 368, 368, 368, + 368, 368, 302, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 168, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 112, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 196, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 168, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 112, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 35, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 36, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 70, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 140, 366, 366, 366, - 365, 366, 366, 366, 366, 366, 132, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 71, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 264, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 35, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 36, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 70, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 140, 368, 368, 368, 367, 368, 368, 368, 368, + 368, 368, 132, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 71, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 197, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 58, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 264, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 197, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 58, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 282, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 63, 366, 64, - 366, 366, 366, 366, 366, 116, 366, 117, 366, 366, - 366, 366, 366, 114, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 7, 366, 366, - 366, 366, 365, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 282, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 63, 368, 64, 368, 368, 368, + 368, 368, 116, 368, 117, 368, 368, 368, 368, 368, + 114, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 7, 368, 368, 368, 368, 367, - 366, 249, 366, 366, 366, 366, 172, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 265, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 49, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 59, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 219, 366, 218, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 249, 368, 368, 368, 368, 172, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 265, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 49, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 59, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 16, 17, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 74, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 226, 366, 366, 366, 366, 366, 366, - 119, 366, 118, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 210, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 149, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 219, 368, 218, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 16, 17, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 74, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 226, 368, 368, 368, 368, 368, 368, 119, + 368, 118, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 365, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 107, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 95, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 239, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 100, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 67, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 210, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 149, 368, + 368, 368, 367, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 107, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 95, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 239, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 100, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 213, 214, 366, - 366, 366, 296, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 6, 366, 366, 366, - 366, 366, 366, 366, 315, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 300, 366, 366, 366, 366, 366, 366, - 366, 326, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 46, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 67, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 213, 214, + 368, 368, 368, 296, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 6, 368, 368, + 368, 368, 368, 368, 368, 315, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 300, 368, 368, 368, 368, 368, + 368, 368, 326, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 48, 366, 366, 366, 96, 366, 366, 366, - 366, 366, 56, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 365, 366, 206, 366, 366, 366, - 144, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 231, 366, 207, 366, 366, 366, 246, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 57, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 146, 125, 366, 126, 366, 366, 366, 366, 124, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 165, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 46, 368, 368, + 368, 368, 368, 48, 368, 368, 368, 96, 368, 368, + 368, 368, 368, 56, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 367, 368, 206, 368, 368, + 368, 144, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 231, 368, 368, 207, 368, 368, 368, + 246, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 57, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 54, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 281, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 208, 366, 366, 366, 366, 366, 211, 366, - 217, 366, 366, 366, 366, 366, 366, 245, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 111, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 138, 366, 366, 366, 366, - 366, 366, 366, 366, 65, 366, 366, 366, 29, 366, + 368, 368, 368, 146, 125, 368, 126, 368, 368, 368, + 368, 124, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 165, 368, 368, 54, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 281, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 208, 368, 368, 368, 368, + 368, 211, 368, 217, 368, 368, 368, 368, 368, 368, + 245, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 111, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 20, 366, 366, 366, 366, 366, 366, 366, 30, - 39, 366, 177, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 204, 366, 366, - 365, 366, 366, 366, 366, 366, 366, 82, 84, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 304, 366, 366, 366, 366, 261, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 127, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 138, 368, + 368, 368, 368, 368, 368, 368, 368, 65, 368, 368, + 368, 29, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 20, 368, 368, 368, 368, 368, + 368, 368, 30, 39, 368, 177, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 204, 368, 368, 367, 368, 368, 368, 368, 336, 368, + 368, 82, 84, 368, 368, 368, 368, 368, 368, 368, + 337, 368, 368, 368, 368, 368, 368, 304, 368, 368, + 368, 368, 261, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 164, 366, 50, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 255, 366, 366, 366, - 366, 366, 366, 366, 319, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 171, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 313, 366, - 366, 366, 237, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 329, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 189, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 127, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 164, 368, + 50, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 255, 368, 368, 368, 368, 368, 368, 368, 319, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 171, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 313, 368, 368, 368, 237, 368, 368, - 366, 366, 366, 366, 366, 366, 120, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 184, 366, 198, 366, 366, 366, 366, 366, 366, 366, - 365, 366, 152, 366, 366, 366, 366, 366, 106, 366, - 366, 366, 366, 229, 366, 366, 366, 366, 366, 366, - 247, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 273, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 145, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 329, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 189, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 120, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 184, 368, 198, 368, 368, + 368, 368, 368, 368, 368, 367, 368, 152, 368, 368, + 368, 368, 368, 106, 368, 368, 368, 368, 229, 368, + 368, 368, 368, 368, 368, 247, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 188, 366, 366, - 366, 366, 366, 366, 366, 85, 366, 86, 366, 366, - 366, 366, 366, 258, 366, 366, 366, 366, 66, 322, - 366, 366, 366, 366, 366, 94, 199, 366, 220, 366, - 250, 366, 366, 212, 297, 366, 366, 366, 366, 366, - 366, 78, 366, 201, 366, 366, 366, 366, 366, 366, - 9, 366, 366, 366, 366, 366, 110, 366, 366, 366, - 366, 366, 286, 366, 366, 366, 366, 228, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 368, 368, 273, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 145, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 188, 368, 368, 368, 368, 368, 368, 368, + 85, 368, 86, 368, 368, 368, 368, 368, 258, 368, + 368, 368, 368, 66, 322, 368, 368, 368, 368, 368, + 94, 199, 368, 220, 368, 250, 368, 368, 212, 297, + 368, 368, 368, 368, 368, 368, 78, 368, 201, 368, + 368, 368, 368, 368, 368, 9, 368, 368, 368, 368, + 368, 110, 368, 368, 368, 368, 368, 286, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 365, 366, 366, 366, 366, 187, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 173, 366, - 303, 366, 366, 366, 366, 366, 272, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 241, 366, - 366, 366, 366, 366, 366, 295, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 170, 366, 366, 366, 366, 366, 366, + 368, 368, 228, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 367, 368, 368, + 368, 368, 187, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 173, 368, 303, 368, 368, 368, 368, + 368, 272, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 241, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 323, 366, 200, 366, 366, 366, - 366, 366, 366, 366, 366, 77, 79, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 109, 366, 366, - 366, 366, 366, 284, 366, 366, 366, 366, 299, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 233, 37, 31, 33, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 38, 366, - 32, 34, 366, 40, 366, 366, 366, 366, 366, 366, - 366, 105, 366, 183, 366, 366, 366, 366, 366, 366, + 295, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 170, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 323, + 368, 200, 368, 368, 368, 368, 368, 368, 368, 368, + 77, 79, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 109, 368, 368, 368, 368, 368, 284, 368, + 368, 368, 368, 299, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 233, 37, 31, + 33, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 365, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 235, 232, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 76, 366, 366, 366, 147, 366, - 128, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 166, 51, 366, 366, 366, 357, 13, 366, 366, - 366, 366, 366, 366, 366, 153, 366, 366, 366, 366, - 366, 366, 366, 317, 366, 320, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 12, 366, - 366, 22, 366, 366, 366, 366, 366, 366, 290, 366, + 368, 368, 368, 38, 368, 32, 34, 368, 40, 368, + 368, 368, 368, 368, 368, 368, 105, 368, 183, 368, + 368, 368, 368, 368, 368, 368, 367, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 235, 232, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 76, + 368, 368, 368, 147, 368, 128, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 166, 51, 368, 368, + 368, 359, 13, 368, 368, 368, 368, 368, 368, 368, + 153, 368, 368, 368, 368, 368, 368, 368, 317, 368, - 366, 366, 366, 301, 366, 366, 366, 366, 80, 366, - 243, 366, 366, 366, 366, 366, 234, 366, 366, 75, - 366, 366, 366, 366, 366, 366, 23, 366, 366, 47, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 182, 181, 366, 366, 357, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 236, 230, 366, 248, - 366, 366, 305, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 194, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 87, + 320, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 12, 368, 368, 22, 368, 368, 368, + 368, 368, 368, 290, 368, 368, 368, 368, 301, 368, + 368, 368, 368, 80, 368, 243, 368, 368, 368, 368, + 368, 234, 368, 368, 75, 368, 368, 368, 368, 368, + 368, 23, 368, 368, 47, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 182, 181, 368, + 368, 359, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 236, 230, 368, 248, 368, 368, 305, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 366, 366, 366, 285, 366, 366, - 366, 366, 216, 366, 366, 366, 366, 366, 242, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 292, 366, - 366, 366, 327, 328, 179, 366, 366, 366, 81, 366, - 366, 366, 366, 190, 366, 366, 366, 121, 123, 122, - 366, 366, 366, 25, 366, 366, 174, 366, 176, 366, - 221, 366, 366, 366, 366, 180, 366, 366, 366, 366, - 251, 366, 366, 366, 366, 366, 366, 366, 155, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 263, 366, 366, 366, 366, 366, 366, 366, 336, + 368, 368, 194, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 87, 368, 368, 368, 368, 368, + 368, 368, 285, 368, 368, 368, 368, 216, 368, 368, + 368, 368, 368, 242, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 292, 368, 368, 368, 327, 328, 179, + 368, 368, 368, 81, 368, 368, 368, 368, 190, 368, + 368, 368, 121, 123, 122, 368, 368, 368, 25, 368, + 368, 174, 368, 176, 368, 221, 368, 368, 368, 368, + 180, 368, 368, 368, 368, 251, 368, 368, 368, 368, - 366, 27, 366, 298, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 92, 222, 366, 366, 257, 366, 366, 283, 366, - 321, 366, 215, 366, 366, 366, 366, 366, 293, 60, - 366, 366, 366, 366, 366, 366, 4, 366, 366, 366, - 366, 136, 366, 154, 366, 366, 366, 195, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 254, 41, 42, 366, - 366, 366, 366, 366, 366, 366, 306, 366, 366, 366, - 366, 366, 366, 366, 271, 366, 366, 366, 366, 366, + 368, 368, 368, 155, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 263, 368, 368, 368, + 368, 368, 368, 368, 338, 368, 27, 368, 298, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 92, 222, 368, 368, + 257, 368, 368, 283, 368, 321, 368, 215, 368, 368, + 368, 368, 368, 293, 60, 368, 368, 368, 368, 368, + 368, 4, 368, 368, 368, 368, 136, 368, 154, 368, + 368, 368, 195, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 225, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 91, 90, - 366, 366, 61, 366, 366, 289, 366, 259, 366, 366, - 366, 366, 366, 11, 366, 366, 366, 366, 366, 366, - 366, 366, 135, 366, 366, 366, 366, 366, 223, 97, - 366, 366, 44, 366, 366, 366, 366, 366, 366, 366, - 366, 186, 366, 366, 366, 366, 366, 366, 366, 157, - 366, 366, 366, 366, 262, 366, 366, 366, 366, 366, - 270, 366, 366, 366, 366, 150, 366, 366, 366, 129, - 131, 130, 366, 366, 366, 99, 103, 98, 167, 366, + 368, 254, 41, 42, 368, 368, 368, 368, 368, 368, + 368, 306, 368, 368, 368, 368, 368, 368, 368, 271, + 368, 368, 368, 368, 368, 368, 368, 368, 225, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 91, 90, 368, 368, 61, 368, 368, + 289, 368, 259, 368, 368, 368, 368, 368, 11, 368, + 368, 368, 368, 368, 368, 368, 368, 135, 368, 368, + 368, 368, 368, 223, 97, 368, 368, 44, 368, 368, + 368, 368, 368, 368, 368, 368, 186, 368, 368, 368, + 368, 368, 368, 368, 157, 368, 368, 368, 368, 262, - 366, 366, 366, 88, 366, 256, 291, 366, 366, 366, - 366, 366, 366, 10, 366, 366, 366, 366, 366, 287, - 330, 366, 366, 366, 366, 366, 366, 335, 43, 366, - 366, 366, 366, 366, 185, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 104, 102, 366, 55, 366, 366, 89, 366, 318, 366, - 366, 366, 366, 24, 366, 366, 366, 366, 366, 209, - 366, 366, 366, 366, 366, 366, 224, 366, 366, 366, - 366, 366, 366, 366, 366, 205, 366, 366, 175, 83, + 368, 368, 368, 368, 368, 270, 368, 368, 368, 368, + 150, 368, 368, 368, 129, 131, 130, 368, 368, 368, + 99, 103, 98, 167, 368, 368, 368, 368, 88, 368, + 256, 291, 368, 368, 368, 368, 368, 368, 10, 368, + 368, 368, 368, 368, 287, 330, 368, 368, 368, 368, + 368, 368, 335, 43, 368, 368, 368, 368, 368, 185, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 104, 102, 368, 55, 368, + 368, 89, 368, 318, 368, 368, 368, 368, 24, 368, - 366, 366, 366, 366, 366, 307, 366, 366, 366, 366, - 366, 366, 366, 267, 366, 366, 266, 151, 366, 366, - 101, 52, 366, 366, 158, 159, 162, 163, 160, 161, - 93, 316, 366, 366, 288, 139, 366, 366, 366, 26, - 366, 178, 366, 366, 366, 366, 203, 366, 253, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 192, 191, 45, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 314, 366, 366, 366, + 368, 368, 368, 368, 209, 368, 368, 368, 368, 368, + 368, 224, 368, 368, 368, 368, 368, 368, 368, 368, + 205, 368, 368, 175, 83, 368, 368, 368, 368, 368, + 307, 368, 368, 368, 368, 368, 368, 368, 267, 368, + 368, 266, 151, 368, 368, 101, 52, 368, 368, 158, + 159, 162, 163, 160, 161, 93, 316, 368, 368, 288, + 139, 368, 368, 368, 26, 368, 178, 368, 368, 368, + 368, 203, 368, 253, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 192, 191, 45, 368, 368, - 366, 108, 366, 252, 366, 280, 311, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 337, 366, - 53, 62, 5, 366, 366, 244, 366, 366, 312, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 268, 28, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 269, 366, 366, 366, 156, 366, 366, 366, - 366, 366, 366, 366, 366, 193, 366, 202, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 308, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 334, 366, 366, 276, 366, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 314, 368, 368, 368, 368, 108, 368, 252, 368, + 280, 311, 368, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 339, 368, 53, 62, 5, 368, 368, + 244, 368, 368, 312, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 268, 28, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 269, 368, 368, + 368, 156, 368, 368, 368, 368, 368, 368, 368, 368, + 193, 368, 202, 368, 368, 368, 368, 368, 368, 368, - 366, 366, 366, 366, 309, 366, 366, 366, 366, 366, - 366, 310, 366, 366, 366, 274, 366, 277, 278, 366, - 366, 366, 366, 366, 275, 279, 0 + 368, 368, 308, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, + 334, 368, 368, 276, 368, 368, 368, 368, 368, 309, + 368, 368, 368, 368, 368, 368, 310, 368, 368, 368, + 274, 368, 277, 278, 368, 368, 368, 368, 368, 275, + 279, 0 } ; static const YY_CHAR yy_ec[256] = @@ -806,817 +809,821 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3646] = +static const flex_int16_t yy_base[3671] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 96, 118, 124, 136, 4833, 4680, 81, 7073, - 7073, 7073, 129, 52, 130, 63, 131, 152, 70, 140, - 149, 156, 57, 88, 76, 173, 175, 95, 197, 145, - 185, 199, 208, 213, 178, 123, 4078, 7073, 7073, 7073, - 107, 3686, 7073, 7073, 7073, 154, 3641, 2669, 7073, 7073, - 7073, 245, 2592, 7073, 7073, 7073, 163, 2519, 7073, 249, - 7073, 253, 148, 2320, 2287, 7073, 7073, 7073, 257, 2134, - 7073, 7073, 7073, 233, 1825, 263, 201, 0, 267, 0, - 0, 165, 191, 221, 252, 205, 181, 265, 92, 261, + 90, 112, 96, 118, 124, 136, 4330, 4228, 81, 7121, + 7121, 7121, 129, 52, 137, 63, 130, 159, 70, 132, + 134, 146, 57, 88, 76, 166, 177, 95, 199, 155, + 187, 201, 210, 172, 156, 148, 3871, 7121, 7121, 7121, + 107, 3650, 7121, 7121, 7121, 190, 3188, 3039, 7121, 7121, + 7121, 239, 2873, 7121, 7121, 7121, 203, 2554, 7121, 243, + 7121, 247, 212, 2406, 2140, 7121, 7121, 7121, 251, 1861, + 7121, 7121, 7121, 228, 1795, 257, 261, 0, 264, 0, + 0, 258, 262, 260, 195, 170, 251, 265, 269, 92, - 216, 263, 271, 272, 210, 279, 274, 282, 278, 291, - 283, 286, 276, 285, 295, 293, 306, 314, 297, 313, - 317, 311, 315, 319, 321, 331, 327, 332, 336, 322, - 339, 337, 346, 345, 347, 348, 353, 351, 357, 284, - 358, 359, 369, 360, 380, 365, 381, 379, 375, 366, - 367, 389, 390, 394, 393, 395, 396, 403, 404, 1718, - 419, 1459, 422, 1387, 429, 1205, 1013, 433, 984, 437, - 441, 0, 433, 780, 447, 527, 467, 452, 411, 445, - 426, 446, 447, 448, 449, 450, 451, 453, 452, 456, - 470, 234, 463, 473, 481, 479, 476, 483, 486, 493, + 270, 259, 275, 276, 277, 278, 288, 284, 286, 283, + 293, 179, 290, 292, 302, 306, 307, 310, 315, 314, + 318, 317, 325, 327, 328, 319, 139, 331, 336, 335, + 337, 342, 347, 350, 351, 353, 339, 355, 352, 360, + 361, 363, 366, 368, 367, 381, 378, 383, 370, 387, + 374, 225, 391, 394, 397, 395, 398, 402, 406, 399, + 1443, 424, 1413, 426, 1334, 433, 1311, 1193, 437, 1049, + 441, 445, 0, 422, 799, 449, 766, 418, 453, 441, + 453, 412, 448, 449, 450, 455, 215, 451, 452, 454, + 456, 457, 460, 477, 461, 474, 480, 488, 487, 489, - 488, 489, 495, 491, 501, 508, 505, 506, 504, 510, - 512, 513, 460, 514, 517, 529, 518, 516, 526, 538, - 539, 550, 543, 534, 551, 552, 400, 559, 555, 563, - 558, 570, 565, 574, 566, 569, 571, 576, 573, 577, - 580, 578, 581, 584, 587, 588, 598, 589, 596, 600, - 601, 611, 602, 612, 607, 610, 362, 609, 541, 619, - 622, 617, 624, 625, 626, 629, 632, 639, 641, 642, - 643, 645, 634, 648, 647, 638, 649, 651, 659, 662, - 660, 663, 670, 669, 671, 672, 673, 675, 652, 682, - 678, 686, 679, 692, 691, 693, 695, 697, 699, 698, + 483, 492, 497, 475, 495, 501, 499, 502, 514, 512, + 513, 392, 505, 515, 517, 520, 521, 523, 535, 540, + 524, 527, 531, 533, 548, 552, 547, 556, 557, 549, + 564, 560, 568, 559, 575, 571, 580, 572, 576, 561, + 577, 579, 586, 584, 588, 464, 587, 589, 590, 604, + 591, 595, 607, 599, 606, 608, 615, 612, 614, 616, + 617, 622, 630, 631, 620, 634, 623, 633, 637, 641, + 648, 649, 644, 645, 650, 652, 651, 653, 654, 657, + 656, 660, 673, 675, 671, 672, 684, 680, 682, 681, + 683, 686, 685, 687, 694, 698, 689, 658, 705, 690, - 700, 702, 703, 705, 7073, 716, 706, 721, 717, 728, - 723, 707, 725, 732, 735, 718, 731, 734, 733, 736, - 739, 740, 741, 743, 747, 750, 748, 753, 752, 763, - 767, 759, 774, 760, 761, 772, 782, 775, 768, 776, - 795, 790, 796, 802, 804, 805, 807, 808, 806, 809, - 811, 812, 813, 827, 816, 829, 823, 819, 830, 832, - 839, 840, 7073, 836, 837, 851, 844, 853, 857, 854, - 863, 846, 869, 867, 872, 873, 885, 907, 875, 880, - 874, 876, 890, 7073, 893, 897, 931, 877, 900, 919, - 914, 881, 905, 917, 916, 921, 935, 915, 922, 937, + 703, 706, 697, 709, 711, 715, 716, 717, 710, 7121, + 727, 718, 728, 731, 736, 734, 739, 737, 741, 749, + 744, 745, 746, 747, 750, 720, 748, 752, 753, 757, + 758, 761, 762, 769, 776, 771, 773, 786, 778, 783, + 784, 791, 777, 797, 788, 790, 808, 811, 816, 813, + 817, 819, 818, 820, 822, 824, 821, 827, 837, 825, + 839, 841, 842, 843, 845, 852, 847, 7121, 849, 851, + 864, 857, 865, 868, 867, 872, 874, 854, 884, 880, + 877, 894, 916, 885, 887, 886, 889, 892, 7121, 899, + 896, 940, 898, 900, 926, 921, 923, 911, 914, 922, - 954, 952, 936, 939, 938, 955, 949, 967, 962, 965, - 887, 966, 974, 969, 970, 971, 981, 972, 973, 977, - 982, 988, 995, 999, 983, 1003, 997, 991, 1005, 1008, - 1009, 1004, 1006, 1029, 1017, 1012, 1025, 1031, 1023, 1039, - 1016, 1038, 1036, 1045, 1049, 1041, 1051, 1053, 1056, 1057, - 1058, 1059, 1069, 1064, 1065, 1067, 1070, 1072, 1073, 1078, - 1076, 1079, 1081, 1083, 1084, 1087, 1092, 1094, 1098, 1085, - 1099, 1101, 7073, 1107, 7073, 1105, 1102, 1109, 1111, 1112, - 1113, 1114, 1115, 7073, 1117, 1121, 1116, 1124, 1125, 1122, - 1146, 1142, 1129, 1141, 1145, 1144, 1150, 1151, 1159, 1154, + 928, 951, 946, 924, 938, 948, 963, 960, 941, 949, + 966, 968, 970, 971, 978, 976, 974, 979, 982, 990, + 980, 985, 987, 1000, 988, 993, 995, 989, 1002, 1007, + 1013, 1006, 1017, 1018, 1020, 999, 1022, 1023, 1026, 1034, + 1057, 1030, 1028, 1027, 1025, 1035, 1051, 1031, 1047, 1046, + 933, 1055, 1048, 1058, 1063, 1065, 1061, 1067, 1072, 1083, + 1081, 1069, 1079, 1082, 1086, 1088, 1090, 1092, 1093, 1094, + 1095, 1096, 1099, 1104, 1107, 1105, 1109, 1113, 1115, 7121, + 1117, 7121, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, + 7121, 1132, 1133, 1127, 1134, 1141, 1146, 1149, 1153, 1154, - 1161, 1162, 1155, 1163, 1157, 1166, 1128, 1167, 1170, 1171, - 1173, 1175, 1177, 1195, 7073, 1178, 1181, 1182, 1184, 1186, - 1199, 1191, 1206, 1208, 1212, 1218, 1200, 1183, 1226, 1222, - 1224, 1225, 1229, 1230, 1232, 1234, 1235, 1238, 1239, 1241, - 1244, 1242, 1246, 1249, 1248, 1247, 1255, 1258, 7073, 1260, - 1263, 1271, 1278, 1262, 1265, 1273, 1276, 1279, 1277, 1281, - 1283, 1282, 1286, 1289, 1288, 1299, 1291, 1304, 1300, 1302, - 1301, 1306, 1308, 1311, 1307, 1309, 1328, 1317, 1319, 1332, - 1335, 1334, 1337, 1344, 1346, 1324, 1320, 1339, 1347, 1343, - 1349, 1352, 1353, 1354, 1355, 1357, 1358, 1367, 1363, 1365, + 1156, 1136, 1157, 1159, 1160, 1172, 1161, 1162, 1176, 1163, + 1173, 1175, 1179, 1180, 1182, 1183, 1185, 1186, 1188, 1191, + 1208, 7121, 1192, 1189, 1196, 1195, 1201, 1213, 1203, 1217, + 1226, 1215, 1232, 1223, 1229, 1246, 1233, 1225, 1244, 1236, + 1243, 1205, 1245, 1249, 1252, 1253, 1254, 1255, 1258, 1260, + 1261, 1262, 1264, 1272, 1268, 7121, 1275, 1276, 1281, 1279, + 1278, 1286, 1288, 1289, 1297, 1293, 1292, 1294, 1296, 1300, + 1295, 1304, 1306, 1317, 1313, 1320, 1321, 1316, 1323, 1318, + 1322, 1324, 1327, 1331, 1333, 1342, 1335, 1339, 1344, 1351, + 1353, 1355, 1362, 1364, 1357, 1346, 1359, 1365, 1361, 1360, - 1364, 1366, 1370, 1372, 1374, 1375, 1380, 1379, 1377, 1381, - 1392, 1390, 1388, 1397, 1394, 1403, 1399, 1391, 1406, 1410, - 1413, 1414, 7073, 1422, 1419, 1418, 1420, 1425, 1423, 1431, - 1432, 1433, 1434, 1437, 1435, 1438, 1443, 1444, 1445, 1439, - 1447, 1452, 1454, 1455, 1456, 1465, 1472, 1471, 1473, 1457, - 1467, 1476, 1477, 1479, 1486, 1483, 1491, 1484, 1489, 1492, - 1500, 1493, 1495, 1496, 1509, 1502, 1504, 1505, 1507, 1511, - 1517, 1518, 1519, 1526, 1523, 1528, 1540, 1529, 1531, 1536, - 1532, 1542, 1541, 1545, 1546, 1547, 1548, 1555, 1550, 1552, - 1557, 1558, 1553, 1560, 1562, 1567, 1575, 1570, 1577, 1576, + 1369, 1370, 1376, 1372, 1374, 1378, 1386, 1383, 1384, 1387, + 1385, 1392, 1396, 1389, 1391, 1394, 1398, 1400, 1401, 1408, + 1409, 1410, 1415, 1407, 1419, 1411, 1422, 1428, 1430, 1431, + 1432, 7121, 1440, 1437, 1436, 1444, 1449, 1450, 1451, 1441, + 1442, 1452, 1455, 1458, 1461, 1465, 1462, 1466, 1467, 1473, + 1469, 1472, 1480, 1476, 1483, 1493, 1492, 1494, 1479, 1487, + 1496, 1498, 1500, 1508, 1504, 1511, 1512, 1506, 1513, 1522, + 1507, 1514, 1523, 1530, 1517, 1525, 1532, 1526, 1538, 1533, + 1541, 1544, 1535, 1545, 1549, 1556, 1551, 1553, 1475, 1558, + 1559, 1563, 1565, 1566, 1560, 1567, 1574, 1569, 1571, 1570, - 1578, 1580, 1581, 1583, 1584, 1589, 1585, 1592, 1593, 1594, - 1599, 1595, 1606, 1614, 1608, 1596, 1616, 1617, 1619, 1620, - 1621, 1625, 1623, 1628, 1632, 1626, 1629, 1637, 1635, 1641, - 1643, 1644, 1645, 1586, 1655, 1646, 1656, 1657, 1660, 1662, - 1663, 1665, 1647, 1667, 1672, 1670, 1675, 1676, 7073, 1664, - 1688, 1677, 1686, 1684, 1687, 1689, 1698, 1691, 1693, 1695, - 1694, 1701, 1722, 7073, 1702, 7073, 7073, 848, 7073, 7073, - 1705, 1703, 7073, 1704, 1710, 1706, 1720, 1725, 1732, 1737, - 1728, 1730, 1735, 1723, 1746, 1750, 1745, 1753, 1755, 1756, - 1759, 1747, 1760, 1761, 1767, 1770, 1772, 1773, 1708, 1783, + 1575, 1576, 1572, 1586, 1582, 1599, 1588, 1592, 1595, 1596, + 1600, 1601, 1605, 1604, 1602, 1610, 1611, 1612, 1613, 1614, + 1603, 1623, 1633, 1625, 1616, 1627, 1626, 1636, 1634, 1642, + 1643, 1644, 1647, 1646, 1645, 1649, 1655, 1648, 1657, 1658, + 1659, 1662, 1663, 1674, 1665, 1676, 1677, 1672, 1678, 1680, + 1682, 1683, 1684, 1689, 1690, 1693, 1696, 1694, 7121, 1698, + 1706, 1702, 1704, 1707, 1708, 1709, 1710, 1718, 1714, 1716, + 1713, 1715, 1719, 1741, 7121, 1727, 7121, 7121, 1730, 7121, + 7121, 1726, 1732, 7121, 1729, 1748, 1736, 1733, 1752, 1757, + 1764, 1744, 1759, 1762, 1766, 1773, 1787, 1770, 1769, 1771, - 1778, 1788, 1779, 1790, 1791, 1796, 1781, 1797, 1800, 1803, - 1804, 1793, 1806, 1807, 1809, 1811, 1813, 1808, 1815, 1817, - 1820, 1821, 1822, 1830, 1826, 1835, 1842, 7073, 1832, 1845, - 1840, 1849, 1846, 1853, 1852, 1848, 1850, 1857, 1861, 1862, - 1863, 1864, 1867, 1865, 1866, 1873, 1868, 1875, 1876, 1878, - 1880, 1883, 1882, 7073, 1888, 1890, 1891, 1893, 1894, 1892, - 1900, 1896, 1902, 1904, 1906, 1917, 1907, 1908, 1914, 1912, - 1923, 1918, 1920, 1922, 7073, 1924, 1935, 1928, 1936, 1930, - 1937, 1939, 1940, 1943, 1944, 1945, 1946, 1947, 1948, 1958, - 1955, 1954, 1956, 1960, 1961, 1970, 1969, 1971, 1973, 1981, + 1775, 1768, 1778, 1780, 1796, 1779, 1803, 1782, 1785, 1804, + 1815, 1811, 1812, 1816, 1817, 1819, 1821, 1824, 1823, 1830, + 1781, 1725, 1825, 1832, 1833, 1835, 1834, 1837, 1840, 1843, + 1845, 1841, 1839, 1847, 1856, 1858, 1849, 1866, 7121, 1862, + 1870, 1852, 1874, 1872, 1879, 1875, 1876, 1880, 1884, 1886, + 1881, 1887, 1890, 1892, 1891, 1893, 1894, 1897, 1900, 1903, + 1901, 1907, 1908, 1904, 7121, 1913, 1915, 1914, 1920, 1917, + 1918, 1927, 1919, 1928, 1930, 1929, 1937, 1934, 1940, 1935, + 1943, 1945, 1944, 1946, 1949, 7121, 1955, 1959, 1951, 1956, + 1963, 1947, 1965, 1966, 1969, 1970, 1971, 1973, 1974, 1976, - 1974, 1982, 1983, 1984, 1986, 1987, 1988, 1989, 1991, 1995, - 1996, 2003, 1998, 2005, 2000, 2001, 2019, 2022, 2020, 2006, - 2017, 2018, 2009, 2026, 2034, 2038, 2033, 2031, 2035, 2045, - 2040, 2042, 2043, 2046, 2047, 2058, 2044, 2062, 2053, 2055, - 2056, 2064, 2067, 7073, 2068, 2070, 7073, 2072, 2071, 2073, - 2095, 2074, 2078, 2081, 2080, 2083, 2089, 2087, 2099, 2105, - 2101, 2118, 2088, 2107, 2119, 2109, 2122, 2114, 2120, 2128, - 2129, 2130, 2131, 2133, 2139, 2136, 2149, 2152, 2148, 2156, - 2159, 2132, 2155, 2157, 2176, 2158, 2160, 2164, 2161, 2162, - 2166, 2172, 2167, 2179, 2168, 2169, 2181, 2191, 2189, 2186, + 1981, 1978, 1986, 1980, 1982, 1983, 1993, 2000, 1990, 2002, + 2006, 1991, 2003, 2009, 2011, 2012, 2013, 2014, 2015, 2017, + 2019, 2022, 2027, 2024, 2032, 2028, 2025, 2035, 2046, 2043, + 2030, 2041, 2050, 2044, 2051, 2054, 2062, 2057, 2058, 2059, + 2069, 2064, 2067, 2068, 2070, 2071, 2079, 2077, 2081, 2082, + 2080, 2088, 2090, 2091, 2093, 7121, 2094, 2095, 7121, 2097, + 2099, 2100, 2122, 2098, 2106, 2111, 2101, 2114, 2104, 2120, + 2117, 2123, 2130, 2126, 2142, 2139, 2144, 2145, 2147, 2150, + 2134, 2151, 2152, 2153, 2154, 2160, 2159, 2157, 2167, 2176, + 2177, 2179, 2180, 2187, 2173, 2182, 2184, 2203, 2185, 2183, - 2192, 2199, 2200, 2201, 2204, 2205, 2206, 7073, 2213, 2208, - 2212, 2216, 2090, 2220, 2217, 2223, 7073, 2224, 2225, 2227, - 2235, 2228, 2230, 2236, 2232, 2239, 2238, 2244, 2245, 2246, - 2251, 2247, 2265, 7073, 2250, 7073, 2248, 2240, 2263, 2261, - 2267, 2269, 2270, 2271, 2272, 7073, 7073, 2273, 2274, 2288, - 2290, 2292, 2282, 2279, 2293, 7073, 2295, 2302, 7073, 2299, - 2304, 2298, 2297, 2305, 2308, 2309, 2310, 2319, 2314, 2324, - 2315, 2323, 2327, 7073, 2331, 2333, 2316, 2335, 2338, 2329, - 2339, 2342, 2344, 2346, 7073, 2350, 2351, 2353, 2360, 2362, - 2355, 2352, 2363, 2368, 2357, 2365, 2371, 2373, 2372, 2380, + 2186, 2193, 2189, 2191, 2198, 2192, 2199, 2207, 2212, 2194, + 2220, 2216, 2215, 2218, 2219, 2224, 2225, 2233, 2230, 2228, + 7121, 2244, 2237, 2239, 2241, 2247, 2251, 2249, 2250, 7121, + 2252, 2253, 2255, 2263, 2256, 2259, 2267, 2264, 2266, 2268, + 2270, 2274, 2276, 2273, 2275, 2287, 7121, 2277, 7121, 2286, + 2289, 2290, 2291, 2294, 2296, 2297, 2298, 2299, 7121, 7121, + 2301, 2302, 2315, 2313, 2323, 2318, 2305, 2319, 7121, 2321, + 2330, 7121, 2334, 2322, 2326, 2328, 2331, 2333, 2336, 2339, + 2350, 2341, 2352, 2342, 2353, 2345, 7121, 2355, 2360, 2343, + 2362, 2365, 2366, 2368, 2369, 2371, 2372, 7121, 2373, 2375, - 2383, 2387, 2388, 2389, 2392, 2390, 2402, 7073, 2398, 2379, - 2399, 2406, 2404, 2408, 2401, 2405, 2411, 2412, 2413, 2415, - 2417, 2422, 2421, 2423, 2424, 2425, 2434, 2435, 2427, 2438, - 2440, 2431, 2437, 2445, 2446, 2382, 2447, 2449, 2448, 2452, - 7073, 2453, 2455, 2460, 2456, 2466, 2459, 171, 2462, 2463, - 2469, 2470, 2473, 2484, 2474, 2486, 2491, 2487, 2488, 2490, - 2495, 2496, 2497, 2499, 2498, 2489, 2502, 2501, 2505, 7073, - 2507, 2512, 2514, 2515, 2517, 2518, 2520, 7073, 2527, 2521, - 2528, 2541, 2535, 2529, 2544, 2537, 2545, 2546, 2548, 2549, - 2550, 2557, 2554, 2552, 2558, 2560, 7073, 2565, 2567, 2570, + 2380, 2387, 2389, 2383, 2378, 2390, 2394, 2385, 2397, 2398, + 2399, 2400, 2407, 2410, 2411, 2409, 2412, 2421, 2419, 2426, + 7121, 2422, 2423, 2408, 2431, 2429, 2433, 2430, 2435, 2437, + 2436, 2438, 2440, 2445, 2447, 2446, 2449, 2450, 2452, 2459, + 2461, 2460, 2463, 2465, 2466, 2456, 2469, 2472, 2477, 2474, + 2478, 2476, 2479, 7121, 2480, 2483, 2486, 2484, 2488, 2491, + 280, 2496, 2497, 2501, 2498, 2500, 2502, 2506, 2507, 2514, + 2521, 2516, 2518, 2520, 2519, 2525, 2526, 2528, 2529, 2530, + 2531, 2535, 2536, 2537, 7121, 2546, 2538, 2541, 2543, 2547, + 2548, 2550, 7121, 2557, 2562, 2560, 2571, 2567, 2572, 2573, - 2561, 2571, 2573, 2574, 2578, 2580, 2582, 2584, 2585, 2590, - 2586, 2588, 2589, 2591, 2599, 2602, 2612, 2594, 2603, 2604, - 2611, 2608, 2616, 2615, 2618, 2620, 2625, 2621, 7073, 2630, - 2622, 2631, 2632, 2629, 2636, 2633, 2639, 2648, 2644, 2646, - 2653, 2654, 2667, 2656, 2650, 2664, 2661, 2665, 2673, 2677, - 2674, 2678, 2684, 2681, 2687, 2689, 2691, 2695, 2699, 2696, - 2697, 2698, 2700, 2701, 2710, 2712, 2715, 2718, 2708, 2716, - 2723, 2724, 2726, 2742, 2733, 7073, 2731, 2737, 2729, 2741, - 2749, 2745, 2746, 2751, 2753, 2755, 2757, 2758, 2759, 2766, - 2761, 2763, 2770, 2765, 2769, 2771, 2772, 2780, 2782, 2783, + 2575, 2577, 2578, 2579, 2580, 2581, 2588, 2585, 2583, 2589, + 2591, 7121, 2602, 2598, 2604, 2592, 2606, 2613, 2596, 2607, + 2608, 2614, 2615, 2616, 2619, 2620, 2621, 2624, 2625, 2628, + 2629, 2636, 2635, 2637, 2638, 2639, 2641, 2646, 2642, 2648, + 2649, 2656, 2651, 7121, 2659, 2652, 2662, 2666, 2663, 2665, + 2670, 2668, 2678, 2669, 2679, 2682, 2684, 2696, 2686, 2689, + 2700, 2690, 2687, 2702, 2712, 2703, 2713, 2716, 2707, 2720, + 2722, 2710, 2714, 2729, 2724, 2726, 2731, 2734, 2735, 2743, + 2744, 2740, 2747, 2739, 2741, 2749, 2742, 2762, 2767, 2758, + 7121, 2766, 2760, 2768, 2771, 2778, 2773, 2774, 2776, 2779, - 2784, 2791, 2786, 2793, 2707, 7073, 2794, 2798, 2788, 2795, - 2806, 2796, 2810, 2811, 2813, 2799, 2802, 2814, 2822, 2817, - 2815, 2824, 2819, 2831, 2828, 2829, 2834, 2826, 7073, 2840, - 2830, 2841, 2842, 2846, 2848, 2849, 2850, 2856, 2858, 2851, - 2861, 2862, 2864, 2865, 2868, 7073, 2873, 2875, 2871, 2874, - 2883, 2878, 2882, 2884, 2886, 2888, 7073, 2889, 2891, 2890, - 2892, 2893, 2896, 2903, 2904, 2899, 7073, 2912, 2902, 2910, - 2911, 2914, 2915, 2917, 2920, 2918, 2923, 2924, 2927, 2934, - 2928, 2936, 7073, 2925, 2946, 2937, 2943, 2939, 2949, 2950, - 2953, 2954, 2957, 2956, 2960, 7073, 2967, 2969, 2964, 2978, + 2783, 2784, 2785, 2787, 2794, 2789, 2795, 2791, 2797, 2800, + 2798, 2806, 2802, 2808, 2810, 2813, 2817, 2814, 2820, 2821, + 7121, 2822, 2827, 2824, 2828, 2831, 2833, 2839, 2840, 2842, + 2834, 2836, 2844, 2846, 2848, 2849, 2851, 2850, 2858, 2856, + 2860, 2862, 2859, 7121, 2871, 2863, 2867, 2876, 2872, 2879, + 2875, 2882, 2885, 2889, 2890, 2892, 2893, 2895, 2896, 2899, + 7121, 2904, 2906, 2902, 2905, 2914, 2909, 2913, 2915, 2917, + 2919, 7121, 2920, 2922, 2921, 2923, 2924, 2927, 2934, 2935, + 2930, 2937, 7121, 2947, 2942, 2933, 2943, 2945, 2946, 2949, + 2951, 2954, 2955, 2958, 2959, 2961, 2966, 2968, 2970, 7121, - 2970, 2976, 2979, 2980, 2981, 2982, 2983, 2984, 2988, 2990, - 7073, 2991, 2994, 2995, 2998, 2992, 3000, 3003, 3014, 3007, - 3009, 3011, 3006, 3016, 3017, 3015, 3021, 3028, 3024, 3023, - 3027, 3033, 3036, 3038, 3040, 3039, 3043, 3051, 3052, 3047, - 3054, 3057, 3058, 3050, 3060, 3062, 3069, 3071, 3074, 3072, - 3075, 7073, 3078, 3079, 3080, 3070, 3082, 3084, 3085, 3086, - 3090, 3087, 3096, 3101, 3099, 3092, 3109, 3116, 3102, 3117, - 3105, 3112, 3114, 3120, 3119, 3121, 3126, 3133, 3129, 3128, - 3130, 3142, 3132, 3137, 3145, 3135, 3140, 3146, 3147, 3149, - 3150, 3152, 3155, 3157, 3160, 3153, 3161, 3162, 3176, 3178, + 2969, 2978, 2971, 2973, 2984, 2981, 2983, 2985, 2994, 2987, + 3004, 2993, 7121, 3011, 2986, 2997, 3015, 3001, 3010, 3012, + 3013, 3016, 3017, 3019, 3023, 3024, 3025, 7121, 3026, 3028, + 3031, 3032, 3034, 3035, 3039, 3047, 3042, 3044, 3048, 3050, + 3051, 3055, 3052, 3056, 3062, 3063, 3057, 3059, 3065, 3072, + 3076, 3077, 3078, 3081, 3085, 3089, 3087, 3092, 3095, 3084, + 3088, 3096, 3097, 3105, 3106, 3109, 3107, 3110, 7121, 3113, + 3114, 3115, 3116, 3119, 3121, 3122, 3120, 3125, 3123, 3128, + 3133, 3139, 3129, 3146, 3150, 3141, 3151, 3147, 3154, 3155, + 3157, 3156, 3158, 3142, 3165, 3163, 3167, 3169, 3176, 3171, - 3179, 3167, 3169, 3181, 3183, 3185, 7073, 3188, 3189, 3186, - 3192, 3193, 3198, 3195, 3205, 3202, 3203, 3213, 3210, 3214, - 3219, 3208, 3211, 3221, 3220, 3231, 3227, 7073, 3224, 7073, - 3222, 3232, 3233, 3241, 3236, 7073, 3239, 7073, 3244, 3246, - 3248, 3249, 3250, 7073, 3251, 3252, 3255, 3253, 3257, 3258, - 3261, 3260, 3263, 3267, 3269, 3274, 3270, 3278, 3279, 3280, - 3284, 3285, 3288, 3286, 3290, 3291, 3292, 3294, 3298, 3299, - 3303, 3301, 3306, 3310, 3311, 3312, 3313, 7073, 3317, 3324, - 3320, 3329, 3314, 3322, 3328, 3326, 3335, 3332, 3336, 3338, - 3339, 3341, 3348, 3344, 3350, 3351, 3352, 3358, 3362, 3360, + 3174, 3183, 3172, 3179, 3181, 3182, 3184, 3185, 3186, 3189, + 3192, 3194, 3196, 3202, 3205, 3209, 3211, 3213, 3212, 3206, + 3214, 3220, 3222, 7121, 3225, 3226, 3227, 3229, 3230, 3235, + 3232, 3244, 3236, 3239, 3253, 3240, 3250, 3255, 3248, 3256, + 3257, 3258, 3267, 3263, 7121, 3264, 7121, 3260, 3265, 3271, + 3275, 3273, 7121, 3277, 7121, 3280, 3285, 3279, 3286, 3287, + 7121, 3288, 3289, 3292, 3290, 3294, 3296, 3298, 3300, 3301, + 3304, 3305, 3317, 3306, 3315, 3308, 3316, 3318, 3322, 3327, + 3323, 3329, 3325, 3333, 3335, 3332, 3338, 3339, 3341, 3345, + 3344, 3346, 3349, 3351, 7121, 3353, 3354, 3359, 3360, 3361, - 3370, 7073, 3365, 3367, 3368, 3369, 7073, 3372, 3373, 3381, - 3383, 3374, 3376, 3378, 3386, 3390, 3385, 3392, 3395, 3396, - 3406, 3405, 3398, 7073, 3407, 3408, 3409, 3418, 3412, 3419, - 3426, 3428, 3424, 3430, 3432, 3441, 3437, 3423, 3427, 3425, - 3438, 3446, 3453, 3454, 3456, 3452, 3461, 3439, 3459, 3466, - 3463, 3451, 3440, 3467, 3470, 3471, 3473, 3474, 3475, 3472, - 3476, 3477, 3481, 3482, 7073, 3483, 3484, 3478, 3498, 3494, - 3499, 3501, 3502, 3503, 3504, 3508, 7073, 3510, 3507, 3513, - 3511, 3519, 3522, 3512, 3525, 3528, 3529, 3530, 3532, 3531, - 3534, 7073, 3533, 7073, 3535, 3541, 3552, 3555, 3547, 3556, + 3362, 3367, 3366, 3369, 3370, 3373, 3374, 3371, 3378, 3379, + 3388, 3384, 3389, 3390, 3400, 3391, 3403, 3392, 3407, 3404, + 7121, 3405, 3414, 3406, 3411, 7121, 3415, 3408, 3421, 3423, + 3416, 3418, 3426, 3428, 3433, 3427, 3435, 3429, 3437, 3444, + 3446, 3439, 7121, 3448, 3454, 3450, 3453, 3461, 3452, 3468, + 3469, 3465, 3466, 3471, 3479, 3477, 3474, 3478, 3464, 3480, + 3481, 3491, 3492, 3494, 3490, 3499, 3489, 3497, 3504, 3501, + 3498, 3505, 3507, 3508, 3509, 3510, 3513, 3511, 3514, 3515, + 3518, 3517, 3530, 7121, 3521, 3522, 3531, 3538, 3535, 3540, + 3541, 3543, 3542, 3546, 3549, 7121, 3551, 3548, 3554, 3552, - 3558, 3563, 3557, 3564, 3566, 3565, 3567, 3569, 3573, 3575, - 3576, 3578, 3577, 3542, 3580, 3585, 3581, 3591, 3582, 3593, - 3594, 3603, 3606, 3596, 7073, 7073, 3598, 3599, 3612, 3605, - 3609, 3614, 3624, 3620, 3622, 3616, 3626, 3628, 3636, 7073, - 3631, 3633, 3637, 3638, 3640, 3650, 3642, 3652, 3655, 3653, - 3656, 3663, 3661, 7073, 3662, 3664, 3671, 3666, 3672, 3674, - 7073, 3669, 7073, 3673, 3676, 3680, 3683, 3684, 3685, 3687, - 3688, 3690, 3693, 3696, 3702, 3704, 3711, 3706, 3708, 3713, - 3714, 3715, 3716, 3718, 3719, 3726, 3722, 3724, 3725, 7073, - 3728, 3729, 3737, 3731, 3730, 3742, 3746, 3739, 3738, 7073, + 3565, 3560, 3553, 3562, 3569, 3570, 3573, 3571, 3572, 3574, + 7121, 3576, 7121, 3577, 3580, 3593, 3595, 3585, 3582, 3598, + 3604, 3599, 3589, 3605, 3606, 3611, 3607, 3613, 3614, 3615, + 3618, 3619, 3631, 3621, 3617, 3622, 3632, 3633, 3635, 3636, + 3644, 3641, 3647, 7121, 7121, 3637, 3639, 3653, 3640, 3655, + 3660, 3666, 3663, 3668, 3658, 3648, 3670, 3680, 7121, 3671, + 3677, 3678, 3682, 3683, 3690, 3686, 3694, 3695, 3691, 3698, + 3705, 3701, 7121, 3702, 3703, 3714, 3706, 3715, 3716, 7121, + 3713, 7121, 3709, 3711, 3720, 3723, 3727, 3725, 3729, 3726, + 3733, 3736, 3737, 3741, 3744, 3749, 3745, 3747, 3753, 3754, - 3745, 3753, 3752, 3754, 3757, 3759, 3760, 3763, 3764, 3768, - 3770, 3769, 3765, 3773, 7073, 3771, 3774, 3786, 3781, 3778, - 3782, 3792, 3795, 3800, 7073, 3797, 3801, 3809, 3805, 3806, - 3787, 3808, 3807, 3812, 3813, 3814, 3815, 3816, 3817, 3823, - 3822, 3819, 3829, 3825, 3828, 3836, 3839, 3843, 3850, 3846, - 7073, 3847, 3830, 3852, 3848, 3853, 3855, 3856, 3858, 3861, - 3866, 3862, 3869, 3874, 3876, 3877, 3878, 3880, 3881, 3889, - 3884, 7073, 3892, 3888, 3896, 3895, 3891, 3901, 3894, 3902, - 3903, 3910, 3905, 3907, 3912, 3913, 3914, 3919, 3927, 3923, - 3911, 3925, 3926, 3938, 3929, 3930, 3933, 3934, 7073, 3953, + 3755, 3756, 3758, 3759, 3767, 3763, 3764, 3765, 7121, 3769, + 3766, 3777, 3771, 3770, 3779, 3782, 3788, 3778, 7121, 3789, + 3793, 3791, 3792, 3795, 3799, 3796, 3805, 3803, 3807, 3808, + 3809, 3811, 3812, 3814, 7121, 3816, 3819, 3827, 3820, 3825, + 3828, 3830, 3833, 3831, 3838, 7121, 3840, 3841, 3848, 3847, + 3844, 3852, 3855, 3849, 3853, 3859, 3860, 3857, 3861, 3863, + 3864, 3865, 3868, 3870, 3867, 3881, 3883, 3874, 3885, 3896, + 3882, 7121, 3891, 3894, 3895, 3899, 3897, 3898, 3902, 3904, + 3909, 3911, 3901, 3920, 3922, 3906, 3912, 3924, 3926, 3928, + 3935, 3931, 7121, 3936, 3937, 3944, 3941, 3939, 3940, 3948, - 3941, 3944, 3954, 3951, 3945, 3963, 3958, 3948, 3961, 3965, - 3966, 3969, 3971, 3972, 3973, 3976, 3977, 7073, 7073, 3979, - 3980, 3981, 7073, 3984, 3983, 3995, 3985, 3987, 3988, 3996, - 3999, 3998, 4000, 4002, 4008, 4012, 7073, 4016, 4013, 4020, - 4015, 4017, 4025, 4021, 7073, 4022, 4033, 4030, 4031, 4037, - 4032, 4038, 4039, 4043, 4044, 4040, 4045, 4048, 4056, 4059, - 4054, 4051, 4060, 7073, 4061, 4062, 4063, 4070, 4065, 4067, - 4072, 7073, 4073, 4075, 4076, 4082, 4085, 4091, 4093, 4095, - 4099, 4083, 4096, 4100, 4102, 4101, 4103, 4105, 4114, 4109, - 4113, 4112, 4116, 4131, 4132, 4118, 7073, 4115, 4126, 4120, + 3942, 3949, 3951, 3952, 3953, 3956, 3958, 3959, 3965, 3972, + 3968, 3957, 3971, 3973, 3975, 3976, 3978, 3979, 3983, 7121, + 3991, 3992, 3984, 3995, 3994, 4000, 4007, 4002, 4003, 4004, + 4009, 4010, 4012, 4014, 4016, 4017, 4020, 4021, 7121, 7121, + 4027, 4022, 4024, 7121, 4028, 4029, 4045, 4030, 4032, 4035, + 4040, 4042, 4043, 4044, 4053, 4048, 4051, 7121, 4063, 4059, + 4066, 4058, 4061, 4071, 4073, 7121, 4062, 4082, 4080, 4072, + 4083, 4069, 4084, 4085, 4086, 4087, 4091, 4093, 4094, 4102, + 4105, 4097, 4100, 4104, 7121, 4101, 4106, 4107, 4111, 4113, + 4114, 4116, 7121, 4120, 4118, 4125, 4123, 4127, 4135, 4138, - 4134, 4136, 7073, 4144, 4147, 4151, 7073, 4154, 4138, 4150, - 4149, 4158, 7073, 4153, 4156, 4157, 4162, 4159, 4172, 4167, - 4174, 4171, 4173, 4175, 4176, 4178, 7073, 4179, 4177, 4180, - 7073, 4183, 4187, 4194, 4198, 4182, 4205, 4200, 4203, 4201, - 4204, 7073, 4209, 7073, 4212, 4210, 4216, 7073, 4211, 4218, - 4219, 4221, 4225, 4226, 4227, 4233, 4229, 4235, 4237, 4238, - 4239, 4240, 4242, 4249, 4241, 4245, 4248, 4250, 7073, 4251, - 4253, 4260, 4261, 4257, 4267, 4265, 4272, 4262, 4273, 4275, - 7073, 7073, 4280, 7073, 4282, 4276, 4281, 4286, 7073, 4289, - 4287, 4296, 4291, 4293, 4298, 4295, 4306, 4299, 7073, 4310, + 4130, 4144, 4132, 4140, 4145, 4147, 4148, 4149, 4150, 4157, + 4155, 4156, 4158, 4159, 4161, 4165, 4174, 7121, 4167, 4175, + 4162, 4179, 4181, 7121, 4188, 4195, 4183, 7121, 4196, 4185, + 4192, 4193, 4204, 7121, 4200, 4199, 4201, 4206, 4202, 4214, + 4209, 4216, 4218, 4215, 4219, 4220, 4221, 7121, 4223, 4222, + 4224, 7121, 4237, 4240, 4244, 4247, 4249, 4230, 4232, 4251, + 4253, 4254, 4252, 7121, 4259, 4256, 7121, 4262, 4263, 4266, + 7121, 4268, 4269, 4271, 4273, 4270, 4277, 4278, 4284, 4286, + 4274, 4288, 4289, 4290, 4238, 4291, 4298, 4293, 4295, 4299, + 4300, 7121, 4301, 4303, 4306, 4310, 4305, 4322, 4318, 4308, - 4311, 7073, 4303, 4314, 4321, 4316, 4317, 4318, 4319, 4322, - 4327, 4325, 4329, 4331, 4332, 4333, 4334, 4335, 4337, 4354, - 4338, 4349, 7073, 4342, 4350, 4357, 4359, 4356, 4363, 4364, - 4365, 4366, 7073, 4371, 4375, 4372, 4379, 4378, 7073, 4380, - 7073, 4381, 4382, 4388, 4392, 4387, 4401, 7073, 4396, 4393, - 4403, 4397, 4404, 4408, 4411, 4412, 4413, 4414, 4405, 4421, - 4419, 4420, 4418, 4428, 4426, 7073, 4429, 4435, 4437, 4438, - 4440, 4441, 4442, 4450, 4447, 4443, 4446, 4453, 4455, 4458, - 4459, 4465, 4463, 4468, 4457, 7073, 4467, 4474, 4476, 4477, - 4485, 4480, 4481, 4482, 7073, 4487, 4488, 4491, 7073, 4489, + 4312, 4324, 4326, 7121, 7121, 4331, 7121, 4332, 4328, 4334, + 4336, 7121, 4338, 4337, 4346, 4341, 4342, 4345, 4348, 4355, + 4349, 7121, 4360, 4361, 7121, 4356, 4363, 4370, 4367, 4365, + 4368, 4371, 4373, 4375, 4377, 4380, 4382, 4378, 4383, 4385, + 4387, 4386, 4403, 4389, 4404, 7121, 4388, 4399, 4405, 4414, + 4400, 4407, 4416, 4415, 4409, 7121, 4421, 4428, 4424, 4431, + 4425, 7121, 4434, 7121, 4433, 4435, 4437, 4438, 4439, 4447, + 7121, 4446, 4445, 4453, 4450, 4455, 4454, 4457, 4461, 4463, + 4464, 4465, 4473, 4469, 4470, 4468, 4478, 4471, 7121, 4475, + 4484, 4487, 4488, 4490, 4491, 4492, 4499, 4495, 4502, 4496, - 4495, 4497, 4501, 4503, 4504, 4505, 4508, 4507, 4511, 4512, - 4509, 7073, 4516, 4517, 4510, 4513, 4526, 4533, 4519, 7073, - 7073, 4534, 7073, 4535, 4520, 4536, 4538, 4539, 4545, 4547, - 4548, 4550, 4544, 4552, 4555, 4558, 4560, 7073, 4561, 4572, - 4565, 4575, 4576, 4583, 4578, 4582, 4568, 7073, 7073, 4585, - 4591, 4586, 4594, 4596, 4567, 4589, 4604, 4600, 4601, 4609, - 4610, 4618, 7073, 4599, 4611, 4616, 4613, 7073, 4614, 4619, - 4621, 4622, 4623, 4625, 4626, 4627, 4629, 4630, 4636, 4641, - 4638, 4646, 4632, 4640, 4649, 4648, 4654, 4656, 4655, 4657, - 4659, 7073, 4662, 4663, 4664, 4665, 4669, 4671, 4672, 4676, + 4497, 4508, 4503, 4509, 4516, 4511, 4518, 4519, 7121, 4521, + 4522, 4524, 4527, 4536, 4528, 4529, 4532, 7121, 4533, 4541, + 4542, 7121, 4539, 4543, 4549, 4551, 4553, 4554, 4555, 4559, + 4556, 4560, 4561, 4557, 7121, 4565, 4566, 4564, 4580, 4582, + 4570, 4568, 7121, 7121, 4583, 7121, 4588, 4567, 4591, 4592, + 4593, 4595, 4597, 4598, 4600, 4601, 4603, 4605, 4608, 4611, + 7121, 4612, 4620, 4615, 4627, 4623, 4634, 4629, 7121, 4625, + 4616, 7121, 7121, 4639, 4640, 4635, 4643, 4645, 4647, 4630, + 7121, 4656, 4649, 4651, 4658, 4660, 4667, 7121, 4664, 4653, + 4670, 4662, 7121, 4663, 4671, 4669, 4672, 4675, 4677, 4678, - 4674, 4677, 4685, 7073, 4678, 7073, 4681, 4687, 4690, 4700, - 4688, 4704, 4705, 4706, 4699, 4689, 4707, 4711, 4714, 4717, - 4718, 4723, 4719, 4725, 4726, 4727, 7073, 4730, 4732, 4735, - 4737, 4742, 4744, 4745, 7073, 4747, 4738, 4748, 4751, 4754, - 4756, 4757, 4760, 4761, 4765, 4762, 4766, 4770, 4773, 4767, - 4774, 4775, 4780, 4778, 7073, 4782, 4785, 4786, 4789, 4790, - 4791, 4793, 4795, 4800, 4803, 4804, 4806, 4807, 7073, 4810, - 4811, 4813, 7073, 4814, 4817, 4815, 4818, 4820, 4827, 4822, - 4831, 4828, 4829, 7073, 4840, 4835, 4842, 4837, 4845, 4846, - 4847, 4848, 4852, 4850, 4854, 4857, 7073, 4867, 4858, 4866, + 4679, 4681, 4683, 4685, 4689, 4691, 4696, 4690, 4697, 4698, + 4700, 4702, 4704, 4707, 4710, 4714, 7121, 4703, 4715, 4717, + 4718, 4719, 4722, 4724, 4726, 4727, 4729, 4731, 7121, 4730, + 7121, 4735, 4738, 4749, 4751, 4740, 4733, 4754, 4741, 4756, + 4757, 4758, 4761, 4762, 4765, 4766, 4771, 4767, 4773, 4776, + 4779, 7121, 4778, 4784, 4786, 4790, 4792, 4794, 4795, 7121, + 4796, 4797, 4798, 4803, 4805, 4807, 4808, 4810, 4811, 4813, + 4816, 4814, 4821, 4823, 4824, 4825, 4826, 4828, 4830, 7121, + 4832, 4836, 4833, 4840, 4841, 4845, 4847, 4848, 4854, 4857, + 4844, 4846, 4858, 7121, 4862, 4864, 4866, 7121, 4867, 4869, - 4868, 4865, 4869, 4872, 4876, 4878, 7073, 4879, 4880, 4883, - 4886, 4895, 4897, 4887, 4892, 4900, 4898, 4905, 4896, 4899, - 4906, 4902, 4911, 4914, 4915, 4916, 4913, 4932, 4934, 4929, - 7073, 4917, 7073, 4918, 4930, 4935, 4946, 4941, 4943, 4944, - 4948, 4947, 7073, 4949, 4954, 4956, 4951, 4959, 7073, 4919, - 4957, 4960, 4962, 7073, 4958, 4971, 4963, 4972, 4978, 4979, - 7073, 4982, 4985, 4986, 4993, 4995, 4990, 4997, 4992, 5000, - 4998, 4994, 5002, 5003, 5011, 5009, 5007, 7073, 5013, 5015, - 5020, 5022, 5024, 5016, 5026, 5014, 5028, 5031, 5033, 7073, - 5036, 5037, 5038, 5039, 5040, 5043, 5042, 5044, 5051, 5050, + 4868, 4871, 4872, 4874, 4875, 4880, 4878, 4881, 7121, 4889, + 4879, 4890, 4892, 4882, 4895, 4901, 4898, 4902, 4905, 4907, + 4908, 7121, 4910, 4915, 4912, 4918, 4919, 4920, 4921, 4925, + 4922, 7121, 4929, 4931, 4932, 4935, 4945, 4946, 4938, 4941, + 4949, 4947, 4953, 4951, 4954, 4957, 4955, 4961, 4962, 4963, + 4964, 4965, 4974, 4983, 4978, 7121, 4966, 7121, 4969, 4981, + 4984, 4993, 4991, 4988, 4994, 4996, 4998, 7121, 4999, 5003, + 5005, 5002, 5007, 7121, 5009, 5006, 5008, 5012, 7121, 5010, + 5025, 5011, 5014, 5028, 5032, 7121, 5035, 5036, 5037, 5044, + 5046, 5041, 5048, 5029, 5051, 5045, 5049, 5053, 5054, 5062, - 5052, 5048, 5055, 5060, 5063, 5061, 5065, 7073, 5069, 5067, - 5070, 5077, 5078, 5076, 5085, 7073, 5080, 7073, 5086, 5088, - 5090, 5092, 5093, 7073, 5096, 5098, 5097, 5103, 7073, 7073, - 5105, 5112, 5107, 5111, 5108, 7073, 7073, 5114, 7073, 5115, - 7073, 5116, 5118, 7073, 7073, 5120, 5121, 5122, 5124, 5126, - 5128, 7073, 5136, 7073, 5138, 5137, 5139, 5142, 5141, 5144, - 7073, 5145, 5148, 5150, 5153, 5155, 7073, 5152, 5160, 5173, - 5156, 5168, 7073, 5170, 5172, 5159, 5171, 7073, 5176, 5180, - 5181, 5182, 5184, 5185, 5187, 5188, 5191, 5194, 5195, 5196, - 5197, 5199, 5204, 5203, 5211, 5213, 5215, 5206, 5216, 5220, + 5059, 5060, 7121, 5064, 5058, 5067, 5069, 5070, 5071, 5076, + 5077, 5078, 5084, 5079, 7121, 5081, 5087, 5088, 5089, 5090, + 5091, 5093, 5094, 5102, 5100, 5110, 5098, 5101, 5103, 5112, + 5105, 5115, 7121, 5118, 5119, 5123, 5127, 5131, 5124, 5134, + 7121, 5129, 7121, 5133, 5137, 5139, 5141, 5142, 7121, 5145, + 5146, 5150, 5152, 7121, 7121, 5154, 5161, 5156, 5160, 5157, + 7121, 7121, 5163, 7121, 5164, 7121, 5165, 5167, 7121, 7121, + 5169, 5170, 5171, 5172, 5173, 5181, 7121, 5185, 7121, 5193, + 5175, 5188, 5186, 5190, 5194, 7121, 5191, 5197, 5201, 5203, + 5205, 7121, 5198, 5208, 5217, 5206, 5216, 7121, 5219, 5220, - 5221, 5223, 5226, 5228, 5229, 5230, 5231, 5232, 5236, 5238, - 5235, 5244, 5246, 5239, 5248, 5255, 5256, 5257, 5241, 5259, - 5258, 5260, 5266, 5262, 5273, 5268, 5270, 5274, 5275, 5277, - 5276, 5279, 5283, 5284, 5288, 5286, 5289, 7073, 5282, 5292, - 5293, 5302, 5296, 5303, 5306, 5313, 5318, 5319, 7073, 5321, - 7073, 5323, 5307, 5315, 5309, 5327, 7073, 5329, 5330, 5331, - 5332, 5334, 5335, 5336, 5337, 5333, 5340, 5344, 7073, 5346, - 5360, 5347, 5341, 5356, 5367, 7073, 5362, 5369, 5354, 5364, - 5370, 5373, 5374, 5375, 5376, 5379, 5377, 5378, 5384, 5387, - 5381, 5390, 5391, 7073, 5399, 5403, 5406, 5392, 5404, 5405, + 5209, 5221, 7121, 5225, 5230, 5222, 5232, 5233, 5234, 5235, + 5236, 5237, 5241, 5244, 5243, 5245, 5246, 5249, 5253, 5258, + 5260, 5262, 5263, 5264, 5267, 5268, 5270, 5273, 5276, 5277, + 5278, 5279, 5280, 5284, 5286, 5283, 5292, 5294, 5287, 5296, + 5303, 5304, 5305, 5289, 5307, 5306, 5308, 5314, 5310, 5321, + 5316, 5318, 5322, 5323, 5325, 5324, 5327, 5331, 5332, 5336, + 5334, 5337, 7121, 5330, 5340, 5341, 5350, 5344, 5351, 5354, + 5361, 5366, 5367, 7121, 5369, 7121, 5371, 5355, 5363, 5357, + 5375, 7121, 5377, 5378, 5379, 5380, 5382, 5383, 5384, 5385, + 5381, 5388, 5392, 7121, 5394, 5408, 5395, 5389, 5404, 5415, - 5407, 5409, 5411, 5413, 5414, 5415, 5417, 5418, 5419, 5425, - 5431, 5428, 5436, 5441, 7073, 5424, 7073, 5442, 5444, 5445, - 5432, 5448, 5449, 5446, 5450, 7073, 7073, 5447, 5455, 5456, - 5461, 5462, 5458, 5465, 5468, 5470, 5471, 7073, 5472, 5474, - 5478, 5484, 5481, 7073, 5486, 5488, 5489, 5491, 7073, 5492, - 5493, 5495, 5496, 5506, 5498, 5511, 5507, 5513, 5500, 5503, - 5514, 5519, 7073, 7073, 7073, 7073, 5520, 5523, 5525, 5526, - 5527, 5528, 5529, 5533, 5535, 5531, 5532, 5536, 7073, 5547, - 7073, 7073, 5543, 7073, 5549, 5550, 5553, 5555, 5537, 5557, - 5559, 7073, 5560, 7073, 5565, 5568, 5561, 5572, 5578, 5569, + 7121, 5410, 5417, 5402, 5412, 5418, 5421, 5422, 5423, 5424, + 5427, 5425, 5426, 5432, 5435, 5429, 5438, 5439, 7121, 5447, + 5451, 5454, 5440, 5452, 5453, 5455, 5457, 5459, 5461, 5462, + 5463, 5465, 5466, 5467, 5473, 5479, 5476, 5484, 5489, 7121, + 5472, 7121, 5490, 5492, 5493, 5480, 5496, 5497, 5494, 5498, + 7121, 7121, 5495, 5503, 5504, 5509, 5510, 5506, 5513, 5516, + 5518, 5519, 7121, 5520, 5522, 5526, 5532, 5529, 7121, 5534, + 5536, 5537, 5539, 7121, 5540, 5541, 5543, 5544, 5554, 5546, + 5559, 5555, 5561, 5548, 5551, 5562, 5567, 7121, 7121, 7121, + 7121, 5568, 5571, 5573, 5574, 5575, 5576, 5577, 5581, 5583, - 5562, 5580, 5582, 5583, 5584, 5585, 5592, 5590, 5593, 5591, - 5596, 5598, 5600, 7073, 7073, 5604, 5608, 5609, 5611, 5613, - 5614, 5615, 5622, 5620, 5621, 5623, 5625, 5627, 5628, 5636, - 5637, 5633, 5634, 5642, 7073, 5643, 5639, 5645, 7073, 5647, - 7073, 5651, 5652, 5653, 5654, 5655, 5660, 5661, 5662, 5664, - 5666, 7073, 7073, 5665, 5680, 5675, 7073, 7073, 5667, 5676, - 5677, 5679, 5685, 5682, 5687, 7073, 5690, 5691, 5692, 5688, - 5694, 5702, 5695, 7073, 5704, 7073, 5705, 5707, 5713, 5708, - 5716, 5721, 5717, 5724, 5723, 5720, 5726, 5727, 7073, 5729, - 5730, 7073, 5737, 5736, 5740, 5734, 5742, 5745, 7073, 5746, + 5579, 5580, 5584, 7121, 5595, 7121, 7121, 5591, 7121, 5597, + 5598, 5601, 5603, 5585, 5605, 5607, 7121, 5608, 7121, 5613, + 5616, 5609, 5620, 5626, 5617, 5610, 5628, 5630, 5631, 5632, + 5633, 5640, 5638, 5641, 5639, 5644, 5646, 5648, 7121, 7121, + 5652, 5656, 5657, 5659, 5661, 5662, 5663, 5670, 5668, 5669, + 5671, 5673, 5675, 5676, 5684, 5685, 5681, 5682, 5690, 7121, + 5691, 5687, 5693, 7121, 5695, 7121, 5699, 5700, 5701, 5702, + 5703, 5708, 5709, 5710, 5712, 5714, 7121, 7121, 5713, 5728, + 5723, 7121, 7121, 5715, 5724, 5725, 5727, 5733, 5730, 5735, + 7121, 5738, 5739, 5740, 5736, 5742, 5750, 5743, 7121, 5752, - 5749, 5753, 5755, 7073, 5757, 5758, 5759, 5761, 7073, 5766, - 7073, 5763, 5768, 5769, 5777, 5772, 7073, 5774, 5778, 7073, - 5786, 5788, 5790, 5792, 5780, 5791, 7073, 5797, 5782, 7073, - 5798, 5802, 5805, 5808, 5799, 5810, 5803, 5811, 5812, 5819, - 5821, 5823, 7073, 7073, 5828, 5825, 135, 5837, 5815, 5824, - 5832, 5833, 5840, 5750, 5841, 5843, 7073, 7073, 5846, 7073, - 5847, 5850, 7073, 5835, 5854, 5848, 5856, 5858, 5859, 5861, - 5862, 5865, 5866, 5867, 5868, 5869, 5871, 7073, 5890, 5892, - 5875, 5896, 5897, 5899, 5901, 5903, 5905, 5893, 5907, 5908, - 5885, 5910, 5913, 5914, 5915, 5916, 5917, 5919, 5921, 7073, + 7121, 5753, 5755, 5761, 5756, 5764, 5769, 5765, 5772, 5771, + 5768, 5774, 5775, 7121, 5777, 5778, 7121, 5785, 5784, 5788, + 5782, 5790, 5793, 7121, 5794, 5797, 5801, 5803, 7121, 5805, + 5806, 5807, 5809, 7121, 5814, 7121, 5811, 5816, 5817, 5825, + 5820, 7121, 5822, 5826, 7121, 5834, 5836, 5838, 5840, 5828, + 5839, 7121, 5845, 5830, 7121, 5846, 5850, 5853, 5856, 5847, + 5858, 5851, 5859, 5860, 5867, 5869, 5871, 7121, 7121, 5876, + 5873, 123, 5885, 5863, 5872, 5880, 5881, 5888, 5798, 5889, + 5891, 7121, 7121, 5894, 7121, 5895, 5898, 7121, 5883, 5902, + 5896, 5904, 5906, 5907, 5909, 5910, 5913, 5914, 5915, 5916, - 5923, 5927, 5929, 5872, 5931, 5934, 5935, 7073, 5943, 5938, - 5947, 5944, 7073, 5951, 5948, 5952, 5954, 5955, 7073, 5956, - 5959, 5966, 5967, 5960, 5962, 5968, 5970, 5978, 7073, 5973, - 5975, 5976, 7073, 7073, 7073, 5982, 5989, 5983, 7073, 5991, - 5992, 5993, 5994, 7073, 5996, 5998, 5999, 7073, 7073, 7073, - 6000, 6003, 6001, 7073, 6002, 6015, 7073, 6004, 7073, 6005, - 7073, 6014, 6023, 6020, 6024, 7073, 6027, 6017, 6029, 6034, - 7073, 6037, 6040, 6042, 6044, 6031, 6045, 6047, 7073, 6054, - 6050, 6056, 6058, 6049, 6059, 6060, 6063, 6062, 6072, 6065, - 6070, 7073, 6073, 6074, 6078, 6075, 6082, 6084, 6085, 7073, + 5917, 5919, 7121, 5938, 5940, 5923, 5944, 5945, 5947, 5949, + 5951, 5953, 5941, 5955, 5956, 5933, 5958, 5961, 5962, 5963, + 5964, 5965, 5967, 5969, 7121, 5971, 5975, 5977, 5920, 5979, + 5982, 5983, 7121, 5991, 5986, 5995, 5992, 7121, 5999, 5996, + 6000, 6002, 6003, 7121, 6004, 6007, 6014, 6015, 6008, 6010, + 6016, 6018, 6026, 7121, 6021, 6023, 6024, 7121, 7121, 7121, + 6030, 6037, 6031, 7121, 6039, 6040, 6041, 6042, 7121, 6044, + 6046, 6047, 7121, 7121, 7121, 6048, 6051, 6049, 7121, 6050, + 6063, 7121, 6052, 7121, 6053, 7121, 6062, 6071, 6068, 6072, + 7121, 6075, 6065, 6077, 6082, 7121, 6085, 6088, 6090, 6092, - 6086, 7073, 6088, 7073, 6089, 6091, 6092, 6093, 6094, 6095, - 6096, 6108, 6107, 6098, 6109, 6113, 6114, 6117, 6120, 6124, - 6121, 7073, 7073, 6131, 6127, 7073, 6128, 6136, 7073, 6126, - 7073, 6138, 7073, 6129, 6133, 6139, 6142, 6146, 7073, 7073, - 6153, 6148, 6150, 6160, 6155, 6156, 7073, 6161, 6157, 6163, - 6165, 7073, 6172, 7073, 6167, 6176, 6169, 7073, 6173, 6180, - 6184, 6177, 6181, 6186, 6188, 6189, 6190, 6197, 6193, 6194, - 6196, 6203, 6200, 6204, 6208, 6213, 7073, 7073, 7073, 6209, - 6217, 6224, 6220, 6222, 6229, 6226, 7073, 6227, 6231, 6228, - 6234, 6241, 6238, 6240, 7073, 6236, 6242, 6243, 6245, 6247, + 6079, 6093, 6095, 7121, 6102, 6098, 6104, 6106, 6097, 6107, + 6108, 6111, 6110, 6120, 6113, 6118, 7121, 6121, 6122, 6126, + 6123, 6130, 6132, 6133, 7121, 6134, 7121, 6136, 7121, 6137, + 6139, 6140, 6141, 6142, 6143, 6144, 6156, 6155, 6146, 6157, + 6161, 6162, 6165, 6168, 6172, 6169, 7121, 7121, 6179, 6175, + 7121, 6176, 6184, 7121, 6174, 7121, 6186, 7121, 6177, 6181, + 6187, 6190, 6194, 7121, 7121, 6201, 6196, 6198, 6208, 6203, + 6204, 7121, 6209, 6205, 6211, 6213, 7121, 6220, 7121, 6215, + 6224, 6217, 7121, 6221, 6228, 6232, 6225, 6229, 6234, 6236, + 6237, 6238, 6245, 6241, 6242, 6244, 6251, 6248, 6252, 6256, - 6250, 6249, 6252, 7073, 6263, 6267, 6271, 6254, 6264, 6272, - 6274, 6276, 6280, 6282, 6283, 6284, 6257, 6285, 7073, 7073, - 6287, 6288, 7073, 6292, 6294, 7073, 6289, 7073, 6295, 6297, - 6299, 6298, 6300, 7073, 6303, 6305, 6306, 6307, 6309, 6313, - 6312, 6315, 7073, 6316, 6330, 6323, 6326, 6327, 7073, 7073, - 6328, 6336, 7073, 6338, 6339, 6333, 6346, 6341, 6342, 6352, - 6354, 7073, 6356, 6357, 6348, 6355, 6358, 6361, 6364, 7073, - 6366, 6365, 6367, 6369, 7073, 6372, 6376, 6377, 6378, 6380, - 7073, 6381, 6371, 6388, 6393, 7073, 6383, 6397, 6396, 7073, - 7073, 7073, 6402, 6405, 6406, 7073, 7073, 7073, 7073, 6408, + 6261, 7121, 7121, 7121, 6257, 6265, 6272, 6268, 6270, 6277, + 6274, 7121, 6275, 6279, 6276, 6282, 6289, 6286, 6288, 7121, + 6284, 6290, 6291, 6293, 6295, 6298, 6297, 6300, 7121, 6311, + 6315, 6319, 6302, 6312, 6320, 6322, 6324, 6328, 6330, 6331, + 6332, 6305, 6333, 7121, 7121, 6335, 6336, 7121, 6340, 6342, + 7121, 6337, 7121, 6343, 6345, 6347, 6346, 6348, 7121, 6351, + 6353, 6354, 6355, 6357, 6361, 6360, 6363, 7121, 6364, 6378, + 6371, 6374, 6375, 7121, 7121, 6376, 6384, 7121, 6386, 6387, + 6381, 6394, 6389, 6390, 6400, 6402, 7121, 6404, 6405, 6396, + 6403, 6406, 6409, 6412, 7121, 6414, 6413, 6415, 6417, 7121, - 6411, 6412, 6414, 7073, 6415, 7073, 7073, 6418, 6422, 6426, - 6428, 6435, 6421, 7073, 6429, 6436, 6438, 6439, 6440, 7073, - 7073, 6441, 6443, 6444, 6446, 6448, 6449, 7073, 7073, 6450, - 6452, 6456, 6453, 6455, 7073, 6458, 6461, 6468, 6465, 6471, - 6478, 6480, 6473, 6481, 6482, 6490, 6493, 6483, 6485, 6492, - 6496, 6497, 6495, 6499, 6509, 6504, 6506, 6512, 6507, 6515, - 7073, 7073, 6517, 7073, 6519, 6521, 7073, 6523, 7073, 6525, - 6527, 6529, 6532, 7073, 6534, 6536, 6538, 6540, 6542, 7073, - 6543, 6545, 6547, 6548, 6549, 6550, 7073, 6554, 6555, 6559, - 6551, 6556, 6560, 6562, 6565, 7073, 6567, 6576, 7073, 7073, + 6420, 6424, 6425, 6426, 6428, 7121, 6429, 6419, 6436, 6441, + 7121, 6431, 6445, 6444, 7121, 7121, 7121, 6450, 6453, 6454, + 7121, 7121, 7121, 7121, 6456, 6459, 6460, 6462, 7121, 6463, + 7121, 7121, 6466, 6470, 6474, 6476, 6483, 6469, 7121, 6477, + 6484, 6486, 6487, 6488, 7121, 7121, 6489, 6491, 6492, 6494, + 6496, 6497, 7121, 7121, 6498, 6500, 6504, 6501, 6503, 7121, + 6506, 6509, 6516, 6513, 6519, 6526, 6528, 6521, 6529, 6530, + 6538, 6541, 6531, 6533, 6540, 6544, 6545, 6543, 6547, 6557, + 6552, 6554, 6560, 6555, 6563, 7121, 7121, 6565, 7121, 6567, + 6569, 7121, 6571, 7121, 6573, 6575, 6577, 6580, 7121, 6582, - 6571, 6577, 6573, 6578, 6583, 7073, 6581, 6591, 6586, 6587, - 6588, 6590, 6593, 7073, 6596, 6594, 7073, 7073, 6606, 6597, - 7073, 7073, 6595, 6598, 7073, 7073, 7073, 7073, 7073, 7073, - 7073, 7073, 6611, 6614, 7073, 7073, 6613, 6605, 6620, 7073, - 6623, 7073, 6615, 6624, 6625, 6627, 7073, 6628, 7073, 6630, - 6632, 6631, 6635, 6634, 6639, 6641, 6644, 6646, 6645, 6648, - 6650, 6651, 6655, 6652, 6656, 6666, 6659, 6669, 6662, 6670, - 7073, 7073, 7073, 6658, 6674, 6680, 6676, 6684, 6686, 6689, - 6691, 6681, 6692, 6693, 6697, 6698, 6695, 6699, 6707, 6704, - 6705, 6706, 6709, 6710, 6716, 6722, 7073, 6724, 6713, 6719, + 6584, 6586, 6588, 6590, 7121, 6591, 6593, 6595, 6596, 6597, + 6598, 7121, 6602, 6603, 6607, 6599, 6604, 6608, 6610, 6613, + 7121, 6615, 6624, 7121, 7121, 6619, 6625, 6621, 6626, 6631, + 7121, 6629, 6639, 6634, 6635, 6636, 6638, 6641, 7121, 6644, + 6642, 7121, 7121, 6654, 6645, 7121, 7121, 6643, 6646, 7121, + 7121, 7121, 7121, 7121, 7121, 7121, 7121, 6659, 6662, 7121, + 7121, 6661, 6653, 6668, 7121, 6671, 7121, 6663, 6672, 6673, + 6675, 7121, 6676, 7121, 6678, 6680, 6679, 6683, 6682, 6687, + 6689, 6692, 6694, 6693, 6696, 6698, 6699, 6703, 6700, 6704, + 6714, 6707, 6717, 6710, 6718, 7121, 7121, 7121, 6706, 6722, - 6726, 7073, 6727, 7073, 6729, 7073, 7073, 6732, 6733, 6735, - 6736, 6745, 6746, 6737, 6741, 6744, 6748, 6750, 7073, 6757, - 7073, 7073, 7073, 6752, 6758, 7073, 6760, 6761, 7073, 6759, - 6762, 6764, 6768, 6769, 6766, 6770, 6771, 6787, 7073, 7073, - 6772, 6777, 6780, 6789, 6791, 6790, 6793, 6797, 6798, 6800, - 6801, 6810, 7073, 6807, 6808, 6812, 7073, 6814, 6809, 6815, - 6816, 6817, 6825, 6821, 6824, 7073, 6826, 7073, 6830, 6832, - 6833, 6823, 6831, 6834, 6845, 6843, 6839, 7073, 6849, 6853, - 6851, 6855, 6857, 6859, 6860, 6861, 6863, 6866, 6872, 6869, - 6876, 6877, 6873, 6881, 6878, 7073, 6888, 6879, 7073, 6885, + 6728, 6724, 6732, 6734, 6737, 6739, 6729, 6740, 6741, 6745, + 6746, 6743, 6747, 6755, 6752, 6753, 6754, 6757, 6758, 6764, + 6770, 7121, 6772, 6761, 6767, 6774, 7121, 6775, 7121, 6777, + 7121, 7121, 6780, 6781, 6783, 6784, 6793, 6794, 6785, 6789, + 6792, 6796, 6798, 7121, 6805, 7121, 7121, 7121, 6800, 6806, + 7121, 6808, 6809, 7121, 6807, 6810, 6812, 6816, 6817, 6814, + 6818, 6819, 6835, 7121, 7121, 6820, 6825, 6828, 6837, 6839, + 6838, 6841, 6845, 6846, 6848, 6849, 6858, 7121, 6855, 6856, + 6860, 7121, 6862, 6857, 6863, 6864, 6865, 6873, 6869, 6872, + 7121, 6874, 7121, 6878, 6880, 6881, 6871, 6879, 6882, 6893, - 6889, 6882, 6891, 6895, 7073, 6900, 6893, 6902, 6903, 6906, - 6907, 7073, 6909, 6916, 6911, 7073, 6917, 7073, 7073, 6919, - 6913, 6920, 6926, 6928, 7073, 7073, 7073, 6953, 6960, 6967, - 6974, 6981, 6988, 6995, 88, 7002, 7009, 7016, 7023, 7030, - 7037, 7044, 7051, 7058, 7065 + 6891, 6887, 7121, 6897, 6901, 6899, 6903, 6905, 6907, 6908, + 6909, 6911, 6914, 6920, 6917, 6924, 6925, 6921, 6929, 6926, + 7121, 6936, 6927, 7121, 6933, 6937, 6930, 6939, 6943, 7121, + 6948, 6941, 6950, 6951, 6954, 6955, 7121, 6957, 6964, 6959, + 7121, 6965, 7121, 7121, 6967, 6961, 6968, 6974, 6976, 7121, + 7121, 7121, 7001, 7008, 7015, 7022, 7029, 7036, 7043, 88, + 7050, 7057, 7064, 7071, 7078, 7085, 7092, 7099, 7106, 7113 } ; -static const flex_int16_t yy_def[3646] = +static const flex_int16_t yy_def[3671] = { 0, - 3627, 1, 3628, 3628, 3629, 3629, 3630, 3630, 3631, 3631, - 3632, 3632, 3633, 3633, 3634, 3634, 3627, 3635, 3627, 3627, - 3627, 3627, 3636, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3637, 3627, 3627, 3627, - 3637, 3638, 3627, 3627, 3627, 3638, 3639, 3627, 3627, 3627, - 3627, 3639, 3640, 3627, 3627, 3627, 3640, 3641, 3627, 3642, - 3627, 3641, 3641, 3643, 3627, 3627, 3627, 3627, 3643, 3644, - 3627, 3627, 3627, 3644, 3635, 3635, 3627, 3645, 3636, 3645, - 3636, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3652, 1, 3653, 3653, 3654, 3654, 3655, 3655, 3656, 3656, + 3657, 3657, 3658, 3658, 3659, 3659, 3652, 3660, 3652, 3652, + 3652, 3652, 3661, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3662, 3652, 3652, 3652, + 3662, 3663, 3652, 3652, 3652, 3663, 3664, 3652, 3652, 3652, + 3652, 3664, 3665, 3652, 3652, 3652, 3665, 3666, 3652, 3667, + 3652, 3666, 3666, 3668, 3652, 3652, 3652, 3652, 3668, 3669, + 3652, 3652, 3652, 3669, 3660, 3660, 3652, 3670, 3661, 3670, + 3661, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3637, - 3637, 3638, 3638, 3639, 3639, 3627, 3640, 3640, 3641, 3641, - 3642, 3642, 3641, 3643, 3643, 3627, 3644, 3644, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3662, 3662, 3663, 3663, 3664, 3664, 3652, 3665, 3665, 3666, + 3666, 3667, 3667, 3666, 3668, 3668, 3652, 3669, 3669, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3666, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3666, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3666, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3641, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3627, 3627, 3635, 3627, 3627, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3666, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3652, 3660, 3652, 3652, 3660, 3652, + 3652, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3641, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3666, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3652, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3641, 3641, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3666, + 3666, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3641, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3666, 3660, 3660, 3660, 3660, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3652, 3660, 3652, 3660, 3660, 3660, + 3660, 3660, 3652, 3660, 3652, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3666, - 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3652, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3652, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3666, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3652, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3627, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3641, 3635, 3627, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3652, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3666, 3660, 3652, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3652, 3660, 3660, 3660, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3627, 3635, + 3660, 3660, 3660, 3652, 3652, 3660, 3652, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, - 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3652, 3652, 3660, 3652, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3666, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3652, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3652, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3641, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3652, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3666, 3660, 3652, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3627, - 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, 3627, 3635, - 3627, 3635, 3635, 3627, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3652, 3652, 3660, 3660, 3660, 3660, 3660, + 3652, 3652, 3660, 3652, 3660, 3652, 3660, 3660, 3652, 3652, + 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3641, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3666, 3660, 3660, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3652, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3627, 3627, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3627, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3652, 3652, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3627, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3627, 3635, 3635, 3635, 3627, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3660, 3660, 3660, 3652, 3660, 3652, 3652, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3666, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3652, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, + 3660, 3660, 3660, 3652, 3660, 3652, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3652, 3660, 3660, + 3660, 3652, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3627, 3635, 3635, 3641, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, 3627, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3652, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3652, 3660, 3652, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3652, 3660, + 3660, 3666, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3652, 3660, 3652, 3660, 3660, 3652, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3627, 3627, 3627, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3627, 3627, 3627, - 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3635, 3627, 3635, - 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3652, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3652, 3652, 3652, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3652, 3652, 3652, 3660, 3660, 3660, 3652, 3660, + 3660, 3652, 3660, 3652, 3660, 3652, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, - 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3627, 3635, 3635, 3627, 3635, 3635, 3627, 3635, - 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3652, 3660, 3652, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3652, 3660, 3660, + 3652, 3660, 3660, 3652, 3660, 3652, 3660, 3652, 3660, 3660, + 3660, 3660, 3660, 3652, 3652, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3652, 3660, 3652, 3660, + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, - 3635, 3635, 3627, 3635, 3635, 3627, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3627, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3627, - 3627, 3627, 3635, 3635, 3635, 3627, 3627, 3627, 3627, 3635, + 3660, 3652, 3652, 3652, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3652, 3660, 3660, 3652, 3660, 3660, + 3652, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, + 3660, 3660, 3660, 3652, 3652, 3660, 3660, 3652, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3652, - 3635, 3635, 3635, 3627, 3635, 3627, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3627, 3635, 3627, 3635, 3635, 3627, 3635, 3627, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3627, + 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3660, 3652, 3652, 3652, 3660, 3660, 3660, + 3652, 3652, 3652, 3652, 3660, 3660, 3660, 3660, 3652, 3660, + 3652, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3660, 3660, 3660, 3652, 3652, 3660, 3660, 3660, 3660, + 3660, 3660, 3652, 3652, 3660, 3660, 3660, 3660, 3660, 3652, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3652, 3652, 3660, 3652, 3660, + 3660, 3652, 3660, 3652, 3660, 3660, 3660, 3660, 3652, 3660, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3627, 3635, 3635, - 3627, 3627, 3635, 3635, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3635, 3635, 3627, 3627, 3635, 3635, 3635, 3627, - 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3627, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3652, 3652, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, + 3660, 3652, 3652, 3660, 3660, 3652, 3652, 3660, 3660, 3652, + 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3660, 3660, 3652, + 3652, 3660, 3660, 3660, 3652, 3660, 3652, 3660, 3660, 3660, + 3660, 3652, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3652, 3652, 3652, 3660, 3660, - 3635, 3627, 3635, 3627, 3635, 3627, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3627, 3627, 3627, 3635, 3635, 3627, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3635, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3652, 3660, 3652, 3660, + 3652, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3660, 3652, 3652, 3652, 3660, 3660, + 3652, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3652, 3652, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, + 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3627, 3635, 3627, 3627, 3635, - 3635, 3635, 3635, 3635, 3627, 3627, 0, 3627, 3627, 3627, - 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3627, 3627, 3627 + 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3652, 3660, 3660, 3652, 3660, 3660, 3660, 3660, 3660, 3652, + 3660, 3660, 3660, 3660, 3660, 3660, 3652, 3660, 3660, 3660, + 3652, 3660, 3652, 3652, 3660, 3660, 3660, 3660, 3660, 3652, + 3652, 0, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, + 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652 } ; -static const flex_int16_t yy_nxt[7114] = +static const flex_int16_t yy_nxt[7162] = { 0, 18, 19, 20, 21, 22, 23, 22, 18, 18, 18, 18, 18, 22, 24, 25, 26, 27, 28, 29, 30, @@ -1625,785 +1632,790 @@ static const flex_int16_t yy_nxt[7114] = 48, 49, 50, 48, 49, 50, 53, 54, 53, 54, 55, 51, 55, 85, 51, 85, 85, 56, 85, 56, 58, 59, 60, 61, 85, 22, 58, 59, 60, 61, - 86, 22, 62, 64, 65, 66, 86, 97, 62, 64, - 65, 66, 87, 86, 67, 119, 88, 108, 85, 86, + 86, 22, 62, 64, 65, 66, 86, 98, 62, 64, + 65, 66, 87, 86, 67, 120, 88, 109, 85, 86, 67, 19, 20, 21, 69, 70, 71, 75, 76, 77, - 78, 86, 22, 72, 121, 86, 120, 109, 86, 79, - 160, 160, 73, 19, 20, 21, 69, 70, 71, 75, - 76, 77, 78, 187, 22, 72, 81, 82, 83, 130, - 90, 79, 90, 90, 73, 90, 86, 84, 81, 82, - 83, 90, 91, 86, 86, 98, 92, 93, 170, 84, - 94, 159, 99, 86, 110, 95, 100, 162, 86, 101, - 162, 170, 86, 112, 96, 86, 167, 167, 111, 86, - 102, 113, 137, 115, 103, 173, 116, 104, 86, 105, - 106, 179, 114, 117, 170, 118, 86, 122, 86, 126, - 107, 86, 156, 127, 86, 123, 157, 184, 86, 138, - - 158, 124, 87, 139, 86, 125, 88, 128, 180, 129, - 86, 131, 86, 140, 141, 132, 142, 143, 86, 133, - 144, 86, 148, 86, 149, 134, 86, 145, 135, 86, - 152, 146, 147, 150, 86, 136, 177, 177, 183, 151, - 153, 181, 196, 189, 154, 155, 164, 86, 164, 164, - 90, 164, 90, 90, 169, 90, 169, 169, 174, 169, - 174, 174, 172, 174, 85, 86, 85, 85, 90, 85, - 90, 90, 290, 90, 86, 85, 86, 182, 86, 90, - 91, 185, 190, 188, 86, 86, 197, 86, 191, 86, - 192, 86, 86, 208, 186, 86, 86, 86, 86, 86, - - 200, 199, 193, 194, 86, 198, 86, 195, 86, 201, - 86, 202, 246, 210, 206, 203, 204, 207, 209, 86, - 211, 216, 212, 205, 86, 213, 86, 86, 86, 218, - 86, 219, 86, 221, 86, 86, 227, 222, 214, 215, - 86, 228, 226, 224, 86, 86, 217, 230, 225, 86, - 86, 220, 86, 223, 231, 233, 234, 229, 86, 86, - 86, 86, 232, 236, 86, 238, 86, 241, 235, 239, - 86, 86, 86, 86, 243, 86, 237, 374, 86, 86, - 86, 240, 86, 244, 242, 249, 252, 253, 86, 245, - 254, 248, 86, 86, 86, 255, 250, 247, 261, 258, - - 251, 262, 86, 86, 260, 264, 86, 86, 86, 86, - 259, 268, 256, 86, 265, 257, 86, 86, 263, 267, - 269, 271, 160, 160, 86, 162, 266, 270, 162, 274, - 164, 272, 164, 164, 340, 164, 167, 167, 169, 86, - 169, 169, 90, 169, 90, 90, 170, 90, 174, 273, - 174, 174, 275, 174, 172, 177, 177, 277, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 276, 279, 86, - 282, 285, 281, 86, 278, 280, 86, 288, 287, 284, - 178, 291, 283, 86, 289, 286, 86, 292, 293, 86, - 294, 320, 86, 297, 86, 295, 86, 302, 298, 86, - - 304, 86, 86, 299, 86, 305, 86, 307, 86, 300, - 301, 303, 296, 308, 86, 311, 309, 86, 86, 86, - 306, 86, 313, 86, 314, 86, 86, 86, 176, 86, - 86, 86, 321, 315, 310, 322, 328, 316, 318, 86, - 317, 319, 86, 323, 312, 331, 324, 86, 325, 329, - 335, 86, 86, 332, 86, 330, 86, 333, 337, 338, - 326, 376, 327, 86, 86, 86, 341, 336, 86, 334, - 343, 86, 86, 342, 339, 344, 86, 345, 86, 86, - 346, 348, 86, 86, 86, 347, 86, 86, 350, 86, - 86, 86, 349, 86, 86, 352, 357, 86, 355, 353, - - 86, 86, 86, 358, 351, 362, 356, 364, 354, 86, - 363, 86, 359, 86, 86, 86, 360, 366, 368, 371, - 86, 361, 86, 86, 86, 86, 377, 365, 373, 378, - 86, 380, 86, 369, 370, 86, 367, 86, 86, 86, - 372, 375, 86, 383, 384, 86, 385, 170, 387, 379, - 381, 86, 86, 382, 86, 86, 86, 388, 86, 392, - 86, 86, 86, 391, 86, 86, 398, 396, 394, 399, - 386, 395, 86, 86, 389, 86, 86, 402, 400, 390, - 393, 401, 86, 86, 86, 86, 86, 397, 86, 409, - 408, 86, 86, 412, 410, 86, 407, 403, 404, 86, - - 406, 411, 413, 405, 86, 86, 86, 415, 86, 416, - 86, 86, 86, 86, 419, 86, 86, 420, 86, 86, - 86, 431, 414, 424, 421, 422, 417, 418, 426, 86, - 86, 86, 427, 425, 86, 428, 86, 423, 86, 433, - 429, 86, 434, 432, 86, 86, 86, 86, 86, 86, - 440, 436, 86, 86, 86, 441, 86, 430, 443, 439, - 86, 86, 437, 86, 446, 86, 86, 435, 438, 448, - 451, 442, 86, 86, 86, 444, 86, 450, 445, 447, - 86, 86, 460, 452, 453, 86, 449, 86, 86, 86, - 462, 467, 461, 175, 468, 86, 454, 472, 463, 455, - - 464, 469, 473, 86, 456, 457, 458, 459, 86, 86, - 470, 471, 474, 465, 475, 86, 466, 86, 86, 86, - 86, 86, 86, 484, 86, 86, 86, 486, 482, 86, - 485, 483, 86, 478, 476, 479, 86, 477, 480, 481, - 86, 487, 86, 86, 488, 86, 494, 489, 490, 86, - 86, 491, 86, 86, 495, 500, 496, 86, 501, 86, - 493, 86, 502, 492, 86, 497, 86, 86, 512, 499, - 86, 503, 498, 505, 514, 506, 86, 504, 971, 508, - 86, 507, 86, 513, 515, 86, 86, 86, 86, 86, - 86, 516, 509, 86, 170, 510, 530, 511, 86, 517, - - 86, 518, 532, 86, 533, 546, 86, 519, 529, 535, - 86, 520, 573, 86, 531, 552, 521, 534, 86, 522, - 86, 523, 547, 524, 537, 536, 548, 86, 86, 86, - 86, 549, 86, 550, 86, 86, 525, 553, 555, 526, - 551, 527, 557, 528, 86, 554, 538, 539, 86, 86, - 86, 86, 86, 556, 558, 559, 540, 541, 542, 543, - 544, 561, 86, 545, 560, 86, 567, 86, 86, 565, - 563, 562, 566, 568, 570, 86, 571, 569, 86, 86, - 86, 575, 86, 86, 86, 86, 86, 86, 564, 578, - 86, 579, 580, 574, 86, 86, 86, 170, 572, 577, - - 590, 86, 582, 585, 86, 581, 583, 576, 86, 584, - 86, 593, 86, 586, 587, 588, 86, 86, 86, 86, - 591, 86, 86, 594, 609, 86, 168, 599, 600, 86, - 86, 598, 589, 595, 610, 592, 86, 596, 86, 601, - 597, 602, 86, 611, 86, 613, 614, 603, 612, 86, - 615, 86, 86, 617, 86, 604, 605, 616, 86, 606, - 607, 618, 86, 608, 86, 621, 86, 619, 623, 86, - 86, 86, 86, 626, 620, 624, 627, 86, 86, 622, - 86, 628, 86, 86, 625, 86, 86, 633, 631, 86, - 632, 86, 86, 629, 86, 634, 86, 86, 86, 639, - - 86, 630, 640, 635, 641, 86, 638, 86, 643, 636, - 637, 86, 86, 646, 86, 86, 644, 642, 86, 645, - 86, 648, 86, 650, 86, 86, 86, 86, 86, 86, - 86, 654, 662, 652, 86, 86, 647, 86, 86, 649, - 656, 86, 86, 651, 663, 682, 653, 655, 657, 660, - 658, 661, 659, 664, 86, 86, 666, 86, 86, 86, - 665, 669, 667, 86, 86, 668, 673, 86, 86, 676, - 86, 670, 86, 672, 86, 86, 86, 675, 671, 86, - 86, 679, 678, 86, 86, 683, 86, 674, 86, 685, - 86, 86, 680, 677, 86, 86, 86, 86, 684, 86, - - 681, 700, 686, 688, 86, 712, 166, 687, 86, 689, - 699, 697, 86, 86, 690, 698, 691, 702, 701, 86, - 703, 86, 692, 704, 693, 86, 705, 694, 695, 710, - 706, 86, 711, 713, 696, 86, 708, 86, 86, 86, - 707, 717, 86, 86, 714, 86, 720, 86, 86, 722, - 715, 86, 86, 716, 86, 86, 709, 86, 726, 86, - 86, 86, 86, 719, 724, 718, 723, 729, 86, 725, - 730, 86, 721, 86, 727, 86, 86, 733, 86, 731, - 735, 728, 734, 732, 170, 737, 86, 738, 736, 86, - 86, 86, 86, 739, 86, 86, 86, 746, 744, 86, - - 749, 86, 86, 741, 86, 740, 750, 742, 743, 745, - 748, 752, 86, 86, 86, 86, 751, 86, 754, 86, - 86, 86, 86, 747, 86, 753, 757, 758, 755, 759, - 86, 766, 86, 86, 756, 763, 760, 86, 762, 761, - 764, 86, 768, 765, 767, 86, 769, 86, 86, 770, - 86, 771, 86, 772, 775, 774, 86, 86, 773, 86, - 86, 778, 86, 777, 776, 86, 86, 86, 86, 781, - 86, 86, 782, 780, 786, 785, 86, 86, 86, 86, - 86, 779, 788, 86, 790, 86, 792, 86, 86, 784, - 86, 783, 86, 86, 86, 789, 787, 791, 795, 799, - - 165, 86, 793, 86, 86, 86, 797, 86, 800, 794, - 86, 796, 86, 802, 798, 801, 86, 807, 803, 86, - 809, 804, 805, 86, 810, 806, 86, 86, 811, 814, - 808, 86, 86, 86, 816, 86, 86, 817, 86, 820, - 812, 815, 813, 819, 86, 86, 86, 86, 86, 821, - 86, 86, 86, 826, 824, 828, 86, 86, 86, 818, - 86, 822, 835, 825, 823, 86, 829, 86, 86, 86, - 86, 827, 163, 831, 833, 836, 832, 830, 86, 834, - 86, 837, 838, 839, 86, 86, 86, 840, 842, 86, - 86, 841, 86, 847, 843, 845, 86, 86, 849, 86, - - 850, 848, 86, 844, 86, 86, 86, 853, 86, 86, - 852, 846, 854, 86, 857, 86, 860, 86, 86, 855, - 86, 856, 86, 863, 86, 865, 862, 851, 858, 859, - 86, 86, 86, 870, 861, 868, 86, 866, 867, 86, - 864, 86, 86, 876, 86, 86, 872, 874, 871, 86, - 869, 878, 875, 86, 86, 86, 873, 880, 86, 86, - 86, 86, 886, 86, 879, 86, 86, 887, 86, 877, - 86, 86, 881, 86, 888, 86, 882, 883, 893, 884, - 86, 885, 896, 86, 891, 889, 890, 894, 86, 86, - 86, 86, 892, 86, 86, 895, 86, 86, 86, 86, - - 903, 899, 86, 897, 898, 86, 86, 86, 86, 86, - 900, 934, 86, 902, 901, 904, 906, 911, 905, 86, - 913, 86, 912, 907, 908, 909, 910, 86, 916, 86, - 86, 914, 86, 86, 86, 915, 86, 919, 86, 86, - 917, 86, 86, 923, 918, 86, 924, 927, 86, 920, - 86, 922, 925, 921, 86, 928, 86, 86, 86, 170, - 86, 930, 935, 926, 936, 931, 929, 933, 86, 86, - 86, 932, 937, 86, 938, 86, 86, 86, 86, 944, - 86, 943, 947, 86, 940, 86, 945, 939, 86, 86, - 86, 941, 942, 948, 946, 951, 950, 86, 949, 86, - - 86, 86, 86, 953, 86, 957, 86, 86, 86, 954, - 952, 86, 958, 959, 86, 86, 86, 86, 86, 86, - 956, 86, 973, 86, 1006, 955, 960, 972, 976, 975, - 970, 161, 961, 86, 962, 86, 86, 963, 86, 974, - 964, 86, 978, 86, 965, 86, 979, 966, 86, 977, - 86, 980, 981, 985, 967, 968, 984, 969, 86, 86, - 86, 982, 983, 86, 986, 987, 86, 988, 86, 86, - 989, 994, 86, 86, 86, 990, 997, 999, 993, 1001, - 86, 991, 992, 86, 998, 86, 86, 996, 1003, 995, - 1007, 86, 86, 1000, 86, 1008, 86, 1015, 1009, 1002, - - 1004, 86, 1010, 86, 86, 1013, 86, 1011, 1012, 86, - 86, 1005, 1017, 86, 1014, 1016, 86, 86, 1018, 86, - 86, 86, 86, 1021, 86, 1020, 86, 1025, 86, 1019, - 86, 1028, 1024, 86, 86, 86, 1026, 1032, 86, 86, - 1022, 1023, 1027, 86, 1033, 86, 1030, 1034, 86, 1035, - 1037, 1029, 1038, 86, 1036, 86, 1040, 1031, 86, 86, - 1042, 86, 86, 86, 1041, 86, 86, 1044, 1043, 1046, - 86, 1045, 1039, 1047, 86, 86, 86, 86, 86, 86, - 86, 86, 1050, 1048, 1051, 1052, 86, 1056, 86, 86, - 1060, 86, 1059, 86, 1049, 86, 86, 1053, 1057, 1058, - - 1055, 86, 1054, 86, 86, 86, 86, 86, 1067, 86, - 1062, 1065, 1063, 86, 1061, 86, 1066, 86, 1068, 86, - 86, 86, 1076, 1069, 1073, 86, 1071, 86, 1064, 1074, - 86, 86, 1072, 86, 1075, 86, 86, 86, 1082, 1084, - 1070, 86, 1077, 86, 1078, 1079, 1083, 1085, 86, 86, - 86, 1081, 86, 86, 1087, 1080, 86, 86, 86, 86, - 86, 86, 1086, 1095, 1088, 1098, 1093, 86, 86, 86, - 1089, 86, 1090, 86, 86, 1091, 1092, 1099, 1096, 1100, - 1097, 1094, 86, 86, 86, 1101, 86, 86, 1103, 1104, - 1105, 1107, 1102, 1108, 86, 86, 86, 86, 1106, 86, - - 86, 86, 86, 1119, 86, 1111, 1109, 1113, 86, 86, - 1120, 86, 1122, 86, 86, 1110, 86, 1112, 86, 86, - 1114, 1116, 86, 1115, 1117, 1121, 1125, 1123, 1118, 1126, - 86, 86, 86, 86, 1124, 86, 1131, 1127, 1128, 86, - 1133, 1134, 1129, 1132, 86, 1135, 86, 86, 86, 1136, - 1130, 86, 1139, 86, 1141, 86, 86, 86, 86, 86, - 86, 1138, 1137, 1144, 1143, 1147, 86, 1151, 86, 86, - 1148, 170, 1149, 1140, 1142, 86, 1145, 86, 1146, 1150, - 86, 86, 1154, 86, 86, 86, 86, 86, 1167, 1153, - 1152, 86, 1170, 86, 86, 1168, 86, 1157, 1158, 1155, - - 86, 86, 86, 86, 1159, 1156, 1172, 1160, 86, 1169, - 1179, 1161, 86, 1162, 86, 1173, 1236, 1163, 86, 1164, - 86, 1171, 86, 1175, 1165, 1177, 1174, 86, 1176, 1166, - 1178, 86, 86, 86, 1180, 86, 1181, 1183, 1187, 1186, - 1184, 86, 86, 86, 86, 86, 86, 178, 1182, 86, - 1185, 1192, 86, 1191, 1194, 1188, 1195, 1190, 1193, 1196, - 1197, 86, 86, 1189, 1198, 86, 1199, 1200, 86, 86, - 86, 86, 86, 86, 86, 86, 1214, 86, 1211, 86, - 86, 86, 86, 1210, 1215, 86, 1213, 1201, 1202, 86, - 1203, 1212, 86, 1216, 86, 1204, 1217, 1205, 1222, 86, - - 1219, 1220, 86, 1206, 86, 86, 1218, 1223, 1207, 1208, - 1221, 1224, 86, 86, 86, 1209, 1229, 86, 86, 86, - 1232, 86, 1230, 1225, 1233, 86, 86, 1237, 1226, 86, - 86, 1227, 1228, 86, 1235, 1238, 86, 86, 86, 1231, - 86, 86, 1243, 86, 1234, 86, 1240, 1241, 86, 86, - 1244, 86, 86, 86, 1246, 1239, 1242, 86, 86, 86, - 86, 86, 1245, 86, 86, 1247, 1248, 1251, 1252, 1250, - 1253, 1249, 1255, 1258, 86, 1257, 86, 1254, 86, 1256, - 86, 1259, 86, 86, 86, 86, 86, 86, 176, 1264, - 1265, 1266, 86, 1260, 1261, 86, 1267, 1269, 1263, 1270, - - 1262, 86, 1268, 86, 1271, 86, 86, 1272, 86, 1275, - 86, 86, 86, 1277, 1276, 86, 1278, 86, 86, 1273, - 1279, 86, 86, 86, 1274, 1280, 1286, 86, 86, 86, - 1281, 1288, 86, 175, 1282, 1284, 86, 86, 1285, 1283, - 86, 1290, 86, 1289, 86, 1292, 86, 1287, 86, 1293, - 1294, 86, 86, 1295, 1291, 86, 1296, 86, 1297, 86, - 1299, 1298, 1300, 86, 86, 86, 86, 1305, 86, 1302, - 86, 1301, 1304, 86, 1306, 86, 86, 1307, 86, 1309, - 1303, 86, 1310, 1308, 86, 86, 86, 1316, 1311, 1314, - 1317, 1351, 86, 86, 1318, 86, 86, 1312, 1315, 1321, - - 86, 86, 86, 86, 1313, 86, 1319, 1320, 1322, 1323, - 1325, 86, 86, 1327, 86, 86, 1324, 86, 86, 86, - 1329, 86, 1328, 1330, 86, 86, 86, 1331, 86, 1332, - 86, 1335, 1326, 1336, 86, 86, 86, 86, 86, 1338, - 86, 1342, 1343, 1333, 86, 1334, 1337, 86, 86, 1340, - 86, 86, 1346, 86, 1339, 1344, 1345, 1341, 86, 86, - 86, 86, 86, 1347, 1348, 86, 86, 1357, 86, 86, - 1349, 1353, 170, 86, 1359, 86, 86, 1350, 1352, 86, - 1354, 1358, 86, 86, 1360, 1356, 86, 86, 1365, 1362, - 1355, 1363, 1361, 1369, 1364, 1366, 1367, 86, 1370, 86, - - 86, 86, 86, 86, 86, 1373, 1372, 1368, 86, 86, - 86, 86, 86, 1374, 86, 86, 1371, 1377, 86, 1383, - 86, 1379, 1380, 1375, 1376, 86, 1378, 86, 86, 1381, - 86, 86, 170, 86, 86, 1394, 1387, 1382, 1389, 1384, - 86, 86, 86, 1386, 1393, 1385, 1395, 1390, 86, 1391, - 86, 1388, 1392, 1396, 86, 1397, 1398, 86, 86, 86, - 1399, 86, 86, 86, 1406, 86, 1403, 86, 1402, 1400, - 86, 86, 1407, 86, 86, 1405, 1401, 1411, 86, 1408, - 86, 1404, 1409, 86, 86, 1412, 86, 86, 1413, 1415, - 1416, 86, 1410, 86, 1414, 86, 1417, 86, 86, 86, - - 1421, 86, 86, 86, 86, 168, 1418, 86, 1419, 1422, - 1424, 1425, 86, 1423, 1420, 86, 86, 86, 1429, 1431, - 1426, 86, 1428, 1427, 86, 86, 1434, 1432, 86, 86, - 1430, 86, 1441, 86, 86, 86, 1433, 1443, 86, 1435, - 1436, 1437, 86, 86, 86, 86, 86, 1438, 1440, 86, - 1444, 1449, 86, 1446, 1442, 1451, 1439, 86, 1445, 86, - 1452, 86, 1447, 86, 1450, 1448, 86, 86, 1456, 86, - 166, 1466, 1465, 1454, 86, 1467, 1453, 86, 86, 1455, - 86, 1457, 1464, 1468, 1470, 1458, 86, 86, 1459, 1460, - 86, 86, 1471, 1461, 86, 1469, 1472, 86, 1473, 1462, - - 86, 1475, 86, 1463, 86, 1476, 1480, 1477, 86, 86, - 86, 86, 86, 86, 86, 1474, 1483, 1486, 1481, 1487, - 86, 86, 1531, 86, 1478, 86, 1479, 1484, 86, 86, - 1482, 86, 1485, 1488, 1490, 1489, 86, 86, 1491, 86, - 1498, 1496, 86, 1492, 86, 1493, 86, 1494, 1502, 1495, - 86, 1497, 1499, 1500, 86, 86, 1506, 1501, 86, 86, - 1504, 1507, 86, 1505, 86, 1503, 86, 1508, 86, 1510, - 86, 86, 86, 1516, 86, 1517, 86, 1512, 86, 86, - 1511, 1509, 86, 86, 86, 86, 1515, 1521, 1518, 1513, - 1514, 1519, 1520, 86, 1523, 86, 86, 86, 1522, 86, - - 1524, 86, 1527, 1528, 86, 1530, 86, 86, 86, 86, - 1532, 86, 86, 1525, 1529, 86, 1533, 1535, 1536, 86, - 1534, 1526, 1538, 86, 86, 1539, 86, 86, 86, 1537, - 86, 1540, 86, 1541, 1544, 86, 1542, 86, 1549, 86, - 1547, 86, 86, 86, 86, 1546, 1550, 86, 1543, 1552, - 1545, 1551, 1548, 86, 86, 86, 1554, 1553, 1555, 86, - 1557, 86, 86, 86, 86, 1564, 1559, 1556, 1561, 86, - 1560, 86, 1562, 1558, 86, 86, 1563, 86, 86, 1565, - 1570, 86, 1571, 1567, 86, 1568, 86, 86, 86, 1572, - 1574, 86, 1573, 1566, 1569, 86, 86, 86, 1578, 86, - - 1575, 86, 86, 86, 86, 170, 86, 1580, 1577, 86, - 1586, 1587, 86, 1582, 1576, 86, 86, 86, 1588, 1589, - 1583, 1579, 1581, 86, 86, 86, 1584, 86, 86, 1590, - 86, 86, 1585, 86, 1597, 1591, 86, 86, 86, 1594, - 86, 86, 1595, 1592, 1593, 1601, 1602, 86, 1596, 86, - 86, 1598, 86, 1606, 1604, 1600, 86, 1605, 1607, 86, - 1610, 1599, 86, 86, 1603, 1609, 86, 86, 1608, 86, - 86, 1618, 1615, 86, 1620, 1616, 1611, 86, 1612, 1617, - 86, 1613, 86, 86, 1614, 1623, 1621, 1619, 1622, 86, - 1624, 86, 86, 86, 86, 86, 86, 86, 1628, 1629, - - 1630, 86, 1625, 86, 86, 86, 1633, 86, 86, 1639, - 1627, 86, 1638, 86, 1631, 1626, 86, 1632, 1635, 86, - 86, 1642, 86, 1634, 86, 1636, 1637, 86, 86, 86, - 86, 1640, 1643, 1646, 86, 1641, 86, 86, 1644, 1650, - 86, 86, 1652, 1645, 1647, 1648, 86, 1649, 1651, 86, - 1656, 86, 86, 86, 1653, 1655, 86, 1660, 1661, 1662, - 86, 1654, 1658, 86, 86, 86, 1657, 86, 1664, 1665, - 86, 86, 1659, 86, 1663, 86, 1670, 1666, 1671, 1667, - 1669, 1672, 86, 86, 86, 86, 1673, 86, 86, 1674, - 1677, 86, 86, 86, 1668, 86, 1678, 86, 86, 86, - - 86, 1680, 1679, 86, 1685, 86, 1684, 1681, 1675, 86, - 1676, 1682, 86, 1683, 86, 86, 1691, 1687, 86, 1688, - 1686, 1692, 86, 1693, 1690, 86, 1689, 86, 1694, 86, - 86, 1696, 86, 86, 86, 1695, 1699, 1697, 1700, 86, - 1704, 86, 86, 86, 1698, 86, 86, 1705, 86, 1708, - 86, 1701, 1711, 86, 1702, 86, 1710, 1703, 86, 86, - 86, 1706, 86, 86, 1709, 86, 86, 1712, 86, 1707, - 86, 1720, 1713, 86, 86, 86, 1721, 1717, 1714, 1715, - 86, 1716, 86, 1719, 1728, 1722, 1718, 1724, 1725, 86, - 1726, 86, 86, 1723, 86, 1729, 86, 1727, 86, 86, - - 1732, 86, 86, 1730, 1733, 86, 86, 1736, 86, 1731, - 1740, 86, 1742, 1741, 1737, 86, 86, 1734, 86, 1735, - 1745, 86, 1739, 86, 86, 1738, 86, 86, 1746, 1744, - 1743, 1747, 86, 86, 86, 86, 1748, 86, 1753, 1754, - 86, 1749, 1750, 1751, 86, 86, 86, 1758, 1759, 86, - 1757, 1761, 86, 1752, 86, 1755, 1756, 86, 1763, 86, - 1762, 86, 86, 86, 86, 86, 86, 1767, 86, 1760, - 86, 86, 1772, 86, 86, 1770, 86, 1764, 1765, 1766, - 86, 1778, 86, 86, 1779, 1776, 1768, 86, 1769, 1773, - 1771, 86, 86, 86, 1774, 1775, 1777, 86, 86, 86, - - 1780, 86, 1785, 86, 86, 86, 1790, 86, 1782, 1788, - 1781, 86, 86, 1786, 86, 1791, 86, 1793, 1784, 86, - 1789, 1787, 1783, 86, 86, 86, 86, 170, 1797, 1800, - 86, 1799, 1792, 86, 1796, 86, 1794, 86, 1795, 86, - 1801, 86, 86, 1804, 1798, 86, 1802, 1803, 86, 86, - 1811, 86, 86, 1805, 86, 1806, 1812, 86, 1807, 1808, - 1815, 86, 1809, 86, 86, 86, 1816, 1819, 1817, 1821, - 1810, 86, 1813, 86, 1814, 86, 1820, 1823, 86, 1825, - 86, 86, 86, 86, 1818, 86, 86, 86, 1827, 86, - 1828, 86, 1824, 1822, 86, 1830, 86, 1831, 86, 86, - - 1826, 1832, 1835, 86, 1836, 86, 1834, 1833, 86, 86, - 1829, 86, 1840, 1843, 1845, 1841, 1837, 1838, 86, 86, - 86, 86, 86, 1844, 1851, 86, 1848, 1842, 1839, 1847, - 1846, 86, 86, 1853, 1850, 1854, 86, 86, 86, 86, - 86, 86, 1855, 86, 1856, 86, 1857, 1849, 1858, 1860, - 86, 86, 86, 86, 86, 1859, 1852, 1862, 1861, 86, - 1865, 1866, 1864, 1867, 86, 86, 86, 86, 1869, 86, - 1868, 1863, 86, 1875, 86, 1870, 86, 1871, 1872, 86, - 86, 1873, 1874, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 1884, 1883, 86, 86, 86, 86, 1878, 1876, - - 1879, 1880, 1886, 1877, 1889, 1890, 1881, 86, 1887, 1888, - 1882, 86, 86, 1885, 86, 86, 86, 86, 1897, 1895, - 86, 86, 1899, 86, 86, 86, 86, 1891, 1892, 1894, - 1898, 1901, 86, 1903, 1893, 86, 1902, 1896, 86, 1905, - 1900, 86, 86, 86, 86, 86, 86, 86, 86, 1936, - 1904, 1908, 1910, 1911, 86, 86, 1912, 1917, 1909, 1907, - 86, 1914, 1906, 1913, 1918, 86, 1915, 1919, 86, 86, - 86, 86, 1920, 1916, 1922, 1923, 86, 86, 86, 86, - 86, 1927, 86, 1924, 1926, 1928, 86, 1921, 86, 86, - 86, 86, 1937, 86, 86, 86, 1925, 1931, 86, 1935, - - 1933, 1929, 1930, 1934, 86, 1938, 86, 86, 1932, 86, - 1944, 86, 86, 1941, 1939, 1945, 86, 1940, 86, 86, - 1942, 1947, 86, 1943, 1946, 86, 1950, 86, 1953, 86, - 1949, 1952, 1954, 86, 1951, 86, 1948, 86, 1955, 86, - 1959, 86, 1957, 1963, 86, 1958, 86, 1960, 1964, 86, - 86, 86, 1956, 86, 165, 86, 1968, 1970, 1965, 1962, - 1961, 1966, 1973, 86, 1972, 86, 86, 1969, 86, 86, - 1976, 1974, 1967, 1971, 86, 86, 86, 86, 1980, 86, - 1977, 1984, 86, 1975, 86, 86, 86, 86, 1982, 86, - 1985, 1979, 1981, 86, 1983, 1978, 86, 86, 86, 163, - - 86, 86, 1990, 86, 1989, 1986, 86, 1991, 1987, 86, - 1993, 1999, 1988, 1992, 1997, 86, 1994, 86, 2000, 86, - 1995, 86, 2001, 1996, 86, 2003, 86, 86, 86, 86, - 2007, 86, 86, 2009, 2002, 86, 1998, 86, 86, 86, - 2013, 86, 86, 86, 86, 2008, 2005, 2004, 2006, 2016, - 86, 86, 86, 2011, 2015, 86, 2012, 2010, 86, 86, - 2018, 2020, 2014, 2017, 2019, 86, 86, 170, 2024, 2022, - 86, 2027, 86, 86, 2021, 2023, 86, 86, 86, 2025, - 2031, 86, 86, 86, 86, 2026, 86, 86, 2029, 2033, - 2034, 86, 2028, 2038, 86, 86, 2030, 2032, 2035, 86, - - 86, 2041, 2050, 2036, 2042, 86, 2039, 2037, 86, 2040, - 86, 2043, 2044, 86, 86, 2045, 2047, 2048, 86, 86, - 86, 86, 86, 2046, 2051, 86, 86, 86, 86, 86, - 86, 2049, 86, 2056, 2057, 86, 86, 2061, 86, 2058, - 2052, 86, 86, 86, 2054, 2055, 2065, 2053, 2059, 86, - 2060, 2062, 86, 2066, 2067, 2069, 86, 2070, 2064, 86, - 86, 86, 2073, 86, 2063, 86, 86, 2068, 86, 86, - 2077, 86, 2080, 2081, 86, 86, 2072, 2075, 2082, 86, - 2071, 2084, 86, 2078, 2074, 2079, 2076, 86, 2085, 86, - 86, 86, 2089, 86, 86, 2083, 2091, 86, 2090, 2093, - - 2092, 86, 86, 2095, 86, 86, 2099, 86, 86, 86, - 2086, 2087, 2088, 2096, 86, 86, 86, 2098, 86, 2094, - 86, 2101, 2102, 86, 86, 86, 86, 86, 2107, 2097, - 2105, 2106, 86, 2103, 2109, 2100, 86, 2108, 86, 86, - 86, 2104, 86, 86, 2114, 2117, 86, 86, 2110, 2111, - 2112, 86, 2121, 2120, 86, 2113, 2115, 86, 86, 2116, - 2122, 86, 2118, 2119, 86, 2123, 86, 86, 2124, 2126, - 2129, 86, 2125, 2128, 86, 2127, 86, 2133, 86, 86, - 2130, 2131, 86, 2135, 86, 86, 86, 2138, 2139, 86, - 86, 2141, 86, 86, 86, 2132, 86, 86, 86, 2148, - - 86, 86, 2146, 2143, 2136, 2134, 2144, 2137, 86, 86, - 2140, 86, 86, 86, 2147, 86, 2154, 2145, 2142, 2151, - 2152, 86, 2149, 2157, 2150, 86, 86, 2159, 86, 86, - 86, 2158, 2162, 86, 86, 86, 2163, 2161, 86, 2153, - 2165, 2156, 2166, 86, 86, 86, 86, 2155, 2160, 2167, - 86, 86, 86, 86, 2164, 2171, 86, 86, 86, 2168, - 2173, 86, 2176, 2177, 86, 2169, 2178, 86, 2172, 86, - 2170, 2174, 86, 86, 86, 86, 86, 2181, 86, 2180, - 86, 2185, 2186, 86, 2175, 86, 86, 2179, 86, 86, - 2192, 161, 2191, 2182, 2183, 86, 86, 2184, 86, 2188, - - 2189, 2193, 2187, 2195, 86, 2190, 86, 2194, 86, 86, - 2196, 2199, 86, 86, 86, 86, 86, 2200, 86, 2197, - 2203, 2207, 86, 2201, 2198, 86, 86, 86, 86, 86, - 2210, 86, 2202, 86, 2204, 2214, 2205, 2215, 2206, 86, - 2208, 2209, 2211, 2212, 86, 86, 2213, 86, 2220, 86, - 2216, 86, 2219, 2218, 2222, 2217, 2221, 86, 2224, 2223, - 86, 2225, 86, 86, 86, 2229, 86, 86, 2227, 86, - 86, 86, 86, 2231, 2228, 86, 2233, 2226, 2230, 2235, - 86, 2237, 2232, 2238, 86, 86, 86, 86, 86, 170, - 86, 86, 86, 86, 2241, 86, 86, 2234, 2245, 2246, - - 86, 2247, 2236, 2242, 2243, 2239, 2248, 86, 2240, 2244, - 2249, 86, 2251, 86, 86, 2250, 86, 86, 86, 2252, - 2254, 2253, 86, 86, 86, 86, 2255, 2256, 2257, 86, - 2259, 86, 86, 2263, 86, 2258, 2260, 2262, 86, 86, - 86, 2268, 86, 2261, 2265, 2266, 86, 2264, 86, 2267, - 86, 86, 86, 86, 86, 86, 2275, 2273, 86, 2270, - 2274, 86, 86, 86, 86, 2280, 86, 2277, 2269, 2271, - 86, 2272, 2276, 86, 86, 86, 2281, 2279, 86, 2278, - 86, 2286, 2283, 2284, 2282, 86, 86, 2287, 86, 86, - 2285, 2290, 2292, 86, 86, 86, 2289, 2288, 2293, 86, - - 86, 2291, 86, 2299, 86, 2294, 86, 2301, 86, 86, - 2295, 86, 86, 2302, 2298, 2296, 86, 2297, 2304, 86, - 2305, 2300, 2306, 86, 86, 2307, 2303, 86, 2310, 86, - 86, 86, 86, 2309, 86, 86, 2315, 2312, 86, 2308, - 86, 2316, 86, 2311, 86, 86, 86, 86, 86, 2317, - 86, 86, 2314, 2313, 2319, 86, 2320, 2324, 2322, 2318, - 2321, 2326, 86, 86, 2329, 2325, 2327, 86, 2330, 86, - 86, 2335, 86, 2323, 2328, 2332, 86, 86, 86, 86, - 2338, 2331, 2334, 2339, 86, 86, 2333, 2336, 86, 2341, - 2342, 86, 86, 86, 86, 86, 2337, 2344, 2345, 2340, - - 86, 86, 2346, 2343, 2348, 86, 86, 2350, 2352, 86, - 86, 2353, 2347, 2349, 86, 2355, 86, 86, 86, 2351, - 2354, 86, 2357, 2358, 86, 86, 86, 86, 2364, 2359, - 2360, 86, 86, 86, 86, 2368, 2356, 2365, 2363, 86, - 2369, 86, 86, 2367, 2361, 2362, 2366, 2370, 86, 2373, - 86, 86, 2374, 86, 86, 86, 86, 2378, 2380, 86, - 86, 2371, 2372, 86, 2375, 2379, 86, 2384, 86, 2376, - 86, 86, 86, 2386, 2382, 2377, 86, 2381, 86, 2387, - 86, 86, 2383, 2385, 2391, 2388, 2389, 86, 2390, 86, - 86, 2394, 2396, 86, 86, 86, 2392, 2397, 86, 2393, - - 86, 86, 86, 2399, 86, 2398, 2402, 2400, 86, 2403, - 86, 2395, 2401, 2407, 86, 2404, 86, 86, 86, 2406, - 86, 86, 86, 86, 86, 86, 86, 2415, 2405, 86, - 86, 2419, 86, 86, 2408, 2409, 2410, 2411, 2413, 86, - 2414, 2416, 2417, 2418, 2420, 2412, 86, 86, 86, 86, - 2422, 86, 86, 2423, 2425, 2421, 2426, 86, 86, 2431, - 86, 86, 2433, 86, 2427, 86, 2424, 2430, 86, 2428, - 2432, 86, 2436, 86, 86, 2434, 2437, 2429, 170, 2440, - 86, 86, 2442, 2444, 2435, 86, 2438, 2443, 86, 86, - 2445, 86, 2456, 2439, 2446, 86, 86, 2449, 86, 86, - - 2441, 2448, 86, 2447, 86, 2450, 2454, 86, 2453, 86, - 2455, 2458, 86, 86, 86, 2460, 2464, 86, 2459, 2451, - 2457, 2461, 86, 86, 86, 2463, 86, 86, 2462, 86, - 2452, 86, 86, 2466, 86, 86, 86, 2469, 86, 86, - 86, 2472, 86, 86, 2465, 86, 2467, 2476, 2478, 86, - 2471, 86, 2468, 86, 86, 2474, 2473, 2470, 2479, 86, - 2475, 86, 86, 2482, 2481, 2477, 2480, 86, 86, 86, - 86, 2490, 86, 2485, 2487, 86, 86, 86, 86, 2483, - 2484, 2488, 86, 2491, 86, 86, 2486, 86, 2489, 86, - 86, 86, 2501, 86, 86, 2492, 2493, 2494, 86, 2499, - - 86, 86, 86, 86, 2497, 2495, 2502, 2503, 2496, 2505, - 2498, 2500, 86, 86, 2504, 2506, 2508, 86, 86, 86, - 86, 2507, 2510, 2509, 86, 2511, 2512, 86, 2515, 2516, - 86, 86, 86, 2517, 2513, 2518, 86, 2514, 86, 86, - 86, 2522, 2524, 86, 2523, 86, 2525, 2519, 86, 2526, - 86, 86, 2521, 2520, 2529, 86, 2530, 86, 86, 2527, - 86, 86, 2528, 2531, 86, 2532, 2536, 86, 2537, 86, - 86, 2533, 2539, 86, 86, 86, 2535, 2541, 86, 86, - 86, 2534, 2544, 86, 2543, 2545, 86, 86, 86, 2538, - 2542, 86, 2540, 86, 2546, 86, 2547, 2552, 86, 86, - - 2551, 2554, 86, 86, 86, 2548, 86, 2549, 86, 2556, - 2550, 2558, 2557, 86, 2559, 2561, 86, 86, 2553, 86, - 86, 2555, 2564, 86, 86, 2567, 86, 86, 86, 2560, - 86, 86, 3627, 86, 2563, 86, 2562, 2572, 2565, 2573, - 86, 86, 86, 2566, 86, 2569, 2571, 2568, 86, 2575, - 86, 2570, 2578, 86, 2574, 86, 2576, 2577, 86, 86, - 86, 86, 2580, 86, 2581, 86, 2586, 86, 2579, 2588, - 86, 86, 2587, 2589, 2592, 2584, 2582, 2583, 86, 86, - 86, 86, 86, 2593, 2594, 86, 2595, 2585, 2590, 86, - 2591, 86, 86, 86, 2599, 2597, 86, 2601, 2602, 86, - - 86, 2603, 2605, 2596, 2606, 86, 2598, 2609, 86, 86, - 86, 86, 86, 86, 2604, 86, 2610, 2600, 86, 86, - 2608, 2607, 2614, 2611, 86, 2613, 86, 86, 86, 86, - 86, 86, 86, 2616, 2612, 2615, 2617, 2618, 2619, 2621, - 2620, 2622, 86, 86, 2641, 86, 2623, 86, 86, 2627, - 2624, 2625, 2626, 2628, 86, 2629, 86, 86, 2632, 86, - 86, 170, 86, 2630, 86, 2631, 2633, 86, 2638, 86, - 86, 86, 86, 86, 2645, 86, 86, 3627, 2636, 2639, - 2634, 2640, 2635, 2637, 86, 86, 2642, 2644, 2643, 2646, - 2649, 86, 86, 2650, 2651, 86, 2647, 2648, 86, 86, - - 2654, 2652, 2655, 86, 2653, 86, 86, 86, 86, 2657, - 86, 86, 2656, 86, 2659, 86, 86, 2663, 2664, 2658, - 86, 2661, 86, 2660, 86, 2666, 86, 86, 86, 86, - 2667, 2668, 2669, 86, 2662, 86, 2665, 86, 2672, 86, - 2670, 86, 2671, 2676, 86, 2675, 86, 2674, 2673, 86, - 86, 86, 86, 86, 2678, 86, 86, 86, 2686, 2677, - 2683, 86, 2685, 86, 86, 86, 2688, 2682, 86, 2687, - 2679, 2680, 2681, 86, 86, 2684, 86, 2694, 86, 2689, - 86, 2692, 86, 86, 2698, 2699, 3627, 2690, 2697, 86, - 86, 86, 2691, 86, 2695, 2693, 2696, 2700, 86, 86, - - 2701, 86, 2702, 86, 2705, 86, 86, 2707, 2706, 86, - 86, 86, 2708, 2703, 2709, 2704, 86, 2711, 86, 2713, - 86, 86, 2712, 2715, 86, 86, 2717, 86, 86, 86, - 2716, 86, 2714, 86, 86, 86, 2710, 86, 2721, 86, - 2726, 86, 2724, 2719, 2725, 2728, 2718, 2720, 2727, 86, - 86, 86, 86, 2730, 86, 86, 2723, 86, 86, 3627, - 2722, 86, 2733, 86, 2735, 86, 86, 2738, 86, 86, - 2729, 2731, 86, 86, 2739, 2736, 2732, 2734, 2737, 2740, - 2741, 86, 2744, 86, 86, 86, 86, 2742, 2745, 86, - 2748, 2746, 2749, 86, 86, 86, 2743, 86, 86, 2750, - - 86, 86, 2747, 2755, 86, 2754, 2752, 86, 86, 86, - 86, 2753, 86, 2751, 2759, 2763, 86, 86, 2756, 86, - 2758, 2757, 2762, 2764, 86, 2765, 86, 2766, 86, 86, - 2760, 2767, 2761, 86, 86, 2770, 86, 2771, 2769, 86, - 2772, 86, 86, 86, 86, 86, 3627, 2768, 86, 86, - 2779, 86, 86, 2773, 86, 2775, 2781, 86, 2782, 86, - 2784, 86, 2774, 2783, 2776, 2778, 2777, 2780, 86, 86, - 86, 86, 86, 86, 2788, 86, 2786, 2789, 2792, 86, - 2785, 86, 2787, 86, 2793, 2794, 86, 86, 86, 86, - 86, 2790, 86, 2791, 2801, 86, 170, 86, 2803, 86, - - 2797, 86, 86, 2796, 2799, 86, 86, 2795, 2802, 86, - 2804, 2800, 2798, 2807, 2805, 86, 86, 2806, 2810, 86, - 86, 2812, 86, 2811, 2813, 2814, 86, 2808, 86, 2809, - 2815, 86, 86, 2816, 86, 2817, 86, 2818, 2819, 2820, - 86, 2821, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 2829, 3627, 86, 86, 2822, 2827, 86, 2833, 86, - 86, 2824, 2823, 2834, 2831, 2826, 2825, 86, 2828, 86, - 2830, 2832, 2835, 86, 2836, 86, 2837, 86, 2838, 2839, - 86, 2841, 86, 86, 2840, 2842, 86, 86, 86, 86, - 86, 86, 86, 2845, 86, 2843, 2852, 86, 2851, 2853, - - 86, 2844, 2846, 86, 86, 86, 2847, 2848, 2849, 2850, - 2856, 2857, 86, 2859, 2854, 2858, 86, 86, 86, 86, - 86, 2855, 86, 2860, 86, 2866, 86, 86, 86, 2865, - 86, 86, 86, 2862, 3627, 2861, 2864, 86, 86, 2863, - 2874, 86, 2870, 2872, 86, 86, 2873, 2867, 2868, 86, - 2869, 2875, 2871, 2876, 86, 86, 2877, 86, 86, 86, - 86, 86, 86, 86, 2878, 2881, 2882, 2883, 86, 86, - 2880, 86, 2888, 2889, 86, 86, 2879, 2892, 86, 2884, - 2886, 86, 2885, 86, 86, 86, 2887, 86, 2895, 2891, - 2890, 86, 2893, 2897, 86, 2898, 2899, 86, 2894, 86, - - 2896, 86, 86, 2904, 86, 86, 86, 2900, 86, 86, - 2908, 86, 2907, 86, 2901, 2906, 86, 2905, 2909, 86, - 86, 2902, 2903, 2911, 86, 2912, 86, 86, 2915, 2914, - 2910, 2917, 86, 86, 2918, 2913, 86, 2920, 86, 86, - 86, 86, 86, 2927, 86, 86, 86, 2916, 86, 86, - 86, 2924, 2921, 2922, 2923, 2925, 86, 2926, 2919, 2930, - 86, 2931, 86, 86, 2929, 2928, 86, 2932, 86, 2936, - 86, 2934, 86, 86, 86, 86, 2935, 2933, 86, 2937, - 2938, 86, 86, 2940, 2943, 86, 2941, 2945, 2939, 2942, - 2944, 86, 2947, 170, 2946, 86, 86, 86, 86, 2952, - - 3627, 2949, 2948, 86, 86, 86, 86, 2954, 2953, 86, - 2957, 86, 2958, 86, 2956, 2950, 2951, 86, 2962, 2955, - 2960, 86, 86, 2963, 86, 2961, 86, 86, 86, 2967, - 2959, 2964, 2965, 86, 86, 86, 86, 2968, 86, 2969, - 86, 86, 2966, 2974, 2975, 2970, 86, 86, 2972, 86, - 86, 2976, 86, 2971, 2978, 86, 86, 2980, 86, 2977, - 86, 2981, 2973, 2979, 86, 86, 86, 86, 86, 2983, - 2984, 2985, 2982, 86, 86, 86, 2990, 86, 86, 86, - 86, 2987, 2988, 2989, 2992, 2986, 2991, 2994, 86, 86, - 86, 3627, 86, 86, 2995, 86, 2993, 3000, 86, 2996, - - 86, 86, 3001, 86, 86, 86, 3005, 86, 86, 2997, - 2998, 2999, 3003, 3004, 3008, 86, 3006, 86, 86, 3002, - 86, 86, 3007, 3015, 3012, 3013, 86, 3009, 3016, 86, - 86, 3018, 3010, 86, 86, 3019, 86, 86, 3011, 86, - 86, 3020, 86, 86, 3025, 3022, 3014, 86, 3017, 86, - 86, 3023, 3026, 86, 3029, 86, 3024, 3027, 86, 86, - 3031, 3028, 86, 86, 3021, 3033, 86, 3034, 86, 3035, - 86, 86, 86, 3030, 86, 3036, 86, 3037, 3039, 86, - 3032, 86, 86, 3038, 3043, 86, 3041, 86, 3077, 3044, - 86, 86, 3047, 86, 3042, 86, 3040, 3045, 3048, 86, - - 3049, 86, 3050, 86, 86, 86, 3052, 3046, 3051, 3054, - 86, 86, 86, 3055, 3057, 86, 86, 3053, 86, 3058, - 3059, 86, 3061, 86, 86, 86, 3065, 3060, 86, 3062, - 3627, 3056, 86, 3066, 86, 3068, 86, 86, 86, 3064, - 3067, 86, 3063, 3069, 3070, 86, 86, 3076, 86, 3071, - 86, 3072, 3075, 86, 86, 3079, 86, 3073, 3078, 86, - 86, 86, 3085, 86, 3080, 3074, 3082, 86, 3081, 86, - 3084, 86, 86, 3083, 86, 86, 3088, 3092, 86, 86, - 86, 86, 86, 3094, 86, 86, 3086, 3087, 86, 3091, - 3089, 3095, 3098, 3093, 3090, 3096, 3627, 3099, 86, 3101, - - 3125, 3097, 3100, 86, 3102, 86, 86, 3103, 3104, 86, - 86, 3105, 86, 3106, 86, 3107, 86, 3108, 86, 3109, - 86, 86, 3110, 86, 3113, 3111, 86, 86, 86, 86, - 86, 3115, 86, 3117, 86, 3122, 86, 3114, 3118, 3123, - 86, 3112, 86, 3126, 86, 3124, 3116, 86, 86, 3627, - 3119, 86, 3120, 3127, 3121, 3129, 86, 86, 3130, 3131, - 86, 86, 3132, 3133, 86, 86, 3128, 86, 86, 86, - 3134, 3139, 86, 86, 3135, 86, 3136, 3137, 3140, 86, - 86, 86, 3142, 86, 3141, 3146, 86, 3138, 86, 86, - 3147, 86, 3144, 3150, 3143, 86, 86, 3149, 3145, 3148, - - 3151, 3152, 86, 3154, 86, 86, 86, 86, 3158, 86, - 3153, 86, 86, 86, 86, 86, 86, 86, 86, 3155, - 3159, 3162, 3165, 3163, 3160, 3157, 3627, 86, 86, 3166, - 86, 3156, 3168, 86, 3170, 3164, 86, 86, 3161, 3167, - 86, 3169, 86, 3173, 86, 3172, 3171, 86, 3175, 3177, - 86, 3176, 3178, 86, 3179, 86, 3174, 86, 86, 3627, - 86, 3184, 86, 86, 3181, 3183, 3180, 86, 3185, 86, - 3187, 86, 86, 86, 3186, 86, 86, 3182, 86, 3193, - 3188, 3191, 3195, 86, 3189, 86, 86, 86, 86, 3199, - 3196, 86, 3197, 3192, 3190, 86, 3198, 86, 86, 86, - - 3204, 86, 86, 3194, 86, 86, 86, 86, 86, 86, - 3208, 86, 3201, 3202, 3200, 3205, 3209, 3206, 3207, 3203, - 86, 86, 86, 3215, 3210, 3213, 86, 86, 3211, 3212, - 86, 3214, 3219, 86, 86, 3216, 3220, 86, 3222, 86, - 86, 86, 86, 3223, 86, 3217, 86, 3225, 3226, 86, - 3228, 86, 86, 3221, 3224, 86, 3218, 3231, 3229, 86, - 3227, 86, 3230, 86, 3233, 3234, 86, 3237, 86, 86, - 86, 3232, 3236, 86, 86, 3240, 86, 3243, 86, 3244, - 86, 3235, 86, 3246, 3241, 86, 86, 3247, 3239, 86, - 86, 3238, 3249, 86, 86, 3242, 3250, 86, 3253, 86, - - 3245, 86, 86, 86, 3258, 3251, 86, 86, 3248, 86, - 86, 3256, 3255, 86, 3252, 3262, 86, 86, 3254, 3260, - 3264, 86, 86, 3257, 3265, 3259, 86, 3266, 3263, 3261, - 86, 3269, 3270, 86, 3267, 86, 3272, 86, 3271, 86, - 86, 86, 86, 3275, 86, 3274, 3276, 86, 3278, 86, - 3268, 86, 3281, 86, 86, 86, 86, 3273, 86, 3286, - 86, 3282, 86, 86, 3302, 86, 3277, 86, 3279, 3280, - 86, 3285, 3293, 3283, 3289, 3290, 86, 86, 3288, 3291, - 86, 3284, 3287, 3292, 86, 86, 3296, 86, 3297, 86, - 3295, 3294, 3298, 86, 3299, 86, 86, 86, 86, 3304, - - 86, 86, 86, 3303, 3306, 86, 3307, 86, 86, 3300, - 86, 86, 86, 86, 3313, 3314, 86, 3305, 86, 86, - 86, 3308, 86, 3301, 3320, 86, 86, 3321, 86, 86, - 3309, 3311, 3310, 3312, 3317, 3319, 86, 3323, 3316, 86, - 86, 86, 3318, 86, 3315, 3326, 86, 3322, 3328, 86, - 3329, 86, 86, 3332, 86, 86, 3324, 3330, 3325, 86, - 3331, 86, 3327, 3334, 3335, 86, 3333, 86, 86, 86, - 86, 86, 3336, 3337, 86, 3338, 3341, 86, 86, 86, - 86, 3339, 86, 3343, 86, 86, 3342, 3344, 3340, 86, - 86, 86, 3627, 86, 86, 3356, 86, 3345, 3353, 3354, - - 3346, 86, 3347, 3348, 3355, 3349, 86, 3350, 3351, 86, - 86, 3357, 3352, 3359, 3361, 86, 3358, 3362, 86, 86, - 3364, 86, 3360, 3363, 86, 86, 3367, 86, 86, 3365, - 3369, 86, 3370, 3371, 86, 86, 3372, 3373, 3377, 86, - 3374, 86, 86, 3368, 3366, 3375, 3376, 3378, 86, 86, - 3380, 86, 86, 86, 86, 3383, 86, 86, 3379, 86, - 3387, 86, 86, 86, 3386, 86, 86, 3382, 86, 86, - 3381, 86, 3390, 3391, 86, 3392, 3384, 3385, 86, 3395, - 3396, 86, 3388, 3393, 86, 3398, 86, 3397, 3389, 3394, - 3399, 86, 3400, 86, 86, 86, 86, 3405, 86, 3402, - - 3407, 3401, 3406, 86, 3403, 86, 86, 3404, 86, 86, - 86, 3414, 86, 3409, 3411, 3412, 3415, 86, 3417, 86, - 86, 3408, 86, 3416, 3418, 86, 3410, 3413, 86, 3421, - 86, 3422, 86, 3420, 86, 3419, 86, 3425, 86, 3426, - 86, 3427, 86, 3423, 3428, 86, 3429, 86, 3430, 86, - 3431, 86, 3432, 86, 3424, 86, 86, 3435, 86, 3436, - 86, 86, 86, 86, 86, 3434, 3440, 86, 86, 86, - 3437, 3442, 86, 86, 3438, 86, 3446, 3447, 86, 3443, - 86, 3433, 3444, 3439, 86, 3445, 86, 3441, 3449, 86, - 86, 86, 3453, 3451, 86, 3448, 86, 3455, 3456, 86, - - 86, 86, 3450, 86, 86, 3458, 86, 86, 86, 86, - 86, 86, 3452, 3457, 3454, 3462, 3463, 3471, 86, 86, - 3459, 3460, 3461, 3464, 86, 3465, 86, 86, 86, 3468, - 3469, 3467, 3472, 86, 3466, 3473, 86, 86, 86, 3470, - 86, 86, 3476, 86, 86, 86, 3475, 86, 86, 3481, - 3482, 3474, 86, 3484, 86, 3478, 3480, 86, 86, 86, - 3477, 86, 3483, 86, 86, 86, 3479, 3485, 86, 86, - 3493, 86, 86, 3491, 3488, 86, 3486, 3487, 3490, 86, - 3492, 3497, 86, 86, 3495, 3500, 3489, 86, 3499, 86, - 3494, 3496, 3502, 86, 86, 3498, 3504, 86, 3503, 86, - - 3505, 3506, 86, 3507, 86, 86, 86, 3501, 86, 3510, - 86, 86, 86, 3508, 3515, 3511, 3512, 86, 86, 86, - 86, 3519, 86, 86, 3518, 3509, 86, 3514, 3521, 86, - 3517, 3516, 86, 3513, 3522, 86, 3523, 86, 3526, 86, - 86, 3524, 86, 3520, 3529, 86, 86, 3530, 86, 86, - 86, 3525, 3533, 3534, 86, 3527, 3531, 86, 86, 86, - 3528, 86, 3539, 86, 3535, 86, 3538, 3536, 3532, 3540, - 86, 86, 86, 86, 86, 86, 3537, 86, 3544, 86, - 3546, 86, 86, 86, 86, 86, 3541, 3543, 3551, 3552, - 86, 3542, 3545, 86, 3548, 3549, 3547, 3559, 3550, 3553, - - 86, 3557, 86, 86, 86, 3554, 86, 3560, 3555, 3558, - 86, 86, 3556, 86, 86, 3561, 3562, 3565, 3563, 3566, - 86, 86, 86, 86, 3568, 86, 3567, 86, 86, 86, - 86, 3569, 3574, 3564, 86, 3571, 86, 86, 86, 86, - 3577, 3570, 3578, 86, 86, 86, 86, 86, 3572, 3573, - 3576, 3581, 86, 3575, 3579, 3582, 86, 3580, 86, 3585, - 3584, 3586, 86, 3583, 86, 3587, 86, 3589, 86, 3591, - 86, 3592, 86, 86, 86, 3596, 86, 3593, 3627, 86, - 3594, 3599, 86, 3590, 3597, 86, 86, 3598, 3588, 86, - 86, 86, 86, 3595, 86, 86, 3600, 3601, 86, 3603, - - 3605, 86, 86, 3607, 86, 3602, 86, 3608, 86, 3611, - 3604, 3606, 3612, 86, 3609, 86, 86, 3615, 3616, 86, - 86, 3618, 86, 3610, 86, 3613, 86, 3617, 3619, 86, - 86, 3620, 86, 86, 3614, 3621, 3627, 3622, 3625, 86, - 3626, 86, 3627, 3627, 3627, 3623, 3627, 3627, 3627, 3627, - 3627, 3627, 3624, 47, 47, 47, 47, 47, 47, 47, - 52, 52, 52, 52, 52, 52, 52, 57, 57, 57, - 57, 57, 57, 57, 63, 63, 63, 63, 63, 63, - 63, 68, 68, 68, 68, 68, 68, 68, 74, 74, - 74, 74, 74, 74, 74, 80, 80, 80, 80, 80, - - 80, 80, 89, 89, 3627, 89, 89, 89, 89, 160, - 160, 3627, 3627, 3627, 160, 160, 162, 162, 3627, 3627, - 162, 3627, 162, 164, 3627, 3627, 3627, 3627, 3627, 164, - 167, 167, 3627, 3627, 3627, 167, 167, 169, 3627, 3627, - 3627, 3627, 3627, 169, 171, 171, 3627, 171, 171, 171, - 171, 174, 3627, 3627, 3627, 3627, 3627, 174, 177, 177, - 3627, 3627, 3627, 177, 177, 90, 90, 3627, 90, 90, - 90, 90, 17, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - - 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3627 + 78, 86, 22, 72, 122, 86, 121, 110, 86, 79, + 161, 161, 73, 19, 20, 21, 69, 70, 71, 75, + 76, 77, 78, 189, 22, 72, 81, 82, 83, 131, + 90, 79, 90, 90, 73, 90, 171, 84, 81, 82, + 83, 90, 91, 86, 99, 86, 111, 86, 113, 84, + 86, 100, 86, 92, 93, 101, 114, 94, 102, 86, + 112, 86, 95, 116, 96, 232, 117, 115, 86, 86, + 157, 97, 86, 118, 158, 119, 160, 103, 159, 86, + 123, 104, 138, 86, 105, 86, 106, 107, 124, 153, + 86, 127, 86, 163, 125, 128, 163, 108, 126, 154, + + 86, 139, 184, 155, 156, 140, 168, 168, 86, 129, + 209, 130, 86, 132, 86, 141, 142, 133, 143, 144, + 183, 134, 145, 86, 149, 171, 150, 135, 86, 146, + 136, 178, 178, 147, 148, 151, 286, 137, 86, 174, + 165, 152, 165, 165, 90, 165, 90, 90, 170, 90, + 170, 170, 175, 170, 175, 175, 173, 175, 85, 265, + 85, 85, 87, 85, 86, 90, 88, 90, 90, 85, + 90, 86, 86, 86, 180, 86, 90, 91, 86, 181, + 182, 186, 86, 86, 185, 187, 191, 192, 86, 86, + 86, 86, 190, 171, 193, 200, 86, 86, 188, 86, + + 194, 86, 195, 86, 203, 86, 86, 196, 197, 211, + 199, 202, 198, 204, 201, 86, 205, 206, 207, 86, + 86, 210, 219, 86, 213, 208, 215, 86, 86, 216, + 86, 86, 86, 224, 214, 212, 222, 225, 86, 231, + 86, 86, 217, 218, 86, 230, 221, 220, 86, 86, + 86, 233, 86, 226, 229, 86, 223, 227, 234, 237, + 86, 235, 228, 86, 86, 86, 86, 239, 86, 244, + 236, 241, 243, 86, 86, 242, 86, 246, 238, 86, + 86, 86, 240, 86, 252, 245, 247, 86, 256, 249, + 261, 86, 248, 255, 86, 253, 86, 258, 251, 254, + + 86, 262, 250, 257, 86, 86, 264, 86, 86, 267, + 86, 86, 86, 271, 259, 86, 263, 260, 268, 86, + 266, 320, 270, 272, 274, 86, 275, 161, 161, 163, + 269, 179, 163, 273, 165, 171, 165, 165, 276, 165, + 168, 168, 170, 280, 170, 170, 90, 170, 90, 90, + 175, 90, 175, 175, 86, 175, 178, 178, 173, 277, + 278, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 283, 289, 86, 86, 279, 281, 86, 284, 285, + 288, 291, 292, 287, 293, 282, 363, 86, 86, 290, + 86, 294, 296, 86, 297, 298, 86, 307, 299, 295, + + 86, 86, 86, 300, 309, 86, 302, 311, 86, 310, + 86, 303, 86, 312, 86, 86, 304, 308, 86, 313, + 301, 316, 305, 306, 314, 86, 86, 86, 86, 318, + 86, 319, 321, 86, 86, 315, 86, 86, 336, 326, + 86, 327, 323, 322, 86, 324, 86, 337, 86, 328, + 317, 325, 329, 86, 330, 338, 335, 334, 333, 340, + 86, 86, 86, 342, 343, 86, 331, 339, 332, 86, + 86, 346, 86, 86, 86, 348, 349, 86, 347, 344, + 341, 86, 350, 345, 86, 86, 351, 353, 86, 86, + 86, 352, 86, 86, 356, 355, 357, 86, 354, 86, + + 86, 86, 86, 86, 86, 358, 362, 360, 86, 369, + 361, 367, 86, 373, 359, 364, 368, 86, 365, 86, + 86, 86, 376, 366, 371, 86, 370, 86, 86, 86, + 86, 379, 378, 86, 372, 86, 86, 382, 383, 374, + 375, 385, 381, 86, 86, 377, 86, 86, 386, 380, + 86, 388, 384, 389, 86, 390, 392, 86, 86, 393, + 387, 86, 86, 86, 86, 171, 86, 86, 396, 86, + 86, 86, 419, 86, 399, 401, 394, 397, 403, 391, + 404, 395, 405, 398, 86, 86, 86, 400, 86, 406, + 407, 408, 402, 86, 86, 86, 86, 86, 86, 86, + + 86, 416, 86, 86, 418, 412, 414, 86, 409, 410, + 86, 86, 411, 413, 417, 420, 86, 422, 86, 86, + 423, 421, 86, 86, 86, 415, 424, 426, 86, 86, + 86, 86, 427, 86, 431, 433, 448, 425, 428, 429, + 86, 86, 430, 435, 86, 432, 434, 86, 440, 86, + 86, 436, 86, 438, 86, 439, 441, 86, 86, 86, + 86, 86, 86, 86, 447, 86, 86, 177, 437, 450, + 86, 86, 453, 446, 86, 86, 444, 443, 455, 449, + 445, 442, 86, 458, 86, 451, 86, 459, 452, 86, + 86, 86, 454, 474, 457, 456, 86, 86, 460, 86, + + 467, 86, 469, 86, 86, 477, 478, 470, 461, 471, + 86, 462, 176, 476, 468, 479, 463, 464, 465, 466, + 480, 86, 472, 475, 86, 473, 86, 481, 482, 86, + 86, 86, 86, 86, 86, 86, 491, 86, 86, 492, + 86, 493, 489, 483, 490, 485, 484, 486, 487, 488, + 86, 494, 86, 495, 86, 86, 86, 496, 86, 501, + 86, 502, 86, 503, 86, 86, 497, 86, 520, 507, + 86, 508, 504, 500, 498, 509, 499, 86, 86, 505, + 86, 86, 506, 510, 512, 86, 513, 86, 515, 511, + 86, 521, 522, 86, 514, 523, 519, 86, 86, 86, + + 86, 516, 86, 537, 517, 86, 518, 86, 524, 86, + 525, 86, 86, 86, 539, 542, 526, 540, 536, 541, + 527, 538, 554, 544, 86, 528, 553, 86, 529, 86, + 530, 543, 531, 555, 86, 86, 171, 86, 556, 86, + 557, 86, 561, 560, 562, 532, 86, 558, 533, 627, + 534, 86, 535, 86, 86, 545, 546, 559, 564, 86, + 563, 86, 86, 566, 86, 547, 548, 549, 550, 551, + 569, 567, 552, 86, 573, 568, 86, 565, 571, 86, + 570, 86, 574, 86, 86, 579, 576, 86, 577, 86, + 580, 86, 86, 86, 575, 86, 572, 584, 86, 578, + + 86, 86, 86, 86, 582, 587, 86, 581, 86, 583, + 588, 589, 86, 86, 586, 86, 593, 594, 585, 86, + 86, 590, 591, 599, 592, 595, 86, 604, 596, 597, + 86, 86, 602, 86, 600, 86, 86, 618, 86, 86, + 86, 86, 621, 86, 86, 620, 598, 86, 86, 601, + 619, 605, 603, 607, 606, 608, 609, 622, 623, 86, + 86, 86, 171, 626, 86, 624, 625, 610, 86, 611, + 86, 86, 630, 628, 86, 612, 86, 632, 86, 633, + 86, 629, 86, 613, 614, 86, 635, 615, 616, 631, + 636, 617, 86, 634, 86, 86, 86, 638, 637, 86, + + 640, 86, 642, 86, 641, 86, 86, 86, 86, 86, + 643, 648, 86, 639, 649, 644, 650, 86, 86, 647, + 86, 652, 86, 653, 646, 645, 86, 655, 86, 651, + 86, 657, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 659, 663, 654, 661, 86, 86, 86, 671, 86, + 656, 665, 678, 658, 86, 660, 673, 662, 664, 86, + 669, 670, 86, 666, 668, 667, 86, 86, 672, 86, + 86, 674, 86, 86, 86, 86, 86, 676, 684, 682, + 677, 675, 681, 685, 679, 86, 86, 680, 86, 86, + 687, 688, 86, 86, 683, 86, 86, 691, 86, 86, + + 692, 86, 86, 694, 86, 86, 169, 686, 86, 86, + 689, 693, 709, 690, 86, 695, 86, 697, 86, 729, + 696, 86, 698, 707, 708, 706, 86, 699, 86, 700, + 86, 711, 712, 710, 713, 701, 86, 702, 86, 86, + 703, 704, 86, 716, 714, 86, 86, 705, 715, 86, + 717, 721, 719, 722, 725, 720, 86, 86, 86, 86, + 726, 724, 86, 731, 723, 86, 86, 86, 86, 735, + 718, 86, 727, 86, 86, 86, 728, 86, 733, 738, + 732, 86, 734, 730, 739, 86, 746, 742, 86, 86, + 736, 86, 86, 744, 171, 737, 740, 743, 745, 86, + + 741, 86, 86, 747, 751, 86, 86, 86, 86, 86, + 86, 754, 167, 86, 748, 756, 750, 86, 759, 86, + 749, 752, 755, 753, 760, 758, 86, 762, 763, 86, + 86, 86, 757, 86, 86, 86, 86, 86, 761, 765, + 86, 764, 768, 769, 86, 766, 86, 166, 86, 774, + 767, 777, 86, 770, 775, 86, 778, 86, 779, 86, + 771, 776, 773, 772, 86, 780, 86, 781, 86, 782, + 86, 783, 86, 86, 86, 86, 784, 86, 86, 789, + 786, 788, 86, 86, 787, 86, 792, 86, 785, 86, + 791, 86, 790, 797, 793, 796, 86, 86, 86, 86, + + 86, 799, 86, 801, 86, 86, 795, 86, 794, 86, + 803, 86, 806, 86, 86, 810, 798, 804, 800, 802, + 86, 86, 86, 86, 86, 805, 164, 811, 86, 808, + 807, 813, 86, 818, 809, 86, 814, 812, 817, 815, + 816, 86, 819, 86, 86, 86, 821, 825, 822, 86, + 86, 820, 827, 86, 86, 86, 162, 86, 823, 826, + 824, 828, 86, 86, 86, 86, 831, 830, 86, 832, + 833, 86, 835, 834, 86, 86, 837, 839, 86, 86, + 86, 836, 86, 829, 840, 86, 86, 846, 86, 86, + 889, 844, 86, 86, 838, 847, 86, 845, 841, 848, + + 86, 842, 843, 849, 850, 86, 86, 86, 851, 86, + 853, 86, 852, 86, 854, 858, 856, 86, 860, 86, + 86, 86, 859, 855, 86, 86, 86, 86, 861, 864, + 86, 863, 857, 866, 865, 86, 86, 871, 86, 86, + 867, 868, 881, 86, 862, 86, 86, 873, 86, 872, + 874, 86, 876, 877, 86, 869, 870, 86, 86, 875, + 879, 878, 86, 885, 86, 887, 86, 883, 886, 86, + 882, 86, 86, 86, 891, 880, 86, 884, 86, 86, + 86, 897, 86, 86, 86, 86, 898, 86, 86, 86, + 890, 888, 895, 899, 892, 86, 893, 894, 900, 86, + + 896, 86, 904, 901, 903, 86, 907, 902, 86, 86, + 906, 905, 86, 86, 86, 86, 86, 86, 86, 909, + 910, 908, 914, 86, 86, 86, 86, 86, 911, 86, + 923, 916, 922, 913, 912, 915, 86, 924, 86, 86, + 86, 917, 918, 919, 920, 921, 86, 86, 927, 86, + 925, 928, 926, 929, 930, 86, 86, 86, 86, 86, + 86, 86, 86, 931, 934, 935, 936, 938, 86, 933, + 86, 86, 86, 939, 932, 86, 86, 941, 171, 940, + 942, 946, 937, 947, 944, 86, 943, 86, 945, 86, + 86, 86, 948, 86, 949, 86, 86, 86, 953, 950, + + 951, 956, 86, 86, 957, 959, 86, 86, 952, 86, + 954, 86, 958, 963, 960, 86, 961, 86, 955, 86, + 86, 86, 86, 86, 966, 970, 86, 86, 86, 86, + 962, 86, 86, 967, 964, 971, 972, 965, 86, 86, + 86, 969, 86, 86, 973, 86, 86, 968, 985, 86, + 1032, 986, 975, 974, 86, 983, 976, 86, 989, 977, + 984, 86, 990, 978, 987, 86, 979, 988, 994, 991, + 86, 992, 86, 980, 981, 86, 982, 86, 993, 86, + 998, 86, 86, 86, 86, 1010, 86, 1007, 86, 996, + 995, 86, 86, 86, 86, 86, 1031, 1012, 86, 997, + + 86, 999, 1000, 1006, 1001, 1008, 1009, 1002, 86, 86, + 1017, 1015, 1003, 1013, 1014, 1011, 86, 86, 1004, 1005, + 1019, 1016, 1020, 1018, 86, 86, 1023, 1021, 86, 86, + 86, 1022, 86, 1026, 86, 1025, 86, 86, 86, 1027, + 1028, 1029, 1030, 86, 1024, 86, 86, 86, 86, 1034, + 86, 1038, 86, 86, 86, 1037, 86, 1033, 86, 1041, + 86, 1047, 86, 1045, 1043, 86, 1035, 1036, 1039, 86, + 1040, 86, 1042, 1048, 179, 86, 1046, 1051, 1049, 86, + 1050, 1053, 1044, 86, 1052, 86, 1055, 86, 86, 86, + 1054, 1056, 86, 86, 86, 1057, 1059, 86, 1060, 86, + + 86, 1058, 1061, 86, 86, 86, 86, 86, 1063, 1064, + 86, 1065, 1069, 86, 86, 1073, 86, 86, 1062, 1072, + 86, 86, 1071, 1067, 1066, 1070, 86, 86, 86, 1068, + 86, 86, 86, 86, 1080, 1075, 1074, 1076, 1078, 1079, + 86, 86, 86, 86, 1086, 1081, 1082, 86, 86, 1087, + 86, 1077, 1084, 86, 1089, 1085, 86, 86, 86, 86, + 86, 1088, 86, 1090, 86, 1095, 1083, 1092, 86, 86, + 1097, 1098, 86, 1096, 1100, 1091, 86, 1094, 86, 86, + 1102, 1093, 86, 86, 86, 1099, 86, 86, 1111, 86, + 1108, 86, 1106, 86, 86, 86, 86, 1101, 1103, 86, + + 1112, 1104, 1105, 86, 86, 1109, 86, 1107, 1110, 1114, + 1116, 1113, 1117, 86, 1115, 86, 86, 1119, 1121, 86, + 1120, 1118, 86, 1122, 86, 86, 86, 86, 86, 1132, + 86, 1124, 86, 1126, 1133, 86, 1123, 86, 86, 1135, + 86, 86, 1138, 86, 1125, 86, 1127, 1129, 86, 1128, + 1130, 1134, 1131, 1139, 86, 1136, 86, 86, 1137, 86, + 1140, 1147, 1141, 86, 86, 1146, 1142, 86, 1144, 1148, + 86, 86, 86, 1149, 1143, 86, 1152, 86, 1145, 1154, + 86, 86, 86, 86, 86, 1151, 1160, 1157, 1156, 1150, + 86, 1161, 171, 86, 86, 86, 1164, 1153, 1163, 1155, + + 1158, 86, 1159, 86, 86, 1162, 86, 86, 86, 1168, + 86, 86, 86, 86, 86, 1165, 1181, 86, 1167, 86, + 1182, 1166, 1171, 1172, 86, 1169, 1185, 86, 1183, 1184, + 86, 1170, 1173, 86, 1174, 86, 86, 1187, 1175, 86, + 1176, 177, 1186, 86, 1177, 1188, 1178, 86, 1190, 1192, + 1189, 1179, 86, 1191, 1193, 86, 1180, 86, 86, 1201, + 86, 1194, 1196, 86, 86, 86, 86, 86, 1199, 1202, + 86, 1195, 86, 86, 1197, 1198, 1208, 1207, 1200, 1203, + 86, 1205, 1206, 1210, 1211, 1209, 86, 1204, 1213, 86, + 86, 1212, 86, 86, 1214, 86, 86, 86, 86, 86, + + 86, 1226, 86, 1229, 86, 86, 86, 86, 1215, 1230, + 1225, 86, 86, 1227, 1216, 1217, 86, 1218, 1228, 1231, + 86, 1232, 1219, 1236, 1220, 86, 1233, 1237, 86, 86, + 1221, 86, 86, 86, 1238, 1222, 1223, 86, 86, 1234, + 1239, 86, 1224, 86, 1235, 1244, 86, 1245, 1241, 1240, + 86, 1247, 86, 1248, 86, 1242, 1243, 86, 1252, 1250, + 86, 1246, 86, 86, 86, 86, 86, 1253, 86, 86, + 1258, 1249, 86, 1251, 1255, 1256, 86, 86, 1259, 86, + 86, 86, 1254, 86, 1257, 1261, 86, 86, 86, 86, + 86, 1260, 1268, 1263, 1270, 1265, 1266, 1262, 1267, 86, + + 86, 1264, 86, 86, 86, 1269, 1271, 86, 1274, 86, + 86, 86, 86, 1272, 86, 86, 1279, 1280, 86, 1281, + 1284, 1276, 1273, 1275, 1282, 1278, 86, 1277, 86, 1283, + 1285, 86, 86, 1287, 86, 86, 86, 1290, 1294, 86, + 1286, 86, 1291, 86, 86, 1288, 86, 86, 1292, 86, + 1289, 1293, 86, 1295, 86, 86, 86, 1301, 86, 1303, + 1297, 1296, 1299, 86, 1298, 86, 86, 1300, 86, 1307, + 1304, 1305, 1306, 86, 1302, 86, 1308, 1309, 86, 86, + 1310, 86, 86, 1311, 86, 86, 86, 1314, 86, 1315, + 1313, 86, 1317, 86, 1320, 1312, 86, 1316, 86, 1319, + + 86, 1321, 86, 86, 1318, 1322, 1324, 86, 1325, 1323, + 86, 86, 86, 86, 1331, 1329, 1326, 1332, 1333, 176, + 86, 86, 86, 86, 86, 86, 1330, 1334, 1336, 1327, + 1335, 1328, 86, 1338, 86, 86, 86, 1337, 1342, 86, + 1339, 1341, 86, 86, 86, 1344, 86, 1343, 86, 86, + 86, 86, 1345, 86, 1340, 1347, 1350, 1346, 86, 86, + 86, 1351, 86, 86, 1353, 86, 1357, 1348, 1358, 86, + 1349, 1352, 86, 86, 86, 1355, 86, 1361, 86, 86, + 1354, 1360, 86, 1363, 1356, 86, 1366, 86, 1359, 86, + 86, 86, 86, 86, 1364, 1372, 86, 86, 1362, 86, + + 1368, 86, 1374, 1365, 171, 1367, 1375, 1373, 1369, 86, + 86, 86, 1371, 86, 86, 86, 1380, 1370, 1383, 86, + 86, 1385, 1381, 1377, 1376, 1378, 1379, 86, 1386, 86, + 1382, 86, 86, 86, 86, 1389, 1388, 1390, 86, 86, + 1384, 86, 86, 86, 86, 1387, 1393, 1396, 86, 86, + 86, 86, 1391, 1392, 86, 1397, 86, 1394, 1400, 86, + 86, 86, 1395, 86, 1398, 1401, 1404, 171, 1406, 1399, + 86, 1403, 1402, 86, 1410, 86, 1411, 1407, 1412, 1408, + 86, 1405, 1409, 1413, 86, 86, 86, 1414, 86, 1416, + 86, 86, 86, 86, 86, 1423, 86, 1420, 86, 1415, + + 1419, 86, 86, 1424, 86, 86, 1422, 1417, 1418, 86, + 1425, 86, 1421, 1426, 1428, 86, 1429, 86, 1434, 86, + 86, 86, 1430, 1427, 1432, 1431, 86, 86, 86, 86, + 1433, 1438, 86, 86, 86, 1435, 1436, 86, 86, 1441, + 1439, 86, 86, 1448, 1440, 1442, 1437, 1446, 86, 86, + 86, 86, 86, 1443, 86, 86, 1445, 1447, 1444, 86, + 1451, 86, 86, 1458, 86, 86, 1460, 1452, 1449, 86, + 1450, 1454, 86, 1453, 1455, 86, 86, 1457, 86, 86, + 1461, 86, 86, 86, 1459, 1468, 1456, 1463, 1466, 1462, + 1469, 86, 86, 1467, 1465, 86, 1464, 86, 1473, 86, + + 86, 1470, 86, 86, 1484, 1485, 1471, 1483, 1472, 86, + 1474, 1482, 1481, 86, 1475, 86, 86, 1476, 1477, 1487, + 86, 1488, 1478, 86, 1486, 86, 86, 86, 1479, 86, + 1490, 1489, 1480, 86, 1492, 86, 1497, 86, 1493, 86, + 1494, 1491, 86, 1495, 86, 1496, 1498, 86, 86, 1500, + 1503, 1504, 86, 86, 86, 86, 86, 86, 1505, 1499, + 86, 1501, 86, 1508, 1506, 1507, 1502, 1513, 1509, 1514, + 1510, 86, 1511, 86, 1512, 86, 1515, 1516, 1517, 86, + 86, 86, 1518, 1519, 86, 1523, 86, 86, 1520, 86, + 1524, 86, 86, 1522, 1527, 1525, 86, 86, 86, 1521, + + 86, 1533, 86, 1534, 86, 1529, 1528, 86, 86, 1526, + 86, 86, 1536, 86, 1532, 86, 1530, 1531, 1538, 86, + 1535, 86, 1541, 86, 1537, 1539, 86, 86, 1540, 1545, + 86, 1544, 1547, 86, 86, 86, 1548, 86, 1549, 1542, + 86, 86, 1546, 1553, 86, 1550, 86, 86, 1543, 86, + 1552, 1555, 86, 86, 1556, 86, 1551, 86, 1561, 86, + 1557, 86, 86, 86, 86, 1566, 1554, 1564, 1558, 86, + 1559, 86, 86, 86, 1567, 86, 86, 1569, 1560, 1563, + 86, 1562, 1568, 1565, 86, 86, 169, 1571, 86, 86, + 1570, 1572, 86, 1573, 1574, 86, 1577, 1576, 86, 1575, + + 1578, 1579, 86, 86, 1581, 86, 86, 1580, 86, 86, + 1582, 1587, 86, 1588, 1584, 86, 1585, 86, 86, 86, + 1589, 1591, 86, 1590, 1583, 1586, 86, 86, 86, 1595, + 86, 1592, 86, 86, 86, 86, 171, 86, 1597, 1594, + 86, 1603, 1604, 86, 1599, 1593, 86, 86, 86, 1605, + 86, 1600, 1596, 1598, 1607, 86, 86, 1601, 86, 86, + 86, 1606, 86, 1602, 86, 1615, 1610, 86, 86, 1608, + 1612, 86, 86, 1613, 86, 1609, 1611, 1619, 1621, 86, + 1614, 86, 86, 86, 86, 1625, 86, 1616, 1623, 1618, + 1626, 86, 1620, 1617, 86, 1628, 86, 86, 86, 86, + + 86, 1624, 1627, 1640, 1622, 1629, 86, 86, 1630, 1636, + 86, 1631, 1634, 1632, 86, 1635, 1633, 86, 1639, 1637, + 1638, 1641, 1642, 86, 86, 86, 86, 1643, 86, 86, + 86, 1647, 86, 1644, 1648, 1649, 86, 86, 86, 86, + 167, 86, 1652, 1646, 86, 86, 1657, 86, 86, 1645, + 1650, 1658, 86, 1654, 1661, 86, 1651, 86, 1653, 1655, + 86, 86, 1656, 86, 86, 86, 1659, 1662, 86, 86, + 86, 1660, 86, 1663, 1669, 86, 86, 1665, 86, 1666, + 1664, 1671, 1670, 1667, 1668, 86, 1675, 1674, 1672, 86, + 86, 86, 1680, 1673, 86, 1679, 1681, 86, 86, 1677, + + 86, 86, 86, 1685, 1676, 86, 1683, 1684, 86, 86, + 86, 1678, 1689, 1690, 1682, 1688, 1691, 1686, 86, 86, + 86, 1692, 86, 86, 1693, 1696, 86, 86, 86, 86, + 1687, 1697, 86, 86, 86, 86, 86, 1698, 86, 1704, + 1703, 86, 86, 1694, 1700, 1695, 86, 1699, 1701, 1706, + 1702, 1707, 86, 1710, 86, 86, 1705, 1712, 1711, 86, + 86, 1709, 1713, 86, 86, 1715, 1708, 86, 86, 86, + 86, 86, 1723, 1722, 1714, 1719, 86, 1718, 86, 1716, + 86, 1724, 86, 1727, 86, 86, 1717, 86, 1720, 86, + 1730, 1721, 86, 1729, 86, 86, 86, 86, 86, 86, + + 1725, 166, 86, 1728, 1731, 86, 1739, 86, 1726, 86, + 1740, 1732, 1736, 1733, 1734, 86, 1735, 1738, 86, 86, + 1737, 1744, 86, 1745, 86, 86, 86, 86, 1741, 1747, + 1743, 1746, 1748, 86, 1742, 86, 1749, 1751, 86, 86, + 86, 1752, 86, 86, 1755, 86, 1750, 1759, 86, 86, + 1760, 1761, 86, 86, 1753, 1756, 1754, 86, 1765, 1758, + 1764, 86, 1757, 86, 1762, 1763, 86, 1766, 86, 86, + 86, 86, 1767, 86, 1772, 1773, 86, 86, 86, 1770, + 86, 1768, 1778, 1776, 86, 1777, 86, 1769, 86, 1780, + 86, 1771, 86, 86, 1775, 1774, 1781, 1782, 86, 86, + + 86, 86, 86, 86, 1786, 86, 1779, 86, 1783, 86, + 1791, 86, 1789, 86, 86, 1784, 1785, 86, 86, 86, + 1798, 86, 1795, 1787, 1797, 1788, 1792, 1790, 86, 86, + 86, 86, 1796, 1794, 1793, 86, 86, 1799, 86, 1800, + 86, 1804, 86, 1807, 1801, 86, 86, 1809, 86, 1810, + 1805, 86, 86, 1812, 86, 1803, 1802, 86, 86, 86, + 1806, 1808, 86, 1816, 86, 1819, 86, 86, 1815, 1818, + 1820, 1811, 86, 86, 171, 86, 1813, 1814, 1822, 86, + 86, 1817, 86, 86, 86, 1821, 86, 86, 1831, 1832, + 1823, 86, 86, 1824, 1825, 1830, 1828, 86, 1826, 1827, + + 1835, 86, 86, 86, 86, 86, 1836, 1837, 1829, 1840, + 1841, 1833, 1834, 86, 1843, 1839, 86, 86, 86, 86, + 86, 86, 1844, 1838, 86, 1842, 1846, 86, 86, 86, + 1848, 86, 1845, 1849, 86, 1851, 86, 1852, 1847, 86, + 86, 86, 86, 1853, 1856, 1850, 86, 1857, 86, 1854, + 86, 1864, 86, 1861, 1855, 1866, 1862, 86, 1858, 86, + 1859, 86, 1860, 86, 1865, 86, 86, 86, 1863, 1871, + 1868, 1867, 1869, 1872, 86, 1874, 1875, 86, 86, 86, + 1877, 86, 86, 1876, 86, 1878, 1879, 86, 1870, 1873, + 86, 86, 86, 86, 86, 1880, 1883, 1885, 1886, 1887, + + 1881, 1888, 86, 86, 86, 86, 1890, 86, 1889, 1882, + 86, 86, 86, 1884, 86, 1892, 1893, 86, 86, 1894, + 86, 86, 86, 86, 86, 1891, 86, 86, 86, 1895, + 86, 86, 1904, 1905, 86, 86, 1899, 1900, 1896, 1897, + 1901, 1898, 1902, 86, 86, 1911, 1908, 1909, 86, 1906, + 1907, 86, 1903, 86, 86, 86, 86, 1910, 1916, 86, + 1918, 86, 86, 1920, 86, 86, 86, 86, 1912, 1913, + 1915, 1919, 1922, 86, 1914, 86, 1917, 1923, 86, 1924, + 1926, 1921, 86, 86, 86, 86, 86, 86, 1925, 86, + 86, 1931, 1929, 86, 1932, 86, 1938, 1933, 86, 1927, + + 1928, 1930, 86, 1934, 1935, 1939, 86, 1940, 86, 1936, + 1941, 86, 86, 1942, 1943, 1937, 1944, 86, 86, 86, + 86, 1946, 1948, 1947, 86, 1945, 86, 86, 86, 1949, + 86, 86, 86, 1958, 86, 86, 1952, 1959, 1957, 1950, + 1954, 1956, 1951, 1955, 86, 86, 86, 1953, 86, 86, + 86, 1965, 86, 86, 86, 1960, 1966, 86, 1961, 1967, + 86, 86, 1963, 164, 1962, 1964, 86, 1971, 86, 1972, + 1970, 86, 1968, 86, 1974, 1969, 86, 1973, 1975, 86, + 1976, 86, 1982, 86, 86, 1978, 1980, 1984, 1979, 1981, + 86, 86, 1985, 86, 1977, 86, 86, 1991, 1986, 86, + + 1989, 1983, 1994, 86, 86, 1987, 1993, 86, 86, 1995, + 1990, 86, 1997, 1988, 86, 86, 86, 1992, 86, 86, + 1998, 2001, 86, 2005, 86, 1996, 86, 86, 86, 86, + 2000, 2003, 2002, 86, 2006, 1999, 86, 2004, 86, 86, + 86, 2007, 86, 2008, 2010, 2011, 86, 2012, 2014, 86, + 86, 2020, 2009, 2018, 86, 2013, 2021, 86, 86, 2015, + 86, 2022, 86, 2016, 2017, 2024, 86, 86, 86, 86, + 2028, 86, 86, 2023, 2030, 2019, 86, 86, 86, 86, + 86, 2034, 86, 86, 86, 2029, 2026, 2025, 2027, 2037, + 86, 86, 86, 2032, 2036, 86, 2033, 2039, 2031, 2035, + + 2040, 86, 86, 2038, 86, 171, 86, 2045, 86, 86, + 2041, 2048, 86, 2043, 2042, 2044, 86, 2046, 86, 2052, + 86, 86, 86, 2047, 86, 86, 2053, 86, 2049, 86, + 2050, 2055, 86, 86, 2060, 2051, 2054, 2056, 86, 2057, + 86, 86, 2064, 86, 86, 2061, 86, 2063, 2058, 2065, + 2067, 86, 2059, 86, 86, 2070, 2062, 86, 2068, 2071, + 86, 86, 86, 2069, 2066, 86, 86, 2073, 86, 2072, + 86, 2074, 86, 86, 86, 2079, 86, 86, 86, 2080, + 86, 86, 2075, 86, 162, 2081, 2084, 86, 2076, 2082, + 2077, 2078, 2085, 2083, 86, 86, 86, 2092, 86, 2088, + + 2087, 2090, 2091, 2093, 86, 2086, 2089, 86, 86, 86, + 86, 86, 86, 2100, 86, 86, 2094, 86, 2103, 86, + 2095, 2104, 86, 2105, 86, 86, 2096, 2097, 2098, 2101, + 2099, 2102, 2107, 86, 2106, 86, 2108, 86, 2112, 86, + 2109, 86, 2114, 2116, 86, 2113, 2110, 2115, 86, 86, + 86, 2118, 86, 86, 86, 86, 2121, 86, 2111, 2119, + 2122, 86, 86, 2125, 86, 86, 86, 2124, 2117, 86, + 86, 86, 86, 2130, 2128, 2123, 2129, 2120, 86, 2132, + 2126, 86, 2140, 2131, 86, 86, 86, 2127, 86, 86, + 2137, 86, 86, 2133, 2134, 2135, 86, 86, 2145, 2143, + + 2136, 2144, 2138, 2146, 86, 86, 2139, 86, 86, 2141, + 2149, 2142, 2148, 86, 2152, 86, 86, 86, 2150, 2147, + 86, 2156, 86, 86, 2153, 86, 2158, 86, 2151, 86, + 86, 2161, 2162, 86, 86, 86, 2154, 86, 2155, 2164, + 86, 86, 86, 86, 2171, 86, 2166, 2159, 86, 2157, + 2167, 2160, 2169, 86, 2163, 86, 86, 86, 86, 2170, + 2165, 86, 2174, 2168, 86, 2175, 86, 2177, 2173, 2172, + 2180, 86, 86, 2182, 86, 86, 86, 2181, 2185, 86, + 2179, 2184, 86, 2176, 86, 86, 86, 2178, 2186, 2188, + 2190, 2183, 2189, 86, 2187, 86, 86, 86, 86, 86, + + 86, 2194, 2192, 2196, 86, 2191, 86, 86, 2199, 2200, + 86, 2195, 2201, 86, 86, 86, 2193, 86, 86, 86, + 86, 2204, 2197, 2209, 86, 2208, 86, 86, 2203, 86, + 2202, 86, 2198, 86, 2206, 2214, 86, 2205, 86, 2215, + 86, 2207, 2216, 86, 2212, 86, 2211, 2218, 86, 2217, + 2210, 86, 2213, 86, 2220, 2219, 2222, 86, 86, 2221, + 86, 86, 86, 86, 2230, 2226, 2223, 2224, 86, 86, + 86, 86, 86, 2235, 86, 86, 2233, 2225, 86, 2236, + 86, 2227, 2228, 2229, 2232, 2234, 2231, 86, 86, 2238, + 2247, 2237, 86, 2243, 86, 2241, 86, 2242, 86, 2239, + + 2244, 86, 2245, 2248, 2240, 86, 86, 2246, 86, 86, + 2250, 2252, 86, 86, 86, 86, 2254, 86, 2251, 86, + 2256, 2258, 86, 2260, 2249, 2253, 2255, 86, 86, 86, + 2261, 86, 86, 171, 86, 86, 86, 86, 2264, 2275, + 2257, 86, 2268, 86, 2259, 86, 2265, 2262, 2266, 2269, + 86, 86, 2263, 86, 2267, 2298, 2270, 86, 2271, 2272, + 86, 2273, 86, 2274, 86, 86, 86, 86, 2281, 86, + 2276, 2277, 86, 2278, 2279, 86, 86, 2280, 2282, 86, + 2284, 86, 86, 86, 86, 2288, 86, 86, 2283, 2287, + 86, 86, 2289, 2285, 2286, 2290, 2291, 86, 2293, 86, + + 2292, 86, 86, 86, 86, 2300, 86, 2294, 86, 2299, + 2295, 86, 86, 86, 86, 2305, 86, 2302, 86, 86, + 2296, 86, 2297, 86, 2301, 86, 2306, 2304, 2308, 3652, + 2303, 86, 2309, 2313, 2307, 86, 2311, 86, 2310, 86, + 2312, 86, 2315, 2317, 86, 86, 2314, 86, 2318, 86, + 86, 86, 2316, 2324, 86, 86, 2326, 2319, 86, 86, + 2327, 86, 86, 2320, 2323, 2321, 2322, 2329, 86, 86, + 2330, 2325, 2331, 86, 86, 2332, 86, 2335, 86, 2328, + 86, 86, 2334, 86, 86, 2337, 86, 2340, 86, 2341, + 86, 86, 2333, 86, 2336, 86, 86, 2342, 86, 86, + + 86, 86, 86, 2338, 2339, 2344, 2346, 2345, 2347, 2349, + 2351, 2343, 86, 86, 2350, 2352, 86, 86, 86, 2354, + 86, 2357, 86, 2355, 2348, 2353, 2360, 86, 86, 86, + 2359, 2361, 2363, 2364, 86, 2358, 2356, 86, 86, 2366, + 2362, 86, 2365, 2367, 86, 2370, 86, 86, 86, 2369, + 86, 86, 86, 2375, 2377, 2368, 2371, 2373, 86, 86, + 86, 2378, 2374, 86, 2372, 2380, 86, 86, 86, 2383, + 86, 2376, 2379, 2382, 86, 2384, 86, 86, 86, 2385, + 2389, 86, 86, 86, 86, 2393, 86, 2390, 86, 2381, + 2394, 86, 2395, 2392, 2386, 2387, 2391, 86, 2388, 2398, + + 86, 86, 2399, 86, 86, 86, 2403, 2396, 86, 86, + 86, 2397, 86, 2404, 2400, 86, 86, 2405, 2407, 2401, + 2409, 86, 86, 2411, 86, 2402, 2408, 2406, 2410, 86, + 2412, 86, 86, 2413, 86, 86, 2414, 86, 2416, 2419, + 86, 86, 86, 2421, 2417, 86, 86, 2418, 2422, 86, + 2415, 2424, 86, 2423, 86, 86, 86, 2425, 2426, 2427, + 2428, 2420, 86, 2432, 86, 2429, 86, 86, 86, 86, + 86, 2431, 86, 86, 86, 2440, 2430, 86, 86, 86, + 86, 86, 3652, 86, 2433, 2434, 2435, 2438, 2436, 2439, + 2441, 2442, 2446, 86, 2437, 86, 86, 2443, 2444, 2447, + + 2445, 86, 2448, 2451, 86, 86, 86, 2450, 86, 2456, + 86, 86, 2458, 86, 86, 2449, 86, 2455, 86, 2452, + 2457, 86, 2461, 2453, 86, 86, 2462, 2465, 171, 86, + 2469, 2454, 2459, 86, 2467, 2460, 86, 2463, 86, 2468, + 86, 2470, 86, 86, 2464, 2471, 2472, 86, 86, 2473, + 2466, 2474, 86, 86, 2475, 2479, 86, 2478, 86, 2480, + 86, 2482, 86, 2483, 86, 2485, 86, 2484, 2476, 86, + 2486, 86, 2481, 86, 2488, 86, 86, 86, 2487, 2477, + 86, 2489, 86, 86, 86, 86, 2490, 2491, 86, 2494, + 86, 86, 86, 2497, 86, 2492, 86, 2503, 86, 2501, + + 2496, 2493, 86, 86, 86, 2495, 2504, 2499, 2498, 86, + 86, 86, 2500, 86, 2506, 86, 86, 86, 2502, 2505, + 86, 2507, 2512, 86, 2516, 2510, 2515, 86, 86, 2509, + 86, 86, 86, 2513, 2511, 86, 2508, 86, 2526, 86, + 86, 2514, 86, 86, 86, 2533, 86, 2517, 86, 2518, + 2519, 86, 2524, 86, 86, 2520, 2522, 2535, 2527, 2521, + 2523, 2528, 86, 2525, 86, 2529, 2531, 86, 2530, 86, + 86, 86, 2534, 2532, 86, 86, 2540, 2541, 86, 86, + 86, 2542, 2536, 2543, 86, 2538, 86, 2539, 3652, 86, + 2549, 86, 86, 2547, 2537, 2544, 2548, 86, 2550, 86, + + 2551, 2545, 2546, 86, 2554, 86, 2555, 86, 86, 86, + 86, 86, 2552, 2556, 2557, 2553, 86, 2561, 86, 2562, + 86, 86, 2564, 86, 86, 2566, 86, 86, 2560, 86, + 2558, 2559, 2568, 2569, 86, 2570, 86, 86, 86, 86, + 2563, 86, 2565, 86, 2567, 86, 86, 2572, 2577, 86, + 2576, 2571, 2579, 86, 86, 2574, 2573, 86, 86, 86, + 86, 86, 2575, 2581, 2583, 2578, 2582, 86, 2584, 2586, + 86, 86, 2580, 2589, 2588, 86, 2587, 86, 2592, 86, + 86, 86, 86, 2585, 86, 86, 2598, 86, 86, 2597, + 2590, 86, 86, 86, 86, 86, 2591, 2594, 2600, 2596, + + 2593, 2603, 86, 86, 2595, 86, 2601, 2599, 86, 2602, + 2605, 86, 2604, 2607, 86, 86, 2611, 2617, 86, 2606, + 86, 86, 2613, 86, 2614, 86, 2608, 2612, 86, 2609, + 2619, 86, 86, 86, 86, 86, 2620, 2610, 86, 2615, + 2618, 2616, 86, 2624, 86, 86, 2622, 2626, 86, 2627, + 2628, 86, 2630, 2631, 86, 2623, 2634, 2621, 86, 86, + 86, 2625, 86, 2629, 86, 2635, 86, 86, 86, 2633, + 86, 2636, 2632, 2639, 86, 86, 86, 86, 86, 86, + 2638, 2646, 86, 2641, 2642, 2643, 2644, 86, 2640, 2637, + 2647, 86, 2645, 3652, 86, 2648, 86, 86, 2652, 2649, + + 2653, 86, 2650, 2651, 86, 2654, 86, 86, 2657, 171, + 2656, 86, 86, 2655, 2658, 86, 86, 2663, 86, 86, + 86, 86, 86, 86, 86, 86, 2670, 86, 2661, 2665, + 2664, 2659, 2662, 2660, 2666, 2667, 2668, 2669, 86, 2673, + 2674, 86, 86, 2671, 2672, 86, 2675, 2676, 86, 86, + 86, 2679, 2677, 2680, 86, 2678, 2683, 86, 86, 86, + 2682, 86, 86, 2681, 86, 2684, 86, 86, 2688, 2689, + 2685, 86, 86, 86, 2693, 86, 2686, 86, 2691, 2694, + 86, 2692, 86, 86, 86, 2687, 2690, 2695, 2696, 86, + 86, 86, 86, 2697, 86, 2700, 2701, 86, 2698, 2703, + + 86, 86, 86, 86, 86, 2702, 86, 86, 2708, 2711, + 2699, 86, 2710, 86, 86, 86, 86, 2707, 86, 2712, + 2704, 2705, 2706, 86, 2713, 86, 2709, 2719, 86, 2714, + 2717, 86, 86, 2715, 2723, 2716, 86, 86, 2724, 2718, + 86, 2722, 86, 2720, 86, 2725, 86, 86, 2721, 2726, + 86, 2727, 86, 2730, 86, 86, 2732, 2731, 86, 86, + 2728, 2733, 2734, 86, 2729, 86, 2736, 86, 2738, 86, + 86, 2737, 2740, 86, 86, 2742, 86, 86, 86, 2741, + 86, 2739, 86, 86, 86, 86, 86, 2746, 86, 2735, + 2749, 2750, 2744, 2751, 86, 2743, 2745, 2752, 86, 86, + + 2753, 86, 2755, 86, 86, 2748, 86, 86, 2754, 2747, + 86, 86, 2758, 2760, 86, 2756, 86, 2763, 86, 86, + 2764, 86, 86, 2759, 2766, 2757, 2761, 2765, 2762, 86, + 86, 2769, 86, 86, 86, 86, 2770, 2767, 86, 2773, + 2775, 2771, 2774, 86, 2768, 86, 86, 86, 86, 86, + 86, 2780, 2772, 2779, 86, 2777, 86, 86, 86, 86, + 2778, 2784, 86, 2776, 2781, 2788, 86, 2787, 2782, 2783, + 2789, 86, 2790, 86, 2791, 86, 86, 86, 2785, 2786, + 86, 86, 2795, 86, 2796, 2794, 86, 2797, 2792, 86, + 86, 86, 86, 86, 3652, 2793, 86, 86, 2804, 86, + + 86, 2798, 86, 2800, 2806, 86, 2807, 86, 2809, 86, + 2799, 2808, 2801, 2803, 2802, 2805, 86, 86, 86, 86, + 86, 86, 2813, 86, 2811, 2814, 2817, 86, 2810, 86, + 2812, 86, 2818, 2819, 86, 86, 86, 86, 86, 2815, + 86, 2816, 2826, 86, 171, 86, 2828, 86, 2822, 86, + 86, 2821, 2824, 86, 86, 2820, 2827, 86, 2829, 2825, + 2823, 2832, 2830, 86, 86, 2831, 2835, 86, 86, 2837, + 86, 2836, 2838, 2839, 86, 2833, 86, 2834, 2840, 86, + 86, 2841, 86, 2842, 86, 2843, 2844, 2845, 86, 2846, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 2854, + + 3652, 86, 86, 2847, 2852, 86, 2858, 86, 86, 2849, + 2848, 2859, 2856, 2851, 2850, 86, 2853, 86, 2855, 2857, + 2860, 86, 2861, 86, 2862, 86, 2863, 2864, 86, 2866, + 86, 86, 2865, 2867, 86, 86, 86, 86, 86, 86, + 86, 2870, 86, 2868, 2877, 86, 2876, 2878, 86, 2869, + 2871, 86, 86, 86, 2872, 2873, 2874, 2875, 2881, 2882, + 86, 2884, 2879, 2883, 86, 86, 86, 86, 86, 2880, + 86, 2885, 86, 2891, 86, 86, 86, 2890, 86, 86, + 86, 2887, 3652, 2886, 2889, 86, 86, 2888, 2899, 86, + 2895, 2897, 86, 86, 2898, 2892, 2893, 86, 2894, 2900, + + 2896, 2901, 86, 86, 2902, 86, 86, 86, 86, 86, + 86, 86, 2903, 2906, 2907, 2908, 86, 86, 2905, 86, + 2913, 2914, 86, 86, 2904, 2917, 86, 2909, 2911, 86, + 2910, 86, 86, 86, 2912, 86, 2920, 2916, 2915, 86, + 2918, 2922, 86, 2923, 2924, 86, 2919, 86, 2921, 86, + 86, 2929, 86, 86, 86, 2925, 86, 86, 2933, 86, + 2932, 86, 2926, 2931, 86, 2930, 2934, 86, 86, 2927, + 2928, 2936, 86, 2937, 86, 86, 2940, 2939, 2935, 2942, + 86, 86, 2943, 2938, 86, 2945, 86, 86, 86, 86, + 86, 2952, 86, 86, 86, 2941, 86, 86, 86, 2949, + + 2946, 2947, 2948, 2950, 86, 2951, 2944, 2955, 86, 2956, + 86, 86, 2954, 2953, 86, 2957, 86, 2961, 86, 2959, + 86, 86, 86, 86, 2960, 2958, 86, 2962, 2963, 86, + 86, 2965, 2968, 86, 2966, 2970, 2964, 2967, 2969, 86, + 2972, 171, 2971, 86, 86, 86, 86, 2977, 3652, 2974, + 2973, 86, 86, 86, 86, 2979, 2978, 86, 2982, 86, + 2983, 86, 2981, 2975, 2976, 86, 2987, 2980, 2985, 86, + 86, 2988, 86, 2986, 86, 86, 86, 2992, 2984, 2989, + 2990, 86, 86, 86, 86, 2993, 86, 2994, 86, 86, + 2991, 2999, 3000, 2995, 86, 86, 2997, 86, 86, 3001, + + 86, 2996, 3003, 86, 86, 3005, 86, 3002, 86, 3006, + 2998, 3004, 86, 86, 86, 86, 86, 3008, 3009, 3010, + 3007, 86, 86, 86, 3015, 86, 86, 86, 86, 3012, + 3013, 3014, 3017, 3011, 3016, 3019, 86, 86, 86, 3652, + 86, 86, 3020, 86, 3018, 3025, 86, 3021, 86, 86, + 3026, 86, 86, 86, 3030, 86, 86, 3022, 3023, 3024, + 3028, 3029, 3033, 86, 3031, 86, 86, 3027, 86, 86, + 3032, 3040, 3037, 3038, 86, 3034, 3041, 86, 86, 3043, + 3035, 86, 86, 3044, 86, 86, 3036, 86, 86, 3045, + 86, 86, 3050, 3047, 3039, 86, 3042, 86, 86, 3048, + + 3051, 86, 3054, 86, 3049, 3052, 86, 86, 3056, 3053, + 86, 86, 3046, 3058, 86, 3059, 86, 3060, 86, 86, + 86, 3055, 86, 3061, 86, 3062, 3064, 86, 3057, 86, + 86, 3063, 3068, 86, 3066, 86, 3102, 3069, 86, 86, + 3072, 86, 3067, 86, 3065, 3070, 3073, 86, 3074, 86, + 3075, 86, 86, 86, 3077, 3071, 3076, 3079, 86, 86, + 86, 3080, 3082, 86, 86, 3078, 86, 3083, 3084, 86, + 3086, 86, 86, 86, 3090, 3085, 86, 3087, 3652, 3081, + 86, 3091, 86, 3093, 86, 86, 86, 3089, 3092, 86, + 3088, 3094, 3095, 86, 86, 3101, 86, 3096, 86, 3097, + + 3100, 86, 86, 3104, 86, 3098, 3103, 86, 86, 86, + 3110, 86, 3105, 3099, 3107, 86, 3106, 86, 3109, 86, + 86, 3108, 86, 86, 3113, 3117, 86, 86, 86, 86, + 86, 3119, 86, 86, 3111, 3112, 86, 3116, 3114, 3120, + 3123, 3118, 3115, 3121, 3652, 3124, 86, 3126, 3150, 3122, + 3125, 86, 3127, 86, 86, 3128, 3129, 86, 86, 3130, + 86, 3131, 86, 3132, 86, 3133, 86, 3134, 86, 86, + 3135, 86, 3138, 3136, 86, 86, 86, 86, 86, 3140, + 86, 3142, 86, 3147, 86, 3139, 3143, 3148, 86, 3137, + 86, 3151, 86, 3149, 3141, 86, 86, 3652, 3144, 86, + + 3145, 3152, 3146, 3154, 86, 86, 3155, 3156, 86, 86, + 3157, 3158, 86, 86, 3153, 86, 86, 86, 3159, 3164, + 86, 86, 3160, 86, 3161, 3162, 3165, 86, 86, 86, + 3167, 86, 3166, 3171, 86, 3163, 86, 86, 3172, 86, + 3169, 3175, 3168, 86, 86, 3174, 3170, 3173, 3176, 3177, + 86, 3179, 86, 86, 86, 86, 3183, 86, 3178, 86, + 86, 86, 86, 86, 86, 86, 86, 3180, 3184, 3187, + 3190, 3188, 3185, 3182, 3652, 86, 86, 3191, 86, 3181, + 3193, 86, 3195, 3189, 86, 86, 3186, 3192, 86, 3194, + 86, 3198, 86, 3197, 3196, 86, 3200, 3202, 86, 3201, + + 3203, 86, 3204, 86, 3199, 86, 86, 3652, 86, 3209, + 86, 86, 3206, 3208, 3205, 86, 3210, 86, 3212, 86, + 86, 86, 3211, 86, 86, 3207, 86, 3218, 3213, 3216, + 3220, 86, 3214, 86, 86, 86, 86, 3224, 3221, 86, + 3222, 3217, 3215, 86, 3223, 86, 86, 86, 3229, 86, + 86, 3219, 86, 86, 86, 86, 86, 86, 3233, 86, + 3226, 3227, 3225, 3230, 3234, 3231, 3232, 3228, 86, 86, + 86, 3240, 3235, 3238, 86, 86, 3236, 3237, 86, 3239, + 3244, 86, 86, 3241, 3245, 86, 3247, 86, 86, 86, + 86, 3248, 86, 3242, 86, 3250, 3251, 86, 3253, 86, + + 86, 3246, 3249, 86, 3243, 3256, 3254, 86, 3252, 86, + 3255, 86, 3258, 3259, 86, 3262, 86, 86, 86, 3257, + 3261, 86, 86, 3265, 86, 3268, 86, 3269, 86, 3260, + 86, 3271, 3266, 86, 86, 3272, 3264, 86, 86, 3263, + 3274, 86, 86, 3267, 3275, 86, 3278, 86, 3270, 86, + 86, 86, 3283, 3276, 86, 86, 3273, 86, 86, 3281, + 3280, 86, 3277, 3287, 86, 86, 3279, 3285, 3289, 86, + 86, 3282, 3290, 3284, 86, 3291, 3288, 3286, 86, 3294, + 3295, 86, 3292, 86, 3297, 86, 3296, 86, 86, 86, + 86, 3300, 86, 3299, 3301, 86, 3303, 86, 3293, 86, + + 3306, 86, 86, 86, 86, 3298, 86, 3311, 86, 3307, + 86, 86, 3327, 86, 3302, 86, 3304, 3305, 86, 3310, + 3318, 3308, 3314, 3315, 86, 86, 3313, 3316, 86, 3309, + 3312, 3317, 86, 86, 3321, 86, 3322, 86, 3320, 3319, + 3323, 86, 3324, 86, 86, 86, 86, 3329, 86, 86, + 86, 3328, 3331, 86, 3332, 86, 86, 3325, 86, 86, + 86, 86, 3338, 3339, 86, 3330, 86, 86, 86, 3333, + 86, 3326, 3345, 86, 86, 3346, 86, 86, 3334, 3336, + 3335, 3337, 3342, 3344, 86, 3348, 3341, 86, 86, 86, + 3343, 86, 3340, 3351, 86, 3347, 3353, 86, 3354, 86, + + 86, 3357, 86, 86, 3349, 3355, 3350, 86, 3356, 86, + 3352, 3359, 3360, 86, 3358, 86, 86, 86, 86, 86, + 3361, 3362, 86, 3363, 3366, 86, 86, 86, 86, 3364, + 86, 3368, 86, 86, 3367, 3369, 3365, 86, 86, 86, + 3652, 86, 86, 3381, 86, 3370, 3378, 3379, 3371, 86, + 3372, 3373, 3380, 3374, 86, 3375, 3376, 86, 86, 3382, + 3377, 3384, 3386, 86, 3383, 3387, 86, 86, 3389, 86, + 3385, 3388, 86, 86, 3392, 86, 86, 3390, 3394, 86, + 3395, 3396, 86, 86, 3397, 3398, 3402, 86, 3399, 86, + 86, 3393, 3391, 3400, 3401, 3403, 86, 86, 3405, 86, + + 86, 86, 86, 3408, 86, 86, 3404, 86, 3412, 86, + 86, 86, 3411, 86, 86, 3407, 86, 86, 3406, 86, + 3415, 3416, 86, 3417, 3409, 3410, 86, 3420, 3421, 86, + 3413, 3418, 86, 3423, 86, 3422, 3414, 3419, 3424, 86, + 3425, 86, 86, 86, 86, 3430, 86, 3427, 3432, 3426, + 3431, 86, 3428, 86, 86, 3429, 86, 86, 86, 3439, + 86, 3434, 3436, 3437, 3440, 86, 3442, 86, 86, 3433, + 86, 3441, 3443, 86, 3435, 3438, 86, 3446, 86, 3447, + 86, 3445, 86, 3444, 86, 3450, 86, 3451, 86, 3452, + 86, 3448, 3453, 86, 3454, 86, 3455, 86, 3456, 86, + + 3457, 86, 3449, 86, 86, 3460, 86, 3461, 86, 86, + 86, 86, 86, 3459, 3465, 86, 86, 86, 3462, 3467, + 86, 86, 3463, 86, 3471, 3472, 86, 3468, 86, 3458, + 3469, 3464, 86, 3470, 86, 3466, 3474, 86, 86, 86, + 3478, 3476, 86, 3473, 86, 3480, 3481, 86, 86, 86, + 3475, 86, 86, 3483, 86, 86, 86, 86, 86, 86, + 3477, 3482, 3479, 3487, 3488, 3496, 86, 86, 3484, 3485, + 3486, 3489, 86, 3490, 86, 86, 86, 3493, 3494, 3492, + 3497, 86, 3491, 3498, 86, 86, 86, 3495, 86, 86, + 3501, 86, 86, 86, 3500, 86, 86, 3506, 3507, 3499, + + 86, 3509, 86, 3503, 3505, 86, 86, 86, 3502, 86, + 3508, 86, 86, 86, 3504, 3510, 86, 86, 3518, 86, + 86, 3516, 3513, 86, 3511, 3512, 3515, 86, 3517, 3522, + 86, 86, 3520, 3525, 3514, 86, 3524, 86, 3519, 3521, + 3527, 86, 86, 3523, 3529, 86, 3528, 86, 3530, 3531, + 86, 3532, 86, 86, 86, 3526, 86, 3535, 86, 86, + 86, 3533, 3540, 3536, 3537, 86, 86, 86, 86, 3544, + 86, 86, 3543, 3534, 86, 3539, 3546, 86, 3542, 3541, + 86, 3538, 3547, 86, 3548, 86, 3551, 86, 86, 3549, + 86, 3545, 3554, 86, 86, 3555, 86, 86, 86, 3550, + + 3558, 3559, 86, 3552, 3556, 86, 86, 86, 3553, 86, + 3564, 86, 3560, 86, 3563, 3561, 3557, 3565, 86, 86, + 86, 86, 86, 86, 3562, 86, 3569, 86, 3571, 86, + 86, 86, 86, 86, 3566, 3568, 3576, 3577, 86, 3567, + 3570, 86, 3573, 3574, 3572, 3584, 3575, 3578, 86, 3582, + 86, 86, 86, 3579, 86, 3585, 3580, 3583, 86, 86, + 3581, 86, 86, 3586, 3587, 3590, 3588, 3591, 86, 86, + 86, 86, 3593, 86, 3592, 86, 86, 86, 86, 3594, + 3599, 3589, 86, 3596, 86, 86, 86, 86, 3602, 3595, + 3603, 86, 86, 86, 86, 86, 3597, 3598, 3601, 3606, + + 86, 3600, 3604, 3607, 86, 3605, 86, 3610, 3609, 3611, + 86, 3608, 86, 3612, 86, 3614, 86, 3616, 86, 3617, + 86, 86, 86, 3621, 86, 3618, 3652, 86, 3619, 3624, + 86, 3615, 3622, 86, 86, 3623, 3613, 86, 86, 86, + 86, 3620, 86, 86, 3625, 3626, 86, 3628, 3630, 86, + 86, 3632, 86, 3627, 86, 3633, 86, 3636, 3629, 3631, + 3637, 86, 3634, 86, 86, 3640, 3641, 86, 86, 3643, + 86, 3635, 86, 3638, 86, 3642, 3644, 86, 86, 3645, + 86, 86, 3639, 3646, 3652, 3647, 3650, 86, 3651, 86, + 3652, 3652, 3652, 3648, 3652, 3652, 3652, 3652, 3652, 3652, + + 3649, 47, 47, 47, 47, 47, 47, 47, 52, 52, + 52, 52, 52, 52, 52, 57, 57, 57, 57, 57, + 57, 57, 63, 63, 63, 63, 63, 63, 63, 68, + 68, 68, 68, 68, 68, 68, 74, 74, 74, 74, + 74, 74, 74, 80, 80, 80, 80, 80, 80, 80, + 89, 89, 3652, 89, 89, 89, 89, 161, 161, 3652, + 3652, 3652, 161, 161, 163, 163, 3652, 3652, 163, 3652, + 163, 165, 3652, 3652, 3652, 3652, 3652, 165, 168, 168, + 3652, 3652, 3652, 168, 168, 170, 3652, 3652, 3652, 3652, + 3652, 170, 172, 172, 3652, 172, 172, 172, 172, 175, + + 3652, 3652, 3652, 3652, 3652, 175, 178, 178, 3652, 3652, + 3652, 178, 178, 90, 90, 3652, 90, 90, 90, 90, + 17, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, + 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, + 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, + 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, + 3652 } ; -static const flex_int16_t yy_chk[7114] = +static const flex_int16_t yy_chk[7162] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2413,781 +2425,786 @@ static const flex_int16_t yy_chk[7114] = 5, 3, 6, 24, 4, 24, 24, 5, 24, 6, 7, 7, 7, 7, 24, 7, 8, 8, 8, 8, 33, 8, 7, 9, 9, 9, 26, 26, 8, 10, - 10, 10, 19, 29, 9, 33, 19, 29, 3635, 35, + 10, 10, 19, 29, 9, 33, 19, 29, 3660, 35, 10, 11, 11, 11, 11, 11, 11, 13, 13, 13, - 13, 34, 13, 11, 35, 99, 34, 29, 38, 13, + 13, 34, 13, 11, 35, 100, 34, 29, 38, 13, 51, 51, 11, 12, 12, 12, 12, 12, 12, 14, - 14, 14, 14, 99, 14, 12, 15, 15, 15, 38, - 23, 14, 23, 23, 12, 23, 46, 15, 16, 16, - 16, 23, 23, 25, 27, 27, 25, 25, 2947, 16, - 25, 46, 27, 30, 30, 25, 27, 56, 40, 27, - 56, 73, 31, 31, 25, 28, 67, 67, 30, 32, - 28, 31, 40, 32, 28, 73, 32, 28, 92, 28, - 28, 92, 31, 32, 1148, 32, 36, 36, 37, 37, - 28, 45, 45, 37, 97, 36, 45, 97, 41, 41, - - 45, 36, 87, 41, 93, 36, 87, 37, 93, 37, - 39, 39, 42, 41, 41, 39, 41, 42, 96, 39, - 42, 43, 43, 105, 43, 39, 44, 42, 39, 101, - 44, 42, 42, 43, 94, 39, 84, 84, 96, 43, - 44, 94, 105, 101, 44, 44, 62, 192, 62, 62, - 70, 62, 70, 70, 72, 70, 72, 72, 79, 72, - 79, 79, 70, 79, 86, 95, 86, 86, 89, 86, - 89, 89, 192, 89, 100, 86, 102, 95, 98, 89, - 89, 98, 102, 100, 103, 104, 106, 107, 102, 113, - 102, 109, 106, 113, 98, 108, 111, 140, 114, 112, - - 108, 107, 103, 103, 110, 106, 116, 104, 115, 108, - 119, 109, 140, 115, 111, 110, 110, 112, 114, 117, - 116, 118, 117, 110, 122, 117, 120, 118, 123, 119, - 121, 120, 124, 121, 125, 130, 124, 121, 117, 117, - 127, 125, 123, 122, 126, 128, 118, 127, 122, 129, - 132, 120, 131, 121, 128, 130, 131, 126, 134, 133, - 135, 136, 129, 133, 138, 135, 137, 137, 132, 135, - 139, 141, 142, 144, 139, 257, 134, 257, 146, 150, - 151, 136, 143, 139, 138, 143, 144, 145, 149, 139, - 146, 142, 148, 145, 147, 147, 143, 141, 150, 148, - - 143, 151, 152, 153, 149, 153, 155, 154, 156, 157, - 148, 155, 147, 227, 153, 147, 158, 159, 152, 154, - 156, 158, 161, 161, 179, 163, 153, 157, 163, 179, - 165, 159, 165, 165, 227, 165, 168, 168, 170, 181, - 170, 170, 171, 170, 171, 171, 173, 171, 175, 173, - 175, 175, 180, 175, 171, 178, 178, 181, 180, 182, - 183, 184, 185, 186, 187, 189, 188, 180, 183, 190, - 185, 188, 184, 213, 182, 183, 193, 191, 190, 187, - 177, 193, 186, 191, 191, 189, 194, 194, 195, 197, - 196, 213, 196, 197, 195, 196, 198, 198, 197, 199, - - 200, 201, 202, 197, 204, 200, 200, 202, 203, 197, - 197, 199, 196, 203, 205, 206, 204, 209, 207, 208, - 201, 206, 207, 210, 208, 211, 212, 214, 176, 218, - 215, 217, 214, 209, 205, 215, 217, 210, 212, 219, - 211, 212, 216, 216, 206, 220, 216, 224, 216, 218, - 223, 220, 221, 221, 259, 219, 223, 222, 225, 226, - 216, 259, 216, 222, 225, 226, 228, 224, 229, 222, - 230, 231, 228, 229, 226, 231, 230, 232, 233, 235, - 233, 234, 236, 232, 237, 233, 239, 234, 236, 238, - 240, 242, 235, 241, 243, 238, 242, 244, 240, 239, - - 245, 246, 248, 243, 237, 247, 241, 248, 239, 249, - 247, 247, 244, 250, 251, 253, 245, 250, 252, 254, - 255, 246, 258, 256, 252, 254, 260, 249, 256, 261, - 262, 263, 260, 253, 253, 261, 251, 263, 264, 265, - 255, 258, 266, 266, 267, 267, 268, 273, 269, 262, - 264, 276, 268, 265, 269, 270, 271, 270, 272, 273, - 275, 274, 277, 272, 278, 289, 279, 277, 275, 280, - 268, 276, 279, 281, 270, 280, 282, 283, 281, 271, - 274, 282, 284, 283, 285, 286, 287, 278, 288, 290, - 289, 291, 293, 293, 291, 290, 288, 284, 285, 292, - - 287, 292, 294, 286, 295, 294, 296, 296, 297, 297, - 298, 300, 299, 301, 300, 302, 303, 301, 304, 307, - 312, 312, 295, 306, 302, 303, 298, 299, 308, 306, - 309, 316, 309, 307, 308, 310, 311, 304, 313, 314, - 311, 310, 315, 313, 317, 314, 319, 318, 315, 320, - 320, 316, 321, 322, 323, 321, 324, 311, 323, 319, - 325, 327, 317, 326, 326, 329, 328, 315, 318, 328, - 330, 322, 332, 334, 335, 324, 330, 329, 325, 327, - 331, 339, 334, 331, 332, 336, 328, 333, 338, 340, - 336, 338, 335, 174, 339, 337, 333, 342, 337, 333, - - 337, 340, 342, 342, 333, 333, 333, 333, 341, 343, - 341, 341, 343, 337, 344, 344, 337, 345, 346, 349, - 347, 348, 350, 351, 351, 352, 353, 353, 349, 355, - 352, 350, 358, 346, 345, 347, 357, 345, 348, 348, - 354, 354, 356, 359, 355, 360, 361, 356, 357, 364, - 365, 358, 361, 362, 362, 365, 362, 367, 366, 372, - 360, 768, 367, 359, 366, 362, 368, 370, 372, 364, - 369, 368, 362, 369, 374, 369, 371, 368, 768, 371, - 374, 370, 373, 373, 375, 375, 376, 381, 379, 382, - 388, 376, 371, 380, 392, 371, 380, 371, 377, 377, - - 411, 377, 381, 383, 382, 388, 385, 377, 379, 385, - 386, 377, 411, 389, 380, 392, 377, 383, 393, 377, - 378, 378, 389, 378, 386, 385, 390, 391, 398, 395, - 394, 390, 390, 391, 396, 399, 378, 393, 395, 378, - 391, 378, 397, 378, 387, 394, 387, 387, 397, 403, - 400, 405, 404, 396, 398, 399, 387, 387, 387, 387, - 387, 401, 407, 387, 400, 402, 405, 401, 406, 403, - 402, 401, 404, 406, 408, 409, 409, 407, 410, 412, - 408, 413, 414, 415, 416, 418, 419, 413, 402, 416, - 420, 417, 417, 412, 417, 421, 425, 169, 410, 415, - - 425, 422, 419, 422, 428, 418, 420, 414, 423, 421, - 427, 427, 424, 423, 424, 424, 426, 432, 429, 433, - 426, 430, 431, 428, 435, 436, 167, 433, 433, 441, - 435, 432, 424, 429, 436, 426, 439, 430, 437, 433, - 431, 433, 434, 437, 438, 439, 440, 434, 438, 443, - 441, 442, 440, 443, 446, 434, 434, 442, 444, 434, - 434, 444, 445, 434, 447, 447, 448, 445, 449, 449, - 450, 451, 452, 452, 446, 450, 453, 454, 455, 448, - 456, 454, 453, 457, 451, 458, 459, 459, 457, 461, - 458, 460, 462, 455, 463, 459, 464, 465, 470, 464, - - 466, 456, 465, 460, 466, 467, 463, 468, 468, 461, - 462, 469, 471, 471, 472, 477, 469, 467, 476, 470, - 474, 474, 478, 477, 479, 480, 481, 482, 483, 487, - 485, 481, 489, 479, 486, 490, 472, 488, 489, 476, - 483, 507, 493, 478, 490, 507, 480, 482, 485, 487, - 485, 488, 486, 491, 494, 492, 493, 496, 495, 491, - 492, 495, 494, 497, 498, 494, 499, 500, 503, 502, - 505, 496, 499, 498, 501, 502, 504, 501, 497, 506, - 508, 504, 503, 509, 510, 508, 511, 500, 512, 510, - 513, 516, 505, 502, 517, 518, 528, 519, 509, 520, - - 506, 519, 511, 513, 522, 528, 166, 512, 514, 514, - 518, 516, 521, 527, 514, 517, 514, 521, 520, 523, - 522, 524, 514, 523, 514, 525, 524, 514, 514, 527, - 524, 526, 527, 529, 514, 530, 526, 531, 532, 529, - 525, 532, 533, 534, 529, 535, 535, 536, 537, 537, - 530, 538, 539, 531, 540, 542, 526, 541, 541, 543, - 546, 545, 544, 534, 539, 533, 538, 544, 547, 540, - 545, 548, 536, 550, 542, 554, 551, 548, 555, 546, - 551, 543, 550, 547, 552, 553, 556, 554, 552, 557, - 559, 553, 558, 555, 560, 562, 561, 562, 560, 563, - - 565, 565, 564, 557, 567, 556, 566, 558, 559, 561, - 564, 568, 566, 569, 571, 570, 567, 568, 570, 572, - 575, 573, 576, 563, 574, 569, 573, 574, 571, 575, - 578, 579, 579, 587, 572, 577, 575, 586, 576, 575, - 577, 577, 581, 578, 580, 580, 582, 582, 581, 583, - 583, 584, 588, 585, 587, 586, 590, 584, 585, 585, - 589, 590, 591, 589, 588, 592, 593, 594, 595, 593, - 596, 597, 594, 592, 598, 597, 599, 601, 600, 602, - 598, 591, 600, 603, 602, 604, 604, 605, 606, 596, - 609, 595, 608, 607, 610, 601, 599, 603, 607, 611, - - 164, 613, 605, 612, 618, 611, 609, 615, 612, 606, - 614, 608, 617, 614, 610, 613, 616, 616, 614, 619, - 618, 614, 614, 620, 619, 615, 621, 622, 620, 624, - 617, 626, 625, 627, 626, 624, 629, 627, 628, 629, - 621, 625, 622, 628, 630, 631, 632, 633, 635, 630, - 634, 636, 640, 635, 633, 637, 637, 638, 639, 627, - 641, 631, 644, 634, 632, 642, 638, 643, 644, 645, - 650, 636, 162, 640, 642, 645, 641, 639, 646, 643, - 651, 646, 647, 647, 648, 647, 649, 648, 650, 652, - 653, 649, 654, 655, 651, 653, 656, 658, 657, 655, - - 658, 656, 659, 652, 657, 660, 662, 661, 663, 664, - 660, 654, 661, 661, 664, 666, 665, 667, 668, 662, - 669, 663, 665, 668, 670, 670, 667, 659, 664, 664, - 671, 672, 673, 674, 666, 673, 675, 671, 672, 674, - 669, 676, 678, 678, 679, 681, 676, 677, 675, 680, - 673, 680, 677, 677, 683, 682, 676, 682, 684, 685, - 686, 687, 688, 689, 681, 690, 693, 689, 688, 679, - 691, 692, 683, 694, 690, 695, 684, 685, 695, 686, - 696, 687, 697, 698, 693, 691, 692, 695, 697, 700, - 699, 701, 694, 702, 703, 696, 704, 705, 707, 734, - - 704, 700, 706, 698, 699, 708, 709, 710, 712, 716, - 701, 734, 711, 703, 702, 705, 707, 711, 706, 713, - 713, 715, 712, 708, 708, 709, 710, 714, 716, 717, - 718, 714, 719, 720, 721, 715, 723, 719, 722, 726, - 717, 724, 727, 723, 718, 725, 724, 727, 729, 720, - 728, 722, 725, 721, 730, 728, 731, 732, 733, 736, - 743, 730, 735, 726, 736, 731, 729, 733, 735, 737, - 738, 732, 737, 739, 738, 740, 741, 750, 742, 744, - 744, 743, 746, 746, 740, 745, 745, 739, 747, 748, - 752, 741, 742, 747, 745, 751, 750, 754, 748, 753, - - 755, 751, 756, 753, 758, 757, 759, 761, 760, 754, - 752, 757, 758, 759, 762, 765, 772, 774, 771, 776, - 756, 799, 772, 775, 799, 755, 760, 771, 776, 775, - 765, 160, 761, 777, 762, 763, 784, 763, 778, 774, - 763, 781, 778, 782, 763, 779, 779, 763, 783, 777, - 780, 780, 781, 785, 763, 763, 784, 763, 787, 785, - 792, 782, 783, 786, 786, 786, 788, 786, 789, 790, - 786, 788, 791, 793, 794, 786, 791, 793, 787, 794, - 795, 786, 786, 796, 792, 797, 798, 790, 796, 789, - 800, 801, 803, 793, 807, 800, 800, 807, 801, 795, - - 797, 802, 802, 804, 805, 805, 812, 803, 804, 806, - 808, 798, 809, 809, 806, 808, 810, 811, 810, 813, - 814, 818, 815, 813, 816, 812, 817, 817, 819, 811, - 820, 820, 816, 821, 822, 823, 818, 824, 85, 825, - 814, 815, 819, 824, 825, 829, 822, 826, 826, 827, - 829, 821, 830, 831, 827, 827, 832, 823, 830, 833, - 834, 836, 832, 837, 833, 835, 834, 836, 835, 838, - 838, 837, 831, 839, 839, 840, 841, 842, 844, 845, - 843, 847, 842, 840, 843, 844, 846, 848, 848, 849, - 852, 850, 851, 851, 841, 853, 852, 845, 849, 850, - - 847, 855, 846, 856, 857, 860, 858, 859, 860, 862, - 855, 858, 856, 861, 853, 863, 859, 864, 861, 865, - 867, 868, 868, 862, 866, 870, 864, 869, 857, 866, - 866, 872, 865, 873, 867, 874, 871, 876, 874, 876, - 863, 878, 869, 880, 870, 871, 874, 877, 877, 879, - 881, 873, 882, 883, 879, 872, 884, 885, 886, 887, - 888, 889, 878, 887, 880, 890, 885, 892, 891, 893, - 881, 890, 882, 894, 895, 883, 884, 891, 888, 892, - 889, 886, 897, 896, 898, 893, 899, 901, 895, 896, - 897, 899, 894, 900, 900, 902, 903, 904, 898, 905, - - 906, 907, 908, 911, 909, 903, 901, 905, 910, 911, - 912, 913, 914, 915, 916, 902, 912, 904, 914, 920, - 906, 908, 923, 907, 909, 913, 917, 915, 910, 918, - 921, 922, 917, 919, 916, 918, 922, 919, 920, 924, - 924, 925, 921, 923, 928, 926, 927, 925, 929, 927, - 921, 926, 930, 931, 932, 932, 933, 937, 930, 934, - 935, 929, 928, 935, 934, 936, 939, 939, 940, 941, - 936, 936, 937, 931, 933, 938, 935, 942, 935, 938, - 943, 945, 942, 946, 949, 948, 950, 952, 952, 941, - 940, 953, 955, 955, 954, 953, 956, 946, 948, 943, - - 958, 963, 957, 1013, 949, 945, 957, 950, 951, 954, - 963, 951, 959, 951, 961, 958, 1013, 951, 960, 951, - 964, 956, 966, 960, 951, 962, 959, 968, 961, 951, - 962, 962, 965, 969, 964, 967, 965, 966, 969, 968, - 967, 970, 971, 972, 973, 982, 974, 80, 965, 976, - 967, 974, 975, 973, 976, 970, 977, 972, 975, 978, - 979, 979, 977, 971, 980, 978, 981, 982, 983, 980, - 984, 986, 981, 987, 989, 990, 990, 988, 987, 991, - 993, 995, 996, 986, 991, 992, 989, 983, 984, 985, - 985, 988, 994, 992, 997, 985, 993, 985, 998, 1000, - - 995, 996, 999, 985, 998, 1001, 994, 999, 985, 985, - 997, 1000, 1002, 1003, 1004, 985, 1005, 1005, 1006, 1007, - 1009, 1010, 1006, 1001, 1010, 1011, 1009, 1014, 1002, 1012, - 1015, 1003, 1004, 1014, 1012, 1015, 1016, 1018, 1019, 1007, - 1020, 1022, 1021, 1023, 1011, 1025, 1018, 1019, 1021, 1024, - 1022, 1027, 1026, 1038, 1024, 1016, 1020, 1028, 1029, 1030, - 1032, 1037, 1023, 1035, 1031, 1025, 1026, 1029, 1030, 1028, - 1031, 1027, 1033, 1038, 1040, 1037, 1039, 1032, 1033, 1035, - 1041, 1039, 1042, 1043, 1044, 1045, 1048, 1049, 75, 1044, - 1045, 1048, 1054, 1040, 1041, 1053, 1049, 1051, 1043, 1052, - - 1042, 1050, 1050, 1051, 1053, 1052, 1055, 1054, 1057, 1058, - 1063, 1062, 1060, 1060, 1058, 1058, 1060, 1061, 1064, 1055, - 1061, 1065, 1066, 1067, 1057, 1062, 1068, 1069, 1071, 1077, - 1063, 1070, 1068, 74, 1064, 1066, 1072, 1070, 1067, 1065, - 1073, 1072, 1080, 1071, 1075, 1075, 1076, 1069, 1078, 1076, - 1077, 1079, 1081, 1078, 1073, 1082, 1079, 1083, 1080, 1084, - 1082, 1081, 1083, 1086, 1087, 1092, 1088, 1089, 1091, 1086, - 1095, 1084, 1088, 1089, 1090, 1090, 1093, 1091, 1096, 1093, - 1087, 1094, 1094, 1092, 1097, 1099, 1098, 1100, 1095, 1098, - 1101, 1136, 1110, 1100, 1102, 1136, 1101, 1096, 1099, 1105, - - 1102, 1103, 1104, 1106, 1097, 1105, 1103, 1104, 1106, 1107, - 1110, 1109, 1111, 1112, 1115, 1107, 1109, 1113, 1116, 1112, - 1114, 1114, 1113, 1115, 1117, 1118, 1119, 1116, 1120, 1117, - 1121, 1120, 1111, 1121, 1123, 1122, 1124, 1125, 1126, 1123, - 1129, 1127, 1128, 1118, 1132, 1119, 1122, 1127, 1128, 1125, - 1133, 1130, 1131, 1131, 1124, 1129, 1130, 1126, 1134, 1135, - 1137, 1139, 1138, 1132, 1133, 1140, 1142, 1143, 1143, 1145, - 1134, 1138, 1147, 1144, 1145, 1149, 1150, 1135, 1137, 1146, - 1139, 1144, 1151, 1152, 1146, 1142, 1153, 1155, 1152, 1149, - 1140, 1150, 1147, 1156, 1151, 1153, 1154, 1154, 1157, 1156, - - 1158, 1159, 1166, 1160, 1157, 1160, 1159, 1155, 1161, 1162, - 1163, 1165, 1164, 1161, 1168, 1167, 1158, 1164, 1169, 1171, - 1171, 1166, 1167, 1162, 1163, 1172, 1165, 1173, 1174, 1168, - 1175, 1176, 68, 1177, 1180, 1180, 1175, 1169, 1177, 1172, - 1179, 1181, 1184, 1174, 1179, 1173, 1181, 1177, 1183, 1177, - 1186, 1176, 1177, 1182, 1182, 1183, 1184, 1185, 1187, 1188, - 1185, 1189, 1190, 1191, 1192, 1194, 1189, 1193, 1188, 1186, - 1192, 1195, 1193, 1196, 1201, 1191, 1187, 1198, 1198, 1194, - 1199, 1190, 1195, 1200, 1202, 1199, 1203, 1204, 1200, 1202, - 1203, 1205, 1196, 1206, 1201, 1207, 1204, 1208, 1209, 1211, - - 1208, 1212, 1213, 1210, 1214, 63, 1205, 1218, 1206, 1208, - 1210, 1211, 1215, 1209, 1207, 1216, 1219, 1220, 1215, 1217, - 1212, 1222, 1214, 1213, 1221, 1217, 1220, 1218, 1224, 1223, - 1216, 1225, 1227, 1226, 1228, 1231, 1219, 1230, 1227, 1221, - 1222, 1223, 1234, 1230, 1232, 1233, 1236, 1224, 1226, 1235, - 1231, 1236, 1237, 1233, 1228, 1238, 1225, 1239, 1232, 1240, - 1238, 1238, 1234, 1245, 1237, 1235, 1241, 1242, 1242, 1244, - 58, 1246, 1245, 1240, 1247, 1247, 1239, 1246, 1248, 1241, - 1243, 1243, 1244, 1248, 1250, 1243, 1249, 1251, 1243, 1243, - 1250, 1252, 1251, 1243, 1254, 1249, 1252, 1253, 1253, 1243, - - 1255, 1255, 1256, 1243, 1257, 1256, 1259, 1256, 1258, 1260, - 1261, 1262, 1259, 1263, 1264, 1254, 1262, 1265, 1260, 1266, - 1305, 1269, 1305, 1265, 1257, 1266, 1258, 1263, 1267, 1270, - 1261, 1268, 1264, 1267, 1269, 1268, 1271, 1272, 1270, 1273, - 1273, 1271, 1279, 1270, 1277, 1270, 1275, 1270, 1277, 1270, - 1278, 1272, 1274, 1274, 1280, 1274, 1281, 1275, 1282, 1283, - 1279, 1281, 1281, 1280, 1284, 1278, 1285, 1282, 1286, 1284, - 1287, 1288, 1289, 1290, 1291, 1291, 1292, 1286, 1294, 1290, - 1285, 1283, 1295, 1293, 1296, 1297, 1289, 1295, 1292, 1287, - 1288, 1293, 1294, 1298, 1297, 1299, 1300, 1301, 1296, 1303, - - 1298, 1309, 1301, 1302, 1302, 1304, 1304, 1307, 1310, 1312, - 1307, 1308, 1316, 1299, 1303, 1317, 1308, 1310, 1311, 1311, - 1309, 1300, 1313, 1313, 1314, 1314, 1315, 1318, 1321, 1312, - 1320, 1315, 1323, 1316, 1319, 1319, 1317, 1322, 1324, 1328, - 1322, 1325, 1326, 1331, 1324, 1321, 1325, 1327, 1318, 1327, - 1320, 1326, 1323, 1330, 1332, 1333, 1330, 1328, 1331, 1334, - 1333, 1335, 1336, 1337, 1340, 1340, 1335, 1332, 1337, 1338, - 1336, 1339, 1338, 1334, 1341, 1342, 1339, 1343, 1344, 1341, - 1347, 1345, 1348, 1343, 1349, 1344, 1347, 1350, 1348, 1349, - 1351, 1352, 1350, 1342, 1345, 1353, 1351, 1354, 1355, 1355, - - 1352, 1356, 1358, 1360, 1359, 1361, 1362, 1358, 1354, 1363, - 1364, 1365, 1366, 1360, 1353, 1369, 1364, 1365, 1366, 1368, - 1361, 1356, 1359, 1370, 1371, 1368, 1362, 1372, 1373, 1369, - 1374, 1376, 1363, 1375, 1375, 1369, 1377, 1378, 1384, 1372, - 1379, 1381, 1373, 1370, 1371, 1379, 1380, 1380, 1374, 1382, - 1386, 1376, 1388, 1385, 1382, 1378, 1387, 1384, 1385, 1385, - 1388, 1377, 1389, 1390, 1381, 1387, 1391, 1392, 1386, 1394, - 1393, 1394, 1392, 1395, 1397, 1392, 1389, 1399, 1390, 1393, - 1397, 1391, 1398, 1401, 1391, 1400, 1398, 1395, 1399, 1402, - 1400, 1400, 1403, 1404, 1405, 1406, 1407, 1408, 1404, 1405, - - 1406, 1409, 1401, 1410, 1412, 1416, 1409, 1413, 1414, 1416, - 1403, 1415, 1415, 1417, 1407, 1402, 1418, 1408, 1412, 1423, - 1420, 1419, 1421, 1410, 1422, 1413, 1414, 1419, 1426, 1424, - 1425, 1417, 1420, 1423, 1427, 1418, 1430, 1429, 1421, 1427, - 1431, 1428, 1429, 1422, 1424, 1425, 1432, 1426, 1428, 1433, - 1433, 1434, 1436, 1435, 1430, 1432, 1437, 1437, 1438, 1439, - 1440, 1431, 1435, 1444, 1438, 1439, 1434, 1441, 1441, 1442, - 1442, 1443, 1436, 1445, 1440, 1446, 1447, 1443, 1448, 1444, - 1446, 1449, 1447, 1456, 1448, 1450, 1450, 1449, 1451, 1451, - 1453, 1453, 1454, 1455, 1445, 1457, 1454, 1458, 1459, 1460, - - 1462, 1456, 1455, 1461, 1461, 1466, 1460, 1457, 1451, 1463, - 1451, 1458, 1465, 1459, 1464, 1469, 1467, 1463, 1471, 1464, - 1462, 1467, 1467, 1468, 1466, 1472, 1465, 1473, 1468, 1468, - 1470, 1470, 1475, 1474, 1476, 1469, 1473, 1471, 1474, 1477, - 1478, 1480, 1479, 1481, 1472, 1483, 1478, 1479, 1486, 1482, - 1484, 1475, 1485, 1487, 1476, 1482, 1484, 1477, 1485, 1488, - 1489, 1480, 1490, 1491, 1483, 1492, 1496, 1486, 1493, 1481, - 1494, 1494, 1487, 1495, 1497, 1498, 1495, 1491, 1488, 1489, - 1502, 1490, 1503, 1493, 1502, 1496, 1492, 1498, 1499, 1499, - 1500, 1500, 1501, 1497, 1504, 1503, 1505, 1501, 1506, 1510, - - 1506, 1508, 1509, 1504, 1506, 1511, 1512, 1509, 1514, 1505, - 1513, 1513, 1515, 1514, 1510, 1516, 1517, 1506, 1515, 1508, - 1518, 1522, 1512, 1519, 1523, 1511, 1518, 1520, 1519, 1517, - 1516, 1520, 1521, 1525, 1524, 1531, 1521, 1529, 1526, 1527, - 1527, 1522, 1523, 1524, 1526, 1532, 1533, 1533, 1534, 1535, - 1532, 1537, 1537, 1525, 1534, 1529, 1531, 1539, 1540, 1540, - 1539, 1541, 1542, 1543, 1545, 1546, 1548, 1545, 1547, 1535, - 1549, 1550, 1550, 1552, 1551, 1548, 1553, 1541, 1542, 1543, - 1554, 1556, 1555, 1557, 1557, 1554, 1546, 1556, 1547, 1551, - 1549, 1558, 1559, 1560, 1552, 1553, 1555, 1561, 1562, 1564, - - 1558, 1563, 1563, 1565, 1566, 1567, 1568, 1568, 1560, 1566, - 1559, 1569, 1570, 1564, 1572, 1569, 1571, 1571, 1562, 1573, - 1567, 1565, 1561, 1574, 1575, 1576, 1577, 1583, 1575, 1579, - 1579, 1577, 1570, 1581, 1574, 1584, 1572, 1580, 1573, 1586, - 1580, 1585, 1582, 1583, 1576, 1588, 1581, 1582, 1587, 1589, - 1589, 1590, 1591, 1584, 1592, 1585, 1590, 1594, 1586, 1586, - 1593, 1593, 1587, 1595, 1596, 1597, 1594, 1597, 1595, 1599, - 1588, 1598, 1591, 1600, 1592, 1599, 1598, 1601, 1603, 1604, - 1604, 1605, 1606, 1601, 1596, 1608, 1609, 1612, 1606, 1613, - 1608, 1614, 1603, 1600, 1610, 1610, 1611, 1611, 1617, 1615, - - 1605, 1612, 1615, 1616, 1616, 1618, 1614, 1613, 1619, 1620, - 1609, 1623, 1620, 1621, 1623, 1620, 1617, 1618, 1622, 1621, - 1625, 1626, 1627, 1622, 1629, 1629, 1626, 1620, 1619, 1625, - 1623, 1628, 1630, 1631, 1628, 1632, 1638, 1633, 1640, 1631, - 1639, 1632, 1633, 1634, 1634, 1635, 1635, 1627, 1636, 1638, - 1637, 1641, 1648, 1653, 1636, 1637, 1630, 1640, 1639, 1642, - 1643, 1644, 1642, 1645, 1652, 1646, 1643, 1644, 1647, 1645, - 1646, 1641, 1649, 1653, 1647, 1648, 1651, 1649, 1650, 1650, - 1654, 1651, 1652, 1655, 1656, 1660, 1657, 1658, 1659, 1661, - 1662, 1668, 1662, 1661, 1663, 1664, 1666, 1667, 1656, 1654, - - 1657, 1658, 1664, 1655, 1668, 1669, 1659, 1670, 1666, 1667, - 1660, 1669, 1671, 1663, 1672, 1673, 1674, 1675, 1675, 1674, - 1679, 1676, 1678, 1678, 1681, 1684, 1680, 1670, 1671, 1673, - 1676, 1680, 1682, 1682, 1672, 1683, 1681, 1674, 1685, 1684, - 1679, 1686, 1687, 1688, 1690, 1689, 1693, 1691, 1695, 1714, - 1683, 1687, 1689, 1690, 1696, 1714, 1690, 1696, 1688, 1686, - 1699, 1693, 1685, 1691, 1697, 1697, 1693, 1698, 1698, 1700, - 1703, 1701, 1699, 1695, 1701, 1702, 1702, 1704, 1706, 1705, - 1707, 1706, 1708, 1703, 1705, 1707, 1709, 1700, 1710, 1711, - 1713, 1712, 1715, 1715, 1717, 1719, 1704, 1710, 1716, 1713, - - 1712, 1708, 1709, 1712, 1718, 1716, 1720, 1721, 1711, 1724, - 1722, 1727, 1728, 1719, 1717, 1722, 1722, 1718, 1730, 1723, - 1720, 1724, 1731, 1721, 1723, 1729, 1729, 1732, 1732, 1736, - 1728, 1731, 1732, 1734, 1730, 1735, 1727, 1733, 1733, 1737, - 1735, 1738, 1734, 1739, 1741, 1734, 1742, 1736, 1739, 1739, - 1743, 1744, 1733, 1745, 57, 1747, 1744, 1746, 1741, 1738, - 1737, 1742, 1749, 1746, 1748, 1748, 1750, 1745, 1749, 1751, - 1752, 1750, 1743, 1747, 1753, 1755, 1752, 1756, 1757, 1758, - 1753, 1760, 1762, 1751, 1757, 1759, 1764, 1760, 1759, 1765, - 1762, 1756, 1758, 1766, 1759, 1755, 1767, 1768, 1769, 52, - - 1770, 1771, 1768, 1772, 1767, 1764, 1773, 1769, 1765, 1774, - 1771, 1776, 1766, 1770, 1775, 1775, 1772, 1776, 1777, 1778, - 1773, 1779, 1778, 1774, 1777, 1780, 1780, 1781, 1782, 1783, - 1784, 1784, 1785, 1786, 1779, 1787, 1775, 1788, 1789, 1786, - 1791, 1791, 1792, 1795, 1794, 1785, 1782, 1781, 1783, 1794, - 1793, 1799, 1798, 1788, 1793, 1796, 1789, 1787, 1801, 1797, - 1796, 1798, 1792, 1795, 1797, 1803, 1802, 1804, 1803, 1801, - 1805, 1806, 1806, 1807, 1799, 1802, 1808, 1809, 1813, 1804, - 1810, 1810, 1812, 1811, 1816, 1805, 1814, 1817, 1808, 1812, - 1813, 1820, 1807, 1818, 1819, 1821, 1809, 1811, 1814, 1818, - - 1831, 1821, 1831, 1816, 1822, 1822, 1819, 1817, 1823, 1820, - 1826, 1823, 1824, 1824, 1827, 1826, 1828, 1829, 1829, 1830, - 1833, 1832, 1828, 1827, 1832, 1834, 1835, 1836, 1837, 1838, - 1839, 1830, 1842, 1837, 1838, 1841, 1840, 1842, 1844, 1839, - 1833, 1845, 1843, 1853, 1835, 1836, 1845, 1834, 1840, 1846, - 1841, 1843, 1847, 1845, 1846, 1848, 1848, 1849, 1844, 1850, - 1852, 1855, 1853, 1849, 1843, 1854, 1856, 1847, 1857, 1858, - 1857, 1859, 1859, 1860, 1860, 1862, 1852, 1855, 1861, 1861, - 1850, 1863, 1863, 1858, 1854, 1858, 1856, 1864, 1864, 1865, - 1866, 1867, 1868, 1868, 1869, 1862, 1870, 1871, 1869, 1873, - - 1871, 1874, 1870, 1875, 1877, 1873, 1879, 1879, 1876, 1875, - 1865, 1866, 1867, 1876, 1878, 1880, 1881, 1878, 1883, 1874, - 1884, 1881, 1882, 1882, 1891, 1885, 1886, 1887, 1887, 1877, - 1885, 1886, 1888, 1883, 1889, 1880, 1890, 1888, 1892, 1893, - 1889, 1884, 1895, 1896, 1891, 1894, 1897, 1898, 1890, 1890, - 1890, 1894, 1898, 1897, 1901, 1890, 1892, 1902, 1905, 1893, - 1900, 1908, 1895, 1896, 1904, 1900, 1900, 1903, 1901, 1903, - 1906, 1907, 1902, 1905, 1909, 1904, 1906, 1910, 1910, 1911, - 1907, 1908, 1912, 1912, 1913, 1914, 1915, 1915, 1916, 1916, - 1917, 1920, 1920, 1921, 1922, 1909, 1925, 1924, 1927, 1928, - - 1928, 1929, 1926, 1922, 1913, 1911, 1924, 1914, 1926, 1930, - 1917, 1932, 1931, 1933, 1927, 1934, 1934, 1925, 1921, 1931, - 1932, 1935, 1929, 1938, 1930, 1936, 1939, 1940, 1941, 1938, - 1942, 1939, 1943, 1940, 1944, 1946, 1944, 1942, 1943, 1933, - 1947, 1936, 1948, 1948, 1949, 1951, 1947, 1935, 1941, 1949, - 1950, 1952, 1953, 1956, 1946, 1953, 1954, 1955, 1957, 1950, - 1955, 1958, 1958, 1959, 1962, 1951, 1960, 1961, 1954, 1959, - 1952, 1956, 1960, 1963, 1965, 1966, 1967, 1963, 1969, 1962, - 1970, 1967, 1968, 1968, 1957, 1971, 1973, 1961, 1974, 1975, - 1975, 47, 1974, 1963, 1965, 1976, 1982, 1966, 1977, 1970, - - 1971, 1976, 1969, 1978, 1978, 1973, 1979, 1977, 1980, 1983, - 1979, 1981, 1981, 1984, 1986, 1985, 1987, 1982, 1988, 1980, - 1985, 1989, 1990, 1983, 1980, 1992, 1991, 1989, 1998, 1993, - 1992, 1996, 1984, 2000, 1986, 1996, 1987, 1998, 1988, 1999, - 1990, 1991, 1993, 1994, 1994, 1995, 1995, 2001, 2002, 2002, - 1999, 2009, 2001, 2000, 2005, 1999, 2004, 2004, 2006, 2005, - 2005, 2008, 2011, 2010, 2006, 2012, 2014, 2008, 2010, 2015, - 2016, 2012, 2018, 2015, 2011, 2017, 2017, 2009, 2014, 2019, - 2020, 2021, 2016, 2022, 2022, 2019, 2023, 2021, 2024, 2025, - 2029, 2026, 2028, 2030, 2025, 2036, 2032, 2018, 2030, 2032, - - 2033, 2033, 2020, 2026, 2028, 2023, 2034, 2034, 2024, 2029, - 2035, 2035, 2037, 2038, 2040, 2036, 2039, 2041, 2037, 2038, - 2040, 2039, 2043, 2046, 2049, 2045, 2041, 2043, 2045, 2047, - 2047, 2050, 2051, 2052, 2052, 2046, 2049, 2051, 2053, 2054, - 2055, 2057, 2057, 2050, 2054, 2055, 2056, 2053, 2058, 2056, - 2059, 2060, 2061, 2062, 2065, 2063, 2064, 2062, 2066, 2059, - 2063, 2067, 2064, 2068, 2070, 2070, 2071, 2066, 2058, 2060, - 2074, 2061, 2065, 2072, 2073, 2078, 2070, 2068, 2076, 2067, - 2075, 2075, 2072, 2073, 2071, 2077, 2079, 2076, 2080, 2086, - 2074, 2079, 2083, 2083, 2087, 2085, 2078, 2077, 2085, 2088, - - 2091, 2080, 2090, 2092, 2093, 2086, 2094, 2094, 2096, 2092, - 2087, 2095, 2098, 2095, 2091, 2088, 2103, 2090, 2097, 2097, - 2098, 2093, 2100, 2100, 2101, 2101, 2096, 2104, 2105, 2106, - 2107, 2108, 2109, 2104, 2105, 2110, 2110, 2107, 2112, 2103, - 2111, 2111, 2113, 2106, 2114, 2115, 2116, 2117, 2118, 2111, - 2119, 2121, 2109, 2108, 2113, 2124, 2114, 2118, 2116, 2112, - 2115, 2120, 2122, 2125, 2122, 2119, 2120, 2120, 2122, 2128, - 2126, 2127, 2127, 2117, 2121, 2124, 2129, 2130, 2131, 2132, - 2130, 2122, 2126, 2131, 2134, 2136, 2125, 2128, 2135, 2134, - 2135, 2138, 2137, 2140, 2142, 2143, 2129, 2137, 2138, 2132, - - 2146, 2144, 2140, 2136, 2143, 2145, 2150, 2145, 2147, 2149, - 2152, 2149, 2142, 2144, 2147, 2151, 2151, 2153, 2159, 2146, - 2150, 2154, 2153, 2154, 2155, 2156, 2157, 2158, 2160, 2155, - 2156, 2163, 2161, 2162, 2160, 2164, 2152, 2161, 2159, 2165, - 2164, 2164, 2167, 2163, 2157, 2158, 2162, 2165, 2168, 2169, - 2169, 2170, 2170, 2171, 2172, 2173, 2176, 2174, 2176, 2177, - 2175, 2167, 2168, 2174, 2171, 2175, 2178, 2179, 2179, 2172, - 2185, 2180, 2181, 2181, 2178, 2173, 2183, 2177, 2182, 2182, - 2187, 2184, 2178, 2180, 2187, 2183, 2184, 2188, 2185, 2189, - 2190, 2189, 2191, 2192, 2193, 2194, 2188, 2191, 2191, 2188, - - 2196, 2197, 2200, 2193, 2198, 2192, 2197, 2194, 2201, 2198, - 2202, 2190, 2196, 2203, 2203, 2200, 2204, 2205, 2206, 2202, - 2208, 2207, 2211, 2215, 2209, 2210, 2216, 2211, 2201, 2213, - 2214, 2216, 2219, 2225, 2204, 2205, 2206, 2207, 2209, 2217, - 2210, 2213, 2214, 2215, 2217, 2208, 2218, 2222, 2224, 2226, - 2219, 2227, 2228, 2222, 2224, 2218, 2225, 2233, 2229, 2230, - 2230, 2231, 2232, 2232, 2226, 2234, 2222, 2229, 2235, 2227, - 2231, 2236, 2235, 2237, 2239, 2233, 2236, 2228, 2241, 2240, - 2255, 2247, 2242, 2243, 2234, 2240, 2237, 2242, 2242, 2243, - 2244, 2245, 2255, 2239, 2245, 2246, 2244, 2250, 2250, 2252, - - 2241, 2247, 2256, 2246, 2251, 2251, 2253, 2253, 2252, 2254, - 2254, 2257, 2264, 2258, 2259, 2259, 2264, 2257, 2258, 2251, - 2256, 2260, 2260, 2261, 2265, 2262, 2267, 2269, 2261, 2266, - 2251, 2262, 2270, 2266, 2271, 2272, 2273, 2270, 2274, 2275, - 2276, 2273, 2277, 2278, 2265, 2283, 2267, 2277, 2279, 2279, - 2272, 2281, 2269, 2284, 2280, 2275, 2274, 2271, 2280, 2282, - 2276, 2286, 2285, 2283, 2282, 2278, 2281, 2287, 2289, 2288, - 2290, 2291, 2291, 2286, 2288, 2293, 2294, 2295, 2296, 2284, - 2285, 2289, 2297, 2293, 2298, 2299, 2287, 2301, 2290, 2300, - 2302, 2305, 2303, 18, 2307, 2294, 2295, 2296, 2303, 2301, - - 2308, 2311, 2316, 2309, 2299, 2297, 2305, 2307, 2298, 2309, - 2300, 2302, 2315, 2310, 2308, 2310, 2312, 2312, 2313, 2314, - 2317, 2311, 2314, 2313, 2318, 2315, 2316, 2319, 2319, 2320, - 2320, 2321, 2323, 2321, 2317, 2322, 2322, 2318, 2324, 2325, - 2326, 2326, 2328, 2328, 2326, 2329, 2329, 2323, 2330, 2330, - 2331, 2337, 2325, 2324, 2332, 2332, 2333, 2333, 2334, 2331, - 2336, 2338, 2331, 2334, 2339, 2336, 2340, 2340, 2341, 2341, - 2342, 2337, 2343, 2343, 2344, 2346, 2339, 2345, 2345, 2347, - 2350, 2338, 2348, 2348, 2347, 2349, 2349, 2351, 2352, 2342, - 2346, 2354, 2344, 2353, 2350, 2356, 2351, 2357, 2357, 2358, - - 2356, 2359, 2359, 2360, 2361, 2352, 2362, 2353, 2363, 2361, - 2354, 2363, 2362, 2364, 2364, 2365, 2365, 2366, 2358, 2367, - 2368, 2360, 2368, 2370, 2371, 2372, 2372, 2374, 2376, 2364, - 2375, 2377, 17, 2378, 2367, 2380, 2366, 2378, 2370, 2379, - 2379, 2382, 2383, 2371, 2381, 2375, 2377, 2374, 2386, 2381, - 2388, 2376, 2385, 2385, 2380, 2387, 2382, 2383, 2389, 2390, - 2391, 2392, 2387, 2394, 2388, 2393, 2393, 2395, 2386, 2395, - 2396, 2399, 2394, 2396, 2398, 2391, 2389, 2390, 2402, 2400, - 2398, 2401, 2403, 2399, 2400, 2404, 2401, 2392, 2396, 2405, - 2396, 2406, 2408, 2409, 2405, 2403, 2410, 2408, 2409, 2411, - - 2414, 2410, 2412, 2402, 2413, 2415, 2404, 2416, 2412, 2419, - 2413, 2417, 2420, 2416, 2411, 2422, 2417, 2406, 2418, 2421, - 2415, 2414, 2421, 2418, 2423, 2420, 2427, 2424, 2425, 2426, - 2432, 2434, 2450, 2423, 2419, 2422, 2424, 2425, 2426, 2428, - 2427, 2429, 2430, 2435, 2450, 2428, 2430, 2429, 2436, 2436, - 2432, 2434, 2435, 2437, 2438, 2438, 2439, 2440, 2440, 2437, - 2442, 2441, 2444, 2438, 2447, 2439, 2441, 2445, 2446, 2446, - 2451, 2455, 2448, 2452, 2455, 2453, 2457, 0, 2444, 2447, - 2442, 2448, 2442, 2445, 2456, 2458, 2451, 2453, 2452, 2456, - 2459, 2459, 2460, 2460, 2462, 2462, 2457, 2458, 2463, 2464, - - 2465, 2463, 2466, 2467, 2464, 2469, 2465, 2472, 2466, 2468, - 2468, 2471, 2467, 2470, 2470, 2473, 2474, 2474, 2475, 2469, - 2477, 2472, 2476, 2471, 2475, 2477, 2479, 2486, 2480, 2484, - 2479, 2480, 2481, 2481, 2473, 2482, 2476, 2483, 2484, 2485, - 2482, 2487, 2483, 2488, 2488, 2487, 2489, 2486, 2485, 2491, - 2492, 2493, 2494, 2495, 2491, 2497, 2496, 2498, 2499, 2489, - 2496, 2502, 2498, 2500, 2499, 2501, 2501, 2495, 2503, 2500, - 2492, 2493, 2494, 2504, 2506, 2497, 2505, 2507, 2507, 2502, - 2510, 2505, 2509, 2511, 2512, 2513, 0, 2503, 2511, 2514, - 2512, 2513, 2504, 2517, 2509, 2506, 2510, 2514, 2515, 2519, - - 2515, 2520, 2517, 2521, 2521, 2522, 2523, 2523, 2522, 2525, - 2527, 2526, 2525, 2519, 2526, 2520, 2528, 2528, 2531, 2532, - 2533, 2535, 2531, 2534, 2534, 2532, 2538, 2538, 2540, 2542, - 2535, 2543, 2533, 2546, 2547, 2548, 2527, 2549, 2546, 2550, - 2551, 2551, 2549, 2542, 2550, 2555, 2540, 2543, 2553, 2553, - 2556, 2555, 2557, 2557, 2559, 2558, 2548, 2560, 2562, 0, - 2547, 2563, 2560, 2564, 2563, 2568, 2565, 2566, 2566, 2571, - 2556, 2558, 2576, 2569, 2568, 2564, 2559, 2562, 2565, 2569, - 2570, 2572, 2574, 2574, 2577, 2575, 2570, 2571, 2575, 2579, - 2579, 2576, 2580, 2580, 2581, 2582, 2572, 2583, 2584, 2581, - - 2585, 2586, 2577, 2586, 2587, 2585, 2583, 2588, 2589, 2590, - 2591, 2584, 2592, 2582, 2590, 2594, 2594, 2593, 2587, 2598, - 2589, 2588, 2593, 2595, 2595, 2596, 2596, 2597, 2597, 2599, - 2591, 2598, 2592, 2600, 2601, 2601, 2602, 2602, 2600, 2603, - 2603, 2604, 2605, 2606, 2607, 2608, 0, 2599, 2611, 2609, - 2610, 2610, 2614, 2604, 2619, 2606, 2612, 2612, 2613, 2613, - 2615, 2615, 2605, 2614, 2607, 2609, 2608, 2611, 2616, 2617, - 2618, 2621, 2620, 2622, 2619, 2624, 2617, 2620, 2623, 2623, - 2616, 2626, 2618, 2627, 2624, 2625, 2625, 2628, 2629, 2631, - 2630, 2621, 2632, 2622, 2632, 2639, 2633, 2634, 2634, 2636, - - 2628, 2635, 2637, 2627, 2630, 2640, 2641, 2626, 2633, 2643, - 2635, 2631, 2629, 2639, 2636, 2642, 2644, 2637, 2642, 2645, - 2653, 2644, 2655, 2643, 2645, 2646, 2646, 2640, 2654, 2641, - 2647, 2647, 2648, 2648, 2650, 2650, 2652, 2652, 2653, 2654, - 2656, 2655, 2658, 2659, 2660, 2661, 2666, 2662, 2663, 2664, - 2665, 2664, 0, 2667, 2673, 2656, 2662, 2668, 2668, 2670, - 2672, 2659, 2658, 2670, 2666, 2661, 2660, 2679, 2663, 2674, - 2665, 2667, 2671, 2671, 2672, 2677, 2673, 2680, 2674, 2675, - 2675, 2678, 2678, 2681, 2677, 2679, 2682, 2683, 2684, 2685, - 2687, 2688, 2686, 2682, 2691, 2680, 2689, 2689, 2688, 2690, - - 2690, 2681, 2683, 2692, 2693, 2698, 2684, 2685, 2686, 2687, - 2693, 2695, 2695, 2697, 2691, 2696, 2696, 2699, 2700, 2697, - 2701, 2692, 2702, 2698, 2703, 2704, 2704, 2705, 2706, 2703, - 2707, 2708, 2709, 2700, 0, 2699, 2702, 2716, 2710, 2701, - 2712, 2712, 2708, 2710, 2711, 2721, 2711, 2705, 2706, 2713, - 2707, 2713, 2709, 2714, 2714, 2718, 2716, 2719, 2720, 2724, - 2728, 2722, 2723, 2725, 2718, 2721, 2722, 2723, 2729, 2730, - 2720, 2733, 2730, 2731, 2731, 2732, 2719, 2734, 2734, 2724, - 2728, 2735, 2725, 2736, 2737, 2739, 2729, 2740, 2737, 2733, - 2732, 2741, 2735, 2740, 2743, 2741, 2742, 2742, 2736, 2745, - - 2739, 2746, 2747, 2748, 2748, 2750, 2751, 2743, 2752, 2753, - 2753, 2755, 2752, 2759, 2745, 2751, 2760, 2750, 2754, 2754, - 2757, 2746, 2747, 2756, 2756, 2757, 2758, 2761, 2760, 2759, - 2755, 2762, 2762, 2767, 2767, 2758, 2768, 2769, 2769, 2770, - 2771, 2772, 2773, 2776, 2776, 2777, 2774, 2761, 2775, 2778, - 2789, 2773, 2770, 2771, 2772, 2774, 2783, 2775, 2768, 2780, - 2780, 2783, 2785, 2786, 2778, 2777, 2787, 2785, 2788, 2789, - 2790, 2787, 2791, 2793, 2797, 2801, 2788, 2786, 2795, 2790, - 2791, 2796, 2800, 2795, 2798, 2798, 2796, 2800, 2793, 2797, - 2799, 2799, 2802, 2802, 2801, 2803, 2804, 2805, 2806, 2807, - - 0, 2804, 2803, 2808, 2810, 2807, 2809, 2809, 2808, 2811, - 2812, 2812, 2813, 2813, 2811, 2805, 2806, 2816, 2819, 2810, - 2817, 2817, 2818, 2819, 2819, 2818, 2820, 2821, 2822, 2823, - 2816, 2820, 2821, 2824, 2825, 2823, 2826, 2824, 2827, 2825, - 2828, 2829, 2822, 2830, 2831, 2826, 2832, 2833, 2828, 2830, - 2831, 2832, 2837, 2827, 2834, 2834, 2836, 2837, 2838, 2833, - 2840, 2838, 2829, 2836, 2842, 2843, 2844, 2845, 2846, 2842, - 2843, 2844, 2840, 2847, 2848, 2849, 2849, 2850, 2854, 2851, - 2859, 2846, 2847, 2848, 2851, 2845, 2850, 2855, 2856, 2860, - 2861, 0, 2862, 2855, 2856, 2864, 2854, 2863, 2863, 2859, - - 2865, 2870, 2864, 2867, 2868, 2869, 2869, 2871, 2873, 2860, - 2861, 2862, 2867, 2868, 2872, 2872, 2870, 2875, 2877, 2865, - 2878, 2880, 2871, 2881, 2878, 2879, 2879, 2873, 2882, 2881, - 2883, 2884, 2875, 2886, 2882, 2885, 2885, 2884, 2877, 2887, - 2888, 2886, 2890, 2891, 2893, 2888, 2880, 2896, 2883, 2894, - 2893, 2890, 2894, 2895, 2897, 2897, 2891, 2895, 2898, 2900, - 2900, 2896, 2901, 2954, 2887, 2902, 2902, 2903, 2903, 2905, - 2905, 2906, 2907, 2898, 2908, 2906, 2912, 2907, 2910, 2910, - 2901, 2913, 2914, 2908, 2915, 2916, 2913, 2918, 2954, 2915, - 2915, 2919, 2919, 2925, 2914, 2929, 2912, 2916, 2921, 2921, - - 2922, 2922, 2923, 2923, 2926, 2924, 2925, 2918, 2924, 2928, - 2928, 2931, 2935, 2929, 2932, 2932, 2937, 2926, 2933, 2933, - 2934, 2934, 2936, 2936, 2938, 2939, 2940, 2935, 2949, 2937, - 0, 2931, 2940, 2941, 2941, 2945, 2942, 2950, 2946, 2939, - 2942, 2945, 2938, 2946, 2948, 2951, 2952, 2953, 2964, 2948, - 2948, 2949, 2952, 2953, 2955, 2956, 2956, 2950, 2955, 2959, - 2961, 2966, 2966, 2962, 2959, 2951, 2962, 2965, 2961, 2967, - 2965, 2968, 2969, 2964, 2970, 2971, 2968, 2972, 2972, 2973, - 2974, 2975, 2976, 2974, 2977, 3004, 2967, 2967, 2981, 2971, - 2969, 2974, 2977, 2973, 2970, 2975, 0, 2979, 2991, 2980, - - 3004, 2976, 2979, 2979, 2980, 2980, 2988, 2981, 2982, 2982, - 2983, 2983, 2984, 2984, 2985, 2985, 2986, 2986, 2987, 2987, - 2989, 2990, 2988, 2992, 2991, 2989, 2993, 2994, 2995, 2996, - 2997, 2993, 2998, 2995, 2999, 3001, 3001, 2992, 2996, 3002, - 3002, 2990, 3003, 3005, 3005, 3003, 2994, 3006, 3007, 0, - 2997, 3010, 2998, 3006, 2999, 3009, 3009, 3012, 3010, 3011, - 3011, 3015, 3012, 3014, 3014, 3016, 3007, 3017, 3018, 3020, - 3015, 3021, 3021, 3024, 3016, 3025, 3017, 3018, 3022, 3022, - 3023, 3026, 3024, 3027, 3023, 3028, 3030, 3020, 3031, 3032, - 3028, 3028, 3026, 3032, 3025, 3036, 3038, 3031, 3027, 3030, - - 3036, 3037, 3037, 3040, 3040, 3041, 3042, 3043, 3045, 3045, - 3038, 3046, 3047, 3051, 3053, 3055, 3052, 3058, 3060, 3041, - 3046, 3052, 3056, 3053, 3047, 3043, 0, 3062, 3056, 3058, - 3068, 3042, 3062, 3064, 3064, 3055, 3063, 3065, 3051, 3060, - 3067, 3063, 3069, 3068, 3076, 3067, 3065, 3070, 3070, 3072, - 3072, 3070, 3073, 3073, 3074, 3074, 3069, 3075, 3077, 0, - 3078, 3080, 3084, 3081, 3076, 3078, 3075, 3080, 3081, 3082, - 3083, 3083, 3085, 3086, 3082, 3088, 3087, 3077, 3090, 3089, - 3084, 3087, 3091, 3091, 3085, 3089, 3093, 3094, 3096, 3096, - 3093, 3095, 3094, 3088, 3086, 3097, 3095, 3098, 3099, 3101, - - 3103, 3103, 3105, 3090, 3106, 3107, 3108, 3109, 3110, 3111, - 3108, 3114, 3098, 3099, 3097, 3105, 3109, 3106, 3107, 3101, - 3113, 3112, 3115, 3115, 3110, 3113, 3116, 3117, 3111, 3112, - 3118, 3114, 3119, 3119, 3121, 3116, 3120, 3120, 3124, 3130, - 3125, 3127, 3134, 3124, 3124, 3117, 3135, 3127, 3128, 3128, - 3132, 3132, 3136, 3121, 3125, 3137, 3118, 3136, 3134, 3138, - 3130, 3142, 3135, 3143, 3138, 3141, 3141, 3144, 3145, 3146, - 3149, 3137, 3143, 3144, 3148, 3148, 3150, 3151, 3151, 3153, - 3155, 3142, 3157, 3156, 3149, 3153, 3159, 3157, 3146, 3156, - 3162, 3145, 3160, 3160, 3163, 3150, 3161, 3161, 3164, 3164, - - 3155, 3165, 3166, 3167, 3168, 3162, 3169, 3170, 3159, 3171, - 3168, 3166, 3165, 3173, 3163, 3172, 3172, 3174, 3164, 3170, - 3174, 3175, 3180, 3167, 3175, 3169, 3176, 3176, 3173, 3171, - 3181, 3182, 3183, 3183, 3180, 3184, 3185, 3182, 3184, 3186, - 3188, 3190, 3185, 3189, 3189, 3188, 3190, 3191, 3192, 3196, - 3181, 3193, 3194, 3194, 3192, 3197, 3198, 3186, 3199, 3200, - 3200, 3196, 3202, 3201, 3217, 3203, 3191, 3208, 3193, 3193, - 3217, 3199, 3208, 3197, 3203, 3205, 3205, 3209, 3202, 3206, - 3206, 3198, 3201, 3207, 3207, 3210, 3211, 3211, 3212, 3212, - 3210, 3209, 3213, 3213, 3214, 3214, 3215, 3216, 3218, 3221, - - 3221, 3222, 3227, 3218, 3224, 3224, 3225, 3225, 3229, 3215, - 3230, 3232, 3231, 3233, 3233, 3235, 3235, 3222, 3236, 3237, - 3238, 3227, 3239, 3216, 3241, 3241, 3240, 3242, 3242, 3244, - 3229, 3231, 3230, 3232, 3238, 3240, 3246, 3245, 3237, 3247, - 3248, 3251, 3239, 3245, 3236, 3248, 3256, 3244, 3252, 3252, - 3254, 3254, 3255, 3257, 3258, 3259, 3246, 3255, 3247, 3257, - 3256, 3265, 3251, 3259, 3260, 3260, 3258, 3261, 3266, 3263, - 3264, 3267, 3261, 3263, 3268, 3264, 3267, 3269, 3272, 3271, - 3273, 3265, 3274, 3269, 3283, 3276, 3268, 3271, 3266, 3277, - 3278, 3279, 0, 3280, 3282, 3284, 3287, 3272, 3280, 3282, - - 3273, 3284, 3274, 3276, 3283, 3277, 3285, 3278, 3278, 3289, - 3288, 3285, 3279, 3288, 3293, 3293, 3287, 3294, 3294, 3295, - 3300, 3300, 3289, 3295, 3301, 3302, 3303, 3303, 3305, 3301, - 3308, 3308, 3309, 3309, 3313, 3309, 3310, 3310, 3313, 3310, - 3311, 3311, 3315, 3305, 3302, 3312, 3312, 3315, 3312, 3316, - 3317, 3317, 3318, 3319, 3322, 3322, 3323, 3324, 3316, 3325, - 3326, 3326, 3327, 3330, 3325, 3331, 3333, 3319, 3334, 3332, - 3318, 3336, 3331, 3332, 3337, 3333, 3323, 3324, 3339, 3337, - 3338, 3338, 3327, 3334, 3340, 3340, 3343, 3339, 3330, 3336, - 3341, 3341, 3342, 3342, 3344, 3345, 3348, 3346, 3349, 3344, - - 3347, 3343, 3346, 3346, 3345, 3350, 3347, 3345, 3353, 3351, - 3352, 3354, 3354, 3349, 3351, 3352, 3355, 3356, 3357, 3357, - 3359, 3348, 3355, 3356, 3358, 3358, 3350, 3353, 3360, 3363, - 3363, 3365, 3365, 3360, 3366, 3359, 3368, 3370, 3370, 3371, - 3371, 3372, 3372, 3366, 3373, 3373, 3375, 3375, 3376, 3376, - 3377, 3377, 3378, 3378, 3368, 3379, 3381, 3382, 3382, 3383, - 3383, 3384, 3385, 3386, 3391, 3381, 3388, 3388, 3389, 3392, - 3384, 3390, 3390, 3393, 3385, 3394, 3394, 3395, 3395, 3391, - 3397, 3379, 3392, 3386, 3401, 3393, 3403, 3389, 3398, 3398, - 3402, 3404, 3404, 3402, 3407, 3397, 3405, 3407, 3408, 3409, - - 3410, 3411, 3401, 3412, 3408, 3410, 3413, 3416, 3423, 3415, - 3420, 3424, 3403, 3409, 3405, 3415, 3416, 3438, 3438, 3419, - 3411, 3412, 3413, 3419, 3433, 3420, 3437, 3434, 3443, 3433, - 3434, 3424, 3439, 3439, 3423, 3441, 3441, 3444, 3445, 3437, - 3446, 3448, 3445, 3450, 3452, 3451, 3444, 3454, 3453, 3452, - 3453, 3443, 3455, 3455, 3456, 3448, 3451, 3457, 3459, 3458, - 3446, 3460, 3454, 3461, 3462, 3464, 3450, 3456, 3463, 3465, - 3464, 3474, 3467, 3462, 3459, 3469, 3457, 3458, 3461, 3466, - 3463, 3468, 3468, 3470, 3466, 3474, 3460, 3475, 3470, 3477, - 3465, 3467, 3476, 3476, 3482, 3469, 3478, 3478, 3477, 3479, - - 3479, 3480, 3480, 3481, 3481, 3483, 3484, 3475, 3487, 3484, - 3485, 3486, 3488, 3482, 3489, 3485, 3486, 3490, 3491, 3492, - 3489, 3493, 3493, 3494, 3492, 3483, 3499, 3488, 3495, 3495, - 3491, 3490, 3500, 3487, 3496, 3496, 3498, 3498, 3501, 3501, - 3503, 3499, 3505, 3494, 3508, 3508, 3509, 3509, 3510, 3511, - 3514, 3500, 3512, 3513, 3515, 3503, 3510, 3516, 3512, 3513, - 3505, 3517, 3518, 3518, 3514, 3524, 3517, 3515, 3511, 3520, - 3520, 3525, 3530, 3527, 3528, 3531, 3516, 3532, 3528, 3535, - 3531, 3533, 3534, 3536, 3537, 3541, 3524, 3527, 3536, 3537, - 3542, 3525, 3530, 3543, 3533, 3534, 3532, 3546, 3535, 3538, - - 3538, 3544, 3544, 3546, 3545, 3541, 3547, 3547, 3542, 3545, - 3548, 3549, 3543, 3550, 3551, 3548, 3549, 3552, 3550, 3554, - 3554, 3555, 3559, 3552, 3556, 3556, 3555, 3558, 3560, 3561, - 3562, 3558, 3563, 3551, 3564, 3560, 3572, 3565, 3563, 3567, - 3567, 3559, 3569, 3569, 3573, 3570, 3571, 3574, 3561, 3562, - 3565, 3571, 3577, 3564, 3570, 3572, 3576, 3570, 3575, 3575, - 3574, 3576, 3579, 3573, 3581, 3577, 3580, 3580, 3582, 3582, - 3583, 3583, 3584, 3585, 3586, 3587, 3587, 3584, 0, 3588, - 3585, 3590, 3590, 3581, 3588, 3589, 3593, 3589, 3579, 3591, - 3592, 3595, 3598, 3586, 3594, 3602, 3591, 3592, 3600, 3594, - - 3597, 3597, 3601, 3600, 3603, 3593, 3607, 3601, 3604, 3604, - 3595, 3598, 3606, 3606, 3602, 3608, 3609, 3609, 3610, 3610, - 3611, 3613, 3613, 3603, 3615, 3607, 3621, 3611, 3614, 3614, - 3617, 3615, 3620, 3622, 3608, 3617, 0, 3620, 3623, 3623, - 3624, 3624, 0, 0, 0, 3621, 0, 0, 0, 0, - 0, 0, 3622, 3628, 3628, 3628, 3628, 3628, 3628, 3628, - 3629, 3629, 3629, 3629, 3629, 3629, 3629, 3630, 3630, 3630, - 3630, 3630, 3630, 3630, 3631, 3631, 3631, 3631, 3631, 3631, - 3631, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3633, 3633, - 3633, 3633, 3633, 3633, 3633, 3634, 3634, 3634, 3634, 3634, - - 3634, 3634, 3636, 3636, 0, 3636, 3636, 3636, 3636, 3637, - 3637, 0, 0, 0, 3637, 3637, 3638, 3638, 0, 0, - 3638, 0, 3638, 3639, 0, 0, 0, 0, 0, 3639, - 3640, 3640, 0, 0, 0, 3640, 3640, 3641, 0, 0, - 0, 0, 0, 3641, 3642, 3642, 0, 3642, 3642, 3642, - 3642, 3643, 0, 0, 0, 0, 0, 3643, 3644, 3644, - 0, 0, 0, 3644, 3644, 3645, 3645, 0, 3645, 3645, - 3645, 3645, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - - 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3627 + 14, 14, 14, 100, 14, 12, 15, 15, 15, 38, + 23, 14, 23, 23, 12, 23, 2972, 15, 16, 16, + 16, 23, 23, 27, 27, 30, 30, 31, 31, 16, + 25, 27, 127, 25, 25, 27, 31, 25, 27, 32, + 30, 46, 25, 32, 25, 127, 32, 31, 40, 45, + 45, 25, 28, 32, 45, 32, 46, 28, 45, 36, + 36, 28, 40, 96, 28, 44, 28, 28, 36, 44, + 37, 37, 112, 56, 36, 37, 56, 28, 36, 44, + + 41, 41, 96, 44, 44, 41, 67, 67, 95, 37, + 112, 37, 39, 39, 42, 41, 41, 39, 41, 42, + 95, 39, 42, 43, 43, 73, 43, 39, 187, 42, + 39, 84, 84, 42, 42, 43, 187, 39, 152, 73, + 62, 43, 62, 62, 70, 62, 70, 70, 72, 70, + 72, 72, 79, 72, 79, 79, 70, 79, 86, 152, + 86, 86, 87, 86, 97, 89, 87, 89, 89, 86, + 89, 92, 102, 94, 92, 93, 89, 89, 98, 93, + 94, 98, 99, 101, 97, 99, 102, 102, 103, 104, + 105, 106, 101, 1161, 103, 107, 110, 108, 99, 109, + + 103, 107, 103, 113, 109, 114, 111, 104, 104, 114, + 106, 108, 105, 109, 107, 115, 110, 111, 111, 116, + 117, 113, 119, 118, 116, 111, 118, 120, 119, 118, + 122, 121, 126, 122, 117, 115, 121, 122, 123, 126, + 124, 125, 118, 118, 128, 125, 120, 119, 130, 129, + 131, 128, 137, 122, 124, 132, 121, 123, 129, 132, + 133, 130, 123, 134, 135, 139, 136, 134, 138, 138, + 131, 136, 137, 140, 141, 136, 142, 140, 133, 143, + 145, 144, 135, 149, 144, 139, 140, 151, 146, 141, + 149, 147, 140, 145, 146, 144, 148, 148, 143, 144, + + 150, 149, 142, 147, 153, 212, 151, 154, 156, 154, + 155, 157, 160, 156, 148, 158, 150, 148, 154, 159, + 153, 212, 155, 157, 159, 182, 160, 162, 162, 164, + 154, 178, 164, 158, 166, 174, 166, 166, 174, 166, + 169, 169, 171, 182, 171, 171, 172, 171, 172, 172, + 176, 172, 176, 176, 180, 176, 179, 179, 172, 180, + 181, 183, 184, 185, 188, 189, 181, 190, 186, 191, + 192, 185, 190, 193, 195, 181, 183, 246, 185, 186, + 189, 192, 193, 188, 194, 184, 246, 196, 204, 191, + 194, 194, 196, 197, 197, 198, 201, 201, 199, 195, + + 199, 198, 200, 199, 203, 202, 200, 204, 205, 203, + 203, 200, 207, 205, 206, 208, 200, 202, 213, 206, + 199, 209, 200, 200, 207, 210, 211, 209, 214, 210, + 215, 211, 213, 216, 217, 208, 218, 221, 223, 217, + 222, 218, 215, 214, 223, 215, 224, 224, 219, 219, + 209, 216, 219, 220, 219, 225, 222, 221, 220, 226, + 227, 225, 230, 228, 229, 226, 219, 225, 219, 228, + 229, 231, 234, 232, 240, 233, 234, 231, 232, 229, + 227, 233, 235, 230, 236, 238, 236, 237, 235, 239, + 241, 236, 242, 237, 240, 239, 241, 244, 238, 243, + + 247, 245, 248, 249, 251, 242, 245, 243, 252, 251, + 244, 250, 254, 255, 242, 247, 250, 250, 248, 255, + 253, 256, 257, 249, 253, 258, 252, 259, 257, 260, + 261, 260, 259, 265, 254, 262, 267, 263, 264, 256, + 256, 266, 262, 263, 264, 258, 268, 266, 267, 261, + 269, 269, 265, 270, 270, 271, 272, 273, 274, 273, + 268, 271, 272, 275, 277, 276, 278, 279, 275, 281, + 280, 298, 298, 282, 278, 280, 273, 276, 282, 271, + 283, 274, 284, 277, 285, 286, 283, 279, 284, 285, + 286, 287, 281, 288, 290, 289, 291, 287, 293, 292, + + 294, 295, 297, 300, 297, 291, 293, 295, 288, 289, + 303, 296, 290, 292, 296, 299, 301, 301, 299, 302, + 302, 300, 304, 309, 305, 294, 303, 305, 306, 307, + 308, 312, 306, 326, 311, 313, 326, 304, 307, 308, + 311, 313, 309, 315, 314, 312, 314, 316, 319, 315, + 318, 316, 317, 317, 319, 318, 320, 321, 322, 323, + 324, 327, 320, 325, 325, 328, 329, 177, 316, 328, + 330, 331, 331, 324, 332, 333, 322, 321, 333, 327, + 323, 320, 334, 335, 336, 329, 337, 336, 330, 335, + 343, 339, 332, 343, 334, 333, 340, 341, 337, 338, + + 339, 345, 341, 346, 342, 346, 346, 342, 338, 342, + 344, 338, 175, 345, 340, 347, 338, 338, 338, 338, + 347, 347, 342, 344, 348, 342, 350, 348, 349, 349, + 351, 353, 352, 354, 357, 355, 356, 356, 360, 357, + 358, 358, 354, 350, 355, 351, 350, 352, 353, 353, + 359, 359, 361, 360, 362, 363, 364, 361, 365, 366, + 367, 367, 369, 367, 370, 366, 362, 378, 378, 370, + 372, 371, 367, 365, 363, 372, 364, 371, 373, 367, + 375, 374, 369, 373, 374, 376, 374, 377, 376, 373, + 381, 379, 380, 380, 375, 381, 377, 379, 384, 386, + + 385, 376, 387, 385, 376, 388, 376, 382, 382, 391, + 382, 393, 390, 394, 386, 390, 382, 387, 384, 388, + 382, 385, 394, 391, 398, 382, 393, 399, 382, 383, + 383, 390, 383, 395, 396, 400, 397, 404, 395, 395, + 396, 401, 399, 398, 400, 383, 451, 396, 383, 451, + 383, 405, 383, 392, 409, 392, 392, 397, 402, 403, + 401, 406, 410, 404, 402, 392, 392, 392, 392, 392, + 407, 405, 392, 408, 409, 406, 407, 403, 408, 411, + 407, 412, 410, 413, 414, 415, 412, 417, 413, 416, + 416, 415, 418, 421, 411, 419, 408, 420, 422, 414, + + 423, 425, 428, 420, 418, 423, 426, 417, 427, 419, + 424, 424, 436, 424, 422, 429, 428, 429, 421, 432, + 430, 425, 426, 432, 427, 430, 431, 436, 431, 431, + 433, 434, 434, 435, 433, 437, 438, 442, 445, 439, + 444, 443, 445, 442, 448, 444, 431, 440, 446, 433, + 443, 437, 435, 439, 438, 440, 440, 446, 447, 450, + 449, 453, 170, 450, 447, 448, 449, 440, 452, 440, + 441, 454, 454, 452, 457, 441, 455, 456, 456, 457, + 458, 453, 462, 441, 441, 459, 459, 441, 441, 455, + 460, 441, 463, 458, 461, 464, 460, 462, 461, 465, + + 464, 466, 466, 467, 465, 468, 469, 470, 471, 472, + 466, 471, 473, 463, 472, 467, 473, 474, 476, 470, + 475, 475, 477, 476, 469, 468, 478, 478, 479, 474, + 481, 481, 483, 484, 485, 486, 487, 488, 489, 490, + 494, 484, 488, 477, 486, 492, 493, 495, 496, 502, + 479, 490, 502, 483, 496, 485, 498, 487, 489, 497, + 494, 495, 498, 492, 493, 492, 499, 500, 497, 501, + 503, 499, 504, 505, 507, 508, 510, 501, 508, 506, + 501, 500, 505, 509, 503, 506, 511, 504, 512, 509, + 510, 511, 513, 514, 507, 515, 516, 514, 517, 518, + + 515, 519, 524, 517, 520, 523, 168, 509, 526, 525, + 512, 516, 526, 513, 527, 518, 529, 520, 542, 542, + 519, 521, 521, 524, 525, 523, 528, 521, 532, 521, + 530, 528, 529, 527, 530, 521, 534, 521, 538, 531, + 521, 521, 535, 532, 531, 533, 537, 521, 531, 540, + 533, 535, 534, 536, 538, 534, 541, 539, 543, 536, + 539, 537, 544, 544, 536, 545, 546, 547, 548, 548, + 533, 549, 540, 550, 551, 552, 541, 553, 546, 551, + 545, 555, 547, 543, 552, 554, 560, 555, 557, 558, + 549, 561, 560, 558, 559, 550, 553, 557, 559, 562, + + 554, 563, 564, 561, 565, 567, 566, 568, 571, 569, + 565, 568, 167, 570, 562, 570, 564, 572, 573, 573, + 563, 566, 569, 567, 574, 572, 575, 576, 577, 578, + 574, 580, 571, 576, 577, 581, 579, 582, 575, 579, + 583, 578, 582, 583, 584, 580, 585, 165, 587, 586, + 581, 588, 588, 584, 586, 586, 589, 589, 590, 596, + 584, 587, 585, 584, 590, 591, 591, 592, 592, 593, + 595, 594, 597, 600, 599, 593, 594, 594, 598, 599, + 596, 598, 601, 602, 597, 604, 602, 605, 595, 603, + 601, 606, 600, 607, 603, 606, 608, 609, 611, 607, + + 610, 609, 614, 611, 615, 612, 605, 616, 604, 613, + 613, 617, 616, 618, 619, 620, 608, 614, 610, 612, + 624, 620, 621, 622, 626, 615, 163, 621, 623, 618, + 617, 623, 625, 625, 619, 627, 623, 622, 624, 623, + 623, 628, 626, 629, 630, 631, 628, 633, 629, 635, + 634, 627, 635, 633, 640, 641, 161, 636, 630, 634, + 631, 636, 637, 638, 639, 642, 638, 637, 643, 639, + 640, 644, 642, 641, 645, 647, 644, 646, 646, 648, + 649, 643, 651, 636, 647, 652, 650, 653, 689, 654, + 689, 651, 659, 653, 645, 654, 655, 652, 648, 655, + + 660, 649, 650, 656, 656, 657, 656, 658, 657, 661, + 659, 662, 658, 663, 660, 664, 662, 665, 666, 668, + 671, 664, 665, 661, 666, 667, 669, 672, 667, 670, + 675, 669, 663, 671, 670, 670, 673, 674, 676, 678, + 672, 673, 683, 674, 668, 677, 680, 676, 683, 675, + 677, 679, 679, 680, 681, 673, 673, 682, 684, 678, + 682, 681, 685, 686, 687, 687, 688, 685, 686, 686, + 684, 690, 691, 695, 691, 682, 692, 685, 693, 694, + 696, 697, 698, 700, 699, 703, 698, 697, 701, 702, + 690, 688, 695, 699, 692, 705, 693, 694, 700, 704, + + 696, 707, 704, 701, 703, 708, 706, 702, 709, 710, + 705, 704, 706, 711, 712, 715, 721, 714, 713, 708, + 709, 707, 713, 716, 717, 718, 719, 720, 710, 725, + 721, 715, 720, 712, 711, 714, 722, 722, 724, 727, + 726, 716, 717, 717, 718, 719, 723, 729, 725, 728, + 723, 726, 724, 727, 728, 730, 731, 732, 735, 734, + 733, 738, 736, 729, 732, 733, 734, 736, 737, 731, + 739, 740, 741, 737, 730, 742, 743, 739, 745, 738, + 740, 744, 735, 745, 742, 748, 741, 744, 743, 746, + 747, 749, 746, 750, 747, 751, 752, 753, 751, 748, + + 749, 754, 754, 755, 755, 756, 756, 758, 750, 757, + 752, 760, 755, 761, 757, 762, 758, 763, 753, 761, + 764, 765, 766, 767, 764, 768, 771, 769, 772, 770, + 760, 768, 773, 765, 762, 769, 770, 763, 822, 782, + 776, 767, 785, 779, 771, 783, 788, 766, 782, 787, + 822, 783, 773, 772, 774, 776, 774, 792, 787, 774, + 779, 786, 788, 774, 785, 789, 774, 786, 792, 789, + 790, 790, 793, 774, 774, 794, 774, 791, 791, 795, + 796, 802, 799, 798, 800, 802, 796, 799, 801, 794, + 793, 803, 806, 804, 821, 808, 821, 804, 809, 795, + + 797, 797, 797, 798, 797, 800, 801, 797, 85, 805, + 808, 806, 797, 804, 805, 803, 807, 810, 797, 797, + 810, 807, 811, 809, 812, 813, 813, 811, 811, 814, + 815, 812, 816, 816, 817, 815, 819, 818, 823, 817, + 818, 819, 820, 820, 814, 824, 825, 827, 826, 824, + 828, 828, 833, 829, 832, 827, 830, 823, 831, 831, + 834, 837, 837, 835, 833, 842, 825, 826, 829, 835, + 830, 836, 832, 838, 80, 840, 836, 841, 838, 838, + 840, 843, 834, 841, 842, 844, 845, 843, 846, 847, + 844, 846, 845, 848, 851, 847, 849, 849, 850, 850, + + 852, 848, 851, 853, 855, 854, 856, 857, 853, 854, + 858, 855, 859, 859, 861, 863, 860, 864, 852, 862, + 862, 863, 861, 857, 856, 860, 866, 868, 867, 858, + 870, 871, 873, 869, 871, 866, 864, 867, 869, 870, + 872, 874, 876, 875, 877, 872, 873, 878, 880, 877, + 877, 868, 875, 879, 879, 876, 881, 883, 882, 884, + 892, 878, 885, 880, 889, 885, 874, 882, 887, 890, + 887, 888, 888, 885, 890, 881, 891, 884, 893, 894, + 892, 883, 895, 896, 897, 889, 898, 899, 901, 900, + 898, 902, 896, 904, 901, 905, 906, 891, 893, 903, + + 902, 894, 895, 909, 912, 899, 907, 897, 900, 904, + 906, 903, 907, 908, 905, 910, 913, 909, 911, 911, + 910, 908, 914, 912, 915, 916, 917, 918, 919, 922, + 920, 914, 921, 916, 923, 922, 913, 924, 927, 925, + 923, 926, 928, 931, 915, 925, 917, 919, 928, 918, + 920, 924, 921, 929, 932, 926, 930, 934, 927, 929, + 930, 936, 931, 933, 935, 935, 932, 936, 933, 937, + 938, 939, 940, 938, 932, 937, 941, 942, 934, 943, + 943, 944, 941, 945, 946, 940, 947, 946, 945, 939, + 948, 947, 947, 951, 949, 950, 950, 942, 949, 944, + + 946, 952, 946, 953, 954, 948, 955, 957, 958, 954, + 960, 964, 961, 962, 967, 951, 964, 969, 953, 965, + 965, 952, 958, 960, 966, 955, 968, 968, 966, 967, + 971, 957, 961, 970, 962, 963, 972, 970, 963, 974, + 963, 75, 969, 973, 963, 971, 963, 981, 973, 975, + 972, 963, 976, 974, 975, 975, 963, 977, 978, 981, + 979, 976, 978, 980, 982, 983, 984, 985, 980, 982, + 988, 977, 987, 986, 978, 979, 988, 987, 980, 983, + 989, 985, 986, 990, 991, 989, 995, 984, 993, 990, + 991, 992, 992, 993, 994, 996, 1000, 997, 999, 1001, + + 994, 1000, 1003, 1003, 1004, 1006, 1002, 1010, 995, 1004, + 999, 1005, 1007, 1001, 996, 997, 998, 998, 1002, 1005, + 1008, 1006, 998, 1010, 998, 1009, 1007, 1011, 1013, 1012, + 998, 1014, 1015, 1011, 1012, 998, 998, 1016, 1017, 1008, + 1013, 1020, 998, 1019, 1009, 1018, 1018, 1019, 1015, 1014, + 1023, 1022, 1024, 1023, 1025, 1016, 1017, 1022, 1027, 1025, + 1026, 1020, 1028, 1029, 1027, 1031, 1032, 1028, 1033, 1035, + 1034, 1024, 1036, 1026, 1031, 1032, 1034, 1038, 1035, 1039, + 1037, 1040, 1029, 1041, 1033, 1037, 1044, 1042, 1045, 1043, + 1048, 1036, 1044, 1039, 1046, 1041, 1042, 1038, 1043, 1050, + + 1046, 1040, 1051, 1052, 1053, 1045, 1048, 1054, 1052, 1055, + 1056, 1057, 1058, 1050, 1061, 1062, 1057, 1058, 1067, 1061, + 1064, 1054, 1051, 1053, 1062, 1056, 1064, 1055, 1063, 1063, + 1065, 1066, 1068, 1067, 1070, 1074, 1065, 1071, 1074, 1075, + 1066, 1076, 1071, 1071, 1077, 1068, 1078, 1073, 1073, 1079, + 1070, 1073, 1080, 1075, 1082, 1084, 1090, 1081, 1086, 1083, + 1077, 1076, 1079, 1081, 1078, 1083, 1085, 1080, 1088, 1088, + 1084, 1085, 1086, 1089, 1082, 1091, 1089, 1090, 1092, 1093, + 1091, 1094, 1095, 1092, 1096, 1097, 1099, 1095, 1100, 1096, + 1094, 1105, 1099, 1101, 1102, 1093, 1104, 1097, 1108, 1101, + + 1102, 1103, 1103, 1106, 1100, 1104, 1106, 1107, 1107, 1105, + 1109, 1110, 1111, 1112, 1113, 1111, 1108, 1114, 1115, 74, + 1113, 1124, 1116, 1114, 1115, 1117, 1112, 1116, 1118, 1109, + 1117, 1110, 1119, 1120, 1118, 1122, 1123, 1119, 1125, 1120, + 1122, 1124, 1126, 1128, 1125, 1127, 1127, 1126, 1129, 1131, + 1130, 1132, 1128, 1133, 1123, 1130, 1133, 1129, 1134, 1136, + 1135, 1134, 1137, 1138, 1136, 1139, 1140, 1131, 1141, 1146, + 1132, 1135, 1140, 1142, 1141, 1138, 1143, 1144, 1144, 1145, + 1137, 1143, 1147, 1146, 1139, 1148, 1149, 1150, 1142, 1152, + 1149, 1151, 1153, 1155, 1147, 1156, 1156, 1158, 1145, 1157, + + 1151, 1159, 1158, 1148, 1160, 1150, 1159, 1157, 1152, 1162, + 1163, 1165, 1155, 1166, 1164, 1167, 1165, 1153, 1168, 1168, + 1169, 1170, 1166, 1162, 1160, 1163, 1164, 1170, 1171, 1172, + 1167, 1173, 1175, 1174, 1171, 1174, 1173, 1175, 1176, 1177, + 1169, 1178, 1179, 1180, 1181, 1172, 1178, 1181, 1182, 1183, + 1184, 1187, 1176, 1177, 1188, 1182, 1189, 1179, 1186, 1186, + 1190, 1191, 1180, 1192, 1183, 1187, 1190, 68, 1192, 1184, + 1194, 1189, 1188, 1196, 1194, 1195, 1195, 1192, 1196, 1192, + 1198, 1191, 1192, 1197, 1197, 1199, 1200, 1198, 1201, 1200, + 1202, 1203, 1204, 1205, 1206, 1207, 1209, 1204, 1208, 1199, + + 1203, 1207, 1210, 1208, 1211, 1216, 1206, 1201, 1202, 1219, + 1209, 1214, 1205, 1210, 1213, 1213, 1214, 1215, 1219, 1217, + 1220, 1221, 1215, 1211, 1217, 1216, 1218, 1222, 1223, 1224, + 1218, 1223, 1225, 1226, 1227, 1220, 1221, 1228, 1229, 1225, + 1223, 1230, 1231, 1232, 1224, 1226, 1222, 1230, 1233, 1232, + 1234, 1235, 1236, 1227, 1237, 1239, 1229, 1231, 1228, 1238, + 1235, 1240, 1241, 1242, 1243, 1246, 1245, 1236, 1233, 1242, + 1234, 1238, 1245, 1237, 1239, 1247, 1249, 1241, 1250, 1248, + 1246, 1252, 1254, 1251, 1243, 1253, 1240, 1248, 1251, 1247, + 1253, 1253, 1255, 1252, 1250, 1256, 1249, 1257, 1257, 1259, + + 1263, 1254, 1260, 1262, 1262, 1263, 1255, 1261, 1256, 1258, + 1258, 1260, 1259, 1261, 1258, 1264, 1266, 1258, 1258, 1265, + 1269, 1266, 1258, 1272, 1264, 1265, 1267, 1273, 1258, 1268, + 1268, 1267, 1258, 1270, 1270, 1271, 1274, 1275, 1271, 1276, + 1271, 1269, 1274, 1272, 1277, 1273, 1275, 1278, 1279, 1277, + 1280, 1281, 1284, 1282, 1285, 1287, 1280, 1281, 1282, 1276, + 1283, 1278, 1286, 1285, 1283, 1284, 1279, 1286, 1285, 1287, + 1285, 1290, 1285, 1293, 1285, 1288, 1288, 1289, 1289, 1292, + 1289, 1294, 1290, 1292, 1295, 1296, 1297, 1298, 1293, 1299, + 1296, 1296, 1300, 1295, 1299, 1297, 1301, 1302, 1303, 1294, + + 1304, 1305, 1306, 1306, 1308, 1301, 1300, 1305, 1307, 1298, + 1309, 1311, 1308, 1310, 1304, 1313, 1302, 1303, 1310, 1312, + 1307, 1314, 1313, 1315, 1309, 1311, 1316, 1318, 1312, 1317, + 1317, 1316, 1319, 1319, 1320, 1322, 1320, 1324, 1322, 1314, + 1323, 1325, 1318, 1326, 1326, 1323, 1327, 1331, 1315, 1332, + 1325, 1328, 1328, 1329, 1329, 1330, 1324, 1333, 1334, 1334, + 1330, 1335, 1336, 1338, 1337, 1339, 1327, 1337, 1331, 1340, + 1332, 1339, 1343, 1341, 1340, 1342, 1346, 1342, 1333, 1336, + 1347, 1335, 1341, 1338, 1345, 1349, 63, 1345, 1351, 1348, + 1343, 1346, 1350, 1347, 1348, 1352, 1351, 1350, 1353, 1349, + + 1352, 1353, 1354, 1355, 1355, 1356, 1357, 1354, 1358, 1359, + 1356, 1362, 1360, 1363, 1358, 1364, 1359, 1362, 1365, 1363, + 1364, 1366, 1367, 1365, 1357, 1360, 1368, 1366, 1369, 1370, + 1370, 1367, 1371, 1373, 1375, 1374, 1376, 1377, 1373, 1369, + 1378, 1379, 1380, 1381, 1375, 1368, 1386, 1379, 1380, 1381, + 1382, 1376, 1371, 1374, 1384, 1385, 1387, 1377, 1388, 1389, + 1384, 1382, 1390, 1378, 1391, 1391, 1386, 1392, 1393, 1385, + 1388, 1394, 1395, 1389, 1396, 1385, 1387, 1395, 1397, 1397, + 1390, 1398, 1401, 1399, 1403, 1402, 1404, 1392, 1399, 1394, + 1402, 1402, 1396, 1393, 1406, 1404, 1407, 1405, 1408, 1415, + + 1410, 1401, 1403, 1415, 1398, 1405, 1412, 1409, 1406, 1410, + 1416, 1407, 1409, 1408, 1418, 1409, 1408, 1411, 1414, 1411, + 1412, 1416, 1417, 1419, 1414, 1420, 1421, 1417, 1417, 1422, + 1423, 1421, 1424, 1418, 1422, 1423, 1425, 1426, 1427, 1429, + 58, 1430, 1426, 1420, 1431, 1432, 1432, 1433, 1434, 1419, + 1424, 1433, 1435, 1429, 1436, 1437, 1425, 1438, 1427, 1430, + 1436, 1439, 1431, 1440, 1441, 1443, 1434, 1437, 1442, 1444, + 1447, 1435, 1448, 1438, 1444, 1445, 1446, 1440, 1449, 1441, + 1439, 1446, 1445, 1442, 1443, 1450, 1450, 1449, 1447, 1451, + 1452, 1453, 1455, 1448, 1454, 1454, 1456, 1460, 1455, 1452, + + 1457, 1461, 1456, 1460, 1451, 1458, 1458, 1459, 1459, 1462, + 1463, 1453, 1464, 1465, 1457, 1463, 1466, 1461, 1464, 1465, + 1467, 1467, 1466, 1468, 1468, 1470, 1470, 1471, 1472, 1473, + 1462, 1471, 1474, 1477, 1475, 1476, 1479, 1472, 1478, 1478, + 1477, 1480, 1483, 1468, 1474, 1468, 1481, 1473, 1475, 1480, + 1476, 1481, 1482, 1484, 1486, 1494, 1479, 1485, 1484, 1484, + 1488, 1483, 1485, 1485, 1487, 1487, 1482, 1489, 1490, 1492, + 1491, 1493, 1495, 1494, 1486, 1491, 1496, 1490, 1495, 1488, + 1497, 1496, 1498, 1499, 1500, 1503, 1489, 1501, 1492, 1499, + 1502, 1493, 1504, 1501, 1505, 1506, 1502, 1507, 1508, 1509, + + 1497, 57, 1510, 1500, 1503, 1511, 1511, 1512, 1498, 1513, + 1512, 1504, 1508, 1505, 1506, 1514, 1507, 1510, 1515, 1520, + 1509, 1516, 1516, 1517, 1517, 1519, 1518, 1521, 1513, 1519, + 1515, 1518, 1520, 1522, 1514, 1523, 1521, 1523, 1525, 1526, + 1527, 1523, 1528, 1529, 1526, 1531, 1522, 1530, 1530, 1533, + 1531, 1532, 1534, 1536, 1523, 1527, 1525, 1532, 1536, 1529, + 1535, 1539, 1528, 1537, 1533, 1534, 1535, 1537, 1538, 1540, + 1541, 1542, 1538, 1548, 1543, 1544, 1544, 1546, 1549, 1541, + 1543, 1539, 1551, 1549, 1550, 1550, 1552, 1540, 1551, 1554, + 1554, 1542, 1558, 1556, 1548, 1546, 1556, 1557, 1557, 1559, + + 1560, 1562, 1563, 1565, 1562, 1564, 1552, 1566, 1558, 1567, + 1567, 1568, 1565, 1569, 1570, 1559, 1560, 1571, 1572, 1574, + 1574, 1576, 1571, 1563, 1573, 1564, 1568, 1566, 1575, 1577, + 1573, 1578, 1572, 1570, 1569, 1579, 1581, 1575, 1583, 1576, + 1580, 1580, 1582, 1583, 1577, 1586, 1584, 1585, 1585, 1586, + 1581, 1587, 1588, 1588, 1589, 1579, 1578, 1591, 1590, 1592, + 1582, 1584, 1593, 1592, 1594, 1596, 1596, 1597, 1591, 1594, + 1597, 1587, 1598, 1599, 1600, 1601, 1589, 1590, 1599, 1603, + 1602, 1593, 1604, 1605, 1608, 1598, 1606, 1607, 1607, 1608, + 1600, 1609, 1610, 1601, 1602, 1606, 1604, 1612, 1603, 1603, + + 1611, 1611, 1613, 1614, 1616, 1618, 1612, 1613, 1605, 1616, + 1617, 1609, 1610, 1615, 1619, 1615, 1617, 1620, 1622, 1624, + 1619, 1628, 1620, 1614, 1625, 1618, 1623, 1623, 1627, 1631, + 1625, 1632, 1622, 1627, 1629, 1629, 1630, 1630, 1624, 1633, + 1636, 1634, 1638, 1631, 1634, 1628, 1635, 1635, 1637, 1632, + 1639, 1640, 1642, 1639, 1633, 1642, 1639, 1640, 1636, 1641, + 1637, 1644, 1638, 1646, 1641, 1649, 1647, 1645, 1639, 1647, + 1644, 1642, 1645, 1648, 1648, 1650, 1651, 1659, 1652, 1653, + 1653, 1650, 1651, 1652, 1654, 1654, 1655, 1657, 1646, 1649, + 1656, 1658, 1655, 1660, 1661, 1656, 1659, 1661, 1662, 1663, + + 1657, 1664, 1667, 1665, 1662, 1663, 1666, 1664, 1665, 1658, + 1668, 1671, 1666, 1660, 1670, 1668, 1669, 1669, 1672, 1670, + 1673, 1674, 1675, 1676, 1678, 1667, 1677, 1679, 1680, 1671, + 1682, 1681, 1680, 1681, 1685, 1686, 1675, 1676, 1672, 1673, + 1677, 1674, 1678, 1683, 1687, 1688, 1685, 1686, 1689, 1682, + 1683, 1688, 1679, 1690, 1691, 1693, 1692, 1687, 1693, 1694, + 1694, 1698, 1695, 1697, 1697, 1700, 1703, 1699, 1689, 1690, + 1692, 1695, 1699, 1702, 1691, 1704, 1693, 1700, 1701, 1701, + 1703, 1698, 1705, 1706, 1708, 1709, 1707, 1710, 1702, 1712, + 1714, 1708, 1706, 1715, 1709, 1719, 1715, 1709, 1718, 1704, + + 1705, 1707, 1723, 1710, 1712, 1716, 1716, 1717, 1717, 1712, + 1718, 1720, 1722, 1719, 1720, 1714, 1721, 1721, 1724, 1725, + 1727, 1723, 1725, 1724, 1726, 1722, 1728, 1729, 1730, 1726, + 1735, 1731, 1732, 1734, 1734, 1736, 1729, 1735, 1733, 1727, + 1731, 1732, 1728, 1731, 1733, 1737, 1738, 1730, 1739, 1740, + 1746, 1741, 1747, 1749, 1742, 1736, 1741, 1741, 1737, 1742, + 1743, 1756, 1739, 52, 1738, 1740, 1748, 1748, 1750, 1749, + 1747, 1755, 1743, 1751, 1751, 1746, 1753, 1750, 1751, 1752, + 1752, 1754, 1756, 1757, 1760, 1753, 1754, 1758, 1753, 1755, + 1761, 1762, 1758, 1758, 1752, 1763, 1764, 1765, 1760, 1766, + + 1763, 1757, 1768, 1765, 1769, 1761, 1767, 1767, 1768, 1769, + 1764, 1770, 1771, 1762, 1772, 1774, 1775, 1766, 1771, 1777, + 1772, 1776, 1783, 1779, 1784, 1770, 1781, 1776, 1778, 1779, + 1775, 1778, 1777, 1785, 1781, 1774, 1786, 1778, 1788, 1790, + 1787, 1783, 1789, 1784, 1786, 1787, 1791, 1788, 1790, 1792, + 1793, 1795, 1785, 1794, 1794, 1789, 1796, 1795, 1797, 1791, + 1798, 1797, 1796, 1792, 1793, 1799, 1799, 1800, 1801, 1802, + 1803, 1803, 1804, 1798, 1805, 1794, 1806, 1807, 1808, 1811, + 1805, 1810, 1810, 1814, 1813, 1804, 1801, 1800, 1802, 1813, + 1812, 1818, 1815, 1807, 1812, 1816, 1808, 1815, 1806, 1811, + + 1816, 1817, 1820, 1814, 1822, 1823, 1821, 1822, 1824, 1826, + 1817, 1825, 1825, 1820, 1818, 1821, 1828, 1823, 1827, 1829, + 1829, 1830, 1831, 1824, 1832, 1833, 1830, 1834, 1826, 1836, + 1827, 1832, 1837, 1839, 1838, 1828, 1831, 1833, 1840, 1834, + 1838, 1841, 1842, 1842, 1844, 1839, 1843, 1841, 1836, 1843, + 1845, 1845, 1837, 1847, 1848, 1849, 1840, 1851, 1847, 1850, + 1850, 1849, 1854, 1848, 1844, 1852, 1855, 1852, 1853, 1851, + 1858, 1853, 1856, 1857, 1859, 1858, 1860, 1861, 1862, 1859, + 1865, 1863, 1854, 1864, 47, 1860, 1863, 1868, 1855, 1861, + 1856, 1857, 1864, 1862, 1866, 1871, 1867, 1869, 1869, 1866, + + 1865, 1867, 1868, 1870, 1873, 1864, 1866, 1874, 1875, 1870, + 1877, 1878, 1876, 1878, 1883, 1879, 1871, 1880, 1880, 1886, + 1873, 1881, 1881, 1882, 1882, 1887, 1874, 1875, 1876, 1879, + 1877, 1879, 1884, 1884, 1883, 1885, 1885, 1888, 1889, 1889, + 1886, 1890, 1891, 1894, 1892, 1890, 1887, 1892, 1891, 1894, + 1895, 1896, 1898, 1899, 1897, 1901, 1899, 1896, 1888, 1897, + 1900, 1900, 1902, 1903, 1903, 1904, 1905, 1902, 1895, 1906, + 1912, 1907, 1908, 1908, 1906, 1901, 1907, 1898, 1909, 1910, + 1904, 1911, 1915, 1909, 1913, 1910, 1914, 1905, 1915, 1916, + 1912, 1917, 1918, 1911, 1911, 1911, 1919, 1923, 1921, 1918, + + 1911, 1919, 1913, 1921, 1921, 1922, 1914, 1925, 1924, 1916, + 1924, 1917, 1923, 1926, 1927, 1928, 1929, 1930, 1925, 1922, + 1927, 1931, 1931, 1932, 1928, 1933, 1933, 1934, 1926, 1935, + 1936, 1936, 1937, 1937, 1938, 1942, 1929, 1943, 1930, 1941, + 1941, 1945, 1946, 1948, 1949, 1949, 1943, 1934, 1950, 1932, + 1945, 1935, 1947, 1951, 1938, 1952, 1953, 1954, 1947, 1948, + 1942, 1956, 1952, 1946, 1957, 1953, 1955, 1955, 1951, 1950, + 1959, 1962, 1960, 1961, 1963, 1967, 1959, 1960, 1964, 1961, + 1957, 1963, 1972, 1954, 1964, 1970, 1965, 1956, 1965, 1968, + 1970, 1962, 1969, 1969, 1967, 1968, 1971, 1973, 1974, 1975, + + 1976, 1974, 1972, 1976, 1977, 1971, 1978, 1979, 1979, 1980, + 1982, 1975, 1981, 1983, 1986, 1980, 1973, 1984, 1981, 1987, + 1988, 1984, 1977, 1989, 1989, 1988, 1990, 1991, 1983, 1992, + 1982, 1995, 1978, 1994, 1986, 1995, 1997, 1984, 1996, 1996, + 1998, 1987, 1997, 2001, 1992, 2003, 1991, 1999, 1999, 1998, + 1990, 2000, 1994, 2004, 2001, 2000, 2002, 2002, 2005, 2001, + 2006, 2007, 2008, 2009, 2010, 2006, 2003, 2004, 2011, 2012, + 2010, 2013, 2014, 2015, 2015, 2021, 2013, 2005, 2016, 2016, + 2019, 2007, 2008, 2009, 2012, 2014, 2011, 2017, 2020, 2019, + 2027, 2017, 2022, 2023, 2023, 2021, 2027, 2022, 2030, 2020, + + 2025, 2025, 2026, 2029, 2020, 2031, 2032, 2026, 2026, 2029, + 2031, 2033, 2036, 2035, 2037, 2039, 2036, 2033, 2032, 2038, + 2038, 2040, 2041, 2042, 2030, 2035, 2037, 2040, 2044, 2042, + 2043, 2043, 2045, 2046, 2047, 2050, 2049, 2051, 2046, 2059, + 2039, 18, 2051, 2058, 2041, 2059, 2047, 2044, 2049, 2053, + 2053, 2085, 2045, 2054, 2050, 2085, 2054, 2055, 2055, 2056, + 2056, 2057, 2057, 2058, 2060, 2063, 2061, 2062, 2066, 2066, + 2060, 2061, 2065, 2062, 2063, 2068, 2069, 2065, 2068, 2070, + 2070, 2072, 2073, 2076, 2074, 2075, 2075, 2081, 2069, 2074, + 2077, 2078, 2076, 2072, 2073, 2077, 2078, 2079, 2080, 2080, + + 2079, 2082, 2083, 2084, 2086, 2087, 2088, 2081, 2089, 2086, + 2082, 2087, 2090, 2091, 2093, 2093, 2094, 2089, 2097, 2095, + 2083, 2100, 2084, 2096, 2088, 2101, 2093, 2091, 2095, 17, + 2090, 2099, 2096, 2100, 2094, 2098, 2098, 2102, 2097, 2103, + 2099, 2109, 2102, 2106, 2106, 2108, 2101, 2110, 2108, 2111, + 2114, 2113, 2103, 2115, 2116, 2117, 2117, 2109, 2118, 2115, + 2118, 2119, 2121, 2110, 2114, 2111, 2113, 2120, 2120, 2126, + 2121, 2116, 2123, 2123, 2124, 2124, 2127, 2128, 2130, 2119, + 2129, 2131, 2127, 2128, 2132, 2130, 2133, 2133, 2134, 2134, + 2135, 2138, 2126, 2136, 2129, 2137, 2139, 2134, 2140, 2142, + + 2141, 2147, 2144, 2131, 2132, 2136, 2138, 2137, 2139, 2141, + 2143, 2135, 2148, 2151, 2142, 2143, 2143, 2145, 2149, 2145, + 2152, 2147, 2155, 2145, 2140, 2144, 2150, 2150, 2154, 2153, + 2149, 2151, 2153, 2154, 2157, 2148, 2145, 2159, 2161, 2157, + 2152, 2158, 2155, 2158, 2160, 2161, 2165, 2163, 2166, 2160, + 2167, 2168, 2169, 2168, 2170, 2159, 2163, 2166, 2173, 2172, + 2170, 2172, 2167, 2175, 2165, 2174, 2174, 2177, 2176, 2177, + 2178, 2169, 2173, 2176, 2179, 2178, 2180, 2181, 2182, 2179, + 2183, 2186, 2184, 2185, 2188, 2187, 2183, 2184, 2190, 2175, + 2187, 2187, 2188, 2186, 2180, 2181, 2185, 2191, 2182, 2192, + + 2192, 2193, 2193, 2194, 2195, 2196, 2197, 2190, 2198, 2200, + 2201, 2191, 2197, 2198, 2194, 2199, 2203, 2199, 2201, 2195, + 2202, 2202, 2204, 2204, 2206, 2196, 2201, 2200, 2203, 2205, + 2205, 2207, 2208, 2206, 2210, 2211, 2207, 2212, 2210, 2212, + 2213, 2215, 2216, 2214, 2211, 2217, 2219, 2211, 2214, 2214, + 2208, 2216, 2223, 2215, 2220, 2221, 2224, 2217, 2219, 2220, + 2221, 2213, 2225, 2226, 2226, 2223, 2227, 2228, 2229, 2231, + 2234, 2225, 2230, 2232, 2233, 2234, 2224, 2238, 2236, 2237, + 2248, 2242, 0, 2241, 2227, 2228, 2229, 2232, 2230, 2233, + 2236, 2237, 2241, 2239, 2231, 2240, 2245, 2238, 2239, 2242, + + 2240, 2247, 2245, 2248, 2249, 2250, 2251, 2247, 2252, 2253, + 2253, 2254, 2255, 2255, 2256, 2245, 2257, 2252, 2258, 2249, + 2254, 2259, 2258, 2250, 2260, 2262, 2259, 2263, 2264, 2271, + 2266, 2251, 2256, 2263, 2265, 2257, 2266, 2260, 2270, 2265, + 2265, 2267, 2268, 2280, 2262, 2268, 2270, 2267, 2276, 2271, + 2264, 2274, 2274, 2275, 2275, 2277, 2277, 2276, 2278, 2278, + 2279, 2280, 2283, 2282, 2284, 2284, 2290, 2283, 2275, 2282, + 2285, 2285, 2279, 2286, 2287, 2292, 2294, 2289, 2286, 2275, + 2287, 2289, 2296, 2291, 2295, 2297, 2290, 2291, 2298, 2295, + 2299, 2300, 2301, 2298, 2302, 2292, 2303, 2304, 2304, 2302, + + 2297, 2294, 2305, 2308, 2306, 2296, 2305, 2300, 2299, 2307, + 2309, 2310, 2301, 2311, 2307, 2312, 2318, 2313, 2303, 2306, + 2314, 2308, 2313, 2315, 2318, 2311, 2316, 2316, 2319, 2310, + 2320, 2321, 2322, 2314, 2312, 2323, 2309, 2324, 2328, 2325, + 2326, 2315, 2327, 2330, 2328, 2337, 2337, 2319, 2332, 2320, + 2321, 2333, 2326, 2336, 2339, 2322, 2324, 2339, 2330, 2323, + 2325, 2332, 2334, 2327, 2335, 2333, 2335, 2338, 2334, 2340, + 2341, 2342, 2338, 2336, 2343, 2344, 2344, 2345, 2345, 2346, + 2348, 2346, 2340, 2347, 2347, 2342, 2349, 2343, 0, 2350, + 2353, 2353, 2351, 2351, 2341, 2348, 2351, 2354, 2354, 2355, + + 2355, 2349, 2350, 2356, 2357, 2357, 2358, 2358, 2359, 2361, + 2362, 2363, 2356, 2359, 2361, 2356, 2364, 2365, 2365, 2366, + 2366, 2367, 2368, 2368, 2369, 2370, 2370, 2372, 2364, 2371, + 2362, 2363, 2372, 2373, 2373, 2374, 2374, 2375, 2376, 2377, + 2367, 2378, 2369, 2379, 2371, 2381, 2383, 2376, 2382, 2382, + 2381, 2375, 2384, 2384, 2385, 2378, 2377, 2391, 2386, 2392, + 2387, 2388, 2379, 2386, 2388, 2383, 2387, 2389, 2389, 2390, + 2390, 2393, 2385, 2393, 2392, 2395, 2391, 2396, 2397, 2397, + 2399, 2401, 2400, 2389, 2402, 2403, 2404, 2404, 2405, 2403, + 2395, 2407, 2411, 2406, 2408, 2414, 2396, 2400, 2406, 2402, + + 2399, 2410, 2410, 2412, 2401, 2413, 2407, 2405, 2415, 2408, + 2412, 2417, 2411, 2414, 2416, 2418, 2418, 2423, 2419, 2413, + 2420, 2421, 2420, 2423, 2421, 2425, 2415, 2419, 2424, 2416, + 2425, 2426, 2427, 2428, 2429, 2431, 2426, 2417, 2430, 2421, + 2424, 2421, 2433, 2430, 2434, 2435, 2428, 2433, 2436, 2434, + 2435, 2439, 2437, 2438, 2440, 2429, 2441, 2427, 2437, 2438, + 2442, 2431, 2441, 2436, 2444, 2442, 2443, 2445, 2447, 2440, + 2446, 2443, 2439, 2446, 2448, 2449, 2450, 2451, 2452, 2457, + 2445, 2453, 2459, 2448, 2449, 2450, 2451, 2453, 2447, 2444, + 2454, 2455, 2452, 0, 2460, 2455, 2454, 2461, 2461, 2457, + + 2462, 2464, 2459, 2460, 2463, 2463, 2462, 2465, 2465, 2466, + 2464, 2467, 2469, 2463, 2466, 2472, 2470, 2471, 2471, 2476, + 2473, 2477, 2475, 2480, 2482, 2478, 2480, 2483, 2469, 2473, + 2472, 2467, 2470, 2467, 2475, 2476, 2477, 2478, 2481, 2483, + 2484, 2484, 2494, 2481, 2482, 2485, 2485, 2487, 2487, 2488, + 2489, 2490, 2488, 2491, 2492, 2489, 2494, 2490, 2496, 2491, + 2493, 2493, 2497, 2492, 2495, 2495, 2498, 2499, 2499, 2500, + 2496, 2505, 2501, 2502, 2505, 2500, 2497, 2504, 2502, 2506, + 2506, 2504, 2507, 2508, 2509, 2498, 2501, 2507, 2508, 2510, + 2511, 2512, 2514, 2509, 2516, 2512, 2513, 2513, 2510, 2516, + + 2517, 2518, 2519, 2520, 2521, 2514, 2522, 2523, 2521, 2524, + 2511, 2527, 2523, 2525, 2528, 2524, 2529, 2520, 2531, 2525, + 2517, 2518, 2519, 2526, 2526, 2530, 2522, 2532, 2532, 2527, + 2530, 2534, 2535, 2528, 2537, 2529, 2536, 2539, 2538, 2531, + 2537, 2536, 2542, 2534, 2538, 2539, 2544, 2540, 2535, 2540, + 2545, 2542, 2546, 2546, 2547, 2548, 2548, 2547, 2550, 2551, + 2544, 2550, 2551, 2552, 2545, 2553, 2553, 2556, 2557, 2558, + 2560, 2556, 2559, 2559, 2557, 2563, 2563, 2565, 2567, 2560, + 2568, 2558, 2571, 2572, 2573, 2574, 2575, 2571, 2581, 2552, + 2574, 2575, 2567, 2576, 2576, 2565, 2568, 2578, 2578, 2583, + + 2580, 2582, 2582, 2584, 2587, 2573, 2580, 2585, 2581, 2572, + 2588, 2593, 2585, 2588, 2589, 2583, 2590, 2591, 2591, 2596, + 2593, 2594, 2601, 2587, 2595, 2584, 2589, 2594, 2590, 2597, + 2595, 2599, 2599, 2600, 2602, 2606, 2600, 2596, 2604, 2604, + 2606, 2601, 2605, 2605, 2597, 2607, 2608, 2609, 2610, 2611, + 2612, 2611, 2602, 2610, 2613, 2608, 2615, 2614, 2616, 2617, + 2609, 2615, 2618, 2607, 2612, 2619, 2619, 2618, 2613, 2614, + 2620, 2620, 2621, 2621, 2622, 2622, 2623, 2624, 2616, 2617, + 2625, 2626, 2626, 2627, 2627, 2625, 2628, 2628, 2623, 2629, + 2630, 2631, 2632, 2633, 0, 2624, 2636, 2634, 2635, 2635, + + 2639, 2629, 2644, 2631, 2637, 2637, 2638, 2638, 2640, 2640, + 2630, 2639, 2632, 2634, 2633, 2636, 2641, 2642, 2643, 2646, + 2645, 2647, 2644, 2649, 2642, 2645, 2648, 2648, 2641, 2651, + 2643, 2652, 2649, 2650, 2650, 2653, 2654, 2656, 2655, 2646, + 2657, 2647, 2657, 2664, 2658, 2659, 2659, 2661, 2653, 2660, + 2662, 2652, 2655, 2665, 2666, 2651, 2658, 2668, 2660, 2656, + 2654, 2664, 2661, 2667, 2669, 2662, 2667, 2670, 2678, 2669, + 2680, 2668, 2670, 2671, 2671, 2665, 2679, 2666, 2672, 2672, + 2673, 2673, 2675, 2675, 2677, 2677, 2678, 2679, 2681, 2680, + 2683, 2684, 2685, 2686, 2691, 2687, 2688, 2689, 2690, 2689, + + 0, 2692, 2698, 2681, 2687, 2693, 2693, 2695, 2697, 2684, + 2683, 2695, 2691, 2686, 2685, 2704, 2688, 2699, 2690, 2692, + 2696, 2696, 2697, 2702, 2698, 2705, 2699, 2700, 2700, 2703, + 2703, 2706, 2702, 2704, 2707, 2708, 2709, 2710, 2712, 2713, + 2711, 2707, 2716, 2705, 2714, 2714, 2713, 2715, 2715, 2706, + 2708, 2717, 2718, 2723, 2709, 2710, 2711, 2712, 2718, 2720, + 2720, 2722, 2716, 2721, 2721, 2724, 2725, 2722, 2726, 2717, + 2727, 2723, 2728, 2729, 2729, 2730, 2731, 2728, 2732, 2733, + 2734, 2725, 0, 2724, 2727, 2741, 2735, 2726, 2737, 2737, + 2733, 2735, 2736, 2746, 2736, 2730, 2731, 2738, 2732, 2738, + + 2734, 2739, 2739, 2743, 2741, 2744, 2745, 2749, 2753, 2747, + 2748, 2750, 2743, 2746, 2747, 2748, 2754, 2755, 2745, 2758, + 2755, 2756, 2756, 2757, 2744, 2759, 2759, 2749, 2753, 2760, + 2750, 2761, 2762, 2764, 2754, 2765, 2762, 2758, 2757, 2766, + 2760, 2765, 2768, 2766, 2767, 2767, 2761, 2770, 2764, 2771, + 2772, 2773, 2773, 2775, 2776, 2768, 2777, 2778, 2778, 2780, + 2777, 2784, 2770, 2776, 2785, 2775, 2779, 2779, 2782, 2771, + 2772, 2781, 2781, 2782, 2783, 2786, 2785, 2784, 2780, 2787, + 2787, 2792, 2792, 2783, 2793, 2794, 2794, 2795, 2796, 2797, + 2798, 2801, 2801, 2802, 2799, 2786, 2800, 2803, 2814, 2798, + + 2795, 2796, 2797, 2799, 2808, 2800, 2793, 2805, 2805, 2808, + 2810, 2811, 2803, 2802, 2812, 2810, 2813, 2814, 2815, 2812, + 2816, 2818, 2822, 2826, 2813, 2811, 2820, 2815, 2816, 2821, + 2825, 2820, 2823, 2823, 2821, 2825, 2818, 2822, 2824, 2824, + 2827, 2827, 2826, 2828, 2829, 2830, 2831, 2832, 0, 2829, + 2828, 2833, 2835, 2832, 2834, 2834, 2833, 2836, 2837, 2837, + 2838, 2838, 2836, 2830, 2831, 2841, 2844, 2835, 2842, 2842, + 2843, 2844, 2844, 2843, 2845, 2846, 2847, 2848, 2841, 2845, + 2846, 2849, 2850, 2848, 2851, 2849, 2852, 2850, 2853, 2854, + 2847, 2855, 2856, 2851, 2857, 2858, 2853, 2855, 2856, 2857, + + 2862, 2852, 2859, 2859, 2861, 2862, 2863, 2858, 2865, 2863, + 2854, 2861, 2867, 2868, 2869, 2870, 2871, 2867, 2868, 2869, + 2865, 2872, 2873, 2874, 2874, 2875, 2879, 2876, 2884, 2871, + 2872, 2873, 2876, 2870, 2875, 2880, 2881, 2885, 2886, 0, + 2887, 2880, 2881, 2889, 2879, 2888, 2888, 2884, 2890, 2895, + 2889, 2892, 2893, 2894, 2894, 2896, 2898, 2885, 2886, 2887, + 2892, 2893, 2897, 2897, 2895, 2900, 2902, 2890, 2903, 2905, + 2896, 2906, 2903, 2904, 2904, 2898, 2907, 2906, 2908, 2909, + 2900, 2911, 2907, 2910, 2910, 2909, 2902, 2912, 2913, 2911, + 2915, 2916, 2918, 2913, 2905, 2921, 2908, 2919, 2918, 2915, + + 2919, 2920, 2922, 2922, 2916, 2920, 2923, 2925, 2925, 2921, + 2926, 2979, 2912, 2927, 2927, 2928, 2928, 2930, 2930, 2931, + 2932, 2923, 2933, 2931, 2937, 2932, 2935, 2935, 2926, 2938, + 2939, 2933, 2940, 2941, 2938, 2943, 2979, 2940, 2940, 2944, + 2944, 2950, 2939, 2954, 2937, 2941, 2946, 2946, 2947, 2947, + 2948, 2948, 2951, 2949, 2950, 2943, 2949, 2953, 2953, 2956, + 2960, 2954, 2957, 2957, 2962, 2951, 2958, 2958, 2959, 2959, + 2961, 2961, 2963, 2964, 2965, 2960, 2974, 2962, 0, 2956, + 2965, 2966, 2966, 2970, 2967, 2975, 2971, 2964, 2967, 2970, + 2963, 2971, 2973, 2976, 2977, 2978, 2989, 2973, 2973, 2974, + + 2977, 2978, 2980, 2981, 2981, 2975, 2980, 2984, 2986, 2991, + 2991, 2987, 2984, 2976, 2987, 2990, 2986, 2992, 2990, 2993, + 2994, 2989, 2995, 2996, 2993, 2997, 2997, 2998, 2999, 3000, + 3001, 2999, 3002, 3029, 2992, 2992, 3006, 2996, 2994, 2999, + 3002, 2998, 2995, 3000, 0, 3004, 3016, 3005, 3029, 3001, + 3004, 3004, 3005, 3005, 3013, 3006, 3007, 3007, 3008, 3008, + 3009, 3009, 3010, 3010, 3011, 3011, 3012, 3012, 3014, 3015, + 3013, 3017, 3016, 3014, 3018, 3019, 3020, 3021, 3022, 3018, + 3023, 3020, 3024, 3026, 3026, 3017, 3021, 3027, 3027, 3015, + 3028, 3030, 3030, 3028, 3019, 3031, 3032, 0, 3022, 3035, + + 3023, 3031, 3024, 3034, 3034, 3037, 3035, 3036, 3036, 3040, + 3037, 3039, 3039, 3041, 3032, 3042, 3043, 3045, 3040, 3046, + 3046, 3049, 3041, 3050, 3042, 3043, 3047, 3047, 3048, 3051, + 3049, 3052, 3048, 3053, 3055, 3045, 3056, 3057, 3053, 3053, + 3051, 3057, 3050, 3061, 3063, 3056, 3052, 3055, 3061, 3062, + 3062, 3065, 3065, 3066, 3067, 3068, 3070, 3070, 3063, 3071, + 3072, 3076, 3078, 3080, 3077, 3083, 3085, 3066, 3071, 3077, + 3081, 3078, 3072, 3068, 0, 3087, 3081, 3083, 3093, 3067, + 3087, 3089, 3089, 3080, 3088, 3090, 3076, 3085, 3092, 3088, + 3094, 3093, 3101, 3092, 3090, 3095, 3095, 3097, 3097, 3095, + + 3098, 3098, 3099, 3099, 3094, 3100, 3102, 0, 3103, 3105, + 3109, 3106, 3101, 3103, 3100, 3105, 3106, 3107, 3108, 3108, + 3110, 3111, 3107, 3113, 3112, 3102, 3115, 3114, 3109, 3112, + 3116, 3116, 3110, 3114, 3118, 3119, 3121, 3121, 3118, 3120, + 3119, 3113, 3111, 3122, 3120, 3123, 3124, 3126, 3128, 3128, + 3130, 3115, 3131, 3132, 3133, 3134, 3135, 3136, 3133, 3139, + 3123, 3124, 3122, 3130, 3134, 3131, 3132, 3126, 3138, 3137, + 3140, 3140, 3135, 3138, 3141, 3142, 3136, 3137, 3143, 3139, + 3144, 3144, 3146, 3141, 3145, 3145, 3149, 3155, 3150, 3152, + 3159, 3149, 3149, 3142, 3160, 3152, 3153, 3153, 3157, 3157, + + 3161, 3146, 3150, 3162, 3143, 3161, 3159, 3163, 3155, 3167, + 3160, 3168, 3163, 3166, 3166, 3169, 3170, 3171, 3174, 3162, + 3168, 3169, 3173, 3173, 3175, 3176, 3176, 3178, 3180, 3167, + 3182, 3181, 3174, 3178, 3184, 3182, 3171, 3181, 3187, 3170, + 3185, 3185, 3188, 3175, 3186, 3186, 3189, 3189, 3180, 3190, + 3191, 3192, 3193, 3187, 3194, 3195, 3184, 3196, 3193, 3191, + 3190, 3198, 3188, 3197, 3197, 3199, 3189, 3195, 3199, 3200, + 3205, 3192, 3200, 3194, 3201, 3201, 3198, 3196, 3206, 3207, + 3208, 3208, 3205, 3209, 3210, 3207, 3209, 3211, 3213, 3215, + 3210, 3214, 3214, 3213, 3215, 3216, 3217, 3221, 3206, 3218, + + 3219, 3219, 3217, 3222, 3223, 3211, 3224, 3225, 3225, 3221, + 3227, 3226, 3242, 3228, 3216, 3233, 3218, 3218, 3242, 3224, + 3233, 3222, 3228, 3230, 3230, 3234, 3227, 3231, 3231, 3223, + 3226, 3232, 3232, 3235, 3236, 3236, 3237, 3237, 3235, 3234, + 3238, 3238, 3239, 3239, 3240, 3241, 3243, 3246, 3246, 3247, + 3252, 3243, 3249, 3249, 3250, 3250, 3254, 3240, 3255, 3257, + 3256, 3258, 3258, 3260, 3260, 3247, 3261, 3262, 3263, 3252, + 3264, 3241, 3266, 3266, 3265, 3267, 3267, 3269, 3254, 3256, + 3255, 3257, 3263, 3265, 3271, 3270, 3262, 3272, 3273, 3276, + 3264, 3270, 3261, 3273, 3281, 3269, 3277, 3277, 3279, 3279, + + 3280, 3282, 3283, 3284, 3271, 3280, 3272, 3282, 3281, 3290, + 3276, 3284, 3285, 3285, 3283, 3286, 3291, 3288, 3289, 3292, + 3286, 3288, 3293, 3289, 3292, 3294, 3297, 3296, 3298, 3290, + 3299, 3294, 3308, 3301, 3293, 3296, 3291, 3302, 3303, 3304, + 0, 3305, 3307, 3309, 3312, 3297, 3305, 3307, 3298, 3309, + 3299, 3301, 3308, 3302, 3310, 3303, 3303, 3314, 3313, 3310, + 3304, 3313, 3318, 3318, 3312, 3319, 3319, 3320, 3325, 3325, + 3314, 3320, 3326, 3327, 3328, 3328, 3330, 3326, 3333, 3333, + 3334, 3334, 3338, 3334, 3335, 3335, 3338, 3335, 3336, 3336, + 3340, 3330, 3327, 3337, 3337, 3340, 3337, 3341, 3342, 3342, + + 3343, 3344, 3347, 3347, 3348, 3349, 3341, 3350, 3351, 3351, + 3352, 3355, 3350, 3356, 3358, 3344, 3359, 3357, 3343, 3361, + 3356, 3357, 3362, 3358, 3348, 3349, 3364, 3362, 3363, 3363, + 3352, 3359, 3365, 3365, 3368, 3364, 3355, 3361, 3366, 3366, + 3367, 3367, 3369, 3370, 3373, 3371, 3374, 3369, 3372, 3368, + 3371, 3371, 3370, 3375, 3372, 3370, 3378, 3376, 3377, 3379, + 3379, 3374, 3376, 3377, 3380, 3381, 3382, 3382, 3384, 3373, + 3380, 3381, 3383, 3383, 3375, 3378, 3385, 3388, 3388, 3390, + 3390, 3385, 3391, 3384, 3393, 3395, 3395, 3396, 3396, 3397, + 3397, 3391, 3398, 3398, 3400, 3400, 3401, 3401, 3402, 3402, + + 3403, 3403, 3393, 3404, 3406, 3407, 3407, 3408, 3408, 3409, + 3410, 3411, 3416, 3406, 3413, 3413, 3414, 3417, 3409, 3415, + 3415, 3418, 3410, 3419, 3419, 3420, 3420, 3416, 3422, 3404, + 3417, 3411, 3426, 3418, 3428, 3414, 3423, 3423, 3427, 3429, + 3429, 3427, 3432, 3422, 3430, 3432, 3433, 3434, 3435, 3436, + 3426, 3437, 3433, 3435, 3438, 3441, 3448, 3440, 3445, 3449, + 3428, 3434, 3430, 3440, 3441, 3463, 3463, 3444, 3436, 3437, + 3438, 3444, 3458, 3445, 3462, 3459, 3468, 3458, 3459, 3449, + 3464, 3464, 3448, 3466, 3466, 3469, 3470, 3462, 3471, 3473, + 3470, 3475, 3477, 3476, 3469, 3479, 3478, 3477, 3478, 3468, + + 3480, 3480, 3481, 3473, 3476, 3482, 3484, 3483, 3471, 3485, + 3479, 3486, 3487, 3489, 3475, 3481, 3488, 3490, 3489, 3499, + 3492, 3487, 3484, 3494, 3482, 3483, 3486, 3491, 3488, 3493, + 3493, 3495, 3491, 3499, 3485, 3500, 3495, 3502, 3490, 3492, + 3501, 3501, 3507, 3494, 3503, 3503, 3502, 3504, 3504, 3505, + 3505, 3506, 3506, 3508, 3509, 3500, 3512, 3509, 3510, 3511, + 3513, 3507, 3514, 3510, 3511, 3515, 3516, 3517, 3514, 3518, + 3518, 3519, 3517, 3508, 3524, 3513, 3520, 3520, 3516, 3515, + 3525, 3512, 3521, 3521, 3523, 3523, 3526, 3526, 3528, 3524, + 3530, 3519, 3533, 3533, 3534, 3534, 3535, 3536, 3539, 3525, + + 3537, 3538, 3540, 3528, 3535, 3541, 3537, 3538, 3530, 3542, + 3543, 3543, 3539, 3549, 3542, 3540, 3536, 3545, 3545, 3550, + 3555, 3552, 3553, 3556, 3541, 3557, 3553, 3560, 3556, 3558, + 3559, 3561, 3562, 3566, 3549, 3552, 3561, 3562, 3567, 3550, + 3555, 3568, 3558, 3559, 3557, 3571, 3560, 3563, 3563, 3569, + 3569, 3571, 3570, 3566, 3572, 3572, 3567, 3570, 3573, 3574, + 3568, 3575, 3576, 3573, 3574, 3577, 3575, 3579, 3579, 3580, + 3584, 3577, 3581, 3581, 3580, 3583, 3585, 3586, 3587, 3583, + 3588, 3576, 3589, 3585, 3597, 3590, 3588, 3592, 3592, 3584, + 3594, 3594, 3598, 3595, 3596, 3599, 3586, 3587, 3590, 3596, + + 3602, 3589, 3595, 3597, 3601, 3595, 3600, 3600, 3599, 3601, + 3604, 3598, 3606, 3602, 3605, 3605, 3607, 3607, 3608, 3608, + 3609, 3610, 3611, 3612, 3612, 3609, 0, 3613, 3610, 3615, + 3615, 3606, 3613, 3614, 3618, 3614, 3604, 3616, 3617, 3620, + 3623, 3611, 3619, 3627, 3616, 3617, 3625, 3619, 3622, 3622, + 3626, 3625, 3628, 3618, 3632, 3626, 3629, 3629, 3620, 3623, + 3631, 3631, 3627, 3633, 3634, 3634, 3635, 3635, 3636, 3638, + 3638, 3628, 3640, 3632, 3646, 3636, 3639, 3639, 3642, 3640, + 3645, 3647, 3633, 3642, 0, 3645, 3648, 3648, 3649, 3649, + 0, 0, 0, 3646, 0, 0, 0, 0, 0, 0, + + 3647, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3654, 3654, + 3654, 3654, 3654, 3654, 3654, 3655, 3655, 3655, 3655, 3655, + 3655, 3655, 3656, 3656, 3656, 3656, 3656, 3656, 3656, 3657, + 3657, 3657, 3657, 3657, 3657, 3657, 3658, 3658, 3658, 3658, + 3658, 3658, 3658, 3659, 3659, 3659, 3659, 3659, 3659, 3659, + 3661, 3661, 0, 3661, 3661, 3661, 3661, 3662, 3662, 0, + 0, 0, 3662, 3662, 3663, 3663, 0, 0, 3663, 0, + 3663, 3664, 0, 0, 0, 0, 0, 3664, 3665, 3665, + 0, 0, 0, 3665, 3665, 3666, 0, 0, 0, 0, + 0, 3666, 3667, 3667, 0, 3667, 3667, 3667, 3667, 3668, + + 0, 0, 0, 0, 0, 3668, 3669, 3669, 0, 0, + 0, 3669, 3669, 3670, 3670, 0, 3670, 3670, 3670, 3670, + 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, + 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, + 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, + 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3652, + 3652 } ; static yy_state_type yy_last_accepting_state; @@ -3393,7 +3410,7 @@ static void config_end_include(void) } #endif -#line 3394 "" +#line 3412 "" #define YY_NO_INPUT 1 #line 191 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -3402,9 +3419,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 3403 "" +#line 3421 "" -#line 3405 "" +#line 3423 "" #define INITIAL 0 #define quotedstring 1 @@ -3628,7 +3645,7 @@ YY_DECL { #line 211 "./util/configlexer.lex" -#line 3629 "" +#line 3647 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3661,13 +3678,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 >= 3628 ) + if ( yy_current_state >= 3653 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 7073 ); + while ( yy_base[yy_current_state] != 7121 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -5383,58 +5400,68 @@ YY_RULE_SETUP case 336: YY_RULE_SETUP #line 561 "./util/configlexer.lex" -{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } +{ YDVAR(1, VAR_ANSWER_COOKIE ) } YY_BREAK case 337: YY_RULE_SETUP #line 562 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } +{ YDVAR(1, VAR_COOKIE_SECRET) } YY_BREAK case 338: YY_RULE_SETUP #line 563 "./util/configlexer.lex" -{ YDVAR(1, VAR_NSID ) } +{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } YY_BREAK case 339: YY_RULE_SETUP #line 564 "./util/configlexer.lex" -{ YDVAR(1, VAR_EDE ) } +{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } YY_BREAK case 340: -/* rule 340 can match eol */ YY_RULE_SETUP #line 565 "./util/configlexer.lex" +{ YDVAR(1, VAR_NSID ) } + YY_BREAK +case 341: +YY_RULE_SETUP +#line 566 "./util/configlexer.lex" +{ YDVAR(1, VAR_EDE ) } + YY_BREAK +case 342: +/* rule 342 can match eol */ +YY_RULE_SETUP +#line 567 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 341: +case 343: YY_RULE_SETUP -#line 568 "./util/configlexer.lex" +#line 570 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 569 "./util/configlexer.lex" +#line 571 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 342: +case 344: YY_RULE_SETUP -#line 574 "./util/configlexer.lex" +#line 576 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 343: -/* rule 343 can match eol */ +case 345: +/* rule 345 can match eol */ YY_RULE_SETUP -#line 575 "./util/configlexer.lex" +#line 577 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 344: +case 346: YY_RULE_SETUP -#line 577 "./util/configlexer.lex" +#line 579 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5447,34 +5474,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 345: +case 347: YY_RULE_SETUP -#line 589 "./util/configlexer.lex" +#line 591 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 590 "./util/configlexer.lex" +#line 592 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 346: +case 348: YY_RULE_SETUP -#line 595 "./util/configlexer.lex" +#line 597 "./util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 347: -/* rule 347 can match eol */ +case 349: +/* rule 349 can match eol */ YY_RULE_SETUP -#line 596 "./util/configlexer.lex" +#line 598 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 348: +case 350: YY_RULE_SETUP -#line 598 "./util/configlexer.lex" +#line 600 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5487,38 +5514,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 349: +case 351: YY_RULE_SETUP -#line 610 "./util/configlexer.lex" +#line 612 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 612 "./util/configlexer.lex" +#line 614 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 350: -YY_RULE_SETUP -#line 616 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK -case 351: -/* rule 351 can match eol */ -YY_RULE_SETUP -#line 617 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} - YY_BREAK case 352: YY_RULE_SETUP #line 618 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 353: +/* rule 353 can match eol */ YY_RULE_SETUP #line 619 "./util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++;} + YY_BREAK +case 354: +YY_RULE_SETUP +#line 620 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 355: +YY_RULE_SETUP +#line 621 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 0); @@ -5526,27 +5553,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 624 "./util/configlexer.lex" +#line 626 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 354: +case 356: YY_RULE_SETUP -#line 628 "./util/configlexer.lex" +#line 630 "./util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 355: -/* rule 355 can match eol */ +case 357: +/* rule 357 can match eol */ YY_RULE_SETUP -#line 629 "./util/configlexer.lex" +#line 631 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 356: +case 358: YY_RULE_SETUP -#line 631 "./util/configlexer.lex" +#line 633 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -5556,7 +5583,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 637 "./util/configlexer.lex" +#line 639 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -5571,39 +5598,39 @@ case YY_STATE_EOF(val): } YY_BREAK /* include-toplevel: directive */ -case 357: +case 359: YY_RULE_SETUP -#line 651 "./util/configlexer.lex" +#line 653 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel); } YY_BREAK case YY_STATE_EOF(include_toplevel): -#line 654 "./util/configlexer.lex" +#line 656 "./util/configlexer.lex" { yyerror("EOF inside include_toplevel directive"); BEGIN(inc_prev); } YY_BREAK -case 358: -YY_RULE_SETUP -#line 658 "./util/configlexer.lex" -{ LEXOUT(("ITSP ")); /* ignore */ } - YY_BREAK -case 359: -/* rule 359 can match eol */ -YY_RULE_SETUP -#line 659 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } - YY_BREAK case 360: YY_RULE_SETUP #line 660 "./util/configlexer.lex" -{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } +{ LEXOUT(("ITSP ")); /* ignore */ } YY_BREAK case 361: +/* rule 361 can match eol */ YY_RULE_SETUP #line 661 "./util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++; } + YY_BREAK +case 362: +YY_RULE_SETUP +#line 662 "./util/configlexer.lex" +{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } + YY_BREAK +case 363: +YY_RULE_SETUP +#line 663 "./util/configlexer.lex" { LEXOUT(("ITunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 1); @@ -5612,29 +5639,29 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_toplevel_quoted): -#line 667 "./util/configlexer.lex" +#line 669 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 362: +case 364: YY_RULE_SETUP -#line 671 "./util/configlexer.lex" +#line 673 "./util/configlexer.lex" { LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } YY_BREAK -case 363: -/* rule 363 can match eol */ +case 365: +/* rule 365 can match eol */ YY_RULE_SETUP -#line 672 "./util/configlexer.lex" +#line 674 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 364: +case 366: YY_RULE_SETUP -#line 676 "./util/configlexer.lex" +#line 678 "./util/configlexer.lex" { LEXOUT(("ITQE ")); yytext[yyleng - 1] = '\0'; @@ -5643,33 +5670,33 @@ YY_RULE_SETUP return (VAR_FORCE_TOPLEVEL); } YY_BREAK -case 365: +case 367: YY_RULE_SETUP -#line 684 "./util/configlexer.lex" +#line 686 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 366: +case 368: YY_RULE_SETUP -#line 688 "./util/configlexer.lex" +#line 690 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 367: +case 369: YY_RULE_SETUP -#line 692 "./util/configlexer.lex" +#line 694 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 368: +case 370: YY_RULE_SETUP -#line 696 "./util/configlexer.lex" +#line 698 "./util/configlexer.lex" ECHO; YY_BREAK -#line 5670 "" +#line 5698 "" case YY_END_OF_BUFFER: { @@ -5964,7 +5991,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3628 ) + if ( yy_current_state >= 3653 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5992,11 +6019,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 >= 3628 ) + if ( yy_current_state >= 3653 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3627); + yy_is_jam = (yy_current_state == 3652); return yy_is_jam ? 0 : yy_current_state; } @@ -6635,6 +6662,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 696 "./util/configlexer.lex" +#line 698 "./util/configlexer.lex" diff --git a/util/configparser.c b/util/configparser.c index 7f3cd99e1..3b1e994da 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -75,11 +75,13 @@ #include #include #include +#include #include #include "util/configyyrename.h" #include "util/config_file.h" #include "util/net_help.h" +#include "sldns/str2wire.h" int ub_c_lex(void); void ub_c_error(const char *message); @@ -97,7 +99,7 @@ extern struct config_parser_state* cfg_parser; #endif -#line 101 "util/configparser.c" +#line 103 "util/configparser.c" # ifndef YY_CAST # ifdef __cplusplus @@ -422,400 +424,404 @@ enum yysymbol_kind_t YYSYMBOL_VAR_ALLOW_NOTIFY = 294, /* VAR_ALLOW_NOTIFY */ YYSYMBOL_VAR_TLS_WIN_CERT = 295, /* VAR_TLS_WIN_CERT */ YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 296, /* VAR_TCP_CONNECTION_LIMIT */ - YYSYMBOL_VAR_FORWARD_NO_CACHE = 297, /* VAR_FORWARD_NO_CACHE */ - YYSYMBOL_VAR_STUB_NO_CACHE = 298, /* VAR_STUB_NO_CACHE */ - YYSYMBOL_VAR_LOG_SERVFAIL = 299, /* VAR_LOG_SERVFAIL */ - YYSYMBOL_VAR_DENY_ANY = 300, /* VAR_DENY_ANY */ - YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 301, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ - YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 302, /* VAR_LOG_TAG_QUERYREPLY */ - YYSYMBOL_VAR_STREAM_WAIT_SIZE = 303, /* VAR_STREAM_WAIT_SIZE */ - YYSYMBOL_VAR_TLS_CIPHERS = 304, /* VAR_TLS_CIPHERS */ - YYSYMBOL_VAR_TLS_CIPHERSUITES = 305, /* VAR_TLS_CIPHERSUITES */ - YYSYMBOL_VAR_TLS_USE_SNI = 306, /* VAR_TLS_USE_SNI */ - YYSYMBOL_VAR_IPSET = 307, /* VAR_IPSET */ - YYSYMBOL_VAR_IPSET_NAME_V4 = 308, /* VAR_IPSET_NAME_V4 */ - YYSYMBOL_VAR_IPSET_NAME_V6 = 309, /* VAR_IPSET_NAME_V6 */ - YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 310, /* VAR_TLS_SESSION_TICKET_KEYS */ - YYSYMBOL_VAR_RPZ = 311, /* VAR_RPZ */ - YYSYMBOL_VAR_TAGS = 312, /* VAR_TAGS */ - YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 313, /* VAR_RPZ_ACTION_OVERRIDE */ - YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 314, /* VAR_RPZ_CNAME_OVERRIDE */ - YYSYMBOL_VAR_RPZ_LOG = 315, /* VAR_RPZ_LOG */ - YYSYMBOL_VAR_RPZ_LOG_NAME = 316, /* VAR_RPZ_LOG_NAME */ - YYSYMBOL_VAR_DYNLIB = 317, /* VAR_DYNLIB */ - YYSYMBOL_VAR_DYNLIB_FILE = 318, /* VAR_DYNLIB_FILE */ - YYSYMBOL_VAR_EDNS_CLIENT_STRING = 319, /* VAR_EDNS_CLIENT_STRING */ - YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 320, /* VAR_EDNS_CLIENT_STRING_OPCODE */ - YYSYMBOL_VAR_NSID = 321, /* VAR_NSID */ - YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 322, /* VAR_ZONEMD_PERMISSIVE_MODE */ - YYSYMBOL_VAR_ZONEMD_CHECK = 323, /* VAR_ZONEMD_CHECK */ - YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 324, /* VAR_ZONEMD_REJECT_ABSENCE */ - YYSYMBOL_VAR_RPZ_SIGNAL_NXDOMAIN_RA = 325, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */ - YYSYMBOL_VAR_INTERFACE_AUTOMATIC_PORTS = 326, /* VAR_INTERFACE_AUTOMATIC_PORTS */ - YYSYMBOL_VAR_EDE = 327, /* VAR_EDE */ - YYSYMBOL_VAR_INTERFACE_ACTION = 328, /* VAR_INTERFACE_ACTION */ - YYSYMBOL_VAR_INTERFACE_VIEW = 329, /* VAR_INTERFACE_VIEW */ - YYSYMBOL_VAR_INTERFACE_TAG = 330, /* VAR_INTERFACE_TAG */ - YYSYMBOL_VAR_INTERFACE_TAG_ACTION = 331, /* VAR_INTERFACE_TAG_ACTION */ - YYSYMBOL_VAR_INTERFACE_TAG_DATA = 332, /* VAR_INTERFACE_TAG_DATA */ - YYSYMBOL_YYACCEPT = 333, /* $accept */ - YYSYMBOL_toplevelvars = 334, /* toplevelvars */ - YYSYMBOL_toplevelvar = 335, /* toplevelvar */ - YYSYMBOL_force_toplevel = 336, /* force_toplevel */ - YYSYMBOL_serverstart = 337, /* serverstart */ - YYSYMBOL_contents_server = 338, /* contents_server */ - YYSYMBOL_content_server = 339, /* content_server */ - YYSYMBOL_stubstart = 340, /* stubstart */ - YYSYMBOL_contents_stub = 341, /* contents_stub */ - YYSYMBOL_content_stub = 342, /* content_stub */ - YYSYMBOL_forwardstart = 343, /* forwardstart */ - YYSYMBOL_contents_forward = 344, /* contents_forward */ - YYSYMBOL_content_forward = 345, /* content_forward */ - YYSYMBOL_viewstart = 346, /* viewstart */ - YYSYMBOL_contents_view = 347, /* contents_view */ - YYSYMBOL_content_view = 348, /* content_view */ - YYSYMBOL_authstart = 349, /* authstart */ - YYSYMBOL_contents_auth = 350, /* contents_auth */ - YYSYMBOL_content_auth = 351, /* content_auth */ - YYSYMBOL_rpz_tag = 352, /* rpz_tag */ - YYSYMBOL_rpz_action_override = 353, /* rpz_action_override */ - YYSYMBOL_rpz_cname_override = 354, /* rpz_cname_override */ - YYSYMBOL_rpz_log = 355, /* rpz_log */ - YYSYMBOL_rpz_log_name = 356, /* rpz_log_name */ - YYSYMBOL_rpz_signal_nxdomain_ra = 357, /* rpz_signal_nxdomain_ra */ - YYSYMBOL_rpzstart = 358, /* rpzstart */ - YYSYMBOL_contents_rpz = 359, /* contents_rpz */ - YYSYMBOL_content_rpz = 360, /* content_rpz */ - YYSYMBOL_server_num_threads = 361, /* server_num_threads */ - YYSYMBOL_server_verbosity = 362, /* server_verbosity */ - YYSYMBOL_server_statistics_interval = 363, /* server_statistics_interval */ - YYSYMBOL_server_statistics_cumulative = 364, /* server_statistics_cumulative */ - YYSYMBOL_server_extended_statistics = 365, /* server_extended_statistics */ - YYSYMBOL_server_shm_enable = 366, /* server_shm_enable */ - YYSYMBOL_server_shm_key = 367, /* server_shm_key */ - YYSYMBOL_server_port = 368, /* server_port */ - YYSYMBOL_server_send_client_subnet = 369, /* server_send_client_subnet */ - YYSYMBOL_server_client_subnet_zone = 370, /* server_client_subnet_zone */ - YYSYMBOL_server_client_subnet_always_forward = 371, /* server_client_subnet_always_forward */ - YYSYMBOL_server_client_subnet_opcode = 372, /* server_client_subnet_opcode */ - YYSYMBOL_server_max_client_subnet_ipv4 = 373, /* server_max_client_subnet_ipv4 */ - YYSYMBOL_server_max_client_subnet_ipv6 = 374, /* server_max_client_subnet_ipv6 */ - YYSYMBOL_server_min_client_subnet_ipv4 = 375, /* server_min_client_subnet_ipv4 */ - YYSYMBOL_server_min_client_subnet_ipv6 = 376, /* server_min_client_subnet_ipv6 */ - YYSYMBOL_server_max_ecs_tree_size_ipv4 = 377, /* server_max_ecs_tree_size_ipv4 */ - YYSYMBOL_server_max_ecs_tree_size_ipv6 = 378, /* server_max_ecs_tree_size_ipv6 */ - YYSYMBOL_server_interface = 379, /* server_interface */ - YYSYMBOL_server_outgoing_interface = 380, /* server_outgoing_interface */ - YYSYMBOL_server_outgoing_range = 381, /* server_outgoing_range */ - YYSYMBOL_server_outgoing_port_permit = 382, /* server_outgoing_port_permit */ - YYSYMBOL_server_outgoing_port_avoid = 383, /* server_outgoing_port_avoid */ - YYSYMBOL_server_outgoing_num_tcp = 384, /* server_outgoing_num_tcp */ - YYSYMBOL_server_incoming_num_tcp = 385, /* server_incoming_num_tcp */ - YYSYMBOL_server_interface_automatic = 386, /* server_interface_automatic */ - YYSYMBOL_server_interface_automatic_ports = 387, /* server_interface_automatic_ports */ - YYSYMBOL_server_do_ip4 = 388, /* server_do_ip4 */ - YYSYMBOL_server_do_ip6 = 389, /* server_do_ip6 */ - YYSYMBOL_server_do_udp = 390, /* server_do_udp */ - YYSYMBOL_server_do_tcp = 391, /* server_do_tcp */ - YYSYMBOL_server_prefer_ip4 = 392, /* server_prefer_ip4 */ - YYSYMBOL_server_prefer_ip6 = 393, /* server_prefer_ip6 */ - YYSYMBOL_server_tcp_mss = 394, /* server_tcp_mss */ - YYSYMBOL_server_outgoing_tcp_mss = 395, /* server_outgoing_tcp_mss */ - YYSYMBOL_server_tcp_idle_timeout = 396, /* server_tcp_idle_timeout */ - YYSYMBOL_server_max_reuse_tcp_queries = 397, /* server_max_reuse_tcp_queries */ - YYSYMBOL_server_tcp_reuse_timeout = 398, /* server_tcp_reuse_timeout */ - YYSYMBOL_server_tcp_auth_query_timeout = 399, /* server_tcp_auth_query_timeout */ - YYSYMBOL_server_tcp_keepalive = 400, /* server_tcp_keepalive */ - YYSYMBOL_server_tcp_keepalive_timeout = 401, /* server_tcp_keepalive_timeout */ - YYSYMBOL_server_tcp_upstream = 402, /* server_tcp_upstream */ - YYSYMBOL_server_udp_upstream_without_downstream = 403, /* server_udp_upstream_without_downstream */ - YYSYMBOL_server_ssl_upstream = 404, /* server_ssl_upstream */ - YYSYMBOL_server_ssl_service_key = 405, /* server_ssl_service_key */ - YYSYMBOL_server_ssl_service_pem = 406, /* server_ssl_service_pem */ - YYSYMBOL_server_ssl_port = 407, /* server_ssl_port */ - YYSYMBOL_server_tls_cert_bundle = 408, /* server_tls_cert_bundle */ - YYSYMBOL_server_tls_win_cert = 409, /* server_tls_win_cert */ - YYSYMBOL_server_tls_additional_port = 410, /* server_tls_additional_port */ - YYSYMBOL_server_tls_ciphers = 411, /* server_tls_ciphers */ - YYSYMBOL_server_tls_ciphersuites = 412, /* server_tls_ciphersuites */ - YYSYMBOL_server_tls_session_ticket_keys = 413, /* server_tls_session_ticket_keys */ - YYSYMBOL_server_tls_use_sni = 414, /* server_tls_use_sni */ - YYSYMBOL_server_https_port = 415, /* server_https_port */ - YYSYMBOL_server_http_endpoint = 416, /* server_http_endpoint */ - YYSYMBOL_server_http_max_streams = 417, /* server_http_max_streams */ - YYSYMBOL_server_http_query_buffer_size = 418, /* server_http_query_buffer_size */ - YYSYMBOL_server_http_response_buffer_size = 419, /* server_http_response_buffer_size */ - YYSYMBOL_server_http_nodelay = 420, /* server_http_nodelay */ - YYSYMBOL_server_http_notls_downstream = 421, /* server_http_notls_downstream */ - YYSYMBOL_server_use_systemd = 422, /* server_use_systemd */ - YYSYMBOL_server_do_daemonize = 423, /* server_do_daemonize */ - YYSYMBOL_server_use_syslog = 424, /* server_use_syslog */ - YYSYMBOL_server_log_time_ascii = 425, /* server_log_time_ascii */ - YYSYMBOL_server_log_queries = 426, /* server_log_queries */ - YYSYMBOL_server_log_replies = 427, /* server_log_replies */ - YYSYMBOL_server_log_tag_queryreply = 428, /* server_log_tag_queryreply */ - YYSYMBOL_server_log_servfail = 429, /* server_log_servfail */ - YYSYMBOL_server_log_local_actions = 430, /* server_log_local_actions */ - YYSYMBOL_server_chroot = 431, /* server_chroot */ - YYSYMBOL_server_username = 432, /* server_username */ - YYSYMBOL_server_directory = 433, /* server_directory */ - YYSYMBOL_server_logfile = 434, /* server_logfile */ - YYSYMBOL_server_pidfile = 435, /* server_pidfile */ - YYSYMBOL_server_root_hints = 436, /* server_root_hints */ - YYSYMBOL_server_dlv_anchor_file = 437, /* server_dlv_anchor_file */ - YYSYMBOL_server_dlv_anchor = 438, /* server_dlv_anchor */ - YYSYMBOL_server_auto_trust_anchor_file = 439, /* server_auto_trust_anchor_file */ - YYSYMBOL_server_trust_anchor_file = 440, /* server_trust_anchor_file */ - YYSYMBOL_server_trusted_keys_file = 441, /* server_trusted_keys_file */ - YYSYMBOL_server_trust_anchor = 442, /* server_trust_anchor */ - YYSYMBOL_server_trust_anchor_signaling = 443, /* server_trust_anchor_signaling */ - YYSYMBOL_server_root_key_sentinel = 444, /* server_root_key_sentinel */ - YYSYMBOL_server_domain_insecure = 445, /* server_domain_insecure */ - YYSYMBOL_server_hide_identity = 446, /* server_hide_identity */ - YYSYMBOL_server_hide_version = 447, /* server_hide_version */ - YYSYMBOL_server_hide_trustanchor = 448, /* server_hide_trustanchor */ - YYSYMBOL_server_hide_http_user_agent = 449, /* server_hide_http_user_agent */ - YYSYMBOL_server_identity = 450, /* server_identity */ - YYSYMBOL_server_version = 451, /* server_version */ - YYSYMBOL_server_http_user_agent = 452, /* server_http_user_agent */ - YYSYMBOL_server_nsid = 453, /* server_nsid */ - YYSYMBOL_server_so_rcvbuf = 454, /* server_so_rcvbuf */ - YYSYMBOL_server_so_sndbuf = 455, /* server_so_sndbuf */ - YYSYMBOL_server_so_reuseport = 456, /* server_so_reuseport */ - YYSYMBOL_server_ip_transparent = 457, /* server_ip_transparent */ - YYSYMBOL_server_ip_freebind = 458, /* server_ip_freebind */ - YYSYMBOL_server_ip_dscp = 459, /* server_ip_dscp */ - YYSYMBOL_server_stream_wait_size = 460, /* server_stream_wait_size */ - YYSYMBOL_server_edns_buffer_size = 461, /* server_edns_buffer_size */ - YYSYMBOL_server_msg_buffer_size = 462, /* server_msg_buffer_size */ - YYSYMBOL_server_msg_cache_size = 463, /* server_msg_cache_size */ - YYSYMBOL_server_msg_cache_slabs = 464, /* server_msg_cache_slabs */ - YYSYMBOL_server_num_queries_per_thread = 465, /* server_num_queries_per_thread */ - YYSYMBOL_server_jostle_timeout = 466, /* server_jostle_timeout */ - YYSYMBOL_server_delay_close = 467, /* server_delay_close */ - YYSYMBOL_server_udp_connect = 468, /* server_udp_connect */ - YYSYMBOL_server_unblock_lan_zones = 469, /* server_unblock_lan_zones */ - YYSYMBOL_server_insecure_lan_zones = 470, /* server_insecure_lan_zones */ - YYSYMBOL_server_rrset_cache_size = 471, /* server_rrset_cache_size */ - YYSYMBOL_server_rrset_cache_slabs = 472, /* server_rrset_cache_slabs */ - YYSYMBOL_server_infra_host_ttl = 473, /* server_infra_host_ttl */ - YYSYMBOL_server_infra_lame_ttl = 474, /* server_infra_lame_ttl */ - YYSYMBOL_server_infra_cache_numhosts = 475, /* server_infra_cache_numhosts */ - YYSYMBOL_server_infra_cache_lame_size = 476, /* server_infra_cache_lame_size */ - YYSYMBOL_server_infra_cache_slabs = 477, /* server_infra_cache_slabs */ - YYSYMBOL_server_infra_cache_min_rtt = 478, /* server_infra_cache_min_rtt */ - YYSYMBOL_server_infra_cache_max_rtt = 479, /* server_infra_cache_max_rtt */ - YYSYMBOL_server_infra_keep_probing = 480, /* server_infra_keep_probing */ - YYSYMBOL_server_target_fetch_policy = 481, /* server_target_fetch_policy */ - YYSYMBOL_server_harden_short_bufsize = 482, /* server_harden_short_bufsize */ - YYSYMBOL_server_harden_large_queries = 483, /* server_harden_large_queries */ - YYSYMBOL_server_harden_glue = 484, /* server_harden_glue */ - YYSYMBOL_server_harden_dnssec_stripped = 485, /* server_harden_dnssec_stripped */ - YYSYMBOL_server_harden_below_nxdomain = 486, /* server_harden_below_nxdomain */ - YYSYMBOL_server_harden_referral_path = 487, /* server_harden_referral_path */ - YYSYMBOL_server_harden_algo_downgrade = 488, /* server_harden_algo_downgrade */ - YYSYMBOL_server_use_caps_for_id = 489, /* server_use_caps_for_id */ - YYSYMBOL_server_caps_whitelist = 490, /* server_caps_whitelist */ - YYSYMBOL_server_private_address = 491, /* server_private_address */ - YYSYMBOL_server_private_domain = 492, /* server_private_domain */ - YYSYMBOL_server_prefetch = 493, /* server_prefetch */ - YYSYMBOL_server_prefetch_key = 494, /* server_prefetch_key */ - YYSYMBOL_server_deny_any = 495, /* server_deny_any */ - YYSYMBOL_server_unwanted_reply_threshold = 496, /* server_unwanted_reply_threshold */ - YYSYMBOL_server_do_not_query_address = 497, /* server_do_not_query_address */ - YYSYMBOL_server_do_not_query_localhost = 498, /* server_do_not_query_localhost */ - YYSYMBOL_server_access_control = 499, /* server_access_control */ - YYSYMBOL_server_interface_action = 500, /* server_interface_action */ - YYSYMBOL_server_module_conf = 501, /* server_module_conf */ - YYSYMBOL_server_val_override_date = 502, /* server_val_override_date */ - YYSYMBOL_server_val_sig_skew_min = 503, /* server_val_sig_skew_min */ - YYSYMBOL_server_val_sig_skew_max = 504, /* server_val_sig_skew_max */ - YYSYMBOL_server_val_max_restart = 505, /* server_val_max_restart */ - YYSYMBOL_server_cache_max_ttl = 506, /* server_cache_max_ttl */ - YYSYMBOL_server_cache_max_negative_ttl = 507, /* server_cache_max_negative_ttl */ - YYSYMBOL_server_cache_min_ttl = 508, /* server_cache_min_ttl */ - YYSYMBOL_server_bogus_ttl = 509, /* server_bogus_ttl */ - YYSYMBOL_server_val_clean_additional = 510, /* server_val_clean_additional */ - YYSYMBOL_server_val_permissive_mode = 511, /* server_val_permissive_mode */ - YYSYMBOL_server_aggressive_nsec = 512, /* server_aggressive_nsec */ - YYSYMBOL_server_ignore_cd_flag = 513, /* server_ignore_cd_flag */ - YYSYMBOL_server_serve_expired = 514, /* server_serve_expired */ - YYSYMBOL_server_serve_expired_ttl = 515, /* server_serve_expired_ttl */ - YYSYMBOL_server_serve_expired_ttl_reset = 516, /* server_serve_expired_ttl_reset */ - YYSYMBOL_server_serve_expired_reply_ttl = 517, /* server_serve_expired_reply_ttl */ - YYSYMBOL_server_serve_expired_client_timeout = 518, /* server_serve_expired_client_timeout */ - YYSYMBOL_server_ede_serve_expired = 519, /* server_ede_serve_expired */ - YYSYMBOL_server_serve_original_ttl = 520, /* server_serve_original_ttl */ - YYSYMBOL_server_fake_dsa = 521, /* server_fake_dsa */ - YYSYMBOL_server_fake_sha1 = 522, /* server_fake_sha1 */ - YYSYMBOL_server_val_log_level = 523, /* server_val_log_level */ - YYSYMBOL_server_val_nsec3_keysize_iterations = 524, /* server_val_nsec3_keysize_iterations */ - YYSYMBOL_server_zonemd_permissive_mode = 525, /* server_zonemd_permissive_mode */ - YYSYMBOL_server_add_holddown = 526, /* server_add_holddown */ - YYSYMBOL_server_del_holddown = 527, /* server_del_holddown */ - YYSYMBOL_server_keep_missing = 528, /* server_keep_missing */ - YYSYMBOL_server_permit_small_holddown = 529, /* server_permit_small_holddown */ - YYSYMBOL_server_key_cache_size = 530, /* server_key_cache_size */ - YYSYMBOL_server_key_cache_slabs = 531, /* server_key_cache_slabs */ - YYSYMBOL_server_neg_cache_size = 532, /* server_neg_cache_size */ - YYSYMBOL_server_local_zone = 533, /* server_local_zone */ - YYSYMBOL_server_local_data = 534, /* server_local_data */ - YYSYMBOL_server_local_data_ptr = 535, /* server_local_data_ptr */ - YYSYMBOL_server_minimal_responses = 536, /* server_minimal_responses */ - YYSYMBOL_server_rrset_roundrobin = 537, /* server_rrset_roundrobin */ - YYSYMBOL_server_unknown_server_time_limit = 538, /* server_unknown_server_time_limit */ - YYSYMBOL_server_max_udp_size = 539, /* server_max_udp_size */ - YYSYMBOL_server_dns64_prefix = 540, /* server_dns64_prefix */ - YYSYMBOL_server_dns64_synthall = 541, /* server_dns64_synthall */ - YYSYMBOL_server_dns64_ignore_aaaa = 542, /* server_dns64_ignore_aaaa */ - YYSYMBOL_server_define_tag = 543, /* server_define_tag */ - YYSYMBOL_server_local_zone_tag = 544, /* server_local_zone_tag */ - YYSYMBOL_server_access_control_tag = 545, /* server_access_control_tag */ - YYSYMBOL_server_access_control_tag_action = 546, /* server_access_control_tag_action */ - YYSYMBOL_server_access_control_tag_data = 547, /* server_access_control_tag_data */ - YYSYMBOL_server_local_zone_override = 548, /* server_local_zone_override */ - YYSYMBOL_server_access_control_view = 549, /* server_access_control_view */ - YYSYMBOL_server_interface_tag = 550, /* server_interface_tag */ - YYSYMBOL_server_interface_tag_action = 551, /* server_interface_tag_action */ - YYSYMBOL_server_interface_tag_data = 552, /* server_interface_tag_data */ - YYSYMBOL_server_interface_view = 553, /* server_interface_view */ - YYSYMBOL_server_response_ip_tag = 554, /* server_response_ip_tag */ - YYSYMBOL_server_ip_ratelimit = 555, /* server_ip_ratelimit */ - YYSYMBOL_server_ratelimit = 556, /* server_ratelimit */ - YYSYMBOL_server_ip_ratelimit_size = 557, /* server_ip_ratelimit_size */ - YYSYMBOL_server_ratelimit_size = 558, /* server_ratelimit_size */ - YYSYMBOL_server_ip_ratelimit_slabs = 559, /* server_ip_ratelimit_slabs */ - YYSYMBOL_server_ratelimit_slabs = 560, /* server_ratelimit_slabs */ - YYSYMBOL_server_ratelimit_for_domain = 561, /* server_ratelimit_for_domain */ - YYSYMBOL_server_ratelimit_below_domain = 562, /* server_ratelimit_below_domain */ - YYSYMBOL_server_ip_ratelimit_factor = 563, /* server_ip_ratelimit_factor */ - YYSYMBOL_server_ratelimit_factor = 564, /* server_ratelimit_factor */ - YYSYMBOL_server_ip_ratelimit_backoff = 565, /* server_ip_ratelimit_backoff */ - YYSYMBOL_server_ratelimit_backoff = 566, /* server_ratelimit_backoff */ - YYSYMBOL_server_outbound_msg_retry = 567, /* server_outbound_msg_retry */ - YYSYMBOL_server_low_rtt = 568, /* server_low_rtt */ - YYSYMBOL_server_fast_server_num = 569, /* server_fast_server_num */ - YYSYMBOL_server_fast_server_permil = 570, /* server_fast_server_permil */ - YYSYMBOL_server_qname_minimisation = 571, /* server_qname_minimisation */ - YYSYMBOL_server_qname_minimisation_strict = 572, /* server_qname_minimisation_strict */ - YYSYMBOL_server_pad_responses = 573, /* server_pad_responses */ - YYSYMBOL_server_pad_responses_block_size = 574, /* server_pad_responses_block_size */ - YYSYMBOL_server_pad_queries = 575, /* server_pad_queries */ - YYSYMBOL_server_pad_queries_block_size = 576, /* server_pad_queries_block_size */ - YYSYMBOL_server_ipsecmod_enabled = 577, /* server_ipsecmod_enabled */ - YYSYMBOL_server_ipsecmod_ignore_bogus = 578, /* server_ipsecmod_ignore_bogus */ - YYSYMBOL_server_ipsecmod_hook = 579, /* server_ipsecmod_hook */ - YYSYMBOL_server_ipsecmod_max_ttl = 580, /* server_ipsecmod_max_ttl */ - YYSYMBOL_server_ipsecmod_whitelist = 581, /* server_ipsecmod_whitelist */ - YYSYMBOL_server_ipsecmod_strict = 582, /* server_ipsecmod_strict */ - YYSYMBOL_server_edns_client_string = 583, /* server_edns_client_string */ - YYSYMBOL_server_edns_client_string_opcode = 584, /* server_edns_client_string_opcode */ - YYSYMBOL_server_ede = 585, /* server_ede */ - YYSYMBOL_stub_name = 586, /* stub_name */ - YYSYMBOL_stub_host = 587, /* stub_host */ - YYSYMBOL_stub_addr = 588, /* stub_addr */ - YYSYMBOL_stub_first = 589, /* stub_first */ - YYSYMBOL_stub_no_cache = 590, /* stub_no_cache */ - YYSYMBOL_stub_ssl_upstream = 591, /* stub_ssl_upstream */ - YYSYMBOL_stub_tcp_upstream = 592, /* stub_tcp_upstream */ - YYSYMBOL_stub_prime = 593, /* stub_prime */ - YYSYMBOL_forward_name = 594, /* forward_name */ - YYSYMBOL_forward_host = 595, /* forward_host */ - YYSYMBOL_forward_addr = 596, /* forward_addr */ - YYSYMBOL_forward_first = 597, /* forward_first */ - YYSYMBOL_forward_no_cache = 598, /* forward_no_cache */ - YYSYMBOL_forward_ssl_upstream = 599, /* forward_ssl_upstream */ - YYSYMBOL_forward_tcp_upstream = 600, /* forward_tcp_upstream */ - YYSYMBOL_auth_name = 601, /* auth_name */ - YYSYMBOL_auth_zonefile = 602, /* auth_zonefile */ - YYSYMBOL_auth_master = 603, /* auth_master */ - YYSYMBOL_auth_url = 604, /* auth_url */ - YYSYMBOL_auth_allow_notify = 605, /* auth_allow_notify */ - YYSYMBOL_auth_zonemd_check = 606, /* auth_zonemd_check */ - YYSYMBOL_auth_zonemd_reject_absence = 607, /* auth_zonemd_reject_absence */ - YYSYMBOL_auth_for_downstream = 608, /* auth_for_downstream */ - YYSYMBOL_auth_for_upstream = 609, /* auth_for_upstream */ - YYSYMBOL_auth_fallback_enabled = 610, /* auth_fallback_enabled */ - YYSYMBOL_view_name = 611, /* view_name */ - YYSYMBOL_view_local_zone = 612, /* view_local_zone */ - YYSYMBOL_view_response_ip = 613, /* view_response_ip */ - YYSYMBOL_view_response_ip_data = 614, /* view_response_ip_data */ - YYSYMBOL_view_local_data = 615, /* view_local_data */ - YYSYMBOL_view_local_data_ptr = 616, /* view_local_data_ptr */ - YYSYMBOL_view_first = 617, /* view_first */ - YYSYMBOL_rcstart = 618, /* rcstart */ - YYSYMBOL_contents_rc = 619, /* contents_rc */ - YYSYMBOL_content_rc = 620, /* content_rc */ - YYSYMBOL_rc_control_enable = 621, /* rc_control_enable */ - YYSYMBOL_rc_control_port = 622, /* rc_control_port */ - YYSYMBOL_rc_control_interface = 623, /* rc_control_interface */ - YYSYMBOL_rc_control_use_cert = 624, /* rc_control_use_cert */ - YYSYMBOL_rc_server_key_file = 625, /* rc_server_key_file */ - YYSYMBOL_rc_server_cert_file = 626, /* rc_server_cert_file */ - YYSYMBOL_rc_control_key_file = 627, /* rc_control_key_file */ - YYSYMBOL_rc_control_cert_file = 628, /* rc_control_cert_file */ - YYSYMBOL_dtstart = 629, /* dtstart */ - YYSYMBOL_contents_dt = 630, /* contents_dt */ - YYSYMBOL_content_dt = 631, /* content_dt */ - YYSYMBOL_dt_dnstap_enable = 632, /* dt_dnstap_enable */ - YYSYMBOL_dt_dnstap_bidirectional = 633, /* dt_dnstap_bidirectional */ - YYSYMBOL_dt_dnstap_socket_path = 634, /* dt_dnstap_socket_path */ - YYSYMBOL_dt_dnstap_ip = 635, /* dt_dnstap_ip */ - YYSYMBOL_dt_dnstap_tls = 636, /* dt_dnstap_tls */ - YYSYMBOL_dt_dnstap_tls_server_name = 637, /* dt_dnstap_tls_server_name */ - YYSYMBOL_dt_dnstap_tls_cert_bundle = 638, /* dt_dnstap_tls_cert_bundle */ - YYSYMBOL_dt_dnstap_tls_client_key_file = 639, /* dt_dnstap_tls_client_key_file */ - YYSYMBOL_dt_dnstap_tls_client_cert_file = 640, /* dt_dnstap_tls_client_cert_file */ - YYSYMBOL_dt_dnstap_send_identity = 641, /* dt_dnstap_send_identity */ - YYSYMBOL_dt_dnstap_send_version = 642, /* dt_dnstap_send_version */ - YYSYMBOL_dt_dnstap_identity = 643, /* dt_dnstap_identity */ - YYSYMBOL_dt_dnstap_version = 644, /* dt_dnstap_version */ - YYSYMBOL_dt_dnstap_log_resolver_query_messages = 645, /* dt_dnstap_log_resolver_query_messages */ - YYSYMBOL_dt_dnstap_log_resolver_response_messages = 646, /* dt_dnstap_log_resolver_response_messages */ - YYSYMBOL_dt_dnstap_log_client_query_messages = 647, /* dt_dnstap_log_client_query_messages */ - YYSYMBOL_dt_dnstap_log_client_response_messages = 648, /* dt_dnstap_log_client_response_messages */ - YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 649, /* dt_dnstap_log_forwarder_query_messages */ - YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 650, /* dt_dnstap_log_forwarder_response_messages */ - YYSYMBOL_pythonstart = 651, /* pythonstart */ - YYSYMBOL_contents_py = 652, /* contents_py */ - YYSYMBOL_content_py = 653, /* content_py */ - YYSYMBOL_py_script = 654, /* py_script */ - YYSYMBOL_dynlibstart = 655, /* dynlibstart */ - YYSYMBOL_contents_dl = 656, /* contents_dl */ - YYSYMBOL_content_dl = 657, /* content_dl */ - YYSYMBOL_dl_file = 658, /* dl_file */ - YYSYMBOL_server_disable_dnssec_lame_check = 659, /* server_disable_dnssec_lame_check */ - YYSYMBOL_server_log_identity = 660, /* server_log_identity */ - YYSYMBOL_server_response_ip = 661, /* server_response_ip */ - YYSYMBOL_server_response_ip_data = 662, /* server_response_ip_data */ - YYSYMBOL_dnscstart = 663, /* dnscstart */ - YYSYMBOL_contents_dnsc = 664, /* contents_dnsc */ - YYSYMBOL_content_dnsc = 665, /* content_dnsc */ - YYSYMBOL_dnsc_dnscrypt_enable = 666, /* dnsc_dnscrypt_enable */ - YYSYMBOL_dnsc_dnscrypt_port = 667, /* dnsc_dnscrypt_port */ - YYSYMBOL_dnsc_dnscrypt_provider = 668, /* dnsc_dnscrypt_provider */ - YYSYMBOL_dnsc_dnscrypt_provider_cert = 669, /* dnsc_dnscrypt_provider_cert */ - YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 670, /* dnsc_dnscrypt_provider_cert_rotated */ - YYSYMBOL_dnsc_dnscrypt_secret_key = 671, /* dnsc_dnscrypt_secret_key */ - YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 672, /* dnsc_dnscrypt_shared_secret_cache_size */ - YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 673, /* dnsc_dnscrypt_shared_secret_cache_slabs */ - YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 674, /* dnsc_dnscrypt_nonce_cache_size */ - YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 675, /* dnsc_dnscrypt_nonce_cache_slabs */ - YYSYMBOL_cachedbstart = 676, /* cachedbstart */ - YYSYMBOL_contents_cachedb = 677, /* contents_cachedb */ - YYSYMBOL_content_cachedb = 678, /* content_cachedb */ - YYSYMBOL_cachedb_backend_name = 679, /* cachedb_backend_name */ - YYSYMBOL_cachedb_secret_seed = 680, /* cachedb_secret_seed */ - YYSYMBOL_redis_server_host = 681, /* redis_server_host */ - YYSYMBOL_redis_server_port = 682, /* redis_server_port */ - YYSYMBOL_redis_timeout = 683, /* redis_timeout */ - YYSYMBOL_redis_expire_records = 684, /* redis_expire_records */ - YYSYMBOL_server_tcp_connection_limit = 685, /* server_tcp_connection_limit */ - YYSYMBOL_ipsetstart = 686, /* ipsetstart */ - YYSYMBOL_contents_ipset = 687, /* contents_ipset */ - YYSYMBOL_content_ipset = 688, /* content_ipset */ - YYSYMBOL_ipset_name_v4 = 689, /* ipset_name_v4 */ - YYSYMBOL_ipset_name_v6 = 690 /* ipset_name_v6 */ + YYSYMBOL_VAR_ANSWER_COOKIE = 297, /* VAR_ANSWER_COOKIE */ + YYSYMBOL_VAR_COOKIE_SECRET = 298, /* VAR_COOKIE_SECRET */ + YYSYMBOL_VAR_FORWARD_NO_CACHE = 299, /* VAR_FORWARD_NO_CACHE */ + YYSYMBOL_VAR_STUB_NO_CACHE = 300, /* VAR_STUB_NO_CACHE */ + YYSYMBOL_VAR_LOG_SERVFAIL = 301, /* VAR_LOG_SERVFAIL */ + YYSYMBOL_VAR_DENY_ANY = 302, /* VAR_DENY_ANY */ + YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 303, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ + YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 304, /* VAR_LOG_TAG_QUERYREPLY */ + YYSYMBOL_VAR_STREAM_WAIT_SIZE = 305, /* VAR_STREAM_WAIT_SIZE */ + YYSYMBOL_VAR_TLS_CIPHERS = 306, /* VAR_TLS_CIPHERS */ + YYSYMBOL_VAR_TLS_CIPHERSUITES = 307, /* VAR_TLS_CIPHERSUITES */ + YYSYMBOL_VAR_TLS_USE_SNI = 308, /* VAR_TLS_USE_SNI */ + YYSYMBOL_VAR_IPSET = 309, /* VAR_IPSET */ + YYSYMBOL_VAR_IPSET_NAME_V4 = 310, /* VAR_IPSET_NAME_V4 */ + YYSYMBOL_VAR_IPSET_NAME_V6 = 311, /* VAR_IPSET_NAME_V6 */ + YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 312, /* VAR_TLS_SESSION_TICKET_KEYS */ + YYSYMBOL_VAR_RPZ = 313, /* VAR_RPZ */ + YYSYMBOL_VAR_TAGS = 314, /* VAR_TAGS */ + YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 315, /* VAR_RPZ_ACTION_OVERRIDE */ + YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 316, /* VAR_RPZ_CNAME_OVERRIDE */ + YYSYMBOL_VAR_RPZ_LOG = 317, /* VAR_RPZ_LOG */ + YYSYMBOL_VAR_RPZ_LOG_NAME = 318, /* VAR_RPZ_LOG_NAME */ + YYSYMBOL_VAR_DYNLIB = 319, /* VAR_DYNLIB */ + YYSYMBOL_VAR_DYNLIB_FILE = 320, /* VAR_DYNLIB_FILE */ + YYSYMBOL_VAR_EDNS_CLIENT_STRING = 321, /* VAR_EDNS_CLIENT_STRING */ + YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 322, /* VAR_EDNS_CLIENT_STRING_OPCODE */ + YYSYMBOL_VAR_NSID = 323, /* VAR_NSID */ + YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 324, /* VAR_ZONEMD_PERMISSIVE_MODE */ + YYSYMBOL_VAR_ZONEMD_CHECK = 325, /* VAR_ZONEMD_CHECK */ + YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 326, /* VAR_ZONEMD_REJECT_ABSENCE */ + YYSYMBOL_VAR_RPZ_SIGNAL_NXDOMAIN_RA = 327, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */ + YYSYMBOL_VAR_INTERFACE_AUTOMATIC_PORTS = 328, /* VAR_INTERFACE_AUTOMATIC_PORTS */ + YYSYMBOL_VAR_EDE = 329, /* VAR_EDE */ + YYSYMBOL_VAR_INTERFACE_ACTION = 330, /* VAR_INTERFACE_ACTION */ + YYSYMBOL_VAR_INTERFACE_VIEW = 331, /* VAR_INTERFACE_VIEW */ + YYSYMBOL_VAR_INTERFACE_TAG = 332, /* VAR_INTERFACE_TAG */ + YYSYMBOL_VAR_INTERFACE_TAG_ACTION = 333, /* VAR_INTERFACE_TAG_ACTION */ + YYSYMBOL_VAR_INTERFACE_TAG_DATA = 334, /* VAR_INTERFACE_TAG_DATA */ + YYSYMBOL_YYACCEPT = 335, /* $accept */ + YYSYMBOL_toplevelvars = 336, /* toplevelvars */ + YYSYMBOL_toplevelvar = 337, /* toplevelvar */ + YYSYMBOL_force_toplevel = 338, /* force_toplevel */ + YYSYMBOL_serverstart = 339, /* serverstart */ + YYSYMBOL_contents_server = 340, /* contents_server */ + YYSYMBOL_content_server = 341, /* content_server */ + YYSYMBOL_stubstart = 342, /* stubstart */ + YYSYMBOL_contents_stub = 343, /* contents_stub */ + YYSYMBOL_content_stub = 344, /* content_stub */ + YYSYMBOL_forwardstart = 345, /* forwardstart */ + YYSYMBOL_contents_forward = 346, /* contents_forward */ + YYSYMBOL_content_forward = 347, /* content_forward */ + YYSYMBOL_viewstart = 348, /* viewstart */ + YYSYMBOL_contents_view = 349, /* contents_view */ + YYSYMBOL_content_view = 350, /* content_view */ + YYSYMBOL_authstart = 351, /* authstart */ + YYSYMBOL_contents_auth = 352, /* contents_auth */ + YYSYMBOL_content_auth = 353, /* content_auth */ + YYSYMBOL_rpz_tag = 354, /* rpz_tag */ + YYSYMBOL_rpz_action_override = 355, /* rpz_action_override */ + YYSYMBOL_rpz_cname_override = 356, /* rpz_cname_override */ + YYSYMBOL_rpz_log = 357, /* rpz_log */ + YYSYMBOL_rpz_log_name = 358, /* rpz_log_name */ + YYSYMBOL_rpz_signal_nxdomain_ra = 359, /* rpz_signal_nxdomain_ra */ + YYSYMBOL_rpzstart = 360, /* rpzstart */ + YYSYMBOL_contents_rpz = 361, /* contents_rpz */ + YYSYMBOL_content_rpz = 362, /* content_rpz */ + YYSYMBOL_server_num_threads = 363, /* server_num_threads */ + YYSYMBOL_server_verbosity = 364, /* server_verbosity */ + YYSYMBOL_server_statistics_interval = 365, /* server_statistics_interval */ + YYSYMBOL_server_statistics_cumulative = 366, /* server_statistics_cumulative */ + YYSYMBOL_server_extended_statistics = 367, /* server_extended_statistics */ + YYSYMBOL_server_shm_enable = 368, /* server_shm_enable */ + YYSYMBOL_server_shm_key = 369, /* server_shm_key */ + YYSYMBOL_server_port = 370, /* server_port */ + YYSYMBOL_server_send_client_subnet = 371, /* server_send_client_subnet */ + YYSYMBOL_server_client_subnet_zone = 372, /* server_client_subnet_zone */ + YYSYMBOL_server_client_subnet_always_forward = 373, /* server_client_subnet_always_forward */ + YYSYMBOL_server_client_subnet_opcode = 374, /* server_client_subnet_opcode */ + YYSYMBOL_server_max_client_subnet_ipv4 = 375, /* server_max_client_subnet_ipv4 */ + YYSYMBOL_server_max_client_subnet_ipv6 = 376, /* server_max_client_subnet_ipv6 */ + YYSYMBOL_server_min_client_subnet_ipv4 = 377, /* server_min_client_subnet_ipv4 */ + YYSYMBOL_server_min_client_subnet_ipv6 = 378, /* server_min_client_subnet_ipv6 */ + YYSYMBOL_server_max_ecs_tree_size_ipv4 = 379, /* server_max_ecs_tree_size_ipv4 */ + YYSYMBOL_server_max_ecs_tree_size_ipv6 = 380, /* server_max_ecs_tree_size_ipv6 */ + YYSYMBOL_server_interface = 381, /* server_interface */ + YYSYMBOL_server_outgoing_interface = 382, /* server_outgoing_interface */ + YYSYMBOL_server_outgoing_range = 383, /* server_outgoing_range */ + YYSYMBOL_server_outgoing_port_permit = 384, /* server_outgoing_port_permit */ + YYSYMBOL_server_outgoing_port_avoid = 385, /* server_outgoing_port_avoid */ + YYSYMBOL_server_outgoing_num_tcp = 386, /* server_outgoing_num_tcp */ + YYSYMBOL_server_incoming_num_tcp = 387, /* server_incoming_num_tcp */ + YYSYMBOL_server_interface_automatic = 388, /* server_interface_automatic */ + YYSYMBOL_server_interface_automatic_ports = 389, /* server_interface_automatic_ports */ + YYSYMBOL_server_do_ip4 = 390, /* server_do_ip4 */ + YYSYMBOL_server_do_ip6 = 391, /* server_do_ip6 */ + YYSYMBOL_server_do_udp = 392, /* server_do_udp */ + YYSYMBOL_server_do_tcp = 393, /* server_do_tcp */ + YYSYMBOL_server_prefer_ip4 = 394, /* server_prefer_ip4 */ + YYSYMBOL_server_prefer_ip6 = 395, /* server_prefer_ip6 */ + YYSYMBOL_server_tcp_mss = 396, /* server_tcp_mss */ + YYSYMBOL_server_outgoing_tcp_mss = 397, /* server_outgoing_tcp_mss */ + YYSYMBOL_server_tcp_idle_timeout = 398, /* server_tcp_idle_timeout */ + YYSYMBOL_server_max_reuse_tcp_queries = 399, /* server_max_reuse_tcp_queries */ + YYSYMBOL_server_tcp_reuse_timeout = 400, /* server_tcp_reuse_timeout */ + YYSYMBOL_server_tcp_auth_query_timeout = 401, /* server_tcp_auth_query_timeout */ + YYSYMBOL_server_tcp_keepalive = 402, /* server_tcp_keepalive */ + YYSYMBOL_server_tcp_keepalive_timeout = 403, /* server_tcp_keepalive_timeout */ + YYSYMBOL_server_tcp_upstream = 404, /* server_tcp_upstream */ + YYSYMBOL_server_udp_upstream_without_downstream = 405, /* server_udp_upstream_without_downstream */ + YYSYMBOL_server_ssl_upstream = 406, /* server_ssl_upstream */ + YYSYMBOL_server_ssl_service_key = 407, /* server_ssl_service_key */ + YYSYMBOL_server_ssl_service_pem = 408, /* server_ssl_service_pem */ + YYSYMBOL_server_ssl_port = 409, /* server_ssl_port */ + YYSYMBOL_server_tls_cert_bundle = 410, /* server_tls_cert_bundle */ + YYSYMBOL_server_tls_win_cert = 411, /* server_tls_win_cert */ + YYSYMBOL_server_tls_additional_port = 412, /* server_tls_additional_port */ + YYSYMBOL_server_tls_ciphers = 413, /* server_tls_ciphers */ + YYSYMBOL_server_tls_ciphersuites = 414, /* server_tls_ciphersuites */ + YYSYMBOL_server_tls_session_ticket_keys = 415, /* server_tls_session_ticket_keys */ + YYSYMBOL_server_tls_use_sni = 416, /* server_tls_use_sni */ + YYSYMBOL_server_https_port = 417, /* server_https_port */ + YYSYMBOL_server_http_endpoint = 418, /* server_http_endpoint */ + YYSYMBOL_server_http_max_streams = 419, /* server_http_max_streams */ + YYSYMBOL_server_http_query_buffer_size = 420, /* server_http_query_buffer_size */ + YYSYMBOL_server_http_response_buffer_size = 421, /* server_http_response_buffer_size */ + YYSYMBOL_server_http_nodelay = 422, /* server_http_nodelay */ + YYSYMBOL_server_http_notls_downstream = 423, /* server_http_notls_downstream */ + YYSYMBOL_server_use_systemd = 424, /* server_use_systemd */ + YYSYMBOL_server_do_daemonize = 425, /* server_do_daemonize */ + YYSYMBOL_server_use_syslog = 426, /* server_use_syslog */ + YYSYMBOL_server_log_time_ascii = 427, /* server_log_time_ascii */ + YYSYMBOL_server_log_queries = 428, /* server_log_queries */ + YYSYMBOL_server_log_replies = 429, /* server_log_replies */ + YYSYMBOL_server_log_tag_queryreply = 430, /* server_log_tag_queryreply */ + YYSYMBOL_server_log_servfail = 431, /* server_log_servfail */ + YYSYMBOL_server_log_local_actions = 432, /* server_log_local_actions */ + YYSYMBOL_server_chroot = 433, /* server_chroot */ + YYSYMBOL_server_username = 434, /* server_username */ + YYSYMBOL_server_directory = 435, /* server_directory */ + YYSYMBOL_server_logfile = 436, /* server_logfile */ + YYSYMBOL_server_pidfile = 437, /* server_pidfile */ + YYSYMBOL_server_root_hints = 438, /* server_root_hints */ + YYSYMBOL_server_dlv_anchor_file = 439, /* server_dlv_anchor_file */ + YYSYMBOL_server_dlv_anchor = 440, /* server_dlv_anchor */ + YYSYMBOL_server_auto_trust_anchor_file = 441, /* server_auto_trust_anchor_file */ + YYSYMBOL_server_trust_anchor_file = 442, /* server_trust_anchor_file */ + YYSYMBOL_server_trusted_keys_file = 443, /* server_trusted_keys_file */ + YYSYMBOL_server_trust_anchor = 444, /* server_trust_anchor */ + YYSYMBOL_server_trust_anchor_signaling = 445, /* server_trust_anchor_signaling */ + YYSYMBOL_server_root_key_sentinel = 446, /* server_root_key_sentinel */ + YYSYMBOL_server_domain_insecure = 447, /* server_domain_insecure */ + YYSYMBOL_server_hide_identity = 448, /* server_hide_identity */ + YYSYMBOL_server_hide_version = 449, /* server_hide_version */ + YYSYMBOL_server_hide_trustanchor = 450, /* server_hide_trustanchor */ + YYSYMBOL_server_hide_http_user_agent = 451, /* server_hide_http_user_agent */ + YYSYMBOL_server_identity = 452, /* server_identity */ + YYSYMBOL_server_version = 453, /* server_version */ + YYSYMBOL_server_http_user_agent = 454, /* server_http_user_agent */ + YYSYMBOL_server_nsid = 455, /* server_nsid */ + YYSYMBOL_server_so_rcvbuf = 456, /* server_so_rcvbuf */ + YYSYMBOL_server_so_sndbuf = 457, /* server_so_sndbuf */ + YYSYMBOL_server_so_reuseport = 458, /* server_so_reuseport */ + YYSYMBOL_server_ip_transparent = 459, /* server_ip_transparent */ + YYSYMBOL_server_ip_freebind = 460, /* server_ip_freebind */ + YYSYMBOL_server_ip_dscp = 461, /* server_ip_dscp */ + YYSYMBOL_server_stream_wait_size = 462, /* server_stream_wait_size */ + YYSYMBOL_server_edns_buffer_size = 463, /* server_edns_buffer_size */ + YYSYMBOL_server_msg_buffer_size = 464, /* server_msg_buffer_size */ + YYSYMBOL_server_msg_cache_size = 465, /* server_msg_cache_size */ + YYSYMBOL_server_msg_cache_slabs = 466, /* server_msg_cache_slabs */ + YYSYMBOL_server_num_queries_per_thread = 467, /* server_num_queries_per_thread */ + YYSYMBOL_server_jostle_timeout = 468, /* server_jostle_timeout */ + YYSYMBOL_server_delay_close = 469, /* server_delay_close */ + YYSYMBOL_server_udp_connect = 470, /* server_udp_connect */ + YYSYMBOL_server_unblock_lan_zones = 471, /* server_unblock_lan_zones */ + YYSYMBOL_server_insecure_lan_zones = 472, /* server_insecure_lan_zones */ + YYSYMBOL_server_rrset_cache_size = 473, /* server_rrset_cache_size */ + YYSYMBOL_server_rrset_cache_slabs = 474, /* server_rrset_cache_slabs */ + YYSYMBOL_server_infra_host_ttl = 475, /* server_infra_host_ttl */ + YYSYMBOL_server_infra_lame_ttl = 476, /* server_infra_lame_ttl */ + YYSYMBOL_server_infra_cache_numhosts = 477, /* server_infra_cache_numhosts */ + YYSYMBOL_server_infra_cache_lame_size = 478, /* server_infra_cache_lame_size */ + YYSYMBOL_server_infra_cache_slabs = 479, /* server_infra_cache_slabs */ + YYSYMBOL_server_infra_cache_min_rtt = 480, /* server_infra_cache_min_rtt */ + YYSYMBOL_server_infra_cache_max_rtt = 481, /* server_infra_cache_max_rtt */ + YYSYMBOL_server_infra_keep_probing = 482, /* server_infra_keep_probing */ + YYSYMBOL_server_target_fetch_policy = 483, /* server_target_fetch_policy */ + YYSYMBOL_server_harden_short_bufsize = 484, /* server_harden_short_bufsize */ + YYSYMBOL_server_harden_large_queries = 485, /* server_harden_large_queries */ + YYSYMBOL_server_harden_glue = 486, /* server_harden_glue */ + YYSYMBOL_server_harden_dnssec_stripped = 487, /* server_harden_dnssec_stripped */ + YYSYMBOL_server_harden_below_nxdomain = 488, /* server_harden_below_nxdomain */ + YYSYMBOL_server_harden_referral_path = 489, /* server_harden_referral_path */ + YYSYMBOL_server_harden_algo_downgrade = 490, /* server_harden_algo_downgrade */ + YYSYMBOL_server_use_caps_for_id = 491, /* server_use_caps_for_id */ + YYSYMBOL_server_caps_whitelist = 492, /* server_caps_whitelist */ + YYSYMBOL_server_private_address = 493, /* server_private_address */ + YYSYMBOL_server_private_domain = 494, /* server_private_domain */ + YYSYMBOL_server_prefetch = 495, /* server_prefetch */ + YYSYMBOL_server_prefetch_key = 496, /* server_prefetch_key */ + YYSYMBOL_server_deny_any = 497, /* server_deny_any */ + YYSYMBOL_server_unwanted_reply_threshold = 498, /* server_unwanted_reply_threshold */ + YYSYMBOL_server_do_not_query_address = 499, /* server_do_not_query_address */ + YYSYMBOL_server_do_not_query_localhost = 500, /* server_do_not_query_localhost */ + YYSYMBOL_server_access_control = 501, /* server_access_control */ + YYSYMBOL_server_interface_action = 502, /* server_interface_action */ + YYSYMBOL_server_module_conf = 503, /* server_module_conf */ + YYSYMBOL_server_val_override_date = 504, /* server_val_override_date */ + YYSYMBOL_server_val_sig_skew_min = 505, /* server_val_sig_skew_min */ + YYSYMBOL_server_val_sig_skew_max = 506, /* server_val_sig_skew_max */ + YYSYMBOL_server_val_max_restart = 507, /* server_val_max_restart */ + YYSYMBOL_server_cache_max_ttl = 508, /* server_cache_max_ttl */ + YYSYMBOL_server_cache_max_negative_ttl = 509, /* server_cache_max_negative_ttl */ + YYSYMBOL_server_cache_min_ttl = 510, /* server_cache_min_ttl */ + YYSYMBOL_server_bogus_ttl = 511, /* server_bogus_ttl */ + YYSYMBOL_server_val_clean_additional = 512, /* server_val_clean_additional */ + YYSYMBOL_server_val_permissive_mode = 513, /* server_val_permissive_mode */ + YYSYMBOL_server_aggressive_nsec = 514, /* server_aggressive_nsec */ + YYSYMBOL_server_ignore_cd_flag = 515, /* server_ignore_cd_flag */ + YYSYMBOL_server_serve_expired = 516, /* server_serve_expired */ + YYSYMBOL_server_serve_expired_ttl = 517, /* server_serve_expired_ttl */ + YYSYMBOL_server_serve_expired_ttl_reset = 518, /* server_serve_expired_ttl_reset */ + YYSYMBOL_server_serve_expired_reply_ttl = 519, /* server_serve_expired_reply_ttl */ + YYSYMBOL_server_serve_expired_client_timeout = 520, /* server_serve_expired_client_timeout */ + YYSYMBOL_server_ede_serve_expired = 521, /* server_ede_serve_expired */ + YYSYMBOL_server_serve_original_ttl = 522, /* server_serve_original_ttl */ + YYSYMBOL_server_fake_dsa = 523, /* server_fake_dsa */ + YYSYMBOL_server_fake_sha1 = 524, /* server_fake_sha1 */ + YYSYMBOL_server_val_log_level = 525, /* server_val_log_level */ + YYSYMBOL_server_val_nsec3_keysize_iterations = 526, /* server_val_nsec3_keysize_iterations */ + YYSYMBOL_server_zonemd_permissive_mode = 527, /* server_zonemd_permissive_mode */ + YYSYMBOL_server_add_holddown = 528, /* server_add_holddown */ + YYSYMBOL_server_del_holddown = 529, /* server_del_holddown */ + YYSYMBOL_server_keep_missing = 530, /* server_keep_missing */ + YYSYMBOL_server_permit_small_holddown = 531, /* server_permit_small_holddown */ + YYSYMBOL_server_key_cache_size = 532, /* server_key_cache_size */ + YYSYMBOL_server_key_cache_slabs = 533, /* server_key_cache_slabs */ + YYSYMBOL_server_neg_cache_size = 534, /* server_neg_cache_size */ + YYSYMBOL_server_local_zone = 535, /* server_local_zone */ + YYSYMBOL_server_local_data = 536, /* server_local_data */ + YYSYMBOL_server_local_data_ptr = 537, /* server_local_data_ptr */ + YYSYMBOL_server_minimal_responses = 538, /* server_minimal_responses */ + YYSYMBOL_server_rrset_roundrobin = 539, /* server_rrset_roundrobin */ + YYSYMBOL_server_unknown_server_time_limit = 540, /* server_unknown_server_time_limit */ + YYSYMBOL_server_max_udp_size = 541, /* server_max_udp_size */ + YYSYMBOL_server_dns64_prefix = 542, /* server_dns64_prefix */ + YYSYMBOL_server_dns64_synthall = 543, /* server_dns64_synthall */ + YYSYMBOL_server_dns64_ignore_aaaa = 544, /* server_dns64_ignore_aaaa */ + YYSYMBOL_server_define_tag = 545, /* server_define_tag */ + YYSYMBOL_server_local_zone_tag = 546, /* server_local_zone_tag */ + YYSYMBOL_server_access_control_tag = 547, /* server_access_control_tag */ + YYSYMBOL_server_access_control_tag_action = 548, /* server_access_control_tag_action */ + YYSYMBOL_server_access_control_tag_data = 549, /* server_access_control_tag_data */ + YYSYMBOL_server_local_zone_override = 550, /* server_local_zone_override */ + YYSYMBOL_server_access_control_view = 551, /* server_access_control_view */ + YYSYMBOL_server_interface_tag = 552, /* server_interface_tag */ + YYSYMBOL_server_interface_tag_action = 553, /* server_interface_tag_action */ + YYSYMBOL_server_interface_tag_data = 554, /* server_interface_tag_data */ + YYSYMBOL_server_interface_view = 555, /* server_interface_view */ + YYSYMBOL_server_response_ip_tag = 556, /* server_response_ip_tag */ + YYSYMBOL_server_ip_ratelimit = 557, /* server_ip_ratelimit */ + YYSYMBOL_server_ratelimit = 558, /* server_ratelimit */ + YYSYMBOL_server_ip_ratelimit_size = 559, /* server_ip_ratelimit_size */ + YYSYMBOL_server_ratelimit_size = 560, /* server_ratelimit_size */ + YYSYMBOL_server_ip_ratelimit_slabs = 561, /* server_ip_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_slabs = 562, /* server_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_for_domain = 563, /* server_ratelimit_for_domain */ + YYSYMBOL_server_ratelimit_below_domain = 564, /* server_ratelimit_below_domain */ + YYSYMBOL_server_ip_ratelimit_factor = 565, /* server_ip_ratelimit_factor */ + YYSYMBOL_server_ratelimit_factor = 566, /* server_ratelimit_factor */ + YYSYMBOL_server_ip_ratelimit_backoff = 567, /* server_ip_ratelimit_backoff */ + YYSYMBOL_server_ratelimit_backoff = 568, /* server_ratelimit_backoff */ + YYSYMBOL_server_outbound_msg_retry = 569, /* server_outbound_msg_retry */ + YYSYMBOL_server_low_rtt = 570, /* server_low_rtt */ + YYSYMBOL_server_fast_server_num = 571, /* server_fast_server_num */ + YYSYMBOL_server_fast_server_permil = 572, /* server_fast_server_permil */ + YYSYMBOL_server_qname_minimisation = 573, /* server_qname_minimisation */ + YYSYMBOL_server_qname_minimisation_strict = 574, /* server_qname_minimisation_strict */ + YYSYMBOL_server_pad_responses = 575, /* server_pad_responses */ + YYSYMBOL_server_pad_responses_block_size = 576, /* server_pad_responses_block_size */ + YYSYMBOL_server_pad_queries = 577, /* server_pad_queries */ + YYSYMBOL_server_pad_queries_block_size = 578, /* server_pad_queries_block_size */ + YYSYMBOL_server_ipsecmod_enabled = 579, /* server_ipsecmod_enabled */ + YYSYMBOL_server_ipsecmod_ignore_bogus = 580, /* server_ipsecmod_ignore_bogus */ + YYSYMBOL_server_ipsecmod_hook = 581, /* server_ipsecmod_hook */ + YYSYMBOL_server_ipsecmod_max_ttl = 582, /* server_ipsecmod_max_ttl */ + YYSYMBOL_server_ipsecmod_whitelist = 583, /* server_ipsecmod_whitelist */ + YYSYMBOL_server_ipsecmod_strict = 584, /* server_ipsecmod_strict */ + YYSYMBOL_server_edns_client_string = 585, /* server_edns_client_string */ + YYSYMBOL_server_edns_client_string_opcode = 586, /* server_edns_client_string_opcode */ + YYSYMBOL_server_ede = 587, /* server_ede */ + YYSYMBOL_stub_name = 588, /* stub_name */ + YYSYMBOL_stub_host = 589, /* stub_host */ + YYSYMBOL_stub_addr = 590, /* stub_addr */ + YYSYMBOL_stub_first = 591, /* stub_first */ + YYSYMBOL_stub_no_cache = 592, /* stub_no_cache */ + YYSYMBOL_stub_ssl_upstream = 593, /* stub_ssl_upstream */ + YYSYMBOL_stub_tcp_upstream = 594, /* stub_tcp_upstream */ + YYSYMBOL_stub_prime = 595, /* stub_prime */ + YYSYMBOL_forward_name = 596, /* forward_name */ + YYSYMBOL_forward_host = 597, /* forward_host */ + YYSYMBOL_forward_addr = 598, /* forward_addr */ + YYSYMBOL_forward_first = 599, /* forward_first */ + YYSYMBOL_forward_no_cache = 600, /* forward_no_cache */ + YYSYMBOL_forward_ssl_upstream = 601, /* forward_ssl_upstream */ + YYSYMBOL_forward_tcp_upstream = 602, /* forward_tcp_upstream */ + YYSYMBOL_auth_name = 603, /* auth_name */ + YYSYMBOL_auth_zonefile = 604, /* auth_zonefile */ + YYSYMBOL_auth_master = 605, /* auth_master */ + YYSYMBOL_auth_url = 606, /* auth_url */ + YYSYMBOL_auth_allow_notify = 607, /* auth_allow_notify */ + YYSYMBOL_auth_zonemd_check = 608, /* auth_zonemd_check */ + YYSYMBOL_auth_zonemd_reject_absence = 609, /* auth_zonemd_reject_absence */ + YYSYMBOL_auth_for_downstream = 610, /* auth_for_downstream */ + YYSYMBOL_auth_for_upstream = 611, /* auth_for_upstream */ + YYSYMBOL_auth_fallback_enabled = 612, /* auth_fallback_enabled */ + YYSYMBOL_view_name = 613, /* view_name */ + YYSYMBOL_view_local_zone = 614, /* view_local_zone */ + YYSYMBOL_view_response_ip = 615, /* view_response_ip */ + YYSYMBOL_view_response_ip_data = 616, /* view_response_ip_data */ + YYSYMBOL_view_local_data = 617, /* view_local_data */ + YYSYMBOL_view_local_data_ptr = 618, /* view_local_data_ptr */ + YYSYMBOL_view_first = 619, /* view_first */ + YYSYMBOL_rcstart = 620, /* rcstart */ + YYSYMBOL_contents_rc = 621, /* contents_rc */ + YYSYMBOL_content_rc = 622, /* content_rc */ + YYSYMBOL_rc_control_enable = 623, /* rc_control_enable */ + YYSYMBOL_rc_control_port = 624, /* rc_control_port */ + YYSYMBOL_rc_control_interface = 625, /* rc_control_interface */ + YYSYMBOL_rc_control_use_cert = 626, /* rc_control_use_cert */ + YYSYMBOL_rc_server_key_file = 627, /* rc_server_key_file */ + YYSYMBOL_rc_server_cert_file = 628, /* rc_server_cert_file */ + YYSYMBOL_rc_control_key_file = 629, /* rc_control_key_file */ + YYSYMBOL_rc_control_cert_file = 630, /* rc_control_cert_file */ + YYSYMBOL_dtstart = 631, /* dtstart */ + YYSYMBOL_contents_dt = 632, /* contents_dt */ + YYSYMBOL_content_dt = 633, /* content_dt */ + YYSYMBOL_dt_dnstap_enable = 634, /* dt_dnstap_enable */ + YYSYMBOL_dt_dnstap_bidirectional = 635, /* dt_dnstap_bidirectional */ + YYSYMBOL_dt_dnstap_socket_path = 636, /* dt_dnstap_socket_path */ + YYSYMBOL_dt_dnstap_ip = 637, /* dt_dnstap_ip */ + YYSYMBOL_dt_dnstap_tls = 638, /* dt_dnstap_tls */ + YYSYMBOL_dt_dnstap_tls_server_name = 639, /* dt_dnstap_tls_server_name */ + YYSYMBOL_dt_dnstap_tls_cert_bundle = 640, /* dt_dnstap_tls_cert_bundle */ + YYSYMBOL_dt_dnstap_tls_client_key_file = 641, /* dt_dnstap_tls_client_key_file */ + YYSYMBOL_dt_dnstap_tls_client_cert_file = 642, /* dt_dnstap_tls_client_cert_file */ + YYSYMBOL_dt_dnstap_send_identity = 643, /* dt_dnstap_send_identity */ + YYSYMBOL_dt_dnstap_send_version = 644, /* dt_dnstap_send_version */ + YYSYMBOL_dt_dnstap_identity = 645, /* dt_dnstap_identity */ + YYSYMBOL_dt_dnstap_version = 646, /* dt_dnstap_version */ + YYSYMBOL_dt_dnstap_log_resolver_query_messages = 647, /* dt_dnstap_log_resolver_query_messages */ + YYSYMBOL_dt_dnstap_log_resolver_response_messages = 648, /* dt_dnstap_log_resolver_response_messages */ + YYSYMBOL_dt_dnstap_log_client_query_messages = 649, /* dt_dnstap_log_client_query_messages */ + YYSYMBOL_dt_dnstap_log_client_response_messages = 650, /* dt_dnstap_log_client_response_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 651, /* dt_dnstap_log_forwarder_query_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 652, /* dt_dnstap_log_forwarder_response_messages */ + YYSYMBOL_pythonstart = 653, /* pythonstart */ + YYSYMBOL_contents_py = 654, /* contents_py */ + YYSYMBOL_content_py = 655, /* content_py */ + YYSYMBOL_py_script = 656, /* py_script */ + YYSYMBOL_dynlibstart = 657, /* dynlibstart */ + YYSYMBOL_contents_dl = 658, /* contents_dl */ + YYSYMBOL_content_dl = 659, /* content_dl */ + YYSYMBOL_dl_file = 660, /* dl_file */ + YYSYMBOL_server_disable_dnssec_lame_check = 661, /* server_disable_dnssec_lame_check */ + YYSYMBOL_server_log_identity = 662, /* server_log_identity */ + YYSYMBOL_server_response_ip = 663, /* server_response_ip */ + YYSYMBOL_server_response_ip_data = 664, /* server_response_ip_data */ + YYSYMBOL_dnscstart = 665, /* dnscstart */ + YYSYMBOL_contents_dnsc = 666, /* contents_dnsc */ + YYSYMBOL_content_dnsc = 667, /* content_dnsc */ + YYSYMBOL_dnsc_dnscrypt_enable = 668, /* dnsc_dnscrypt_enable */ + YYSYMBOL_dnsc_dnscrypt_port = 669, /* dnsc_dnscrypt_port */ + YYSYMBOL_dnsc_dnscrypt_provider = 670, /* dnsc_dnscrypt_provider */ + YYSYMBOL_dnsc_dnscrypt_provider_cert = 671, /* dnsc_dnscrypt_provider_cert */ + YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 672, /* dnsc_dnscrypt_provider_cert_rotated */ + YYSYMBOL_dnsc_dnscrypt_secret_key = 673, /* dnsc_dnscrypt_secret_key */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 674, /* dnsc_dnscrypt_shared_secret_cache_size */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 675, /* dnsc_dnscrypt_shared_secret_cache_slabs */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 676, /* dnsc_dnscrypt_nonce_cache_size */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 677, /* dnsc_dnscrypt_nonce_cache_slabs */ + YYSYMBOL_cachedbstart = 678, /* cachedbstart */ + YYSYMBOL_contents_cachedb = 679, /* contents_cachedb */ + YYSYMBOL_content_cachedb = 680, /* content_cachedb */ + YYSYMBOL_cachedb_backend_name = 681, /* cachedb_backend_name */ + YYSYMBOL_cachedb_secret_seed = 682, /* cachedb_secret_seed */ + YYSYMBOL_redis_server_host = 683, /* redis_server_host */ + YYSYMBOL_redis_server_port = 684, /* redis_server_port */ + YYSYMBOL_redis_timeout = 685, /* redis_timeout */ + YYSYMBOL_redis_expire_records = 686, /* redis_expire_records */ + YYSYMBOL_server_tcp_connection_limit = 687, /* server_tcp_connection_limit */ + YYSYMBOL_server_answer_cookie = 688, /* server_answer_cookie */ + YYSYMBOL_server_cookie_secret = 689, /* server_cookie_secret */ + YYSYMBOL_ipsetstart = 690, /* ipsetstart */ + YYSYMBOL_contents_ipset = 691, /* contents_ipset */ + YYSYMBOL_content_ipset = 692, /* content_ipset */ + YYSYMBOL_ipset_name_v4 = 693, /* ipset_name_v4 */ + YYSYMBOL_ipset_name_v6 = 694 /* ipset_name_v6 */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -1143,19 +1149,19 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 711 +#define YYLAST 715 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 333 +#define YYNTOKENS 335 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 358 +#define YYNNTS 360 /* YYNRULES -- Number of rules. */ -#define YYNRULES 693 +#define YYNRULES 697 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 1037 +#define YYNSTATES 1043 /* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 587 +#define YYMAXUTOK 589 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -1227,83 +1233,83 @@ static const yytype_int16 yytranslate[] = 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332 + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 198, 198, 198, 199, 199, 200, 200, 201, 201, - 201, 202, 202, 203, 203, 204, 204, 205, 207, 214, - 220, 221, 222, 222, 222, 223, 223, 224, 224, 224, - 225, 225, 226, 226, 226, 227, 227, 228, 228, 228, - 229, 229, 229, 230, 230, 231, 231, 232, 232, 233, - 233, 234, 234, 235, 235, 236, 236, 237, 237, 238, - 238, 238, 239, 239, 240, 240, 240, 241, 241, 241, - 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, - 246, 247, 247, 248, 248, 249, 249, 249, 250, 250, - 251, 251, 252, 252, 253, 253, 253, 254, 254, 255, - 255, 256, 256, 257, 257, 258, 258, 259, 259, 260, - 260, 261, 261, 262, 262, 262, 263, 263, 263, 264, - 264, 264, 265, 265, 265, 265, 266, 267, 267, 267, - 268, 268, 268, 269, 269, 270, 270, 271, 271, 271, - 272, 272, 272, 273, 273, 274, 274, 274, 275, 275, - 275, 276, 276, 276, 277, 277, 278, 278, 279, 279, - 280, 281, 281, 282, 282, 283, 283, 284, 284, 285, - 285, 286, 286, 287, 287, 288, 288, 289, 289, 290, - 290, 291, 291, 291, 292, 292, 293, 293, 294, 294, - 295, 295, 295, 296, 296, 297, 298, 298, 299, 299, - 300, 301, 301, 302, 302, 303, 303, 303, 304, 304, - 305, 305, 305, 306, 306, 306, 307, 307, 308, 309, - 309, 310, 310, 311, 311, 312, 312, 313, 313, 313, - 314, 314, 314, 315, 315, 315, 316, 316, 317, 317, - 318, 318, 319, 319, 320, 320, 321, 321, 322, 322, - 323, 323, 326, 340, 341, 342, 342, 342, 342, 342, - 343, 343, 343, 345, 359, 360, 361, 361, 361, 361, - 362, 362, 362, 364, 380, 381, 382, 382, 382, 382, - 383, 383, 383, 385, 406, 407, 408, 408, 408, 408, - 409, 409, 409, 410, 410, 410, 413, 432, 449, 457, - 467, 474, 484, 503, 504, 505, 505, 505, 505, 505, - 506, 506, 506, 507, 507, 507, 507, 509, 518, 527, - 538, 547, 556, 565, 576, 585, 597, 611, 626, 637, - 654, 671, 688, 705, 720, 735, 748, 763, 772, 781, - 790, 799, 808, 817, 824, 833, 842, 851, 860, 869, - 878, 887, 896, 909, 920, 931, 942, 951, 964, 973, - 982, 991, 998, 1005, 1014, 1021, 1030, 1038, 1045, 1052, - 1060, 1069, 1077, 1093, 1101, 1109, 1117, 1125, 1133, 1142, - 1151, 1165, 1174, 1183, 1192, 1201, 1210, 1219, 1226, 1233, - 1259, 1267, 1274, 1281, 1288, 1295, 1303, 1311, 1319, 1326, - 1337, 1348, 1355, 1364, 1373, 1382, 1391, 1398, 1405, 1412, - 1428, 1436, 1444, 1454, 1464, 1474, 1488, 1496, 1509, 1520, - 1528, 1541, 1550, 1559, 1568, 1577, 1587, 1597, 1605, 1618, - 1627, 1635, 1644, 1652, 1665, 1674, 1683, 1693, 1700, 1710, - 1720, 1730, 1740, 1750, 1760, 1770, 1780, 1787, 1794, 1801, - 1810, 1819, 1828, 1837, 1844, 1854, 1862, 1871, 1878, 1896, - 1909, 1922, 1935, 1944, 1953, 1962, 1971, 1981, 1991, 2002, - 2011, 2020, 2029, 2038, 2047, 2056, 2065, 2074, 2087, 2100, - 2109, 2116, 2125, 2134, 2143, 2152, 2161, 2169, 2182, 2190, - 2245, 2252, 2267, 2277, 2287, 2294, 2301, 2308, 2317, 2325, - 2339, 2360, 2381, 2393, 2405, 2417, 2426, 2447, 2459, 2471, - 2480, 2501, 2510, 2519, 2527, 2535, 2548, 2561, 2576, 2591, - 2600, 2609, 2619, 2629, 2638, 2644, 2653, 2662, 2672, 2682, - 2692, 2701, 2711, 2720, 2733, 2746, 2758, 2772, 2784, 2798, - 2807, 2818, 2827, 2837, 2844, 2851, 2860, 2869, 2879, 2889, - 2899, 2909, 2916, 2923, 2932, 2941, 2951, 2961, 2971, 2978, - 2985, 2992, 3000, 3010, 3020, 3030, 3040, 3050, 3060, 3116, - 3126, 3134, 3142, 3157, 3166, 3172, 3173, 3174, 3174, 3174, - 3175, 3175, 3175, 3176, 3176, 3178, 3188, 3197, 3204, 3211, - 3218, 3225, 3232, 3239, 3245, 3246, 3247, 3247, 3247, 3248, - 3248, 3248, 3249, 3250, 3250, 3251, 3251, 3252, 3252, 3253, - 3254, 3255, 3256, 3257, 3258, 3260, 3269, 3279, 3286, 3293, - 3302, 3309, 3316, 3323, 3330, 3339, 3348, 3355, 3362, 3372, - 3382, 3392, 3402, 3412, 3422, 3428, 3429, 3430, 3432, 3438, - 3444, 3445, 3446, 3448, 3454, 3464, 3471, 3480, 3488, 3494, - 3495, 3497, 3497, 3497, 3498, 3498, 3499, 3500, 3501, 3502, - 3503, 3505, 3515, 3524, 3531, 3540, 3547, 3556, 3564, 3577, - 3585, 3598, 3604, 3605, 3606, 3606, 3607, 3607, 3607, 3608, - 3610, 3622, 3634, 3646, 3661, 3674, 3687, 3698, 3704, 3705, - 3706, 3706, 3708, 3723 + 0, 201, 201, 201, 202, 202, 203, 203, 204, 204, + 204, 205, 205, 206, 206, 207, 207, 208, 210, 217, + 223, 224, 225, 225, 225, 226, 226, 227, 227, 227, + 228, 228, 229, 229, 229, 230, 230, 231, 231, 231, + 232, 232, 232, 233, 233, 234, 234, 235, 235, 236, + 236, 237, 237, 238, 238, 239, 239, 240, 240, 241, + 241, 241, 242, 242, 243, 243, 243, 244, 244, 244, + 245, 245, 246, 246, 247, 247, 248, 248, 249, 249, + 249, 250, 250, 251, 251, 252, 252, 252, 253, 253, + 254, 254, 255, 255, 256, 256, 256, 257, 257, 258, + 258, 259, 259, 260, 260, 261, 261, 262, 262, 263, + 263, 264, 264, 265, 265, 265, 266, 266, 266, 267, + 267, 267, 268, 268, 268, 268, 269, 270, 270, 270, + 271, 271, 271, 272, 272, 273, 273, 274, 274, 274, + 275, 275, 275, 276, 276, 277, 277, 277, 278, 278, + 278, 279, 279, 279, 280, 280, 281, 281, 282, 282, + 283, 284, 284, 285, 285, 286, 286, 287, 287, 288, + 288, 289, 289, 290, 290, 291, 291, 292, 292, 293, + 293, 294, 294, 294, 295, 295, 296, 296, 297, 297, + 298, 298, 298, 299, 299, 300, 301, 301, 302, 302, + 303, 304, 304, 305, 305, 306, 306, 306, 307, 307, + 308, 308, 308, 309, 309, 309, 310, 310, 311, 312, + 312, 313, 313, 314, 314, 315, 315, 316, 316, 316, + 317, 317, 317, 318, 318, 318, 319, 319, 320, 320, + 321, 321, 322, 322, 323, 323, 324, 324, 325, 325, + 326, 326, 327, 327, 330, 344, 345, 346, 346, 346, + 346, 346, 347, 347, 347, 349, 363, 364, 365, 365, + 365, 365, 366, 366, 366, 368, 384, 385, 386, 386, + 386, 386, 387, 387, 387, 389, 410, 411, 412, 412, + 412, 412, 413, 413, 413, 414, 414, 414, 417, 436, + 453, 461, 471, 478, 488, 507, 508, 509, 509, 509, + 509, 509, 510, 510, 510, 511, 511, 511, 511, 513, + 522, 531, 542, 551, 560, 569, 580, 589, 601, 615, + 630, 641, 658, 675, 692, 709, 724, 739, 752, 767, + 776, 785, 794, 803, 812, 821, 828, 837, 846, 855, + 864, 873, 882, 891, 900, 913, 924, 935, 946, 955, + 968, 977, 986, 995, 1002, 1009, 1018, 1025, 1034, 1042, + 1049, 1056, 1064, 1073, 1081, 1097, 1105, 1113, 1121, 1129, + 1137, 1146, 1155, 1169, 1178, 1187, 1196, 1205, 1214, 1223, + 1230, 1237, 1263, 1271, 1278, 1285, 1292, 1299, 1307, 1315, + 1323, 1330, 1341, 1352, 1359, 1368, 1377, 1386, 1395, 1402, + 1409, 1416, 1432, 1440, 1448, 1458, 1468, 1478, 1492, 1500, + 1513, 1524, 1532, 1545, 1554, 1563, 1572, 1581, 1591, 1601, + 1609, 1622, 1631, 1639, 1648, 1656, 1669, 1678, 1687, 1697, + 1704, 1714, 1724, 1734, 1744, 1754, 1764, 1774, 1784, 1791, + 1798, 1805, 1814, 1823, 1832, 1841, 1848, 1858, 1866, 1875, + 1882, 1900, 1913, 1926, 1939, 1948, 1957, 1966, 1975, 1985, + 1995, 2006, 2015, 2024, 2033, 2042, 2051, 2060, 2069, 2078, + 2091, 2104, 2113, 2120, 2129, 2138, 2147, 2156, 2165, 2173, + 2186, 2194, 2249, 2256, 2271, 2281, 2291, 2298, 2305, 2312, + 2321, 2329, 2343, 2364, 2385, 2397, 2409, 2421, 2430, 2451, + 2463, 2475, 2484, 2505, 2514, 2523, 2531, 2539, 2552, 2565, + 2580, 2595, 2604, 2613, 2623, 2633, 2642, 2648, 2657, 2666, + 2676, 2686, 2696, 2705, 2715, 2724, 2737, 2750, 2762, 2776, + 2788, 2802, 2811, 2822, 2831, 2841, 2848, 2855, 2864, 2873, + 2883, 2893, 2903, 2913, 2920, 2927, 2936, 2945, 2955, 2965, + 2975, 2982, 2989, 2996, 3004, 3014, 3024, 3034, 3044, 3054, + 3064, 3120, 3130, 3138, 3146, 3161, 3170, 3176, 3177, 3178, + 3178, 3178, 3179, 3179, 3179, 3180, 3180, 3182, 3192, 3201, + 3208, 3215, 3222, 3229, 3236, 3243, 3249, 3250, 3251, 3251, + 3251, 3252, 3252, 3252, 3253, 3254, 3254, 3255, 3255, 3256, + 3256, 3257, 3258, 3259, 3260, 3261, 3262, 3264, 3273, 3283, + 3290, 3297, 3306, 3313, 3320, 3327, 3334, 3343, 3352, 3359, + 3366, 3376, 3386, 3396, 3406, 3416, 3426, 3432, 3433, 3434, + 3436, 3442, 3448, 3449, 3450, 3452, 3458, 3468, 3475, 3484, + 3492, 3498, 3499, 3501, 3501, 3501, 3502, 3502, 3503, 3504, + 3505, 3506, 3507, 3509, 3519, 3528, 3535, 3544, 3551, 3560, + 3568, 3581, 3589, 3602, 3608, 3609, 3610, 3610, 3611, 3611, + 3611, 3612, 3614, 3626, 3638, 3650, 3665, 3678, 3691, 3702, + 3711, 3726, 3732, 3733, 3734, 3734, 3736, 3751 }; #endif @@ -1432,15 +1438,16 @@ static const char *const yytname[] = "VAR_URL", "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", "VAR_TLS_ADDITIONAL_PORT", "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", "VAR_FAST_SERVER_PERMIL", "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY", - "VAR_TLS_WIN_CERT", "VAR_TCP_CONNECTION_LIMIT", "VAR_FORWARD_NO_CACHE", - "VAR_STUB_NO_CACHE", "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", - "VAR_UNKNOWN_SERVER_TIME_LIMIT", "VAR_LOG_TAG_QUERYREPLY", - "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", "VAR_TLS_CIPHERSUITES", - "VAR_TLS_USE_SNI", "VAR_IPSET", "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", - "VAR_TLS_SESSION_TICKET_KEYS", "VAR_RPZ", "VAR_TAGS", - "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", - "VAR_RPZ_LOG_NAME", "VAR_DYNLIB", "VAR_DYNLIB_FILE", - "VAR_EDNS_CLIENT_STRING", "VAR_EDNS_CLIENT_STRING_OPCODE", "VAR_NSID", + "VAR_TLS_WIN_CERT", "VAR_TCP_CONNECTION_LIMIT", "VAR_ANSWER_COOKIE", + "VAR_COOKIE_SECRET", "VAR_FORWARD_NO_CACHE", "VAR_STUB_NO_CACHE", + "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", "VAR_UNKNOWN_SERVER_TIME_LIMIT", + "VAR_LOG_TAG_QUERYREPLY", "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", + "VAR_TLS_CIPHERSUITES", "VAR_TLS_USE_SNI", "VAR_IPSET", + "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", "VAR_TLS_SESSION_TICKET_KEYS", + "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE", + "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME", + "VAR_DYNLIB", "VAR_DYNLIB_FILE", "VAR_EDNS_CLIENT_STRING", + "VAR_EDNS_CLIENT_STRING_OPCODE", "VAR_NSID", "VAR_ZONEMD_PERMISSIVE_MODE", "VAR_ZONEMD_CHECK", "VAR_ZONEMD_REJECT_ABSENCE", "VAR_RPZ_SIGNAL_NXDOMAIN_RA", "VAR_INTERFACE_AUTOMATIC_PORTS", "VAR_EDE", "VAR_INTERFACE_ACTION", @@ -1586,8 +1593,9 @@ static const char *const yytname[] = "cachedbstart", "contents_cachedb", "content_cachedb", "cachedb_backend_name", "cachedb_secret_seed", "redis_server_host", "redis_server_port", "redis_timeout", "redis_expire_records", - "server_tcp_connection_limit", "ipsetstart", "contents_ipset", - "content_ipset", "ipset_name_v4", "ipset_name_v6", YY_NULLPTR + "server_tcp_connection_limit", "server_answer_cookie", + "server_cookie_secret", "ipsetstart", "contents_ipset", "content_ipset", + "ipset_name_v4", "ipset_name_v6", YY_NULLPTR }; static const char * @@ -1597,7 +1605,7 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-284) +#define YYPACT_NINF (-286) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) @@ -1611,110 +1619,111 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - -284, 250, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -13, 201, 218, 52, 84, 38, 236, 209, - -81, -283, -93, -191, -276, 29, 30, 31, 80, 81, - 91, 92, 120, 121, 132, 146, 147, 148, 149, 161, - 162, 163, 164, 165, 208, 210, 230, 231, 234, 235, - 237, 254, 255, 256, 257, 259, 260, 263, 264, 265, - 268, 271, 274, 284, 285, 288, 289, 290, 291, 293, - 294, 295, 300, 302, 310, 311, 316, 317, 318, 319, - 320, 321, 331, 332, 333, 335, 338, 339, 345, 347, - 348, 349, 351, 357, 363, 364, 365, 366, 367, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 490, 491, 492, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 506, 507, 508, 509, 510, 511, 512, 513, 515, 516, - 517, 518, 519, 520, 521, 522, 524, 525, 526, 527, - 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 548, - 549, 550, 552, 553, 554, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, 555, 556, 558, 559, - 560, 561, 562, 563, -284, -284, -284, -284, -284, -284, - -284, -284, -284, 564, 565, 566, 567, 568, 569, 570, - -284, -284, -284, -284, -284, -284, -284, -284, 571, 572, - 573, 574, 575, 576, 577, -284, -284, -284, -284, -284, - -284, -284, -284, 578, 579, 580, 581, 582, 583, 584, - 585, 586, 587, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, 588, 589, 590, 591, 592, 593, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, 594, 595, 596, 597, 598, 599, 600, - 601, -284, -284, -284, -284, -284, -284, -284, -284, -284, - 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, - 612, 613, 614, 615, 616, 617, 618, 619, 620, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, 621, - -284, -284, 622, -284, -284, 623, 624, 625, 626, 627, - 628, 629, 630, 631, 632, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, 633, 634, 635, 636, - 637, 638, -284, -284, -284, -284, -284, -284, -284, 639, - 640, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, 641, 642, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, 643, 644, 645, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, 646, - 647, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, 648, 649, 650, 651, 652, 653, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, 654, -284, -284, -284, -284, -284, -284, - -284, -284, -284, 655, -284, -284, -284, -284, -284, 656, - 657, 658, 659, 660, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - 661, -284, -284, 662, 663, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, 664, 665, - 666, -284, -284, -284, -284, -284, -284, 667, 668, -284, - -284, -284, -284, -284, -284, -284, -284 + -286, 250, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -13, 225, 252, 219, 56, 38, 143, -14, + -81, -285, 129, -191, -278, 29, 30, 31, 80, 81, + 87, 92, 119, 120, 121, 123, 124, 132, 165, 208, + 210, 238, 239, 253, 255, 256, 257, 259, 261, 264, + 265, 268, 271, 276, 277, 288, 293, 294, 297, 302, + 303, 304, 316, 318, 319, 320, 321, 323, 324, 326, + 327, 329, 335, 337, 338, 339, 341, 347, 348, 349, + 350, 351, 352, 353, 356, 357, 359, 360, 362, 363, + 364, 365, 366, 367, 368, 369, 383, 385, 387, 388, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 401, + 402, 403, 404, 405, 406, 407, 408, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 494, 495, + 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 516, 517, + 518, 519, 520, 521, 522, 524, 525, 526, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 542, 543, 544, 545, 546, 547, 548, 550, + 551, 552, 554, 555, 556, 557, 558, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + 560, 561, 562, 563, 564, 565, 566, 567, -286, -286, + -286, -286, -286, -286, -286, -286, -286, 568, 569, 570, + 571, 572, 573, 574, -286, -286, -286, -286, -286, -286, + -286, -286, 575, 576, 577, 578, 579, 580, 581, -286, + -286, -286, -286, -286, -286, -286, -286, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, 592, 593, + 594, 595, 596, 597, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, 598, 599, 600, + 601, 602, 603, 604, 605, -286, -286, -286, -286, -286, + -286, -286, -286, -286, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, + 622, 623, 624, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, 625, -286, -286, 626, -286, -286, 627, + 628, 629, 630, 631, 632, 633, 634, 635, 636, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + 637, 638, 639, 640, 641, 642, -286, -286, -286, -286, + -286, -286, -286, 643, 644, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, 645, 646, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, 647, + 648, 649, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, 650, 651, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, 652, 653, 654, 655, + 656, 657, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, 658, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, 659, + -286, -286, -286, -286, -286, 660, 661, 662, 663, 664, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, 665, -286, -286, 666, + 667, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, 668, 669, 670, -286, -286, -286, + -286, -286, -286, 671, 672, -286, -286, -286, -286, -286, + -286, -286, -286 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1722,10 +1731,10 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_int16 yydefact[] = { - 2, 0, 1, 18, 19, 252, 263, 574, 634, 593, - 273, 648, 671, 283, 687, 302, 639, 3, 17, 21, - 254, 265, 275, 285, 304, 576, 595, 636, 641, 650, - 673, 689, 4, 5, 6, 10, 14, 15, 8, 9, + 2, 0, 1, 18, 19, 254, 265, 576, 636, 595, + 275, 650, 673, 285, 691, 304, 641, 3, 17, 21, + 256, 267, 277, 287, 306, 578, 597, 638, 643, 652, + 675, 693, 4, 5, 6, 10, 14, 15, 8, 9, 7, 16, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1749,165 +1758,166 @@ static const yytype_int16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 20, 22, 23, 88, 91, - 100, 213, 214, 24, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 37, 79, 25, 92, 93, 48, - 72, 87, 250, 26, 27, 30, 31, 28, 29, 32, - 33, 34, 247, 248, 249, 35, 36, 124, 225, 125, - 127, 128, 129, 227, 232, 228, 239, 240, 241, 242, - 130, 131, 132, 133, 134, 135, 136, 209, 89, 78, - 104, 122, 123, 237, 234, 126, 38, 39, 40, 41, - 42, 80, 94, 95, 111, 66, 76, 67, 217, 218, - 105, 58, 59, 216, 62, 60, 61, 63, 245, 115, - 119, 140, 151, 181, 154, 238, 116, 73, 43, 44, - 45, 102, 141, 142, 143, 144, 46, 47, 49, 50, - 52, 53, 51, 148, 149, 155, 54, 55, 56, 64, - 83, 120, 97, 150, 90, 177, 98, 99, 117, 118, - 235, 103, 57, 81, 84, 190, 65, 68, 106, 107, - 108, 82, 178, 109, 69, 70, 71, 226, 121, 200, - 201, 202, 203, 204, 205, 206, 207, 215, 110, 77, - 246, 112, 113, 114, 179, 74, 75, 96, 85, 86, - 101, 137, 138, 236, 139, 145, 146, 147, 182, 183, - 185, 187, 188, 186, 189, 192, 193, 194, 191, 210, - 152, 153, 158, 159, 156, 157, 160, 161, 163, 162, - 165, 164, 166, 229, 231, 230, 180, 195, 196, 197, - 198, 199, 219, 221, 220, 222, 223, 224, 243, 244, - 251, 184, 208, 211, 212, 233, 0, 0, 0, 0, - 0, 0, 0, 0, 253, 255, 256, 257, 259, 260, - 261, 262, 258, 0, 0, 0, 0, 0, 0, 0, - 264, 266, 267, 268, 269, 270, 271, 272, 0, 0, - 0, 0, 0, 0, 0, 274, 276, 277, 280, 281, - 278, 282, 279, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 284, 286, 287, 288, 289, 293, 294, - 295, 290, 291, 292, 0, 0, 0, 0, 0, 0, - 307, 311, 312, 313, 314, 315, 303, 305, 306, 308, - 309, 310, 316, 0, 0, 0, 0, 0, 0, 0, - 0, 575, 577, 579, 578, 584, 580, 581, 582, 583, + 0, 0, 0, 0, 0, 0, 0, 20, 22, 23, + 88, 91, 100, 213, 214, 24, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 37, 79, 25, 92, + 93, 48, 72, 87, 252, 26, 27, 30, 31, 28, + 29, 32, 33, 34, 249, 250, 251, 35, 36, 124, + 225, 125, 127, 128, 129, 227, 232, 228, 239, 240, + 241, 244, 130, 131, 132, 133, 134, 135, 136, 209, + 89, 78, 104, 122, 123, 237, 234, 126, 38, 39, + 40, 41, 42, 80, 94, 95, 111, 66, 76, 67, + 217, 218, 105, 58, 59, 216, 62, 60, 61, 63, + 247, 115, 119, 140, 151, 181, 154, 238, 116, 73, + 43, 44, 45, 102, 141, 142, 143, 144, 46, 47, + 49, 50, 52, 53, 51, 148, 149, 155, 54, 55, + 56, 64, 83, 120, 97, 150, 90, 177, 98, 99, + 117, 118, 235, 103, 57, 81, 84, 190, 65, 68, + 106, 107, 108, 82, 178, 109, 69, 70, 71, 226, + 121, 200, 201, 202, 203, 204, 205, 206, 207, 215, + 110, 77, 248, 112, 113, 114, 179, 74, 75, 96, + 85, 86, 101, 137, 138, 236, 139, 145, 146, 147, + 182, 183, 185, 187, 188, 186, 189, 192, 193, 194, + 191, 210, 152, 153, 158, 159, 156, 157, 160, 161, + 163, 162, 165, 164, 166, 229, 231, 230, 180, 195, + 196, 197, 198, 199, 219, 221, 220, 222, 223, 224, + 245, 246, 253, 184, 208, 211, 212, 233, 242, 243, + 0, 0, 0, 0, 0, 0, 0, 0, 255, 257, + 258, 259, 261, 262, 263, 264, 260, 0, 0, 0, + 0, 0, 0, 0, 266, 268, 269, 270, 271, 272, + 273, 274, 0, 0, 0, 0, 0, 0, 0, 276, + 278, 279, 282, 283, 280, 284, 281, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 286, 288, 289, + 290, 291, 295, 296, 297, 292, 293, 294, 0, 0, + 0, 0, 0, 0, 309, 313, 314, 315, 316, 317, + 305, 307, 308, 310, 311, 312, 318, 0, 0, 0, + 0, 0, 0, 0, 0, 577, 579, 581, 580, 586, + 582, 583, 584, 585, 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, 594, - 596, 598, 597, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 0, - 635, 637, 0, 640, 642, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 649, 651, 652, 653, 655, - 656, 654, 657, 658, 659, 660, 0, 0, 0, 0, - 0, 0, 672, 674, 675, 676, 677, 678, 679, 0, - 0, 688, 690, 691, 318, 317, 324, 337, 335, 348, - 344, 345, 349, 346, 347, 350, 351, 352, 356, 357, - 387, 388, 389, 390, 391, 419, 420, 421, 427, 428, - 340, 429, 430, 433, 431, 432, 437, 438, 439, 453, - 402, 403, 406, 407, 440, 457, 396, 398, 458, 465, - 466, 467, 341, 418, 486, 487, 397, 480, 380, 336, - 392, 454, 462, 441, 0, 0, 490, 342, 319, 379, - 445, 320, 338, 339, 393, 394, 488, 443, 447, 448, - 354, 353, 321, 491, 422, 452, 381, 401, 459, 460, - 461, 464, 479, 395, 484, 482, 483, 410, 417, 449, - 450, 411, 412, 442, 469, 382, 383, 386, 358, 360, - 355, 361, 362, 363, 364, 371, 372, 373, 374, 375, - 376, 377, 492, 493, 495, 423, 424, 425, 426, 434, - 435, 436, 496, 497, 498, 0, 0, 0, 444, 413, - 415, 644, 511, 515, 513, 512, 516, 514, 523, 0, - 0, 519, 520, 521, 522, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 446, 463, 485, 527, 528, - 414, 499, 0, 0, 0, 0, 0, 0, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 645, 404, 405, - 408, 399, 468, 378, 322, 323, 400, 529, 530, 531, - 532, 533, 535, 534, 536, 537, 538, 359, 366, 524, - 526, 525, 365, 0, 385, 451, 494, 384, 416, 367, - 368, 370, 369, 0, 540, 409, 481, 343, 541, 0, - 0, 0, 0, 0, 542, 543, 544, 549, 547, 548, - 545, 546, 550, 551, 552, 553, 555, 556, 554, 567, - 0, 571, 572, 0, 0, 573, 557, 565, 558, 559, - 560, 564, 566, 561, 562, 563, 296, 297, 298, 299, - 300, 301, 585, 587, 586, 589, 590, 591, 592, 588, - 615, 617, 618, 619, 620, 621, 622, 623, 624, 625, - 616, 626, 627, 628, 629, 630, 631, 632, 633, 638, - 643, 661, 662, 663, 666, 664, 665, 667, 668, 669, - 670, 680, 681, 682, 683, 684, 685, 692, 693, 455, - 489, 510, 646, 647, 517, 518, 500, 501, 0, 0, - 0, 505, 686, 539, 456, 509, 506, 0, 0, 568, - 569, 570, 504, 502, 503, 507, 508 + 0, 0, 0, 596, 598, 600, 599, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 614, 615, 616, 0, 637, 639, 0, 642, 644, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 651, + 653, 654, 655, 657, 658, 656, 659, 660, 661, 662, + 0, 0, 0, 0, 0, 0, 674, 676, 677, 678, + 679, 680, 681, 0, 0, 692, 694, 695, 320, 319, + 326, 339, 337, 350, 346, 347, 351, 348, 349, 352, + 353, 354, 358, 359, 389, 390, 391, 392, 393, 421, + 422, 423, 429, 430, 342, 431, 432, 435, 433, 434, + 439, 440, 441, 455, 404, 405, 408, 409, 442, 459, + 398, 400, 460, 467, 468, 469, 343, 420, 488, 489, + 399, 482, 382, 338, 394, 456, 464, 443, 0, 0, + 492, 344, 321, 381, 447, 322, 340, 341, 395, 396, + 490, 445, 449, 450, 356, 355, 323, 493, 424, 454, + 383, 403, 461, 462, 463, 466, 481, 397, 486, 484, + 485, 412, 419, 451, 452, 413, 414, 444, 471, 384, + 385, 388, 360, 362, 357, 363, 364, 365, 366, 373, + 374, 375, 376, 377, 378, 379, 494, 495, 497, 425, + 426, 427, 428, 436, 437, 438, 498, 499, 500, 0, + 0, 0, 446, 415, 417, 646, 513, 517, 515, 514, + 518, 516, 525, 0, 0, 521, 522, 523, 524, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 448, + 465, 487, 529, 530, 416, 501, 0, 0, 0, 0, + 0, 0, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 647, 406, 407, 410, 401, 470, 380, 324, 325, + 402, 531, 532, 533, 534, 535, 537, 536, 538, 539, + 540, 361, 368, 526, 528, 527, 367, 0, 689, 690, + 387, 453, 496, 386, 418, 369, 370, 372, 371, 0, + 542, 411, 483, 345, 543, 0, 0, 0, 0, 0, + 544, 545, 546, 551, 549, 550, 547, 548, 552, 553, + 554, 555, 557, 558, 556, 569, 0, 573, 574, 0, + 0, 575, 559, 567, 560, 561, 562, 566, 568, 563, + 564, 565, 298, 299, 300, 301, 302, 303, 587, 589, + 588, 591, 592, 593, 594, 590, 617, 619, 620, 621, + 622, 623, 624, 625, 626, 627, 618, 628, 629, 630, + 631, 632, 633, 634, 635, 640, 645, 663, 664, 665, + 668, 666, 667, 669, 670, 671, 672, 682, 683, 684, + 685, 686, 687, 696, 697, 457, 491, 512, 648, 649, + 519, 520, 502, 503, 0, 0, 0, 507, 688, 541, + 458, 511, 508, 0, 0, 570, 571, 572, 506, 504, + 505, 509, 510 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, 669, 670, - 671, 672, 673, -284, -284, 674, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284 + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, 673, 674, + 675, 676, 677, -286, -286, 678, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - 0, 1, 17, 18, 19, 32, 275, 20, 33, 514, - 21, 34, 530, 22, 35, 545, 23, 36, 563, 580, - 581, 582, 583, 584, 585, 24, 37, 586, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, - 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 498, 499, 500, 515, 516, 517, 518, 519, 520, 521, - 522, 531, 532, 533, 534, 535, 536, 537, 564, 565, - 566, 567, 568, 569, 570, 571, 572, 573, 546, 547, - 548, 549, 550, 551, 552, 25, 38, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 26, 39, 629, 630, - 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, - 641, 642, 643, 644, 645, 646, 647, 648, 27, 40, - 650, 651, 28, 41, 653, 654, 501, 502, 503, 504, - 29, 42, 665, 666, 667, 668, 669, 670, 671, 672, - 673, 674, 675, 30, 43, 682, 683, 684, 685, 686, - 687, 688, 505, 31, 44, 691, 692, 693 + 0, 1, 17, 18, 19, 32, 277, 20, 33, 518, + 21, 34, 534, 22, 35, 549, 23, 36, 567, 584, + 585, 586, 587, 588, 589, 24, 37, 590, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, + 500, 501, 502, 519, 520, 521, 522, 523, 524, 525, + 526, 535, 536, 537, 538, 539, 540, 541, 568, 569, + 570, 571, 572, 573, 574, 575, 576, 577, 550, 551, + 552, 553, 554, 555, 556, 25, 38, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 26, 39, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 27, 40, + 654, 655, 28, 41, 657, 658, 503, 504, 505, 506, + 29, 42, 669, 670, 671, 672, 673, 674, 675, 676, + 677, 678, 679, 30, 43, 686, 687, 688, 689, 690, + 691, 692, 507, 508, 509, 31, 44, 695, 696, 697 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1918,75 +1928,75 @@ static const yytype_int16 yytable[] = 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 689, 690, 649, 652, 77, 78, 79, 694, - 695, 696, 80, 81, 82, 83, 84, 85, 86, 87, + 75, 76, 693, 694, 653, 656, 77, 78, 79, 698, + 699, 700, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 553, 676, 677, 678, 679, 680, 681, - 697, 698, 121, 122, 123, 124, 125, 538, 126, 127, - 128, 699, 700, 129, 130, 131, 132, 133, 134, 135, + 118, 119, 120, 557, 680, 681, 682, 683, 684, 685, + 701, 702, 121, 122, 123, 124, 125, 703, 126, 127, + 128, 557, 704, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 553, - 701, 702, 155, 539, 540, 156, 157, 158, 159, 160, - 161, 162, 703, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 704, 705, 706, 707, - 541, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 708, 709, 710, 711, 712, 176, 177, 178, 179, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 705, + 706, 707, 155, 708, 709, 156, 157, 158, 159, 160, + 161, 162, 710, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 614, 615, 616, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, + 628, 629, 630, 631, 632, 711, 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, 713, 218, - 714, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 210, 211, 212, 213, 214, 215, 216, 217, 712, 218, + 713, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 715, 716, 542, 543, 717, 718, 506, 719, 507, 508, + 597, 598, 599, 600, 601, 602, 603, 604, 714, 715, 2, 238, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 3, 4, 523, 720, 721, 722, 723, 248, 724, - 725, 524, 525, 726, 727, 728, 249, 250, 729, 251, - 252, 730, 253, 254, 731, 544, 255, 256, 257, 258, - 259, 260, 261, 262, 732, 733, 5, 263, 734, 735, - 736, 737, 6, 738, 739, 740, 264, 265, 266, 267, - 741, 509, 742, 268, 269, 270, 271, 272, 273, 274, - 743, 744, 555, 556, 557, 558, 745, 746, 747, 748, - 749, 750, 560, 593, 594, 595, 596, 597, 598, 599, - 600, 751, 752, 753, 510, 754, 7, 511, 755, 756, - 574, 575, 576, 577, 578, 757, 512, 758, 759, 760, - 526, 761, 527, 579, 8, 528, 554, 762, 555, 556, - 557, 558, 559, 763, 764, 765, 766, 767, 560, 610, - 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, - 621, 622, 623, 624, 625, 626, 627, 628, 768, 769, - 770, 771, 772, 773, 774, 775, 776, 561, 562, 777, - 778, 779, 780, 781, 782, 783, 784, 785, 786, 9, - 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, - 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, - 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, - 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, - 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, - 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, - 847, 10, 848, 849, 850, 851, 852, 853, 854, 855, - 856, 857, 858, 859, 860, 861, 862, 863, 864, 513, - 865, 866, 867, 11, 868, 869, 870, 871, 872, 873, - 874, 875, 876, 877, 878, 529, 879, 880, 881, 882, - 883, 884, 885, 886, 12, 887, 888, 889, 890, 891, - 892, 893, 894, 13, 895, 896, 897, 898, 899, 900, - 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, - 911, 912, 913, 914, 915, 916, 917, 14, 918, 919, - 920, 15, 921, 922, 923, 924, 925, 16, 926, 927, - 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, - 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, - 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, - 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, - 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, - 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, - 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, - 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, - 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, - 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, - 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 0, + 247, 3, 4, 716, 542, 717, 718, 719, 248, 720, + 510, 721, 511, 512, 722, 723, 249, 250, 724, 251, + 252, 725, 253, 254, 255, 256, 726, 727, 257, 258, + 259, 260, 261, 262, 263, 264, 5, 527, 728, 265, + 543, 544, 6, 729, 730, 528, 529, 731, 266, 267, + 268, 269, 732, 733, 734, 270, 271, 272, 273, 274, + 275, 276, 559, 560, 561, 562, 735, 545, 736, 737, + 738, 739, 564, 740, 741, 513, 742, 743, 558, 744, + 559, 560, 561, 562, 563, 745, 7, 746, 747, 748, + 564, 749, 578, 579, 580, 581, 582, 750, 751, 752, + 753, 754, 755, 756, 8, 583, 757, 758, 514, 759, + 760, 515, 761, 762, 763, 764, 765, 766, 767, 768, + 516, 565, 566, 659, 660, 661, 662, 663, 664, 665, + 666, 667, 668, 769, 530, 770, 531, 771, 772, 532, + 773, 774, 775, 776, 777, 778, 779, 780, 781, 546, + 547, 782, 783, 784, 785, 786, 787, 788, 789, 9, + 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, + 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 548, 822, 823, 824, 825, 826, 827, 828, + 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, + 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 10, 850, 851, 852, 853, 854, 855, 856, 857, + 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, + 868, 869, 870, 11, 871, 872, 873, 874, 875, 876, + 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, + 887, 888, 889, 890, 12, 517, 891, 892, 893, 894, + 895, 896, 897, 13, 898, 899, 900, 901, 902, 903, + 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, + 914, 533, 915, 916, 917, 918, 919, 920, 921, 14, + 922, 923, 924, 15, 925, 926, 927, 928, 929, 16, + 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, + 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, + 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, + 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, + 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, + 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, + 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, + 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, + 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, + 1040, 1041, 1042, 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, 587, 588, 589, 590, - 591, 592 + 591, 592, 593, 594, 595, 596 }; static const yytype_int16 yycheck[] = @@ -1994,60 +2004,60 @@ static const yytype_int16 yycheck[] = 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 308, 309, 115, 318, 49, 50, 51, 10, + 43, 44, 310, 311, 115, 320, 49, 50, 51, 10, 10, 10, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 45, 275, 276, 277, 278, 279, 280, - 10, 10, 105, 106, 107, 108, 109, 45, 111, 112, - 113, 10, 10, 116, 117, 118, 119, 120, 121, 122, + 10, 10, 105, 106, 107, 108, 109, 10, 111, 112, + 113, 45, 10, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 45, - 10, 10, 145, 81, 82, 148, 149, 150, 151, 152, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 10, + 10, 10, 145, 10, 10, 148, 149, 150, 151, 152, 153, 154, 10, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 10, 10, 10, 10, - 108, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 10, 10, 10, 10, 10, 189, 190, 191, 192, + 163, 164, 165, 166, 167, 168, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 10, 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, 10, 232, 10, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 10, 10, 190, 191, 10, 10, 45, 10, 47, 48, + 97, 98, 99, 100, 101, 102, 103, 104, 10, 10, 0, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 11, 12, 45, 10, 10, 10, 10, 281, 10, - 10, 53, 54, 10, 10, 10, 289, 290, 10, 292, - 293, 10, 295, 296, 10, 233, 299, 300, 301, 302, - 303, 304, 305, 306, 10, 10, 46, 310, 10, 10, - 10, 10, 52, 10, 10, 10, 319, 320, 321, 322, - 10, 110, 10, 326, 327, 328, 329, 330, 331, 332, - 10, 10, 284, 285, 286, 287, 10, 10, 10, 10, - 10, 10, 294, 97, 98, 99, 100, 101, 102, 103, - 104, 10, 10, 10, 143, 10, 96, 146, 10, 10, - 312, 313, 314, 315, 316, 10, 155, 10, 10, 10, - 142, 10, 144, 325, 114, 147, 282, 10, 284, 285, - 286, 287, 288, 10, 10, 10, 10, 10, 294, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 323, 324, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 169, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 273, 11, 12, 10, 45, 10, 10, 10, 281, 10, + 45, 10, 47, 48, 10, 10, 289, 290, 10, 292, + 293, 10, 295, 296, 297, 298, 10, 10, 301, 302, + 303, 304, 305, 306, 307, 308, 46, 45, 10, 312, + 81, 82, 52, 10, 10, 53, 54, 10, 321, 322, + 323, 324, 10, 10, 10, 328, 329, 330, 331, 332, + 333, 334, 284, 285, 286, 287, 10, 108, 10, 10, + 10, 10, 294, 10, 10, 110, 10, 10, 282, 10, + 284, 285, 286, 287, 288, 10, 96, 10, 10, 10, + 294, 10, 314, 315, 316, 317, 318, 10, 10, 10, + 10, 10, 10, 10, 114, 327, 10, 10, 143, 10, + 10, 146, 10, 10, 10, 10, 10, 10, 10, 10, + 155, 325, 326, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 10, 142, 10, 144, 10, 10, 147, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 190, + 191, 10, 10, 10, 10, 10, 10, 10, 10, 169, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 233, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 231, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 298, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 253, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 297, 10, 10, 10, 10, - 10, 10, 10, 10, 274, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 274, 300, 10, 10, 10, 10, 10, 10, 10, 283, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 307, 10, 10, - 10, 311, 10, 10, 10, 10, 10, 317, 10, 10, + 10, 299, 10, 10, 10, 10, 10, 10, 10, 309, + 10, 10, 10, 313, 10, 10, 10, 10, 10, 319, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -2058,22 +2068,22 @@ static const yytype_int16 yycheck[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, -1, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 37, 37, 37, 37, - 37, 37 + 37, 37, 37, 37, 37, 37 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of state STATE-NUM. */ static const yytype_int16 yystos[] = { - 0, 334, 0, 11, 12, 46, 52, 96, 114, 169, - 231, 253, 274, 283, 307, 311, 317, 335, 336, 337, - 340, 343, 346, 349, 358, 618, 629, 651, 655, 663, - 676, 686, 338, 341, 344, 347, 350, 359, 619, 630, - 652, 656, 664, 677, 687, 13, 14, 15, 16, 17, + 0, 336, 0, 11, 12, 46, 52, 96, 114, 169, + 231, 253, 274, 283, 309, 313, 319, 337, 338, 339, + 342, 345, 348, 351, 360, 620, 631, 653, 657, 665, + 678, 690, 340, 343, 346, 349, 352, 361, 621, 632, + 654, 658, 666, 679, 691, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 49, 50, 51, @@ -2094,9 +2104,9 @@ static const yytype_int16 yystos[] = 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 281, 289, - 290, 292, 293, 295, 296, 299, 300, 301, 302, 303, - 304, 305, 306, 310, 319, 320, 321, 322, 326, 327, - 328, 329, 330, 331, 332, 339, 361, 362, 363, 364, + 290, 292, 293, 295, 296, 297, 298, 301, 302, 303, + 304, 305, 306, 307, 308, 312, 321, 322, 323, 324, + 328, 329, 330, 331, 332, 333, 334, 341, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, @@ -2119,26 +2129,26 @@ static const yytype_int16 yystos[] = 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, - 585, 659, 660, 661, 662, 685, 45, 47, 48, 110, - 143, 146, 155, 298, 342, 586, 587, 588, 589, 590, - 591, 592, 593, 45, 53, 54, 142, 144, 147, 297, - 345, 594, 595, 596, 597, 598, 599, 600, 45, 81, - 82, 108, 190, 191, 233, 348, 611, 612, 613, 614, - 615, 616, 617, 45, 282, 284, 285, 286, 287, 288, - 294, 323, 324, 351, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 312, 313, 314, 315, 316, 325, - 352, 353, 354, 355, 356, 357, 360, 601, 602, 603, - 604, 605, 608, 97, 98, 99, 100, 101, 102, 103, - 104, 620, 621, 622, 623, 624, 625, 626, 627, 628, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 631, - 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, - 642, 643, 644, 645, 646, 647, 648, 649, 650, 115, - 653, 654, 318, 657, 658, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 665, 666, 667, 668, 669, - 670, 671, 672, 673, 674, 675, 275, 276, 277, 278, - 279, 280, 678, 679, 680, 681, 682, 683, 684, 308, - 309, 688, 689, 690, 10, 10, 10, 10, 10, 10, + 585, 586, 587, 661, 662, 663, 664, 687, 688, 689, + 45, 47, 48, 110, 143, 146, 155, 300, 344, 588, + 589, 590, 591, 592, 593, 594, 595, 45, 53, 54, + 142, 144, 147, 299, 347, 596, 597, 598, 599, 600, + 601, 602, 45, 81, 82, 108, 190, 191, 233, 350, + 613, 614, 615, 616, 617, 618, 619, 45, 282, 284, + 285, 286, 287, 288, 294, 325, 326, 353, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 314, 315, + 316, 317, 318, 327, 354, 355, 356, 357, 358, 359, + 362, 603, 604, 605, 606, 607, 610, 97, 98, 99, + 100, 101, 102, 103, 104, 622, 623, 624, 625, 626, + 627, 628, 629, 630, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 115, 655, 656, 320, 659, 660, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 275, 276, 277, 278, 279, 280, 680, 681, 682, 683, + 684, 685, 686, 310, 311, 692, 693, 694, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -2172,44 +2182,45 @@ static const yytype_int16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ static const yytype_int16 yyr1[] = { - 0, 333, 334, 334, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 336, 337, - 338, 338, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 340, 341, 341, 342, 342, 342, 342, 342, - 342, 342, 342, 343, 344, 344, 345, 345, 345, 345, - 345, 345, 345, 346, 347, 347, 348, 348, 348, 348, - 348, 348, 348, 349, 350, 350, 351, 351, 351, 351, - 351, 351, 351, 351, 351, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 359, 360, 360, 360, 360, 360, - 360, 360, 360, 360, 360, 360, 360, 361, 362, 363, + 0, 335, 336, 336, 337, 337, 337, 337, 337, 337, + 337, 337, 337, 337, 337, 337, 337, 337, 338, 339, + 340, 340, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 341, 341, 342, 343, 343, 344, 344, 344, + 344, 344, 344, 344, 344, 345, 346, 346, 347, 347, + 347, 347, 347, 347, 347, 348, 349, 349, 350, 350, + 350, 350, 350, 350, 350, 351, 352, 352, 353, 353, + 353, 353, 353, 353, 353, 353, 353, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 361, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, @@ -2235,19 +2246,19 @@ static const yytype_int16 yyr1[] = 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, 619, 620, 620, 620, - 620, 620, 620, 620, 620, 621, 622, 623, 624, 625, - 626, 627, 628, 629, 630, 630, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 632, 633, 634, 635, 636, + 614, 615, 616, 617, 618, 619, 620, 621, 621, 622, + 622, 622, 622, 622, 622, 622, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 632, 633, 633, + 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, + 633, 633, 633, 633, 633, 633, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, - 647, 648, 649, 650, 651, 652, 652, 653, 654, 655, - 656, 656, 657, 658, 659, 660, 661, 662, 663, 664, - 664, 665, 665, 665, 665, 665, 665, 665, 665, 665, - 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, - 675, 676, 677, 677, 678, 678, 678, 678, 678, 678, - 679, 680, 681, 682, 683, 684, 685, 686, 687, 687, - 688, 688, 689, 690 + 647, 648, 649, 650, 651, 652, 653, 654, 654, 655, + 656, 657, 658, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 666, 667, 667, 667, 667, 667, 667, 667, + 667, 667, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 679, 680, 680, 680, 680, + 680, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 690, 691, 691, 692, 692, 693, 694 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ @@ -2278,51 +2289,51 @@ static const yytype_int8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 3, 3, 4, 4, 4, 3, 3, 4, + 4, 3, 3, 2, 2, 2, 2, 2, 2, 3, + 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 2, 2, 2, 1, 2, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 4, 4, 4, 3, 3, 4, 4, 3, - 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 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, 2, 2, 2, 1, 2, 0, 1, + 2, 1, 2, 0, 1, 2, 2, 2, 3, 3, + 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 2, 0, 1, 2, 1, - 2, 0, 1, 2, 2, 2, 3, 3, 1, 2, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 3, 1, 2, 0, - 1, 1, 2, 2 + 1, 1, 2, 2, 2, 2, 2, 2, 3, 2, + 2, 1, 2, 0, 1, 1, 2, 2 }; @@ -2786,25 +2797,25 @@ yyreduce: switch (yyn) { case 18: /* force_toplevel: VAR_FORCE_TOPLEVEL */ -#line 208 "./util/configparser.y" +#line 211 "./util/configparser.y" { OUTYY(("\nP(force-toplevel)\n")); cfg_parser->started_toplevel = 0; } -#line 2795 "util/configparser.c" +#line 2806 "util/configparser.c" break; case 19: /* serverstart: VAR_SERVER */ -#line 215 "./util/configparser.y" +#line 218 "./util/configparser.y" { OUTYY(("\nP(server:)\n")); cfg_parser->started_toplevel = 1; } -#line 2804 "util/configparser.c" +#line 2815 "util/configparser.c" break; - case 252: /* stubstart: VAR_STUB_ZONE */ -#line 327 "./util/configparser.y" + case 254: /* stubstart: VAR_STUB_ZONE */ +#line 331 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2817,11 +2828,11 @@ yyreduce: yyerror("out of memory"); } } -#line 2821 "util/configparser.c" +#line 2832 "util/configparser.c" break; - case 263: /* forwardstart: VAR_FORWARD_ZONE */ -#line 346 "./util/configparser.y" + case 265: /* forwardstart: VAR_FORWARD_ZONE */ +#line 350 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2834,11 +2845,11 @@ yyreduce: yyerror("out of memory"); } } -#line 2838 "util/configparser.c" +#line 2849 "util/configparser.c" break; - case 273: /* viewstart: VAR_VIEW */ -#line 365 "./util/configparser.y" + case 275: /* viewstart: VAR_VIEW */ +#line 369 "./util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2853,11 +2864,11 @@ yyreduce: yyerror("out of memory"); } } -#line 2857 "util/configparser.c" +#line 2868 "util/configparser.c" break; - case 283: /* authstart: VAR_AUTH_ZONE */ -#line 386 "./util/configparser.y" + case 285: /* authstart: VAR_AUTH_ZONE */ +#line 390 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2877,11 +2888,11 @@ yyreduce: yyerror("out of memory"); } } -#line 2881 "util/configparser.c" +#line 2892 "util/configparser.c" break; - case 296: /* rpz_tag: VAR_TAGS STRING_ARG */ -#line 414 "./util/configparser.y" + case 298: /* rpz_tag: VAR_TAGS STRING_ARG */ +#line 418 "./util/configparser.y" { uint8_t* bitlist; size_t len = 0; @@ -2898,11 +2909,11 @@ yyreduce: } } -#line 2902 "util/configparser.c" +#line 2913 "util/configparser.c" break; - case 297: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG */ -#line 433 "./util/configparser.y" + case 299: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG */ +#line 437 "./util/configparser.y" { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && @@ -2917,21 +2928,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2921 "util/configparser.c" +#line 2932 "util/configparser.c" break; - case 298: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG */ -#line 450 "./util/configparser.y" + case 300: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG */ +#line 454 "./util/configparser.y" { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } -#line 2931 "util/configparser.c" +#line 2942 "util/configparser.c" break; - case 299: /* rpz_log: VAR_RPZ_LOG STRING_ARG */ -#line 458 "./util/configparser.y" + case 301: /* rpz_log: VAR_RPZ_LOG STRING_ARG */ +#line 462 "./util/configparser.y" { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2939,21 +2950,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2943 "util/configparser.c" +#line 2954 "util/configparser.c" break; - case 300: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG */ -#line 468 "./util/configparser.y" + case 302: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG */ +#line 472 "./util/configparser.y" { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } -#line 2953 "util/configparser.c" +#line 2964 "util/configparser.c" break; - case 301: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG */ -#line 475 "./util/configparser.y" + case 303: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG */ +#line 479 "./util/configparser.y" { OUTYY(("P(rpz_signal_nxdomain_ra:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2961,11 +2972,11 @@ yyreduce: else cfg_parser->cfg->auths->rpz_signal_nxdomain_ra = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2965 "util/configparser.c" +#line 2976 "util/configparser.c" break; - case 302: /* rpzstart: VAR_RPZ */ -#line 485 "./util/configparser.y" + case 304: /* rpzstart: VAR_RPZ */ +#line 489 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2983,11 +2994,11 @@ yyreduce: yyerror("out of memory"); } } -#line 2987 "util/configparser.c" +#line 2998 "util/configparser.c" break; - case 317: /* server_num_threads: VAR_NUM_THREADS STRING_ARG */ -#line 510 "./util/configparser.y" + case 319: /* server_num_threads: VAR_NUM_THREADS STRING_ARG */ +#line 514 "./util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2995,11 +3006,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2999 "util/configparser.c" +#line 3010 "util/configparser.c" break; - case 318: /* server_verbosity: VAR_VERBOSITY STRING_ARG */ -#line 519 "./util/configparser.y" + case 320: /* server_verbosity: VAR_VERBOSITY STRING_ARG */ +#line 523 "./util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3007,11 +3018,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3011 "util/configparser.c" +#line 3022 "util/configparser.c" break; - case 319: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG */ -#line 528 "./util/configparser.y" + case 321: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG */ +#line 532 "./util/configparser.y" { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -3021,11 +3032,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3025 "util/configparser.c" +#line 3036 "util/configparser.c" break; - case 320: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG */ -#line 539 "./util/configparser.y" + case 322: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG */ +#line 543 "./util/configparser.y" { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3033,11 +3044,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3037 "util/configparser.c" +#line 3048 "util/configparser.c" break; - case 321: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG */ -#line 548 "./util/configparser.y" + case 323: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG */ +#line 552 "./util/configparser.y" { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3045,11 +3056,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3049 "util/configparser.c" +#line 3060 "util/configparser.c" break; - case 322: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG */ -#line 557 "./util/configparser.y" + case 324: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG */ +#line 561 "./util/configparser.y" { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3057,11 +3068,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3061 "util/configparser.c" +#line 3072 "util/configparser.c" break; - case 323: /* server_shm_key: VAR_SHM_KEY STRING_ARG */ -#line 566 "./util/configparser.y" + case 325: /* server_shm_key: VAR_SHM_KEY STRING_ARG */ +#line 570 "./util/configparser.y" { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -3071,11 +3082,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3075 "util/configparser.c" +#line 3086 "util/configparser.c" break; - case 324: /* server_port: VAR_PORT STRING_ARG */ -#line 577 "./util/configparser.y" + case 326: /* server_port: VAR_PORT STRING_ARG */ +#line 581 "./util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3083,11 +3094,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3087 "util/configparser.c" +#line 3098 "util/configparser.c" break; - case 325: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG */ -#line 586 "./util/configparser.y" + case 327: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG */ +#line 590 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -3098,11 +3109,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3102 "util/configparser.c" +#line 3113 "util/configparser.c" break; - case 326: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG */ -#line 598 "./util/configparser.y" + case 328: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG */ +#line 602 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -3114,11 +3125,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3118 "util/configparser.c" +#line 3129 "util/configparser.c" break; - case 327: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG */ -#line 612 "./util/configparser.y" + case 329: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG */ +#line 616 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3132,11 +3143,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3136 "util/configparser.c" +#line 3147 "util/configparser.c" break; - case 328: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG */ -#line 627 "./util/configparser.y" + case 330: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG */ +#line 631 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3146,11 +3157,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3150 "util/configparser.c" +#line 3161 "util/configparser.c" break; - case 329: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG */ -#line 638 "./util/configparser.y" + case 331: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG */ +#line 642 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3166,11 +3177,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3170 "util/configparser.c" +#line 3181 "util/configparser.c" break; - case 330: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG */ -#line 655 "./util/configparser.y" + case 332: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG */ +#line 659 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3186,11 +3197,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3190 "util/configparser.c" +#line 3201 "util/configparser.c" break; - case 331: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG */ -#line 672 "./util/configparser.y" + case 333: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG */ +#line 676 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3206,11 +3217,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3210 "util/configparser.c" +#line 3221 "util/configparser.c" break; - case 332: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG */ -#line 689 "./util/configparser.y" + case 334: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG */ +#line 693 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3226,11 +3237,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3230 "util/configparser.c" +#line 3241 "util/configparser.c" break; - case 333: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG */ -#line 706 "./util/configparser.y" + case 335: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG */ +#line 710 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3244,11 +3255,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3248 "util/configparser.c" +#line 3259 "util/configparser.c" break; - case 334: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG */ -#line 721 "./util/configparser.y" + case 336: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG */ +#line 725 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3262,11 +3273,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3266 "util/configparser.c" +#line 3277 "util/configparser.c" break; - case 335: /* server_interface: VAR_INTERFACE STRING_ARG */ -#line 736 "./util/configparser.y" + case 337: /* server_interface: VAR_INTERFACE STRING_ARG */ +#line 740 "./util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3278,11 +3289,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3282 "util/configparser.c" +#line 3293 "util/configparser.c" break; - case 336: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG */ -#line 749 "./util/configparser.y" + case 338: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG */ +#line 753 "./util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3296,11 +3307,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3300 "util/configparser.c" +#line 3311 "util/configparser.c" break; - case 337: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG */ -#line 764 "./util/configparser.y" + case 339: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG */ +#line 768 "./util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3308,11 +3319,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3312 "util/configparser.c" +#line 3323 "util/configparser.c" break; - case 338: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG */ -#line 773 "./util/configparser.y" + case 340: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG */ +#line 777 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3320,11 +3331,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3324 "util/configparser.c" +#line 3335 "util/configparser.c" break; - case 339: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG */ -#line 782 "./util/configparser.y" + case 341: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG */ +#line 786 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3332,11 +3343,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3336 "util/configparser.c" +#line 3347 "util/configparser.c" break; - case 340: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG */ -#line 791 "./util/configparser.y" + case 342: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG */ +#line 795 "./util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3344,11 +3355,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3348 "util/configparser.c" +#line 3359 "util/configparser.c" break; - case 341: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG */ -#line 800 "./util/configparser.y" + case 343: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG */ +#line 804 "./util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3356,11 +3367,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3360 "util/configparser.c" +#line 3371 "util/configparser.c" break; - case 342: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG */ -#line 809 "./util/configparser.y" + case 344: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG */ +#line 813 "./util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3368,21 +3379,21 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3372 "util/configparser.c" +#line 3383 "util/configparser.c" break; - case 343: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG */ -#line 818 "./util/configparser.y" + case 345: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG */ +#line 822 "./util/configparser.y" { OUTYY(("P(server_interface_automatic_ports:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->if_automatic_ports); cfg_parser->cfg->if_automatic_ports = (yyvsp[0].str); } -#line 3382 "util/configparser.c" +#line 3393 "util/configparser.c" break; - case 344: /* server_do_ip4: VAR_DO_IP4 STRING_ARG */ -#line 825 "./util/configparser.y" + case 346: /* server_do_ip4: VAR_DO_IP4 STRING_ARG */ +#line 829 "./util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3390,11 +3401,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3394 "util/configparser.c" +#line 3405 "util/configparser.c" break; - case 345: /* server_do_ip6: VAR_DO_IP6 STRING_ARG */ -#line 834 "./util/configparser.y" + case 347: /* server_do_ip6: VAR_DO_IP6 STRING_ARG */ +#line 838 "./util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3402,11 +3413,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3406 "util/configparser.c" +#line 3417 "util/configparser.c" break; - case 346: /* server_do_udp: VAR_DO_UDP STRING_ARG */ -#line 843 "./util/configparser.y" + case 348: /* server_do_udp: VAR_DO_UDP STRING_ARG */ +#line 847 "./util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3414,11 +3425,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3418 "util/configparser.c" +#line 3429 "util/configparser.c" break; - case 347: /* server_do_tcp: VAR_DO_TCP STRING_ARG */ -#line 852 "./util/configparser.y" + case 349: /* server_do_tcp: VAR_DO_TCP STRING_ARG */ +#line 856 "./util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3426,11 +3437,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3430 "util/configparser.c" +#line 3441 "util/configparser.c" break; - case 348: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG */ -#line 861 "./util/configparser.y" + case 350: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG */ +#line 865 "./util/configparser.y" { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3438,11 +3449,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3442 "util/configparser.c" +#line 3453 "util/configparser.c" break; - case 349: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG */ -#line 870 "./util/configparser.y" + case 351: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG */ +#line 874 "./util/configparser.y" { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3450,11 +3461,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3454 "util/configparser.c" +#line 3465 "util/configparser.c" break; - case 350: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG */ -#line 879 "./util/configparser.y" + case 352: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG */ +#line 883 "./util/configparser.y" { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3462,11 +3473,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3466 "util/configparser.c" +#line 3477 "util/configparser.c" break; - case 351: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG */ -#line 888 "./util/configparser.y" + case 353: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG */ +#line 892 "./util/configparser.y" { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3474,11 +3485,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3478 "util/configparser.c" +#line 3489 "util/configparser.c" break; - case 352: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG */ -#line 897 "./util/configparser.y" + case 354: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG */ +#line 901 "./util/configparser.y" { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3490,11 +3501,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3494 "util/configparser.c" +#line 3505 "util/configparser.c" break; - case 353: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG */ -#line 910 "./util/configparser.y" + case 355: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG */ +#line 914 "./util/configparser.y" { OUTYY(("P(server_max_reuse_tcp_queries:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3504,11 +3515,11 @@ yyreduce: else cfg_parser->cfg->max_reuse_tcp_queries = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3508 "util/configparser.c" +#line 3519 "util/configparser.c" break; - case 354: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG */ -#line 921 "./util/configparser.y" + case 356: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG */ +#line 925 "./util/configparser.y" { OUTYY(("P(server_tcp_reuse_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3518,11 +3529,11 @@ yyreduce: else cfg_parser->cfg->tcp_reuse_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3522 "util/configparser.c" +#line 3533 "util/configparser.c" break; - case 355: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG */ -#line 932 "./util/configparser.y" + case 357: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG */ +#line 936 "./util/configparser.y" { OUTYY(("P(server_tcp_auth_query_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3532,11 +3543,11 @@ yyreduce: else cfg_parser->cfg->tcp_auth_query_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3536 "util/configparser.c" +#line 3547 "util/configparser.c" break; - case 356: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG */ -#line 943 "./util/configparser.y" + case 358: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG */ +#line 947 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3544,11 +3555,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3548 "util/configparser.c" +#line 3559 "util/configparser.c" break; - case 357: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG */ -#line 952 "./util/configparser.y" + case 359: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG */ +#line 956 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3560,11 +3571,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3564 "util/configparser.c" +#line 3575 "util/configparser.c" break; - case 358: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG */ -#line 965 "./util/configparser.y" + case 360: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG */ +#line 969 "./util/configparser.y" { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3572,11 +3583,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3576 "util/configparser.c" +#line 3587 "util/configparser.c" break; - case 359: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG */ -#line 974 "./util/configparser.y" + case 361: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG */ +#line 978 "./util/configparser.y" { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3584,11 +3595,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3588 "util/configparser.c" +#line 3599 "util/configparser.c" break; - case 360: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG */ -#line 983 "./util/configparser.y" + case 362: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG */ +#line 987 "./util/configparser.y" { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3596,31 +3607,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3600 "util/configparser.c" +#line 3611 "util/configparser.c" break; - case 361: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG */ -#line 992 "./util/configparser.y" + case 363: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG */ +#line 996 "./util/configparser.y" { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3610 "util/configparser.c" +#line 3621 "util/configparser.c" break; - case 362: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG */ -#line 999 "./util/configparser.y" + case 364: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG */ +#line 1003 "./util/configparser.y" { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3620 "util/configparser.c" +#line 3631 "util/configparser.c" break; - case 363: /* server_ssl_port: VAR_SSL_PORT STRING_ARG */ -#line 1006 "./util/configparser.y" + case 365: /* server_ssl_port: VAR_SSL_PORT STRING_ARG */ +#line 1010 "./util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3628,21 +3639,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3632 "util/configparser.c" +#line 3643 "util/configparser.c" break; - case 364: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG */ -#line 1015 "./util/configparser.y" + case 366: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG */ +#line 1019 "./util/configparser.y" { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3642 "util/configparser.c" +#line 3653 "util/configparser.c" break; - case 365: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG */ -#line 1022 "./util/configparser.y" + case 367: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG */ +#line 1026 "./util/configparser.y" { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3650,53 +3661,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3654 "util/configparser.c" +#line 3665 "util/configparser.c" break; - case 366: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG */ -#line 1031 "./util/configparser.y" + case 368: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG */ +#line 1035 "./util/configparser.y" { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3665 "util/configparser.c" +#line 3676 "util/configparser.c" break; - case 367: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG */ -#line 1039 "./util/configparser.y" + case 369: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG */ +#line 1043 "./util/configparser.y" { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } -#line 3675 "util/configparser.c" +#line 3686 "util/configparser.c" break; - case 368: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG */ -#line 1046 "./util/configparser.y" + case 370: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG */ +#line 1050 "./util/configparser.y" { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } -#line 3685 "util/configparser.c" +#line 3696 "util/configparser.c" break; - case 369: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG */ -#line 1053 "./util/configparser.y" + case 371: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG */ +#line 1057 "./util/configparser.y" { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3696 "util/configparser.c" +#line 3707 "util/configparser.c" break; - case 370: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG */ -#line 1061 "./util/configparser.y" + case 372: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG */ +#line 1065 "./util/configparser.y" { OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3704,11 +3715,11 @@ yyreduce: else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3708 "util/configparser.c" +#line 3719 "util/configparser.c" break; - case 371: /* server_https_port: VAR_HTTPS_PORT STRING_ARG */ -#line 1070 "./util/configparser.y" + case 373: /* server_https_port: VAR_HTTPS_PORT STRING_ARG */ +#line 1074 "./util/configparser.y" { OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3716,11 +3727,11 @@ yyreduce: else cfg_parser->cfg->https_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3720 "util/configparser.c" +#line 3731 "util/configparser.c" break; - case 372: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG */ -#line 1078 "./util/configparser.y" + case 374: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG */ +#line 1082 "./util/configparser.y" { OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->http_endpoint); @@ -3736,11 +3747,11 @@ yyreduce: cfg_parser->cfg->http_endpoint = (yyvsp[0].str); } } -#line 3740 "util/configparser.c" +#line 3751 "util/configparser.c" break; - case 373: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG */ -#line 1094 "./util/configparser.y" + case 375: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG */ +#line 1098 "./util/configparser.y" { OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3748,11 +3759,11 @@ yyreduce: else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3752 "util/configparser.c" +#line 3763 "util/configparser.c" break; - case 374: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG */ -#line 1102 "./util/configparser.y" + case 376: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG */ +#line 1106 "./util/configparser.y" { OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -3760,11 +3771,11 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3764 "util/configparser.c" +#line 3775 "util/configparser.c" break; - case 375: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG */ -#line 1110 "./util/configparser.y" + case 377: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG */ +#line 1114 "./util/configparser.y" { OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -3772,11 +3783,11 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3776 "util/configparser.c" +#line 3787 "util/configparser.c" break; - case 376: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG */ -#line 1118 "./util/configparser.y" + case 378: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG */ +#line 1122 "./util/configparser.y" { OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3784,11 +3795,11 @@ yyreduce: else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3788 "util/configparser.c" +#line 3799 "util/configparser.c" break; - case 377: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG */ -#line 1126 "./util/configparser.y" + case 379: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG */ +#line 1130 "./util/configparser.y" { OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3796,11 +3807,11 @@ yyreduce: else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3800 "util/configparser.c" +#line 3811 "util/configparser.c" break; - case 378: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG */ -#line 1134 "./util/configparser.y" + case 380: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG */ +#line 1138 "./util/configparser.y" { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3808,11 +3819,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3812 "util/configparser.c" +#line 3823 "util/configparser.c" break; - case 379: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG */ -#line 1143 "./util/configparser.y" + case 381: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG */ +#line 1147 "./util/configparser.y" { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3820,11 +3831,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3824 "util/configparser.c" +#line 3835 "util/configparser.c" break; - case 380: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG */ -#line 1152 "./util/configparser.y" + case 382: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG */ +#line 1156 "./util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3837,11 +3848,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3841 "util/configparser.c" +#line 3852 "util/configparser.c" break; - case 381: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG */ -#line 1166 "./util/configparser.y" + case 383: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG */ +#line 1170 "./util/configparser.y" { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3849,11 +3860,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3853 "util/configparser.c" +#line 3864 "util/configparser.c" break; - case 382: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG */ -#line 1175 "./util/configparser.y" + case 384: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG */ +#line 1179 "./util/configparser.y" { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3861,11 +3872,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3865 "util/configparser.c" +#line 3876 "util/configparser.c" break; - case 383: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG */ -#line 1184 "./util/configparser.y" + case 385: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG */ +#line 1188 "./util/configparser.y" { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3873,11 +3884,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3877 "util/configparser.c" +#line 3888 "util/configparser.c" break; - case 384: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG */ -#line 1193 "./util/configparser.y" + case 386: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG */ +#line 1197 "./util/configparser.y" { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3885,11 +3896,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3889 "util/configparser.c" +#line 3900 "util/configparser.c" break; - case 385: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG */ -#line 1202 "./util/configparser.y" + case 387: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG */ +#line 1206 "./util/configparser.y" { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3897,11 +3908,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3901 "util/configparser.c" +#line 3912 "util/configparser.c" break; - case 386: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG */ -#line 1211 "./util/configparser.y" + case 388: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG */ +#line 1215 "./util/configparser.y" { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3909,31 +3920,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3913 "util/configparser.c" +#line 3924 "util/configparser.c" break; - case 387: /* server_chroot: VAR_CHROOT STRING_ARG */ -#line 1220 "./util/configparser.y" + case 389: /* server_chroot: VAR_CHROOT STRING_ARG */ +#line 1224 "./util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3923 "util/configparser.c" +#line 3934 "util/configparser.c" break; - case 388: /* server_username: VAR_USERNAME STRING_ARG */ -#line 1227 "./util/configparser.y" + case 390: /* server_username: VAR_USERNAME STRING_ARG */ +#line 1231 "./util/configparser.y" { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3933 "util/configparser.c" +#line 3944 "util/configparser.c" break; - case 389: /* server_directory: VAR_DIRECTORY STRING_ARG */ -#line 1234 "./util/configparser.y" + case 391: /* server_directory: VAR_DIRECTORY STRING_ARG */ +#line 1238 "./util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3958,105 +3969,105 @@ yyreduce: } } } -#line 3962 "util/configparser.c" +#line 3973 "util/configparser.c" break; - case 390: /* server_logfile: VAR_LOGFILE STRING_ARG */ -#line 1260 "./util/configparser.y" + case 392: /* server_logfile: VAR_LOGFILE STRING_ARG */ +#line 1264 "./util/configparser.y" { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3973 "util/configparser.c" +#line 3984 "util/configparser.c" break; - case 391: /* server_pidfile: VAR_PIDFILE STRING_ARG */ -#line 1268 "./util/configparser.y" + case 393: /* server_pidfile: VAR_PIDFILE STRING_ARG */ +#line 1272 "./util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3983 "util/configparser.c" +#line 3994 "util/configparser.c" break; - case 392: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG */ -#line 1275 "./util/configparser.y" + case 394: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG */ +#line 1279 "./util/configparser.y" { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3993 "util/configparser.c" +#line 4004 "util/configparser.c" break; - case 393: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG */ -#line 1282 "./util/configparser.y" + case 395: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG */ +#line 1286 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor-file ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 4003 "util/configparser.c" +#line 4014 "util/configparser.c" break; - case 394: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG */ -#line 1289 "./util/configparser.y" + case 396: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG */ +#line 1293 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 4013 "util/configparser.c" +#line 4024 "util/configparser.c" break; - case 395: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG */ -#line 1296 "./util/configparser.y" + case 397: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG */ +#line 1300 "./util/configparser.y" { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4024 "util/configparser.c" +#line 4035 "util/configparser.c" break; - case 396: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG */ -#line 1304 "./util/configparser.y" + case 398: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG */ +#line 1308 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4035 "util/configparser.c" +#line 4046 "util/configparser.c" break; - case 397: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG */ -#line 1312 "./util/configparser.y" + case 399: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG */ +#line 1316 "./util/configparser.y" { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4046 "util/configparser.c" +#line 4057 "util/configparser.c" break; - case 398: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG */ -#line 1320 "./util/configparser.y" + case 400: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG */ +#line 1324 "./util/configparser.y" { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4056 "util/configparser.c" +#line 4067 "util/configparser.c" break; - case 399: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG */ -#line 1327 "./util/configparser.y" + case 401: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG */ +#line 1331 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4066,11 +4077,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4070 "util/configparser.c" +#line 4081 "util/configparser.c" break; - case 400: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG */ -#line 1338 "./util/configparser.y" + case 402: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG */ +#line 1342 "./util/configparser.y" { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4080,21 +4091,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4084 "util/configparser.c" +#line 4095 "util/configparser.c" break; - case 401: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG */ -#line 1349 "./util/configparser.y" + case 403: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG */ +#line 1353 "./util/configparser.y" { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4094 "util/configparser.c" +#line 4105 "util/configparser.c" break; - case 402: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG */ -#line 1356 "./util/configparser.y" + case 404: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG */ +#line 1360 "./util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4102,11 +4113,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4106 "util/configparser.c" +#line 4117 "util/configparser.c" break; - case 403: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG */ -#line 1365 "./util/configparser.y" + case 405: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG */ +#line 1369 "./util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4114,11 +4125,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4118 "util/configparser.c" +#line 4129 "util/configparser.c" break; - case 404: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG */ -#line 1374 "./util/configparser.y" + case 406: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG */ +#line 1378 "./util/configparser.y" { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4126,11 +4137,11 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4130 "util/configparser.c" +#line 4141 "util/configparser.c" break; - case 405: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG */ -#line 1383 "./util/configparser.y" + case 407: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG */ +#line 1387 "./util/configparser.y" { OUTYY(("P(server_hide_user_agent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4138,41 +4149,41 @@ yyreduce: else cfg_parser->cfg->hide_http_user_agent = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4142 "util/configparser.c" +#line 4153 "util/configparser.c" break; - case 406: /* server_identity: VAR_IDENTITY STRING_ARG */ -#line 1392 "./util/configparser.y" + case 408: /* server_identity: VAR_IDENTITY STRING_ARG */ +#line 1396 "./util/configparser.y" { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 4152 "util/configparser.c" +#line 4163 "util/configparser.c" break; - case 407: /* server_version: VAR_VERSION STRING_ARG */ -#line 1399 "./util/configparser.y" + case 409: /* server_version: VAR_VERSION STRING_ARG */ +#line 1403 "./util/configparser.y" { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 4162 "util/configparser.c" +#line 4173 "util/configparser.c" break; - case 408: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG */ -#line 1406 "./util/configparser.y" + case 410: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG */ +#line 1410 "./util/configparser.y" { OUTYY(("P(server_http_user_agent:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->http_user_agent); cfg_parser->cfg->http_user_agent = (yyvsp[0].str); } -#line 4172 "util/configparser.c" +#line 4183 "util/configparser.c" break; - case 409: /* server_nsid: VAR_NSID STRING_ARG */ -#line 1413 "./util/configparser.y" + case 411: /* server_nsid: VAR_NSID STRING_ARG */ +#line 1417 "./util/configparser.y" { OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->nsid_cfg_str); @@ -4187,33 +4198,33 @@ yyreduce: yyerror("the NSID must be either a hex string or an " "ascii character string prepended with ascii_."); } -#line 4191 "util/configparser.c" +#line 4202 "util/configparser.c" break; - case 410: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG */ -#line 1429 "./util/configparser.y" + case 412: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG */ +#line 1433 "./util/configparser.y" { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4202 "util/configparser.c" +#line 4213 "util/configparser.c" break; - case 411: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG */ -#line 1437 "./util/configparser.y" + case 413: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG */ +#line 1441 "./util/configparser.y" { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4213 "util/configparser.c" +#line 4224 "util/configparser.c" break; - case 412: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG */ -#line 1445 "./util/configparser.y" + case 414: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG */ +#line 1449 "./util/configparser.y" { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4222,11 +4233,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4226 "util/configparser.c" +#line 4237 "util/configparser.c" break; - case 413: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG */ -#line 1455 "./util/configparser.y" + case 415: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG */ +#line 1459 "./util/configparser.y" { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4235,11 +4246,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4239 "util/configparser.c" +#line 4250 "util/configparser.c" break; - case 414: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG */ -#line 1465 "./util/configparser.y" + case 416: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG */ +#line 1469 "./util/configparser.y" { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4248,11 +4259,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4252 "util/configparser.c" +#line 4263 "util/configparser.c" break; - case 415: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG */ -#line 1475 "./util/configparser.y" + case 417: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG */ +#line 1479 "./util/configparser.y" { OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4265,22 +4276,22 @@ yyreduce: cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4269 "util/configparser.c" +#line 4280 "util/configparser.c" break; - case 416: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG */ -#line 1489 "./util/configparser.y" + case 418: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG */ +#line 1493 "./util/configparser.y" { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4280 "util/configparser.c" +#line 4291 "util/configparser.c" break; - case 417: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG */ -#line 1497 "./util/configparser.y" + case 419: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG */ +#line 1501 "./util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4292,11 +4303,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4296 "util/configparser.c" +#line 4307 "util/configparser.c" break; - case 418: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG */ -#line 1510 "./util/configparser.y" + case 420: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG */ +#line 1514 "./util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4306,22 +4317,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4310 "util/configparser.c" +#line 4321 "util/configparser.c" break; - case 419: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG */ -#line 1521 "./util/configparser.y" + case 421: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG */ +#line 1525 "./util/configparser.y" { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4321 "util/configparser.c" +#line 4332 "util/configparser.c" break; - case 420: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG */ -#line 1529 "./util/configparser.y" + case 422: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG */ +#line 1533 "./util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -4333,11 +4344,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4337 "util/configparser.c" +#line 4348 "util/configparser.c" break; - case 421: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG */ -#line 1542 "./util/configparser.y" + case 423: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG */ +#line 1546 "./util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4345,11 +4356,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4349 "util/configparser.c" +#line 4360 "util/configparser.c" break; - case 422: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG */ -#line 1551 "./util/configparser.y" + case 424: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG */ +#line 1555 "./util/configparser.y" { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4357,11 +4368,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4361 "util/configparser.c" +#line 4372 "util/configparser.c" break; - case 423: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG */ -#line 1560 "./util/configparser.y" + case 425: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG */ +#line 1564 "./util/configparser.y" { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4369,11 +4380,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4373 "util/configparser.c" +#line 4384 "util/configparser.c" break; - case 424: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG */ -#line 1569 "./util/configparser.y" + case 426: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG */ +#line 1573 "./util/configparser.y" { OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4381,11 +4392,11 @@ yyreduce: else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4385 "util/configparser.c" +#line 4396 "util/configparser.c" break; - case 425: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG */ -#line 1578 "./util/configparser.y" + case 427: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG */ +#line 1582 "./util/configparser.y" { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4394,11 +4405,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4398 "util/configparser.c" +#line 4409 "util/configparser.c" break; - case 426: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG */ -#line 1588 "./util/configparser.y" + case 428: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG */ +#line 1592 "./util/configparser.y" { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4407,22 +4418,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4411 "util/configparser.c" +#line 4422 "util/configparser.c" break; - case 427: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG */ -#line 1598 "./util/configparser.y" + case 429: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG */ +#line 1602 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4422 "util/configparser.c" +#line 4433 "util/configparser.c" break; - case 428: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG */ -#line 1606 "./util/configparser.y" + case 430: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG */ +#line 1610 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -4434,11 +4445,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4438 "util/configparser.c" +#line 4449 "util/configparser.c" break; - case 429: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG */ -#line 1619 "./util/configparser.y" + case 431: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG */ +#line 1623 "./util/configparser.y" { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4446,22 +4457,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4450 "util/configparser.c" +#line 4461 "util/configparser.c" break; - case 430: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG */ -#line 1628 "./util/configparser.y" + case 432: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG */ +#line 1632 "./util/configparser.y" { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4461 "util/configparser.c" +#line 4472 "util/configparser.c" break; - case 431: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG */ -#line 1636 "./util/configparser.y" + case 433: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG */ +#line 1640 "./util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4469,22 +4480,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4473 "util/configparser.c" +#line 4484 "util/configparser.c" break; - case 432: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG */ -#line 1645 "./util/configparser.y" + case 434: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG */ +#line 1649 "./util/configparser.y" { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4484 "util/configparser.c" +#line 4495 "util/configparser.c" break; - case 433: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG */ -#line 1653 "./util/configparser.y" + case 435: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG */ +#line 1657 "./util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -4496,11 +4507,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4500 "util/configparser.c" +#line 4511 "util/configparser.c" break; - case 434: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG */ -#line 1666 "./util/configparser.y" + case 436: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG */ +#line 1670 "./util/configparser.y" { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4508,11 +4519,11 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4512 "util/configparser.c" +#line 4523 "util/configparser.c" break; - case 435: /* server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG */ -#line 1675 "./util/configparser.y" + case 437: /* server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG */ +#line 1679 "./util/configparser.y" { OUTYY(("P(server_infra_cache_max_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4520,11 +4531,11 @@ yyreduce: else cfg_parser->cfg->infra_cache_max_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4524 "util/configparser.c" +#line 4535 "util/configparser.c" break; - case 436: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG */ -#line 1684 "./util/configparser.y" + case 438: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG */ +#line 1688 "./util/configparser.y" { OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4533,21 +4544,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4537 "util/configparser.c" +#line 4548 "util/configparser.c" break; - case 437: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG */ -#line 1694 "./util/configparser.y" + case 439: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG */ +#line 1698 "./util/configparser.y" { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 4547 "util/configparser.c" +#line 4558 "util/configparser.c" break; - case 438: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG */ -#line 1701 "./util/configparser.y" + case 440: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG */ +#line 1705 "./util/configparser.y" { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4556,11 +4567,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4560 "util/configparser.c" +#line 4571 "util/configparser.c" break; - case 439: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG */ -#line 1711 "./util/configparser.y" + case 441: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG */ +#line 1715 "./util/configparser.y" { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4569,11 +4580,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4573 "util/configparser.c" +#line 4584 "util/configparser.c" break; - case 440: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG */ -#line 1721 "./util/configparser.y" + case 442: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG */ +#line 1725 "./util/configparser.y" { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4582,11 +4593,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4586 "util/configparser.c" +#line 4597 "util/configparser.c" break; - case 441: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG */ -#line 1731 "./util/configparser.y" + case 443: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG */ +#line 1735 "./util/configparser.y" { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4595,11 +4606,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4599 "util/configparser.c" +#line 4610 "util/configparser.c" break; - case 442: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG */ -#line 1741 "./util/configparser.y" + case 444: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG */ +#line 1745 "./util/configparser.y" { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4608,11 +4619,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4612 "util/configparser.c" +#line 4623 "util/configparser.c" break; - case 443: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG */ -#line 1751 "./util/configparser.y" + case 445: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG */ +#line 1755 "./util/configparser.y" { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4621,11 +4632,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4625 "util/configparser.c" +#line 4636 "util/configparser.c" break; - case 444: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG */ -#line 1761 "./util/configparser.y" + case 446: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG */ +#line 1765 "./util/configparser.y" { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4634,11 +4645,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4638 "util/configparser.c" +#line 4649 "util/configparser.c" break; - case 445: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG */ -#line 1771 "./util/configparser.y" + case 447: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG */ +#line 1775 "./util/configparser.y" { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4647,41 +4658,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4651 "util/configparser.c" +#line 4662 "util/configparser.c" break; - case 446: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG */ -#line 1781 "./util/configparser.y" + case 448: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG */ +#line 1785 "./util/configparser.y" { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4661 "util/configparser.c" +#line 4672 "util/configparser.c" break; - case 447: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG */ -#line 1788 "./util/configparser.y" + case 449: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG */ +#line 1792 "./util/configparser.y" { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4671 "util/configparser.c" +#line 4682 "util/configparser.c" break; - case 448: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG */ -#line 1795 "./util/configparser.y" + case 450: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG */ +#line 1799 "./util/configparser.y" { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4681 "util/configparser.c" +#line 4692 "util/configparser.c" break; - case 449: /* server_prefetch: VAR_PREFETCH STRING_ARG */ -#line 1802 "./util/configparser.y" + case 451: /* server_prefetch: VAR_PREFETCH STRING_ARG */ +#line 1806 "./util/configparser.y" { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4689,11 +4700,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4693 "util/configparser.c" +#line 4704 "util/configparser.c" break; - case 450: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG */ -#line 1811 "./util/configparser.y" + case 452: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG */ +#line 1815 "./util/configparser.y" { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4701,11 +4712,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4705 "util/configparser.c" +#line 4716 "util/configparser.c" break; - case 451: /* server_deny_any: VAR_DENY_ANY STRING_ARG */ -#line 1820 "./util/configparser.y" + case 453: /* server_deny_any: VAR_DENY_ANY STRING_ARG */ +#line 1824 "./util/configparser.y" { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4713,11 +4724,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4717 "util/configparser.c" +#line 4728 "util/configparser.c" break; - case 452: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG */ -#line 1829 "./util/configparser.y" + case 454: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG */ +#line 1833 "./util/configparser.y" { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4725,21 +4736,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4729 "util/configparser.c" +#line 4740 "util/configparser.c" break; - case 453: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG */ -#line 1838 "./util/configparser.y" + case 455: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG */ +#line 1842 "./util/configparser.y" { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4739 "util/configparser.c" +#line 4750 "util/configparser.c" break; - case 454: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG */ -#line 1845 "./util/configparser.y" + case 456: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG */ +#line 1849 "./util/configparser.y" { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4748,22 +4759,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4752 "util/configparser.c" +#line 4763 "util/configparser.c" break; - case 455: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG */ -#line 1855 "./util/configparser.y" + case 457: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG */ +#line 1859 "./util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_acl_action((yyvsp[0].str)); if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding acl"); } -#line 4763 "util/configparser.c" +#line 4774 "util/configparser.c" break; - case 456: /* server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG */ -#line 1863 "./util/configparser.y" + case 458: /* server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG */ +#line 1867 "./util/configparser.y" { OUTYY(("P(server_interface_action:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_acl_action((yyvsp[0].str)); @@ -4771,21 +4782,21 @@ yyreduce: &cfg_parser->cfg->interface_actions, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding acl"); } -#line 4775 "util/configparser.c" +#line 4786 "util/configparser.c" break; - case 457: /* server_module_conf: VAR_MODULE_CONF STRING_ARG */ -#line 1872 "./util/configparser.y" + case 459: /* server_module_conf: VAR_MODULE_CONF STRING_ARG */ +#line 1876 "./util/configparser.y" { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4785 "util/configparser.c" +#line 4796 "util/configparser.c" break; - case 458: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG */ -#line 1879 "./util/configparser.y" + case 460: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG */ +#line 1883 "./util/configparser.y" { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4802,11 +4813,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4806 "util/configparser.c" +#line 4817 "util/configparser.c" break; - case 459: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG */ -#line 1897 "./util/configparser.y" + case 461: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG */ +#line 1901 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4818,11 +4829,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4822 "util/configparser.c" +#line 4833 "util/configparser.c" break; - case 460: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG */ -#line 1910 "./util/configparser.y" + case 462: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG */ +#line 1914 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4834,11 +4845,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4838 "util/configparser.c" +#line 4849 "util/configparser.c" break; - case 461: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG */ -#line 1923 "./util/configparser.y" + case 463: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG */ +#line 1927 "./util/configparser.y" { OUTYY(("P(server_val_max_restart:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4850,11 +4861,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4854 "util/configparser.c" +#line 4865 "util/configparser.c" break; - case 462: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG */ -#line 1936 "./util/configparser.y" + case 464: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG */ +#line 1940 "./util/configparser.y" { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4862,11 +4873,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4866 "util/configparser.c" +#line 4877 "util/configparser.c" break; - case 463: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG */ -#line 1945 "./util/configparser.y" + case 465: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG */ +#line 1949 "./util/configparser.y" { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4874,11 +4885,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4878 "util/configparser.c" +#line 4889 "util/configparser.c" break; - case 464: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG */ -#line 1954 "./util/configparser.y" + case 466: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG */ +#line 1958 "./util/configparser.y" { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4886,11 +4897,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4890 "util/configparser.c" +#line 4901 "util/configparser.c" break; - case 465: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG */ -#line 1963 "./util/configparser.y" + case 467: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG */ +#line 1967 "./util/configparser.y" { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4898,11 +4909,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4902 "util/configparser.c" +#line 4913 "util/configparser.c" break; - case 466: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG */ -#line 1972 "./util/configparser.y" + case 468: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG */ +#line 1976 "./util/configparser.y" { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4911,11 +4922,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4915 "util/configparser.c" +#line 4926 "util/configparser.c" break; - case 467: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG */ -#line 1982 "./util/configparser.y" + case 469: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG */ +#line 1986 "./util/configparser.y" { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4924,11 +4935,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4928 "util/configparser.c" +#line 4939 "util/configparser.c" break; - case 468: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG */ -#line 1992 "./util/configparser.y" + case 470: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG */ +#line 1996 "./util/configparser.y" { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4938,11 +4949,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4942 "util/configparser.c" +#line 4953 "util/configparser.c" break; - case 469: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG */ -#line 2003 "./util/configparser.y" + case 471: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG */ +#line 2007 "./util/configparser.y" { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4950,11 +4961,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4954 "util/configparser.c" +#line 4965 "util/configparser.c" break; - case 470: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG */ -#line 2012 "./util/configparser.y" + case 472: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG */ +#line 2016 "./util/configparser.y" { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4962,11 +4973,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4966 "util/configparser.c" +#line 4977 "util/configparser.c" break; - case 471: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG */ -#line 2021 "./util/configparser.y" + case 473: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG */ +#line 2025 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4974,11 +4985,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4978 "util/configparser.c" +#line 4989 "util/configparser.c" break; - case 472: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG */ -#line 2030 "./util/configparser.y" + case 474: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG */ +#line 2034 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4986,11 +4997,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4990 "util/configparser.c" +#line 5001 "util/configparser.c" break; - case 473: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG */ -#line 2039 "./util/configparser.y" + case 475: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG */ +#line 2043 "./util/configparser.y" { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4998,11 +5009,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5002 "util/configparser.c" +#line 5013 "util/configparser.c" break; - case 474: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG */ -#line 2048 "./util/configparser.y" + case 476: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG */ +#line 2052 "./util/configparser.y" { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5010,11 +5021,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5014 "util/configparser.c" +#line 5025 "util/configparser.c" break; - case 475: /* server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG */ -#line 2057 "./util/configparser.y" + case 477: /* server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG */ +#line 2061 "./util/configparser.y" { OUTYY(("P(server_ede_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5022,11 +5033,11 @@ yyreduce: else cfg_parser->cfg->ede_serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5026 "util/configparser.c" +#line 5037 "util/configparser.c" break; - case 476: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG */ -#line 2066 "./util/configparser.y" + case 478: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG */ +#line 2070 "./util/configparser.y" { OUTYY(("P(server_serve_original_ttl:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5034,11 +5045,11 @@ yyreduce: else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5038 "util/configparser.c" +#line 5049 "util/configparser.c" break; - case 477: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG */ -#line 2075 "./util/configparser.y" + case 479: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG */ +#line 2079 "./util/configparser.y" { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5050,11 +5061,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5054 "util/configparser.c" +#line 5065 "util/configparser.c" break; - case 478: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG */ -#line 2088 "./util/configparser.y" + case 480: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG */ +#line 2092 "./util/configparser.y" { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5066,11 +5077,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5070 "util/configparser.c" +#line 5081 "util/configparser.c" break; - case 479: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG */ -#line 2101 "./util/configparser.y" + case 481: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG */ +#line 2105 "./util/configparser.y" { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5078,21 +5089,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5082 "util/configparser.c" +#line 5093 "util/configparser.c" break; - case 480: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG */ -#line 2110 "./util/configparser.y" + case 482: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG */ +#line 2114 "./util/configparser.y" { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 5092 "util/configparser.c" +#line 5103 "util/configparser.c" break; - case 481: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG */ -#line 2117 "./util/configparser.y" + case 483: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG */ +#line 2121 "./util/configparser.y" { OUTYY(("P(server_zonemd_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5100,11 +5111,11 @@ yyreduce: else cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5104 "util/configparser.c" +#line 5115 "util/configparser.c" break; - case 482: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG */ -#line 2126 "./util/configparser.y" + case 484: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG */ +#line 2130 "./util/configparser.y" { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5112,11 +5123,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5116 "util/configparser.c" +#line 5127 "util/configparser.c" break; - case 483: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG */ -#line 2135 "./util/configparser.y" + case 485: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG */ +#line 2139 "./util/configparser.y" { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5124,11 +5135,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5128 "util/configparser.c" +#line 5139 "util/configparser.c" break; - case 484: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG */ -#line 2144 "./util/configparser.y" + case 486: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG */ +#line 2148 "./util/configparser.y" { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5136,11 +5147,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5140 "util/configparser.c" +#line 5151 "util/configparser.c" break; - case 485: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG */ -#line 2153 "./util/configparser.y" + case 487: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG */ +#line 2157 "./util/configparser.y" { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5149,22 +5160,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5153 "util/configparser.c" +#line 5164 "util/configparser.c" break; - case 486: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG */ -#line 2162 "./util/configparser.y" + case 488: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG */ +#line 2166 "./util/configparser.y" { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5164 "util/configparser.c" +#line 5175 "util/configparser.c" break; - case 487: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG */ -#line 2170 "./util/configparser.y" + case 489: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG */ +#line 2174 "./util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -5176,22 +5187,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5180 "util/configparser.c" +#line 5191 "util/configparser.c" break; - case 488: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG */ -#line 2183 "./util/configparser.y" + case 490: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG */ +#line 2187 "./util/configparser.y" { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5191 "util/configparser.c" +#line 5202 "util/configparser.c" break; - case 489: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ -#line 2191 "./util/configparser.y" + case 491: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ +#line 2195 "./util/configparser.y" { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5245,21 +5256,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5249 "util/configparser.c" +#line 5260 "util/configparser.c" break; - case 490: /* server_local_data: VAR_LOCAL_DATA STRING_ARG */ -#line 2246 "./util/configparser.y" + case 492: /* server_local_data: VAR_LOCAL_DATA STRING_ARG */ +#line 2250 "./util/configparser.y" { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 5259 "util/configparser.c" +#line 5270 "util/configparser.c" break; - case 491: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ -#line 2253 "./util/configparser.y" + case 493: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ +#line 2257 "./util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5273,11 +5284,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5277 "util/configparser.c" +#line 5288 "util/configparser.c" break; - case 492: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG */ -#line 2268 "./util/configparser.y" + case 494: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG */ +#line 2272 "./util/configparser.y" { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5286,11 +5297,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5290 "util/configparser.c" +#line 5301 "util/configparser.c" break; - case 493: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG */ -#line 2278 "./util/configparser.y" + case 495: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG */ +#line 2282 "./util/configparser.y" { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5299,41 +5310,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5303 "util/configparser.c" +#line 5314 "util/configparser.c" break; - case 494: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG */ -#line 2288 "./util/configparser.y" + case 496: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG */ +#line 2292 "./util/configparser.y" { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5313 "util/configparser.c" +#line 5324 "util/configparser.c" break; - case 495: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG */ -#line 2295 "./util/configparser.y" + case 497: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG */ +#line 2299 "./util/configparser.y" { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5323 "util/configparser.c" +#line 5334 "util/configparser.c" break; - case 496: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG */ -#line 2302 "./util/configparser.y" + case 498: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG */ +#line 2306 "./util/configparser.y" { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 5333 "util/configparser.c" +#line 5344 "util/configparser.c" break; - case 497: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG */ -#line 2309 "./util/configparser.y" + case 499: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG */ +#line 2313 "./util/configparser.y" { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5341,22 +5352,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5345 "util/configparser.c" +#line 5356 "util/configparser.c" break; - case 498: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG */ -#line 2318 "./util/configparser.y" + case 500: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG */ +#line 2322 "./util/configparser.y" { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } -#line 5356 "util/configparser.c" +#line 5367 "util/configparser.c" break; - case 499: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG */ -#line 2326 "./util/configparser.y" + case 501: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG */ +#line 2330 "./util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -5369,11 +5380,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5373 "util/configparser.c" +#line 5384 "util/configparser.c" break; - case 500: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG */ -#line 2340 "./util/configparser.y" + case 502: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG */ +#line 2344 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5393,11 +5404,11 @@ yyreduce: } } } -#line 5397 "util/configparser.c" +#line 5408 "util/configparser.c" break; - case 501: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG */ -#line 2361 "./util/configparser.y" + case 503: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG */ +#line 2365 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5417,11 +5428,11 @@ yyreduce: } } } -#line 5421 "util/configparser.c" +#line 5432 "util/configparser.c" break; - case 502: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ -#line 2382 "./util/configparser.y" + case 504: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ +#line 2386 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -5432,11 +5443,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5436 "util/configparser.c" +#line 5447 "util/configparser.c" break; - case 503: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ -#line 2394 "./util/configparser.y" + case 505: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ +#line 2398 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -5447,11 +5458,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5451 "util/configparser.c" +#line 5462 "util/configparser.c" break; - case 504: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG */ -#line 2406 "./util/configparser.y" + case 506: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG */ +#line 2410 "./util/configparser.y" { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -5462,11 +5473,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5466 "util/configparser.c" +#line 5477 "util/configparser.c" break; - case 505: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG */ -#line 2418 "./util/configparser.y" + case 507: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG */ +#line 2422 "./util/configparser.y" { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -5474,11 +5485,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5478 "util/configparser.c" +#line 5489 "util/configparser.c" break; - case 506: /* server_interface_tag: VAR_INTERFACE_TAG STRING_ARG STRING_ARG */ -#line 2427 "./util/configparser.y" + case 508: /* server_interface_tag: VAR_INTERFACE_TAG STRING_ARG STRING_ARG */ +#line 2431 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5498,11 +5509,11 @@ yyreduce: } } } -#line 5502 "util/configparser.c" +#line 5513 "util/configparser.c" break; - case 507: /* server_interface_tag_action: VAR_INTERFACE_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ -#line 2448 "./util/configparser.y" + case 509: /* server_interface_tag_action: VAR_INTERFACE_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ +#line 2452 "./util/configparser.y" { OUTYY(("P(server_interface_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_actions, @@ -5513,11 +5524,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5517 "util/configparser.c" +#line 5528 "util/configparser.c" break; - case 508: /* server_interface_tag_data: VAR_INTERFACE_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ -#line 2460 "./util/configparser.y" + case 510: /* server_interface_tag_data: VAR_INTERFACE_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ +#line 2464 "./util/configparser.y" { OUTYY(("P(server_interface_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_datas, @@ -5528,11 +5539,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5532 "util/configparser.c" +#line 5543 "util/configparser.c" break; - case 509: /* server_interface_view: VAR_INTERFACE_VIEW STRING_ARG STRING_ARG */ -#line 2472 "./util/configparser.y" + case 511: /* server_interface_view: VAR_INTERFACE_VIEW STRING_ARG STRING_ARG */ +#line 2476 "./util/configparser.y" { OUTYY(("P(server_interface_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->interface_view, @@ -5540,11 +5551,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5544 "util/configparser.c" +#line 5555 "util/configparser.c" break; - case 510: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG */ -#line 2481 "./util/configparser.y" + case 512: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG */ +#line 2485 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5564,11 +5575,11 @@ yyreduce: } } } -#line 5568 "util/configparser.c" +#line 5579 "util/configparser.c" break; - case 511: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG */ -#line 2502 "./util/configparser.y" + case 513: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG */ +#line 2506 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5576,11 +5587,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5580 "util/configparser.c" +#line 5591 "util/configparser.c" break; - case 512: /* server_ratelimit: VAR_RATELIMIT STRING_ARG */ -#line 2511 "./util/configparser.y" + case 514: /* server_ratelimit: VAR_RATELIMIT STRING_ARG */ +#line 2515 "./util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5588,33 +5599,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5592 "util/configparser.c" +#line 5603 "util/configparser.c" break; - case 513: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG */ -#line 2520 "./util/configparser.y" + case 515: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG */ +#line 2524 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5603 "util/configparser.c" +#line 5614 "util/configparser.c" break; - case 514: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG */ -#line 2528 "./util/configparser.y" + case 516: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG */ +#line 2532 "./util/configparser.y" { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5614 "util/configparser.c" +#line 5625 "util/configparser.c" break; - case 515: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG */ -#line 2536 "./util/configparser.y" + case 517: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG */ +#line 2540 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -5626,11 +5637,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5630 "util/configparser.c" +#line 5641 "util/configparser.c" break; - case 516: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG */ -#line 2549 "./util/configparser.y" + case 518: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG */ +#line 2553 "./util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -5642,11 +5653,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5646 "util/configparser.c" +#line 5657 "util/configparser.c" break; - case 517: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG */ -#line 2562 "./util/configparser.y" + case 519: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG */ +#line 2566 "./util/configparser.y" { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5660,11 +5671,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5664 "util/configparser.c" +#line 5675 "util/configparser.c" break; - case 518: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG */ -#line 2577 "./util/configparser.y" + case 520: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG */ +#line 2581 "./util/configparser.y" { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5678,11 +5689,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5682 "util/configparser.c" +#line 5693 "util/configparser.c" break; - case 519: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG */ -#line 2592 "./util/configparser.y" + case 521: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG */ +#line 2596 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5690,11 +5701,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5694 "util/configparser.c" +#line 5705 "util/configparser.c" break; - case 520: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG */ -#line 2601 "./util/configparser.y" + case 522: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG */ +#line 2605 "./util/configparser.y" { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5702,11 +5713,11 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5706 "util/configparser.c" +#line 5717 "util/configparser.c" break; - case 521: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG */ -#line 2610 "./util/configparser.y" + case 523: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG */ +#line 2614 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_backoff:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5715,11 +5726,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5719 "util/configparser.c" +#line 5730 "util/configparser.c" break; - case 522: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG */ -#line 2620 "./util/configparser.y" + case 524: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG */ +#line 2624 "./util/configparser.y" { OUTYY(("P(server_ratelimit_backoff:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5728,11 +5739,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5732 "util/configparser.c" +#line 5743 "util/configparser.c" break; - case 523: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG */ -#line 2630 "./util/configparser.y" + case 525: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG */ +#line 2634 "./util/configparser.y" { OUTYY(("P(server_outbound_msg_retry:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5740,20 +5751,20 @@ yyreduce: else cfg_parser->cfg->outbound_msg_retry = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5744 "util/configparser.c" +#line 5755 "util/configparser.c" break; - case 524: /* server_low_rtt: VAR_LOW_RTT STRING_ARG */ -#line 2639 "./util/configparser.y" + case 526: /* server_low_rtt: VAR_LOW_RTT STRING_ARG */ +#line 2643 "./util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5753 "util/configparser.c" +#line 5764 "util/configparser.c" break; - case 525: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG */ -#line 2645 "./util/configparser.y" + case 527: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG */ +#line 2649 "./util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5761,11 +5772,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5765 "util/configparser.c" +#line 5776 "util/configparser.c" break; - case 526: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG */ -#line 2654 "./util/configparser.y" + case 528: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG */ +#line 2658 "./util/configparser.y" { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5773,11 +5784,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5777 "util/configparser.c" +#line 5788 "util/configparser.c" break; - case 527: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG */ -#line 2663 "./util/configparser.y" + case 529: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG */ +#line 2667 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5786,11 +5797,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5790 "util/configparser.c" +#line 5801 "util/configparser.c" break; - case 528: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG */ -#line 2673 "./util/configparser.y" + case 530: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG */ +#line 2677 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5799,11 +5810,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5803 "util/configparser.c" +#line 5814 "util/configparser.c" break; - case 529: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG */ -#line 2683 "./util/configparser.y" + case 531: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG */ +#line 2687 "./util/configparser.y" { OUTYY(("P(server_pad_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5812,11 +5823,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5816 "util/configparser.c" +#line 5827 "util/configparser.c" break; - case 530: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG */ -#line 2693 "./util/configparser.y" + case 532: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG */ +#line 2697 "./util/configparser.y" { OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5824,11 +5835,11 @@ yyreduce: else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5828 "util/configparser.c" +#line 5839 "util/configparser.c" break; - case 531: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG */ -#line 2702 "./util/configparser.y" + case 533: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG */ +#line 2706 "./util/configparser.y" { OUTYY(("P(server_pad_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5837,11 +5848,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5841 "util/configparser.c" +#line 5852 "util/configparser.c" break; - case 532: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG */ -#line 2712 "./util/configparser.y" + case 534: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG */ +#line 2716 "./util/configparser.y" { OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5849,11 +5860,11 @@ yyreduce: else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5853 "util/configparser.c" +#line 5864 "util/configparser.c" break; - case 533: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG */ -#line 2721 "./util/configparser.y" + case 535: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG */ +#line 2725 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5865,11 +5876,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5869 "util/configparser.c" +#line 5880 "util/configparser.c" break; - case 534: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG */ -#line 2734 "./util/configparser.y" + case 536: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG */ +#line 2738 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5881,11 +5892,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5885 "util/configparser.c" +#line 5896 "util/configparser.c" break; - case 535: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG */ -#line 2747 "./util/configparser.y" + case 537: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG */ +#line 2751 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5896,11 +5907,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5900 "util/configparser.c" +#line 5911 "util/configparser.c" break; - case 536: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG */ -#line 2759 "./util/configparser.y" + case 538: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG */ +#line 2763 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5913,11 +5924,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5917 "util/configparser.c" +#line 5928 "util/configparser.c" break; - case 537: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG */ -#line 2773 "./util/configparser.y" + case 539: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG */ +#line 2777 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5928,11 +5939,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5932 "util/configparser.c" +#line 5943 "util/configparser.c" break; - case 538: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG */ -#line 2785 "./util/configparser.y" + case 540: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG */ +#line 2789 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5945,11 +5956,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5949 "util/configparser.c" +#line 5960 "util/configparser.c" break; - case 539: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG */ -#line 2799 "./util/configparser.y" + case 541: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG */ +#line 2803 "./util/configparser.y" { OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert( @@ -5957,11 +5968,11 @@ yyreduce: fatal_exit("out of memory adding " "edns-client-string"); } -#line 5961 "util/configparser.c" +#line 5972 "util/configparser.c" break; - case 540: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG */ -#line 2808 "./util/configparser.y" + case 542: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG */ +#line 2812 "./util/configparser.y" { OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5971,11 +5982,11 @@ yyreduce: else cfg_parser->cfg->edns_client_string_opcode = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5975 "util/configparser.c" +#line 5986 "util/configparser.c" break; - case 541: /* server_ede: VAR_EDE STRING_ARG */ -#line 2819 "./util/configparser.y" + case 543: /* server_ede: VAR_EDE STRING_ARG */ +#line 2823 "./util/configparser.y" { OUTYY(("P(server_ede:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5983,11 +5994,11 @@ yyreduce: else cfg_parser->cfg->ede = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5987 "util/configparser.c" +#line 5998 "util/configparser.c" break; - case 542: /* stub_name: VAR_NAME STRING_ARG */ -#line 2828 "./util/configparser.y" + case 544: /* stub_name: VAR_NAME STRING_ARG */ +#line 2832 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5996,31 +6007,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 6000 "util/configparser.c" +#line 6011 "util/configparser.c" break; - case 543: /* stub_host: VAR_STUB_HOST STRING_ARG */ -#line 2838 "./util/configparser.y" + case 545: /* stub_host: VAR_STUB_HOST STRING_ARG */ +#line 2842 "./util/configparser.y" { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6010 "util/configparser.c" +#line 6021 "util/configparser.c" break; - case 544: /* stub_addr: VAR_STUB_ADDR STRING_ARG */ -#line 2845 "./util/configparser.y" + case 546: /* stub_addr: VAR_STUB_ADDR STRING_ARG */ +#line 2849 "./util/configparser.y" { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6020 "util/configparser.c" +#line 6031 "util/configparser.c" break; - case 545: /* stub_first: VAR_STUB_FIRST STRING_ARG */ -#line 2852 "./util/configparser.y" + case 547: /* stub_first: VAR_STUB_FIRST STRING_ARG */ +#line 2856 "./util/configparser.y" { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6028,11 +6039,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6032 "util/configparser.c" +#line 6043 "util/configparser.c" break; - case 546: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG */ -#line 2861 "./util/configparser.y" + case 548: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG */ +#line 2865 "./util/configparser.y" { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6040,11 +6051,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6044 "util/configparser.c" +#line 6055 "util/configparser.c" break; - case 547: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG */ -#line 2870 "./util/configparser.y" + case 549: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG */ +#line 2874 "./util/configparser.y" { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6053,11 +6064,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6057 "util/configparser.c" +#line 6068 "util/configparser.c" break; - case 548: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG */ -#line 2880 "./util/configparser.y" + case 550: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG */ +#line 2884 "./util/configparser.y" { OUTYY(("P(stub-tcp-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6066,11 +6077,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6070 "util/configparser.c" +#line 6081 "util/configparser.c" break; - case 549: /* stub_prime: VAR_STUB_PRIME STRING_ARG */ -#line 2890 "./util/configparser.y" + case 551: /* stub_prime: VAR_STUB_PRIME STRING_ARG */ +#line 2894 "./util/configparser.y" { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6079,11 +6090,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6083 "util/configparser.c" +#line 6094 "util/configparser.c" break; - case 550: /* forward_name: VAR_NAME STRING_ARG */ -#line 2900 "./util/configparser.y" + case 552: /* forward_name: VAR_NAME STRING_ARG */ +#line 2904 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -6092,31 +6103,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 6096 "util/configparser.c" +#line 6107 "util/configparser.c" break; - case 551: /* forward_host: VAR_FORWARD_HOST STRING_ARG */ -#line 2910 "./util/configparser.y" + case 553: /* forward_host: VAR_FORWARD_HOST STRING_ARG */ +#line 2914 "./util/configparser.y" { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6106 "util/configparser.c" +#line 6117 "util/configparser.c" break; - case 552: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG */ -#line 2917 "./util/configparser.y" + case 554: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG */ +#line 2921 "./util/configparser.y" { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6116 "util/configparser.c" +#line 6127 "util/configparser.c" break; - case 553: /* forward_first: VAR_FORWARD_FIRST STRING_ARG */ -#line 2924 "./util/configparser.y" + case 555: /* forward_first: VAR_FORWARD_FIRST STRING_ARG */ +#line 2928 "./util/configparser.y" { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6124,11 +6135,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6128 "util/configparser.c" +#line 6139 "util/configparser.c" break; - case 554: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG */ -#line 2933 "./util/configparser.y" + case 556: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG */ +#line 2937 "./util/configparser.y" { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6136,11 +6147,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6140 "util/configparser.c" +#line 6151 "util/configparser.c" break; - case 555: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG */ -#line 2942 "./util/configparser.y" + case 557: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG */ +#line 2946 "./util/configparser.y" { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6149,11 +6160,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6153 "util/configparser.c" +#line 6164 "util/configparser.c" break; - case 556: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG */ -#line 2952 "./util/configparser.y" + case 558: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG */ +#line 2956 "./util/configparser.y" { OUTYY(("P(forward-tcp-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6162,11 +6173,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6166 "util/configparser.c" +#line 6177 "util/configparser.c" break; - case 557: /* auth_name: VAR_NAME STRING_ARG */ -#line 2962 "./util/configparser.y" + case 559: /* auth_name: VAR_NAME STRING_ARG */ +#line 2966 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -6175,52 +6186,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 6179 "util/configparser.c" +#line 6190 "util/configparser.c" break; - case 558: /* auth_zonefile: VAR_ZONEFILE STRING_ARG */ -#line 2972 "./util/configparser.y" + case 560: /* auth_zonefile: VAR_ZONEFILE STRING_ARG */ +#line 2976 "./util/configparser.y" { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 6189 "util/configparser.c" +#line 6200 "util/configparser.c" break; - case 559: /* auth_master: VAR_MASTER STRING_ARG */ -#line 2979 "./util/configparser.y" + case 561: /* auth_master: VAR_MASTER STRING_ARG */ +#line 2983 "./util/configparser.y" { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6199 "util/configparser.c" +#line 6210 "util/configparser.c" break; - case 560: /* auth_url: VAR_URL STRING_ARG */ -#line 2986 "./util/configparser.y" + case 562: /* auth_url: VAR_URL STRING_ARG */ +#line 2990 "./util/configparser.y" { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6209 "util/configparser.c" +#line 6220 "util/configparser.c" break; - case 561: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG */ -#line 2993 "./util/configparser.y" + case 563: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG */ +#line 2997 "./util/configparser.y" { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6220 "util/configparser.c" +#line 6231 "util/configparser.c" break; - case 562: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG */ -#line 3001 "./util/configparser.y" + case 564: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG */ +#line 3005 "./util/configparser.y" { OUTYY(("P(zonemd-check:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6229,11 +6240,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6233 "util/configparser.c" +#line 6244 "util/configparser.c" break; - case 563: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG */ -#line 3011 "./util/configparser.y" + case 565: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG */ +#line 3015 "./util/configparser.y" { OUTYY(("P(zonemd-reject-absence:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6242,11 +6253,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6246 "util/configparser.c" +#line 6257 "util/configparser.c" break; - case 564: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG */ -#line 3021 "./util/configparser.y" + case 566: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG */ +#line 3025 "./util/configparser.y" { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6255,11 +6266,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6259 "util/configparser.c" +#line 6270 "util/configparser.c" break; - case 565: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG */ -#line 3031 "./util/configparser.y" + case 567: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG */ +#line 3035 "./util/configparser.y" { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6268,11 +6279,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6272 "util/configparser.c" +#line 6283 "util/configparser.c" break; - case 566: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG */ -#line 3041 "./util/configparser.y" + case 568: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG */ +#line 3045 "./util/configparser.y" { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6281,11 +6292,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6285 "util/configparser.c" +#line 6296 "util/configparser.c" break; - case 567: /* view_name: VAR_NAME STRING_ARG */ -#line 3051 "./util/configparser.y" + case 569: /* view_name: VAR_NAME STRING_ARG */ +#line 3055 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -6294,11 +6305,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 6298 "util/configparser.c" +#line 6309 "util/configparser.c" break; - case 568: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ -#line 3061 "./util/configparser.y" + case 570: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ +#line 3065 "./util/configparser.y" { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -6353,11 +6364,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 6357 "util/configparser.c" +#line 6368 "util/configparser.c" break; - case 569: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ -#line 3117 "./util/configparser.y" + case 571: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ +#line 3121 "./util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6366,33 +6377,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 6370 "util/configparser.c" +#line 6381 "util/configparser.c" break; - case 570: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ -#line 3127 "./util/configparser.y" + case 572: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ +#line 3131 "./util/configparser.y" { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6381 "util/configparser.c" +#line 6392 "util/configparser.c" break; - case 571: /* view_local_data: VAR_LOCAL_DATA STRING_ARG */ -#line 3135 "./util/configparser.y" + case 573: /* view_local_data: VAR_LOCAL_DATA STRING_ARG */ +#line 3139 "./util/configparser.y" { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 6392 "util/configparser.c" +#line 6403 "util/configparser.c" break; - case 572: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ -#line 3143 "./util/configparser.y" + case 574: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ +#line 3147 "./util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -6406,11 +6417,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 6410 "util/configparser.c" +#line 6421 "util/configparser.c" break; - case 573: /* view_first: VAR_VIEW_FIRST STRING_ARG */ -#line 3158 "./util/configparser.y" + case 575: /* view_first: VAR_VIEW_FIRST STRING_ARG */ +#line 3162 "./util/configparser.y" { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6418,20 +6429,20 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6422 "util/configparser.c" +#line 6433 "util/configparser.c" break; - case 574: /* rcstart: VAR_REMOTE_CONTROL */ -#line 3167 "./util/configparser.y" + case 576: /* rcstart: VAR_REMOTE_CONTROL */ +#line 3171 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); cfg_parser->started_toplevel = 1; } -#line 6431 "util/configparser.c" +#line 6442 "util/configparser.c" break; - case 585: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG */ -#line 3179 "./util/configparser.y" + case 587: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG */ +#line 3183 "./util/configparser.y" { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6440,11 +6451,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6444 "util/configparser.c" +#line 6455 "util/configparser.c" break; - case 586: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG */ -#line 3189 "./util/configparser.y" + case 588: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG */ +#line 3193 "./util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6452,80 +6463,80 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6456 "util/configparser.c" +#line 6467 "util/configparser.c" break; - case 587: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG */ -#line 3198 "./util/configparser.y" + case 589: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG */ +#line 3202 "./util/configparser.y" { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6466 "util/configparser.c" +#line 6477 "util/configparser.c" break; - case 588: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG */ -#line 3205 "./util/configparser.y" + case 590: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG */ +#line 3209 "./util/configparser.y" { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6476 "util/configparser.c" +#line 6487 "util/configparser.c" break; - case 589: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG */ -#line 3212 "./util/configparser.y" + case 591: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG */ +#line 3216 "./util/configparser.y" { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 6486 "util/configparser.c" +#line 6497 "util/configparser.c" break; - case 590: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG */ -#line 3219 "./util/configparser.y" + case 592: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG */ +#line 3223 "./util/configparser.y" { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 6496 "util/configparser.c" +#line 6507 "util/configparser.c" break; - case 591: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG */ -#line 3226 "./util/configparser.y" + case 593: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG */ +#line 3230 "./util/configparser.y" { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 6506 "util/configparser.c" +#line 6517 "util/configparser.c" break; - case 592: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG */ -#line 3233 "./util/configparser.y" + case 594: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG */ +#line 3237 "./util/configparser.y" { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 6516 "util/configparser.c" +#line 6527 "util/configparser.c" break; - case 593: /* dtstart: VAR_DNSTAP */ -#line 3240 "./util/configparser.y" + case 595: /* dtstart: VAR_DNSTAP */ +#line 3244 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); cfg_parser->started_toplevel = 1; } -#line 6525 "util/configparser.c" +#line 6536 "util/configparser.c" break; - case 615: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG */ -#line 3261 "./util/configparser.y" + case 617: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG */ +#line 3265 "./util/configparser.y" { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6533,11 +6544,11 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6537 "util/configparser.c" +#line 6548 "util/configparser.c" break; - case 616: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG */ -#line 3270 "./util/configparser.y" + case 618: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG */ +#line 3274 "./util/configparser.y" { OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6546,31 +6557,31 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6550 "util/configparser.c" +#line 6561 "util/configparser.c" break; - case 617: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG */ -#line 3280 "./util/configparser.y" + case 619: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG */ +#line 3284 "./util/configparser.y" { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 6560 "util/configparser.c" +#line 6571 "util/configparser.c" break; - case 618: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG */ -#line 3287 "./util/configparser.y" + case 620: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG */ +#line 3291 "./util/configparser.y" { OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_ip); cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); } -#line 6570 "util/configparser.c" +#line 6581 "util/configparser.c" break; - case 619: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG */ -#line 3294 "./util/configparser.y" + case 621: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG */ +#line 3298 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6578,51 +6589,51 @@ yyreduce: else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6582 "util/configparser.c" +#line 6593 "util/configparser.c" break; - case 620: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG */ -#line 3303 "./util/configparser.y" + case 622: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG */ +#line 3307 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_server_name); cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); } -#line 6592 "util/configparser.c" +#line 6603 "util/configparser.c" break; - case 621: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG */ -#line 3310 "./util/configparser.y" + case 623: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG */ +#line 3314 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_cert_bundle); cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); } -#line 6602 "util/configparser.c" +#line 6613 "util/configparser.c" break; - case 622: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG */ -#line 3317 "./util/configparser.y" + case 624: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG */ +#line 3321 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_key_file); cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); } -#line 6612 "util/configparser.c" +#line 6623 "util/configparser.c" break; - case 623: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG */ -#line 3324 "./util/configparser.y" + case 625: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG */ +#line 3328 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_cert_file); cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); } -#line 6622 "util/configparser.c" +#line 6633 "util/configparser.c" break; - case 624: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG */ -#line 3331 "./util/configparser.y" + case 626: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG */ +#line 3335 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6630,11 +6641,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6634 "util/configparser.c" +#line 6645 "util/configparser.c" break; - case 625: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG */ -#line 3340 "./util/configparser.y" + case 627: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG */ +#line 3344 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6642,31 +6653,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6646 "util/configparser.c" +#line 6657 "util/configparser.c" break; - case 626: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG */ -#line 3349 "./util/configparser.y" + case 628: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG */ +#line 3353 "./util/configparser.y" { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 6656 "util/configparser.c" +#line 6667 "util/configparser.c" break; - case 627: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG */ -#line 3356 "./util/configparser.y" + case 629: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG */ +#line 3360 "./util/configparser.y" { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 6666 "util/configparser.c" +#line 6677 "util/configparser.c" break; - case 628: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG */ -#line 3363 "./util/configparser.y" + case 630: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG */ +#line 3367 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6675,11 +6686,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6679 "util/configparser.c" +#line 6690 "util/configparser.c" break; - case 629: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG */ -#line 3373 "./util/configparser.y" + case 631: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG */ +#line 3377 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6688,11 +6699,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6692 "util/configparser.c" +#line 6703 "util/configparser.c" break; - case 630: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG */ -#line 3383 "./util/configparser.y" + case 632: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG */ +#line 3387 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6701,11 +6712,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6705 "util/configparser.c" +#line 6716 "util/configparser.c" break; - case 631: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG */ -#line 3393 "./util/configparser.y" + case 633: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG */ +#line 3397 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6714,11 +6725,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6718 "util/configparser.c" +#line 6729 "util/configparser.c" break; - case 632: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG */ -#line 3403 "./util/configparser.y" + case 634: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG */ +#line 3407 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6727,11 +6738,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6731 "util/configparser.c" +#line 6742 "util/configparser.c" break; - case 633: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG */ -#line 3413 "./util/configparser.y" + case 635: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG */ +#line 3417 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6740,49 +6751,49 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6744 "util/configparser.c" +#line 6755 "util/configparser.c" break; - case 634: /* pythonstart: VAR_PYTHON */ -#line 3423 "./util/configparser.y" + case 636: /* pythonstart: VAR_PYTHON */ +#line 3427 "./util/configparser.y" { OUTYY(("\nP(python:)\n")); cfg_parser->started_toplevel = 1; } -#line 6753 "util/configparser.c" +#line 6764 "util/configparser.c" break; - case 638: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG */ -#line 3433 "./util/configparser.y" + case 640: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG */ +#line 3437 "./util/configparser.y" { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6763 "util/configparser.c" +#line 6774 "util/configparser.c" break; - case 639: /* dynlibstart: VAR_DYNLIB */ -#line 3439 "./util/configparser.y" + case 641: /* dynlibstart: VAR_DYNLIB */ +#line 3443 "./util/configparser.y" { OUTYY(("\nP(dynlib:)\n")); cfg_parser->started_toplevel = 1; } -#line 6772 "util/configparser.c" +#line 6783 "util/configparser.c" break; - case 643: /* dl_file: VAR_DYNLIB_FILE STRING_ARG */ -#line 3449 "./util/configparser.y" + case 645: /* dl_file: VAR_DYNLIB_FILE STRING_ARG */ +#line 3453 "./util/configparser.y" { OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6782 "util/configparser.c" +#line 6793 "util/configparser.c" break; - case 644: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG */ -#line 3455 "./util/configparser.y" + case 646: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG */ +#line 3459 "./util/configparser.y" { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6791,21 +6802,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6795 "util/configparser.c" +#line 6806 "util/configparser.c" break; - case 645: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG */ -#line 3465 "./util/configparser.y" + case 647: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG */ +#line 3469 "./util/configparser.y" { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 6805 "util/configparser.c" +#line 6816 "util/configparser.c" break; - case 646: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ -#line 3472 "./util/configparser.y" + case 648: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ +#line 3476 "./util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6813,31 +6824,31 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6817 "util/configparser.c" +#line 6828 "util/configparser.c" break; - case 647: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ -#line 3481 "./util/configparser.y" + case 649: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ +#line 3485 "./util/configparser.y" { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6828 "util/configparser.c" +#line 6839 "util/configparser.c" break; - case 648: /* dnscstart: VAR_DNSCRYPT */ -#line 3489 "./util/configparser.y" + case 650: /* dnscstart: VAR_DNSCRYPT */ +#line 3493 "./util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); cfg_parser->started_toplevel = 1; } -#line 6837 "util/configparser.c" +#line 6848 "util/configparser.c" break; - case 661: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG */ -#line 3506 "./util/configparser.y" + case 663: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG */ +#line 3510 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6845,11 +6856,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6849 "util/configparser.c" +#line 6860 "util/configparser.c" break; - case 662: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG */ -#line 3516 "./util/configparser.y" + case 664: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG */ +#line 3520 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6857,21 +6868,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6861 "util/configparser.c" +#line 6872 "util/configparser.c" break; - case 663: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG */ -#line 3525 "./util/configparser.y" + case 665: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG */ +#line 3529 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 6871 "util/configparser.c" +#line 6882 "util/configparser.c" break; - case 664: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG */ -#line 3532 "./util/configparser.y" + case 666: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG */ +#line 3536 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -6879,21 +6890,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6883 "util/configparser.c" +#line 6894 "util/configparser.c" break; - case 665: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG */ -#line 3541 "./util/configparser.y" + case 667: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG */ +#line 3545 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 6893 "util/configparser.c" +#line 6904 "util/configparser.c" break; - case 666: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG */ -#line 3548 "./util/configparser.y" + case 668: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG */ +#line 3552 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -6901,22 +6912,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6905 "util/configparser.c" +#line 6916 "util/configparser.c" break; - case 667: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG */ -#line 3557 "./util/configparser.y" + case 669: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG */ +#line 3561 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6916 "util/configparser.c" +#line 6927 "util/configparser.c" break; - case 668: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG */ -#line 3565 "./util/configparser.y" + case 670: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG */ +#line 3569 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -6928,22 +6939,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6932 "util/configparser.c" +#line 6943 "util/configparser.c" break; - case 669: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG */ -#line 3578 "./util/configparser.y" + case 671: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG */ +#line 3582 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6943 "util/configparser.c" +#line 6954 "util/configparser.c" break; - case 670: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG */ -#line 3586 "./util/configparser.y" + case 672: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG */ +#line 3590 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -6955,20 +6966,20 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6959 "util/configparser.c" +#line 6970 "util/configparser.c" break; - case 671: /* cachedbstart: VAR_CACHEDB */ -#line 3599 "./util/configparser.y" + case 673: /* cachedbstart: VAR_CACHEDB */ +#line 3603 "./util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); cfg_parser->started_toplevel = 1; } -#line 6968 "util/configparser.c" +#line 6979 "util/configparser.c" break; - case 680: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG */ -#line 3611 "./util/configparser.y" + case 682: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG */ +#line 3615 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6979,11 +6990,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6983 "util/configparser.c" +#line 6994 "util/configparser.c" break; - case 681: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG */ -#line 3623 "./util/configparser.y" + case 683: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG */ +#line 3627 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6994,11 +7005,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6998 "util/configparser.c" +#line 7009 "util/configparser.c" break; - case 682: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG */ -#line 3635 "./util/configparser.y" + case 684: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG */ +#line 3639 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -7009,11 +7020,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 7013 "util/configparser.c" +#line 7024 "util/configparser.c" break; - case 683: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG */ -#line 3647 "./util/configparser.y" + case 685: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG */ +#line 3651 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -7027,11 +7038,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 7031 "util/configparser.c" +#line 7042 "util/configparser.c" break; - case 684: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG */ -#line 3662 "./util/configparser.y" + case 686: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG */ +#line 3666 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -7043,11 +7054,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 7047 "util/configparser.c" +#line 7058 "util/configparser.c" break; - case 685: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG */ -#line 3675 "./util/configparser.y" + case 687: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG */ +#line 3679 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); @@ -7059,11 +7070,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 7063 "util/configparser.c" +#line 7074 "util/configparser.c" break; - case 686: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG */ -#line 3688 "./util/configparser.y" + case 688: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG */ +#line 3692 "./util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -7073,20 +7084,51 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 7077 "util/configparser.c" +#line 7088 "util/configparser.c" break; - case 687: /* ipsetstart: VAR_IPSET */ -#line 3699 "./util/configparser.y" + case 689: /* server_answer_cookie: VAR_ANSWER_COOKIE STRING_ARG */ +#line 3703 "./util/configparser.y" + { + OUTYY(("P(server_answer_cookie:%s)\n", (yyvsp[0].str))); + if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->do_answer_cookie = (strcmp((yyvsp[0].str), "yes")==0); + free((yyvsp[0].str)); + } +#line 7100 "util/configparser.c" + break; + + case 690: /* server_cookie_secret: VAR_COOKIE_SECRET STRING_ARG */ +#line 3712 "./util/configparser.y" + { + uint8_t secret[32]; + size_t secret_len = sizeof(secret); + + OUTYY(("P(server_cookie_secret:%s)\n", (yyvsp[0].str))); + if (sldns_str2wire_hex_buf((yyvsp[0].str), secret, &secret_len) + || ( secret_len != 16)) + yyerror("expected 128 bit hex string"); + else { + cfg_parser->cfg->cookie_secret_len = secret_len; + memcpy(cfg_parser->cfg->cookie_secret, secret, sizeof(secret)); + } + free((yyvsp[0].str)); + } +#line 7119 "util/configparser.c" + break; + + case 691: /* ipsetstart: VAR_IPSET */ +#line 3727 "./util/configparser.y" { OUTYY(("\nP(ipset:)\n")); cfg_parser->started_toplevel = 1; } -#line 7086 "util/configparser.c" +#line 7128 "util/configparser.c" break; - case 692: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG */ -#line 3709 "./util/configparser.y" + case 696: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG */ +#line 3737 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -7100,11 +7142,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 7104 "util/configparser.c" +#line 7146 "util/configparser.c" break; - case 693: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG */ -#line 3724 "./util/configparser.y" + case 697: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG */ +#line 3752 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -7118,11 +7160,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 7122 "util/configparser.c" +#line 7164 "util/configparser.c" break; -#line 7126 "util/configparser.c" +#line 7168 "util/configparser.c" default: break; } @@ -7315,7 +7357,7 @@ yyreturnlab: return yyresult; } -#line 3738 "./util/configparser.y" +#line 3766 "./util/configparser.y" /* parse helper routines could be here */ @@ -7345,10 +7387,11 @@ validate_acl_action(const char* action) strcmp(action, "refuse_non_local")!=0 && strcmp(action, "allow_setrd")!=0 && strcmp(action, "allow")!=0 && - strcmp(action, "allow_snoop")!=0) + strcmp(action, "allow_snoop")!=0 && + strcmp(action, "allow_cookie")!=0) { yyerror("expected deny, refuse, deny_non_local, " - "refuse_non_local, allow, allow_setrd or " - "allow_snoop as access control action"); + "refuse_non_local, allow, allow_setrd, " + "allow_snoop or allow_cookie as access control action"); } } diff --git a/util/configparser.h b/util/configparser.h index 18101d2cc..7ed947f1e 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -348,42 +348,44 @@ extern int yydebug; VAR_ALLOW_NOTIFY = 549, /* VAR_ALLOW_NOTIFY */ VAR_TLS_WIN_CERT = 550, /* VAR_TLS_WIN_CERT */ VAR_TCP_CONNECTION_LIMIT = 551, /* VAR_TCP_CONNECTION_LIMIT */ - VAR_FORWARD_NO_CACHE = 552, /* VAR_FORWARD_NO_CACHE */ - VAR_STUB_NO_CACHE = 553, /* VAR_STUB_NO_CACHE */ - VAR_LOG_SERVFAIL = 554, /* VAR_LOG_SERVFAIL */ - VAR_DENY_ANY = 555, /* VAR_DENY_ANY */ - VAR_UNKNOWN_SERVER_TIME_LIMIT = 556, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ - VAR_LOG_TAG_QUERYREPLY = 557, /* VAR_LOG_TAG_QUERYREPLY */ - VAR_STREAM_WAIT_SIZE = 558, /* VAR_STREAM_WAIT_SIZE */ - VAR_TLS_CIPHERS = 559, /* VAR_TLS_CIPHERS */ - VAR_TLS_CIPHERSUITES = 560, /* VAR_TLS_CIPHERSUITES */ - VAR_TLS_USE_SNI = 561, /* VAR_TLS_USE_SNI */ - VAR_IPSET = 562, /* VAR_IPSET */ - VAR_IPSET_NAME_V4 = 563, /* VAR_IPSET_NAME_V4 */ - VAR_IPSET_NAME_V6 = 564, /* VAR_IPSET_NAME_V6 */ - VAR_TLS_SESSION_TICKET_KEYS = 565, /* VAR_TLS_SESSION_TICKET_KEYS */ - VAR_RPZ = 566, /* VAR_RPZ */ - VAR_TAGS = 567, /* VAR_TAGS */ - VAR_RPZ_ACTION_OVERRIDE = 568, /* VAR_RPZ_ACTION_OVERRIDE */ - VAR_RPZ_CNAME_OVERRIDE = 569, /* VAR_RPZ_CNAME_OVERRIDE */ - VAR_RPZ_LOG = 570, /* VAR_RPZ_LOG */ - VAR_RPZ_LOG_NAME = 571, /* VAR_RPZ_LOG_NAME */ - VAR_DYNLIB = 572, /* VAR_DYNLIB */ - VAR_DYNLIB_FILE = 573, /* VAR_DYNLIB_FILE */ - VAR_EDNS_CLIENT_STRING = 574, /* VAR_EDNS_CLIENT_STRING */ - VAR_EDNS_CLIENT_STRING_OPCODE = 575, /* VAR_EDNS_CLIENT_STRING_OPCODE */ - VAR_NSID = 576, /* VAR_NSID */ - VAR_ZONEMD_PERMISSIVE_MODE = 577, /* VAR_ZONEMD_PERMISSIVE_MODE */ - VAR_ZONEMD_CHECK = 578, /* VAR_ZONEMD_CHECK */ - VAR_ZONEMD_REJECT_ABSENCE = 579, /* VAR_ZONEMD_REJECT_ABSENCE */ - VAR_RPZ_SIGNAL_NXDOMAIN_RA = 580, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */ - VAR_INTERFACE_AUTOMATIC_PORTS = 581, /* VAR_INTERFACE_AUTOMATIC_PORTS */ - VAR_EDE = 582, /* VAR_EDE */ - VAR_INTERFACE_ACTION = 583, /* VAR_INTERFACE_ACTION */ - VAR_INTERFACE_VIEW = 584, /* VAR_INTERFACE_VIEW */ - VAR_INTERFACE_TAG = 585, /* VAR_INTERFACE_TAG */ - VAR_INTERFACE_TAG_ACTION = 586, /* VAR_INTERFACE_TAG_ACTION */ - VAR_INTERFACE_TAG_DATA = 587 /* VAR_INTERFACE_TAG_DATA */ + VAR_ANSWER_COOKIE = 552, /* VAR_ANSWER_COOKIE */ + VAR_COOKIE_SECRET = 553, /* VAR_COOKIE_SECRET */ + VAR_FORWARD_NO_CACHE = 554, /* VAR_FORWARD_NO_CACHE */ + VAR_STUB_NO_CACHE = 555, /* VAR_STUB_NO_CACHE */ + VAR_LOG_SERVFAIL = 556, /* VAR_LOG_SERVFAIL */ + VAR_DENY_ANY = 557, /* VAR_DENY_ANY */ + VAR_UNKNOWN_SERVER_TIME_LIMIT = 558, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */ + VAR_LOG_TAG_QUERYREPLY = 559, /* VAR_LOG_TAG_QUERYREPLY */ + VAR_STREAM_WAIT_SIZE = 560, /* VAR_STREAM_WAIT_SIZE */ + VAR_TLS_CIPHERS = 561, /* VAR_TLS_CIPHERS */ + VAR_TLS_CIPHERSUITES = 562, /* VAR_TLS_CIPHERSUITES */ + VAR_TLS_USE_SNI = 563, /* VAR_TLS_USE_SNI */ + VAR_IPSET = 564, /* VAR_IPSET */ + VAR_IPSET_NAME_V4 = 565, /* VAR_IPSET_NAME_V4 */ + VAR_IPSET_NAME_V6 = 566, /* VAR_IPSET_NAME_V6 */ + VAR_TLS_SESSION_TICKET_KEYS = 567, /* VAR_TLS_SESSION_TICKET_KEYS */ + VAR_RPZ = 568, /* VAR_RPZ */ + VAR_TAGS = 569, /* VAR_TAGS */ + VAR_RPZ_ACTION_OVERRIDE = 570, /* VAR_RPZ_ACTION_OVERRIDE */ + VAR_RPZ_CNAME_OVERRIDE = 571, /* VAR_RPZ_CNAME_OVERRIDE */ + VAR_RPZ_LOG = 572, /* VAR_RPZ_LOG */ + VAR_RPZ_LOG_NAME = 573, /* VAR_RPZ_LOG_NAME */ + VAR_DYNLIB = 574, /* VAR_DYNLIB */ + VAR_DYNLIB_FILE = 575, /* VAR_DYNLIB_FILE */ + VAR_EDNS_CLIENT_STRING = 576, /* VAR_EDNS_CLIENT_STRING */ + VAR_EDNS_CLIENT_STRING_OPCODE = 577, /* VAR_EDNS_CLIENT_STRING_OPCODE */ + VAR_NSID = 578, /* VAR_NSID */ + VAR_ZONEMD_PERMISSIVE_MODE = 579, /* VAR_ZONEMD_PERMISSIVE_MODE */ + VAR_ZONEMD_CHECK = 580, /* VAR_ZONEMD_CHECK */ + VAR_ZONEMD_REJECT_ABSENCE = 581, /* VAR_ZONEMD_REJECT_ABSENCE */ + VAR_RPZ_SIGNAL_NXDOMAIN_RA = 582, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA */ + VAR_INTERFACE_AUTOMATIC_PORTS = 583, /* VAR_INTERFACE_AUTOMATIC_PORTS */ + VAR_EDE = 584, /* VAR_EDE */ + VAR_INTERFACE_ACTION = 585, /* VAR_INTERFACE_ACTION */ + VAR_INTERFACE_VIEW = 586, /* VAR_INTERFACE_VIEW */ + VAR_INTERFACE_TAG = 587, /* VAR_INTERFACE_TAG */ + VAR_INTERFACE_TAG_ACTION = 588, /* VAR_INTERFACE_TAG_ACTION */ + VAR_INTERFACE_TAG_DATA = 589 /* VAR_INTERFACE_TAG_DATA */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -686,52 +688,54 @@ extern int yydebug; #define VAR_ALLOW_NOTIFY 549 #define VAR_TLS_WIN_CERT 550 #define VAR_TCP_CONNECTION_LIMIT 551 -#define VAR_FORWARD_NO_CACHE 552 -#define VAR_STUB_NO_CACHE 553 -#define VAR_LOG_SERVFAIL 554 -#define VAR_DENY_ANY 555 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 556 -#define VAR_LOG_TAG_QUERYREPLY 557 -#define VAR_STREAM_WAIT_SIZE 558 -#define VAR_TLS_CIPHERS 559 -#define VAR_TLS_CIPHERSUITES 560 -#define VAR_TLS_USE_SNI 561 -#define VAR_IPSET 562 -#define VAR_IPSET_NAME_V4 563 -#define VAR_IPSET_NAME_V6 564 -#define VAR_TLS_SESSION_TICKET_KEYS 565 -#define VAR_RPZ 566 -#define VAR_TAGS 567 -#define VAR_RPZ_ACTION_OVERRIDE 568 -#define VAR_RPZ_CNAME_OVERRIDE 569 -#define VAR_RPZ_LOG 570 -#define VAR_RPZ_LOG_NAME 571 -#define VAR_DYNLIB 572 -#define VAR_DYNLIB_FILE 573 -#define VAR_EDNS_CLIENT_STRING 574 -#define VAR_EDNS_CLIENT_STRING_OPCODE 575 -#define VAR_NSID 576 -#define VAR_ZONEMD_PERMISSIVE_MODE 577 -#define VAR_ZONEMD_CHECK 578 -#define VAR_ZONEMD_REJECT_ABSENCE 579 -#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 580 -#define VAR_INTERFACE_AUTOMATIC_PORTS 581 -#define VAR_EDE 582 -#define VAR_INTERFACE_ACTION 583 -#define VAR_INTERFACE_VIEW 584 -#define VAR_INTERFACE_TAG 585 -#define VAR_INTERFACE_TAG_ACTION 586 -#define VAR_INTERFACE_TAG_DATA 587 +#define VAR_ANSWER_COOKIE 552 +#define VAR_COOKIE_SECRET 553 +#define VAR_FORWARD_NO_CACHE 554 +#define VAR_STUB_NO_CACHE 555 +#define VAR_LOG_SERVFAIL 556 +#define VAR_DENY_ANY 557 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 558 +#define VAR_LOG_TAG_QUERYREPLY 559 +#define VAR_STREAM_WAIT_SIZE 560 +#define VAR_TLS_CIPHERS 561 +#define VAR_TLS_CIPHERSUITES 562 +#define VAR_TLS_USE_SNI 563 +#define VAR_IPSET 564 +#define VAR_IPSET_NAME_V4 565 +#define VAR_IPSET_NAME_V6 566 +#define VAR_TLS_SESSION_TICKET_KEYS 567 +#define VAR_RPZ 568 +#define VAR_TAGS 569 +#define VAR_RPZ_ACTION_OVERRIDE 570 +#define VAR_RPZ_CNAME_OVERRIDE 571 +#define VAR_RPZ_LOG 572 +#define VAR_RPZ_LOG_NAME 573 +#define VAR_DYNLIB 574 +#define VAR_DYNLIB_FILE 575 +#define VAR_EDNS_CLIENT_STRING 576 +#define VAR_EDNS_CLIENT_STRING_OPCODE 577 +#define VAR_NSID 578 +#define VAR_ZONEMD_PERMISSIVE_MODE 579 +#define VAR_ZONEMD_CHECK 580 +#define VAR_ZONEMD_REJECT_ABSENCE 581 +#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 582 +#define VAR_INTERFACE_AUTOMATIC_PORTS 583 +#define VAR_EDE 584 +#define VAR_INTERFACE_ACTION 585 +#define VAR_INTERFACE_VIEW 586 +#define VAR_INTERFACE_TAG 587 +#define VAR_INTERFACE_TAG_ACTION 588 +#define VAR_INTERFACE_TAG_DATA 589 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 67 "./util/configparser.y" +#line 69 "./util/configparser.y" char* str; -#line 735 "util/configparser.h" +#line 739 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; From a102fb1df888d8a5eee07b7cc3f8f1d6d4cda840 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 3 Oct 2022 09:53:41 +0200 Subject: [PATCH 32/60] - Fix to remove erroneous TC flag from TCP upstream. --- doc/Changelog | 3 + iterator/iterator.c | 2 + testdata/iter_auth_tc.rpl | 123 ++++++++++++++++++ testdata/stub_auth_tc.tdir/stub_auth_tc.conf | 16 +++ testdata/stub_auth_tc.tdir/stub_auth_tc.dsc | 16 +++ testdata/stub_auth_tc.tdir/stub_auth_tc.post | 11 ++ testdata/stub_auth_tc.tdir/stub_auth_tc.pre | 31 +++++ testdata/stub_auth_tc.tdir/stub_auth_tc.test | 26 ++++ .../stub_auth_tc.tdir/stub_auth_tc.testns | 26 ++++ 9 files changed, 254 insertions(+) create mode 100644 testdata/iter_auth_tc.rpl create mode 100644 testdata/stub_auth_tc.tdir/stub_auth_tc.conf create mode 100644 testdata/stub_auth_tc.tdir/stub_auth_tc.dsc create mode 100644 testdata/stub_auth_tc.tdir/stub_auth_tc.post create mode 100644 testdata/stub_auth_tc.tdir/stub_auth_tc.pre create mode 100644 testdata/stub_auth_tc.tdir/stub_auth_tc.test create mode 100644 testdata/stub_auth_tc.tdir/stub_auth_tc.testns diff --git a/doc/Changelog b/doc/Changelog index bbcef6f31..2c9ed1aba 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +3 October 2022: Wouter + - Fix to remove erroneous TC flag from TCP upstream. + 26 September 2022: George - Better output for skipped tdir tests. diff --git a/iterator/iterator.c b/iterator/iterator.c index da9b7990c..b99b188e6 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -3990,6 +3990,8 @@ process_response(struct module_qstate* qstate, struct iter_qstate* iq, /* remove CD-bit, we asked for in case we handle validation ourself */ prs->flags &= ~BIT_CD; + /* remove TC flag, if this is erroneously set by TCP upstream */ + prs->flags &= ~BIT_TC; /* normalize and sanitize: easy to delete items from linked lists */ if(!scrub_message(pkt, prs, &iq->qinfo_out, iq->dp->name, diff --git a/testdata/iter_auth_tc.rpl b/testdata/iter_auth_tc.rpl new file mode 100644 index 000000000..2136ca8b0 --- /dev/null +++ b/testdata/iter_auth_tc.rpl @@ -0,0 +1,123 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: "no" + minimal-responses: no + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test authoritative response with erroneous TC flag + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END +RANGE_END + +; ns.example.com. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.4 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +; erroneous TC flag here +REPLY QR TC NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; recursion happens here. +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +SCENARIO_END diff --git a/testdata/stub_auth_tc.tdir/stub_auth_tc.conf b/testdata/stub_auth_tc.tdir/stub_auth_tc.conf new file mode 100644 index 000000000..b74942799 --- /dev/null +++ b/testdata/stub_auth_tc.tdir/stub_auth_tc.conf @@ -0,0 +1,16 @@ +server: + verbosity: 4 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + +stub-zone: + name: "example.com" + stub-addr: "127.0.0.1@@TOPORT@" + diff --git a/testdata/stub_auth_tc.tdir/stub_auth_tc.dsc b/testdata/stub_auth_tc.tdir/stub_auth_tc.dsc new file mode 100644 index 000000000..1f71961f1 --- /dev/null +++ b/testdata/stub_auth_tc.tdir/stub_auth_tc.dsc @@ -0,0 +1,16 @@ +BaseName: stub_auth_tc +Version: 1.0 +Description: Authority reply with erroneous TC in TCP +CreationDate: Mon Oct 3 09:11:32 CEST 2022 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: stub_auth_tc.pre +Post: stub_auth_tc.post +Test: stub_auth_tc.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/stub_auth_tc.tdir/stub_auth_tc.post b/testdata/stub_auth_tc.tdir/stub_auth_tc.post new file mode 100644 index 000000000..907a885e4 --- /dev/null +++ b/testdata/stub_auth_tc.tdir/stub_auth_tc.post @@ -0,0 +1,11 @@ +# #-- stub_auth_tc.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID + diff --git a/testdata/stub_auth_tc.tdir/stub_auth_tc.pre b/testdata/stub_auth_tc.tdir/stub_auth_tc.pre new file mode 100644 index 000000000..2f7e317bc --- /dev/null +++ b/testdata/stub_auth_tc.tdir/stub_auth_tc.pre @@ -0,0 +1,31 @@ +# #-- stub_auth_tc.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT stub_auth_tc.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < stub_auth_tc.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/stub_auth_tc.tdir/stub_auth_tc.test b/testdata/stub_auth_tc.tdir/stub_auth_tc.test new file mode 100644 index 000000000..2d3df5365 --- /dev/null +++ b/testdata/stub_auth_tc.tdir/stub_auth_tc.test @@ -0,0 +1,26 @@ +# #-- stub_auth_tc.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.42" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi +if grep "flags:" outfile | grep " tc "; then + echo "Not OK, TC flag in output" + exit 1 +fi + +exit 0 diff --git a/testdata/stub_auth_tc.tdir/stub_auth_tc.testns b/testdata/stub_auth_tc.tdir/stub_auth_tc.testns new file mode 100644 index 000000000..f2829add4 --- /dev/null +++ b/testdata/stub_auth_tc.tdir/stub_auth_tc.testns @@ -0,0 +1,26 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname UDP +REPLY QR AA TC NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname TCP +; erroneous TC flag here. +REPLY QR AA TC NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +www IN A 10.20.30.41 +www IN A 10.20.30.42 +ENTRY_END From 9842fbf7602875b15de63aefc9ddce3278537877 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 3 Oct 2022 10:26:30 +0200 Subject: [PATCH 33/60] - Fix test tdir skip report printout. --- doc/Changelog | 1 + testcode/mini_tdir.sh | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 2c9ed1aba..2044e1b43 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 3 October 2022: Wouter - Fix to remove erroneous TC flag from TCP upstream. + - Fix test tdir skip report printout. 26 September 2022: George - Better output for skipped tdir tests. diff --git a/testcode/mini_tdir.sh b/testcode/mini_tdir.sh index 46914b38a..3b0719369 100755 --- a/testcode/mini_tdir.sh +++ b/testcode/mini_tdir.sh @@ -56,7 +56,7 @@ if test "$1" = "-f" && test "$2" = "report"; then fi elif test -f ".skip-$name"; then echo ".. SKIPPED.. $timelen $name: $desc" - skip=`expr $pass + 1` + skip=`expr $skip + 1` else if test -f "result.$name"; then echo "!! FAILED !! $timelen $name: $desc" @@ -92,7 +92,9 @@ if test "$1" = "report" || test "$2" = "report"; then if test -f "result.$name"; then echo "!! FAILED !! : $name" else - echo ".. SKIPPED.. : $name" + if test $quiet = 0; then + echo ".. SKIPPED.. : $name" + fi fi fi done From 7d96a7e3fee775895a2f7faf370344a2d3fdd642 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 3 Oct 2022 15:03:50 +0200 Subject: [PATCH 34/60] - Fix windows compile, the identifier interface is defined in headers. --- daemon/acl_list.c | 6 +++--- doc/Changelog | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/daemon/acl_list.c b/daemon/acl_list.c index 8e8e1fc9b..f3961dbbb 100644 --- a/daemon/acl_list.c +++ b/daemon/acl_list.c @@ -197,7 +197,7 @@ acl_find_or_create(struct acl_list* acl, struct sockaddr_storage* addr, /** apply acl_interface string */ static int -acl_interface_str_cfg(struct acl_list* acl_interface, const char* interface, +acl_interface_str_cfg(struct acl_list* acl_interface, const char* iface, const char* s2, int port) { struct acl_addr* node; @@ -205,9 +205,9 @@ acl_interface_str_cfg(struct acl_list* acl_interface, const char* interface, if(!parse_acl_access(s2, &control)) { return 0; } - if(!(node=acl_find_or_create_str2addr(acl_interface, interface, 1, port))) { + if(!(node=acl_find_or_create_str2addr(acl_interface, iface, 1, port))) { log_err("cannot update ACL on non-configured interface: %s %d", - interface, port); + iface, port); return 0; } node->control = control; diff --git a/doc/Changelog b/doc/Changelog index 2044e1b43..5ddf73183 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 3 October 2022: Wouter - Fix to remove erroneous TC flag from TCP upstream. - Fix test tdir skip report printout. + - Fix windows compile, the identifier interface is defined in headers. 26 September 2022: George - Better output for skipped tdir tests. From c4e51a4cfe4d5320341ebb9e3b0965aa2003c467 Mon Sep 17 00:00:00 2001 From: Yorgos Thessalonikefs Date: Mon, 3 Oct 2022 15:29:47 +0200 Subject: [PATCH 35/60] PROXYv2 downstream support (#760) --- Makefile.in | 8 +- daemon/remote.c | 6 +- daemon/stats.c | 2 +- daemon/worker.c | 143 +- doc/example.conf.in | 4 + doc/unbound.conf.5.in | 11 + edns-subnet/subnetmod.c | 2 +- iterator/iterator.c | 48 +- pythonmod/interface.i | 4 +- pythonmod/pythonmod_utils.c | 8 +- respip/respip.c | 10 +- respip/respip.h | 6 +- services/cache/infra.c | 33 +- services/cache/infra.h | 7 +- services/listen_dnsport.c | 66 +- services/listen_dnsport.h | 5 +- services/localzone.c | 12 +- services/mesh.c | 13 +- services/outside_network.c | 26 +- services/rpz.c | 14 +- smallapp/unbound-checkconf.c | 16 +- testcode/do-tests.sh | 2 +- testcode/fake_event.c | 19 +- testcode/streamtcp.c | 128 +- testdata/04-checkconf.tdir/04-checkconf.test | 10 + .../04-checkconf.tdir/bad.proxy-and-dnscrypt | 5 + .../04-checkconf.tdir/bad.proxy-and-https | 4 + .../proxy_protocol.tdir/proxy_protocol.conf | 34 + .../proxy_protocol.tdir/proxy_protocol.dsc | 16 + .../proxy_protocol.tdir/proxy_protocol.post | 12 + .../proxy_protocol.tdir/proxy_protocol.pre | 66 + .../proxy_protocol.tdir/proxy_protocol.test | 12 + .../proxy_protocol.test.scenario | 193 + .../proxy_protocol.tdir/proxy_protocol.testns | 23 + .../proxy_protocol.tdir/unbound_server.key | 39 + .../proxy_protocol.tdir/unbound_server.pem | 22 + util/config_file.c | 35 + util/config_file.h | 8 + util/configlexer.c | 5301 +++++++++-------- util/configlexer.lex | 1 + util/configparser.c | 3582 +++++------ util/configparser.h | 6 +- util/configparser.y | 12 +- util/netevent.c | 649 +- util/netevent.h | 40 +- util/proxy_protocol.c | 139 + util/proxy_protocol.h | 131 + 47 files changed, 6142 insertions(+), 4791 deletions(-) create mode 100644 testdata/04-checkconf.tdir/bad.proxy-and-dnscrypt create mode 100644 testdata/04-checkconf.tdir/bad.proxy-and-https create mode 100644 testdata/proxy_protocol.tdir/proxy_protocol.conf create mode 100644 testdata/proxy_protocol.tdir/proxy_protocol.dsc create mode 100644 testdata/proxy_protocol.tdir/proxy_protocol.post create mode 100644 testdata/proxy_protocol.tdir/proxy_protocol.pre create mode 100644 testdata/proxy_protocol.tdir/proxy_protocol.test create mode 100644 testdata/proxy_protocol.tdir/proxy_protocol.test.scenario create mode 100644 testdata/proxy_protocol.tdir/proxy_protocol.testns create mode 100644 testdata/proxy_protocol.tdir/unbound_server.key create mode 100644 testdata/proxy_protocol.tdir/unbound_server.pem create mode 100644 util/proxy_protocol.c create mode 100644 util/proxy_protocol.h diff --git a/Makefile.in b/Makefile.in index 3189731ad..e7c76c258 100644 --- a/Makefile.in +++ b/Makefile.in @@ -130,7 +130,7 @@ util/fptr_wlist.c util/locks.c util/log.c util/mini_event.c util/module.c \ util/netevent.c util/net_help.c util/random.c util/rbtree.c util/regional.c \ util/rtt.c util/edns.c util/storage/dnstree.c util/storage/lookup3.c \ util/storage/lruhash.c util/storage/slabhash.c util/tcp_conn_limit.c \ -util/timehist.c util/tube.c \ +util/timehist.c util/tube.c util/proxy_protocol.c \ util/ub_event.c util/ub_event_pluggable.c util/winsock_event.c \ validator/autotrust.c validator/val_anchor.c validator/validator.c \ validator/val_kcache.c validator/val_kentry.c validator/val_neg.c \ @@ -148,7 +148,7 @@ outbound_list.lo alloc.lo config_file.lo configlexer.lo configparser.lo \ fptr_wlist.lo edns.lo locks.lo log.lo mini_event.lo module.lo net_help.lo \ random.lo rbtree.lo regional.lo rtt.lo dnstree.lo lookup3.lo lruhash.lo \ slabhash.lo tcp_conn_limit.lo timehist.lo tube.lo winsock_event.lo \ -autotrust.lo val_anchor.lo rpz.lo \ +autotrust.lo val_anchor.lo rpz.lo proxy_protocol.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_OBJ) authzone.lo \ $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \ @@ -984,6 +984,8 @@ netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/neteve $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h \ $(srcdir)/util/timehist.h $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/sldns/str2wire.h \ $(srcdir)/dnstap/dnstap.h $(srcdir)/services/listen_dnsport.h +proxy_protocol.lo proxy_protocol.o: $(srcdir)/util/proxy_protocol.c config.h \ + $(srcdir)/util/proxy_protocol.h $(srcdir)/sldns/sbuffer.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 \ @@ -1512,7 +1514,7 @@ asynclook.lo asynclook.o: $(srcdir)/testcode/asynclook.c config.h $(srcdir)/libu $(srcdir)/services/modstack.h $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/rrdef.h streamtcp.lo streamtcp.o: $(srcdir)/testcode/streamtcp.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ - $(srcdir)/util/net_help.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/util/net_help.h $(srcdir)/util/proxy_protocol.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 diff --git a/daemon/remote.c b/daemon/remote.c index ec7a4d5d9..7d4a41400 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -494,8 +494,8 @@ int remote_accept_callback(struct comm_point* c, void* arg, int err, n->c->do_not_close = 0; comm_point_stop_listening(n->c); comm_point_start_listening(n->c, -1, REMOTE_CONTROL_TCP_TIMEOUT); - memcpy(&n->c->repinfo.addr, &addr, addrlen); - n->c->repinfo.addrlen = addrlen; + memcpy(&n->c->repinfo.remote_addr, &addr, addrlen); + n->c->repinfo.remote_addrlen = addrlen; if(rc->use_cert) { n->shake_state = rc_hs_read; n->ssl = SSL_new(rc->ctx); @@ -3304,7 +3304,7 @@ remote_handshake_later(struct daemon_remote* rc, struct rc_state* s, if(r == 0) log_err("remote control connection closed prematurely"); log_addr(VERB_OPS, "failed connection from", - &s->c->repinfo.addr, s->c->repinfo.addrlen); + &s->c->repinfo.remote_addr, s->c->repinfo.remote_addrlen); log_crypto_err("remote control failed ssl"); clean_point(rc, s); } diff --git a/daemon/stats.c b/daemon/stats.c index fde411a1e..6b3834977 100644 --- a/daemon/stats.c +++ b/daemon/stats.c @@ -521,7 +521,7 @@ void server_stats_insquery(struct ub_server_stats* stats, struct comm_point* c, stats->qhttps++; } } - if(repinfo && addr_is_ip6(&repinfo->addr, repinfo->addrlen)) + if(repinfo && addr_is_ip6(&repinfo->remote_addr, repinfo->remote_addrlen)) stats->qipv6++; if( (flags&BIT_QR) ) stats->qbit_QR++; diff --git a/daemon/worker.c b/daemon/worker.c index 29c1961ed..6b188047f 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -547,7 +547,8 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo, static int apply_respip_action(struct worker* worker, const struct query_info* qinfo, struct respip_client_info* cinfo, struct reply_info* rep, - struct comm_reply* repinfo, struct ub_packed_rrset_key** alias_rrset, + struct sockaddr_storage* addr, socklen_t addrlen, + struct ub_packed_rrset_key** alias_rrset, struct reply_info** encode_repp, struct auth_zones* az) { struct respip_action_info actinfo = {0, 0, 0, 0, NULL, 0, NULL}; @@ -574,7 +575,7 @@ apply_respip_action(struct worker* worker, const struct query_info* qinfo, if(actinfo.addrinfo) { respip_inform_print(&actinfo, qinfo->qname, qinfo->qtype, qinfo->qclass, qinfo->local_alias, - repinfo); + addr, addrlen); if(worker->stats.extended && actinfo.rpz_used) { if(actinfo.rpz_disabled) @@ -703,7 +704,7 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo, *alias_rrset = NULL; /* avoid confusion if caller set it to non-NULL */ if((worker->daemon->use_response_ip || worker->daemon->use_rpz) && !partial_rep && !apply_respip_action(worker, qinfo, cinfo, rep, - repinfo, alias_rrset, + &repinfo->client_addr, repinfo->client_addrlen, alias_rrset, &encode_rep, worker->env.auth_zones)) { goto bail_out; } else if(partial_rep && @@ -991,12 +992,14 @@ answer_chaos(struct worker* w, struct query_info* qinfo, * @param w: worker * @param qinfo: query info. Pointer into packet buffer. * @param edns: edns info from query. - * @param repinfo: reply info with source address. + * @param addr: client address. + * @param addrlen: client address length. * @param pkt: packet buffer. */ static void -answer_notify(struct worker* w, struct query_info* qinfo, - struct edns_data* edns, sldns_buffer* pkt, struct comm_reply* repinfo) +answer_notify(struct worker* w, struct query_info* qinfo, + struct edns_data* edns, sldns_buffer* pkt, + struct sockaddr_storage* addr, socklen_t addrlen) { int refused = 0; int rcode = LDNS_RCODE_NOERROR; @@ -1005,8 +1008,8 @@ answer_notify(struct worker* w, struct query_info* qinfo, if(!w->env.auth_zones) return; has_serial = auth_zone_parse_notify_serial(pkt, &serial); if(auth_zones_notify(w->env.auth_zones, &w->env, qinfo->qname, - qinfo->qname_len, qinfo->qclass, &repinfo->addr, - repinfo->addrlen, has_serial, serial, &refused)) { + qinfo->qname_len, qinfo->qclass, addr, + addrlen, has_serial, serial, &refused)) { rcode = LDNS_RCODE_NOERROR; } else { if(refused) @@ -1031,7 +1034,7 @@ answer_notify(struct worker* w, struct query_info* qinfo, "servfail for NOTIFY %sfor %s from", sr, zname); else snprintf(buf, sizeof(buf), "received NOTIFY %sfor %s from", sr, zname); - log_addr(VERB_DETAIL, buf, &repinfo->addr, repinfo->addrlen); + log_addr(VERB_DETAIL, buf, addr, addrlen); } edns->edns_version = EDNS_ADVERTISED_VERSION; edns->udp_size = EDNS_ADVERTISED_SIZE; @@ -1051,8 +1054,8 @@ deny_refuse(struct comm_point* c, enum acl_access acl, { if(acl == deny) { if(verbosity >= VERB_ALGO) { - log_acl_action("dropped", &repinfo->addr, - repinfo->addrlen, acl, acladdr); + log_acl_action("dropped", &repinfo->client_addr, + repinfo->client_addrlen, acl, acladdr); log_buf(VERB_ALGO, "dropped", c->buffer); } comm_point_drop_reply(repinfo); @@ -1063,8 +1066,8 @@ deny_refuse(struct comm_point* c, enum acl_access acl, size_t opt_rr_mark; if(verbosity >= VERB_ALGO) { - log_acl_action("refused", &repinfo->addr, - repinfo->addrlen, acl, acladdr); + log_acl_action("refused", &repinfo->client_addr, + repinfo->client_addrlen, acl, acladdr); log_buf(VERB_ALGO, "refuse", c->buffer); } @@ -1224,12 +1227,24 @@ deny_refuse(struct comm_point* c, enum acl_access acl, } static int -deny_refuse_all(struct comm_point* c, enum acl_access acl, +deny_refuse_all(struct comm_point* c, enum acl_access* acl, struct worker* worker, struct comm_reply* repinfo, - struct acl_addr* acladdr, int ede) + struct acl_addr** acladdr, int ede, int check_proxy) { - return deny_refuse(c, acl, acl_deny, acl_refuse, worker, repinfo, - acladdr, ede); + if(check_proxy) { + *acladdr = acl_addr_lookup(worker->daemon->acl, + &repinfo->remote_addr, repinfo->remote_addrlen); + } else { + *acladdr = acl_addr_lookup(worker->daemon->acl, + &repinfo->client_addr, repinfo->client_addrlen); + } + /* If there is no ACL based on client IP use the interface ACL. */ + if(!(*acladdr) && c->socket) { + *acladdr = c->socket->acl; + } + *acl = acl_get_control(*acladdr); + return deny_refuse(c, *acl, acl_deny, acl_refuse, worker, repinfo, + *acladdr, ede); } static int @@ -1241,7 +1256,7 @@ deny_refuse_non_local(struct comm_point* c, enum acl_access acl, worker, repinfo, acladdr, ede); } -int +int worker_handle_request(struct comm_point* c, void* arg, int error, struct comm_reply* repinfo) { @@ -1323,29 +1338,30 @@ worker_handle_request(struct comm_point* c, void* arg, int error, * sending src (client)/dst (local service) addresses over DNSTAP from incoming request handler */ if(worker->dtenv.log_client_query_messages) { - log_addr(VERB_ALGO, "request from client", &repinfo->addr, repinfo->addrlen); + log_addr(VERB_ALGO, "request from client", &repinfo->client_addr, repinfo->client_addrlen); log_addr(VERB_ALGO, "to local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen); - dt_msg_send_client_query(&worker->dtenv, &repinfo->addr, (void*)repinfo->c->socket->addr->ai_addr, c->type, c->buffer); + dt_msg_send_client_query(&worker->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr->ai_addr, c->type, c->buffer); } #endif - acladdr = acl_addr_lookup(worker->daemon->acl, &repinfo->addr, - repinfo->addrlen); - /* If there is no ACL based on client IP use the interface ACL. */ - if(!acladdr && c->socket) { - acladdr = c->socket->acl; + /* Check deny/refuse ACLs */ + if(repinfo->is_proxied) { + if((ret=deny_refuse_all(c, &acl, worker, repinfo, &acladdr, + worker->env.cfg->ede, 1)) != -1) { + if(ret == 1) + goto send_reply; + return ret; + } } - acl = acl_get_control(acladdr); - - if((ret=deny_refuse_all(c, acl, worker, repinfo, acladdr, - worker->env.cfg->ede)) != -1) - { + if((ret=deny_refuse_all(c, &acl, worker, repinfo, &acladdr, + worker->env.cfg->ede, 0)) != -1) { if(ret == 1) goto send_reply; return ret; } + if((ret=worker_check_request(c->buffer, worker)) != 0) { verbose(VERB_ALGO, "worker check request: bad query."); - log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); + log_addr(VERB_CLIENT,"from",&repinfo->client_addr, repinfo->client_addrlen); if(ret != -1) { LDNS_QR_SET(sldns_buffer_begin(c->buffer)); LDNS_RCODE_SET(sldns_buffer_begin(c->buffer), ret); @@ -1357,20 +1373,24 @@ worker_handle_request(struct comm_point* c, void* arg, int error, worker->stats.num_queries++; - /* check if this query should be dropped based on source ip rate limiting */ - if(!infra_ip_ratelimit_inc(worker->env.infra_cache, repinfo, + /* check if this query should be dropped based on source ip rate limiting + * NOTE: we always check the repinfo->client_address. IP ratelimiting is + * implicitly disabled for proxies. */ + if(!infra_ip_ratelimit_inc(worker->env.infra_cache, + &repinfo->client_addr, repinfo->client_addrlen, *worker->env.now, worker->env.cfg->ip_ratelimit_backoff, c->buffer)) { /* See if we are passed through with slip factor */ if(worker->env.cfg->ip_ratelimit_factor != 0 && ub_random_max(worker->env.rnd, - worker->env.cfg->ip_ratelimit_factor) == 0) { - + worker->env.cfg->ip_ratelimit_factor) == 0) { char addrbuf[128]; - addr_to_str(&repinfo->addr, repinfo->addrlen, - addrbuf, sizeof(addrbuf)); - verbose(VERB_QUERY, "ip_ratelimit allowed through for ip address %s because of slip in ip_ratelimit_factor", - addrbuf); + addr_to_str(&repinfo->client_addr, + repinfo->client_addrlen, addrbuf, + sizeof(addrbuf)); + verbose(VERB_QUERY, "ip_ratelimit allowed through for " + "ip address %s because of slip in " + "ip_ratelimit_factor", addrbuf); } else { worker->stats.num_queries_ip_ratelimited++; comm_point_drop_reply(repinfo); @@ -1381,7 +1401,8 @@ worker_handle_request(struct comm_point* c, void* arg, int error, /* see if query is in the cache */ if(!query_info_parse(&qinfo, c->buffer)) { verbose(VERB_ALGO, "worker parse request: formerror."); - log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); + log_addr(VERB_CLIENT, "from", &repinfo->client_addr, + repinfo->client_addrlen); memset(&qinfo, 0, sizeof(qinfo)); /* zero qinfo.qname */ if(worker_err_ratelimit(worker, LDNS_RCODE_FORMERR) == -1) { comm_point_drop_reply(repinfo); @@ -1395,13 +1416,14 @@ worker_handle_request(struct comm_point* c, void* arg, int error, } if(worker->env.cfg->log_queries) { char ip[128]; - addr_to_str(&repinfo->addr, repinfo->addrlen, ip, sizeof(ip)); + addr_to_str(&repinfo->client_addr, repinfo->client_addrlen, ip, sizeof(ip)); log_query_in(ip, qinfo.qname, qinfo.qtype, qinfo.qclass); } if(qinfo.qtype == LDNS_RR_TYPE_AXFR || qinfo.qtype == LDNS_RR_TYPE_IXFR) { verbose(VERB_ALGO, "worker request: refused zone transfer."); - log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); + log_addr(VERB_CLIENT, "from", &repinfo->client_addr, + repinfo->client_addrlen); sldns_buffer_rewind(c->buffer); LDNS_QR_SET(sldns_buffer_begin(c->buffer)); LDNS_RCODE_SET(sldns_buffer_begin(c->buffer), @@ -1418,7 +1440,8 @@ worker_handle_request(struct comm_point* c, void* arg, int error, qinfo.qtype == LDNS_RR_TYPE_MAILB || (qinfo.qtype >= 128 && qinfo.qtype <= 248)) { verbose(VERB_ALGO, "worker request: formerror for meta-type."); - log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); + log_addr(VERB_CLIENT, "from", &repinfo->client_addr, + repinfo->client_addrlen); if(worker_err_ratelimit(worker, LDNS_RCODE_FORMERR) == -1) { comm_point_drop_reply(repinfo); return 0; @@ -1436,7 +1459,8 @@ worker_handle_request(struct comm_point* c, void* arg, int error, worker->scratchpad)) != 0) { struct edns_data reply_edns; verbose(VERB_ALGO, "worker parse edns: formerror."); - log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); + log_addr(VERB_CLIENT, "from", &repinfo->client_addr, + repinfo->client_addrlen); memset(&reply_edns, 0, sizeof(reply_edns)); reply_edns.edns_present = 1; reply_edns.udp_size = EDNS_ADVERTISED_SIZE; @@ -1458,7 +1482,8 @@ worker_handle_request(struct comm_point* c, void* arg, int error, edns.opt_list_inplace_cb_out = NULL; edns.padding_block_size = 0; verbose(VERB_ALGO, "query with bad edns version."); - log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); + log_addr(VERB_CLIENT, "from", &repinfo->client_addr, + repinfo->client_addrlen); error_encode(c->buffer, EDNS_RCODE_BADVERS&0xf, &qinfo, *(uint16_t*)(void *)sldns_buffer_begin(c->buffer), sldns_buffer_read_u16_at(c->buffer, 2), NULL); @@ -1472,7 +1497,8 @@ worker_handle_request(struct comm_point* c, void* arg, int error, worker->daemon->cfg->harden_short_bufsize) { verbose(VERB_QUERY, "worker request: EDNS bufsize %d ignored", (int)edns.udp_size); - log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); + log_addr(VERB_CLIENT, "from", &repinfo->client_addr, + repinfo->client_addrlen); edns.udp_size = NORMAL_UDP_SIZE; } } @@ -1481,12 +1507,14 @@ worker_handle_request(struct comm_point* c, void* arg, int error, verbose(VERB_QUERY, "worker request: max UDP reply size modified" " (%d to max-udp-size)", (int)edns.udp_size); - log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); + log_addr(VERB_CLIENT, "from", &repinfo->client_addr, + repinfo->client_addrlen); edns.udp_size = worker->daemon->cfg->max_udp_size; } if(edns.udp_size < LDNS_HEADER_SIZE) { verbose(VERB_ALGO, "worker request: edns is too small."); - log_addr(VERB_CLIENT, "from", &repinfo->addr, repinfo->addrlen); + log_addr(VERB_CLIENT, "from", &repinfo->client_addr, + repinfo->client_addrlen); LDNS_QR_SET(sldns_buffer_begin(c->buffer)); LDNS_TC_SET(sldns_buffer_begin(c->buffer)); LDNS_RCODE_SET(sldns_buffer_begin(c->buffer), @@ -1510,7 +1538,8 @@ worker_handle_request(struct comm_point* c, void* arg, int error, } if(LDNS_OPCODE_WIRE(sldns_buffer_begin(c->buffer)) == LDNS_PACKET_NOTIFY) { - answer_notify(worker, &qinfo, &edns, c->buffer, repinfo); + answer_notify(worker, &qinfo, &edns, c->buffer, + &repinfo->client_addr, repinfo->client_addrlen); regional_free_all(worker->scratchpad); goto send_reply; } @@ -1586,7 +1615,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, sldns_buffer_read_u16_at(c->buffer, 2), &edns); regional_free_all(worker->scratchpad); log_addr(VERB_ALGO, "refused nonrec (cache snoop) query from", - &repinfo->addr, repinfo->addrlen); + &repinfo->client_addr, repinfo->client_addrlen); goto send_reply; } @@ -1726,9 +1755,9 @@ lookup_cache: if(verbosity >= VERB_CLIENT) { if(c->type == comm_udp) log_addr(VERB_CLIENT, "udp request from", - &repinfo->addr, repinfo->addrlen); + &repinfo->client_addr, repinfo->client_addrlen); else log_addr(VERB_CLIENT, "tcp request from", - &repinfo->addr, repinfo->addrlen); + &repinfo->client_addr, repinfo->client_addrlen); } /* grab a work request structure for this new request */ @@ -1760,8 +1789,8 @@ send_reply_rc: */ if(worker->dtenv.log_client_response_messages) { log_addr(VERB_ALGO, "from local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen); - log_addr(VERB_ALGO, "response to client", &repinfo->addr, repinfo->addrlen); - dt_msg_send_client_response(&worker->dtenv, &repinfo->addr, (void*)repinfo->c->socket->addr->ai_addr, c->type, c->buffer); + log_addr(VERB_ALGO, "response to client", &repinfo->client_addr, repinfo->client_addrlen); + dt_msg_send_client_response(&worker->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr->ai_addr, c->type, c->buffer); } #endif if(worker->env.cfg->log_replies) @@ -1773,10 +1802,12 @@ send_reply_rc: /* log original qname, before the local alias was * used to resolve that CNAME to something else */ qinfo.qname = qinfo.local_alias->rrset->rk.dname; - log_reply_info(NO_VERBOSE, &qinfo, &repinfo->addr, repinfo->addrlen, + log_reply_info(NO_VERBOSE, &qinfo, + &repinfo->client_addr, repinfo->client_addrlen, tv, 1, c->buffer); } else { - log_reply_info(NO_VERBOSE, &qinfo, &repinfo->addr, repinfo->addrlen, + log_reply_info(NO_VERBOSE, &qinfo, + &repinfo->client_addr, repinfo->client_addrlen, tv, 1, c->buffer); } } diff --git a/doc/example.conf.in b/doc/example.conf.in index 51e51b58b..c21246e4c 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -902,6 +902,10 @@ server: # Disable TLS for DNS-over-HTTP downstream service. # http-notls-downstream: no + # The interfaces that use these listed port numbers will support and + # expect PROXYv2. For UDP and TCP/TLS interfaces. + # proxy-protocol-port: portno for each of the port numbers. + # DNS64 prefix. Must be specified when DNS64 is use. # Enable dns64 in module-config. Used to synthesize IPv6 from IPv4. # dns64-prefix: 64:ff9b::0/96 diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 73575d93a..4d610c15d 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -656,6 +656,17 @@ Ignored if the option is not available. Default is yes. Disable use of TLS for the downstream DNS-over-HTTP connections. Useful for local back end servers. Default is no. .TP +.B proxy\-protocol\-port: \fI +List port numbers as proxy\-protocol\-port, and when interfaces are defined, +eg. with the @port suffix, as this port number, they support and expect PROXYv2. +In this case the proxy address will only be used for the network communication +and initial ACL (check if the proxy itself is denied/refused by configuration). +The proxied address (if any) will then be used as the true client address and +will be used where applicable for logging, ACL, DNSTAP, RPZ and IP ratelimiting. +PROXYv2 is supported for UDP and TCP/TLS listening interfaces. +There is no support for PROXYv2 on a DoH or DNSCrypt listening interface. +Can list multiple, each on a new statement. +.TP .B use\-systemd: \fI Enable or disable systemd socket activation. Default is no. diff --git a/edns-subnet/subnetmod.c b/edns-subnet/subnetmod.c index d4f61bdd6..0f1df417f 100644 --- a/edns-subnet/subnetmod.c +++ b/edns-subnet/subnetmod.c @@ -765,7 +765,7 @@ subnetmod_operate(struct module_qstate *qstate, enum module_ev event, } else if(qstate->mesh_info->reply_list) { subnet_option_from_ss( - &qstate->mesh_info->reply_list->query_reply.addr, + &qstate->mesh_info->reply_list->query_reply.client_addr, &sq->ecs_client_in, qstate->env->cfg); } diff --git a/iterator/iterator.c b/iterator/iterator.c index b99b188e6..e1c556b39 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -596,15 +596,17 @@ errinf_reply(struct module_qstate* qstate, struct iter_qstate* iq) { if(qstate->env->cfg->val_log_level < 2 && !qstate->env->cfg->log_servfail) return; - if((qstate->reply && qstate->reply->addrlen != 0) || - (iq->fail_reply && iq->fail_reply->addrlen != 0)) { + if((qstate->reply && qstate->reply->remote_addrlen != 0) || + (iq->fail_reply && iq->fail_reply->remote_addrlen != 0)) { char from[256], frm[512]; - if(qstate->reply && qstate->reply->addrlen != 0) - addr_to_str(&qstate->reply->addr, qstate->reply->addrlen, - from, sizeof(from)); + if(qstate->reply && qstate->reply->remote_addrlen != 0) + addr_to_str(&qstate->reply->remote_addr, + qstate->reply->remote_addrlen, from, + sizeof(from)); else - addr_to_str(&iq->fail_reply->addr, iq->fail_reply->addrlen, - from, sizeof(from)); + addr_to_str(&iq->fail_reply->remote_addr, + iq->fail_reply->remote_addrlen, from, + sizeof(from)); snprintf(frm, sizeof(frm), "from %s", from); errinf(qstate, frm); } @@ -2896,8 +2898,8 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, * use dnssec-lame-bypass if it needs to query there.*/ if(qstate->reply) { struct delegpt_addr* a = delegpt_find_addr( - iq->dp, &qstate->reply->addr, - qstate->reply->addrlen); + iq->dp, &qstate->reply->remote_addr, + qstate->reply->remote_addrlen); if(a) a->dnsseclame = 1; } /* test the answer is from the zone we expected, @@ -2993,9 +2995,9 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, (*qstate->env->detach_subs)(qstate); iq->num_target_queries = 0; if(qstate->reply) - sock_list_insert(&qstate->reply_origin, - &qstate->reply->addr, qstate->reply->addrlen, - qstate->region); + sock_list_insert(&qstate->reply_origin, + &qstate->reply->remote_addr, + qstate->reply->remote_addrlen, qstate->region); if(iq->minimisation_state != DONOT_MINIMISE_STATE && !(iq->chase_flags & BIT_RD)) { if(FLAGS_GET_RCODE(iq->response->rep->flags) != @@ -3250,9 +3252,9 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, (*qstate->env->detach_subs)(qstate); iq->num_target_queries = 0; if(qstate->reply) - sock_list_insert(&qstate->reply_origin, - &qstate->reply->addr, qstate->reply->addrlen, - qstate->region); + sock_list_insert(&qstate->reply_origin, + &qstate->reply->remote_addr, + qstate->reply->remote_addrlen, qstate->region); verbose(VERB_ALGO, "cleared outbound list for query restart"); /* go to INIT_REQUEST_STATE for new qname. */ return next_state(iq, INIT_REQUEST_STATE); @@ -3266,9 +3268,10 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, } else if(qstate->reply) { /* need addr for lameness cache, but we may have * gotten this from cache, so test to be sure */ - if(!infra_set_lame(qstate->env->infra_cache, - &qstate->reply->addr, qstate->reply->addrlen, - iq->dp->name, iq->dp->namelen, + if(!infra_set_lame(qstate->env->infra_cache, + &qstate->reply->remote_addr, + qstate->reply->remote_addrlen, + iq->dp->name, iq->dp->namelen, *qstate->env->now, dnsseclame, 0, iq->qchase.qtype)) log_err("mark host lame: out of memory"); @@ -3285,8 +3288,9 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, * gotten this from cache, so test to be sure */ verbose(VERB_DETAIL, "mark as REC_LAME"); if(!infra_set_lame(qstate->env->infra_cache, - &qstate->reply->addr, qstate->reply->addrlen, - iq->dp->name, iq->dp->namelen, + &qstate->reply->remote_addr, + qstate->reply->remote_addrlen, + iq->dp->name, iq->dp->namelen, *qstate->env->now, 0, 1, iq->qchase.qtype)) log_err("mark host lame: out of memory"); } @@ -4016,8 +4020,8 @@ process_response(struct module_qstate* qstate, struct iter_qstate* iq, if(!iq->response) goto handle_it; log_query_info(VERB_DETAIL, "response for", &qstate->qinfo); - log_name_addr(VERB_DETAIL, "reply from", iq->dp->name, - &qstate->reply->addr, qstate->reply->addrlen); + log_name_addr(VERB_DETAIL, "reply from", iq->dp->name, + &qstate->reply->remote_addr, qstate->reply->remote_addrlen); if(verbosity >= VERB_ALGO) log_dns_msg("incoming scrubbed packet:", &iq->response->qinfo, iq->response->rep); diff --git a/pythonmod/interface.i b/pythonmod/interface.i index 0d95613f8..df8514b47 100644 --- a/pythonmod/interface.i +++ b/pythonmod/interface.i @@ -609,9 +609,9 @@ struct mesh_reply { struct comm_reply query_reply; }; -%rename(_addr) comm_reply::addr; +%rename(_addr) comm_reply::client_addr; struct comm_reply { - struct sockaddr_storage addr; + struct sockaddr_storage client_addr; }; %extend comm_reply { diff --git a/pythonmod/pythonmod_utils.c b/pythonmod/pythonmod_utils.c index 1f6f25129..aebe4d2bb 100644 --- a/pythonmod/pythonmod_utils.c +++ b/pythonmod/pythonmod_utils.c @@ -172,14 +172,14 @@ int createResponse(struct module_qstate* qstate, sldns_buffer* pkt) } -/* Convert reply->addr to string */ +/* Convert reply->client_addr to string */ void reply_addr2str(struct comm_reply* reply, char* dest, int maxlen) { - int af = (int)((struct sockaddr_in*) &(reply->addr))->sin_family; - void* sinaddr = &((struct sockaddr_in*) &(reply->addr))->sin_addr; + int af = (int)((struct sockaddr_in*) &(reply->client_addr))->sin_family; + void* sinaddr = &((struct sockaddr_in*) &(reply->client_addr))->sin_addr; if(af == AF_INET6) - sinaddr = &((struct sockaddr_in6*)&(reply->addr))->sin6_addr; + sinaddr = &((struct sockaddr_in6*)&(reply->client_addr))->sin6_addr; dest[0] = 0; if (inet_ntop(af, sinaddr, dest, (socklen_t)maxlen) == 0) return; diff --git a/respip/respip.c b/respip/respip.c index deff66317..942e082b9 100644 --- a/respip/respip.c +++ b/respip/respip.c @@ -1290,7 +1290,7 @@ respip_set_is_empty(const struct respip_set* set) void respip_inform_print(struct respip_action_info* respip_actinfo, uint8_t* qname, uint16_t qtype, uint16_t qclass, struct local_rrset* local_alias, - struct comm_reply* repinfo) + struct sockaddr_storage* addr, socklen_t addrlen) { char srcip[128], respip[128], txt[512]; unsigned port; @@ -1300,10 +1300,10 @@ respip_inform_print(struct respip_action_info* respip_actinfo, uint8_t* qname, if(local_alias) qname = local_alias->rrset->rk.dname; - port = (unsigned)((repinfo->addr.ss_family == AF_INET) ? - ntohs(((struct sockaddr_in*)&repinfo->addr)->sin_port) : - ntohs(((struct sockaddr_in6*)&repinfo->addr)->sin6_port)); - addr_to_str(&repinfo->addr, repinfo->addrlen, srcip, sizeof(srcip)); + port = (unsigned)((addr->ss_family == AF_INET) ? + ntohs(((struct sockaddr_in*)addr)->sin_port) : + ntohs(((struct sockaddr_in6*)addr)->sin6_port)); + addr_to_str(addr, addrlen, srcip, sizeof(srcip)); addr_to_str(&respip_addr->addr, respip_addr->addrlen, respip, sizeof(respip)); if(respip_actinfo->rpz_log) { diff --git a/respip/respip.h b/respip/respip.h index 988a72263..e4ab5cc9c 100644 --- a/respip/respip.h +++ b/respip/respip.h @@ -251,11 +251,13 @@ int respip_set_is_empty(const struct respip_set* set); * @param local_alias: set to a local alias if the query matches an alias in * a local zone. In this case its owner name will be considered the actual * query name. - * @param repinfo: reply info containing the client's source address and port. + * @param addr: the client's source address and port. + * @param addrlen: the client's source address length. */ void respip_inform_print(struct respip_action_info* respip_actinfo, uint8_t* qname, uint16_t qtype, uint16_t qclass, - struct local_rrset* local_alias, struct comm_reply* repinfo); + struct local_rrset* local_alias, struct sockaddr_storage* addr, + socklen_t addrlen); /** * Find resp_addr in tree, create and add to tree if it does not exist. diff --git a/services/cache/infra.c b/services/cache/infra.c index 9d5cdb162..537cb949c 100644 --- a/services/cache/infra.c +++ b/services/cache/infra.c @@ -834,14 +834,13 @@ static struct lruhash_entry* infra_find_ratedata(struct infra_cache* infra, /** find data item in array for ip addresses */ static struct lruhash_entry* infra_find_ip_ratedata(struct infra_cache* infra, - struct comm_reply* repinfo, int wr) + struct sockaddr_storage* addr, socklen_t addrlen, int wr) { struct ip_rate_key key; - hashvalue_type h = hash_addr(&(repinfo->addr), - repinfo->addrlen, 0); + hashvalue_type h = hash_addr(addr, addrlen, 0); memset(&key, 0, sizeof(key)); - key.addr = repinfo->addr; - key.addrlen = repinfo->addrlen; + key.addr = *addr; + key.addrlen = addrlen; key.entry.hash = h; return slabhash_lookup(infra->client_ip_rates, h, &key, wr); } @@ -876,10 +875,9 @@ static void infra_create_ratedata(struct infra_cache* infra, /** create rate data item for ip address */ static void infra_ip_create_ratedata(struct infra_cache* infra, - struct comm_reply* repinfo, time_t timenow) + struct sockaddr_storage* addr, socklen_t addrlen, time_t timenow) { - hashvalue_type h = hash_addr(&(repinfo->addr), - repinfo->addrlen, 0); + hashvalue_type h = hash_addr(addr, addrlen, 0); struct ip_rate_key* k = (struct ip_rate_key*)calloc(1, sizeof(*k)); struct ip_rate_data* d = (struct ip_rate_data*)calloc(1, sizeof(*d)); if(!k || !d) { @@ -887,8 +885,8 @@ static void infra_ip_create_ratedata(struct infra_cache* infra, free(d); return; /* alloc failure */ } - k->addr = repinfo->addr; - k->addrlen = repinfo->addrlen; + k->addr = *addr; + k->addrlen = addrlen; lock_rw_init(&k->entry.lock); k->entry.hash = h; k->entry.key = k; @@ -985,8 +983,8 @@ int infra_ratelimit_inc(struct infra_cache* infra, uint8_t* name, sldns_wire2str_class_buf(qinfo->qclass, cs, sizeof(cs)); ip[0]=0; if(replylist) { - addr_to_str((struct sockaddr_storage *)&replylist->addr, - replylist->addrlen, ip, sizeof(ip)); + addr_to_str((struct sockaddr_storage *)&replylist->remote_addr, + replylist->remote_addrlen, ip, sizeof(ip)); verbose(VERB_OPS, "ratelimit exceeded %s %d query %s %s %s from %s", buf, lim, qnm, cs, ts, ip); } else { verbose(VERB_OPS, "ratelimit exceeded %s %d query %s %s %s", buf, lim, qnm, cs, ts); @@ -1054,8 +1052,8 @@ infra_get_mem(struct infra_cache* infra) } int infra_ip_ratelimit_inc(struct infra_cache* infra, - struct comm_reply* repinfo, time_t timenow, int backoff, - struct sldns_buffer* buffer) + struct sockaddr_storage* addr, socklen_t addrlen, time_t timenow, + int backoff, struct sldns_buffer* buffer) { int max; struct lruhash_entry* entry; @@ -1065,7 +1063,7 @@ int infra_ip_ratelimit_inc(struct infra_cache* infra, return 1; } /* find or insert ratedata */ - entry = infra_find_ip_ratedata(infra, repinfo, 1); + entry = infra_find_ip_ratedata(infra, addr, addrlen, 1); if(entry) { int premax = infra_rate_max(entry->data, timenow, backoff); int* cur = infra_rate_give_second(entry->data, timenow); @@ -1075,8 +1073,7 @@ int infra_ip_ratelimit_inc(struct infra_cache* infra, if(premax <= infra_ip_ratelimit && max > infra_ip_ratelimit) { char client_ip[128], qnm[LDNS_MAX_DOMAINLEN+1+12+12]; - addr_to_str((struct sockaddr_storage *)&repinfo->addr, - repinfo->addrlen, client_ip, sizeof(client_ip)); + addr_to_str(addr, addrlen, client_ip, sizeof(client_ip)); qnm[0]=0; if(sldns_buffer_limit(buffer)>LDNS_HEADER_SIZE && LDNS_QDCOUNT(sldns_buffer_begin(buffer))!=0) { @@ -1101,6 +1098,6 @@ int infra_ip_ratelimit_inc(struct infra_cache* infra, } /* create */ - infra_ip_create_ratedata(infra, repinfo, timenow); + infra_ip_create_ratedata(infra, addr, addrlen, timenow); return 1; } diff --git a/services/cache/infra.h b/services/cache/infra.h index 6a2371aca..faf7fd2f3 100644 --- a/services/cache/infra.h +++ b/services/cache/infra.h @@ -416,15 +416,16 @@ int infra_find_ratelimit(struct infra_cache* infra, uint8_t* name, /** Update query ratelimit hash and decide * whether or not a query should be dropped. * @param infra: infra cache - * @param repinfo: information about client + * @param addr: client address + * @param addrlen: client address length * @param timenow: what time it is now. * @param backoff: if backoff is enabled. * @param buffer: with query for logging. * @return 1 if it could be incremented. 0 if the increment overshot the * ratelimit and the query should be dropped. */ int infra_ip_ratelimit_inc(struct infra_cache* infra, - struct comm_reply* repinfo, time_t timenow, int backoff, - struct sldns_buffer* buffer); + struct sockaddr_storage* addr, socklen_t addrlen, time_t timenow, + int backoff, struct sldns_buffer* buffer); /** * Get memory used by the infra cache. diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index e823b3c12..95606aff5 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -1093,11 +1093,13 @@ make_sock_port(int stype, const char* ifname, const char* port, * @param list: list head. changed. * @param s: fd. * @param ftype: if fd is UDP. + * @param pp2_enabled: if PROXYv2 is enabled for this port. * @param ub_sock: socket with address. * @return false on failure. list in unchanged then. */ static int -port_insert(struct listen_port** list, int s, enum listen_type ftype, struct unbound_socket* ub_sock) +port_insert(struct listen_port** list, int s, enum listen_type ftype, + int pp2_enabled, struct unbound_socket* ub_sock) { struct listen_port* item = (struct listen_port*)malloc( sizeof(struct listen_port)); @@ -1106,6 +1108,7 @@ port_insert(struct listen_port** list, int s, enum listen_type ftype, struct unb item->next = *list; item->fd = s; item->ftype = ftype; + item->pp2_enabled = pp2_enabled; item->socket = ub_sock; *list = item; return 1; @@ -1201,6 +1204,7 @@ if_is_ssl(const char* ifname, const char* port, int ssl_port, * @param ssl_port: ssl service port number * @param tls_additional_port: list of additional ssl service port numbers. * @param https_port: DoH service port number + * @param proxy_protocol_port: list of PROXYv2 port numbers. * @param reuseport: try to set SO_REUSEPORT if nonNULL and true. * set to false on exit if reuseport failed due to no kernel support. * @param transparent: set IP_TRANSPARENT socket option. @@ -1217,25 +1221,30 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, struct addrinfo *hints, const char* port, struct listen_port** list, size_t rcv, size_t snd, int ssl_port, struct config_strlist* tls_additional_port, int https_port, + struct config_strlist* proxy_protocol_port, int* reuseport, int transparent, int tcp_mss, int freebind, int http2_nodelay, int use_systemd, int dnscrypt_port, int dscp) { int s, noip6=0; int is_https = if_is_https(ifname, port, https_port); + int is_dnscrypt = if_is_dnscrypt(ifname, port, dnscrypt_port); + int is_pp2 = if_is_pp2(ifname, port, proxy_protocol_port); int nodelay = is_https && http2_nodelay; struct unbound_socket* ub_sock; -#ifdef USE_DNSCRYPT - int is_dnscrypt = ((strchr(ifname, '@') && - atoi(strchr(ifname, '@')+1) == dnscrypt_port) || - (!strchr(ifname, '@') && atoi(port) == dnscrypt_port)); -#else - int is_dnscrypt = 0; - (void)dnscrypt_port; -#endif if(!do_udp && !do_tcp) return 0; + if(is_pp2) { + if(is_dnscrypt) { + fatal_exit("PROXYv2 and DNSCrypt combination not " + "supported!"); + } else if(is_https) { + fatal_exit("PROXYv2 and DoH combination not " + "supported!"); + } + } + if(do_auto) { ub_sock = calloc(1, sizeof(struct unbound_socket)); if(!ub_sock) @@ -1260,7 +1269,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, } if(!port_insert(list, s, is_dnscrypt ?listen_type_udpancil_dnscrypt:listen_type_udpancil, - ub_sock)) { + is_pp2, ub_sock)) { sock_close(s); freeaddrinfo(ub_sock->addr); free(ub_sock); @@ -1283,7 +1292,8 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, return 0; } if(!port_insert(list, s, is_dnscrypt - ?listen_type_udp_dnscrypt:listen_type_udp, ub_sock)) { + ?listen_type_udp_dnscrypt:listen_type_udp, + is_pp2, ub_sock)) { sock_close(s); freeaddrinfo(ub_sock->addr); free(ub_sock); @@ -1318,7 +1328,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, } if(is_ssl) verbose(VERB_ALGO, "setup TCP for SSL service"); - if(!port_insert(list, s, port_type, ub_sock)) { + if(!port_insert(list, s, port_type, is_pp2, ub_sock)) { sock_close(s); freeaddrinfo(ub_sock->addr); free(ub_sock); @@ -1407,14 +1417,16 @@ listen_create(struct comm_base* base, struct listen_port* ports, if(ports->ftype == listen_type_udp || ports->ftype == listen_type_udp_dnscrypt) { cp = comm_point_create_udp(base, ports->fd, - front->udp_buff, cb, cb_arg, ports->socket); + front->udp_buff, ports->pp2_enabled, cb, + cb_arg, ports->socket); } else if(ports->ftype == listen_type_tcp || ports->ftype == listen_type_tcp_dnscrypt) { cp = comm_point_create_tcp(base, ports->fd, tcp_accept_count, tcp_idle_timeout, harden_large_queries, 0, NULL, tcp_conn_limit, bufsize, front->udp_buff, - ports->ftype, cb, cb_arg, ports->socket); + ports->ftype, ports->pp2_enabled, cb, cb_arg, + ports->socket); } else if(ports->ftype == listen_type_ssl || ports->ftype == listen_type_http) { cp = comm_point_create_tcp(base, ports->fd, @@ -1422,7 +1434,8 @@ listen_create(struct comm_base* base, struct listen_port* ports, harden_large_queries, http_max_streams, http_endpoint, tcp_conn_limit, bufsize, front->udp_buff, - ports->ftype, cb, cb_arg, ports->socket); + ports->ftype, ports->pp2_enabled, cb, cb_arg, + ports->socket); if(ports->ftype == listen_type_http) { if(!sslctx && !http_notls) { log_warn("HTTPS port configured, but " @@ -1448,7 +1461,8 @@ listen_create(struct comm_base* base, struct listen_port* ports, } else if(ports->ftype == listen_type_udpancil || ports->ftype == listen_type_udpancil_dnscrypt) { cp = comm_point_create_udp_ancil(base, ports->fd, - front->udp_buff, cb, cb_arg, ports->socket); + front->udp_buff, ports->pp2_enabled, cb, + cb_arg, ports->socket); } if(!cp) { log_err("can't create commpoint"); @@ -1783,7 +1797,9 @@ listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, - cfg->https_port, reuseport, cfg->ip_transparent, + cfg->https_port, + cfg->proxy_protocol_port, + reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->http_nodelay, cfg->use_systemd, cfg->dnscrypt_port, cfg->ip_dscp)) { @@ -1798,7 +1814,9 @@ listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, - cfg->https_port, reuseport, cfg->ip_transparent, + cfg->https_port, + cfg->proxy_protocol_port, + reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->http_nodelay, cfg->use_systemd, cfg->dnscrypt_port, cfg->ip_dscp)) { @@ -1816,7 +1834,8 @@ listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, - cfg->https_port, reuseport, cfg->ip_transparent, + cfg->https_port, cfg->proxy_protocol_port, + reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->http_nodelay, cfg->use_systemd, cfg->dnscrypt_port, cfg->ip_dscp)) { @@ -1831,7 +1850,8 @@ listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, - cfg->https_port, reuseport, cfg->ip_transparent, + cfg->https_port, cfg->proxy_protocol_port, + reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->http_nodelay, cfg->use_systemd, cfg->dnscrypt_port, cfg->ip_dscp)) { @@ -1848,7 +1868,8 @@ listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs, do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, - cfg->https_port, reuseport, cfg->ip_transparent, + cfg->https_port, cfg->proxy_protocol_port, + reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->http_nodelay, cfg->use_systemd, cfg->dnscrypt_port, cfg->ip_dscp)) { @@ -1863,7 +1884,8 @@ listening_ports_open(struct config_file* cfg, char** ifs, int num_ifs, do_tcp, &hints, portbuf, &list, cfg->so_rcvbuf, cfg->so_sndbuf, cfg->ssl_port, cfg->tls_additional_port, - cfg->https_port, reuseport, cfg->ip_transparent, + cfg->https_port, cfg->proxy_protocol_port, + reuseport, cfg->ip_transparent, cfg->tcp_mss, cfg->ip_freebind, cfg->http_nodelay, cfg->use_systemd, cfg->dnscrypt_port, cfg->ip_dscp)) { diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index f27fa597b..816d79aea 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -128,7 +128,10 @@ struct listen_port { int fd; /** type of file descriptor, udp or tcp */ enum listen_type ftype; - /** fill in unbpound_socket structure for every opened socket at Unbound startup */ + /** if the port should support PROXYv2 */ + int pp2_enabled; + /** fill in unbound_socket structure for every opened socket at + * Unbound startup */ struct unbound_socket* socket; }; diff --git a/services/localzone.c b/services/localzone.c index 3ed7d835d..3536b7aaa 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -1744,13 +1744,13 @@ local_zones_zone_answer(struct local_zone* z, struct module_env* env, /** print log information for an inform zone query */ static void lz_inform_print(struct local_zone* z, struct query_info* qinfo, - struct comm_reply* repinfo) + struct sockaddr_storage* addr, socklen_t addrlen) { char ip[128], txt[512]; char zname[LDNS_MAX_DOMAINLEN+1]; - uint16_t port = ntohs(((struct sockaddr_in*)&repinfo->addr)->sin_port); + uint16_t port = ntohs(((struct sockaddr_in*)addr)->sin_port); dname_str(z->name, zname); - addr_to_str(&repinfo->addr, repinfo->addrlen, ip, sizeof(ip)); + addr_to_str(addr, addrlen, ip, sizeof(ip)); snprintf(txt, sizeof(txt), "%s %s %s@%u", zname, local_zone_type2str(z->type), ip, (unsigned)port); log_nametypeclass(NO_VERBOSE, txt, qinfo->qname, qinfo->qtype, qinfo->qclass); @@ -1765,7 +1765,8 @@ lz_type(uint8_t *taglist, size_t taglen, uint8_t *taglist2, size_t taglen2, struct local_zone_override* lzo; if(repinfo && override_tree) { lzo = (struct local_zone_override*)addr_tree_lookup( - override_tree, &repinfo->addr, repinfo->addrlen); + override_tree, &repinfo->client_addr, + repinfo->client_addrlen); if(lzo && lzo->type) { verbose(VERB_ALGO, "local zone override to type %s", local_zone_type2str(lzo->type)); @@ -1888,7 +1889,8 @@ local_zones_answer(struct local_zones* zones, struct module_env* env, lzt == local_zone_inform_deny || lzt == local_zone_inform_redirect) && repinfo) - lz_inform_print(z, qinfo, repinfo); + lz_inform_print(z, qinfo, &repinfo->client_addr, + repinfo->client_addrlen); if(lzt != local_zone_always_refuse && lzt != local_zone_always_transparent diff --git a/services/mesh.c b/services/mesh.c index 2a4119426..9007b6e08 100644 --- a/services/mesh.c +++ b/services/mesh.c @@ -806,7 +806,7 @@ static void mesh_schedule_prefetch_subnet(struct mesh_area* mesh, /* Fake the ECS data from the client's IP */ struct ecs_data ecs; memset(&ecs, 0, sizeof(ecs)); - subnet_option_from_ss(&rep->addr, &ecs, mesh->env->cfg); + subnet_option_from_ss(&rep->client_addr, &ecs, mesh->env->cfg); if(ecs.subnet_validdata == 0) { log_err("prefetch_subnet subnet_option_from_ss: invalid data"); return; @@ -1488,8 +1488,9 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, } /* Log reply sent */ if(m->s.env->cfg->log_replies) { - log_reply_info(NO_VERBOSE, &m->s.qinfo, &r->query_reply.addr, - r->query_reply.addrlen, duration, 0, r_buffer); + log_reply_info(NO_VERBOSE, &m->s.qinfo, + &r->query_reply.client_addr, + r->query_reply.client_addrlen, duration, 0, r_buffer); } } @@ -1530,7 +1531,8 @@ void mesh_query_done(struct mesh_state* mstate) respip_inform_print(mstate->s.respip_action_info, r->qname, mstate->s.qinfo.qtype, mstate->s.qinfo.qclass, r->local_alias, - &r->query_reply); + &r->query_reply.client_addr, + r->query_reply.client_addrlen); if(mstate->s.env->cfg->stat_extended && mstate->s.respip_action_info->rpz_used) { if(mstate->s.respip_action_info->rpz_disabled) @@ -2180,7 +2182,8 @@ mesh_serve_expired_callback(void* arg) if(actinfo.addrinfo) { respip_inform_print(&actinfo, r->qname, qstate->qinfo.qtype, qstate->qinfo.qclass, - r->local_alias, &r->query_reply); + r->local_alias, &r->query_reply.client_addr, + r->query_reply.client_addrlen); if(qstate->env->cfg->stat_extended && actinfo.rpz_used) { if(actinfo.rpz_disabled) diff --git a/services/outside_network.c b/services/outside_network.c index b5b20cbb0..165a50755 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -721,12 +721,12 @@ outnet_tcp_take_into_use(struct waiting_tcp* w) pend->next_free = NULL; pend->query = w; pend->reuse.outnet = w->outnet; - pend->c->repinfo.addrlen = w->addrlen; + pend->c->repinfo.remote_addrlen = w->addrlen; pend->c->tcp_more_read_again = &pend->reuse.cp_more_read_again; pend->c->tcp_more_write_again = &pend->reuse.cp_more_write_again; pend->reuse.cp_more_read_again = 0; pend->reuse.cp_more_write_again = 0; - memcpy(&pend->c->repinfo.addr, &w->addr, w->addrlen); + memcpy(&pend->c->repinfo.remote_addr, &w->addr, w->addrlen); pend->reuse.pending = pend; /* Remove from tree in case the is_ssl will be different and causes the @@ -1417,11 +1417,11 @@ outnet_udp_cb(struct comm_point* c, void* arg, int error, /* setup lookup key */ key.id = (unsigned)LDNS_ID_WIRE(sldns_buffer_begin(c->buffer)); - memcpy(&key.addr, &reply_info->addr, reply_info->addrlen); - key.addrlen = reply_info->addrlen; + memcpy(&key.addr, &reply_info->remote_addr, reply_info->remote_addrlen); + key.addrlen = reply_info->remote_addrlen; verbose(VERB_ALGO, "Incoming reply id = %4.4x", key.id); log_addr(VERB_ALGO, "Incoming reply addr =", - &reply_info->addr, reply_info->addrlen); + &reply_info->remote_addr, reply_info->remote_addrlen); /* find it, see if this thing is a valid query response */ verbose(VERB_ALGO, "lookup size is %d entries", (int)outnet->pending->count); @@ -1690,7 +1690,7 @@ outside_network_create(struct comm_base *base, size_t bufsize, return NULL; } pc->cp = comm_point_create_udp(outnet->base, -1, - outnet->udp_buff, outnet_udp_cb, outnet, NULL); + outnet->udp_buff, 0, outnet_udp_cb, outnet, NULL); if(!pc->cp) { log_err("malloc failed"); free(pc); @@ -3103,8 +3103,8 @@ serviced_tcp_callback(struct comm_point* c, void* arg, int error, rep = &r2; r2.c = c; } - memcpy(&rep->addr, &sq->addr, sq->addrlen); - rep->addrlen = sq->addrlen; + memcpy(&rep->remote_addr, &sq->addr, sq->addrlen); + rep->remote_addrlen = sq->addrlen; serviced_callbacks(sq, error, c, rep); return 0; } @@ -3582,7 +3582,7 @@ outnet_comm_point_for_udp(struct outside_network* outnet, if(fd == -1) { return NULL; } - cp = comm_point_create_udp(outnet->base, fd, outnet->udp_buff, + cp = comm_point_create_udp(outnet->base, fd, outnet->udp_buff, 0, cb, cb_arg, NULL); if(!cp) { log_err("malloc failure"); @@ -3670,8 +3670,8 @@ outnet_comm_point_for_tcp(struct outside_network* outnet, close(fd); return 0; } - cp->repinfo.addrlen = to_addrlen; - memcpy(&cp->repinfo.addr, to_addr, to_addrlen); + cp->repinfo.remote_addrlen = to_addrlen; + memcpy(&cp->repinfo.remote_addr, to_addr, to_addrlen); /* setup for SSL (if needed) */ if(ssl) { @@ -3746,8 +3746,8 @@ outnet_comm_point_for_http(struct outside_network* outnet, close(fd); return 0; } - cp->repinfo.addrlen = to_addrlen; - memcpy(&cp->repinfo.addr, to_addr, to_addrlen); + cp->repinfo.remote_addrlen = to_addrlen; + memcpy(&cp->repinfo.remote_addr, to_addr, to_addrlen); /* setup for SSL (if needed) */ if(ssl) { diff --git a/services/rpz.c b/services/rpz.c index 77b6266fe..e8b734a89 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -1392,11 +1392,13 @@ log_rpz_apply(char* trigger, uint8_t* dname, struct addr_tree_node* addrnode, dnamestr[0]=0; } if(repinfo) { - addr_to_str(&repinfo->addr, repinfo->addrlen, ip, sizeof(ip)); - port = ntohs(((struct sockaddr_in*)&repinfo->addr)->sin_port); + addr_to_str(&repinfo->client_addr, repinfo->client_addrlen, ip, sizeof(ip)); + port = ntohs(((struct sockaddr_in*)&repinfo->client_addr)->sin_port); } else if(ms && ms->mesh_info && ms->mesh_info->reply_list) { - addr_to_str(&ms->mesh_info->reply_list->query_reply.addr, ms->mesh_info->reply_list->query_reply.addrlen, ip, sizeof(ip)); - port = ntohs(((struct sockaddr_in*)&ms->mesh_info->reply_list->query_reply.addr)->sin_port); + addr_to_str(&ms->mesh_info->reply_list->query_reply.client_addr, + ms->mesh_info->reply_list->query_reply.client_addrlen, + ip, sizeof(ip)); + port = ntohs(((struct sockaddr_in*)&ms->mesh_info->reply_list->query_reply.client_addr)->sin_port); } else { ip[0]=0; port = 0; @@ -1468,7 +1470,9 @@ rpz_resolve_client_action_and_zone(struct auth_zones* az, struct query_info* qin } z = rpz_find_zone(r->local_zones, qinfo->qname, qinfo->qname_len, qinfo->qclass, 0, 0, 0); - node = rpz_ipbased_trigger_lookup(r->client_set, &repinfo->addr, repinfo->addrlen, "clientip"); + node = rpz_ipbased_trigger_lookup(r->client_set, + &repinfo->client_addr, repinfo->client_addrlen, + "clientip"); if((z || node) && r->action_override == RPZ_DISABLED_ACTION) { if(r->log) log_rpz_apply((node?"clientip":"qname"), diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 39b507499..f850469ba 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -338,6 +338,8 @@ interfacechecks(struct config_file* cfg) int i, j, i2, j2; char*** resif = NULL; int* num_resif = NULL; + char portbuf[32]; + snprintf(portbuf, sizeof(portbuf), "%d", cfg->port); if(cfg->num_ifs != 0) { resif = (char***)calloc(cfg->num_ifs, sizeof(char**)); @@ -359,9 +361,21 @@ interfacechecks(struct config_file* cfg) fatal_exit("could not resolve interface names, for %s", cfg->ifs[i]); } + /* check for port combinations that are not supported */ + if(if_is_pp2(resif[i][0], portbuf, cfg->proxy_protocol_port)) { + if(if_is_dnscrypt(resif[i][0], portbuf, + cfg->dnscrypt_port)) { + fatal_exit("PROXYv2 and DNSCrypt combination not " + "supported!"); + } else if(if_is_https(resif[i][0], portbuf, + cfg->https_port)) { + fatal_exit("PROXYv2 and DoH combination not " + "supported!"); + } + } /* search for duplicates in the returned addresses */ for(j=0; jport)) { if(strcmp(cfg->ifs[i], resif[i][j]) != 0) fatal_exit("cannot parse interface address '%s' from the interface specified as '%s'", resif[i][j], cfg->ifs[i]); diff --git a/testcode/do-tests.sh b/testcode/do-tests.sh index 1669d6c33..6599f9f66 100755 --- a/testcode/do-tests.sh +++ b/testcode/do-tests.sh @@ -16,7 +16,7 @@ NEED_WHOAMI='07-confroot.tdir' NEED_IPV6='fwd_ancil.tdir fwd_tcp_tc6.tdir stub_udp6.tdir edns_cache.tdir' NEED_NOMINGW='tcp_sigpipe.tdir 07-confroot.tdir 08-host-lib.tdir fwd_ancil.tdir' NEED_DNSCRYPT_PROXY='dnscrypt_queries.tdir dnscrypt_queries_chacha.tdir' -NEED_UNSHARE='acl_interface.tdir' +NEED_UNSHARE='acl_interface.tdir proxy_protocol.tdir' # test if dig and ldns-testns are available. test_tool_avail "dig" diff --git a/testcode/fake_event.c b/testcode/fake_event.c index 03e1c04f3..efb22a6fb 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -384,8 +384,8 @@ answer_callback_from_entry(struct replay_runtime* runtime, fill_buffer_with_reply(c.buffer, entry, pend->pkt, pend->pkt_len, pend->tcp_pkt_counter); repinfo.c = &c; - repinfo.addrlen = pend->addrlen; - memcpy(&repinfo.addr, &pend->addr, pend->addrlen); + repinfo.remote_addrlen = pend->addrlen; + memcpy(&repinfo.remote_addr, &pend->addr, pend->addrlen); if(!pend->serviced) { if(entry && entry->reply_list->next && pend->tcp_pkt_counter < count_reply_packets(entry)) { @@ -415,7 +415,7 @@ answer_check_it(struct replay_runtime* runtime) tr = transport_udp; if((runtime->now->addrlen == 0 || sockaddr_cmp( &runtime->now->addr, runtime->now->addrlen, - &ans->repinfo.addr, ans->repinfo.addrlen) == 0) && + &ans->repinfo.remote_addr, ans->repinfo.remote_addrlen) == 0) && find_match(runtime->now->match, ans->pkt, ans->pkt_len, tr)) { log_info("testbound matched event entry from line %d", @@ -453,10 +453,12 @@ fake_front_query(struct replay_runtime* runtime, struct replay_moment *todo) repinfo.c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); if(!repinfo.c) fatal_exit("out of memory in fake_front_query"); - repinfo.addrlen = (socklen_t)sizeof(struct sockaddr_in); + repinfo.remote_addrlen = (socklen_t)sizeof(struct sockaddr_in); if(todo->addrlen != 0) { - repinfo.addrlen = todo->addrlen; - memcpy(&repinfo.addr, &todo->addr, todo->addrlen); + repinfo.remote_addrlen = todo->addrlen; + memcpy(&repinfo.remote_addr, &todo->addr, todo->addrlen); + repinfo.client_addrlen = todo->addrlen; + memcpy(&repinfo.client_addr, &todo->addr, todo->addrlen); } repinfo.c->fd = -1; repinfo.c->ev = (struct internal_event*)runtime; @@ -510,8 +512,8 @@ fake_pending_callback(struct replay_runtime* runtime, p->pkt_len, p->tcp_pkt_counter); } repinfo.c = &c; - repinfo.addrlen = p->addrlen; - memcpy(&repinfo.addr, &p->addr, p->addrlen); + repinfo.remote_addrlen = p->addrlen; + memcpy(&repinfo.remote_addr, &p->addr, p->addrlen); if(!p->serviced) { if(todo->match && todo->match->reply_list->next && !error && p->tcp_pkt_counter < count_reply_packets(todo->match)) { @@ -1663,6 +1665,7 @@ int create_udp_sock(int ATTR_UNUSED(family), int ATTR_UNUSED(socktype), struct comm_point* comm_point_create_udp(struct comm_base *ATTR_UNUSED(base), int ATTR_UNUSED(fd), sldns_buffer* ATTR_UNUSED(buffer), + int ATTR_UNUSED(pp2_enabled), comm_point_callback_type* ATTR_UNUSED(callback), void* ATTR_UNUSED(callback_arg), struct unbound_socket* ATTR_UNUSED(socket)) diff --git a/testcode/streamtcp.c b/testcode/streamtcp.c index 0761e9d18..b2c0d5328 100644 --- a/testcode/streamtcp.c +++ b/testcode/streamtcp.c @@ -49,6 +49,7 @@ #include "util/locks.h" #include "util/log.h" #include "util/net_help.h" +#include "util/proxy_protocol.h" #include "util/data/msgencode.h" #include "util/data/msgparse.h" #include "util/data/msgreply.h" @@ -71,6 +72,7 @@ static void usage(char* argv[]) printf("usage: %s [options] name type class ...\n", argv[0]); printf(" sends the name-type-class queries over TCP.\n"); printf("-f server what ipaddr@portnr to send the queries to\n"); + printf("-p client what ipaddr@portnr to include in PROXYv2\n"); printf("-u use UDP. No retries are attempted.\n"); printf("-n do not wait for an answer.\n"); printf("-a print answers as they arrive.\n"); @@ -82,18 +84,17 @@ static void usage(char* argv[]) /** open TCP socket to svr */ static int -open_svr(const char* svr, int udp) +open_svr(const char* svr, int udp, struct sockaddr_storage* addr, + socklen_t* addrlen) { - struct sockaddr_storage addr; - socklen_t addrlen; int fd = -1; /* svr can be ip@port */ - memset(&addr, 0, sizeof(addr)); - if(!extstrtoaddr(svr, &addr, &addrlen, UNBOUND_DNS_PORT)) { + memset(addr, 0, sizeof(*addr)); + if(!extstrtoaddr(svr, addr, addrlen, UNBOUND_DNS_PORT)) { printf("fatal: bad server specs '%s'\n", svr); exit(1); } - fd = socket(addr_is_ip6(&addr, addrlen)?PF_INET6:PF_INET, + fd = socket(addr_is_ip6(addr, *addrlen)?PF_INET6:PF_INET, udp?SOCK_DGRAM:SOCK_STREAM, 0); if(fd == -1) { #ifndef USE_WINSOCK @@ -103,7 +104,7 @@ open_svr(const char* svr, int udp) #endif exit(1); } - if(connect(fd, (struct sockaddr*)&addr, addrlen) < 0) { + if(connect(fd, (struct sockaddr*)addr, *addrlen) < 0) { #ifndef USE_WINSOCK perror("connect() error"); #else @@ -116,11 +117,12 @@ open_svr(const char* svr, int udp) /** write a query over the TCP fd */ static void -write_q(int fd, int udp, SSL* ssl, sldns_buffer* buf, uint16_t id, +write_q(int fd, int udp, SSL* ssl, sldns_buffer* buf, uint16_t id, + sldns_buffer* proxy_buf, int pp2_parsed, const char* strname, const char* strtype, const char* strclass) { struct query_info qinfo; - uint16_t len; + size_t proxy_buf_limit = sldns_buffer_limit(proxy_buf); /* qname */ qinfo.qname = sldns_str2wire_dname(strname, &qinfo.qname_len); if(!qinfo.qname) { @@ -152,9 +154,27 @@ write_q(int fd, int udp, SSL* ssl, sldns_buffer* buf, uint16_t id, attach_edns_record(buf, &edns); } + /* we need to send the PROXYv2 information in every UDP message */ + if(udp && pp2_parsed) { + /* append the proxy_buf with the buf's content + * and use that for sending */ + if(sldns_buffer_capacity(proxy_buf) < + sldns_buffer_limit(proxy_buf) + + sldns_buffer_limit(buf)) { + printf("buffer too small for packet + proxy"); + exit(1); + } + sldns_buffer_clear(proxy_buf); + sldns_buffer_skip(proxy_buf, proxy_buf_limit); + sldns_buffer_write(proxy_buf, sldns_buffer_begin(buf), + sldns_buffer_limit(buf)); + sldns_buffer_flip(proxy_buf); + buf = proxy_buf; + } + /* send it */ if(!udp) { - len = (uint16_t)sldns_buffer_limit(buf); + uint16_t len = (uint16_t)sldns_buffer_limit(buf); len = htons(len); if(ssl) { if(SSL_write(ssl, (void*)&len, (int)sizeof(len)) <= 0) { @@ -167,7 +187,7 @@ write_q(int fd, int udp, SSL* ssl, sldns_buffer* buf, uint16_t id, #ifndef USE_WINSOCK perror("send() len failed"); #else - printf("send len: %s\n", + printf("send len: %s\n", wsa_strerror(WSAGetLastError())); #endif exit(1); @@ -182,17 +202,20 @@ write_q(int fd, int udp, SSL* ssl, sldns_buffer* buf, uint16_t id, } } else { if(send(fd, (void*)sldns_buffer_begin(buf), - sldns_buffer_limit(buf), 0) < + sldns_buffer_limit(buf), 0) < (ssize_t)sldns_buffer_limit(buf)) { #ifndef USE_WINSOCK perror("send() data failed"); #else - printf("send data: %s\n", wsa_strerror(WSAGetLastError())); + printf("send data: %s\n", + wsa_strerror(WSAGetLastError())); #endif exit(1); } } + /* reset the proxy_buf for next packet */ + sldns_buffer_set_limit(proxy_buf, proxy_buf_limit); free(qinfo.qname); } @@ -224,7 +247,7 @@ recv_one(int fd, int udp, SSL* ssl, sldns_buffer* buf) #ifndef USE_WINSOCK perror("read() len failed"); #else - printf("read len: %s\n", + printf("read len: %s\n", wsa_strerror(WSAGetLastError())); #endif exit(1); @@ -243,12 +266,12 @@ recv_one(int fd, int udp, SSL* ssl, sldns_buffer* buf) if(r != (int)len) fatal_exit("ssl_read %d of %d", r, len); } else { - if(recv(fd, (void*)sldns_buffer_begin(buf), len, 0) < + if(recv(fd, (void*)sldns_buffer_begin(buf), len, 0) < (ssize_t)len) { #ifndef USE_WINSOCK perror("read() data failed"); #else - printf("read data: %s\n", + printf("read data: %s\n", wsa_strerror(WSAGetLastError())); #endif exit(1); @@ -257,12 +280,12 @@ recv_one(int fd, int udp, SSL* ssl, sldns_buffer* buf) } else { ssize_t l; sldns_buffer_clear(buf); - if((l=recv(fd, (void*)sldns_buffer_begin(buf), + if((l=recv(fd, (void*)sldns_buffer_begin(buf), sldns_buffer_capacity(buf), 0)) < 0) { #ifndef USE_WINSOCK perror("read() data failed"); #else - printf("read data: %s\n", + printf("read data: %s\n", wsa_strerror(WSAGetLastError())); #endif exit(1); @@ -324,17 +347,40 @@ static int get_random(void) return (int)arc4random(); } +/* parse the pp2_client and populate the proxy_buffer + * It doesn't populate the destination parts. */ +static int parse_pp2_client(const char* pp2_client, int udp, + sldns_buffer* proxy_buf) +{ + struct sockaddr_storage pp2_addr; + socklen_t pp2_addrlen = 0; + memset(&pp2_addr, 0, sizeof(pp2_addr)); + if(*pp2_client == 0) return 0; + if(!extstrtoaddr(pp2_client, &pp2_addr, &pp2_addrlen, UNBOUND_DNS_PORT)) { + printf("fatal: bad proxy client specs '%s'\n", pp2_client); + exit(1); + } + sldns_buffer_clear(proxy_buf); + pp2_write_to_buf(proxy_buf, &pp2_addr, !udp); + sldns_buffer_flip(proxy_buf); + return 1; +} + /** send the TCP queries and print answers */ static void -send_em(const char* svr, int udp, int usessl, int noanswer, int onarrival, - int delay, int num, char** qs) +send_em(const char* svr, const char* pp2_client, int udp, int usessl, + int noanswer, int onarrival, int delay, int num, char** qs) { sldns_buffer* buf = sldns_buffer_new(65553); - int fd = open_svr(svr, udp); - int i, wait_results = 0; + sldns_buffer* proxy_buf = sldns_buffer_new(65553); + struct sockaddr_storage svr_addr; + socklen_t svr_addrlen; + int fd = open_svr(svr, udp, &svr_addr, &svr_addrlen); + int i, wait_results = 0, pp2_parsed; SSL_CTX* ctx = NULL; SSL* ssl = NULL; if(!buf) fatal_exit("out of memory"); + pp2_parsed = parse_pp2_client(pp2_client, udp, proxy_buf); if(usessl) { ctx = connect_sslctx_create(NULL, NULL, NULL, 0); if(!ctx) fatal_exit("cannot create ssl ctx"); @@ -361,6 +407,28 @@ send_em(const char* svr, int udp, int usessl, int noanswer, int onarrival, } } } + /* Send the PROXYv2 information once per stream */ + if(!udp && pp2_parsed) { + if(ssl) { + if(SSL_write(ssl, (void*)sldns_buffer_begin(proxy_buf), + (int)sldns_buffer_limit(proxy_buf)) <= 0) { + log_crypto_err("cannot SSL_write"); + exit(1); + } + } else { + if(send(fd, (void*)sldns_buffer_begin(proxy_buf), + sldns_buffer_limit(proxy_buf), 0) < + (ssize_t)sldns_buffer_limit(proxy_buf)) { +#ifndef USE_WINSOCK + perror("send() data failed"); +#else + printf("send data: %s\n", + wsa_strerror(WSAGetLastError())); +#endif + exit(1); + } + } + } for(i=0; i&1`"; then + skip_test "no unshare (from util-linux package) available, skip test" +fi + +get_make +(cd $PRE; $MAKE streamtcp) + +get_random_port 4 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +PROXY_PORT=$(($RND_PORT + 2)) +PROXY_TLS_PORT=$(($RND_PORT + 3)) + +INTERFACE_ALLOW=eth123 +INTERFACE_ALLOW_ADDR=10.1.2.3 +INTERFACE_REFUSE=eth234 +INTERFACE_REFUSE_ADDR=10.2.3.4 + +CLIENT_ADDR_ALLOW=1.2.3.4 +CLIENT_ADDR_ALLOW6=2001:db8::cafe:cafe +CLIENT_ADDR_REFUSE=5.6.7.8 +CLIENT_ADDR_REFUSE6=2001:db8::dead:beef + +# make config file +sed \ + -e 's/@PORT\@/'$UNBOUND_PORT'/' \ + -e 's/@TOPORT\@/'$FWD_PORT'/' \ + -e 's/@PROXYPORT\@/'$PROXY_PORT'/' \ + -e 's/@PROXYTLSPORT\@/'$PROXY_TLS_PORT'/' \ + -e 's/@INTERFACE_ALLOW_ADDR\@/'$INTERFACE_ALLOW_ADDR'/' \ + -e 's/@INTERFACE_REFUSE_ADDR\@/'$INTERFACE_REFUSE_ADDR'/' \ + -e 's/@CLIENT_ADDR_ALLOW\@/'$CLIENT_ADDR_ALLOW'/' \ + -e 's/@CLIENT_ADDR_ALLOW6\@/'$CLIENT_ADDR_ALLOW6'/' \ + -e 's/@CLIENT_ADDR_REFUSE\@/'$CLIENT_ADDR_REFUSE'/' \ + -e 's/@CLIENT_ADDR_REFUSE6\@/'$CLIENT_ADDR_REFUSE6'/' \ + < proxy_protocol.conf > ub.conf + +if test -x "`which bash`"; then + shell="bash" +else + shell="sh" +fi + +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "PROXY_PORT=$PROXY_PORT" >> .tpkg.var.test +echo "PROXY_TLS_PORT=$PROXY_TLS_PORT" >> .tpkg.var.test +echo "INTERFACE_ALLOW=$INTERFACE_ALLOW" >> .tpkg.var.test +echo "INTERFACE_ALLOW_ADDR=$INTERFACE_ALLOW_ADDR" >> .tpkg.var.test +echo "INTERFACE_REFUSE=$INTERFACE_REFUSE" >> .tpkg.var.test +echo "INTERFACE_REFUSE_ADDR=$INTERFACE_REFUSE_ADDR" >> .tpkg.var.test +echo "CLIENT_ADDR_ALLOW=$CLIENT_ADDR_ALLOW" >> .tpkg.var.test +echo "CLIENT_ADDR_ALLOW6=$CLIENT_ADDR_ALLOW6" >> .tpkg.var.test +echo "CLIENT_ADDR_REFUSE=$CLIENT_ADDR_REFUSE" >> .tpkg.var.test +echo "CLIENT_ADDR_REFUSE6=$CLIENT_ADDR_REFUSE6" >> .tpkg.var.test +echo "shell=$shell" >> .tpkg.var.test diff --git a/testdata/proxy_protocol.tdir/proxy_protocol.test b/testdata/proxy_protocol.tdir/proxy_protocol.test new file mode 100644 index 000000000..3f65e2932 --- /dev/null +++ b/testdata/proxy_protocol.tdir/proxy_protocol.test @@ -0,0 +1,12 @@ +# #-- proxy_protocol.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh + +# Run the scenario in an unshared namespace +unshare -rUn $shell proxy_protocol.test.scenario +exit $? diff --git a/testdata/proxy_protocol.tdir/proxy_protocol.test.scenario b/testdata/proxy_protocol.tdir/proxy_protocol.test.scenario new file mode 100644 index 000000000..0b8fe6efa --- /dev/null +++ b/testdata/proxy_protocol.tdir/proxy_protocol.test.scenario @@ -0,0 +1,193 @@ +# #-- proxy_protocol.test.scenario --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh + +ip addr add 127.0.0.1 dev lo +ip link set lo up + +ip link add $INTERFACE_ALLOW type dummy +ip addr add $INTERFACE_ALLOW_ADDR dev $INTERFACE_ALLOW +ip link set $INTERFACE_ALLOW up + +ip link add $INTERFACE_REFUSE type dummy +ip addr add $INTERFACE_REFUSE_ADDR dev $INTERFACE_REFUSE +ip link set $INTERFACE_REFUSE up + +# start forwarder in the background +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT proxy_protocol.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + +# call streamtcp and check return value +do_streamtcp () { + $PRE/streamtcp $* A IN >outfile 2>&1 + if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat unbound.log + echo "Not OK" + exit 1 + fi +} + +send_query () { + server=$1 + client=$2 + prot=$3 + query=$4 + echo -n "> query $query to $server" + port=$UNBOUND_PORT + if test ! -z "$client"; then + port=$PROXY_PORT + fi + case $prot in + -u) + echo -n " (over UDP)" + ;; + -s) + echo -n " (over TLS)" + port=$PROXY_TLS_PORT + ;; + *) + echo -n " (over TCP)" + esac + if test ! -z "$client"; then + echo -n " ($client proxied)" + fi + echo + do_streamtcp $prot -f $server@$port $client $query + #cat outfile +} + +expect_answer () { + #query=$1 + #answer=$2 + if grep "$query" outfile | grep "$answer"; then + echo "content OK" + echo + else + echo "> cat logfiles" + cat outfile + cat unbound.log + echo "result contents not OK" + exit 1 + fi +} + +expect_refuse () { + if grep "rcode: REFUSE" outfile; then + echo "content OK" + echo + else + echo "> cat logfiles" + cat outfile + cat unbound.log + echo "result contents not OK" + exit 1 + fi +} + +# Start the test + +# Query without PROXYv2 +# Client localhost +# Expect the result back +server=127.0.0.1 +client="" +query="two.example.net." +answer="2.2.2.2" +for prot in "-u" ""; do + send_query "$server" "$client" "$prot" "$query" + expect_answer +done + +# Query with PROXYv2 +# Client $CLIENT_ADDR_ALLOW should be allowed +# Expect the result back +server=127.0.0.1 +client="-p $CLIENT_ADDR_ALLOW@1234" +query="one.example.net." +answer="1.1.1.1" +for prot in "-u" "" "-s"; do + send_query "$server" "$client" "$prot" "$query" + expect_answer +done + +# Query with PROXYv2 +# Client $CLIENT_ADDR_ALLOW6 should be allowed +# Expect the result back +server=127.0.0.1 +client="-p $CLIENT_ADDR_ALLOW6@1234" +query="one.example.net." +answer="1.1.1.1" +for prot in "-u" "" "-s"; do + send_query "$server" "$client" "$prot" "$query" + expect_answer +done + +# Query with PROXYv2 +# Client $CLIENT_ADDR_REFUSE should be refused +# Expect the REFUSE back +server=127.0.0.1 +client="-p $CLIENT_ADDR_REFUSE" +query="one.example.net." +answer="" +for prot in "-u" "" "-s"; do + send_query "$server" "$client" "$prot" "$query" + expect_refuse +done + +# Query with PROXYv2 +# Client $CLIENT_ADDR_REFUSE6 should be refused +# Expect the REFUSE back +server=127.0.0.1 +client="-p $CLIENT_ADDR_REFUSE6" +query="one.example.net." +answer="" +for prot in "-u" "" "-s"; do + send_query "$server" "$client" "$prot" "$query" + expect_refuse +done + +# Query with PROXYv2 +# Client $CLIENT_ADDR_ALLOW should be allowed; proxy source address should be allowed +# Expect the result back +server=$INTERFACE_ALLOW_ADDR +client="-p $CLIENT_ADDR_ALLOW@1234" +query="one.example.net." +answer="1.1.1.1" +for prot in "-u" "" "-s"; do + send_query "$server" "$client" "$prot" "$query" + expect_answer +done + +# Query with PROXYv2 +# Client $CLIENT_ADDR_ALLOW should be allowed; proxy source address should be refused +# Expect the REFUSE back +server=$INTERFACE_REFUSE_ADDR +client="-p $CLIENT_ADDR_ALLOW@1234" +query="one.example.net." +answer="" +for prot in "-u" "" "-s"; do + send_query "$server" "$client" "$prot" "$query" + expect_refuse +done + +echo "OK" +exit 0 + diff --git a/testdata/proxy_protocol.tdir/proxy_protocol.testns b/testdata/proxy_protocol.tdir/proxy_protocol.testns new file mode 100644 index 000000000..176bc936a --- /dev/null +++ b/testdata/proxy_protocol.tdir/proxy_protocol.testns @@ -0,0 +1,23 @@ +; nameserver test file +$ORIGIN example.net. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR RD RA NOERROR +ADJUST copy_id +SECTION QUESTION +one IN A +SECTION ANSWER +one IN A 1.1.1.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR RD RA NOERROR +ADJUST copy_id +SECTION QUESTION +two IN A +SECTION ANSWER +two IN A 2.2.2.2 +ENTRY_END diff --git a/testdata/proxy_protocol.tdir/unbound_server.key b/testdata/proxy_protocol.tdir/unbound_server.key new file mode 100644 index 000000000..370a7bbb2 --- /dev/null +++ b/testdata/proxy_protocol.tdir/unbound_server.key @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI +0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq +GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z +uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K +WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5 +FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP +q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL +A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP +7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf +XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6 +iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7 +2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo +MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj +WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz +O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI +IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN +qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU +dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs +bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr +YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km +7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr +gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z +5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG +ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN +oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+ +s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW +zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx +ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1 +oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3 +BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS +mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8 +kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93 +7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8 +RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O +jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp +O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre +MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A== +-----END RSA PRIVATE KEY----- diff --git a/testdata/proxy_protocol.tdir/unbound_server.pem b/testdata/proxy_protocol.tdir/unbound_server.pem new file mode 100644 index 000000000..986807310 --- /dev/null +++ b/testdata/proxy_protocol.tdir/unbound_server.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx +EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5 +WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32 +a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2 +4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot +aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4 +TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ +uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4 ++nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz +XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx +dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW +84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7 +JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca +fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg +XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF +qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25 +sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD +yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe +CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ== +-----END CERTIFICATE----- diff --git a/util/config_file.c b/util/config_file.c index 158169c42..f807397e4 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -786,6 +786,7 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_SIZET_NONZERO("pad-responses-block-size:", pad_responses_block_size) else S_YNO("pad-queries:", pad_queries) else S_SIZET_NONZERO("pad-queries-block-size:", pad_queries_block_size) + else S_STRLIST("proxy-protocol-port:", proxy_protocol_port) #ifdef USE_IPSECMOD else S_YNO("ipsecmod-enabled:", ipsecmod_enabled) else S_YNO("ipsecmod-ignore-bogus:", ipsecmod_ignore_bogus) @@ -1262,6 +1263,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "pad-queries", pad_queries) else O_DEC(opt, "pad-queries-block-size", pad_queries_block_size) else O_LS2(opt, "edns-client-strings", edns_client_strings) + else O_LST(opt, "proxy-protocol-port", proxy_protocol_port) #ifdef USE_IPSECMOD else O_YNO(opt, "ipsecmod-enabled", ipsecmod_enabled) else O_YNO(opt, "ipsecmod-ignore-bogus", ipsecmod_ignore_bogus) @@ -1642,6 +1644,7 @@ config_delete(struct config_file* cfg) config_delstrlist(cfg->python_script); config_delstrlist(cfg->dynlib_file); config_deldblstrlist(cfg->edns_client_strings); + config_delstrlist(cfg->proxy_protocol_port); #ifdef USE_IPSECMOD free(cfg->ipsecmod_hook); config_delstrlist(cfg->ipsecmod_whitelist); @@ -2624,3 +2627,35 @@ int cfg_has_https(struct config_file* cfg) } return 0; } + +/** see if interface is PROXYv2, its port number == the proxy port number */ +int +if_is_pp2(const char* ifname, const char* port, + struct config_strlist* proxy_protocol_port) +{ + struct config_strlist* s; + char* p = strchr(ifname, '@'); + for(s = proxy_protocol_port; s; s = s->next) { + if(p && atoi(p+1) == atoi(s->str)) + return 1; + if(!p && atoi(port) == atoi(s->str)) + return 1; + } + return 0; +} + +/** see if interface is DNSCRYPT, its port number == the dnscrypt port number */ +int +if_is_dnscrypt(const char* ifname, const char* port, int dnscrypt_port) +{ +#ifdef USE_DNSCRYPT + return ((strchr(ifname, '@') && + atoi(strchr(ifname, '@')+1) == dnscrypt_port) || + (!strchr(ifname, '@') && atoi(port) == dnscrypt_port)); +#else + (void)ifname; + (void)port; + (void)dnscrypt_port; + return 0; +#endif +} diff --git a/util/config_file.h b/util/config_file.h index bbc6d4ac1..b1406913a 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -114,6 +114,8 @@ struct config_file { int do_tcp_keepalive; /** tcp keepalive timeout, in msec */ int tcp_keepalive_timeout; + /** proxy protocol ports */ + struct config_strlist* proxy_protocol_port; /** private key file for dnstcp-ssl service (enabled if not NULL) */ char* ssl_service_key; @@ -1322,6 +1324,12 @@ int if_is_https(const char* ifname, const char* port, int https_port); */ int cfg_has_https(struct config_file* cfg); +/** see if interface is PROXYv2, its port number == the proxy port number */ +int if_is_pp2(const char* ifname, const char* port, + struct config_strlist* proxy_protocol_port); + +/** see if interface is DNSCRYPT, its port number == the dnscrypt port number */ +int if_is_dnscrypt(const char* ifname, const char* port, int dnscrypt_port); #ifdef USE_LINUX_IP_LOCAL_PORT_RANGE #define LINUX_IP_LOCAL_PORT_RANGE_PATH "/proc/sys/net/ipv4/ip_local_port_range" #endif diff --git a/util/configlexer.c b/util/configlexer.c index 0323464e3..845d9e00d 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -354,8 +354,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 368 -#define YY_END_OF_BUFFER 369 +#define YY_NUM_RULES 369 +#define YY_END_OF_BUFFER 370 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -363,407 +363,409 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[3628] = +static const flex_int16_t yy_accept[3646] = { 0, - 1, 1, 342, 342, 346, 346, 350, 350, 354, 354, - 1, 1, 358, 358, 362, 362, 369, 366, 1, 340, - 340, 367, 2, 367, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 342, 343, 343, 344, - 367, 346, 347, 347, 348, 367, 353, 350, 351, 351, - 352, 367, 354, 355, 355, 356, 367, 365, 341, 2, - 345, 367, 365, 361, 358, 359, 359, 360, 367, 362, - 363, 363, 364, 367, 366, 0, 1, 2, 2, 2, - 2, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 1, 1, 343, 343, 347, 347, 351, 351, 355, 355, + 1, 1, 359, 359, 363, 363, 370, 367, 1, 341, + 341, 368, 2, 368, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 343, 344, 344, 345, + 368, 347, 348, 348, 349, 368, 354, 351, 352, 352, + 353, 368, 355, 356, 356, 357, 368, 366, 342, 2, + 346, 368, 366, 362, 359, 360, 360, 361, 368, 363, + 364, 364, 365, 368, 367, 0, 1, 2, 2, 2, + 2, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 342, - 0, 346, 0, 353, 0, 350, 354, 0, 365, 0, - 2, 2, 365, 361, 0, 358, 362, 0, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 343, + 0, 347, 0, 354, 0, 351, 355, 0, 366, 0, + 2, 2, 366, 362, 0, 359, 363, 0, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 365, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 366, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 339, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 133, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 143, 366, 366, 366, 366, 366, 366, - 366, 365, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 339, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 133, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 143, 367, 367, 367, 367, + 367, 367, 367, 366, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 115, 366, 338, 366, 366, 366, 366, 366, - 366, 366, 366, 8, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 115, 367, 338, 367, 367, 367, + 367, 367, 367, 367, 367, 8, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 134, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 148, 366, - 366, 365, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 134, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 148, 367, 367, 366, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 331, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 331, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 365, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 69, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 260, 366, 14, 15, 366, 19, 18, - 366, 366, 240, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 69, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 260, 367, 14, + 15, 367, 19, 18, 367, 367, 240, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 141, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 238, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 3, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 141, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 238, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 3, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 365, 366, 366, 366, 366, - 366, 366, 366, 325, 366, 366, 324, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 366, 367, 367, 367, 367, 367, 367, 367, 325, 367, + 367, 324, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 349, 366, 366, - 366, 366, 366, 366, 366, 366, 68, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 72, 366, 294, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 332, 333, 366, 366, 366, - 366, 366, 366, 366, 366, 73, 366, 366, 142, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 137, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 227, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 350, 367, 367, 367, 367, 367, 367, 367, + 367, 68, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 72, 367, + 294, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 332, 333, 367, 367, 367, 367, 367, 367, 367, 367, + 73, 367, 367, 142, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 137, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 227, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 21, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 169, 366, 366, 366, 366, 366, 365, 349, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 113, - 366, 366, 366, 366, 366, 366, 366, 302, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 196, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 21, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 169, 367, 367, 367, + 367, 367, 366, 350, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 113, 367, 367, 367, 367, + 367, 367, 367, 302, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 168, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 112, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 367, 196, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 168, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 112, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 35, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 36, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 70, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 140, 366, 366, 366, - 365, 366, 366, 366, 366, 366, 132, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 71, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 264, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 35, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 36, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 70, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 140, 367, 367, 367, 366, 367, 367, + 367, 367, 367, 132, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 71, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 197, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 58, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 367, 264, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 197, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 58, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 282, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 63, 366, 64, - 366, 366, 366, 366, 366, 116, 366, 117, 366, 366, - 366, 366, 366, 114, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 7, 366, 366, - 366, 366, 365, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 282, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 63, 367, 64, 367, 367, + 367, 367, 367, 116, 367, 117, 367, 367, 367, 367, + 367, 114, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 7, 367, 367, 367, 367, + 366, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 249, 366, 366, 366, 366, 172, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 265, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 49, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 59, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 219, 366, 218, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 249, + 367, 367, 367, 367, 172, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 265, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 49, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 59, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 219, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 16, 17, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 74, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 226, 366, 366, 366, 366, 366, 366, - 119, 366, 118, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 210, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 149, + 367, 218, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 16, 17, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 74, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 226, 367, 367, 367, 367, 367, 367, 119, + 367, 118, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 210, 367, - 366, 366, 366, 365, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 107, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 95, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 239, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 100, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 67, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 149, 367, + 367, 367, 366, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 107, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 95, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 239, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 100, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 213, 214, 366, - 366, 366, 296, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 6, 366, 366, 366, - 366, 366, 366, 366, 315, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 300, 366, 366, 366, 366, 366, 366, - 366, 326, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 46, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 67, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 213, 214, 367, 367, + 367, 296, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 6, 367, 367, 367, 367, + 367, 367, 367, 315, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 300, 367, 367, 367, 367, 367, 367, + 367, 326, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 48, 366, 366, 366, 96, 366, 366, 366, - 366, 366, 56, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 365, 366, 206, 366, 366, 366, - 144, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 231, 366, 207, 366, 366, 366, 246, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 57, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 146, 125, 366, 126, 366, 366, 366, 366, 124, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 165, 366, + 367, 367, 367, 367, 367, 367, 46, 367, 367, 367, + 367, 367, 48, 367, 367, 367, 96, 367, 367, 367, + 367, 367, 56, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 366, 367, 206, 367, 367, 367, + 144, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 231, 367, 207, 367, 367, 367, 246, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 57, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 146, 125, 367, 126, 367, 367, 367, 367, 124, 367, - 366, 54, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 281, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 208, 366, 366, 366, 366, 366, 211, 366, - 217, 366, 366, 366, 366, 366, 366, 245, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 111, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 138, 366, 366, 366, 366, - 366, 366, 366, 366, 65, 366, 366, 366, 29, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 165, 367, + 367, 54, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 281, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 208, 367, 367, 367, 367, 367, 211, 367, + 217, 367, 367, 367, 367, 367, 367, 245, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 111, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 138, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 20, 366, 366, 366, 366, 366, 366, 366, 30, - 39, 366, 177, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 204, 366, 366, - 365, 366, 366, 366, 366, 366, 366, 82, 84, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 304, 366, 366, 366, 366, 261, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 127, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 65, 367, 367, 367, 29, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 20, 367, 367, 367, 367, 367, 367, 367, + 30, 39, 367, 177, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 204, 367, + 367, 366, 367, 367, 367, 367, 367, 367, 82, 84, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 304, 367, 367, 367, 367, 261, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 164, 366, 50, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 255, 366, 366, 366, - 366, 366, 366, 366, 319, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 171, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 313, 366, - 366, 366, 237, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 329, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 189, 366, 366, 366, + 367, 367, 127, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 164, 367, 50, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 255, 367, 367, + 367, 367, 367, 367, 367, 319, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 171, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 313, + 367, 367, 367, 367, 237, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 329, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 120, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 184, 366, 198, 366, 366, 366, 366, 366, 366, 366, - 365, 366, 152, 366, 366, 366, 366, 366, 106, 366, - 366, 366, 366, 229, 366, 366, 366, 366, 366, 366, - 247, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 273, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 145, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 189, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 120, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 184, 367, 198, 367, 367, 367, 367, 367, + 367, 367, 366, 367, 152, 367, 367, 367, 367, 367, + 106, 367, 367, 367, 367, 229, 367, 367, 367, 367, + 367, 367, 247, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 273, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 188, 366, 366, - 366, 366, 366, 366, 366, 85, 366, 86, 366, 366, - 366, 366, 366, 258, 366, 366, 366, 366, 66, 322, - 366, 366, 366, 366, 366, 94, 199, 366, 220, 366, - 250, 366, 366, 212, 297, 366, 366, 366, 366, 366, - 366, 78, 366, 201, 366, 366, 366, 366, 366, 366, - 9, 366, 366, 366, 366, 366, 110, 366, 366, 366, - 366, 366, 286, 366, 366, 366, 366, 228, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 367, 145, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 188, + 367, 367, 367, 367, 367, 367, 367, 85, 367, 86, + 367, 367, 367, 367, 367, 258, 367, 367, 367, 367, + 66, 322, 367, 367, 367, 367, 367, 94, 199, 367, + 220, 367, 250, 367, 367, 212, 297, 367, 367, 367, + 367, 367, 367, 78, 367, 201, 367, 367, 367, 367, + 367, 367, 9, 367, 367, 367, 367, 367, 110, 367, + 367, 367, 367, 367, 367, 286, 367, 367, 367, 367, + 228, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 365, 366, 366, 366, 366, 187, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 173, 366, - 303, 366, 366, 366, 366, 366, 272, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 241, 366, - 366, 366, 366, 366, 366, 295, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 170, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 366, 367, 367, 367, 367, + 187, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 173, 367, 303, 367, 367, 367, 367, 367, 272, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 241, 367, 367, 367, 367, 367, 367, 295, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 323, 366, 200, 366, 366, 366, - 366, 366, 366, 366, 366, 77, 79, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 109, 366, 366, - 366, 366, 366, 284, 366, 366, 366, 366, 299, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 233, 37, 31, 33, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 38, 366, - 32, 34, 366, 40, 366, 366, 366, 366, 366, 366, - 366, 105, 366, 183, 366, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 170, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 323, 367, 200, + 367, 367, 367, 367, 367, 367, 367, 367, 77, 79, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 109, 367, 367, 367, 367, 367, 367, 284, 367, 367, + 367, 367, 299, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 233, 37, 31, 33, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 38, 367, 32, 34, 367, 40, 367, 367, - 366, 365, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 235, 232, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 76, 366, 366, 366, 147, 366, - 128, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 166, 51, 366, 366, 366, 357, 13, 366, 366, - 366, 366, 366, 366, 366, 153, 366, 366, 366, 366, - 366, 366, 366, 317, 366, 320, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 12, 366, - 366, 22, 366, 366, 366, 366, 366, 366, 290, 366, + 367, 367, 367, 367, 367, 105, 367, 183, 367, 367, + 367, 367, 367, 367, 367, 366, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 235, 232, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 76, 367, + 367, 367, 147, 367, 128, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 166, 51, 367, 367, 367, + 358, 13, 367, 367, 367, 367, 367, 367, 367, 153, + 367, 367, 367, 367, 367, 367, 367, 317, 367, 320, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 301, 366, 366, 366, 366, 80, 366, - 243, 366, 366, 366, 366, 366, 234, 366, 366, 75, - 366, 366, 366, 366, 366, 366, 23, 366, 366, 47, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 182, 181, 366, 366, 357, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 236, 230, 366, 248, - 366, 366, 305, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 194, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 87, + 367, 367, 12, 367, 367, 22, 367, 367, 367, 367, + 367, 367, 367, 290, 367, 367, 367, 367, 301, 367, + 367, 367, 367, 80, 367, 243, 367, 367, 367, 367, + 367, 234, 367, 367, 75, 367, 367, 367, 367, 367, + 367, 23, 367, 367, 47, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 182, 181, 367, + 367, 358, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 236, 230, 367, 248, 367, 367, 305, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 194, 367, 367, 367, 367, 367, 367, 367, - 366, 366, 366, 366, 366, 366, 366, 285, 366, 366, - 366, 366, 216, 366, 366, 366, 366, 366, 242, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 292, 366, - 366, 366, 327, 328, 179, 366, 366, 366, 81, 366, - 366, 366, 366, 190, 366, 366, 366, 121, 123, 122, - 366, 366, 366, 25, 366, 366, 174, 366, 176, 366, - 221, 366, 366, 366, 366, 180, 366, 366, 366, 366, - 251, 366, 366, 366, 366, 366, 366, 366, 155, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 263, 366, 366, 366, 366, 366, 366, 366, 336, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 87, 367, 367, 367, 367, 367, + 367, 367, 285, 367, 367, 367, 367, 216, 367, 367, + 367, 367, 367, 242, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 292, 367, 367, 367, 327, 328, + 179, 367, 367, 367, 81, 367, 367, 367, 367, 190, + 367, 367, 367, 121, 123, 122, 367, 367, 367, 25, + 367, 367, 174, 367, 176, 367, 221, 367, 367, 367, + 367, 180, 367, 367, 367, 367, 251, 367, 367, 367, + 367, 367, 367, 367, 155, 367, 367, 367, 367, 367, - 366, 27, 366, 298, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 92, 222, 366, 366, 257, 366, 366, 283, 366, - 321, 366, 215, 366, 366, 366, 366, 366, 293, 60, - 366, 366, 366, 366, 366, 366, 4, 366, 366, 366, - 366, 136, 366, 154, 366, 366, 366, 195, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 254, 41, 42, 366, - 366, 366, 366, 366, 366, 366, 306, 366, 366, 366, - 366, 366, 366, 366, 271, 366, 366, 366, 366, 366, + 367, 367, 367, 367, 367, 367, 367, 263, 367, 367, + 367, 367, 367, 367, 367, 336, 367, 27, 367, 298, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 92, 222, 367, + 367, 257, 367, 367, 283, 367, 321, 367, 215, 367, + 367, 367, 367, 367, 293, 60, 367, 367, 367, 367, + 367, 367, 367, 4, 367, 367, 367, 367, 136, 367, + 154, 367, 367, 367, 195, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 254, 41, 42, 367, 367, 367, 367, - 366, 366, 366, 225, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 91, 90, - 366, 366, 61, 366, 366, 289, 366, 259, 366, 366, - 366, 366, 366, 11, 366, 366, 366, 366, 366, 366, - 366, 366, 135, 366, 366, 366, 366, 366, 223, 97, - 366, 366, 44, 366, 366, 366, 366, 366, 366, 366, - 366, 186, 366, 366, 366, 366, 366, 366, 366, 157, - 366, 366, 366, 366, 262, 366, 366, 366, 366, 366, - 270, 366, 366, 366, 366, 150, 366, 366, 366, 129, - 131, 130, 366, 366, 366, 99, 103, 98, 167, 366, + 367, 367, 367, 306, 367, 367, 367, 367, 367, 367, + 367, 271, 367, 367, 367, 367, 367, 367, 367, 367, + 225, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 91, 90, 367, 367, 61, + 367, 367, 289, 367, 259, 367, 367, 367, 367, 367, + 11, 367, 367, 367, 367, 340, 367, 367, 367, 367, + 135, 367, 367, 367, 367, 367, 223, 97, 367, 367, + 44, 367, 367, 367, 367, 367, 367, 367, 367, 186, + 367, 367, 367, 367, 367, 367, 367, 157, 367, 367, + 367, 367, 262, 367, 367, 367, 367, 367, 270, 367, - 366, 366, 366, 88, 366, 256, 291, 366, 366, 366, - 366, 366, 366, 10, 366, 366, 366, 366, 366, 287, - 330, 366, 366, 366, 366, 366, 366, 335, 43, 366, - 366, 366, 366, 366, 185, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 104, 102, 366, 55, 366, 366, 89, 366, 318, 366, - 366, 366, 366, 24, 366, 366, 366, 366, 366, 209, - 366, 366, 366, 366, 366, 366, 224, 366, 366, 366, - 366, 366, 366, 366, 366, 205, 366, 366, 175, 83, + 367, 367, 367, 150, 367, 367, 367, 129, 131, 130, + 367, 367, 367, 99, 103, 98, 167, 367, 367, 367, + 367, 88, 367, 256, 291, 367, 367, 367, 367, 367, + 367, 10, 367, 367, 367, 367, 367, 287, 330, 367, + 367, 367, 367, 367, 367, 335, 43, 367, 367, 367, + 367, 367, 185, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 104, 102, + 367, 55, 367, 367, 89, 367, 318, 367, 367, 367, + 367, 24, 367, 367, 367, 367, 367, 209, 367, 367, - 366, 366, 366, 366, 366, 307, 366, 366, 366, 366, - 366, 366, 366, 267, 366, 366, 266, 151, 366, 366, - 101, 52, 366, 366, 158, 159, 162, 163, 160, 161, - 93, 316, 366, 366, 288, 139, 366, 366, 366, 26, - 366, 178, 366, 366, 366, 366, 203, 366, 253, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 192, 191, 45, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 314, 366, 366, 366, + 367, 367, 367, 367, 224, 367, 367, 367, 367, 367, + 367, 367, 367, 205, 367, 367, 175, 83, 367, 367, + 367, 367, 367, 307, 367, 367, 367, 367, 367, 367, + 367, 267, 367, 367, 266, 151, 367, 367, 101, 52, + 367, 367, 158, 159, 162, 163, 160, 161, 93, 316, + 367, 367, 288, 139, 367, 367, 367, 26, 367, 178, + 367, 367, 367, 367, 203, 367, 253, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 192, 191, + 45, 367, 367, 367, 367, 367, 367, 367, 367, 367, - 366, 108, 366, 252, 366, 280, 311, 366, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 337, 366, - 53, 62, 5, 366, 366, 244, 366, 366, 312, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 268, 28, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 269, 366, 366, 366, 156, 366, 366, 366, - 366, 366, 366, 366, 366, 193, 366, 202, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 308, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, 366, 334, 366, 366, 276, 366, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 314, 367, 367, 367, 367, 108, + 367, 252, 367, 280, 311, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 337, 367, 53, 62, + 5, 367, 367, 244, 367, 367, 312, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 268, 28, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 269, 367, 367, 367, 156, 367, 367, 367, 367, 367, + 367, 367, 367, 193, 367, 202, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 308, 367, 367, 367, 367, - 366, 366, 366, 366, 309, 366, 366, 366, 366, 366, - 366, 310, 366, 366, 366, 274, 366, 277, 278, 366, - 366, 366, 366, 366, 275, 279, 0 + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 334, 367, 367, 276, 367, 367, 367, + 367, 367, 309, 367, 367, 367, 367, 367, 367, 310, + 367, 367, 367, 274, 367, 277, 278, 367, 367, 367, + 367, 367, 275, 279, 0 } ; static const YY_CHAR yy_ec[256] = @@ -806,17 +808,17 @@ static const YY_CHAR yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[3646] = +static const flex_int16_t yy_base[3664] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 96, 118, 124, 136, 4833, 4680, 81, 7073, - 7073, 7073, 129, 52, 130, 63, 131, 152, 70, 140, + 90, 112, 96, 118, 124, 136, 4156, 2779, 81, 7110, + 7110, 7110, 129, 52, 130, 63, 131, 152, 70, 140, 149, 156, 57, 88, 76, 173, 175, 95, 197, 145, - 185, 199, 208, 213, 178, 123, 4078, 7073, 7073, 7073, - 107, 3686, 7073, 7073, 7073, 154, 3641, 2669, 7073, 7073, - 7073, 245, 2592, 7073, 7073, 7073, 163, 2519, 7073, 249, - 7073, 253, 148, 2320, 2287, 7073, 7073, 7073, 257, 2134, - 7073, 7073, 7073, 233, 1825, 263, 201, 0, 267, 0, + 185, 199, 208, 213, 178, 123, 2391, 7110, 7110, 7110, + 107, 2147, 7110, 7110, 7110, 154, 2117, 1982, 7110, 7110, + 7110, 245, 1770, 7110, 7110, 7110, 163, 1609, 7110, 249, + 7110, 253, 148, 1509, 1480, 7110, 7110, 7110, 257, 1324, + 7110, 7110, 7110, 233, 1201, 263, 201, 0, 267, 0, 0, 165, 191, 221, 252, 205, 181, 265, 92, 261, 216, 263, 271, 272, 210, 279, 274, 282, 278, 291, @@ -824,9 +826,9 @@ static const flex_int16_t yy_base[3646] = 317, 311, 315, 319, 321, 331, 327, 332, 336, 322, 339, 337, 346, 345, 347, 348, 353, 351, 357, 284, 358, 359, 369, 360, 380, 365, 381, 379, 375, 366, - 367, 389, 390, 394, 393, 395, 396, 403, 404, 1718, - 419, 1459, 422, 1387, 429, 1205, 1013, 433, 984, 437, - 441, 0, 433, 780, 447, 527, 467, 452, 411, 445, + 367, 389, 390, 394, 393, 395, 396, 403, 404, 1026, + 419, 993, 422, 933, 429, 800, 757, 433, 713, 437, + 441, 0, 433, 515, 447, 479, 364, 452, 411, 445, 426, 446, 447, 448, 449, 450, 451, 453, 452, 456, 470, 234, 463, 473, 481, 479, 476, 483, 486, 493, @@ -834,789 +836,793 @@ static const flex_int16_t yy_base[3646] = 512, 513, 460, 514, 517, 529, 518, 516, 526, 538, 539, 550, 543, 534, 551, 552, 400, 559, 555, 563, 558, 570, 565, 574, 566, 569, 571, 576, 573, 577, - 580, 578, 581, 584, 587, 588, 598, 589, 596, 600, - 601, 611, 602, 612, 607, 610, 362, 609, 541, 619, - 622, 617, 624, 625, 626, 629, 632, 639, 641, 642, - 643, 645, 634, 648, 647, 638, 649, 651, 659, 662, - 660, 663, 670, 669, 671, 672, 673, 675, 652, 682, - 678, 686, 679, 692, 691, 693, 695, 697, 699, 698, + 580, 581, 578, 584, 585, 587, 589, 598, 599, 590, + 602, 596, 611, 607, 616, 612, 614, 613, 617, 541, + 627, 628, 620, 629, 630, 624, 633, 641, 637, 649, + 644, 635, 645, 647, 648, 652, 651, 656, 653, 668, + 670, 669, 672, 679, 665, 675, 666, 678, 682, 681, + 691, 654, 686, 693, 698, 683, 696, 699, 687, 702, - 700, 702, 703, 705, 7073, 716, 706, 721, 717, 728, - 723, 707, 725, 732, 735, 718, 731, 734, 733, 736, - 739, 740, 741, 743, 747, 750, 748, 753, 752, 763, - 767, 759, 774, 760, 761, 772, 782, 775, 768, 776, - 795, 790, 796, 802, 804, 805, 807, 808, 806, 809, - 811, 812, 813, 827, 816, 829, 823, 819, 830, 832, - 839, 840, 7073, 836, 837, 851, 844, 853, 857, 854, - 863, 846, 869, 867, 872, 873, 885, 907, 875, 880, - 874, 876, 890, 7073, 893, 897, 931, 877, 900, 919, - 914, 881, 905, 917, 916, 921, 935, 915, 922, 937, + 704, 705, 710, 711, 708, 7110, 718, 714, 721, 722, + 729, 726, 731, 733, 740, 741, 716, 725, 737, 739, + 744, 746, 748, 750, 742, 751, 755, 753, 759, 763, + 770, 765, 772, 785, 767, 773, 777, 778, 786, 774, + 780, 798, 812, 790, 808, 809, 795, 813, 814, 815, + 816, 818, 822, 819, 833, 821, 823, 830, 836, 837, + 839, 840, 847, 842, 7110, 844, 852, 866, 853, 862, + 865, 849, 869, 871, 850, 881, 877, 874, 891, 913, + 878, 884, 882, 886, 889, 7110, 896, 893, 937, 895, + 902, 923, 918, 906, 919, 920, 921, 925, 947, 928, - 954, 952, 936, 939, 938, 955, 949, 967, 962, 965, - 887, 966, 974, 969, 970, 971, 981, 972, 973, 977, - 982, 988, 995, 999, 983, 1003, 997, 991, 1005, 1008, - 1009, 1004, 1006, 1029, 1017, 1012, 1025, 1031, 1023, 1039, - 1016, 1038, 1036, 1045, 1049, 1041, 1051, 1053, 1056, 1057, - 1058, 1059, 1069, 1064, 1065, 1067, 1070, 1072, 1073, 1078, - 1076, 1079, 1081, 1083, 1084, 1087, 1092, 1094, 1098, 1085, - 1099, 1101, 7073, 1107, 7073, 1105, 1102, 1109, 1111, 1112, - 1113, 1114, 1115, 7073, 1117, 1121, 1116, 1124, 1125, 1122, - 1146, 1142, 1129, 1141, 1145, 1144, 1150, 1151, 1159, 1154, + 926, 943, 961, 958, 942, 948, 945, 959, 967, 972, + 969, 971, 973, 974, 983, 883, 976, 975, 989, 978, + 979, 984, 990, 994, 997, 1003, 1007, 1008, 1009, 999, + 1001, 1013, 1014, 1017, 1025, 1048, 1021, 1019, 1030, 1020, + 1037, 1042, 1022, 1038, 1050, 1049, 1051, 1039, 1040, 1055, + 1058, 1067, 1060, 1063, 1076, 1071, 1074, 1077, 1078, 1079, + 1081, 1080, 1085, 1086, 1087, 1088, 1095, 1093, 1094, 1101, + 1103, 1096, 1109, 1107, 7110, 1111, 7110, 1113, 1114, 1115, + 1116, 1118, 1119, 1120, 1121, 7110, 1123, 1126, 1127, 1137, + 1128, 1138, 1145, 1152, 1130, 1148, 1149, 1150, 1151, 1155, - 1161, 1162, 1155, 1163, 1157, 1166, 1128, 1167, 1170, 1171, - 1173, 1175, 1177, 1195, 7073, 1178, 1181, 1182, 1184, 1186, - 1199, 1191, 1206, 1208, 1212, 1218, 1200, 1183, 1226, 1222, - 1224, 1225, 1229, 1230, 1232, 1234, 1235, 1238, 1239, 1241, - 1244, 1242, 1246, 1249, 1248, 1247, 1255, 1258, 7073, 1260, - 1263, 1271, 1278, 1262, 1265, 1273, 1276, 1279, 1277, 1281, - 1283, 1282, 1286, 1289, 1288, 1299, 1291, 1304, 1300, 1302, - 1301, 1306, 1308, 1311, 1307, 1309, 1328, 1317, 1319, 1332, - 1335, 1334, 1337, 1344, 1346, 1324, 1320, 1339, 1347, 1343, - 1349, 1352, 1353, 1354, 1355, 1357, 1358, 1367, 1363, 1365, + 1158, 1169, 1156, 1161, 1172, 1159, 1174, 1171, 1168, 1177, + 1175, 1182, 1178, 1184, 1185, 1186, 1205, 7110, 1187, 1188, + 1195, 1192, 1198, 1203, 1202, 1212, 1223, 1214, 1215, 1222, + 1226, 1239, 1227, 1230, 1191, 1234, 1236, 1247, 1237, 1249, + 1243, 1251, 1245, 1252, 1254, 1255, 1259, 1261, 1265, 1266, + 1268, 7110, 1267, 1271, 1278, 1285, 1280, 1272, 1269, 1283, + 1286, 1289, 1290, 1291, 1293, 1296, 1298, 1300, 1308, 1303, + 1311, 1309, 1310, 1312, 1314, 1317, 1316, 1318, 1323, 1331, + 1328, 1333, 1336, 1344, 1343, 1346, 1353, 1355, 1340, 1348, + 1350, 1356, 1352, 1351, 1360, 1361, 1366, 1363, 1365, 1372, - 1364, 1366, 1370, 1372, 1374, 1375, 1380, 1379, 1377, 1381, - 1392, 1390, 1388, 1397, 1394, 1403, 1399, 1391, 1406, 1410, - 1413, 1414, 7073, 1422, 1419, 1418, 1420, 1425, 1423, 1431, - 1432, 1433, 1434, 1437, 1435, 1438, 1443, 1444, 1445, 1439, - 1447, 1452, 1454, 1455, 1456, 1465, 1472, 1471, 1473, 1457, - 1467, 1476, 1477, 1479, 1486, 1483, 1491, 1484, 1489, 1492, - 1500, 1493, 1495, 1496, 1509, 1502, 1504, 1505, 1507, 1511, - 1517, 1518, 1519, 1526, 1523, 1528, 1540, 1529, 1531, 1536, - 1532, 1542, 1541, 1545, 1546, 1547, 1548, 1555, 1550, 1552, - 1557, 1558, 1553, 1560, 1562, 1567, 1575, 1570, 1577, 1576, + 1373, 1374, 1375, 1377, 1378, 1382, 1380, 1385, 1387, 1388, + 1390, 1389, 1391, 1398, 1397, 1399, 1404, 1401, 1417, 1403, + 1406, 1420, 1423, 1410, 1414, 7110, 1432, 1427, 1430, 1431, + 1434, 1437, 1438, 1442, 1441, 1444, 1447, 1445, 1446, 1449, + 1452, 1453, 1454, 1455, 1456, 1462, 1469, 1464, 1473, 1480, + 1479, 1481, 1467, 1483, 1484, 1487, 1488, 1495, 1491, 1499, + 1500, 1490, 1501, 1494, 1514, 1504, 1505, 1511, 1525, 1502, + 1520, 1522, 1512, 1523, 1526, 1528, 1534, 1542, 1538, 1539, + 1546, 1547, 1541, 1549, 1543, 1553, 1556, 1557, 1558, 1559, + 1560, 1567, 1564, 1563, 1569, 1570, 1565, 1571, 1579, 1573, - 1578, 1580, 1581, 1583, 1584, 1589, 1585, 1592, 1593, 1594, - 1599, 1595, 1606, 1614, 1608, 1596, 1616, 1617, 1619, 1620, - 1621, 1625, 1623, 1628, 1632, 1626, 1629, 1637, 1635, 1641, - 1643, 1644, 1645, 1586, 1655, 1646, 1656, 1657, 1660, 1662, - 1663, 1665, 1647, 1667, 1672, 1670, 1675, 1676, 7073, 1664, - 1688, 1677, 1686, 1684, 1687, 1689, 1698, 1691, 1693, 1695, - 1694, 1701, 1722, 7073, 1702, 7073, 7073, 848, 7073, 7073, - 1705, 1703, 7073, 1704, 1710, 1706, 1720, 1725, 1732, 1737, - 1728, 1730, 1735, 1723, 1746, 1750, 1745, 1753, 1755, 1756, - 1759, 1747, 1760, 1761, 1767, 1770, 1772, 1773, 1708, 1783, + 1587, 1577, 1586, 1589, 1592, 1593, 1594, 1595, 1598, 1596, + 1602, 1603, 1604, 1605, 1610, 1617, 1606, 1625, 1618, 1608, + 1619, 1626, 1628, 1634, 1635, 1636, 1637, 1638, 1639, 1641, + 1642, 1648, 1645, 1651, 1652, 1655, 1657, 1656, 1670, 1662, + 1671, 1672, 1659, 1675, 1677, 1679, 1660, 1683, 1685, 1688, + 1690, 1680, 7110, 1678, 1702, 1691, 1699, 1698, 1700, 1701, + 1712, 1705, 1707, 1704, 1708, 1709, 1734, 7110, 1715, 7110, + 7110, 1718, 7110, 7110, 1717, 1721, 7110, 1716, 1731, 1723, + 1724, 1741, 1747, 1749, 1744, 1742, 1751, 1752, 1763, 1773, + 1758, 1759, 1761, 1766, 1767, 1762, 1779, 1776, 1768, 1788, - 1778, 1788, 1779, 1790, 1791, 1796, 1781, 1797, 1800, 1803, - 1804, 1793, 1806, 1807, 1809, 1811, 1813, 1808, 1815, 1817, - 1820, 1821, 1822, 1830, 1826, 1835, 1842, 7073, 1832, 1845, - 1840, 1849, 1846, 1853, 1852, 1848, 1850, 1857, 1861, 1862, - 1863, 1864, 1867, 1865, 1866, 1873, 1868, 1875, 1876, 1878, - 1880, 1883, 1882, 7073, 1888, 1890, 1891, 1893, 1894, 1892, - 1900, 1896, 1902, 1904, 1906, 1917, 1907, 1908, 1914, 1912, - 1923, 1918, 1920, 1922, 7073, 1924, 1935, 1928, 1936, 1930, - 1937, 1939, 1940, 1943, 1944, 1945, 1946, 1947, 1948, 1958, - 1955, 1954, 1956, 1960, 1961, 1970, 1969, 1971, 1973, 1981, + 1789, 1769, 1795, 1802, 1790, 1805, 1800, 1803, 1809, 1807, + 1811, 1813, 1817, 1819, 1820, 1822, 1823, 1824, 1826, 1720, + 1828, 1825, 1833, 1830, 1834, 1836, 1835, 1843, 1846, 1839, + 1855, 7110, 1853, 1856, 1842, 1865, 1862, 1866, 1868, 1863, + 1864, 1874, 1876, 1870, 1877, 1879, 1881, 1880, 1882, 1883, + 1886, 1889, 1892, 1890, 1894, 1897, 1896, 1902, 7110, 1903, + 1904, 1906, 1910, 1907, 1908, 1917, 1909, 1918, 1919, 1920, + 1932, 1924, 1934, 1925, 1927, 1936, 1929, 1937, 1939, 7110, + 1947, 1952, 1941, 1954, 1944, 1948, 1956, 1957, 1958, 1960, + 1961, 1963, 1964, 1966, 1977, 1972, 1974, 1973, 1975, 1983, - 1974, 1982, 1983, 1984, 1986, 1987, 1988, 1989, 1991, 1995, - 1996, 2003, 1998, 2005, 2000, 2001, 2019, 2022, 2020, 2006, - 2017, 2018, 2009, 2026, 2034, 2038, 2033, 2031, 2035, 2045, - 2040, 2042, 2043, 2046, 2047, 2058, 2044, 2062, 2053, 2055, - 2056, 2064, 2067, 7073, 2068, 2070, 7073, 2072, 2071, 2073, - 2095, 2074, 2078, 2081, 2080, 2083, 2089, 2087, 2099, 2105, - 2101, 2118, 2088, 2107, 2119, 2109, 2122, 2114, 2120, 2128, - 2129, 2130, 2131, 2133, 2139, 2136, 2149, 2152, 2148, 2156, - 2159, 2132, 2155, 2157, 2176, 2158, 2160, 2164, 2161, 2162, - 2166, 2172, 2167, 2179, 2168, 2169, 2181, 2191, 2189, 2186, + 1987, 1980, 1990, 1991, 1999, 1992, 1995, 2000, 2001, 2002, + 2003, 2005, 2006, 2008, 2012, 2013, 2020, 2016, 2024, 2017, + 2019, 2035, 2040, 2022, 2033, 2036, 2037, 2038, 2043, 2047, + 2051, 2046, 2050, 2053, 2060, 2055, 2058, 2061, 2062, 2069, + 2071, 2063, 2073, 2080, 2064, 2074, 2083, 2076, 7110, 2082, + 2084, 7110, 2089, 2090, 2091, 2113, 2092, 2096, 2099, 2104, + 2101, 2105, 2108, 2097, 2115, 2107, 2131, 2119, 2127, 2132, + 2135, 2137, 2133, 2138, 2139, 2140, 2144, 2146, 2149, 2151, + 2159, 2162, 2166, 2168, 2170, 2169, 2171, 2172, 2174, 2194, + 2173, 2175, 2176, 2177, 2178, 2181, 2188, 2182, 2183, 2184, - 2192, 2199, 2200, 2201, 2204, 2205, 2206, 7073, 2213, 2208, - 2212, 2216, 2090, 2220, 2217, 2223, 7073, 2224, 2225, 2227, - 2235, 2228, 2230, 2236, 2232, 2239, 2238, 2244, 2245, 2246, - 2251, 2247, 2265, 7073, 2250, 7073, 2248, 2240, 2263, 2261, - 2267, 2269, 2270, 2271, 2272, 7073, 7073, 2273, 2274, 2288, - 2290, 2292, 2282, 2279, 2293, 7073, 2295, 2302, 7073, 2299, - 2304, 2298, 2297, 2305, 2308, 2309, 2310, 2319, 2314, 2324, - 2315, 2323, 2327, 7073, 2331, 2333, 2316, 2335, 2338, 2329, - 2339, 2342, 2344, 2346, 7073, 2350, 2351, 2353, 2360, 2362, - 2355, 2352, 2363, 2368, 2357, 2365, 2371, 2373, 2372, 2380, + 2187, 2199, 2207, 2204, 2205, 2210, 2211, 2212, 2216, 2219, + 2221, 2222, 7110, 2229, 2232, 2224, 2226, 2233, 2244, 2236, + 2237, 7110, 2239, 2240, 2245, 2253, 2250, 2251, 2252, 2254, + 2255, 2258, 2260, 2262, 2264, 2275, 2263, 2282, 7110, 2267, + 7110, 2265, 2266, 2284, 2268, 2277, 2285, 2290, 2288, 2292, + 7110, 7110, 2294, 2295, 2300, 2302, 2312, 2298, 2308, 2309, + 7110, 2310, 2317, 7110, 2314, 2313, 2321, 2319, 2320, 2325, + 2327, 2329, 2331, 2336, 2332, 2343, 2334, 2339, 2347, 7110, + 2350, 2335, 2348, 2353, 2354, 2355, 2356, 2357, 2363, 2360, + 7110, 2364, 2366, 2367, 2380, 2376, 2377, 2378, 2381, 2387, - 2383, 2387, 2388, 2389, 2392, 2390, 2402, 7073, 2398, 2379, - 2399, 2406, 2404, 2408, 2401, 2405, 2411, 2412, 2413, 2415, - 2417, 2422, 2421, 2423, 2424, 2425, 2434, 2435, 2427, 2438, - 2440, 2431, 2437, 2445, 2446, 2382, 2447, 2449, 2448, 2452, - 7073, 2453, 2455, 2460, 2456, 2466, 2459, 171, 2462, 2463, - 2469, 2470, 2473, 2484, 2474, 2486, 2491, 2487, 2488, 2490, - 2495, 2496, 2497, 2499, 2498, 2489, 2502, 2501, 2505, 7073, - 2507, 2512, 2514, 2515, 2517, 2518, 2520, 7073, 2527, 2521, - 2528, 2541, 2535, 2529, 2544, 2537, 2545, 2546, 2548, 2549, - 2550, 2557, 2554, 2552, 2558, 2560, 7073, 2565, 2567, 2570, + 2379, 2383, 2385, 2389, 2390, 2399, 2400, 2401, 2404, 2406, + 2413, 2410, 2414, 7110, 2412, 2398, 2418, 2425, 2421, 2423, + 2420, 2424, 2427, 2428, 2430, 2431, 2436, 2437, 2435, 2441, + 2442, 2443, 2450, 2451, 2452, 2453, 2456, 2447, 2457, 2460, + 2461, 2468, 2463, 2465, 2469, 2470, 7110, 2473, 2476, 2477, + 2478, 2482, 2480, 171, 2484, 2486, 2490, 2489, 2496, 2504, + 2491, 2499, 2512, 2497, 2509, 2508, 2515, 2507, 2516, 2517, + 2518, 2519, 2524, 2525, 2523, 7110, 2527, 2529, 2528, 2532, + 2535, 2534, 2539, 7110, 2545, 2536, 2551, 2560, 2550, 2548, + 2561, 2552, 2563, 2565, 2567, 2566, 2568, 2575, 2573, 2570, - 2561, 2571, 2573, 2574, 2578, 2580, 2582, 2584, 2585, 2590, - 2586, 2588, 2589, 2591, 2599, 2602, 2612, 2594, 2603, 2604, - 2611, 2608, 2616, 2615, 2618, 2620, 2625, 2621, 7073, 2630, - 2622, 2631, 2632, 2629, 2636, 2633, 2639, 2648, 2644, 2646, - 2653, 2654, 2667, 2656, 2650, 2664, 2661, 2665, 2673, 2677, - 2674, 2678, 2684, 2681, 2687, 2689, 2691, 2695, 2699, 2696, - 2697, 2698, 2700, 2701, 2710, 2712, 2715, 2718, 2708, 2716, - 2723, 2724, 2726, 2742, 2733, 7073, 2731, 2737, 2729, 2741, - 2749, 2745, 2746, 2751, 2753, 2755, 2757, 2758, 2759, 2766, - 2761, 2763, 2770, 2765, 2769, 2771, 2772, 2780, 2782, 2783, + 2576, 2577, 7110, 2583, 2586, 2588, 2579, 2589, 2597, 2595, + 2590, 2592, 2598, 2600, 2606, 2602, 2608, 2610, 2611, 2613, + 2616, 2615, 2624, 2614, 2619, 2626, 2623, 2625, 2628, 2627, + 2633, 2636, 2643, 2641, 7110, 2648, 2645, 2649, 2647, 2650, + 2652, 2654, 2653, 2672, 2656, 2662, 2664, 2673, 2678, 2667, + 2681, 2688, 2684, 2689, 2693, 2698, 2695, 2699, 2705, 2696, + 2707, 2709, 2703, 2710, 2719, 2711, 2715, 2716, 2718, 2722, + 2730, 2731, 2729, 2733, 2726, 2727, 2744, 2738, 2750, 2756, + 2746, 7110, 2755, 2748, 2742, 2758, 2760, 2767, 2764, 2765, + 2770, 2768, 2771, 2772, 2774, 2778, 2783, 2784, 2657, 2781, - 2784, 2791, 2786, 2793, 2707, 7073, 2794, 2798, 2788, 2795, - 2806, 2796, 2810, 2811, 2813, 2799, 2802, 2814, 2822, 2817, - 2815, 2824, 2819, 2831, 2828, 2829, 2834, 2826, 7073, 2840, - 2830, 2841, 2842, 2846, 2848, 2849, 2850, 2856, 2858, 2851, - 2861, 2862, 2864, 2865, 2868, 7073, 2873, 2875, 2871, 2874, - 2883, 2878, 2882, 2884, 2886, 2888, 7073, 2889, 2891, 2890, - 2892, 2893, 2896, 2903, 2904, 2899, 7073, 2912, 2902, 2910, - 2911, 2914, 2915, 2917, 2920, 2918, 2923, 2924, 2927, 2934, - 2928, 2936, 7073, 2925, 2946, 2937, 2943, 2939, 2949, 2950, - 2953, 2954, 2957, 2956, 2960, 7073, 2967, 2969, 2964, 2978, + 2786, 2790, 2788, 2794, 2797, 2796, 2798, 2801, 2808, 2805, + 2810, 2811, 7110, 2812, 2816, 2799, 2817, 2825, 2819, 2828, + 2829, 2831, 2822, 2832, 2833, 2835, 2837, 2838, 2841, 2840, + 2848, 2845, 2847, 2849, 2846, 7110, 2858, 2852, 2859, 2863, + 2862, 2865, 2866, 2873, 2877, 2879, 2881, 2883, 2869, 2885, + 2886, 2889, 7110, 2896, 2898, 2894, 2895, 2903, 2901, 2904, + 2905, 2907, 2908, 7110, 2909, 2911, 2912, 2915, 2913, 2917, + 2924, 2925, 2920, 7110, 2927, 2931, 2932, 2934, 2935, 2936, + 2937, 2938, 2941, 2942, 2944, 2943, 2957, 2946, 2953, 7110, + 2949, 2965, 2960, 2963, 2966, 2970, 2971, 2973, 2975, 2976, - 2970, 2976, 2979, 2980, 2981, 2982, 2983, 2984, 2988, 2990, - 7073, 2991, 2994, 2995, 2998, 2992, 3000, 3003, 3014, 3007, - 3009, 3011, 3006, 3016, 3017, 3015, 3021, 3028, 3024, 3023, - 3027, 3033, 3036, 3038, 3040, 3039, 3043, 3051, 3052, 3047, - 3054, 3057, 3058, 3050, 3060, 3062, 3069, 3071, 3074, 3072, - 3075, 7073, 3078, 3079, 3080, 3070, 3082, 3084, 3085, 3086, - 3090, 3087, 3096, 3101, 3099, 3092, 3109, 3116, 3102, 3117, - 3105, 3112, 3114, 3120, 3119, 3121, 3126, 3133, 3129, 3128, - 3130, 3142, 3132, 3137, 3145, 3135, 3140, 3146, 3147, 3149, - 3150, 3152, 3155, 3157, 3160, 3153, 3161, 3162, 3176, 3178, + 2977, 2981, 7110, 2993, 2871, 2989, 2998, 2982, 2990, 2994, + 2999, 3002, 3003, 2996, 3005, 3006, 3009, 7110, 3010, 3013, + 3015, 3017, 3019, 3020, 3021, 3028, 3027, 3026, 3030, 3032, + 3035, 3036, 3034, 3043, 3037, 3047, 3041, 3045, 3054, 3055, + 3057, 3058, 3060, 3061, 3070, 3071, 3068, 3073, 3076, 3077, + 3069, 3078, 3079, 3087, 3092, 3094, 3089, 3095, 7110, 3098, + 3100, 3093, 3091, 3101, 3105, 3103, 3107, 3110, 3106, 3108, + 3120, 3121, 3112, 3128, 3130, 3123, 3132, 3134, 3136, 3137, + 3139, 3138, 3140, 3141, 3148, 3145, 3147, 3149, 3158, 3151, + 3156, 3169, 3154, 3161, 3164, 3165, 3166, 3168, 3171, 3172, - 3179, 3167, 3169, 3181, 3183, 3185, 7073, 3188, 3189, 3186, - 3192, 3193, 3198, 3195, 3205, 3202, 3203, 3213, 3210, 3214, - 3219, 3208, 3211, 3221, 3220, 3231, 3227, 7073, 3224, 7073, - 3222, 3232, 3233, 3241, 3236, 7073, 3239, 7073, 3244, 3246, - 3248, 3249, 3250, 7073, 3251, 3252, 3255, 3253, 3257, 3258, - 3261, 3260, 3263, 3267, 3269, 3274, 3270, 3278, 3279, 3280, - 3284, 3285, 3288, 3286, 3290, 3291, 3292, 3294, 3298, 3299, - 3303, 3301, 3306, 3310, 3311, 3312, 3313, 7073, 3317, 3324, - 3320, 3329, 3314, 3322, 3328, 3326, 3335, 3332, 3336, 3338, - 3339, 3341, 3348, 3344, 3350, 3351, 3352, 3358, 3362, 3360, + 3176, 3178, 3174, 3179, 3188, 3190, 3195, 3186, 3197, 3196, + 3199, 3202, 3203, 3204, 7110, 3207, 3208, 3205, 3212, 3215, + 3218, 3219, 3227, 3222, 3226, 3234, 3230, 3229, 3236, 3238, + 3241, 3242, 3243, 3250, 3246, 7110, 3247, 7110, 3248, 3249, + 3252, 3261, 3256, 7110, 3267, 7110, 3257, 3271, 3262, 3264, + 3268, 7110, 3272, 3273, 3277, 3274, 3279, 3281, 3285, 3286, + 3287, 3288, 3289, 3296, 3291, 3295, 3298, 3302, 3301, 3305, + 3308, 3310, 3311, 3313, 3312, 3315, 3319, 3320, 3321, 3328, + 3330, 3331, 3332, 3333, 3334, 7110, 3338, 3341, 3335, 3346, + 3343, 3345, 3347, 3353, 3354, 3355, 3356, 3360, 3358, 3362, - 3370, 7073, 3365, 3367, 3368, 3369, 7073, 3372, 3373, 3381, - 3383, 3374, 3376, 3378, 3386, 3390, 3385, 3392, 3395, 3396, - 3406, 3405, 3398, 7073, 3407, 3408, 3409, 3418, 3412, 3419, - 3426, 3428, 3424, 3430, 3432, 3441, 3437, 3423, 3427, 3425, - 3438, 3446, 3453, 3454, 3456, 3452, 3461, 3439, 3459, 3466, - 3463, 3451, 3440, 3467, 3470, 3471, 3473, 3474, 3475, 3472, - 3476, 3477, 3481, 3482, 7073, 3483, 3484, 3478, 3498, 3494, - 3499, 3501, 3502, 3503, 3504, 3508, 7073, 3510, 3507, 3513, - 3511, 3519, 3522, 3512, 3525, 3528, 3529, 3530, 3532, 3531, - 3534, 7073, 3533, 7073, 3535, 3541, 3552, 3555, 3547, 3556, + 3367, 3370, 3364, 3371, 3374, 3381, 3383, 3375, 3390, 7110, + 3385, 3388, 3389, 3392, 7110, 3396, 3393, 3402, 3404, 3397, + 3394, 3400, 3406, 3413, 3407, 3410, 3416, 3420, 3424, 3427, + 3428, 7110, 3421, 3429, 3419, 3437, 3442, 3433, 3445, 3449, + 3446, 3452, 3454, 3456, 3458, 3435, 3459, 3460, 3461, 3462, + 3470, 3472, 3473, 3469, 3482, 3468, 3475, 3484, 3485, 3471, + 3478, 3486, 3487, 3488, 3492, 3494, 3493, 3495, 3496, 3497, + 3503, 3509, 7110, 3501, 3512, 3504, 3521, 3510, 3518, 3519, + 3514, 3523, 3531, 3527, 7110, 3538, 3525, 3535, 3529, 3542, + 3533, 3546, 3547, 3549, 3550, 3551, 3554, 3553, 3552, 7110, - 3558, 3563, 3557, 3564, 3566, 3565, 3567, 3569, 3573, 3575, - 3576, 3578, 3577, 3542, 3580, 3585, 3581, 3591, 3582, 3593, - 3594, 3603, 3606, 3596, 7073, 7073, 3598, 3599, 3612, 3605, - 3609, 3614, 3624, 3620, 3622, 3616, 3626, 3628, 3636, 7073, - 3631, 3633, 3637, 3638, 3640, 3650, 3642, 3652, 3655, 3653, - 3656, 3663, 3661, 7073, 3662, 3664, 3671, 3666, 3672, 3674, - 7073, 3669, 7073, 3673, 3676, 3680, 3683, 3684, 3685, 3687, - 3688, 3690, 3693, 3696, 3702, 3704, 3711, 3706, 3708, 3713, - 3714, 3715, 3716, 3718, 3719, 3726, 3722, 3724, 3725, 7073, - 3728, 3729, 3737, 3731, 3730, 3742, 3746, 3739, 3738, 7073, + 3555, 7110, 3556, 3569, 3558, 3564, 3573, 3574, 3576, 3578, + 3580, 3582, 3583, 3584, 3586, 3589, 3590, 3594, 3595, 3598, + 3596, 3615, 3600, 3597, 3602, 3611, 3612, 3613, 3616, 3626, + 3618, 3617, 7110, 7110, 3619, 3621, 3633, 3628, 3635, 3636, + 3637, 3640, 3647, 3643, 3646, 3649, 3650, 3658, 7110, 3653, + 3654, 3660, 3661, 3662, 3671, 3663, 3673, 3680, 3678, 3675, + 3685, 3684, 7110, 3677, 3686, 3693, 3688, 3695, 3702, 7110, + 3691, 7110, 3692, 3694, 3703, 3706, 3705, 3707, 3708, 3709, + 3712, 3715, 3717, 3720, 3730, 3732, 3733, 3727, 3735, 3723, + 3728, 3737, 3739, 3742, 3750, 3745, 3747, 3748, 7110, 3752, - 3745, 3753, 3752, 3754, 3757, 3759, 3760, 3763, 3764, 3768, - 3770, 3769, 3765, 3773, 7073, 3771, 3774, 3786, 3781, 3778, - 3782, 3792, 3795, 3800, 7073, 3797, 3801, 3809, 3805, 3806, - 3787, 3808, 3807, 3812, 3813, 3814, 3815, 3816, 3817, 3823, - 3822, 3819, 3829, 3825, 3828, 3836, 3839, 3843, 3850, 3846, - 7073, 3847, 3830, 3852, 3848, 3853, 3855, 3856, 3858, 3861, - 3866, 3862, 3869, 3874, 3876, 3877, 3878, 3880, 3881, 3889, - 3884, 7073, 3892, 3888, 3896, 3895, 3891, 3901, 3894, 3902, - 3903, 3910, 3905, 3907, 3912, 3913, 3914, 3919, 3927, 3923, - 3911, 3925, 3926, 3938, 3929, 3930, 3933, 3934, 7073, 3953, + 3749, 3753, 3754, 3758, 3760, 3768, 3761, 3762, 7110, 3764, + 3771, 3774, 3772, 3776, 3782, 3779, 3783, 3786, 3788, 3789, + 3790, 3792, 3794, 7110, 3793, 3796, 3807, 3799, 3800, 3802, + 3810, 3814, 3820, 7110, 3821, 3813, 3829, 3825, 3815, 3828, + 3831, 3832, 3833, 3835, 3836, 3837, 3838, 3839, 3844, 3845, + 3841, 3840, 3847, 3858, 3859, 3850, 3869, 3857, 3861, 7110, + 3871, 3866, 3872, 3873, 3874, 3875, 3876, 3878, 3881, 3884, + 3886, 3896, 3897, 3888, 3893, 3899, 3901, 3903, 3908, 3910, + 7110, 3911, 3904, 3918, 3916, 3915, 3923, 3925, 3917, 3927, + 3929, 3919, 3930, 3931, 3933, 3941, 3939, 3949, 3945, 3935, - 3941, 3944, 3954, 3951, 3945, 3963, 3958, 3948, 3961, 3965, - 3966, 3969, 3971, 3972, 3973, 3976, 3977, 7073, 7073, 3979, - 3980, 3981, 7073, 3984, 3983, 3995, 3985, 3987, 3988, 3996, - 3999, 3998, 4000, 4002, 4008, 4012, 7073, 4016, 4013, 4020, - 4015, 4017, 4025, 4021, 7073, 4022, 4033, 4030, 4031, 4037, - 4032, 4038, 4039, 4043, 4044, 4040, 4045, 4048, 4056, 4059, - 4054, 4051, 4060, 7073, 4061, 4062, 4063, 4070, 4065, 4067, - 4072, 7073, 4073, 4075, 4076, 4082, 4085, 4091, 4093, 4095, - 4099, 4083, 4096, 4100, 4102, 4101, 4103, 4105, 4114, 4109, - 4113, 4112, 4116, 4131, 4132, 4118, 7073, 4115, 4126, 4120, + 3947, 3946, 3954, 3950, 3952, 3953, 3956, 7110, 3968, 3963, + 3969, 3971, 3974, 3975, 3982, 3978, 3979, 3980, 3989, 3981, + 3991, 3983, 3986, 3993, 3996, 3997, 7110, 7110, 4005, 3998, + 4000, 7110, 4002, 4006, 4016, 4012, 4014, 4015, 4018, 4019, + 4020, 4021, 4024, 4022, 4030, 7110, 4037, 4034, 4038, 4035, + 4042, 4050, 4041, 7110, 4040, 4051, 4053, 4056, 4054, 4057, + 4058, 4060, 4062, 4064, 4066, 4067, 4068, 4070, 4080, 4081, + 4073, 4077, 4082, 7110, 4083, 4084, 4090, 4088, 4089, 4091, + 4096, 7110, 4097, 4100, 4098, 4101, 4105, 4109, 4115, 4112, + 4118, 4120, 4121, 4124, 4122, 4125, 4126, 4129, 4136, 4132, - 4134, 4136, 7073, 4144, 4147, 4151, 7073, 4154, 4138, 4150, - 4149, 4158, 7073, 4153, 4156, 4157, 4162, 4159, 4172, 4167, - 4174, 4171, 4173, 4175, 4176, 4178, 7073, 4179, 4177, 4180, - 7073, 4183, 4187, 4194, 4198, 4182, 4205, 4200, 4203, 4201, - 4204, 7073, 4209, 7073, 4212, 4210, 4216, 7073, 4211, 4218, - 4219, 4221, 4225, 4226, 4227, 4233, 4229, 4235, 4237, 4238, - 4239, 4240, 4242, 4249, 4241, 4245, 4248, 4250, 7073, 4251, - 4253, 4260, 4261, 4257, 4267, 4265, 4272, 4262, 4273, 4275, - 7073, 7073, 4280, 7073, 4282, 4276, 4281, 4286, 7073, 4289, - 4287, 4296, 4291, 4293, 4298, 4295, 4306, 4299, 7073, 4310, + 4133, 4134, 4131, 4138, 4151, 4153, 7110, 4147, 4154, 4140, + 4158, 4162, 7110, 4167, 4174, 4175, 7110, 4177, 4155, 4159, + 4172, 4182, 7110, 4178, 4179, 4180, 4185, 4187, 4194, 4189, + 4197, 4196, 4198, 4193, 4199, 4202, 7110, 4203, 4200, 4201, + 7110, 4205, 4209, 4221, 4223, 4207, 4224, 4225, 4228, 4226, + 4229, 7110, 4230, 7110, 4234, 4236, 4239, 7110, 4241, 4242, + 4244, 4246, 4243, 4250, 4251, 4257, 4259, 4247, 4261, 4262, + 4263, 4264, 4266, 4275, 4265, 4272, 4273, 4274, 7110, 4277, + 4276, 4284, 4286, 4279, 4296, 4292, 4290, 4285, 4298, 4287, + 7110, 7110, 4305, 7110, 4307, 4308, 4309, 4311, 7110, 4313, - 4311, 7073, 4303, 4314, 4321, 4316, 4317, 4318, 4319, 4322, - 4327, 4325, 4329, 4331, 4332, 4333, 4334, 4335, 4337, 4354, - 4338, 4349, 7073, 4342, 4350, 4357, 4359, 4356, 4363, 4364, - 4365, 4366, 7073, 4371, 4375, 4372, 4379, 4378, 7073, 4380, - 7073, 4381, 4382, 4388, 4392, 4387, 4401, 7073, 4396, 4393, - 4403, 4397, 4404, 4408, 4411, 4412, 4413, 4414, 4405, 4421, - 4419, 4420, 4418, 4428, 4426, 7073, 4429, 4435, 4437, 4438, - 4440, 4441, 4442, 4450, 4447, 4443, 4446, 4453, 4455, 4458, - 4459, 4465, 4463, 4468, 4457, 7073, 4467, 4474, 4476, 4477, - 4485, 4480, 4481, 4482, 7073, 4487, 4488, 4491, 7073, 4489, + 4312, 4320, 4315, 4316, 4319, 4318, 4323, 4329, 7110, 4331, + 4333, 7110, 4335, 4338, 4345, 4340, 4341, 4342, 4343, 4346, + 4350, 4349, 4353, 4355, 4356, 4357, 4352, 4366, 4361, 4374, + 4360, 4379, 7110, 4362, 4372, 4377, 4387, 4384, 4380, 4388, + 4392, 4390, 7110, 4394, 4401, 4393, 4404, 4405, 7110, 4406, + 7110, 4396, 4407, 4408, 4417, 4413, 4424, 7110, 4421, 4422, + 4426, 4427, 4428, 4429, 4430, 4434, 4437, 4438, 4440, 4447, + 4443, 4444, 4442, 4451, 4458, 7110, 4446, 4449, 4452, 4462, + 4467, 4459, 4469, 4471, 4478, 4474, 4473, 4476, 4477, 4481, + 4483, 4486, 4488, 4490, 4492, 4482, 7110, 4498, 4496, 4501, - 4495, 4497, 4501, 4503, 4504, 4505, 4508, 4507, 4511, 4512, - 4509, 7073, 4516, 4517, 4510, 4513, 4526, 4533, 4519, 7073, - 7073, 4534, 7073, 4535, 4520, 4536, 4538, 4539, 4545, 4547, - 4548, 4550, 4544, 4552, 4555, 4558, 4560, 7073, 4561, 4572, - 4565, 4575, 4576, 4583, 4578, 4582, 4568, 7073, 7073, 4585, - 4591, 4586, 4594, 4596, 4567, 4589, 4604, 4600, 4601, 4609, - 4610, 4618, 7073, 4599, 4611, 4616, 4613, 7073, 4614, 4619, - 4621, 4622, 4623, 4625, 4626, 4627, 4629, 4630, 4636, 4641, - 4638, 4646, 4632, 4640, 4649, 4648, 4654, 4656, 4655, 4657, - 4659, 7073, 4662, 4663, 4664, 4665, 4669, 4671, 4672, 4676, + 4504, 4512, 4507, 4509, 4510, 7110, 4514, 4515, 4516, 7110, + 4517, 4513, 4523, 4528, 4524, 4529, 4531, 4534, 4535, 4537, + 4538, 4536, 7110, 4540, 4543, 4539, 4556, 4557, 4545, 4546, + 7110, 7110, 4563, 7110, 4565, 4544, 4558, 4548, 4568, 4570, + 4575, 4572, 4577, 4578, 4580, 4583, 4584, 4585, 7110, 4586, + 4594, 4590, 4601, 4597, 4608, 4603, 4607, 4604, 7110, 7110, + 4610, 4613, 4611, 4617, 4618, 4621, 4622, 4629, 4625, 4626, + 4632, 4636, 4643, 7110, 4634, 4635, 4642, 4644, 7110, 4645, + 4647, 4648, 4650, 4649, 4651, 4656, 4653, 4657, 4658, 4660, + 4663, 4661, 4674, 4666, 4668, 4675, 4677, 4678, 4681, 4682, - 4674, 4677, 4685, 7073, 4678, 7073, 4681, 4687, 4690, 4700, - 4688, 4704, 4705, 4706, 4699, 4689, 4707, 4711, 4714, 4717, - 4718, 4723, 4719, 4725, 4726, 4727, 7073, 4730, 4732, 4735, - 4737, 4742, 4744, 4745, 7073, 4747, 4738, 4748, 4751, 4754, - 4756, 4757, 4760, 4761, 4765, 4762, 4766, 4770, 4773, 4767, - 4774, 4775, 4780, 4778, 7073, 4782, 4785, 4786, 4789, 4790, - 4791, 4793, 4795, 4800, 4803, 4804, 4806, 4807, 7073, 4810, - 4811, 4813, 7073, 4814, 4817, 4815, 4818, 4820, 4827, 4822, - 4831, 4828, 4829, 7073, 4840, 4835, 4842, 4837, 4845, 4846, - 4847, 4848, 4852, 4850, 4854, 4857, 7073, 4867, 4858, 4866, + 4683, 4688, 7110, 4690, 4685, 4691, 4692, 4696, 4699, 4702, + 4703, 4700, 4705, 4713, 7110, 4714, 7110, 4709, 4706, 4725, + 4715, 4708, 4733, 4730, 4734, 4727, 4718, 4736, 4738, 4743, + 4746, 4739, 4748, 4749, 4752, 4753, 4754, 7110, 4757, 4759, + 4761, 4763, 4769, 4771, 4773, 7110, 4774, 4765, 4776, 4777, + 4781, 4783, 4784, 4787, 4788, 4791, 4792, 4793, 4795, 4800, + 4797, 4801, 4802, 4804, 4805, 7110, 4808, 4815, 4809, 4817, + 4812, 4820, 4821, 4823, 4831, 4834, 4822, 4829, 4835, 7110, + 4836, 4838, 4840, 4848, 7110, 4843, 4845, 4846, 4849, 4850, + 4853, 4855, 4856, 4858, 4862, 7110, 4866, 4859, 4868, 4867, - 4868, 4865, 4869, 4872, 4876, 4878, 7073, 4879, 4880, 4883, - 4886, 4895, 4897, 4887, 4892, 4900, 4898, 4905, 4896, 4899, - 4906, 4902, 4911, 4914, 4915, 4916, 4913, 4932, 4934, 4929, - 7073, 4917, 7073, 4918, 4930, 4935, 4946, 4941, 4943, 4944, - 4948, 4947, 7073, 4949, 4954, 4956, 4951, 4959, 7073, 4919, - 4957, 4960, 4962, 7073, 4958, 4971, 4963, 4972, 4978, 4979, - 7073, 4982, 4985, 4986, 4993, 4995, 4990, 4997, 4992, 5000, - 4998, 4994, 5002, 5003, 5011, 5009, 5007, 7073, 5013, 5015, - 5020, 5022, 5024, 5016, 5026, 5014, 5028, 5031, 5033, 7073, - 5036, 5037, 5038, 5039, 5040, 5043, 5042, 5044, 5051, 5050, + 4870, 4871, 4872, 4876, 4882, 4884, 4878, 4891, 7110, 4892, + 4885, 4890, 4896, 4898, 4899, 4900, 4903, 4904, 7110, 4905, + 4913, 4914, 4907, 4926, 4931, 4906, 4917, 4934, 4924, 4933, + 4915, 4935, 4936, 4937, 4941, 4942, 4943, 4944, 4945, 4955, + 4960, 4958, 7110, 4946, 7110, 4947, 4956, 4963, 4974, 4969, + 4971, 4972, 4976, 4975, 7110, 4961, 4982, 4984, 4979, 4987, + 7110, 4988, 4985, 4989, 4990, 7110, 5003, 4986, 4992, 4993, + 5008, 5009, 7110, 5014, 5015, 5011, 5023, 5025, 5020, 5022, + 5024, 5026, 5028, 5030, 5031, 5032, 5041, 5034, 5037, 7110, + 5039, 5046, 5052, 5053, 5054, 5036, 5047, 5055, 5057, 5063, - 5052, 5048, 5055, 5060, 5063, 5061, 5065, 7073, 5069, 5067, - 5070, 5077, 5078, 5076, 5085, 7073, 5080, 7073, 5086, 5088, - 5090, 5092, 5093, 7073, 5096, 5098, 5097, 5103, 7073, 7073, - 5105, 5112, 5107, 5111, 5108, 7073, 7073, 5114, 7073, 5115, - 7073, 5116, 5118, 7073, 7073, 5120, 5121, 5122, 5124, 5126, - 5128, 7073, 5136, 7073, 5138, 5137, 5139, 5142, 5141, 5144, - 7073, 5145, 5148, 5150, 5153, 5155, 7073, 5152, 5160, 5173, - 5156, 5168, 7073, 5170, 5172, 5159, 5171, 7073, 5176, 5180, - 5181, 5182, 5184, 5185, 5187, 5188, 5191, 5194, 5195, 5196, - 5197, 5199, 5204, 5203, 5211, 5213, 5215, 5206, 5216, 5220, + 5060, 7110, 5064, 5065, 5066, 5067, 5068, 5070, 5071, 5072, + 5084, 5083, 5079, 5076, 5081, 5088, 5090, 5092, 5097, 7110, + 5093, 5098, 5099, 5108, 5109, 5110, 5115, 7110, 5111, 7110, + 5112, 5116, 5121, 5124, 5128, 7110, 5131, 5132, 5119, 5136, + 7110, 7110, 5138, 5139, 5140, 5144, 5141, 7110, 7110, 5147, + 7110, 5148, 7110, 5149, 5151, 7110, 7110, 5101, 5153, 5154, + 5155, 5156, 5158, 7110, 5165, 7110, 5168, 5169, 5170, 5172, + 5159, 5173, 7110, 5174, 5177, 5182, 5183, 5185, 7110, 5176, + 5187, 5191, 5204, 5190, 5186, 7110, 5200, 5202, 5203, 5206, + 7110, 5209, 5212, 5213, 5207, 5214, 5215, 5216, 5123, 5217, - 5221, 5223, 5226, 5228, 5229, 5230, 5231, 5232, 5236, 5238, - 5235, 5244, 5246, 5239, 5248, 5255, 5256, 5257, 5241, 5259, - 5258, 5260, 5266, 5262, 5273, 5268, 5270, 5274, 5275, 5277, - 5276, 5279, 5283, 5284, 5288, 5286, 5289, 7073, 5282, 5292, - 5293, 5302, 5296, 5303, 5306, 5313, 5318, 5319, 7073, 5321, - 7073, 5323, 5307, 5315, 5309, 5327, 7073, 5329, 5330, 5331, - 5332, 5334, 5335, 5336, 5337, 5333, 5340, 5344, 7073, 5346, - 5360, 5347, 5341, 5356, 5367, 7073, 5362, 5369, 5354, 5364, - 5370, 5373, 5374, 5375, 5376, 5379, 5377, 5378, 5384, 5387, - 5381, 5390, 5391, 7073, 5399, 5403, 5406, 5392, 5404, 5405, + 5219, 5220, 5229, 5226, 5227, 5230, 5237, 5239, 5241, 5243, + 5244, 5245, 5248, 5249, 5251, 5254, 5257, 5258, 5259, 5260, + 5261, 5265, 5267, 5264, 5273, 5275, 5268, 5277, 5284, 5285, + 5286, 5270, 5288, 5287, 5289, 5295, 5291, 5302, 5297, 5299, + 5303, 5304, 5306, 5305, 5308, 5312, 5313, 5317, 5315, 5318, + 7110, 5311, 5321, 5322, 5331, 5325, 5332, 5335, 5342, 5347, + 5348, 7110, 5350, 7110, 5352, 5336, 5344, 5338, 5356, 7110, + 5358, 5359, 5360, 5361, 5363, 5364, 5365, 5366, 5362, 5369, + 5373, 7110, 5375, 5389, 5376, 5370, 5385, 5396, 7110, 5391, + 5398, 5383, 5393, 5399, 5402, 5403, 5404, 5405, 5408, 5406, - 5407, 5409, 5411, 5413, 5414, 5415, 5417, 5418, 5419, 5425, - 5431, 5428, 5436, 5441, 7073, 5424, 7073, 5442, 5444, 5445, - 5432, 5448, 5449, 5446, 5450, 7073, 7073, 5447, 5455, 5456, - 5461, 5462, 5458, 5465, 5468, 5470, 5471, 7073, 5472, 5474, - 5478, 5484, 5481, 7073, 5486, 5488, 5489, 5491, 7073, 5492, - 5493, 5495, 5496, 5506, 5498, 5511, 5507, 5513, 5500, 5503, - 5514, 5519, 7073, 7073, 7073, 7073, 5520, 5523, 5525, 5526, - 5527, 5528, 5529, 5533, 5535, 5531, 5532, 5536, 7073, 5547, - 7073, 7073, 5543, 7073, 5549, 5550, 5553, 5555, 5537, 5557, - 5559, 7073, 5560, 7073, 5565, 5568, 5561, 5572, 5578, 5569, + 5407, 5413, 5416, 5410, 5419, 5420, 7110, 5428, 5432, 5435, + 5421, 5433, 5434, 5436, 5438, 5440, 5442, 5443, 5444, 5446, + 5447, 5448, 5454, 5460, 5457, 5465, 5470, 7110, 5453, 7110, + 5471, 5473, 5474, 5461, 5477, 5478, 5475, 5479, 7110, 7110, + 5476, 5484, 5485, 5490, 5491, 5487, 5494, 5497, 5499, 5500, + 7110, 5501, 5503, 5507, 5511, 5510, 5512, 7110, 5517, 5519, + 5520, 5522, 7110, 5523, 5524, 5526, 5527, 5537, 5529, 5542, + 5538, 5544, 5531, 5534, 5545, 5550, 7110, 7110, 7110, 7110, + 5551, 5554, 5556, 5557, 5558, 5559, 5560, 5564, 5566, 5562, + 5563, 5567, 7110, 5578, 7110, 7110, 5574, 7110, 5580, 5581, - 5562, 5580, 5582, 5583, 5584, 5585, 5592, 5590, 5593, 5591, - 5596, 5598, 5600, 7073, 7073, 5604, 5608, 5609, 5611, 5613, - 5614, 5615, 5622, 5620, 5621, 5623, 5625, 5627, 5628, 5636, - 5637, 5633, 5634, 5642, 7073, 5643, 5639, 5645, 7073, 5647, - 7073, 5651, 5652, 5653, 5654, 5655, 5660, 5661, 5662, 5664, - 5666, 7073, 7073, 5665, 5680, 5675, 7073, 7073, 5667, 5676, - 5677, 5679, 5685, 5682, 5687, 7073, 5690, 5691, 5692, 5688, - 5694, 5702, 5695, 7073, 5704, 7073, 5705, 5707, 5713, 5708, - 5716, 5721, 5717, 5724, 5723, 5720, 5726, 5727, 7073, 5729, - 5730, 7073, 5737, 5736, 5740, 5734, 5742, 5745, 7073, 5746, + 5584, 5586, 5568, 5588, 5590, 7110, 5591, 7110, 5596, 5599, + 5592, 5603, 5609, 5600, 5593, 5611, 5613, 5614, 5615, 5616, + 5623, 5621, 5624, 5622, 5627, 5629, 5631, 7110, 7110, 5635, + 5639, 5640, 5642, 5644, 5645, 5646, 5653, 5651, 5652, 5654, + 5656, 5658, 5659, 5667, 5668, 5664, 5665, 5673, 7110, 5674, + 5670, 5676, 7110, 5678, 7110, 5682, 5683, 5684, 5685, 5686, + 5691, 5692, 5693, 5695, 5697, 7110, 7110, 5696, 5711, 5706, + 7110, 7110, 5698, 5707, 5708, 5710, 5716, 5713, 5718, 7110, + 5721, 5722, 5723, 5719, 5725, 5733, 5726, 7110, 5735, 7110, + 5736, 5738, 5744, 5739, 5747, 5752, 5748, 5755, 5754, 5751, - 5749, 5753, 5755, 7073, 5757, 5758, 5759, 5761, 7073, 5766, - 7073, 5763, 5768, 5769, 5777, 5772, 7073, 5774, 5778, 7073, - 5786, 5788, 5790, 5792, 5780, 5791, 7073, 5797, 5782, 7073, - 5798, 5802, 5805, 5808, 5799, 5810, 5803, 5811, 5812, 5819, - 5821, 5823, 7073, 7073, 5828, 5825, 135, 5837, 5815, 5824, - 5832, 5833, 5840, 5750, 5841, 5843, 7073, 7073, 5846, 7073, - 5847, 5850, 7073, 5835, 5854, 5848, 5856, 5858, 5859, 5861, - 5862, 5865, 5866, 5867, 5868, 5869, 5871, 7073, 5890, 5892, - 5875, 5896, 5897, 5899, 5901, 5903, 5905, 5893, 5907, 5908, - 5885, 5910, 5913, 5914, 5915, 5916, 5917, 5919, 5921, 7073, + 5757, 5758, 7110, 5760, 5761, 7110, 5768, 5767, 5771, 5765, + 5772, 5777, 5773, 7110, 5778, 5780, 5785, 5790, 7110, 5792, + 5793, 5794, 5787, 7110, 5801, 7110, 5795, 5802, 5804, 5809, + 5805, 7110, 5806, 5810, 7110, 5813, 5819, 5821, 5822, 5814, + 5823, 7110, 5829, 5824, 7110, 5830, 5832, 5833, 5838, 5839, + 5841, 5835, 5843, 5844, 5851, 5847, 5849, 7110, 7110, 5862, + 5852, 135, 5865, 5855, 5860, 5863, 5866, 5873, 5868, 5870, + 5876, 7110, 7110, 5877, 7110, 5871, 5881, 7110, 5869, 5885, + 5886, 5889, 5890, 5891, 5892, 5896, 5898, 5899, 5900, 5901, + 5902, 5908, 7110, 5920, 5923, 5905, 5926, 5927, 5929, 5931, - 5923, 5927, 5929, 5872, 5931, 5934, 5935, 7073, 5943, 5938, - 5947, 5944, 7073, 5951, 5948, 5952, 5954, 5955, 7073, 5956, - 5959, 5966, 5967, 5960, 5962, 5968, 5970, 5978, 7073, 5973, - 5975, 5976, 7073, 7073, 7073, 5982, 5989, 5983, 7073, 5991, - 5992, 5993, 5994, 7073, 5996, 5998, 5999, 7073, 7073, 7073, - 6000, 6003, 6001, 7073, 6002, 6015, 7073, 6004, 7073, 6005, - 7073, 6014, 6023, 6020, 6024, 7073, 6027, 6017, 6029, 6034, - 7073, 6037, 6040, 6042, 6044, 6031, 6045, 6047, 7073, 6054, - 6050, 6056, 6058, 6049, 6059, 6060, 6063, 6062, 6072, 6065, - 6070, 7073, 6073, 6074, 6078, 6075, 6082, 6084, 6085, 7073, + 5933, 5935, 5937, 5938, 5939, 5918, 5940, 5941, 5942, 5945, + 5947, 5948, 5949, 5951, 7110, 5958, 5963, 5952, 5960, 5965, + 5966, 5967, 7110, 5974, 5970, 5979, 5976, 7110, 5983, 5980, + 5984, 5986, 5987, 7110, 5988, 5991, 5998, 5999, 5992, 5994, + 6000, 6002, 6004, 6015, 7110, 6005, 6007, 6008, 7110, 7110, + 7110, 6020, 6022, 6019, 7110, 6027, 6023, 6010, 6028, 7110, + 6030, 6031, 6032, 7110, 7110, 7110, 6034, 6036, 6038, 7110, + 6042, 6045, 7110, 6043, 7110, 6048, 7110, 6049, 6051, 6052, + 6057, 7110, 6058, 6060, 6050, 6067, 7110, 6075, 6077, 6079, + 6061, 6065, 6072, 6081, 7110, 6088, 6084, 6087, 6094, 6080, - 6086, 7073, 6088, 7073, 6089, 6091, 6092, 6093, 6094, 6095, - 6096, 6108, 6107, 6098, 6109, 6113, 6114, 6117, 6120, 6124, - 6121, 7073, 7073, 6131, 6127, 7073, 6128, 6136, 7073, 6126, - 7073, 6138, 7073, 6129, 6133, 6139, 6142, 6146, 7073, 7073, - 6153, 6148, 6150, 6160, 6155, 6156, 7073, 6161, 6157, 6163, - 6165, 7073, 6172, 7073, 6167, 6176, 6169, 7073, 6173, 6180, - 6184, 6177, 6181, 6186, 6188, 6189, 6190, 6197, 6193, 6194, - 6196, 6203, 6200, 6204, 6208, 6213, 7073, 7073, 7073, 6209, - 6217, 6224, 6220, 6222, 6229, 6226, 7073, 6227, 6231, 6228, - 6234, 6241, 6238, 6240, 7073, 6236, 6242, 6243, 6245, 6247, + 6083, 6090, 6096, 6097, 6105, 6100, 6103, 7110, 6104, 6107, + 6109, 6116, 6110, 6106, 6113, 7110, 6118, 7110, 6120, 7110, + 6122, 6123, 6124, 6126, 6131, 6127, 6132, 6133, 6134, 6142, + 6144, 6146, 6147, 6148, 6150, 6153, 6154, 7110, 7110, 6164, + 6156, 7110, 6160, 6168, 7110, 6157, 7110, 6172, 7110, 6159, + 6161, 6176, 6169, 6179, 7110, 7110, 6183, 6180, 6186, 6193, + 6188, 6190, 6191, 7110, 6196, 6192, 6194, 6199, 7110, 6207, + 7110, 6202, 6209, 6212, 7110, 6204, 6215, 6219, 6205, 6208, + 6224, 6216, 6221, 6225, 6235, 6231, 6232, 6233, 6237, 6234, + 6238, 6239, 6246, 7110, 7110, 7110, 6240, 6248, 6257, 6255, - 6250, 6249, 6252, 7073, 6263, 6267, 6271, 6254, 6264, 6272, - 6274, 6276, 6280, 6282, 6283, 6284, 6257, 6285, 7073, 7073, - 6287, 6288, 7073, 6292, 6294, 7073, 6289, 7073, 6295, 6297, - 6299, 6298, 6300, 7073, 6303, 6305, 6306, 6307, 6309, 6313, - 6312, 6315, 7073, 6316, 6330, 6323, 6326, 6327, 7073, 7073, - 6328, 6336, 7073, 6338, 6339, 6333, 6346, 6341, 6342, 6352, - 6354, 7073, 6356, 6357, 6348, 6355, 6358, 6361, 6364, 7073, - 6366, 6365, 6367, 6369, 7073, 6372, 6376, 6377, 6378, 6380, - 7073, 6381, 6371, 6388, 6393, 7073, 6383, 6397, 6396, 7073, - 7073, 7073, 6402, 6405, 6406, 7073, 7073, 7073, 7073, 6408, + 6256, 6264, 6260, 7110, 6261, 6263, 6265, 6267, 6275, 6271, + 6273, 7110, 6279, 6274, 6276, 6277, 6281, 6283, 6282, 6284, + 7110, 6295, 6297, 6300, 6303, 6304, 6305, 6307, 6312, 6314, + 6316, 6309, 6317, 6325, 6321, 7110, 7110, 6324, 6320, 7110, + 6328, 6330, 7110, 6331, 7110, 6332, 6333, 6334, 6335, 6337, + 7110, 6340, 6341, 6342, 6344, 7110, 6345, 6347, 6349, 6352, + 7110, 6346, 6366, 6359, 6362, 6363, 7110, 7110, 6369, 6371, + 7110, 6373, 6375, 6374, 6382, 6377, 6378, 6384, 6387, 7110, + 6391, 6393, 6385, 6394, 6396, 6397, 6400, 7110, 6399, 6402, + 6403, 6404, 7110, 6408, 6411, 6412, 6410, 6413, 7110, 6415, - 6411, 6412, 6414, 7073, 6415, 7073, 7073, 6418, 6422, 6426, - 6428, 6435, 6421, 7073, 6429, 6436, 6438, 6439, 6440, 7073, - 7073, 6441, 6443, 6444, 6446, 6448, 6449, 7073, 7073, 6450, - 6452, 6456, 6453, 6455, 7073, 6458, 6461, 6468, 6465, 6471, - 6478, 6480, 6473, 6481, 6482, 6490, 6493, 6483, 6485, 6492, - 6496, 6497, 6495, 6499, 6509, 6504, 6506, 6512, 6507, 6515, - 7073, 7073, 6517, 7073, 6519, 6521, 7073, 6523, 7073, 6525, - 6527, 6529, 6532, 7073, 6534, 6536, 6538, 6540, 6542, 7073, - 6543, 6545, 6547, 6548, 6549, 6550, 7073, 6554, 6555, 6559, - 6551, 6556, 6560, 6562, 6565, 7073, 6567, 6576, 7073, 7073, + 6416, 6425, 6417, 7110, 6428, 6432, 6433, 7110, 7110, 7110, + 6438, 6440, 6441, 7110, 7110, 7110, 7110, 6443, 6444, 6434, + 6451, 7110, 6447, 7110, 7110, 6455, 6459, 6463, 6465, 6469, + 6468, 7110, 6470, 6471, 6474, 6458, 6477, 7110, 7110, 6478, + 6481, 6482, 6483, 6485, 6486, 7110, 7110, 6487, 6489, 6490, + 6495, 6492, 7110, 6493, 6498, 6500, 6505, 6508, 6516, 6518, + 6510, 6519, 6520, 6527, 6528, 6513, 6530, 6523, 6531, 6534, + 6533, 6541, 6543, 6542, 6547, 6550, 6551, 6553, 7110, 7110, + 6555, 7110, 6557, 6559, 7110, 6560, 7110, 6562, 6564, 6570, + 6572, 7110, 6574, 6576, 6580, 6582, 6565, 7110, 6577, 6584, - 6571, 6577, 6573, 6578, 6583, 7073, 6581, 6591, 6586, 6587, - 6588, 6590, 6593, 7073, 6596, 6594, 7073, 7073, 6606, 6597, - 7073, 7073, 6595, 6598, 7073, 7073, 7073, 7073, 7073, 7073, - 7073, 7073, 6611, 6614, 7073, 7073, 6613, 6605, 6620, 7073, - 6623, 7073, 6615, 6624, 6625, 6627, 7073, 6628, 7073, 6630, - 6632, 6631, 6635, 6634, 6639, 6641, 6644, 6646, 6645, 6648, - 6650, 6651, 6655, 6652, 6656, 6666, 6659, 6669, 6662, 6670, - 7073, 7073, 7073, 6658, 6674, 6680, 6676, 6684, 6686, 6689, - 6691, 6681, 6692, 6693, 6697, 6698, 6695, 6699, 6707, 6704, - 6705, 6706, 6709, 6710, 6716, 6722, 7073, 6724, 6713, 6719, + 6588, 6585, 6589, 6590, 7110, 6593, 6595, 6597, 6598, 6599, + 6603, 6604, 6607, 7110, 6602, 6609, 7110, 7110, 6600, 6616, + 6611, 6620, 6622, 7110, 6623, 6630, 6625, 6627, 6628, 6631, + 6629, 7110, 6635, 6633, 7110, 7110, 6634, 6636, 7110, 7110, + 6643, 6644, 7110, 7110, 7110, 7110, 7110, 7110, 7110, 7110, + 6648, 6652, 7110, 7110, 6646, 6657, 6661, 7110, 6663, 7110, + 6650, 6658, 6666, 6654, 7110, 6665, 7110, 6668, 6671, 6672, + 6285, 6675, 6680, 6676, 6678, 6683, 6684, 6685, 6687, 6686, + 6692, 6688, 6694, 6698, 6699, 6706, 6696, 6707, 7110, 7110, + 7110, 6708, 6709, 6714, 6711, 6724, 6725, 6728, 6731, 6717, - 6726, 7073, 6727, 7073, 6729, 7073, 7073, 6732, 6733, 6735, - 6736, 6745, 6746, 6737, 6741, 6744, 6748, 6750, 7073, 6757, - 7073, 7073, 7073, 6752, 6758, 7073, 6760, 6761, 7073, 6759, - 6762, 6764, 6768, 6769, 6766, 6770, 6771, 6787, 7073, 7073, - 6772, 6777, 6780, 6789, 6791, 6790, 6793, 6797, 6798, 6800, - 6801, 6810, 7073, 6807, 6808, 6812, 7073, 6814, 6809, 6815, - 6816, 6817, 6825, 6821, 6824, 7073, 6826, 7073, 6830, 6832, - 6833, 6823, 6831, 6834, 6845, 6843, 6839, 7073, 6849, 6853, - 6851, 6855, 6857, 6859, 6860, 6861, 6863, 6866, 6872, 6869, - 6876, 6877, 6873, 6881, 6878, 7073, 6888, 6879, 7073, 6885, + 6719, 6732, 6733, 6737, 6721, 6734, 6747, 6740, 6743, 6745, + 6752, 6744, 6757, 6759, 7110, 6761, 6748, 6753, 6766, 7110, + 6762, 7110, 6767, 7110, 7110, 6769, 6770, 6773, 6774, 6782, + 6784, 6775, 6779, 6780, 6783, 6787, 7110, 6791, 7110, 7110, + 7110, 6794, 6796, 7110, 6795, 6797, 7110, 6798, 6800, 6802, + 6804, 6806, 6803, 6807, 6808, 6811, 7110, 7110, 6814, 6820, + 6823, 6825, 6826, 6833, 6828, 6830, 6832, 6836, 6839, 6846, + 7110, 6844, 6845, 6848, 7110, 6849, 6851, 6852, 6854, 6855, + 6862, 6857, 6864, 7110, 6860, 7110, 6866, 6863, 6878, 6867, + 6868, 6869, 6879, 6884, 6881, 7110, 6871, 6890, 6885, 6892, - 6889, 6882, 6891, 6895, 7073, 6900, 6893, 6902, 6903, 6906, - 6907, 7073, 6909, 6916, 6911, 7073, 6917, 7073, 7073, 6919, - 6913, 6920, 6926, 6928, 7073, 7073, 7073, 6953, 6960, 6967, - 6974, 6981, 6988, 6995, 88, 7002, 7009, 7016, 7023, 7030, - 7037, 7044, 7051, 7058, 7065 + 6895, 6898, 6899, 6888, 6901, 6905, 6909, 6913, 6908, 6914, + 6916, 6917, 6918, 7110, 6920, 6923, 7110, 6924, 6925, 6926, + 6927, 6931, 7110, 6934, 6928, 6936, 6938, 6941, 6943, 7110, + 6949, 6952, 6953, 7110, 6954, 7110, 7110, 6956, 6944, 6957, + 6965, 6967, 7110, 7110, 7110, 6990, 6997, 7004, 7011, 7018, + 7025, 7032, 88, 7039, 7046, 7053, 7060, 7067, 7074, 7081, + 7088, 7095, 7102 } ; -static const flex_int16_t yy_def[3646] = +static const flex_int16_t yy_def[3664] = { 0, - 3627, 1, 3628, 3628, 3629, 3629, 3630, 3630, 3631, 3631, - 3632, 3632, 3633, 3633, 3634, 3634, 3627, 3635, 3627, 3627, - 3627, 3627, 3636, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3637, 3627, 3627, 3627, - 3637, 3638, 3627, 3627, 3627, 3638, 3639, 3627, 3627, 3627, - 3627, 3639, 3640, 3627, 3627, 3627, 3640, 3641, 3627, 3642, - 3627, 3641, 3641, 3643, 3627, 3627, 3627, 3627, 3643, 3644, - 3627, 3627, 3627, 3644, 3635, 3635, 3627, 3645, 3636, 3645, - 3636, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3645, 1, 3646, 3646, 3647, 3647, 3648, 3648, 3649, 3649, + 3650, 3650, 3651, 3651, 3652, 3652, 3645, 3653, 3645, 3645, + 3645, 3645, 3654, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3655, 3645, 3645, 3645, + 3655, 3656, 3645, 3645, 3645, 3656, 3657, 3645, 3645, 3645, + 3645, 3657, 3658, 3645, 3645, 3645, 3658, 3659, 3645, 3660, + 3645, 3659, 3659, 3661, 3645, 3645, 3645, 3645, 3661, 3662, + 3645, 3645, 3645, 3662, 3653, 3653, 3645, 3663, 3654, 3663, + 3654, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3637, - 3637, 3638, 3638, 3639, 3639, 3627, 3640, 3640, 3641, 3641, - 3642, 3642, 3641, 3643, 3643, 3627, 3644, 3644, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3655, + 3655, 3656, 3656, 3657, 3657, 3645, 3658, 3658, 3659, 3659, + 3660, 3660, 3659, 3661, 3661, 3645, 3662, 3662, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3659, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3659, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3645, 3653, 3645, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3645, 3653, 3653, 3659, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3641, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3627, 3627, 3635, 3627, 3627, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3659, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3645, + 3645, 3653, 3645, 3645, 3653, 3653, 3645, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3641, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3659, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, + 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3645, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3645, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3641, 3641, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, + 3653, 3653, 3659, 3659, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3641, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3659, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3645, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3659, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, + 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3645, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3645, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, - 3635, 3635, 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, + 3653, 3653, 3659, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3645, 3653, 3653, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3627, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3641, 3635, 3627, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3645, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3659, 3653, 3645, 3653, 3653, 3653, + 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3645, 3653, 3645, 3653, 3653, 3653, 3645, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3645, 3645, 3653, 3645, 3653, 3653, 3653, 3653, 3645, 3653, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3627, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3645, 3653, + 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, - 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3645, 3645, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, + 3653, 3659, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3645, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3645, 3653, 3645, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, + 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3641, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3659, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3645, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3627, - 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, 3627, 3635, - 3627, 3635, 3635, 3627, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3645, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3645, 3645, 3653, 3653, 3653, 3653, 3653, 3645, 3645, 3653, + 3645, 3653, 3645, 3653, 3653, 3645, 3645, 3653, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3645, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3641, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3659, 3653, 3653, 3653, 3653, + 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3645, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3627, 3627, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3627, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3645, 3645, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3645, 3645, 3653, 3645, 3653, 3653, - 3635, 3641, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3627, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3627, 3635, 3635, 3635, 3627, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3645, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3659, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3645, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, + 3653, 3653, 3645, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3645, 3653, 3653, 3653, + 3645, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3627, 3635, 3635, 3641, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, 3627, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, + 3653, 3653, 3645, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3645, 3653, + 3653, 3653, 3653, 3645, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3645, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3645, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3645, 3653, + 3653, 3659, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3645, 3645, 3653, 3645, 3653, 3653, 3645, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3627, 3627, 3627, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3627, 3627, 3627, - 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3635, 3627, 3635, - 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3645, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3645, 3645, + 3645, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3645, + 3653, 3653, 3653, 3645, 3645, 3645, 3653, 3653, 3653, 3645, + 3653, 3653, 3645, 3653, 3645, 3653, 3645, 3653, 3653, 3653, + 3653, 3645, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, - 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3627, 3635, 3635, 3627, 3635, 3635, 3627, 3635, - 3627, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3627, 3635, 3627, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3645, 3653, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3645, 3653, + 3653, 3645, 3653, 3653, 3645, 3653, 3645, 3653, 3645, 3653, + 3653, 3653, 3653, 3653, 3645, 3645, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3645, 3653, + 3645, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3645, 3645, 3645, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, - 3635, 3635, 3627, 3635, 3635, 3627, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, 3627, - 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3627, - 3627, 3627, 3635, 3635, 3635, 3627, 3627, 3627, 3627, 3635, + 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3645, 3653, 3653, 3645, + 3653, 3653, 3645, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3645, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, + 3645, 3653, 3653, 3653, 3653, 3653, 3645, 3645, 3653, 3653, + 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3645, 3653, - 3635, 3635, 3635, 3627, 3635, 3627, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, - 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, 3635, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3627, 3635, 3627, 3635, 3635, 3627, 3635, 3627, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3627, + 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3645, 3645, 3645, + 3653, 3653, 3653, 3645, 3645, 3645, 3645, 3653, 3653, 3653, + 3653, 3645, 3653, 3645, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3645, 3645, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3645, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3645, + 3653, 3645, 3653, 3653, 3645, 3653, 3645, 3653, 3653, 3653, + 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3627, 3635, 3635, - 3627, 3627, 3635, 3635, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3635, 3635, 3627, 3627, 3635, 3635, 3635, 3627, - 3635, 3627, 3635, 3635, 3635, 3635, 3627, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3627, 3627, 3627, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, + 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3653, 3645, 3645, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3645, 3653, 3653, 3645, 3645, 3653, 3653, 3645, 3645, + 3653, 3653, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3653, 3653, 3645, 3645, 3653, 3653, 3653, 3645, 3653, 3645, + 3653, 3653, 3653, 3653, 3645, 3653, 3645, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3645, + 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, - 3635, 3627, 3635, 3627, 3635, 3627, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, - 3627, 3627, 3627, 3635, 3635, 3627, 3635, 3635, 3627, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3627, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3627, 3635, 3635, 3635, 3627, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, 3635, - 3635, 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3627, 3635, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3645, + 3653, 3645, 3653, 3645, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3645, 3645, + 3645, 3653, 3653, 3645, 3653, 3653, 3645, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3645, 3645, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3645, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3645, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3653, 3653, 3645, 3653, 3653, 3653, 3653, - 3635, 3635, 3635, 3635, 3627, 3635, 3635, 3635, 3635, 3635, - 3635, 3627, 3635, 3635, 3635, 3627, 3635, 3627, 3627, 3635, - 3635, 3635, 3635, 3635, 3627, 3627, 0, 3627, 3627, 3627, - 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3627, 3627, 3627 + 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, 3653, + 3653, 3653, 3653, 3645, 3653, 3653, 3645, 3653, 3653, 3653, + 3653, 3653, 3645, 3653, 3653, 3653, 3653, 3653, 3653, 3645, + 3653, 3653, 3653, 3645, 3653, 3645, 3645, 3653, 3653, 3653, + 3653, 3653, 3645, 3645, 0, 3645, 3645, 3645, 3645, 3645, + 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3645, 3645, 3645 } ; -static const flex_int16_t yy_nxt[7114] = +static const flex_int16_t yy_nxt[7151] = { 0, 18, 19, 20, 21, 22, 23, 22, 18, 18, 18, 18, 18, 22, 24, 25, 26, 27, 28, 29, 30, @@ -1647,763 +1653,766 @@ static const flex_int16_t yy_nxt[7114] = 153, 181, 196, 189, 154, 155, 164, 86, 164, 164, 90, 164, 90, 90, 169, 90, 169, 169, 174, 169, 174, 174, 172, 174, 85, 86, 85, 85, 90, 85, - 90, 90, 290, 90, 86, 85, 86, 182, 86, 90, + 90, 90, 291, 90, 86, 85, 86, 182, 86, 90, 91, 185, 190, 188, 86, 86, 197, 86, 191, 86, 192, 86, 86, 208, 186, 86, 86, 86, 86, 86, 200, 199, 193, 194, 86, 198, 86, 195, 86, 201, - 86, 202, 246, 210, 206, 203, 204, 207, 209, 86, + 86, 202, 247, 210, 206, 203, 204, 207, 209, 86, 211, 216, 212, 205, 86, 213, 86, 86, 86, 218, 86, 219, 86, 221, 86, 86, 227, 222, 214, 215, 86, 228, 226, 224, 86, 86, 217, 230, 225, 86, 86, 220, 86, 223, 231, 233, 234, 229, 86, 86, - 86, 86, 232, 236, 86, 238, 86, 241, 235, 239, - 86, 86, 86, 86, 243, 86, 237, 374, 86, 86, - 86, 240, 86, 244, 242, 249, 252, 253, 86, 245, - 254, 248, 86, 86, 86, 255, 250, 247, 261, 258, - - 251, 262, 86, 86, 260, 264, 86, 86, 86, 86, - 259, 268, 256, 86, 265, 257, 86, 86, 263, 267, - 269, 271, 160, 160, 86, 162, 266, 270, 162, 274, - 164, 272, 164, 164, 340, 164, 167, 167, 169, 86, - 169, 169, 90, 169, 90, 90, 170, 90, 174, 273, - 174, 174, 275, 174, 172, 177, 177, 277, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 276, 279, 86, - 282, 285, 281, 86, 278, 280, 86, 288, 287, 284, - 178, 291, 283, 86, 289, 286, 86, 292, 293, 86, - 294, 320, 86, 297, 86, 295, 86, 302, 298, 86, - - 304, 86, 86, 299, 86, 305, 86, 307, 86, 300, - 301, 303, 296, 308, 86, 311, 309, 86, 86, 86, - 306, 86, 313, 86, 314, 86, 86, 86, 176, 86, - 86, 86, 321, 315, 310, 322, 328, 316, 318, 86, - 317, 319, 86, 323, 312, 331, 324, 86, 325, 329, - 335, 86, 86, 332, 86, 330, 86, 333, 337, 338, - 326, 376, 327, 86, 86, 86, 341, 336, 86, 334, - 343, 86, 86, 342, 339, 344, 86, 345, 86, 86, - 346, 348, 86, 86, 86, 347, 86, 86, 350, 86, - 86, 86, 349, 86, 86, 352, 357, 86, 355, 353, - - 86, 86, 86, 358, 351, 362, 356, 364, 354, 86, - 363, 86, 359, 86, 86, 86, 360, 366, 368, 371, - 86, 361, 86, 86, 86, 86, 377, 365, 373, 378, - 86, 380, 86, 369, 370, 86, 367, 86, 86, 86, - 372, 375, 86, 383, 384, 86, 385, 170, 387, 379, - 381, 86, 86, 382, 86, 86, 86, 388, 86, 392, - 86, 86, 86, 391, 86, 86, 398, 396, 394, 399, - 386, 395, 86, 86, 389, 86, 86, 402, 400, 390, - 393, 401, 86, 86, 86, 86, 86, 397, 86, 409, - 408, 86, 86, 412, 410, 86, 407, 403, 404, 86, - - 406, 411, 413, 405, 86, 86, 86, 415, 86, 416, - 86, 86, 86, 86, 419, 86, 86, 420, 86, 86, - 86, 431, 414, 424, 421, 422, 417, 418, 426, 86, - 86, 86, 427, 425, 86, 428, 86, 423, 86, 433, - 429, 86, 434, 432, 86, 86, 86, 86, 86, 86, - 440, 436, 86, 86, 86, 441, 86, 430, 443, 439, - 86, 86, 437, 86, 446, 86, 86, 435, 438, 448, - 451, 442, 86, 86, 86, 444, 86, 450, 445, 447, - 86, 86, 460, 452, 453, 86, 449, 86, 86, 86, - 462, 467, 461, 175, 468, 86, 454, 472, 463, 455, - - 464, 469, 473, 86, 456, 457, 458, 459, 86, 86, - 470, 471, 474, 465, 475, 86, 466, 86, 86, 86, - 86, 86, 86, 484, 86, 86, 86, 486, 482, 86, - 485, 483, 86, 478, 476, 479, 86, 477, 480, 481, - 86, 487, 86, 86, 488, 86, 494, 489, 490, 86, - 86, 491, 86, 86, 495, 500, 496, 86, 501, 86, - 493, 86, 502, 492, 86, 497, 86, 86, 512, 499, - 86, 503, 498, 505, 514, 506, 86, 504, 971, 508, - 86, 507, 86, 513, 515, 86, 86, 86, 86, 86, - 86, 516, 509, 86, 170, 510, 530, 511, 86, 517, - - 86, 518, 532, 86, 533, 546, 86, 519, 529, 535, - 86, 520, 573, 86, 531, 552, 521, 534, 86, 522, - 86, 523, 547, 524, 537, 536, 548, 86, 86, 86, - 86, 549, 86, 550, 86, 86, 525, 553, 555, 526, - 551, 527, 557, 528, 86, 554, 538, 539, 86, 86, - 86, 86, 86, 556, 558, 559, 540, 541, 542, 543, - 544, 561, 86, 545, 560, 86, 567, 86, 86, 565, - 563, 562, 566, 568, 570, 86, 571, 569, 86, 86, - 86, 575, 86, 86, 86, 86, 86, 86, 564, 578, - 86, 579, 580, 574, 86, 86, 86, 170, 572, 577, - - 590, 86, 582, 585, 86, 581, 583, 576, 86, 584, - 86, 593, 86, 586, 587, 588, 86, 86, 86, 86, - 591, 86, 86, 594, 609, 86, 168, 599, 600, 86, - 86, 598, 589, 595, 610, 592, 86, 596, 86, 601, - 597, 602, 86, 611, 86, 613, 614, 603, 612, 86, - 615, 86, 86, 617, 86, 604, 605, 616, 86, 606, - 607, 618, 86, 608, 86, 621, 86, 619, 623, 86, - 86, 86, 86, 626, 620, 624, 627, 86, 86, 622, - 86, 628, 86, 86, 625, 86, 86, 633, 631, 86, - 632, 86, 86, 629, 86, 634, 86, 86, 86, 639, - - 86, 630, 640, 635, 641, 86, 638, 86, 643, 636, - 637, 86, 86, 646, 86, 86, 644, 642, 86, 645, - 86, 648, 86, 650, 86, 86, 86, 86, 86, 86, - 86, 654, 662, 652, 86, 86, 647, 86, 86, 649, - 656, 86, 86, 651, 663, 682, 653, 655, 657, 660, - 658, 661, 659, 664, 86, 86, 666, 86, 86, 86, - 665, 669, 667, 86, 86, 668, 673, 86, 86, 676, - 86, 670, 86, 672, 86, 86, 86, 675, 671, 86, - 86, 679, 678, 86, 86, 683, 86, 674, 86, 685, - 86, 86, 680, 677, 86, 86, 86, 86, 684, 86, - - 681, 700, 686, 688, 86, 712, 166, 687, 86, 689, - 699, 697, 86, 86, 690, 698, 691, 702, 701, 86, - 703, 86, 692, 704, 693, 86, 705, 694, 695, 710, - 706, 86, 711, 713, 696, 86, 708, 86, 86, 86, - 707, 717, 86, 86, 714, 86, 720, 86, 86, 722, - 715, 86, 86, 716, 86, 86, 709, 86, 726, 86, - 86, 86, 86, 719, 724, 718, 723, 729, 86, 725, - 730, 86, 721, 86, 727, 86, 86, 733, 86, 731, - 735, 728, 734, 732, 170, 737, 86, 738, 736, 86, - 86, 86, 86, 739, 86, 86, 86, 746, 744, 86, - - 749, 86, 86, 741, 86, 740, 750, 742, 743, 745, - 748, 752, 86, 86, 86, 86, 751, 86, 754, 86, - 86, 86, 86, 747, 86, 753, 757, 758, 755, 759, - 86, 766, 86, 86, 756, 763, 760, 86, 762, 761, - 764, 86, 768, 765, 767, 86, 769, 86, 86, 770, - 86, 771, 86, 772, 775, 774, 86, 86, 773, 86, - 86, 778, 86, 777, 776, 86, 86, 86, 86, 781, - 86, 86, 782, 780, 786, 785, 86, 86, 86, 86, - 86, 779, 788, 86, 790, 86, 792, 86, 86, 784, - 86, 783, 86, 86, 86, 789, 787, 791, 795, 799, - - 165, 86, 793, 86, 86, 86, 797, 86, 800, 794, - 86, 796, 86, 802, 798, 801, 86, 807, 803, 86, - 809, 804, 805, 86, 810, 806, 86, 86, 811, 814, - 808, 86, 86, 86, 816, 86, 86, 817, 86, 820, - 812, 815, 813, 819, 86, 86, 86, 86, 86, 821, - 86, 86, 86, 826, 824, 828, 86, 86, 86, 818, - 86, 822, 835, 825, 823, 86, 829, 86, 86, 86, - 86, 827, 163, 831, 833, 836, 832, 830, 86, 834, - 86, 837, 838, 839, 86, 86, 86, 840, 842, 86, - 86, 841, 86, 847, 843, 845, 86, 86, 849, 86, - - 850, 848, 86, 844, 86, 86, 86, 853, 86, 86, - 852, 846, 854, 86, 857, 86, 860, 86, 86, 855, - 86, 856, 86, 863, 86, 865, 862, 851, 858, 859, - 86, 86, 86, 870, 861, 868, 86, 866, 867, 86, - 864, 86, 86, 876, 86, 86, 872, 874, 871, 86, - 869, 878, 875, 86, 86, 86, 873, 880, 86, 86, - 86, 86, 886, 86, 879, 86, 86, 887, 86, 877, - 86, 86, 881, 86, 888, 86, 882, 883, 893, 884, - 86, 885, 896, 86, 891, 889, 890, 894, 86, 86, - 86, 86, 892, 86, 86, 895, 86, 86, 86, 86, - - 903, 899, 86, 897, 898, 86, 86, 86, 86, 86, - 900, 934, 86, 902, 901, 904, 906, 911, 905, 86, - 913, 86, 912, 907, 908, 909, 910, 86, 916, 86, - 86, 914, 86, 86, 86, 915, 86, 919, 86, 86, - 917, 86, 86, 923, 918, 86, 924, 927, 86, 920, - 86, 922, 925, 921, 86, 928, 86, 86, 86, 170, - 86, 930, 935, 926, 936, 931, 929, 933, 86, 86, - 86, 932, 937, 86, 938, 86, 86, 86, 86, 944, - 86, 943, 947, 86, 940, 86, 945, 939, 86, 86, - 86, 941, 942, 948, 946, 951, 950, 86, 949, 86, - - 86, 86, 86, 953, 86, 957, 86, 86, 86, 954, - 952, 86, 958, 959, 86, 86, 86, 86, 86, 86, - 956, 86, 973, 86, 1006, 955, 960, 972, 976, 975, - 970, 161, 961, 86, 962, 86, 86, 963, 86, 974, - 964, 86, 978, 86, 965, 86, 979, 966, 86, 977, - 86, 980, 981, 985, 967, 968, 984, 969, 86, 86, - 86, 982, 983, 86, 986, 987, 86, 988, 86, 86, - 989, 994, 86, 86, 86, 990, 997, 999, 993, 1001, - 86, 991, 992, 86, 998, 86, 86, 996, 1003, 995, - 1007, 86, 86, 1000, 86, 1008, 86, 1015, 1009, 1002, - - 1004, 86, 1010, 86, 86, 1013, 86, 1011, 1012, 86, - 86, 1005, 1017, 86, 1014, 1016, 86, 86, 1018, 86, - 86, 86, 86, 1021, 86, 1020, 86, 1025, 86, 1019, - 86, 1028, 1024, 86, 86, 86, 1026, 1032, 86, 86, - 1022, 1023, 1027, 86, 1033, 86, 1030, 1034, 86, 1035, - 1037, 1029, 1038, 86, 1036, 86, 1040, 1031, 86, 86, - 1042, 86, 86, 86, 1041, 86, 86, 1044, 1043, 1046, - 86, 1045, 1039, 1047, 86, 86, 86, 86, 86, 86, - 86, 86, 1050, 1048, 1051, 1052, 86, 1056, 86, 86, - 1060, 86, 1059, 86, 1049, 86, 86, 1053, 1057, 1058, - - 1055, 86, 1054, 86, 86, 86, 86, 86, 1067, 86, - 1062, 1065, 1063, 86, 1061, 86, 1066, 86, 1068, 86, - 86, 86, 1076, 1069, 1073, 86, 1071, 86, 1064, 1074, - 86, 86, 1072, 86, 1075, 86, 86, 86, 1082, 1084, - 1070, 86, 1077, 86, 1078, 1079, 1083, 1085, 86, 86, - 86, 1081, 86, 86, 1087, 1080, 86, 86, 86, 86, - 86, 86, 1086, 1095, 1088, 1098, 1093, 86, 86, 86, - 1089, 86, 1090, 86, 86, 1091, 1092, 1099, 1096, 1100, - 1097, 1094, 86, 86, 86, 1101, 86, 86, 1103, 1104, - 1105, 1107, 1102, 1108, 86, 86, 86, 86, 1106, 86, - - 86, 86, 86, 1119, 86, 1111, 1109, 1113, 86, 86, - 1120, 86, 1122, 86, 86, 1110, 86, 1112, 86, 86, - 1114, 1116, 86, 1115, 1117, 1121, 1125, 1123, 1118, 1126, - 86, 86, 86, 86, 1124, 86, 1131, 1127, 1128, 86, - 1133, 1134, 1129, 1132, 86, 1135, 86, 86, 86, 1136, - 1130, 86, 1139, 86, 1141, 86, 86, 86, 86, 86, - 86, 1138, 1137, 1144, 1143, 1147, 86, 1151, 86, 86, - 1148, 170, 1149, 1140, 1142, 86, 1145, 86, 1146, 1150, - 86, 86, 1154, 86, 86, 86, 86, 86, 1167, 1153, - 1152, 86, 1170, 86, 86, 1168, 86, 1157, 1158, 1155, - - 86, 86, 86, 86, 1159, 1156, 1172, 1160, 86, 1169, - 1179, 1161, 86, 1162, 86, 1173, 1236, 1163, 86, 1164, - 86, 1171, 86, 1175, 1165, 1177, 1174, 86, 1176, 1166, - 1178, 86, 86, 86, 1180, 86, 1181, 1183, 1187, 1186, - 1184, 86, 86, 86, 86, 86, 86, 178, 1182, 86, - 1185, 1192, 86, 1191, 1194, 1188, 1195, 1190, 1193, 1196, - 1197, 86, 86, 1189, 1198, 86, 1199, 1200, 86, 86, - 86, 86, 86, 86, 86, 86, 1214, 86, 1211, 86, - 86, 86, 86, 1210, 1215, 86, 1213, 1201, 1202, 86, - 1203, 1212, 86, 1216, 86, 1204, 1217, 1205, 1222, 86, - - 1219, 1220, 86, 1206, 86, 86, 1218, 1223, 1207, 1208, - 1221, 1224, 86, 86, 86, 1209, 1229, 86, 86, 86, - 1232, 86, 1230, 1225, 1233, 86, 86, 1237, 1226, 86, - 86, 1227, 1228, 86, 1235, 1238, 86, 86, 86, 1231, - 86, 86, 1243, 86, 1234, 86, 1240, 1241, 86, 86, - 1244, 86, 86, 86, 1246, 1239, 1242, 86, 86, 86, - 86, 86, 1245, 86, 86, 1247, 1248, 1251, 1252, 1250, - 1253, 1249, 1255, 1258, 86, 1257, 86, 1254, 86, 1256, - 86, 1259, 86, 86, 86, 86, 86, 86, 176, 1264, - 1265, 1266, 86, 1260, 1261, 86, 1267, 1269, 1263, 1270, - - 1262, 86, 1268, 86, 1271, 86, 86, 1272, 86, 1275, - 86, 86, 86, 1277, 1276, 86, 1278, 86, 86, 1273, - 1279, 86, 86, 86, 1274, 1280, 1286, 86, 86, 86, - 1281, 1288, 86, 175, 1282, 1284, 86, 86, 1285, 1283, - 86, 1290, 86, 1289, 86, 1292, 86, 1287, 86, 1293, - 1294, 86, 86, 1295, 1291, 86, 1296, 86, 1297, 86, - 1299, 1298, 1300, 86, 86, 86, 86, 1305, 86, 1302, - 86, 1301, 1304, 86, 1306, 86, 86, 1307, 86, 1309, - 1303, 86, 1310, 1308, 86, 86, 86, 1316, 1311, 1314, - 1317, 1351, 86, 86, 1318, 86, 86, 1312, 1315, 1321, - - 86, 86, 86, 86, 1313, 86, 1319, 1320, 1322, 1323, - 1325, 86, 86, 1327, 86, 86, 1324, 86, 86, 86, - 1329, 86, 1328, 1330, 86, 86, 86, 1331, 86, 1332, - 86, 1335, 1326, 1336, 86, 86, 86, 86, 86, 1338, - 86, 1342, 1343, 1333, 86, 1334, 1337, 86, 86, 1340, - 86, 86, 1346, 86, 1339, 1344, 1345, 1341, 86, 86, - 86, 86, 86, 1347, 1348, 86, 86, 1357, 86, 86, - 1349, 1353, 170, 86, 1359, 86, 86, 1350, 1352, 86, - 1354, 1358, 86, 86, 1360, 1356, 86, 86, 1365, 1362, - 1355, 1363, 1361, 1369, 1364, 1366, 1367, 86, 1370, 86, - - 86, 86, 86, 86, 86, 1373, 1372, 1368, 86, 86, - 86, 86, 86, 1374, 86, 86, 1371, 1377, 86, 1383, - 86, 1379, 1380, 1375, 1376, 86, 1378, 86, 86, 1381, - 86, 86, 170, 86, 86, 1394, 1387, 1382, 1389, 1384, - 86, 86, 86, 1386, 1393, 1385, 1395, 1390, 86, 1391, - 86, 1388, 1392, 1396, 86, 1397, 1398, 86, 86, 86, - 1399, 86, 86, 86, 1406, 86, 1403, 86, 1402, 1400, - 86, 86, 1407, 86, 86, 1405, 1401, 1411, 86, 1408, - 86, 1404, 1409, 86, 86, 1412, 86, 86, 1413, 1415, - 1416, 86, 1410, 86, 1414, 86, 1417, 86, 86, 86, - - 1421, 86, 86, 86, 86, 168, 1418, 86, 1419, 1422, - 1424, 1425, 86, 1423, 1420, 86, 86, 86, 1429, 1431, - 1426, 86, 1428, 1427, 86, 86, 1434, 1432, 86, 86, - 1430, 86, 1441, 86, 86, 86, 1433, 1443, 86, 1435, - 1436, 1437, 86, 86, 86, 86, 86, 1438, 1440, 86, - 1444, 1449, 86, 1446, 1442, 1451, 1439, 86, 1445, 86, - 1452, 86, 1447, 86, 1450, 1448, 86, 86, 1456, 86, - 166, 1466, 1465, 1454, 86, 1467, 1453, 86, 86, 1455, - 86, 1457, 1464, 1468, 1470, 1458, 86, 86, 1459, 1460, - 86, 86, 1471, 1461, 86, 1469, 1472, 86, 1473, 1462, - - 86, 1475, 86, 1463, 86, 1476, 1480, 1477, 86, 86, - 86, 86, 86, 86, 86, 1474, 1483, 1486, 1481, 1487, - 86, 86, 1531, 86, 1478, 86, 1479, 1484, 86, 86, - 1482, 86, 1485, 1488, 1490, 1489, 86, 86, 1491, 86, - 1498, 1496, 86, 1492, 86, 1493, 86, 1494, 1502, 1495, - 86, 1497, 1499, 1500, 86, 86, 1506, 1501, 86, 86, - 1504, 1507, 86, 1505, 86, 1503, 86, 1508, 86, 1510, - 86, 86, 86, 1516, 86, 1517, 86, 1512, 86, 86, - 1511, 1509, 86, 86, 86, 86, 1515, 1521, 1518, 1513, - 1514, 1519, 1520, 86, 1523, 86, 86, 86, 1522, 86, - - 1524, 86, 1527, 1528, 86, 1530, 86, 86, 86, 86, - 1532, 86, 86, 1525, 1529, 86, 1533, 1535, 1536, 86, - 1534, 1526, 1538, 86, 86, 1539, 86, 86, 86, 1537, - 86, 1540, 86, 1541, 1544, 86, 1542, 86, 1549, 86, - 1547, 86, 86, 86, 86, 1546, 1550, 86, 1543, 1552, - 1545, 1551, 1548, 86, 86, 86, 1554, 1553, 1555, 86, - 1557, 86, 86, 86, 86, 1564, 1559, 1556, 1561, 86, - 1560, 86, 1562, 1558, 86, 86, 1563, 86, 86, 1565, - 1570, 86, 1571, 1567, 86, 1568, 86, 86, 86, 1572, - 1574, 86, 1573, 1566, 1569, 86, 86, 86, 1578, 86, - - 1575, 86, 86, 86, 86, 170, 86, 1580, 1577, 86, - 1586, 1587, 86, 1582, 1576, 86, 86, 86, 1588, 1589, - 1583, 1579, 1581, 86, 86, 86, 1584, 86, 86, 1590, - 86, 86, 1585, 86, 1597, 1591, 86, 86, 86, 1594, - 86, 86, 1595, 1592, 1593, 1601, 1602, 86, 1596, 86, - 86, 1598, 86, 1606, 1604, 1600, 86, 1605, 1607, 86, - 1610, 1599, 86, 86, 1603, 1609, 86, 86, 1608, 86, - 86, 1618, 1615, 86, 1620, 1616, 1611, 86, 1612, 1617, - 86, 1613, 86, 86, 1614, 1623, 1621, 1619, 1622, 86, - 1624, 86, 86, 86, 86, 86, 86, 86, 1628, 1629, - - 1630, 86, 1625, 86, 86, 86, 1633, 86, 86, 1639, - 1627, 86, 1638, 86, 1631, 1626, 86, 1632, 1635, 86, - 86, 1642, 86, 1634, 86, 1636, 1637, 86, 86, 86, - 86, 1640, 1643, 1646, 86, 1641, 86, 86, 1644, 1650, - 86, 86, 1652, 1645, 1647, 1648, 86, 1649, 1651, 86, - 1656, 86, 86, 86, 1653, 1655, 86, 1660, 1661, 1662, - 86, 1654, 1658, 86, 86, 86, 1657, 86, 1664, 1665, - 86, 86, 1659, 86, 1663, 86, 1670, 1666, 1671, 1667, - 1669, 1672, 86, 86, 86, 86, 1673, 86, 86, 1674, - 1677, 86, 86, 86, 1668, 86, 1678, 86, 86, 86, - - 86, 1680, 1679, 86, 1685, 86, 1684, 1681, 1675, 86, - 1676, 1682, 86, 1683, 86, 86, 1691, 1687, 86, 1688, - 1686, 1692, 86, 1693, 1690, 86, 1689, 86, 1694, 86, - 86, 1696, 86, 86, 86, 1695, 1699, 1697, 1700, 86, - 1704, 86, 86, 86, 1698, 86, 86, 1705, 86, 1708, - 86, 1701, 1711, 86, 1702, 86, 1710, 1703, 86, 86, - 86, 1706, 86, 86, 1709, 86, 86, 1712, 86, 1707, - 86, 1720, 1713, 86, 86, 86, 1721, 1717, 1714, 1715, - 86, 1716, 86, 1719, 1728, 1722, 1718, 1724, 1725, 86, - 1726, 86, 86, 1723, 86, 1729, 86, 1727, 86, 86, - - 1732, 86, 86, 1730, 1733, 86, 86, 1736, 86, 1731, - 1740, 86, 1742, 1741, 1737, 86, 86, 1734, 86, 1735, - 1745, 86, 1739, 86, 86, 1738, 86, 86, 1746, 1744, - 1743, 1747, 86, 86, 86, 86, 1748, 86, 1753, 1754, - 86, 1749, 1750, 1751, 86, 86, 86, 1758, 1759, 86, - 1757, 1761, 86, 1752, 86, 1755, 1756, 86, 1763, 86, - 1762, 86, 86, 86, 86, 86, 86, 1767, 86, 1760, - 86, 86, 1772, 86, 86, 1770, 86, 1764, 1765, 1766, - 86, 1778, 86, 86, 1779, 1776, 1768, 86, 1769, 1773, - 1771, 86, 86, 86, 1774, 1775, 1777, 86, 86, 86, - - 1780, 86, 1785, 86, 86, 86, 1790, 86, 1782, 1788, - 1781, 86, 86, 1786, 86, 1791, 86, 1793, 1784, 86, - 1789, 1787, 1783, 86, 86, 86, 86, 170, 1797, 1800, - 86, 1799, 1792, 86, 1796, 86, 1794, 86, 1795, 86, - 1801, 86, 86, 1804, 1798, 86, 1802, 1803, 86, 86, - 1811, 86, 86, 1805, 86, 1806, 1812, 86, 1807, 1808, - 1815, 86, 1809, 86, 86, 86, 1816, 1819, 1817, 1821, - 1810, 86, 1813, 86, 1814, 86, 1820, 1823, 86, 1825, - 86, 86, 86, 86, 1818, 86, 86, 86, 1827, 86, - 1828, 86, 1824, 1822, 86, 1830, 86, 1831, 86, 86, - - 1826, 1832, 1835, 86, 1836, 86, 1834, 1833, 86, 86, - 1829, 86, 1840, 1843, 1845, 1841, 1837, 1838, 86, 86, - 86, 86, 86, 1844, 1851, 86, 1848, 1842, 1839, 1847, - 1846, 86, 86, 1853, 1850, 1854, 86, 86, 86, 86, - 86, 86, 1855, 86, 1856, 86, 1857, 1849, 1858, 1860, - 86, 86, 86, 86, 86, 1859, 1852, 1862, 1861, 86, - 1865, 1866, 1864, 1867, 86, 86, 86, 86, 1869, 86, - 1868, 1863, 86, 1875, 86, 1870, 86, 1871, 1872, 86, - 86, 1873, 1874, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 1884, 1883, 86, 86, 86, 86, 1878, 1876, - - 1879, 1880, 1886, 1877, 1889, 1890, 1881, 86, 1887, 1888, - 1882, 86, 86, 1885, 86, 86, 86, 86, 1897, 1895, - 86, 86, 1899, 86, 86, 86, 86, 1891, 1892, 1894, - 1898, 1901, 86, 1903, 1893, 86, 1902, 1896, 86, 1905, - 1900, 86, 86, 86, 86, 86, 86, 86, 86, 1936, - 1904, 1908, 1910, 1911, 86, 86, 1912, 1917, 1909, 1907, - 86, 1914, 1906, 1913, 1918, 86, 1915, 1919, 86, 86, - 86, 86, 1920, 1916, 1922, 1923, 86, 86, 86, 86, - 86, 1927, 86, 1924, 1926, 1928, 86, 1921, 86, 86, - 86, 86, 1937, 86, 86, 86, 1925, 1931, 86, 1935, - - 1933, 1929, 1930, 1934, 86, 1938, 86, 86, 1932, 86, - 1944, 86, 86, 1941, 1939, 1945, 86, 1940, 86, 86, - 1942, 1947, 86, 1943, 1946, 86, 1950, 86, 1953, 86, - 1949, 1952, 1954, 86, 1951, 86, 1948, 86, 1955, 86, - 1959, 86, 1957, 1963, 86, 1958, 86, 1960, 1964, 86, - 86, 86, 1956, 86, 165, 86, 1968, 1970, 1965, 1962, - 1961, 1966, 1973, 86, 1972, 86, 86, 1969, 86, 86, - 1976, 1974, 1967, 1971, 86, 86, 86, 86, 1980, 86, - 1977, 1984, 86, 1975, 86, 86, 86, 86, 1982, 86, - 1985, 1979, 1981, 86, 1983, 1978, 86, 86, 86, 163, - - 86, 86, 1990, 86, 1989, 1986, 86, 1991, 1987, 86, - 1993, 1999, 1988, 1992, 1997, 86, 1994, 86, 2000, 86, - 1995, 86, 2001, 1996, 86, 2003, 86, 86, 86, 86, - 2007, 86, 86, 2009, 2002, 86, 1998, 86, 86, 86, - 2013, 86, 86, 86, 86, 2008, 2005, 2004, 2006, 2016, - 86, 86, 86, 2011, 2015, 86, 2012, 2010, 86, 86, - 2018, 2020, 2014, 2017, 2019, 86, 86, 170, 2024, 2022, - 86, 2027, 86, 86, 2021, 2023, 86, 86, 86, 2025, - 2031, 86, 86, 86, 86, 2026, 86, 86, 2029, 2033, - 2034, 86, 2028, 2038, 86, 86, 2030, 2032, 2035, 86, - - 86, 2041, 2050, 2036, 2042, 86, 2039, 2037, 86, 2040, - 86, 2043, 2044, 86, 86, 2045, 2047, 2048, 86, 86, - 86, 86, 86, 2046, 2051, 86, 86, 86, 86, 86, - 86, 2049, 86, 2056, 2057, 86, 86, 2061, 86, 2058, - 2052, 86, 86, 86, 2054, 2055, 2065, 2053, 2059, 86, - 2060, 2062, 86, 2066, 2067, 2069, 86, 2070, 2064, 86, - 86, 86, 2073, 86, 2063, 86, 86, 2068, 86, 86, - 2077, 86, 2080, 2081, 86, 86, 2072, 2075, 2082, 86, - 2071, 2084, 86, 2078, 2074, 2079, 2076, 86, 2085, 86, - 86, 86, 2089, 86, 86, 2083, 2091, 86, 2090, 2093, - - 2092, 86, 86, 2095, 86, 86, 2099, 86, 86, 86, - 2086, 2087, 2088, 2096, 86, 86, 86, 2098, 86, 2094, - 86, 2101, 2102, 86, 86, 86, 86, 86, 2107, 2097, - 2105, 2106, 86, 2103, 2109, 2100, 86, 2108, 86, 86, - 86, 2104, 86, 86, 2114, 2117, 86, 86, 2110, 2111, - 2112, 86, 2121, 2120, 86, 2113, 2115, 86, 86, 2116, - 2122, 86, 2118, 2119, 86, 2123, 86, 86, 2124, 2126, - 2129, 86, 2125, 2128, 86, 2127, 86, 2133, 86, 86, - 2130, 2131, 86, 2135, 86, 86, 86, 2138, 2139, 86, - 86, 2141, 86, 86, 86, 2132, 86, 86, 86, 2148, - - 86, 86, 2146, 2143, 2136, 2134, 2144, 2137, 86, 86, - 2140, 86, 86, 86, 2147, 86, 2154, 2145, 2142, 2151, - 2152, 86, 2149, 2157, 2150, 86, 86, 2159, 86, 86, - 86, 2158, 2162, 86, 86, 86, 2163, 2161, 86, 2153, - 2165, 2156, 2166, 86, 86, 86, 86, 2155, 2160, 2167, - 86, 86, 86, 86, 2164, 2171, 86, 86, 86, 2168, - 2173, 86, 2176, 2177, 86, 2169, 2178, 86, 2172, 86, - 2170, 2174, 86, 86, 86, 86, 86, 2181, 86, 2180, - 86, 2185, 2186, 86, 2175, 86, 86, 2179, 86, 86, - 2192, 161, 2191, 2182, 2183, 86, 86, 2184, 86, 2188, - - 2189, 2193, 2187, 2195, 86, 2190, 86, 2194, 86, 86, - 2196, 2199, 86, 86, 86, 86, 86, 2200, 86, 2197, - 2203, 2207, 86, 2201, 2198, 86, 86, 86, 86, 86, - 2210, 86, 2202, 86, 2204, 2214, 2205, 2215, 2206, 86, - 2208, 2209, 2211, 2212, 86, 86, 2213, 86, 2220, 86, - 2216, 86, 2219, 2218, 2222, 2217, 2221, 86, 2224, 2223, - 86, 2225, 86, 86, 86, 2229, 86, 86, 2227, 86, - 86, 86, 86, 2231, 2228, 86, 2233, 2226, 2230, 2235, - 86, 2237, 2232, 2238, 86, 86, 86, 86, 86, 170, - 86, 86, 86, 86, 2241, 86, 86, 2234, 2245, 2246, - - 86, 2247, 2236, 2242, 2243, 2239, 2248, 86, 2240, 2244, - 2249, 86, 2251, 86, 86, 2250, 86, 86, 86, 2252, - 2254, 2253, 86, 86, 86, 86, 2255, 2256, 2257, 86, - 2259, 86, 86, 2263, 86, 2258, 2260, 2262, 86, 86, - 86, 2268, 86, 2261, 2265, 2266, 86, 2264, 86, 2267, - 86, 86, 86, 86, 86, 86, 2275, 2273, 86, 2270, - 2274, 86, 86, 86, 86, 2280, 86, 2277, 2269, 2271, - 86, 2272, 2276, 86, 86, 86, 2281, 2279, 86, 2278, - 86, 2286, 2283, 2284, 2282, 86, 86, 2287, 86, 86, - 2285, 2290, 2292, 86, 86, 86, 2289, 2288, 2293, 86, - - 86, 2291, 86, 2299, 86, 2294, 86, 2301, 86, 86, - 2295, 86, 86, 2302, 2298, 2296, 86, 2297, 2304, 86, - 2305, 2300, 2306, 86, 86, 2307, 2303, 86, 2310, 86, - 86, 86, 86, 2309, 86, 86, 2315, 2312, 86, 2308, - 86, 2316, 86, 2311, 86, 86, 86, 86, 86, 2317, - 86, 86, 2314, 2313, 2319, 86, 2320, 2324, 2322, 2318, - 2321, 2326, 86, 86, 2329, 2325, 2327, 86, 2330, 86, - 86, 2335, 86, 2323, 2328, 2332, 86, 86, 86, 86, - 2338, 2331, 2334, 2339, 86, 86, 2333, 2336, 86, 2341, - 2342, 86, 86, 86, 86, 86, 2337, 2344, 2345, 2340, - - 86, 86, 2346, 2343, 2348, 86, 86, 2350, 2352, 86, - 86, 2353, 2347, 2349, 86, 2355, 86, 86, 86, 2351, - 2354, 86, 2357, 2358, 86, 86, 86, 86, 2364, 2359, - 2360, 86, 86, 86, 86, 2368, 2356, 2365, 2363, 86, - 2369, 86, 86, 2367, 2361, 2362, 2366, 2370, 86, 2373, - 86, 86, 2374, 86, 86, 86, 86, 2378, 2380, 86, - 86, 2371, 2372, 86, 2375, 2379, 86, 2384, 86, 2376, - 86, 86, 86, 2386, 2382, 2377, 86, 2381, 86, 2387, - 86, 86, 2383, 2385, 2391, 2388, 2389, 86, 2390, 86, - 86, 2394, 2396, 86, 86, 86, 2392, 2397, 86, 2393, - - 86, 86, 86, 2399, 86, 2398, 2402, 2400, 86, 2403, - 86, 2395, 2401, 2407, 86, 2404, 86, 86, 86, 2406, - 86, 86, 86, 86, 86, 86, 86, 2415, 2405, 86, - 86, 2419, 86, 86, 2408, 2409, 2410, 2411, 2413, 86, - 2414, 2416, 2417, 2418, 2420, 2412, 86, 86, 86, 86, - 2422, 86, 86, 2423, 2425, 2421, 2426, 86, 86, 2431, - 86, 86, 2433, 86, 2427, 86, 2424, 2430, 86, 2428, - 2432, 86, 2436, 86, 86, 2434, 2437, 2429, 170, 2440, - 86, 86, 2442, 2444, 2435, 86, 2438, 2443, 86, 86, - 2445, 86, 2456, 2439, 2446, 86, 86, 2449, 86, 86, - - 2441, 2448, 86, 2447, 86, 2450, 2454, 86, 2453, 86, - 2455, 2458, 86, 86, 86, 2460, 2464, 86, 2459, 2451, - 2457, 2461, 86, 86, 86, 2463, 86, 86, 2462, 86, - 2452, 86, 86, 2466, 86, 86, 86, 2469, 86, 86, - 86, 2472, 86, 86, 2465, 86, 2467, 2476, 2478, 86, - 2471, 86, 2468, 86, 86, 2474, 2473, 2470, 2479, 86, - 2475, 86, 86, 2482, 2481, 2477, 2480, 86, 86, 86, - 86, 2490, 86, 2485, 2487, 86, 86, 86, 86, 2483, - 2484, 2488, 86, 2491, 86, 86, 2486, 86, 2489, 86, - 86, 86, 2501, 86, 86, 2492, 2493, 2494, 86, 2499, - - 86, 86, 86, 86, 2497, 2495, 2502, 2503, 2496, 2505, - 2498, 2500, 86, 86, 2504, 2506, 2508, 86, 86, 86, - 86, 2507, 2510, 2509, 86, 2511, 2512, 86, 2515, 2516, - 86, 86, 86, 2517, 2513, 2518, 86, 2514, 86, 86, - 86, 2522, 2524, 86, 2523, 86, 2525, 2519, 86, 2526, - 86, 86, 2521, 2520, 2529, 86, 2530, 86, 86, 2527, - 86, 86, 2528, 2531, 86, 2532, 2536, 86, 2537, 86, - 86, 2533, 2539, 86, 86, 86, 2535, 2541, 86, 86, - 86, 2534, 2544, 86, 2543, 2545, 86, 86, 86, 2538, - 2542, 86, 2540, 86, 2546, 86, 2547, 2552, 86, 86, - - 2551, 2554, 86, 86, 86, 2548, 86, 2549, 86, 2556, - 2550, 2558, 2557, 86, 2559, 2561, 86, 86, 2553, 86, - 86, 2555, 2564, 86, 86, 2567, 86, 86, 86, 2560, - 86, 86, 3627, 86, 2563, 86, 2562, 2572, 2565, 2573, - 86, 86, 86, 2566, 86, 2569, 2571, 2568, 86, 2575, - 86, 2570, 2578, 86, 2574, 86, 2576, 2577, 86, 86, - 86, 86, 2580, 86, 2581, 86, 2586, 86, 2579, 2588, - 86, 86, 2587, 2589, 2592, 2584, 2582, 2583, 86, 86, - 86, 86, 86, 2593, 2594, 86, 2595, 2585, 2590, 86, - 2591, 86, 86, 86, 2599, 2597, 86, 2601, 2602, 86, - - 86, 2603, 2605, 2596, 2606, 86, 2598, 2609, 86, 86, - 86, 86, 86, 86, 2604, 86, 2610, 2600, 86, 86, - 2608, 2607, 2614, 2611, 86, 2613, 86, 86, 86, 86, - 86, 86, 86, 2616, 2612, 2615, 2617, 2618, 2619, 2621, - 2620, 2622, 86, 86, 2641, 86, 2623, 86, 86, 2627, - 2624, 2625, 2626, 2628, 86, 2629, 86, 86, 2632, 86, - 86, 170, 86, 2630, 86, 2631, 2633, 86, 2638, 86, - 86, 86, 86, 86, 2645, 86, 86, 3627, 2636, 2639, - 2634, 2640, 2635, 2637, 86, 86, 2642, 2644, 2643, 2646, - 2649, 86, 86, 2650, 2651, 86, 2647, 2648, 86, 86, - - 2654, 2652, 2655, 86, 2653, 86, 86, 86, 86, 2657, - 86, 86, 2656, 86, 2659, 86, 86, 2663, 2664, 2658, - 86, 2661, 86, 2660, 86, 2666, 86, 86, 86, 86, - 2667, 2668, 2669, 86, 2662, 86, 2665, 86, 2672, 86, - 2670, 86, 2671, 2676, 86, 2675, 86, 2674, 2673, 86, - 86, 86, 86, 86, 2678, 86, 86, 86, 2686, 2677, - 2683, 86, 2685, 86, 86, 86, 2688, 2682, 86, 2687, - 2679, 2680, 2681, 86, 86, 2684, 86, 2694, 86, 2689, - 86, 2692, 86, 86, 2698, 2699, 3627, 2690, 2697, 86, - 86, 86, 2691, 86, 2695, 2693, 2696, 2700, 86, 86, - - 2701, 86, 2702, 86, 2705, 86, 86, 2707, 2706, 86, - 86, 86, 2708, 2703, 2709, 2704, 86, 2711, 86, 2713, - 86, 86, 2712, 2715, 86, 86, 2717, 86, 86, 86, - 2716, 86, 2714, 86, 86, 86, 2710, 86, 2721, 86, - 2726, 86, 2724, 2719, 2725, 2728, 2718, 2720, 2727, 86, - 86, 86, 86, 2730, 86, 86, 2723, 86, 86, 3627, - 2722, 86, 2733, 86, 2735, 86, 86, 2738, 86, 86, - 2729, 2731, 86, 86, 2739, 2736, 2732, 2734, 2737, 2740, - 2741, 86, 2744, 86, 86, 86, 86, 2742, 2745, 86, - 2748, 2746, 2749, 86, 86, 86, 2743, 86, 86, 2750, - - 86, 86, 2747, 2755, 86, 2754, 2752, 86, 86, 86, - 86, 2753, 86, 2751, 2759, 2763, 86, 86, 2756, 86, - 2758, 2757, 2762, 2764, 86, 2765, 86, 2766, 86, 86, - 2760, 2767, 2761, 86, 86, 2770, 86, 2771, 2769, 86, - 2772, 86, 86, 86, 86, 86, 3627, 2768, 86, 86, - 2779, 86, 86, 2773, 86, 2775, 2781, 86, 2782, 86, - 2784, 86, 2774, 2783, 2776, 2778, 2777, 2780, 86, 86, - 86, 86, 86, 86, 2788, 86, 2786, 2789, 2792, 86, - 2785, 86, 2787, 86, 2793, 2794, 86, 86, 86, 86, - 86, 2790, 86, 2791, 2801, 86, 170, 86, 2803, 86, - - 2797, 86, 86, 2796, 2799, 86, 86, 2795, 2802, 86, - 2804, 2800, 2798, 2807, 2805, 86, 86, 2806, 2810, 86, - 86, 2812, 86, 2811, 2813, 2814, 86, 2808, 86, 2809, - 2815, 86, 86, 2816, 86, 2817, 86, 2818, 2819, 2820, - 86, 2821, 86, 86, 86, 86, 86, 86, 86, 86, - 86, 2829, 3627, 86, 86, 2822, 2827, 86, 2833, 86, - 86, 2824, 2823, 2834, 2831, 2826, 2825, 86, 2828, 86, - 2830, 2832, 2835, 86, 2836, 86, 2837, 86, 2838, 2839, - 86, 2841, 86, 86, 2840, 2842, 86, 86, 86, 86, - 86, 86, 86, 2845, 86, 2843, 2852, 86, 2851, 2853, - - 86, 2844, 2846, 86, 86, 86, 2847, 2848, 2849, 2850, - 2856, 2857, 86, 2859, 2854, 2858, 86, 86, 86, 86, - 86, 2855, 86, 2860, 86, 2866, 86, 86, 86, 2865, - 86, 86, 86, 2862, 3627, 2861, 2864, 86, 86, 2863, - 2874, 86, 2870, 2872, 86, 86, 2873, 2867, 2868, 86, - 2869, 2875, 2871, 2876, 86, 86, 2877, 86, 86, 86, - 86, 86, 86, 86, 2878, 2881, 2882, 2883, 86, 86, - 2880, 86, 2888, 2889, 86, 86, 2879, 2892, 86, 2884, - 2886, 86, 2885, 86, 86, 86, 2887, 86, 2895, 2891, - 2890, 86, 2893, 2897, 86, 2898, 2899, 86, 2894, 86, - - 2896, 86, 86, 2904, 86, 86, 86, 2900, 86, 86, - 2908, 86, 2907, 86, 2901, 2906, 86, 2905, 2909, 86, - 86, 2902, 2903, 2911, 86, 2912, 86, 86, 2915, 2914, - 2910, 2917, 86, 86, 2918, 2913, 86, 2920, 86, 86, - 86, 86, 86, 2927, 86, 86, 86, 2916, 86, 86, - 86, 2924, 2921, 2922, 2923, 2925, 86, 2926, 2919, 2930, - 86, 2931, 86, 86, 2929, 2928, 86, 2932, 86, 2936, - 86, 2934, 86, 86, 86, 86, 2935, 2933, 86, 2937, - 2938, 86, 86, 2940, 2943, 86, 2941, 2945, 2939, 2942, - 2944, 86, 2947, 170, 2946, 86, 86, 86, 86, 2952, - - 3627, 2949, 2948, 86, 86, 86, 86, 2954, 2953, 86, - 2957, 86, 2958, 86, 2956, 2950, 2951, 86, 2962, 2955, - 2960, 86, 86, 2963, 86, 2961, 86, 86, 86, 2967, - 2959, 2964, 2965, 86, 86, 86, 86, 2968, 86, 2969, - 86, 86, 2966, 2974, 2975, 2970, 86, 86, 2972, 86, - 86, 2976, 86, 2971, 2978, 86, 86, 2980, 86, 2977, - 86, 2981, 2973, 2979, 86, 86, 86, 86, 86, 2983, - 2984, 2985, 2982, 86, 86, 86, 2990, 86, 86, 86, - 86, 2987, 2988, 2989, 2992, 2986, 2991, 2994, 86, 86, - 86, 3627, 86, 86, 2995, 86, 2993, 3000, 86, 2996, - - 86, 86, 3001, 86, 86, 86, 3005, 86, 86, 2997, - 2998, 2999, 3003, 3004, 3008, 86, 3006, 86, 86, 3002, - 86, 86, 3007, 3015, 3012, 3013, 86, 3009, 3016, 86, - 86, 3018, 3010, 86, 86, 3019, 86, 86, 3011, 86, - 86, 3020, 86, 86, 3025, 3022, 3014, 86, 3017, 86, - 86, 3023, 3026, 86, 3029, 86, 3024, 3027, 86, 86, - 3031, 3028, 86, 86, 3021, 3033, 86, 3034, 86, 3035, - 86, 86, 86, 3030, 86, 3036, 86, 3037, 3039, 86, - 3032, 86, 86, 3038, 3043, 86, 3041, 86, 3077, 3044, - 86, 86, 3047, 86, 3042, 86, 3040, 3045, 3048, 86, - - 3049, 86, 3050, 86, 86, 86, 3052, 3046, 3051, 3054, - 86, 86, 86, 3055, 3057, 86, 86, 3053, 86, 3058, - 3059, 86, 3061, 86, 86, 86, 3065, 3060, 86, 3062, - 3627, 3056, 86, 3066, 86, 3068, 86, 86, 86, 3064, - 3067, 86, 3063, 3069, 3070, 86, 86, 3076, 86, 3071, - 86, 3072, 3075, 86, 86, 3079, 86, 3073, 3078, 86, - 86, 86, 3085, 86, 3080, 3074, 3082, 86, 3081, 86, - 3084, 86, 86, 3083, 86, 86, 3088, 3092, 86, 86, - 86, 86, 86, 3094, 86, 86, 3086, 3087, 86, 3091, - 3089, 3095, 3098, 3093, 3090, 3096, 3627, 3099, 86, 3101, - - 3125, 3097, 3100, 86, 3102, 86, 86, 3103, 3104, 86, - 86, 3105, 86, 3106, 86, 3107, 86, 3108, 86, 3109, - 86, 86, 3110, 86, 3113, 3111, 86, 86, 86, 86, - 86, 3115, 86, 3117, 86, 3122, 86, 3114, 3118, 3123, - 86, 3112, 86, 3126, 86, 3124, 3116, 86, 86, 3627, - 3119, 86, 3120, 3127, 3121, 3129, 86, 86, 3130, 3131, - 86, 86, 3132, 3133, 86, 86, 3128, 86, 86, 86, - 3134, 3139, 86, 86, 3135, 86, 3136, 3137, 3140, 86, - 86, 86, 3142, 86, 3141, 3146, 86, 3138, 86, 86, - 3147, 86, 3144, 3150, 3143, 86, 86, 3149, 3145, 3148, - - 3151, 3152, 86, 3154, 86, 86, 86, 86, 3158, 86, - 3153, 86, 86, 86, 86, 86, 86, 86, 86, 3155, - 3159, 3162, 3165, 3163, 3160, 3157, 3627, 86, 86, 3166, - 86, 3156, 3168, 86, 3170, 3164, 86, 86, 3161, 3167, - 86, 3169, 86, 3173, 86, 3172, 3171, 86, 3175, 3177, - 86, 3176, 3178, 86, 3179, 86, 3174, 86, 86, 3627, - 86, 3184, 86, 86, 3181, 3183, 3180, 86, 3185, 86, - 3187, 86, 86, 86, 3186, 86, 86, 3182, 86, 3193, - 3188, 3191, 3195, 86, 3189, 86, 86, 86, 86, 3199, - 3196, 86, 3197, 3192, 3190, 86, 3198, 86, 86, 86, - - 3204, 86, 86, 3194, 86, 86, 86, 86, 86, 86, - 3208, 86, 3201, 3202, 3200, 3205, 3209, 3206, 3207, 3203, - 86, 86, 86, 3215, 3210, 3213, 86, 86, 3211, 3212, - 86, 3214, 3219, 86, 86, 3216, 3220, 86, 3222, 86, - 86, 86, 86, 3223, 86, 3217, 86, 3225, 3226, 86, - 3228, 86, 86, 3221, 3224, 86, 3218, 3231, 3229, 86, - 3227, 86, 3230, 86, 3233, 3234, 86, 3237, 86, 86, - 86, 3232, 3236, 86, 86, 3240, 86, 3243, 86, 3244, - 86, 3235, 86, 3246, 3241, 86, 86, 3247, 3239, 86, - 86, 3238, 3249, 86, 86, 3242, 3250, 86, 3253, 86, - - 3245, 86, 86, 86, 3258, 3251, 86, 86, 3248, 86, - 86, 3256, 3255, 86, 3252, 3262, 86, 86, 3254, 3260, - 3264, 86, 86, 3257, 3265, 3259, 86, 3266, 3263, 3261, - 86, 3269, 3270, 86, 3267, 86, 3272, 86, 3271, 86, - 86, 86, 86, 3275, 86, 3274, 3276, 86, 3278, 86, - 3268, 86, 3281, 86, 86, 86, 86, 3273, 86, 3286, - 86, 3282, 86, 86, 3302, 86, 3277, 86, 3279, 3280, - 86, 3285, 3293, 3283, 3289, 3290, 86, 86, 3288, 3291, - 86, 3284, 3287, 3292, 86, 86, 3296, 86, 3297, 86, - 3295, 3294, 3298, 86, 3299, 86, 86, 86, 86, 3304, - - 86, 86, 86, 3303, 3306, 86, 3307, 86, 86, 3300, - 86, 86, 86, 86, 3313, 3314, 86, 3305, 86, 86, - 86, 3308, 86, 3301, 3320, 86, 86, 3321, 86, 86, - 3309, 3311, 3310, 3312, 3317, 3319, 86, 3323, 3316, 86, - 86, 86, 3318, 86, 3315, 3326, 86, 3322, 3328, 86, - 3329, 86, 86, 3332, 86, 86, 3324, 3330, 3325, 86, - 3331, 86, 3327, 3334, 3335, 86, 3333, 86, 86, 86, - 86, 86, 3336, 3337, 86, 3338, 3341, 86, 86, 86, - 86, 3339, 86, 3343, 86, 86, 3342, 3344, 3340, 86, - 86, 86, 3627, 86, 86, 3356, 86, 3345, 3353, 3354, - - 3346, 86, 3347, 3348, 3355, 3349, 86, 3350, 3351, 86, - 86, 3357, 3352, 3359, 3361, 86, 3358, 3362, 86, 86, - 3364, 86, 3360, 3363, 86, 86, 3367, 86, 86, 3365, - 3369, 86, 3370, 3371, 86, 86, 3372, 3373, 3377, 86, - 3374, 86, 86, 3368, 3366, 3375, 3376, 3378, 86, 86, - 3380, 86, 86, 86, 86, 3383, 86, 86, 3379, 86, - 3387, 86, 86, 86, 3386, 86, 86, 3382, 86, 86, - 3381, 86, 3390, 3391, 86, 3392, 3384, 3385, 86, 3395, - 3396, 86, 3388, 3393, 86, 3398, 86, 3397, 3389, 3394, - 3399, 86, 3400, 86, 86, 86, 86, 3405, 86, 3402, - - 3407, 3401, 3406, 86, 3403, 86, 86, 3404, 86, 86, - 86, 3414, 86, 3409, 3411, 3412, 3415, 86, 3417, 86, - 86, 3408, 86, 3416, 3418, 86, 3410, 3413, 86, 3421, - 86, 3422, 86, 3420, 86, 3419, 86, 3425, 86, 3426, - 86, 3427, 86, 3423, 3428, 86, 3429, 86, 3430, 86, - 3431, 86, 3432, 86, 3424, 86, 86, 3435, 86, 3436, - 86, 86, 86, 86, 86, 3434, 3440, 86, 86, 86, - 3437, 3442, 86, 86, 3438, 86, 3446, 3447, 86, 3443, - 86, 3433, 3444, 3439, 86, 3445, 86, 3441, 3449, 86, - 86, 86, 3453, 3451, 86, 3448, 86, 3455, 3456, 86, - - 86, 86, 3450, 86, 86, 3458, 86, 86, 86, 86, - 86, 86, 3452, 3457, 3454, 3462, 3463, 3471, 86, 86, - 3459, 3460, 3461, 3464, 86, 3465, 86, 86, 86, 3468, - 3469, 3467, 3472, 86, 3466, 3473, 86, 86, 86, 3470, - 86, 86, 3476, 86, 86, 86, 3475, 86, 86, 3481, - 3482, 3474, 86, 3484, 86, 3478, 3480, 86, 86, 86, - 3477, 86, 3483, 86, 86, 86, 3479, 3485, 86, 86, - 3493, 86, 86, 3491, 3488, 86, 3486, 3487, 3490, 86, - 3492, 3497, 86, 86, 3495, 3500, 3489, 86, 3499, 86, - 3494, 3496, 3502, 86, 86, 3498, 3504, 86, 3503, 86, - - 3505, 3506, 86, 3507, 86, 86, 86, 3501, 86, 3510, - 86, 86, 86, 3508, 3515, 3511, 3512, 86, 86, 86, - 86, 3519, 86, 86, 3518, 3509, 86, 3514, 3521, 86, - 3517, 3516, 86, 3513, 3522, 86, 3523, 86, 3526, 86, - 86, 3524, 86, 3520, 3529, 86, 86, 3530, 86, 86, - 86, 3525, 3533, 3534, 86, 3527, 3531, 86, 86, 86, - 3528, 86, 3539, 86, 3535, 86, 3538, 3536, 3532, 3540, - 86, 86, 86, 86, 86, 86, 3537, 86, 3544, 86, - 3546, 86, 86, 86, 86, 86, 3541, 3543, 3551, 3552, - 86, 3542, 3545, 86, 3548, 3549, 3547, 3559, 3550, 3553, - - 86, 3557, 86, 86, 86, 3554, 86, 3560, 3555, 3558, - 86, 86, 3556, 86, 86, 3561, 3562, 3565, 3563, 3566, - 86, 86, 86, 86, 3568, 86, 3567, 86, 86, 86, - 86, 3569, 3574, 3564, 86, 3571, 86, 86, 86, 86, - 3577, 3570, 3578, 86, 86, 86, 86, 86, 3572, 3573, - 3576, 3581, 86, 3575, 3579, 3582, 86, 3580, 86, 3585, - 3584, 3586, 86, 3583, 86, 3587, 86, 3589, 86, 3591, - 86, 3592, 86, 86, 86, 3596, 86, 3593, 3627, 86, - 3594, 3599, 86, 3590, 3597, 86, 86, 3598, 3588, 86, - 86, 86, 86, 3595, 86, 86, 3600, 3601, 86, 3603, - - 3605, 86, 86, 3607, 86, 3602, 86, 3608, 86, 3611, - 3604, 3606, 3612, 86, 3609, 86, 86, 3615, 3616, 86, - 86, 3618, 86, 3610, 86, 3613, 86, 3617, 3619, 86, - 86, 3620, 86, 86, 3614, 3621, 3627, 3622, 3625, 86, - 3626, 86, 3627, 3627, 3627, 3623, 3627, 3627, 3627, 3627, - 3627, 3627, 3624, 47, 47, 47, 47, 47, 47, 47, - 52, 52, 52, 52, 52, 52, 52, 57, 57, 57, - 57, 57, 57, 57, 63, 63, 63, 63, 63, 63, - 63, 68, 68, 68, 68, 68, 68, 68, 74, 74, - 74, 74, 74, 74, 74, 80, 80, 80, 80, 80, - - 80, 80, 89, 89, 3627, 89, 89, 89, 89, 160, - 160, 3627, 3627, 3627, 160, 160, 162, 162, 3627, 3627, - 162, 3627, 162, 164, 3627, 3627, 3627, 3627, 3627, 164, - 167, 167, 3627, 3627, 3627, 167, 167, 169, 3627, 3627, - 3627, 3627, 3627, 169, 171, 171, 3627, 171, 171, 171, - 171, 174, 3627, 3627, 3627, 3627, 3627, 174, 177, 177, - 3627, 3627, 3627, 177, 177, 90, 90, 3627, 90, 90, - 90, 90, 17, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - - 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3627 + 86, 86, 232, 236, 86, 238, 86, 242, 235, 239, + 86, 86, 86, 86, 244, 240, 237, 178, 86, 86, + 86, 241, 86, 245, 243, 250, 253, 254, 86, 246, + 255, 249, 86, 86, 86, 256, 251, 248, 262, 259, + + 252, 263, 86, 86, 261, 265, 86, 86, 86, 86, + 260, 269, 257, 86, 266, 258, 86, 86, 264, 268, + 270, 272, 160, 160, 86, 162, 267, 271, 162, 275, + 164, 273, 164, 164, 341, 164, 167, 167, 169, 86, + 169, 169, 90, 169, 90, 90, 170, 90, 174, 274, + 174, 174, 276, 174, 172, 177, 177, 278, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 277, 280, 86, + 283, 286, 282, 86, 279, 281, 86, 289, 288, 285, + 176, 292, 284, 86, 290, 287, 86, 293, 294, 86, + 295, 321, 86, 298, 86, 296, 86, 303, 299, 86, + + 305, 86, 86, 300, 86, 306, 86, 308, 86, 301, + 302, 304, 297, 309, 86, 312, 310, 86, 86, 86, + 307, 86, 314, 86, 315, 86, 86, 86, 175, 86, + 86, 86, 322, 316, 311, 323, 329, 317, 319, 86, + 318, 320, 86, 324, 313, 332, 325, 86, 326, 330, + 336, 86, 86, 333, 86, 331, 86, 334, 338, 339, + 327, 378, 328, 86, 86, 86, 342, 337, 86, 335, + 344, 86, 86, 343, 340, 345, 86, 346, 86, 86, + 347, 349, 86, 86, 86, 348, 86, 86, 351, 86, + 86, 86, 350, 86, 86, 353, 359, 86, 86, 354, + + 86, 357, 86, 86, 352, 364, 360, 358, 355, 86, + 365, 86, 86, 361, 356, 86, 362, 366, 370, 368, + 86, 367, 363, 373, 86, 86, 86, 86, 376, 86, + 86, 369, 375, 86, 379, 380, 382, 86, 371, 372, + 86, 86, 86, 86, 387, 374, 86, 385, 86, 377, + 86, 384, 381, 386, 86, 383, 389, 86, 86, 390, + 170, 86, 86, 393, 86, 86, 86, 86, 388, 86, + 412, 392, 394, 396, 398, 400, 391, 401, 86, 86, + 395, 86, 86, 86, 397, 86, 404, 402, 86, 399, + 403, 86, 86, 405, 86, 86, 86, 407, 411, 86, + + 86, 413, 406, 409, 86, 408, 86, 414, 415, 86, + 417, 86, 86, 418, 416, 86, 419, 86, 86, 410, + 421, 86, 422, 86, 86, 426, 170, 86, 428, 86, + 420, 86, 423, 424, 86, 86, 430, 429, 86, 86, + 425, 427, 86, 431, 86, 433, 86, 435, 436, 438, + 86, 434, 86, 86, 86, 86, 439, 86, 442, 86, + 432, 86, 443, 86, 86, 441, 86, 445, 86, 448, + 168, 440, 86, 437, 446, 450, 86, 453, 86, 444, + 86, 454, 447, 86, 449, 86, 86, 86, 452, 462, + 86, 86, 451, 86, 465, 464, 466, 455, 86, 86, + + 470, 166, 469, 86, 463, 471, 476, 456, 86, 467, + 457, 86, 468, 472, 473, 458, 459, 460, 461, 474, + 477, 86, 86, 480, 475, 86, 86, 86, 86, 86, + 486, 86, 86, 488, 86, 86, 86, 484, 485, 478, + 487, 481, 479, 86, 482, 483, 86, 489, 492, 86, + 86, 491, 86, 86, 497, 86, 498, 86, 499, 490, + 86, 493, 86, 86, 516, 86, 86, 500, 496, 494, + 503, 505, 495, 504, 501, 86, 510, 502, 86, 86, + 506, 508, 86, 509, 86, 511, 507, 86, 517, 518, + 86, 86, 519, 515, 86, 86, 86, 86, 512, 86, + + 533, 513, 86, 514, 86, 520, 86, 521, 86, 86, + 535, 532, 538, 522, 536, 86, 537, 523, 534, 170, + 540, 579, 524, 549, 550, 525, 86, 526, 539, 527, + 551, 86, 86, 86, 86, 552, 86, 553, 86, 86, + 555, 86, 528, 558, 554, 529, 165, 530, 557, 531, + 86, 556, 541, 542, 560, 86, 86, 559, 86, 562, + 86, 86, 543, 544, 545, 546, 547, 561, 564, 548, + 563, 86, 86, 570, 86, 568, 566, 571, 565, 573, + 86, 569, 86, 574, 86, 86, 86, 86, 86, 86, + 578, 86, 86, 581, 567, 572, 86, 86, 576, 582, + + 583, 577, 86, 86, 575, 580, 163, 86, 585, 588, + 86, 584, 86, 586, 86, 589, 86, 587, 590, 591, + 86, 86, 86, 596, 593, 594, 86, 86, 612, 598, + 86, 597, 86, 86, 86, 86, 592, 615, 86, 161, + 595, 613, 599, 86, 601, 600, 602, 603, 614, 617, + 86, 86, 86, 86, 624, 86, 618, 619, 604, 616, + 605, 86, 86, 86, 86, 621, 606, 620, 86, 622, + 626, 86, 623, 86, 607, 608, 86, 629, 609, 610, + 86, 625, 611, 630, 86, 627, 628, 86, 631, 86, + 86, 86, 86, 86, 86, 636, 634, 635, 86, 86, + + 86, 86, 632, 637, 642, 638, 86, 86, 86, 86, + 644, 633, 641, 643, 86, 646, 86, 640, 639, 645, + 86, 647, 86, 649, 86, 651, 86, 86, 86, 86, + 648, 86, 86, 86, 86, 653, 86, 657, 655, 86, + 86, 86, 650, 86, 664, 666, 659, 652, 669, 654, + 86, 86, 656, 658, 660, 665, 661, 662, 86, 668, + 663, 86, 86, 86, 86, 86, 673, 667, 86, 86, + 671, 86, 86, 672, 86, 670, 677, 679, 674, 680, + 676, 86, 86, 675, 86, 86, 682, 86, 86, 678, + 86, 86, 683, 687, 686, 86, 689, 86, 86, 86, + + 86, 86, 685, 681, 86, 86, 684, 721, 86, 704, + 688, 86, 692, 690, 86, 86, 86, 691, 86, 693, + 701, 706, 702, 703, 694, 86, 695, 86, 86, 708, + 705, 707, 696, 712, 697, 86, 86, 698, 699, 86, + 86, 709, 711, 86, 700, 710, 717, 86, 716, 86, + 86, 714, 86, 713, 715, 719, 86, 718, 86, 720, + 86, 724, 86, 726, 86, 86, 730, 86, 86, 723, + 722, 727, 86, 729, 86, 725, 728, 733, 86, 86, + 86, 86, 86, 734, 86, 86, 731, 737, 739, 738, + 732, 170, 741, 86, 736, 740, 86, 735, 86, 86, + + 743, 744, 86, 86, 86, 742, 86, 748, 750, 86, + 745, 86, 753, 86, 746, 754, 86, 749, 756, 752, + 747, 86, 86, 86, 86, 86, 758, 86, 755, 86, + 86, 86, 762, 751, 757, 761, 86, 178, 767, 759, + 763, 86, 760, 768, 86, 770, 86, 764, 771, 86, + 765, 772, 766, 86, 769, 773, 86, 86, 774, 86, + 775, 86, 776, 86, 86, 86, 86, 777, 86, 86, + 782, 778, 781, 86, 86, 780, 86, 785, 86, 86, + 790, 784, 779, 783, 786, 86, 86, 86, 86, 789, + 86, 86, 792, 86, 796, 86, 794, 788, 86, 787, + + 86, 86, 86, 86, 86, 803, 799, 791, 793, 795, + 86, 86, 86, 797, 86, 804, 86, 86, 801, 86, + 806, 798, 800, 86, 802, 807, 805, 86, 808, 809, + 86, 811, 810, 86, 812, 813, 86, 816, 814, 818, + 86, 815, 817, 86, 86, 86, 820, 86, 821, 819, + 86, 86, 823, 824, 86, 86, 825, 86, 86, 86, + 86, 832, 86, 830, 828, 86, 86, 86, 86, 86, + 822, 826, 827, 829, 833, 86, 839, 86, 837, 831, + 86, 176, 86, 840, 836, 834, 86, 838, 835, 841, + 842, 843, 86, 86, 86, 844, 86, 86, 846, 845, + + 86, 86, 851, 86, 86, 849, 853, 86, 86, 852, + 847, 848, 86, 86, 86, 86, 854, 86, 86, 856, + 850, 858, 175, 857, 86, 86, 859, 86, 855, 862, + 860, 861, 865, 86, 866, 86, 86, 870, 86, 86, + 868, 86, 867, 863, 864, 869, 871, 86, 872, 875, + 873, 86, 86, 879, 86, 86, 86, 877, 880, 86, + 86, 881, 86, 876, 883, 874, 86, 878, 885, 86, + 86, 86, 86, 86, 891, 884, 86, 86, 86, 882, + 86, 892, 86, 86, 86, 893, 86, 886, 887, 888, + 86, 889, 86, 890, 901, 898, 896, 894, 895, 86, + + 86, 900, 86, 897, 899, 86, 86, 86, 86, 86, + 902, 86, 908, 903, 904, 86, 86, 86, 86, 86, + 918, 86, 170, 86, 905, 910, 907, 906, 916, 909, + 86, 86, 86, 911, 912, 913, 914, 915, 86, 86, + 921, 86, 919, 922, 917, 920, 924, 86, 86, 86, + 86, 86, 86, 923, 86, 86, 929, 928, 86, 930, + 932, 86, 927, 925, 86, 86, 933, 926, 86, 86, + 86, 935, 86, 86, 936, 170, 934, 940, 931, 938, + 941, 939, 937, 86, 86, 86, 944, 942, 86, 943, + 86, 86, 86, 86, 948, 949, 86, 945, 86, 950, + + 952, 86, 954, 86, 86, 946, 947, 951, 953, 956, + 955, 86, 86, 86, 86, 86, 958, 86, 86, 962, + 86, 86, 86, 959, 957, 86, 963, 964, 86, 86, + 86, 86, 961, 86, 86, 965, 86, 86, 960, 977, + 978, 1029, 967, 975, 86, 981, 966, 86, 976, 968, + 980, 979, 969, 982, 86, 86, 970, 86, 983, 971, + 86, 984, 86, 985, 86, 86, 972, 973, 986, 974, + 990, 86, 86, 987, 86, 86, 86, 999, 988, 86, + 86, 86, 86, 168, 1002, 989, 86, 991, 992, 86, + 993, 998, 86, 994, 1006, 1000, 1004, 1001, 995, 1003, + + 1007, 86, 86, 86, 996, 997, 1008, 1010, 86, 1012, + 1014, 1011, 1005, 86, 1013, 86, 86, 1009, 86, 1015, + 86, 1017, 86, 1018, 86, 1019, 86, 1020, 1016, 1022, + 86, 1021, 86, 86, 1023, 86, 86, 86, 86, 86, + 1026, 86, 1030, 86, 1033, 1024, 86, 86, 86, 86, + 1037, 1039, 86, 1031, 1025, 86, 86, 1027, 1028, 86, + 1032, 1035, 1040, 1043, 1038, 1034, 86, 1041, 86, 86, + 1036, 1042, 1045, 1047, 1044, 86, 86, 86, 86, 86, + 1046, 86, 1049, 86, 1048, 1050, 1051, 86, 1052, 86, + 86, 1053, 86, 86, 86, 86, 86, 1055, 1056, 86, + + 1057, 1061, 86, 86, 1065, 86, 1064, 86, 1054, 86, + 86, 1063, 1059, 1058, 1062, 86, 86, 86, 1060, 86, + 86, 86, 86, 86, 1073, 1068, 1069, 1066, 1071, 1072, + 86, 86, 86, 86, 1067, 1074, 1075, 86, 86, 1079, + 86, 1077, 86, 1070, 1080, 86, 1078, 86, 1082, 86, + 86, 1081, 86, 1083, 86, 1088, 1076, 86, 1085, 1084, + 86, 86, 1090, 1089, 1091, 86, 1086, 86, 1087, 86, + 86, 86, 1093, 86, 86, 1092, 86, 86, 1094, 86, + 1101, 1095, 1099, 166, 1104, 86, 86, 86, 86, 1096, + 86, 1098, 1097, 86, 1105, 1102, 86, 1100, 1103, 1106, + + 86, 1111, 1107, 86, 86, 86, 1110, 1108, 86, 1113, + 1109, 1114, 86, 86, 86, 86, 86, 1112, 86, 86, + 1125, 86, 1117, 1119, 1115, 86, 86, 1126, 1116, 86, + 86, 1128, 86, 86, 1118, 86, 1120, 86, 1122, 1133, + 1121, 1123, 1131, 1127, 1129, 1124, 86, 1132, 86, 86, + 86, 86, 1130, 86, 1140, 1137, 86, 1139, 1141, 86, + 86, 1135, 1142, 86, 86, 1134, 86, 1145, 86, 1136, + 1147, 86, 1138, 86, 86, 86, 86, 86, 1153, 1144, + 1149, 1143, 86, 1154, 170, 1150, 86, 86, 1146, 86, + 1156, 1155, 1148, 86, 1157, 86, 86, 86, 1151, 1158, + + 1152, 1160, 86, 86, 86, 86, 1173, 1159, 1161, 86, + 86, 1163, 86, 1174, 86, 1164, 1176, 86, 86, 1162, + 86, 86, 1178, 1165, 1180, 1166, 86, 1175, 86, 1167, + 165, 1168, 86, 1181, 1182, 1169, 1179, 1170, 1183, 1177, + 86, 1185, 1171, 1184, 86, 86, 86, 1172, 86, 1187, + 86, 86, 86, 86, 1186, 1190, 1193, 86, 1192, 86, + 163, 1188, 86, 1189, 86, 1191, 1194, 1198, 1197, 1201, + 1199, 1196, 86, 1202, 1195, 86, 1205, 1200, 1204, 86, + 1203, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 1220, 1217, 86, 86, 86, 86, 1216, 1221, + + 86, 86, 1219, 1218, 1207, 1208, 1206, 86, 1209, 1222, + 1224, 1223, 86, 1210, 1228, 1211, 1225, 86, 86, 1226, + 86, 1212, 1229, 86, 86, 86, 1213, 1214, 1227, 86, + 1230, 1235, 86, 1215, 86, 86, 1238, 86, 1236, 86, + 1232, 1231, 86, 1233, 1241, 86, 86, 1234, 1239, 86, + 86, 1243, 86, 86, 1244, 1237, 1240, 86, 86, 1242, + 1249, 1246, 1247, 86, 86, 86, 86, 86, 86, 1245, + 1252, 86, 1250, 86, 1248, 86, 86, 86, 86, 86, + 86, 86, 1254, 1251, 1257, 1256, 1258, 1253, 86, 1261, + 86, 1255, 1263, 1260, 1259, 86, 1262, 86, 86, 1264, + + 1266, 86, 1265, 86, 1267, 86, 1270, 86, 86, 1275, + 1271, 86, 1272, 86, 1274, 86, 1268, 1273, 1269, 1276, + 1277, 86, 86, 86, 1281, 86, 86, 86, 1283, 1282, + 86, 1284, 86, 86, 86, 1279, 1278, 1286, 86, 1280, + 86, 1285, 86, 1293, 86, 86, 1287, 86, 86, 86, + 1295, 1300, 86, 1288, 1289, 1291, 86, 1297, 1290, 1292, + 86, 86, 1296, 86, 1299, 1294, 86, 86, 86, 86, + 86, 1302, 1303, 86, 1298, 1306, 86, 86, 1305, 86, + 86, 1307, 1301, 1309, 1304, 1308, 1311, 1312, 1313, 86, + 86, 86, 86, 86, 86, 1310, 86, 1316, 86, 1314, + + 86, 1317, 86, 86, 161, 1321, 1323, 1324, 1325, 1315, + 1318, 86, 86, 86, 86, 1319, 1322, 86, 1320, 86, + 1328, 1330, 1326, 86, 1327, 86, 86, 86, 1329, 1332, + 1331, 86, 1334, 86, 86, 1336, 86, 86, 86, 1335, + 86, 86, 1337, 86, 86, 1339, 1338, 1342, 86, 86, + 86, 1333, 1343, 1345, 86, 86, 86, 1349, 1350, 1340, + 86, 1344, 1341, 86, 86, 86, 86, 1347, 1353, 86, + 86, 1352, 1346, 86, 86, 1348, 86, 1358, 86, 1354, + 1351, 86, 86, 86, 1355, 1356, 86, 1360, 1364, 86, + 86, 86, 1357, 170, 1359, 86, 1366, 86, 1365, 86, + + 1367, 1361, 86, 86, 86, 1363, 1376, 1372, 1362, 86, + 86, 1369, 86, 1368, 1370, 1371, 1374, 86, 1373, 1377, + 86, 86, 86, 1380, 1375, 86, 1378, 1379, 86, 86, + 86, 86, 86, 1381, 1382, 1384, 86, 86, 86, 1390, + 86, 86, 86, 1383, 1387, 86, 1385, 86, 86, 86, + 1401, 1386, 86, 1388, 1394, 1389, 1391, 1396, 86, 1392, + 1393, 86, 1400, 86, 86, 86, 1397, 1395, 1398, 1402, + 1404, 1399, 1403, 86, 86, 1405, 86, 1406, 86, 86, + 86, 86, 1413, 86, 1407, 1410, 86, 1409, 86, 86, + 86, 1414, 86, 1412, 1408, 1418, 86, 1415, 1411, 86, + + 1416, 86, 86, 86, 1419, 86, 1420, 1422, 86, 1417, + 86, 86, 1421, 86, 1423, 86, 1428, 1424, 1425, 86, + 1426, 86, 1431, 86, 86, 1429, 86, 86, 86, 86, + 1427, 1438, 86, 1432, 1430, 1436, 86, 86, 86, 86, + 86, 86, 1433, 1437, 1435, 1434, 86, 1439, 1441, 86, + 1448, 1442, 1440, 1444, 86, 1450, 86, 1443, 86, 1445, + 86, 86, 86, 86, 1447, 86, 86, 86, 1453, 86, + 86, 1446, 1456, 1451, 1449, 86, 1452, 86, 1457, 1458, + 86, 1455, 1526, 1454, 1459, 86, 86, 1463, 1460, 1461, + 1462, 86, 1464, 1471, 86, 1473, 1465, 86, 1474, 1466, + + 1467, 86, 86, 1472, 1468, 1477, 86, 1475, 86, 86, + 1469, 86, 86, 1478, 1470, 1476, 86, 1479, 86, 1480, + 86, 1482, 86, 86, 86, 1483, 1487, 1484, 86, 86, + 1481, 86, 86, 1488, 1490, 86, 1485, 1493, 1494, 86, + 86, 1486, 86, 86, 86, 1491, 86, 1495, 1489, 1498, + 1496, 86, 1497, 1492, 1499, 86, 1500, 86, 1501, 86, + 1502, 86, 1503, 86, 1505, 1504, 1506, 1507, 86, 86, + 1508, 86, 1509, 86, 1514, 1511, 1510, 86, 86, 1515, + 86, 86, 1513, 86, 86, 86, 1516, 86, 1518, 1512, + 1524, 86, 86, 1520, 86, 1519, 86, 86, 1525, 86, + + 1517, 86, 1527, 86, 1521, 1523, 1522, 86, 1529, 86, + 86, 86, 86, 1528, 86, 1530, 1531, 1532, 86, 1535, + 1536, 86, 1538, 86, 86, 86, 1539, 1533, 1540, 86, + 86, 1542, 86, 1537, 1541, 86, 1534, 1544, 86, 1543, + 1546, 86, 86, 1547, 86, 86, 86, 1552, 86, 1548, + 86, 86, 1545, 86, 86, 1557, 1549, 1555, 86, 86, + 86, 86, 86, 1558, 1560, 86, 1550, 1551, 1554, 1559, + 1553, 86, 86, 1556, 1562, 86, 86, 1561, 86, 86, + 1563, 1565, 86, 1567, 86, 1564, 86, 1568, 1629, 1566, + 86, 1569, 86, 1570, 86, 1572, 86, 1571, 86, 86, + + 1574, 1573, 86, 1578, 1575, 1579, 1576, 86, 86, 86, + 1582, 86, 1580, 1581, 86, 1577, 86, 86, 86, 1586, + 86, 86, 86, 1583, 86, 86, 86, 1588, 170, 1585, + 86, 1594, 1595, 86, 1597, 1590, 1584, 86, 86, 1596, + 86, 1587, 1589, 1591, 86, 86, 1592, 86, 86, 86, + 86, 86, 1605, 1593, 86, 86, 86, 86, 1598, 86, + 1602, 1609, 86, 1603, 1599, 1600, 86, 1601, 1604, 1610, + 86, 1612, 1614, 86, 1606, 1608, 86, 1615, 86, 86, + 1607, 1613, 1611, 86, 86, 1617, 86, 1618, 86, 86, + 86, 1616, 1626, 1623, 86, 86, 1624, 1619, 1625, 1620, + + 1628, 1621, 86, 86, 1622, 1631, 86, 86, 1627, 86, + 1632, 86, 86, 1630, 1633, 86, 86, 1636, 86, 86, + 1637, 1638, 86, 86, 1641, 1635, 86, 1639, 86, 1634, + 86, 1646, 86, 86, 86, 1650, 1647, 1643, 1640, 86, + 86, 86, 1642, 86, 1644, 86, 1645, 86, 86, 86, + 86, 1648, 1651, 1649, 86, 1652, 86, 1659, 86, 1654, + 86, 1658, 1653, 1655, 1656, 1660, 1657, 86, 86, 1664, + 86, 86, 1661, 86, 86, 1668, 1663, 1669, 1670, 1662, + 1666, 86, 86, 86, 86, 1665, 86, 1672, 1673, 86, + 86, 86, 86, 1667, 1678, 1671, 1674, 1677, 1675, 1679, + + 86, 1680, 86, 1681, 86, 86, 86, 86, 86, 1682, + 1685, 86, 1676, 86, 86, 1687, 86, 1686, 86, 86, + 86, 86, 1688, 86, 1693, 86, 1689, 1692, 1683, 1695, + 1684, 1691, 1690, 86, 86, 1699, 86, 1701, 1696, 1694, + 1700, 86, 1702, 86, 1698, 86, 1704, 86, 1697, 86, + 86, 86, 86, 86, 86, 1712, 1703, 1708, 86, 1707, + 86, 86, 86, 1713, 86, 1716, 1705, 86, 1706, 86, + 1709, 86, 1711, 1710, 86, 1718, 1719, 86, 86, 86, + 1714, 86, 86, 1717, 86, 86, 1720, 86, 1715, 86, + 1728, 86, 86, 1721, 1729, 1725, 1722, 1723, 1724, 86, + + 1727, 86, 1733, 86, 1735, 1726, 1730, 1734, 86, 86, + 86, 1731, 86, 1732, 1736, 86, 86, 86, 86, 1741, + 86, 86, 1737, 1742, 1739, 86, 1745, 1738, 86, 1740, + 1749, 86, 86, 1746, 1751, 86, 1743, 1750, 1744, 86, + 86, 1754, 86, 86, 1748, 1747, 1756, 86, 1755, 86, + 1752, 86, 1753, 1757, 86, 86, 86, 1762, 1763, 86, + 86, 86, 86, 86, 1760, 86, 1767, 1766, 1768, 86, + 86, 1758, 1759, 1771, 86, 86, 1761, 86, 1764, 1770, + 86, 86, 1765, 1772, 86, 86, 86, 86, 1776, 1769, + 86, 1773, 86, 1774, 86, 1781, 1779, 1775, 86, 86, + + 86, 86, 86, 1787, 86, 1788, 1785, 1777, 86, 86, + 1778, 86, 1780, 1782, 86, 86, 1786, 1789, 86, 1784, + 1783, 86, 1794, 86, 86, 86, 86, 1799, 86, 1790, + 1791, 1797, 86, 86, 86, 1802, 1800, 1795, 1793, 1792, + 1798, 86, 1796, 86, 86, 86, 86, 86, 86, 1806, + 1809, 86, 1808, 1801, 86, 1805, 170, 1810, 86, 86, + 86, 1811, 1804, 1803, 1812, 1807, 86, 86, 86, 86, + 1820, 86, 1813, 86, 1815, 86, 1814, 86, 1821, 1824, + 86, 1818, 1826, 86, 86, 1816, 1817, 86, 86, 1828, + 1830, 1822, 1825, 1819, 86, 1823, 86, 1832, 86, 1829, + + 1834, 86, 86, 86, 1827, 86, 86, 86, 1831, 86, + 86, 1836, 1833, 86, 1837, 86, 1839, 86, 1840, 86, + 86, 1835, 1844, 86, 1841, 1842, 86, 1845, 1843, 86, + 1838, 1852, 86, 86, 86, 1847, 1849, 86, 1846, 1850, + 86, 86, 86, 1856, 1854, 1853, 86, 1857, 86, 1848, + 86, 1851, 1862, 1859, 1860, 86, 1863, 1858, 86, 86, + 1855, 1869, 86, 1867, 1864, 86, 1865, 86, 1866, 86, + 1861, 86, 86, 86, 86, 86, 1868, 1874, 1873, 1875, + 1876, 86, 86, 86, 86, 86, 86, 1877, 86, 1878, + 1870, 86, 1871, 1880, 1872, 86, 1881, 86, 86, 86, + + 86, 86, 1883, 1882, 1879, 86, 86, 86, 86, 86, + 86, 1884, 1893, 1892, 86, 1887, 86, 86, 1885, 1888, + 1886, 1889, 86, 86, 1890, 86, 1896, 86, 1899, 1895, + 1898, 86, 86, 1891, 86, 1894, 86, 1897, 86, 1904, + 86, 1903, 86, 1900, 86, 1906, 86, 1901, 86, 1907, + 1908, 86, 1902, 1910, 1911, 86, 1912, 1905, 1909, 86, + 86, 1913, 86, 86, 86, 86, 86, 86, 86, 86, + 1927, 86, 1917, 1914, 1919, 1920, 1928, 86, 1921, 1918, + 1916, 1922, 86, 1923, 1915, 1926, 86, 86, 1924, 86, + 1932, 86, 1931, 86, 1925, 86, 86, 86, 1929, 86, + + 1936, 1935, 86, 86, 1937, 1930, 1933, 86, 86, 86, + 86, 86, 1946, 86, 1934, 86, 1940, 1947, 1944, 1939, + 1942, 1938, 1945, 1943, 86, 86, 86, 1941, 86, 86, + 86, 86, 86, 1953, 86, 1948, 1955, 1949, 1954, 86, + 1951, 86, 1956, 1950, 1960, 1952, 86, 1959, 86, 86, + 86, 1963, 1958, 86, 1965, 1964, 86, 1957, 1962, 86, + 86, 1969, 86, 86, 1961, 1973, 86, 86, 1966, 1967, + 1974, 86, 1968, 86, 86, 86, 86, 1970, 1980, 1978, + 1975, 1972, 1976, 1971, 86, 1982, 86, 1983, 86, 1979, + 86, 86, 1986, 86, 1981, 1977, 1984, 86, 86, 86, + + 1990, 86, 1985, 1987, 86, 86, 86, 86, 86, 1994, + 1988, 1992, 1995, 1989, 1991, 86, 86, 1993, 86, 86, + 86, 86, 86, 2000, 1996, 86, 1997, 1999, 86, 2001, + 86, 2003, 2007, 86, 2002, 1998, 86, 2009, 2004, 2010, + 86, 86, 2005, 86, 2006, 86, 86, 2013, 86, 2011, + 86, 2017, 86, 2012, 2008, 86, 2014, 2019, 86, 2015, + 86, 86, 86, 86, 2023, 86, 86, 86, 2018, 2016, + 2025, 86, 2026, 86, 86, 86, 2021, 86, 2028, 2022, + 2020, 86, 2024, 2030, 86, 170, 2029, 86, 2032, 86, + 2034, 2027, 86, 2033, 2037, 86, 86, 2035, 2031, 86, + + 2041, 86, 86, 86, 2036, 86, 86, 86, 2039, 86, + 2043, 2038, 86, 86, 2048, 86, 2042, 2044, 2040, 2045, + 86, 2051, 2052, 86, 2049, 2046, 86, 86, 86, 2047, + 2053, 2050, 2054, 86, 86, 2056, 2057, 2058, 86, 2055, + 2059, 86, 86, 2060, 86, 86, 86, 2061, 86, 86, + 86, 86, 86, 86, 86, 2066, 2067, 86, 86, 2071, + 86, 2068, 2072, 86, 2080, 2062, 2064, 2065, 2063, 2069, + 86, 86, 86, 2070, 86, 2073, 2075, 2077, 2078, 86, + 2074, 2079, 86, 2076, 86, 86, 86, 86, 86, 86, + 2087, 86, 2090, 2091, 86, 2081, 2092, 86, 2083, 86, + + 2082, 86, 2085, 2088, 2084, 2089, 86, 2086, 2094, 86, + 86, 2095, 86, 2099, 86, 2101, 86, 86, 2103, 2093, + 2100, 86, 2096, 86, 86, 2105, 2102, 2097, 86, 86, + 86, 86, 86, 2098, 2106, 2104, 86, 2109, 86, 2108, + 86, 2112, 86, 86, 86, 2111, 86, 2113, 86, 2115, + 2110, 2116, 86, 2107, 86, 2117, 2119, 2118, 86, 86, + 86, 2127, 86, 86, 2114, 86, 86, 86, 2124, 86, + 2120, 2121, 2122, 2130, 2131, 2132, 86, 2123, 2125, 2126, + 2133, 86, 86, 2128, 86, 2129, 2136, 86, 86, 2139, + 2134, 86, 86, 86, 86, 86, 86, 2135, 2137, 86, + + 2140, 2143, 86, 2138, 86, 2145, 86, 2148, 2149, 86, + 86, 86, 2141, 86, 2142, 86, 2146, 2151, 86, 86, + 2144, 2147, 2153, 2156, 2154, 86, 2158, 86, 86, 86, + 2150, 86, 86, 86, 86, 86, 2152, 86, 2164, 2161, + 2155, 2157, 2162, 86, 2167, 2169, 2160, 86, 86, 2159, + 86, 86, 2168, 86, 86, 86, 2173, 2172, 2175, 2166, + 2163, 2165, 2171, 86, 86, 2176, 86, 86, 2170, 86, + 86, 86, 2174, 86, 2177, 86, 2178, 86, 2182, 86, + 86, 86, 2184, 86, 2187, 2179, 86, 2188, 2189, 2183, + 86, 2180, 2181, 86, 86, 86, 86, 86, 2185, 2192, + + 2197, 86, 86, 86, 86, 2191, 2190, 2186, 2196, 86, + 86, 86, 2203, 86, 86, 2193, 2194, 2202, 86, 2195, + 2204, 2206, 86, 2199, 2200, 86, 2198, 2205, 86, 2201, + 2210, 86, 2207, 86, 86, 86, 2208, 86, 86, 86, + 2214, 2209, 86, 2218, 86, 86, 86, 86, 2212, 86, + 2223, 86, 2221, 86, 2211, 3645, 2213, 2222, 2215, 2216, + 86, 2220, 2217, 2219, 86, 2224, 86, 86, 86, 2226, + 2225, 86, 86, 2229, 2231, 86, 2230, 2238, 2227, 2232, + 86, 2233, 2235, 2228, 2236, 86, 2234, 86, 86, 2240, + 86, 86, 86, 86, 2237, 86, 2242, 2239, 86, 2244, + + 86, 2246, 86, 2241, 2248, 2243, 86, 86, 2249, 86, + 86, 86, 170, 86, 86, 86, 86, 2252, 86, 2256, + 86, 2257, 86, 2258, 2247, 2245, 2251, 2253, 2254, 3645, + 2250, 2262, 2255, 2259, 86, 2260, 86, 86, 86, 86, + 2261, 86, 86, 86, 2263, 2265, 2264, 86, 2267, 86, + 2268, 2266, 86, 2270, 86, 86, 86, 86, 2274, 86, + 86, 2269, 2273, 86, 86, 2275, 2271, 2272, 2276, 2277, + 86, 2279, 86, 2278, 86, 86, 86, 86, 86, 86, + 2280, 2284, 2286, 2281, 2285, 86, 86, 86, 86, 86, + 86, 2291, 86, 2282, 2288, 2283, 2287, 86, 86, 86, + + 86, 2290, 2292, 86, 2289, 86, 2294, 2293, 2295, 86, + 2297, 86, 2296, 2302, 2298, 2299, 2301, 2303, 86, 2300, + 86, 86, 86, 2304, 86, 86, 86, 2310, 86, 86, + 2312, 86, 86, 86, 2313, 2315, 86, 2305, 2306, 2309, + 2307, 2308, 86, 2317, 86, 2311, 86, 2318, 86, 2314, + 2316, 86, 2321, 86, 86, 86, 86, 2320, 86, 86, + 2326, 2323, 86, 86, 2327, 86, 86, 2322, 86, 86, + 86, 2319, 2328, 86, 86, 86, 2325, 2324, 2330, 86, + 2331, 2337, 2333, 2329, 2332, 86, 2338, 86, 2335, 2336, + 86, 2334, 86, 86, 2340, 2343, 2339, 86, 2341, 2346, + + 86, 86, 2345, 86, 2349, 86, 86, 86, 2344, 86, + 2350, 2342, 2352, 2348, 86, 2347, 2353, 86, 86, 86, + 86, 86, 2355, 2351, 2354, 2356, 86, 2358, 2357, 2359, + 86, 2363, 2361, 2360, 86, 86, 2364, 86, 2366, 86, + 86, 86, 86, 86, 2369, 2362, 2368, 86, 2370, 2365, + 86, 86, 2371, 86, 2375, 86, 86, 86, 2379, 86, + 86, 2376, 86, 2380, 86, 86, 2367, 2378, 2372, 2373, + 2377, 86, 86, 2374, 2385, 86, 2383, 2384, 2382, 2381, + 86, 2386, 86, 2387, 86, 2390, 86, 86, 2392, 86, + 86, 86, 2391, 2396, 86, 86, 86, 2388, 2394, 86, + + 2398, 86, 2399, 86, 2389, 86, 2395, 2393, 2397, 86, + 2401, 86, 2400, 2402, 86, 2403, 2406, 86, 2404, 2408, + 86, 2405, 86, 86, 2409, 86, 86, 86, 86, 86, + 86, 2411, 2410, 2414, 2415, 2412, 86, 86, 2407, 2413, + 2419, 86, 86, 2416, 86, 2418, 2417, 86, 86, 86, + 86, 86, 86, 86, 2427, 2420, 86, 86, 86, 86, + 2421, 86, 2422, 2423, 2425, 2428, 2426, 2433, 2429, 86, + 86, 86, 2430, 2424, 2431, 2432, 86, 2434, 86, 2440, + 2438, 86, 2435, 86, 2437, 86, 2439, 2443, 86, 2445, + 86, 86, 2442, 86, 2444, 2436, 86, 86, 86, 86, + + 2448, 2452, 2449, 170, 2456, 3645, 2441, 86, 2454, 2446, + 86, 2450, 2447, 2455, 86, 2457, 86, 86, 2451, 2458, + 86, 86, 2461, 86, 86, 2453, 86, 2462, 2459, 2466, + 86, 86, 2467, 2465, 86, 86, 2470, 2460, 86, 86, + 2472, 2463, 86, 2471, 2473, 86, 2468, 86, 86, 86, + 2475, 2476, 2464, 2469, 2474, 86, 86, 86, 86, 2478, + 86, 86, 86, 86, 86, 2481, 86, 2484, 2477, 86, + 86, 86, 2490, 86, 86, 2488, 86, 2479, 2483, 86, + 2491, 86, 2485, 2480, 2482, 2486, 2487, 86, 86, 2492, + 86, 86, 2493, 2489, 86, 86, 86, 2494, 86, 2499, + + 2502, 86, 2497, 86, 86, 86, 2496, 2495, 2500, 86, + 2498, 2503, 86, 86, 2501, 86, 86, 2504, 86, 86, + 2513, 86, 86, 2505, 2506, 2511, 86, 86, 86, 3645, + 2518, 86, 2507, 2516, 2509, 2515, 2508, 2510, 86, 2512, + 86, 2519, 2514, 86, 2517, 2520, 86, 86, 2521, 86, + 2522, 86, 86, 2523, 2529, 2524, 86, 2527, 2528, 86, + 2530, 86, 86, 2525, 2526, 86, 86, 86, 2534, 2536, + 86, 2535, 86, 2537, 86, 2538, 86, 2531, 86, 2533, + 2532, 2541, 86, 2542, 86, 2539, 86, 86, 2540, 86, + 86, 2543, 2544, 2548, 86, 2549, 86, 86, 2545, 2551, + + 86, 86, 2547, 2553, 86, 86, 86, 2556, 86, 2546, + 86, 2555, 2557, 86, 86, 86, 2550, 86, 86, 2552, + 2554, 86, 86, 2559, 2558, 86, 2563, 2564, 86, 2566, + 86, 2561, 2560, 86, 86, 86, 86, 2562, 2568, 2570, + 2569, 2565, 86, 2567, 86, 2571, 2573, 86, 86, 86, + 2576, 86, 2579, 86, 2574, 2580, 86, 2575, 86, 86, + 2572, 86, 86, 86, 2577, 2586, 86, 2585, 86, 86, + 2578, 86, 86, 2582, 2588, 86, 2581, 2584, 2591, 86, + 86, 86, 2583, 86, 86, 86, 2589, 2587, 2593, 86, + 2590, 86, 2592, 2601, 2594, 86, 2599, 86, 86, 2605, + + 2597, 2595, 2596, 86, 86, 86, 2600, 2602, 2607, 86, + 2606, 86, 86, 86, 2608, 2598, 86, 86, 86, 86, + 86, 2612, 2603, 2614, 2604, 2610, 86, 86, 86, 3645, + 86, 2615, 2616, 2618, 2611, 2617, 2609, 86, 2619, 86, + 2620, 2622, 2623, 2613, 86, 2621, 86, 86, 86, 86, + 86, 2624, 2627, 2625, 86, 86, 86, 86, 86, 86, + 86, 2626, 2634, 2629, 2630, 2631, 2632, 2635, 86, 86, + 2628, 86, 2633, 86, 86, 2636, 86, 2640, 2639, 2637, + 2638, 2641, 86, 2642, 86, 86, 2645, 86, 86, 170, + 2649, 2643, 86, 2644, 2646, 86, 2651, 86, 86, 86, + + 86, 86, 86, 86, 2659, 86, 86, 2652, 2647, 2653, + 2648, 2650, 3645, 2654, 2655, 2657, 86, 2656, 2661, 2658, + 2662, 86, 86, 2663, 86, 2660, 2664, 86, 86, 2666, + 2667, 2665, 2668, 86, 2670, 86, 86, 86, 86, 86, + 2672, 86, 2669, 86, 86, 86, 2676, 86, 2677, 86, + 86, 2671, 86, 2673, 86, 2679, 2680, 2674, 2685, 86, + 86, 2678, 2681, 2675, 2682, 86, 86, 86, 86, 2686, + 86, 2683, 2684, 86, 2688, 2689, 86, 86, 86, 86, + 86, 86, 2691, 86, 86, 86, 2690, 2696, 2687, 86, + 2698, 2699, 86, 2701, 86, 2695, 86, 86, 2692, 2693, + + 2694, 86, 2700, 86, 2697, 86, 86, 2702, 2705, 2707, + 86, 86, 86, 2703, 86, 2711, 2712, 2710, 2708, 2734, + 2704, 86, 86, 86, 86, 86, 2706, 2709, 86, 86, + 2714, 2713, 86, 2715, 86, 2718, 86, 86, 2769, 2716, + 2719, 86, 2720, 2717, 86, 86, 2726, 2721, 2722, 86, + 2724, 86, 86, 86, 86, 2725, 2728, 86, 2723, 2730, + 86, 86, 86, 2729, 86, 2727, 86, 86, 86, 86, + 2739, 86, 86, 2737, 2738, 2741, 2732, 2740, 86, 2731, + 2733, 86, 86, 86, 2743, 86, 86, 86, 2736, 86, + 86, 2746, 2735, 2748, 2745, 86, 86, 2751, 86, 86, + + 86, 2744, 2742, 86, 86, 2752, 2747, 2749, 2750, 2753, + 2754, 2755, 2758, 86, 2757, 86, 86, 86, 2759, 86, + 86, 2756, 86, 2762, 2763, 86, 86, 86, 86, 86, + 86, 2764, 86, 86, 2768, 2760, 2766, 2761, 2765, 86, + 86, 2767, 86, 86, 2770, 2772, 2771, 2773, 2776, 2777, + 86, 2778, 86, 2779, 86, 2780, 86, 86, 86, 2774, + 2775, 86, 86, 2784, 86, 2785, 2783, 86, 2786, 2781, + 86, 86, 86, 86, 86, 3645, 2782, 86, 86, 2793, + 86, 86, 2787, 86, 2789, 2795, 86, 2796, 86, 2798, + 86, 2788, 2797, 2790, 2792, 2791, 2794, 86, 86, 86, + + 86, 86, 86, 2802, 86, 2800, 2803, 2806, 86, 2799, + 86, 2801, 86, 2807, 2808, 86, 86, 86, 86, 86, + 2804, 86, 2805, 2815, 86, 170, 86, 2817, 86, 2811, + 86, 86, 2810, 2813, 86, 86, 2809, 2816, 86, 2818, + 2814, 2812, 2821, 2819, 86, 86, 2820, 2824, 86, 86, + 2826, 86, 2825, 2827, 2828, 86, 2822, 86, 2823, 2829, + 86, 86, 2830, 86, 2831, 86, 2832, 2833, 2834, 86, + 2835, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 2843, 3645, 86, 86, 2836, 2841, 86, 2847, 86, 86, + 2838, 2837, 2848, 2845, 2840, 2839, 86, 2842, 86, 2844, + + 2846, 2849, 86, 2850, 86, 2851, 86, 2852, 2853, 86, + 2855, 86, 86, 2854, 2856, 86, 86, 86, 86, 86, + 86, 86, 2859, 86, 2857, 2866, 86, 2865, 2867, 86, + 2858, 2860, 86, 86, 86, 2861, 2862, 2863, 2864, 2870, + 2871, 86, 2873, 2868, 2872, 86, 86, 86, 86, 86, + 2869, 86, 2874, 86, 2880, 86, 86, 86, 2879, 86, + 86, 86, 2876, 3645, 2875, 2878, 86, 86, 2877, 2888, + 86, 2884, 2886, 86, 86, 2887, 2881, 2882, 86, 2883, + 2889, 2885, 2890, 86, 86, 2891, 86, 86, 86, 86, + 86, 86, 86, 2892, 2895, 2896, 2897, 86, 86, 2894, + + 86, 2902, 2903, 86, 86, 2893, 2906, 86, 2898, 2900, + 86, 2899, 86, 86, 86, 2901, 86, 2909, 2905, 2904, + 86, 2907, 2914, 86, 86, 86, 2912, 2908, 2913, 2910, + 86, 2911, 86, 86, 2919, 86, 86, 86, 2915, 86, + 86, 2923, 86, 2922, 86, 2916, 2921, 86, 2920, 2924, + 86, 86, 2917, 2918, 2926, 86, 2927, 86, 86, 2930, + 2929, 2925, 2932, 86, 86, 2933, 2928, 86, 2935, 86, + 86, 86, 86, 86, 2942, 86, 86, 86, 2931, 86, + 86, 86, 2939, 2936, 2937, 2938, 2940, 86, 2941, 2934, + 2945, 86, 2946, 86, 86, 2944, 2943, 86, 2947, 86, + + 2951, 86, 2949, 86, 86, 86, 86, 2950, 2948, 86, + 2952, 2953, 86, 86, 2955, 2958, 86, 2956, 2960, 2954, + 2957, 2959, 86, 2962, 170, 2961, 86, 86, 86, 86, + 2967, 3645, 2964, 2963, 86, 86, 86, 86, 2969, 2968, + 86, 2972, 86, 2973, 86, 2971, 2965, 2966, 86, 2977, + 2970, 2975, 86, 86, 2978, 86, 2976, 86, 86, 86, + 2982, 2974, 2979, 2980, 86, 86, 86, 86, 2983, 86, + 2984, 86, 86, 2981, 2989, 2990, 2985, 86, 86, 2987, + 86, 86, 2991, 86, 2986, 2993, 86, 86, 2995, 86, + 2992, 86, 2996, 2988, 2994, 86, 86, 86, 86, 86, + + 2998, 2999, 3000, 2997, 86, 86, 86, 3005, 86, 86, + 86, 86, 3002, 3003, 3004, 3007, 3001, 3006, 3009, 86, + 86, 86, 3645, 86, 86, 3010, 86, 3008, 3015, 86, + 3011, 86, 86, 3016, 86, 86, 86, 3020, 86, 86, + 3012, 3013, 3014, 3018, 3019, 3023, 86, 3021, 86, 86, + 3017, 86, 86, 3022, 3030, 3027, 3028, 86, 3024, 3031, + 86, 86, 3033, 3025, 86, 86, 3034, 86, 86, 3026, + 86, 86, 3035, 86, 86, 3040, 3037, 3029, 86, 3032, + 86, 86, 3038, 3041, 86, 86, 86, 3039, 3042, 3045, + 86, 86, 3047, 86, 3645, 3036, 3043, 3049, 86, 3044, + + 86, 3046, 3050, 86, 3051, 86, 86, 86, 86, 3054, + 3052, 3048, 3053, 3055, 86, 86, 3059, 86, 86, 86, + 3057, 3060, 86, 86, 3063, 3064, 86, 86, 3056, 3058, + 3061, 3065, 86, 3066, 86, 86, 86, 86, 3067, 3062, + 3068, 3070, 86, 86, 3073, 86, 86, 3074, 86, 3069, + 3075, 86, 86, 3077, 86, 3071, 86, 86, 3081, 3082, + 86, 3078, 86, 3072, 86, 86, 3083, 3076, 86, 3084, + 3085, 3080, 3086, 86, 3079, 86, 86, 3087, 86, 86, + 3092, 86, 86, 86, 86, 3091, 86, 3094, 3095, 86, + 86, 3088, 3097, 3089, 86, 3096, 3090, 3098, 86, 86, + + 3101, 3100, 86, 86, 86, 86, 3093, 3099, 3104, 86, + 3108, 86, 86, 86, 86, 86, 3110, 3645, 86, 3102, + 3103, 86, 3105, 3107, 3111, 3106, 3109, 3115, 3112, 3114, + 3117, 86, 3116, 86, 3113, 3118, 86, 3119, 3120, 86, + 86, 3121, 86, 3122, 86, 3123, 86, 3124, 86, 3125, + 86, 86, 86, 86, 86, 86, 3127, 3129, 86, 3131, + 86, 86, 86, 3133, 86, 86, 3126, 3130, 3140, 3134, + 3138, 86, 3128, 86, 3132, 3139, 86, 3142, 86, 86, + 86, 3135, 3136, 86, 3137, 3143, 3145, 86, 3141, 86, + 3146, 3147, 86, 86, 3148, 3149, 86, 86, 3144, 86, + + 86, 86, 3150, 3155, 86, 86, 3151, 86, 3152, 3153, + 3156, 86, 86, 86, 3158, 86, 3157, 86, 86, 3154, + 86, 86, 3163, 86, 3160, 3167, 3159, 3164, 86, 3166, + 3161, 3165, 86, 86, 3169, 86, 86, 3162, 3168, 3171, + 86, 86, 3175, 86, 86, 86, 3170, 86, 3173, 86, + 3172, 86, 3182, 3176, 3179, 86, 86, 3177, 86, 3174, + 3180, 86, 86, 86, 86, 86, 3187, 3185, 3183, 3186, + 86, 86, 3178, 86, 86, 3181, 3189, 3191, 86, 3188, + 86, 3192, 3184, 3197, 3193, 86, 3190, 3194, 86, 3195, + 86, 3196, 86, 86, 86, 3201, 86, 86, 3198, 3200, + + 86, 86, 3202, 86, 3199, 3203, 3204, 86, 3206, 86, + 86, 3205, 3210, 86, 3208, 3212, 86, 86, 86, 86, + 86, 3213, 86, 86, 3207, 3214, 86, 3215, 3209, 86, + 3216, 86, 3221, 86, 3218, 86, 86, 86, 3211, 86, + 86, 3219, 3217, 3225, 86, 86, 86, 86, 3222, 3223, + 3224, 3220, 3230, 3226, 3229, 86, 3227, 86, 3232, 86, + 86, 86, 3236, 86, 3228, 3237, 86, 86, 3233, 86, + 86, 3239, 86, 86, 86, 3231, 3240, 86, 3234, 3242, + 3243, 86, 86, 3241, 3245, 86, 3238, 3235, 3246, 86, + 3247, 3244, 86, 86, 3248, 3251, 86, 3250, 3249, 86, + + 3254, 86, 3256, 86, 86, 86, 86, 86, 3253, 86, + 3258, 3261, 86, 3252, 3262, 86, 3264, 86, 86, 3259, + 86, 86, 86, 3257, 3255, 86, 3260, 3267, 86, 86, + 3265, 3268, 86, 3269, 86, 3263, 3271, 86, 86, 3266, + 3273, 3270, 3276, 3274, 86, 86, 86, 86, 86, 3280, + 86, 86, 86, 86, 3282, 3283, 3272, 3278, 3275, 86, + 3284, 86, 3281, 3277, 3287, 3285, 3279, 3288, 86, 86, + 86, 3290, 3289, 86, 86, 3293, 86, 86, 86, 3292, + 86, 3286, 3296, 3294, 86, 3299, 86, 86, 86, 86, + 86, 3291, 86, 3304, 86, 86, 86, 86, 86, 3295, + + 3500, 3297, 3298, 3303, 3300, 3301, 3307, 3308, 86, 3309, + 86, 3306, 3310, 86, 3302, 3305, 86, 86, 86, 3314, + 86, 3311, 86, 3313, 3315, 86, 3316, 86, 3317, 86, + 86, 3312, 3320, 86, 86, 3318, 3322, 86, 86, 3321, + 3324, 86, 3325, 86, 86, 86, 86, 86, 86, 3323, + 86, 3331, 3332, 86, 86, 86, 3319, 86, 86, 86, + 86, 3338, 86, 3326, 3339, 86, 3329, 3327, 3328, 3337, + 3330, 3335, 86, 3341, 3334, 86, 86, 3340, 3336, 86, + 3333, 3344, 86, 3346, 86, 3347, 86, 86, 86, 3350, + 86, 86, 3342, 3348, 3343, 86, 3353, 86, 86, 3352, + + 86, 3349, 3351, 3345, 86, 3354, 86, 86, 3355, 86, + 86, 3356, 86, 86, 3359, 86, 86, 86, 3357, 3361, + 3362, 86, 3360, 86, 86, 86, 86, 3358, 86, 86, + 86, 3371, 3374, 3372, 3363, 3375, 3364, 3365, 86, 3366, + 3367, 86, 3368, 3369, 3370, 86, 86, 86, 3377, 3373, + 3379, 86, 3380, 86, 86, 3382, 86, 86, 3381, 3378, + 86, 3376, 3383, 3385, 86, 3645, 3384, 3387, 86, 3388, + 3389, 86, 86, 3390, 3391, 3386, 86, 3392, 86, 3393, + 3394, 86, 86, 86, 86, 3395, 3398, 86, 3396, 3399, + 86, 86, 3401, 3397, 86, 86, 86, 3405, 86, 86, + + 86, 3404, 86, 86, 3400, 86, 86, 3409, 86, 3408, + 3645, 86, 3414, 86, 3402, 3403, 3413, 3410, 86, 3406, + 3411, 86, 3416, 86, 3412, 3407, 86, 3415, 3417, 86, + 3418, 86, 86, 86, 3423, 3425, 86, 3420, 3419, 3424, + 86, 86, 3421, 86, 86, 3422, 86, 86, 3645, 3429, + 3433, 3426, 3430, 3432, 86, 86, 86, 3428, 3427, 3435, + 86, 3434, 3436, 86, 86, 3431, 86, 3439, 86, 3440, + 86, 3438, 86, 86, 3443, 86, 3444, 86, 86, 3437, + 3645, 3441, 3445, 86, 3446, 86, 3447, 86, 3448, 86, + 86, 3442, 3449, 86, 3450, 86, 3453, 86, 86, 3452, + + 3454, 86, 86, 86, 3451, 3458, 86, 3455, 86, 3460, + 86, 86, 86, 86, 3456, 86, 86, 86, 3464, 3465, + 86, 3467, 86, 3457, 86, 3462, 3461, 3459, 3463, 86, + 3466, 3468, 3469, 86, 3471, 86, 86, 3474, 86, 3473, + 86, 86, 86, 86, 86, 3476, 86, 86, 86, 86, + 3470, 3482, 3475, 3472, 3480, 3481, 86, 86, 3479, 86, + 3477, 86, 3478, 86, 3483, 86, 3486, 86, 3487, 3489, + 86, 86, 3488, 3490, 86, 3491, 86, 3485, 86, 86, + 3493, 86, 3484, 3494, 86, 86, 3492, 3495, 86, 86, + 3499, 86, 3496, 86, 3502, 3498, 86, 86, 86, 86, + + 86, 86, 3503, 3501, 3497, 86, 3511, 86, 3509, 86, + 3504, 86, 86, 3506, 3505, 3508, 3513, 3510, 3515, 86, + 86, 86, 86, 3507, 86, 3517, 3520, 86, 3512, 3516, + 86, 3514, 86, 3521, 86, 3518, 3522, 86, 86, 3523, + 3524, 86, 3519, 3525, 86, 86, 86, 86, 3528, 3526, + 86, 3529, 3527, 86, 3533, 3530, 86, 86, 86, 3531, + 86, 86, 3532, 3536, 3537, 86, 86, 3534, 3535, 3539, + 86, 3540, 86, 3541, 86, 86, 3542, 3538, 3544, 86, + 86, 3547, 86, 86, 3548, 3543, 86, 86, 86, 3551, + 3545, 3552, 86, 86, 3549, 86, 86, 86, 3546, 3557, + + 86, 3556, 3553, 3558, 86, 3554, 3550, 86, 86, 86, + 86, 86, 3555, 86, 3562, 86, 86, 86, 3564, 86, + 86, 86, 3561, 3571, 86, 3569, 3570, 86, 3559, 3560, + 3566, 3563, 3567, 86, 3565, 3568, 86, 3575, 86, 86, + 3577, 86, 3578, 86, 3576, 86, 86, 3572, 3579, 86, + 3580, 3573, 86, 3583, 3581, 3574, 3584, 86, 86, 86, + 3586, 86, 86, 3585, 86, 86, 3587, 86, 86, 3592, + 86, 3582, 3589, 86, 3595, 86, 86, 86, 3596, 86, + 86, 86, 86, 3588, 86, 3597, 3590, 3591, 3598, 3593, + 3594, 86, 86, 3603, 86, 3602, 3599, 86, 86, 3600, + + 3601, 86, 3604, 86, 3607, 86, 3609, 3605, 86, 3610, + 3606, 86, 86, 3614, 86, 3645, 3611, 3608, 86, 3612, + 3613, 86, 86, 3615, 3616, 3617, 86, 86, 3618, 86, + 86, 86, 3623, 86, 3619, 3621, 86, 86, 86, 86, + 86, 86, 3625, 3626, 86, 3629, 3630, 86, 3620, 86, + 3622, 86, 3633, 3634, 86, 3624, 86, 86, 3627, 3628, + 3631, 3636, 86, 3635, 3637, 86, 86, 86, 3632, 86, + 86, 3645, 3639, 3638, 3640, 3645, 3641, 3643, 86, 3644, + 86, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3642, + 47, 47, 47, 47, 47, 47, 47, 52, 52, 52, + + 52, 52, 52, 52, 57, 57, 57, 57, 57, 57, + 57, 63, 63, 63, 63, 63, 63, 63, 68, 68, + 68, 68, 68, 68, 68, 74, 74, 74, 74, 74, + 74, 74, 80, 80, 80, 80, 80, 80, 80, 89, + 89, 3645, 89, 89, 89, 89, 160, 160, 3645, 3645, + 3645, 160, 160, 162, 162, 3645, 3645, 162, 3645, 162, + 164, 3645, 3645, 3645, 3645, 3645, 164, 167, 167, 3645, + 3645, 3645, 167, 167, 169, 3645, 3645, 3645, 3645, 3645, + 169, 171, 171, 3645, 171, 171, 171, 171, 174, 3645, + 3645, 3645, 3645, 3645, 174, 177, 177, 3645, 3645, 3645, + + 177, 177, 90, 90, 3645, 90, 90, 90, 90, 17, + 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645 } ; -static const flex_int16_t yy_chk[7114] = +static const flex_int16_t yy_chk[7151] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2413,18 +2422,18 @@ static const flex_int16_t yy_chk[7114] = 5, 3, 6, 24, 4, 24, 24, 5, 24, 6, 7, 7, 7, 7, 24, 7, 8, 8, 8, 8, 33, 8, 7, 9, 9, 9, 26, 26, 8, 10, - 10, 10, 19, 29, 9, 33, 19, 29, 3635, 35, + 10, 10, 19, 29, 9, 33, 19, 29, 3653, 35, 10, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 34, 13, 11, 35, 99, 34, 29, 38, 13, 51, 51, 11, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 99, 14, 12, 15, 15, 15, 38, 23, 14, 23, 23, 12, 23, 46, 15, 16, 16, - 16, 23, 23, 25, 27, 27, 25, 25, 2947, 16, + 16, 23, 23, 25, 27, 27, 25, 25, 2962, 16, 25, 46, 27, 30, 30, 25, 27, 56, 40, 27, 56, 73, 31, 31, 25, 28, 67, 67, 30, 32, 28, 31, 40, 32, 28, 73, 32, 28, 92, 28, - 28, 92, 31, 32, 1148, 32, 36, 36, 37, 37, + 28, 92, 31, 32, 1154, 32, 36, 36, 37, 37, 28, 45, 45, 37, 97, 36, 45, 97, 41, 41, 45, 36, 87, 41, 93, 36, 87, 37, 93, 37, @@ -2445,7 +2454,7 @@ static const flex_int16_t yy_chk[7114] = 127, 125, 123, 122, 126, 128, 118, 127, 122, 129, 132, 120, 131, 121, 128, 130, 131, 126, 134, 133, 135, 136, 129, 133, 138, 135, 137, 137, 132, 135, - 139, 141, 142, 144, 139, 257, 134, 257, 146, 150, + 139, 141, 142, 144, 139, 135, 134, 177, 146, 150, 151, 136, 143, 139, 138, 143, 144, 145, 149, 139, 146, 142, 148, 145, 147, 147, 143, 141, 150, 148, @@ -2457,737 +2466,740 @@ static const flex_int16_t yy_chk[7114] = 175, 175, 180, 175, 171, 178, 178, 181, 180, 182, 183, 184, 185, 186, 187, 189, 188, 180, 183, 190, 185, 188, 184, 213, 182, 183, 193, 191, 190, 187, - 177, 193, 186, 191, 191, 189, 194, 194, 195, 197, + 176, 193, 186, 191, 191, 189, 194, 194, 195, 197, 196, 213, 196, 197, 195, 196, 198, 198, 197, 199, 200, 201, 202, 197, 204, 200, 200, 202, 203, 197, 197, 199, 196, 203, 205, 206, 204, 209, 207, 208, - 201, 206, 207, 210, 208, 211, 212, 214, 176, 218, + 201, 206, 207, 210, 208, 211, 212, 214, 174, 218, 215, 217, 214, 209, 205, 215, 217, 210, 212, 219, 211, 212, 216, 216, 206, 220, 216, 224, 216, 218, - 223, 220, 221, 221, 259, 219, 223, 222, 225, 226, - 216, 259, 216, 222, 225, 226, 228, 224, 229, 222, + 223, 220, 221, 221, 260, 219, 223, 222, 225, 226, + 216, 260, 216, 222, 225, 226, 228, 224, 229, 222, 230, 231, 228, 229, 226, 231, 230, 232, 233, 235, 233, 234, 236, 232, 237, 233, 239, 234, 236, 238, - 240, 242, 235, 241, 243, 238, 242, 244, 240, 239, - - 245, 246, 248, 243, 237, 247, 241, 248, 239, 249, - 247, 247, 244, 250, 251, 253, 245, 250, 252, 254, - 255, 246, 258, 256, 252, 254, 260, 249, 256, 261, - 262, 263, 260, 253, 253, 261, 251, 263, 264, 265, - 255, 258, 266, 266, 267, 267, 268, 273, 269, 262, - 264, 276, 268, 265, 269, 270, 271, 270, 272, 273, - 275, 274, 277, 272, 278, 289, 279, 277, 275, 280, - 268, 276, 279, 281, 270, 280, 282, 283, 281, 271, - 274, 282, 284, 283, 285, 286, 287, 278, 288, 290, - 289, 291, 293, 293, 291, 290, 288, 284, 285, 292, - - 287, 292, 294, 286, 295, 294, 296, 296, 297, 297, - 298, 300, 299, 301, 300, 302, 303, 301, 304, 307, - 312, 312, 295, 306, 302, 303, 298, 299, 308, 306, - 309, 316, 309, 307, 308, 310, 311, 304, 313, 314, - 311, 310, 315, 313, 317, 314, 319, 318, 315, 320, - 320, 316, 321, 322, 323, 321, 324, 311, 323, 319, - 325, 327, 317, 326, 326, 329, 328, 315, 318, 328, - 330, 322, 332, 334, 335, 324, 330, 329, 325, 327, - 331, 339, 334, 331, 332, 336, 328, 333, 338, 340, - 336, 338, 335, 174, 339, 337, 333, 342, 337, 333, - - 337, 340, 342, 342, 333, 333, 333, 333, 341, 343, - 341, 341, 343, 337, 344, 344, 337, 345, 346, 349, - 347, 348, 350, 351, 351, 352, 353, 353, 349, 355, - 352, 350, 358, 346, 345, 347, 357, 345, 348, 348, - 354, 354, 356, 359, 355, 360, 361, 356, 357, 364, - 365, 358, 361, 362, 362, 365, 362, 367, 366, 372, - 360, 768, 367, 359, 366, 362, 368, 370, 372, 364, - 369, 368, 362, 369, 374, 369, 371, 368, 768, 371, - 374, 370, 373, 373, 375, 375, 376, 381, 379, 382, - 388, 376, 371, 380, 392, 371, 380, 371, 377, 377, - - 411, 377, 381, 383, 382, 388, 385, 377, 379, 385, - 386, 377, 411, 389, 380, 392, 377, 383, 393, 377, - 378, 378, 389, 378, 386, 385, 390, 391, 398, 395, - 394, 390, 390, 391, 396, 399, 378, 393, 395, 378, - 391, 378, 397, 378, 387, 394, 387, 387, 397, 403, - 400, 405, 404, 396, 398, 399, 387, 387, 387, 387, - 387, 401, 407, 387, 400, 402, 405, 401, 406, 403, - 402, 401, 404, 406, 408, 409, 409, 407, 410, 412, - 408, 413, 414, 415, 416, 418, 419, 413, 402, 416, - 420, 417, 417, 412, 417, 421, 425, 169, 410, 415, - - 425, 422, 419, 422, 428, 418, 420, 414, 423, 421, - 427, 427, 424, 423, 424, 424, 426, 432, 429, 433, - 426, 430, 431, 428, 435, 436, 167, 433, 433, 441, - 435, 432, 424, 429, 436, 426, 439, 430, 437, 433, - 431, 433, 434, 437, 438, 439, 440, 434, 438, 443, - 441, 442, 440, 443, 446, 434, 434, 442, 444, 434, - 434, 444, 445, 434, 447, 447, 448, 445, 449, 449, - 450, 451, 452, 452, 446, 450, 453, 454, 455, 448, - 456, 454, 453, 457, 451, 458, 459, 459, 457, 461, - 458, 460, 462, 455, 463, 459, 464, 465, 470, 464, - - 466, 456, 465, 460, 466, 467, 463, 468, 468, 461, - 462, 469, 471, 471, 472, 477, 469, 467, 476, 470, - 474, 474, 478, 477, 479, 480, 481, 482, 483, 487, - 485, 481, 489, 479, 486, 490, 472, 488, 489, 476, - 483, 507, 493, 478, 490, 507, 480, 482, 485, 487, - 485, 488, 486, 491, 494, 492, 493, 496, 495, 491, - 492, 495, 494, 497, 498, 494, 499, 500, 503, 502, - 505, 496, 499, 498, 501, 502, 504, 501, 497, 506, - 508, 504, 503, 509, 510, 508, 511, 500, 512, 510, - 513, 516, 505, 502, 517, 518, 528, 519, 509, 520, - - 506, 519, 511, 513, 522, 528, 166, 512, 514, 514, - 518, 516, 521, 527, 514, 517, 514, 521, 520, 523, - 522, 524, 514, 523, 514, 525, 524, 514, 514, 527, - 524, 526, 527, 529, 514, 530, 526, 531, 532, 529, - 525, 532, 533, 534, 529, 535, 535, 536, 537, 537, - 530, 538, 539, 531, 540, 542, 526, 541, 541, 543, - 546, 545, 544, 534, 539, 533, 538, 544, 547, 540, - 545, 548, 536, 550, 542, 554, 551, 548, 555, 546, - 551, 543, 550, 547, 552, 553, 556, 554, 552, 557, - 559, 553, 558, 555, 560, 562, 561, 562, 560, 563, - - 565, 565, 564, 557, 567, 556, 566, 558, 559, 561, - 564, 568, 566, 569, 571, 570, 567, 568, 570, 572, - 575, 573, 576, 563, 574, 569, 573, 574, 571, 575, - 578, 579, 579, 587, 572, 577, 575, 586, 576, 575, - 577, 577, 581, 578, 580, 580, 582, 582, 581, 583, - 583, 584, 588, 585, 587, 586, 590, 584, 585, 585, - 589, 590, 591, 589, 588, 592, 593, 594, 595, 593, - 596, 597, 594, 592, 598, 597, 599, 601, 600, 602, - 598, 591, 600, 603, 602, 604, 604, 605, 606, 596, - 609, 595, 608, 607, 610, 601, 599, 603, 607, 611, - - 164, 613, 605, 612, 618, 611, 609, 615, 612, 606, - 614, 608, 617, 614, 610, 613, 616, 616, 614, 619, - 618, 614, 614, 620, 619, 615, 621, 622, 620, 624, - 617, 626, 625, 627, 626, 624, 629, 627, 628, 629, - 621, 625, 622, 628, 630, 631, 632, 633, 635, 630, - 634, 636, 640, 635, 633, 637, 637, 638, 639, 627, - 641, 631, 644, 634, 632, 642, 638, 643, 644, 645, - 650, 636, 162, 640, 642, 645, 641, 639, 646, 643, - 651, 646, 647, 647, 648, 647, 649, 648, 650, 652, - 653, 649, 654, 655, 651, 653, 656, 658, 657, 655, - - 658, 656, 659, 652, 657, 660, 662, 661, 663, 664, - 660, 654, 661, 661, 664, 666, 665, 667, 668, 662, - 669, 663, 665, 668, 670, 670, 667, 659, 664, 664, - 671, 672, 673, 674, 666, 673, 675, 671, 672, 674, - 669, 676, 678, 678, 679, 681, 676, 677, 675, 680, - 673, 680, 677, 677, 683, 682, 676, 682, 684, 685, - 686, 687, 688, 689, 681, 690, 693, 689, 688, 679, - 691, 692, 683, 694, 690, 695, 684, 685, 695, 686, - 696, 687, 697, 698, 693, 691, 692, 695, 697, 700, - 699, 701, 694, 702, 703, 696, 704, 705, 707, 734, - - 704, 700, 706, 698, 699, 708, 709, 710, 712, 716, - 701, 734, 711, 703, 702, 705, 707, 711, 706, 713, - 713, 715, 712, 708, 708, 709, 710, 714, 716, 717, - 718, 714, 719, 720, 721, 715, 723, 719, 722, 726, - 717, 724, 727, 723, 718, 725, 724, 727, 729, 720, - 728, 722, 725, 721, 730, 728, 731, 732, 733, 736, - 743, 730, 735, 726, 736, 731, 729, 733, 735, 737, - 738, 732, 737, 739, 738, 740, 741, 750, 742, 744, - 744, 743, 746, 746, 740, 745, 745, 739, 747, 748, - 752, 741, 742, 747, 745, 751, 750, 754, 748, 753, - - 755, 751, 756, 753, 758, 757, 759, 761, 760, 754, - 752, 757, 758, 759, 762, 765, 772, 774, 771, 776, - 756, 799, 772, 775, 799, 755, 760, 771, 776, 775, - 765, 160, 761, 777, 762, 763, 784, 763, 778, 774, - 763, 781, 778, 782, 763, 779, 779, 763, 783, 777, - 780, 780, 781, 785, 763, 763, 784, 763, 787, 785, - 792, 782, 783, 786, 786, 786, 788, 786, 789, 790, - 786, 788, 791, 793, 794, 786, 791, 793, 787, 794, - 795, 786, 786, 796, 792, 797, 798, 790, 796, 789, - 800, 801, 803, 793, 807, 800, 800, 807, 801, 795, - - 797, 802, 802, 804, 805, 805, 812, 803, 804, 806, - 808, 798, 809, 809, 806, 808, 810, 811, 810, 813, - 814, 818, 815, 813, 816, 812, 817, 817, 819, 811, - 820, 820, 816, 821, 822, 823, 818, 824, 85, 825, - 814, 815, 819, 824, 825, 829, 822, 826, 826, 827, - 829, 821, 830, 831, 827, 827, 832, 823, 830, 833, - 834, 836, 832, 837, 833, 835, 834, 836, 835, 838, - 838, 837, 831, 839, 839, 840, 841, 842, 844, 845, - 843, 847, 842, 840, 843, 844, 846, 848, 848, 849, - 852, 850, 851, 851, 841, 853, 852, 845, 849, 850, - - 847, 855, 846, 856, 857, 860, 858, 859, 860, 862, - 855, 858, 856, 861, 853, 863, 859, 864, 861, 865, - 867, 868, 868, 862, 866, 870, 864, 869, 857, 866, - 866, 872, 865, 873, 867, 874, 871, 876, 874, 876, - 863, 878, 869, 880, 870, 871, 874, 877, 877, 879, - 881, 873, 882, 883, 879, 872, 884, 885, 886, 887, - 888, 889, 878, 887, 880, 890, 885, 892, 891, 893, - 881, 890, 882, 894, 895, 883, 884, 891, 888, 892, - 889, 886, 897, 896, 898, 893, 899, 901, 895, 896, - 897, 899, 894, 900, 900, 902, 903, 904, 898, 905, - - 906, 907, 908, 911, 909, 903, 901, 905, 910, 911, - 912, 913, 914, 915, 916, 902, 912, 904, 914, 920, - 906, 908, 923, 907, 909, 913, 917, 915, 910, 918, - 921, 922, 917, 919, 916, 918, 922, 919, 920, 924, - 924, 925, 921, 923, 928, 926, 927, 925, 929, 927, - 921, 926, 930, 931, 932, 932, 933, 937, 930, 934, - 935, 929, 928, 935, 934, 936, 939, 939, 940, 941, - 936, 936, 937, 931, 933, 938, 935, 942, 935, 938, - 943, 945, 942, 946, 949, 948, 950, 952, 952, 941, - 940, 953, 955, 955, 954, 953, 956, 946, 948, 943, - - 958, 963, 957, 1013, 949, 945, 957, 950, 951, 954, - 963, 951, 959, 951, 961, 958, 1013, 951, 960, 951, - 964, 956, 966, 960, 951, 962, 959, 968, 961, 951, - 962, 962, 965, 969, 964, 967, 965, 966, 969, 968, - 967, 970, 971, 972, 973, 982, 974, 80, 965, 976, - 967, 974, 975, 973, 976, 970, 977, 972, 975, 978, - 979, 979, 977, 971, 980, 978, 981, 982, 983, 980, - 984, 986, 981, 987, 989, 990, 990, 988, 987, 991, - 993, 995, 996, 986, 991, 992, 989, 983, 984, 985, - 985, 988, 994, 992, 997, 985, 993, 985, 998, 1000, - - 995, 996, 999, 985, 998, 1001, 994, 999, 985, 985, - 997, 1000, 1002, 1003, 1004, 985, 1005, 1005, 1006, 1007, - 1009, 1010, 1006, 1001, 1010, 1011, 1009, 1014, 1002, 1012, - 1015, 1003, 1004, 1014, 1012, 1015, 1016, 1018, 1019, 1007, - 1020, 1022, 1021, 1023, 1011, 1025, 1018, 1019, 1021, 1024, - 1022, 1027, 1026, 1038, 1024, 1016, 1020, 1028, 1029, 1030, - 1032, 1037, 1023, 1035, 1031, 1025, 1026, 1029, 1030, 1028, - 1031, 1027, 1033, 1038, 1040, 1037, 1039, 1032, 1033, 1035, - 1041, 1039, 1042, 1043, 1044, 1045, 1048, 1049, 75, 1044, - 1045, 1048, 1054, 1040, 1041, 1053, 1049, 1051, 1043, 1052, - - 1042, 1050, 1050, 1051, 1053, 1052, 1055, 1054, 1057, 1058, - 1063, 1062, 1060, 1060, 1058, 1058, 1060, 1061, 1064, 1055, - 1061, 1065, 1066, 1067, 1057, 1062, 1068, 1069, 1071, 1077, - 1063, 1070, 1068, 74, 1064, 1066, 1072, 1070, 1067, 1065, - 1073, 1072, 1080, 1071, 1075, 1075, 1076, 1069, 1078, 1076, - 1077, 1079, 1081, 1078, 1073, 1082, 1079, 1083, 1080, 1084, - 1082, 1081, 1083, 1086, 1087, 1092, 1088, 1089, 1091, 1086, - 1095, 1084, 1088, 1089, 1090, 1090, 1093, 1091, 1096, 1093, - 1087, 1094, 1094, 1092, 1097, 1099, 1098, 1100, 1095, 1098, - 1101, 1136, 1110, 1100, 1102, 1136, 1101, 1096, 1099, 1105, - - 1102, 1103, 1104, 1106, 1097, 1105, 1103, 1104, 1106, 1107, - 1110, 1109, 1111, 1112, 1115, 1107, 1109, 1113, 1116, 1112, - 1114, 1114, 1113, 1115, 1117, 1118, 1119, 1116, 1120, 1117, - 1121, 1120, 1111, 1121, 1123, 1122, 1124, 1125, 1126, 1123, - 1129, 1127, 1128, 1118, 1132, 1119, 1122, 1127, 1128, 1125, - 1133, 1130, 1131, 1131, 1124, 1129, 1130, 1126, 1134, 1135, - 1137, 1139, 1138, 1132, 1133, 1140, 1142, 1143, 1143, 1145, - 1134, 1138, 1147, 1144, 1145, 1149, 1150, 1135, 1137, 1146, - 1139, 1144, 1151, 1152, 1146, 1142, 1153, 1155, 1152, 1149, - 1140, 1150, 1147, 1156, 1151, 1153, 1154, 1154, 1157, 1156, - - 1158, 1159, 1166, 1160, 1157, 1160, 1159, 1155, 1161, 1162, - 1163, 1165, 1164, 1161, 1168, 1167, 1158, 1164, 1169, 1171, - 1171, 1166, 1167, 1162, 1163, 1172, 1165, 1173, 1174, 1168, - 1175, 1176, 68, 1177, 1180, 1180, 1175, 1169, 1177, 1172, - 1179, 1181, 1184, 1174, 1179, 1173, 1181, 1177, 1183, 1177, - 1186, 1176, 1177, 1182, 1182, 1183, 1184, 1185, 1187, 1188, - 1185, 1189, 1190, 1191, 1192, 1194, 1189, 1193, 1188, 1186, - 1192, 1195, 1193, 1196, 1201, 1191, 1187, 1198, 1198, 1194, - 1199, 1190, 1195, 1200, 1202, 1199, 1203, 1204, 1200, 1202, - 1203, 1205, 1196, 1206, 1201, 1207, 1204, 1208, 1209, 1211, - - 1208, 1212, 1213, 1210, 1214, 63, 1205, 1218, 1206, 1208, - 1210, 1211, 1215, 1209, 1207, 1216, 1219, 1220, 1215, 1217, - 1212, 1222, 1214, 1213, 1221, 1217, 1220, 1218, 1224, 1223, - 1216, 1225, 1227, 1226, 1228, 1231, 1219, 1230, 1227, 1221, - 1222, 1223, 1234, 1230, 1232, 1233, 1236, 1224, 1226, 1235, - 1231, 1236, 1237, 1233, 1228, 1238, 1225, 1239, 1232, 1240, - 1238, 1238, 1234, 1245, 1237, 1235, 1241, 1242, 1242, 1244, - 58, 1246, 1245, 1240, 1247, 1247, 1239, 1246, 1248, 1241, - 1243, 1243, 1244, 1248, 1250, 1243, 1249, 1251, 1243, 1243, - 1250, 1252, 1251, 1243, 1254, 1249, 1252, 1253, 1253, 1243, - - 1255, 1255, 1256, 1243, 1257, 1256, 1259, 1256, 1258, 1260, - 1261, 1262, 1259, 1263, 1264, 1254, 1262, 1265, 1260, 1266, - 1305, 1269, 1305, 1265, 1257, 1266, 1258, 1263, 1267, 1270, - 1261, 1268, 1264, 1267, 1269, 1268, 1271, 1272, 1270, 1273, - 1273, 1271, 1279, 1270, 1277, 1270, 1275, 1270, 1277, 1270, - 1278, 1272, 1274, 1274, 1280, 1274, 1281, 1275, 1282, 1283, - 1279, 1281, 1281, 1280, 1284, 1278, 1285, 1282, 1286, 1284, - 1287, 1288, 1289, 1290, 1291, 1291, 1292, 1286, 1294, 1290, - 1285, 1283, 1295, 1293, 1296, 1297, 1289, 1295, 1292, 1287, - 1288, 1293, 1294, 1298, 1297, 1299, 1300, 1301, 1296, 1303, - - 1298, 1309, 1301, 1302, 1302, 1304, 1304, 1307, 1310, 1312, - 1307, 1308, 1316, 1299, 1303, 1317, 1308, 1310, 1311, 1311, - 1309, 1300, 1313, 1313, 1314, 1314, 1315, 1318, 1321, 1312, - 1320, 1315, 1323, 1316, 1319, 1319, 1317, 1322, 1324, 1328, - 1322, 1325, 1326, 1331, 1324, 1321, 1325, 1327, 1318, 1327, - 1320, 1326, 1323, 1330, 1332, 1333, 1330, 1328, 1331, 1334, - 1333, 1335, 1336, 1337, 1340, 1340, 1335, 1332, 1337, 1338, - 1336, 1339, 1338, 1334, 1341, 1342, 1339, 1343, 1344, 1341, - 1347, 1345, 1348, 1343, 1349, 1344, 1347, 1350, 1348, 1349, - 1351, 1352, 1350, 1342, 1345, 1353, 1351, 1354, 1355, 1355, - - 1352, 1356, 1358, 1360, 1359, 1361, 1362, 1358, 1354, 1363, - 1364, 1365, 1366, 1360, 1353, 1369, 1364, 1365, 1366, 1368, - 1361, 1356, 1359, 1370, 1371, 1368, 1362, 1372, 1373, 1369, - 1374, 1376, 1363, 1375, 1375, 1369, 1377, 1378, 1384, 1372, - 1379, 1381, 1373, 1370, 1371, 1379, 1380, 1380, 1374, 1382, - 1386, 1376, 1388, 1385, 1382, 1378, 1387, 1384, 1385, 1385, - 1388, 1377, 1389, 1390, 1381, 1387, 1391, 1392, 1386, 1394, - 1393, 1394, 1392, 1395, 1397, 1392, 1389, 1399, 1390, 1393, - 1397, 1391, 1398, 1401, 1391, 1400, 1398, 1395, 1399, 1402, - 1400, 1400, 1403, 1404, 1405, 1406, 1407, 1408, 1404, 1405, - - 1406, 1409, 1401, 1410, 1412, 1416, 1409, 1413, 1414, 1416, - 1403, 1415, 1415, 1417, 1407, 1402, 1418, 1408, 1412, 1423, - 1420, 1419, 1421, 1410, 1422, 1413, 1414, 1419, 1426, 1424, - 1425, 1417, 1420, 1423, 1427, 1418, 1430, 1429, 1421, 1427, - 1431, 1428, 1429, 1422, 1424, 1425, 1432, 1426, 1428, 1433, - 1433, 1434, 1436, 1435, 1430, 1432, 1437, 1437, 1438, 1439, - 1440, 1431, 1435, 1444, 1438, 1439, 1434, 1441, 1441, 1442, - 1442, 1443, 1436, 1445, 1440, 1446, 1447, 1443, 1448, 1444, - 1446, 1449, 1447, 1456, 1448, 1450, 1450, 1449, 1451, 1451, - 1453, 1453, 1454, 1455, 1445, 1457, 1454, 1458, 1459, 1460, - - 1462, 1456, 1455, 1461, 1461, 1466, 1460, 1457, 1451, 1463, - 1451, 1458, 1465, 1459, 1464, 1469, 1467, 1463, 1471, 1464, - 1462, 1467, 1467, 1468, 1466, 1472, 1465, 1473, 1468, 1468, - 1470, 1470, 1475, 1474, 1476, 1469, 1473, 1471, 1474, 1477, - 1478, 1480, 1479, 1481, 1472, 1483, 1478, 1479, 1486, 1482, - 1484, 1475, 1485, 1487, 1476, 1482, 1484, 1477, 1485, 1488, - 1489, 1480, 1490, 1491, 1483, 1492, 1496, 1486, 1493, 1481, - 1494, 1494, 1487, 1495, 1497, 1498, 1495, 1491, 1488, 1489, - 1502, 1490, 1503, 1493, 1502, 1496, 1492, 1498, 1499, 1499, - 1500, 1500, 1501, 1497, 1504, 1503, 1505, 1501, 1506, 1510, - - 1506, 1508, 1509, 1504, 1506, 1511, 1512, 1509, 1514, 1505, - 1513, 1513, 1515, 1514, 1510, 1516, 1517, 1506, 1515, 1508, - 1518, 1522, 1512, 1519, 1523, 1511, 1518, 1520, 1519, 1517, - 1516, 1520, 1521, 1525, 1524, 1531, 1521, 1529, 1526, 1527, - 1527, 1522, 1523, 1524, 1526, 1532, 1533, 1533, 1534, 1535, - 1532, 1537, 1537, 1525, 1534, 1529, 1531, 1539, 1540, 1540, - 1539, 1541, 1542, 1543, 1545, 1546, 1548, 1545, 1547, 1535, - 1549, 1550, 1550, 1552, 1551, 1548, 1553, 1541, 1542, 1543, - 1554, 1556, 1555, 1557, 1557, 1554, 1546, 1556, 1547, 1551, - 1549, 1558, 1559, 1560, 1552, 1553, 1555, 1561, 1562, 1564, - - 1558, 1563, 1563, 1565, 1566, 1567, 1568, 1568, 1560, 1566, - 1559, 1569, 1570, 1564, 1572, 1569, 1571, 1571, 1562, 1573, - 1567, 1565, 1561, 1574, 1575, 1576, 1577, 1583, 1575, 1579, - 1579, 1577, 1570, 1581, 1574, 1584, 1572, 1580, 1573, 1586, - 1580, 1585, 1582, 1583, 1576, 1588, 1581, 1582, 1587, 1589, - 1589, 1590, 1591, 1584, 1592, 1585, 1590, 1594, 1586, 1586, - 1593, 1593, 1587, 1595, 1596, 1597, 1594, 1597, 1595, 1599, - 1588, 1598, 1591, 1600, 1592, 1599, 1598, 1601, 1603, 1604, - 1604, 1605, 1606, 1601, 1596, 1608, 1609, 1612, 1606, 1613, - 1608, 1614, 1603, 1600, 1610, 1610, 1611, 1611, 1617, 1615, - - 1605, 1612, 1615, 1616, 1616, 1618, 1614, 1613, 1619, 1620, - 1609, 1623, 1620, 1621, 1623, 1620, 1617, 1618, 1622, 1621, - 1625, 1626, 1627, 1622, 1629, 1629, 1626, 1620, 1619, 1625, - 1623, 1628, 1630, 1631, 1628, 1632, 1638, 1633, 1640, 1631, - 1639, 1632, 1633, 1634, 1634, 1635, 1635, 1627, 1636, 1638, - 1637, 1641, 1648, 1653, 1636, 1637, 1630, 1640, 1639, 1642, - 1643, 1644, 1642, 1645, 1652, 1646, 1643, 1644, 1647, 1645, - 1646, 1641, 1649, 1653, 1647, 1648, 1651, 1649, 1650, 1650, - 1654, 1651, 1652, 1655, 1656, 1660, 1657, 1658, 1659, 1661, - 1662, 1668, 1662, 1661, 1663, 1664, 1666, 1667, 1656, 1654, - - 1657, 1658, 1664, 1655, 1668, 1669, 1659, 1670, 1666, 1667, - 1660, 1669, 1671, 1663, 1672, 1673, 1674, 1675, 1675, 1674, - 1679, 1676, 1678, 1678, 1681, 1684, 1680, 1670, 1671, 1673, - 1676, 1680, 1682, 1682, 1672, 1683, 1681, 1674, 1685, 1684, - 1679, 1686, 1687, 1688, 1690, 1689, 1693, 1691, 1695, 1714, - 1683, 1687, 1689, 1690, 1696, 1714, 1690, 1696, 1688, 1686, - 1699, 1693, 1685, 1691, 1697, 1697, 1693, 1698, 1698, 1700, - 1703, 1701, 1699, 1695, 1701, 1702, 1702, 1704, 1706, 1705, - 1707, 1706, 1708, 1703, 1705, 1707, 1709, 1700, 1710, 1711, - 1713, 1712, 1715, 1715, 1717, 1719, 1704, 1710, 1716, 1713, - - 1712, 1708, 1709, 1712, 1718, 1716, 1720, 1721, 1711, 1724, - 1722, 1727, 1728, 1719, 1717, 1722, 1722, 1718, 1730, 1723, - 1720, 1724, 1731, 1721, 1723, 1729, 1729, 1732, 1732, 1736, - 1728, 1731, 1732, 1734, 1730, 1735, 1727, 1733, 1733, 1737, - 1735, 1738, 1734, 1739, 1741, 1734, 1742, 1736, 1739, 1739, - 1743, 1744, 1733, 1745, 57, 1747, 1744, 1746, 1741, 1738, - 1737, 1742, 1749, 1746, 1748, 1748, 1750, 1745, 1749, 1751, - 1752, 1750, 1743, 1747, 1753, 1755, 1752, 1756, 1757, 1758, - 1753, 1760, 1762, 1751, 1757, 1759, 1764, 1760, 1759, 1765, - 1762, 1756, 1758, 1766, 1759, 1755, 1767, 1768, 1769, 52, - - 1770, 1771, 1768, 1772, 1767, 1764, 1773, 1769, 1765, 1774, - 1771, 1776, 1766, 1770, 1775, 1775, 1772, 1776, 1777, 1778, - 1773, 1779, 1778, 1774, 1777, 1780, 1780, 1781, 1782, 1783, - 1784, 1784, 1785, 1786, 1779, 1787, 1775, 1788, 1789, 1786, - 1791, 1791, 1792, 1795, 1794, 1785, 1782, 1781, 1783, 1794, - 1793, 1799, 1798, 1788, 1793, 1796, 1789, 1787, 1801, 1797, - 1796, 1798, 1792, 1795, 1797, 1803, 1802, 1804, 1803, 1801, - 1805, 1806, 1806, 1807, 1799, 1802, 1808, 1809, 1813, 1804, - 1810, 1810, 1812, 1811, 1816, 1805, 1814, 1817, 1808, 1812, - 1813, 1820, 1807, 1818, 1819, 1821, 1809, 1811, 1814, 1818, - - 1831, 1821, 1831, 1816, 1822, 1822, 1819, 1817, 1823, 1820, - 1826, 1823, 1824, 1824, 1827, 1826, 1828, 1829, 1829, 1830, - 1833, 1832, 1828, 1827, 1832, 1834, 1835, 1836, 1837, 1838, - 1839, 1830, 1842, 1837, 1838, 1841, 1840, 1842, 1844, 1839, - 1833, 1845, 1843, 1853, 1835, 1836, 1845, 1834, 1840, 1846, - 1841, 1843, 1847, 1845, 1846, 1848, 1848, 1849, 1844, 1850, - 1852, 1855, 1853, 1849, 1843, 1854, 1856, 1847, 1857, 1858, - 1857, 1859, 1859, 1860, 1860, 1862, 1852, 1855, 1861, 1861, - 1850, 1863, 1863, 1858, 1854, 1858, 1856, 1864, 1864, 1865, - 1866, 1867, 1868, 1868, 1869, 1862, 1870, 1871, 1869, 1873, - - 1871, 1874, 1870, 1875, 1877, 1873, 1879, 1879, 1876, 1875, - 1865, 1866, 1867, 1876, 1878, 1880, 1881, 1878, 1883, 1874, - 1884, 1881, 1882, 1882, 1891, 1885, 1886, 1887, 1887, 1877, - 1885, 1886, 1888, 1883, 1889, 1880, 1890, 1888, 1892, 1893, - 1889, 1884, 1895, 1896, 1891, 1894, 1897, 1898, 1890, 1890, - 1890, 1894, 1898, 1897, 1901, 1890, 1892, 1902, 1905, 1893, - 1900, 1908, 1895, 1896, 1904, 1900, 1900, 1903, 1901, 1903, - 1906, 1907, 1902, 1905, 1909, 1904, 1906, 1910, 1910, 1911, - 1907, 1908, 1912, 1912, 1913, 1914, 1915, 1915, 1916, 1916, - 1917, 1920, 1920, 1921, 1922, 1909, 1925, 1924, 1927, 1928, - - 1928, 1929, 1926, 1922, 1913, 1911, 1924, 1914, 1926, 1930, - 1917, 1932, 1931, 1933, 1927, 1934, 1934, 1925, 1921, 1931, - 1932, 1935, 1929, 1938, 1930, 1936, 1939, 1940, 1941, 1938, - 1942, 1939, 1943, 1940, 1944, 1946, 1944, 1942, 1943, 1933, - 1947, 1936, 1948, 1948, 1949, 1951, 1947, 1935, 1941, 1949, - 1950, 1952, 1953, 1956, 1946, 1953, 1954, 1955, 1957, 1950, - 1955, 1958, 1958, 1959, 1962, 1951, 1960, 1961, 1954, 1959, - 1952, 1956, 1960, 1963, 1965, 1966, 1967, 1963, 1969, 1962, - 1970, 1967, 1968, 1968, 1957, 1971, 1973, 1961, 1974, 1975, - 1975, 47, 1974, 1963, 1965, 1976, 1982, 1966, 1977, 1970, - - 1971, 1976, 1969, 1978, 1978, 1973, 1979, 1977, 1980, 1983, - 1979, 1981, 1981, 1984, 1986, 1985, 1987, 1982, 1988, 1980, - 1985, 1989, 1990, 1983, 1980, 1992, 1991, 1989, 1998, 1993, - 1992, 1996, 1984, 2000, 1986, 1996, 1987, 1998, 1988, 1999, - 1990, 1991, 1993, 1994, 1994, 1995, 1995, 2001, 2002, 2002, - 1999, 2009, 2001, 2000, 2005, 1999, 2004, 2004, 2006, 2005, - 2005, 2008, 2011, 2010, 2006, 2012, 2014, 2008, 2010, 2015, - 2016, 2012, 2018, 2015, 2011, 2017, 2017, 2009, 2014, 2019, - 2020, 2021, 2016, 2022, 2022, 2019, 2023, 2021, 2024, 2025, - 2029, 2026, 2028, 2030, 2025, 2036, 2032, 2018, 2030, 2032, - - 2033, 2033, 2020, 2026, 2028, 2023, 2034, 2034, 2024, 2029, - 2035, 2035, 2037, 2038, 2040, 2036, 2039, 2041, 2037, 2038, - 2040, 2039, 2043, 2046, 2049, 2045, 2041, 2043, 2045, 2047, - 2047, 2050, 2051, 2052, 2052, 2046, 2049, 2051, 2053, 2054, - 2055, 2057, 2057, 2050, 2054, 2055, 2056, 2053, 2058, 2056, - 2059, 2060, 2061, 2062, 2065, 2063, 2064, 2062, 2066, 2059, - 2063, 2067, 2064, 2068, 2070, 2070, 2071, 2066, 2058, 2060, - 2074, 2061, 2065, 2072, 2073, 2078, 2070, 2068, 2076, 2067, - 2075, 2075, 2072, 2073, 2071, 2077, 2079, 2076, 2080, 2086, - 2074, 2079, 2083, 2083, 2087, 2085, 2078, 2077, 2085, 2088, - - 2091, 2080, 2090, 2092, 2093, 2086, 2094, 2094, 2096, 2092, - 2087, 2095, 2098, 2095, 2091, 2088, 2103, 2090, 2097, 2097, - 2098, 2093, 2100, 2100, 2101, 2101, 2096, 2104, 2105, 2106, - 2107, 2108, 2109, 2104, 2105, 2110, 2110, 2107, 2112, 2103, - 2111, 2111, 2113, 2106, 2114, 2115, 2116, 2117, 2118, 2111, - 2119, 2121, 2109, 2108, 2113, 2124, 2114, 2118, 2116, 2112, - 2115, 2120, 2122, 2125, 2122, 2119, 2120, 2120, 2122, 2128, - 2126, 2127, 2127, 2117, 2121, 2124, 2129, 2130, 2131, 2132, - 2130, 2122, 2126, 2131, 2134, 2136, 2125, 2128, 2135, 2134, - 2135, 2138, 2137, 2140, 2142, 2143, 2129, 2137, 2138, 2132, - - 2146, 2144, 2140, 2136, 2143, 2145, 2150, 2145, 2147, 2149, - 2152, 2149, 2142, 2144, 2147, 2151, 2151, 2153, 2159, 2146, - 2150, 2154, 2153, 2154, 2155, 2156, 2157, 2158, 2160, 2155, - 2156, 2163, 2161, 2162, 2160, 2164, 2152, 2161, 2159, 2165, - 2164, 2164, 2167, 2163, 2157, 2158, 2162, 2165, 2168, 2169, - 2169, 2170, 2170, 2171, 2172, 2173, 2176, 2174, 2176, 2177, - 2175, 2167, 2168, 2174, 2171, 2175, 2178, 2179, 2179, 2172, - 2185, 2180, 2181, 2181, 2178, 2173, 2183, 2177, 2182, 2182, - 2187, 2184, 2178, 2180, 2187, 2183, 2184, 2188, 2185, 2189, - 2190, 2189, 2191, 2192, 2193, 2194, 2188, 2191, 2191, 2188, - - 2196, 2197, 2200, 2193, 2198, 2192, 2197, 2194, 2201, 2198, - 2202, 2190, 2196, 2203, 2203, 2200, 2204, 2205, 2206, 2202, - 2208, 2207, 2211, 2215, 2209, 2210, 2216, 2211, 2201, 2213, - 2214, 2216, 2219, 2225, 2204, 2205, 2206, 2207, 2209, 2217, - 2210, 2213, 2214, 2215, 2217, 2208, 2218, 2222, 2224, 2226, - 2219, 2227, 2228, 2222, 2224, 2218, 2225, 2233, 2229, 2230, - 2230, 2231, 2232, 2232, 2226, 2234, 2222, 2229, 2235, 2227, - 2231, 2236, 2235, 2237, 2239, 2233, 2236, 2228, 2241, 2240, - 2255, 2247, 2242, 2243, 2234, 2240, 2237, 2242, 2242, 2243, - 2244, 2245, 2255, 2239, 2245, 2246, 2244, 2250, 2250, 2252, - - 2241, 2247, 2256, 2246, 2251, 2251, 2253, 2253, 2252, 2254, - 2254, 2257, 2264, 2258, 2259, 2259, 2264, 2257, 2258, 2251, - 2256, 2260, 2260, 2261, 2265, 2262, 2267, 2269, 2261, 2266, - 2251, 2262, 2270, 2266, 2271, 2272, 2273, 2270, 2274, 2275, - 2276, 2273, 2277, 2278, 2265, 2283, 2267, 2277, 2279, 2279, - 2272, 2281, 2269, 2284, 2280, 2275, 2274, 2271, 2280, 2282, - 2276, 2286, 2285, 2283, 2282, 2278, 2281, 2287, 2289, 2288, - 2290, 2291, 2291, 2286, 2288, 2293, 2294, 2295, 2296, 2284, - 2285, 2289, 2297, 2293, 2298, 2299, 2287, 2301, 2290, 2300, - 2302, 2305, 2303, 18, 2307, 2294, 2295, 2296, 2303, 2301, - - 2308, 2311, 2316, 2309, 2299, 2297, 2305, 2307, 2298, 2309, - 2300, 2302, 2315, 2310, 2308, 2310, 2312, 2312, 2313, 2314, - 2317, 2311, 2314, 2313, 2318, 2315, 2316, 2319, 2319, 2320, - 2320, 2321, 2323, 2321, 2317, 2322, 2322, 2318, 2324, 2325, - 2326, 2326, 2328, 2328, 2326, 2329, 2329, 2323, 2330, 2330, - 2331, 2337, 2325, 2324, 2332, 2332, 2333, 2333, 2334, 2331, - 2336, 2338, 2331, 2334, 2339, 2336, 2340, 2340, 2341, 2341, - 2342, 2337, 2343, 2343, 2344, 2346, 2339, 2345, 2345, 2347, - 2350, 2338, 2348, 2348, 2347, 2349, 2349, 2351, 2352, 2342, - 2346, 2354, 2344, 2353, 2350, 2356, 2351, 2357, 2357, 2358, - - 2356, 2359, 2359, 2360, 2361, 2352, 2362, 2353, 2363, 2361, - 2354, 2363, 2362, 2364, 2364, 2365, 2365, 2366, 2358, 2367, - 2368, 2360, 2368, 2370, 2371, 2372, 2372, 2374, 2376, 2364, - 2375, 2377, 17, 2378, 2367, 2380, 2366, 2378, 2370, 2379, - 2379, 2382, 2383, 2371, 2381, 2375, 2377, 2374, 2386, 2381, - 2388, 2376, 2385, 2385, 2380, 2387, 2382, 2383, 2389, 2390, - 2391, 2392, 2387, 2394, 2388, 2393, 2393, 2395, 2386, 2395, - 2396, 2399, 2394, 2396, 2398, 2391, 2389, 2390, 2402, 2400, - 2398, 2401, 2403, 2399, 2400, 2404, 2401, 2392, 2396, 2405, - 2396, 2406, 2408, 2409, 2405, 2403, 2410, 2408, 2409, 2411, - - 2414, 2410, 2412, 2402, 2413, 2415, 2404, 2416, 2412, 2419, - 2413, 2417, 2420, 2416, 2411, 2422, 2417, 2406, 2418, 2421, - 2415, 2414, 2421, 2418, 2423, 2420, 2427, 2424, 2425, 2426, - 2432, 2434, 2450, 2423, 2419, 2422, 2424, 2425, 2426, 2428, - 2427, 2429, 2430, 2435, 2450, 2428, 2430, 2429, 2436, 2436, - 2432, 2434, 2435, 2437, 2438, 2438, 2439, 2440, 2440, 2437, - 2442, 2441, 2444, 2438, 2447, 2439, 2441, 2445, 2446, 2446, - 2451, 2455, 2448, 2452, 2455, 2453, 2457, 0, 2444, 2447, - 2442, 2448, 2442, 2445, 2456, 2458, 2451, 2453, 2452, 2456, - 2459, 2459, 2460, 2460, 2462, 2462, 2457, 2458, 2463, 2464, - - 2465, 2463, 2466, 2467, 2464, 2469, 2465, 2472, 2466, 2468, - 2468, 2471, 2467, 2470, 2470, 2473, 2474, 2474, 2475, 2469, - 2477, 2472, 2476, 2471, 2475, 2477, 2479, 2486, 2480, 2484, - 2479, 2480, 2481, 2481, 2473, 2482, 2476, 2483, 2484, 2485, - 2482, 2487, 2483, 2488, 2488, 2487, 2489, 2486, 2485, 2491, - 2492, 2493, 2494, 2495, 2491, 2497, 2496, 2498, 2499, 2489, - 2496, 2502, 2498, 2500, 2499, 2501, 2501, 2495, 2503, 2500, - 2492, 2493, 2494, 2504, 2506, 2497, 2505, 2507, 2507, 2502, - 2510, 2505, 2509, 2511, 2512, 2513, 0, 2503, 2511, 2514, - 2512, 2513, 2504, 2517, 2509, 2506, 2510, 2514, 2515, 2519, - - 2515, 2520, 2517, 2521, 2521, 2522, 2523, 2523, 2522, 2525, - 2527, 2526, 2525, 2519, 2526, 2520, 2528, 2528, 2531, 2532, - 2533, 2535, 2531, 2534, 2534, 2532, 2538, 2538, 2540, 2542, - 2535, 2543, 2533, 2546, 2547, 2548, 2527, 2549, 2546, 2550, - 2551, 2551, 2549, 2542, 2550, 2555, 2540, 2543, 2553, 2553, - 2556, 2555, 2557, 2557, 2559, 2558, 2548, 2560, 2562, 0, - 2547, 2563, 2560, 2564, 2563, 2568, 2565, 2566, 2566, 2571, - 2556, 2558, 2576, 2569, 2568, 2564, 2559, 2562, 2565, 2569, - 2570, 2572, 2574, 2574, 2577, 2575, 2570, 2571, 2575, 2579, - 2579, 2576, 2580, 2580, 2581, 2582, 2572, 2583, 2584, 2581, - - 2585, 2586, 2577, 2586, 2587, 2585, 2583, 2588, 2589, 2590, - 2591, 2584, 2592, 2582, 2590, 2594, 2594, 2593, 2587, 2598, - 2589, 2588, 2593, 2595, 2595, 2596, 2596, 2597, 2597, 2599, - 2591, 2598, 2592, 2600, 2601, 2601, 2602, 2602, 2600, 2603, - 2603, 2604, 2605, 2606, 2607, 2608, 0, 2599, 2611, 2609, - 2610, 2610, 2614, 2604, 2619, 2606, 2612, 2612, 2613, 2613, - 2615, 2615, 2605, 2614, 2607, 2609, 2608, 2611, 2616, 2617, - 2618, 2621, 2620, 2622, 2619, 2624, 2617, 2620, 2623, 2623, - 2616, 2626, 2618, 2627, 2624, 2625, 2625, 2628, 2629, 2631, - 2630, 2621, 2632, 2622, 2632, 2639, 2633, 2634, 2634, 2636, - - 2628, 2635, 2637, 2627, 2630, 2640, 2641, 2626, 2633, 2643, - 2635, 2631, 2629, 2639, 2636, 2642, 2644, 2637, 2642, 2645, - 2653, 2644, 2655, 2643, 2645, 2646, 2646, 2640, 2654, 2641, - 2647, 2647, 2648, 2648, 2650, 2650, 2652, 2652, 2653, 2654, - 2656, 2655, 2658, 2659, 2660, 2661, 2666, 2662, 2663, 2664, - 2665, 2664, 0, 2667, 2673, 2656, 2662, 2668, 2668, 2670, - 2672, 2659, 2658, 2670, 2666, 2661, 2660, 2679, 2663, 2674, - 2665, 2667, 2671, 2671, 2672, 2677, 2673, 2680, 2674, 2675, - 2675, 2678, 2678, 2681, 2677, 2679, 2682, 2683, 2684, 2685, - 2687, 2688, 2686, 2682, 2691, 2680, 2689, 2689, 2688, 2690, - - 2690, 2681, 2683, 2692, 2693, 2698, 2684, 2685, 2686, 2687, - 2693, 2695, 2695, 2697, 2691, 2696, 2696, 2699, 2700, 2697, - 2701, 2692, 2702, 2698, 2703, 2704, 2704, 2705, 2706, 2703, - 2707, 2708, 2709, 2700, 0, 2699, 2702, 2716, 2710, 2701, - 2712, 2712, 2708, 2710, 2711, 2721, 2711, 2705, 2706, 2713, - 2707, 2713, 2709, 2714, 2714, 2718, 2716, 2719, 2720, 2724, - 2728, 2722, 2723, 2725, 2718, 2721, 2722, 2723, 2729, 2730, - 2720, 2733, 2730, 2731, 2731, 2732, 2719, 2734, 2734, 2724, - 2728, 2735, 2725, 2736, 2737, 2739, 2729, 2740, 2737, 2733, - 2732, 2741, 2735, 2740, 2743, 2741, 2742, 2742, 2736, 2745, - - 2739, 2746, 2747, 2748, 2748, 2750, 2751, 2743, 2752, 2753, - 2753, 2755, 2752, 2759, 2745, 2751, 2760, 2750, 2754, 2754, - 2757, 2746, 2747, 2756, 2756, 2757, 2758, 2761, 2760, 2759, - 2755, 2762, 2762, 2767, 2767, 2758, 2768, 2769, 2769, 2770, - 2771, 2772, 2773, 2776, 2776, 2777, 2774, 2761, 2775, 2778, - 2789, 2773, 2770, 2771, 2772, 2774, 2783, 2775, 2768, 2780, - 2780, 2783, 2785, 2786, 2778, 2777, 2787, 2785, 2788, 2789, - 2790, 2787, 2791, 2793, 2797, 2801, 2788, 2786, 2795, 2790, - 2791, 2796, 2800, 2795, 2798, 2798, 2796, 2800, 2793, 2797, - 2799, 2799, 2802, 2802, 2801, 2803, 2804, 2805, 2806, 2807, - - 0, 2804, 2803, 2808, 2810, 2807, 2809, 2809, 2808, 2811, - 2812, 2812, 2813, 2813, 2811, 2805, 2806, 2816, 2819, 2810, - 2817, 2817, 2818, 2819, 2819, 2818, 2820, 2821, 2822, 2823, - 2816, 2820, 2821, 2824, 2825, 2823, 2826, 2824, 2827, 2825, - 2828, 2829, 2822, 2830, 2831, 2826, 2832, 2833, 2828, 2830, - 2831, 2832, 2837, 2827, 2834, 2834, 2836, 2837, 2838, 2833, - 2840, 2838, 2829, 2836, 2842, 2843, 2844, 2845, 2846, 2842, - 2843, 2844, 2840, 2847, 2848, 2849, 2849, 2850, 2854, 2851, - 2859, 2846, 2847, 2848, 2851, 2845, 2850, 2855, 2856, 2860, - 2861, 0, 2862, 2855, 2856, 2864, 2854, 2863, 2863, 2859, - - 2865, 2870, 2864, 2867, 2868, 2869, 2869, 2871, 2873, 2860, - 2861, 2862, 2867, 2868, 2872, 2872, 2870, 2875, 2877, 2865, - 2878, 2880, 2871, 2881, 2878, 2879, 2879, 2873, 2882, 2881, - 2883, 2884, 2875, 2886, 2882, 2885, 2885, 2884, 2877, 2887, - 2888, 2886, 2890, 2891, 2893, 2888, 2880, 2896, 2883, 2894, - 2893, 2890, 2894, 2895, 2897, 2897, 2891, 2895, 2898, 2900, - 2900, 2896, 2901, 2954, 2887, 2902, 2902, 2903, 2903, 2905, - 2905, 2906, 2907, 2898, 2908, 2906, 2912, 2907, 2910, 2910, - 2901, 2913, 2914, 2908, 2915, 2916, 2913, 2918, 2954, 2915, - 2915, 2919, 2919, 2925, 2914, 2929, 2912, 2916, 2921, 2921, - - 2922, 2922, 2923, 2923, 2926, 2924, 2925, 2918, 2924, 2928, - 2928, 2931, 2935, 2929, 2932, 2932, 2937, 2926, 2933, 2933, - 2934, 2934, 2936, 2936, 2938, 2939, 2940, 2935, 2949, 2937, - 0, 2931, 2940, 2941, 2941, 2945, 2942, 2950, 2946, 2939, - 2942, 2945, 2938, 2946, 2948, 2951, 2952, 2953, 2964, 2948, - 2948, 2949, 2952, 2953, 2955, 2956, 2956, 2950, 2955, 2959, - 2961, 2966, 2966, 2962, 2959, 2951, 2962, 2965, 2961, 2967, - 2965, 2968, 2969, 2964, 2970, 2971, 2968, 2972, 2972, 2973, - 2974, 2975, 2976, 2974, 2977, 3004, 2967, 2967, 2981, 2971, - 2969, 2974, 2977, 2973, 2970, 2975, 0, 2979, 2991, 2980, - - 3004, 2976, 2979, 2979, 2980, 2980, 2988, 2981, 2982, 2982, - 2983, 2983, 2984, 2984, 2985, 2985, 2986, 2986, 2987, 2987, - 2989, 2990, 2988, 2992, 2991, 2989, 2993, 2994, 2995, 2996, - 2997, 2993, 2998, 2995, 2999, 3001, 3001, 2992, 2996, 3002, - 3002, 2990, 3003, 3005, 3005, 3003, 2994, 3006, 3007, 0, - 2997, 3010, 2998, 3006, 2999, 3009, 3009, 3012, 3010, 3011, - 3011, 3015, 3012, 3014, 3014, 3016, 3007, 3017, 3018, 3020, - 3015, 3021, 3021, 3024, 3016, 3025, 3017, 3018, 3022, 3022, - 3023, 3026, 3024, 3027, 3023, 3028, 3030, 3020, 3031, 3032, - 3028, 3028, 3026, 3032, 3025, 3036, 3038, 3031, 3027, 3030, - - 3036, 3037, 3037, 3040, 3040, 3041, 3042, 3043, 3045, 3045, - 3038, 3046, 3047, 3051, 3053, 3055, 3052, 3058, 3060, 3041, - 3046, 3052, 3056, 3053, 3047, 3043, 0, 3062, 3056, 3058, - 3068, 3042, 3062, 3064, 3064, 3055, 3063, 3065, 3051, 3060, - 3067, 3063, 3069, 3068, 3076, 3067, 3065, 3070, 3070, 3072, - 3072, 3070, 3073, 3073, 3074, 3074, 3069, 3075, 3077, 0, - 3078, 3080, 3084, 3081, 3076, 3078, 3075, 3080, 3081, 3082, - 3083, 3083, 3085, 3086, 3082, 3088, 3087, 3077, 3090, 3089, - 3084, 3087, 3091, 3091, 3085, 3089, 3093, 3094, 3096, 3096, - 3093, 3095, 3094, 3088, 3086, 3097, 3095, 3098, 3099, 3101, - - 3103, 3103, 3105, 3090, 3106, 3107, 3108, 3109, 3110, 3111, - 3108, 3114, 3098, 3099, 3097, 3105, 3109, 3106, 3107, 3101, - 3113, 3112, 3115, 3115, 3110, 3113, 3116, 3117, 3111, 3112, - 3118, 3114, 3119, 3119, 3121, 3116, 3120, 3120, 3124, 3130, - 3125, 3127, 3134, 3124, 3124, 3117, 3135, 3127, 3128, 3128, - 3132, 3132, 3136, 3121, 3125, 3137, 3118, 3136, 3134, 3138, - 3130, 3142, 3135, 3143, 3138, 3141, 3141, 3144, 3145, 3146, - 3149, 3137, 3143, 3144, 3148, 3148, 3150, 3151, 3151, 3153, - 3155, 3142, 3157, 3156, 3149, 3153, 3159, 3157, 3146, 3156, - 3162, 3145, 3160, 3160, 3163, 3150, 3161, 3161, 3164, 3164, - - 3155, 3165, 3166, 3167, 3168, 3162, 3169, 3170, 3159, 3171, - 3168, 3166, 3165, 3173, 3163, 3172, 3172, 3174, 3164, 3170, - 3174, 3175, 3180, 3167, 3175, 3169, 3176, 3176, 3173, 3171, - 3181, 3182, 3183, 3183, 3180, 3184, 3185, 3182, 3184, 3186, - 3188, 3190, 3185, 3189, 3189, 3188, 3190, 3191, 3192, 3196, - 3181, 3193, 3194, 3194, 3192, 3197, 3198, 3186, 3199, 3200, - 3200, 3196, 3202, 3201, 3217, 3203, 3191, 3208, 3193, 3193, - 3217, 3199, 3208, 3197, 3203, 3205, 3205, 3209, 3202, 3206, - 3206, 3198, 3201, 3207, 3207, 3210, 3211, 3211, 3212, 3212, - 3210, 3209, 3213, 3213, 3214, 3214, 3215, 3216, 3218, 3221, - - 3221, 3222, 3227, 3218, 3224, 3224, 3225, 3225, 3229, 3215, - 3230, 3232, 3231, 3233, 3233, 3235, 3235, 3222, 3236, 3237, - 3238, 3227, 3239, 3216, 3241, 3241, 3240, 3242, 3242, 3244, - 3229, 3231, 3230, 3232, 3238, 3240, 3246, 3245, 3237, 3247, - 3248, 3251, 3239, 3245, 3236, 3248, 3256, 3244, 3252, 3252, - 3254, 3254, 3255, 3257, 3258, 3259, 3246, 3255, 3247, 3257, - 3256, 3265, 3251, 3259, 3260, 3260, 3258, 3261, 3266, 3263, - 3264, 3267, 3261, 3263, 3268, 3264, 3267, 3269, 3272, 3271, - 3273, 3265, 3274, 3269, 3283, 3276, 3268, 3271, 3266, 3277, - 3278, 3279, 0, 3280, 3282, 3284, 3287, 3272, 3280, 3282, - - 3273, 3284, 3274, 3276, 3283, 3277, 3285, 3278, 3278, 3289, - 3288, 3285, 3279, 3288, 3293, 3293, 3287, 3294, 3294, 3295, - 3300, 3300, 3289, 3295, 3301, 3302, 3303, 3303, 3305, 3301, - 3308, 3308, 3309, 3309, 3313, 3309, 3310, 3310, 3313, 3310, - 3311, 3311, 3315, 3305, 3302, 3312, 3312, 3315, 3312, 3316, - 3317, 3317, 3318, 3319, 3322, 3322, 3323, 3324, 3316, 3325, - 3326, 3326, 3327, 3330, 3325, 3331, 3333, 3319, 3334, 3332, - 3318, 3336, 3331, 3332, 3337, 3333, 3323, 3324, 3339, 3337, - 3338, 3338, 3327, 3334, 3340, 3340, 3343, 3339, 3330, 3336, - 3341, 3341, 3342, 3342, 3344, 3345, 3348, 3346, 3349, 3344, - - 3347, 3343, 3346, 3346, 3345, 3350, 3347, 3345, 3353, 3351, - 3352, 3354, 3354, 3349, 3351, 3352, 3355, 3356, 3357, 3357, - 3359, 3348, 3355, 3356, 3358, 3358, 3350, 3353, 3360, 3363, - 3363, 3365, 3365, 3360, 3366, 3359, 3368, 3370, 3370, 3371, - 3371, 3372, 3372, 3366, 3373, 3373, 3375, 3375, 3376, 3376, - 3377, 3377, 3378, 3378, 3368, 3379, 3381, 3382, 3382, 3383, - 3383, 3384, 3385, 3386, 3391, 3381, 3388, 3388, 3389, 3392, - 3384, 3390, 3390, 3393, 3385, 3394, 3394, 3395, 3395, 3391, - 3397, 3379, 3392, 3386, 3401, 3393, 3403, 3389, 3398, 3398, - 3402, 3404, 3404, 3402, 3407, 3397, 3405, 3407, 3408, 3409, - - 3410, 3411, 3401, 3412, 3408, 3410, 3413, 3416, 3423, 3415, - 3420, 3424, 3403, 3409, 3405, 3415, 3416, 3438, 3438, 3419, - 3411, 3412, 3413, 3419, 3433, 3420, 3437, 3434, 3443, 3433, - 3434, 3424, 3439, 3439, 3423, 3441, 3441, 3444, 3445, 3437, - 3446, 3448, 3445, 3450, 3452, 3451, 3444, 3454, 3453, 3452, - 3453, 3443, 3455, 3455, 3456, 3448, 3451, 3457, 3459, 3458, - 3446, 3460, 3454, 3461, 3462, 3464, 3450, 3456, 3463, 3465, - 3464, 3474, 3467, 3462, 3459, 3469, 3457, 3458, 3461, 3466, - 3463, 3468, 3468, 3470, 3466, 3474, 3460, 3475, 3470, 3477, - 3465, 3467, 3476, 3476, 3482, 3469, 3478, 3478, 3477, 3479, - - 3479, 3480, 3480, 3481, 3481, 3483, 3484, 3475, 3487, 3484, - 3485, 3486, 3488, 3482, 3489, 3485, 3486, 3490, 3491, 3492, - 3489, 3493, 3493, 3494, 3492, 3483, 3499, 3488, 3495, 3495, - 3491, 3490, 3500, 3487, 3496, 3496, 3498, 3498, 3501, 3501, - 3503, 3499, 3505, 3494, 3508, 3508, 3509, 3509, 3510, 3511, - 3514, 3500, 3512, 3513, 3515, 3503, 3510, 3516, 3512, 3513, - 3505, 3517, 3518, 3518, 3514, 3524, 3517, 3515, 3511, 3520, - 3520, 3525, 3530, 3527, 3528, 3531, 3516, 3532, 3528, 3535, - 3531, 3533, 3534, 3536, 3537, 3541, 3524, 3527, 3536, 3537, - 3542, 3525, 3530, 3543, 3533, 3534, 3532, 3546, 3535, 3538, - - 3538, 3544, 3544, 3546, 3545, 3541, 3547, 3547, 3542, 3545, - 3548, 3549, 3543, 3550, 3551, 3548, 3549, 3552, 3550, 3554, - 3554, 3555, 3559, 3552, 3556, 3556, 3555, 3558, 3560, 3561, - 3562, 3558, 3563, 3551, 3564, 3560, 3572, 3565, 3563, 3567, - 3567, 3559, 3569, 3569, 3573, 3570, 3571, 3574, 3561, 3562, - 3565, 3571, 3577, 3564, 3570, 3572, 3576, 3570, 3575, 3575, - 3574, 3576, 3579, 3573, 3581, 3577, 3580, 3580, 3582, 3582, - 3583, 3583, 3584, 3585, 3586, 3587, 3587, 3584, 0, 3588, - 3585, 3590, 3590, 3581, 3588, 3589, 3593, 3589, 3579, 3591, - 3592, 3595, 3598, 3586, 3594, 3602, 3591, 3592, 3600, 3594, - - 3597, 3597, 3601, 3600, 3603, 3593, 3607, 3601, 3604, 3604, - 3595, 3598, 3606, 3606, 3602, 3608, 3609, 3609, 3610, 3610, - 3611, 3613, 3613, 3603, 3615, 3607, 3621, 3611, 3614, 3614, - 3617, 3615, 3620, 3622, 3608, 3617, 0, 3620, 3623, 3623, - 3624, 3624, 0, 0, 0, 3621, 0, 0, 0, 0, - 0, 0, 3622, 3628, 3628, 3628, 3628, 3628, 3628, 3628, - 3629, 3629, 3629, 3629, 3629, 3629, 3629, 3630, 3630, 3630, - 3630, 3630, 3630, 3630, 3631, 3631, 3631, 3631, 3631, 3631, - 3631, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3633, 3633, - 3633, 3633, 3633, 3633, 3633, 3634, 3634, 3634, 3634, 3634, - - 3634, 3634, 3636, 3636, 0, 3636, 3636, 3636, 3636, 3637, - 3637, 0, 0, 0, 3637, 3637, 3638, 3638, 0, 0, - 3638, 0, 3638, 3639, 0, 0, 0, 0, 0, 3639, - 3640, 3640, 0, 0, 0, 3640, 3640, 3641, 0, 0, - 0, 0, 0, 3641, 3642, 3642, 0, 3642, 3642, 3642, - 3642, 3643, 0, 0, 0, 0, 0, 3643, 3644, 3644, - 0, 0, 0, 3644, 3644, 3645, 3645, 0, 3645, 3645, - 3645, 3645, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - - 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627, - 3627, 3627, 3627 + 240, 243, 235, 241, 242, 238, 243, 244, 245, 239, + + 246, 241, 247, 250, 237, 248, 244, 242, 239, 252, + 248, 248, 249, 245, 240, 251, 246, 249, 253, 251, + 254, 250, 247, 255, 253, 256, 258, 257, 258, 255, + 259, 252, 257, 263, 261, 262, 264, 266, 254, 254, + 261, 262, 264, 265, 269, 256, 267, 267, 272, 259, + 269, 266, 263, 268, 268, 265, 270, 271, 273, 271, + 274, 275, 270, 273, 277, 276, 279, 292, 269, 278, + 292, 272, 274, 276, 278, 280, 271, 281, 285, 287, + 275, 280, 282, 281, 277, 283, 284, 282, 286, 279, + 283, 288, 284, 285, 290, 289, 296, 287, 291, 293, + + 299, 293, 286, 289, 291, 288, 294, 294, 295, 297, + 297, 295, 298, 298, 296, 300, 299, 301, 302, 290, + 301, 305, 302, 303, 304, 307, 169, 308, 309, 317, + 300, 307, 303, 304, 309, 310, 311, 310, 318, 312, + 305, 308, 311, 312, 313, 313, 314, 315, 316, 317, + 319, 314, 320, 315, 316, 325, 318, 321, 321, 322, + 312, 323, 322, 324, 326, 320, 328, 324, 327, 327, + 167, 319, 329, 316, 325, 329, 330, 331, 332, 323, + 335, 332, 326, 331, 328, 333, 336, 340, 330, 335, + 337, 338, 329, 341, 338, 337, 338, 333, 334, 339, + + 340, 166, 339, 344, 336, 341, 344, 334, 347, 338, + 334, 342, 338, 342, 342, 334, 334, 334, 334, 343, + 345, 345, 346, 347, 343, 343, 348, 349, 350, 351, + 352, 352, 354, 354, 356, 353, 357, 350, 351, 346, + 353, 348, 346, 358, 349, 349, 355, 355, 358, 359, + 360, 357, 361, 362, 363, 364, 364, 366, 364, 356, + 363, 359, 372, 375, 375, 367, 369, 364, 362, 360, + 367, 369, 361, 368, 364, 370, 372, 366, 371, 368, + 370, 371, 373, 371, 374, 373, 370, 378, 376, 377, + 377, 381, 378, 374, 376, 383, 416, 382, 373, 384, + + 382, 373, 385, 373, 379, 379, 388, 379, 390, 387, + 383, 381, 387, 379, 384, 391, 385, 379, 382, 394, + 388, 416, 379, 390, 391, 379, 380, 380, 387, 380, + 392, 393, 395, 396, 397, 392, 392, 393, 398, 401, + 394, 400, 380, 397, 393, 380, 164, 380, 396, 380, + 389, 395, 389, 389, 399, 405, 402, 398, 407, 401, + 399, 406, 389, 389, 389, 389, 389, 400, 403, 389, + 402, 404, 408, 407, 403, 405, 404, 408, 403, 410, + 409, 406, 411, 411, 412, 410, 413, 414, 418, 417, + 415, 420, 421, 418, 404, 409, 415, 422, 413, 419, + + 419, 414, 419, 423, 412, 417, 162, 424, 421, 424, + 425, 420, 430, 422, 431, 425, 426, 423, 426, 426, + 427, 428, 429, 429, 427, 428, 432, 433, 437, 431, + 434, 430, 438, 440, 437, 443, 426, 440, 435, 160, + 428, 438, 432, 439, 434, 433, 435, 435, 439, 442, + 441, 444, 448, 449, 449, 442, 443, 444, 435, 441, + 435, 436, 446, 445, 447, 446, 436, 445, 450, 447, + 451, 451, 448, 453, 436, 436, 454, 454, 436, 436, + 452, 450, 436, 455, 456, 452, 453, 457, 456, 455, + 458, 459, 460, 462, 461, 461, 459, 460, 463, 464, + + 465, 466, 457, 461, 466, 462, 468, 469, 467, 472, + 468, 458, 465, 467, 470, 470, 471, 464, 463, 469, + 474, 471, 473, 473, 476, 476, 478, 479, 480, 481, + 472, 482, 483, 484, 485, 479, 487, 483, 481, 488, + 489, 491, 474, 495, 490, 492, 485, 478, 495, 480, + 490, 492, 482, 484, 487, 491, 487, 488, 493, 494, + 489, 496, 497, 498, 499, 494, 498, 493, 500, 503, + 497, 501, 506, 497, 504, 496, 502, 504, 499, 505, + 501, 509, 502, 500, 508, 505, 506, 507, 511, 503, + 510, 513, 507, 511, 510, 512, 513, 514, 515, 516, + + 519, 520, 509, 505, 535, 522, 508, 535, 521, 522, + 512, 523, 516, 514, 85, 525, 524, 515, 517, 517, + 519, 524, 520, 521, 517, 526, 517, 528, 529, 526, + 523, 525, 517, 529, 517, 530, 527, 517, 517, 531, + 533, 527, 528, 534, 517, 527, 532, 536, 531, 537, + 539, 530, 532, 529, 530, 533, 541, 532, 543, 534, + 538, 538, 540, 540, 542, 544, 544, 545, 546, 537, + 536, 541, 547, 543, 548, 539, 542, 547, 549, 550, + 553, 551, 559, 548, 554, 558, 545, 551, 554, 553, + 546, 555, 556, 557, 550, 555, 560, 549, 556, 561, + + 558, 559, 562, 563, 564, 557, 565, 563, 565, 566, + 560, 567, 568, 568, 561, 569, 570, 564, 571, 567, + 562, 569, 572, 573, 571, 574, 573, 575, 570, 577, + 576, 578, 577, 566, 572, 576, 579, 80, 580, 574, + 578, 581, 575, 580, 580, 582, 582, 578, 583, 583, + 578, 584, 579, 589, 581, 585, 585, 584, 586, 586, + 587, 590, 588, 591, 594, 593, 587, 588, 588, 592, + 593, 589, 592, 595, 596, 591, 598, 596, 599, 597, + 601, 595, 590, 594, 597, 600, 601, 602, 603, 600, + 604, 605, 603, 607, 607, 606, 605, 599, 608, 598, + + 609, 610, 612, 611, 613, 614, 610, 602, 604, 606, + 615, 614, 616, 608, 618, 615, 620, 617, 612, 621, + 617, 609, 611, 624, 613, 617, 616, 625, 617, 617, + 619, 619, 618, 622, 620, 621, 623, 624, 622, 627, + 628, 623, 625, 629, 630, 627, 629, 631, 630, 628, + 632, 633, 631, 632, 635, 634, 633, 636, 638, 639, + 637, 640, 640, 638, 636, 641, 642, 643, 644, 645, + 630, 634, 635, 637, 641, 646, 647, 648, 645, 639, + 653, 75, 647, 648, 644, 642, 649, 646, 643, 649, + 650, 650, 651, 650, 652, 651, 654, 655, 653, 652, + + 656, 657, 658, 662, 659, 656, 660, 664, 658, 659, + 654, 655, 660, 661, 663, 670, 661, 666, 667, 663, + 657, 665, 74, 664, 668, 673, 665, 665, 662, 668, + 666, 667, 669, 671, 670, 672, 674, 674, 669, 675, + 672, 676, 671, 668, 668, 673, 675, 677, 676, 678, + 677, 679, 680, 681, 683, 678, 685, 680, 681, 681, + 682, 682, 684, 679, 684, 677, 686, 680, 686, 687, + 688, 689, 690, 691, 692, 685, 694, 693, 697, 683, + 692, 693, 695, 696, 698, 694, 700, 687, 688, 689, + 702, 690, 699, 691, 701, 699, 697, 695, 696, 703, + + 701, 700, 704, 698, 699, 705, 706, 707, 708, 710, + 702, 709, 708, 703, 704, 711, 712, 713, 714, 717, + 717, 720, 68, 715, 705, 710, 707, 706, 715, 709, + 716, 719, 721, 711, 712, 712, 713, 714, 718, 722, + 720, 723, 718, 721, 716, 719, 723, 724, 725, 726, + 727, 728, 729, 722, 730, 731, 728, 727, 733, 729, + 731, 732, 726, 724, 734, 735, 732, 725, 736, 738, + 737, 734, 743, 747, 735, 740, 733, 739, 730, 737, + 740, 738, 736, 739, 741, 742, 743, 741, 744, 742, + 745, 754, 746, 752, 747, 748, 748, 744, 749, 749, + + 750, 750, 752, 751, 756, 745, 746, 749, 751, 755, + 754, 758, 757, 759, 760, 755, 757, 764, 762, 761, + 763, 765, 766, 758, 756, 761, 762, 763, 769, 778, + 775, 772, 760, 820, 776, 764, 780, 781, 759, 775, + 776, 820, 766, 769, 779, 780, 765, 767, 772, 767, + 779, 778, 767, 781, 782, 786, 767, 785, 782, 767, + 783, 783, 784, 784, 787, 788, 767, 767, 785, 767, + 789, 791, 792, 786, 793, 796, 789, 792, 787, 794, + 795, 799, 802, 63, 795, 788, 790, 790, 790, 798, + 790, 791, 797, 790, 798, 793, 797, 794, 790, 796, + + 799, 800, 801, 805, 790, 790, 800, 802, 803, 804, + 805, 803, 797, 807, 804, 804, 808, 801, 806, 806, + 810, 808, 809, 809, 811, 810, 812, 811, 807, 813, + 813, 812, 814, 815, 814, 816, 817, 818, 822, 819, + 817, 821, 821, 824, 824, 815, 823, 825, 827, 826, + 828, 830, 830, 822, 816, 835, 828, 818, 819, 829, + 823, 826, 831, 834, 829, 825, 833, 831, 831, 834, + 827, 833, 836, 838, 835, 837, 840, 841, 836, 838, + 837, 839, 840, 844, 839, 841, 842, 842, 843, 843, + 845, 844, 846, 848, 847, 849, 850, 846, 847, 851, + + 848, 852, 852, 854, 856, 853, 855, 855, 845, 857, + 856, 854, 850, 849, 853, 858, 860, 861, 851, 862, + 864, 865, 867, 863, 865, 860, 861, 857, 863, 864, + 866, 868, 869, 870, 858, 866, 867, 872, 874, 871, + 875, 869, 877, 862, 871, 871, 870, 873, 873, 876, + 878, 872, 879, 874, 883, 879, 868, 885, 876, 875, + 881, 886, 881, 879, 882, 882, 877, 884, 878, 887, + 888, 889, 884, 890, 891, 883, 892, 893, 885, 894, + 892, 886, 890, 58, 895, 896, 898, 897, 899, 887, + 895, 889, 888, 902, 896, 893, 900, 891, 894, 897, + + 901, 902, 898, 903, 904, 906, 901, 899, 907, 904, + 900, 905, 905, 908, 909, 910, 911, 903, 912, 913, + 916, 914, 908, 910, 906, 915, 916, 917, 907, 918, + 920, 919, 921, 917, 909, 924, 911, 919, 913, 924, + 912, 914, 922, 918, 920, 915, 925, 923, 922, 926, + 927, 928, 921, 923, 930, 927, 929, 929, 931, 932, + 930, 926, 932, 933, 931, 925, 934, 935, 936, 926, + 937, 937, 928, 935, 938, 939, 942, 945, 941, 934, + 939, 933, 940, 941, 941, 940, 943, 946, 936, 948, + 943, 942, 938, 944, 944, 950, 947, 951, 940, 945, + + 940, 947, 953, 954, 955, 957, 957, 946, 948, 958, + 964, 951, 959, 958, 961, 953, 960, 960, 962, 950, + 966, 963, 962, 954, 964, 955, 956, 959, 965, 956, + 57, 956, 968, 965, 966, 956, 963, 956, 967, 961, + 969, 968, 956, 967, 967, 970, 973, 956, 971, 970, + 972, 974, 975, 976, 969, 972, 974, 977, 973, 978, + 52, 970, 979, 971, 980, 972, 975, 979, 978, 982, + 980, 977, 981, 983, 976, 982, 986, 981, 985, 983, + 984, 984, 986, 985, 987, 988, 991, 989, 992, 993, + 994, 995, 995, 992, 996, 998, 999, 1000, 991, 996, + + 1001, 997, 994, 993, 988, 989, 987, 990, 990, 997, + 999, 998, 1002, 990, 1003, 990, 1000, 1004, 1005, 1001, + 1003, 990, 1004, 1006, 1007, 1008, 990, 990, 1002, 1009, + 1005, 1010, 1010, 990, 1011, 1012, 1014, 1016, 1011, 1017, + 1007, 1006, 1014, 1008, 1017, 1015, 1018, 1009, 1015, 1020, + 1021, 1019, 1023, 1024, 1020, 1012, 1016, 1019, 1025, 1018, + 1026, 1023, 1024, 1027, 1028, 1029, 1026, 1030, 1031, 1021, + 1029, 1032, 1027, 1033, 1025, 1034, 1037, 1035, 1042, 1043, + 1040, 1045, 1031, 1028, 1034, 1033, 1035, 1030, 1036, 1038, + 1046, 1032, 1042, 1037, 1036, 1038, 1040, 1044, 1047, 1043, + + 1045, 1049, 1044, 1048, 1046, 1050, 1049, 1053, 1054, 1056, + 1050, 1058, 1053, 1055, 1055, 1056, 1047, 1054, 1048, 1057, + 1058, 1059, 1060, 1062, 1063, 1057, 1066, 1065, 1065, 1063, + 1063, 1065, 1068, 1069, 1067, 1060, 1059, 1067, 1070, 1062, + 1071, 1066, 1072, 1074, 1073, 1075, 1068, 1077, 1082, 1074, + 1076, 1082, 1078, 1069, 1070, 1072, 1076, 1078, 1071, 1073, + 1079, 1083, 1077, 1081, 1081, 1075, 1084, 1085, 1086, 1087, + 1088, 1084, 1085, 1090, 1079, 1088, 1089, 1092, 1087, 1093, + 1094, 1089, 1083, 1092, 1086, 1090, 1094, 1095, 1096, 1096, + 1097, 1098, 1101, 1095, 1099, 1093, 1102, 1099, 1103, 1097, + + 1100, 1100, 1104, 1105, 47, 1104, 1106, 1107, 1108, 1098, + 1101, 1116, 1106, 1107, 1108, 1102, 1105, 1109, 1103, 1110, + 1111, 1113, 1109, 1112, 1110, 1115, 1111, 1113, 1112, 1116, + 1115, 1117, 1118, 1121, 1119, 1120, 1120, 1122, 1118, 1119, + 1123, 1124, 1121, 1125, 1126, 1123, 1122, 1126, 1129, 1127, + 1128, 1117, 1127, 1129, 1130, 1131, 1132, 1133, 1134, 1124, + 1138, 1128, 1125, 1133, 1134, 1135, 1136, 1131, 1137, 1137, + 1139, 1136, 1130, 1140, 1141, 1132, 1143, 1142, 1144, 1138, + 1135, 1142, 1145, 1146, 1139, 1140, 1148, 1144, 1149, 1149, + 1150, 1151, 1141, 1153, 1143, 1152, 1151, 1155, 1150, 1156, + + 1152, 1145, 1158, 1157, 1161, 1148, 1162, 1158, 1146, 1159, + 1164, 1155, 1162, 1153, 1156, 1157, 1160, 1160, 1159, 1163, + 1168, 1166, 1165, 1166, 1161, 1163, 1164, 1165, 1167, 1169, + 1170, 1171, 1172, 1167, 1168, 1170, 1175, 1173, 1174, 1177, + 1177, 1179, 1178, 1169, 1173, 1180, 1171, 1182, 1181, 1186, + 1186, 1172, 1183, 1174, 1181, 1175, 1178, 1183, 1185, 1179, + 1180, 1190, 1185, 1189, 1187, 1192, 1183, 1182, 1183, 1187, + 1189, 1183, 1188, 1188, 1191, 1190, 1193, 1191, 1194, 1196, + 1195, 1197, 1198, 1200, 1192, 1195, 1199, 1194, 1198, 1201, + 1202, 1199, 1207, 1197, 1193, 1204, 1204, 1200, 1196, 1205, + + 1201, 1206, 1208, 1211, 1205, 1212, 1206, 1208, 1210, 1202, + 1209, 1213, 1207, 1214, 1209, 1216, 1214, 1210, 1211, 1215, + 1212, 1217, 1216, 1218, 1219, 1214, 1220, 1224, 1222, 1221, + 1213, 1223, 1225, 1217, 1215, 1221, 1227, 1223, 1228, 1226, + 1230, 1229, 1218, 1222, 1220, 1219, 1231, 1224, 1226, 1232, + 1233, 1227, 1225, 1229, 1234, 1236, 1233, 1228, 1237, 1230, + 1239, 1236, 1238, 1240, 1232, 1241, 1243, 1242, 1239, 1245, + 1299, 1231, 1242, 1237, 1234, 1246, 1238, 1247, 1243, 1244, + 1250, 1241, 1299, 1240, 1244, 1244, 1248, 1248, 1245, 1246, + 1247, 1249, 1249, 1250, 1251, 1252, 1249, 1253, 1253, 1249, + + 1249, 1252, 1254, 1251, 1249, 1256, 1255, 1254, 1257, 1260, + 1249, 1256, 1258, 1257, 1249, 1255, 1263, 1258, 1259, 1259, + 1261, 1261, 1262, 1264, 1266, 1262, 1265, 1262, 1267, 1268, + 1260, 1269, 1265, 1266, 1268, 1270, 1263, 1271, 1272, 1275, + 1276, 1264, 1273, 1271, 1272, 1269, 1274, 1273, 1267, 1276, + 1274, 1278, 1275, 1270, 1276, 1285, 1276, 1277, 1276, 1281, + 1276, 1284, 1277, 1279, 1279, 1278, 1280, 1280, 1283, 1280, + 1281, 1286, 1283, 1287, 1288, 1285, 1284, 1289, 1290, 1288, + 1288, 1292, 1287, 1291, 1293, 1294, 1289, 1295, 1291, 1286, + 1297, 1296, 18, 1293, 1300, 1292, 1297, 1298, 1298, 1301, + + 1290, 1303, 1300, 1302, 1294, 1296, 1295, 1304, 1302, 1306, + 1305, 1307, 1316, 1301, 1308, 1303, 1304, 1305, 1310, 1308, + 1309, 1309, 1311, 1311, 1312, 1314, 1312, 1306, 1314, 1315, + 1317, 1316, 1319, 1310, 1315, 1323, 1307, 1318, 1318, 1317, + 1320, 1320, 1321, 1321, 1322, 1324, 1325, 1326, 1326, 1322, + 1327, 1328, 1319, 1330, 1329, 1331, 1323, 1329, 1332, 1335, + 1333, 1331, 1334, 1332, 1334, 1338, 1324, 1325, 1328, 1333, + 1327, 1337, 1339, 1330, 1337, 1341, 1340, 1335, 1342, 1343, + 1338, 1340, 1349, 1342, 1405, 1339, 1344, 1343, 1405, 1341, + 1345, 1344, 1346, 1345, 1347, 1347, 1348, 1346, 1350, 1351, + + 1349, 1348, 1352, 1354, 1350, 1355, 1351, 1356, 1357, 1354, + 1358, 1355, 1356, 1357, 1359, 1352, 1358, 1360, 1361, 1362, + 1362, 1363, 1365, 1359, 1366, 1367, 1369, 1365, 1368, 1361, + 1370, 1371, 1372, 1373, 1375, 1367, 1360, 1371, 1372, 1373, + 1375, 1363, 1366, 1368, 1376, 1377, 1369, 1378, 1379, 1380, + 1381, 1382, 1382, 1370, 1383, 1384, 1386, 1385, 1376, 1388, + 1379, 1386, 1391, 1380, 1376, 1377, 1389, 1378, 1381, 1387, + 1387, 1389, 1392, 1393, 1383, 1385, 1394, 1392, 1392, 1395, + 1384, 1391, 1388, 1396, 1397, 1394, 1398, 1395, 1399, 1400, + 1401, 1393, 1401, 1399, 1402, 1408, 1399, 1396, 1400, 1397, + + 1404, 1398, 1406, 1409, 1398, 1407, 1404, 1410, 1402, 1414, + 1407, 1407, 1411, 1406, 1408, 1412, 1413, 1411, 1415, 1416, + 1412, 1413, 1417, 1419, 1416, 1410, 1420, 1414, 1421, 1409, + 1422, 1422, 1423, 1424, 1425, 1426, 1423, 1419, 1415, 1428, + 1427, 1426, 1417, 1429, 1420, 1430, 1421, 1433, 1431, 1432, + 1435, 1424, 1427, 1425, 1437, 1428, 1434, 1435, 1438, 1430, + 1436, 1434, 1429, 1431, 1432, 1436, 1433, 1439, 1440, 1440, + 1441, 1442, 1437, 1443, 1444, 1444, 1439, 1445, 1446, 1438, + 1442, 1447, 1451, 1445, 1446, 1441, 1448, 1448, 1449, 1449, + 1450, 1452, 1453, 1443, 1454, 1447, 1450, 1453, 1451, 1455, + + 1454, 1456, 1457, 1457, 1463, 1455, 1462, 1456, 1458, 1458, + 1460, 1460, 1452, 1461, 1464, 1462, 1466, 1461, 1465, 1469, + 1467, 1470, 1463, 1468, 1468, 1473, 1464, 1467, 1458, 1470, + 1458, 1466, 1465, 1471, 1472, 1474, 1476, 1475, 1471, 1469, + 1474, 1474, 1475, 1475, 1473, 1477, 1477, 1478, 1472, 1479, + 1480, 1482, 1481, 1483, 1484, 1485, 1476, 1481, 1486, 1480, + 1487, 1485, 1488, 1486, 1490, 1489, 1478, 1493, 1479, 1491, + 1482, 1489, 1484, 1483, 1494, 1491, 1492, 1495, 1496, 1497, + 1487, 1498, 1492, 1490, 1499, 1500, 1493, 1503, 1488, 1501, + 1501, 1502, 1504, 1494, 1502, 1498, 1495, 1496, 1497, 1508, + + 1500, 1505, 1506, 1506, 1508, 1499, 1503, 1507, 1507, 1510, + 1509, 1504, 1511, 1505, 1509, 1512, 1513, 1514, 1518, 1514, + 1516, 1517, 1510, 1514, 1512, 1519, 1517, 1511, 1520, 1513, + 1521, 1521, 1522, 1518, 1523, 1524, 1514, 1522, 1516, 1525, + 1523, 1526, 1528, 1527, 1520, 1519, 1528, 1526, 1527, 1529, + 1524, 1530, 1525, 1529, 1531, 1532, 1533, 1534, 1535, 1535, + 1537, 1539, 1540, 1534, 1532, 1541, 1541, 1540, 1542, 1543, + 1547, 1530, 1531, 1547, 1542, 1549, 1533, 1550, 1537, 1545, + 1545, 1551, 1539, 1548, 1548, 1553, 1554, 1556, 1553, 1543, + 1555, 1549, 1557, 1550, 1558, 1558, 1556, 1551, 1559, 1560, + + 1561, 1562, 1563, 1564, 1565, 1565, 1562, 1554, 1566, 1564, + 1555, 1567, 1557, 1559, 1569, 1568, 1563, 1566, 1570, 1561, + 1560, 1571, 1571, 1572, 1573, 1575, 1574, 1576, 1576, 1567, + 1568, 1574, 1577, 1578, 1579, 1579, 1577, 1572, 1570, 1569, + 1575, 1580, 1573, 1581, 1582, 1583, 1584, 1585, 1589, 1583, + 1587, 1587, 1585, 1578, 1588, 1582, 1591, 1588, 1592, 1590, + 1593, 1589, 1581, 1580, 1590, 1584, 1594, 1595, 1596, 1597, + 1597, 1599, 1591, 1598, 1593, 1600, 1592, 1603, 1598, 1601, + 1601, 1595, 1603, 1602, 1604, 1594, 1594, 1605, 1608, 1605, + 1607, 1599, 1602, 1596, 1606, 1600, 1607, 1609, 1611, 1606, + + 1612, 1612, 1613, 1609, 1604, 1614, 1617, 1621, 1608, 1616, + 1620, 1614, 1611, 1622, 1616, 1618, 1618, 1619, 1619, 1623, + 1625, 1613, 1623, 1626, 1620, 1621, 1624, 1624, 1622, 1627, + 1617, 1629, 1635, 1628, 1633, 1626, 1628, 1629, 1625, 1628, + 1630, 1631, 1634, 1633, 1631, 1630, 1638, 1634, 1646, 1627, + 1636, 1628, 1639, 1636, 1637, 1637, 1640, 1635, 1639, 1641, + 1631, 1646, 1640, 1644, 1641, 1642, 1642, 1643, 1643, 1644, + 1638, 1645, 1647, 1648, 1649, 1650, 1645, 1651, 1650, 1652, + 1653, 1656, 1654, 1651, 1660, 1652, 1653, 1654, 1657, 1655, + 1647, 1661, 1648, 1657, 1649, 1655, 1658, 1658, 1659, 1662, + + 1663, 1664, 1660, 1659, 1656, 1665, 1667, 1666, 1668, 1669, + 1670, 1661, 1670, 1669, 1674, 1664, 1671, 1676, 1662, 1665, + 1663, 1666, 1672, 1678, 1667, 1675, 1674, 1681, 1677, 1672, + 1676, 1679, 1680, 1668, 1677, 1671, 1682, 1675, 1687, 1682, + 1684, 1681, 1689, 1678, 1683, 1683, 1691, 1679, 1688, 1684, + 1686, 1686, 1680, 1688, 1689, 1690, 1690, 1682, 1687, 1692, + 1693, 1691, 1694, 1695, 1696, 1699, 1698, 1697, 1701, 1703, + 1705, 1705, 1695, 1692, 1697, 1698, 1706, 1706, 1698, 1696, + 1694, 1699, 1704, 1701, 1693, 1704, 1707, 1708, 1701, 1709, + 1710, 1710, 1709, 1711, 1703, 1712, 1713, 1714, 1707, 1715, + + 1714, 1713, 1716, 1717, 1715, 1708, 1711, 1718, 1719, 1721, + 1724, 1720, 1723, 1723, 1712, 1725, 1718, 1724, 1721, 1717, + 1720, 1716, 1722, 1720, 1726, 1727, 1728, 1719, 1722, 1729, + 1732, 1731, 1735, 1730, 1736, 1725, 1731, 1726, 1730, 1730, + 1728, 1738, 1732, 1727, 1738, 1729, 1737, 1737, 1739, 1740, + 1741, 1741, 1736, 1742, 1742, 1741, 1744, 1735, 1740, 1745, + 1743, 1744, 1746, 1747, 1739, 1748, 1750, 1751, 1742, 1743, + 1748, 1748, 1743, 1752, 1753, 1754, 1756, 1745, 1755, 1753, + 1750, 1747, 1751, 1746, 1755, 1757, 1757, 1758, 1760, 1754, + 1764, 1759, 1761, 1758, 1756, 1752, 1759, 1762, 1761, 1765, + + 1766, 1767, 1760, 1762, 1771, 1773, 1766, 1774, 1768, 1769, + 1764, 1768, 1771, 1765, 1767, 1769, 1775, 1768, 1777, 1776, + 1778, 1779, 1780, 1777, 1773, 1781, 1774, 1776, 1782, 1778, + 1783, 1780, 1784, 1784, 1779, 1775, 1790, 1785, 1781, 1786, + 1788, 1791, 1782, 1785, 1783, 1786, 1787, 1789, 1789, 1787, + 1792, 1793, 1793, 1788, 1784, 1794, 1790, 1795, 1796, 1791, + 1797, 1798, 1801, 1795, 1800, 1800, 1802, 1803, 1794, 1792, + 1802, 1804, 1803, 1805, 1807, 1808, 1797, 1810, 1805, 1798, + 1796, 1806, 1801, 1807, 1811, 1813, 1806, 1812, 1810, 1814, + 1812, 1804, 1816, 1811, 1815, 1815, 1817, 1813, 1808, 1818, + + 1819, 1819, 1820, 1821, 1814, 1822, 1825, 1823, 1817, 1826, + 1821, 1816, 1828, 1829, 1827, 1830, 1820, 1822, 1818, 1823, + 1827, 1830, 1831, 1831, 1828, 1825, 1836, 1832, 1839, 1826, + 1832, 1829, 1833, 1833, 1835, 1836, 1837, 1838, 1838, 1835, + 1839, 1840, 1837, 1840, 1841, 1842, 1843, 1841, 1844, 1845, + 1846, 1847, 1848, 1852, 1851, 1846, 1847, 1849, 1850, 1851, + 1853, 1848, 1852, 1856, 1858, 1842, 1844, 1845, 1843, 1849, + 1858, 1854, 1855, 1850, 1859, 1852, 1854, 1855, 1856, 1862, + 1853, 1857, 1857, 1854, 1861, 1863, 1864, 1865, 1866, 1867, + 1866, 1868, 1868, 1869, 1869, 1859, 1870, 1870, 1862, 1871, + + 1861, 1874, 1864, 1867, 1863, 1867, 1875, 1865, 1872, 1872, + 1873, 1873, 1876, 1877, 1877, 1879, 1878, 1883, 1882, 1871, + 1878, 1879, 1874, 1880, 1882, 1884, 1880, 1875, 1886, 1885, + 1889, 1884, 1892, 1876, 1885, 1883, 1887, 1888, 1888, 1887, + 1890, 1891, 1891, 1893, 1894, 1890, 1895, 1892, 1900, 1894, + 1889, 1895, 1897, 1886, 1896, 1896, 1898, 1897, 1899, 1902, + 1901, 1903, 1898, 1904, 1893, 1905, 1906, 1903, 1900, 1907, + 1899, 1899, 1899, 1906, 1907, 1909, 1910, 1899, 1901, 1902, + 1909, 1909, 1911, 1904, 1912, 1905, 1912, 1913, 1914, 1915, + 1910, 1916, 1917, 1918, 1920, 1915, 1922, 1911, 1913, 1923, + + 1916, 1919, 1919, 1914, 1921, 1921, 1924, 1924, 1925, 1925, + 1926, 1930, 1917, 1931, 1918, 1933, 1922, 1929, 1929, 1934, + 1920, 1923, 1931, 1935, 1933, 1936, 1937, 1937, 1938, 1935, + 1926, 1939, 1940, 1941, 1942, 1944, 1930, 1943, 1943, 1940, + 1934, 1936, 1941, 1945, 1947, 1949, 1939, 1948, 1950, 1938, + 1947, 1949, 1948, 1955, 1953, 1951, 1953, 1952, 1956, 1945, + 1942, 1944, 1951, 1952, 1956, 1957, 1957, 1959, 1950, 1958, + 1960, 1961, 1955, 1962, 1958, 1963, 1959, 1964, 1963, 1965, + 1966, 1967, 1965, 1968, 1968, 1960, 1971, 1969, 1970, 1964, + 1972, 1961, 1962, 1969, 1970, 1973, 1975, 1976, 1966, 1973, + + 1978, 1978, 1979, 1977, 1980, 1972, 1971, 1967, 1977, 1981, + 1983, 1985, 1985, 1984, 1986, 1973, 1975, 1984, 1987, 1976, + 1986, 1988, 1988, 1980, 1981, 1990, 1979, 1987, 1989, 1983, + 1991, 1991, 1989, 1992, 1993, 1995, 1990, 1994, 1996, 1997, + 1995, 1990, 1998, 1999, 2003, 2000, 2001, 2002, 1993, 1999, + 2004, 2004, 2002, 2010, 1992, 17, 1994, 2003, 1996, 1997, + 2008, 2001, 1998, 2000, 2005, 2005, 2006, 2009, 2019, 2008, + 2006, 2011, 2020, 2010, 2012, 2012, 2011, 2020, 2009, 2014, + 2014, 2015, 2016, 2009, 2018, 2021, 2015, 2015, 2016, 2022, + 2018, 2024, 2025, 2026, 2019, 2022, 2025, 2021, 2027, 2027, + + 2028, 2029, 2030, 2024, 2031, 2026, 2034, 2029, 2032, 2032, + 2031, 2033, 2035, 2039, 2040, 2036, 2038, 2035, 2042, 2040, + 2046, 2042, 2043, 2043, 2030, 2028, 2034, 2036, 2038, 0, + 2033, 2047, 2039, 2044, 2044, 2045, 2045, 2047, 2048, 2050, + 2046, 2049, 2051, 2053, 2048, 2050, 2049, 2055, 2053, 2056, + 2055, 2051, 2057, 2057, 2059, 2060, 2063, 2061, 2062, 2062, + 2068, 2056, 2061, 2064, 2065, 2063, 2059, 2060, 2064, 2065, + 2066, 2067, 2067, 2066, 2069, 2070, 2071, 2072, 2075, 2073, + 2068, 2072, 2074, 2069, 2073, 2076, 2077, 2078, 2074, 2081, + 2080, 2080, 2084, 2070, 2076, 2071, 2075, 2082, 2088, 2083, + + 2090, 2078, 2080, 2087, 2077, 2086, 2082, 2081, 2083, 2085, + 2085, 2089, 2084, 2090, 2086, 2087, 2089, 2093, 2093, 2088, + 2095, 2096, 2097, 2095, 2098, 2101, 2100, 2102, 2103, 2104, + 2104, 2106, 2105, 2102, 2105, 2107, 2107, 2096, 2097, 2101, + 2098, 2100, 2108, 2110, 2110, 2103, 2111, 2111, 2113, 2106, + 2108, 2114, 2115, 2116, 2117, 2118, 2119, 2114, 2115, 2120, + 2120, 2117, 2122, 2121, 2121, 2127, 2123, 2116, 2124, 2125, + 2126, 2113, 2121, 2131, 2129, 2134, 2119, 2118, 2123, 2128, + 2124, 2130, 2126, 2122, 2125, 2135, 2130, 2130, 2128, 2129, + 2136, 2127, 2132, 2139, 2132, 2134, 2131, 2138, 2132, 2137, + + 2137, 2140, 2136, 2142, 2140, 2141, 2146, 2144, 2135, 2152, + 2141, 2132, 2144, 2139, 2145, 2138, 2145, 2147, 2148, 2150, + 2153, 2154, 2147, 2142, 2146, 2148, 2156, 2152, 2150, 2153, + 2155, 2157, 2155, 2154, 2159, 2160, 2159, 2157, 2161, 2161, + 2162, 2163, 2164, 2165, 2164, 2156, 2163, 2166, 2165, 2160, + 2167, 2168, 2166, 2169, 2170, 2173, 2171, 2172, 2174, 2177, + 2170, 2171, 2178, 2174, 2174, 2179, 2162, 2173, 2167, 2168, + 2172, 2175, 2182, 2169, 2180, 2180, 2178, 2179, 2177, 2175, + 2181, 2181, 2183, 2182, 2184, 2185, 2187, 2186, 2187, 2188, + 2189, 2185, 2186, 2190, 2190, 2196, 2191, 2183, 2189, 2192, + + 2192, 2193, 2193, 2194, 2184, 2195, 2189, 2188, 2191, 2199, + 2195, 2198, 2194, 2196, 2200, 2198, 2200, 2201, 2199, 2202, + 2203, 2199, 2204, 2205, 2202, 2202, 2212, 2207, 2208, 2209, + 2211, 2204, 2203, 2208, 2209, 2205, 2213, 2215, 2201, 2207, + 2214, 2214, 2216, 2211, 2217, 2213, 2212, 2218, 2219, 2222, + 2220, 2221, 2226, 2224, 2222, 2215, 2225, 2236, 2229, 2230, + 2216, 2238, 2217, 2218, 2220, 2224, 2221, 2229, 2225, 2227, + 2228, 2237, 2226, 2219, 2227, 2228, 2233, 2230, 2235, 2238, + 2236, 2239, 2233, 2240, 2235, 2242, 2237, 2241, 2241, 2243, + 2243, 2244, 2240, 2245, 2242, 2233, 2246, 2247, 2248, 2250, + + 2246, 2251, 2247, 2252, 2254, 0, 2239, 2251, 2253, 2244, + 2254, 2248, 2245, 2253, 2253, 2255, 2256, 2258, 2250, 2256, + 2257, 2255, 2261, 2261, 2263, 2252, 2262, 2262, 2257, 2264, + 2264, 2265, 2265, 2263, 2266, 2267, 2268, 2258, 2269, 2270, + 2270, 2262, 2268, 2269, 2271, 2271, 2266, 2275, 2276, 2272, + 2273, 2275, 2262, 2267, 2272, 2277, 2273, 2278, 2280, 2277, + 2281, 2282, 2284, 2283, 2285, 2281, 2287, 2284, 2276, 2286, + 2288, 2289, 2290, 2290, 2292, 2288, 2291, 2278, 2283, 2294, + 2291, 2295, 2285, 2280, 2282, 2286, 2287, 2293, 2296, 2292, + 2297, 2298, 2293, 2289, 2299, 2300, 2301, 2294, 2305, 2299, + + 2302, 2302, 2297, 2304, 2306, 2307, 2296, 2295, 2300, 2308, + 2298, 2304, 2309, 2312, 2301, 2310, 2311, 2305, 2313, 2319, + 2314, 2322, 2318, 2306, 2307, 2312, 2314, 2316, 2321, 0, + 2321, 2327, 2308, 2319, 2310, 2318, 2309, 2311, 2320, 2313, + 2326, 2322, 2316, 2324, 2320, 2323, 2323, 2325, 2324, 2328, + 2325, 2329, 2332, 2326, 2332, 2327, 2330, 2330, 2331, 2331, + 2333, 2333, 2334, 2328, 2329, 2335, 2336, 2337, 2337, 2339, + 2339, 2337, 2340, 2340, 2341, 2341, 2342, 2334, 2348, 2336, + 2335, 2343, 2343, 2344, 2344, 2342, 2345, 2347, 2342, 2349, + 2350, 2345, 2347, 2351, 2351, 2352, 2352, 2353, 2348, 2354, + + 2354, 2355, 2350, 2356, 2356, 2357, 2358, 2359, 2359, 2349, + 2361, 2358, 2360, 2360, 2362, 2363, 2353, 2364, 2365, 2355, + 2357, 2367, 2369, 2362, 2361, 2371, 2367, 2368, 2368, 2370, + 2370, 2364, 2363, 2372, 2373, 2377, 2374, 2365, 2372, 2374, + 2373, 2369, 2378, 2371, 2375, 2375, 2376, 2376, 2379, 2381, + 2379, 2382, 2383, 2383, 2377, 2384, 2386, 2378, 2387, 2388, + 2375, 2384, 2389, 2390, 2381, 2391, 2391, 2390, 2392, 2393, + 2382, 2394, 2398, 2387, 2393, 2395, 2386, 2389, 2397, 2397, + 2400, 2399, 2388, 2401, 2402, 2403, 2394, 2392, 2399, 2404, + 2395, 2407, 2398, 2407, 2400, 2405, 2405, 2406, 2411, 2410, + + 2403, 2401, 2402, 2412, 2408, 2410, 2406, 2408, 2412, 2413, + 2411, 2414, 2415, 2416, 2413, 2404, 2417, 2418, 2420, 2426, + 2423, 2417, 2408, 2420, 2408, 2415, 2421, 2422, 2431, 0, + 2427, 2421, 2422, 2424, 2416, 2423, 2414, 2429, 2425, 2424, + 2426, 2428, 2429, 2418, 2425, 2427, 2430, 2428, 2432, 2433, + 2434, 2430, 2433, 2431, 2435, 2436, 2437, 2438, 2439, 2444, + 2446, 2432, 2440, 2435, 2436, 2437, 2438, 2441, 2440, 2447, + 2434, 2442, 2439, 2441, 2456, 2442, 2448, 2448, 2447, 2444, + 2446, 2449, 2450, 2450, 2451, 2452, 2452, 2449, 2454, 2453, + 2456, 2450, 2459, 2451, 2453, 2457, 2458, 2458, 2463, 2468, + + 2460, 2462, 2464, 2465, 2468, 2469, 2470, 2459, 2454, 2460, + 2454, 2457, 0, 2462, 2463, 2465, 2467, 2464, 2470, 2467, + 2471, 2471, 2472, 2472, 2476, 2469, 2474, 2474, 2475, 2476, + 2477, 2475, 2478, 2479, 2480, 2480, 2477, 2481, 2478, 2482, + 2482, 2483, 2479, 2484, 2485, 2486, 2486, 2488, 2487, 2496, + 2489, 2481, 2491, 2483, 2487, 2489, 2491, 2484, 2496, 2492, + 2497, 2488, 2492, 2485, 2493, 2493, 2494, 2495, 2498, 2497, + 2499, 2494, 2495, 2501, 2499, 2500, 2500, 2503, 2504, 2505, + 2506, 2507, 2503, 2508, 2509, 2510, 2501, 2508, 2498, 2514, + 2510, 2511, 2513, 2513, 2515, 2507, 2512, 2511, 2504, 2505, + + 2506, 2516, 2512, 2517, 2509, 2518, 2521, 2514, 2517, 2519, + 2519, 2522, 2523, 2515, 2558, 2524, 2525, 2523, 2521, 2558, + 2516, 2524, 2525, 2526, 2529, 2531, 2518, 2522, 2527, 2532, + 2527, 2526, 2539, 2529, 2533, 2533, 2599, 2534, 2599, 2531, + 2534, 2535, 2535, 2532, 2537, 2538, 2544, 2537, 2538, 2540, + 2540, 2543, 2544, 2545, 2547, 2543, 2546, 2546, 2539, 2550, + 2550, 2552, 2554, 2547, 2555, 2545, 2559, 2560, 2561, 2562, + 2563, 2563, 2571, 2561, 2562, 2567, 2554, 2565, 2565, 2552, + 2555, 2567, 2568, 2569, 2569, 2570, 2572, 2574, 2560, 2580, + 2575, 2572, 2559, 2575, 2571, 2576, 2577, 2578, 2578, 2585, + + 2581, 2570, 2568, 2584, 2582, 2580, 2574, 2576, 2577, 2581, + 2582, 2583, 2587, 2587, 2585, 2588, 2589, 2583, 2588, 2590, + 2595, 2584, 2592, 2592, 2593, 2593, 2594, 2596, 2597, 2598, + 2600, 2594, 2601, 2602, 2598, 2589, 2596, 2590, 2595, 2604, + 2605, 2597, 2603, 2606, 2600, 2602, 2601, 2603, 2606, 2607, + 2607, 2608, 2608, 2609, 2609, 2610, 2610, 2611, 2612, 2604, + 2605, 2613, 2614, 2614, 2615, 2615, 2613, 2616, 2616, 2611, + 2617, 2618, 2619, 2620, 2621, 0, 2612, 2624, 2622, 2623, + 2623, 2627, 2617, 2632, 2619, 2625, 2625, 2626, 2626, 2628, + 2628, 2618, 2627, 2620, 2622, 2621, 2624, 2629, 2630, 2631, + + 2634, 2633, 2635, 2632, 2637, 2630, 2633, 2636, 2636, 2629, + 2639, 2631, 2640, 2637, 2638, 2638, 2641, 2642, 2644, 2643, + 2634, 2645, 2635, 2645, 2652, 2646, 2647, 2647, 2649, 2641, + 2648, 2650, 2640, 2643, 2653, 2654, 2639, 2646, 2656, 2648, + 2644, 2642, 2652, 2649, 2655, 2657, 2650, 2655, 2658, 2666, + 2657, 2668, 2656, 2658, 2659, 2659, 2653, 2667, 2654, 2660, + 2660, 2661, 2661, 2663, 2663, 2665, 2665, 2666, 2667, 2669, + 2668, 2671, 2672, 2673, 2674, 2679, 2675, 2676, 2677, 2678, + 2677, 0, 2680, 2686, 2669, 2675, 2681, 2681, 2683, 2685, + 2672, 2671, 2683, 2679, 2674, 2673, 2692, 2676, 2687, 2678, + + 2680, 2684, 2684, 2685, 2690, 2686, 2693, 2687, 2688, 2688, + 2691, 2691, 2694, 2690, 2692, 2695, 2696, 2697, 2698, 2700, + 2701, 2699, 2695, 2704, 2693, 2702, 2702, 2701, 2703, 2703, + 2694, 2696, 2705, 2706, 2711, 2697, 2698, 2699, 2700, 2706, + 2708, 2708, 2710, 2704, 2709, 2709, 2712, 2713, 2710, 2714, + 2705, 2715, 2711, 2716, 2717, 2717, 2718, 2719, 2716, 2720, + 2721, 2722, 2713, 0, 2712, 2715, 2729, 2723, 2714, 2725, + 2725, 2721, 2723, 2724, 2734, 2724, 2718, 2719, 2726, 2720, + 2726, 2722, 2727, 2727, 2731, 2729, 2732, 2733, 2737, 2741, + 2735, 2736, 2738, 2731, 2734, 2735, 2736, 2742, 2743, 2733, + + 2746, 2743, 2744, 2744, 2745, 2732, 2747, 2747, 2737, 2741, + 2748, 2738, 2749, 2750, 2752, 2742, 2753, 2750, 2746, 2745, + 2754, 2748, 2756, 2756, 2755, 2757, 2754, 2749, 2755, 2752, + 2759, 2753, 2760, 2761, 2762, 2762, 2764, 2765, 2757, 2766, + 2767, 2767, 2769, 2766, 2773, 2759, 2765, 2774, 2764, 2768, + 2768, 2771, 2760, 2761, 2770, 2770, 2771, 2772, 2775, 2774, + 2773, 2769, 2776, 2776, 2781, 2781, 2772, 2782, 2783, 2783, + 2784, 2785, 2786, 2787, 2790, 2790, 2791, 2788, 2775, 2789, + 2792, 2803, 2787, 2784, 2785, 2786, 2788, 2797, 2789, 2782, + 2794, 2794, 2797, 2799, 2800, 2792, 2791, 2801, 2799, 2802, + + 2803, 2804, 2801, 2805, 2807, 2811, 2815, 2802, 2800, 2809, + 2804, 2805, 2810, 2814, 2809, 2812, 2812, 2810, 2814, 2807, + 2811, 2813, 2813, 2816, 2816, 2815, 2817, 2818, 2819, 2820, + 2821, 0, 2818, 2817, 2822, 2824, 2821, 2823, 2823, 2822, + 2825, 2826, 2826, 2827, 2827, 2825, 2819, 2820, 2830, 2833, + 2824, 2831, 2831, 2832, 2833, 2833, 2832, 2834, 2835, 2836, + 2837, 2830, 2834, 2835, 2838, 2839, 2837, 2840, 2838, 2841, + 2839, 2842, 2843, 2836, 2844, 2845, 2840, 2846, 2847, 2842, + 2844, 2845, 2846, 2851, 2841, 2848, 2848, 2850, 2851, 2852, + 2847, 2854, 2852, 2843, 2850, 2856, 2857, 2858, 2859, 2860, + + 2856, 2857, 2858, 2854, 2861, 2862, 2863, 2863, 2864, 2868, + 2865, 2873, 2860, 2861, 2862, 2865, 2859, 2864, 2869, 2870, + 2874, 2875, 0, 2876, 2869, 2870, 2878, 2868, 2877, 2877, + 2873, 2879, 2884, 2878, 2881, 2882, 2883, 2883, 2885, 2887, + 2874, 2875, 2876, 2881, 2882, 2886, 2886, 2884, 2889, 2891, + 2879, 2892, 2894, 2885, 2895, 2892, 2893, 2893, 2887, 2896, + 2895, 2897, 2898, 2889, 2900, 2896, 2899, 2899, 2898, 2891, + 2901, 2902, 2900, 2904, 2905, 2907, 2902, 2894, 2910, 2897, + 2908, 2907, 2904, 2908, 2909, 2911, 2913, 2905, 2909, 2912, + 2912, 2915, 2915, 2916, 0, 2901, 2910, 2917, 2917, 2911, + + 2923, 2913, 2918, 2918, 2920, 2920, 2921, 2922, 2927, 2923, + 2921, 2916, 2922, 2925, 2925, 2928, 2930, 2929, 2931, 2933, + 2928, 2930, 2930, 2934, 2934, 2936, 2936, 2940, 2927, 2929, + 2931, 2937, 2937, 2938, 2938, 2939, 2941, 2944, 2939, 2933, + 2940, 2943, 2943, 2946, 2947, 2947, 2948, 2948, 2952, 2941, + 2949, 2949, 2950, 2951, 2951, 2944, 2953, 2954, 2955, 2956, + 2956, 2952, 2957, 2946, 2955, 2961, 2957, 2950, 2964, 2960, + 2961, 2954, 2963, 2965, 2953, 2960, 2966, 2963, 2963, 2967, + 2968, 2969, 2979, 2970, 2976, 2967, 2968, 2970, 2971, 2971, + 2974, 2964, 2976, 2965, 2977, 2974, 2966, 2977, 2980, 2981, + + 2981, 2980, 2982, 2983, 2984, 2985, 2969, 2979, 2983, 2986, + 2987, 2987, 2988, 2989, 2990, 2991, 2989, 0, 2996, 2982, + 2982, 2992, 2984, 2986, 2989, 2985, 2988, 2994, 2990, 2992, + 2995, 3006, 2994, 2994, 2991, 2995, 2995, 2996, 2997, 2997, + 2998, 2998, 2999, 2999, 3000, 3000, 3001, 3001, 3002, 3002, + 3003, 3004, 3005, 3007, 3008, 3009, 3004, 3006, 3010, 3008, + 3011, 3012, 3013, 3010, 3014, 3018, 3003, 3007, 3018, 3011, + 3016, 3016, 3005, 3019, 3009, 3017, 3017, 3020, 3020, 3021, + 3022, 3012, 3013, 3025, 3014, 3021, 3024, 3024, 3019, 3027, + 3025, 3026, 3026, 3030, 3027, 3029, 3029, 3031, 3022, 3032, + + 3033, 3035, 3030, 3036, 3036, 3039, 3031, 3040, 3032, 3033, + 3037, 3037, 3038, 3041, 3039, 3042, 3038, 3043, 3046, 3035, + 3047, 3048, 3044, 3058, 3041, 3048, 3040, 3044, 3044, 3047, + 3042, 3046, 3054, 3052, 3053, 3053, 3057, 3043, 3052, 3056, + 3056, 3059, 3061, 3061, 3062, 3063, 3054, 3067, 3058, 3068, + 3057, 3069, 3072, 3062, 3068, 3071, 3074, 3063, 3072, 3059, + 3069, 3076, 3078, 3085, 3079, 3080, 3080, 3078, 3074, 3079, + 3081, 3083, 3067, 3084, 3091, 3071, 3083, 3085, 3092, 3081, + 3086, 3086, 3076, 3091, 3086, 3093, 3084, 3088, 3088, 3089, + 3089, 3090, 3090, 3100, 3094, 3096, 3101, 3097, 3092, 3094, + + 3098, 3096, 3097, 3102, 3093, 3098, 3099, 3099, 3101, 3103, + 3104, 3100, 3105, 3106, 3103, 3107, 3107, 3109, 3105, 3114, + 3110, 3109, 3111, 3113, 3102, 3110, 3115, 3111, 3104, 3112, + 3112, 3117, 3119, 3119, 3114, 3121, 3122, 3123, 3106, 3124, + 3126, 3115, 3113, 3124, 3125, 3127, 3128, 3129, 3121, 3122, + 3123, 3117, 3129, 3125, 3128, 3130, 3126, 3131, 3131, 3132, + 3133, 3134, 3135, 3135, 3127, 3136, 3136, 3137, 3132, 3141, + 3146, 3140, 3150, 3143, 3151, 3130, 3140, 3140, 3133, 3143, + 3144, 3144, 3153, 3141, 3148, 3148, 3137, 3134, 3150, 3152, + 3151, 3146, 3154, 3158, 3152, 3157, 3157, 3154, 3153, 3159, + + 3160, 3161, 3162, 3162, 3163, 3166, 3160, 3167, 3159, 3165, + 3165, 3168, 3168, 3158, 3170, 3172, 3173, 3176, 3179, 3166, + 3170, 3180, 3173, 3163, 3161, 3174, 3167, 3177, 3177, 3182, + 3174, 3178, 3178, 3179, 3183, 3172, 3181, 3181, 3184, 3176, + 3182, 3180, 3185, 3183, 3186, 3187, 3188, 3190, 3185, 3189, + 3189, 3191, 3192, 3197, 3191, 3192, 3181, 3187, 3184, 3193, + 3193, 3198, 3190, 3186, 3199, 3197, 3188, 3200, 3200, 3201, + 3199, 3202, 3201, 3203, 3205, 3206, 3206, 3202, 3207, 3205, + 3208, 3198, 3209, 3207, 3210, 3211, 3211, 3214, 3209, 3215, + 3216, 3203, 3213, 3217, 3217, 3219, 3218, 3220, 3471, 3208, + + 3471, 3210, 3210, 3216, 3213, 3214, 3220, 3222, 3222, 3223, + 3223, 3219, 3224, 3224, 3215, 3218, 3225, 3226, 3227, 3228, + 3228, 3225, 3232, 3227, 3229, 3229, 3230, 3230, 3231, 3231, + 3233, 3226, 3234, 3239, 3235, 3232, 3238, 3238, 3234, 3235, + 3241, 3241, 3242, 3242, 3244, 3246, 3247, 3248, 3249, 3239, + 3250, 3250, 3252, 3252, 3253, 3254, 3233, 3255, 3257, 3262, + 3258, 3259, 3259, 3244, 3260, 3260, 3248, 3246, 3247, 3258, + 3249, 3255, 3264, 3263, 3254, 3265, 3266, 3262, 3257, 3263, + 3253, 3266, 3269, 3270, 3270, 3272, 3272, 3274, 3273, 3275, + 3276, 3277, 3264, 3273, 3265, 3275, 3278, 3278, 3283, 3277, + + 3279, 3274, 3276, 3269, 3281, 3279, 3282, 3284, 3281, 3285, + 3286, 3282, 3289, 3287, 3285, 3290, 3291, 3292, 3283, 3287, + 3289, 3294, 3286, 3297, 3295, 3296, 3298, 3284, 3300, 3301, + 3303, 3298, 3302, 3300, 3290, 3303, 3291, 3292, 3302, 3294, + 3295, 3305, 3296, 3296, 3297, 3306, 3307, 3320, 3306, 3301, + 3311, 3311, 3312, 3312, 3313, 3318, 3318, 3319, 3313, 3307, + 3323, 3305, 3319, 3321, 3321, 0, 3320, 3326, 3326, 3327, + 3327, 3336, 3327, 3328, 3328, 3323, 3328, 3329, 3329, 3330, + 3330, 3331, 3330, 3333, 3334, 3331, 3335, 3335, 3333, 3336, + 3337, 3340, 3340, 3334, 3341, 3342, 3343, 3344, 3344, 3345, + + 3348, 3343, 3349, 3350, 3337, 3352, 3354, 3350, 3351, 3349, + 0, 3355, 3356, 3356, 3341, 3342, 3355, 3351, 3357, 3345, + 3352, 3358, 3358, 3361, 3354, 3348, 3366, 3357, 3359, 3359, + 3360, 3360, 3362, 3363, 3364, 3365, 3368, 3362, 3361, 3364, + 3364, 3365, 3363, 3367, 3369, 3363, 3371, 3370, 0, 3369, + 3373, 3366, 3370, 3372, 3372, 3374, 3373, 3368, 3367, 3375, + 3375, 3374, 3376, 3376, 3377, 3371, 3378, 3381, 3381, 3383, + 3383, 3378, 3384, 3386, 3388, 3388, 3389, 3389, 3397, 3377, + 0, 3384, 3390, 3390, 3391, 3391, 3393, 3393, 3394, 3394, + 3399, 3386, 3395, 3395, 3396, 3396, 3400, 3400, 3402, 3399, + + 3401, 3401, 3403, 3404, 3397, 3406, 3406, 3402, 3407, 3408, + 3408, 3409, 3410, 3419, 3403, 3415, 3411, 3412, 3412, 3413, + 3413, 3416, 3416, 3404, 3421, 3410, 3409, 3407, 3411, 3420, + 3415, 3419, 3420, 3422, 3422, 3423, 3425, 3426, 3427, 3425, + 3428, 3429, 3431, 3426, 3430, 3428, 3434, 3437, 3433, 3438, + 3421, 3437, 3427, 3423, 3433, 3434, 3441, 3442, 3431, 3455, + 3429, 3451, 3430, 3461, 3438, 3452, 3451, 3464, 3452, 3456, + 3456, 3462, 3455, 3457, 3457, 3459, 3459, 3442, 3466, 3463, + 3462, 3468, 3441, 3463, 3469, 3470, 3461, 3464, 3472, 3474, + 3470, 3475, 3466, 3473, 3473, 3469, 3476, 3477, 3478, 3480, + + 3479, 3482, 3474, 3472, 3468, 3481, 3482, 3483, 3480, 3487, + 3475, 3484, 3485, 3477, 3476, 3479, 3484, 3481, 3486, 3486, + 3488, 3492, 3493, 3478, 3495, 3488, 3494, 3494, 3483, 3487, + 3500, 3485, 3501, 3495, 3505, 3492, 3496, 3496, 3497, 3497, + 3498, 3498, 3493, 3499, 3499, 3502, 3503, 3506, 3502, 3500, + 3504, 3503, 3501, 3508, 3507, 3504, 3509, 3512, 3510, 3505, + 3507, 3517, 3506, 3510, 3511, 3511, 3518, 3508, 3509, 3513, + 3513, 3514, 3514, 3516, 3516, 3521, 3517, 3512, 3519, 3519, + 3523, 3526, 3526, 3527, 3527, 3518, 3528, 3529, 3532, 3530, + 3521, 3531, 3533, 3534, 3528, 3530, 3535, 3531, 3523, 3536, + + 3536, 3535, 3532, 3538, 3538, 3533, 3529, 3542, 3545, 3543, + 3546, 3548, 3534, 3549, 3546, 3550, 3553, 3551, 3549, 3552, + 3554, 3555, 3545, 3556, 3556, 3554, 3555, 3559, 3542, 3543, + 3551, 3548, 3552, 3560, 3550, 3553, 3561, 3562, 3562, 3563, + 3564, 3565, 3565, 3566, 3563, 3567, 3564, 3559, 3566, 3568, + 3567, 3560, 3569, 3570, 3568, 3561, 3572, 3572, 3573, 3570, + 3574, 3574, 3576, 3573, 3577, 3578, 3576, 3579, 3580, 3581, + 3582, 3569, 3578, 3585, 3585, 3581, 3588, 3583, 3587, 3587, + 3590, 3591, 3592, 3577, 3597, 3588, 3579, 3580, 3588, 3582, + 3583, 3589, 3593, 3593, 3595, 3592, 3589, 3594, 3599, 3590, + + 3591, 3604, 3594, 3598, 3598, 3600, 3600, 3595, 3601, 3601, + 3597, 3602, 3603, 3605, 3605, 0, 3602, 3599, 3606, 3603, + 3604, 3609, 3607, 3606, 3607, 3608, 3608, 3610, 3609, 3611, + 3612, 3613, 3615, 3615, 3610, 3612, 3616, 3618, 3619, 3620, + 3621, 3625, 3618, 3619, 3622, 3622, 3624, 3624, 3611, 3626, + 3613, 3627, 3627, 3628, 3628, 3616, 3629, 3639, 3620, 3621, + 3625, 3631, 3631, 3629, 3632, 3632, 3633, 3635, 3626, 3638, + 3640, 0, 3635, 3633, 3638, 0, 3639, 3641, 3641, 3642, + 3642, 0, 0, 0, 0, 0, 0, 0, 0, 3640, + 3646, 3646, 3646, 3646, 3646, 3646, 3646, 3647, 3647, 3647, + + 3647, 3647, 3647, 3647, 3648, 3648, 3648, 3648, 3648, 3648, + 3648, 3649, 3649, 3649, 3649, 3649, 3649, 3649, 3650, 3650, + 3650, 3650, 3650, 3650, 3650, 3651, 3651, 3651, 3651, 3651, + 3651, 3651, 3652, 3652, 3652, 3652, 3652, 3652, 3652, 3654, + 3654, 0, 3654, 3654, 3654, 3654, 3655, 3655, 0, 0, + 0, 3655, 3655, 3656, 3656, 0, 0, 3656, 0, 3656, + 3657, 0, 0, 0, 0, 0, 3657, 3658, 3658, 0, + 0, 0, 3658, 3658, 3659, 0, 0, 0, 0, 0, + 3659, 3660, 3660, 0, 3660, 3660, 3660, 3660, 3661, 0, + 0, 0, 0, 0, 3661, 3662, 3662, 0, 0, 0, + + 3662, 3662, 3663, 3663, 0, 3663, 3663, 3663, 3663, 3645, + 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, + 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645 } ; static yy_state_type yy_last_accepting_state; @@ -3393,7 +3405,7 @@ static void config_end_include(void) } #endif -#line 3394 "" +#line 3406 "" #define YY_NO_INPUT 1 #line 191 "./util/configlexer.lex" #ifndef YY_NO_UNPUT @@ -3402,9 +3414,9 @@ static void config_end_include(void) #ifndef YY_NO_INPUT #define YY_NO_INPUT 1 #endif -#line 3403 "" +#line 3415 "" -#line 3405 "" +#line 3417 "" #define INITIAL 0 #define quotedstring 1 @@ -3628,7 +3640,7 @@ YY_DECL { #line 211 "./util/configlexer.lex" -#line 3629 "" +#line 3641 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3661,13 +3673,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 >= 3628 ) + if ( yy_current_state >= 3646 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 7073 ); + while ( yy_base[yy_current_state] != 7110 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -5401,40 +5413,45 @@ YY_RULE_SETUP { YDVAR(1, VAR_EDE ) } YY_BREAK case 340: -/* rule 340 can match eol */ YY_RULE_SETUP #line 565 "./util/configlexer.lex" +{ YDVAR(1, VAR_PROXY_PROTOCOL_PORT) } + YY_BREAK +case 341: +/* rule 341 can match eol */ +YY_RULE_SETUP +#line 566 "./util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK /* Quoted strings. Strip leading and ending quotes */ -case 341: +case 342: YY_RULE_SETUP -#line 568 "./util/configlexer.lex" +#line 569 "./util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 569 "./util/configlexer.lex" +#line 570 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 342: -YY_RULE_SETUP -#line 574 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 343: -/* rule 343 can match eol */ YY_RULE_SETUP #line 575 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 344: +/* rule 344 can match eol */ +YY_RULE_SETUP +#line 576 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 344: +case 345: YY_RULE_SETUP -#line 577 "./util/configlexer.lex" +#line 578 "./util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5447,34 +5464,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 345: +case 346: YY_RULE_SETUP -#line 589 "./util/configlexer.lex" +#line 590 "./util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 590 "./util/configlexer.lex" +#line 591 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 346: -YY_RULE_SETUP -#line 595 "./util/configlexer.lex" -{ LEXOUT(("STR(%s) ", yytext)); yymore(); } - YY_BREAK case 347: -/* rule 347 can match eol */ YY_RULE_SETUP #line 596 "./util/configlexer.lex" +{ LEXOUT(("STR(%s) ", yytext)); yymore(); } + YY_BREAK +case 348: +/* rule 348 can match eol */ +YY_RULE_SETUP +#line 597 "./util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 348: +case 349: YY_RULE_SETUP -#line 598 "./util/configlexer.lex" +#line 599 "./util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5487,38 +5504,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 349: +case 350: YY_RULE_SETUP -#line 610 "./util/configlexer.lex" +#line 611 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 612 "./util/configlexer.lex" +#line 613 "./util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 350: -YY_RULE_SETUP -#line 616 "./util/configlexer.lex" -{ LEXOUT(("ISP ")); /* ignore */ } - YY_BREAK case 351: -/* rule 351 can match eol */ YY_RULE_SETUP #line 617 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++;} +{ LEXOUT(("ISP ")); /* ignore */ } YY_BREAK case 352: +/* rule 352 can match eol */ YY_RULE_SETUP #line 618 "./util/configlexer.lex" -{ LEXOUT(("IQS ")); BEGIN(include_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK case 353: YY_RULE_SETUP #line 619 "./util/configlexer.lex" +{ LEXOUT(("IQS ")); BEGIN(include_quoted); } + YY_BREAK +case 354: +YY_RULE_SETUP +#line 620 "./util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 0); @@ -5526,27 +5543,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 624 "./util/configlexer.lex" +#line 625 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 354: -YY_RULE_SETUP -#line 628 "./util/configlexer.lex" -{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } - YY_BREAK case 355: -/* rule 355 can match eol */ YY_RULE_SETUP #line 629 "./util/configlexer.lex" +{ LEXOUT(("ISTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 356: +/* rule 356 can match eol */ +YY_RULE_SETUP +#line 630 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 356: +case 357: YY_RULE_SETUP -#line 631 "./util/configlexer.lex" +#line 632 "./util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -5556,7 +5573,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 637 "./util/configlexer.lex" +#line 638 "./util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -5571,39 +5588,39 @@ case YY_STATE_EOF(val): } YY_BREAK /* include-toplevel: directive */ -case 357: +case 358: YY_RULE_SETUP -#line 651 "./util/configlexer.lex" +#line 652 "./util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel); } YY_BREAK case YY_STATE_EOF(include_toplevel): -#line 654 "./util/configlexer.lex" +#line 655 "./util/configlexer.lex" { yyerror("EOF inside include_toplevel directive"); BEGIN(inc_prev); } YY_BREAK -case 358: -YY_RULE_SETUP -#line 658 "./util/configlexer.lex" -{ LEXOUT(("ITSP ")); /* ignore */ } - YY_BREAK case 359: -/* rule 359 can match eol */ YY_RULE_SETUP #line 659 "./util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } +{ LEXOUT(("ITSP ")); /* ignore */ } YY_BREAK case 360: +/* rule 360 can match eol */ YY_RULE_SETUP #line 660 "./util/configlexer.lex" -{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } +{ LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK case 361: YY_RULE_SETUP #line 661 "./util/configlexer.lex" +{ LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } + YY_BREAK +case 362: +YY_RULE_SETUP +#line 662 "./util/configlexer.lex" { LEXOUT(("ITunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 1); @@ -5612,29 +5629,29 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_toplevel_quoted): -#line 667 "./util/configlexer.lex" +#line 668 "./util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 362: -YY_RULE_SETUP -#line 671 "./util/configlexer.lex" -{ LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } - YY_BREAK case 363: -/* rule 363 can match eol */ YY_RULE_SETUP #line 672 "./util/configlexer.lex" +{ LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } + YY_BREAK +case 364: +/* rule 364 can match eol */ +YY_RULE_SETUP +#line 673 "./util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 364: +case 365: YY_RULE_SETUP -#line 676 "./util/configlexer.lex" +#line 677 "./util/configlexer.lex" { LEXOUT(("ITQE ")); yytext[yyleng - 1] = '\0'; @@ -5643,33 +5660,33 @@ YY_RULE_SETUP return (VAR_FORCE_TOPLEVEL); } YY_BREAK -case 365: +case 366: YY_RULE_SETUP -#line 684 "./util/configlexer.lex" +#line 685 "./util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 366: +case 367: YY_RULE_SETUP -#line 688 "./util/configlexer.lex" +#line 689 "./util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 367: +case 368: YY_RULE_SETUP -#line 692 "./util/configlexer.lex" +#line 693 "./util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 368: +case 369: YY_RULE_SETUP -#line 696 "./util/configlexer.lex" +#line 697 "./util/configlexer.lex" ECHO; YY_BREAK -#line 5670 "" +#line 5687 "" case YY_END_OF_BUFFER: { @@ -5964,7 +5981,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3628 ) + if ( yy_current_state >= 3646 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5992,11 +6009,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 >= 3628 ) + if ( yy_current_state >= 3646 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 3627); + yy_is_jam = (yy_current_state == 3645); return yy_is_jam ? 0 : yy_current_state; } @@ -6635,6 +6652,6 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 696 "./util/configlexer.lex" +#line 697 "./util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index fc9aa7266..09e314b21 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -562,6 +562,7 @@ edns-client-string{COLON} { YDVAR(2, VAR_EDNS_CLIENT_STRING) } edns-client-string-opcode{COLON} { YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } nsid{COLON} { YDVAR(1, VAR_NSID ) } ede{COLON} { YDVAR(1, VAR_EDE ) } +proxy-protocol-port{COLON} { YDVAR(1, VAR_PROXY_PROTOCOL_PORT) } {NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; } /* Quoted strings. Strip leading and ending quotes */ diff --git a/util/configparser.c b/util/configparser.c index 7f3cd99e1..4670d36e7 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -458,364 +458,366 @@ enum yysymbol_kind_t YYSYMBOL_VAR_INTERFACE_TAG = 330, /* VAR_INTERFACE_TAG */ YYSYMBOL_VAR_INTERFACE_TAG_ACTION = 331, /* VAR_INTERFACE_TAG_ACTION */ YYSYMBOL_VAR_INTERFACE_TAG_DATA = 332, /* VAR_INTERFACE_TAG_DATA */ - YYSYMBOL_YYACCEPT = 333, /* $accept */ - YYSYMBOL_toplevelvars = 334, /* toplevelvars */ - YYSYMBOL_toplevelvar = 335, /* toplevelvar */ - YYSYMBOL_force_toplevel = 336, /* force_toplevel */ - YYSYMBOL_serverstart = 337, /* serverstart */ - YYSYMBOL_contents_server = 338, /* contents_server */ - YYSYMBOL_content_server = 339, /* content_server */ - YYSYMBOL_stubstart = 340, /* stubstart */ - YYSYMBOL_contents_stub = 341, /* contents_stub */ - YYSYMBOL_content_stub = 342, /* content_stub */ - YYSYMBOL_forwardstart = 343, /* forwardstart */ - YYSYMBOL_contents_forward = 344, /* contents_forward */ - YYSYMBOL_content_forward = 345, /* content_forward */ - YYSYMBOL_viewstart = 346, /* viewstart */ - YYSYMBOL_contents_view = 347, /* contents_view */ - YYSYMBOL_content_view = 348, /* content_view */ - YYSYMBOL_authstart = 349, /* authstart */ - YYSYMBOL_contents_auth = 350, /* contents_auth */ - YYSYMBOL_content_auth = 351, /* content_auth */ - YYSYMBOL_rpz_tag = 352, /* rpz_tag */ - YYSYMBOL_rpz_action_override = 353, /* rpz_action_override */ - YYSYMBOL_rpz_cname_override = 354, /* rpz_cname_override */ - YYSYMBOL_rpz_log = 355, /* rpz_log */ - YYSYMBOL_rpz_log_name = 356, /* rpz_log_name */ - YYSYMBOL_rpz_signal_nxdomain_ra = 357, /* rpz_signal_nxdomain_ra */ - YYSYMBOL_rpzstart = 358, /* rpzstart */ - YYSYMBOL_contents_rpz = 359, /* contents_rpz */ - YYSYMBOL_content_rpz = 360, /* content_rpz */ - YYSYMBOL_server_num_threads = 361, /* server_num_threads */ - YYSYMBOL_server_verbosity = 362, /* server_verbosity */ - YYSYMBOL_server_statistics_interval = 363, /* server_statistics_interval */ - YYSYMBOL_server_statistics_cumulative = 364, /* server_statistics_cumulative */ - YYSYMBOL_server_extended_statistics = 365, /* server_extended_statistics */ - YYSYMBOL_server_shm_enable = 366, /* server_shm_enable */ - YYSYMBOL_server_shm_key = 367, /* server_shm_key */ - YYSYMBOL_server_port = 368, /* server_port */ - YYSYMBOL_server_send_client_subnet = 369, /* server_send_client_subnet */ - YYSYMBOL_server_client_subnet_zone = 370, /* server_client_subnet_zone */ - YYSYMBOL_server_client_subnet_always_forward = 371, /* server_client_subnet_always_forward */ - YYSYMBOL_server_client_subnet_opcode = 372, /* server_client_subnet_opcode */ - YYSYMBOL_server_max_client_subnet_ipv4 = 373, /* server_max_client_subnet_ipv4 */ - YYSYMBOL_server_max_client_subnet_ipv6 = 374, /* server_max_client_subnet_ipv6 */ - YYSYMBOL_server_min_client_subnet_ipv4 = 375, /* server_min_client_subnet_ipv4 */ - YYSYMBOL_server_min_client_subnet_ipv6 = 376, /* server_min_client_subnet_ipv6 */ - YYSYMBOL_server_max_ecs_tree_size_ipv4 = 377, /* server_max_ecs_tree_size_ipv4 */ - YYSYMBOL_server_max_ecs_tree_size_ipv6 = 378, /* server_max_ecs_tree_size_ipv6 */ - YYSYMBOL_server_interface = 379, /* server_interface */ - YYSYMBOL_server_outgoing_interface = 380, /* server_outgoing_interface */ - YYSYMBOL_server_outgoing_range = 381, /* server_outgoing_range */ - YYSYMBOL_server_outgoing_port_permit = 382, /* server_outgoing_port_permit */ - YYSYMBOL_server_outgoing_port_avoid = 383, /* server_outgoing_port_avoid */ - YYSYMBOL_server_outgoing_num_tcp = 384, /* server_outgoing_num_tcp */ - YYSYMBOL_server_incoming_num_tcp = 385, /* server_incoming_num_tcp */ - YYSYMBOL_server_interface_automatic = 386, /* server_interface_automatic */ - YYSYMBOL_server_interface_automatic_ports = 387, /* server_interface_automatic_ports */ - YYSYMBOL_server_do_ip4 = 388, /* server_do_ip4 */ - YYSYMBOL_server_do_ip6 = 389, /* server_do_ip6 */ - YYSYMBOL_server_do_udp = 390, /* server_do_udp */ - YYSYMBOL_server_do_tcp = 391, /* server_do_tcp */ - YYSYMBOL_server_prefer_ip4 = 392, /* server_prefer_ip4 */ - YYSYMBOL_server_prefer_ip6 = 393, /* server_prefer_ip6 */ - YYSYMBOL_server_tcp_mss = 394, /* server_tcp_mss */ - YYSYMBOL_server_outgoing_tcp_mss = 395, /* server_outgoing_tcp_mss */ - YYSYMBOL_server_tcp_idle_timeout = 396, /* server_tcp_idle_timeout */ - YYSYMBOL_server_max_reuse_tcp_queries = 397, /* server_max_reuse_tcp_queries */ - YYSYMBOL_server_tcp_reuse_timeout = 398, /* server_tcp_reuse_timeout */ - YYSYMBOL_server_tcp_auth_query_timeout = 399, /* server_tcp_auth_query_timeout */ - YYSYMBOL_server_tcp_keepalive = 400, /* server_tcp_keepalive */ - YYSYMBOL_server_tcp_keepalive_timeout = 401, /* server_tcp_keepalive_timeout */ - YYSYMBOL_server_tcp_upstream = 402, /* server_tcp_upstream */ - YYSYMBOL_server_udp_upstream_without_downstream = 403, /* server_udp_upstream_without_downstream */ - YYSYMBOL_server_ssl_upstream = 404, /* server_ssl_upstream */ - YYSYMBOL_server_ssl_service_key = 405, /* server_ssl_service_key */ - YYSYMBOL_server_ssl_service_pem = 406, /* server_ssl_service_pem */ - YYSYMBOL_server_ssl_port = 407, /* server_ssl_port */ - YYSYMBOL_server_tls_cert_bundle = 408, /* server_tls_cert_bundle */ - YYSYMBOL_server_tls_win_cert = 409, /* server_tls_win_cert */ - YYSYMBOL_server_tls_additional_port = 410, /* server_tls_additional_port */ - YYSYMBOL_server_tls_ciphers = 411, /* server_tls_ciphers */ - YYSYMBOL_server_tls_ciphersuites = 412, /* server_tls_ciphersuites */ - YYSYMBOL_server_tls_session_ticket_keys = 413, /* server_tls_session_ticket_keys */ - YYSYMBOL_server_tls_use_sni = 414, /* server_tls_use_sni */ - YYSYMBOL_server_https_port = 415, /* server_https_port */ - YYSYMBOL_server_http_endpoint = 416, /* server_http_endpoint */ - YYSYMBOL_server_http_max_streams = 417, /* server_http_max_streams */ - YYSYMBOL_server_http_query_buffer_size = 418, /* server_http_query_buffer_size */ - YYSYMBOL_server_http_response_buffer_size = 419, /* server_http_response_buffer_size */ - YYSYMBOL_server_http_nodelay = 420, /* server_http_nodelay */ - YYSYMBOL_server_http_notls_downstream = 421, /* server_http_notls_downstream */ - YYSYMBOL_server_use_systemd = 422, /* server_use_systemd */ - YYSYMBOL_server_do_daemonize = 423, /* server_do_daemonize */ - YYSYMBOL_server_use_syslog = 424, /* server_use_syslog */ - YYSYMBOL_server_log_time_ascii = 425, /* server_log_time_ascii */ - YYSYMBOL_server_log_queries = 426, /* server_log_queries */ - YYSYMBOL_server_log_replies = 427, /* server_log_replies */ - YYSYMBOL_server_log_tag_queryreply = 428, /* server_log_tag_queryreply */ - YYSYMBOL_server_log_servfail = 429, /* server_log_servfail */ - YYSYMBOL_server_log_local_actions = 430, /* server_log_local_actions */ - YYSYMBOL_server_chroot = 431, /* server_chroot */ - YYSYMBOL_server_username = 432, /* server_username */ - YYSYMBOL_server_directory = 433, /* server_directory */ - YYSYMBOL_server_logfile = 434, /* server_logfile */ - YYSYMBOL_server_pidfile = 435, /* server_pidfile */ - YYSYMBOL_server_root_hints = 436, /* server_root_hints */ - YYSYMBOL_server_dlv_anchor_file = 437, /* server_dlv_anchor_file */ - YYSYMBOL_server_dlv_anchor = 438, /* server_dlv_anchor */ - YYSYMBOL_server_auto_trust_anchor_file = 439, /* server_auto_trust_anchor_file */ - YYSYMBOL_server_trust_anchor_file = 440, /* server_trust_anchor_file */ - YYSYMBOL_server_trusted_keys_file = 441, /* server_trusted_keys_file */ - YYSYMBOL_server_trust_anchor = 442, /* server_trust_anchor */ - YYSYMBOL_server_trust_anchor_signaling = 443, /* server_trust_anchor_signaling */ - YYSYMBOL_server_root_key_sentinel = 444, /* server_root_key_sentinel */ - YYSYMBOL_server_domain_insecure = 445, /* server_domain_insecure */ - YYSYMBOL_server_hide_identity = 446, /* server_hide_identity */ - YYSYMBOL_server_hide_version = 447, /* server_hide_version */ - YYSYMBOL_server_hide_trustanchor = 448, /* server_hide_trustanchor */ - YYSYMBOL_server_hide_http_user_agent = 449, /* server_hide_http_user_agent */ - YYSYMBOL_server_identity = 450, /* server_identity */ - YYSYMBOL_server_version = 451, /* server_version */ - YYSYMBOL_server_http_user_agent = 452, /* server_http_user_agent */ - YYSYMBOL_server_nsid = 453, /* server_nsid */ - YYSYMBOL_server_so_rcvbuf = 454, /* server_so_rcvbuf */ - YYSYMBOL_server_so_sndbuf = 455, /* server_so_sndbuf */ - YYSYMBOL_server_so_reuseport = 456, /* server_so_reuseport */ - YYSYMBOL_server_ip_transparent = 457, /* server_ip_transparent */ - YYSYMBOL_server_ip_freebind = 458, /* server_ip_freebind */ - YYSYMBOL_server_ip_dscp = 459, /* server_ip_dscp */ - YYSYMBOL_server_stream_wait_size = 460, /* server_stream_wait_size */ - YYSYMBOL_server_edns_buffer_size = 461, /* server_edns_buffer_size */ - YYSYMBOL_server_msg_buffer_size = 462, /* server_msg_buffer_size */ - YYSYMBOL_server_msg_cache_size = 463, /* server_msg_cache_size */ - YYSYMBOL_server_msg_cache_slabs = 464, /* server_msg_cache_slabs */ - YYSYMBOL_server_num_queries_per_thread = 465, /* server_num_queries_per_thread */ - YYSYMBOL_server_jostle_timeout = 466, /* server_jostle_timeout */ - YYSYMBOL_server_delay_close = 467, /* server_delay_close */ - YYSYMBOL_server_udp_connect = 468, /* server_udp_connect */ - YYSYMBOL_server_unblock_lan_zones = 469, /* server_unblock_lan_zones */ - YYSYMBOL_server_insecure_lan_zones = 470, /* server_insecure_lan_zones */ - YYSYMBOL_server_rrset_cache_size = 471, /* server_rrset_cache_size */ - YYSYMBOL_server_rrset_cache_slabs = 472, /* server_rrset_cache_slabs */ - YYSYMBOL_server_infra_host_ttl = 473, /* server_infra_host_ttl */ - YYSYMBOL_server_infra_lame_ttl = 474, /* server_infra_lame_ttl */ - YYSYMBOL_server_infra_cache_numhosts = 475, /* server_infra_cache_numhosts */ - YYSYMBOL_server_infra_cache_lame_size = 476, /* server_infra_cache_lame_size */ - YYSYMBOL_server_infra_cache_slabs = 477, /* server_infra_cache_slabs */ - YYSYMBOL_server_infra_cache_min_rtt = 478, /* server_infra_cache_min_rtt */ - YYSYMBOL_server_infra_cache_max_rtt = 479, /* server_infra_cache_max_rtt */ - YYSYMBOL_server_infra_keep_probing = 480, /* server_infra_keep_probing */ - YYSYMBOL_server_target_fetch_policy = 481, /* server_target_fetch_policy */ - YYSYMBOL_server_harden_short_bufsize = 482, /* server_harden_short_bufsize */ - YYSYMBOL_server_harden_large_queries = 483, /* server_harden_large_queries */ - YYSYMBOL_server_harden_glue = 484, /* server_harden_glue */ - YYSYMBOL_server_harden_dnssec_stripped = 485, /* server_harden_dnssec_stripped */ - YYSYMBOL_server_harden_below_nxdomain = 486, /* server_harden_below_nxdomain */ - YYSYMBOL_server_harden_referral_path = 487, /* server_harden_referral_path */ - YYSYMBOL_server_harden_algo_downgrade = 488, /* server_harden_algo_downgrade */ - YYSYMBOL_server_use_caps_for_id = 489, /* server_use_caps_for_id */ - YYSYMBOL_server_caps_whitelist = 490, /* server_caps_whitelist */ - YYSYMBOL_server_private_address = 491, /* server_private_address */ - YYSYMBOL_server_private_domain = 492, /* server_private_domain */ - YYSYMBOL_server_prefetch = 493, /* server_prefetch */ - YYSYMBOL_server_prefetch_key = 494, /* server_prefetch_key */ - YYSYMBOL_server_deny_any = 495, /* server_deny_any */ - YYSYMBOL_server_unwanted_reply_threshold = 496, /* server_unwanted_reply_threshold */ - YYSYMBOL_server_do_not_query_address = 497, /* server_do_not_query_address */ - YYSYMBOL_server_do_not_query_localhost = 498, /* server_do_not_query_localhost */ - YYSYMBOL_server_access_control = 499, /* server_access_control */ - YYSYMBOL_server_interface_action = 500, /* server_interface_action */ - YYSYMBOL_server_module_conf = 501, /* server_module_conf */ - YYSYMBOL_server_val_override_date = 502, /* server_val_override_date */ - YYSYMBOL_server_val_sig_skew_min = 503, /* server_val_sig_skew_min */ - YYSYMBOL_server_val_sig_skew_max = 504, /* server_val_sig_skew_max */ - YYSYMBOL_server_val_max_restart = 505, /* server_val_max_restart */ - YYSYMBOL_server_cache_max_ttl = 506, /* server_cache_max_ttl */ - YYSYMBOL_server_cache_max_negative_ttl = 507, /* server_cache_max_negative_ttl */ - YYSYMBOL_server_cache_min_ttl = 508, /* server_cache_min_ttl */ - YYSYMBOL_server_bogus_ttl = 509, /* server_bogus_ttl */ - YYSYMBOL_server_val_clean_additional = 510, /* server_val_clean_additional */ - YYSYMBOL_server_val_permissive_mode = 511, /* server_val_permissive_mode */ - YYSYMBOL_server_aggressive_nsec = 512, /* server_aggressive_nsec */ - YYSYMBOL_server_ignore_cd_flag = 513, /* server_ignore_cd_flag */ - YYSYMBOL_server_serve_expired = 514, /* server_serve_expired */ - YYSYMBOL_server_serve_expired_ttl = 515, /* server_serve_expired_ttl */ - YYSYMBOL_server_serve_expired_ttl_reset = 516, /* server_serve_expired_ttl_reset */ - YYSYMBOL_server_serve_expired_reply_ttl = 517, /* server_serve_expired_reply_ttl */ - YYSYMBOL_server_serve_expired_client_timeout = 518, /* server_serve_expired_client_timeout */ - YYSYMBOL_server_ede_serve_expired = 519, /* server_ede_serve_expired */ - YYSYMBOL_server_serve_original_ttl = 520, /* server_serve_original_ttl */ - YYSYMBOL_server_fake_dsa = 521, /* server_fake_dsa */ - YYSYMBOL_server_fake_sha1 = 522, /* server_fake_sha1 */ - YYSYMBOL_server_val_log_level = 523, /* server_val_log_level */ - YYSYMBOL_server_val_nsec3_keysize_iterations = 524, /* server_val_nsec3_keysize_iterations */ - YYSYMBOL_server_zonemd_permissive_mode = 525, /* server_zonemd_permissive_mode */ - YYSYMBOL_server_add_holddown = 526, /* server_add_holddown */ - YYSYMBOL_server_del_holddown = 527, /* server_del_holddown */ - YYSYMBOL_server_keep_missing = 528, /* server_keep_missing */ - YYSYMBOL_server_permit_small_holddown = 529, /* server_permit_small_holddown */ - YYSYMBOL_server_key_cache_size = 530, /* server_key_cache_size */ - YYSYMBOL_server_key_cache_slabs = 531, /* server_key_cache_slabs */ - YYSYMBOL_server_neg_cache_size = 532, /* server_neg_cache_size */ - YYSYMBOL_server_local_zone = 533, /* server_local_zone */ - YYSYMBOL_server_local_data = 534, /* server_local_data */ - YYSYMBOL_server_local_data_ptr = 535, /* server_local_data_ptr */ - YYSYMBOL_server_minimal_responses = 536, /* server_minimal_responses */ - YYSYMBOL_server_rrset_roundrobin = 537, /* server_rrset_roundrobin */ - YYSYMBOL_server_unknown_server_time_limit = 538, /* server_unknown_server_time_limit */ - YYSYMBOL_server_max_udp_size = 539, /* server_max_udp_size */ - YYSYMBOL_server_dns64_prefix = 540, /* server_dns64_prefix */ - YYSYMBOL_server_dns64_synthall = 541, /* server_dns64_synthall */ - YYSYMBOL_server_dns64_ignore_aaaa = 542, /* server_dns64_ignore_aaaa */ - YYSYMBOL_server_define_tag = 543, /* server_define_tag */ - YYSYMBOL_server_local_zone_tag = 544, /* server_local_zone_tag */ - YYSYMBOL_server_access_control_tag = 545, /* server_access_control_tag */ - YYSYMBOL_server_access_control_tag_action = 546, /* server_access_control_tag_action */ - YYSYMBOL_server_access_control_tag_data = 547, /* server_access_control_tag_data */ - YYSYMBOL_server_local_zone_override = 548, /* server_local_zone_override */ - YYSYMBOL_server_access_control_view = 549, /* server_access_control_view */ - YYSYMBOL_server_interface_tag = 550, /* server_interface_tag */ - YYSYMBOL_server_interface_tag_action = 551, /* server_interface_tag_action */ - YYSYMBOL_server_interface_tag_data = 552, /* server_interface_tag_data */ - YYSYMBOL_server_interface_view = 553, /* server_interface_view */ - YYSYMBOL_server_response_ip_tag = 554, /* server_response_ip_tag */ - YYSYMBOL_server_ip_ratelimit = 555, /* server_ip_ratelimit */ - YYSYMBOL_server_ratelimit = 556, /* server_ratelimit */ - YYSYMBOL_server_ip_ratelimit_size = 557, /* server_ip_ratelimit_size */ - YYSYMBOL_server_ratelimit_size = 558, /* server_ratelimit_size */ - YYSYMBOL_server_ip_ratelimit_slabs = 559, /* server_ip_ratelimit_slabs */ - YYSYMBOL_server_ratelimit_slabs = 560, /* server_ratelimit_slabs */ - YYSYMBOL_server_ratelimit_for_domain = 561, /* server_ratelimit_for_domain */ - YYSYMBOL_server_ratelimit_below_domain = 562, /* server_ratelimit_below_domain */ - YYSYMBOL_server_ip_ratelimit_factor = 563, /* server_ip_ratelimit_factor */ - YYSYMBOL_server_ratelimit_factor = 564, /* server_ratelimit_factor */ - YYSYMBOL_server_ip_ratelimit_backoff = 565, /* server_ip_ratelimit_backoff */ - YYSYMBOL_server_ratelimit_backoff = 566, /* server_ratelimit_backoff */ - YYSYMBOL_server_outbound_msg_retry = 567, /* server_outbound_msg_retry */ - YYSYMBOL_server_low_rtt = 568, /* server_low_rtt */ - YYSYMBOL_server_fast_server_num = 569, /* server_fast_server_num */ - YYSYMBOL_server_fast_server_permil = 570, /* server_fast_server_permil */ - YYSYMBOL_server_qname_minimisation = 571, /* server_qname_minimisation */ - YYSYMBOL_server_qname_minimisation_strict = 572, /* server_qname_minimisation_strict */ - YYSYMBOL_server_pad_responses = 573, /* server_pad_responses */ - YYSYMBOL_server_pad_responses_block_size = 574, /* server_pad_responses_block_size */ - YYSYMBOL_server_pad_queries = 575, /* server_pad_queries */ - YYSYMBOL_server_pad_queries_block_size = 576, /* server_pad_queries_block_size */ - YYSYMBOL_server_ipsecmod_enabled = 577, /* server_ipsecmod_enabled */ - YYSYMBOL_server_ipsecmod_ignore_bogus = 578, /* server_ipsecmod_ignore_bogus */ - YYSYMBOL_server_ipsecmod_hook = 579, /* server_ipsecmod_hook */ - YYSYMBOL_server_ipsecmod_max_ttl = 580, /* server_ipsecmod_max_ttl */ - YYSYMBOL_server_ipsecmod_whitelist = 581, /* server_ipsecmod_whitelist */ - YYSYMBOL_server_ipsecmod_strict = 582, /* server_ipsecmod_strict */ - YYSYMBOL_server_edns_client_string = 583, /* server_edns_client_string */ - YYSYMBOL_server_edns_client_string_opcode = 584, /* server_edns_client_string_opcode */ - YYSYMBOL_server_ede = 585, /* server_ede */ - YYSYMBOL_stub_name = 586, /* stub_name */ - YYSYMBOL_stub_host = 587, /* stub_host */ - YYSYMBOL_stub_addr = 588, /* stub_addr */ - YYSYMBOL_stub_first = 589, /* stub_first */ - YYSYMBOL_stub_no_cache = 590, /* stub_no_cache */ - YYSYMBOL_stub_ssl_upstream = 591, /* stub_ssl_upstream */ - YYSYMBOL_stub_tcp_upstream = 592, /* stub_tcp_upstream */ - YYSYMBOL_stub_prime = 593, /* stub_prime */ - YYSYMBOL_forward_name = 594, /* forward_name */ - YYSYMBOL_forward_host = 595, /* forward_host */ - YYSYMBOL_forward_addr = 596, /* forward_addr */ - YYSYMBOL_forward_first = 597, /* forward_first */ - YYSYMBOL_forward_no_cache = 598, /* forward_no_cache */ - YYSYMBOL_forward_ssl_upstream = 599, /* forward_ssl_upstream */ - YYSYMBOL_forward_tcp_upstream = 600, /* forward_tcp_upstream */ - YYSYMBOL_auth_name = 601, /* auth_name */ - YYSYMBOL_auth_zonefile = 602, /* auth_zonefile */ - YYSYMBOL_auth_master = 603, /* auth_master */ - YYSYMBOL_auth_url = 604, /* auth_url */ - YYSYMBOL_auth_allow_notify = 605, /* auth_allow_notify */ - YYSYMBOL_auth_zonemd_check = 606, /* auth_zonemd_check */ - YYSYMBOL_auth_zonemd_reject_absence = 607, /* auth_zonemd_reject_absence */ - YYSYMBOL_auth_for_downstream = 608, /* auth_for_downstream */ - YYSYMBOL_auth_for_upstream = 609, /* auth_for_upstream */ - YYSYMBOL_auth_fallback_enabled = 610, /* auth_fallback_enabled */ - YYSYMBOL_view_name = 611, /* view_name */ - YYSYMBOL_view_local_zone = 612, /* view_local_zone */ - YYSYMBOL_view_response_ip = 613, /* view_response_ip */ - YYSYMBOL_view_response_ip_data = 614, /* view_response_ip_data */ - YYSYMBOL_view_local_data = 615, /* view_local_data */ - YYSYMBOL_view_local_data_ptr = 616, /* view_local_data_ptr */ - YYSYMBOL_view_first = 617, /* view_first */ - YYSYMBOL_rcstart = 618, /* rcstart */ - YYSYMBOL_contents_rc = 619, /* contents_rc */ - YYSYMBOL_content_rc = 620, /* content_rc */ - YYSYMBOL_rc_control_enable = 621, /* rc_control_enable */ - YYSYMBOL_rc_control_port = 622, /* rc_control_port */ - YYSYMBOL_rc_control_interface = 623, /* rc_control_interface */ - YYSYMBOL_rc_control_use_cert = 624, /* rc_control_use_cert */ - YYSYMBOL_rc_server_key_file = 625, /* rc_server_key_file */ - YYSYMBOL_rc_server_cert_file = 626, /* rc_server_cert_file */ - YYSYMBOL_rc_control_key_file = 627, /* rc_control_key_file */ - YYSYMBOL_rc_control_cert_file = 628, /* rc_control_cert_file */ - YYSYMBOL_dtstart = 629, /* dtstart */ - YYSYMBOL_contents_dt = 630, /* contents_dt */ - YYSYMBOL_content_dt = 631, /* content_dt */ - YYSYMBOL_dt_dnstap_enable = 632, /* dt_dnstap_enable */ - YYSYMBOL_dt_dnstap_bidirectional = 633, /* dt_dnstap_bidirectional */ - YYSYMBOL_dt_dnstap_socket_path = 634, /* dt_dnstap_socket_path */ - YYSYMBOL_dt_dnstap_ip = 635, /* dt_dnstap_ip */ - YYSYMBOL_dt_dnstap_tls = 636, /* dt_dnstap_tls */ - YYSYMBOL_dt_dnstap_tls_server_name = 637, /* dt_dnstap_tls_server_name */ - YYSYMBOL_dt_dnstap_tls_cert_bundle = 638, /* dt_dnstap_tls_cert_bundle */ - YYSYMBOL_dt_dnstap_tls_client_key_file = 639, /* dt_dnstap_tls_client_key_file */ - YYSYMBOL_dt_dnstap_tls_client_cert_file = 640, /* dt_dnstap_tls_client_cert_file */ - YYSYMBOL_dt_dnstap_send_identity = 641, /* dt_dnstap_send_identity */ - YYSYMBOL_dt_dnstap_send_version = 642, /* dt_dnstap_send_version */ - YYSYMBOL_dt_dnstap_identity = 643, /* dt_dnstap_identity */ - YYSYMBOL_dt_dnstap_version = 644, /* dt_dnstap_version */ - YYSYMBOL_dt_dnstap_log_resolver_query_messages = 645, /* dt_dnstap_log_resolver_query_messages */ - YYSYMBOL_dt_dnstap_log_resolver_response_messages = 646, /* dt_dnstap_log_resolver_response_messages */ - YYSYMBOL_dt_dnstap_log_client_query_messages = 647, /* dt_dnstap_log_client_query_messages */ - YYSYMBOL_dt_dnstap_log_client_response_messages = 648, /* dt_dnstap_log_client_response_messages */ - YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 649, /* dt_dnstap_log_forwarder_query_messages */ - YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 650, /* dt_dnstap_log_forwarder_response_messages */ - YYSYMBOL_pythonstart = 651, /* pythonstart */ - YYSYMBOL_contents_py = 652, /* contents_py */ - YYSYMBOL_content_py = 653, /* content_py */ - YYSYMBOL_py_script = 654, /* py_script */ - YYSYMBOL_dynlibstart = 655, /* dynlibstart */ - YYSYMBOL_contents_dl = 656, /* contents_dl */ - YYSYMBOL_content_dl = 657, /* content_dl */ - YYSYMBOL_dl_file = 658, /* dl_file */ - YYSYMBOL_server_disable_dnssec_lame_check = 659, /* server_disable_dnssec_lame_check */ - YYSYMBOL_server_log_identity = 660, /* server_log_identity */ - YYSYMBOL_server_response_ip = 661, /* server_response_ip */ - YYSYMBOL_server_response_ip_data = 662, /* server_response_ip_data */ - YYSYMBOL_dnscstart = 663, /* dnscstart */ - YYSYMBOL_contents_dnsc = 664, /* contents_dnsc */ - YYSYMBOL_content_dnsc = 665, /* content_dnsc */ - YYSYMBOL_dnsc_dnscrypt_enable = 666, /* dnsc_dnscrypt_enable */ - YYSYMBOL_dnsc_dnscrypt_port = 667, /* dnsc_dnscrypt_port */ - YYSYMBOL_dnsc_dnscrypt_provider = 668, /* dnsc_dnscrypt_provider */ - YYSYMBOL_dnsc_dnscrypt_provider_cert = 669, /* dnsc_dnscrypt_provider_cert */ - YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 670, /* dnsc_dnscrypt_provider_cert_rotated */ - YYSYMBOL_dnsc_dnscrypt_secret_key = 671, /* dnsc_dnscrypt_secret_key */ - YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 672, /* dnsc_dnscrypt_shared_secret_cache_size */ - YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 673, /* dnsc_dnscrypt_shared_secret_cache_slabs */ - YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 674, /* dnsc_dnscrypt_nonce_cache_size */ - YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 675, /* dnsc_dnscrypt_nonce_cache_slabs */ - YYSYMBOL_cachedbstart = 676, /* cachedbstart */ - YYSYMBOL_contents_cachedb = 677, /* contents_cachedb */ - YYSYMBOL_content_cachedb = 678, /* content_cachedb */ - YYSYMBOL_cachedb_backend_name = 679, /* cachedb_backend_name */ - YYSYMBOL_cachedb_secret_seed = 680, /* cachedb_secret_seed */ - YYSYMBOL_redis_server_host = 681, /* redis_server_host */ - YYSYMBOL_redis_server_port = 682, /* redis_server_port */ - YYSYMBOL_redis_timeout = 683, /* redis_timeout */ - YYSYMBOL_redis_expire_records = 684, /* redis_expire_records */ - YYSYMBOL_server_tcp_connection_limit = 685, /* server_tcp_connection_limit */ - YYSYMBOL_ipsetstart = 686, /* ipsetstart */ - YYSYMBOL_contents_ipset = 687, /* contents_ipset */ - YYSYMBOL_content_ipset = 688, /* content_ipset */ - YYSYMBOL_ipset_name_v4 = 689, /* ipset_name_v4 */ - YYSYMBOL_ipset_name_v6 = 690 /* ipset_name_v6 */ + YYSYMBOL_VAR_PROXY_PROTOCOL_PORT = 333, /* VAR_PROXY_PROTOCOL_PORT */ + YYSYMBOL_YYACCEPT = 334, /* $accept */ + YYSYMBOL_toplevelvars = 335, /* toplevelvars */ + YYSYMBOL_toplevelvar = 336, /* toplevelvar */ + YYSYMBOL_force_toplevel = 337, /* force_toplevel */ + YYSYMBOL_serverstart = 338, /* serverstart */ + YYSYMBOL_contents_server = 339, /* contents_server */ + YYSYMBOL_content_server = 340, /* content_server */ + YYSYMBOL_stubstart = 341, /* stubstart */ + YYSYMBOL_contents_stub = 342, /* contents_stub */ + YYSYMBOL_content_stub = 343, /* content_stub */ + YYSYMBOL_forwardstart = 344, /* forwardstart */ + YYSYMBOL_contents_forward = 345, /* contents_forward */ + YYSYMBOL_content_forward = 346, /* content_forward */ + YYSYMBOL_viewstart = 347, /* viewstart */ + YYSYMBOL_contents_view = 348, /* contents_view */ + YYSYMBOL_content_view = 349, /* content_view */ + YYSYMBOL_authstart = 350, /* authstart */ + YYSYMBOL_contents_auth = 351, /* contents_auth */ + YYSYMBOL_content_auth = 352, /* content_auth */ + YYSYMBOL_rpz_tag = 353, /* rpz_tag */ + YYSYMBOL_rpz_action_override = 354, /* rpz_action_override */ + YYSYMBOL_rpz_cname_override = 355, /* rpz_cname_override */ + YYSYMBOL_rpz_log = 356, /* rpz_log */ + YYSYMBOL_rpz_log_name = 357, /* rpz_log_name */ + YYSYMBOL_rpz_signal_nxdomain_ra = 358, /* rpz_signal_nxdomain_ra */ + YYSYMBOL_rpzstart = 359, /* rpzstart */ + YYSYMBOL_contents_rpz = 360, /* contents_rpz */ + YYSYMBOL_content_rpz = 361, /* content_rpz */ + YYSYMBOL_server_num_threads = 362, /* server_num_threads */ + YYSYMBOL_server_verbosity = 363, /* server_verbosity */ + YYSYMBOL_server_statistics_interval = 364, /* server_statistics_interval */ + YYSYMBOL_server_statistics_cumulative = 365, /* server_statistics_cumulative */ + YYSYMBOL_server_extended_statistics = 366, /* server_extended_statistics */ + YYSYMBOL_server_shm_enable = 367, /* server_shm_enable */ + YYSYMBOL_server_shm_key = 368, /* server_shm_key */ + YYSYMBOL_server_port = 369, /* server_port */ + YYSYMBOL_server_send_client_subnet = 370, /* server_send_client_subnet */ + YYSYMBOL_server_client_subnet_zone = 371, /* server_client_subnet_zone */ + YYSYMBOL_server_client_subnet_always_forward = 372, /* server_client_subnet_always_forward */ + YYSYMBOL_server_client_subnet_opcode = 373, /* server_client_subnet_opcode */ + YYSYMBOL_server_max_client_subnet_ipv4 = 374, /* server_max_client_subnet_ipv4 */ + YYSYMBOL_server_max_client_subnet_ipv6 = 375, /* server_max_client_subnet_ipv6 */ + YYSYMBOL_server_min_client_subnet_ipv4 = 376, /* server_min_client_subnet_ipv4 */ + YYSYMBOL_server_min_client_subnet_ipv6 = 377, /* server_min_client_subnet_ipv6 */ + YYSYMBOL_server_max_ecs_tree_size_ipv4 = 378, /* server_max_ecs_tree_size_ipv4 */ + YYSYMBOL_server_max_ecs_tree_size_ipv6 = 379, /* server_max_ecs_tree_size_ipv6 */ + YYSYMBOL_server_interface = 380, /* server_interface */ + YYSYMBOL_server_outgoing_interface = 381, /* server_outgoing_interface */ + YYSYMBOL_server_outgoing_range = 382, /* server_outgoing_range */ + YYSYMBOL_server_outgoing_port_permit = 383, /* server_outgoing_port_permit */ + YYSYMBOL_server_outgoing_port_avoid = 384, /* server_outgoing_port_avoid */ + YYSYMBOL_server_outgoing_num_tcp = 385, /* server_outgoing_num_tcp */ + YYSYMBOL_server_incoming_num_tcp = 386, /* server_incoming_num_tcp */ + YYSYMBOL_server_interface_automatic = 387, /* server_interface_automatic */ + YYSYMBOL_server_interface_automatic_ports = 388, /* server_interface_automatic_ports */ + YYSYMBOL_server_do_ip4 = 389, /* server_do_ip4 */ + YYSYMBOL_server_do_ip6 = 390, /* server_do_ip6 */ + YYSYMBOL_server_do_udp = 391, /* server_do_udp */ + YYSYMBOL_server_do_tcp = 392, /* server_do_tcp */ + YYSYMBOL_server_prefer_ip4 = 393, /* server_prefer_ip4 */ + YYSYMBOL_server_prefer_ip6 = 394, /* server_prefer_ip6 */ + YYSYMBOL_server_tcp_mss = 395, /* server_tcp_mss */ + YYSYMBOL_server_outgoing_tcp_mss = 396, /* server_outgoing_tcp_mss */ + YYSYMBOL_server_tcp_idle_timeout = 397, /* server_tcp_idle_timeout */ + YYSYMBOL_server_max_reuse_tcp_queries = 398, /* server_max_reuse_tcp_queries */ + YYSYMBOL_server_tcp_reuse_timeout = 399, /* server_tcp_reuse_timeout */ + YYSYMBOL_server_tcp_auth_query_timeout = 400, /* server_tcp_auth_query_timeout */ + YYSYMBOL_server_tcp_keepalive = 401, /* server_tcp_keepalive */ + YYSYMBOL_server_tcp_keepalive_timeout = 402, /* server_tcp_keepalive_timeout */ + YYSYMBOL_server_tcp_upstream = 403, /* server_tcp_upstream */ + YYSYMBOL_server_udp_upstream_without_downstream = 404, /* server_udp_upstream_without_downstream */ + YYSYMBOL_server_ssl_upstream = 405, /* server_ssl_upstream */ + YYSYMBOL_server_ssl_service_key = 406, /* server_ssl_service_key */ + YYSYMBOL_server_ssl_service_pem = 407, /* server_ssl_service_pem */ + YYSYMBOL_server_ssl_port = 408, /* server_ssl_port */ + YYSYMBOL_server_tls_cert_bundle = 409, /* server_tls_cert_bundle */ + YYSYMBOL_server_tls_win_cert = 410, /* server_tls_win_cert */ + YYSYMBOL_server_tls_additional_port = 411, /* server_tls_additional_port */ + YYSYMBOL_server_tls_ciphers = 412, /* server_tls_ciphers */ + YYSYMBOL_server_tls_ciphersuites = 413, /* server_tls_ciphersuites */ + YYSYMBOL_server_tls_session_ticket_keys = 414, /* server_tls_session_ticket_keys */ + YYSYMBOL_server_tls_use_sni = 415, /* server_tls_use_sni */ + YYSYMBOL_server_https_port = 416, /* server_https_port */ + YYSYMBOL_server_http_endpoint = 417, /* server_http_endpoint */ + YYSYMBOL_server_http_max_streams = 418, /* server_http_max_streams */ + YYSYMBOL_server_http_query_buffer_size = 419, /* server_http_query_buffer_size */ + YYSYMBOL_server_http_response_buffer_size = 420, /* server_http_response_buffer_size */ + YYSYMBOL_server_http_nodelay = 421, /* server_http_nodelay */ + YYSYMBOL_server_http_notls_downstream = 422, /* server_http_notls_downstream */ + YYSYMBOL_server_use_systemd = 423, /* server_use_systemd */ + YYSYMBOL_server_do_daemonize = 424, /* server_do_daemonize */ + YYSYMBOL_server_use_syslog = 425, /* server_use_syslog */ + YYSYMBOL_server_log_time_ascii = 426, /* server_log_time_ascii */ + YYSYMBOL_server_log_queries = 427, /* server_log_queries */ + YYSYMBOL_server_log_replies = 428, /* server_log_replies */ + YYSYMBOL_server_log_tag_queryreply = 429, /* server_log_tag_queryreply */ + YYSYMBOL_server_log_servfail = 430, /* server_log_servfail */ + YYSYMBOL_server_log_local_actions = 431, /* server_log_local_actions */ + YYSYMBOL_server_chroot = 432, /* server_chroot */ + YYSYMBOL_server_username = 433, /* server_username */ + YYSYMBOL_server_directory = 434, /* server_directory */ + YYSYMBOL_server_logfile = 435, /* server_logfile */ + YYSYMBOL_server_pidfile = 436, /* server_pidfile */ + YYSYMBOL_server_root_hints = 437, /* server_root_hints */ + YYSYMBOL_server_dlv_anchor_file = 438, /* server_dlv_anchor_file */ + YYSYMBOL_server_dlv_anchor = 439, /* server_dlv_anchor */ + YYSYMBOL_server_auto_trust_anchor_file = 440, /* server_auto_trust_anchor_file */ + YYSYMBOL_server_trust_anchor_file = 441, /* server_trust_anchor_file */ + YYSYMBOL_server_trusted_keys_file = 442, /* server_trusted_keys_file */ + YYSYMBOL_server_trust_anchor = 443, /* server_trust_anchor */ + YYSYMBOL_server_trust_anchor_signaling = 444, /* server_trust_anchor_signaling */ + YYSYMBOL_server_root_key_sentinel = 445, /* server_root_key_sentinel */ + YYSYMBOL_server_domain_insecure = 446, /* server_domain_insecure */ + YYSYMBOL_server_hide_identity = 447, /* server_hide_identity */ + YYSYMBOL_server_hide_version = 448, /* server_hide_version */ + YYSYMBOL_server_hide_trustanchor = 449, /* server_hide_trustanchor */ + YYSYMBOL_server_hide_http_user_agent = 450, /* server_hide_http_user_agent */ + YYSYMBOL_server_identity = 451, /* server_identity */ + YYSYMBOL_server_version = 452, /* server_version */ + YYSYMBOL_server_http_user_agent = 453, /* server_http_user_agent */ + YYSYMBOL_server_nsid = 454, /* server_nsid */ + YYSYMBOL_server_so_rcvbuf = 455, /* server_so_rcvbuf */ + YYSYMBOL_server_so_sndbuf = 456, /* server_so_sndbuf */ + YYSYMBOL_server_so_reuseport = 457, /* server_so_reuseport */ + YYSYMBOL_server_ip_transparent = 458, /* server_ip_transparent */ + YYSYMBOL_server_ip_freebind = 459, /* server_ip_freebind */ + YYSYMBOL_server_ip_dscp = 460, /* server_ip_dscp */ + YYSYMBOL_server_stream_wait_size = 461, /* server_stream_wait_size */ + YYSYMBOL_server_edns_buffer_size = 462, /* server_edns_buffer_size */ + YYSYMBOL_server_msg_buffer_size = 463, /* server_msg_buffer_size */ + YYSYMBOL_server_msg_cache_size = 464, /* server_msg_cache_size */ + YYSYMBOL_server_msg_cache_slabs = 465, /* server_msg_cache_slabs */ + YYSYMBOL_server_num_queries_per_thread = 466, /* server_num_queries_per_thread */ + YYSYMBOL_server_jostle_timeout = 467, /* server_jostle_timeout */ + YYSYMBOL_server_delay_close = 468, /* server_delay_close */ + YYSYMBOL_server_udp_connect = 469, /* server_udp_connect */ + YYSYMBOL_server_unblock_lan_zones = 470, /* server_unblock_lan_zones */ + YYSYMBOL_server_insecure_lan_zones = 471, /* server_insecure_lan_zones */ + YYSYMBOL_server_rrset_cache_size = 472, /* server_rrset_cache_size */ + YYSYMBOL_server_rrset_cache_slabs = 473, /* server_rrset_cache_slabs */ + YYSYMBOL_server_infra_host_ttl = 474, /* server_infra_host_ttl */ + YYSYMBOL_server_infra_lame_ttl = 475, /* server_infra_lame_ttl */ + YYSYMBOL_server_infra_cache_numhosts = 476, /* server_infra_cache_numhosts */ + YYSYMBOL_server_infra_cache_lame_size = 477, /* server_infra_cache_lame_size */ + YYSYMBOL_server_infra_cache_slabs = 478, /* server_infra_cache_slabs */ + YYSYMBOL_server_infra_cache_min_rtt = 479, /* server_infra_cache_min_rtt */ + YYSYMBOL_server_infra_cache_max_rtt = 480, /* server_infra_cache_max_rtt */ + YYSYMBOL_server_infra_keep_probing = 481, /* server_infra_keep_probing */ + YYSYMBOL_server_target_fetch_policy = 482, /* server_target_fetch_policy */ + YYSYMBOL_server_harden_short_bufsize = 483, /* server_harden_short_bufsize */ + YYSYMBOL_server_harden_large_queries = 484, /* server_harden_large_queries */ + YYSYMBOL_server_harden_glue = 485, /* server_harden_glue */ + YYSYMBOL_server_harden_dnssec_stripped = 486, /* server_harden_dnssec_stripped */ + YYSYMBOL_server_harden_below_nxdomain = 487, /* server_harden_below_nxdomain */ + YYSYMBOL_server_harden_referral_path = 488, /* server_harden_referral_path */ + YYSYMBOL_server_harden_algo_downgrade = 489, /* server_harden_algo_downgrade */ + YYSYMBOL_server_use_caps_for_id = 490, /* server_use_caps_for_id */ + YYSYMBOL_server_caps_whitelist = 491, /* server_caps_whitelist */ + YYSYMBOL_server_private_address = 492, /* server_private_address */ + YYSYMBOL_server_private_domain = 493, /* server_private_domain */ + YYSYMBOL_server_prefetch = 494, /* server_prefetch */ + YYSYMBOL_server_prefetch_key = 495, /* server_prefetch_key */ + YYSYMBOL_server_deny_any = 496, /* server_deny_any */ + YYSYMBOL_server_unwanted_reply_threshold = 497, /* server_unwanted_reply_threshold */ + YYSYMBOL_server_do_not_query_address = 498, /* server_do_not_query_address */ + YYSYMBOL_server_do_not_query_localhost = 499, /* server_do_not_query_localhost */ + YYSYMBOL_server_access_control = 500, /* server_access_control */ + YYSYMBOL_server_interface_action = 501, /* server_interface_action */ + YYSYMBOL_server_module_conf = 502, /* server_module_conf */ + YYSYMBOL_server_val_override_date = 503, /* server_val_override_date */ + YYSYMBOL_server_val_sig_skew_min = 504, /* server_val_sig_skew_min */ + YYSYMBOL_server_val_sig_skew_max = 505, /* server_val_sig_skew_max */ + YYSYMBOL_server_val_max_restart = 506, /* server_val_max_restart */ + YYSYMBOL_server_cache_max_ttl = 507, /* server_cache_max_ttl */ + YYSYMBOL_server_cache_max_negative_ttl = 508, /* server_cache_max_negative_ttl */ + YYSYMBOL_server_cache_min_ttl = 509, /* server_cache_min_ttl */ + YYSYMBOL_server_bogus_ttl = 510, /* server_bogus_ttl */ + YYSYMBOL_server_val_clean_additional = 511, /* server_val_clean_additional */ + YYSYMBOL_server_val_permissive_mode = 512, /* server_val_permissive_mode */ + YYSYMBOL_server_aggressive_nsec = 513, /* server_aggressive_nsec */ + YYSYMBOL_server_ignore_cd_flag = 514, /* server_ignore_cd_flag */ + YYSYMBOL_server_serve_expired = 515, /* server_serve_expired */ + YYSYMBOL_server_serve_expired_ttl = 516, /* server_serve_expired_ttl */ + YYSYMBOL_server_serve_expired_ttl_reset = 517, /* server_serve_expired_ttl_reset */ + YYSYMBOL_server_serve_expired_reply_ttl = 518, /* server_serve_expired_reply_ttl */ + YYSYMBOL_server_serve_expired_client_timeout = 519, /* server_serve_expired_client_timeout */ + YYSYMBOL_server_ede_serve_expired = 520, /* server_ede_serve_expired */ + YYSYMBOL_server_serve_original_ttl = 521, /* server_serve_original_ttl */ + YYSYMBOL_server_fake_dsa = 522, /* server_fake_dsa */ + YYSYMBOL_server_fake_sha1 = 523, /* server_fake_sha1 */ + YYSYMBOL_server_val_log_level = 524, /* server_val_log_level */ + YYSYMBOL_server_val_nsec3_keysize_iterations = 525, /* server_val_nsec3_keysize_iterations */ + YYSYMBOL_server_zonemd_permissive_mode = 526, /* server_zonemd_permissive_mode */ + YYSYMBOL_server_add_holddown = 527, /* server_add_holddown */ + YYSYMBOL_server_del_holddown = 528, /* server_del_holddown */ + YYSYMBOL_server_keep_missing = 529, /* server_keep_missing */ + YYSYMBOL_server_permit_small_holddown = 530, /* server_permit_small_holddown */ + YYSYMBOL_server_key_cache_size = 531, /* server_key_cache_size */ + YYSYMBOL_server_key_cache_slabs = 532, /* server_key_cache_slabs */ + YYSYMBOL_server_neg_cache_size = 533, /* server_neg_cache_size */ + YYSYMBOL_server_local_zone = 534, /* server_local_zone */ + YYSYMBOL_server_local_data = 535, /* server_local_data */ + YYSYMBOL_server_local_data_ptr = 536, /* server_local_data_ptr */ + YYSYMBOL_server_minimal_responses = 537, /* server_minimal_responses */ + YYSYMBOL_server_rrset_roundrobin = 538, /* server_rrset_roundrobin */ + YYSYMBOL_server_unknown_server_time_limit = 539, /* server_unknown_server_time_limit */ + YYSYMBOL_server_max_udp_size = 540, /* server_max_udp_size */ + YYSYMBOL_server_dns64_prefix = 541, /* server_dns64_prefix */ + YYSYMBOL_server_dns64_synthall = 542, /* server_dns64_synthall */ + YYSYMBOL_server_dns64_ignore_aaaa = 543, /* server_dns64_ignore_aaaa */ + YYSYMBOL_server_define_tag = 544, /* server_define_tag */ + YYSYMBOL_server_local_zone_tag = 545, /* server_local_zone_tag */ + YYSYMBOL_server_access_control_tag = 546, /* server_access_control_tag */ + YYSYMBOL_server_access_control_tag_action = 547, /* server_access_control_tag_action */ + YYSYMBOL_server_access_control_tag_data = 548, /* server_access_control_tag_data */ + YYSYMBOL_server_local_zone_override = 549, /* server_local_zone_override */ + YYSYMBOL_server_access_control_view = 550, /* server_access_control_view */ + YYSYMBOL_server_interface_tag = 551, /* server_interface_tag */ + YYSYMBOL_server_interface_tag_action = 552, /* server_interface_tag_action */ + YYSYMBOL_server_interface_tag_data = 553, /* server_interface_tag_data */ + YYSYMBOL_server_interface_view = 554, /* server_interface_view */ + YYSYMBOL_server_response_ip_tag = 555, /* server_response_ip_tag */ + YYSYMBOL_server_ip_ratelimit = 556, /* server_ip_ratelimit */ + YYSYMBOL_server_ratelimit = 557, /* server_ratelimit */ + YYSYMBOL_server_ip_ratelimit_size = 558, /* server_ip_ratelimit_size */ + YYSYMBOL_server_ratelimit_size = 559, /* server_ratelimit_size */ + YYSYMBOL_server_ip_ratelimit_slabs = 560, /* server_ip_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_slabs = 561, /* server_ratelimit_slabs */ + YYSYMBOL_server_ratelimit_for_domain = 562, /* server_ratelimit_for_domain */ + YYSYMBOL_server_ratelimit_below_domain = 563, /* server_ratelimit_below_domain */ + YYSYMBOL_server_ip_ratelimit_factor = 564, /* server_ip_ratelimit_factor */ + YYSYMBOL_server_ratelimit_factor = 565, /* server_ratelimit_factor */ + YYSYMBOL_server_ip_ratelimit_backoff = 566, /* server_ip_ratelimit_backoff */ + YYSYMBOL_server_ratelimit_backoff = 567, /* server_ratelimit_backoff */ + YYSYMBOL_server_outbound_msg_retry = 568, /* server_outbound_msg_retry */ + YYSYMBOL_server_low_rtt = 569, /* server_low_rtt */ + YYSYMBOL_server_fast_server_num = 570, /* server_fast_server_num */ + YYSYMBOL_server_fast_server_permil = 571, /* server_fast_server_permil */ + YYSYMBOL_server_qname_minimisation = 572, /* server_qname_minimisation */ + YYSYMBOL_server_qname_minimisation_strict = 573, /* server_qname_minimisation_strict */ + YYSYMBOL_server_pad_responses = 574, /* server_pad_responses */ + YYSYMBOL_server_pad_responses_block_size = 575, /* server_pad_responses_block_size */ + YYSYMBOL_server_pad_queries = 576, /* server_pad_queries */ + YYSYMBOL_server_pad_queries_block_size = 577, /* server_pad_queries_block_size */ + YYSYMBOL_server_ipsecmod_enabled = 578, /* server_ipsecmod_enabled */ + YYSYMBOL_server_ipsecmod_ignore_bogus = 579, /* server_ipsecmod_ignore_bogus */ + YYSYMBOL_server_ipsecmod_hook = 580, /* server_ipsecmod_hook */ + YYSYMBOL_server_ipsecmod_max_ttl = 581, /* server_ipsecmod_max_ttl */ + YYSYMBOL_server_ipsecmod_whitelist = 582, /* server_ipsecmod_whitelist */ + YYSYMBOL_server_ipsecmod_strict = 583, /* server_ipsecmod_strict */ + YYSYMBOL_server_edns_client_string = 584, /* server_edns_client_string */ + YYSYMBOL_server_edns_client_string_opcode = 585, /* server_edns_client_string_opcode */ + YYSYMBOL_server_ede = 586, /* server_ede */ + YYSYMBOL_server_proxy_protocol_port = 587, /* server_proxy_protocol_port */ + YYSYMBOL_stub_name = 588, /* stub_name */ + YYSYMBOL_stub_host = 589, /* stub_host */ + YYSYMBOL_stub_addr = 590, /* stub_addr */ + YYSYMBOL_stub_first = 591, /* stub_first */ + YYSYMBOL_stub_no_cache = 592, /* stub_no_cache */ + YYSYMBOL_stub_ssl_upstream = 593, /* stub_ssl_upstream */ + YYSYMBOL_stub_tcp_upstream = 594, /* stub_tcp_upstream */ + YYSYMBOL_stub_prime = 595, /* stub_prime */ + YYSYMBOL_forward_name = 596, /* forward_name */ + YYSYMBOL_forward_host = 597, /* forward_host */ + YYSYMBOL_forward_addr = 598, /* forward_addr */ + YYSYMBOL_forward_first = 599, /* forward_first */ + YYSYMBOL_forward_no_cache = 600, /* forward_no_cache */ + YYSYMBOL_forward_ssl_upstream = 601, /* forward_ssl_upstream */ + YYSYMBOL_forward_tcp_upstream = 602, /* forward_tcp_upstream */ + YYSYMBOL_auth_name = 603, /* auth_name */ + YYSYMBOL_auth_zonefile = 604, /* auth_zonefile */ + YYSYMBOL_auth_master = 605, /* auth_master */ + YYSYMBOL_auth_url = 606, /* auth_url */ + YYSYMBOL_auth_allow_notify = 607, /* auth_allow_notify */ + YYSYMBOL_auth_zonemd_check = 608, /* auth_zonemd_check */ + YYSYMBOL_auth_zonemd_reject_absence = 609, /* auth_zonemd_reject_absence */ + YYSYMBOL_auth_for_downstream = 610, /* auth_for_downstream */ + YYSYMBOL_auth_for_upstream = 611, /* auth_for_upstream */ + YYSYMBOL_auth_fallback_enabled = 612, /* auth_fallback_enabled */ + YYSYMBOL_view_name = 613, /* view_name */ + YYSYMBOL_view_local_zone = 614, /* view_local_zone */ + YYSYMBOL_view_response_ip = 615, /* view_response_ip */ + YYSYMBOL_view_response_ip_data = 616, /* view_response_ip_data */ + YYSYMBOL_view_local_data = 617, /* view_local_data */ + YYSYMBOL_view_local_data_ptr = 618, /* view_local_data_ptr */ + YYSYMBOL_view_first = 619, /* view_first */ + YYSYMBOL_rcstart = 620, /* rcstart */ + YYSYMBOL_contents_rc = 621, /* contents_rc */ + YYSYMBOL_content_rc = 622, /* content_rc */ + YYSYMBOL_rc_control_enable = 623, /* rc_control_enable */ + YYSYMBOL_rc_control_port = 624, /* rc_control_port */ + YYSYMBOL_rc_control_interface = 625, /* rc_control_interface */ + YYSYMBOL_rc_control_use_cert = 626, /* rc_control_use_cert */ + YYSYMBOL_rc_server_key_file = 627, /* rc_server_key_file */ + YYSYMBOL_rc_server_cert_file = 628, /* rc_server_cert_file */ + YYSYMBOL_rc_control_key_file = 629, /* rc_control_key_file */ + YYSYMBOL_rc_control_cert_file = 630, /* rc_control_cert_file */ + YYSYMBOL_dtstart = 631, /* dtstart */ + YYSYMBOL_contents_dt = 632, /* contents_dt */ + YYSYMBOL_content_dt = 633, /* content_dt */ + YYSYMBOL_dt_dnstap_enable = 634, /* dt_dnstap_enable */ + YYSYMBOL_dt_dnstap_bidirectional = 635, /* dt_dnstap_bidirectional */ + YYSYMBOL_dt_dnstap_socket_path = 636, /* dt_dnstap_socket_path */ + YYSYMBOL_dt_dnstap_ip = 637, /* dt_dnstap_ip */ + YYSYMBOL_dt_dnstap_tls = 638, /* dt_dnstap_tls */ + YYSYMBOL_dt_dnstap_tls_server_name = 639, /* dt_dnstap_tls_server_name */ + YYSYMBOL_dt_dnstap_tls_cert_bundle = 640, /* dt_dnstap_tls_cert_bundle */ + YYSYMBOL_dt_dnstap_tls_client_key_file = 641, /* dt_dnstap_tls_client_key_file */ + YYSYMBOL_dt_dnstap_tls_client_cert_file = 642, /* dt_dnstap_tls_client_cert_file */ + YYSYMBOL_dt_dnstap_send_identity = 643, /* dt_dnstap_send_identity */ + YYSYMBOL_dt_dnstap_send_version = 644, /* dt_dnstap_send_version */ + YYSYMBOL_dt_dnstap_identity = 645, /* dt_dnstap_identity */ + YYSYMBOL_dt_dnstap_version = 646, /* dt_dnstap_version */ + YYSYMBOL_dt_dnstap_log_resolver_query_messages = 647, /* dt_dnstap_log_resolver_query_messages */ + YYSYMBOL_dt_dnstap_log_resolver_response_messages = 648, /* dt_dnstap_log_resolver_response_messages */ + YYSYMBOL_dt_dnstap_log_client_query_messages = 649, /* dt_dnstap_log_client_query_messages */ + YYSYMBOL_dt_dnstap_log_client_response_messages = 650, /* dt_dnstap_log_client_response_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 651, /* dt_dnstap_log_forwarder_query_messages */ + YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 652, /* dt_dnstap_log_forwarder_response_messages */ + YYSYMBOL_pythonstart = 653, /* pythonstart */ + YYSYMBOL_contents_py = 654, /* contents_py */ + YYSYMBOL_content_py = 655, /* content_py */ + YYSYMBOL_py_script = 656, /* py_script */ + YYSYMBOL_dynlibstart = 657, /* dynlibstart */ + YYSYMBOL_contents_dl = 658, /* contents_dl */ + YYSYMBOL_content_dl = 659, /* content_dl */ + YYSYMBOL_dl_file = 660, /* dl_file */ + YYSYMBOL_server_disable_dnssec_lame_check = 661, /* server_disable_dnssec_lame_check */ + YYSYMBOL_server_log_identity = 662, /* server_log_identity */ + YYSYMBOL_server_response_ip = 663, /* server_response_ip */ + YYSYMBOL_server_response_ip_data = 664, /* server_response_ip_data */ + YYSYMBOL_dnscstart = 665, /* dnscstart */ + YYSYMBOL_contents_dnsc = 666, /* contents_dnsc */ + YYSYMBOL_content_dnsc = 667, /* content_dnsc */ + YYSYMBOL_dnsc_dnscrypt_enable = 668, /* dnsc_dnscrypt_enable */ + YYSYMBOL_dnsc_dnscrypt_port = 669, /* dnsc_dnscrypt_port */ + YYSYMBOL_dnsc_dnscrypt_provider = 670, /* dnsc_dnscrypt_provider */ + YYSYMBOL_dnsc_dnscrypt_provider_cert = 671, /* dnsc_dnscrypt_provider_cert */ + YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 672, /* dnsc_dnscrypt_provider_cert_rotated */ + YYSYMBOL_dnsc_dnscrypt_secret_key = 673, /* dnsc_dnscrypt_secret_key */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 674, /* dnsc_dnscrypt_shared_secret_cache_size */ + YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 675, /* dnsc_dnscrypt_shared_secret_cache_slabs */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 676, /* dnsc_dnscrypt_nonce_cache_size */ + YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 677, /* dnsc_dnscrypt_nonce_cache_slabs */ + YYSYMBOL_cachedbstart = 678, /* cachedbstart */ + YYSYMBOL_contents_cachedb = 679, /* contents_cachedb */ + YYSYMBOL_content_cachedb = 680, /* content_cachedb */ + YYSYMBOL_cachedb_backend_name = 681, /* cachedb_backend_name */ + YYSYMBOL_cachedb_secret_seed = 682, /* cachedb_secret_seed */ + YYSYMBOL_redis_server_host = 683, /* redis_server_host */ + YYSYMBOL_redis_server_port = 684, /* redis_server_port */ + YYSYMBOL_redis_timeout = 685, /* redis_timeout */ + YYSYMBOL_redis_expire_records = 686, /* redis_expire_records */ + YYSYMBOL_server_tcp_connection_limit = 687, /* server_tcp_connection_limit */ + YYSYMBOL_ipsetstart = 688, /* ipsetstart */ + YYSYMBOL_contents_ipset = 689, /* contents_ipset */ + YYSYMBOL_content_ipset = 690, /* content_ipset */ + YYSYMBOL_ipset_name_v4 = 691, /* ipset_name_v4 */ + YYSYMBOL_ipset_name_v6 = 692 /* ipset_name_v6 */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -1143,19 +1145,19 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 711 +#define YYLAST 713 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 333 +#define YYNTOKENS 334 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 358 +#define YYNNTS 359 /* YYNRULES -- Number of rules. */ -#define YYNRULES 693 +#define YYNRULES 695 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 1037 +#define YYNSTATES 1040 /* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 587 +#define YYMAXUTOK 588 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -1227,83 +1229,83 @@ static const yytype_int16 yytranslate[] = 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332 + 325, 326, 327, 328, 329, 330, 331, 332, 333 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 198, 198, 198, 199, 199, 200, 200, 201, 201, - 201, 202, 202, 203, 203, 204, 204, 205, 207, 214, - 220, 221, 222, 222, 222, 223, 223, 224, 224, 224, - 225, 225, 226, 226, 226, 227, 227, 228, 228, 228, - 229, 229, 229, 230, 230, 231, 231, 232, 232, 233, - 233, 234, 234, 235, 235, 236, 236, 237, 237, 238, - 238, 238, 239, 239, 240, 240, 240, 241, 241, 241, - 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, - 246, 247, 247, 248, 248, 249, 249, 249, 250, 250, - 251, 251, 252, 252, 253, 253, 253, 254, 254, 255, - 255, 256, 256, 257, 257, 258, 258, 259, 259, 260, - 260, 261, 261, 262, 262, 262, 263, 263, 263, 264, - 264, 264, 265, 265, 265, 265, 266, 267, 267, 267, - 268, 268, 268, 269, 269, 270, 270, 271, 271, 271, - 272, 272, 272, 273, 273, 274, 274, 274, 275, 275, - 275, 276, 276, 276, 277, 277, 278, 278, 279, 279, - 280, 281, 281, 282, 282, 283, 283, 284, 284, 285, - 285, 286, 286, 287, 287, 288, 288, 289, 289, 290, - 290, 291, 291, 291, 292, 292, 293, 293, 294, 294, - 295, 295, 295, 296, 296, 297, 298, 298, 299, 299, - 300, 301, 301, 302, 302, 303, 303, 303, 304, 304, - 305, 305, 305, 306, 306, 306, 307, 307, 308, 309, - 309, 310, 310, 311, 311, 312, 312, 313, 313, 313, - 314, 314, 314, 315, 315, 315, 316, 316, 317, 317, - 318, 318, 319, 319, 320, 320, 321, 321, 322, 322, - 323, 323, 326, 340, 341, 342, 342, 342, 342, 342, - 343, 343, 343, 345, 359, 360, 361, 361, 361, 361, - 362, 362, 362, 364, 380, 381, 382, 382, 382, 382, - 383, 383, 383, 385, 406, 407, 408, 408, 408, 408, - 409, 409, 409, 410, 410, 410, 413, 432, 449, 457, - 467, 474, 484, 503, 504, 505, 505, 505, 505, 505, - 506, 506, 506, 507, 507, 507, 507, 509, 518, 527, - 538, 547, 556, 565, 576, 585, 597, 611, 626, 637, - 654, 671, 688, 705, 720, 735, 748, 763, 772, 781, - 790, 799, 808, 817, 824, 833, 842, 851, 860, 869, - 878, 887, 896, 909, 920, 931, 942, 951, 964, 973, - 982, 991, 998, 1005, 1014, 1021, 1030, 1038, 1045, 1052, - 1060, 1069, 1077, 1093, 1101, 1109, 1117, 1125, 1133, 1142, - 1151, 1165, 1174, 1183, 1192, 1201, 1210, 1219, 1226, 1233, - 1259, 1267, 1274, 1281, 1288, 1295, 1303, 1311, 1319, 1326, - 1337, 1348, 1355, 1364, 1373, 1382, 1391, 1398, 1405, 1412, - 1428, 1436, 1444, 1454, 1464, 1474, 1488, 1496, 1509, 1520, - 1528, 1541, 1550, 1559, 1568, 1577, 1587, 1597, 1605, 1618, - 1627, 1635, 1644, 1652, 1665, 1674, 1683, 1693, 1700, 1710, - 1720, 1730, 1740, 1750, 1760, 1770, 1780, 1787, 1794, 1801, - 1810, 1819, 1828, 1837, 1844, 1854, 1862, 1871, 1878, 1896, - 1909, 1922, 1935, 1944, 1953, 1962, 1971, 1981, 1991, 2002, - 2011, 2020, 2029, 2038, 2047, 2056, 2065, 2074, 2087, 2100, - 2109, 2116, 2125, 2134, 2143, 2152, 2161, 2169, 2182, 2190, - 2245, 2252, 2267, 2277, 2287, 2294, 2301, 2308, 2317, 2325, - 2339, 2360, 2381, 2393, 2405, 2417, 2426, 2447, 2459, 2471, - 2480, 2501, 2510, 2519, 2527, 2535, 2548, 2561, 2576, 2591, - 2600, 2609, 2619, 2629, 2638, 2644, 2653, 2662, 2672, 2682, - 2692, 2701, 2711, 2720, 2733, 2746, 2758, 2772, 2784, 2798, - 2807, 2818, 2827, 2837, 2844, 2851, 2860, 2869, 2879, 2889, - 2899, 2909, 2916, 2923, 2932, 2941, 2951, 2961, 2971, 2978, - 2985, 2992, 3000, 3010, 3020, 3030, 3040, 3050, 3060, 3116, - 3126, 3134, 3142, 3157, 3166, 3172, 3173, 3174, 3174, 3174, - 3175, 3175, 3175, 3176, 3176, 3178, 3188, 3197, 3204, 3211, - 3218, 3225, 3232, 3239, 3245, 3246, 3247, 3247, 3247, 3248, - 3248, 3248, 3249, 3250, 3250, 3251, 3251, 3252, 3252, 3253, - 3254, 3255, 3256, 3257, 3258, 3260, 3269, 3279, 3286, 3293, - 3302, 3309, 3316, 3323, 3330, 3339, 3348, 3355, 3362, 3372, - 3382, 3392, 3402, 3412, 3422, 3428, 3429, 3430, 3432, 3438, - 3444, 3445, 3446, 3448, 3454, 3464, 3471, 3480, 3488, 3494, - 3495, 3497, 3497, 3497, 3498, 3498, 3499, 3500, 3501, 3502, - 3503, 3505, 3515, 3524, 3531, 3540, 3547, 3556, 3564, 3577, - 3585, 3598, 3604, 3605, 3606, 3606, 3607, 3607, 3607, 3608, - 3610, 3622, 3634, 3646, 3661, 3674, 3687, 3698, 3704, 3705, - 3706, 3706, 3708, 3723 + 0, 199, 199, 199, 200, 200, 201, 201, 202, 202, + 202, 203, 203, 204, 204, 205, 205, 206, 208, 215, + 221, 222, 223, 223, 223, 224, 224, 225, 225, 225, + 226, 226, 227, 227, 227, 228, 228, 229, 229, 229, + 230, 230, 230, 231, 231, 232, 232, 233, 233, 234, + 234, 235, 235, 236, 236, 237, 237, 238, 238, 239, + 239, 239, 240, 240, 241, 241, 241, 242, 242, 242, + 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, + 247, 248, 248, 249, 249, 250, 250, 250, 251, 251, + 252, 252, 253, 253, 254, 254, 254, 255, 255, 256, + 256, 257, 257, 258, 258, 259, 259, 260, 260, 261, + 261, 262, 262, 263, 263, 263, 264, 264, 264, 265, + 265, 265, 266, 266, 266, 266, 267, 268, 268, 268, + 269, 269, 269, 270, 270, 271, 271, 272, 272, 272, + 273, 273, 273, 274, 274, 275, 275, 275, 276, 276, + 276, 277, 277, 277, 278, 278, 279, 279, 280, 280, + 281, 282, 282, 283, 283, 284, 284, 285, 285, 286, + 286, 287, 287, 288, 288, 289, 289, 290, 290, 291, + 291, 292, 292, 292, 293, 293, 294, 294, 295, 295, + 296, 296, 296, 297, 297, 298, 299, 299, 300, 300, + 301, 302, 302, 303, 303, 304, 304, 304, 305, 305, + 306, 306, 306, 307, 307, 307, 308, 308, 309, 310, + 310, 311, 311, 312, 312, 313, 313, 314, 314, 314, + 315, 315, 315, 316, 316, 316, 317, 317, 318, 318, + 319, 319, 320, 320, 321, 321, 322, 322, 323, 323, + 324, 324, 325, 327, 341, 342, 343, 343, 343, 343, + 343, 344, 344, 344, 346, 360, 361, 362, 362, 362, + 362, 363, 363, 363, 365, 381, 382, 383, 383, 383, + 383, 384, 384, 384, 386, 407, 408, 409, 409, 409, + 409, 410, 410, 410, 411, 411, 411, 414, 433, 450, + 458, 468, 475, 485, 504, 505, 506, 506, 506, 506, + 506, 507, 507, 507, 508, 508, 508, 508, 510, 519, + 528, 539, 548, 557, 566, 577, 586, 598, 612, 627, + 638, 655, 672, 689, 706, 721, 736, 749, 764, 773, + 782, 791, 800, 809, 818, 825, 834, 843, 852, 861, + 870, 879, 888, 897, 910, 921, 932, 943, 952, 965, + 974, 983, 992, 999, 1006, 1015, 1022, 1031, 1039, 1046, + 1053, 1061, 1070, 1078, 1094, 1102, 1110, 1118, 1126, 1134, + 1143, 1152, 1166, 1175, 1184, 1193, 1202, 1211, 1220, 1227, + 1234, 1260, 1268, 1275, 1282, 1289, 1296, 1304, 1312, 1320, + 1327, 1338, 1349, 1356, 1365, 1374, 1383, 1392, 1399, 1406, + 1413, 1429, 1437, 1445, 1455, 1465, 1475, 1489, 1497, 1510, + 1521, 1529, 1542, 1551, 1560, 1569, 1578, 1588, 1598, 1606, + 1619, 1628, 1636, 1645, 1653, 1666, 1675, 1684, 1694, 1701, + 1711, 1721, 1731, 1741, 1751, 1761, 1771, 1781, 1788, 1795, + 1802, 1811, 1820, 1829, 1838, 1845, 1855, 1863, 1872, 1879, + 1897, 1910, 1923, 1936, 1945, 1954, 1963, 1972, 1982, 1992, + 2003, 2012, 2021, 2030, 2039, 2048, 2057, 2066, 2075, 2088, + 2101, 2110, 2117, 2126, 2135, 2144, 2153, 2162, 2170, 2183, + 2191, 2246, 2253, 2268, 2278, 2288, 2295, 2302, 2309, 2318, + 2326, 2340, 2361, 2382, 2394, 2406, 2418, 2427, 2448, 2460, + 2472, 2481, 2502, 2511, 2520, 2528, 2536, 2549, 2562, 2577, + 2592, 2601, 2610, 2620, 2630, 2639, 2645, 2654, 2663, 2673, + 2683, 2693, 2702, 2712, 2721, 2734, 2747, 2759, 2773, 2785, + 2799, 2808, 2819, 2828, 2835, 2845, 2852, 2859, 2868, 2877, + 2887, 2897, 2907, 2917, 2924, 2931, 2940, 2949, 2959, 2969, + 2979, 2986, 2993, 3000, 3008, 3018, 3028, 3038, 3048, 3058, + 3068, 3124, 3134, 3142, 3150, 3165, 3174, 3180, 3181, 3182, + 3182, 3182, 3183, 3183, 3183, 3184, 3184, 3186, 3196, 3205, + 3212, 3219, 3226, 3233, 3240, 3247, 3253, 3254, 3255, 3255, + 3255, 3256, 3256, 3256, 3257, 3258, 3258, 3259, 3259, 3260, + 3260, 3261, 3262, 3263, 3264, 3265, 3266, 3268, 3277, 3287, + 3294, 3301, 3310, 3317, 3324, 3331, 3338, 3347, 3356, 3363, + 3370, 3380, 3390, 3400, 3410, 3420, 3430, 3436, 3437, 3438, + 3440, 3446, 3452, 3453, 3454, 3456, 3462, 3472, 3479, 3488, + 3496, 3502, 3503, 3505, 3505, 3505, 3506, 3506, 3507, 3508, + 3509, 3510, 3511, 3513, 3523, 3532, 3539, 3548, 3555, 3564, + 3572, 3585, 3593, 3606, 3612, 3613, 3614, 3614, 3615, 3615, + 3615, 3616, 3618, 3630, 3642, 3654, 3669, 3682, 3695, 3706, + 3712, 3713, 3714, 3714, 3716, 3731 }; #endif @@ -1445,12 +1447,13 @@ static const char *const yytname[] = "VAR_ZONEMD_REJECT_ABSENCE", "VAR_RPZ_SIGNAL_NXDOMAIN_RA", "VAR_INTERFACE_AUTOMATIC_PORTS", "VAR_EDE", "VAR_INTERFACE_ACTION", "VAR_INTERFACE_VIEW", "VAR_INTERFACE_TAG", "VAR_INTERFACE_TAG_ACTION", - "VAR_INTERFACE_TAG_DATA", "$accept", "toplevelvars", "toplevelvar", - "force_toplevel", "serverstart", "contents_server", "content_server", - "stubstart", "contents_stub", "content_stub", "forwardstart", - "contents_forward", "content_forward", "viewstart", "contents_view", - "content_view", "authstart", "contents_auth", "content_auth", "rpz_tag", - "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name", + "VAR_INTERFACE_TAG_DATA", "VAR_PROXY_PROTOCOL_PORT", "$accept", + "toplevelvars", "toplevelvar", "force_toplevel", "serverstart", + "contents_server", "content_server", "stubstart", "contents_stub", + "content_stub", "forwardstart", "contents_forward", "content_forward", + "viewstart", "contents_view", "content_view", "authstart", + "contents_auth", "content_auth", "rpz_tag", "rpz_action_override", + "rpz_cname_override", "rpz_log", "rpz_log_name", "rpz_signal_nxdomain_ra", "rpzstart", "contents_rpz", "content_rpz", "server_num_threads", "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", @@ -1549,17 +1552,18 @@ static const char *const yytname[] = "server_ipsecmod_ignore_bogus", "server_ipsecmod_hook", "server_ipsecmod_max_ttl", "server_ipsecmod_whitelist", "server_ipsecmod_strict", "server_edns_client_string", - "server_edns_client_string_opcode", "server_ede", "stub_name", - "stub_host", "stub_addr", "stub_first", "stub_no_cache", - "stub_ssl_upstream", "stub_tcp_upstream", "stub_prime", "forward_name", - "forward_host", "forward_addr", "forward_first", "forward_no_cache", - "forward_ssl_upstream", "forward_tcp_upstream", "auth_name", - "auth_zonefile", "auth_master", "auth_url", "auth_allow_notify", - "auth_zonemd_check", "auth_zonemd_reject_absence", "auth_for_downstream", - "auth_for_upstream", "auth_fallback_enabled", "view_name", - "view_local_zone", "view_response_ip", "view_response_ip_data", - "view_local_data", "view_local_data_ptr", "view_first", "rcstart", - "contents_rc", "content_rc", "rc_control_enable", "rc_control_port", + "server_edns_client_string_opcode", "server_ede", + "server_proxy_protocol_port", "stub_name", "stub_host", "stub_addr", + "stub_first", "stub_no_cache", "stub_ssl_upstream", "stub_tcp_upstream", + "stub_prime", "forward_name", "forward_host", "forward_addr", + "forward_first", "forward_no_cache", "forward_ssl_upstream", + "forward_tcp_upstream", "auth_name", "auth_zonefile", "auth_master", + "auth_url", "auth_allow_notify", "auth_zonemd_check", + "auth_zonemd_reject_absence", "auth_for_downstream", "auth_for_upstream", + "auth_fallback_enabled", "view_name", "view_local_zone", + "view_response_ip", "view_response_ip_data", "view_local_data", + "view_local_data_ptr", "view_first", "rcstart", "contents_rc", + "content_rc", "rc_control_enable", "rc_control_port", "rc_control_interface", "rc_control_use_cert", "rc_server_key_file", "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file", "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable", @@ -1620,25 +1624,25 @@ static const yytype_int16 yypact[] = 162, 163, 164, 165, 208, 210, 230, 231, 234, 235, 237, 254, 255, 256, 257, 259, 260, 263, 264, 265, 268, 271, 274, 284, 285, 288, 289, 290, 291, 293, - 294, 295, 300, 302, 310, 311, 316, 317, 318, 319, - 320, 321, 331, 332, 333, 335, 338, 339, 345, 347, - 348, 349, 351, 357, 363, 364, 365, 366, 367, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 490, 491, 492, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 506, 507, 508, 509, 510, 511, 512, 513, 515, 516, - 517, 518, 519, 520, 521, 522, 524, 525, 526, 527, - 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, - 538, 539, 540, 541, 542, 543, 544, 545, 546, 548, - 549, 550, 552, 553, 554, -284, -284, -284, -284, -284, + 294, 295, 300, 302, 311, 316, 317, 318, 319, 320, + 321, 331, 332, 333, 335, 338, 339, 345, 347, 348, + 349, 351, 357, 363, 364, 365, 366, 367, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 472, 473, + 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 490, 491, 492, 494, 495, + 496, 497, 498, 499, 500, 501, 502, 503, 504, 506, + 507, 508, 509, 510, 511, 512, 513, 515, 516, 517, + 518, 519, 520, 521, 522, 524, 525, 526, 527, 528, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 548, 549, + 550, 552, 553, 554, 555, 556, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, @@ -1661,60 +1665,60 @@ static const yytype_int16 yypact[] = -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, 555, 556, 558, 559, - 560, 561, 562, 563, -284, -284, -284, -284, -284, -284, - -284, -284, -284, 564, 565, 566, 567, 568, 569, 570, - -284, -284, -284, -284, -284, -284, -284, -284, 571, 572, - 573, 574, 575, 576, 577, -284, -284, -284, -284, -284, - -284, -284, -284, 578, 579, 580, 581, 582, 583, 584, - 585, 586, 587, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, 588, 589, 590, 591, 592, 593, + -284, -284, -284, -284, -284, -284, -284, -284, 558, 559, + 560, 561, 562, 563, 564, 565, -284, -284, -284, -284, + -284, -284, -284, -284, -284, 566, 567, 568, 569, 570, + 571, 572, -284, -284, -284, -284, -284, -284, -284, -284, + 573, 574, 575, 576, 577, 578, 579, -284, -284, -284, + -284, -284, -284, -284, -284, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, 590, 591, 592, 593, + 594, 595, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, 596, 597, 598, 599, 600, + 601, 602, 603, -284, -284, -284, -284, -284, -284, -284, + -284, -284, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, + 622, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, 594, 595, 596, 597, 598, 599, 600, - 601, -284, -284, -284, -284, -284, -284, -284, -284, -284, - 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, - 612, 613, 614, 615, 616, 617, 618, 619, 620, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, 621, - -284, -284, 622, -284, -284, 623, 624, 625, 626, 627, - 628, 629, 630, 631, 632, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, 633, 634, 635, 636, - 637, 638, -284, -284, -284, -284, -284, -284, -284, 639, - 640, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, 623, -284, -284, 624, -284, -284, 625, 626, 627, + 628, 629, 630, 631, 632, 633, 634, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, 635, 636, + 637, 638, 639, 640, -284, -284, -284, -284, -284, -284, + -284, 641, 642, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, 641, 642, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, 643, 644, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, 643, 644, 645, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, -284, 646, - 647, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, 645, 646, 647, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, 648, 649, 650, 651, 652, 653, -284, -284, + -284, 648, 649, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, 650, 651, 652, 653, 654, 655, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, 654, -284, -284, -284, -284, -284, -284, - -284, -284, -284, 655, -284, -284, -284, -284, -284, 656, - 657, 658, 659, 660, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, 656, -284, -284, -284, -284, + -284, -284, -284, -284, -284, 657, -284, -284, -284, -284, + -284, 658, 659, 660, 661, 662, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - 661, -284, -284, 662, 663, -284, -284, -284, -284, -284, + -284, -284, -284, 663, -284, -284, 664, 665, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, 664, 665, - 666, -284, -284, -284, -284, -284, -284, 667, 668, -284, - -284, -284, -284, -284, -284, -284, -284 + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, 666, 667, 668, -284, -284, -284, -284, -284, -284, + 669, 670, -284, -284, -284, -284, -284, -284, -284, -284 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1722,10 +1726,10 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_int16 yydefact[] = { - 2, 0, 1, 18, 19, 252, 263, 574, 634, 593, - 273, 648, 671, 283, 687, 302, 639, 3, 17, 21, - 254, 265, 275, 285, 304, 576, 595, 636, 641, 650, - 673, 689, 4, 5, 6, 10, 14, 15, 8, 9, + 2, 0, 1, 18, 19, 253, 264, 576, 636, 595, + 274, 650, 673, 284, 689, 303, 641, 3, 17, 21, + 255, 266, 276, 286, 305, 578, 597, 638, 643, 652, + 675, 691, 4, 5, 6, 10, 14, 15, 8, 9, 7, 16, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1749,83 +1753,83 @@ static const yytype_int16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 20, 22, 23, 88, 91, - 100, 213, 214, 24, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 37, 79, 25, 92, 93, 48, - 72, 87, 250, 26, 27, 30, 31, 28, 29, 32, - 33, 34, 247, 248, 249, 35, 36, 124, 225, 125, - 127, 128, 129, 227, 232, 228, 239, 240, 241, 242, - 130, 131, 132, 133, 134, 135, 136, 209, 89, 78, - 104, 122, 123, 237, 234, 126, 38, 39, 40, 41, - 42, 80, 94, 95, 111, 66, 76, 67, 217, 218, - 105, 58, 59, 216, 62, 60, 61, 63, 245, 115, - 119, 140, 151, 181, 154, 238, 116, 73, 43, 44, - 45, 102, 141, 142, 143, 144, 46, 47, 49, 50, - 52, 53, 51, 148, 149, 155, 54, 55, 56, 64, - 83, 120, 97, 150, 90, 177, 98, 99, 117, 118, - 235, 103, 57, 81, 84, 190, 65, 68, 106, 107, - 108, 82, 178, 109, 69, 70, 71, 226, 121, 200, - 201, 202, 203, 204, 205, 206, 207, 215, 110, 77, - 246, 112, 113, 114, 179, 74, 75, 96, 85, 86, - 101, 137, 138, 236, 139, 145, 146, 147, 182, 183, - 185, 187, 188, 186, 189, 192, 193, 194, 191, 210, - 152, 153, 158, 159, 156, 157, 160, 161, 163, 162, - 165, 164, 166, 229, 231, 230, 180, 195, 196, 197, - 198, 199, 219, 221, 220, 222, 223, 224, 243, 244, - 251, 184, 208, 211, 212, 233, 0, 0, 0, 0, - 0, 0, 0, 0, 253, 255, 256, 257, 259, 260, - 261, 262, 258, 0, 0, 0, 0, 0, 0, 0, - 264, 266, 267, 268, 269, 270, 271, 272, 0, 0, - 0, 0, 0, 0, 0, 274, 276, 277, 280, 281, - 278, 282, 279, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 284, 286, 287, 288, 289, 293, 294, - 295, 290, 291, 292, 0, 0, 0, 0, 0, 0, - 307, 311, 312, 313, 314, 315, 303, 305, 306, 308, - 309, 310, 316, 0, 0, 0, 0, 0, 0, 0, - 0, 575, 577, 579, 578, 584, 580, 581, 582, 583, + 0, 0, 0, 0, 0, 0, 20, 22, 23, 88, + 91, 100, 213, 214, 24, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 37, 79, 25, 92, 93, + 48, 72, 87, 250, 26, 27, 30, 31, 28, 29, + 32, 33, 34, 247, 248, 249, 35, 36, 124, 225, + 125, 127, 128, 129, 227, 232, 228, 239, 240, 241, + 242, 130, 131, 132, 133, 134, 135, 136, 209, 89, + 78, 104, 122, 123, 237, 234, 126, 38, 39, 40, + 41, 42, 80, 94, 95, 111, 66, 76, 67, 217, + 218, 105, 58, 59, 216, 62, 60, 61, 63, 245, + 115, 119, 140, 151, 181, 154, 238, 116, 73, 43, + 44, 45, 102, 141, 142, 143, 144, 46, 47, 49, + 50, 52, 53, 51, 148, 149, 155, 54, 55, 56, + 64, 83, 120, 97, 150, 90, 177, 98, 99, 117, + 118, 235, 103, 57, 81, 84, 190, 65, 68, 106, + 107, 108, 82, 178, 109, 69, 70, 71, 226, 121, + 200, 201, 202, 203, 204, 205, 206, 207, 215, 110, + 77, 246, 112, 113, 114, 179, 74, 75, 96, 85, + 86, 101, 137, 138, 236, 139, 145, 146, 147, 182, + 183, 185, 187, 188, 186, 189, 192, 193, 194, 191, + 210, 152, 153, 158, 159, 156, 157, 160, 161, 163, + 162, 165, 164, 166, 229, 231, 230, 180, 195, 196, + 197, 198, 199, 219, 221, 220, 222, 223, 224, 243, + 244, 251, 252, 184, 208, 211, 212, 233, 0, 0, + 0, 0, 0, 0, 0, 0, 254, 256, 257, 258, + 260, 261, 262, 263, 259, 0, 0, 0, 0, 0, + 0, 0, 265, 267, 268, 269, 270, 271, 272, 273, + 0, 0, 0, 0, 0, 0, 0, 275, 277, 278, + 281, 282, 279, 283, 280, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 285, 287, 288, 289, 290, + 294, 295, 296, 291, 292, 293, 0, 0, 0, 0, + 0, 0, 308, 312, 313, 314, 315, 316, 304, 306, + 307, 309, 310, 311, 317, 0, 0, 0, 0, 0, + 0, 0, 0, 577, 579, 581, 580, 586, 582, 583, + 584, 585, 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, 594, - 596, 598, 597, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 611, 612, 613, 614, 0, - 635, 637, 0, 640, 642, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 649, 651, 652, 653, 655, - 656, 654, 657, 658, 659, 660, 0, 0, 0, 0, - 0, 0, 672, 674, 675, 676, 677, 678, 679, 0, - 0, 688, 690, 691, 318, 317, 324, 337, 335, 348, - 344, 345, 349, 346, 347, 350, 351, 352, 356, 357, - 387, 388, 389, 390, 391, 419, 420, 421, 427, 428, - 340, 429, 430, 433, 431, 432, 437, 438, 439, 453, - 402, 403, 406, 407, 440, 457, 396, 398, 458, 465, - 466, 467, 341, 418, 486, 487, 397, 480, 380, 336, - 392, 454, 462, 441, 0, 0, 490, 342, 319, 379, - 445, 320, 338, 339, 393, 394, 488, 443, 447, 448, - 354, 353, 321, 491, 422, 452, 381, 401, 459, 460, - 461, 464, 479, 395, 484, 482, 483, 410, 417, 449, - 450, 411, 412, 442, 469, 382, 383, 386, 358, 360, - 355, 361, 362, 363, 364, 371, 372, 373, 374, 375, - 376, 377, 492, 493, 495, 423, 424, 425, 426, 434, - 435, 436, 496, 497, 498, 0, 0, 0, 444, 413, - 415, 644, 511, 515, 513, 512, 516, 514, 523, 0, - 0, 519, 520, 521, 522, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 446, 463, 485, 527, 528, - 414, 499, 0, 0, 0, 0, 0, 0, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 645, 404, 405, - 408, 399, 468, 378, 322, 323, 400, 529, 530, 531, - 532, 533, 535, 534, 536, 537, 538, 359, 366, 524, - 526, 525, 365, 0, 385, 451, 494, 384, 416, 367, - 368, 370, 369, 0, 540, 409, 481, 343, 541, 0, - 0, 0, 0, 0, 542, 543, 544, 549, 547, 548, - 545, 546, 550, 551, 552, 553, 555, 556, 554, 567, - 0, 571, 572, 0, 0, 573, 557, 565, 558, 559, - 560, 564, 566, 561, 562, 563, 296, 297, 298, 299, - 300, 301, 585, 587, 586, 589, 590, 591, 592, 588, - 615, 617, 618, 619, 620, 621, 622, 623, 624, 625, - 616, 626, 627, 628, 629, 630, 631, 632, 633, 638, - 643, 661, 662, 663, 666, 664, 665, 667, 668, 669, - 670, 680, 681, 682, 683, 684, 685, 692, 693, 455, - 489, 510, 646, 647, 517, 518, 500, 501, 0, 0, - 0, 505, 686, 539, 456, 509, 506, 0, 0, 568, - 569, 570, 504, 502, 503, 507, 508 + 0, 596, 598, 600, 599, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, + 616, 0, 637, 639, 0, 642, 644, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 651, 653, 654, + 655, 657, 658, 656, 659, 660, 661, 662, 0, 0, + 0, 0, 0, 0, 674, 676, 677, 678, 679, 680, + 681, 0, 0, 690, 692, 693, 319, 318, 325, 338, + 336, 349, 345, 346, 350, 347, 348, 351, 352, 353, + 357, 358, 388, 389, 390, 391, 392, 420, 421, 422, + 428, 429, 341, 430, 431, 434, 432, 433, 438, 439, + 440, 454, 403, 404, 407, 408, 441, 458, 397, 399, + 459, 466, 467, 468, 342, 419, 487, 488, 398, 481, + 381, 337, 393, 455, 463, 442, 0, 0, 491, 343, + 320, 380, 446, 321, 339, 340, 394, 395, 489, 444, + 448, 449, 355, 354, 322, 492, 423, 453, 382, 402, + 460, 461, 462, 465, 480, 396, 485, 483, 484, 411, + 418, 450, 451, 412, 413, 443, 470, 383, 384, 387, + 359, 361, 356, 362, 363, 364, 365, 372, 373, 374, + 375, 376, 377, 378, 493, 494, 496, 424, 425, 426, + 427, 435, 436, 437, 497, 498, 499, 0, 0, 0, + 445, 414, 416, 646, 512, 516, 514, 513, 517, 515, + 524, 0, 0, 520, 521, 522, 523, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 447, 464, 486, + 528, 529, 415, 500, 0, 0, 0, 0, 0, 0, + 471, 472, 473, 474, 475, 476, 477, 478, 479, 647, + 405, 406, 409, 400, 469, 379, 323, 324, 401, 530, + 531, 532, 533, 534, 536, 535, 537, 538, 539, 360, + 367, 525, 527, 526, 366, 0, 386, 452, 495, 385, + 417, 368, 369, 371, 370, 0, 541, 410, 482, 344, + 542, 0, 0, 0, 0, 0, 543, 544, 545, 546, + 551, 549, 550, 547, 548, 552, 553, 554, 555, 557, + 558, 556, 569, 0, 573, 574, 0, 0, 575, 559, + 567, 560, 561, 562, 566, 568, 563, 564, 565, 297, + 298, 299, 300, 301, 302, 587, 589, 588, 591, 592, + 593, 594, 590, 617, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 618, 628, 629, 630, 631, 632, 633, + 634, 635, 640, 645, 663, 664, 665, 668, 666, 667, + 669, 670, 671, 672, 682, 683, 684, 685, 686, 687, + 694, 695, 456, 490, 511, 648, 649, 518, 519, 501, + 502, 0, 0, 0, 506, 688, 540, 457, 510, 507, + 0, 0, 570, 571, 572, 505, 503, 504, 508, 509 }; /* YYPGOTO[NTERM-NUM]. */ @@ -1857,8 +1861,8 @@ static const yytype_int16 yypgoto[] = -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284, 669, 670, - 671, 672, 673, -284, -284, 674, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, 671, + 672, 673, 674, 675, -284, -284, 676, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, @@ -1866,48 +1870,48 @@ static const yytype_int16 yypgoto[] = -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, - -284, -284, -284, -284, -284, -284, -284, -284 + -284, -284, -284, -284, -284, -284, -284, -284, -284 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - 0, 1, 17, 18, 19, 32, 275, 20, 33, 514, - 21, 34, 530, 22, 35, 545, 23, 36, 563, 580, - 581, 582, 583, 584, 585, 24, 37, 586, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, - 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 498, 499, 500, 515, 516, 517, 518, 519, 520, 521, - 522, 531, 532, 533, 534, 535, 536, 537, 564, 565, - 566, 567, 568, 569, 570, 571, 572, 573, 546, 547, - 548, 549, 550, 551, 552, 25, 38, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 26, 39, 629, 630, - 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, - 641, 642, 643, 644, 645, 646, 647, 648, 27, 40, - 650, 651, 28, 41, 653, 654, 501, 502, 503, 504, - 29, 42, 665, 666, 667, 668, 669, 670, 671, 672, - 673, 674, 675, 30, 43, 682, 683, 684, 685, 686, - 687, 688, 505, 31, 44, 691, 692, 693 + 0, 1, 17, 18, 19, 32, 276, 20, 33, 516, + 21, 34, 532, 22, 35, 547, 23, 36, 565, 582, + 583, 584, 585, 586, 587, 24, 37, 588, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 517, 518, 519, 520, 521, 522, + 523, 524, 533, 534, 535, 536, 537, 538, 539, 566, + 567, 568, 569, 570, 571, 572, 573, 574, 575, 548, + 549, 550, 551, 552, 553, 554, 25, 38, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 26, 39, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 27, + 40, 652, 653, 28, 41, 655, 656, 503, 504, 505, + 506, 29, 42, 667, 668, 669, 670, 671, 672, 673, + 674, 675, 676, 677, 30, 43, 684, 685, 686, 687, + 688, 689, 690, 507, 31, 44, 693, 694, 695 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1918,75 +1922,75 @@ static const yytype_int16 yytable[] = 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 689, 690, 649, 652, 77, 78, 79, 694, - 695, 696, 80, 81, 82, 83, 84, 85, 86, 87, + 75, 76, 691, 692, 651, 654, 77, 78, 79, 696, + 697, 698, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 553, 676, 677, 678, 679, 680, 681, - 697, 698, 121, 122, 123, 124, 125, 538, 126, 127, - 128, 699, 700, 129, 130, 131, 132, 133, 134, 135, + 118, 119, 120, 555, 678, 679, 680, 681, 682, 683, + 699, 700, 121, 122, 123, 124, 125, 540, 126, 127, + 128, 701, 702, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 553, - 701, 702, 155, 539, 540, 156, 157, 158, 159, 160, - 161, 162, 703, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 704, 705, 706, 707, - 541, 655, 656, 657, 658, 659, 660, 661, 662, 663, - 664, 708, 709, 710, 711, 712, 176, 177, 178, 179, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 555, + 703, 704, 155, 541, 542, 156, 157, 158, 159, 160, + 161, 162, 705, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 706, 707, 708, 709, + 543, 657, 658, 659, 660, 661, 662, 663, 664, 665, + 666, 710, 711, 712, 713, 714, 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, 713, 218, - 714, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 210, 211, 212, 213, 214, 215, 216, 217, 715, 218, + 716, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 715, 716, 542, 543, 717, 718, 506, 719, 507, 508, + 717, 718, 544, 545, 719, 720, 508, 721, 509, 510, 2, 238, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 3, 4, 523, 720, 721, 722, 723, 248, 724, - 725, 524, 525, 726, 727, 728, 249, 250, 729, 251, - 252, 730, 253, 254, 731, 544, 255, 256, 257, 258, - 259, 260, 261, 262, 732, 733, 5, 263, 734, 735, - 736, 737, 6, 738, 739, 740, 264, 265, 266, 267, - 741, 509, 742, 268, 269, 270, 271, 272, 273, 274, - 743, 744, 555, 556, 557, 558, 745, 746, 747, 748, - 749, 750, 560, 593, 594, 595, 596, 597, 598, 599, - 600, 751, 752, 753, 510, 754, 7, 511, 755, 756, - 574, 575, 576, 577, 578, 757, 512, 758, 759, 760, - 526, 761, 527, 579, 8, 528, 554, 762, 555, 556, - 557, 558, 559, 763, 764, 765, 766, 767, 560, 610, - 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, - 621, 622, 623, 624, 625, 626, 627, 628, 768, 769, - 770, 771, 772, 773, 774, 775, 776, 561, 562, 777, - 778, 779, 780, 781, 782, 783, 784, 785, 786, 9, - 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, - 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, - 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, - 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, - 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, - 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, - 847, 10, 848, 849, 850, 851, 852, 853, 854, 855, - 856, 857, 858, 859, 860, 861, 862, 863, 864, 513, - 865, 866, 867, 11, 868, 869, 870, 871, 872, 873, - 874, 875, 876, 877, 878, 529, 879, 880, 881, 882, - 883, 884, 885, 886, 12, 887, 888, 889, 890, 891, - 892, 893, 894, 13, 895, 896, 897, 898, 899, 900, - 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, - 911, 912, 913, 914, 915, 916, 917, 14, 918, 919, - 920, 15, 921, 922, 923, 924, 925, 16, 926, 927, - 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, - 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, - 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, - 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, - 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, - 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, - 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, - 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, - 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, - 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, - 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 0, + 247, 3, 4, 525, 722, 723, 724, 725, 248, 726, + 727, 526, 527, 728, 729, 730, 249, 250, 731, 251, + 252, 732, 253, 254, 733, 546, 255, 256, 257, 258, + 259, 260, 261, 262, 734, 735, 5, 263, 736, 737, + 738, 739, 6, 740, 741, 742, 264, 265, 266, 267, + 743, 511, 744, 268, 269, 270, 271, 272, 273, 274, + 275, 745, 557, 558, 559, 560, 746, 747, 748, 749, + 750, 751, 562, 595, 596, 597, 598, 599, 600, 601, + 602, 752, 753, 754, 512, 755, 7, 513, 756, 757, + 576, 577, 578, 579, 580, 758, 514, 759, 760, 761, + 528, 762, 529, 581, 8, 530, 556, 763, 557, 558, + 559, 560, 561, 764, 765, 766, 767, 768, 562, 612, + 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 628, 629, 630, 769, 770, + 771, 772, 773, 774, 775, 776, 777, 563, 564, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 9, + 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, + 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, + 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, + 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, + 848, 10, 849, 850, 851, 852, 853, 854, 855, 856, + 857, 858, 859, 860, 861, 862, 863, 864, 865, 515, + 866, 867, 868, 11, 869, 870, 871, 872, 873, 874, + 875, 876, 877, 878, 879, 531, 880, 881, 882, 883, + 884, 885, 886, 887, 12, 888, 889, 890, 891, 892, + 893, 894, 895, 13, 896, 897, 898, 899, 900, 901, + 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, + 912, 913, 914, 915, 916, 917, 918, 14, 919, 920, + 921, 15, 922, 923, 924, 925, 926, 16, 927, 928, + 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, + 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, + 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, + 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, + 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, + 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, + 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, + 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, + 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, + 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, + 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, + 1039, 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, 587, 588, 589, 590, - 591, 592 + 0, 0, 0, 0, 0, 0, 0, 0, 589, 590, + 591, 592, 593, 594 }; static const yytype_int16 yycheck[] = @@ -2023,7 +2027,7 @@ static const yytype_int16 yycheck[] = 303, 304, 305, 306, 10, 10, 46, 310, 10, 10, 10, 10, 52, 10, 10, 10, 319, 320, 321, 322, 10, 110, 10, 326, 327, 328, 329, 330, 331, 332, - 10, 10, 284, 285, 286, 287, 10, 10, 10, 10, + 333, 10, 284, 285, 286, 287, 10, 10, 10, 10, 10, 10, 294, 97, 98, 99, 100, 101, 102, 103, 104, 10, 10, 10, 143, 10, 96, 146, 10, 10, 312, 313, 314, 315, 316, 10, 155, 10, 10, 10, @@ -2058,22 +2062,22 @@ static const yytype_int16 yycheck[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, -1, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 37, 37, 37, 37, - 37, 37 + -1, -1, -1, -1, -1, -1, -1, -1, 37, 37, + 37, 37, 37, 37 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of state STATE-NUM. */ static const yytype_int16 yystos[] = { - 0, 334, 0, 11, 12, 46, 52, 96, 114, 169, - 231, 253, 274, 283, 307, 311, 317, 335, 336, 337, - 340, 343, 346, 349, 358, 618, 629, 651, 655, 663, - 676, 686, 338, 341, 344, 347, 350, 359, 619, 630, - 652, 656, 664, 677, 687, 13, 14, 15, 16, 17, + 0, 335, 0, 11, 12, 46, 52, 96, 114, 169, + 231, 253, 274, 283, 307, 311, 317, 336, 337, 338, + 341, 344, 347, 350, 359, 620, 631, 653, 657, 665, + 678, 688, 339, 342, 345, 348, 351, 360, 621, 632, + 654, 658, 666, 679, 689, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 49, 50, 51, @@ -2096,7 +2100,7 @@ static const yytype_int16 yystos[] = 266, 267, 268, 269, 270, 271, 272, 273, 281, 289, 290, 292, 293, 295, 296, 299, 300, 301, 302, 303, 304, 305, 306, 310, 319, 320, 321, 322, 326, 327, - 328, 329, 330, 331, 332, 339, 361, 362, 363, 364, + 328, 329, 330, 331, 332, 333, 340, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, @@ -2119,26 +2123,26 @@ static const yytype_int16 yystos[] = 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, - 585, 659, 660, 661, 662, 685, 45, 47, 48, 110, - 143, 146, 155, 298, 342, 586, 587, 588, 589, 590, - 591, 592, 593, 45, 53, 54, 142, 144, 147, 297, - 345, 594, 595, 596, 597, 598, 599, 600, 45, 81, - 82, 108, 190, 191, 233, 348, 611, 612, 613, 614, - 615, 616, 617, 45, 282, 284, 285, 286, 287, 288, - 294, 323, 324, 351, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 312, 313, 314, 315, 316, 325, - 352, 353, 354, 355, 356, 357, 360, 601, 602, 603, - 604, 605, 608, 97, 98, 99, 100, 101, 102, 103, - 104, 620, 621, 622, 623, 624, 625, 626, 627, 628, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 631, - 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, - 642, 643, 644, 645, 646, 647, 648, 649, 650, 115, - 653, 654, 318, 657, 658, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 665, 666, 667, 668, 669, - 670, 671, 672, 673, 674, 675, 275, 276, 277, 278, - 279, 280, 678, 679, 680, 681, 682, 683, 684, 308, - 309, 688, 689, 690, 10, 10, 10, 10, 10, 10, + 585, 586, 587, 661, 662, 663, 664, 687, 45, 47, + 48, 110, 143, 146, 155, 298, 343, 588, 589, 590, + 591, 592, 593, 594, 595, 45, 53, 54, 142, 144, + 147, 297, 346, 596, 597, 598, 599, 600, 601, 602, + 45, 81, 82, 108, 190, 191, 233, 349, 613, 614, + 615, 616, 617, 618, 619, 45, 282, 284, 285, 286, + 287, 288, 294, 323, 324, 352, 603, 604, 605, 606, + 607, 608, 609, 610, 611, 612, 312, 313, 314, 315, + 316, 325, 353, 354, 355, 356, 357, 358, 361, 603, + 604, 605, 606, 607, 610, 97, 98, 99, 100, 101, + 102, 103, 104, 622, 623, 624, 625, 626, 627, 628, + 629, 630, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, + 652, 115, 655, 656, 318, 659, 660, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 667, 668, 669, + 670, 671, 672, 673, 674, 675, 676, 677, 275, 276, + 277, 278, 279, 280, 680, 681, 682, 683, 684, 685, + 686, 308, 309, 690, 691, 692, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -2172,44 +2176,44 @@ static const yytype_int16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ static const yytype_int16 yyr1[] = { - 0, 333, 334, 334, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 336, 337, - 338, 338, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 340, 341, 341, 342, 342, 342, 342, 342, - 342, 342, 342, 343, 344, 344, 345, 345, 345, 345, - 345, 345, 345, 346, 347, 347, 348, 348, 348, 348, - 348, 348, 348, 349, 350, 350, 351, 351, 351, 351, - 351, 351, 351, 351, 351, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 359, 360, 360, 360, 360, 360, - 360, 360, 360, 360, 360, 360, 360, 361, 362, 363, + 0, 334, 335, 335, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 337, 338, + 339, 339, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 341, 342, 342, 343, 343, 343, 343, + 343, 343, 343, 343, 344, 345, 345, 346, 346, 346, + 346, 346, 346, 346, 347, 348, 348, 349, 349, 349, + 349, 349, 349, 349, 350, 351, 351, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 360, 361, 361, 361, 361, + 361, 361, 361, 361, 361, 361, 361, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, @@ -2235,19 +2239,19 @@ static const yytype_int16 yyr1[] = 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, 619, 620, 620, 620, - 620, 620, 620, 620, 620, 621, 622, 623, 624, 625, - 626, 627, 628, 629, 630, 630, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 632, 633, 634, 635, 636, + 614, 615, 616, 617, 618, 619, 620, 621, 621, 622, + 622, 622, 622, 622, 622, 622, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 632, 633, 633, + 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, + 633, 633, 633, 633, 633, 633, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, - 647, 648, 649, 650, 651, 652, 652, 653, 654, 655, - 656, 656, 657, 658, 659, 660, 661, 662, 663, 664, - 664, 665, 665, 665, 665, 665, 665, 665, 665, 665, - 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, - 675, 676, 677, 677, 678, 678, 678, 678, 678, 678, - 679, 680, 681, 682, 683, 684, 685, 686, 687, 687, - 688, 688, 689, 690 + 647, 648, 649, 650, 651, 652, 653, 654, 654, 655, + 656, 657, 658, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 666, 667, 667, 667, 667, 667, 667, 667, + 667, 667, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 679, 680, 680, 680, 680, + 680, 680, 681, 682, 683, 684, 685, 686, 687, 688, + 689, 689, 690, 690, 691, 692 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ @@ -2278,51 +2282,51 @@ static const yytype_int8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 3, 3, 4, 4, 4, 3, 3, 4, 4, + 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 2, 2, 2, 1, 2, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 4, 4, 4, 3, 3, 4, 4, 3, - 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 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, 2, 2, 2, 1, 2, 0, 1, + 2, 1, 2, 0, 1, 2, 2, 2, 3, 3, + 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 2, 0, 1, 2, 1, - 2, 0, 1, 2, 2, 2, 3, 3, 1, 2, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 3, 1, 2, 0, - 1, 1, 2, 2 + 1, 1, 2, 2, 2, 2, 2, 2, 3, 1, + 2, 0, 1, 1, 2, 2 }; @@ -2786,25 +2790,25 @@ yyreduce: switch (yyn) { case 18: /* force_toplevel: VAR_FORCE_TOPLEVEL */ -#line 208 "./util/configparser.y" +#line 209 "./util/configparser.y" { OUTYY(("\nP(force-toplevel)\n")); cfg_parser->started_toplevel = 0; } -#line 2795 "util/configparser.c" +#line 2799 "util/configparser.c" break; case 19: /* serverstart: VAR_SERVER */ -#line 215 "./util/configparser.y" +#line 216 "./util/configparser.y" { OUTYY(("\nP(server:)\n")); cfg_parser->started_toplevel = 1; } -#line 2804 "util/configparser.c" +#line 2808 "util/configparser.c" break; - case 252: /* stubstart: VAR_STUB_ZONE */ -#line 327 "./util/configparser.y" + case 253: /* stubstart: VAR_STUB_ZONE */ +#line 328 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2817,11 +2821,11 @@ yyreduce: yyerror("out of memory"); } } -#line 2821 "util/configparser.c" +#line 2825 "util/configparser.c" break; - case 263: /* forwardstart: VAR_FORWARD_ZONE */ -#line 346 "./util/configparser.y" + case 264: /* forwardstart: VAR_FORWARD_ZONE */ +#line 347 "./util/configparser.y" { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2834,11 +2838,11 @@ yyreduce: yyerror("out of memory"); } } -#line 2838 "util/configparser.c" +#line 2842 "util/configparser.c" break; - case 273: /* viewstart: VAR_VIEW */ -#line 365 "./util/configparser.y" + case 274: /* viewstart: VAR_VIEW */ +#line 366 "./util/configparser.y" { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2853,11 +2857,11 @@ yyreduce: yyerror("out of memory"); } } -#line 2857 "util/configparser.c" +#line 2861 "util/configparser.c" break; - case 283: /* authstart: VAR_AUTH_ZONE */ -#line 386 "./util/configparser.y" + case 284: /* authstart: VAR_AUTH_ZONE */ +#line 387 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(auth_zone:)\n")); @@ -2877,11 +2881,11 @@ yyreduce: yyerror("out of memory"); } } -#line 2881 "util/configparser.c" +#line 2885 "util/configparser.c" break; - case 296: /* rpz_tag: VAR_TAGS STRING_ARG */ -#line 414 "./util/configparser.y" + case 297: /* rpz_tag: VAR_TAGS STRING_ARG */ +#line 415 "./util/configparser.y" { uint8_t* bitlist; size_t len = 0; @@ -2898,11 +2902,11 @@ yyreduce: } } -#line 2902 "util/configparser.c" +#line 2906 "util/configparser.c" break; - case 297: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG */ -#line 433 "./util/configparser.y" + case 298: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG */ +#line 434 "./util/configparser.y" { OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 && @@ -2917,21 +2921,21 @@ yyreduce: cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str); } } -#line 2921 "util/configparser.c" +#line 2925 "util/configparser.c" break; - case 298: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG */ -#line 450 "./util/configparser.y" + case 299: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG */ +#line 451 "./util/configparser.y" { OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_cname); cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str); } -#line 2931 "util/configparser.c" +#line 2935 "util/configparser.c" break; - case 299: /* rpz_log: VAR_RPZ_LOG STRING_ARG */ -#line 458 "./util/configparser.y" + case 300: /* rpz_log: VAR_RPZ_LOG STRING_ARG */ +#line 459 "./util/configparser.y" { OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2939,21 +2943,21 @@ yyreduce: else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2943 "util/configparser.c" +#line 2947 "util/configparser.c" break; - case 300: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG */ -#line 468 "./util/configparser.y" + case 301: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG */ +#line 469 "./util/configparser.y" { OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->rpz_log_name); cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str); } -#line 2953 "util/configparser.c" +#line 2957 "util/configparser.c" break; - case 301: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG */ -#line 475 "./util/configparser.y" + case 302: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG */ +#line 476 "./util/configparser.y" { OUTYY(("P(rpz_signal_nxdomain_ra:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2961,11 +2965,11 @@ yyreduce: else cfg_parser->cfg->auths->rpz_signal_nxdomain_ra = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2965 "util/configparser.c" +#line 2969 "util/configparser.c" break; - case 302: /* rpzstart: VAR_RPZ */ -#line 485 "./util/configparser.y" + case 303: /* rpzstart: VAR_RPZ */ +#line 486 "./util/configparser.y" { struct config_auth* s; OUTYY(("\nP(rpz:)\n")); @@ -2983,11 +2987,11 @@ yyreduce: yyerror("out of memory"); } } -#line 2987 "util/configparser.c" +#line 2991 "util/configparser.c" break; - case 317: /* server_num_threads: VAR_NUM_THREADS STRING_ARG */ -#line 510 "./util/configparser.y" + case 318: /* server_num_threads: VAR_NUM_THREADS STRING_ARG */ +#line 511 "./util/configparser.y" { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2995,11 +2999,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2999 "util/configparser.c" +#line 3003 "util/configparser.c" break; - case 318: /* server_verbosity: VAR_VERBOSITY STRING_ARG */ -#line 519 "./util/configparser.y" + case 319: /* server_verbosity: VAR_VERBOSITY STRING_ARG */ +#line 520 "./util/configparser.y" { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3007,11 +3011,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3011 "util/configparser.c" +#line 3015 "util/configparser.c" break; - case 319: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG */ -#line 528 "./util/configparser.y" + case 320: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG */ +#line 529 "./util/configparser.y" { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -3021,11 +3025,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3025 "util/configparser.c" +#line 3029 "util/configparser.c" break; - case 320: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG */ -#line 539 "./util/configparser.y" + case 321: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG */ +#line 540 "./util/configparser.y" { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3033,11 +3037,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3037 "util/configparser.c" +#line 3041 "util/configparser.c" break; - case 321: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG */ -#line 548 "./util/configparser.y" + case 322: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG */ +#line 549 "./util/configparser.y" { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3045,11 +3049,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3049 "util/configparser.c" +#line 3053 "util/configparser.c" break; - case 322: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG */ -#line 557 "./util/configparser.y" + case 323: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG */ +#line 558 "./util/configparser.y" { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3057,11 +3061,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3061 "util/configparser.c" +#line 3065 "util/configparser.c" break; - case 323: /* server_shm_key: VAR_SHM_KEY STRING_ARG */ -#line 566 "./util/configparser.y" + case 324: /* server_shm_key: VAR_SHM_KEY STRING_ARG */ +#line 567 "./util/configparser.y" { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -3071,11 +3075,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3075 "util/configparser.c" +#line 3079 "util/configparser.c" break; - case 324: /* server_port: VAR_PORT STRING_ARG */ -#line 577 "./util/configparser.y" + case 325: /* server_port: VAR_PORT STRING_ARG */ +#line 578 "./util/configparser.y" { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3083,11 +3087,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3087 "util/configparser.c" +#line 3091 "util/configparser.c" break; - case 325: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG */ -#line 586 "./util/configparser.y" + case 326: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG */ +#line 587 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -3098,11 +3102,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3102 "util/configparser.c" +#line 3106 "util/configparser.c" break; - case 326: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG */ -#line 598 "./util/configparser.y" + case 327: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG */ +#line 599 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -3114,11 +3118,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 3118 "util/configparser.c" +#line 3122 "util/configparser.c" break; - case 327: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG */ -#line 612 "./util/configparser.y" + case 328: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG */ +#line 613 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -3132,11 +3136,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3136 "util/configparser.c" +#line 3140 "util/configparser.c" break; - case 328: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG */ -#line 627 "./util/configparser.y" + case 329: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG */ +#line 628 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -3146,11 +3150,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3150 "util/configparser.c" +#line 3154 "util/configparser.c" break; - case 329: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG */ -#line 638 "./util/configparser.y" + case 330: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG */ +#line 639 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3166,11 +3170,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3170 "util/configparser.c" +#line 3174 "util/configparser.c" break; - case 330: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG */ -#line 655 "./util/configparser.y" + case 331: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG */ +#line 656 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3186,11 +3190,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3190 "util/configparser.c" +#line 3194 "util/configparser.c" break; - case 331: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG */ -#line 672 "./util/configparser.y" + case 332: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG */ +#line 673 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -3206,11 +3210,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3210 "util/configparser.c" +#line 3214 "util/configparser.c" break; - case 332: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG */ -#line 689 "./util/configparser.y" + case 333: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG */ +#line 690 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -3226,11 +3230,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3230 "util/configparser.c" +#line 3234 "util/configparser.c" break; - case 333: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG */ -#line 706 "./util/configparser.y" + case 334: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG */ +#line 707 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str))); @@ -3244,11 +3248,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3248 "util/configparser.c" +#line 3252 "util/configparser.c" break; - case 334: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG */ -#line 721 "./util/configparser.y" + case 335: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG */ +#line 722 "./util/configparser.y" { #ifdef CLIENT_SUBNET OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str))); @@ -3262,11 +3266,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3266 "util/configparser.c" +#line 3270 "util/configparser.c" break; - case 335: /* server_interface: VAR_INTERFACE STRING_ARG */ -#line 736 "./util/configparser.y" + case 336: /* server_interface: VAR_INTERFACE STRING_ARG */ +#line 737 "./util/configparser.y" { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -3278,11 +3282,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 3282 "util/configparser.c" +#line 3286 "util/configparser.c" break; - case 336: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG */ -#line 749 "./util/configparser.y" + case 337: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG */ +#line 750 "./util/configparser.y" { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -3296,11 +3300,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 3300 "util/configparser.c" +#line 3304 "util/configparser.c" break; - case 337: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG */ -#line 764 "./util/configparser.y" + case 338: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG */ +#line 765 "./util/configparser.y" { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3308,11 +3312,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3312 "util/configparser.c" +#line 3316 "util/configparser.c" break; - case 338: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG */ -#line 773 "./util/configparser.y" + case 339: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG */ +#line 774 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -3320,11 +3324,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3324 "util/configparser.c" +#line 3328 "util/configparser.c" break; - case 339: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG */ -#line 782 "./util/configparser.y" + case 340: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG */ +#line 783 "./util/configparser.y" { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -3332,11 +3336,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 3336 "util/configparser.c" +#line 3340 "util/configparser.c" break; - case 340: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG */ -#line 791 "./util/configparser.y" + case 341: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG */ +#line 792 "./util/configparser.y" { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3344,11 +3348,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3348 "util/configparser.c" +#line 3352 "util/configparser.c" break; - case 341: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG */ -#line 800 "./util/configparser.y" + case 342: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG */ +#line 801 "./util/configparser.y" { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3356,11 +3360,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3360 "util/configparser.c" +#line 3364 "util/configparser.c" break; - case 342: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG */ -#line 809 "./util/configparser.y" + case 343: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG */ +#line 810 "./util/configparser.y" { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3368,21 +3372,21 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3372 "util/configparser.c" +#line 3376 "util/configparser.c" break; - case 343: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG */ -#line 818 "./util/configparser.y" + case 344: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG */ +#line 819 "./util/configparser.y" { OUTYY(("P(server_interface_automatic_ports:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->if_automatic_ports); cfg_parser->cfg->if_automatic_ports = (yyvsp[0].str); } -#line 3382 "util/configparser.c" +#line 3386 "util/configparser.c" break; - case 344: /* server_do_ip4: VAR_DO_IP4 STRING_ARG */ -#line 825 "./util/configparser.y" + case 345: /* server_do_ip4: VAR_DO_IP4 STRING_ARG */ +#line 826 "./util/configparser.y" { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3390,11 +3394,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3394 "util/configparser.c" +#line 3398 "util/configparser.c" break; - case 345: /* server_do_ip6: VAR_DO_IP6 STRING_ARG */ -#line 834 "./util/configparser.y" + case 346: /* server_do_ip6: VAR_DO_IP6 STRING_ARG */ +#line 835 "./util/configparser.y" { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3402,11 +3406,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3406 "util/configparser.c" +#line 3410 "util/configparser.c" break; - case 346: /* server_do_udp: VAR_DO_UDP STRING_ARG */ -#line 843 "./util/configparser.y" + case 347: /* server_do_udp: VAR_DO_UDP STRING_ARG */ +#line 844 "./util/configparser.y" { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3414,11 +3418,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3418 "util/configparser.c" +#line 3422 "util/configparser.c" break; - case 347: /* server_do_tcp: VAR_DO_TCP STRING_ARG */ -#line 852 "./util/configparser.y" + case 348: /* server_do_tcp: VAR_DO_TCP STRING_ARG */ +#line 853 "./util/configparser.y" { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3426,11 +3430,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3430 "util/configparser.c" +#line 3434 "util/configparser.c" break; - case 348: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG */ -#line 861 "./util/configparser.y" + case 349: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG */ +#line 862 "./util/configparser.y" { OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3438,11 +3442,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3442 "util/configparser.c" +#line 3446 "util/configparser.c" break; - case 349: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG */ -#line 870 "./util/configparser.y" + case 350: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG */ +#line 871 "./util/configparser.y" { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3450,11 +3454,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3454 "util/configparser.c" +#line 3458 "util/configparser.c" break; - case 350: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG */ -#line 879 "./util/configparser.y" + case 351: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG */ +#line 880 "./util/configparser.y" { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3462,11 +3466,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3466 "util/configparser.c" +#line 3470 "util/configparser.c" break; - case 351: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG */ -#line 888 "./util/configparser.y" + case 352: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG */ +#line 889 "./util/configparser.y" { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3474,11 +3478,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3478 "util/configparser.c" +#line 3482 "util/configparser.c" break; - case 352: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG */ -#line 897 "./util/configparser.y" + case 353: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG */ +#line 898 "./util/configparser.y" { OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3490,11 +3494,11 @@ yyreduce: else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3494 "util/configparser.c" +#line 3498 "util/configparser.c" break; - case 353: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG */ -#line 910 "./util/configparser.y" + case 354: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG */ +#line 911 "./util/configparser.y" { OUTYY(("P(server_max_reuse_tcp_queries:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3504,11 +3508,11 @@ yyreduce: else cfg_parser->cfg->max_reuse_tcp_queries = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3508 "util/configparser.c" +#line 3512 "util/configparser.c" break; - case 354: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG */ -#line 921 "./util/configparser.y" + case 355: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG */ +#line 922 "./util/configparser.y" { OUTYY(("P(server_tcp_reuse_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3518,11 +3522,11 @@ yyreduce: else cfg_parser->cfg->tcp_reuse_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3522 "util/configparser.c" +#line 3526 "util/configparser.c" break; - case 355: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG */ -#line 932 "./util/configparser.y" + case 356: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG */ +#line 933 "./util/configparser.y" { OUTYY(("P(server_tcp_auth_query_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3532,11 +3536,11 @@ yyreduce: else cfg_parser->cfg->tcp_auth_query_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3536 "util/configparser.c" +#line 3540 "util/configparser.c" break; - case 356: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG */ -#line 943 "./util/configparser.y" + case 357: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG */ +#line 944 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3544,11 +3548,11 @@ yyreduce: else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3548 "util/configparser.c" +#line 3552 "util/configparser.c" break; - case 357: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG */ -#line 952 "./util/configparser.y" + case 358: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG */ +#line 953 "./util/configparser.y" { OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3560,11 +3564,11 @@ yyreduce: else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3564 "util/configparser.c" +#line 3568 "util/configparser.c" break; - case 358: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG */ -#line 965 "./util/configparser.y" + case 359: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG */ +#line 966 "./util/configparser.y" { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3572,11 +3576,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3576 "util/configparser.c" +#line 3580 "util/configparser.c" break; - case 359: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG */ -#line 974 "./util/configparser.y" + case 360: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG */ +#line 975 "./util/configparser.y" { OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3584,11 +3588,11 @@ yyreduce: else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3588 "util/configparser.c" +#line 3592 "util/configparser.c" break; - case 360: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG */ -#line 983 "./util/configparser.y" + case 361: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG */ +#line 984 "./util/configparser.y" { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3596,31 +3600,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3600 "util/configparser.c" +#line 3604 "util/configparser.c" break; - case 361: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG */ -#line 992 "./util/configparser.y" + case 362: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG */ +#line 993 "./util/configparser.y" { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 3610 "util/configparser.c" +#line 3614 "util/configparser.c" break; - case 362: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG */ -#line 999 "./util/configparser.y" + case 363: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG */ +#line 1000 "./util/configparser.y" { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 3620 "util/configparser.c" +#line 3624 "util/configparser.c" break; - case 363: /* server_ssl_port: VAR_SSL_PORT STRING_ARG */ -#line 1006 "./util/configparser.y" + case 364: /* server_ssl_port: VAR_SSL_PORT STRING_ARG */ +#line 1007 "./util/configparser.y" { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3628,21 +3632,21 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3632 "util/configparser.c" +#line 3636 "util/configparser.c" break; - case 364: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG */ -#line 1015 "./util/configparser.y" + case 365: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG */ +#line 1016 "./util/configparser.y" { OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_cert_bundle); cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str); } -#line 3642 "util/configparser.c" +#line 3646 "util/configparser.c" break; - case 365: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG */ -#line 1022 "./util/configparser.y" + case 366: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG */ +#line 1023 "./util/configparser.y" { OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3650,53 +3654,53 @@ yyreduce: else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3654 "util/configparser.c" +#line 3658 "util/configparser.c" break; - case 366: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG */ -#line 1031 "./util/configparser.y" + case 367: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG */ +#line 1032 "./util/configparser.y" { OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3665 "util/configparser.c" +#line 3669 "util/configparser.c" break; - case 367: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG */ -#line 1039 "./util/configparser.y" + case 368: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG */ +#line 1040 "./util/configparser.y" { OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphers); cfg_parser->cfg->tls_ciphers = (yyvsp[0].str); } -#line 3675 "util/configparser.c" +#line 3679 "util/configparser.c" break; - case 368: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG */ -#line 1046 "./util/configparser.y" + case 369: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG */ +#line 1047 "./util/configparser.y" { OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->tls_ciphersuites); cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str); } -#line 3685 "util/configparser.c" +#line 3689 "util/configparser.c" break; - case 369: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG */ -#line 1053 "./util/configparser.y" + case 370: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG */ +#line 1054 "./util/configparser.y" { OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3696 "util/configparser.c" +#line 3700 "util/configparser.c" break; - case 370: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG */ -#line 1061 "./util/configparser.y" + case 371: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG */ +#line 1062 "./util/configparser.y" { OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3704,11 +3708,11 @@ yyreduce: else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3708 "util/configparser.c" +#line 3712 "util/configparser.c" break; - case 371: /* server_https_port: VAR_HTTPS_PORT STRING_ARG */ -#line 1070 "./util/configparser.y" + case 372: /* server_https_port: VAR_HTTPS_PORT STRING_ARG */ +#line 1071 "./util/configparser.y" { OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3716,11 +3720,11 @@ yyreduce: else cfg_parser->cfg->https_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3720 "util/configparser.c" +#line 3724 "util/configparser.c" break; - case 372: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG */ -#line 1078 "./util/configparser.y" + case 373: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG */ +#line 1079 "./util/configparser.y" { OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->http_endpoint); @@ -3736,11 +3740,11 @@ yyreduce: cfg_parser->cfg->http_endpoint = (yyvsp[0].str); } } -#line 3740 "util/configparser.c" +#line 3744 "util/configparser.c" break; - case 373: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG */ -#line 1094 "./util/configparser.y" + case 374: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG */ +#line 1095 "./util/configparser.y" { OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3748,11 +3752,11 @@ yyreduce: else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3752 "util/configparser.c" +#line 3756 "util/configparser.c" break; - case 374: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG */ -#line 1102 "./util/configparser.y" + case 375: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG */ +#line 1103 "./util/configparser.y" { OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -3760,11 +3764,11 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3764 "util/configparser.c" +#line 3768 "util/configparser.c" break; - case 375: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG */ -#line 1110 "./util/configparser.y" + case 376: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG */ +#line 1111 "./util/configparser.y" { OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), @@ -3772,11 +3776,11 @@ yyreduce: yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3776 "util/configparser.c" +#line 3780 "util/configparser.c" break; - case 376: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG */ -#line 1118 "./util/configparser.y" + case 377: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG */ +#line 1119 "./util/configparser.y" { OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3784,11 +3788,11 @@ yyreduce: else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3788 "util/configparser.c" +#line 3792 "util/configparser.c" break; - case 377: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG */ -#line 1126 "./util/configparser.y" + case 378: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG */ +#line 1127 "./util/configparser.y" { OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3796,11 +3800,11 @@ yyreduce: else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3800 "util/configparser.c" +#line 3804 "util/configparser.c" break; - case 378: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG */ -#line 1134 "./util/configparser.y" + case 379: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG */ +#line 1135 "./util/configparser.y" { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3808,11 +3812,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3812 "util/configparser.c" +#line 3816 "util/configparser.c" break; - case 379: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG */ -#line 1143 "./util/configparser.y" + case 380: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG */ +#line 1144 "./util/configparser.y" { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3820,11 +3824,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3824 "util/configparser.c" +#line 3828 "util/configparser.c" break; - case 380: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG */ -#line 1152 "./util/configparser.y" + case 381: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG */ +#line 1153 "./util/configparser.y" { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3837,11 +3841,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3841 "util/configparser.c" +#line 3845 "util/configparser.c" break; - case 381: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG */ -#line 1166 "./util/configparser.y" + case 382: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG */ +#line 1167 "./util/configparser.y" { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3849,11 +3853,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3853 "util/configparser.c" +#line 3857 "util/configparser.c" break; - case 382: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG */ -#line 1175 "./util/configparser.y" + case 383: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG */ +#line 1176 "./util/configparser.y" { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3861,11 +3865,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3865 "util/configparser.c" +#line 3869 "util/configparser.c" break; - case 383: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG */ -#line 1184 "./util/configparser.y" + case 384: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG */ +#line 1185 "./util/configparser.y" { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3873,11 +3877,11 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3877 "util/configparser.c" +#line 3881 "util/configparser.c" break; - case 384: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG */ -#line 1193 "./util/configparser.y" + case 385: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG */ +#line 1194 "./util/configparser.y" { OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3885,11 +3889,11 @@ yyreduce: else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3889 "util/configparser.c" +#line 3893 "util/configparser.c" break; - case 385: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG */ -#line 1202 "./util/configparser.y" + case 386: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG */ +#line 1203 "./util/configparser.y" { OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3897,11 +3901,11 @@ yyreduce: else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3901 "util/configparser.c" +#line 3905 "util/configparser.c" break; - case 386: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG */ -#line 1211 "./util/configparser.y" + case 387: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG */ +#line 1212 "./util/configparser.y" { OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3909,31 +3913,31 @@ yyreduce: else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3913 "util/configparser.c" +#line 3917 "util/configparser.c" break; - case 387: /* server_chroot: VAR_CHROOT STRING_ARG */ -#line 1220 "./util/configparser.y" + case 388: /* server_chroot: VAR_CHROOT STRING_ARG */ +#line 1221 "./util/configparser.y" { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 3923 "util/configparser.c" +#line 3927 "util/configparser.c" break; - case 388: /* server_username: VAR_USERNAME STRING_ARG */ -#line 1227 "./util/configparser.y" + case 389: /* server_username: VAR_USERNAME STRING_ARG */ +#line 1228 "./util/configparser.y" { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 3933 "util/configparser.c" +#line 3937 "util/configparser.c" break; - case 389: /* server_directory: VAR_DIRECTORY STRING_ARG */ -#line 1234 "./util/configparser.y" + case 390: /* server_directory: VAR_DIRECTORY STRING_ARG */ +#line 1235 "./util/configparser.y" { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -3958,105 +3962,105 @@ yyreduce: } } } -#line 3962 "util/configparser.c" +#line 3966 "util/configparser.c" break; - case 390: /* server_logfile: VAR_LOGFILE STRING_ARG */ -#line 1260 "./util/configparser.y" + case 391: /* server_logfile: VAR_LOGFILE STRING_ARG */ +#line 1261 "./util/configparser.y" { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 3973 "util/configparser.c" +#line 3977 "util/configparser.c" break; - case 391: /* server_pidfile: VAR_PIDFILE STRING_ARG */ -#line 1268 "./util/configparser.y" + case 392: /* server_pidfile: VAR_PIDFILE STRING_ARG */ +#line 1269 "./util/configparser.y" { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 3983 "util/configparser.c" +#line 3987 "util/configparser.c" break; - case 392: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG */ -#line 1275 "./util/configparser.y" + case 393: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG */ +#line 1276 "./util/configparser.y" { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3993 "util/configparser.c" +#line 3997 "util/configparser.c" break; - case 393: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG */ -#line 1282 "./util/configparser.y" + case 394: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG */ +#line 1283 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor-file ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 4003 "util/configparser.c" +#line 4007 "util/configparser.c" break; - case 394: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG */ -#line 1289 "./util/configparser.y" + case 395: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG */ +#line 1290 "./util/configparser.y" { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); log_warn("option dlv-anchor ignored: DLV is decommissioned"); free((yyvsp[0].str)); } -#line 4013 "util/configparser.c" +#line 4017 "util/configparser.c" break; - case 395: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG */ -#line 1296 "./util/configparser.y" + case 396: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG */ +#line 1297 "./util/configparser.y" { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4024 "util/configparser.c" +#line 4028 "util/configparser.c" break; - case 396: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG */ -#line 1304 "./util/configparser.y" + case 397: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG */ +#line 1305 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4035 "util/configparser.c" +#line 4039 "util/configparser.c" break; - case 397: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG */ -#line 1312 "./util/configparser.y" + case 398: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG */ +#line 1313 "./util/configparser.y" { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4046 "util/configparser.c" +#line 4050 "util/configparser.c" break; - case 398: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG */ -#line 1320 "./util/configparser.y" + case 399: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG */ +#line 1321 "./util/configparser.y" { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4056 "util/configparser.c" +#line 4060 "util/configparser.c" break; - case 399: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG */ -#line 1327 "./util/configparser.y" + case 400: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG */ +#line 1328 "./util/configparser.y" { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4066,11 +4070,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4070 "util/configparser.c" +#line 4074 "util/configparser.c" break; - case 400: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG */ -#line 1338 "./util/configparser.y" + case 401: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG */ +#line 1339 "./util/configparser.y" { OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4080,21 +4084,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4084 "util/configparser.c" +#line 4088 "util/configparser.c" break; - case 401: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG */ -#line 1349 "./util/configparser.y" + case 402: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG */ +#line 1350 "./util/configparser.y" { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4094 "util/configparser.c" +#line 4098 "util/configparser.c" break; - case 402: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG */ -#line 1356 "./util/configparser.y" + case 403: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG */ +#line 1357 "./util/configparser.y" { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4102,11 +4106,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4106 "util/configparser.c" +#line 4110 "util/configparser.c" break; - case 403: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG */ -#line 1365 "./util/configparser.y" + case 404: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG */ +#line 1366 "./util/configparser.y" { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4114,11 +4118,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4118 "util/configparser.c" +#line 4122 "util/configparser.c" break; - case 404: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG */ -#line 1374 "./util/configparser.y" + case 405: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG */ +#line 1375 "./util/configparser.y" { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4126,11 +4130,11 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4130 "util/configparser.c" +#line 4134 "util/configparser.c" break; - case 405: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG */ -#line 1383 "./util/configparser.y" + case 406: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG */ +#line 1384 "./util/configparser.y" { OUTYY(("P(server_hide_user_agent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4138,41 +4142,41 @@ yyreduce: else cfg_parser->cfg->hide_http_user_agent = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4142 "util/configparser.c" +#line 4146 "util/configparser.c" break; - case 406: /* server_identity: VAR_IDENTITY STRING_ARG */ -#line 1392 "./util/configparser.y" + case 407: /* server_identity: VAR_IDENTITY STRING_ARG */ +#line 1393 "./util/configparser.y" { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 4152 "util/configparser.c" +#line 4156 "util/configparser.c" break; - case 407: /* server_version: VAR_VERSION STRING_ARG */ -#line 1399 "./util/configparser.y" + case 408: /* server_version: VAR_VERSION STRING_ARG */ +#line 1400 "./util/configparser.y" { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 4162 "util/configparser.c" +#line 4166 "util/configparser.c" break; - case 408: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG */ -#line 1406 "./util/configparser.y" + case 409: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG */ +#line 1407 "./util/configparser.y" { OUTYY(("P(server_http_user_agent:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->http_user_agent); cfg_parser->cfg->http_user_agent = (yyvsp[0].str); } -#line 4172 "util/configparser.c" +#line 4176 "util/configparser.c" break; - case 409: /* server_nsid: VAR_NSID STRING_ARG */ -#line 1413 "./util/configparser.y" + case 410: /* server_nsid: VAR_NSID STRING_ARG */ +#line 1414 "./util/configparser.y" { OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->nsid_cfg_str); @@ -4187,33 +4191,33 @@ yyreduce: yyerror("the NSID must be either a hex string or an " "ascii character string prepended with ascii_."); } -#line 4191 "util/configparser.c" +#line 4195 "util/configparser.c" break; - case 410: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG */ -#line 1429 "./util/configparser.y" + case 411: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG */ +#line 1430 "./util/configparser.y" { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4202 "util/configparser.c" +#line 4206 "util/configparser.c" break; - case 411: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG */ -#line 1437 "./util/configparser.y" + case 412: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG */ +#line 1438 "./util/configparser.y" { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 4213 "util/configparser.c" +#line 4217 "util/configparser.c" break; - case 412: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG */ -#line 1445 "./util/configparser.y" + case 413: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG */ +#line 1446 "./util/configparser.y" { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4222,11 +4226,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4226 "util/configparser.c" +#line 4230 "util/configparser.c" break; - case 413: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG */ -#line 1455 "./util/configparser.y" + case 414: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG */ +#line 1456 "./util/configparser.y" { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4235,11 +4239,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4239 "util/configparser.c" +#line 4243 "util/configparser.c" break; - case 414: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG */ -#line 1465 "./util/configparser.y" + case 415: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG */ +#line 1466 "./util/configparser.y" { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4248,11 +4252,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4252 "util/configparser.c" +#line 4256 "util/configparser.c" break; - case 415: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG */ -#line 1475 "./util/configparser.y" + case 416: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG */ +#line 1476 "./util/configparser.y" { OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4265,22 +4269,22 @@ yyreduce: cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4269 "util/configparser.c" +#line 4273 "util/configparser.c" break; - case 416: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG */ -#line 1489 "./util/configparser.y" + case 417: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG */ +#line 1490 "./util/configparser.y" { OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4280 "util/configparser.c" +#line 4284 "util/configparser.c" break; - case 417: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG */ -#line 1497 "./util/configparser.y" + case 418: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG */ +#line 1498 "./util/configparser.y" { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4292,11 +4296,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4296 "util/configparser.c" +#line 4300 "util/configparser.c" break; - case 418: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG */ -#line 1510 "./util/configparser.y" + case 419: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG */ +#line 1511 "./util/configparser.y" { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4306,22 +4310,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4310 "util/configparser.c" +#line 4314 "util/configparser.c" break; - case 419: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG */ -#line 1521 "./util/configparser.y" + case 420: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG */ +#line 1522 "./util/configparser.y" { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4321 "util/configparser.c" +#line 4325 "util/configparser.c" break; - case 420: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG */ -#line 1529 "./util/configparser.y" + case 421: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG */ +#line 1530 "./util/configparser.y" { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -4333,11 +4337,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4337 "util/configparser.c" +#line 4341 "util/configparser.c" break; - case 421: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG */ -#line 1542 "./util/configparser.y" + case 422: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG */ +#line 1543 "./util/configparser.y" { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4345,11 +4349,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4349 "util/configparser.c" +#line 4353 "util/configparser.c" break; - case 422: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG */ -#line 1551 "./util/configparser.y" + case 423: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG */ +#line 1552 "./util/configparser.y" { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4357,11 +4361,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4361 "util/configparser.c" +#line 4365 "util/configparser.c" break; - case 423: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG */ -#line 1560 "./util/configparser.y" + case 424: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG */ +#line 1561 "./util/configparser.y" { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4369,11 +4373,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4373 "util/configparser.c" +#line 4377 "util/configparser.c" break; - case 424: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG */ -#line 1569 "./util/configparser.y" + case 425: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG */ +#line 1570 "./util/configparser.y" { OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4381,11 +4385,11 @@ yyreduce: else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4385 "util/configparser.c" +#line 4389 "util/configparser.c" break; - case 425: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG */ -#line 1578 "./util/configparser.y" + case 426: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG */ +#line 1579 "./util/configparser.y" { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4394,11 +4398,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4398 "util/configparser.c" +#line 4402 "util/configparser.c" break; - case 426: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG */ -#line 1588 "./util/configparser.y" + case 427: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG */ +#line 1589 "./util/configparser.y" { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4407,22 +4411,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4411 "util/configparser.c" +#line 4415 "util/configparser.c" break; - case 427: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG */ -#line 1598 "./util/configparser.y" + case 428: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG */ +#line 1599 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4422 "util/configparser.c" +#line 4426 "util/configparser.c" break; - case 428: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG */ -#line 1606 "./util/configparser.y" + case 429: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG */ +#line 1607 "./util/configparser.y" { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -4434,11 +4438,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4438 "util/configparser.c" +#line 4442 "util/configparser.c" break; - case 429: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG */ -#line 1619 "./util/configparser.y" + case 430: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG */ +#line 1620 "./util/configparser.y" { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4446,22 +4450,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4450 "util/configparser.c" +#line 4454 "util/configparser.c" break; - case 430: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG */ -#line 1628 "./util/configparser.y" + case 431: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG */ +#line 1629 "./util/configparser.y" { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4461 "util/configparser.c" +#line 4465 "util/configparser.c" break; - case 431: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG */ -#line 1636 "./util/configparser.y" + case 432: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG */ +#line 1637 "./util/configparser.y" { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4469,22 +4473,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4473 "util/configparser.c" +#line 4477 "util/configparser.c" break; - case 432: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG */ -#line 1645 "./util/configparser.y" + case 433: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG */ +#line 1646 "./util/configparser.y" { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4484 "util/configparser.c" +#line 4488 "util/configparser.c" break; - case 433: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG */ -#line 1653 "./util/configparser.y" + case 434: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG */ +#line 1654 "./util/configparser.y" { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -4496,11 +4500,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4500 "util/configparser.c" +#line 4504 "util/configparser.c" break; - case 434: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG */ -#line 1666 "./util/configparser.y" + case 435: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG */ +#line 1667 "./util/configparser.y" { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4508,11 +4512,11 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4512 "util/configparser.c" +#line 4516 "util/configparser.c" break; - case 435: /* server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG */ -#line 1675 "./util/configparser.y" + case 436: /* server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG */ +#line 1676 "./util/configparser.y" { OUTYY(("P(server_infra_cache_max_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4520,11 +4524,11 @@ yyreduce: else cfg_parser->cfg->infra_cache_max_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4524 "util/configparser.c" +#line 4528 "util/configparser.c" break; - case 436: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG */ -#line 1684 "./util/configparser.y" + case 437: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG */ +#line 1685 "./util/configparser.y" { OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4533,21 +4537,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4537 "util/configparser.c" +#line 4541 "util/configparser.c" break; - case 437: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG */ -#line 1694 "./util/configparser.y" + case 438: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG */ +#line 1695 "./util/configparser.y" { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 4547 "util/configparser.c" +#line 4551 "util/configparser.c" break; - case 438: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG */ -#line 1701 "./util/configparser.y" + case 439: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG */ +#line 1702 "./util/configparser.y" { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4556,11 +4560,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4560 "util/configparser.c" +#line 4564 "util/configparser.c" break; - case 439: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG */ -#line 1711 "./util/configparser.y" + case 440: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG */ +#line 1712 "./util/configparser.y" { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4569,11 +4573,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4573 "util/configparser.c" +#line 4577 "util/configparser.c" break; - case 440: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG */ -#line 1721 "./util/configparser.y" + case 441: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG */ +#line 1722 "./util/configparser.y" { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4582,11 +4586,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4586 "util/configparser.c" +#line 4590 "util/configparser.c" break; - case 441: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG */ -#line 1731 "./util/configparser.y" + case 442: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG */ +#line 1732 "./util/configparser.y" { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4595,11 +4599,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4599 "util/configparser.c" +#line 4603 "util/configparser.c" break; - case 442: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG */ -#line 1741 "./util/configparser.y" + case 443: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG */ +#line 1742 "./util/configparser.y" { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4608,11 +4612,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4612 "util/configparser.c" +#line 4616 "util/configparser.c" break; - case 443: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG */ -#line 1751 "./util/configparser.y" + case 444: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG */ +#line 1752 "./util/configparser.y" { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4621,11 +4625,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4625 "util/configparser.c" +#line 4629 "util/configparser.c" break; - case 444: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG */ -#line 1761 "./util/configparser.y" + case 445: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG */ +#line 1762 "./util/configparser.y" { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4634,11 +4638,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4638 "util/configparser.c" +#line 4642 "util/configparser.c" break; - case 445: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG */ -#line 1771 "./util/configparser.y" + case 446: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG */ +#line 1772 "./util/configparser.y" { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4647,41 +4651,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4651 "util/configparser.c" +#line 4655 "util/configparser.c" break; - case 446: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG */ -#line 1781 "./util/configparser.y" + case 447: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG */ +#line 1782 "./util/configparser.y" { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4661 "util/configparser.c" +#line 4665 "util/configparser.c" break; - case 447: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG */ -#line 1788 "./util/configparser.y" + case 448: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG */ +#line 1789 "./util/configparser.y" { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4671 "util/configparser.c" +#line 4675 "util/configparser.c" break; - case 448: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG */ -#line 1795 "./util/configparser.y" + case 449: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG */ +#line 1796 "./util/configparser.y" { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4681 "util/configparser.c" +#line 4685 "util/configparser.c" break; - case 449: /* server_prefetch: VAR_PREFETCH STRING_ARG */ -#line 1802 "./util/configparser.y" + case 450: /* server_prefetch: VAR_PREFETCH STRING_ARG */ +#line 1803 "./util/configparser.y" { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4689,11 +4693,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4693 "util/configparser.c" +#line 4697 "util/configparser.c" break; - case 450: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG */ -#line 1811 "./util/configparser.y" + case 451: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG */ +#line 1812 "./util/configparser.y" { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4701,11 +4705,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4705 "util/configparser.c" +#line 4709 "util/configparser.c" break; - case 451: /* server_deny_any: VAR_DENY_ANY STRING_ARG */ -#line 1820 "./util/configparser.y" + case 452: /* server_deny_any: VAR_DENY_ANY STRING_ARG */ +#line 1821 "./util/configparser.y" { OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4713,11 +4717,11 @@ yyreduce: else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4717 "util/configparser.c" +#line 4721 "util/configparser.c" break; - case 452: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG */ -#line 1829 "./util/configparser.y" + case 453: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG */ +#line 1830 "./util/configparser.y" { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4725,21 +4729,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4729 "util/configparser.c" +#line 4733 "util/configparser.c" break; - case 453: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG */ -#line 1838 "./util/configparser.y" + case 454: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG */ +#line 1839 "./util/configparser.y" { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4739 "util/configparser.c" +#line 4743 "util/configparser.c" break; - case 454: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG */ -#line 1845 "./util/configparser.y" + case 455: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG */ +#line 1846 "./util/configparser.y" { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4748,22 +4752,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4752 "util/configparser.c" +#line 4756 "util/configparser.c" break; - case 455: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG */ -#line 1855 "./util/configparser.y" + case 456: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG */ +#line 1856 "./util/configparser.y" { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_acl_action((yyvsp[0].str)); if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding acl"); } -#line 4763 "util/configparser.c" +#line 4767 "util/configparser.c" break; - case 456: /* server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG */ -#line 1863 "./util/configparser.y" + case 457: /* server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG */ +#line 1864 "./util/configparser.y" { OUTYY(("P(server_interface_action:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_acl_action((yyvsp[0].str)); @@ -4771,21 +4775,21 @@ yyreduce: &cfg_parser->cfg->interface_actions, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding acl"); } -#line 4775 "util/configparser.c" +#line 4779 "util/configparser.c" break; - case 457: /* server_module_conf: VAR_MODULE_CONF STRING_ARG */ -#line 1872 "./util/configparser.y" + case 458: /* server_module_conf: VAR_MODULE_CONF STRING_ARG */ +#line 1873 "./util/configparser.y" { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 4785 "util/configparser.c" +#line 4789 "util/configparser.c" break; - case 458: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG */ -#line 1879 "./util/configparser.y" + case 459: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG */ +#line 1880 "./util/configparser.y" { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4802,11 +4806,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4806 "util/configparser.c" +#line 4810 "util/configparser.c" break; - case 459: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG */ -#line 1897 "./util/configparser.y" + case 460: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG */ +#line 1898 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4818,11 +4822,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4822 "util/configparser.c" +#line 4826 "util/configparser.c" break; - case 460: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG */ -#line 1910 "./util/configparser.y" + case 461: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG */ +#line 1911 "./util/configparser.y" { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4834,11 +4838,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4838 "util/configparser.c" +#line 4842 "util/configparser.c" break; - case 461: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG */ -#line 1923 "./util/configparser.y" + case 462: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG */ +#line 1924 "./util/configparser.y" { OUTYY(("P(server_val_max_restart:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -4850,11 +4854,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4854 "util/configparser.c" +#line 4858 "util/configparser.c" break; - case 462: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG */ -#line 1936 "./util/configparser.y" + case 463: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG */ +#line 1937 "./util/configparser.y" { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4862,11 +4866,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4866 "util/configparser.c" +#line 4870 "util/configparser.c" break; - case 463: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG */ -#line 1945 "./util/configparser.y" + case 464: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG */ +#line 1946 "./util/configparser.y" { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4874,11 +4878,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4878 "util/configparser.c" +#line 4882 "util/configparser.c" break; - case 464: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG */ -#line 1954 "./util/configparser.y" + case 465: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG */ +#line 1955 "./util/configparser.y" { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4886,11 +4890,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4890 "util/configparser.c" +#line 4894 "util/configparser.c" break; - case 465: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG */ -#line 1963 "./util/configparser.y" + case 466: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG */ +#line 1964 "./util/configparser.y" { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4898,11 +4902,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4902 "util/configparser.c" +#line 4906 "util/configparser.c" break; - case 466: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG */ -#line 1972 "./util/configparser.y" + case 467: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG */ +#line 1973 "./util/configparser.y" { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4911,11 +4915,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4915 "util/configparser.c" +#line 4919 "util/configparser.c" break; - case 467: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG */ -#line 1982 "./util/configparser.y" + case 468: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG */ +#line 1983 "./util/configparser.y" { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4924,11 +4928,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4928 "util/configparser.c" +#line 4932 "util/configparser.c" break; - case 468: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG */ -#line 1992 "./util/configparser.y" + case 469: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG */ +#line 1993 "./util/configparser.y" { OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4938,11 +4942,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4942 "util/configparser.c" +#line 4946 "util/configparser.c" break; - case 469: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG */ -#line 2003 "./util/configparser.y" + case 470: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG */ +#line 2004 "./util/configparser.y" { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4950,11 +4954,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4954 "util/configparser.c" +#line 4958 "util/configparser.c" break; - case 470: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG */ -#line 2012 "./util/configparser.y" + case 471: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG */ +#line 2013 "./util/configparser.y" { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4962,11 +4966,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4966 "util/configparser.c" +#line 4970 "util/configparser.c" break; - case 471: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG */ -#line 2021 "./util/configparser.y" + case 472: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG */ +#line 2022 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4974,11 +4978,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4978 "util/configparser.c" +#line 4982 "util/configparser.c" break; - case 472: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG */ -#line 2030 "./util/configparser.y" + case 473: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG */ +#line 2031 "./util/configparser.y" { OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4986,11 +4990,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4990 "util/configparser.c" +#line 4994 "util/configparser.c" break; - case 473: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG */ -#line 2039 "./util/configparser.y" + case 474: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG */ +#line 2040 "./util/configparser.y" { OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4998,11 +5002,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5002 "util/configparser.c" +#line 5006 "util/configparser.c" break; - case 474: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG */ -#line 2048 "./util/configparser.y" + case 475: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG */ +#line 2049 "./util/configparser.y" { OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5010,11 +5014,11 @@ yyreduce: else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5014 "util/configparser.c" +#line 5018 "util/configparser.c" break; - case 475: /* server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG */ -#line 2057 "./util/configparser.y" + case 476: /* server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG */ +#line 2058 "./util/configparser.y" { OUTYY(("P(server_ede_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5022,11 +5026,11 @@ yyreduce: else cfg_parser->cfg->ede_serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5026 "util/configparser.c" +#line 5030 "util/configparser.c" break; - case 476: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG */ -#line 2066 "./util/configparser.y" + case 477: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG */ +#line 2067 "./util/configparser.y" { OUTYY(("P(server_serve_original_ttl:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5034,11 +5038,11 @@ yyreduce: else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5038 "util/configparser.c" +#line 5042 "util/configparser.c" break; - case 477: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG */ -#line 2075 "./util/configparser.y" + case 478: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG */ +#line 2076 "./util/configparser.y" { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5050,11 +5054,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5054 "util/configparser.c" +#line 5058 "util/configparser.c" break; - case 478: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG */ -#line 2088 "./util/configparser.y" + case 479: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG */ +#line 2089 "./util/configparser.y" { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5066,11 +5070,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5070 "util/configparser.c" +#line 5074 "util/configparser.c" break; - case 479: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG */ -#line 2101 "./util/configparser.y" + case 480: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG */ +#line 2102 "./util/configparser.y" { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5078,21 +5082,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5082 "util/configparser.c" +#line 5086 "util/configparser.c" break; - case 480: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG */ -#line 2110 "./util/configparser.y" + case 481: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG */ +#line 2111 "./util/configparser.y" { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 5092 "util/configparser.c" +#line 5096 "util/configparser.c" break; - case 481: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG */ -#line 2117 "./util/configparser.y" + case 482: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG */ +#line 2118 "./util/configparser.y" { OUTYY(("P(server_zonemd_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5100,11 +5104,11 @@ yyreduce: else cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5104 "util/configparser.c" +#line 5108 "util/configparser.c" break; - case 482: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG */ -#line 2126 "./util/configparser.y" + case 483: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG */ +#line 2127 "./util/configparser.y" { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5112,11 +5116,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5116 "util/configparser.c" +#line 5120 "util/configparser.c" break; - case 483: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG */ -#line 2135 "./util/configparser.y" + case 484: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG */ +#line 2136 "./util/configparser.y" { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5124,11 +5128,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5128 "util/configparser.c" +#line 5132 "util/configparser.c" break; - case 484: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG */ -#line 2144 "./util/configparser.y" + case 485: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG */ +#line 2145 "./util/configparser.y" { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5136,11 +5140,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5140 "util/configparser.c" +#line 5144 "util/configparser.c" break; - case 485: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG */ -#line 2153 "./util/configparser.y" + case 486: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG */ +#line 2154 "./util/configparser.y" { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5149,22 +5153,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5153 "util/configparser.c" +#line 5157 "util/configparser.c" break; - case 486: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG */ -#line 2162 "./util/configparser.y" + case 487: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG */ +#line 2163 "./util/configparser.y" { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5164 "util/configparser.c" +#line 5168 "util/configparser.c" break; - case 487: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG */ -#line 2170 "./util/configparser.y" + case 488: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG */ +#line 2171 "./util/configparser.y" { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -5176,22 +5180,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5180 "util/configparser.c" +#line 5184 "util/configparser.c" break; - case 488: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG */ -#line 2183 "./util/configparser.y" + case 489: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG */ +#line 2184 "./util/configparser.y" { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5191 "util/configparser.c" +#line 5195 "util/configparser.c" break; - case 489: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ -#line 2191 "./util/configparser.y" + case 490: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ +#line 2192 "./util/configparser.y" { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -5245,21 +5249,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 5249 "util/configparser.c" +#line 5253 "util/configparser.c" break; - case 490: /* server_local_data: VAR_LOCAL_DATA STRING_ARG */ -#line 2246 "./util/configparser.y" + case 491: /* server_local_data: VAR_LOCAL_DATA STRING_ARG */ +#line 2247 "./util/configparser.y" { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 5259 "util/configparser.c" +#line 5263 "util/configparser.c" break; - case 491: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ -#line 2253 "./util/configparser.y" + case 492: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ +#line 2254 "./util/configparser.y" { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -5273,11 +5277,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 5277 "util/configparser.c" +#line 5281 "util/configparser.c" break; - case 492: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG */ -#line 2268 "./util/configparser.y" + case 493: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG */ +#line 2269 "./util/configparser.y" { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5286,11 +5290,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5290 "util/configparser.c" +#line 5294 "util/configparser.c" break; - case 493: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG */ -#line 2278 "./util/configparser.y" + case 494: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG */ +#line 2279 "./util/configparser.y" { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5299,41 +5303,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5303 "util/configparser.c" +#line 5307 "util/configparser.c" break; - case 494: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG */ -#line 2288 "./util/configparser.y" + case 495: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG */ +#line 2289 "./util/configparser.y" { OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5313 "util/configparser.c" +#line 5317 "util/configparser.c" break; - case 495: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG */ -#line 2295 "./util/configparser.y" + case 496: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG */ +#line 2296 "./util/configparser.y" { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5323 "util/configparser.c" +#line 5327 "util/configparser.c" break; - case 496: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG */ -#line 2302 "./util/configparser.y" + case 497: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG */ +#line 2303 "./util/configparser.y" { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 5333 "util/configparser.c" +#line 5337 "util/configparser.c" break; - case 497: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG */ -#line 2309 "./util/configparser.y" + case 498: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG */ +#line 2310 "./util/configparser.y" { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5341,22 +5345,22 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5345 "util/configparser.c" +#line 5349 "util/configparser.c" break; - case 498: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG */ -#line 2318 "./util/configparser.y" + case 499: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG */ +#line 2319 "./util/configparser.y" { OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, (yyvsp[0].str))) fatal_exit("out of memory adding dns64-ignore-aaaa"); } -#line 5356 "util/configparser.c" +#line 5360 "util/configparser.c" break; - case 499: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG */ -#line 2326 "./util/configparser.y" + case 500: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG */ +#line 2327 "./util/configparser.y" { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -5369,11 +5373,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5373 "util/configparser.c" +#line 5377 "util/configparser.c" break; - case 500: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG */ -#line 2340 "./util/configparser.y" + case 501: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG */ +#line 2341 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5393,11 +5397,11 @@ yyreduce: } } } -#line 5397 "util/configparser.c" +#line 5401 "util/configparser.c" break; - case 501: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG */ -#line 2361 "./util/configparser.y" + case 502: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG */ +#line 2362 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5417,11 +5421,11 @@ yyreduce: } } } -#line 5421 "util/configparser.c" +#line 5425 "util/configparser.c" break; - case 502: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ -#line 2382 "./util/configparser.y" + case 503: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ +#line 2383 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -5432,11 +5436,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5436 "util/configparser.c" +#line 5440 "util/configparser.c" break; - case 503: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ -#line 2394 "./util/configparser.y" + case 504: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ +#line 2395 "./util/configparser.y" { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -5447,11 +5451,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5451 "util/configparser.c" +#line 5455 "util/configparser.c" break; - case 504: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG */ -#line 2406 "./util/configparser.y" + case 505: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG */ +#line 2407 "./util/configparser.y" { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -5462,11 +5466,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5466 "util/configparser.c" +#line 5470 "util/configparser.c" break; - case 505: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG */ -#line 2418 "./util/configparser.y" + case 506: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG */ +#line 2419 "./util/configparser.y" { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -5474,11 +5478,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5478 "util/configparser.c" +#line 5482 "util/configparser.c" break; - case 506: /* server_interface_tag: VAR_INTERFACE_TAG STRING_ARG STRING_ARG */ -#line 2427 "./util/configparser.y" + case 507: /* server_interface_tag: VAR_INTERFACE_TAG STRING_ARG STRING_ARG */ +#line 2428 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5498,11 +5502,11 @@ yyreduce: } } } -#line 5502 "util/configparser.c" +#line 5506 "util/configparser.c" break; - case 507: /* server_interface_tag_action: VAR_INTERFACE_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ -#line 2448 "./util/configparser.y" + case 508: /* server_interface_tag_action: VAR_INTERFACE_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG */ +#line 2449 "./util/configparser.y" { OUTYY(("P(server_interface_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_actions, @@ -5513,11 +5517,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5517 "util/configparser.c" +#line 5521 "util/configparser.c" break; - case 508: /* server_interface_tag_data: VAR_INTERFACE_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ -#line 2460 "./util/configparser.y" + case 509: /* server_interface_tag_data: VAR_INTERFACE_TAG_DATA STRING_ARG STRING_ARG STRING_ARG */ +#line 2461 "./util/configparser.y" { OUTYY(("P(server_interface_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_datas, @@ -5528,11 +5532,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 5532 "util/configparser.c" +#line 5536 "util/configparser.c" break; - case 509: /* server_interface_view: VAR_INTERFACE_VIEW STRING_ARG STRING_ARG */ -#line 2472 "./util/configparser.y" + case 510: /* server_interface_view: VAR_INTERFACE_VIEW STRING_ARG STRING_ARG */ +#line 2473 "./util/configparser.y" { OUTYY(("P(server_interface_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->interface_view, @@ -5540,11 +5544,11 @@ yyreduce: yyerror("out of memory"); } } -#line 5544 "util/configparser.c" +#line 5548 "util/configparser.c" break; - case 510: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG */ -#line 2481 "./util/configparser.y" + case 511: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG */ +#line 2482 "./util/configparser.y" { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -5564,11 +5568,11 @@ yyreduce: } } } -#line 5568 "util/configparser.c" +#line 5572 "util/configparser.c" break; - case 511: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG */ -#line 2502 "./util/configparser.y" + case 512: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG */ +#line 2503 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5576,11 +5580,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5580 "util/configparser.c" +#line 5584 "util/configparser.c" break; - case 512: /* server_ratelimit: VAR_RATELIMIT STRING_ARG */ -#line 2511 "./util/configparser.y" + case 513: /* server_ratelimit: VAR_RATELIMIT STRING_ARG */ +#line 2512 "./util/configparser.y" { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5588,33 +5592,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5592 "util/configparser.c" +#line 5596 "util/configparser.c" break; - case 513: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG */ -#line 2520 "./util/configparser.y" + case 514: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG */ +#line 2521 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5603 "util/configparser.c" +#line 5607 "util/configparser.c" break; - case 514: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG */ -#line 2528 "./util/configparser.y" + case 515: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG */ +#line 2529 "./util/configparser.y" { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 5614 "util/configparser.c" +#line 5618 "util/configparser.c" break; - case 515: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG */ -#line 2536 "./util/configparser.y" + case 516: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG */ +#line 2537 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -5626,11 +5630,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5630 "util/configparser.c" +#line 5634 "util/configparser.c" break; - case 516: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG */ -#line 2549 "./util/configparser.y" + case 517: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG */ +#line 2550 "./util/configparser.y" { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -5642,11 +5646,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 5646 "util/configparser.c" +#line 5650 "util/configparser.c" break; - case 517: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG */ -#line 2562 "./util/configparser.y" + case 518: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG */ +#line 2563 "./util/configparser.y" { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5660,11 +5664,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 5664 "util/configparser.c" +#line 5668 "util/configparser.c" break; - case 518: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG */ -#line 2577 "./util/configparser.y" + case 519: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG */ +#line 2578 "./util/configparser.y" { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -5678,11 +5682,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 5682 "util/configparser.c" +#line 5686 "util/configparser.c" break; - case 519: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG */ -#line 2592 "./util/configparser.y" + case 520: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG */ +#line 2593 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5690,11 +5694,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5694 "util/configparser.c" +#line 5698 "util/configparser.c" break; - case 520: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG */ -#line 2601 "./util/configparser.y" + case 521: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG */ +#line 2602 "./util/configparser.y" { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5702,11 +5706,11 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5706 "util/configparser.c" +#line 5710 "util/configparser.c" break; - case 521: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG */ -#line 2610 "./util/configparser.y" + case 522: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG */ +#line 2611 "./util/configparser.y" { OUTYY(("P(server_ip_ratelimit_backoff:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5715,11 +5719,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5719 "util/configparser.c" +#line 5723 "util/configparser.c" break; - case 522: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG */ -#line 2620 "./util/configparser.y" + case 523: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG */ +#line 2621 "./util/configparser.y" { OUTYY(("P(server_ratelimit_backoff:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5728,11 +5732,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5732 "util/configparser.c" +#line 5736 "util/configparser.c" break; - case 523: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG */ -#line 2630 "./util/configparser.y" + case 524: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG */ +#line 2631 "./util/configparser.y" { OUTYY(("P(server_outbound_msg_retry:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5740,20 +5744,20 @@ yyreduce: else cfg_parser->cfg->outbound_msg_retry = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5744 "util/configparser.c" +#line 5748 "util/configparser.c" break; - case 524: /* server_low_rtt: VAR_LOW_RTT STRING_ARG */ -#line 2639 "./util/configparser.y" + case 525: /* server_low_rtt: VAR_LOW_RTT STRING_ARG */ +#line 2640 "./util/configparser.y" { OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); free((yyvsp[0].str)); } -#line 5753 "util/configparser.c" +#line 5757 "util/configparser.c" break; - case 525: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG */ -#line 2645 "./util/configparser.y" + case 526: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG */ +#line 2646 "./util/configparser.y" { OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) <= 0) @@ -5761,11 +5765,11 @@ yyreduce: else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5765 "util/configparser.c" +#line 5769 "util/configparser.c" break; - case 526: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG */ -#line 2654 "./util/configparser.y" + case 527: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG */ +#line 2655 "./util/configparser.y" { OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5773,11 +5777,11 @@ yyreduce: else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5777 "util/configparser.c" +#line 5781 "util/configparser.c" break; - case 527: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG */ -#line 2663 "./util/configparser.y" + case 528: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG */ +#line 2664 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5786,11 +5790,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5790 "util/configparser.c" +#line 5794 "util/configparser.c" break; - case 528: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG */ -#line 2673 "./util/configparser.y" + case 529: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG */ +#line 2674 "./util/configparser.y" { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5799,11 +5803,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5803 "util/configparser.c" +#line 5807 "util/configparser.c" break; - case 529: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG */ -#line 2683 "./util/configparser.y" + case 530: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG */ +#line 2684 "./util/configparser.y" { OUTYY(("P(server_pad_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5812,11 +5816,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5816 "util/configparser.c" +#line 5820 "util/configparser.c" break; - case 530: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG */ -#line 2693 "./util/configparser.y" + case 531: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG */ +#line 2694 "./util/configparser.y" { OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5824,11 +5828,11 @@ yyreduce: else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5828 "util/configparser.c" +#line 5832 "util/configparser.c" break; - case 531: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG */ -#line 2702 "./util/configparser.y" + case 532: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG */ +#line 2703 "./util/configparser.y" { OUTYY(("P(server_pad_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5837,11 +5841,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5841 "util/configparser.c" +#line 5845 "util/configparser.c" break; - case 532: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG */ -#line 2712 "./util/configparser.y" + case 533: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG */ +#line 2713 "./util/configparser.y" { OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -5849,11 +5853,11 @@ yyreduce: else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5853 "util/configparser.c" +#line 5857 "util/configparser.c" break; - case 533: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG */ -#line 2721 "./util/configparser.y" + case 534: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG */ +#line 2722 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -5865,11 +5869,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5869 "util/configparser.c" +#line 5873 "util/configparser.c" break; - case 534: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG */ -#line 2734 "./util/configparser.y" + case 535: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG */ +#line 2735 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -5881,11 +5885,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 5885 "util/configparser.c" +#line 5889 "util/configparser.c" break; - case 535: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG */ -#line 2747 "./util/configparser.y" + case 536: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG */ +#line 2748 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -5896,11 +5900,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5900 "util/configparser.c" +#line 5904 "util/configparser.c" break; - case 536: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG */ -#line 2759 "./util/configparser.y" + case 537: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG */ +#line 2760 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -5913,11 +5917,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5917 "util/configparser.c" +#line 5921 "util/configparser.c" break; - case 537: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG */ -#line 2773 "./util/configparser.y" + case 538: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG */ +#line 2774 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -5928,11 +5932,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5932 "util/configparser.c" +#line 5936 "util/configparser.c" break; - case 538: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG */ -#line 2785 "./util/configparser.y" + case 539: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG */ +#line 2786 "./util/configparser.y" { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -5945,11 +5949,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 5949 "util/configparser.c" +#line 5953 "util/configparser.c" break; - case 539: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG */ -#line 2799 "./util/configparser.y" + case 540: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG */ +#line 2800 "./util/configparser.y" { OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert( @@ -5957,11 +5961,11 @@ yyreduce: fatal_exit("out of memory adding " "edns-client-string"); } -#line 5961 "util/configparser.c" +#line 5965 "util/configparser.c" break; - case 540: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG */ -#line 2808 "./util/configparser.y" + case 541: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG */ +#line 2809 "./util/configparser.y" { OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -5971,11 +5975,11 @@ yyreduce: else cfg_parser->cfg->edns_client_string_opcode = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5975 "util/configparser.c" +#line 5979 "util/configparser.c" break; - case 541: /* server_ede: VAR_EDE STRING_ARG */ -#line 2819 "./util/configparser.y" + case 542: /* server_ede: VAR_EDE STRING_ARG */ +#line 2820 "./util/configparser.y" { OUTYY(("P(server_ede:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -5983,11 +5987,21 @@ yyreduce: else cfg_parser->cfg->ede = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5987 "util/configparser.c" +#line 5991 "util/configparser.c" break; - case 542: /* stub_name: VAR_NAME STRING_ARG */ -#line 2828 "./util/configparser.y" + case 543: /* server_proxy_protocol_port: VAR_PROXY_PROTOCOL_PORT STRING_ARG */ +#line 2829 "./util/configparser.y" + { + OUTYY(("P(server_proxy_protocol_port:%s)\n", (yyvsp[0].str))); + if(!cfg_strlist_insert(&cfg_parser->cfg->proxy_protocol_port, (yyvsp[0].str))) + yyerror("out of memory"); + } +#line 6001 "util/configparser.c" + break; + + case 544: /* stub_name: VAR_NAME STRING_ARG */ +#line 2836 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -5996,31 +6010,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 6000 "util/configparser.c" +#line 6014 "util/configparser.c" break; - case 543: /* stub_host: VAR_STUB_HOST STRING_ARG */ -#line 2838 "./util/configparser.y" + case 545: /* stub_host: VAR_STUB_HOST STRING_ARG */ +#line 2846 "./util/configparser.y" { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6010 "util/configparser.c" +#line 6024 "util/configparser.c" break; - case 544: /* stub_addr: VAR_STUB_ADDR STRING_ARG */ -#line 2845 "./util/configparser.y" + case 546: /* stub_addr: VAR_STUB_ADDR STRING_ARG */ +#line 2853 "./util/configparser.y" { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6020 "util/configparser.c" +#line 6034 "util/configparser.c" break; - case 545: /* stub_first: VAR_STUB_FIRST STRING_ARG */ -#line 2852 "./util/configparser.y" + case 547: /* stub_first: VAR_STUB_FIRST STRING_ARG */ +#line 2860 "./util/configparser.y" { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6028,11 +6042,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6032 "util/configparser.c" +#line 6046 "util/configparser.c" break; - case 546: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG */ -#line 2861 "./util/configparser.y" + case 548: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG */ +#line 2869 "./util/configparser.y" { OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6040,11 +6054,11 @@ yyreduce: else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6044 "util/configparser.c" +#line 6058 "util/configparser.c" break; - case 547: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG */ -#line 2870 "./util/configparser.y" + case 549: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG */ +#line 2878 "./util/configparser.y" { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6053,11 +6067,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6057 "util/configparser.c" +#line 6071 "util/configparser.c" break; - case 548: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG */ -#line 2880 "./util/configparser.y" + case 550: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG */ +#line 2888 "./util/configparser.y" { OUTYY(("P(stub-tcp-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6066,11 +6080,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6070 "util/configparser.c" +#line 6084 "util/configparser.c" break; - case 549: /* stub_prime: VAR_STUB_PRIME STRING_ARG */ -#line 2890 "./util/configparser.y" + case 551: /* stub_prime: VAR_STUB_PRIME STRING_ARG */ +#line 2898 "./util/configparser.y" { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6079,11 +6093,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6083 "util/configparser.c" +#line 6097 "util/configparser.c" break; - case 550: /* forward_name: VAR_NAME STRING_ARG */ -#line 2900 "./util/configparser.y" + case 552: /* forward_name: VAR_NAME STRING_ARG */ +#line 2908 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -6092,31 +6106,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 6096 "util/configparser.c" +#line 6110 "util/configparser.c" break; - case 551: /* forward_host: VAR_FORWARD_HOST STRING_ARG */ -#line 2910 "./util/configparser.y" + case 553: /* forward_host: VAR_FORWARD_HOST STRING_ARG */ +#line 2918 "./util/configparser.y" { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6106 "util/configparser.c" +#line 6120 "util/configparser.c" break; - case 552: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG */ -#line 2917 "./util/configparser.y" + case 554: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG */ +#line 2925 "./util/configparser.y" { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6116 "util/configparser.c" +#line 6130 "util/configparser.c" break; - case 553: /* forward_first: VAR_FORWARD_FIRST STRING_ARG */ -#line 2924 "./util/configparser.y" + case 555: /* forward_first: VAR_FORWARD_FIRST STRING_ARG */ +#line 2932 "./util/configparser.y" { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6124,11 +6138,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6128 "util/configparser.c" +#line 6142 "util/configparser.c" break; - case 554: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG */ -#line 2933 "./util/configparser.y" + case 556: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG */ +#line 2941 "./util/configparser.y" { OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6136,11 +6150,11 @@ yyreduce: else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6140 "util/configparser.c" +#line 6154 "util/configparser.c" break; - case 555: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG */ -#line 2942 "./util/configparser.y" + case 557: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG */ +#line 2950 "./util/configparser.y" { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6149,11 +6163,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6153 "util/configparser.c" +#line 6167 "util/configparser.c" break; - case 556: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG */ -#line 2952 "./util/configparser.y" + case 558: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG */ +#line 2960 "./util/configparser.y" { OUTYY(("P(forward-tcp-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6162,11 +6176,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6166 "util/configparser.c" +#line 6180 "util/configparser.c" break; - case 557: /* auth_name: VAR_NAME STRING_ARG */ -#line 2962 "./util/configparser.y" + case 559: /* auth_name: VAR_NAME STRING_ARG */ +#line 2970 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->auths->name) @@ -6175,52 +6189,52 @@ yyreduce: free(cfg_parser->cfg->auths->name); cfg_parser->cfg->auths->name = (yyvsp[0].str); } -#line 6179 "util/configparser.c" +#line 6193 "util/configparser.c" break; - case 558: /* auth_zonefile: VAR_ZONEFILE STRING_ARG */ -#line 2972 "./util/configparser.y" + case 560: /* auth_zonefile: VAR_ZONEFILE STRING_ARG */ +#line 2980 "./util/configparser.y" { OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->auths->zonefile); cfg_parser->cfg->auths->zonefile = (yyvsp[0].str); } -#line 6189 "util/configparser.c" +#line 6203 "util/configparser.c" break; - case 559: /* auth_master: VAR_MASTER STRING_ARG */ -#line 2979 "./util/configparser.y" + case 561: /* auth_master: VAR_MASTER STRING_ARG */ +#line 2987 "./util/configparser.y" { OUTYY(("P(master:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6199 "util/configparser.c" +#line 6213 "util/configparser.c" break; - case 560: /* auth_url: VAR_URL STRING_ARG */ -#line 2986 "./util/configparser.y" + case 562: /* auth_url: VAR_URL STRING_ARG */ +#line 2994 "./util/configparser.y" { OUTYY(("P(url:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6209 "util/configparser.c" +#line 6223 "util/configparser.c" break; - case 561: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG */ -#line 2993 "./util/configparser.y" + case 563: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG */ +#line 3001 "./util/configparser.y" { OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6220 "util/configparser.c" +#line 6234 "util/configparser.c" break; - case 562: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG */ -#line 3001 "./util/configparser.y" + case 564: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG */ +#line 3009 "./util/configparser.y" { OUTYY(("P(zonemd-check:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6229,11 +6243,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6233 "util/configparser.c" +#line 6247 "util/configparser.c" break; - case 563: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG */ -#line 3011 "./util/configparser.y" + case 565: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG */ +#line 3019 "./util/configparser.y" { OUTYY(("P(zonemd-reject-absence:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6242,11 +6256,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6246 "util/configparser.c" +#line 6260 "util/configparser.c" break; - case 564: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG */ -#line 3021 "./util/configparser.y" + case 566: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG */ +#line 3029 "./util/configparser.y" { OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6255,11 +6269,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6259 "util/configparser.c" +#line 6273 "util/configparser.c" break; - case 565: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG */ -#line 3031 "./util/configparser.y" + case 567: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG */ +#line 3039 "./util/configparser.y" { OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6268,11 +6282,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6272 "util/configparser.c" +#line 6286 "util/configparser.c" break; - case 566: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG */ -#line 3041 "./util/configparser.y" + case 568: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG */ +#line 3049 "./util/configparser.y" { OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6281,11 +6295,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6285 "util/configparser.c" +#line 6299 "util/configparser.c" break; - case 567: /* view_name: VAR_NAME STRING_ARG */ -#line 3051 "./util/configparser.y" + case 569: /* view_name: VAR_NAME STRING_ARG */ +#line 3059 "./util/configparser.y" { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -6294,11 +6308,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 6298 "util/configparser.c" +#line 6312 "util/configparser.c" break; - case 568: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ -#line 3061 "./util/configparser.y" + case 570: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG */ +#line 3069 "./util/configparser.y" { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -6353,11 +6367,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 6357 "util/configparser.c" +#line 6371 "util/configparser.c" break; - case 569: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ -#line 3117 "./util/configparser.y" + case 571: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ +#line 3125 "./util/configparser.y" { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6366,33 +6380,33 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 6370 "util/configparser.c" +#line 6384 "util/configparser.c" break; - case 570: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ -#line 3127 "./util/configparser.y" + case 572: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ +#line 3135 "./util/configparser.y" { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6381 "util/configparser.c" +#line 6395 "util/configparser.c" break; - case 571: /* view_local_data: VAR_LOCAL_DATA STRING_ARG */ -#line 3135 "./util/configparser.y" + case 573: /* view_local_data: VAR_LOCAL_DATA STRING_ARG */ +#line 3143 "./util/configparser.y" { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { fatal_exit("out of memory adding local-data"); } } -#line 6392 "util/configparser.c" +#line 6406 "util/configparser.c" break; - case 572: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ -#line 3143 "./util/configparser.y" + case 574: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG */ +#line 3151 "./util/configparser.y" { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -6406,11 +6420,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 6410 "util/configparser.c" +#line 6424 "util/configparser.c" break; - case 573: /* view_first: VAR_VIEW_FIRST STRING_ARG */ -#line 3158 "./util/configparser.y" + case 575: /* view_first: VAR_VIEW_FIRST STRING_ARG */ +#line 3166 "./util/configparser.y" { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6418,20 +6432,20 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6422 "util/configparser.c" +#line 6436 "util/configparser.c" break; - case 574: /* rcstart: VAR_REMOTE_CONTROL */ -#line 3167 "./util/configparser.y" + case 576: /* rcstart: VAR_REMOTE_CONTROL */ +#line 3175 "./util/configparser.y" { OUTYY(("\nP(remote-control:)\n")); cfg_parser->started_toplevel = 1; } -#line 6431 "util/configparser.c" +#line 6445 "util/configparser.c" break; - case 585: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG */ -#line 3179 "./util/configparser.y" + case 587: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG */ +#line 3187 "./util/configparser.y" { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6440,11 +6454,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6444 "util/configparser.c" +#line 6458 "util/configparser.c" break; - case 586: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG */ -#line 3189 "./util/configparser.y" + case 588: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG */ +#line 3197 "./util/configparser.y" { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6452,80 +6466,80 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6456 "util/configparser.c" +#line 6470 "util/configparser.c" break; - case 587: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG */ -#line 3198 "./util/configparser.y" + case 589: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG */ +#line 3206 "./util/configparser.y" { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6466 "util/configparser.c" +#line 6480 "util/configparser.c" break; - case 588: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG */ -#line 3205 "./util/configparser.y" + case 590: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG */ +#line 3213 "./util/configparser.y" { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6476 "util/configparser.c" +#line 6490 "util/configparser.c" break; - case 589: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG */ -#line 3212 "./util/configparser.y" + case 591: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG */ +#line 3220 "./util/configparser.y" { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 6486 "util/configparser.c" +#line 6500 "util/configparser.c" break; - case 590: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG */ -#line 3219 "./util/configparser.y" + case 592: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG */ +#line 3227 "./util/configparser.y" { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 6496 "util/configparser.c" +#line 6510 "util/configparser.c" break; - case 591: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG */ -#line 3226 "./util/configparser.y" + case 593: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG */ +#line 3234 "./util/configparser.y" { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 6506 "util/configparser.c" +#line 6520 "util/configparser.c" break; - case 592: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG */ -#line 3233 "./util/configparser.y" + case 594: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG */ +#line 3241 "./util/configparser.y" { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 6516 "util/configparser.c" +#line 6530 "util/configparser.c" break; - case 593: /* dtstart: VAR_DNSTAP */ -#line 3240 "./util/configparser.y" + case 595: /* dtstart: VAR_DNSTAP */ +#line 3248 "./util/configparser.y" { OUTYY(("\nP(dnstap:)\n")); cfg_parser->started_toplevel = 1; } -#line 6525 "util/configparser.c" +#line 6539 "util/configparser.c" break; - case 615: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG */ -#line 3261 "./util/configparser.y" + case 617: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG */ +#line 3269 "./util/configparser.y" { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6533,11 +6547,11 @@ yyreduce: else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6537 "util/configparser.c" +#line 6551 "util/configparser.c" break; - case 616: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG */ -#line 3270 "./util/configparser.y" + case 618: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG */ +#line 3278 "./util/configparser.y" { OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6546,31 +6560,31 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6550 "util/configparser.c" +#line 6564 "util/configparser.c" break; - case 617: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG */ -#line 3280 "./util/configparser.y" + case 619: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG */ +#line 3288 "./util/configparser.y" { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 6560 "util/configparser.c" +#line 6574 "util/configparser.c" break; - case 618: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG */ -#line 3287 "./util/configparser.y" + case 620: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG */ +#line 3295 "./util/configparser.y" { OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_ip); cfg_parser->cfg->dnstap_ip = (yyvsp[0].str); } -#line 6570 "util/configparser.c" +#line 6584 "util/configparser.c" break; - case 619: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG */ -#line 3294 "./util/configparser.y" + case 621: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG */ +#line 3302 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6578,51 +6592,51 @@ yyreduce: else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6582 "util/configparser.c" +#line 6596 "util/configparser.c" break; - case 620: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG */ -#line 3303 "./util/configparser.y" + case 622: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG */ +#line 3311 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_server_name); cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str); } -#line 6592 "util/configparser.c" +#line 6606 "util/configparser.c" break; - case 621: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG */ -#line 3310 "./util/configparser.y" + case 623: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG */ +#line 3318 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_cert_bundle); cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str); } -#line 6602 "util/configparser.c" +#line 6616 "util/configparser.c" break; - case 622: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG */ -#line 3317 "./util/configparser.y" + case 624: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG */ +#line 3325 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_key_file); cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str); } -#line 6612 "util/configparser.c" +#line 6626 "util/configparser.c" break; - case 623: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG */ -#line 3324 "./util/configparser.y" + case 625: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG */ +#line 3332 "./util/configparser.y" { OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_tls_client_cert_file); cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str); } -#line 6622 "util/configparser.c" +#line 6636 "util/configparser.c" break; - case 624: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG */ -#line 3331 "./util/configparser.y" + case 626: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG */ +#line 3339 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6630,11 +6644,11 @@ yyreduce: else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6634 "util/configparser.c" +#line 6648 "util/configparser.c" break; - case 625: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG */ -#line 3340 "./util/configparser.y" + case 627: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG */ +#line 3348 "./util/configparser.y" { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6642,31 +6656,31 @@ yyreduce: else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6646 "util/configparser.c" +#line 6660 "util/configparser.c" break; - case 626: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG */ -#line 3349 "./util/configparser.y" + case 628: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG */ +#line 3357 "./util/configparser.y" { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 6656 "util/configparser.c" +#line 6670 "util/configparser.c" break; - case 627: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG */ -#line 3356 "./util/configparser.y" + case 629: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG */ +#line 3364 "./util/configparser.y" { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 6666 "util/configparser.c" +#line 6680 "util/configparser.c" break; - case 628: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG */ -#line 3363 "./util/configparser.y" + case 630: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG */ +#line 3371 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6675,11 +6689,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6679 "util/configparser.c" +#line 6693 "util/configparser.c" break; - case 629: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG */ -#line 3373 "./util/configparser.y" + case 631: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG */ +#line 3381 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6688,11 +6702,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6692 "util/configparser.c" +#line 6706 "util/configparser.c" break; - case 630: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG */ -#line 3383 "./util/configparser.y" + case 632: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG */ +#line 3391 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6701,11 +6715,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6705 "util/configparser.c" +#line 6719 "util/configparser.c" break; - case 631: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG */ -#line 3393 "./util/configparser.y" + case 633: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG */ +#line 3401 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6714,11 +6728,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6718 "util/configparser.c" +#line 6732 "util/configparser.c" break; - case 632: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG */ -#line 3403 "./util/configparser.y" + case 634: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG */ +#line 3411 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6727,11 +6741,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6731 "util/configparser.c" +#line 6745 "util/configparser.c" break; - case 633: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG */ -#line 3413 "./util/configparser.y" + case 635: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG */ +#line 3421 "./util/configparser.y" { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6740,49 +6754,49 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6744 "util/configparser.c" +#line 6758 "util/configparser.c" break; - case 634: /* pythonstart: VAR_PYTHON */ -#line 3423 "./util/configparser.y" + case 636: /* pythonstart: VAR_PYTHON */ +#line 3431 "./util/configparser.y" { OUTYY(("\nP(python:)\n")); cfg_parser->started_toplevel = 1; } -#line 6753 "util/configparser.c" +#line 6767 "util/configparser.c" break; - case 638: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG */ -#line 3433 "./util/configparser.y" + case 640: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG */ +#line 3441 "./util/configparser.y" { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6763 "util/configparser.c" +#line 6777 "util/configparser.c" break; - case 639: /* dynlibstart: VAR_DYNLIB */ -#line 3439 "./util/configparser.y" + case 641: /* dynlibstart: VAR_DYNLIB */ +#line 3447 "./util/configparser.y" { OUTYY(("\nP(dynlib:)\n")); cfg_parser->started_toplevel = 1; } -#line 6772 "util/configparser.c" +#line 6786 "util/configparser.c" break; - case 643: /* dl_file: VAR_DYNLIB_FILE STRING_ARG */ -#line 3449 "./util/configparser.y" + case 645: /* dl_file: VAR_DYNLIB_FILE STRING_ARG */ +#line 3457 "./util/configparser.y" { OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str))) yyerror("out of memory"); } -#line 6782 "util/configparser.c" +#line 6796 "util/configparser.c" break; - case 644: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG */ -#line 3455 "./util/configparser.y" + case 646: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG */ +#line 3463 "./util/configparser.y" { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6791,21 +6805,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6795 "util/configparser.c" +#line 6809 "util/configparser.c" break; - case 645: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG */ -#line 3465 "./util/configparser.y" + case 647: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG */ +#line 3473 "./util/configparser.y" { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 6805 "util/configparser.c" +#line 6819 "util/configparser.c" break; - case 646: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ -#line 3472 "./util/configparser.y" + case 648: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG */ +#line 3480 "./util/configparser.y" { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -6813,31 +6827,31 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 6817 "util/configparser.c" +#line 6831 "util/configparser.c" break; - case 647: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ -#line 3481 "./util/configparser.y" + case 649: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG */ +#line 3489 "./util/configparser.y" { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 6828 "util/configparser.c" +#line 6842 "util/configparser.c" break; - case 648: /* dnscstart: VAR_DNSCRYPT */ -#line 3489 "./util/configparser.y" + case 650: /* dnscstart: VAR_DNSCRYPT */ +#line 3497 "./util/configparser.y" { OUTYY(("\nP(dnscrypt:)\n")); cfg_parser->started_toplevel = 1; } -#line 6837 "util/configparser.c" +#line 6851 "util/configparser.c" break; - case 661: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG */ -#line 3506 "./util/configparser.y" + case 663: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG */ +#line 3514 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -6845,11 +6859,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 6849 "util/configparser.c" +#line 6863 "util/configparser.c" break; - case 662: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG */ -#line 3516 "./util/configparser.y" + case 664: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG */ +#line 3524 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -6857,21 +6871,21 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 6861 "util/configparser.c" +#line 6875 "util/configparser.c" break; - case 663: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG */ -#line 3525 "./util/configparser.y" + case 665: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG */ +#line 3533 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 6871 "util/configparser.c" +#line 6885 "util/configparser.c" break; - case 664: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG */ -#line 3532 "./util/configparser.y" + case 666: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG */ +#line 3540 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) @@ -6879,21 +6893,21 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 6883 "util/configparser.c" +#line 6897 "util/configparser.c" break; - case 665: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG */ -#line 3541 "./util/configparser.y" + case 667: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG */ +#line 3549 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); } -#line 6893 "util/configparser.c" +#line 6907 "util/configparser.c" break; - case 666: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG */ -#line 3548 "./util/configparser.y" + case 668: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG */ +#line 3556 "./util/configparser.y" { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) @@ -6901,22 +6915,22 @@ yyreduce: if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 6905 "util/configparser.c" +#line 6919 "util/configparser.c" break; - case 667: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG */ -#line 3557 "./util/configparser.y" + case 669: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG */ +#line 3565 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6916 "util/configparser.c" +#line 6930 "util/configparser.c" break; - case 668: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG */ -#line 3565 "./util/configparser.y" + case 670: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG */ +#line 3573 "./util/configparser.y" { OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -6928,22 +6942,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6932 "util/configparser.c" +#line 6946 "util/configparser.c" break; - case 669: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG */ -#line 3578 "./util/configparser.y" + case 671: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG */ +#line 3586 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 6943 "util/configparser.c" +#line 6957 "util/configparser.c" break; - case 670: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG */ -#line 3586 "./util/configparser.y" + case 672: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG */ +#line 3594 "./util/configparser.y" { OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) { @@ -6955,20 +6969,20 @@ yyreduce: } free((yyvsp[0].str)); } -#line 6959 "util/configparser.c" +#line 6973 "util/configparser.c" break; - case 671: /* cachedbstart: VAR_CACHEDB */ -#line 3599 "./util/configparser.y" + case 673: /* cachedbstart: VAR_CACHEDB */ +#line 3607 "./util/configparser.y" { OUTYY(("\nP(cachedb:)\n")); cfg_parser->started_toplevel = 1; } -#line 6968 "util/configparser.c" +#line 6982 "util/configparser.c" break; - case 680: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG */ -#line 3611 "./util/configparser.y" + case 682: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG */ +#line 3619 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); @@ -6979,11 +6993,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6983 "util/configparser.c" +#line 6997 "util/configparser.c" break; - case 681: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG */ -#line 3623 "./util/configparser.y" + case 683: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG */ +#line 3631 "./util/configparser.y" { #ifdef USE_CACHEDB OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); @@ -6994,11 +7008,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 6998 "util/configparser.c" +#line 7012 "util/configparser.c" break; - case 682: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG */ -#line 3635 "./util/configparser.y" + case 684: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG */ +#line 3643 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str))); @@ -7009,11 +7023,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 7013 "util/configparser.c" +#line 7027 "util/configparser.c" break; - case 683: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG */ -#line 3647 "./util/configparser.y" + case 685: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG */ +#line 3655 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) int port; @@ -7027,11 +7041,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 7031 "util/configparser.c" +#line 7045 "util/configparser.c" break; - case 684: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG */ -#line 3662 "./util/configparser.y" + case 686: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG */ +#line 3670 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str))); @@ -7043,11 +7057,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 7047 "util/configparser.c" +#line 7061 "util/configparser.c" break; - case 685: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG */ -#line 3675 "./util/configparser.y" + case 687: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG */ +#line 3683 "./util/configparser.y" { #if defined(USE_CACHEDB) && defined(USE_REDIS) OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str))); @@ -7059,11 +7073,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 7063 "util/configparser.c" +#line 7077 "util/configparser.c" break; - case 686: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG */ -#line 3688 "./util/configparser.y" + case 688: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG */ +#line 3696 "./util/configparser.y" { OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if (atoi((yyvsp[0].str)) < 0) @@ -7073,20 +7087,20 @@ yyreduce: fatal_exit("out of memory adding tcp connection limit"); } } -#line 7077 "util/configparser.c" +#line 7091 "util/configparser.c" break; - case 687: /* ipsetstart: VAR_IPSET */ -#line 3699 "./util/configparser.y" + case 689: /* ipsetstart: VAR_IPSET */ +#line 3707 "./util/configparser.y" { OUTYY(("\nP(ipset:)\n")); cfg_parser->started_toplevel = 1; } -#line 7086 "util/configparser.c" +#line 7100 "util/configparser.c" break; - case 692: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG */ -#line 3709 "./util/configparser.y" + case 694: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG */ +#line 3717 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str))); @@ -7100,11 +7114,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 7104 "util/configparser.c" +#line 7118 "util/configparser.c" break; - case 693: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG */ -#line 3724 "./util/configparser.y" + case 695: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG */ +#line 3732 "./util/configparser.y" { #ifdef USE_IPSET OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str))); @@ -7118,11 +7132,11 @@ yyreduce: free((yyvsp[0].str)); #endif } -#line 7122 "util/configparser.c" +#line 7136 "util/configparser.c" break; -#line 7126 "util/configparser.c" +#line 7140 "util/configparser.c" default: break; } @@ -7315,7 +7329,7 @@ yyreturnlab: return yyresult; } -#line 3738 "./util/configparser.y" +#line 3746 "./util/configparser.y" /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 18101d2cc..4987e1169 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -383,7 +383,8 @@ extern int yydebug; VAR_INTERFACE_VIEW = 584, /* VAR_INTERFACE_VIEW */ VAR_INTERFACE_TAG = 585, /* VAR_INTERFACE_TAG */ VAR_INTERFACE_TAG_ACTION = 586, /* VAR_INTERFACE_TAG_ACTION */ - VAR_INTERFACE_TAG_DATA = 587 /* VAR_INTERFACE_TAG_DATA */ + VAR_INTERFACE_TAG_DATA = 587, /* VAR_INTERFACE_TAG_DATA */ + VAR_PROXY_PROTOCOL_PORT = 588 /* VAR_PROXY_PROTOCOL_PORT */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -722,6 +723,7 @@ extern int yydebug; #define VAR_INTERFACE_TAG 585 #define VAR_INTERFACE_TAG_ACTION 586 #define VAR_INTERFACE_TAG_DATA 587 +#define VAR_PROXY_PROTOCOL_PORT 588 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -731,7 +733,7 @@ union YYSTYPE char* str; -#line 735 "util/configparser.h" +#line 737 "util/configparser.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 8f3672f5d..3ecdad2ad 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -193,6 +193,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_RPZ_SIGNAL_NXDOMAIN_RA VAR_INTERFACE_AUTOMATIC_PORTS VAR_EDE %token VAR_INTERFACE_ACTION VAR_INTERFACE_VIEW VAR_INTERFACE_TAG %token VAR_INTERFACE_TAG_ACTION VAR_INTERFACE_TAG_DATA +%token VAR_PROXY_PROTOCOL_PORT %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -320,8 +321,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_edns_client_string_opcode | server_nsid | server_zonemd_permissive_mode | server_max_reuse_tcp_queries | server_tcp_reuse_timeout | server_tcp_auth_query_timeout | - server_interface_automatic_ports | server_ede - + server_interface_automatic_ports | server_ede | + server_proxy_protocol_port ; stubstart: VAR_STUB_ZONE { @@ -2824,6 +2825,13 @@ server_ede: VAR_EDE STRING_ARG free($2); } ; +server_proxy_protocol_port: VAR_PROXY_PROTOCOL_PORT STRING_ARG + { + OUTYY(("P(server_proxy_protocol_port:%s)\n", $2)); + if(!cfg_strlist_insert(&cfg_parser->cfg->proxy_protocol_port, $2)) + yyerror("out of memory"); + } + ; stub_name: VAR_NAME STRING_ARG { OUTYY(("P(name:%s)\n", $2)); diff --git a/util/netevent.c b/util/netevent.c index 9030a792c..740f7c7e1 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -45,6 +45,7 @@ #include "util/net_help.h" #include "util/tcp_conn_limit.h" #include "util/fptr_wlist.h" +#include "util/proxy_protocol.h" #include "sldns/pkthdr.h" #include "sldns/sbuffer.h" #include "sldns/str2wire.h" @@ -755,6 +756,67 @@ static int udp_recv_needs_log(int err) return 1; } +/** Parses the PROXYv2 header from buf and updates the comm_reply struct. + * Returns 1 on success, 0 on failure. */ +static int consume_pp2_header(struct sldns_buffer* buf, struct comm_reply* rep, + int stream) { + size_t size; + struct pp2_header *header = pp2_read_header(buf); + if(header == NULL) return 0; + size = PP2_HEADER_SIZE + ntohs(header->len); + if((header->ver_cmd & 0xF) == PP2_CMD_LOCAL) { + /* A connection from the proxy itself. + * No need to do anything with addresses. */ + goto done; + } + if(header->fam_prot == 0x00) { + /* Unspecified family and protocol. This could be used for + * health checks by proxies. + * No need to do anything with addresses. */ + goto done; + } + /* Read the proxied address */ + switch(header->fam_prot) { + case 0x11: /* AF_INET|STREAM */ + case 0x12: /* AF_INET|DGRAM */ + { + struct sockaddr_in* addr = + (struct sockaddr_in*)&rep->client_addr; + addr->sin_family = AF_INET; + addr->sin_addr.s_addr = header->addr.addr4.src_addr; + addr->sin_port = header->addr.addr4.src_port; + rep->client_addrlen = (socklen_t)sizeof(struct sockaddr_in); + } + /* Ignore the destination address; it should be us. */ + break; + case 0x21: /* AF_INET6|STREAM */ + case 0x22: /* AF_INET6|DGRAM */ + { + struct sockaddr_in6* addr = + (struct sockaddr_in6*)&rep->client_addr; + memset(addr, 0, sizeof(*addr)); + addr->sin6_family = AF_INET6; + memcpy(&addr->sin6_addr, + header->addr.addr6.src_addr, 16); + addr->sin6_port = header->addr.addr6.src_port; + rep->client_addrlen = (socklen_t)sizeof(struct sockaddr_in6); + } + /* Ignore the destination address; it should be us. */ + break; + } + rep->is_proxied = 1; +done: + if(!stream) { + /* We are reading a whole packet; + * Move the rest of the data to overwrite the PROXYv2 header */ + /* XXX can we do better to avoid memmove? */ + memmove(header, ((void*)header)+size, + sldns_buffer_limit(buf)-size); + sldns_buffer_set_limit(buf, sldns_buffer_limit(buf)-size); + } + return 1; +} + void comm_point_udp_ancil_callback(int fd, short event, void* arg) { @@ -781,11 +843,11 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg) ub_comm_base_now(rep.c->ev->base); for(i=0; ibuffer); - rep.addrlen = (socklen_t)sizeof(rep.addr); + rep.remote_addrlen = (socklen_t)sizeof(rep.remote_addr); log_assert(fd != -1); log_assert(sldns_buffer_remaining(rep.c->buffer) > 0); - msg.msg_name = &rep.addr; - msg.msg_namelen = (socklen_t)sizeof(rep.addr); + msg.msg_name = &rep.remote_addr; + msg.msg_namelen = (socklen_t)sizeof(rep.remote_addr); iov[0].iov_base = sldns_buffer_begin(rep.c->buffer); iov[0].iov_len = sldns_buffer_remaining(rep.c->buffer); msg.msg_iov = iov; @@ -803,10 +865,11 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg) } return; } - rep.addrlen = msg.msg_namelen; + rep.remote_addrlen = msg.msg_namelen; sldns_buffer_skip(rep.c->buffer, rcv); sldns_buffer_flip(rep.c->buffer); rep.srctype = 0; + rep.is_proxied = 0; #ifndef S_SPLINT_S for(cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL; cmsg = CMSG_NXTHDR(&msg, cmsg)) { @@ -836,11 +899,24 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg) if(verbosity >= VERB_ALGO) p_ancil("receive_udp on interface", &rep); #endif /* S_SPLINT_S */ + + if(rep.c->pp2_enabled && !consume_pp2_header(rep.c->buffer, + &rep, 0)) { + log_err("proxy_protocol: could not consume PROXYv2 header"); + return; + } + if(!rep.is_proxied) { + rep.client_addrlen = rep.remote_addrlen; + memmove(&rep.client_addr, &rep.remote_addr, + rep.remote_addrlen); + } + fptr_ok(fptr_whitelist_comm_point(rep.c->callback)); if((*rep.c->callback)(rep.c, rep.c->cb_arg, NETEVENT_NOERROR, &rep)) { /* send back immediate reply */ (void)comm_point_send_udp_msg_if(rep.c, rep.c->buffer, - (struct sockaddr*)&rep.addr, rep.addrlen, &rep); + (struct sockaddr*)&rep.remote_addr, + rep.remote_addrlen, &rep); } if(!rep.c || rep.c->fd == -1) /* commpoint closed */ break; @@ -871,12 +947,12 @@ comm_point_udp_callback(int fd, short event, void* arg) ub_comm_base_now(rep.c->ev->base); for(i=0; ibuffer); - rep.addrlen = (socklen_t)sizeof(rep.addr); + rep.remote_addrlen = (socklen_t)sizeof(rep.remote_addr); log_assert(fd != -1); log_assert(sldns_buffer_remaining(rep.c->buffer) > 0); rcv = recvfrom(fd, (void*)sldns_buffer_begin(rep.c->buffer), sldns_buffer_remaining(rep.c->buffer), MSG_DONTWAIT, - (struct sockaddr*)&rep.addr, &rep.addrlen); + (struct sockaddr*)&rep.remote_addr, &rep.remote_addrlen); if(rcv == -1) { #ifndef USE_WINSOCK if(errno != EAGAIN && errno != EINTR @@ -896,6 +972,19 @@ comm_point_udp_callback(int fd, short event, void* arg) sldns_buffer_skip(rep.c->buffer, rcv); sldns_buffer_flip(rep.c->buffer); rep.srctype = 0; + rep.is_proxied = 0; + + if(rep.c->pp2_enabled && !consume_pp2_header(rep.c->buffer, + &rep, 0)) { + log_err("proxy_protocol: could not consume PROXYv2 header"); + return; + } + if(!rep.is_proxied) { + rep.client_addrlen = rep.remote_addrlen; + memmove(&rep.client_addr, &rep.remote_addr, + rep.remote_addrlen); + } + fptr_ok(fptr_whitelist_comm_point(rep.c->callback)); if((*rep.c->callback)(rep.c, rep.c->cb_arg, NETEVENT_NOERROR, &rep)) { /* send back immediate reply */ @@ -905,7 +994,8 @@ comm_point_udp_callback(int fd, short event, void* arg) buffer = rep.c->buffer; #endif (void)comm_point_send_udp_msg(rep.c, buffer, - (struct sockaddr*)&rep.addr, rep.addrlen, 0); + (struct sockaddr*)&rep.remote_addr, + rep.remote_addrlen, 0); } if(!rep.c || rep.c->fd != fd) /* commpoint closed to -1 or reused for another UDP port. Note rep.c cannot be reused with TCP fd. */ @@ -1221,10 +1311,16 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg) } log_assert(fd != -1); (void)fd; - new_fd = comm_point_perform_accept(c, &c_hdl->repinfo.addr, - &c_hdl->repinfo.addrlen); + new_fd = comm_point_perform_accept(c, &c_hdl->repinfo.remote_addr, + &c_hdl->repinfo.remote_addrlen); if(new_fd == -1) return; + /* Copy remote_address to client_address. + * Simplest way/time for streams to do that. */ + c_hdl->repinfo.client_addrlen = c_hdl->repinfo.remote_addrlen; + memmove(&c_hdl->repinfo.client_addr, + &c_hdl->repinfo.remote_addr, + c_hdl->repinfo.remote_addrlen); if(c->ssl) { c_hdl->ssl = incoming_ssl_fd(c->ssl, new_fd); if(!c_hdl->ssl) { @@ -1276,6 +1372,7 @@ reclaim_tcp_handler(struct comm_point* c) c->tcp_more_read_again = NULL; c->tcp_more_write_again = NULL; c->tcp_byte_count = 0; + c->pp2_header_state = pp2_header_none; sldns_buffer_clear(c->buffer); } @@ -1407,8 +1504,8 @@ ssl_handshake(struct comm_point* c) return 0; /* silence reset by peer */ #endif if(!tcp_connect_errno_needs_log( - (struct sockaddr*)&c->repinfo.addr, - c->repinfo.addrlen)) + (struct sockaddr*)&c->repinfo.remote_addr, + c->repinfo.remote_addrlen)) return 0; /* silence connect failures that show up because after connect this is the first system call that accesses the socket */ @@ -1420,8 +1517,9 @@ ssl_handshake(struct comm_point* c) unsigned long err = ERR_get_error(); if(!squelch_err_ssl_handshake(err)) { log_crypto_err_code("ssl handshake failed", err); - log_addr(VERB_OPS, "ssl handshake failed", &c->repinfo.addr, - c->repinfo.addrlen); + log_addr(VERB_OPS, "ssl handshake failed", + &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); } return 0; } @@ -1438,7 +1536,8 @@ ssl_handshake(struct comm_point* c) if(!x) { log_addr(VERB_ALGO, "SSL connection failed: " "no certificate", - &c->repinfo.addr, c->repinfo.addrlen); + &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); return 0; } log_cert(VERB_ALGO, "peer certificate", x); @@ -1448,13 +1547,13 @@ ssl_handshake(struct comm_point* c) snprintf(buf, sizeof(buf), "SSL connection " "to %s authenticated", SSL_get0_peername(c->ssl)); - log_addr(VERB_ALGO, buf, &c->repinfo.addr, - c->repinfo.addrlen); + log_addr(VERB_ALGO, buf, &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); } else { #endif log_addr(VERB_ALGO, "SSL connection " - "authenticated", &c->repinfo.addr, - c->repinfo.addrlen); + "authenticated", &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); #ifdef HAVE_SSL_GET0_PEERNAME } #endif @@ -1471,14 +1570,15 @@ ssl_handshake(struct comm_point* c) } log_addr(VERB_ALGO, "SSL connection failed: " "failed to authenticate", - &c->repinfo.addr, c->repinfo.addrlen); + &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); return 0; } } else { /* unauthenticated, the verify peer flag was not set * in c->ssl when the ssl object was created from ssl_ctx */ - log_addr(VERB_ALGO, "SSL connection", &c->repinfo.addr, - c->repinfo.addrlen); + log_addr(VERB_ALGO, "SSL connection", &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); } #ifdef HAVE_SSL_GET0_ALPN_SELECTED @@ -1519,6 +1619,139 @@ ssl_handle_read(struct comm_point* c) if(c->ssl_shake_state != comm_ssl_shake_none) return 1; } + if(c->pp2_enabled && c->pp2_header_state != pp2_header_done) { + struct pp2_header* header = NULL; + size_t want_read_size = 0; + size_t current_read_size = 0; + if(c->pp2_header_state == pp2_header_none) { + want_read_size = PP2_HEADER_SIZE; + if(sldns_buffer_remaining(c->buffer)repinfo.remote_addr, + c->repinfo.remote_addrlen); + return 0; + } + verbose(VERB_ALGO, "proxy_protocol: reading fixed " + "part of PROXYv2 header (len %lu)", + want_read_size); + current_read_size = want_read_size; + if(c->tcp_byte_count < current_read_size) { + ERR_clear_error(); + if((r=SSL_read(c->ssl, (void*)sldns_buffer_at( + c->buffer, c->tcp_byte_count), + current_read_size - + c->tcp_byte_count)) <= 0) { + int want = SSL_get_error(c->ssl, r); + if(want == SSL_ERROR_ZERO_RETURN) { + if(c->tcp_req_info) + return tcp_req_info_handle_read_close(c->tcp_req_info); + return 0; /* shutdown, closed */ + } else if(want == SSL_ERROR_WANT_READ) { +#ifdef USE_WINSOCK + ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); +#endif + return 1; /* read more later */ + } else if(want == SSL_ERROR_WANT_WRITE) { + c->ssl_shake_state = comm_ssl_shake_hs_write; + comm_point_listen_for_rw(c, 0, 1); + return 1; + } else if(want == SSL_ERROR_SYSCALL) { +#ifdef ECONNRESET + if(errno == ECONNRESET && verbosity < 2) + return 0; /* silence reset by peer */ +#endif + if(errno != 0) + log_err("SSL_read syscall: %s", + strerror(errno)); + return 0; + } + log_crypto_err("could not SSL_read"); + return 0; + } + c->tcp_byte_count += r; + if(c->tcp_byte_count != current_read_size) return 1; + c->pp2_header_state = pp2_header_init; + } + } + if(c->pp2_header_state == pp2_header_init) { + header = pp2_read_header(c->buffer); + if(!header) { + log_err("proxy_protocol: could not parse " + "PROXYv2 header"); + return 0; + } + want_read_size = ntohs(header->len); + if(sldns_buffer_remaining(c->buffer) < + PP2_HEADER_SIZE + want_read_size) { + log_err_addr("proxy_protocol: not enough " + "buffer size to read PROXYv2 header", "", + &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); + return 0; + } + verbose(VERB_ALGO, "proxy_protocol: reading variable " + "part of PROXYv2 header (len %lu)", + want_read_size); + current_read_size = PP2_HEADER_SIZE + want_read_size; + if(c->tcp_byte_count < current_read_size) { + ERR_clear_error(); + if((r=SSL_read(c->ssl, (void*)sldns_buffer_at( + c->buffer, c->tcp_byte_count), + current_read_size - + c->tcp_byte_count)) <= 0) { + int want = SSL_get_error(c->ssl, r); + if(want == SSL_ERROR_ZERO_RETURN) { + if(c->tcp_req_info) + return tcp_req_info_handle_read_close(c->tcp_req_info); + return 0; /* shutdown, closed */ + } else if(want == SSL_ERROR_WANT_READ) { +#ifdef USE_WINSOCK + ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); +#endif + return 1; /* read more later */ + } else if(want == SSL_ERROR_WANT_WRITE) { + c->ssl_shake_state = comm_ssl_shake_hs_write; + comm_point_listen_for_rw(c, 0, 1); + return 1; + } else if(want == SSL_ERROR_SYSCALL) { +#ifdef ECONNRESET + if(errno == ECONNRESET && verbosity < 2) + return 0; /* silence reset by peer */ +#endif + if(errno != 0) + log_err("SSL_read syscall: %s", + strerror(errno)); + return 0; + } + log_crypto_err("could not SSL_read"); + return 0; + } + c->tcp_byte_count += r; + if(c->tcp_byte_count != current_read_size) return 1; + c->pp2_header_state = pp2_header_done; + } + } + if(c->pp2_header_state != pp2_header_done || !header) { + log_err_addr("proxy_protocol: wrong state for the " + "PROXYv2 header", "", &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); + return 0; + } + if(!consume_pp2_header(c->buffer, &c->repinfo, 1)) { + log_err_addr("proxy_protocol: could not consume " + "PROXYv2 header", "", &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); + return 0; + } + verbose(VERB_ALGO, "proxy_protocol: successful read of " + "PROXYv2 header"); + /* Clear and reset the buffer to read the following + * DNS packet(s). */ + sldns_buffer_clear(c->buffer); + c->tcp_byte_count = 0; + return 1; + } if(c->tcp_byte_count < sizeof(uint16_t)) { /* read length bytes */ ERR_clear_error(); @@ -1778,16 +2011,18 @@ ssl_handle_it(struct comm_point* c, int is_write) return ssl_handle_write(c); } -/** Handle tcp reading callback. +/** + * Handle tcp reading callback. * @param fd: file descriptor of socket. * @param c: comm point to read from into buffer. * @param short_ok: if true, very short packets are OK (for comm_local). - * @return: 0 on error + * @return: 0 on error */ static int comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) { ssize_t r; + int recv_initial = 0; log_assert(c->type == comm_tcp || c->type == comm_local); if(c->ssl) return ssl_handle_it(c, 0); @@ -1795,6 +2030,96 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) return 0; log_assert(fd != -1); + if(c->pp2_enabled && c->pp2_header_state != pp2_header_done) { + struct pp2_header* header = NULL; + size_t want_read_size = 0; + size_t current_read_size = 0; + if(c->pp2_header_state == pp2_header_none) { + want_read_size = PP2_HEADER_SIZE; + if(sldns_buffer_remaining(c->buffer)repinfo.remote_addr, + c->repinfo.remote_addrlen); + return 0; + } + verbose(VERB_ALGO, "proxy_protocol: reading fixed " + "part of PROXYv2 header (len %lu)", + want_read_size); + current_read_size = want_read_size; + if(c->tcp_byte_count < current_read_size) { + r = recv(fd, (void*)sldns_buffer_at(c->buffer, + c->tcp_byte_count), + current_read_size-c->tcp_byte_count, MSG_DONTWAIT); + if(r == 0) { + if(c->tcp_req_info) + return tcp_req_info_handle_read_close(c->tcp_req_info); + return 0; + } else if(r == -1) { + goto recv_error_initial; + } + c->tcp_byte_count += r; + if(c->tcp_byte_count != current_read_size) return 1; + c->pp2_header_state = pp2_header_init; + } + } + if(c->pp2_header_state == pp2_header_init) { + header = pp2_read_header(c->buffer); + if(!header) { + log_err("proxy_protocol: could not parse " + "PROXYv2 header"); + return 0; + } + want_read_size = ntohs(header->len); + if(sldns_buffer_remaining(c->buffer) < + PP2_HEADER_SIZE + want_read_size) { + log_err_addr("proxy_protocol: not enough " + "buffer size to read PROXYv2 header", "", + &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); + return 0; + } + verbose(VERB_ALGO, "proxy_protocol: reading variable " + "part of PROXYv2 header (len %lu)", + want_read_size); + current_read_size = PP2_HEADER_SIZE + want_read_size; + if(c->tcp_byte_count < current_read_size) { + r = recv(fd, (void*)sldns_buffer_at(c->buffer, + c->tcp_byte_count), + current_read_size-c->tcp_byte_count, MSG_DONTWAIT); + if(r == 0) { + if(c->tcp_req_info) + return tcp_req_info_handle_read_close(c->tcp_req_info); + return 0; + } else if(r == -1) { + goto recv_error; + } + c->tcp_byte_count += r; + if(c->tcp_byte_count != current_read_size) return 1; + c->pp2_header_state = pp2_header_done; + } + } + if(c->pp2_header_state != pp2_header_done || !header) { + log_err_addr("proxy_protocol: wrong state for the " + "PROXYv2 header", "", &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); + return 0; + } + if(!consume_pp2_header(c->buffer, &c->repinfo, 1)) { + log_err_addr("proxy_protocol: could not consume " + "PROXYv2 header", "", &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); + return 0; + } + verbose(VERB_ALGO, "proxy_protocol: successful read of " + "PROXYv2 header"); + /* Clear and reset the buffer to read the following + * DNS packet(s). */ + sldns_buffer_clear(c->buffer); + c->tcp_byte_count = 0; + return 1; + } + if(c->tcp_byte_count < sizeof(uint16_t)) { /* read length bytes */ r = recv(fd,(void*)sldns_buffer_at(c->buffer,c->tcp_byte_count), @@ -1804,69 +2129,9 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) return tcp_req_info_handle_read_close(c->tcp_req_info); return 0; } else if(r == -1) { -#ifndef USE_WINSOCK - if(errno == EINTR || errno == EAGAIN) - return 1; -#ifdef ECONNRESET - if(errno == ECONNRESET && verbosity < 2) - return 0; /* silence reset by peer */ -#endif -#ifdef ECONNREFUSED - if(errno == ECONNREFUSED && verbosity < 2) - return 0; /* silence reset by peer */ -#endif -#ifdef ENETUNREACH - if(errno == ENETUNREACH && verbosity < 2) - return 0; /* silence it */ -#endif -#ifdef EHOSTDOWN - if(errno == EHOSTDOWN && verbosity < 2) - return 0; /* silence it */ -#endif -#ifdef EHOSTUNREACH - if(errno == EHOSTUNREACH && verbosity < 2) - return 0; /* silence it */ -#endif -#ifdef ENETDOWN - if(errno == ENETDOWN && verbosity < 2) - return 0; /* silence it */ -#endif -#ifdef EACCES - if(errno == EACCES && verbosity < 2) - return 0; /* silence it */ -#endif -#ifdef ENOTCONN - if(errno == ENOTCONN) { - log_err_addr("read (in tcp s) failed and this could be because TCP Fast Open is enabled [--disable-tfo-client --disable-tfo-server] but does not work", sock_strerror(errno), - &c->repinfo.addr, c->repinfo.addrlen); - return 0; - } -#endif -#else /* USE_WINSOCK */ - if(WSAGetLastError() == WSAECONNREFUSED && verbosity < 2) - return 0; - if(WSAGetLastError() == WSAEHOSTDOWN && verbosity < 2) - return 0; - if(WSAGetLastError() == WSAEHOSTUNREACH && verbosity < 2) - return 0; - if(WSAGetLastError() == WSAENETDOWN && verbosity < 2) - return 0; - if(WSAGetLastError() == WSAENETUNREACH && verbosity < 2) - return 0; - if(WSAGetLastError() == WSAECONNRESET) - return 0; - if(WSAGetLastError() == WSAEINPROGRESS) - return 1; - if(WSAGetLastError() == WSAEWOULDBLOCK) { - ub_winsock_tcp_wouldblock(c->ev->ev, - UB_EV_READ); - return 1; - } -#endif - log_err_addr("read (in tcp s)", sock_strerror(errno), - &c->repinfo.addr, c->repinfo.addrlen); - return 0; - } + if(c->pp2_enabled) goto recv_error; + goto recv_error_initial; + } c->tcp_byte_count += r; if(c->tcp_byte_count != sizeof(uint16_t)) return 1; @@ -1875,19 +2140,21 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) verbose(VERB_QUERY, "tcp: dropped larger than buffer"); return 0; } - sldns_buffer_set_limit(c->buffer, + sldns_buffer_set_limit(c->buffer, sldns_buffer_read_u16_at(c->buffer, 0)); - if(!short_ok && + if(!short_ok && sldns_buffer_limit(c->buffer) < LDNS_HEADER_SIZE) { verbose(VERB_QUERY, "tcp: dropped bogus too short."); return 0; } - verbose(VERB_ALGO, "Reading tcp query of length %d", + verbose(VERB_ALGO, "Reading tcp query of length %d", (int)sldns_buffer_limit(c->buffer)); } if(sldns_buffer_remaining(c->buffer) == 0) - log_err("in comm_point_tcp_handle_read buffer_remaining is not > 0 as expected, continuing with (harmless) 0 length recv"); + log_err("in comm_point_tcp_handle_read buffer_remaining is " + "not > 0 as expected, continuing with (harmless) 0 " + "length recv"); r = recv(fd, (void*)sldns_buffer_current(c->buffer), sldns_buffer_remaining(c->buffer), MSG_DONTWAIT); if(r == 0) { @@ -1895,28 +2162,88 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) return tcp_req_info_handle_read_close(c->tcp_req_info); return 0; } else if(r == -1) { -#ifndef USE_WINSOCK - if(errno == EINTR || errno == EAGAIN) - return 1; -#else /* USE_WINSOCK */ - if(WSAGetLastError() == WSAECONNRESET) - return 0; - if(WSAGetLastError() == WSAEINPROGRESS) - return 1; - if(WSAGetLastError() == WSAEWOULDBLOCK) { - ub_winsock_tcp_wouldblock(c->ev->ev, UB_EV_READ); - return 1; - } -#endif - log_err_addr("read (in tcp r)", sock_strerror(errno), - &c->repinfo.addr, c->repinfo.addrlen); - return 0; + goto recv_error; } sldns_buffer_skip(c->buffer, r); if(sldns_buffer_remaining(c->buffer) <= 0) { tcp_callback_reader(c); } return 1; + +recv_error_initial: + recv_initial = 1; +recv_error: +#ifndef USE_WINSOCK + if(errno == EINTR || errno == EAGAIN) + return 1; + if(recv_initial) { +#ifdef ECONNRESET + if(errno == ECONNRESET && verbosity < 2) + return 0; /* silence reset by peer */ +#endif +#ifdef ECONNREFUSED + if(errno == ECONNREFUSED && verbosity < 2) + return 0; /* silence reset by peer */ +#endif +#ifdef ENETUNREACH + if(errno == ENETUNREACH && verbosity < 2) + return 0; /* silence it */ +#endif +#ifdef EHOSTDOWN + if(errno == EHOSTDOWN && verbosity < 2) + return 0; /* silence it */ +#endif +#ifdef EHOSTUNREACH + if(errno == EHOSTUNREACH && verbosity < 2) + return 0; /* silence it */ +#endif +#ifdef ENETDOWN + if(errno == ENETDOWN && verbosity < 2) + return 0; /* silence it */ +#endif +#ifdef EACCES + if(errno == EACCES && verbosity < 2) + return 0; /* silence it */ +#endif +#ifdef ENOTCONN + if(errno == ENOTCONN) { + log_err_addr("read (in tcp s) failed and this " + "could be because TCP Fast Open is " + "enabled [--disable-tfo-client " + "--disable-tfo-server] but does not " + "work", sock_strerror(errno), + &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); + return 0; + } + } +#endif +#else /* USE_WINSOCK */ + if(recv_initial) { + if(WSAGetLastError() == WSAECONNREFUSED && verbosity < 2) + return 0; + if(WSAGetLastError() == WSAEHOSTDOWN && verbosity < 2) + return 0; + if(WSAGetLastError() == WSAEHOSTUNREACH && verbosity < 2) + return 0; + if(WSAGetLastError() == WSAENETDOWN && verbosity < 2) + return 0; + if(WSAGetLastError() == WSAENETUNREACH && verbosity < 2) + return 0; + } + if(WSAGetLastError() == WSAECONNRESET) + return 0; + if(WSAGetLastError() == WSAEINPROGRESS) + return 1; + if(WSAGetLastError() == WSAEWOULDBLOCK) { + ub_winsock_tcp_wouldblock(c->ev->ev, + UB_EV_READ); + return 1; + } +#endif + log_err_addr("read (in tcp s)", sock_strerror(errno), + &c->repinfo.remote_addr, c->repinfo.remote_addrlen); + return 0; } /** @@ -1962,7 +2289,8 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) return 0; /* silence lots of chatter in the logs */ else if(error != 0) { log_err_addr("tcp connect", strerror(error), - &c->repinfo.addr, c->repinfo.addrlen); + &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); #else /* USE_WINSOCK */ /* examine error */ if(error == WSAEINPROGRESS) @@ -1974,7 +2302,8 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) return 0; else if(error != 0) { log_err_addr("tcp connect", wsa_strerror(error), - &c->repinfo.addr, c->repinfo.addrlen); + &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); #endif /* USE_WINSOCK */ return 0; } @@ -2006,8 +2335,8 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) iov[1].iov_len = sldns_buffer_limit(buffer); } log_assert(iov[0].iov_len > 0); - msg.msg_name = &c->repinfo.addr; - msg.msg_namelen = c->repinfo.addrlen; + msg.msg_name = &c->repinfo.remote_addr; + msg.msg_namelen = c->repinfo.remote_addrlen; msg.msg_iov = iov; msg.msg_iovlen = 2; r = sendmsg(fd, &msg, MSG_FASTOPEN); @@ -2033,14 +2362,16 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) if(verbosity < 2) return 0; /* silence lots of chatter in the logs */ log_err_addr("tcp sendmsg", strerror(errno), - &c->repinfo.addr, c->repinfo.addrlen); + &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); return 0; } verbose(VERB_ALGO, "tcp sendmsg for fastopen failed (with %s), try normal connect", strerror(errno)); /* fallthrough to nonFASTOPEN * (MSG_FASTOPEN on Linux 3 produces EPIPE) * we need to perform connect() */ - if(connect(fd, (struct sockaddr *)&c->repinfo.addr, c->repinfo.addrlen) == -1) { + if(connect(fd, (struct sockaddr *)&c->repinfo.remote_addr, + c->repinfo.remote_addrlen) == -1) { #ifdef EINPROGRESS if(errno == EINPROGRESS) return 1; /* wait until connect done*/ @@ -2051,9 +2382,12 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) return 1; /* wait until connect done*/ #endif if(tcp_connect_errno_needs_log( - (struct sockaddr *)&c->repinfo.addr, c->repinfo.addrlen)) { + (struct sockaddr *)&c->repinfo.remote_addr, + c->repinfo.remote_addrlen)) { log_err_addr("outgoing tcp: connect after EPIPE for fastopen", - strerror(errno), &c->repinfo.addr, c->repinfo.addrlen); + strerror(errno), + &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); } return 0; } @@ -2118,10 +2452,12 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) #endif # ifdef HAVE_WRITEV log_err_addr("tcp writev", strerror(errno), - &c->repinfo.addr, c->repinfo.addrlen); + &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); # else /* HAVE_WRITEV */ log_err_addr("tcp send s", strerror(errno), - &c->repinfo.addr, c->repinfo.addrlen); + &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); # endif /* HAVE_WRITEV */ #else if(WSAGetLastError() == WSAENOTCONN) @@ -2137,7 +2473,8 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) return 0; /* silence reset by peer */ log_err_addr("tcp send s", wsa_strerror(WSAGetLastError()), - &c->repinfo.addr, c->repinfo.addrlen); + &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); #endif return 0; } @@ -2185,7 +2522,8 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) return 0; /* silence reset by peer */ #endif log_err_addr("tcp send r", sock_strerror(errno), - &c->repinfo.addr, c->repinfo.addrlen); + &c->repinfo.remote_addr, + c->repinfo.remote_addrlen); return 0; } if(c->tcp_write_and_read) { @@ -2449,7 +2787,7 @@ http_read_more(int fd, struct comm_point* c) } #endif log_err_addr("read (in http r)", sock_strerror(errno), - &c->repinfo.addr, c->repinfo.addrlen); + &c->repinfo.remote_addr, c->repinfo.remote_addrlen); return 0; } verbose(VERB_ALGO, "http read more skip to %d + %d", @@ -2881,8 +3219,8 @@ ssize_t http2_recv_cb(nghttp2_session* ATTR_UNUSED(session), uint8_t* buf, return NGHTTP2_ERR_CALLBACK_FAILURE; #endif log_err_addr("could not http2 recv: %s", strerror(errno), - &h2_session->c->repinfo.addr, - h2_session->c->repinfo.addrlen); + &h2_session->c->repinfo.remote_addr, + h2_session->c->repinfo.remote_addrlen); #else /* USE_WINSOCK */ if(WSAGetLastError() == WSAECONNRESET) return NGHTTP2_ERR_CALLBACK_FAILURE; @@ -2895,8 +3233,8 @@ ssize_t http2_recv_cb(nghttp2_session* ATTR_UNUSED(session), uint8_t* buf, } log_err_addr("could not http2 recv: %s", wsa_strerror(WSAGetLastError()), - &h2_session->c->repinfo.addr, - h2_session->c->repinfo.addrlen); + &h2_session->c->repinfo.remote_addr, + h2_session->c->repinfo.remote_addrlen); #endif return NGHTTP2_ERR_CALLBACK_FAILURE; } @@ -2918,8 +3256,8 @@ comm_point_http2_handle_read(int ATTR_UNUSED(fd), struct comm_point* c) if(ret != NGHTTP2_ERR_EOF && ret != NGHTTP2_ERR_CALLBACK_FAILURE) { char a[256]; - addr_to_str(&c->repinfo.addr, c->repinfo.addrlen, - a, sizeof(a)); + addr_to_str(&c->repinfo.remote_addr, + c->repinfo.remote_addrlen, a, sizeof(a)); verbose(VERB_QUERY, "http2: session_recv from %s failed, " "error: %s", a, nghttp2_strerror(ret)); } @@ -3067,7 +3405,7 @@ http_check_connect(int fd, struct comm_point* c) return 0; /* silence lots of chatter in the logs */ else if(error != 0) { log_err_addr("http connect", strerror(error), - &c->repinfo.addr, c->repinfo.addrlen); + &c->repinfo.remote_addr, c->repinfo.remote_addrlen); #else /* USE_WINSOCK */ /* examine error */ if(error == WSAEINPROGRESS) @@ -3079,7 +3417,7 @@ http_check_connect(int fd, struct comm_point* c) return 0; else if(error != 0) { log_err_addr("http connect", wsa_strerror(error), - &c->repinfo.addr, c->repinfo.addrlen); + &c->repinfo.remote_addr, c->repinfo.remote_addrlen); #endif /* USE_WINSOCK */ return 0; } @@ -3149,7 +3487,7 @@ http_write_more(int fd, struct comm_point* c) } #endif log_err_addr("http send r", sock_strerror(errno), - &c->repinfo.addr, c->repinfo.addrlen); + &c->repinfo.remote_addr, c->repinfo.remote_addrlen); return 0; } sldns_buffer_skip(c->buffer, r); @@ -3213,8 +3551,8 @@ ssize_t http2_send_cb(nghttp2_session* ATTR_UNUSED(session), const uint8_t* buf, return NGHTTP2_ERR_CALLBACK_FAILURE; #endif log_err_addr("could not http2 write: %s", strerror(errno), - &h2_session->c->repinfo.addr, - h2_session->c->repinfo.addrlen); + &h2_session->c->repinfo.remote_addr, + h2_session->c->repinfo.remote_addrlen); #else /* USE_WINSOCK */ if(WSAGetLastError() == WSAENOTCONN) return NGHTTP2_ERR_WOULDBLOCK; @@ -3229,8 +3567,8 @@ ssize_t http2_send_cb(nghttp2_session* ATTR_UNUSED(session), const uint8_t* buf, return NGHTTP2_ERR_CALLBACK_FAILURE; log_err_addr("could not http2 write: %s", wsa_strerror(WSAGetLastError()), - &h2_session->c->repinfo.addr, - h2_session->c->repinfo.addrlen); + &h2_session->c->repinfo.remote_addr, + h2_session->c->repinfo.remote_addrlen); #endif return NGHTTP2_ERR_CALLBACK_FAILURE; } @@ -3410,7 +3748,8 @@ void comm_point_raw_handle_callback(int ATTR_UNUSED(fd), struct comm_point* comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer, - comm_point_callback_type* callback, void* callback_arg, struct unbound_socket* socket) + int pp2_enabled, comm_point_callback_type* callback, + void* callback_arg, struct unbound_socket* socket) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); @@ -3450,6 +3789,8 @@ comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer, c->callback = callback; c->cb_arg = callback_arg; c->socket = socket; + c->pp2_enabled = pp2_enabled; + c->pp2_header_state = pp2_header_none; evbits = UB_EV_READ | UB_EV_PERSIST; /* ub_event stuff */ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, @@ -3469,8 +3810,8 @@ comm_point_create_udp(struct comm_base *base, int fd, sldns_buffer* buffer, } struct comm_point* -comm_point_create_udp_ancil(struct comm_base *base, int fd, - sldns_buffer* buffer, +comm_point_create_udp_ancil(struct comm_base *base, int fd, + sldns_buffer* buffer, int pp2_enabled, comm_point_callback_type* callback, void* callback_arg, struct unbound_socket* socket) { struct comm_point* c = (struct comm_point*)calloc(1, @@ -3511,6 +3852,8 @@ comm_point_create_udp_ancil(struct comm_base *base, int fd, c->callback = callback; c->cb_arg = callback_arg; c->socket = socket; + c->pp2_enabled = pp2_enabled; + c->pp2_header_state = pp2_header_none; evbits = UB_EV_READ | UB_EV_PERSIST; /* ub_event stuff */ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, @@ -3590,6 +3933,8 @@ comm_point_create_tcp_handler(struct comm_base *base, c->callback = callback; c->cb_arg = callback_arg; c->socket = socket; + c->pp2_enabled = parent->pp2_enabled; + c->pp2_header_state = pp2_header_none; if(spoolbuf) { c->tcp_req_info = tcp_req_info_create(spoolbuf); if(!c->tcp_req_info) { @@ -3685,6 +4030,8 @@ comm_point_create_http_handler(struct comm_base *base, c->callback = callback; c->cb_arg = callback_arg; c->socket = socket; + c->pp2_enabled = 0; + c->pp2_header_state = pp2_header_none; c->http_min_version = http_version_2; c->http2_stream_max_qbuffer_size = bufsize; @@ -3749,7 +4096,8 @@ comm_point_create_tcp(struct comm_base *base, int fd, int num, uint32_t http_max_streams, char* http_endpoint, struct tcl_list* tcp_conn_limit, size_t bufsize, struct sldns_buffer* spoolbuf, enum listen_type port_type, - comm_point_callback_type* callback, void* callback_arg, struct unbound_socket* socket) + int pp2_enabled, comm_point_callback_type* callback, + void* callback_arg, struct unbound_socket* socket) { struct comm_point* c = (struct comm_point*)calloc(1, sizeof(struct comm_point)); @@ -3800,6 +4148,8 @@ comm_point_create_tcp(struct comm_base *base, int fd, int num, c->callback = NULL; c->cb_arg = NULL; c->socket = socket; + c->pp2_enabled = (port_type==listen_type_http?0:pp2_enabled); + c->pp2_header_state = pp2_header_none; evbits = UB_EV_READ | UB_EV_PERSIST; /* ub_event stuff */ c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, @@ -3892,6 +4242,8 @@ comm_point_create_tcp_out(struct comm_base *base, size_t bufsize, c->repinfo.c = c; c->callback = callback; c->cb_arg = callback_arg; + c->pp2_enabled = 0; + c->pp2_header_state = pp2_header_none; evbits = UB_EV_PERSIST | UB_EV_WRITE; c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, comm_point_tcp_handle_callback, c); @@ -3958,6 +4310,8 @@ comm_point_create_http_out(struct comm_base *base, size_t bufsize, c->repinfo.c = c; c->callback = callback; c->cb_arg = callback_arg; + c->pp2_enabled = 0; + c->pp2_header_state = pp2_header_none; evbits = UB_EV_PERSIST | UB_EV_WRITE; c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, comm_point_http_handle_callback, c); @@ -4021,6 +4375,8 @@ comm_point_create_local(struct comm_base *base, int fd, size_t bufsize, #endif c->callback = callback; c->cb_arg = callback_arg; + c->pp2_enabled = 0; + c->pp2_header_state = pp2_header_none; /* ub_event stuff */ evbits = UB_EV_PERSIST | UB_EV_READ; c->ev->ev = ub_event_new(base->eb->base, c->fd, evbits, @@ -4082,6 +4438,8 @@ comm_point_create_raw(struct comm_base* base, int fd, int writing, #endif c->callback = callback; c->cb_arg = callback_arg; + c->pp2_enabled = 0; + c->pp2_header_state = pp2_header_none; /* ub_event stuff */ if(writing) evbits = UB_EV_PERSIST | UB_EV_WRITE; @@ -4197,20 +4555,21 @@ comm_point_send_reply(struct comm_reply *repinfo) #endif if(repinfo->c->type == comm_udp) { if(repinfo->srctype) - comm_point_send_udp_msg_if(repinfo->c, - buffer, (struct sockaddr*)&repinfo->addr, - repinfo->addrlen, repinfo); + comm_point_send_udp_msg_if(repinfo->c, buffer, + (struct sockaddr*)&repinfo->remote_addr, + repinfo->remote_addrlen, repinfo); else comm_point_send_udp_msg(repinfo->c, buffer, - (struct sockaddr*)&repinfo->addr, repinfo->addrlen, 0); + (struct sockaddr*)&repinfo->remote_addr, + repinfo->remote_addrlen, 0); #ifdef USE_DNSTAP /* * sending src (client)/dst (local service) addresses over DNSTAP from udp callback */ if(repinfo->c->dtenv != NULL && repinfo->c->dtenv->log_client_response_messages) { log_addr(VERB_ALGO, "from local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen); - log_addr(VERB_ALGO, "response to client", &repinfo->addr, repinfo->addrlen); - dt_msg_send_client_response(repinfo->c->dtenv, &repinfo->addr, (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->type, repinfo->c->buffer); + log_addr(VERB_ALGO, "response to client", &repinfo->client_addr, repinfo->client_addrlen); + dt_msg_send_client_response(repinfo->c->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->type, repinfo->c->buffer); } #endif } else { @@ -4220,8 +4579,8 @@ comm_point_send_reply(struct comm_reply *repinfo) */ if(repinfo->c->tcp_parent->dtenv != NULL && repinfo->c->tcp_parent->dtenv->log_client_response_messages) { log_addr(VERB_ALGO, "from local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen); - log_addr(VERB_ALGO, "response to client", &repinfo->addr, repinfo->addrlen); - dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, &repinfo->addr, (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->type, + log_addr(VERB_ALGO, "response to client", &repinfo->client_addr, repinfo->client_addrlen); + dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->type, ( repinfo->c->tcp_req_info? repinfo->c->tcp_req_info->spool_buffer: repinfo->c->buffer )); } #endif diff --git a/util/netevent.h b/util/netevent.h index 4e82703e0..3e7849c13 100644 --- a/util/netevent.h +++ b/util/netevent.h @@ -128,10 +128,11 @@ struct comm_reply { /** the comm_point with fd to send reply on to. */ struct comm_point* c; /** the address (for UDP based communication) */ - struct sockaddr_storage addr; + struct sockaddr_storage remote_addr; /** length of address */ - socklen_t addrlen; - /** return type 0 (none), 4(IP4), 6(IP6) */ + socklen_t remote_addrlen; + /** return type 0 (none), 4(IP4), 6(IP6) + * used only with listen_type_udp_ancil* */ int srctype; /* DnsCrypt context */ #ifdef USE_DNSCRYPT @@ -155,6 +156,13 @@ struct comm_reply { pktinfo; /** max udp size for udp packets */ size_t max_udp_size; + /* if set, the request came through a proxy */ + int is_proxied; + /** the client address + * the same as remote_addr if not proxied */ + struct sockaddr_storage client_addr; + /** the original address length */ + socklen_t client_addrlen; }; /** @@ -278,6 +286,19 @@ struct comm_point { /** variable with type of socket, UDP,TCP-accept,TCP,pipe */ type; + /* -------- PROXYv2 ------- */ + /** if set, PROXYv2 is expected on this connection */ + int pp2_enabled; + /** header state for the PROXYv2 header (for TCP) */ + enum { + /** no header encounter yet */ + pp2_header_none = 0, + /** read the static part of the header */ + pp2_header_init, + /** read the full header */ + pp2_header_done + } pp2_header_state; + /* ---------- Behaviour ----------- */ /** if set the connection is NOT closed on delete. */ int do_not_close; @@ -496,8 +517,9 @@ struct ub_event_base* comm_base_internal(struct comm_base* b); * Create an UDP comm point. Calls malloc. * setups the structure with the parameters you provide. * @param base: in which base to alloc the commpoint. - * @param fd : file descriptor of open UDP socket. + * @param fd: file descriptor of open UDP socket. * @param buffer: shared buffer by UDP sockets from this thread. + * @param pp2_enabled: if the comm point will support PROXYv2. * @param callback: callback function pointer. * @param callback_arg: will be passed to your callback function. * @param socket: and opened socket properties will be passed to your callback function. @@ -505,7 +527,7 @@ struct ub_event_base* comm_base_internal(struct comm_base* b); * Sets timeout to NULL. Turns off TCP options. */ struct comm_point* comm_point_create_udp(struct comm_base* base, - int fd, struct sldns_buffer* buffer, + int fd, struct sldns_buffer* buffer, int pp2_enabled, comm_point_callback_type* callback, void* callback_arg, struct unbound_socket* socket); /** @@ -513,8 +535,9 @@ struct comm_point* comm_point_create_udp(struct comm_base* base, * Uses recvmsg instead of recv to get udp message. * setups the structure with the parameters you provide. * @param base: in which base to alloc the commpoint. - * @param fd : file descriptor of open UDP socket. + * @param fd: file descriptor of open UDP socket. * @param buffer: shared buffer by UDP sockets from this thread. + * @param pp2_enabled: if the comm point will support PROXYv2. * @param callback: callback function pointer. * @param callback_arg: will be passed to your callback function. * @param socket: and opened socket properties will be passed to your callback function. @@ -522,7 +545,7 @@ struct comm_point* comm_point_create_udp(struct comm_base* base, * Sets timeout to NULL. Turns off TCP options. */ struct comm_point* comm_point_create_udp_ancil(struct comm_base* base, - int fd, struct sldns_buffer* buffer, + int fd, struct sldns_buffer* buffer, int pp2_enabled, comm_point_callback_type* callback, void* callback_arg, struct unbound_socket* socket); /** @@ -544,6 +567,7 @@ struct comm_point* comm_point_create_udp_ancil(struct comm_base* base, * or NULL to not create those structures in the tcp handlers. * @param port_type: the type of port we are creating a TCP listener for. Used * to select handler type to use. + * @param pp2_enabled: if the comm point will support PROXYv2. * @param callback: callback function pointer for TCP handlers. * @param callback_arg: will be passed to your callback function. * @param socket: and opened socket properties will be passed to your callback function. @@ -557,7 +581,7 @@ struct comm_point* comm_point_create_tcp(struct comm_base* base, uint32_t http_max_streams, char* http_endpoint, struct tcl_list* tcp_conn_limit, size_t bufsize, struct sldns_buffer* spoolbuf, - enum listen_type port_type, + enum listen_type port_type, int pp2_enabled, comm_point_callback_type* callback, void* callback_arg, struct unbound_socket* socket); /** diff --git a/util/proxy_protocol.c b/util/proxy_protocol.c new file mode 100644 index 000000000..757c5141d --- /dev/null +++ b/util/proxy_protocol.c @@ -0,0 +1,139 @@ +/* + * util/proxy_protocol.c - event notification + * + * Copyright (c) 2022, NLnet Labs. All rights reserved. + * + * This software is open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NLNET LABS nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * \file + * + * This file contains PROXY protocol functions. + */ +#include "config.h" +#include "util/log.h" +#include "util/proxy_protocol.h" + +int +pp2_write_to_buf(struct sldns_buffer* buf, struct sockaddr_storage* src, + int stream) +{ + int af; + if(!src) return 0; + af = (int)((struct sockaddr_in*)src)->sin_family; + if(sldns_buffer_remaining(buf) < + PP2_HEADER_SIZE + (af==AF_INET?12:36)) { + return 0; + } + /* sig */ + sldns_buffer_write(buf, PP2_SIG, PP2_SIG_LEN); + /* version and command */ + sldns_buffer_write_u8(buf, (PP2_VERSION << 4) | PP2_CMD_PROXY); + if(af==AF_INET) { + /* family and protocol */ + sldns_buffer_write_u8(buf, + (PP2_AF_INET<<4) | + (stream?PP2_PROT_STREAM:PP2_PROT_DGRAM)); + /* length */ + sldns_buffer_write_u16(buf, 12); + /* src addr */ + sldns_buffer_write(buf, + &((struct sockaddr_in*)src)->sin_addr.s_addr, 4); + /* dst addr */ + sldns_buffer_write_u32(buf, 0); + /* src port */ + sldns_buffer_write(buf, + &((struct sockaddr_in*)src)->sin_port, 2); + /* dst port */ + sldns_buffer_write_u16(buf, 0); + } else { + /* family and protocol */ + sldns_buffer_write_u8(buf, + (PP2_AF_INET6<<4) | + (stream?PP2_PROT_STREAM:PP2_PROT_DGRAM)); + /* length */ + sldns_buffer_write_u16(buf, 36); + /* src addr */ + sldns_buffer_write(buf, + &((struct sockaddr_in6*)src)->sin6_addr, 16); + /* dst addr */ + sldns_buffer_set_at(buf, + sldns_buffer_position(buf), 0, 16); + sldns_buffer_skip(buf, 16); + /* src port */ + sldns_buffer_write(buf, + &((struct sockaddr_in6*)src)->sin6_port, 2); + /* dst port */ + sldns_buffer_write_u16(buf, 0); + } + return 1; +} + +struct pp2_header* +pp2_read_header(struct sldns_buffer* buf) +{ + size_t size; + struct pp2_header* header = (struct pp2_header*)sldns_buffer_begin(buf); + /* Try to fail all the unsupported cases first. */ + if(sldns_buffer_remaining(buf) < PP2_HEADER_SIZE) { + log_err("proxy_protocol: not enough space for header"); + return NULL; + } + /* Check for PROXYv2 header */ + if(memcmp(header, PP2_SIG, PP2_SIG_LEN) != 0 || + ((header->ver_cmd & 0xF0)>>4) != PP2_VERSION) { + log_err("proxy_protocol: could not match PROXYv2 header"); + return NULL; + } + /* Check the length */ + size = PP2_HEADER_SIZE + ntohs(header->len); + if(sldns_buffer_remaining(buf) < size) { + log_err("proxy_protocol: not enough space for header"); + return NULL; + } + /* Check for supported commands */ + if((header->ver_cmd & 0xF) != PP2_CMD_LOCAL && + (header->ver_cmd & 0xF) != PP2_CMD_PROXY) { + log_err("proxy_protocol: unsupported command"); + return NULL; + } + /* Check for supported family and protocol */ + if(header->fam_prot != 0x00 /* AF_UNSPEC|UNSPEC */ && + header->fam_prot != 0x11 /* AF_INET|STREAM */ && + header->fam_prot != 0x12 /* AF_INET|DGRAM */ && + header->fam_prot != 0x21 /* AF_INET6|STREAM */ && + header->fam_prot != 0x22 /* AF_INET6|DGRAM */) { + log_err("proxy_protocol: unsupported family and protocol"); + return NULL; + } + /* We have a correct header */ + return header; +} diff --git a/util/proxy_protocol.h b/util/proxy_protocol.h new file mode 100644 index 000000000..13cab9d74 --- /dev/null +++ b/util/proxy_protocol.h @@ -0,0 +1,131 @@ +/* + * util/proxy_protocol.h - PROXY protocol + * + * Copyright (c) 2022, NLnet Labs. All rights reserved. + * + * This software is open source. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NLNET LABS nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * \file + * + * This file contains PROXY protocol structs and functions. + * Only v2 is supported. TLVs are not currently supported. + */ +#ifndef PROXY_PROTOCOL_H +#define PROXY_PROTOCOL_H + +#include "sldns/sbuffer.h" + +/** PROXYv2 minimum header size */ +#define PP2_HEADER_SIZE 16 + +/** PROXYv2 header signature */ +#define PP2_SIG "\x0D\x0A\x0D\x0A\x00\x0D\x0A\x51\x55\x49\x54\x0A" +#define PP2_SIG_LEN 12 + +/** PROXYv2 version */ +#define PP2_VERSION 0x2 + +/** + * PROXYv2 command. + */ +enum pp2_command { + PP2_CMD_LOCAL = 0x0, + PP2_CMD_PROXY = 0x1 +}; + +/** + * PROXYv2 address family. + */ +enum pp2_af { + PP2_AF_UNSPEC = 0x0, + PP2_AF_INET = 0x1, + PP2_AF_INET6 = 0x2, + PP2_AF_UNIX = 0x3 +}; + +/** + * PROXYv2 protocol. + */ +enum pp2_protocol { + PP2_PROT_UNSPEC = 0x0, + PP2_PROT_STREAM = 0x1, + PP2_PROT_DGRAM = 0x2 +}; + +/** + * PROXYv2 header. + */ +struct pp2_header { + uint8_t sig[PP2_SIG_LEN]; + uint8_t ver_cmd; + uint8_t fam_prot; + uint16_t len; + union { + struct { /* for TCP/UDP over IPv4, len = 12 */ + uint32_t src_addr; + uint32_t dst_addr; + uint16_t src_port; + uint16_t dst_port; + } addr4; + struct { /* for TCP/UDP over IPv6, len = 36 */ + uint8_t src_addr[16]; + uint8_t dst_addr[16]; + uint16_t src_port; + uint16_t dst_port; + } addr6; + struct { /* for AF_UNIX sockets, len = 216 */ + uint8_t src_addr[108]; + uint8_t dst_addr[108]; + } addru; + } addr; +}; + +/** + * Write a PROXYv2 header at the current position of the buffer. + * @param buf: the buffer to write to. + * @param src: the source address. + * @param stream: if the protocol is stream or datagram. + * @return 1 on success, 0 on failure. + */ +int pp2_write_to_buf(struct sldns_buffer* buf, struct sockaddr_storage* src, + int stream); + +/** + * Read a PROXYv2 header from the current position of the buffer. + * It does initial validation and returns a pointer to the buffer position on + * success. + * @param buf: the buffer to read from. + * @return the pointer to the buffer position on success, NULL on error. + */ +struct pp2_header* pp2_read_header(struct sldns_buffer* buf); + +#endif /* PROXY_PROTOCOL_H */ From 22e43aa6319401188ba8ba702b0b4738d22e2c21 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Mon, 3 Oct 2022 15:34:22 +0200 Subject: [PATCH 36/60] Changelog entry for #760 - Merge #760: PROXYv2 downstream support. (New proxy-protocol-port configuration option). --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 5ddf73183..b7d171d14 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +3 October 2022: George + - Merge #760: PROXYv2 downstream support. (New proxy-protocol-port + configuration option). + 3 October 2022: Wouter - Fix to remove erroneous TC flag from TCP upstream. - Fix test tdir skip report printout. From c0eaadfc42d5f19cf81f996be67d429c003c5878 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 3 Oct 2022 16:21:39 +0200 Subject: [PATCH 37/60] - Fix to close errno block in comm_point_tcp_handle_read outside of ifdef. --- doc/Changelog | 2 ++ util/netevent.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index b7d171d14..25357d1a6 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -6,6 +6,8 @@ - Fix to remove erroneous TC flag from TCP upstream. - Fix test tdir skip report printout. - Fix windows compile, the identifier interface is defined in headers. + - Fix to close errno block in comm_point_tcp_handle_read outside of + ifdef. 26 September 2022: George - Better output for skipped tdir tests. diff --git a/util/netevent.c b/util/netevent.c index 740f7c7e1..55c9a041f 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -2216,8 +2216,8 @@ recv_error: c->repinfo.remote_addrlen); return 0; } - } #endif + } #else /* USE_WINSOCK */ if(recv_initial) { if(WSAGetLastError() == WSAECONNREFUSED && verbosity < 2) From bf7a2884fb8e0a020244be99eeda754a6fc5ee26 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 4 Oct 2022 09:08:11 +0200 Subject: [PATCH 38/60] - Fix static analysis report to remove dead code from the rpz_callback_from_iterator_module function. --- doc/Changelog | 4 ++++ services/rpz.c | 14 ++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 25357d1a6..b007a168e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +4 October 2022: Wouter + - Fix static analysis report to remove dead code from the + rpz_callback_from_iterator_module function. + 3 October 2022: George - Merge #760: PROXYv2 downstream support. (New proxy-protocol-port configuration option). diff --git a/services/rpz.c b/services/rpz.c index e8b734a89..e876f3f94 100644 --- a/services/rpz.c +++ b/services/rpz.c @@ -2168,18 +2168,16 @@ rpz_callback_from_iterator_module(struct module_qstate* ms, struct iter_qstate* lock_rw_unlock(&az->rpz_lock); - if(raddr == NULL && z == NULL) { return NULL; } - else if(raddr != NULL) { + if(raddr == NULL && z == NULL) + return NULL; + + if(raddr != NULL) { if(z) { lock_rw_unlock(&z->lock); } return rpz_apply_nsip_trigger(ms, r, raddr, a); - } else if(z != NULL) { - if(raddr) { - lock_rw_unlock(&raddr->lock); - } - return rpz_apply_nsdname_trigger(ms, r, z, &match, a); - } else { return NULL; } + } + return rpz_apply_nsdname_trigger(ms, r, z, &match, a); } struct dns_msg* rpz_callback_from_iterator_cname(struct module_qstate* ms, From f0614a57f86c1d7dadc078e0f2ec199d719da5dd Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 4 Oct 2022 16:59:10 +0200 Subject: [PATCH 39/60] - Fix to clean up after the acl_interface unit test. --- doc/Changelog | 1 + testdata/acl_interface.tdir/acl_interface.dsc | 2 +- testdata/acl_interface.tdir/acl_interface.post | 11 +++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 testdata/acl_interface.tdir/acl_interface.post diff --git a/doc/Changelog b/doc/Changelog index b007a168e..24b17b506 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 4 October 2022: Wouter - Fix static analysis report to remove dead code from the rpz_callback_from_iterator_module function. + - Fix to clean up after the acl_interface unit test. 3 October 2022: George - Merge #760: PROXYv2 downstream support. (New proxy-protocol-port diff --git a/testdata/acl_interface.tdir/acl_interface.dsc b/testdata/acl_interface.tdir/acl_interface.dsc index 3e5e94de8..cfe5c3cf5 100644 --- a/testdata/acl_interface.tdir/acl_interface.dsc +++ b/testdata/acl_interface.tdir/acl_interface.dsc @@ -9,7 +9,7 @@ CmdDepends: Depends: Help: Pre: acl_interface.pre -Post: +Post: acl_interface.post Test: acl_interface.test AuxFiles: Passed: diff --git a/testdata/acl_interface.tdir/acl_interface.post b/testdata/acl_interface.tdir/acl_interface.post new file mode 100644 index 000000000..982e2b895 --- /dev/null +++ b/testdata/acl_interface.tdir/acl_interface.post @@ -0,0 +1,11 @@ +# #-- acl_interface.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $UNBOUND_PID +kill_pid $FWD_PID +kill_pid $STUB_PID From f1d263a318af5c81afd62261b5ee0df560bb1b8d Mon Sep 17 00:00:00 2001 From: Yorgos Thessalonikefs Date: Tue, 4 Oct 2022 22:21:08 +0200 Subject: [PATCH 40/60] Leniency for target discovery when under load (for NRDelegation changes) (#764) * - Introduce leniency for target discovery when under load. * - Allow for easier testing (to be reverted). * - Happy compiler. * - Precheck access to target_fetch_policy. * - Do not mark a nameserver as resolved when one of A/AAAA is negative. * - Update fetch_glue.rpl test for (possible) outstanding queries. * - Update fetch_glue_cname.rpl test for possible outstanding queries. * - Better fix for fetch_glue_cname.rpl. * - Fix iter_emptydp_for_glue.rpl to match the referral. * - Disabled the nxns tests for now (to be reverted). * - Update iter_recurse.rpl for possible outstanding queries. * Revert "- Disabled the nxns tests for now (to be reverted)." This reverts commit 34a9c13a90015fba5f8a8a1c516c00d4bf5003f8. * Revert "- Allow for easier testing (to be reverted)." This reverts commit b6dfe35e1d02c89ada5b656fdf8956304bb73be8. --- iterator/iterator.c | 55 ++++++++++++++++++++++++------ iterator/iterator.h | 2 +- testdata/fetch_glue.rpl | 33 ++---------------- testdata/fetch_glue_cname.rpl | 35 ++----------------- testdata/iter_emptydp_for_glue.rpl | 4 +-- testdata/iter_recurse.rpl | 11 ++---- 6 files changed, 54 insertions(+), 86 deletions(-) diff --git a/iterator/iterator.c b/iterator/iterator.c index e1c556b39..2d676b1df 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -255,9 +255,9 @@ error_supers(struct module_qstate* qstate, int id, struct module_qstate* super) log_err("out of memory adding missing"); } delegpt_mark_neg(dpns, qstate->qinfo.qtype); - dpns->resolved = 1; /* mark as failed */ if((dpns->got4 == 2 || !ie->supports_ipv4) && (dpns->got6 == 2 || !ie->supports_ipv6)) { + dpns->resolved = 1; /* mark as failed */ target_count_increase_nx(super_iq, 1); } } @@ -2264,6 +2264,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, size_t qout_orig_len = 0; int sq_check_ratelimit = 1; int sq_was_ratelimited = 0; + int can_do_promisc = 0; /* NOTE: a request will encounter this state for each target it * needs to send a query to. That is, at least one per referral, @@ -2591,12 +2592,12 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, if(iq->depth < ie->max_dependency_depth && iq->num_target_queries == 0 && (!iq->target_count || iq->target_count[TARGET_COUNT_NX]==0) - && iq->sent_count < TARGET_FETCH_STOP - /* if the mesh query list is full, then do not waste cpu - * and sockets to fetch promiscuous targets. They can be - * looked up when needed. */ - && !mesh_jostle_exceeded(qstate->env->mesh) - ) { + && iq->sent_count < TARGET_FETCH_STOP) { + can_do_promisc = 1; + } + /* if the mesh query list is full, then do not waste cpu and sockets to + * fetch promiscuous targets. They can be looked up when needed. */ + if(can_do_promisc && !mesh_jostle_exceeded(qstate->env->mesh)) { tf_policy = ie->target_fetch_policy[iq->depth]; } @@ -2768,6 +2769,37 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, return 0; } + /* We have a target. We could have created promiscuous target + * queries but we are currently under pressure (mesh_jostle_exceeded). + * If we are configured to allow promiscuous target queries and haven't + * gone out to the network for a target query for this delegation, then + * it is possible to slip in a promiscuous one with a 1/10 chance. */ + if(can_do_promisc && tf_policy == 0 && iq->depth == 0 + && iq->depth < ie->max_dependency_depth + && ie->target_fetch_policy[iq->depth] != 0 + && iq->dp_target_count == 0 + && !ub_random_max(qstate->env->rnd, 10)) { + int extra = 0; + verbose(VERB_ALGO, "available target exists in cache but " + "attempt to get extra 1 target"); + (void)query_for_targets(qstate, iq, ie, id, 1, &extra); + /* errors ignored, these targets are not strictly necessary for + * this result, we do not have to reply with SERVFAIL */ + if(extra > 0) { + iq->num_target_queries += extra; + target_count_increase(iq, extra); + check_waiting_queries(iq, qstate, id); + /* undo qname minimise step because we'll get back here + * to do it again */ + if(qout_orig && iq->minimise_count > 0) { + iq->minimise_count--; + iq->qinfo_out.qname = qout_orig; + iq->qinfo_out.qname_len = qout_orig_len; + } + return 0; + } + } + /* Do not check ratelimit for forwarding queries or if we already got a * pass. */ sq_check_ratelimit = (!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok); @@ -3531,12 +3563,13 @@ processTargetResponse(struct module_qstate* qstate, int id, } else { verbose(VERB_ALGO, "iterator TargetResponse failed"); delegpt_mark_neg(dpns, qstate->qinfo.qtype); - dpns->resolved = 1; /* fail the target */ if((dpns->got4 == 2 || !ie->supports_ipv4) && - (dpns->got6 == 2 || !ie->supports_ipv6) && + (dpns->got6 == 2 || !ie->supports_ipv6)) { + dpns->resolved = 1; /* fail the target */ /* do not count cached answers */ - (qstate->reply_origin && qstate->reply_origin->len != 0)) { - target_count_increase_nx(foriq, 1); + if(qstate->reply_origin && qstate->reply_origin->len != 0) { + target_count_increase_nx(foriq, 1); + } } } } diff --git a/iterator/iterator.h b/iterator/iterator.h index b71b7fe99..e35718cf3 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h @@ -324,7 +324,7 @@ struct iter_qstate { /** the number of times this query has been restarted. */ int query_restart_count; - /** the number of times this query as followed a referral. */ + /** the number of times this query has followed a referral. */ int referral_count; /** number of queries fired off */ diff --git a/testdata/fetch_glue.rpl b/testdata/fetch_glue.rpl index 3e9f64f8d..8860d85b0 100644 --- a/testdata/fetch_glue.rpl +++ b/testdata/fetch_glue.rpl @@ -176,36 +176,7 @@ SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END -; due to ordering of answer packets, this is still outstanding, remove it -STEP 21 CHECK_OUT_QUERY -ENTRY_BEGIN -ADJUST copy_id -MATCH qname qtype -REPLY QR -SECTION QUESTION -ns.example.com IN AAAA -ENTRY_END - -; some more recursion needed. -; to finish the NS query -STEP 40 QUERY -ENTRY_BEGIN -REPLY RD -SECTION QUESTION -. IN NS -ENTRY_END - -STEP 41 CHECK_ANSWER -ENTRY_BEGIN -MATCH all -REPLY QR RD RA NOERROR -SECTION QUESTION -. IN NS -SECTION ANSWER -. IN NS K.ROOT-SERVERS.NET. -SECTION AUTHORITY -SECTION ADDITIONAL -K.ROOT-SERVERS.NET. IN A 193.0.14.129 -ENTRY_END +; let (possible) outstanding queries finish resolving +STEP 21 TRAFFIC SCENARIO_END diff --git a/testdata/fetch_glue_cname.rpl b/testdata/fetch_glue_cname.rpl index 4a86afa50..64f00fb20 100644 --- a/testdata/fetch_glue_cname.rpl +++ b/testdata/fetch_glue_cname.rpl @@ -155,7 +155,7 @@ ENTRY_END ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id -REPLY QR NOERROR +REPLY QR AA NOERROR SECTION QUESTION ns.example.com. IN AAAA SECTION AUTHORITY @@ -188,36 +188,7 @@ SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END -; due to ordering of answer packets, this is still outstanding, remove it -STEP 21 CHECK_OUT_QUERY -ENTRY_BEGIN -ADJUST copy_id -MATCH qname qtype -REPLY QR -SECTION QUESTION -ns.example.com IN AAAA -ENTRY_END - -; some more recursion needed. -; to finish the NS query -STEP 40 QUERY -ENTRY_BEGIN -REPLY RD -SECTION QUESTION -. IN NS -ENTRY_END - -STEP 41 CHECK_ANSWER -ENTRY_BEGIN -MATCH all -REPLY QR RD RA NOERROR -SECTION QUESTION -. IN NS -SECTION ANSWER -. IN NS K.ROOT-SERVERS.NET. -SECTION AUTHORITY -SECTION ADDITIONAL -K.ROOT-SERVERS.NET. IN A 193.0.14.129 -ENTRY_END +; let (possible) outstanding queries finish resolving +STEP 21 TRAFFIC SCENARIO_END diff --git a/testdata/iter_emptydp_for_glue.rpl b/testdata/iter_emptydp_for_glue.rpl index 2e7db65e1..68fad6f15 100644 --- a/testdata/iter_emptydp_for_glue.rpl +++ b/testdata/iter_emptydp_for_glue.rpl @@ -164,11 +164,11 @@ a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN -MATCH opcode qname +MATCH opcode subdomain ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION -ns.example.org. IN A +example.org. IN A SECTION AUTHORITY example.org. NS ns.example.net. example.org. NS ns.example.org. diff --git a/testdata/iter_recurse.rpl b/testdata/iter_recurse.rpl index 181af1107..be50b4af8 100644 --- a/testdata/iter_recurse.rpl +++ b/testdata/iter_recurse.rpl @@ -216,14 +216,7 @@ example.com. IN NS ns.example.net. ;ns.example.net IN A 1.2.3.44 ENTRY_END -; due to ordering of answer packets, this is still outstanding, remove it -STEP 21 CHECK_OUT_QUERY -ENTRY_BEGIN -ADJUST copy_id -MATCH qname qtype -REPLY QR -SECTION QUESTION -ns.example.net IN AAAA -ENTRY_END +; let (possible) outstanding queries finish resolving +STEP 21 TRAFFIC SCENARIO_END From 40b2b3a6f39941c75b87b5b5b2f4e6bdd03fa9da Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Tue, 4 Oct 2022 22:24:18 +0200 Subject: [PATCH 41/60] Changelog entry for #764 - Merge #764: Leniency for target discovery when under load (for NRDelegation changes). --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 24b17b506..8c7483f88 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +4 October 2022: George + - Merge #764: Leniency for target discovery when under load (for + NRDelegation changes). + 4 October 2022: Wouter - Fix static analysis report to remove dead code from the rpz_callback_from_iterator_module function. From 60db1111c02354a54f7f5673b174d110ba336962 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Wed, 5 Oct 2022 00:48:20 +0200 Subject: [PATCH 42/60] - Use DEBUG_TDIR from environment in mini_tdir.sh for debugging. - Fix string comparison in mini_tdir.sh. --- doc/Changelog | 4 ++++ testcode/mini_tdir.sh | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 8c7483f88..6823a60ba 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +5 October 2022: George + - Use DEBUG_TDIR from environment in mini_tdir.sh for debugging. + - Fix string comparison in mini_tdir.sh. + 4 October 2022: George - Merge #764: Leniency for target discovery when under load (for NRDelegation changes). diff --git a/testcode/mini_tdir.sh b/testcode/mini_tdir.sh index 3b0719369..624ecdf7f 100755 --- a/testcode/mini_tdir.sh +++ b/testcode/mini_tdir.sh @@ -8,6 +8,7 @@ fi # This will keep the temporary directory around and return 1 when the test failed. DEBUG=0 +test -n "$DEBUG_TDIR" && DEBUG=1 quiet=0 if test "$1" = "-q"; then @@ -213,7 +214,7 @@ if test $DEBUG -eq 0; then rm -rf $dir fi else - if test $success == "no"; then + if test $success = "no"; then exit 1 fi exit 0 From f609a45354cd3e8aa2a6a12190aed043a0fbbd05 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Wed, 5 Oct 2022 02:44:50 +0200 Subject: [PATCH 43/60] - Make ede.tdir test more predictable by using static data. --- doc/Changelog | 1 + testdata/ede.tdir/bogus/clean.sh | 1 - .../bogus/dnskey-failures.test.signed | 7 ++++ .../bogus/dnssec-failures.test.signed | 25 ++++++++++++ testdata/ede.tdir/bogus/make-broken-zone.sh | 38 +++++++++++-------- .../ede.tdir/bogus/nsec-failures.test.signed | 7 ++++ .../ede.tdir/bogus/rrsig-failures.test.signed | 4 ++ testdata/ede.tdir/bogus/trust-anchors | 5 +++ testdata/ede.tdir/ede.conf | 1 + testdata/ede.tdir/ede.pre | 8 +--- 10 files changed, 75 insertions(+), 22 deletions(-) delete mode 100755 testdata/ede.tdir/bogus/clean.sh create mode 100644 testdata/ede.tdir/bogus/dnskey-failures.test.signed create mode 100644 testdata/ede.tdir/bogus/dnssec-failures.test.signed create mode 100644 testdata/ede.tdir/bogus/nsec-failures.test.signed create mode 100644 testdata/ede.tdir/bogus/rrsig-failures.test.signed create mode 100644 testdata/ede.tdir/bogus/trust-anchors diff --git a/doc/Changelog b/doc/Changelog index 6823a60ba..bd2b33ff2 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 5 October 2022: George - Use DEBUG_TDIR from environment in mini_tdir.sh for debugging. - Fix string comparison in mini_tdir.sh. + - Make ede.tdir test more predictable by using static data. 4 October 2022: George - Merge #764: Leniency for target discovery when under load (for diff --git a/testdata/ede.tdir/bogus/clean.sh b/testdata/ede.tdir/bogus/clean.sh deleted file mode 100755 index 54128f807..000000000 --- a/testdata/ede.tdir/bogus/clean.sh +++ /dev/null @@ -1 +0,0 @@ -rm -f K* piece1 base expired notyetincepted trust-anchors dnssec-failures.test.signed dnskey-failures.test.signed nsec-failures.test.signed rrsig-failures.test.signed diff --git a/testdata/ede.tdir/bogus/dnskey-failures.test.signed b/testdata/ede.tdir/bogus/dnskey-failures.test.signed new file mode 100644 index 000000000..69bfde48b --- /dev/null +++ b/testdata/ede.tdir/bogus/dnskey-failures.test.signed @@ -0,0 +1,7 @@ +dnskey-failures.test. 3600 IN SOA ns.dnskey-failures.test. hostmaster.dnskey-failures.test. 1 14400 1800 2419200 300 +dnskey-failures.test. 3600 IN RRSIG SOA 13 2 3600 20010201000000 20001230000000 45928 dnskey-failures.test. NKixvGKa0WHSI8oE5THI1hjm5nExVkryUmW15VoNZ3pwqUYexGWLIlfuYsTaDE5GVEtPpSKbA+PlYDk19EsLNQ== +dnskey-failures.test. 3600 IN A 192.0.2.1 +dnskey-failures.test. 3600 IN RRSIG A 13 2 3600 20010201000000 20001230000000 45928 dnskey-failures.test. FCEvbVL3TkzO7jWeOz7E/A3Q64QkpegVazS4OL+ybxN2o8OzXdCJN3QbCGdFP26/Rbj089ThDCZ0+OormAk1dw== +dnskey-failures.test. 3600 IN RRSIG DNSKEY 13 2 3600 20010201000000 20001230000000 45928 dnskey-failures.test. pEjWVsJbFiQBvwNGV3v0nVirMJDOYKXqC4IX9dFuRTnoWSb95anvB08pgaZ1ie+thk6YC1fX2fUTRKRFr3vHnA== +dnskey-failures.test. 300 IN NSEC dnskey-failures.test. A SOA RRSIG NSEC DNSKEY +dnskey-failures.test. 300 IN RRSIG NSEC 13 2 300 20010201000000 20001230000000 45928 dnskey-failures.test. /vAazBDetA5+np+fE7V6f9W+faEQT3ETGueNNhFPjUsPF1dU9Gglu4PZ15fWOxsk0DPWHNmTMF70ZCGQJ2k+fw== diff --git a/testdata/ede.tdir/bogus/dnssec-failures.test.signed b/testdata/ede.tdir/bogus/dnssec-failures.test.signed new file mode 100644 index 000000000..ed8f5d9d9 --- /dev/null +++ b/testdata/ede.tdir/bogus/dnssec-failures.test.signed @@ -0,0 +1,25 @@ +dnssec-failures.test. 3600 IN SOA ns.dnssec-failures.test. hostmaster.dnssec-failures.test. 1 14400 1800 2419200 300 +dnssec-failures.test. 3600 IN RRSIG SOA 13 2 3600 20010201000000 20001230000000 53876 dnssec-failures.test. K37BIR/jLR4tN1JtTx3MwzgozslvnFtwUquCSfiBykCcKIv6wErSI9Gnw/tjH0tXrLI1eoLa5oWkgtxy0KKybg== +dnssec-failures.test. 3600 IN NS ns.dnssec-failures.test. +dnssec-failures.test. 3600 IN RRSIG NS 13 2 3600 20010201000000 20001230000000 53876 dnssec-failures.test. JP6mYQORwnwwv+2q9UxpeeaVs5/171y3lyc1FKAY3FHmFqjd4Uo0byW8jgk/BrJyVkaDeZbjvuZq+BED0codpw== +dnssec-failures.test. 3600 IN DNSKEY 257 3 13 mx6xe39HZrYCpyC+9YmquHIf1WdWYaDqOfcpXg2Gtv5VJGS/WSO14txlUoKjYCldyRwcg9wT6JAwikpkzWS6UQ== ;{id = 53876 (ksk), size = 256b} +dnssec-failures.test. 3600 IN RRSIG DNSKEY 13 2 3600 20010201000000 20001230000000 53876 dnssec-failures.test. F760TrogHIBkenX7nGr6LEvocTcGAZamfAaiftIkwprBp21/LZ+qotGsFu9YWsxlGqB3KAINXYATjS6AEJfGEQ== +dnssec-failures.test. 300 IN NSEC expired.dnssec-failures.test. NS SOA RRSIG NSEC DNSKEY +dnssec-failures.test. 300 IN RRSIG NSEC 13 2 300 20010201000000 20001230000000 53876 dnssec-failures.test. Zk+RW0mbLSzwvSYuNQJhNdd4XmtQv47CiLtHbqOyS8/xt5Pt87T0v1UxnCkZAlA+VTEWbJkasq06ER1wMuTetA== +expired.dnssec-failures.test. 300 IN RRSIG NSEC 13 3 300 20010201000000 20001230000000 53876 dnssec-failures.test. UAhzOVumQZ2PVspwJS5NyOjZypIaQXfHMiXGEUYaZ161IfQdB3coBx2vF8MHdqbePOl6Z4oa51ltITMlBL+Stw== +missingrrsigs.dnssec-failures.test. 3600 IN TXT "Signatures missing" +missingrrsigs.dnssec-failures.test. 300 IN NSEC notyetincepted.dnssec-failures.test. TXT RRSIG NSEC +missingrrsigs.dnssec-failures.test. 300 IN RRSIG NSEC 13 3 300 20010201000000 20001230000000 53876 dnssec-failures.test. 4phKld6eMt4cxA4w6I1i29uAbdfbwFrkpRGLBWwerUgDbOdDwUm1de6t4QhBys7DtoZb3wIS+DLJYjBNbz7Sig== +notyetincepted.dnssec-failures.test. 300 IN RRSIG NSEC 13 3 300 20010201000000 20001230000000 53876 dnssec-failures.test. ix6Gg9uUZ0A56IQXbDJuBQ3vIm6QipuvzQTKd2wF6kZuEW/53wuy4ROBDIQ4IgnQD17vG8tJNeDOCfj0hh8+dQ== +ns.dnssec-failures.test. 3600 IN A 192.0.2.1 +ns.dnssec-failures.test. 3600 IN RRSIG A 13 3 3600 20010201000000 20001230000000 53876 dnssec-failures.test. PbcykgJEHG218vCkj9pD8W5JVqyCD9VRNOy3SHqCTvWGVAApasdZ7n5wzNVpHdKrqlTpyLwf6z6vv4NMYbEQdw== +ns.dnssec-failures.test. 300 IN NSEC sigsinvalid.dnssec-failures.test. A RRSIG NSEC +ns.dnssec-failures.test. 300 IN RRSIG NSEC 13 3 300 20010201000000 20001230000000 53876 dnssec-failures.test. SEO+C116gcmI0sY4lnIM4DQrUxqyaGIIqlvhxyGrzF9jJopRZB8gflQcYPy5qhIwGZJoEMB+SO4er4LCaS8NwA== +sigsinvalid.dnssec-failures.test. 3600 IN TXT "Signatures INVALID" +sigsinvalid.dnssec-failures.test. 3600 IN RRSIG TXT 13 3 3600 20010201000000 20001230000000 53876 dnssec-failures.test. 3XFjjPt+UyY4ZIj8PAINTtOTh7sk4OIAO5akFDQhqgB/Wv6f7dWdqvl8Y2RIqdh0WQz+nGPRMktS8exA3FKW4Q== +sigsinvalid.dnssec-failures.test. 300 IN NSEC dnssec-failures.test. TXT RRSIG NSEC +sigsinvalid.dnssec-failures.test. 300 IN RRSIG NSEC 13 3 300 20010201000000 20001230000000 53876 dnssec-failures.test. gmft6HYmqZalLwmdnuWBqJod3JD5fRoGqiwYXVFxySm2bHPvz8J9xSe7RdTSONXPUc+7mE8IHYff/gGW7gctqw== +expired.dnssec-failures.test. 3600 IN TXT "Expired" +expired.dnssec-failures.test. 3600 IN RRSIG TXT 13 3 3600 20001230000000 20001201000000 53876 dnssec-failures.test. 8zosYGmmGGcGcBuWaf3oL3TE/hpKDrddtm7ZQGndjmqkZ8CVg6RwFb+8YLqcG5du3Si0rmTuZId+qBOV/pnViA== +notyetincepted.dnssec-failures.test. 3600 IN TXT "Not yet incepted" +notyetincepted.dnssec-failures.test. 3600 IN RRSIG TXT 13 3 3600 20010201000000 20010103000000 53876 dnssec-failures.test. lmk0+oEdnnKa1oujIsMeimuElrKvrUSlBknsfSNqOo07VxJxT2R4qkKc95oiEmeSWHcVTOrXxEhtl4kAAactPg== diff --git a/testdata/ede.tdir/bogus/make-broken-zone.sh b/testdata/ede.tdir/bogus/make-broken-zone.sh index 67b4fcfb2..f93df3978 100755 --- a/testdata/ede.tdir/bogus/make-broken-zone.sh +++ b/testdata/ede.tdir/bogus/make-broken-zone.sh @@ -1,21 +1,28 @@ #!/usr/bin/env bash -# create oudated zones -CSK=`ldns-keygen -a ECDSAP256SHA256 -k -r /dev/urandom dnssec-failures.test` -echo $CSK +# This script was used to generate the broken signed zones used for testing. -echo ". IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d" | \ - cat $CSK.ds - > bogus/trust-anchors +# Override the current date; it is used in Unbound's configuration also. +NOW=20010101 # differentiate for MacOS with "gdate" DATE=date which gdate > /dev/null 2>&1 && DATE=gdate -ONEMONTHAGO=`$DATE -d 'now - 1 month' +%Y%m%d` -YESTERDAY=`$DATE -d 'now - 2 days' +%Y%m%d` -TOMORROW=`$DATE -d 'now + 2 days' +%Y%m%d` +ONEMONTHAGO=`$DATE -d "$NOW - 1 month" +%Y%m%d` +ONEMONTH=`$DATE -d "$NOW + 1 month" +%Y%m%d` +YESTERDAY=`$DATE -d "$NOW - 2 days" +%Y%m%d` +TOMORROW=`$DATE -d "$NOW + 2 days" +%Y%m%d` -ldns-signzone -i $YESTERDAY -f - bogus/dnssec-failures.test $CSK | \ +# Root trust anchor +echo ". IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d" > bogus/trust-anchors + +# create oudated zones +CSK=`ldns-keygen -a ECDSAP256SHA256 -k -r /dev/urandom dnssec-failures.test` +echo $CSK +cat $CSK.ds >> bogus/trust-anchors + +ldns-signzone -i $YESTERDAY -e $ONEMONTH -f - bogus/dnssec-failures.test $CSK | \ grep -v '^missingrrsigs\.dnssec-failures\.test\..*IN.*RRSIG.*TXT' | \ sed 's/Signatures invalid/Signatures INVALID/g' | \ grep -v '^notyetincepted\.dnssec-failures\.test\..*IN.*TXT' | \ @@ -25,7 +32,7 @@ ldns-signzone -i $YESTERDAY -f - bogus/dnssec-failures.test $CSK | \ ldns-signzone -i $ONEMONTHAGO -e $YESTERDAY -f - bogus/dnssec-failures.test $CSK | \ grep -v '[ ]NSEC[ ]' | \ grep '^expired\.dnssec-failures\.test\..*IN.*TXT' > expired -ldns-signzone -i $TOMORROW -f - bogus/dnssec-failures.test $CSK | \ +ldns-signzone -i $TOMORROW -e $ONEMONTH -f - bogus/dnssec-failures.test $CSK | \ grep -v '[ ]NSEC[ ]' | \ grep '^notyetincepted\.dnssec-failures\.test\..*IN.*TXT' > notyetincepted @@ -33,34 +40,35 @@ cat base expired notyetincepted > bogus/dnssec-failures.test.signed # cleanup old zone keys rm -f $CSK.* + # create zone with DNSKEY missing CSK=`ldns-keygen -a ECDSAP256SHA256 -k -r /dev/urandom dnskey-failures.test` echo $CSK cat $CSK.ds >> bogus/trust-anchors -ldns-signzone -f tmp.signed bogus/dnskey-failures.test $CSK +ldns-signzone -i $YESTERDAY -e $ONEMONTH -f tmp.signed bogus/dnskey-failures.test $CSK grep -v ' DNSKEY ' tmp.signed > bogus/dnskey-failures.test.signed - # cleanup old zone keys rm -f $CSK.* + # create zone with NSEC missing CSK=`ldns-keygen -a ECDSAP256SHA256 -k -r /dev/urandom nsec-failures.test` echo $CSK cat $CSK.ds >> bogus/trust-anchors -ldns-signzone -f tmp.signed bogus/nsec-failures.test $CSK +ldns-signzone -i $YESTERDAY -e $ONEMONTH -f tmp.signed bogus/nsec-failures.test $CSK grep -v ' NSEC ' tmp.signed > bogus/nsec-failures.test.signed - # cleanup old zone keys rm -f $CSK.* + # create zone with RRSIGs missing CSK=`ldns-keygen -a ECDSAP256SHA256 -k -r /dev/urandom rrsig-failures.test` echo $CSK cat $CSK.ds >> bogus/trust-anchors -ldns-signzone -f tmp.signed bogus/rrsig-failures.test $CSK +ldns-signzone -i $YESTERDAY -e $ONEMONTH -f tmp.signed bogus/rrsig-failures.test $CSK grep -v ' RRSIG ' tmp.signed > bogus/rrsig-failures.test.signed # cleanup diff --git a/testdata/ede.tdir/bogus/nsec-failures.test.signed b/testdata/ede.tdir/bogus/nsec-failures.test.signed new file mode 100644 index 000000000..b63138613 --- /dev/null +++ b/testdata/ede.tdir/bogus/nsec-failures.test.signed @@ -0,0 +1,7 @@ +nsec-failures.test. 3600 IN SOA ns.nsec-failures.test. hostmaster.nsec-failures.test. 1 14400 1800 2419200 300 +nsec-failures.test. 3600 IN RRSIG SOA 13 2 3600 20010201000000 20001230000000 12342 nsec-failures.test. ZdnRF2uI0IDJsHTXsd4TclX9gUEkxjp19LykHuI3DaCKe3bY8uTETta8i73hlKWJWeRjmgQojIsi9tBlivOwjQ== +nsec-failures.test. 3600 IN A 192.0.2.1 +nsec-failures.test. 3600 IN RRSIG A 13 2 3600 20010201000000 20001230000000 12342 nsec-failures.test. /JccCtWkuQgSF81gv6DPsxaicmlJoGAhVpCpR4JGgVz3tZMhIp+iXUGeI+CkBofw9G/MK66Hk937JRmMh9UTvQ== +nsec-failures.test. 3600 IN DNSKEY 257 3 13 41tJnzHY0o3WKid0ZsIo6S5SJdC1JiW0H/KizsAD2phHdi1AIDiBclL+nG2lKvPjMoX2hcMfd8h9DfU99HR3kg== ;{id = 12342 (ksk), size = 256b} +nsec-failures.test. 3600 IN RRSIG DNSKEY 13 2 3600 20010201000000 20001230000000 12342 nsec-failures.test. Y23xTzxdqQBjFsWLlqCRgPKT7raPcP0lAy2tR8trW5+vUAhBePXdVixp4AjoxEqXsLLalAtnJnc4QgH7+HO6PA== +nsec-failures.test. 300 IN RRSIG NSEC 13 2 300 20010201000000 20001230000000 12342 nsec-failures.test. KfpncqGIzIPNB2ExkH22/z0jAPmq8jTTjDkLte29iKqR9t3bSZlcS0MQ2QB7Z6tgks8fo7Zpc9+BvaDq7Y6ONg== diff --git a/testdata/ede.tdir/bogus/rrsig-failures.test.signed b/testdata/ede.tdir/bogus/rrsig-failures.test.signed new file mode 100644 index 000000000..222bdc0c6 --- /dev/null +++ b/testdata/ede.tdir/bogus/rrsig-failures.test.signed @@ -0,0 +1,4 @@ +rrsig-failures.test. 3600 IN SOA ns.rrsig-failures.test. hostmaster.rrsig-failures.test. 1 14400 1800 2419200 300 +rrsig-failures.test. 3600 IN A 192.0.2.1 +rrsig-failures.test. 3600 IN DNSKEY 257 3 13 rIMJ4/qnOb91GuxKzAYiCdPNdEtUhyt+mi1Jz+NPP0rJQdGOhXr37LpctEiKK4isabCXcwYlVtFdDPopa4RufA== ;{id = 13838 (ksk), size = 256b} +rrsig-failures.test. 300 IN NSEC rrsig-failures.test. A SOA RRSIG NSEC DNSKEY diff --git a/testdata/ede.tdir/bogus/trust-anchors b/testdata/ede.tdir/bogus/trust-anchors new file mode 100644 index 000000000..bd20c8702 --- /dev/null +++ b/testdata/ede.tdir/bogus/trust-anchors @@ -0,0 +1,5 @@ +. IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d +dnssec-failures.test. IN DS 53876 13 2 e0207223d847e0d8f3bd2afcf887f727178777a94563b94e1d0be8ca2f070d9a +dnskey-failures.test. IN DS 45928 13 2 9295d5c0d9296599809ce968f994a974d4da7752266ee124ead4ce980c006c20 +nsec-failures.test. IN DS 12342 13 2 b0a994fe4ff12a706b2a47a794601b254a8d28e040832ad6e39e96dbf7736ca2 +rrsig-failures.test. IN DS 13838 13 2 b083d59d2e7ac370e1103bc5ada2a921e4e65745ea8550350b6fcb57eba9f917 diff --git a/testdata/ede.tdir/ede.conf b/testdata/ede.tdir/ede.conf index 13730d42f..639899d13 100644 --- a/testdata/ede.tdir/ede.conf +++ b/testdata/ede.tdir/ede.conf @@ -11,6 +11,7 @@ server: val-log-level: 2 trust-anchor-file: "bogus/trust-anchors" + val-override-date: "20010101020202" module-config: "respip validator iterator" diff --git a/testdata/ede.tdir/ede.pre b/testdata/ede.tdir/ede.pre index e5a0667b0..57e15cc5a 100644 --- a/testdata/ede.tdir/ede.pre +++ b/testdata/ede.tdir/ede.pre @@ -4,7 +4,9 @@ # use .tpkg.var.test for in test variable passing [ -f .tpkg.var.test ] && source .tpkg.var.test +PRE="../.." . ../common.sh + get_random_port 2 UNBOUND_PORT=$RND_PORT UNBOUND_PORT2=$(($RND_PORT + 1)) @@ -16,11 +18,7 @@ sed -e 's/@PORT\@/'$UNBOUND_PORT'/' < ede.conf > temp.conf sed -e 's/@PORT2\@/'$UNBOUND_PORT2'/' < temp.conf > ub.conf sed -e 's/@PORT2\@/'$UNBOUND_PORT2'/' < ede-auth.conf > ub2.conf -# create broken dnssec zone -bogus/make-broken-zone.sh - # start unbound in the background -PRE="../.." $PRE/unbound -d -c ub.conf > unbound.log 2>&1 & UNBOUND_PID=$! echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test @@ -30,8 +28,6 @@ $PRE/unbound -d -c ub2.conf > unbound2.log 2>&1 & UNBOUND_PID2=$! echo "UNBOUND_PID2=$UNBOUND_PID2" >> .tpkg.var.test - cat .tpkg.var.test wait_unbound_up unbound.log wait_unbound_up unbound2.log - From 6b8181acb7171320dd6e8ed59497f35c04e3ee56 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Wed, 5 Oct 2022 14:09:12 +0200 Subject: [PATCH 44/60] - Fix dnscrypt compile for proxy protocol code changes. --- daemon/worker.c | 8 ++++---- doc/Changelog | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index 6b188047f..caefad621 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1301,16 +1301,16 @@ worker_handle_request(struct comm_point* c, void* arg, int error, if(worker_check_request(c->buffer, worker) != 0) { verbose(VERB_ALGO, "dnscrypt: worker check request: bad query."); - log_addr(VERB_CLIENT,"from",&repinfo->addr, - repinfo->addrlen); + log_addr(VERB_CLIENT,"from",&repinfo->client_addr, + repinfo->client_addrlen); comm_point_drop_reply(repinfo); return 0; } if(!query_info_parse(&qinfo, c->buffer)) { verbose(VERB_ALGO, "dnscrypt: worker parse request: formerror."); - log_addr(VERB_CLIENT, "from", &repinfo->addr, - repinfo->addrlen); + log_addr(VERB_CLIENT, "from", &repinfo->client_addr, + repinfo->client_addrlen); comm_point_drop_reply(repinfo); return 0; } diff --git a/doc/Changelog b/doc/Changelog index bd2b33ff2..08eba8740 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +5 October 2022: Wouter + - Fix dnscrypt compile for proxy protocol code changes. + 5 October 2022: George - Use DEBUG_TDIR from environment in mini_tdir.sh for debugging. - Fix string comparison in mini_tdir.sh. From d122617dd431191d1d2fe171b009d9eecc32bf96 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Wed, 5 Oct 2022 22:02:30 +0200 Subject: [PATCH 45/60] - Fix checkconf test for dnscrypt and proxy port. --- doc/Changelog | 1 + testdata/04-checkconf.tdir/bad.proxy-and-dnscrypt | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index 08eba8740..20d3c05c9 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -5,6 +5,7 @@ - Use DEBUG_TDIR from environment in mini_tdir.sh for debugging. - Fix string comparison in mini_tdir.sh. - Make ede.tdir test more predictable by using static data. + - Fix checkconf test for dnscrypt and proxy port. 4 October 2022: George - Merge #764: Leniency for target discovery when under load (for diff --git a/testdata/04-checkconf.tdir/bad.proxy-and-dnscrypt b/testdata/04-checkconf.tdir/bad.proxy-and-dnscrypt index ece7544ba..f62f7868c 100644 --- a/testdata/04-checkconf.tdir/bad.proxy-and-dnscrypt +++ b/testdata/04-checkconf.tdir/bad.proxy-and-dnscrypt @@ -2,4 +2,5 @@ server: interface: 127.0.0.1 proxy-protocol-port: 53 dnscrypt: - dnscrypt-port: 53 + dnscrypt-enable: yes + dnscrypt-port: 53 From b043bc5eb4150e755027d17d62596dbee17fd346 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 6 Oct 2022 10:01:09 +0200 Subject: [PATCH 46/60] - Fix to stop responses with TC flag from resulting in partial responses. It retries to fetch the data elsewhere, or fails the query and in depth fix removes the TC flag from the cached item. --- doc/Changelog | 5 +++ iterator/iter_resptype.c | 6 +++- iterator/iterator.c | 4 +-- testdata/iter_auth_tc.rpl | 35 ++++++++++++++------ testdata/stub_auth_tc.tdir/stub_auth_tc.test | 2 +- 5 files changed, 38 insertions(+), 14 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 20d3c05c9..61a10f9a5 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,8 @@ +6 October 2022: Wouter + - Fix to stop responses with TC flag from resulting in partial + responses. It retries to fetch the data elsewhere, or fails the + query and in depth fix removes the TC flag from the cached item. + 5 October 2022: Wouter - Fix dnscrypt compile for proxy protocol code changes. diff --git a/iterator/iter_resptype.c b/iterator/iter_resptype.c index f146a2b6b..c2b824a0f 100644 --- a/iterator/iter_resptype.c +++ b/iterator/iter_resptype.c @@ -113,7 +113,11 @@ response_type_from_server(int rdset, if(!msg || !request) return RESPONSE_TYPE_THROWAWAY; - + /* If the TC flag is set, the response is incomplete. Too large to + * fit even in TCP or so. Discard it, it cannot be retrieved here. */ + if((msg->rep->flags & BIT_TC)) + return RESPONSE_TYPE_THROWAWAY; + /* If the message is NXDOMAIN, then it answers the question. */ if(FLAGS_GET_RCODE(msg->rep->flags) == LDNS_RCODE_NXDOMAIN) { /* make sure its not recursive when we don't want it to */ diff --git a/iterator/iterator.c b/iterator/iterator.c index 2d676b1df..2f3ad06fe 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -2907,6 +2907,8 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, (int)((iq->chase_flags&BIT_RD) || iq->chase_to_rd), iq->response, &iq->qinfo_out, iq->dp); iq->chase_to_rd = 0; + /* remove TC flag, if this is erroneously set by TCP upstream */ + iq->response->rep->flags &= ~BIT_TC; if(type == RESPONSE_TYPE_REFERRAL && (iq->chase_flags&BIT_RD) && !iq->auth_zone_response) { /* When forwarding (RD bit is set), we handle referrals @@ -4027,8 +4029,6 @@ process_response(struct module_qstate* qstate, struct iter_qstate* iq, /* remove CD-bit, we asked for in case we handle validation ourself */ prs->flags &= ~BIT_CD; - /* remove TC flag, if this is erroneously set by TCP upstream */ - prs->flags &= ~BIT_TC; /* normalize and sanitize: easy to delete items from linked lists */ if(!scrub_message(pkt, prs, &iq->qinfo_out, iq->dp->name, diff --git a/testdata/iter_auth_tc.rpl b/testdata/iter_auth_tc.rpl index 2136ca8b0..417807724 100644 --- a/testdata/iter_auth_tc.rpl +++ b/testdata/iter_auth_tc.rpl @@ -55,11 +55,11 @@ a.gtld-servers.net. IN A 192.5.6.30 ENTRY_END ENTRY_BEGIN -MATCH opcode qtype qname -ADJUST copy_id +MATCH opcode subdomain +ADJUST copy_id copy_query REPLY QR NOERROR SECTION QUESTION -www.example.com. IN A +example.com. IN NS SECTION AUTHORITY example.com. IN NS ns.example.com. SECTION ADDITIONAL @@ -82,6 +82,27 @@ SECTION ADDITIONAL ns.example.com. IN A 1.2.3.4 ENTRY_END +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns.example.com. IN A +SECTION ANSWER +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns.example.com. IN AAAA +SECTION ANSWER +SECTION AUTHORITY +example.com. IN NS ns.example.com. +ENTRY_END + ENTRY_BEGIN MATCH opcode qtype qname ADJUST copy_id @@ -109,15 +130,9 @@ ENTRY_END STEP 10 CHECK_ANSWER ENTRY_BEGIN MATCH all -REPLY QR RD RA NOERROR +REPLY QR RD RA SERVFAIL SECTION QUESTION www.example.com. IN A -SECTION ANSWER -www.example.com. IN A 10.20.30.40 -SECTION AUTHORITY -example.com. IN NS ns.example.com. -SECTION ADDITIONAL -ns.example.com. IN A 1.2.3.4 ENTRY_END SCENARIO_END diff --git a/testdata/stub_auth_tc.tdir/stub_auth_tc.test b/testdata/stub_auth_tc.tdir/stub_auth_tc.test index 2d3df5365..7b7440274 100644 --- a/testdata/stub_auth_tc.tdir/stub_auth_tc.test +++ b/testdata/stub_auth_tc.tdir/stub_auth_tc.test @@ -12,7 +12,7 @@ echo "> cat logfiles" cat fwd.log cat unbound.log echo "> check answer" -if grep "10.20.30.42" outfile; then +if grep "SERVFAIL" outfile; then echo "OK" else echo "Not OK" From bf1cce6f9b0fa3f7c9667fc4bb6586698bd1d518 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 6 Oct 2022 15:53:21 +0200 Subject: [PATCH 47/60] - Fix proxy length debug output printout typecasts. --- doc/Changelog | 1 + util/netevent.c | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 61a10f9a5..b73b8bdd1 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,7 @@ - Fix to stop responses with TC flag from resulting in partial responses. It retries to fetch the data elsewhere, or fails the query and in depth fix removes the TC flag from the cached item. + - Fix proxy length debug output printout typecasts. 5 October 2022: Wouter - Fix dnscrypt compile for proxy protocol code changes. diff --git a/util/netevent.c b/util/netevent.c index 55c9a041f..9e5436b93 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -1634,7 +1634,7 @@ ssl_handle_read(struct comm_point* c) } verbose(VERB_ALGO, "proxy_protocol: reading fixed " "part of PROXYv2 header (len %lu)", - want_read_size); + (unsigned long)want_read_size); current_read_size = want_read_size; if(c->tcp_byte_count < current_read_size) { ERR_clear_error(); @@ -1692,7 +1692,7 @@ ssl_handle_read(struct comm_point* c) } verbose(VERB_ALGO, "proxy_protocol: reading variable " "part of PROXYv2 header (len %lu)", - want_read_size); + (unsigned long)want_read_size); current_read_size = PP2_HEADER_SIZE + want_read_size; if(c->tcp_byte_count < current_read_size) { ERR_clear_error(); @@ -2045,7 +2045,7 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) } verbose(VERB_ALGO, "proxy_protocol: reading fixed " "part of PROXYv2 header (len %lu)", - want_read_size); + (unsigned long)want_read_size); current_read_size = want_read_size; if(c->tcp_byte_count < current_read_size) { r = recv(fd, (void*)sldns_buffer_at(c->buffer, @@ -2081,7 +2081,7 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) } verbose(VERB_ALGO, "proxy_protocol: reading variable " "part of PROXYv2 header (len %lu)", - want_read_size); + (unsigned long)want_read_size); current_read_size = PP2_HEADER_SIZE + want_read_size; if(c->tcp_byte_count < current_read_size) { r = recv(fd, (void*)sldns_buffer_at(c->buffer, From 2569b12b9c8b703944d82a62781a7f42626ac8f8 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Fri, 7 Oct 2022 11:25:36 +0200 Subject: [PATCH 48/60] - Fix to stop possible loops in the tcp reuse code (write_wait list and tcp_wait list). Based on analysis and patch from Prad Seniappan and Karthik Umashankar. --- doc/Changelog | 5 + services/outside_network.c | 131 ++++++++++--------- services/outside_network.h | 24 ++++ testcode/unittcpreuse.c | 253 +++++++++++++++++++++++++++++++++++++ 4 files changed, 354 insertions(+), 59 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index b73b8bdd1..c956c58bc 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,8 @@ +7 October 2022: George + - Fix to stop possible loops in the tcp reuse code (write_wait list + and tcp_wait list). Based on analysis and patch from Prad Seniappan + and Karthik Umashankar. + 6 October 2022: Wouter - Fix to stop responses with TC flag from resulting in partial responses. It retries to fetch the data elsewhere, or fails the diff --git a/services/outside_network.c b/services/outside_network.c index 165a50755..a4529ade5 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -86,10 +86,6 @@ static void serviced_tcp_initiate(struct serviced_query* sq, sldns_buffer* buff) static int randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout); -/** remove waiting tcp from the outnet waiting list */ -static void waiting_list_remove(struct outside_network* outnet, - struct waiting_tcp* w); - /** select a DNS ID for a TCP stream */ static uint16_t tcp_select_id(struct outside_network* outnet, struct reuse_tcp* reuse); @@ -372,7 +368,8 @@ log_reuse_tcp(enum verbosity_value v, const char* msg, struct reuse_tcp* reuse) } /** pop the first element from the writewait list */ -static struct waiting_tcp* reuse_write_wait_pop(struct reuse_tcp* reuse) +struct waiting_tcp* +reuse_write_wait_pop(struct reuse_tcp* reuse) { struct waiting_tcp* w = reuse->write_wait_first; if(!w) @@ -390,8 +387,8 @@ static struct waiting_tcp* reuse_write_wait_pop(struct reuse_tcp* reuse) } /** remove the element from the writewait list */ -static void reuse_write_wait_remove(struct reuse_tcp* reuse, - struct waiting_tcp* w) +void +reuse_write_wait_remove(struct reuse_tcp* reuse, struct waiting_tcp* w) { log_assert(w); log_assert(w->write_wait_queued); @@ -415,8 +412,8 @@ static void reuse_write_wait_remove(struct reuse_tcp* reuse, } /** push the element after the last on the writewait list */ -static void reuse_write_wait_push_back(struct reuse_tcp* reuse, - struct waiting_tcp* w) +void +reuse_write_wait_push_back(struct reuse_tcp* reuse, struct waiting_tcp* w) { if(!w) return; log_assert(!w->write_wait_queued); @@ -427,7 +424,9 @@ static void reuse_write_wait_push_back(struct reuse_tcp* reuse, w->write_wait_prev = reuse->write_wait_last; } else { reuse->write_wait_first = w; + w->write_wait_prev = NULL; } + w->write_wait_next = NULL; reuse->write_wait_last = w; w->write_wait_queued = 1; } @@ -810,20 +809,50 @@ reuse_tcp_lru_snip(struct outside_network* outnet) return reuse; } -/** call callback on waiting_tcp, if not NULL */ -static void -waiting_tcp_callback(struct waiting_tcp* w, struct comm_point* c, int error, - struct comm_reply* reply_info) +/** remove waiting tcp from the outnet waiting list */ +void +outnet_waiting_tcp_list_remove(struct outside_network* outnet, struct waiting_tcp* w) { - if(w && w->cb) { - fptr_ok(fptr_whitelist_pending_tcp(w->cb)); - (void)(*w->cb)(c, w->cb_arg, error, reply_info); + struct waiting_tcp* p = outnet->tcp_wait_first, *prev = NULL; + w->on_tcp_waiting_list = 0; + while(p) { + if(p == w) { + /* remove w */ + if(prev) + prev->next_waiting = w->next_waiting; + else outnet->tcp_wait_first = w->next_waiting; + if(outnet->tcp_wait_last == w) + outnet->tcp_wait_last = prev; + w->next_waiting = NULL; + return; + } + prev = p; + p = p->next_waiting; } + /* outnet_waiting_tcp_list_remove is currently called only with items + * that are already in the waiting list. */ + log_assert(0); +} + +/** pop the first waiting tcp from the outnet waiting list */ +struct waiting_tcp* +outnet_waiting_tcp_list_pop(struct outside_network* outnet) +{ + struct waiting_tcp* w = outnet->tcp_wait_first; + if(!outnet->tcp_wait_first) return NULL; + log_assert(w->on_tcp_waiting_list); + outnet->tcp_wait_first = w->next_waiting; + if(outnet->tcp_wait_last == w) + outnet->tcp_wait_last = NULL; + w->on_tcp_waiting_list = 0; + w->next_waiting = NULL; + return w; } /** add waiting_tcp element to the outnet tcp waiting list */ -static void -outnet_add_tcp_waiting(struct outside_network* outnet, struct waiting_tcp* w) +void +outnet_waiting_tcp_list_add(struct outside_network* outnet, + struct waiting_tcp* w, int set_timer) { struct timeval tv; log_assert(!w->on_tcp_waiting_list); @@ -835,16 +864,18 @@ outnet_add_tcp_waiting(struct outside_network* outnet, struct waiting_tcp* w) else outnet->tcp_wait_first = w; outnet->tcp_wait_last = w; w->on_tcp_waiting_list = 1; + if(set_timer) { #ifndef S_SPLINT_S - tv.tv_sec = w->timeout/1000; - tv.tv_usec = (w->timeout%1000)*1000; + tv.tv_sec = w->timeout/1000; + tv.tv_usec = (w->timeout%1000)*1000; #endif - comm_timer_set(w->timer, &tv); + comm_timer_set(w->timer, &tv); + } } /** add waiting_tcp element as first to the outnet tcp waiting list */ -static void -outnet_add_tcp_waiting_first(struct outside_network* outnet, +void +outnet_waiting_tcp_list_add_first(struct outside_network* outnet, struct waiting_tcp* w, int reset_timer) { struct timeval tv; @@ -869,6 +900,17 @@ outnet_add_tcp_waiting_first(struct outside_network* outnet, (outnet->tcp_reuse_first && outnet->tcp_reuse_last)); } +/** call callback on waiting_tcp, if not NULL */ +static void +waiting_tcp_callback(struct waiting_tcp* w, struct comm_point* c, int error, + struct comm_reply* reply_info) +{ + if(w && w->cb) { + fptr_ok(fptr_whitelist_pending_tcp(w->cb)); + (void)(*w->cb)(c, w->cb_arg, error, reply_info); + } +} + /** see if buffers can be used to service TCP queries */ static void use_free_buffer(struct outside_network* outnet) @@ -879,15 +921,10 @@ use_free_buffer(struct outside_network* outnet) struct pending_tcp* pend_tcp = NULL; #endif struct reuse_tcp* reuse = NULL; - w = outnet->tcp_wait_first; - log_assert(w->on_tcp_waiting_list); - outnet->tcp_wait_first = w->next_waiting; - if(outnet->tcp_wait_last == w) - outnet->tcp_wait_last = NULL; + w = outnet_waiting_tcp_list_pop(outnet); log_assert( (!outnet->tcp_reuse_first && !outnet->tcp_reuse_last) || (outnet->tcp_reuse_first && outnet->tcp_reuse_last)); - w->on_tcp_waiting_list = 0; reuse = reuse_tcp_find(outnet, &w->addr, w->addrlen, w->ssl_upstream); /* re-select an ID when moving to a new TCP buffer */ @@ -934,7 +971,7 @@ use_free_buffer(struct outside_network* outnet) #endif } else { /* no reuse and no free buffer, put back at the start */ - outnet_add_tcp_waiting_first(outnet, w, 0); + outnet_waiting_tcp_list_add_first(outnet, w, 0); break; } #ifdef USE_DNSTAP @@ -1008,7 +1045,7 @@ reuse_move_writewait_away(struct outside_network* outnet, * fail the query */ w->error_count ++; reuse_tree_by_id_delete(&pend->reuse, w); - outnet_add_tcp_waiting(outnet, w); + outnet_waiting_tcp_list_add(outnet, w, 1); } while((w = reuse_write_wait_pop(&pend->reuse)) != NULL) { if(verbosity >= VERB_CLIENT && w->pkt_len > 12+2+2 && @@ -1019,7 +1056,7 @@ reuse_move_writewait_away(struct outside_network* outnet, verbose(VERB_CLIENT, "reuse_move_writewait_away item %s", buf); } reuse_tree_by_id_delete(&pend->reuse, w); - outnet_add_tcp_waiting(outnet, w); + outnet_waiting_tcp_list_add(outnet, w, 1); } } @@ -2237,7 +2274,7 @@ outnet_tcptimer(void* arg) verbose(VERB_CLIENT, "outnet_tcptimer"); if(w->on_tcp_waiting_list) { /* it is on the waiting list */ - waiting_list_remove(outnet, w); + outnet_waiting_tcp_list_remove(outnet, w); waiting_tcp_callback(w, NULL, NETEVENT_TIMEOUT, NULL); waiting_tcp_delete(w); } else { @@ -2464,7 +2501,7 @@ pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet, #ifdef USE_DNSTAP w->sq = sq; #endif - outnet_add_tcp_waiting(sq->outnet, w); + outnet_waiting_tcp_list_add(sq->outnet, w, 1); } return w; } @@ -2612,30 +2649,6 @@ serviced_create(struct outside_network* outnet, sldns_buffer* buff, int dnssec, return sq; } -/** remove waiting tcp from the outnet waiting list */ -static void -waiting_list_remove(struct outside_network* outnet, struct waiting_tcp* w) -{ - struct waiting_tcp* p = outnet->tcp_wait_first, *prev = NULL; - w->on_tcp_waiting_list = 0; - while(p) { - if(p == w) { - /* remove w */ - if(prev) - prev->next_waiting = w->next_waiting; - else outnet->tcp_wait_first = w->next_waiting; - if(outnet->tcp_wait_last == w) - outnet->tcp_wait_last = prev; - return; - } - prev = p; - p = p->next_waiting; - } - /* waiting_list_remove is currently called only with items that are - * already in the waiting list. */ - log_assert(0); -} - /** reuse tcp stream, remove serviced query from stream, * return true if the stream is kept, false if it is to be closed */ static int @@ -2730,7 +2743,7 @@ serviced_delete(struct serviced_query* sq) sq->pending = NULL; } else { verbose(VERB_CLIENT, "serviced_delete: tcpwait"); - waiting_list_remove(sq->outnet, w); + outnet_waiting_tcp_list_remove(sq->outnet, w); if(!w->in_cb_and_decommission) waiting_tcp_delete(w); } diff --git a/services/outside_network.h b/services/outside_network.h index c383b8f09..467c81f60 100644 --- a/services/outside_network.h +++ b/services/outside_network.h @@ -718,6 +718,30 @@ struct reuse_tcp* reuse_tcp_lru_snip(struct outside_network* outnet); /** delete readwait waiting_tcp elements, deletes the elements in the list */ void reuse_del_readwait(rbtree_type* tree_by_id); +/** remove waiting tcp from the outnet waiting list */ +void outnet_waiting_tcp_list_remove(struct outside_network* outnet, + struct waiting_tcp* w); + +/** pop the first waiting tcp from the outnet waiting list */ +struct waiting_tcp* outnet_waiting_tcp_list_pop(struct outside_network* outnet); + +/** add waiting_tcp element to the outnet tcp waiting list */ +void outnet_waiting_tcp_list_add(struct outside_network* outnet, + struct waiting_tcp* w, int set_timer); + +/** add waiting_tcp element as first to the outnet tcp waiting list */ +void outnet_waiting_tcp_list_add_first(struct outside_network* outnet, + struct waiting_tcp* w, int reset_timer); + +/** pop the first element from the writewait list */ +struct waiting_tcp* reuse_write_wait_pop(struct reuse_tcp* reuse); + +/** remove the element from the writewait list */ +void reuse_write_wait_remove(struct reuse_tcp* reuse, struct waiting_tcp* w); + +/** push the element after the last on the writewait list */ +void reuse_write_wait_push_back(struct reuse_tcp* reuse, struct waiting_tcp* w); + /** get TCP file descriptor for address, returns -1 on failure, * tcp_mss is 0 or maxseg size to set for TCP packets. */ int outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, diff --git a/testcode/unittcpreuse.c b/testcode/unittcpreuse.c index 087c6c1b9..b32262dac 100644 --- a/testcode/unittcpreuse.c +++ b/testcode/unittcpreuse.c @@ -44,6 +44,8 @@ #include "util/random.h" #include "services/outside_network.h" +#define MAX_TCP_WAITING_NODES 5 + /** add number of new IDs to the reuse tree, randomly chosen */ static void tcpid_addmore(struct reuse_tcp* reuse, struct outside_network* outnet, unsigned int addnum) @@ -228,9 +230,260 @@ static void tcp_reuse_tree_list_test(void) free(outnet.tcp_conns); } +static void check_waiting_tcp_list(struct outside_network* outnet, + struct waiting_tcp* first, struct waiting_tcp* last, size_t total) +{ + size_t i, j; + struct waiting_tcp* w = outnet->tcp_wait_first; + struct waiting_tcp* n = NULL; + if(first) unit_assert(outnet->tcp_wait_first == first); + if(last) unit_assert(outnet->tcp_wait_last == last && !last->next_waiting); + for(i=0; w; i++) { + unit_assert(ion_tcp_waiting_list); + n = w->next_waiting; + for(j=0; n; j++) { + unit_assert(jnext_waiting; + } + w = w->next_waiting; + } +} + +/** clear the tcp waiting list */ +static void waiting_tcp_list_clear(struct outside_network* outnet) +{ + struct waiting_tcp* w = outnet->tcp_wait_first, *n = NULL; + if(!w) return; + unit_assert(outnet->tcp_wait_first); + unit_assert(outnet->tcp_wait_last); + while(w) { + n = w->next_waiting; + w->on_tcp_waiting_list = 0; + w->next_waiting = (struct waiting_tcp*)1; /* In purpose faux value */ + w = n; + } + outnet->tcp_wait_first = NULL; + outnet->tcp_wait_last = NULL; +} + +/** check removal of the waiting_tcp element on the given position of total + * elements */ +static void check_waiting_tcp_removal(int is_pop, + struct outside_network* outnet, struct waiting_tcp* store, + size_t position, size_t total) +{ + size_t i; + struct waiting_tcp* w; + waiting_tcp_list_clear(outnet); + for(i=0; itcp_wait_first; + for(i=0; inext_waiting; + } + unit_assert(w); /* please clang-analyser */ + outnet_waiting_tcp_list_remove(outnet, w); + } + unit_assert(!(w->on_tcp_waiting_list || w->next_waiting)); + + if(position == 0 && total == 1) { + /* the list should be empty */ + check_waiting_tcp_list(outnet, NULL, NULL, total-1); + } else if(position == 0) { + /* first element should be gone */ + check_waiting_tcp_list(outnet, &store[1], &store[total-1], total-1); + } else if(position == total - 1) { + /* last element should be gone */ + check_waiting_tcp_list(outnet, &store[0], &store[total-2], total-1); + } else { + /* an element should be gone */ + check_waiting_tcp_list(outnet, &store[0], &store[total-1], total-1); + } +} + +static void waiting_tcp_list_test(void) +{ + size_t i = 0; + struct outside_network outnet; + struct waiting_tcp* w, *t = NULL; + struct waiting_tcp store[MAX_TCP_WAITING_NODES]; + memset(&outnet, 0, sizeof(outnet)); + memset(&store, 0, sizeof(store)); + + /* Check add first on empty list */ + unit_show_func("services/outside_network.c", "outnet_waiting_tcp_list_add_first"); + t = &store[i]; + outnet_waiting_tcp_list_add_first(&outnet, t, 0); + check_waiting_tcp_list(&outnet, t, t, 1); + + /* Check add */ + unit_show_func("services/outside_network.c", "outnet_waiting_tcp_list_add"); + for(i=1; iwrite_wait_first; + struct waiting_tcp* n = NULL; + if(first) unit_assert(reuse->write_wait_first == first && !first->write_wait_prev); + if(last) unit_assert(reuse->write_wait_last == last && !last->write_wait_next); + /* check one way */ + for(i=0; w; i++) { + unit_assert(iwrite_wait_queued); + n = w->write_wait_next; + for(j=0; n; j++) { + unit_assert(jwrite_wait_next; + } + w = w->write_wait_next; + } + /* check the other way */ + w = reuse->write_wait_last; + for(i=0; w; i++) { + unit_assert(iwrite_wait_queued); + n = w->write_wait_prev; + for(j=0; n; j++) { + unit_assert(jwrite_wait_prev; + } + w = w->write_wait_prev; + } +} + +/** clear the tcp waiting list */ +static void reuse_write_wait_clear(struct reuse_tcp* reuse) +{ + struct waiting_tcp* w = reuse->write_wait_first, *n = NULL; + if(!w) return; + unit_assert(reuse->write_wait_first); + unit_assert(reuse->write_wait_last); + while(w) { + n = w->write_wait_next; + w->write_wait_queued = 0; + w->write_wait_next = (struct waiting_tcp*)1; /* In purpose faux value */ + w->write_wait_prev = (struct waiting_tcp*)1; /* In purpose faux value */ + w = n; + } + reuse->write_wait_first = NULL; + reuse->write_wait_last = NULL; +} + +/** check removal of the reuse_write_wait element on the given position of total + * elements */ +static void check_reuse_write_wait_removal(int is_pop, + struct reuse_tcp* reuse, struct waiting_tcp* store, + size_t position, size_t total) +{ + size_t i; + struct waiting_tcp* w; + reuse_write_wait_clear(reuse); + for(i=0; iwrite_wait_first; + for(i=0; iwrite_wait_next; + reuse_write_wait_remove(reuse, w); + } + unit_assert(!(w->write_wait_queued || w->write_wait_next || w->write_wait_prev)); + + if(position == 0 && total == 1) { + /* the list should be empty */ + check_reuse_write_wait(reuse, NULL, NULL, total-1); + } else if(position == 0) { + /* first element should be gone */ + check_reuse_write_wait(reuse, &store[1], &store[total-1], total-1); + } else if(position == total - 1) { + /* last element should be gone */ + check_reuse_write_wait(reuse, &store[0], &store[total-2], total-1); + } else { + /* an element should be gone */ + check_reuse_write_wait(reuse, &store[0], &store[total-1], total-1); + } +} + +static void reuse_write_wait_test(void) +{ + size_t i; + struct reuse_tcp reuse; + struct waiting_tcp store[MAX_TCP_WAITING_NODES]; + struct waiting_tcp* w; + memset(&reuse, 0, sizeof(reuse)); + memset(&store, 0, sizeof(store)); + + /* Check adding */ + unit_show_func("services/outside_network.c", "reuse_write_wait_push_back"); + for(i=0; i Date: Fri, 7 Oct 2022 11:29:46 +0200 Subject: [PATCH 49/60] - Fix unit test to properly test the reuse_write_wait_pop function. --- doc/Changelog | 1 + testcode/unittcpreuse.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index c956c58bc..790d7793f 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -2,6 +2,7 @@ - Fix to stop possible loops in the tcp reuse code (write_wait list and tcp_wait list). Based on analysis and patch from Prad Seniappan and Karthik Umashankar. + - Fix unit test to properly test the reuse_write_wait_pop function. 6 October 2022: Wouter - Fix to stop responses with TC flag from resulting in partial diff --git a/testcode/unittcpreuse.c b/testcode/unittcpreuse.c index b32262dac..5f45a4b45 100644 --- a/testcode/unittcpreuse.c +++ b/testcode/unittcpreuse.c @@ -474,9 +474,9 @@ static void reuse_write_wait_test(void) /* Check pop */ unit_show_func("services/outside_network.c", "reuse_write_wait_pop"); - check_reuse_write_wait_removal(0, &reuse, store, 0, 3); - check_reuse_write_wait_removal(0, &reuse, store, 0, 2); - check_reuse_write_wait_removal(0, &reuse, store, 0, 1); + check_reuse_write_wait_removal(1, &reuse, store, 0, 3); + check_reuse_write_wait_removal(1, &reuse, store, 0, 2); + check_reuse_write_wait_removal(1, &reuse, store, 0, 1); } void tcpreuse_test(void) From 97d1cff3157591f843be9b38acfd08c6d380b509 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 7 Oct 2022 13:29:33 +0200 Subject: [PATCH 50/60] Changelog note for tag for 1.17.0rc1 release. --- doc/Changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 790d7793f..078774989 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +7 October 2022: Wouter + - Tag for 1.17.0rc1 release. + 7 October 2022: George - Fix to stop possible loops in the tcp reuse code (write_wait list and tcp_wait list). Based on analysis and patch from Prad Seniappan From 4f2779945629dd0583c29bd250f54ce727539297 Mon Sep 17 00:00:00 2001 From: Jonathan Gray Date: Mon, 10 Oct 2022 19:14:58 +1100 Subject: [PATCH 51/60] consistently use IPv4/IPv6 --- doc/unbound.conf.5.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 4d610c15d..d829008a7 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -349,7 +349,7 @@ ip\-transparent option is also available. The value of the Differentiated Services Codepoint (DSCP) in the differentiated services field (DS) of the outgoing IP packet headers. The field replaces the outdated IPv4 Type-Of-Service field and the -IPV6 traffic class field. +IPv6 traffic class field. .TP .B rrset\-cache\-size: \fI Number of bytes size of the RRset cache. Default is 4 megabytes. @@ -416,7 +416,7 @@ Enable or disable whether ip4 queries are answered or issued. Default is yes. Enable or disable whether ip6 queries are answered or issued. Default is yes. If disabled, queries are not answered on IPv6, and queries are not sent on IPv6 to the internet nameservers. With this option you can disable the -ipv6 transport for sending DNS traffic, it does not impact the contents of +IPv6 transport for sending DNS traffic, it does not impact the contents of the DNS traffic, which may have ip4 and ip6 addresses in it. .TP .B prefer\-ip4: \fI @@ -1671,7 +1671,7 @@ This specifies the action data for \fIresponse-ip\fR with action being to redirect as specified by "\fIresource record string\fR". "Resource record string" is similar to that of \fIaccess-control-tag-action\fR, but it must be of either AAAA, A or CNAME types. -If the IP-netblock is an IPv6/IPV4 prefix, the record +If the IP-netblock is an IPv6/IPv4 prefix, the record must be AAAA/A respectively, unless it is a CNAME (which can be used for both versions of IP netblocks). If it is CNAME there must not be more than one \fIresponse-ip-data\fR for the same IP-netblock. From d25e0cd9b0545ff13120430c94326ceaf14b074f Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Tue, 11 Oct 2022 17:39:30 +0200 Subject: [PATCH 52/60] - Fix PROXYv2 header read for TCP connections when no proxied addresses are provided. --- doc/Changelog | 4 ++++ util/netevent.c | 10 ++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 790d7793f..727d1543e 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +11 October 2022: George + - Fix PROXYv2 header read for TCP connections when no proxied addresses + are provided. + 7 October 2022: George - Fix to stop possible loops in the tcp reuse code (write_wait list and tcp_wait list). Based on analysis and patch from Prad Seniappan diff --git a/util/netevent.c b/util/netevent.c index 9e5436b93..da59a9d60 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -1694,7 +1694,10 @@ ssl_handle_read(struct comm_point* c) "part of PROXYv2 header (len %lu)", (unsigned long)want_read_size); current_read_size = PP2_HEADER_SIZE + want_read_size; - if(c->tcp_byte_count < current_read_size) { + if(want_read_size == 0) { + /* nothing more to read; header is complete */ + c->pp2_header_state = pp2_header_done; + } else if(c->tcp_byte_count < current_read_size) { ERR_clear_error(); if((r=SSL_read(c->ssl, (void*)sldns_buffer_at( c->buffer, c->tcp_byte_count), @@ -2083,7 +2086,10 @@ comm_point_tcp_handle_read(int fd, struct comm_point* c, int short_ok) "part of PROXYv2 header (len %lu)", (unsigned long)want_read_size); current_read_size = PP2_HEADER_SIZE + want_read_size; - if(c->tcp_byte_count < current_read_size) { + if(want_read_size == 0) { + /* nothing more to read; header is complete */ + c->pp2_header_state = pp2_header_done; + } else if(c->tcp_byte_count < current_read_size) { r = recv(fd, (void*)sldns_buffer_at(c->buffer, c->tcp_byte_count), current_read_size-c->tcp_byte_count, MSG_DONTWAIT); From 5ac1bc13cb82b7e7ef5dfaabb82b6780dabd64a0 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 13 Oct 2022 09:34:44 +0200 Subject: [PATCH 53/60] - Tag for 1.17.0 release. The code repository continues with 1.17.1. --- configure | 25 +++++++++++++------------ configure.ac | 5 +++-- doc/Changelog | 3 +++ 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/configure b/configure index a2837d185..5823e49f2 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for unbound 1.17.0. +# Generated by GNU Autoconf 2.69 for unbound 1.17.1. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.17.0' -PACKAGE_STRING='unbound 1.17.0' +PACKAGE_VERSION='1.17.1' +PACKAGE_STRING='unbound 1.17.1' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues' PACKAGE_URL='' @@ -1477,7 +1477,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures unbound 1.17.0 to adapt to many kinds of systems. +\`configure' configures unbound 1.17.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1543,7 +1543,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.17.0:";; + short | recursive ) echo "Configuration of unbound 1.17.1:";; esac cat <<\_ACEOF @@ -1785,7 +1785,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.17.0 +unbound configure 1.17.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2494,7 +2494,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by unbound $as_me 1.17.0, which was +It was created by unbound $as_me 1.17.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2846,11 +2846,11 @@ UNBOUND_VERSION_MAJOR=1 UNBOUND_VERSION_MINOR=17 -UNBOUND_VERSION_MICRO=0 +UNBOUND_VERSION_MICRO=1 LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=20 +LIBUNBOUND_REVISION=21 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2938,6 +2938,7 @@ LIBUNBOUND_AGE=1 # 1.16.2 had 9:18:1 # 1.16.3 had 9:19:1 # 1.17.0 had 9:20:1 +# 1.17.1 had 9:21:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -22085,7 +22086,7 @@ _ACEOF -version=1.17.0 +version=1.17.1 date=`date +'%b %e, %Y'` @@ -22604,7 +22605,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by unbound $as_me 1.17.0, which was +This file was extended by unbound $as_me 1.17.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22670,7 +22671,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -unbound config.status 1.17.0 +unbound config.status 1.17.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 57cc7e604..2c7583310 100644 --- a/configure.ac +++ b/configure.ac @@ -11,14 +11,14 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) m4_define([VERSION_MINOR],[17]) -m4_define([VERSION_MICRO],[0]) +m4_define([VERSION_MICRO],[1]) AC_INIT([unbound],m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]),[unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues],[unbound]) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=9 -LIBUNBOUND_REVISION=20 +LIBUNBOUND_REVISION=21 LIBUNBOUND_AGE=1 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -106,6 +106,7 @@ LIBUNBOUND_AGE=1 # 1.16.2 had 9:18:1 # 1.16.3 had 9:19:1 # 1.17.0 had 9:20:1 +# 1.17.1 had 9:21:1 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary diff --git a/doc/Changelog b/doc/Changelog index 2dca09e62..dd5e1e316 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +13 October 2022: Wouter + - Tag for 1.17.0 release. The code repository continues with 1.17.1. + 11 October 2022: George - Fix PROXYv2 header read for TCP connections when no proxied addresses are provided. From 08dcae0dabd266b011fd82d9970aa5219559094e Mon Sep 17 00:00:00 2001 From: Florian Obser Date: Fri, 14 Oct 2022 13:56:32 +0200 Subject: [PATCH 54/60] Arithmetic on a pointer to void is a GNU extension. --- util/netevent.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/netevent.c b/util/netevent.c index da59a9d60..c67a49ff8 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -810,7 +810,7 @@ done: /* We are reading a whole packet; * Move the rest of the data to overwrite the PROXYv2 header */ /* XXX can we do better to avoid memmove? */ - memmove(header, ((void*)header)+size, + memmove(header, ((char*)header)+size, sldns_buffer_limit(buf)-size); sldns_buffer_set_limit(buf, sldns_buffer_limit(buf)-size); } From 2571d00535a7374adb22925b1c25dc69c0b477ce Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 14 Oct 2022 16:22:17 +0200 Subject: [PATCH 55/60] Changelog note for #768 - Merge #768 from fobser: Arithmetic on a pointer to void is a GNU extension. --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index dd5e1e316..a24d1fdc2 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +14 October 2022: Wouter + - Merge #768 from fobser: Arithmetic on a pointer to void is a GNU + extension. + 13 October 2022: Wouter - Tag for 1.17.0 release. The code repository continues with 1.17.1. From 5ffa4d7232df578ff5d99cf40cdb041a8ece219b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 14 Oct 2022 16:49:57 +0200 Subject: [PATCH 56/60] - In unit test, print python script name list correctly. --- doc/Changelog | 1 + testdata/pymod.tdir/pymod.py | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/Changelog b/doc/Changelog index a24d1fdc2..9c916c297 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,6 +1,7 @@ 14 October 2022: Wouter - Merge #768 from fobser: Arithmetic on a pointer to void is a GNU extension. + - In unit test, print python script name list correctly. 13 October 2022: Wouter - Tag for 1.17.0 release. The code repository continues with 1.17.1. diff --git a/testdata/pymod.tdir/pymod.py b/testdata/pymod.tdir/pymod.py index a8018e7f7..1eb7af5b1 100644 --- a/testdata/pymod.tdir/pymod.py +++ b/testdata/pymod.tdir/pymod.py @@ -37,7 +37,12 @@ import os def init(id, cfg): - log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) + scripts=[] + s = cfg.python_script + while s != None: + scripts.append(s.str) + s = s.next + log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, scripts)) return True def deinit(id): From ba8642aeb7489d7522b6d1effc1454354240286f Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Mon, 17 Oct 2022 16:00:43 +0200 Subject: [PATCH 57/60] - testcode/dohclient sets log identity to its name. --- doc/Changelog | 3 +++ testcode/dohclient.c | 1 + 2 files changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index 9c916c297..36192be81 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +17 October 2022: Wouter + - testcode/dohclient sets log identity to its name. + 14 October 2022: Wouter - Merge #768 from fobser: Arithmetic on a pointer to void is a GNU extension. diff --git a/testcode/dohclient.c b/testcode/dohclient.c index 82e522f90..64af699bc 100644 --- a/testcode/dohclient.c +++ b/testcode/dohclient.c @@ -573,6 +573,7 @@ int main(int argc, char** argv) #endif checklock_start(); log_init(0, 0, 0); + log_ident_set("dohclient"); h2_session = http2_session_create(); if(!h2_session) fatal_exit("out of memory"); From e9107907e5e037590b631d4a7f1a160394c95a53 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Tue, 18 Oct 2022 12:29:07 +0200 Subject: [PATCH 58/60] - Clarify the use of MAX_SENT_COUNT in the iterator code. --- doc/Changelog | 3 +++ iterator/iterator.c | 1 - iterator/iterator.h | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 36192be81..a30373f52 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +18 October 2022: George + - Clarify the use of MAX_SENT_COUNT in the iterator code. + 17 October 2022: Wouter - testcode/dohclient sets log identity to its name. diff --git a/iterator/iterator.c b/iterator/iterator.c index 2f3ad06fe..9c8d256d3 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -2276,7 +2276,6 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, iq->num_current_queries, iq->sent_count); /* Make sure that we haven't run away */ - /* FIXME: is this check even necessary? */ if(iq->referral_count > MAX_REFERRAL_COUNT) { verbose(VERB_QUERY, "request has exceeded the maximum " "number of referrrals with %d", iq->referral_count); diff --git a/iterator/iterator.h b/iterator/iterator.h index e35718cf3..18d3270a0 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h @@ -67,7 +67,8 @@ struct rbtree_type; #define MAX_RESTART_COUNT 11 /** max number of referrals. Makes sure resolver does not run away */ #define MAX_REFERRAL_COUNT 130 -/** max number of queries-sent-out. Make sure large NS set does not loop */ +/** max number of queries-sent-out. Make sure large NS set does not loop. + * Resets on query restarts (e.g., CNAMES) and referrals. */ #define MAX_SENT_COUNT 32 /** max number of queries for which to perform dnsseclameness detection, * (rrsigs missing detection) after that, just pick up that response */ From 17e5dd61312c28f7171c97d21d929e3e6d0ee249 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Fri, 21 Oct 2022 10:11:47 +0200 Subject: [PATCH 59/60] - Fix that cachedb does not store failures in the external cache. --- cachedb/cachedb.c | 9 + doc/Changelog | 3 + testdata/03-testbound.tdir/03-testbound.test | 9 + testdata/cachedb_servfail_cname.crpl | 181 +++++++++++++++++++ 4 files changed, 202 insertions(+) create mode 100644 testdata/cachedb_servfail_cname.crpl diff --git a/cachedb/cachedb.c b/cachedb/cachedb.c index b07743d85..6f987fc03 100644 --- a/cachedb/cachedb.c +++ b/cachedb/cachedb.c @@ -390,6 +390,15 @@ prep_data(struct module_qstate* qstate, struct sldns_buffer* buf) if(!qstate->return_msg || !qstate->return_msg->rep) return 0; + /* do not store failures like SERVFAIL in the cachedb, this avoids + * overwriting expired, valid, content with broken content. */ + if(FLAGS_GET_RCODE(qstate->return_msg->rep->flags) != + LDNS_RCODE_NOERROR && + FLAGS_GET_RCODE(qstate->return_msg->rep->flags) != + LDNS_RCODE_NXDOMAIN && + FLAGS_GET_RCODE(qstate->return_msg->rep->flags) != + LDNS_RCODE_YXDOMAIN) + return 0; /* We don't store the reply if its TTL is 0 unless serve-expired is * enabled. Such a reply won't be reusable and simply be a waste for * the backend. It's also compatible with the default behavior of diff --git a/doc/Changelog b/doc/Changelog index a30373f52..ee5c146bd 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +21 October 2022: Wouter + - Fix that cachedb does not store failures in the external cache. + 18 October 2022: George - Clarify the use of MAX_SENT_COUNT in the iterator code. diff --git a/testdata/03-testbound.tdir/03-testbound.test b/testdata/03-testbound.tdir/03-testbound.test index 00d362287..b9fdf214d 100644 --- a/testdata/03-testbound.tdir/03-testbound.test +++ b/testdata/03-testbound.tdir/03-testbound.test @@ -103,6 +103,15 @@ for input in $PRE/testdata/*.rpl $PRE/testdata/*.crpl; do fi fi + # detect if cachedb is needed + if echo $cleaninput | grep cachedb >/dev/null 2>&1; then + if grep "define USE_CACHEDB 1" $PRE/config.h >/dev/null 2>&1; then + : # CACHEDB is supported + else + continue + fi + fi + if test $do_valgrind = "yes"; then echo if (valgrind $VALGRIND_FLAGS $PRE/testbound -p $input >tmpout 2>&1;); then diff --git a/testdata/cachedb_servfail_cname.crpl b/testdata/cachedb_servfail_cname.crpl new file mode 100644 index 000000000..221f00d4d --- /dev/null +++ b/testdata/cachedb_servfail_cname.crpl @@ -0,0 +1,181 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + minimal-responses: no + ;serve-expired: yes + module-config: "cachedb iterator" + +cachedb: + backend: "testframe" + secret-seed: "testvalue" + +stub-zone: + name: "." + stub-addr: 193.0.14.129 +CONFIG_END + +SCENARIO_BEGIN Test cachedb store and servfail reply from cname. +; the servfail reply should not overwrite the cache contents. + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns2.example.com. +SECTION ADDITIONAL +ns2.example.com. IN A 1.2.3.5 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +foo.com. IN NS +SECTION AUTHORITY +foo.com. IN NS ns.example.com. +ENTRY_END +RANGE_END + +; ns2.example.com. +RANGE_BEGIN 0 20 + ADDRESS 1.2.3.5 +ENTRY_BEGIN +MATCH opcode qname qtype +REPLY QR AA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 10 IN A 1.2.3.4 +ENTRY_END +RANGE_END + +; ns2.example.com., now failing +RANGE_BEGIN 20 100 + ADDRESS 1.2.3.5 +ENTRY_BEGIN +MATCH opcode qname qtype +REPLY QR AA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 10 IN CNAME foo.example.com. +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +REPLY QR AA SERVFAIL +SECTION QUESTION +foo.example.com. IN A +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +REPLY QR AA SERVFAIL +SECTION QUESTION +ns2.example.com. IN A +SECTION ANSWER +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qname qtype +REPLY QR AA SERVFAIL +SECTION QUESTION +ns2.example.com. IN AAAA +SECTION ANSWER +ENTRY_END +RANGE_END + +; get and entry in cache, to make it expired. +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +; get the answer for it +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 10 IN A 1.2.3.4 +ENTRY_END + +; it is now expired +STEP 20 TIME_PASSES ELAPSE 20 + +; get a servfail in cache for the destination +STEP 30 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +foo.example.com. IN A +ENTRY_END + +STEP 40 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +foo.example.com. IN A +ENTRY_END + +; the query is now a CNAME to servfail. +; there is a valid, but expired, entry in cache. +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 10 IN CNAME foo.example.com. +ENTRY_END + +SCENARIO_END From f531faf16353a7dc27dc11f7e7f4de43a6b742bc Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Fri, 21 Oct 2022 15:49:56 +0200 Subject: [PATCH 60/60] Changelog entry for #767 - Merge #767 from jonathangray: consistently use IPv4/IPv6 in unbound.conf.5. --- doc/Changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Changelog b/doc/Changelog index ee5c146bd..32e7ae8ae 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +21 October 2022: George + - Merge #767 from jonathangray: consistently use IPv4/IPv6 in + unbound.conf.5. + 21 October 2022: Wouter - Fix that cachedb does not store failures in the external cache.