From 096314fef8a8f610abc29edd0a9e7e61b7ff5976 Mon Sep 17 00:00:00 2001 From: florian Date: Fri, 14 Jun 2024 07:45:44 +0000 Subject: [PATCH] sync to unbound 1.20.0 heavy lifting by sthen --- sbin/unwind/libunbound/config.h | 113 +- sbin/unwind/libunbound/iterator/iter_fwd.c | 119 +- sbin/unwind/libunbound/iterator/iter_fwd.h | 60 +- sbin/unwind/libunbound/iterator/iter_hints.c | 95 +- sbin/unwind/libunbound/iterator/iter_hints.h | 54 +- sbin/unwind/libunbound/iterator/iter_utils.c | 62 +- sbin/unwind/libunbound/iterator/iter_utils.h | 6 +- sbin/unwind/libunbound/iterator/iterator.c | 295 +- sbin/unwind/libunbound/libunbound/context.c | 8 + .../unwind/libunbound/libunbound/libunbound.c | 5 + sbin/unwind/libunbound/libunbound/libworker.c | 21 +- sbin/unwind/libunbound/services/authzone.c | 10 + sbin/unwind/libunbound/services/cache/dns.c | 52 +- sbin/unwind/libunbound/services/cache/infra.c | 170 +- sbin/unwind/libunbound/services/cache/infra.h | 28 + sbin/unwind/libunbound/services/cache/rrset.c | 87 + sbin/unwind/libunbound/services/cache/rrset.h | 31 + .../libunbound/services/listen_dnsport.c | 51 +- .../libunbound/services/listen_dnsport.h | 8 +- sbin/unwind/libunbound/services/localzone.c | 6 +- sbin/unwind/libunbound/services/mesh.c | 106 +- sbin/unwind/libunbound/services/mesh.h | 6 + sbin/unwind/libunbound/services/rpz.c | 342 +- sbin/unwind/libunbound/services/rpz.h | 8 + sbin/unwind/libunbound/services/view.h | 3 +- sbin/unwind/libunbound/util/config_file.c | 39 + sbin/unwind/libunbound/util/config_file.h | 19 + sbin/unwind/libunbound/util/configlexer.c | 6667 +++++++++-------- sbin/unwind/libunbound/util/configlexer.lex | 7 + sbin/unwind/libunbound/util/configparser.h | 253 +- sbin/unwind/libunbound/util/configparser.y | 83 +- sbin/unwind/libunbound/util/data/msgparse.h | 2 + sbin/unwind/libunbound/util/data/msgreply.c | 33 +- sbin/unwind/libunbound/util/module.c | 11 +- sbin/unwind/libunbound/util/module.h | 18 +- sbin/unwind/libunbound/util/net_help.c | 36 +- sbin/unwind/libunbound/util/netevent.c | 8 +- sbin/unwind/libunbound/util/netevent.h | 2 + sbin/unwind/libunbound/util/storage/lookup3.c | 2 +- sbin/unwind/libunbound/util/storage/lruhash.c | 34 + sbin/unwind/libunbound/util/storage/lruhash.h | 11 + .../unwind/libunbound/util/storage/slabhash.c | 7 + .../unwind/libunbound/util/storage/slabhash.h | 12 + sbin/unwind/libunbound/validator/val_utils.c | 40 +- sbin/unwind/libunbound/validator/validator.c | 36 +- 45 files changed, 5208 insertions(+), 3858 deletions(-) diff --git a/sbin/unwind/libunbound/config.h b/sbin/unwind/libunbound/config.h index 2c2843e9f05..807d3a1e78b 100644 --- a/sbin/unwind/libunbound/config.h +++ b/sbin/unwind/libunbound/config.h @@ -380,8 +380,8 @@ /* Define to 1 if you have the `memmove' function. */ #define HAVE_MEMMOVE 1 -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 +/* Define to 1 if you have the header file. */ +/* #undef HAVE_MINIX_CONFIG_H */ /* Define to 1 if you have the header file. */ #define HAVE_NETDB_H 1 @@ -588,6 +588,9 @@ /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 +/* Define to 1 if you have the header file. */ +#define HAVE_STDIO_H 1 + /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 @@ -690,6 +693,9 @@ /* Define to 1 if you have the header file. */ /* #undef HAVE_VFORK_H */ +/* Define to 1 if you have the header file. */ +#define HAVE_WCHAR_H 1 + /* Define to 1 if you have the header file. */ /* #undef HAVE_WINDOWS_H */ @@ -773,7 +779,7 @@ #define PACKAGE_NAME "unbound" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "unbound 1.19.3" +#define PACKAGE_STRING "unbound 1.20.0" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "unbound" @@ -782,7 +788,7 @@ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "1.19.3" +#define PACKAGE_VERSION "1.20.0" /* default pidfile location */ #define PIDFILE "" @@ -805,7 +811,7 @@ #define ROOT_CERT_FILE "/var/unbound/etc/icannbundle.pem" /* version number for resource files */ -#define RSRC_PACKAGE_VERSION 1,19,3,0 +#define RSRC_PACKAGE_VERSION 1,20,0,0 /* Directory to chdir to */ #define RUN_DIR "/var/unbound/etc" @@ -831,7 +837,9 @@ /* Define to 1 if libsodium supports sodium_set_misuse_handler */ /* #undef SODIUM_MISUSE_HANDLER */ -/* Define to 1 if you have the ANSI C header files. */ +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ #define STDC_HEADERS 1 /* use default strptime. */ @@ -927,21 +935,87 @@ #ifndef _ALL_SOURCE # define _ALL_SOURCE 1 #endif +/* Enable general extensions on macOS. */ +#ifndef _DARWIN_C_SOURCE +# define _DARWIN_C_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif -/* Enable threading extensions on Solaris. */ +/* Enable X/Open compliant socket functions that do not require linking + with -lxnet on HP-UX 11.11. */ +#ifndef _HPUX_ALT_XOPEN_SOCKET_API +# define _HPUX_ALT_XOPEN_SOCKET_API 1 +#endif +/* Identify the host operating system as Minix. + This macro does not affect the system headers' behavior. + A future release of Autoconf may stop defining this macro. */ +#ifndef _MINIX +/* # undef _MINIX */ +#endif +/* Enable general extensions on NetBSD. + Enable NetBSD compatibility extensions on Minix. */ +#ifndef _NETBSD_SOURCE +# define _NETBSD_SOURCE 1 +#endif +/* Enable OpenBSD compatibility extensions on NetBSD. + Oddly enough, this does nothing on OpenBSD. */ +#ifndef _OPENBSD_SOURCE +# define _OPENBSD_SOURCE 1 +#endif +/* Define to 1 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_SOURCE +/* # undef _POSIX_SOURCE */ +#endif +/* Define to 2 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_1_SOURCE +/* # undef _POSIX_1_SOURCE */ +#endif +/* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # define _POSIX_PTHREAD_SEMANTICS 1 #endif +/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ +#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ +# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ +#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ +# define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ +#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ +# define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ +#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ +# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ +#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ +# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ +#ifndef __STDC_WANT_LIB_EXT2__ +# define __STDC_WANT_LIB_EXT2__ 1 +#endif +/* Enable extensions specified by ISO/IEC 24747:2009. */ +#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ +# define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +#endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # define _TANDEM_SOURCE 1 #endif -/* Enable general extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# define __EXTENSIONS__ 1 +/* Enable X/Open extensions. Define to 500 only if necessary + to make mbstate_t available. */ +#ifndef _XOPEN_SOURCE +/* # undef _XOPEN_SOURCE */ #endif @@ -967,11 +1041,6 @@ `char[]'. */ #define YYTEXT_POINTER 1 -/* Enable large inode numbers on Mac OS X 10.5. */ -#ifndef _DARWIN_USE_64_BIT_INODE -# define _DARWIN_USE_64_BIT_INODE 1 -#endif - /* Number of bits in a file offset, on hosts where this is settable. */ /* #undef _FILE_OFFSET_BITS */ @@ -981,18 +1050,8 @@ /* Define for large files, on AIX-style hosts. */ /* #undef _LARGE_FILES */ -/* Define to 1 if on MINIX. */ -/* #undef _MINIX */ - /* Enable for compile on Minix */ -/* #undef _NETBSD_SOURCE */ - -/* Define to 2 if the system does not provide POSIX.1 features except with - this defined. */ -/* #undef _POSIX_1_SOURCE */ - -/* Define to 1 if you need to in order for `stat' and other things to work. */ -/* #undef _POSIX_SOURCE */ +#define _NETBSD_SOURCE 1 /* defined to use gcc ansi snprintf and sscanf that understands %lld when compiled for windows. */ @@ -1034,7 +1093,7 @@ /* Define to `long int' if does not define. */ /* #undef off_t */ -/* Define to `int' if does not define. */ +/* Define as a signed integer type capable of holding a process identifier. */ /* #undef pid_t */ /* Define to 'int' if not defined */ diff --git a/sbin/unwind/libunbound/iterator/iter_fwd.c b/sbin/unwind/libunbound/iterator/iter_fwd.c index c4b2411297e..b9d42553a8b 100644 --- a/sbin/unwind/libunbound/iterator/iter_fwd.c +++ b/sbin/unwind/libunbound/iterator/iter_fwd.c @@ -71,6 +71,7 @@ forwards_create(void) sizeof(struct iter_forwards)); if(!fwd) return NULL; + lock_rw_init(&fwd->lock); return fwd; } @@ -100,6 +101,7 @@ forwards_delete(struct iter_forwards* fwd) { if(!fwd) return; + lock_rw_destroy(&fwd->lock); fwd_del_tree(fwd); free(fwd); } @@ -332,45 +334,64 @@ make_stub_holes(struct iter_forwards* fwd, struct config_file* cfg) int forwards_apply_cfg(struct iter_forwards* fwd, struct config_file* cfg) { + if(fwd->tree) { + lock_unprotect(&fwd->lock, fwd->tree); + } fwd_del_tree(fwd); fwd->tree = rbtree_create(fwd_cmp); if(!fwd->tree) return 0; + lock_protect(&fwd->lock, fwd->tree, sizeof(*fwd->tree)); + lock_rw_wrlock(&fwd->lock); /* read forward zones */ - if(!read_forwards(fwd, cfg)) + if(!read_forwards(fwd, cfg)) { + lock_rw_unlock(&fwd->lock); return 0; - if(!make_stub_holes(fwd, cfg)) + } + if(!make_stub_holes(fwd, cfg)) { + lock_rw_unlock(&fwd->lock); return 0; + } fwd_init_parents(fwd); + lock_rw_unlock(&fwd->lock); return 1; } struct delegpt* -forwards_find(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass) +forwards_find(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass, + int nolock) { - rbnode_type* res = NULL; + struct iter_forward_zone* res; struct iter_forward_zone key; + int has_dp; key.node.key = &key; key.dclass = qclass; key.name = qname; key.namelabs = dname_count_size_labels(qname, &key.namelen); - res = rbtree_search(fwd->tree, &key); - if(res) return ((struct iter_forward_zone*)res)->dp; - return NULL; + /* lock_() calls are macros that could be nothing, surround in {} */ + if(!nolock) { lock_rw_rdlock(&fwd->lock); } + res = (struct iter_forward_zone*)rbtree_search(fwd->tree, &key); + has_dp = res && res->dp; + if(!has_dp && !nolock) { lock_rw_unlock(&fwd->lock); } + return has_dp?res->dp:NULL; } struct delegpt* -forwards_lookup(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass) +forwards_lookup(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass, + int nolock) { /* lookup the forward zone in the tree */ rbnode_type* res = NULL; struct iter_forward_zone *result; struct iter_forward_zone key; + int has_dp; key.node.key = &key; key.dclass = qclass; key.name = qname; key.namelabs = dname_count_size_labels(qname, &key.namelen); + /* lock_() calls are macros that could be nothing, surround in {} */ + if(!nolock) { lock_rw_rdlock(&fwd->lock); } if(rbtree_find_less_equal(fwd->tree, &key, &res)) { /* exact */ result = (struct iter_forward_zone*)res; @@ -378,8 +399,10 @@ forwards_lookup(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass) /* smaller element (or no element) */ int m; result = (struct iter_forward_zone*)res; - if(!result || result->dclass != qclass) + if(!result || result->dclass != qclass) { + if(!nolock) { lock_rw_unlock(&fwd->lock); } return NULL; + } /* count number of labels matched */ (void)dname_lab_cmp(result->name, result->namelabs, key.name, key.namelabs, &m); @@ -389,20 +412,22 @@ forwards_lookup(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass) result = result->parent; } } - if(result) - return result->dp; - return NULL; + has_dp = result && result->dp; + if(!has_dp && !nolock) { lock_rw_unlock(&fwd->lock); } + return has_dp?result->dp:NULL; } struct delegpt* -forwards_lookup_root(struct iter_forwards* fwd, uint16_t qclass) +forwards_lookup_root(struct iter_forwards* fwd, uint16_t qclass, int nolock) { uint8_t root = 0; - return forwards_lookup(fwd, &root, qclass); + return forwards_lookup(fwd, &root, qclass, nolock); } -int -forwards_next_root(struct iter_forwards* fwd, uint16_t* dclass) +/* Finds next root item in forwards lookup tree. + * Caller needs to handle locking of the forwards structure. */ +static int +next_root_locked(struct iter_forwards* fwd, uint16_t* dclass) { struct iter_forward_zone key; rbnode_type* n; @@ -419,7 +444,7 @@ forwards_next_root(struct iter_forwards* fwd, uint16_t* dclass) } /* root not first item? search for higher items */ *dclass = p->dclass + 1; - return forwards_next_root(fwd, dclass); + return next_root_locked(fwd, dclass); } /* find class n in tree, we may get a direct hit, or if we don't * this is the last item of the previous class so rbtree_next() takes @@ -447,10 +472,21 @@ forwards_next_root(struct iter_forwards* fwd, uint16_t* dclass) } /* not a root node, return next higher item */ *dclass = p->dclass+1; - return forwards_next_root(fwd, dclass); + return next_root_locked(fwd, dclass); } } +int +forwards_next_root(struct iter_forwards* fwd, uint16_t* dclass, int nolock) +{ + int ret; + /* lock_() calls are macros that could be nothing, surround in {} */ + if(!nolock) { lock_rw_rdlock(&fwd->lock); } + ret = next_root_locked(fwd, dclass); + if(!nolock) { lock_rw_unlock(&fwd->lock); } + return ret; +} + size_t forwards_get_mem(struct iter_forwards* fwd) { @@ -458,10 +494,12 @@ forwards_get_mem(struct iter_forwards* fwd) size_t s; if(!fwd) return 0; + lock_rw_rdlock(&fwd->lock); s = sizeof(*fwd) + sizeof(*fwd->tree); RBTREE_FOR(p, struct iter_forward_zone*, fwd->tree) { s += sizeof(*p) + p->namelen + delegpt_get_mem(p->dp); } + lock_rw_unlock(&fwd->lock); return s; } @@ -477,49 +515,78 @@ fwd_zone_find(struct iter_forwards* fwd, uint16_t c, uint8_t* nm) } int -forwards_add_zone(struct iter_forwards* fwd, uint16_t c, struct delegpt* dp) +forwards_add_zone(struct iter_forwards* fwd, uint16_t c, struct delegpt* dp, + int nolock) { struct iter_forward_zone *z; + /* lock_() calls are macros that could be nothing, surround in {} */ + if(!nolock) { lock_rw_wrlock(&fwd->lock); } if((z=fwd_zone_find(fwd, c, dp->name)) != NULL) { (void)rbtree_delete(fwd->tree, &z->node); fwd_zone_free(z); } - if(!forwards_insert(fwd, c, dp)) + if(!forwards_insert(fwd, c, dp)) { + if(!nolock) { lock_rw_unlock(&fwd->lock); } return 0; + } fwd_init_parents(fwd); + if(!nolock) { lock_rw_unlock(&fwd->lock); } return 1; } void -forwards_delete_zone(struct iter_forwards* fwd, uint16_t c, uint8_t* nm) +forwards_delete_zone(struct iter_forwards* fwd, uint16_t c, uint8_t* nm, + int nolock) { struct iter_forward_zone *z; - if(!(z=fwd_zone_find(fwd, c, nm))) + /* lock_() calls are macros that could be nothing, surround in {} */ + if(!nolock) { lock_rw_wrlock(&fwd->lock); } + if(!(z=fwd_zone_find(fwd, c, nm))) { + if(!nolock) { lock_rw_unlock(&fwd->lock); } return; /* nothing to do */ + } (void)rbtree_delete(fwd->tree, &z->node); fwd_zone_free(z); fwd_init_parents(fwd); + if(!nolock) { lock_rw_unlock(&fwd->lock); } } int -forwards_add_stub_hole(struct iter_forwards* fwd, uint16_t c, uint8_t* nm) +forwards_add_stub_hole(struct iter_forwards* fwd, uint16_t c, uint8_t* nm, + int nolock) { + /* lock_() calls are macros that could be nothing, surround in {} */ + if(!nolock) { lock_rw_wrlock(&fwd->lock); } + if(fwd_zone_find(fwd, c, nm) != NULL) { + if(!nolock) { lock_rw_unlock(&fwd->lock); } + return 1; /* already a stub zone there */ + } if(!fwd_add_stub_hole(fwd, c, nm)) { + if(!nolock) { lock_rw_unlock(&fwd->lock); } return 0; } fwd_init_parents(fwd); + if(!nolock) { lock_rw_unlock(&fwd->lock); } return 1; } void -forwards_delete_stub_hole(struct iter_forwards* fwd, uint16_t c, uint8_t* nm) +forwards_delete_stub_hole(struct iter_forwards* fwd, uint16_t c, + uint8_t* nm, int nolock) { struct iter_forward_zone *z; - if(!(z=fwd_zone_find(fwd, c, nm))) + /* lock_() calls are macros that could be nothing, surround in {} */ + if(!nolock) { lock_rw_wrlock(&fwd->lock); } + if(!(z=fwd_zone_find(fwd, c, nm))) { + if(!nolock) { lock_rw_unlock(&fwd->lock); } return; /* nothing to do */ - if(z->dp != NULL) + } + if(z->dp != NULL) { + if(!nolock) { lock_rw_unlock(&fwd->lock); } return; /* not a stub hole */ + } (void)rbtree_delete(fwd->tree, &z->node); fwd_zone_free(z); fwd_init_parents(fwd); + if(!nolock) { lock_rw_unlock(&fwd->lock); } } diff --git a/sbin/unwind/libunbound/iterator/iter_fwd.h b/sbin/unwind/libunbound/iterator/iter_fwd.h index e90b74c16a5..4527d899c79 100644 --- a/sbin/unwind/libunbound/iterator/iter_fwd.h +++ b/sbin/unwind/libunbound/iterator/iter_fwd.h @@ -43,6 +43,7 @@ #ifndef ITERATOR_ITER_FWD_H #define ITERATOR_ITER_FWD_H #include "util/rbtree.h" +#include "util/locks.h" struct config_file; struct delegpt; @@ -50,6 +51,11 @@ struct delegpt; * Iterator forward zones structure */ struct iter_forwards { + /** lock on the forwards tree. + * When grabbing both this lock and the anchors.lock, this lock + * is grabbed first. When grabbing both this lock and the hints.lock + * this lock is grabbed first. */ + lock_rw_type lock; /** * Zones are stored in this tree. Sort order is specially chosen. * first sorted on qclass. Then on dname in nsec-like order, so that @@ -106,47 +112,65 @@ int forwards_apply_cfg(struct iter_forwards* fwd, struct config_file* cfg); /** * Find forward zone exactly by name + * The return value is contents of the forwards structure. + * Caller should lock and unlock a readlock on the forwards structure if nolock + * is set. + * Otherwise caller should unlock the readlock on the forwards structure if a + * value was returned. * @param fwd: forward storage. * @param qname: The qname of the query. * @param qclass: The qclass of the query. + * @param nolock: Skip locking, locking is handled by the caller. * @return: A delegation point or null. */ struct delegpt* forwards_find(struct iter_forwards* fwd, uint8_t* qname, - uint16_t qclass); + uint16_t qclass, int nolock); /** * Find forward zone information * For this qname/qclass find forward zone information, returns delegation * point with server names and addresses, or NULL if no forwarding is needed. + * The return value is contents of the forwards structure. + * Caller should lock and unlock a readlock on the forwards structure if nolock + * is set. + * Otherwise caller should unlock the readlock on the forwards structure if a + * value was returned. * * @param fwd: forward storage. * @param qname: The qname of the query. * @param qclass: The qclass of the query. + * @param nolock: Skip locking, locking is handled by the caller. * @return: A delegation point if the query has to be forwarded to that list, * otherwise null. */ -struct delegpt* forwards_lookup(struct iter_forwards* fwd, - uint8_t* qname, uint16_t qclass); +struct delegpt* forwards_lookup(struct iter_forwards* fwd, + uint8_t* qname, uint16_t qclass, int nolock); /** * Same as forwards_lookup, but for the root only * @param fwd: forward storage. * @param qclass: The qclass of the query. + * @param nolock: Skip locking, locking is handled by the caller. * @return: A delegation point if root forward exists, otherwise null. */ -struct delegpt* forwards_lookup_root(struct iter_forwards* fwd, - uint16_t qclass); +struct delegpt* forwards_lookup_root(struct iter_forwards* fwd, + uint16_t qclass, int nolock); /** * Find next root item in forwards lookup tree. + * Handles its own locking unless nolock is set. In that case the caller + * should lock and unlock a readlock on the forwards structure. * @param fwd: the forward storage * @param qclass: class to look at next, or higher. + * @param nolock: Skip locking, locking is handled by the caller. * @return false if none found, or if true stored in qclass. */ -int forwards_next_root(struct iter_forwards* fwd, uint16_t* qclass); +int forwards_next_root(struct iter_forwards* fwd, uint16_t* qclass, + int nolock); /** * Get memory in use by forward storage + * Locks and unlocks the structure. * @param fwd: forward storage. * @return bytes in use */ @@ -158,42 +182,56 @@ int fwd_cmp(const void* k1, const void* k2); /** * Add zone to forward structure. For external use since it recalcs * the tree parents. + * Handles its own locking unless nolock is set. In that case the caller + * should lock and unlock a writelock on the forwards structure. * @param fwd: the forward data structure * @param c: class of zone * @param dp: delegation point with name and target nameservers for new * forward zone. malloced. + * @param nolock: Skip locking, locking is handled by the caller. * @return false on failure (out of memory); */ -int forwards_add_zone(struct iter_forwards* fwd, uint16_t c, - struct delegpt* dp); +int forwards_add_zone(struct iter_forwards* fwd, uint16_t c, + struct delegpt* dp, int nolock); /** * Remove zone from forward structure. For external use since it * recalcs the tree parents. + * Handles its own locking unless nolock is set. In that case the caller + * should lock and unlock a writelock on the forwards structure. * @param fwd: the forward data structure * @param c: class of zone * @param nm: name of zone (in uncompressed wireformat). + * @param nolock: Skip locking, locking is handled by the caller. */ -void forwards_delete_zone(struct iter_forwards* fwd, uint16_t c, uint8_t* nm); +void forwards_delete_zone(struct iter_forwards* fwd, uint16_t c, + uint8_t* nm, int nolock); /** * Add stub hole (empty entry in forward table, that makes resolution skip * a forward-zone because the stub zone should override the forward zone). * Does not add one if not necessary. + * Handles its own locking unless nolock is set. In that case the caller + * should lock and unlock a writelock on the forwards structure. * @param fwd: the forward data structure * @param c: class of zone * @param nm: name of zone (in uncompressed wireformat). + * @param nolock: Skip locking, locking is handled by the caller. * @return false on failure (out of memory); */ -int forwards_add_stub_hole(struct iter_forwards* fwd, uint16_t c, uint8_t* nm); +int forwards_add_stub_hole(struct iter_forwards* fwd, uint16_t c, + uint8_t* nm, int nolock); /** * Remove stub hole, if one exists. + * Handles its own locking unless nolock is set. In that case the caller + * should lock and unlock a writelock on the forwards structure. * @param fwd: the forward data structure * @param c: class of zone * @param nm: name of zone (in uncompressed wireformat). + * @param nolock: Skip locking, locking is handled by the caller. */ void forwards_delete_stub_hole(struct iter_forwards* fwd, uint16_t c, - uint8_t* nm); + uint8_t* nm, int nolock); #endif /* ITERATOR_ITER_FWD_H */ diff --git a/sbin/unwind/libunbound/iterator/iter_hints.c b/sbin/unwind/libunbound/iterator/iter_hints.c index 4f86f3676a2..8b168271c7f 100644 --- a/sbin/unwind/libunbound/iterator/iter_hints.c +++ b/sbin/unwind/libunbound/iterator/iter_hints.c @@ -57,6 +57,8 @@ hints_create(void) sizeof(struct iter_hints)); if(!hints) return NULL; + lock_rw_init(&hints->lock); + lock_protect(&hints->lock, &hints->tree, sizeof(hints->tree)); return hints; } @@ -83,6 +85,7 @@ hints_delete(struct iter_hints* hints) { if(!hints) return; + lock_rw_destroy(&hints->lock); hints_del_tree(hints); free(hints); } @@ -438,47 +441,70 @@ read_root_hints_list(struct iter_hints* hints, struct config_file* cfg) int hints_apply_cfg(struct iter_hints* hints, struct config_file* cfg) { + int nolock = 1; + lock_rw_wrlock(&hints->lock); hints_del_tree(hints); name_tree_init(&hints->tree); - + /* read root hints */ - if(!read_root_hints_list(hints, cfg)) + if(!read_root_hints_list(hints, cfg)) { + lock_rw_unlock(&hints->lock); return 0; + } /* read stub hints */ - if(!read_stubs(hints, cfg)) + if(!read_stubs(hints, cfg)) { + lock_rw_unlock(&hints->lock); return 0; + } /* use fallback compiletime root hints */ - if(!hints_lookup_root(hints, LDNS_RR_CLASS_IN)) { + if(!hints_find_root(hints, LDNS_RR_CLASS_IN, nolock)) { struct delegpt* dp = compile_time_root_prime(cfg->do_ip4, cfg->do_ip6); verbose(VERB_ALGO, "no config, using builtin root hints."); - if(!dp) + if(!dp) { + lock_rw_unlock(&hints->lock); return 0; - if(!hints_insert(hints, LDNS_RR_CLASS_IN, dp, 0)) + } + if(!hints_insert(hints, LDNS_RR_CLASS_IN, dp, 0)) { + lock_rw_unlock(&hints->lock); return 0; + } } name_tree_init_parents(&hints->tree); + lock_rw_unlock(&hints->lock); return 1; } -struct delegpt* -hints_lookup_root(struct iter_hints* hints, uint16_t qclass) +struct delegpt* +hints_find(struct iter_hints* hints, uint8_t* qname, uint16_t qclass, + int nolock) { - uint8_t rootlab = 0; struct iter_hints_stub *stub; + size_t len; + int has_dp; + int labs = dname_count_size_labels(qname, &len); + /* lock_() calls are macros that could be nothing, surround in {} */ + if(!nolock) { lock_rw_rdlock(&hints->lock); } stub = (struct iter_hints_stub*)name_tree_find(&hints->tree, - &rootlab, 1, 1, qclass); - if(!stub) - return NULL; - return stub->dp; + qname, len, labs, qclass); + has_dp = stub && stub->dp; + if(!has_dp && !nolock) { lock_rw_unlock(&hints->lock); } + return has_dp?stub->dp:NULL; +} + +struct delegpt* +hints_find_root(struct iter_hints* hints, uint16_t qclass, int nolock) +{ + uint8_t rootlab = 0; + return hints_find(hints, &rootlab, qclass, nolock); } struct iter_hints_stub* -hints_lookup_stub(struct iter_hints* hints, uint8_t* qname, - uint16_t qclass, struct delegpt* cache_dp) +hints_lookup_stub(struct iter_hints* hints, uint8_t* qname, + uint16_t qclass, struct delegpt* cache_dp, int nolock) { size_t len; int labs; @@ -486,14 +512,20 @@ hints_lookup_stub(struct iter_hints* hints, uint8_t* qname, /* first lookup the stub */ labs = dname_count_size_labels(qname, &len); + /* lock_() calls are macros that could be nothing, surround in {} */ + if(!nolock) { lock_rw_rdlock(&hints->lock); } r = (struct iter_hints_stub*)name_tree_lookup(&hints->tree, qname, len, labs, qclass); - if(!r) return NULL; + if(!r) { + if(!nolock) { lock_rw_unlock(&hints->lock); } + return NULL; + } /* If there is no cache (root prime situation) */ if(cache_dp == NULL) { if(r->dp->namelabs != 1) return r; /* no cache dp, use any non-root stub */ + if(!nolock) { lock_rw_unlock(&hints->lock); } return NULL; } @@ -510,12 +542,18 @@ hints_lookup_stub(struct iter_hints* hints, uint8_t* qname, if(dname_strict_subdomain(r->dp->name, r->dp->namelabs, cache_dp->name, cache_dp->namelabs)) return r; /* need to prime this stub */ + if(!nolock) { lock_rw_unlock(&hints->lock); } return NULL; } -int hints_next_root(struct iter_hints* hints, uint16_t* qclass) +int hints_next_root(struct iter_hints* hints, uint16_t* qclass, int nolock) { - return name_tree_next_root(&hints->tree, qclass); + int ret; + /* lock_() calls are macros that could be nothing, surround in {} */ + if(!nolock) { lock_rw_rdlock(&hints->lock); } + ret = name_tree_next_root(&hints->tree, qclass); + if(!nolock) { lock_rw_unlock(&hints->lock); } + return ret; } size_t @@ -524,39 +562,52 @@ hints_get_mem(struct iter_hints* hints) size_t s; struct iter_hints_stub* p; if(!hints) return 0; + lock_rw_rdlock(&hints->lock); s = sizeof(*hints); RBTREE_FOR(p, struct iter_hints_stub*, &hints->tree) { s += sizeof(*p) + delegpt_get_mem(p->dp); } + lock_rw_unlock(&hints->lock); return s; } int hints_add_stub(struct iter_hints* hints, uint16_t c, struct delegpt* dp, - int noprime) + int noprime, int nolock) { struct iter_hints_stub *z; + /* lock_() calls are macros that could be nothing, surround in {} */ + if(!nolock) { lock_rw_wrlock(&hints->lock); } if((z=(struct iter_hints_stub*)name_tree_find(&hints->tree, dp->name, dp->namelen, dp->namelabs, c)) != NULL) { (void)rbtree_delete(&hints->tree, &z->node); hints_stub_free(z); } - if(!hints_insert(hints, c, dp, noprime)) + if(!hints_insert(hints, c, dp, noprime)) { + if(!nolock) { lock_rw_unlock(&hints->lock); } return 0; + } name_tree_init_parents(&hints->tree); + if(!nolock) { lock_rw_unlock(&hints->lock); } return 1; } void -hints_delete_stub(struct iter_hints* hints, uint16_t c, uint8_t* nm) +hints_delete_stub(struct iter_hints* hints, uint16_t c, uint8_t* nm, + int nolock) { struct iter_hints_stub *z; size_t len; int labs = dname_count_size_labels(nm, &len); + /* lock_() calls are macros that could be nothing, surround in {} */ + if(!nolock) { lock_rw_wrlock(&hints->lock); } if(!(z=(struct iter_hints_stub*)name_tree_find(&hints->tree, - nm, len, labs, c))) + nm, len, labs, c))) { + if(!nolock) { lock_rw_unlock(&hints->lock); } return; /* nothing to do */ + } (void)rbtree_delete(&hints->tree, &z->node); hints_stub_free(z); name_tree_init_parents(&hints->tree); + if(!nolock) { lock_rw_unlock(&hints->lock); } } diff --git a/sbin/unwind/libunbound/iterator/iter_hints.h b/sbin/unwind/libunbound/iterator/iter_hints.h index 06b4b9667d1..26de323c9e9 100644 --- a/sbin/unwind/libunbound/iterator/iter_hints.h +++ b/sbin/unwind/libunbound/iterator/iter_hints.h @@ -43,6 +43,7 @@ #ifndef ITERATOR_ITER_HINTS_H #define ITERATOR_ITER_HINTS_H #include "util/storage/dnstree.h" +#include "util/locks.h" struct iter_env; struct config_file; struct delegpt; @@ -51,6 +52,10 @@ struct delegpt; * Iterator hints structure */ struct iter_hints { + /** lock on the forwards tree. + * When grabbing both this lock and the anchors.lock, this lock + * is grabbed first. */ + lock_rw_type lock; /** * Hints are stored in this tree. Sort order is specially chosen. * first sorted on qclass. Then on dname in nsec-like order, so that @@ -95,42 +100,70 @@ void hints_delete(struct iter_hints* hints); int hints_apply_cfg(struct iter_hints* hints, struct config_file* cfg); /** - * Find root hints for the given class. + * Find hints for the given class. + * The return value is contents of the hints structure. + * Caller should lock and unlock a readlock on the hints structure if nolock + * is set. + * Otherwise caller should unlock the readlock on the hints structure if a + * value was returned. * @param hints: hint storage. + * @param qname: the qname that generated the delegation point. * @param qclass: class for which root hints are requested. host order. + * @param nolock: Skip locking, locking is handled by the caller. * @return: NULL if no hints, or a ptr to stored hints. */ -struct delegpt* hints_lookup_root(struct iter_hints* hints, uint16_t qclass); +struct delegpt* hints_find(struct iter_hints* hints, uint8_t* qname, + uint16_t qclass, int nolock); + +/** + * Same as hints_lookup, but for the root only. + * @param hints: hint storage. + * @param qclass: class for which root hints are requested. host order. + * @param nolock: Skip locking, locking is handled by the caller. + * @return: NULL if no hints, or a ptr to stored hints. + */ +struct delegpt* hints_find_root(struct iter_hints* hints, + uint16_t qclass, int nolock); /** * Find next root hints (to cycle through all root hints). + * Handles its own locking unless nolock is set. In that case the caller + * should lock and unlock a readlock on the hints structure. * @param hints: hint storage * @param qclass: class for which root hints are sought. * 0 means give the first available root hints class. * x means, give class x or a higher class if any. * returns the found class in this variable. + * @param nolock: Skip locking, locking is handled by the caller. * @return true if a root hint class is found. * false if not root hint class is found (qclass may have been changed). */ -int hints_next_root(struct iter_hints* hints, uint16_t* qclass); +int hints_next_root(struct iter_hints* hints, uint16_t* qclass, int nolock); /** * Given a qname/qclass combination, and the delegation point from the cache * for this qname/qclass, determine if this combination indicates that a * stub hint exists and must be primed. + * The return value is contents of the hints structure. + * Caller should lock and unlock a readlock on the hints structure if nolock + * is set. + * Otherwise caller should unlock the readlock on the hints structure if a + * value was returned. * * @param hints: hint storage. * @param qname: The qname that generated the delegation point. * @param qclass: The qclass that generated the delegation point. * @param dp: The cache generated delegation point. + * @param nolock: Skip locking, locking is handled by the caller. * @return: A priming delegation point if there is a stub hint that must * be primed, otherwise null. */ -struct iter_hints_stub* hints_lookup_stub(struct iter_hints* hints, - uint8_t* qname, uint16_t qclass, struct delegpt* dp); +struct iter_hints_stub* hints_lookup_stub(struct iter_hints* hints, + uint8_t* qname, uint16_t qclass, struct delegpt* dp, int nolock); /** * Get memory in use by hints + * Locks and unlocks the structure. * @param hints: hint storage. * @return bytes in use */ @@ -139,23 +172,30 @@ size_t hints_get_mem(struct iter_hints* hints); /** * Add stub to hints structure. For external use since it recalcs * the tree parents. + * Handles its own locking unless nolock is set. In that case the caller + * should lock and unlock a writelock on the hints structure. * @param hints: the hints data structure * @param c: class of zone * @param dp: delegation point with name and target nameservers for new * hints stub. malloced. * @param noprime: set noprime option to true or false on new hint stub. + * @param nolock: Skip locking, locking is handled by the caller. * @return false on failure (out of memory); */ int hints_add_stub(struct iter_hints* hints, uint16_t c, struct delegpt* dp, - int noprime); + int noprime, int nolock); /** * Remove stub from hints structure. For external use since it * recalcs the tree parents. + * Handles its own locking unless nolock is set. In that case the caller + * should lock and unlock a writelock on the hints structure. * @param hints: the hints data structure * @param c: class of stub zone * @param nm: name of stub zone (in uncompressed wireformat). + * @param nolock: Skip locking, locking is handled by the caller. */ -void hints_delete_stub(struct iter_hints* hints, uint16_t c, uint8_t* nm); +void hints_delete_stub(struct iter_hints* hints, uint16_t c, + uint8_t* nm, int nolock); #endif /* ITERATOR_ITER_HINTS_H */ diff --git a/sbin/unwind/libunbound/iterator/iter_utils.c b/sbin/unwind/libunbound/iterator/iter_utils.c index 10a8ec3eb08..f291178d231 100644 --- a/sbin/unwind/libunbound/iterator/iter_utils.c +++ b/sbin/unwind/libunbound/iterator/iter_utils.c @@ -1284,8 +1284,17 @@ iter_get_next_root(struct iter_hints* hints, struct iter_forwards* fwd, uint16_t* c) { uint16_t c1 = *c, c2 = *c; - int r1 = hints_next_root(hints, &c1); - int r2 = forwards_next_root(fwd, &c2); + int r1, r2; + int nolock = 1; + + /* prelock both forwards and hints for atomic read. */ + lock_rw_rdlock(&fwd->lock); + lock_rw_rdlock(&hints->lock); + r1 = hints_next_root(hints, &c1, nolock); + r2 = forwards_next_root(fwd, &c2, nolock); + lock_rw_unlock(&fwd->lock); + lock_rw_unlock(&hints->lock); + if(!r1 && !r2) /* got none, end of list */ return 0; else if(!r1) /* got one, return that */ @@ -1450,15 +1459,21 @@ int iter_dp_cangodown(struct query_info* qinfo, struct delegpt* dp) int iter_stub_fwd_no_cache(struct module_qstate *qstate, struct query_info *qinf, - uint8_t** retdpname, size_t* retdpnamelen) + uint8_t** retdpname, size_t* retdpnamelen, uint8_t* dpname_storage, + size_t dpname_storage_len) { struct iter_hints_stub *stub; struct delegpt *dp; + int nolock = 1; /* Check for stub. */ + /* Lock both forwards and hints for atomic read. */ + lock_rw_rdlock(&qstate->env->fwds->lock); + lock_rw_rdlock(&qstate->env->hints->lock); stub = hints_lookup_stub(qstate->env->hints, qinf->qname, - qinf->qclass, NULL); - dp = forwards_lookup(qstate->env->fwds, qinf->qname, qinf->qclass); + qinf->qclass, NULL, nolock); + dp = forwards_lookup(qstate->env->fwds, qinf->qname, qinf->qclass, + nolock); /* see if forward or stub is more pertinent */ if(stub && stub->dp && dp) { @@ -1472,7 +1487,9 @@ iter_stub_fwd_no_cache(struct module_qstate *qstate, struct query_info *qinf, /* check stub */ if (stub != NULL && stub->dp != NULL) { - if(stub->dp->no_cache) { + int stub_no_cache = stub->dp->no_cache; + lock_rw_unlock(&qstate->env->fwds->lock); + if(stub_no_cache) { char qname[255+1]; char dpname[255+1]; dname_str(qinf->qname, qname); @@ -1480,15 +1497,27 @@ iter_stub_fwd_no_cache(struct module_qstate *qstate, struct query_info *qinf, verbose(VERB_ALGO, "stub for %s %s has no_cache", qname, dpname); } if(retdpname) { - *retdpname = stub->dp->name; + if(stub->dp->namelen > dpname_storage_len) { + verbose(VERB_ALGO, "no cache stub dpname too long"); + lock_rw_unlock(&qstate->env->hints->lock); + *retdpname = NULL; + *retdpnamelen = 0; + return stub_no_cache; + } + memmove(dpname_storage, stub->dp->name, + stub->dp->namelen); + *retdpname = dpname_storage; *retdpnamelen = stub->dp->namelen; } - return (stub->dp->no_cache); + lock_rw_unlock(&qstate->env->hints->lock); + return stub_no_cache; } /* Check for forward. */ if (dp) { - if(dp->no_cache) { + int dp_no_cache = dp->no_cache; + lock_rw_unlock(&qstate->env->hints->lock); + if(dp_no_cache) { char qname[255+1]; char dpname[255+1]; dname_str(qinf->qname, qname); @@ -1496,11 +1525,22 @@ iter_stub_fwd_no_cache(struct module_qstate *qstate, struct query_info *qinf, verbose(VERB_ALGO, "forward for %s %s has no_cache", qname, dpname); } if(retdpname) { - *retdpname = dp->name; + if(dp->namelen > dpname_storage_len) { + verbose(VERB_ALGO, "no cache dpname too long"); + lock_rw_unlock(&qstate->env->fwds->lock); + *retdpname = NULL; + *retdpnamelen = 0; + return dp_no_cache; + } + memmove(dpname_storage, dp->name, dp->namelen); + *retdpname = dpname_storage; *retdpnamelen = dp->namelen; } - return (dp->no_cache); + lock_rw_unlock(&qstate->env->fwds->lock); + return dp_no_cache; } + lock_rw_unlock(&qstate->env->fwds->lock); + lock_rw_unlock(&qstate->env->hints->lock); if(retdpname) { *retdpname = NULL; *retdpnamelen = 0; diff --git a/sbin/unwind/libunbound/iterator/iter_utils.h b/sbin/unwind/libunbound/iterator/iter_utils.h index fa860fa682f..4024629e686 100644 --- a/sbin/unwind/libunbound/iterator/iter_utils.h +++ b/sbin/unwind/libunbound/iterator/iter_utils.h @@ -407,10 +407,14 @@ int iter_dp_cangodown(struct query_info* qinfo, struct delegpt* dp); * Used for NXDOMAIN checks, above that it is an nxdomain from a * different server and zone. You can pass NULL to not get it. * @param retdpnamelen: returns the length of the dpname. + * @param dpname_storage: this is where the dpname buf is stored, if any. + * So that caller can manage the buffer. + * @param dpname_storage_len: size of dpname_storage buffer. * @return true if no_cache is set in stub or fwd. */ int iter_stub_fwd_no_cache(struct module_qstate *qstate, - struct query_info *qinf, uint8_t** retdpname, size_t* retdpnamelen); + struct query_info *qinf, uint8_t** retdpname, size_t* retdpnamelen, + uint8_t* dpname_storage, size_t dpname_storage_len); /** * Set support for IP4 and IP6 depending on outgoing interfaces diff --git a/sbin/unwind/libunbound/iterator/iterator.c b/sbin/unwind/libunbound/iterator/iterator.c index e9fea544aa6..5732a414857 100644 --- a/sbin/unwind/libunbound/iterator/iterator.c +++ b/sbin/unwind/libunbound/iterator/iterator.c @@ -52,6 +52,7 @@ #include "iterator/iter_priv.h" #include "validator/val_neg.h" #include "services/cache/dns.h" +#include "services/cache/rrset.h" #include "services/cache/infra.h" #include "services/authzone.h" #include "util/module.h" @@ -678,30 +679,40 @@ errinf_reply(struct module_qstate* qstate, struct iter_qstate* iq) /** see if last resort is possible - does config allow queries to parent */ static int -can_have_last_resort(struct module_env* env, uint8_t* nm, size_t nmlen, - uint16_t qclass, struct delegpt** retdp) +can_have_last_resort(struct module_env* env, uint8_t* nm, size_t ATTR_UNUSED(nmlen), + uint16_t qclass, int* have_dp, struct delegpt** retdp, + struct regional* region) { - struct delegpt* fwddp; - struct iter_hints_stub* stub; - int labs = dname_count_labels(nm); + struct delegpt* dp = NULL; + int nolock = 0; /* do not process a last resort (the parent side) if a stub * or forward is configured, because we do not want to go 'above' * the configured servers */ - if(!dname_is_root(nm) && (stub = (struct iter_hints_stub*) - name_tree_find(&env->hints->tree, nm, nmlen, labs, qclass)) && + if(!dname_is_root(nm) && + (dp = hints_find(env->hints, nm, qclass, nolock)) && /* has_parent side is turned off for stub_first, where we * are allowed to go to the parent */ - stub->dp->has_parent_side_NS) { - if(retdp) *retdp = stub->dp; + dp->has_parent_side_NS) { + if(retdp) *retdp = delegpt_copy(dp, region); + lock_rw_unlock(&env->hints->lock); + if(have_dp) *have_dp = 1; return 0; } - if((fwddp = forwards_find(env->fwds, nm, qclass)) && + if(dp) { + lock_rw_unlock(&env->hints->lock); + dp = NULL; + } + if((dp = forwards_find(env->fwds, nm, qclass, nolock)) && /* has_parent_side is turned off for forward_first, where * we are allowed to go to the parent */ - fwddp->has_parent_side_NS) { - if(retdp) *retdp = fwddp; + dp->has_parent_side_NS) { + if(retdp) *retdp = delegpt_copy(dp, region); + lock_rw_unlock(&env->fwds->lock); + if(have_dp) *have_dp = 1; return 0; } + /* lock_() calls are macros that could be nothing, surround in {} */ + if(dp) { lock_rw_unlock(&env->fwds->lock); } return 1; } @@ -877,10 +888,11 @@ prime_root(struct module_qstate* qstate, struct iter_qstate* iq, int id, { struct delegpt* dp; struct module_qstate* subq; + int nolock = 0; verbose(VERB_DETAIL, "priming . %s NS", sldns_lookup_by_id(sldns_rr_classes, (int)qclass)? sldns_lookup_by_id(sldns_rr_classes, (int)qclass)->name:"??"); - dp = hints_lookup_root(qstate->env->hints, qclass); + dp = hints_find_root(qstate->env->hints, qclass, nolock); if(!dp) { verbose(VERB_ALGO, "Cannot prime due to lack of hints"); return 0; @@ -890,6 +902,7 @@ prime_root(struct module_qstate* qstate, struct iter_qstate* iq, int id, if(!generate_sub_request((uint8_t*)"\000", 1, LDNS_RR_TYPE_NS, qclass, qstate, id, iq, QUERYTARGETS_STATE, PRIME_RESP_STATE, &subq, 0, 0)) { + lock_rw_unlock(&qstate->env->hints->lock); verbose(VERB_ALGO, "could not prime root"); return 0; } @@ -900,6 +913,7 @@ prime_root(struct module_qstate* qstate, struct iter_qstate* iq, int id, * copy dp, it is now part of the root prime query. * dp was part of in the fixed hints structure. */ subiq->dp = delegpt_copy(dp, subq->region); + lock_rw_unlock(&qstate->env->hints->lock); if(!subiq->dp) { log_err("out of memory priming root, copydp"); fptr_ok(fptr_whitelist_modenv_kill_sub( @@ -911,6 +925,8 @@ prime_root(struct module_qstate* qstate, struct iter_qstate* iq, int id, subiq->num_target_queries = 0; subiq->dnssec_expected = iter_indicates_dnssec( qstate->env, subiq->dp, NULL, subq->qinfo.qclass); + } else { + lock_rw_unlock(&qstate->env->hints->lock); } /* this module stops, our submodule starts, and does the query. */ @@ -941,18 +957,21 @@ prime_stub(struct module_qstate* qstate, struct iter_qstate* iq, int id, struct iter_hints_stub* stub; struct delegpt* stub_dp; struct module_qstate* subq; + int nolock = 0; if(!qname) return 0; - stub = hints_lookup_stub(qstate->env->hints, qname, qclass, iq->dp); + stub = hints_lookup_stub(qstate->env->hints, qname, qclass, iq->dp, + nolock); /* The stub (if there is one) does not need priming. */ - if(!stub) - return 0; + if(!stub) return 0; stub_dp = stub->dp; /* if we have an auth_zone dp, and stub is equal, don't prime stub * yet, unless we want to fallback and avoid the auth_zone */ if(!iq->auth_zone_avoid && iq->dp && iq->dp->auth_dp && - query_dname_compare(iq->dp->name, stub_dp->name) == 0) + query_dname_compare(iq->dp->name, stub_dp->name) == 0) { + lock_rw_unlock(&qstate->env->hints->lock); return 0; + } /* is it a noprime stub (always use) */ if(stub->noprime) { @@ -961,13 +980,14 @@ prime_stub(struct module_qstate* qstate, struct iter_qstate* iq, int id, /* copy the dp out of the fixed hints structure, so that * it can be changed when servicing this query */ iq->dp = delegpt_copy(stub_dp, qstate->region); + lock_rw_unlock(&qstate->env->hints->lock); if(!iq->dp) { log_err("out of memory priming stub"); errinf(qstate, "malloc failure, priming stub"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); return 1; /* return 1 to make module stop, with error */ } - log_nametypeclass(VERB_DETAIL, "use stub", stub_dp->name, + log_nametypeclass(VERB_DETAIL, "use stub", iq->dp->name, LDNS_RR_TYPE_NS, qclass); return r; } @@ -981,6 +1001,7 @@ prime_stub(struct module_qstate* qstate, struct iter_qstate* iq, int id, if(!generate_sub_request(stub_dp->name, stub_dp->namelen, LDNS_RR_TYPE_NS, qclass, qstate, id, iq, QUERYTARGETS_STATE, PRIME_RESP_STATE, &subq, 0, 0)) { + lock_rw_unlock(&qstate->env->hints->lock); verbose(VERB_ALGO, "could not prime stub"); errinf(qstate, "could not generate lookup for stub prime"); (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL); @@ -993,6 +1014,7 @@ prime_stub(struct module_qstate* qstate, struct iter_qstate* iq, int id, /* Set the initial delegation point to the hint. */ /* make copy to avoid use of stub dp by different qs/threads */ subiq->dp = delegpt_copy(stub_dp, subq->region); + lock_rw_unlock(&qstate->env->hints->lock); if(!subiq->dp) { log_err("out of memory priming stub, copydp"); fptr_ok(fptr_whitelist_modenv_kill_sub( @@ -1009,6 +1031,8 @@ prime_stub(struct module_qstate* qstate, struct iter_qstate* iq, int id, subiq->wait_priming_stub = 1; subiq->dnssec_expected = iter_indicates_dnssec( qstate->env, subiq->dp, NULL, subq->qinfo.qclass); + } else { + lock_rw_unlock(&qstate->env->hints->lock); } /* this module stops, our submodule starts, and does the query. */ @@ -1181,7 +1205,7 @@ generate_ns_check(struct module_qstate* qstate, struct iter_qstate* iq, int id) if(iq->depth == ie->max_dependency_depth) return; if(!can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, - iq->qchase.qclass, NULL)) + iq->qchase.qclass, NULL, NULL, NULL)) return; /* is this query the same as the nscheck? */ if(qstate->qinfo.qtype == LDNS_RR_TYPE_NS && @@ -1294,6 +1318,7 @@ forward_request(struct module_qstate* qstate, struct iter_qstate* iq) struct delegpt* dp; uint8_t* delname = iq->qchase.qname; size_t delnamelen = iq->qchase.qname_len; + int nolock = 0; if(iq->refetch_glue && iq->dp) { delname = iq->dp->name; delnamelen = iq->dp->namelen; @@ -1302,12 +1327,13 @@ forward_request(struct module_qstate* qstate, struct iter_qstate* iq) if( (iq->qchase.qtype == LDNS_RR_TYPE_DS || iq->refetch_glue) && !dname_is_root(iq->qchase.qname)) dname_remove_label(&delname, &delnamelen); - dp = forwards_lookup(qstate->env->fwds, delname, iq->qchase.qclass); - if(!dp) - return 0; + dp = forwards_lookup(qstate->env->fwds, delname, iq->qchase.qclass, + nolock); + if(!dp) return 0; /* send recursion desired to forward addr */ iq->chase_flags |= BIT_RD; iq->dp = delegpt_copy(dp, qstate->region); + lock_rw_unlock(&qstate->env->fwds->lock); /* iq->dp checked by caller */ verbose(VERB_ALGO, "forwarding request"); return 1; @@ -1335,6 +1361,7 @@ static int processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, struct iter_env* ie, int id) { + uint8_t dpname_storage[LDNS_MAX_DOMAINLEN+1]; uint8_t* delname, *dpname=NULL; size_t delnamelen, dpnamelen=0; struct dns_msg* msg = NULL; @@ -1381,7 +1408,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, if (iq->refetch_glue && iq->dp && !can_have_last_resort(qstate->env, iq->dp->name, - iq->dp->namelen, iq->qchase.qclass, NULL)) { + iq->dp->namelen, iq->qchase.qclass, NULL, NULL, NULL)) { iq->refetch_glue = 0; } @@ -1389,8 +1416,61 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, /* This either results in a query restart (CNAME cache response), a * terminating response (ANSWER), or a cache miss (null). */ - - if (iter_stub_fwd_no_cache(qstate, &iq->qchase, &dpname, &dpnamelen)) { + + /* Check RPZ for override */ + if(qstate->env->auth_zones) { + /* apply rpz qname triggers, like after cname */ + struct dns_msg* forged_response = + rpz_callback_from_iterator_cname(qstate, iq); + if(forged_response) { + uint8_t* sname = 0; + size_t slen = 0; + int count = 0; + while(forged_response && reply_find_rrset_section_an( + forged_response->rep, iq->qchase.qname, + iq->qchase.qname_len, LDNS_RR_TYPE_CNAME, + iq->qchase.qclass) && + iq->qchase.qtype != LDNS_RR_TYPE_CNAME && + count++ < ie->max_query_restarts) { + /* another cname to follow */ + if(!handle_cname_response(qstate, iq, forged_response, + &sname, &slen)) { + errinf(qstate, "malloc failure, CNAME info"); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } + iq->qchase.qname = sname; + iq->qchase.qname_len = slen; + forged_response = + rpz_callback_from_iterator_cname(qstate, iq); + } + if(forged_response != NULL) { + qstate->ext_state[id] = module_finished; + qstate->return_rcode = LDNS_RCODE_NOERROR; + qstate->return_msg = forged_response; + iq->response = forged_response; + next_state(iq, FINISHED_STATE); + if(!iter_prepend(iq, qstate->return_msg, qstate->region)) { + log_err("rpz: after cached cname, prepend rrsets: out of memory"); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } + qstate->return_msg->qinfo = qstate->qinfo; + return 0; + } + /* Follow the CNAME response */ + iq->dp = NULL; + iq->refetch_glue = 0; + iq->query_restart_count++; + iq->sent_count = 0; + iq->dp_target_count = 0; + sock_list_insert(&qstate->reply_origin, NULL, 0, qstate->region); + if(qstate->env->cfg->qname_minimisation) + iq->minimisation_state = INIT_MINIMISE_STATE; + return next_state(iq, INIT_REQUEST_STATE); + } + } + + if (iter_stub_fwd_no_cache(qstate, &iq->qchase, &dpname, &dpnamelen, + dpname_storage, sizeof(dpname_storage))) { /* Asked to not query cache. */ verbose(VERB_ALGO, "no-cache set, going to the network"); qstate->no_cache_lookup = 1; @@ -1449,39 +1529,6 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, } iq->qchase.qname = sname; iq->qchase.qname_len = slen; - if(qstate->env->auth_zones) { - /* apply rpz qname triggers after cname */ - struct dns_msg* forged_response = - rpz_callback_from_iterator_cname(qstate, iq); - while(forged_response && reply_find_rrset_section_an( - forged_response->rep, iq->qchase.qname, - iq->qchase.qname_len, LDNS_RR_TYPE_CNAME, - iq->qchase.qclass)) { - /* another cname to follow */ - if(!handle_cname_response(qstate, iq, forged_response, - &sname, &slen)) { - errinf(qstate, "malloc failure, CNAME info"); - return error_response(qstate, id, LDNS_RCODE_SERVFAIL); - } - iq->qchase.qname = sname; - iq->qchase.qname_len = slen; - forged_response = - rpz_callback_from_iterator_cname(qstate, iq); - } - if(forged_response != NULL) { - qstate->ext_state[id] = module_finished; - qstate->return_rcode = LDNS_RCODE_NOERROR; - qstate->return_msg = forged_response; - iq->response = forged_response; - next_state(iq, FINISHED_STATE); - if(!iter_prepend(iq, qstate->return_msg, qstate->region)) { - log_err("rpz: after cached cname, prepend rrsets: out of memory"); - return error_response(qstate, id, LDNS_RCODE_SERVFAIL); - } - qstate->return_msg->qinfo = qstate->qinfo; - return 0; - } - } /* This *is* a query restart, even if it is a cheap * one. */ iq->dp = NULL; @@ -1494,7 +1541,6 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, iq->minimisation_state = INIT_MINIMISE_STATE; return next_state(iq, INIT_REQUEST_STATE); } - /* if from cache, NULL, else insert 'cache IP' len=0 */ if(qstate->reply_origin) sock_list_insert(&qstate->reply_origin, NULL, 0, qstate->region); @@ -1555,7 +1601,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, } if(iq->qchase.qtype == LDNS_RR_TYPE_DS || iq->refetch_glue || (iq->qchase.qtype == LDNS_RR_TYPE_NS && qstate->prefetch_leeway - && can_have_last_resort(qstate->env, delname, delnamelen, iq->qchase.qclass, NULL))) { + && can_have_last_resort(qstate->env, delname, delnamelen, iq->qchase.qclass, NULL, NULL, NULL))) { /* remove first label from delname, root goes to hints, * but only to fetch glue, not for qtype=DS. */ /* also when prefetching an NS record, fetch it again from @@ -1584,6 +1630,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, * root priming situation. */ if(iq->dp == NULL) { int r; + int nolock = 0; /* if under auth zone, no prime needed */ if(!auth_zone_delegpt(qstate, iq, delname, delnamelen)) return error_response(qstate, id, @@ -1597,12 +1644,13 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, break; /* got noprime-stub-zone, continue */ else if(r) return 0; /* stub prime request made */ - if(forwards_lookup_root(qstate->env->fwds, - iq->qchase.qclass)) { + if(forwards_lookup_root(qstate->env->fwds, + iq->qchase.qclass, nolock)) { + lock_rw_unlock(&qstate->env->fwds->lock); /* forward zone root, no root prime needed */ /* fill in some dp - safety belt */ - iq->dp = hints_lookup_root(qstate->env->hints, - iq->qchase.qclass); + iq->dp = hints_find_root(qstate->env->hints, + iq->qchase.qclass, nolock); if(!iq->dp) { log_err("internal error: no hints dp"); errinf(qstate, "no hints for this class"); @@ -1610,6 +1658,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, LDNS_RCODE_SERVFAIL); } iq->dp = delegpt_copy(iq->dp, qstate->region); + lock_rw_unlock(&qstate->env->hints->lock); if(!iq->dp) { log_err("out of memory in safety belt"); errinf(qstate, "malloc failure, in safety belt"); @@ -1649,15 +1698,13 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, if(iter_dp_is_useless(&qstate->qinfo, qstate->query_flags, iq->dp, ie->supports_ipv4, ie->supports_ipv6, ie->use_nat64)) { - struct delegpt* retdp = NULL; - if(!can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, iq->qchase.qclass, &retdp)) { - if(retdp) { + int have_dp = 0; + if(!can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, iq->qchase.qclass, &have_dp, &iq->dp, qstate->region)) { + if(have_dp) { verbose(VERB_QUERY, "cache has stub " "or fwd but no addresses, " "fallback to config"); - iq->dp = delegpt_copy(retdp, - qstate->region); - if(!iq->dp) { + if(have_dp && !iq->dp) { log_err("out of memory in " "stub/fwd fallback"); errinf(qstate, "malloc failure, for fallback to config"); @@ -1677,10 +1724,11 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, } if(dname_is_root(iq->dp->name)) { /* use safety belt */ + int nolock = 0; verbose(VERB_QUERY, "Cache has root NS but " "no addresses. Fallback to the safety belt."); - iq->dp = hints_lookup_root(qstate->env->hints, - iq->qchase.qclass); + iq->dp = hints_find_root(qstate->env->hints, + iq->qchase.qclass, nolock); /* note deleg_msg is from previous lookup, * but RD is on, so it is not used */ if(!iq->dp) { @@ -1689,6 +1737,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, LDNS_RCODE_REFUSED); } iq->dp = delegpt_copy(iq->dp, qstate->region); + lock_rw_unlock(&qstate->env->hints->lock); if(!iq->dp) { log_err("out of memory in safety belt"); errinf(qstate, "malloc failure, in safety belt, for root"); @@ -1744,6 +1793,7 @@ processInitRequest2(struct module_qstate* qstate, struct iter_qstate* iq, delnamelen = iq->qchase.qname_len; if(iq->refetch_glue) { struct iter_hints_stub* stub; + int nolock = 0; if(!iq->dp) { log_err("internal or malloc fail: no dp for refetch"); errinf(qstate, "malloc failure, no delegation info"); @@ -1753,12 +1803,14 @@ processInitRequest2(struct module_qstate* qstate, struct iter_qstate* iq, * this is above stub without stub-first. */ stub = hints_lookup_stub( qstate->env->hints, iq->qchase.qname, iq->qchase.qclass, - iq->dp); + iq->dp, nolock); if(!stub || !stub->dp->has_parent_side_NS || dname_subdomain_c(iq->dp->name, stub->dp->name)) { delname = iq->dp->name; delnamelen = iq->dp->namelen; } + /* lock_() calls are macros that could be nothing, surround in {} */ + if(stub) { lock_rw_unlock(&qstate->env->hints->lock); } } if(iq->qchase.qtype == LDNS_RR_TYPE_DS || iq->refetch_glue) { if(!dname_is_root(delname)) @@ -2062,7 +2114,7 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, log_assert(iq->dp); if(!can_have_last_resort(qstate->env, iq->dp->name, iq->dp->namelen, - iq->qchase.qclass, NULL)) { + iq->qchase.qclass, NULL, NULL, NULL)) { /* fail -- no more targets, no more hope of targets, no hope * of a response. */ errinf(qstate, "all the configured stub or forward servers failed,"); @@ -2072,21 +2124,24 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, return error_response_cache(qstate, id, LDNS_RCODE_SERVFAIL); } if(!iq->dp->has_parent_side_NS && dname_is_root(iq->dp->name)) { - struct delegpt* p = hints_lookup_root(qstate->env->hints, - iq->qchase.qclass); - if(p) { + struct delegpt* dp; + int nolock = 0; + dp = hints_find_root(qstate->env->hints, + iq->qchase.qclass, nolock); + if(dp) { struct delegpt_addr* a; iq->chase_flags &= ~BIT_RD; /* go to authorities */ - for(ns = p->nslist; ns; ns=ns->next) { + for(ns = dp->nslist; ns; ns=ns->next) { (void)delegpt_add_ns(iq->dp, qstate->region, ns->name, ns->lame, ns->tls_auth_name, ns->port); } - for(a = p->target_list; a; a=a->next_target) { + for(a = dp->target_list; a; a=a->next_target) { (void)delegpt_add_addr(iq->dp, qstate->region, &a->addr, a->addrlen, a->bogus, a->lame, a->tls_auth_name, -1, NULL); } + lock_rw_unlock(&qstate->env->hints->lock); } iq->dp->has_parent_side_NS = 1; } else if(!iq->dp->has_parent_side_NS) { @@ -2164,7 +2219,7 @@ processLastResort(struct module_qstate* qstate, struct iter_qstate* iq, if( ((ie->supports_ipv6 && !ns->done_pside6) || ((ie->supports_ipv4 || ie->use_nat64) && !ns->done_pside4)) && !can_have_last_resort(qstate->env, ns->name, ns->namelen, - iq->qchase.qclass, NULL)) { + iq->qchase.qclass, NULL, NULL, NULL)) { log_nametypeclass(VERB_ALGO, "cannot pside lookup ns " "because it is also a stub/forward,", ns->name, LDNS_RR_TYPE_NS, iq->qchase.qclass); @@ -2746,8 +2801,51 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, delegpt_add_unused_targets(iq->dp); if(qstate->env->auth_zones) { - /* apply rpz triggers at query time */ + uint8_t* sname = NULL; + size_t snamelen = 0; + /* apply rpz triggers at query time; nameserver IP and dname */ + struct dns_msg* forged_response_after_cname; struct dns_msg* forged_response = rpz_callback_from_iterator_module(qstate, iq); + int count = 0; + while(forged_response && reply_find_rrset_section_an( + forged_response->rep, iq->qchase.qname, + iq->qchase.qname_len, LDNS_RR_TYPE_CNAME, + iq->qchase.qclass) && + iq->qchase.qtype != LDNS_RR_TYPE_CNAME && + count++ < ie->max_query_restarts) { + /* another cname to follow */ + if(!handle_cname_response(qstate, iq, forged_response, + &sname, &snamelen)) { + errinf(qstate, "malloc failure, CNAME info"); + return error_response(qstate, id, LDNS_RCODE_SERVFAIL); + } + iq->qchase.qname = sname; + iq->qchase.qname_len = snamelen; + forged_response_after_cname = + rpz_callback_from_iterator_cname(qstate, iq); + if(forged_response_after_cname) { + forged_response = forged_response_after_cname; + } else { + /* Follow the CNAME with a query restart */ + iq->deleg_msg = NULL; + iq->dp = NULL; + iq->dsns_point = NULL; + iq->auth_zone_response = 0; + iq->refetch_glue = 0; + iq->query_restart_count++; + iq->sent_count = 0; + iq->dp_target_count = 0; + if(qstate->env->cfg->qname_minimisation) + iq->minimisation_state = INIT_MINIMISE_STATE; + outbound_list_clear(&iq->outlist); + iq->num_current_queries = 0; + fptr_ok(fptr_whitelist_modenv_detach_subs( + qstate->env->detach_subs)); + (*qstate->env->detach_subs)(qstate); + iq->num_target_queries = 0; + return next_state(iq, INIT_REQUEST_STATE); + } + } if(forged_response != NULL) { qstate->ext_state[id] = module_finished; qstate->return_rcode = LDNS_RCODE_NOERROR; @@ -3082,7 +3180,8 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, /* DNAME to a subdomain loop; do not recurse */ type = RESPONSE_TYPE_ANSWER; } - } else if(type == RESPONSE_TYPE_CNAME && + } + if(type == RESPONSE_TYPE_CNAME && iq->qchase.qtype == LDNS_RR_TYPE_CNAME && iq->minimisation_state == MINIMISE_STATE && query_dname_compare(iq->qchase.qname, iq->qinfo_out.qname) == 0) { @@ -3193,6 +3292,7 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, } return final_state(iq); } else if(type == RESPONSE_TYPE_REFERRAL) { + struct delegpt* old_dp = NULL; /* REFERRAL type responses get a reset of the * delegation point, and back to the QUERYTARGETS_STATE. */ verbose(VERB_DETAIL, "query response was REFERRAL"); @@ -3244,6 +3344,8 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, /* Reset the event state, setting the current delegation * point to the referral. */ iq->deleg_msg = iq->response; + /* Keep current delegation point for label comparison */ + old_dp = iq->dp; iq->dp = delegpt_from_message(iq->response, qstate->region); if (qstate->env->cfg->qname_minimisation) iq->minimisation_state = INIT_MINIMISE_STATE; @@ -3251,6 +3353,20 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, errinf(qstate, "malloc failure, for delegation point"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } + if(old_dp->namelabs + 1 < iq->dp->namelabs) { + /* We got a grandchild delegation (more than one label + * difference) than expected. Check for in-between + * delegations in the cache and remove them. + * They could prove problematic when they expire + * and rrset_expired_above() encounters them during + * delegation cache lookups. */ + uint8_t* qname = iq->dp->name; + size_t qnamelen = iq->dp->namelen; + rrset_cache_remove_above(qstate->env->rrset_cache, + &qname, &qnamelen, LDNS_RR_TYPE_NS, + iq->qchase.qclass, *qstate->env->now, + old_dp->name, old_dp->namelen); + } if(!cache_fill_missing(qstate->env, iq->qchase.qclass, qstate->region, iq->dp)) { errinf(qstate, "malloc failure, copy extra info into delegation point"); @@ -3341,10 +3457,13 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, /* apply rpz qname triggers after cname */ struct dns_msg* forged_response = rpz_callback_from_iterator_cname(qstate, iq); + int count = 0; while(forged_response && reply_find_rrset_section_an( forged_response->rep, iq->qchase.qname, iq->qchase.qname_len, LDNS_RR_TYPE_CNAME, - iq->qchase.qclass)) { + iq->qchase.qclass) && + iq->qchase.qtype != LDNS_RR_TYPE_CNAME && + count++ < ie->max_query_restarts) { /* another cname to follow */ if(!handle_cname_response(qstate, iq, forged_response, &sname, &snamelen)) { @@ -3926,17 +4045,9 @@ processFinished(struct module_qstate* qstate, struct iter_qstate* iq, !qstate->env->cfg->val_log_squelch) { char* err_str = errinf_to_str_misc(qstate); if(err_str) { - size_t err_str_len = strlen(err_str); verbose(VERB_ALGO, "iterator EDE: %s", err_str); - /* allocate space and store the error - * string */ - iq->response->rep->reason_bogus_str = regional_alloc( - qstate->region, - sizeof(char) * (err_str_len+1)); - memcpy(iq->response->rep->reason_bogus_str, - err_str, err_str_len+1); + iq->response->rep->reason_bogus_str = err_str; } - free(err_str); } /* we have finished processing this query */ diff --git a/sbin/unwind/libunbound/libunbound/context.c b/sbin/unwind/libunbound/libunbound/context.c index f7c0a2cd5fa..a319f59cdea 100644 --- a/sbin/unwind/libunbound/libunbound/context.c +++ b/sbin/unwind/libunbound/libunbound/context.c @@ -53,6 +53,8 @@ #include "util/storage/slabhash.h" #include "util/edns.h" #include "sldns/sbuffer.h" +#include "iterator/iter_fwd.h" +#include "iterator/iter_hints.h" int context_finalize(struct ub_ctx* ctx) @@ -85,6 +87,12 @@ context_finalize(struct ub_ctx* ctx) if(!auth_zones_apply_cfg(ctx->env->auth_zones, cfg, 1, &is_rpz, ctx->env, &ctx->mods)) return UB_INITFAIL; + if(!(ctx->env->fwds = forwards_create()) || + !forwards_apply_cfg(ctx->env->fwds, cfg)) + return UB_INITFAIL; + if(!(ctx->env->hints = hints_create()) || + !hints_apply_cfg(ctx->env->hints, cfg)) + return UB_INITFAIL; if(!edns_strings_apply_cfg(ctx->env->edns_strings, cfg)) return UB_INITFAIL; if(!slabhash_is_size(ctx->env->msg_cache, cfg->msg_cache_size, diff --git a/sbin/unwind/libunbound/libunbound/libunbound.c b/sbin/unwind/libunbound/libunbound/libunbound.c index 80a82bb47dd..17057ec6c01 100644 --- a/sbin/unwind/libunbound/libunbound/libunbound.c +++ b/sbin/unwind/libunbound/libunbound/libunbound.c @@ -66,6 +66,8 @@ #include "services/authzone.h" #include "services/listen_dnsport.h" #include "sldns/sbuffer.h" +#include "iterator/iter_fwd.h" +#include "iterator/iter_hints.h" #ifdef HAVE_PTHREAD #include #endif @@ -171,6 +173,7 @@ static struct ub_ctx* ub_ctx_create_nopipe(void) ctx->env->worker = NULL; ctx->env->need_to_validate = 0; modstack_init(&ctx->mods); + ctx->env->modstack = &ctx->mods; rbtree_init(&ctx->queries, &context_query_cmp); return ctx; } @@ -379,6 +382,8 @@ ub_ctx_delete(struct ub_ctx* ctx) config_delete(ctx->env->cfg); edns_known_options_delete(ctx->env); edns_strings_delete(ctx->env->edns_strings); + forwards_delete(ctx->env->fwds); + hints_delete(ctx->env->hints); auth_zones_delete(ctx->env->auth_zones); free(ctx->env); } diff --git a/sbin/unwind/libunbound/libunbound/libworker.c b/sbin/unwind/libunbound/libunbound/libworker.c index 0e1c4039376..5c75f61d8dc 100644 --- a/sbin/unwind/libunbound/libunbound/libworker.c +++ b/sbin/unwind/libunbound/libunbound/libworker.c @@ -70,8 +70,6 @@ #include "util/data/msgreply.h" #include "util/data/msgencode.h" #include "util/tube.h" -#include "iterator/iter_fwd.h" -#include "iterator/iter_hints.h" #include "sldns/sbuffer.h" #include "sldns/str2wire.h" #ifdef USE_DNSTAP @@ -100,8 +98,6 @@ libworker_delete_env(struct libworker* w) !w->is_bg || w->is_bg_thread); sldns_buffer_free(w->env->scratch_buffer); regional_destroy(w->env->scratch); - forwards_delete(w->env->fwds); - hints_delete(w->env->hints); ub_randfree(w->env->rnd); free(w->env); } @@ -159,30 +155,19 @@ libworker_setup(struct ub_ctx* ctx, int is_bg, struct ub_event_base* eb) } w->env->scratch = regional_create_custom(cfg->msg_buffer_size); w->env->scratch_buffer = sldns_buffer_new(cfg->msg_buffer_size); - w->env->fwds = forwards_create(); - if(w->env->fwds && !forwards_apply_cfg(w->env->fwds, cfg)) { - forwards_delete(w->env->fwds); - w->env->fwds = NULL; - } - w->env->hints = hints_create(); - if(w->env->hints && !hints_apply_cfg(w->env->hints, cfg)) { - hints_delete(w->env->hints); - w->env->hints = NULL; - } #ifdef HAVE_SSL w->sslctx = connect_sslctx_create(NULL, NULL, cfg->tls_cert_bundle, cfg->tls_win_cert); if(!w->sslctx) { /* to make the setup fail after unlock */ - hints_delete(w->env->hints); - w->env->hints = NULL; + sldns_buffer_free(w->env->scratch_buffer); + w->env->scratch_buffer = NULL; } #endif if(!w->is_bg || w->is_bg_thread) { lock_basic_unlock(&ctx->cfglock); } - if(!w->env->scratch || !w->env->scratch_buffer || !w->env->fwds || - !w->env->hints) { + if(!w->env->scratch || !w->env->scratch_buffer) { libworker_delete(w); return NULL; } diff --git a/sbin/unwind/libunbound/services/authzone.c b/sbin/unwind/libunbound/services/authzone.c index 93fef8ef1c2..f01a6d9e0e0 100644 --- a/sbin/unwind/libunbound/services/authzone.c +++ b/sbin/unwind/libunbound/services/authzone.c @@ -2152,6 +2152,16 @@ auth_zones_cfg(struct auth_zones* az, struct config_auth* c) if(az->rpz_first) az->rpz_first->rpz_az_prev = z; az->rpz_first = z; + } else if(c->isrpz && z->rpz) { + if(!rpz_config(z->rpz, c)) { + log_err("Could not change rpz config"); + if(x) { + lock_basic_unlock(&x->lock); + } + lock_rw_unlock(&z->lock); + lock_rw_unlock(&az->rpz_lock); + return 0; + } } if(c->isrpz) { lock_rw_unlock(&az->rpz_lock); diff --git a/sbin/unwind/libunbound/services/cache/dns.c b/sbin/unwind/libunbound/services/cache/dns.c index 6a980548d72..632ed79ace4 100644 --- a/sbin/unwind/libunbound/services/cache/dns.c +++ b/sbin/unwind/libunbound/services/cache/dns.c @@ -193,46 +193,6 @@ dns_cache_store_msg(struct module_env* env, struct query_info* qinfo, slabhash_insert(env->msg_cache, hash, &e->entry, rep, env->alloc); } -/** see if an rrset is expired above the qname, return upper qname. */ -static int -rrset_expired_above(struct module_env* env, uint8_t** qname, size_t* qnamelen, - uint16_t searchtype, uint16_t qclass, time_t now, uint8_t* expiretop, - size_t expiretoplen) -{ - struct ub_packed_rrset_key *rrset; - uint8_t lablen; - - while(*qnamelen > 0) { - /* look one label higher */ - lablen = **qname; - *qname += lablen + 1; - *qnamelen -= lablen + 1; - if(*qnamelen <= 0) - break; - - /* looks up with a time of 0, to see expired entries */ - if((rrset = rrset_cache_lookup(env->rrset_cache, *qname, - *qnamelen, searchtype, qclass, 0, 0, 0))) { - struct packed_rrset_data* data = - (struct packed_rrset_data*)rrset->entry.data; - if(now > data->ttl) { - /* it is expired, this is not wanted */ - lock_rw_unlock(&rrset->entry.lock); - log_nametypeclass(VERB_ALGO, "this rrset is expired", *qname, searchtype, qclass); - return 1; - } - /* it is not expired, continue looking */ - lock_rw_unlock(&rrset->entry.lock); - } - - /* do not look above the expiretop. */ - if(expiretop && *qnamelen == expiretoplen && - query_dname_compare(*qname, expiretop)==0) - break; - } - return 0; -} - /** find closest NS or DNAME and returns the rrset (locked) */ static struct ub_packed_rrset_key* find_closest_of_type(struct module_env* env, uint8_t* qname, size_t qnamelen, @@ -266,12 +226,12 @@ find_closest_of_type(struct module_env* env, uint8_t* qname, size_t qnamelen, /* check for expiry, but we have to let go of the rrset * for the lock ordering */ lock_rw_unlock(&rrset->entry.lock); - /* the expired_above function always takes off one - * label (if qnamelen>0) and returns the final qname - * where it searched, so we can continue from there - * turning the O N*N search into O N. */ - if(!rrset_expired_above(env, &qname, &qnamelen, - searchtype, qclass, now, expiretop, + /* the rrset_cache_expired_above function always takes + * off one label (if qnamelen>0) and returns the final + * qname where it searched, so we can continue from + * there turning the O N*N search into O N. */ + if(!rrset_cache_expired_above(env->rrset_cache, &qname, + &qnamelen, searchtype, qclass, now, expiretop, expiretoplen)) { /* we want to return rrset, but it may be * gone from cache, if so, just loop like diff --git a/sbin/unwind/libunbound/services/cache/infra.c b/sbin/unwind/libunbound/services/cache/infra.c index 31462d13ae0..457685ab598 100644 --- a/sbin/unwind/libunbound/services/cache/infra.c +++ b/sbin/unwind/libunbound/services/cache/infra.c @@ -234,6 +234,81 @@ setup_domain_limits(struct infra_cache* infra, struct config_file* cfg) return 1; } +/** find or create element in wait limit netblock tree */ +static struct wait_limit_netblock_info* +wait_limit_netblock_findcreate(struct infra_cache* infra, char* str, + int cookie) +{ + rbtree_type* tree; + struct sockaddr_storage addr; + int net; + socklen_t addrlen; + struct wait_limit_netblock_info* d; + + if(!netblockstrtoaddr(str, 0, &addr, &addrlen, &net)) { + log_err("cannot parse wait limit netblock '%s'", str); + return 0; + } + + /* can we find it? */ + if(cookie) + tree = &infra->wait_limits_cookie_netblock; + else + tree = &infra->wait_limits_netblock; + d = (struct wait_limit_netblock_info*)addr_tree_find(tree, &addr, + addrlen, net); + if(d) + return d; + + /* create it */ + d = (struct wait_limit_netblock_info*)calloc(1, sizeof(*d)); + if(!d) + return NULL; + d->limit = -1; + if(!addr_tree_insert(tree, &d->node, &addr, addrlen, net)) { + log_err("duplicate element in domainlimit tree"); + free(d); + return NULL; + } + return d; +} + + +/** insert wait limit information into lookup tree */ +static int +infra_wait_limit_netblock_insert(struct infra_cache* infra, + struct config_file* cfg) +{ + struct config_str2list* p; + struct wait_limit_netblock_info* d; + for(p = cfg->wait_limit_netblock; p; p = p->next) { + d = wait_limit_netblock_findcreate(infra, p->str, 0); + if(!d) + return 0; + d->limit = atoi(p->str2); + } + for(p = cfg->wait_limit_cookie_netblock; p; p = p->next) { + d = wait_limit_netblock_findcreate(infra, p->str, 1); + if(!d) + return 0; + d->limit = atoi(p->str2); + } + return 1; +} + +/** setup wait limits tree (0 on failure) */ +static int +setup_wait_limits(struct infra_cache* infra, struct config_file* cfg) +{ + addr_tree_init(&infra->wait_limits_netblock); + addr_tree_init(&infra->wait_limits_cookie_netblock); + if(!infra_wait_limit_netblock_insert(infra, cfg)) + return 0; + addr_tree_init_parents(&infra->wait_limits_netblock); + addr_tree_init_parents(&infra->wait_limits_cookie_netblock); + return 1; +} + struct infra_cache* infra_create(struct config_file* cfg) { @@ -267,6 +342,10 @@ infra_create(struct config_file* cfg) infra_delete(infra); return NULL; } + if(!setup_wait_limits(infra, cfg)) { + infra_delete(infra); + return NULL; + } infra_ip_ratelimit = cfg->ip_ratelimit; infra->client_ip_rates = slabhash_create(cfg->ip_ratelimit_slabs, INFRA_HOST_STARTSIZE, cfg->ip_ratelimit_size, &ip_rate_sizefunc, @@ -287,6 +366,12 @@ static void domain_limit_free(rbnode_type* n, void* ATTR_UNUSED(arg)) } } +/** delete wait_limit_netblock_info entries */ +static void wait_limit_netblock_del(rbnode_type* n, void* ATTR_UNUSED(arg)) +{ + free(n); +} + void infra_delete(struct infra_cache* infra) { @@ -296,6 +381,10 @@ infra_delete(struct infra_cache* infra) slabhash_delete(infra->domain_rates); traverse_postorder(&infra->domain_limits, domain_limit_free, NULL); slabhash_delete(infra->client_ip_rates); + traverse_postorder(&infra->wait_limits_netblock, + wait_limit_netblock_del, NULL); + traverse_postorder(&infra->wait_limits_cookie_netblock, + wait_limit_netblock_del, NULL); free(infra); } @@ -880,7 +969,8 @@ 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 sockaddr_storage* addr, socklen_t addrlen, time_t timenow) + struct sockaddr_storage* addr, socklen_t addrlen, time_t timenow, + int mesh_wait) { hashvalue_type h = hash_addr(addr, addrlen, 0); struct ip_rate_key* k = (struct ip_rate_key*)calloc(1, sizeof(*k)); @@ -898,6 +988,7 @@ static void infra_ip_create_ratedata(struct infra_cache* infra, k->entry.data = d; d->qps[0] = 1; d->timestamp[0] = timenow; + d->mesh_wait = mesh_wait; slabhash_insert(infra->client_ip_rates, h, &k->entry, d, NULL); } @@ -1121,6 +1212,81 @@ int infra_ip_ratelimit_inc(struct infra_cache* infra, } /* create */ - infra_ip_create_ratedata(infra, addr, addrlen, timenow); + infra_ip_create_ratedata(infra, addr, addrlen, timenow, 0); return 1; } + +int infra_wait_limit_allowed(struct infra_cache* infra, struct comm_reply* rep, + int cookie_valid, struct config_file* cfg) +{ + struct lruhash_entry* entry; + if(cfg->wait_limit == 0) + return 1; + + entry = infra_find_ip_ratedata(infra, &rep->client_addr, + rep->client_addrlen, 0); + if(entry) { + rbtree_type* tree; + struct wait_limit_netblock_info* w; + struct rate_data* d = (struct rate_data*)entry->data; + int mesh_wait = d->mesh_wait; + lock_rw_unlock(&entry->lock); + + /* have the wait amount, check how much is allowed */ + if(cookie_valid) + tree = &infra->wait_limits_cookie_netblock; + else tree = &infra->wait_limits_netblock; + w = (struct wait_limit_netblock_info*)addr_tree_lookup(tree, + &rep->client_addr, rep->client_addrlen); + if(w) { + if(w->limit != -1 && mesh_wait > w->limit) + return 0; + } else { + /* if there is no IP netblock specific information, + * use the configured value. */ + if(mesh_wait > (cookie_valid?cfg->wait_limit_cookie: + cfg->wait_limit)) + return 0; + } + } + return 1; +} + +void infra_wait_limit_inc(struct infra_cache* infra, struct comm_reply* rep, + time_t timenow, struct config_file* cfg) +{ + struct lruhash_entry* entry; + if(cfg->wait_limit == 0) + return; + + /* Find it */ + entry = infra_find_ip_ratedata(infra, &rep->client_addr, + rep->client_addrlen, 1); + if(entry) { + struct rate_data* d = (struct rate_data*)entry->data; + d->mesh_wait++; + lock_rw_unlock(&entry->lock); + return; + } + + /* Create it */ + infra_ip_create_ratedata(infra, &rep->client_addr, + rep->client_addrlen, timenow, 1); +} + +void infra_wait_limit_dec(struct infra_cache* infra, struct comm_reply* rep, + struct config_file* cfg) +{ + struct lruhash_entry* entry; + if(cfg->wait_limit == 0) + return; + + entry = infra_find_ip_ratedata(infra, &rep->client_addr, + rep->client_addrlen, 1); + if(entry) { + struct rate_data* d = (struct rate_data*)entry->data; + if(d->mesh_wait > 0) + d->mesh_wait--; + lock_rw_unlock(&entry->lock); + } +} diff --git a/sbin/unwind/libunbound/services/cache/infra.h b/sbin/unwind/libunbound/services/cache/infra.h index 525073bf35b..ee6f384de34 100644 --- a/sbin/unwind/libunbound/services/cache/infra.h +++ b/sbin/unwind/libunbound/services/cache/infra.h @@ -122,6 +122,10 @@ struct infra_cache { rbtree_type domain_limits; /** hash table with query rates per client ip: ip_rate_key, ip_rate_data */ struct slabhash* client_ip_rates; + /** tree of addr_tree_node, with wait_limit_netblock_info information */ + rbtree_type wait_limits_netblock; + /** tree of addr_tree_node, with wait_limit_netblock_info information */ + rbtree_type wait_limits_cookie_netblock; }; /** ratelimit, unless overridden by domain_limits, 0 is off */ @@ -184,10 +188,22 @@ struct rate_data { /** what the timestamp is of the qps array members, counter is * valid for that timestamp. Usually now and now-1. */ time_t timestamp[RATE_WINDOW]; + /** the number of queries waiting in the mesh */ + int mesh_wait; }; #define ip_rate_data rate_data +/** + * Data to store the configuration per netblock for the wait limit + */ +struct wait_limit_netblock_info { + /** The addr tree node, this must be first. */ + struct addr_tree_node node; + /** the limit on the amount */ + int limit; +}; + /** infra host cache default hash lookup size */ #define INFRA_HOST_STARTSIZE 32 /** bytes per zonename reserved in the hostcache, dnamelen(zonename.com.) */ @@ -474,4 +490,16 @@ void ip_rate_delkeyfunc(void* d, void* arg); /* delete data */ #define ip_rate_deldatafunc rate_deldatafunc +/** See if the IP address can have another reply in the wait limit */ +int infra_wait_limit_allowed(struct infra_cache* infra, struct comm_reply* rep, + int cookie_valid, struct config_file* cfg); + +/** Increment number of waiting replies for IP */ +void infra_wait_limit_inc(struct infra_cache* infra, struct comm_reply* rep, + time_t timenow, struct config_file* cfg); + +/** Decrement number of waiting replies for IP */ +void infra_wait_limit_dec(struct infra_cache* infra, struct comm_reply* rep, + struct config_file* cfg); + #endif /* SERVICES_CACHE_INFRA_H */ diff --git a/sbin/unwind/libunbound/services/cache/rrset.c b/sbin/unwind/libunbound/services/cache/rrset.c index 4e3d08bdaaf..2c03214c8fe 100644 --- a/sbin/unwind/libunbound/services/cache/rrset.c +++ b/sbin/unwind/libunbound/services/cache/rrset.c @@ -46,6 +46,7 @@ #include "util/data/packed_rrset.h" #include "util/data/msgreply.h" #include "util/data/msgparse.h" +#include "util/data/dname.h" #include "util/regional.h" #include "util/alloc.h" #include "util/net_help.h" @@ -127,6 +128,9 @@ need_to_update_rrset(void* nd, void* cd, time_t timenow, int equal, int ns) { struct packed_rrset_data* newd = (struct packed_rrset_data*)nd; struct packed_rrset_data* cached = (struct packed_rrset_data*)cd; + /* o if new data is expired, current data is better */ + if( newd->ttl < timenow && cached->ttl >= timenow) + return 0; /* o store if rrset has been validated * everything better than bogus data * secure is preferred */ @@ -440,6 +444,89 @@ rrset_check_sec_status(struct rrset_cache* r, lock_rw_unlock(&e->lock); } +void +rrset_cache_remove_above(struct rrset_cache* r, uint8_t** qname, size_t* + qnamelen, uint16_t searchtype, uint16_t qclass, time_t now, uint8_t* + qnametop, size_t qnametoplen) +{ + struct ub_packed_rrset_key *rrset; + uint8_t lablen; + + while(*qnamelen > 0) { + /* look one label higher */ + lablen = **qname; + *qname += lablen + 1; + *qnamelen -= lablen + 1; + if(*qnamelen <= 0) + return; + + /* stop at qnametop */ + if(qnametop && *qnamelen == qnametoplen && + query_dname_compare(*qname, qnametop)==0) + return; + + if(verbosity >= VERB_ALGO) { + /* looks up with a time of 0, to see expired entries */ + if((rrset = rrset_cache_lookup(r, *qname, + *qnamelen, searchtype, qclass, 0, 0, 0))) { + struct packed_rrset_data* data = + (struct packed_rrset_data*)rrset->entry.data; + int expired = (now > data->ttl); + lock_rw_unlock(&rrset->entry.lock); + if(expired) + log_nametypeclass(verbosity, "this " + "(grand)parent rrset will be " + "removed (expired)", + *qname, searchtype, qclass); + else log_nametypeclass(verbosity, "this " + "(grand)parent rrset will be " + "removed", + *qname, searchtype, qclass); + } + } + rrset_cache_remove(r, *qname, *qnamelen, searchtype, qclass, 0); + } +} + +int +rrset_cache_expired_above(struct rrset_cache* r, uint8_t** qname, size_t* + qnamelen, uint16_t searchtype, uint16_t qclass, time_t now, uint8_t* + qnametop, size_t qnametoplen) +{ + struct ub_packed_rrset_key *rrset; + uint8_t lablen; + + while(*qnamelen > 0) { + /* look one label higher */ + lablen = **qname; + *qname += lablen + 1; + *qnamelen -= lablen + 1; + if(*qnamelen <= 0) + break; + + /* looks up with a time of 0, to see expired entries */ + if((rrset = rrset_cache_lookup(r, *qname, + *qnamelen, searchtype, qclass, 0, 0, 0))) { + struct packed_rrset_data* data = + (struct packed_rrset_data*)rrset->entry.data; + if(now > data->ttl) { + /* it is expired, this is not wanted */ + lock_rw_unlock(&rrset->entry.lock); + log_nametypeclass(VERB_ALGO, "this rrset is expired", *qname, searchtype, qclass); + return 1; + } + /* it is not expired, continue looking */ + lock_rw_unlock(&rrset->entry.lock); + } + + /* do not look above the qnametop. */ + if(qnametop && *qnamelen == qnametoplen && + query_dname_compare(*qname, qnametop)==0) + break; + } + return 0; +} + void rrset_cache_remove(struct rrset_cache* r, uint8_t* nm, size_t nmlen, uint16_t type, uint16_t dclass, uint32_t flags) { diff --git a/sbin/unwind/libunbound/services/cache/rrset.h b/sbin/unwind/libunbound/services/cache/rrset.h index 7c36d4032eb..6db79d90f53 100644 --- a/sbin/unwind/libunbound/services/cache/rrset.h +++ b/sbin/unwind/libunbound/services/cache/rrset.h @@ -231,6 +231,37 @@ void rrset_update_sec_status(struct rrset_cache* r, void rrset_check_sec_status(struct rrset_cache* r, struct ub_packed_rrset_key* rrset, time_t now); +/** + * Removes rrsets above the qname, returns upper qname. + * @param r: the rrset cache. + * @param qname: the start qname, also used as the output. + * @param qnamelen: length of qname, updated when it returns. + * @param searchtype: qtype to search for. + * @param qclass: qclass to search for. + * @param now: current time. + * @param qnametop: the top qname to stop removal (it is not removed). + * @param qnametoplen: length of qnametop. + */ +void rrset_cache_remove_above(struct rrset_cache* r, uint8_t** qname, + size_t* qnamelen, uint16_t searchtype, uint16_t qclass, time_t now, + uint8_t* qnametop, size_t qnametoplen); + +/** + * Sees if an rrset is expired above the qname, returns upper qname. + * @param r: the rrset cache. + * @param qname: the start qname, also used as the output. + * @param qnamelen: length of qname, updated when it returns. + * @param searchtype: qtype to search for. + * @param qclass: qclass to search for. + * @param now: current time. + * @param qnametop: the top qname, don't look farther than that. + * @param qnametoplen: length of qnametop. + * @return true if there is an expired rrset above, false otherwise. + */ +int rrset_cache_expired_above(struct rrset_cache* r, uint8_t** qname, + size_t* qnamelen, uint16_t searchtype, uint16_t qclass, time_t now, + uint8_t* qnametop, size_t qnametoplen); + /** * Remove an rrset from the cache, by name and type and flags * @param r: rrset cache diff --git a/sbin/unwind/libunbound/services/listen_dnsport.c b/sbin/unwind/libunbound/services/listen_dnsport.c index 753550978a0..7eb59a1618a 100644 --- a/sbin/unwind/libunbound/services/listen_dnsport.c +++ b/sbin/unwind/libunbound/services/listen_dnsport.c @@ -140,9 +140,11 @@ void verbose_print_unbound_socket(struct unbound_socket* ub_sock) { if(verbosity >= VERB_ALGO) { + char buf[256]; log_info("listing of unbound_socket structure:"); - verbose_print_addr(ub_sock->addr); - log_info("s is: %d, fam is: %s, acl: %s", ub_sock->s, + addr_to_str((void*)ub_sock->addr, ub_sock->addrlen, buf, + sizeof(buf)); + log_info("%s s is: %d, fam is: %s, acl: %s", buf, ub_sock->s, ub_sock->fam == AF_INET?"AF_INET":"AF_INET6", ub_sock->acl?"yes":"no"); } @@ -610,7 +612,9 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr, # elif defined(IP_DONTFRAG) && !defined(__APPLE__) /* the IP_DONTFRAG option if defined in the 11.0 OSX headers, * but does not work on that version, so we exclude it */ - int off = 0; + /* a nonzero value disables fragmentation, according to + * docs.oracle.com for ip(4). */ + int off = 1; if (setsockopt(s, IPPROTO_IP, IP_DONTFRAG, &off, (socklen_t)sizeof(off)) < 0) { log_err("setsockopt(..., IP_DONTFRAG, ...) failed: %s", @@ -1047,7 +1051,22 @@ make_sock(int stype, const char* ifname, const char* port, } } - ub_sock->addr = res; + if(!res->ai_addr) { + log_err("getaddrinfo returned no address"); + freeaddrinfo(res); + sock_close(s); + return -1; + } + ub_sock->addr = memdup(res->ai_addr, res->ai_addrlen); + ub_sock->addrlen = res->ai_addrlen; + if(!ub_sock->addr) { + log_err("out of memory: allocate listening address"); + freeaddrinfo(res); + sock_close(s); + return -1; + } + freeaddrinfo(res); + ub_sock->s = s; ub_sock->fam = hints->ai_family; ub_sock->acl = NULL; @@ -1277,8 +1296,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, 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) { - if(ub_sock->addr) - freeaddrinfo(ub_sock->addr); + free(ub_sock->addr); free(ub_sock); if(noip6) { log_warn("IPv6 protocol not available"); @@ -1289,8 +1307,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, /* getting source addr packet info is highly non-portable */ if(!set_recvpktinfo(s, hints->ai_family)) { sock_close(s); - if(ub_sock->addr) - freeaddrinfo(ub_sock->addr); + free(ub_sock->addr); free(ub_sock); return 0; } @@ -1301,8 +1318,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, ?listen_type_udpancil_dnscrypt:listen_type_udpancil, is_pp2, ub_sock)) { sock_close(s); - if(ub_sock->addr) - freeaddrinfo(ub_sock->addr); + free(ub_sock->addr); free(ub_sock); return 0; } @@ -1314,8 +1330,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, 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) { - if(ub_sock->addr) - freeaddrinfo(ub_sock->addr); + free(ub_sock->addr); free(ub_sock); if(noip6) { log_warn("IPv6 protocol not available"); @@ -1332,8 +1347,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, listen_type_udpancil:listen_type_udp), is_pp2, ub_sock)) { sock_close(s); - if(ub_sock->addr) - freeaddrinfo(ub_sock->addr); + free(ub_sock->addr); free(ub_sock); return 0; } @@ -1356,8 +1370,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, 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) { - if(ub_sock->addr) - freeaddrinfo(ub_sock->addr); + free(ub_sock->addr); free(ub_sock); if(noip6) { /*log_warn("IPv6 protocol not available");*/ @@ -1369,8 +1382,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, verbose(VERB_ALGO, "setup TCP for SSL service"); if(!port_insert(list, s, port_type, is_pp2, ub_sock)) { sock_close(s); - if(ub_sock->addr) - freeaddrinfo(ub_sock->addr); + free(ub_sock->addr); free(ub_sock); return 0; } @@ -1952,8 +1964,7 @@ void listening_ports_free(struct listen_port* list) } /* rc_ports don't have ub_socket */ if(list->socket) { - if(list->socket->addr) - freeaddrinfo(list->socket->addr); + free(list->socket->addr); free(list->socket); } free(list); diff --git a/sbin/unwind/libunbound/services/listen_dnsport.h b/sbin/unwind/libunbound/services/listen_dnsport.h index 816d79aea61..84ac4b068b1 100644 --- a/sbin/unwind/libunbound/services/listen_dnsport.h +++ b/sbin/unwind/libunbound/services/listen_dnsport.h @@ -107,11 +107,13 @@ enum listen_type { * socket properties (just like NSD nsd_socket structure definition) */ struct unbound_socket { - /** socket-address structure */ - struct addrinfo* addr; + /** the address of the socket */ + struct sockaddr* addr; + /** length of the address */ + socklen_t addrlen; /** socket descriptor returned by socket() syscall */ int s; - /** address family (AF_INET/IF_INET6) */ + /** address family (AF_INET/AF_INET6) */ int fam; /** ACL on the socket (listening interface) */ struct acl_addr* acl; diff --git a/sbin/unwind/libunbound/services/localzone.c b/sbin/unwind/libunbound/services/localzone.c index 9c8e3c7acb1..51056c8ffef 100644 --- a/sbin/unwind/libunbound/services/localzone.c +++ b/sbin/unwind/libunbound/services/localzone.c @@ -330,14 +330,16 @@ get_rr_nameclass(const char* str, uint8_t** nm, uint16_t* dclass, static struct local_rrset* local_data_find_type(struct local_data* data, uint16_t type, int alias_ok) { - struct local_rrset* p; + struct local_rrset* p, *cname = NULL; type = htons(type); for(p = data->rrsets; p; p = p->next) { if(p->rrset->rk.type == type) return p; if(alias_ok && p->rrset->rk.type == htons(LDNS_RR_TYPE_CNAME)) - return p; + cname = p; } + if(alias_ok) + return cname; return NULL; } diff --git a/sbin/unwind/libunbound/services/mesh.c b/sbin/unwind/libunbound/services/mesh.c index 47cfb04249b..e886c4b92c8 100644 --- a/sbin/unwind/libunbound/services/mesh.c +++ b/sbin/unwind/libunbound/services/mesh.c @@ -47,6 +47,7 @@ #include "services/outbound_list.h" #include "services/cache/dns.h" #include "services/cache/rrset.h" +#include "services/cache/infra.h" #include "util/log.h" #include "util/net_help.h" #include "util/module.h" @@ -385,7 +386,7 @@ mesh_serve_expired_init(struct mesh_state* mstate, int timeout) &mesh_serve_expired_lookup; /* In case this timer already popped, start it again */ - if(!mstate->s.serve_expired_data->timer) { + if(!mstate->s.serve_expired_data->timer && timeout != -1) { mstate->s.serve_expired_data->timer = comm_timer_create( mstate->s.env->worker_base, mesh_serve_expired_callback, mstate); if(!mstate->s.serve_expired_data->timer) @@ -415,6 +416,14 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo, if(rep->c->tcp_req_info) { r_buffer = rep->c->tcp_req_info->spool_buffer; } + if(!infra_wait_limit_allowed(mesh->env->infra_cache, rep, + edns->cookie_valid, mesh->env->cfg)) { + verbose(VERB_ALGO, "Too many queries waiting from the IP. " + "dropping incoming query."); + comm_point_drop_reply(rep); + mesh->stats_dropped++; + return; + } if(!unique) s = mesh_area_find(mesh, cinfo, qinfo, qflags&(BIT_RD|BIT_CD), 0, 0); /* does this create a new reply state? */ @@ -511,6 +520,19 @@ void mesh_new_client(struct mesh_area* mesh, struct query_info* qinfo, log_err("mesh_new_client: out of memory initializing serve expired"); goto servfail_mem; } +#ifdef USE_CACHEDB + if(!timeout && mesh->env->cfg->serve_expired && + !mesh->env->cfg->serve_expired_client_timeout && + (mesh->env->cachedb_enabled && + mesh->env->cfg->cachedb_check_when_serve_expired)) { + if(!mesh_serve_expired_init(s, -1)) { + log_err("mesh_new_client: out of memory initializing serve expired"); + goto servfail_mem; + } + } +#endif + infra_wait_limit_inc(mesh->env->infra_cache, rep, *mesh->env->now, + mesh->env->cfg); /* update statistics */ if(was_detached) { log_assert(mesh->num_detached_states > 0); @@ -616,6 +638,18 @@ mesh_new_callback(struct mesh_area* mesh, struct query_info* qinfo, mesh_state_delete(&s->s); return 0; } +#ifdef USE_CACHEDB + if(!timeout && mesh->env->cfg->serve_expired && + !mesh->env->cfg->serve_expired_client_timeout && + (mesh->env->cachedb_enabled && + mesh->env->cfg->cachedb_check_when_serve_expired)) { + if(!mesh_serve_expired_init(s, -1)) { + if(added) + mesh_state_delete(&s->s); + return 0; + } + } +#endif /* update statistics */ if(was_detached) { log_assert(mesh->num_detached_states > 0); @@ -930,6 +964,8 @@ mesh_state_cleanup(struct mesh_state* mstate) * takes no time and also it does not do the mesh accounting */ mstate->reply_list = NULL; for(; rep; rep=rep->next) { + infra_wait_limit_dec(mesh->env->infra_cache, + &rep->query_reply, mesh->env->cfg); comm_point_drop_reply(&rep->query_reply); log_assert(mesh->num_reply_addrs > 0); mesh->num_reply_addrs--; @@ -1179,7 +1215,7 @@ mesh_do_callback(struct mesh_state* m, int rcode, struct reply_info* rep, rcode = LDNS_RCODE_SERVFAIL; if(!rcode && rep && (rep->security == sec_status_bogus || rep->security == sec_status_secure_sentinel_fail)) { - if(!(reason = errinf_to_str_bogus(&m->s))) + if(!(reason = errinf_to_str_bogus(&m->s, NULL))) rcode = LDNS_RCODE_SERVFAIL; } /* send the reply */ @@ -1413,6 +1449,8 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, comm_point_send_reply(&r->query_reply); m->reply_list = rlist; } + infra_wait_limit_dec(m->s.env->infra_cache, &r->query_reply, + m->s.env->cfg); /* account */ log_assert(m->s.env->mesh->num_reply_addrs > 0); m->s.env->mesh->num_reply_addrs--; @@ -1436,7 +1474,7 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep, log_reply_info(NO_VERBOSE, &m->s.qinfo, &r->query_reply.client_addr, r->query_reply.client_addrlen, duration, 0, r_buffer, - (m->s.env->cfg->log_destaddr?(void*)r->query_reply.c->socket->addr->ai_addr:NULL), + (m->s.env->cfg->log_destaddr?(void*)r->query_reply.c->socket->addr:NULL), r->query_reply.c->type); } } @@ -1464,12 +1502,32 @@ void mesh_query_done(struct mesh_state* mstate) && mstate->s.env->cfg->log_servfail && !mstate->s.env->cfg->val_log_squelch) { char* err = errinf_to_str_servfail(&mstate->s); - if(err) - log_err("%s", err); - free(err); + if(err) { log_err("%s", err); } } } for(r = mstate->reply_list; r; r = r->next) { + struct timeval old; + timeval_subtract(&old, mstate->s.env->now_tv, &r->start_time); + if(mstate->s.env->cfg->discard_timeout != 0 && + ((int)old.tv_sec)*1000+((int)old.tv_usec)/1000 > + mstate->s.env->cfg->discard_timeout) { + /* Drop the reply, it is too old */ + /* briefly set the reply_list to NULL, so that the + * tcp req info cleanup routine that calls the mesh + * to deregister the meshstate for it is not done + * because the list is NULL and also accounting is not + * done there, but instead we do that here. */ + struct mesh_reply* reply_list = mstate->reply_list; + verbose(VERB_ALGO, "drop reply, it is older than discard-timeout"); + infra_wait_limit_dec(mstate->s.env->infra_cache, + &r->query_reply, mstate->s.env->cfg); + mstate->reply_list = NULL; + comm_point_drop_reply(&r->query_reply); + mstate->reply_list = reply_list; + mstate->s.env->mesh->stats_dropped++; + continue; + } + i++; tv = r->start_time; @@ -1493,6 +1551,8 @@ void mesh_query_done(struct mesh_state* mstate) * because the list is NULL and also accounting is not * done there, but instead we do that here. */ struct mesh_reply* reply_list = mstate->reply_list; + infra_wait_limit_dec(mstate->s.env->infra_cache, + &r->query_reply, mstate->s.env->cfg); mstate->reply_list = NULL; comm_point_drop_reply(&r->query_reply); mstate->reply_list = reply_list; @@ -2025,6 +2085,8 @@ void mesh_state_remove_reply(struct mesh_area* mesh, struct mesh_state* m, /* delete it, but allocated in m region */ log_assert(mesh->num_reply_addrs > 0); mesh->num_reply_addrs--; + infra_wait_limit_dec(mesh->env->infra_cache, + &n->query_reply, mesh->env->cfg); /* prev = prev; */ n = n->next; @@ -2165,6 +2227,28 @@ mesh_serve_expired_callback(void* arg) log_dns_msg("Serve expired lookup", &qstate->qinfo, msg->rep); for(r = mstate->reply_list; r; r = r->next) { + struct timeval old; + timeval_subtract(&old, mstate->s.env->now_tv, &r->start_time); + if(mstate->s.env->cfg->discard_timeout != 0 && + ((int)old.tv_sec)*1000+((int)old.tv_usec)/1000 > + mstate->s.env->cfg->discard_timeout) { + /* Drop the reply, it is too old */ + /* briefly set the reply_list to NULL, so that the + * tcp req info cleanup routine that calls the mesh + * to deregister the meshstate for it is not done + * because the list is NULL and also accounting is not + * done there, but instead we do that here. */ + struct mesh_reply* reply_list = mstate->reply_list; + verbose(VERB_ALGO, "drop reply, it is older than discard-timeout"); + infra_wait_limit_dec(mstate->s.env->infra_cache, + &r->query_reply, mstate->s.env->cfg); + mstate->reply_list = NULL; + comm_point_drop_reply(&r->query_reply); + mstate->reply_list = reply_list; + mstate->s.env->mesh->stats_dropped++; + continue; + } + i++; tv = r->start_time; @@ -2192,6 +2276,8 @@ mesh_serve_expired_callback(void* arg) r, r_buffer, prev, prev_buffer); if(r->query_reply.c->tcp_req_info) tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate); + infra_wait_limit_dec(mstate->s.env->infra_cache, + &r->query_reply, mstate->s.env->cfg); prev = r; prev_buffer = r_buffer; } @@ -2238,6 +2324,14 @@ mesh_serve_expired_callback(void* arg) } } +void +mesh_respond_serve_expired(struct mesh_state* mstate) +{ + if(!mstate->s.serve_expired_data) + mesh_serve_expired_init(mstate, -1); + mesh_serve_expired_callback(mstate); +} + int mesh_jostle_exceeded(struct mesh_area* mesh) { if(mesh->all.count < mesh->max_reply_states) diff --git a/sbin/unwind/libunbound/services/mesh.h b/sbin/unwind/libunbound/services/mesh.h index d926cfc9dec..5bd53e065e8 100644 --- a/sbin/unwind/libunbound/services/mesh.h +++ b/sbin/unwind/libunbound/services/mesh.h @@ -690,4 +690,10 @@ mesh_serve_expired_lookup(struct module_qstate* qstate, */ int mesh_jostle_exceeded(struct mesh_area* mesh); +/** + * Give the serve expired responses. + * @param mstate: mesh state for query that has serve_expired_data. + */ +void mesh_respond_serve_expired(struct mesh_state* mstate); + #endif /* SERVICES_MESH_H */ diff --git a/sbin/unwind/libunbound/services/rpz.c b/sbin/unwind/libunbound/services/rpz.c index 18d76c07bff..f036cc5fd64 100644 --- a/sbin/unwind/libunbound/services/rpz.c +++ b/sbin/unwind/libunbound/services/rpz.c @@ -478,43 +478,30 @@ new_cname_override(struct regional* region, uint8_t* ct, size_t ctlen) return rrset; } -struct rpz* -rpz_create(struct config_auth* p) +/** delete the cname override */ +static void +delete_cname_override(struct rpz* r) { - struct rpz* r = calloc(1, sizeof(*r)); - if(!r) - goto err; - - r->region = regional_create_custom(sizeof(struct regional)); - if(!r->region) { - goto err; - } - - if(!(r->local_zones = local_zones_create())){ - goto err; - } - - r->nsdname_zones = local_zones_create(); - if(r->local_zones == NULL){ - goto err; - } - - if(!(r->respip_set = respip_set_create())) { - goto err; - } - - r->client_set = rpz_clientip_synthesized_set_create(); - if(r->client_set == NULL) { - goto err; + if(r->cname_override) { + /* The cname override is what is allocated in the region. */ + regional_free_all(r->region); + r->cname_override = NULL; } +} - r->ns_set = rpz_clientip_synthesized_set_create(); - if(r->ns_set == NULL) { - goto err; +/** Apply rpz config elements to the rpz structure, false on failure. */ +static int +rpz_apply_cfg_elements(struct rpz* r, struct config_auth* p) +{ + if(p->rpz_taglist && p->rpz_taglistlen) { + r->taglistlen = p->rpz_taglistlen; + r->taglist = memdup(p->rpz_taglist, r->taglistlen); + if(!r->taglist) { + log_err("malloc failure on RPZ taglist alloc"); + return 0; + } } - r->taglistlen = p->rpz_taglistlen; - r->taglist = memdup(p->rpz_taglist, r->taglistlen); if(p->rpz_action_override) { r->action_override = rpz_config_to_action(p->rpz_action_override); } @@ -528,17 +515,17 @@ rpz_create(struct config_auth* p) if(!p->rpz_cname) { log_err("rpz: override with cname action found, but no " "rpz-cname-override configured"); - goto err; + return 0; } if(sldns_str2wire_dname_buf(p->rpz_cname, nm, &nmlen) != 0) { log_err("rpz: cannot parse cname override: %s", p->rpz_cname); - goto err; + return 0; } r->cname_override = new_cname_override(r->region, nm, nmlen); if(!r->cname_override) { - goto err; + return 0; } } r->log = p->rpz_log; @@ -546,9 +533,49 @@ rpz_create(struct config_auth* p) if(p->rpz_log_name) { if(!(r->log_name = strdup(p->rpz_log_name))) { log_err("malloc failure on RPZ log_name strdup"); - goto err; + return 0; } } + return 1; +} + +struct rpz* +rpz_create(struct config_auth* p) +{ + struct rpz* r = calloc(1, sizeof(*r)); + if(!r) + goto err; + + r->region = regional_create_custom(sizeof(struct regional)); + if(!r->region) { + goto err; + } + + if(!(r->local_zones = local_zones_create())){ + goto err; + } + + r->nsdname_zones = local_zones_create(); + if(r->local_zones == NULL){ + goto err; + } + + if(!(r->respip_set = respip_set_create())) { + goto err; + } + + r->client_set = rpz_clientip_synthesized_set_create(); + if(r->client_set == NULL) { + goto err; + } + + r->ns_set = rpz_clientip_synthesized_set_create(); + if(r->ns_set == NULL) { + goto err; + } + + if(!rpz_apply_cfg_elements(r, p)) + goto err; return r; err: if(r) { @@ -571,6 +598,32 @@ err: return NULL; } +int +rpz_config(struct rpz* r, struct config_auth* p) +{ + /* If the zonefile changes, it is read later, after which + * rpz_clear and rpz_finish_config is called. */ + + /* free taglist, if any */ + if(r->taglist) { + free(r->taglist); + r->taglist = NULL; + r->taglistlen = 0; + } + + /* free logname, if any */ + if(r->log_name) { + free(r->log_name); + r->log_name = NULL; + } + + delete_cname_override(r); + + if(!rpz_apply_cfg_elements(r, p)) + return 0; + return 1; +} + /** * Remove RPZ zone name from dname * Copy dname to newdname, without the originlen number of trailing bytes @@ -1191,16 +1244,20 @@ rpz_find_zone(struct local_zones* zones, uint8_t* qname, size_t qname_len, uint1 /** Find entry for RR type in the list of rrsets for the clientip. */ static struct local_rrset* rpz_find_synthesized_rrset(uint16_t qtype, - struct clientip_synthesized_rr* data) + struct clientip_synthesized_rr* data, int alias_ok) { - struct local_rrset* cursor = data->data; + struct local_rrset* cursor = data->data, *cname = NULL; while( cursor != NULL) { struct packed_rrset_key* packed_rrset = &cursor->rrset->rk; if(htons(qtype) == packed_rrset->type) { return cursor; } + if(ntohs(packed_rrset->type) == LDNS_RR_TYPE_CNAME && alias_ok) + cname = cursor; cursor = cursor->next; } + if(alias_ok) + return cname; return NULL; } @@ -1386,7 +1443,7 @@ static int rpz_remove_clientip_rr(struct clientip_synthesized_rr* node, struct local_rrset* rrset; struct packed_rrset_data* d; size_t index; - rrset = rpz_find_synthesized_rrset(rr_type, node); + rrset = rpz_find_synthesized_rrset(rr_type, node, 0); if(rrset == NULL) return 0; /* type not found, ignore */ d = (struct packed_rrset_data*)rrset->rrset->entry.data; @@ -1789,7 +1846,7 @@ rpz_apply_clientip_localdata_action(struct clientip_synthesized_rr* raddr, } /* check query type / rr type */ - rrset = rpz_find_synthesized_rrset(qinfo->qtype, raddr); + rrset = rpz_find_synthesized_rrset(qinfo->qtype, raddr, 1); if(rrset == NULL) { verbose(VERB_ALGO, "rpz: unable to find local-data for query"); rrset_count = 0; @@ -1823,6 +1880,28 @@ nodata: rrset_count, rcode, rsoa); } +/** Apply the cname override action, during worker request callback. + * false on failure. */ +static int +rpz_apply_cname_override_action(struct rpz* r, + struct query_info* qinfo, struct regional* temp) +{ + if(!r) + return 0; + qinfo->local_alias = regional_alloc_zero(temp, + sizeof(struct local_rrset)); + if(qinfo->local_alias == NULL) + return 0; /* out of memory */ + qinfo->local_alias->rrset = respip_copy_rrset(r->cname_override, temp); + if(qinfo->local_alias->rrset == NULL) { + qinfo->local_alias = NULL; + return 0; /* out of memory */ + } + qinfo->local_alias->rrset->rk.dname = qinfo->qname; + qinfo->local_alias->rrset->rk.dname_len = qinfo->qname_len; + return 1; +} + /** add additional section SOA record to the reply. * Since this gets fed into the normal iterator answer creation, it * gets minimal-responses applied to it, that can remove the additional SOA @@ -1933,6 +2012,7 @@ rpz_synthesize_localdata_from_rrset(struct rpz* ATTR_UNUSED(r), struct module_qs msg = rpz_dns_msg_new(ms->region); if(msg == NULL) { return NULL; } + msg->qinfo = *qi; new_reply_info = construct_reply_info_base(ms->region, LDNS_RCODE_NOERROR | BIT_QR | BIT_AA | BIT_RA, 1, /* qd */ @@ -1975,40 +2055,42 @@ rpz_synthesize_localdata_from_rrset(struct rpz* ATTR_UNUSED(r), struct module_qs static inline struct dns_msg* rpz_synthesize_nsip_localdata(struct rpz* r, struct module_qstate* ms, - struct clientip_synthesized_rr* data, struct auth_zone* az) + struct query_info* qi, struct clientip_synthesized_rr* data, + struct auth_zone* az) { - struct query_info* qi = &ms->qinfo; struct local_rrset* rrset; - rrset = rpz_find_synthesized_rrset(qi->qtype, data); + rrset = rpz_find_synthesized_rrset(qi->qtype, data, 1); if(rrset == NULL) { verbose(VERB_ALGO, "rpz: nsip: no matching local data found"); return NULL; } - return rpz_synthesize_localdata_from_rrset(r, ms, &ms->qinfo, rrset, az); + return rpz_synthesize_localdata_from_rrset(r, ms, qi, rrset, az); } /* copy'n'paste from localzone.c */ static struct local_rrset* local_data_find_type(struct local_data* data, uint16_t type, int alias_ok) { - struct local_rrset* p; + struct local_rrset* p, *cname = NULL; type = htons(type); for(p = data->rrsets; p; p = p->next) { if(p->rrset->rk.type == type) return p; if(alias_ok && p->rrset->rk.type == htons(LDNS_RR_TYPE_CNAME)) - return p; + cname = p; } + if(alias_ok) + return cname; return NULL; } /* based on localzone.c:local_data_answer() */ static inline struct dns_msg* rpz_synthesize_nsdname_localdata(struct rpz* r, struct module_qstate* ms, - struct local_zone* z, struct matched_delegation_point const* match, - struct auth_zone* az) + struct query_info* qi, struct local_zone* z, + struct matched_delegation_point const* match, struct auth_zone* az) { struct local_data key; struct local_data* ld; @@ -2029,13 +2111,13 @@ rpz_synthesize_nsdname_localdata(struct rpz* r, struct module_qstate* ms, return NULL; } - rrset = local_data_find_type(ld, ms->qinfo.qtype, 1); + rrset = local_data_find_type(ld, qi->qtype, 1); if(rrset == NULL) { verbose(VERB_ALGO, "rpz: nsdname: no matching local data found"); return NULL; } - return rpz_synthesize_localdata_from_rrset(r, ms, &ms->qinfo, rrset, az); + return rpz_synthesize_localdata_from_rrset(r, ms, qi, rrset, az); } /* like local_data_answer for qname triggers after a cname */ @@ -2052,17 +2134,70 @@ rpz_synthesize_qname_localdata_msg(struct rpz* r, struct module_qstate* ms, key.namelabs = dname_count_labels(qinfo->qname); ld = (struct local_data*)rbtree_search(&z->data, &key.node); if(ld == NULL) { - verbose(VERB_ALGO, "rpz: qname after cname: name not found"); + verbose(VERB_ALGO, "rpz: qname: name not found"); return NULL; } rrset = local_data_find_type(ld, qinfo->qtype, 1); if(rrset == NULL) { - verbose(VERB_ALGO, "rpz: qname after cname: type not found"); + verbose(VERB_ALGO, "rpz: qname: type not found"); return NULL; } return rpz_synthesize_localdata_from_rrset(r, ms, qinfo, rrset, az); } +/** Synthesize a CNAME message for RPZ action override */ +static struct dns_msg* +rpz_synthesize_cname_override_msg(struct rpz* r, struct module_qstate* ms, + struct query_info* qinfo) +{ + struct dns_msg* msg = NULL; + struct reply_info* new_reply_info; + struct ub_packed_rrset_key* rp; + + msg = rpz_dns_msg_new(ms->region); + if(msg == NULL) { return NULL; } + + msg->qinfo = *qinfo; + new_reply_info = construct_reply_info_base(ms->region, + LDNS_RCODE_NOERROR | BIT_QR | BIT_AA | BIT_RA, + 1, /* qd */ + 0, /* ttl */ + 0, /* prettl */ + 0, /* expttl */ + 1, /* an */ + 0, /* ns */ + 0, /* ar */ + 1, /* total */ + sec_status_insecure, + LDNS_EDE_NONE); + if(new_reply_info == NULL) { + log_err("out of memory"); + return NULL; + } + new_reply_info->authoritative = 1; + + rp = respip_copy_rrset(r->cname_override, ms->region); + if(rp == NULL) { + log_err("out of memory"); + return NULL; + } + rp->rk.dname = qinfo->qname; + rp->rk.dname_len = qinfo->qname_len; + /* this rrset is from the rpz data, or synthesized. + * It is not actually from the network, so we flag it with this + * flags as a fake RRset. If later the cache is used to look up + * rrsets, then the fake ones are not returned (if you look without + * the flag). For like CNAME lookups from the iterator or A, AAAA + * lookups for nameserver targets, it would use the without flag + * actual data. So that the actual network data and fake data + * are kept track of separately. */ + rp->rk.flags |= PACKED_RRSET_RPZ; + new_reply_info->rrsets[0] = rp; + + msg->rep = new_reply_info; + return msg; +} + static int rpz_synthesize_qname_localdata(struct module_env* env, struct rpz* r, struct local_zone* z, enum localzone_type lzt, struct query_info* qinfo, @@ -2072,17 +2207,8 @@ rpz_synthesize_qname_localdata(struct module_env* env, struct rpz* r, struct local_data* ld = NULL; int ret = 0; if(r->action_override == RPZ_CNAME_OVERRIDE_ACTION) { - qinfo->local_alias = regional_alloc_zero(temp, sizeof(struct local_rrset)); - if(qinfo->local_alias == NULL) { - return 0; /* out of memory */ - } - qinfo->local_alias->rrset = regional_alloc_init(temp, r->cname_override, - sizeof(*r->cname_override)); - if(qinfo->local_alias->rrset == NULL) { - return 0; /* out of memory */ - } - qinfo->local_alias->rrset->rk.dname = qinfo->qname; - qinfo->local_alias->rrset->rk.dname_len = qinfo->qname_len; + if(!rpz_apply_cname_override_action(r, qinfo, temp)) + return 0; if(r->log) { log_rpz_apply("qname", z->name, NULL, RPZ_CNAME_OVERRIDE_ACTION, qinfo, repinfo, NULL, r->log_name); @@ -2134,8 +2260,9 @@ rpz_delegation_point_ipbased_trigger_lookup(struct rpz* rpz, struct iter_qstate* } static struct dns_msg* -rpz_apply_nsip_trigger(struct module_qstate* ms, struct rpz* r, - struct clientip_synthesized_rr* raddr, struct auth_zone* az) +rpz_apply_nsip_trigger(struct module_qstate* ms, struct query_info* qchase, + struct rpz* r, struct clientip_synthesized_rr* raddr, + struct auth_zone* az) { enum rpz_action action = raddr->action; struct dns_msg* ret = NULL; @@ -2148,16 +2275,16 @@ rpz_apply_nsip_trigger(struct module_qstate* ms, struct rpz* r, if(action == RPZ_LOCAL_DATA_ACTION && raddr->data == NULL) { verbose(VERB_ALGO, "rpz: bug: nsip local data action but no local data"); - ret = rpz_synthesize_nodata(r, ms, &ms->qinfo, az); + ret = rpz_synthesize_nodata(r, ms, qchase, az); goto done; } switch(action) { case RPZ_NXDOMAIN_ACTION: - ret = rpz_synthesize_nxdomain(r, ms, &ms->qinfo, az); + ret = rpz_synthesize_nxdomain(r, ms, qchase, az); break; case RPZ_NODATA_ACTION: - ret = rpz_synthesize_nodata(r, ms, &ms->qinfo, az); + ret = rpz_synthesize_nodata(r, ms, qchase, az); break; case RPZ_TCP_ONLY_ACTION: /* basically a passthru here but the tcp-only will be @@ -2166,17 +2293,20 @@ rpz_apply_nsip_trigger(struct module_qstate* ms, struct rpz* r, ret = NULL; break; case RPZ_DROP_ACTION: - ret = rpz_synthesize_nodata(r, ms, &ms->qinfo, az); + ret = rpz_synthesize_nodata(r, ms, qchase, az); ms->is_drop = 1; break; case RPZ_LOCAL_DATA_ACTION: - ret = rpz_synthesize_nsip_localdata(r, ms, raddr, az); - if(ret == NULL) { ret = rpz_synthesize_nodata(r, ms, &ms->qinfo, az); } + ret = rpz_synthesize_nsip_localdata(r, ms, qchase, raddr, az); + if(ret == NULL) { ret = rpz_synthesize_nodata(r, ms, qchase, az); } break; case RPZ_PASSTHRU_ACTION: ret = NULL; ms->rpz_passthru = 1; break; + case RPZ_CNAME_OVERRIDE_ACTION: + ret = rpz_synthesize_cname_override_msg(r, ms, qchase); + break; default: verbose(VERB_ALGO, "rpz: nsip: bug: unhandled or invalid action: '%s'", rpz_action_to_string(action)); @@ -2194,9 +2324,9 @@ done: } static struct dns_msg* -rpz_apply_nsdname_trigger(struct module_qstate* ms, struct rpz* r, - struct local_zone* z, struct matched_delegation_point const* match, - struct auth_zone* az) +rpz_apply_nsdname_trigger(struct module_qstate* ms, struct query_info* qchase, + struct rpz* r, struct local_zone* z, + struct matched_delegation_point const* match, struct auth_zone* az) { struct dns_msg* ret = NULL; enum rpz_action action = localzone_type_to_rpz_action(z->type); @@ -2209,10 +2339,10 @@ rpz_apply_nsdname_trigger(struct module_qstate* ms, struct rpz* r, switch(action) { case RPZ_NXDOMAIN_ACTION: - ret = rpz_synthesize_nxdomain(r, ms, &ms->qinfo, az); + ret = rpz_synthesize_nxdomain(r, ms, qchase, az); break; case RPZ_NODATA_ACTION: - ret = rpz_synthesize_nodata(r, ms, &ms->qinfo, az); + ret = rpz_synthesize_nodata(r, ms, qchase, az); break; case RPZ_TCP_ONLY_ACTION: /* basically a passthru here but the tcp-only will be @@ -2221,19 +2351,22 @@ rpz_apply_nsdname_trigger(struct module_qstate* ms, struct rpz* r, ret = NULL; break; case RPZ_DROP_ACTION: - ret = rpz_synthesize_nodata(r, ms, &ms->qinfo, az); + ret = rpz_synthesize_nodata(r, ms, qchase, az); ms->is_drop = 1; break; case RPZ_LOCAL_DATA_ACTION: - ret = rpz_synthesize_nsdname_localdata(r, ms, z, match, az); - if(ret == NULL) { ret = rpz_synthesize_nodata(r, ms, &ms->qinfo, az); } + ret = rpz_synthesize_nsdname_localdata(r, ms, qchase, z, match, az); + if(ret == NULL) { ret = rpz_synthesize_nodata(r, ms, qchase, az); } break; case RPZ_PASSTHRU_ACTION: ret = NULL; ms->rpz_passthru = 1; break; + case RPZ_CNAME_OVERRIDE_ACTION: + ret = rpz_synthesize_cname_override_msg(r, ms, qchase); + break; default: - verbose(VERB_ALGO, "rpz: nsip: bug: unhandled or invalid action: '%s'", + verbose(VERB_ALGO, "rpz: nsdname: bug: unhandled or invalid action: '%s'", rpz_action_to_string(action)); ret = NULL; } @@ -2324,7 +2457,7 @@ rpz_callback_from_iterator_module(struct module_qstate* ms, struct iter_qstate* /* the nsdname has precedence over the nsip triggers */ z = rpz_delegation_point_zone_lookup(is->dp, r->nsdname_zones, - ms->qinfo.qclass, &match); + is->qchase.qclass, &match); if(z != NULL) { lock_rw_unlock(&a->lock); break; @@ -2347,9 +2480,9 @@ rpz_callback_from_iterator_module(struct module_qstate* ms, struct iter_qstate* if(z) { lock_rw_unlock(&z->lock); } - return rpz_apply_nsip_trigger(ms, r, raddr, a); + return rpz_apply_nsip_trigger(ms, &is->qchase, r, raddr, a); } - return rpz_apply_nsdname_trigger(ms, r, z, &match, a); + return rpz_apply_nsdname_trigger(ms, &is->qchase, r, z, &match, a); } struct dns_msg* rpz_callback_from_iterator_cname(struct module_qstate* ms, @@ -2412,10 +2545,10 @@ struct dns_msg* rpz_callback_from_iterator_cname(struct module_qstate* ms, dname_str(is->qchase.qname, nm); dname_str(z->name, zn); if(strcmp(zn, nm) != 0) - verbose(VERB_ALGO, "rpz: qname trigger after cname %s on %s, with action=%s", + verbose(VERB_ALGO, "rpz: qname trigger %s on %s, with action=%s", zn, nm, rpz_action_to_string(localzone_type_to_rpz_action(lzt))); else - verbose(VERB_ALGO, "rpz: qname trigger after cname %s, with action=%s", + verbose(VERB_ALGO, "rpz: qname trigger %s, with action=%s", nm, rpz_action_to_string(localzone_type_to_rpz_action(lzt))); } switch(localzone_type_to_rpz_action(lzt)) { @@ -2444,7 +2577,7 @@ struct dns_msg* rpz_callback_from_iterator_cname(struct module_qstate* ms, ms->rpz_passthru = 1; break; default: - verbose(VERB_ALGO, "rpz: qname trigger after cname: bug: unhandled or invalid action: '%s'", + verbose(VERB_ALGO, "rpz: qname trigger: bug: unhandled or invalid action: '%s'", rpz_action_to_string(localzone_type_to_rpz_action(lzt))); ret = NULL; } @@ -2472,8 +2605,21 @@ rpz_apply_maybe_clientip_trigger(struct auth_zones* az, struct module_env* env, az, qinfo, repinfo, taglist, taglen, stats, z_out, a_out, r_out); client_action = ((node == NULL) ? RPZ_INVALID_ACTION : node->action); + if(node != NULL && *r_out && + (*r_out)->action_override != RPZ_NO_OVERRIDE_ACTION) { + client_action = (*r_out)->action_override; + } if(client_action == RPZ_PASSTHRU_ACTION) { + if(*r_out && (*r_out)->log) + log_rpz_apply( + (node?"clientip":"qname"), + ((*z_out)?(*z_out)->name:NULL), + (node?&node->node:NULL), + client_action, qinfo, repinfo, NULL, + (*r_out)->log_name); *passthru = 1; + ret = 0; + goto done; } if(*z_out == NULL || (client_action != RPZ_INVALID_ACTION && client_action != RPZ_PASSTHRU_ACTION)) { @@ -2488,14 +2634,15 @@ rpz_apply_maybe_clientip_trigger(struct auth_zones* az, struct module_env* env, if(client_action == RPZ_LOCAL_DATA_ACTION) { rpz_apply_clientip_localdata_action(node, env, qinfo, edns, repinfo, buf, temp, *a_out); + ret = 1; + } else if(client_action == RPZ_CNAME_OVERRIDE_ACTION) { + if(!rpz_apply_cname_override_action(*r_out, qinfo, + temp)) { + ret = 0; + goto done; + } + ret = 0; } else { - if(*r_out && (*r_out)->log) - log_rpz_apply( - (node?"clientip":"qname"), - ((*z_out)?(*z_out)->name:NULL), - (node?&node->node:NULL), - client_action, qinfo, repinfo, NULL, - (*r_out)->log_name); local_zones_zone_answer(*z_out /*likely NULL, no zone*/, env, qinfo, edns, repinfo, buf, temp, 0 /* no local data used */, rpz_action_to_localzone_type(client_action)); @@ -2503,8 +2650,15 @@ rpz_apply_maybe_clientip_trigger(struct auth_zones* az, struct module_env* env, LDNS_RCODE_WIRE(sldns_buffer_begin(buf)) == LDNS_RCODE_NXDOMAIN) LDNS_RA_CLR(sldns_buffer_begin(buf)); + ret = 1; } - ret = 1; + if(*r_out && (*r_out)->log) + log_rpz_apply( + (node?"clientip":"qname"), + ((*z_out)?(*z_out)->name:NULL), + (node?&node->node:NULL), + client_action, qinfo, repinfo, NULL, + (*r_out)->log_name); goto done; } ret = -1; diff --git a/sbin/unwind/libunbound/services/rpz.h b/sbin/unwind/libunbound/services/rpz.h index e6d8bf566e1..7f409087f77 100644 --- a/sbin/unwind/libunbound/services/rpz.h +++ b/sbin/unwind/libunbound/services/rpz.h @@ -225,6 +225,14 @@ int rpz_clear(struct rpz* r); */ struct rpz* rpz_create(struct config_auth* p); +/** + * Change config on rpz, after reload. + * @param r: the rpz structure. + * @param p: the config that was read. + * @return false on failure. + */ +int rpz_config(struct rpz* r, struct config_auth* p); + /** * String for RPZ action enum * @param a: RPZ action to get string for diff --git a/sbin/unwind/libunbound/services/view.h b/sbin/unwind/libunbound/services/view.h index 17778100474..12f7a64e717 100644 --- a/sbin/unwind/libunbound/services/view.h +++ b/sbin/unwind/libunbound/services/view.h @@ -126,7 +126,8 @@ void view_delete(struct view* v); */ void views_print(struct views* v); -/* Find a view by name. +/** + * Find a view by name. * @param vs: views * @param name: name of the view we are looking for * @param write: 1 for obtaining write lock on found view, 0 for read lock diff --git a/sbin/unwind/libunbound/util/config_file.c b/sbin/unwind/libunbound/util/config_file.c index c0610812111..62d1eedf90c 100644 --- a/sbin/unwind/libunbound/util/config_file.c +++ b/sbin/unwind/libunbound/util/config_file.c @@ -174,6 +174,7 @@ config_create(void) cfg->min_ttl = 0; cfg->max_ttl = 3600 * 24; cfg->max_negative_ttl = 3600; + cfg->min_negative_ttl = 0; cfg->prefetch = 0; cfg->prefetch_key = 0; cfg->deny_any = 0; @@ -308,6 +309,11 @@ config_create(void) cfg->minimal_responses = 1; cfg->rrset_roundrobin = 1; cfg->unknown_server_time_limit = 376; + cfg->discard_timeout = 1900; /* msec */ + cfg->wait_limit = 1000; + cfg->wait_limit_cookie = 10000; + cfg->wait_limit_netblock = NULL; + cfg->wait_limit_cookie_netblock = NULL; cfg->max_udp_size = 1232; /* value taken from edns_buffer_size */ if(!(cfg->server_key_file = strdup(RUN_DIR"/unbound_server.key"))) goto error_exit; @@ -384,6 +390,7 @@ config_create(void) if(!(cfg->cachedb_backend = strdup("testframe"))) goto error_exit; if(!(cfg->cachedb_secret = strdup("default"))) goto error_exit; cfg->cachedb_no_store = 0; + cfg->cachedb_check_when_serve_expired = 1; #ifdef USE_REDIS if(!(cfg->redis_server_host = strdup("127.0.0.1"))) goto error_exit; cfg->redis_server_path = NULL; @@ -615,6 +622,8 @@ int config_set_option(struct config_file* cfg, const char* opt, { IS_NUMBER_OR_ZERO; cfg->max_ttl = atoi(val); MAX_TTL=(time_t)cfg->max_ttl;} else if(strcmp(opt, "cache-max-negative-ttl:") == 0) { IS_NUMBER_OR_ZERO; cfg->max_negative_ttl = atoi(val); MAX_NEG_TTL=(time_t)cfg->max_negative_ttl;} + else if(strcmp(opt, "cache-min-negative-ttl:") == 0) + { IS_NUMBER_OR_ZERO; cfg->min_negative_ttl = atoi(val); MIN_NEG_TTL=(time_t)cfg->min_negative_ttl;} else if(strcmp(opt, "cache-min-ttl:") == 0) { IS_NUMBER_OR_ZERO; cfg->min_ttl = atoi(val); MIN_TTL=(time_t)cfg->min_ttl;} else if(strcmp(opt, "infra-cache-min-rtt:") == 0) { @@ -722,6 +731,9 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_YNO("minimal-responses:", minimal_responses) else S_YNO("rrset-roundrobin:", rrset_roundrobin) else S_NUMBER_OR_ZERO("unknown-server-time-limit:", unknown_server_time_limit) + else S_NUMBER_OR_ZERO("discard-timeout:", discard_timeout) + else S_NUMBER_OR_ZERO("wait-limit:", wait_limit) + else S_NUMBER_OR_ZERO("wait-limit-cookie:", wait_limit_cookie) else S_STRLIST("local-data:", local_data) else S_YNO("unblock-lan-zones:", unblock_lan_zones) else S_YNO("insecure-lan-zones:", insecure_lan_zones) @@ -827,6 +839,7 @@ int config_set_option(struct config_file* cfg, const char* opt, #endif #ifdef USE_CACHEDB else S_YNO("cachedb-no-store:", cachedb_no_store) + else S_YNO("cachedb-check-when-serve-expired:", cachedb_check_when_serve_expired) #endif /* USE_CACHEDB */ else if(strcmp(opt, "define-tag:") ==0) { return config_add_tag(cfg, val); @@ -1065,6 +1078,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "deny-any", deny_any) else O_DEC(opt, "cache-max-ttl", max_ttl) else O_DEC(opt, "cache-max-negative-ttl", max_negative_ttl) + else O_DEC(opt, "cache-min-negative-ttl", min_negative_ttl) else O_DEC(opt, "cache-min-ttl", min_ttl) else O_DEC(opt, "infra-host-ttl", host_ttl) else O_DEC(opt, "infra-cache-slabs", infra_cache_slabs) @@ -1201,6 +1215,11 @@ config_get_option(struct config_file* cfg, const char* opt, else O_YNO(opt, "minimal-responses", minimal_responses) else O_YNO(opt, "rrset-roundrobin", rrset_roundrobin) else O_DEC(opt, "unknown-server-time-limit", unknown_server_time_limit) + else O_DEC(opt, "discard-timeout", discard_timeout) + else O_DEC(opt, "wait-limit", wait_limit) + else O_DEC(opt, "wait-limit-cookie", wait_limit_cookie) + else O_LS2(opt, "wait-limit-netblock", wait_limit_netblock) + else O_LS2(opt, "wait-limit-cookie-netblock", wait_limit_cookie_netblock) #ifdef CLIENT_SUBNET else O_LST(opt, "send-client-subnet", client_subnet) else O_LST(opt, "client-subnet-zone", client_subnet_zone) @@ -1318,6 +1337,7 @@ config_get_option(struct config_file* cfg, const char* opt, else O_STR(opt, "backend", cachedb_backend) else O_STR(opt, "secret-seed", cachedb_secret) else O_YNO(opt, "cachedb-no-store", cachedb_no_store) + else O_YNO(opt, "cachedb-check-when-serve-expired", cachedb_check_when_serve_expired) #ifdef USE_REDIS else O_STR(opt, "redis-server-host", redis_server_host) else O_DEC(opt, "redis-server-port", redis_server_port) @@ -1671,6 +1691,8 @@ config_delete(struct config_file* cfg) config_deltrplstrlist(cfg->interface_tag_actions); config_deltrplstrlist(cfg->interface_tag_datas); config_delstrlist(cfg->control_ifs.first); + config_deldblstrlist(cfg->wait_limit_netblock); + config_deldblstrlist(cfg->wait_limit_cookie_netblock); free(cfg->server_key_file); free(cfg->server_cert_file); free(cfg->control_key_file); @@ -1761,6 +1783,10 @@ cfg_mark_ports(const char* str, int allow, int* avail, int num) #endif if(!mid) { int port = atoi(str); + if(port < 0) { + log_err("port number is negative: %d", port); + return 0; + } if(port == 0 && strcmp(str, "0") != 0) { log_err("cannot parse port number '%s'", str); return 0; @@ -1770,6 +1796,10 @@ cfg_mark_ports(const char* str, int allow, int* avail, int num) } else { int i, low, high = atoi(mid+1); char buf[16]; + if(high < 0) { + log_err("port number is negative: %d", high); + return 0; + } if(high == 0 && strcmp(mid+1, "0") != 0) { log_err("cannot parse port number '%s'", mid+1); return 0; @@ -1782,10 +1812,18 @@ cfg_mark_ports(const char* str, int allow, int* avail, int num) memcpy(buf, str, (size_t)(mid-str)); buf[mid-str] = 0; low = atoi(buf); + if(low < 0) { + log_err("port number is negative: %d", low); + return 0; + } if(low == 0 && strcmp(buf, "0") != 0) { log_err("cannot parse port number '%s'", buf); return 0; } + if(high > num) { + /* Stop very high values from taking a long time. */ + high = num; + } for(i=low; i<=high; i++) { if(i < num) avail[i] = (allow?i:0); @@ -2310,6 +2348,7 @@ config_apply(struct config_file* config) SERVE_EXPIRED_REPLY_TTL = (time_t)config->serve_expired_reply_ttl; SERVE_ORIGINAL_TTL = config->serve_original_ttl; MAX_NEG_TTL = (time_t)config->max_negative_ttl; + MIN_NEG_TTL = (time_t)config->min_negative_ttl; RTT_MIN_TIMEOUT = config->infra_cache_min_rtt; RTT_MAX_TIMEOUT = config->infra_cache_max_rtt; EDNS_ADVERTISED_SIZE = (uint16_t)config->edns_buffer_size; diff --git a/sbin/unwind/libunbound/util/config_file.h b/sbin/unwind/libunbound/util/config_file.h index 491109833e4..d3a2e268c49 100644 --- a/sbin/unwind/libunbound/util/config_file.h +++ b/sbin/unwind/libunbound/util/config_file.h @@ -315,6 +315,8 @@ struct config_file { int min_ttl; /** the number of seconds maximal negative TTL for SOA in auth */ int max_negative_ttl; + /** the number of seconds minimal negative TTL for SOA in auth */ + int min_negative_ttl; /** if prefetching of messages should be performed. */ int prefetch; /** if prefetching of DNSKEYs should be performed. */ @@ -535,6 +537,21 @@ struct config_file { /* wait time for unknown server in msec */ int unknown_server_time_limit; + /** Wait time to drop recursion replies */ + int discard_timeout; + + /** Wait limit for number of replies per IP address */ + int wait_limit; + + /** Wait limit for number of replies per IP address with cookie */ + int wait_limit_cookie; + + /** wait limit per netblock */ + struct config_str2list* wait_limit_netblock; + + /** wait limit with cookie per netblock */ + struct config_str2list* wait_limit_cookie_netblock; + /* maximum UDP response size */ size_t max_udp_size; @@ -705,6 +722,8 @@ struct config_file { char* cachedb_secret; /** cachedb that does not store, but only reads from database, if on */ int cachedb_no_store; + /** cachedb check before serving serve-expired response */ + int cachedb_check_when_serve_expired; #ifdef USE_REDIS /** redis server's IP address or host name */ char* redis_server_host; diff --git a/sbin/unwind/libunbound/util/configlexer.c b/sbin/unwind/libunbound/util/configlexer.c index dbaf487707c..42e9df82586 100644 --- a/sbin/unwind/libunbound/util/configlexer.c +++ b/sbin/unwind/libunbound/util/configlexer.c @@ -5,7 +5,7 @@ #define YY_INT_ALIGNED short int -/* $OpenBSD: configlexer.c,v 1.18 2024/04/13 13:58:35 florian Exp $ */ +/* $OpenBSD: configlexer.c,v 1.19 2024/06/14 07:45:44 florian Exp $ */ /* A lexical scanner generated by flex */ @@ -27,7 +27,7 @@ /* end standard C headers. */ -/* $OpenBSD: configlexer.c,v 1.18 2024/04/13 13:58:35 florian Exp $ */ +/* $OpenBSD: configlexer.c,v 1.19 2024/06/14 07:45:44 florian Exp $ */ /* flex integer type definitions */ @@ -368,8 +368,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 385 -#define YY_END_OF_BUFFER 386 +#define YY_NUM_RULES 392 +#define YY_END_OF_BUFFER 393 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -377,428 +377,438 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[3816] = +static yyconst flex_int16_t yy_accept[3905] = { 0, - 1, 1, 359, 359, 363, 363, 367, 367, 371, 371, - 1, 1, 375, 375, 379, 379, 386, 383, 1, 357, - 357, 384, 2, 384, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 359, 360, 360, 361, - 384, 363, 364, 364, 365, 384, 370, 367, 368, 368, - 369, 384, 371, 372, 372, 373, 384, 382, 358, 2, - 362, 384, 382, 378, 375, 376, 376, 377, 384, 379, - 380, 380, 381, 384, 383, 0, 1, 2, 2, 2, - 2, 383, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 359, 0, 363, 0, 370, 0, 367, 371, 0, 382, - 0, 2, 2, 382, 378, 0, 375, 379, 0, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 382, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 355, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 136, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 146, 383, 383, 383, 383, 383, - - 383, 383, 382, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 118, - 383, 383, 354, 383, 383, 383, 383, 383, 383, 383, - - 383, 8, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 137, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 151, 383, - 383, 382, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 345, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 382, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 71, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 267, 383, 14, 15, 383, 383, - - 20, 19, 383, 383, 246, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 144, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 244, 383, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 3, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 382, 383, 383, 383, 383, 383, - 383, 383, 383, 335, 383, 383, 383, 334, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 366, 383, 383, 383, 383, 383, 383, 383, 383, - 70, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 74, 383, - 304, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 346, 347, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 75, 383, 383, 145, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 140, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 233, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 22, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 172, 383, 383, 383, 383, 383, 382, 366, 383, - - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 116, 383, 383, 383, 383, 383, 383, - 383, 383, 312, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 16, 383, 383, 383, 383, 383, 383, - 383, 383, 200, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 171, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 115, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 37, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 38, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 383, 383, 383, 383, 72, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 143, 383, 383, 383, 382, 383, 383, 383, 383, 383, - 383, 135, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 73, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 271, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 201, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 60, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 290, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 65, 383, 66, 383, 383, 383, 383, 383, - 383, 119, 383, 120, 383, 383, 383, 383, 383, 117, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 7, 383, 383, 383, 383, 382, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 256, 383, 383, 383, 383, 383, 175, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 272, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 51, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 61, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 224, 383, 223, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 383, 383, 383, 383, 17, - 18, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 76, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 232, 383, 383, 383, 383, 383, 383, 383, 122, 383, - 121, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 214, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 152, 383, 383, - 383, 382, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 110, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 97, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 245, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 102, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 69, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 217, 218, 383, 383, 383, 306, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 6, 383, 383, 383, 383, 383, 383, - 383, 325, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 310, 383, 383, 383, 383, 383, 383, 383, - 336, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 48, 383, 383, 383, - - 383, 383, 50, 383, 383, 383, 98, 383, 383, 383, - 383, 383, 58, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 382, 383, 210, 383, 383, 383, - 147, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 237, 383, 383, 211, 383, 383, 383, - 383, 252, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 59, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 149, 128, 383, 129, 383, 383, - 383, 383, 127, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 168, 383, 383, 56, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 288, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 212, 383, 383, - 383, 383, 383, 222, 215, 383, 221, 383, 383, 383, - 383, 383, 383, 383, 383, 251, 383, 383, 383, 383, - 383, 383, 255, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 114, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 141, 383, 383, 383, - - 383, 383, 383, 383, 383, 67, 383, 383, 383, 383, - 31, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 21, 383, 383, 383, 383, 383, 383, - 383, 32, 41, 383, 180, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 208, - 383, 383, 382, 383, 383, 383, 383, 350, 383, 383, - 84, 86, 383, 383, 383, 383, 383, 383, 383, 383, - 351, 383, 383, 383, 383, 383, 383, 383, 314, 383, - 383, 383, 383, 268, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 383, 383, 130, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 167, 383, 52, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 262, 383, 383, 383, 383, 383, 383, - 383, 383, 329, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 174, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 323, 383, - 383, 383, 383, 243, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 342, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 193, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 123, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 187, 383, 202, 383, 383, 383, - 383, 383, 383, 383, 382, 383, 155, 383, 383, 383, - 383, 383, 383, 109, 383, 383, 383, 383, 235, 383, - 383, 383, 383, 383, 383, 383, 253, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 280, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 148, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 191, 383, 383, 383, 383, 383, - 383, 383, 87, 383, 88, 383, 383, 383, 383, 383, - 265, 383, 383, 383, 383, 383, 68, 332, 383, 383, - 383, 383, 383, 96, 203, 383, 225, 383, 257, 383, - 383, 216, 307, 383, 383, 383, 383, 302, 383, 383, - 383, 80, 383, 205, 383, 383, 383, 383, 383, 383, - 9, 383, 383, 383, 383, 383, 113, 383, 383, 383, - - 383, 383, 383, 294, 383, 383, 383, 383, 383, 383, - 234, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 382, 383, 383, - 383, 383, 190, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 192, 176, 383, 313, 383, 383, - 383, 383, 383, 279, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 247, 383, 383, 383, 383, - 383, 383, 305, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 173, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 333, 383, 204, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 79, 81, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 112, 383, 383, - 383, 383, 383, 383, 292, 383, 383, 383, 383, 383, - 383, 383, 309, 383, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 383, 239, 383, 39, 33, - 35, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 40, 383, 34, 36, 383, 42, - 383, 383, 383, 383, 383, 383, 383, 108, 383, 186, - 383, 383, 383, 383, 383, 383, 383, 382, 383, 383, - 383, 383, 383, 383, 337, 383, 383, 383, 383, 383, - 241, 238, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 78, 383, 383, 383, 150, 383, 131, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 169, - - 53, 383, 383, 383, 374, 13, 383, 383, 383, 383, - 383, 383, 383, 156, 383, 383, 383, 383, 383, 383, - 383, 383, 327, 383, 330, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 12, 383, - 383, 23, 383, 383, 383, 383, 383, 383, 383, 298, - 383, 383, 344, 383, 383, 383, 383, 311, 383, 383, - 383, 383, 82, 383, 249, 383, 383, 383, 383, 383, - 240, 383, 383, 383, 383, 77, 383, 383, 383, 383, - 383, 383, 24, 383, 383, 49, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 185, 184, - - 383, 383, 374, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 242, 236, 383, 254, 383, 383, 315, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 198, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 89, 383, 383, 383, - 383, 383, 383, 383, 383, 293, 383, 383, 383, 383, - 220, 383, 383, 383, 383, 383, 383, 248, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 300, 383, - 383, 383, 338, 383, 340, 339, 182, 383, 383, 383, - - 83, 383, 383, 383, 383, 194, 383, 383, 383, 383, - 383, 124, 126, 125, 383, 383, 383, 26, 383, 383, - 177, 383, 179, 383, 226, 383, 383, 383, 383, 183, - 383, 383, 383, 383, 258, 383, 383, 383, 383, 383, - 383, 383, 158, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 270, 383, 383, 383, 383, - 383, 383, 383, 352, 383, 28, 383, 308, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 94, 227, 383, 383, - 264, 383, 383, 383, 291, 383, 331, 383, 219, 383, - - 383, 303, 383, 383, 383, 301, 62, 383, 383, 383, - 383, 383, 383, 383, 4, 383, 383, 383, 383, 383, - 139, 383, 157, 383, 383, 383, 199, 30, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 261, 43, 44, - 383, 383, 383, 383, 383, 383, 383, 316, 383, 383, - 383, 383, 383, 383, 383, 278, 383, 383, 383, 383, - 383, 383, 383, 383, 230, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 93, 92, 383, 383, 63, 383, 383, 289, 297, 383, - - 266, 383, 383, 383, 383, 383, 11, 383, 383, 383, - 383, 356, 383, 383, 383, 383, 383, 138, 383, 383, - 383, 383, 383, 383, 228, 99, 383, 383, 46, 383, - 383, 383, 383, 383, 383, 383, 383, 189, 383, 383, - 383, 383, 383, 383, 383, 160, 383, 383, 383, 383, - 269, 383, 383, 383, 383, 383, 277, 383, 383, 383, - 383, 153, 383, 383, 383, 132, 134, 133, 383, 383, - 383, 101, 105, 100, 383, 170, 383, 383, 383, 383, - 90, 383, 263, 299, 383, 383, 383, 383, 383, 383, - 10, 383, 383, 383, 383, 383, 295, 343, 383, 383, - - 383, 383, 383, 383, 383, 383, 349, 45, 383, 383, - 383, 383, 383, 188, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 106, - 104, 383, 383, 57, 383, 383, 91, 383, 328, 383, - 383, 383, 383, 25, 383, 383, 383, 383, 383, 213, - 383, 383, 341, 383, 383, 383, 383, 229, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 209, 383, 383, - 178, 85, 383, 383, 383, 383, 383, 317, 383, 383, - 383, 383, 383, 383, 383, 274, 383, 383, 273, 154, - - 383, 383, 103, 383, 54, 383, 383, 161, 162, 165, - 166, 163, 164, 95, 326, 383, 383, 296, 142, 383, - 383, 383, 383, 27, 383, 181, 383, 383, 383, 383, - 207, 383, 260, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 196, 195, 231, 47, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 324, 383, 383, 383, 383, 111, 383, - 259, 383, 287, 321, 383, 383, 383, 383, 383, 383, - - 383, 383, 383, 383, 383, 353, 383, 107, 55, 64, - 5, 383, 383, 250, 383, 383, 322, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 275, 29, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 276, 383, 383, 383, 159, 383, 383, 383, 383, 383, - 383, 383, 383, 197, 383, 206, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 318, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 348, 383, 383, 283, 383, 383, 383, - 383, 383, 319, 383, 383, 383, 383, 383, 383, 320, - - 383, 383, 383, 281, 383, 284, 285, 383, 383, 383, - 383, 383, 282, 286, 0 + 1, 1, 366, 366, 370, 370, 374, 374, 378, 378, + 1, 1, 382, 382, 386, 386, 393, 390, 1, 364, + 364, 391, 2, 391, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 366, 367, 367, + 368, 391, 370, 371, 371, 372, 391, 377, 374, 375, + 375, 376, 391, 378, 379, 379, 380, 391, 389, 365, + 2, 369, 391, 389, 385, 382, 383, 383, 384, 391, + 386, 387, 387, 388, 391, 390, 0, 1, 2, 2, + 2, 2, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 366, 0, 370, 0, 377, 0, 374, 378, + 0, 389, 0, 2, 2, 389, 385, 0, 382, 386, + 0, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 389, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 362, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 137, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 147, 390, + + 390, 390, 390, 390, 390, 390, 390, 389, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 119, 390, 390, 361, 390, + + 390, 390, 390, 390, 390, 390, 390, 8, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 138, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 152, 390, 390, 390, 389, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 352, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 389, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 71, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 273, 390, 14, 15, 390, 390, + 20, 19, 390, 390, 247, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 145, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 245, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 3, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 389, 390, 390, 390, 390, + 390, 390, 390, 390, 341, 390, 390, 390, 340, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 373, 390, 390, 390, 390, 390, 390, + 390, 390, 70, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 74, 390, 310, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 353, 354, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 75, 390, 390, 146, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 141, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 234, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 22, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 173, 390, 390, 390, 390, 390, 390, + 389, 373, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 117, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 318, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 16, 390, + 390, 390, 390, 390, 390, 390, 390, 201, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 172, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 116, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 37, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 390, 38, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 72, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 144, 390, 390, 390, + 389, 390, 390, 390, 390, 390, 390, 136, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 73, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 277, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 202, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 60, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 296, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 65, 390, 66, 390, 390, 390, 390, 390, 390, 120, + 390, 121, 390, 390, 390, 390, 390, 118, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 7, 390, 390, 390, 390, 390, 389, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 262, 390, 390, 390, 390, 390, 390, 176, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 278, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 51, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 61, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 225, 390, 224, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 17, 18, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 76, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 233, 390, 390, 390, 390, 390, 390, 390, + 123, 390, 122, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 215, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 153, + 390, 253, 390, 390, 390, 389, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 111, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 98, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 246, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 103, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 69, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 218, 219, + 390, 390, 390, 312, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 6, 390, 390, 390, 390, 390, 390, 390, 331, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 316, + 390, 390, 390, 390, 390, 390, 390, 342, 390, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 48, 390, 390, 390, 390, 390, 50, + 390, 390, 390, 99, 390, 390, 390, 390, 390, 58, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 389, 390, 211, 390, 390, 390, 148, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 238, 390, 390, 212, 390, 390, + 390, 390, 390, 258, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 59, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 150, 129, 390, 130, + 390, 390, 390, 390, 128, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 169, 390, 390, 56, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 294, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 213, + 390, 390, 390, 390, 390, 223, 216, 390, 222, 390, + 390, 390, 390, 390, 390, 390, 390, 257, 390, 390, + 390, 390, 390, 390, 261, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 115, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 142, 390, + 390, 390, 390, 390, 390, 390, 390, 67, 390, 390, + 390, 390, 31, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 21, 390, 390, 390, 390, + 390, 390, 390, 32, 41, 390, 181, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 209, 390, 390, 389, 390, 390, 390, + 390, 357, 390, 390, 84, 390, 87, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 358, 390, 390, 390, + 390, 390, 390, 390, 390, 320, 390, 390, 390, 390, + 274, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 131, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 168, 390, 52, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 268, 390, 390, 390, 390, 390, 390, 390, 390, 335, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 175, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 329, 390, 390, 390, 390, + 244, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 349, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 194, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 124, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 188, 390, 203, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 389, 390, 156, 390, 390, 390, 390, + 390, 390, 390, 390, 110, 390, 390, 390, 390, 236, + 390, 390, 390, 390, 390, 390, 390, 390, 259, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 286, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 149, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 192, 390, 390, 390, + 390, 390, 390, 390, 88, 390, 89, 390, 390, 390, + 390, 390, 271, 390, 390, 390, 390, 390, 68, 338, + + 390, 390, 390, 390, 390, 97, 204, 390, 226, 390, + 263, 390, 390, 217, 313, 390, 390, 390, 390, 308, + 390, 390, 390, 80, 390, 206, 390, 390, 390, 390, + 390, 390, 9, 390, 390, 390, 390, 390, 114, 390, + 390, 390, 390, 390, 390, 300, 390, 390, 390, 390, + 390, 390, 235, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 389, 390, 390, 390, 390, 191, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 193, 252, 177, 390, 319, 390, 390, 390, 390, 390, + 285, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 248, 390, 390, 390, 390, 390, 390, 311, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 174, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 339, 390, 205, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 79, 81, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 113, 390, 390, 390, 390, 390, + 390, 298, 390, 390, 390, 390, 390, 390, 390, 315, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 240, 390, 39, 33, 35, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 40, 390, 34, 36, 390, 42, 390, 390, 390, + 390, 390, 390, 390, 109, 390, 187, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 389, 390, 390, 390, + + 390, 390, 390, 390, 390, 343, 390, 390, 390, 390, + 390, 242, 239, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 78, 390, 390, 390, 151, 390, 132, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 170, 53, 390, 390, 390, 381, 13, 390, 390, 390, + 390, 390, 390, 390, 157, 390, 390, 390, 390, 390, + 390, 390, 390, 333, 390, 336, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 12, + 390, 390, 23, 390, 390, 390, 390, 390, 390, 390, + + 304, 390, 390, 351, 390, 390, 390, 390, 317, 390, + 390, 390, 390, 82, 390, 250, 390, 390, 390, 390, + 390, 241, 390, 390, 390, 390, 77, 390, 390, 390, + 390, 390, 390, 24, 390, 390, 49, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 186, + 185, 390, 390, 390, 390, 381, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 243, 237, 390, + 260, 390, 390, 321, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 199, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 90, 390, 390, 390, 390, 390, 390, 390, 390, + 299, 390, 390, 390, 390, 221, 390, 390, 390, 390, + 390, 390, 249, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 306, 390, 390, 390, 345, 390, 347, + 346, 183, 390, 390, 390, 83, 390, 390, 390, 390, + 195, 390, 390, 390, 390, 390, 125, 127, 126, 390, + 390, 390, 26, 390, 390, 178, 390, 180, 390, 227, + 390, 390, 390, 390, 184, 390, 390, 254, 390, 390, + 390, 390, 264, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 159, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 276, 390, 390, 390, 390, + 390, 390, 390, 359, 390, 28, 390, 314, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 95, 228, 390, 390, + 270, 390, 390, 390, 297, 390, 337, 390, 220, 390, + 390, 309, 390, 390, 390, 307, 62, 390, 390, 390, + 390, 390, 390, 390, 4, 390, 390, 390, 390, 390, + 140, 390, 158, 390, 390, 390, 200, 30, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 267, + 43, 44, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 322, 390, 390, 390, 390, 390, 390, 390, 284, + 390, 390, 390, 390, 390, 390, 390, 390, 231, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 94, 93, 390, 390, 63, 390, + 390, 295, 303, 390, 272, 390, 390, 390, 390, 390, + 11, 390, 390, 390, 390, 363, 390, 390, 390, 390, + 390, 139, 390, 390, 390, 390, 390, 390, 229, 100, + 390, 390, 46, 390, 390, 390, 390, 390, 390, 390, + + 390, 190, 390, 255, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 161, 390, 390, 390, 390, 275, 390, + 390, 390, 390, 390, 283, 390, 390, 390, 390, 154, + 390, 390, 390, 133, 135, 134, 390, 390, 390, 102, + 106, 101, 390, 171, 390, 390, 390, 390, 91, 390, + 269, 305, 390, 390, 390, 390, 390, 390, 10, 390, + 390, 390, 390, 390, 301, 350, 390, 390, 390, 390, + 390, 390, 390, 390, 356, 45, 390, 390, 390, 390, + 390, 189, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 107, 105, 390, 390, 57, 390, 390, 92, 390, 334, + 390, 390, 390, 390, 25, 390, 390, 390, 390, 390, + 214, 390, 390, 348, 390, 390, 390, 390, 230, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 210, + 390, 390, 179, 85, 86, 390, 390, 390, 390, 390, + 390, 323, 390, 390, 390, 390, 390, 390, 390, 280, + 390, 390, 279, 155, 390, 390, 104, 390, 54, 390, + 390, 162, 163, 166, 167, 164, 165, 96, 332, 390, + 390, 302, 143, 390, 390, 390, 390, 27, 390, 182, + + 390, 390, 390, 390, 390, 208, 390, 266, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 197, 196, 232, 47, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 330, 390, 390, 390, 390, 112, 390, 390, 265, + 390, 390, 293, 327, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 360, 390, 108, 55, 64, + 5, 390, 390, 251, 390, 390, 390, 390, 328, 390, + + 390, 390, 390, 390, 390, 390, 390, 390, 281, 29, + 390, 390, 390, 256, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 282, 390, 390, 390, 390, 160, + 390, 390, 390, 390, 390, 390, 390, 390, 198, 390, + 207, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 324, 390, 390, 390, 390, 390, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, 390, 390, + 390, 355, 344, 390, 390, 289, 390, 390, 390, 390, + 390, 325, 390, 390, 390, 390, 390, 390, 326, 390, + 390, 390, 287, 390, 290, 291, 390, 390, 390, 390, + + 390, 288, 292, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -841,1685 +851,1725 @@ static yyconst flex_int32_t yy_meta[41] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[3834] = +static yyconst flex_int16_t yy_base[3923] = { 0, 0, 0, 38, 41, 44, 46, 59, 65, 71, 77, - 90, 112, 96, 118, 124, 136, 3191, 3104, 81, 7436, - 7436, 7436, 129, 52, 137, 63, 130, 159, 70, 132, + 90, 112, 96, 118, 124, 136, 3268, 3142, 81, 7612, + 7612, 7612, 129, 52, 137, 63, 130, 159, 70, 132, 134, 146, 57, 88, 76, 166, 177, 95, 199, 155, - 187, 201, 210, 172, 156, 148, 2859, 7436, 7436, 7436, - 107, 2648, 7436, 7436, 7436, 190, 2503, 2468, 7436, 7436, - 7436, 239, 2382, 7436, 7436, 7436, 203, 2265, 7436, 243, - 7436, 247, 212, 2082, 2052, 7436, 7436, 7436, 251, 1980, - 7436, 7436, 7436, 228, 1711, 257, 261, 0, 264, 0, - 0, 258, 262, 260, 195, 170, 251, 265, 269, 92, - - 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, 335, 331, 336, 139, - 337, 342, 347, 350, 351, 353, 339, 360, 352, 363, - 356, 364, 366, 370, 374, 383, 379, 380, 389, 378, - 392, 225, 393, 395, 400, 399, 402, 403, 405, 408, - 1561, 425, 1340, 427, 1244, 435, 1182, 1079, 439, 967, - 443, 447, 0, 424, 937, 451, 920, 375, 455, 443, - 455, 432, 451, 452, 453, 454, 215, 457, 456, 458, - 459, 462, 460, 480, 467, 472, 482, 419, 486, 487, - - 493, 478, 503, 485, 495, 505, 499, 498, 515, 512, - 514, 513, 517, 520, 521, 470, 522, 523, 539, 525, - 524, 526, 547, 548, 552, 556, 534, 561, 566, 532, - 568, 564, 565, 573, 570, 577, 576, 585, 580, 581, - 572, 582, 584, 586, 590, 589, 591, 594, 599, 595, - 600, 613, 604, 601, 617, 605, 622, 615, 618, 630, - 608, 626, 623, 632, 635, 643, 644, 636, 645, 640, - 537, 646, 649, 656, 659, 658, 641, 657, 654, 661, - 663, 665, 667, 668, 670, 679, 682, 678, 681, 690, - 687, 689, 688, 692, 693, 696, 669, 705, 695, 708, - - 711, 700, 709, 713, 715, 717, 719, 718, 722, 723, - 728, 724, 7436, 731, 730, 735, 736, 745, 742, 740, - 747, 754, 755, 750, 751, 756, 753, 757, 759, 760, - 761, 764, 767, 771, 768, 773, 775, 788, 781, 779, - 794, 780, 790, 792, 815, 796, 804, 795, 819, 829, - 805, 824, 801, 825, 816, 826, 830, 835, 837, 810, - 838, 839, 849, 851, 852, 853, 854, 855, 857, 856, - 865, 860, 7436, 862, 864, 881, 868, 878, 885, 870, - 886, 891, 887, 892, 901, 898, 899, 913, 935, 900, - 902, 903, 906, 911, 7436, 924, 915, 959, 917, 919, - - 945, 940, 909, 933, 942, 941, 947, 955, 963, 960, - 948, 965, 976, 964, 977, 982, 983, 984, 985, 988, - 999, 991, 994, 995, 996, 1006, 1001, 1004, 1008, 1018, - 1005, 1009, 1011, 1012, 1017, 1019, 1030, 1034, 1038, 1039, - 1022, 1032, 1033, 1024, 1041, 1046, 1044, 1067, 1055, 1047, - 1045, 1057, 1062, 1069, 1065, 1068, 1073, 1075, 1082, 1070, - 1091, 1076, 1094, 1095, 1083, 1097, 1105, 1101, 1103, 1102, - 1104, 1108, 1109, 1110, 1112, 1115, 1116, 1118, 1120, 1121, - 1122, 1126, 1128, 1129, 1136, 1133, 1139, 1143, 1140, 7436, - 1151, 1146, 7436, 1148, 1149, 1150, 1152, 1153, 1154, 1155, - - 1156, 7436, 1158, 1163, 1164, 1172, 1165, 1173, 1177, 1188, - 1180, 1183, 1187, 1189, 1190, 1191, 1193, 1200, 1196, 1205, - 1207, 1199, 1209, 1210, 1203, 1211, 1212, 1217, 1218, 1221, - 1219, 1220, 1223, 1240, 7436, 1227, 1228, 1230, 1234, 1231, - 1237, 1251, 1253, 1263, 1243, 1264, 1255, 1252, 1276, 1262, - 1275, 1279, 1265, 1273, 1283, 1278, 1285, 1280, 1287, 1290, - 1296, 1292, 1294, 1301, 1298, 1300, 1302, 1304, 7436, 1309, - 1308, 1320, 1321, 1313, 1314, 1322, 1323, 1332, 1327, 1328, - 1330, 1331, 1333, 1336, 1339, 1349, 1351, 1338, 1358, 1359, - 1343, 1354, 1356, 1361, 1362, 1363, 1364, 1365, 1375, 1371, - - 1378, 1386, 1389, 1388, 1391, 1393, 1400, 1402, 1379, 1395, - 1398, 1403, 1399, 1405, 1407, 1408, 1409, 1412, 1413, 1368, - 1423, 1418, 1421, 1419, 1422, 1420, 1428, 1426, 1430, 1431, - 1433, 1439, 1440, 1448, 1444, 1443, 1450, 1445, 1446, 1454, - 1459, 1464, 1465, 1466, 1456, 7436, 1473, 1468, 1476, 1474, - 1482, 1481, 1484, 1483, 1489, 1485, 1490, 1491, 1493, 1492, - 1495, 1499, 1496, 1502, 1506, 1509, 1510, 1511, 1513, 1522, - 1518, 1514, 1531, 1519, 1530, 1532, 1521, 1534, 1536, 1538, - 1540, 1547, 1544, 1551, 1552, 1542, 1553, 1546, 1566, 1556, - 1557, 1563, 1577, 1554, 1572, 1574, 1564, 1585, 1580, 1588, - - 1589, 1596, 1591, 1593, 1600, 1601, 1597, 1576, 1604, 1609, - 1605, 1606, 1610, 1612, 1613, 1614, 1621, 1616, 1618, 1625, - 1629, 1617, 1619, 1633, 1631, 1643, 1639, 1641, 1642, 1647, - 1648, 1649, 1652, 1653, 1651, 1657, 1658, 1660, 1661, 1665, - 1650, 1662, 1674, 1672, 1673, 1682, 1681, 1683, 1684, 1685, - 1689, 1687, 1691, 1690, 1698, 1701, 1703, 1699, 1705, 1707, - 1709, 1710, 1713, 1720, 1721, 1715, 1724, 1727, 1729, 1730, - 1731, 1732, 1733, 1736, 1739, 1743, 1744, 1747, 7436, 1750, - 1757, 1752, 1753, 1755, 1758, 1760, 1761, 1768, 1764, 1767, - 1763, 1765, 1766, 1791, 7436, 1777, 7436, 7436, 1778, 1780, - - 7436, 7436, 1789, 1776, 7436, 1783, 1788, 1795, 1799, 1802, - 1807, 1816, 1801, 1809, 1814, 1818, 1825, 1839, 1822, 1821, - 1823, 1829, 1820, 1830, 1832, 1845, 1834, 1856, 1833, 1837, - 1784, 1865, 1863, 1866, 1868, 1869, 1871, 1873, 1876, 1875, - 1882, 1884, 1877, 1885, 1831, 1887, 1890, 1888, 1891, 1893, - 1894, 1897, 1898, 1895, 1900, 1901, 1855, 1905, 1903, 1921, - 7436, 1917, 1924, 1916, 1906, 1919, 1932, 1928, 1935, 1927, - 1931, 1936, 1941, 1943, 1938, 1945, 1946, 1947, 1950, 1948, - 1949, 1957, 1951, 1959, 1960, 1963, 1962, 1972, 1965, 1968, - 7436, 1975, 1976, 1974, 1977, 1981, 1979, 1990, 1989, 1982, - - 1978, 1991, 1995, 2005, 1997, 2001, 2006, 2007, 2009, 2010, - 2012, 2013, 7436, 2015, 2020, 2014, 2022, 2023, 2028, 2025, - 2029, 2031, 2032, 2037, 2036, 2038, 2039, 2041, 2054, 2047, - 2043, 2050, 2051, 2058, 2061, 2063, 2062, 2064, 2074, 2065, - 2068, 2077, 2075, 2079, 2078, 2080, 2081, 2083, 2085, 2096, - 2097, 2092, 2099, 2094, 2089, 2107, 2110, 2111, 2112, 2113, - 2114, 2116, 2117, 2126, 2127, 2129, 2122, 2123, 2130, 2128, - 2135, 2138, 2139, 2142, 2147, 2149, 2150, 2151, 2143, 2153, - 2155, 2157, 2159, 7436, 2161, 2163, 2166, 7436, 2168, 2167, - 2169, 2191, 2171, 2174, 2179, 2182, 2189, 2184, 2199, 2186, - - 2192, 2193, 2205, 2214, 2211, 2210, 2217, 2215, 2222, 2216, - 2218, 2225, 2232, 2226, 2229, 2235, 2236, 2234, 2245, 2248, - 2252, 2254, 2256, 2255, 2238, 2257, 2259, 2278, 2258, 2261, - 2267, 2262, 2263, 2268, 2272, 2269, 2271, 2275, 2282, 2288, - 2290, 2291, 2294, 2293, 2295, 2296, 2300, 2302, 2309, 2310, - 2303, 7436, 2317, 2316, 2315, 2321, 2322, 2330, 2327, 2325, - 7436, 2328, 2329, 2331, 2339, 2336, 2340, 2341, 2342, 2343, - 2348, 2350, 2351, 2352, 2355, 2354, 2356, 2371, 7436, 2353, - 7436, 2358, 2366, 2367, 2374, 2381, 2368, 2376, 2377, 2378, - 2380, 2383, 7436, 7436, 2384, 2391, 2394, 2397, 2405, 2406, - - 2401, 2402, 2407, 7436, 2408, 2415, 7436, 2412, 2404, 2418, - 2411, 2422, 2423, 2426, 2427, 2428, 2429, 2436, 2431, 2438, - 2434, 2435, 2443, 7436, 2446, 2450, 2437, 2454, 2455, 2448, - 2452, 2462, 2463, 2465, 7436, 2466, 2469, 2470, 2471, 2479, - 2475, 2478, 2480, 2481, 2482, 2486, 2488, 2489, 2490, 2495, - 2497, 2500, 2502, 2501, 2505, 2517, 2513, 2520, 7436, 2516, - 2512, 2499, 2528, 2524, 2526, 2523, 2527, 2533, 2531, 2515, - 2537, 2539, 2535, 2543, 2541, 2544, 2545, 2553, 2557, 2550, - 2555, 2562, 2552, 2554, 2558, 2563, 2573, 2566, 2567, 2572, - 2574, 7436, 2575, 2578, 2579, 2580, 2583, 2582, 280, 2586, - - 2589, 2593, 2590, 2592, 2596, 2598, 2603, 2612, 2613, 2609, - 2610, 2614, 2615, 2616, 2608, 2618, 2620, 2627, 2628, 2630, - 2629, 2631, 2634, 7436, 2638, 2635, 2639, 2640, 2641, 2644, - 2645, 2652, 7436, 2651, 2659, 2662, 2664, 2654, 2669, 2670, - 2672, 2674, 2675, 7436, 2676, 2677, 2678, 2685, 2682, 2680, - 2686, 2688, 7436, 2699, 2695, 2701, 2689, 2703, 2710, 2693, - 2704, 2705, 2711, 2712, 2713, 2716, 2717, 2718, 2721, 2722, - 2725, 2726, 2727, 2739, 2732, 2734, 2735, 2736, 2743, 2745, - 2746, 2747, 2748, 2755, 2750, 7436, 2759, 2756, 2760, 2758, - 2761, 2764, 2768, 2767, 2783, 2769, 2775, 2778, 2784, 2792, - - 2786, 2787, 2804, 2794, 2802, 2806, 2803, 2814, 2813, 2816, - 2819, 2809, 2822, 2824, 2817, 2825, 2832, 2834, 2833, 2831, - 2835, 2839, 2776, 2838, 2847, 2842, 2851, 2849, 2846, 2852, - 2853, 2858, 2860, 2875, 2880, 2857, 7436, 2866, 2864, 2861, - 2872, 2882, 2889, 2884, 2885, 2886, 2887, 2895, 2896, 2897, - 2898, 2899, 2906, 2901, 2903, 2904, 2907, 2914, 2910, 2911, - 2918, 2922, 2923, 2926, 2928, 2929, 2933, 2930, 2934, 7436, - 2938, 2937, 2939, 2943, 2946, 2947, 2950, 2953, 2951, 2955, - 2957, 2959, 2961, 2962, 2964, 2963, 2965, 2974, 2970, 2977, - 2969, 2972, 7436, 2984, 2973, 2979, 2989, 2983, 2991, 2993, - - 2995, 2999, 2998, 3004, 3006, 3007, 3008, 3009, 3010, 7436, - 3018, 3019, 3015, 3017, 3027, 3024, 3026, 3028, 3030, 3031, - 7436, 3032, 3034, 3036, 3035, 3038, 2172, 3047, 3048, 3043, - 3044, 7436, 3059, 3040, 3056, 3063, 3061, 3062, 3064, 3065, - 3066, 3068, 3069, 3071, 3070, 3072, 3080, 3073, 3077, 7436, - 3084, 3085, 3092, 3087, 3093, 3098, 3095, 3097, 3100, 3108, - 3101, 3117, 3107, 7436, 3120, 3122, 3123, 3130, 3125, 3111, - 3127, 3128, 3131, 3135, 3132, 3138, 3141, 3139, 7436, 3142, - 3143, 3147, 3148, 3151, 3152, 3153, 3160, 3157, 3162, 3163, - 3166, 3164, 3168, 3167, 3171, 3174, 3184, 3173, 3185, 3175, - - 3188, 3192, 3187, 3194, 3190, 3200, 3204, 3211, 3195, 3206, - 3213, 3208, 3215, 3216, 3217, 3224, 3225, 3226, 3227, 3229, - 7436, 3233, 3234, 3235, 3221, 3236, 3240, 3241, 3243, 3245, - 3242, 3247, 3252, 3253, 3258, 3265, 3269, 3266, 3260, 3271, - 3273, 3274, 3275, 3276, 3278, 3279, 3282, 3289, 3285, 3286, - 3287, 3288, 3291, 3301, 3294, 3296, 3311, 3306, 3309, 3308, - 3310, 3312, 3314, 3316, 3298, 3320, 3321, 3323, 3315, 3324, - 3328, 3337, 3339, 3341, 3344, 3332, 3342, 3347, 3349, 3352, - 7436, 3350, 3360, 3359, 3351, 3353, 3361, 3370, 3367, 3380, - 3375, 3365, 3382, 3379, 3381, 3383, 3386, 3389, 3388, 3391, - - 3398, 3394, 7436, 3395, 7436, 3402, 3399, 3400, 3403, 3414, - 3401, 7436, 3410, 7436, 3412, 3417, 3418, 3419, 3422, 7436, - 3423, 3424, 3427, 3428, 3429, 3430, 3425, 3432, 3433, 3436, - 3442, 3450, 3454, 3439, 3443, 3451, 3446, 3457, 3458, 3460, - 3462, 3463, 3464, 3470, 3472, 3465, 3481, 3467, 3473, 3475, - 3483, 3478, 3488, 7436, 3491, 3495, 3494, 3496, 3484, 3499, - 3502, 3503, 3504, 3505, 3506, 3508, 3514, 3511, 3512, 3510, - 3521, 3524, 3534, 3525, 3526, 3535, 3542, 3527, 3543, 3541, - 7436, 3538, 3549, 3544, 3550, 3551, 7436, 3553, 3554, 3555, - 3559, 3561, 3562, 3564, 3565, 3566, 3570, 3571, 3572, 3581, - - 3582, 3585, 3574, 7436, 3586, 3589, 3573, 3597, 3602, 3591, - 3609, 3610, 3606, 3607, 3612, 3620, 3616, 3605, 3617, 3619, - 3622, 3623, 3630, 3631, 3633, 3629, 3643, 3628, 3636, 3640, - 3644, 3632, 3645, 3646, 3647, 3648, 3653, 3655, 3656, 3654, - 3652, 3658, 3657, 3660, 3664, 7436, 3663, 3673, 3674, 3682, - 3678, 3680, 3681, 3683, 3686, 3690, 3684, 7436, 3695, 3688, - 3699, 3700, 3702, 3705, 3692, 3709, 3710, 3713, 3711, 3714, - 3715, 3716, 7436, 3719, 7436, 3717, 3718, 3737, 3730, 3742, - 3736, 3731, 3744, 3746, 3725, 3750, 3751, 3752, 3755, 3753, - 3754, 3760, 3761, 3762, 3763, 3764, 3765, 3766, 3778, 3768, - - 3780, 3770, 3781, 3783, 3784, 3786, 3797, 3788, 3792, 7436, - 7436, 3785, 3795, 3799, 3803, 3805, 3807, 3814, 3808, 3817, - 3820, 3811, 3818, 3822, 3824, 3833, 7436, 3830, 3831, 3828, - 3834, 3835, 3847, 3837, 3852, 3854, 3840, 3853, 3862, 3857, - 7436, 3838, 3859, 3860, 3870, 3865, 3866, 3877, 7436, 3868, - 7436, 3861, 3872, 3873, 3881, 3882, 3884, 3883, 3885, 3886, - 3888, 3890, 3898, 3901, 3906, 3905, 3903, 3910, 3907, 3911, - 3912, 3914, 3915, 3923, 3918, 3920, 3921, 7436, 3925, 3922, - 3926, 3932, 3933, 3938, 3941, 3935, 3934, 7436, 3945, 3949, - 3947, 3948, 3951, 3955, 3952, 3961, 3959, 3963, 3964, 3965, - - 3967, 3968, 3970, 3972, 7436, 3975, 3976, 3983, 3981, 3984, - 3985, 3987, 3995, 3988, 3990, 7436, 3999, 4003, 4000, 4007, - 4006, 4010, 4011, 4012, 4014, 4016, 4017, 4018, 4019, 4020, - 4021, 4027, 4026, 4023, 4031, 4029, 4032, 4042, 4033, 4046, - 4056, 4043, 7436, 4051, 4052, 4054, 4058, 4055, 4057, 4062, - 4060, 4066, 4069, 4063, 4080, 4081, 4070, 4072, 4077, 4085, - 4086, 4094, 4089, 7436, 4101, 4087, 4102, 4097, 4099, 4100, - 4103, 4108, 4109, 4110, 4112, 4113, 4114, 4116, 4117, 4118, - 4126, 4130, 4127, 4123, 4132, 4133, 4142, 4134, 4137, 4138, - 4144, 7436, 4161, 4148, 4151, 4156, 4152, 4159, 4170, 4167, - - 4165, 4147, 4172, 4169, 4177, 4173, 4175, 4179, 4182, 4184, - 4186, 7436, 7436, 4188, 4189, 4190, 7436, 4191, 4192, 4202, - 4198, 4194, 4201, 4204, 4205, 4207, 4209, 4211, 4208, 4218, - 4224, 4212, 4221, 7436, 4231, 4227, 4235, 4228, 4233, 4236, - 4239, 7436, 4242, 4249, 4245, 4246, 4247, 4250, 4252, 4254, - 4255, 4257, 4259, 4253, 4260, 4263, 4274, 4266, 4276, 4267, - 4275, 4277, 7436, 4279, 4280, 4283, 4285, 4282, 4289, 4292, - 7436, 4291, 4294, 4295, 4303, 4304, 4301, 4305, 4311, 4312, - 4317, 4318, 4319, 4321, 4320, 4322, 4324, 4326, 4335, 4327, - 4332, 4331, 4330, 4338, 4348, 4350, 7436, 4351, 4341, 4353, - - 4356, 4359, 7436, 4363, 4370, 4371, 7436, 4372, 4355, 4374, - 4368, 4382, 7436, 4375, 4384, 4377, 4385, 4367, 4396, 4378, - 4397, 4394, 4383, 4395, 4398, 4399, 7436, 4401, 4404, 4405, - 7436, 4407, 4409, 4416, 4419, 4421, 4414, 4408, 4430, 4425, - 4422, 4426, 4433, 7436, 4434, 4436, 7436, 4437, 4441, 4438, - 4443, 7436, 4446, 4447, 4448, 4452, 4454, 4455, 4456, 4462, - 4467, 4449, 4464, 4457, 4468, 4470, 4471, 4478, 4477, 4479, - 4480, 4482, 7436, 4485, 4481, 4483, 4484, 4489, 4490, 4494, - 4500, 4501, 4502, 4504, 7436, 7436, 4506, 7436, 4508, 4510, - 4513, 4514, 7436, 4516, 4518, 4521, 4519, 4523, 4525, 4520, - - 4528, 4538, 4533, 7436, 4540, 4542, 7436, 4535, 4544, 4551, - 4547, 4548, 4549, 4552, 4553, 4556, 4559, 4562, 4563, 4564, - 4566, 4560, 4567, 4568, 4588, 4569, 4591, 7436, 4570, 4573, - 4577, 4585, 4581, 4595, 4598, 4600, 4602, 7436, 4603, 4604, - 4607, 4609, 4611, 7436, 7436, 4612, 7436, 4613, 4617, 4616, - 4627, 4619, 4620, 4630, 4623, 7436, 4632, 4633, 4636, 4637, - 4639, 4646, 7436, 4645, 4649, 4641, 4642, 4651, 4658, 4656, - 4653, 4655, 4670, 4657, 7436, 4662, 4668, 4672, 4674, 4675, - 4677, 4678, 4679, 4686, 4685, 4687, 4683, 4697, 4692, 4695, - 4698, 4702, 4704, 4706, 4707, 4696, 7436, 4709, 4711, 4716, - - 4717, 4725, 4721, 4722, 4727, 7436, 4728, 4730, 4729, 4732, - 7436, 4735, 4736, 4740, 4746, 4743, 4747, 4750, 4751, 4752, - 4755, 4757, 4753, 7436, 4754, 4759, 4760, 4770, 4773, 4774, - 4763, 7436, 7436, 4776, 7436, 4779, 4764, 4784, 4786, 4788, - 4789, 4791, 4792, 4794, 4796, 4797, 4802, 4800, 4807, 7436, - 4803, 4815, 4808, 4818, 4825, 4827, 4823, 7436, 4824, 4811, - 7436, 7436, 4810, 4834, 4835, 4829, 4840, 4841, 4837, 4844, - 7436, 4851, 4843, 4847, 4853, 4856, 4859, 4863, 7436, 4865, - 4846, 4867, 4848, 7436, 4860, 4870, 4872, 4873, 4874, 4876, - 4877, 4878, 4881, 4880, 4883, 4887, 4884, 4892, 4889, 4890, - - 4896, 4900, 4901, 4903, 4904, 4905, 4910, 7436, 4911, 4906, - 4913, 4915, 4918, 4921, 4924, 4926, 4927, 4928, 4935, 4936, - 7436, 4922, 7436, 4931, 4938, 4940, 4948, 4933, 4955, 4951, - 4957, 4958, 4942, 4959, 4961, 4962, 4965, 4967, 4976, 4968, - 4970, 4977, 4978, 7436, 4981, 4986, 4984, 4988, 4991, 4993, - 4995, 4996, 7436, 4997, 4998, 5004, 5005, 5007, 5009, 5010, - 5012, 5013, 5015, 5019, 5016, 5023, 5026, 5027, 5028, 5032, - 5030, 5036, 5038, 5020, 7436, 5040, 5043, 5044, 5049, 5046, - 5050, 5051, 5053, 5058, 5061, 5054, 5062, 5065, 7436, 5066, - 5068, 5070, 5078, 7436, 5071, 5075, 5076, 5079, 5080, 5083, - - 5085, 5088, 5092, 5086, 5097, 7436, 5103, 5089, 5100, 5105, - 5095, 5106, 5108, 5110, 5114, 5111, 5116, 5122, 7436, 5127, - 5117, 5126, 5128, 5130, 5132, 5134, 5137, 5139, 5138, 5141, - 7436, 5144, 5145, 5146, 5153, 5160, 5161, 5152, 5156, 5165, - 5164, 5170, 5162, 5163, 5174, 5166, 5172, 5179, 5180, 5182, - 5178, 5190, 5199, 5194, 7436, 5183, 7436, 5185, 5195, 5196, - 5206, 5201, 5207, 5208, 5212, 5211, 7436, 5213, 5214, 5219, - 5220, 5215, 5221, 7436, 5222, 5223, 5225, 5232, 7436, 5238, - 5237, 5227, 5236, 5246, 5250, 5251, 7436, 5254, 5255, 5256, - 5263, 5265, 5260, 5267, 5262, 5270, 5268, 5264, 5272, 5273, - - 5281, 5279, 5277, 7436, 5283, 5285, 5290, 5292, 5294, 5286, - 5296, 5284, 5298, 5301, 5303, 7436, 5306, 5307, 5308, 5309, - 5310, 5313, 5312, 5314, 5321, 5320, 5322, 5330, 5318, 5325, - 5333, 5334, 5335, 5338, 7436, 5341, 5342, 5340, 5349, 5354, - 5347, 5357, 7436, 5351, 7436, 5350, 5361, 5362, 5365, 5366, - 7436, 5369, 5228, 5370, 5371, 5376, 7436, 7436, 5374, 5385, - 5380, 5382, 5384, 7436, 7436, 5387, 7436, 5383, 7436, 5388, - 5389, 7436, 7436, 5390, 5391, 5394, 5398, 7436, 5399, 5403, - 5407, 7436, 5410, 7436, 5420, 5396, 5421, 5411, 5413, 5418, - 7436, 5415, 5425, 5424, 5426, 5430, 7436, 5431, 5432, 5433, - - 5443, 5440, 5442, 7436, 5445, 5446, 5448, 5451, 5452, 5455, - 7436, 5453, 5460, 5456, 5462, 5465, 5463, 5464, 5466, 5467, - 5475, 5478, 5477, 5479, 5483, 5486, 5485, 5487, 5493, 5495, - 5497, 5488, 5504, 5498, 5505, 5507, 5511, 5513, 5509, 5515, - 5517, 5518, 5501, 5520, 5524, 5525, 5527, 5531, 5528, 5533, - 5534, 5540, 5537, 5541, 5543, 5542, 5545, 5551, 5554, 5553, - 5555, 5556, 5557, 5558, 5559, 5564, 5566, 5560, 5574, 5569, - 5577, 5579, 7436, 5567, 5571, 5584, 5580, 5587, 5588, 5591, - 5595, 5598, 5605, 5606, 7436, 7436, 5608, 7436, 5610, 5599, - 5601, 5613, 5614, 7436, 5615, 5616, 5618, 5619, 5621, 5622, - - 5623, 5624, 5620, 5627, 5636, 7436, 5643, 5649, 5641, 5628, - 5651, 5653, 7436, 5654, 5657, 5646, 5658, 5659, 5626, 5665, - 5661, 5666, 5662, 5667, 5668, 5674, 5670, 5683, 5671, 5675, - 5688, 7436, 5690, 5696, 5698, 5685, 5687, 5697, 5699, 5700, - 5701, 5708, 5702, 5704, 5709, 5710, 5715, 5711, 5720, 5717, - 5728, 5730, 5734, 7436, 5716, 7436, 5736, 5723, 5737, 5738, - 5739, 5740, 5741, 5743, 5747, 7436, 7436, 5748, 5751, 5750, - 5755, 5752, 5756, 5762, 5759, 5757, 5771, 7436, 5764, 5765, - 5776, 5773, 5784, 5778, 7436, 5781, 5786, 5787, 5789, 5790, - 5792, 5794, 7436, 5788, 5795, 5797, 5802, 5806, 5799, 5810, - - 5811, 5813, 5814, 5815, 5817, 5820, 7436, 5821, 7436, 7436, - 7436, 5823, 5825, 5826, 5829, 5831, 5832, 5833, 5838, 5840, - 5841, 5836, 5839, 5843, 7436, 5852, 7436, 7436, 5855, 7436, - 5856, 5853, 5857, 5863, 5854, 5865, 5864, 7436, 5866, 7436, - 5870, 5877, 5868, 5879, 5885, 5886, 5869, 5890, 5880, 5892, - 5876, 5893, 5901, 5898, 7436, 5899, 5902, 5904, 5906, 5908, - 7436, 7436, 5910, 5913, 5915, 5920, 5916, 5922, 5924, 5931, - 5926, 5928, 5932, 5929, 5934, 5935, 5943, 5945, 5946, 5936, - 5950, 7436, 5940, 5952, 5955, 7436, 5953, 7436, 5954, 5961, - 5962, 5960, 5963, 5964, 5968, 5969, 5971, 5975, 5981, 7436, - - 7436, 5972, 5988, 5983, 7436, 7436, 5974, 5984, 5985, 5987, - 5992, 5994, 5995, 7436, 5998, 5999, 5996, 6000, 6002, 6003, - 6010, 6012, 7436, 6013, 7436, 6016, 6017, 6020, 6022, 6029, - 6030, 6025, 6027, 6032, 6034, 6035, 6037, 6041, 7436, 6039, - 6038, 7436, 6055, 6050, 6052, 6040, 6054, 6060, 6042, 7436, - 6063, 6061, 7436, 6066, 6067, 6070, 6072, 7436, 6074, 6076, - 6077, 6075, 7436, 6086, 7436, 6078, 6083, 6081, 6095, 6087, - 7436, 6091, 6092, 6096, 6100, 7436, 6103, 6105, 6107, 6110, - 6108, 6109, 7436, 6115, 6117, 7436, 6118, 6120, 6123, 6126, - 6127, 6129, 6130, 6131, 6132, 6139, 6137, 6140, 7436, 7436, - - 6147, 6145, 123, 6154, 6134, 6151, 6152, 6155, 6162, 6158, - 6159, 6165, 7436, 7436, 6168, 7436, 6166, 6167, 7436, 6160, - 6175, 6176, 6169, 6179, 6180, 6181, 6182, 6189, 6190, 6191, - 6192, 6193, 6195, 7436, 6211, 6214, 6197, 6200, 6217, 6219, - 6221, 6223, 6225, 6215, 6227, 6209, 6207, 6228, 6230, 6234, - 6235, 6236, 6238, 6240, 6242, 6243, 7436, 6246, 6249, 6250, - 6251, 6256, 6252, 6259, 6257, 7436, 6268, 6265, 6270, 6271, - 7436, 6274, 6277, 6278, 6280, 6281, 6282, 7436, 6283, 6285, - 6289, 6292, 6293, 6294, 6295, 6297, 6298, 6305, 7436, 6303, - 6300, 6307, 7436, 6308, 7436, 7436, 7436, 6310, 6320, 6314, - - 7436, 6322, 6317, 6324, 6325, 7436, 6327, 6330, 6332, 6339, - 6334, 7436, 7436, 7436, 6335, 6337, 6336, 7436, 6338, 6350, - 7436, 6340, 7436, 6347, 7436, 6348, 6351, 6354, 6357, 7436, - 6359, 6361, 6362, 6369, 7436, 6372, 6378, 6380, 6375, 6363, - 6367, 6382, 7436, 6391, 6388, 6389, 6396, 6381, 6390, 6392, - 6398, 6397, 6406, 6401, 6405, 7436, 6407, 6409, 6412, 6418, - 6408, 6410, 6416, 7436, 6420, 7436, 6422, 7436, 6423, 6424, - 6428, 6429, 6430, 6432, 6434, 6435, 6442, 6438, 6444, 6445, - 6450, 6449, 6451, 6455, 6457, 6452, 7436, 7436, 6466, 6461, - 7436, 6462, 6470, 6473, 7436, 6463, 7436, 6479, 7436, 6474, - - 6476, 7436, 6480, 6481, 6482, 7436, 7436, 6489, 6483, 6486, - 6499, 6491, 6501, 6494, 7436, 6504, 6496, 6498, 6502, 6507, - 7436, 6515, 7436, 6508, 6518, 6511, 7436, 7436, 6519, 6521, - 6523, 6525, 6527, 6526, 6530, 6532, 6531, 6533, 6544, 6535, - 6536, 6537, 6551, 6545, 6552, 6556, 6561, 7436, 7436, 7436, - 6558, 6563, 6571, 6567, 6569, 6574, 6564, 7436, 6534, 6576, - 6573, 6577, 6585, 6580, 6587, 7436, 6581, 6584, 6588, 6590, - 6592, 6589, 6594, 6595, 7436, 6600, 6606, 6612, 6609, 6601, - 6616, 6618, 6620, 6623, 6624, 6626, 6627, 6628, 6635, 6631, - 7436, 7436, 6638, 6630, 7436, 6642, 6644, 7436, 7436, 6632, - - 7436, 6634, 6639, 6645, 6647, 6648, 7436, 6653, 6650, 6655, - 6657, 7436, 6658, 6659, 6663, 6666, 6673, 7436, 6667, 6681, - 6660, 6670, 6679, 6682, 7436, 7436, 6672, 6691, 7436, 6695, - 6683, 6686, 6698, 6696, 6697, 6702, 6699, 7436, 6703, 6706, - 6709, 6710, 6712, 6713, 6714, 7436, 6715, 6716, 6718, 6719, - 7436, 6722, 6721, 6724, 6726, 6727, 7436, 6728, 6731, 6749, - 6745, 7436, 6734, 6752, 6744, 7436, 7436, 7436, 6759, 6761, - 6762, 7436, 7436, 7436, 6748, 7436, 6765, 6767, 6756, 6769, - 7436, 6770, 7436, 7436, 6774, 6779, 6783, 6787, 6791, 6778, - 7436, 6790, 6784, 6797, 6753, 6792, 7436, 7436, 6799, 6800, - - 6794, 6802, 6803, 6805, 6807, 6809, 7436, 7436, 6810, 6811, - 6812, 6815, 6813, 7436, 6819, 6821, 6831, 6823, 6833, 6839, - 6841, 6827, 6843, 6844, 6851, 6852, 6836, 6847, 6849, 6854, - 6855, 6857, 6864, 6871, 6866, 6868, 6874, 6869, 6875, 7436, - 7436, 6878, 6879, 7436, 6882, 6883, 7436, 6885, 7436, 6887, - 6889, 6891, 6895, 7436, 6897, 6899, 6901, 6905, 6902, 7436, - 6906, 6908, 7436, 6910, 6911, 6912, 6913, 7436, 6914, 6917, - 6918, 6922, 6919, 6923, 6926, 6930, 6940, 7436, 6927, 6944, - 7436, 7436, 6932, 6817, 6925, 6945, 6935, 7436, 6949, 6947, - 6948, 6954, 6955, 6957, 6956, 7436, 6958, 6960, 7436, 7436, - - 6961, 6963, 7436, 6966, 7436, 6968, 6970, 7436, 7436, 7436, - 7436, 7436, 7436, 7436, 7436, 6971, 6977, 7436, 7436, 6973, - 6982, 6984, 6988, 7436, 6992, 7436, 6979, 6989, 6993, 6985, - 7436, 6995, 7436, 6996, 6999, 7001, 7011, 7000, 7003, 7007, - 7008, 7012, 7016, 7014, 7018, 7017, 7022, 7023, 7021, 7024, - 7035, 7025, 7038, 7029, 7041, 7436, 7436, 7436, 7436, 7031, - 7043, 7048, 7050, 7052, 7053, 7056, 7058, 7060, 7061, 7062, - 7064, 7066, 7067, 7068, 7076, 7072, 7073, 7075, 7078, 7074, - 7088, 7090, 7096, 7436, 7098, 7084, 7082, 7103, 7436, 7091, - 7436, 7093, 7436, 7436, 7105, 7107, 7109, 7100, 7116, 7118, - - 7113, 7115, 7114, 7120, 7122, 7436, 7124, 7436, 7436, 7436, - 7436, 7126, 7129, 7436, 7130, 7131, 7436, 7132, 7134, 7136, - 7137, 7138, 7140, 7141, 7143, 7154, 7436, 7436, 7142, 7145, - 7156, 7158, 7160, 7167, 7168, 7166, 7172, 7173, 7164, 7176, - 7436, 7180, 7181, 7185, 7436, 7187, 7174, 7182, 7188, 7190, - 7198, 7194, 7195, 7436, 7196, 7436, 7200, 7202, 7201, 7203, - 7204, 7205, 7215, 7212, 7219, 7436, 7210, 7220, 7224, 7225, - 7227, 7229, 7230, 7231, 7239, 7235, 7242, 7246, 7241, 7247, - 7233, 7251, 7249, 7436, 7258, 7253, 7436, 7255, 7259, 7261, - 7262, 7265, 7436, 7270, 7263, 7267, 7273, 7276, 7271, 7436, - - 7284, 7288, 7285, 7436, 7289, 7436, 7436, 7290, 7277, 7279, - 7300, 7302, 7436, 7436, 7436, 7316, 7323, 7330, 7337, 7344, - 7351, 7358, 88, 7365, 7372, 7379, 7386, 7393, 7400, 7407, - 7414, 7421, 7428 + 187, 201, 210, 172, 156, 97, 148, 2842, 7612, 7612, + 7612, 189, 2313, 7612, 7612, 7612, 204, 2257, 2137, 7612, + 7612, 7612, 239, 1886, 7612, 7612, 7612, 228, 1806, 7612, + 243, 7612, 247, 193, 1718, 1695, 7612, 7612, 7612, 251, + 1535, 7612, 7612, 7612, 235, 1388, 257, 261, 0, 264, + 0, 0, 212, 258, 259, 183, 170, 251, 265, 267, + + 92, 260, 261, 272, 273, 274, 279, 287, 280, 285, + 277, 293, 288, 289, 309, 282, 303, 301, 311, 316, + 318, 319, 320, 321, 322, 325, 326, 328, 332, 338, + 139, 334, 342, 349, 351, 350, 356, 352, 357, 353, + 362, 359, 360, 363, 376, 364, 384, 380, 388, 393, + 369, 383, 370, 396, 397, 395, 398, 401, 404, 405, + 414, 415, 1269, 426, 1184, 428, 1103, 437, 996, 899, + 441, 707, 445, 449, 0, 441, 523, 455, 491, 426, + 460, 419, 453, 434, 454, 223, 455, 456, 457, 458, + 459, 461, 460, 464, 472, 482, 468, 473, 484, 492, + + 491, 495, 496, 488, 507, 471, 498, 505, 502, 508, + 518, 513, 519, 520, 521, 522, 527, 525, 526, 529, + 544, 533, 532, 530, 553, 554, 557, 565, 540, 567, + 572, 549, 574, 571, 558, 575, 573, 584, 580, 585, + 583, 586, 588, 589, 590, 591, 593, 594, 597, 600, + 598, 604, 599, 611, 616, 606, 614, 617, 628, 623, + 625, 632, 627, 629, 631, 630, 637, 646, 651, 635, + 656, 643, 638, 657, 660, 667, 668, 663, 648, 653, + 664, 666, 670, 672, 674, 676, 675, 679, 683, 692, + 688, 690, 697, 687, 696, 699, 700, 701, 703, 704, + + 712, 705, 714, 718, 720, 725, 713, 723, 726, 728, + 732, 734, 735, 736, 740, 738, 7612, 748, 741, 752, + 751, 756, 754, 759, 761, 768, 769, 764, 765, 770, + 730, 771, 773, 767, 774, 777, 779, 780, 782, 786, + 787, 798, 790, 795, 808, 794, 801, 804, 829, 802, + 810, 818, 811, 822, 836, 835, 840, 824, 837, 842, + 843, 845, 849, 856, 859, 862, 865, 851, 853, 867, + 869, 870, 871, 873, 880, 882, 7612, 875, 879, 892, + 893, 897, 900, 890, 912, 907, 878, 913, 915, 917, + 919, 929, 951, 911, 918, 920, 922, 927, 7612, 940, + + 934, 975, 945, 944, 962, 955, 958, 925, 877, 965, + 957, 963, 979, 968, 969, 976, 983, 998, 999, 981, + 985, 993, 1006, 1007, 1000, 1009, 1013, 1010, 1016, 1017, + 1018, 1025, 1020, 815, 1021, 1036, 1023, 1024, 1031, 1037, + 1027, 1038, 1046, 1052, 1056, 1057, 1048, 1039, 1050, 1059, + 1062, 1063, 1070, 1093, 1073, 1074, 1064, 1081, 1082, 1094, + 1066, 1089, 1096, 933, 1097, 1084, 1108, 1029, 1113, 1115, + 1086, 1116, 1124, 1121, 1101, 1119, 1122, 1123, 1125, 1131, + 1127, 1129, 1133, 1135, 1068, 1136, 1137, 1141, 1144, 1138, + 1152, 1154, 1145, 1155, 1158, 7612, 1167, 1162, 7612, 1160, + + 1164, 1165, 1168, 1169, 1170, 1171, 1173, 7612, 1174, 1178, + 1179, 1182, 1183, 1193, 1189, 1201, 1200, 1188, 1203, 1204, + 1206, 1208, 1209, 1216, 1212, 1219, 1221, 1213, 1224, 1225, + 1217, 1226, 1228, 1231, 1233, 1235, 1234, 1237, 1241, 1257, + 7612, 1242, 1243, 1244, 1249, 1251, 1255, 1252, 1274, 1275, + 1246, 1267, 1266, 1279, 1293, 1281, 1286, 1291, 1289, 1290, + 1299, 1295, 1303, 1301, 1297, 1306, 1307, 1305, 1311, 1313, + 1314, 1315, 1317, 1319, 7612, 1326, 1322, 1335, 1336, 1343, + 1329, 1327, 1328, 1330, 1351, 1346, 1348, 1349, 1350, 1352, + 1355, 1356, 1358, 1365, 1360, 1368, 1373, 1369, 1371, 1370, + + 1375, 1377, 1376, 1383, 1378, 1385, 1399, 1389, 1392, 1396, + 1405, 1406, 1408, 1410, 1417, 1419, 1404, 1412, 1414, 1420, + 1416, 1415, 1424, 1425, 1430, 1427, 1429, 1436, 1437, 1438, + 1439, 1441, 1442, 1446, 1444, 1449, 1451, 1452, 1454, 1453, + 1455, 1462, 1461, 1463, 1468, 1465, 1481, 1467, 1470, 1484, + 1487, 1474, 1478, 7612, 1496, 1491, 1494, 1495, 1498, 1501, + 1502, 1503, 1504, 1507, 1509, 1510, 1513, 1511, 1515, 1519, + 1522, 1524, 1512, 1526, 1527, 1530, 1532, 1542, 1545, 1534, + 1549, 1538, 1550, 1552, 1548, 1555, 1556, 1558, 1559, 1567, + 1560, 1568, 1571, 1564, 1572, 1575, 1582, 1573, 1579, 1583, + + 1590, 1580, 1585, 1593, 1587, 1596, 1601, 1604, 1606, 1616, + 1600, 1613, 1620, 1621, 1605, 1615, 1623, 1625, 1626, 1631, + 1632, 1633, 1629, 1634, 1641, 1636, 1637, 1638, 1643, 1639, + 1644, 1652, 1645, 1662, 1659, 1661, 1665, 1666, 1667, 1668, + 1669, 1671, 1670, 1672, 1674, 1676, 1678, 1691, 1680, 1681, + 1698, 1699, 1684, 1700, 1701, 1704, 1705, 1706, 1707, 1710, + 1714, 1716, 1708, 1722, 1724, 1712, 1726, 1728, 1731, 1734, + 1735, 1736, 1746, 1742, 1738, 1749, 1750, 1751, 1739, 1752, + 1756, 1757, 1759, 1762, 1767, 1768, 1765, 7612, 1769, 1781, + 1772, 1776, 1779, 1777, 1780, 1782, 1790, 1792, 1785, 1787, + + 1795, 1797, 1798, 1823, 7612, 1799, 7612, 7612, 1804, 1802, + 7612, 7612, 1803, 1809, 7612, 1807, 1810, 1808, 1811, 1820, + 1830, 1833, 1826, 1821, 1836, 1838, 1846, 1859, 1844, 1847, + 1841, 1849, 1851, 1848, 1853, 1865, 1856, 1869, 1868, 1854, + 1881, 1888, 1885, 1889, 1876, 1893, 1894, 1896, 1897, 1899, + 1903, 1905, 1906, 1908, 1909, 1910, 1912, 1911, 1914, 1917, + 1916, 1920, 1921, 1923, 1925, 1924, 1935, 1928, 1939, 1948, + 7612, 1940, 1949, 1926, 1950, 1951, 1958, 1954, 1961, 1953, + 1957, 1960, 1965, 1967, 1962, 1970, 1972, 1974, 1973, 1975, + 1976, 1981, 1983, 1985, 1986, 1988, 1992, 1993, 1989, 1998, + + 7612, 1999, 2000, 2001, 2003, 2005, 2004, 2011, 2015, 2012, + 2006, 2019, 2016, 2033, 2021, 2022, 2024, 2030, 2034, 2036, + 2037, 2041, 7612, 2038, 2046, 2042, 2048, 2047, 2051, 2050, + 2054, 2057, 2058, 2062, 2059, 2061, 2066, 2064, 2073, 2072, + 2075, 2069, 2076, 2077, 2080, 2088, 2089, 2092, 2094, 2090, + 2098, 2099, 2100, 2102, 2101, 2104, 2105, 2107, 2111, 2112, + 2119, 2114, 2122, 2115, 2117, 2136, 2138, 2135, 2123, 2133, + 2141, 2134, 2143, 2154, 2156, 2149, 2140, 2147, 2157, 2159, + 2162, 2163, 2164, 2165, 2166, 2173, 2168, 2171, 2185, 2174, + 2178, 2176, 2187, 2180, 7612, 2188, 2189, 2190, 7612, 2194, + + 2195, 2197, 2219, 2200, 2201, 2206, 2208, 2214, 2209, 2216, + 2211, 2217, 2225, 2233, 2227, 2243, 2236, 2244, 2246, 2248, + 2249, 2247, 2251, 2252, 2261, 2253, 2255, 2267, 2265, 2271, + 2268, 2278, 2281, 2280, 2287, 2289, 2284, 2285, 2290, 2309, + 2286, 2288, 2291, 2295, 2296, 2294, 2292, 2302, 2303, 2311, + 2301, 2312, 2314, 2324, 2321, 2322, 2327, 2332, 2333, 2336, + 2338, 2339, 2340, 7612, 2347, 2226, 2342, 2344, 2346, 2356, + 2352, 2353, 7612, 2355, 2358, 2362, 2369, 2365, 2366, 2368, + 2370, 2375, 2376, 2371, 2380, 2379, 2384, 2381, 2382, 2400, + 7612, 2386, 7612, 2383, 2395, 2396, 2398, 2407, 2404, 2405, + + 2406, 2410, 2408, 2409, 7612, 7612, 2411, 2412, 2418, 2428, + 2426, 2436, 2422, 2432, 2433, 7612, 2434, 2441, 7612, 2438, + 2437, 2445, 2443, 2444, 2449, 2451, 2453, 2454, 2455, 2462, + 2459, 2466, 2461, 2463, 2469, 7612, 2472, 2474, 2475, 2480, + 2481, 2478, 2482, 2484, 2487, 2488, 7612, 2493, 2490, 2495, + 2497, 2504, 2503, 2505, 2507, 2508, 2509, 2512, 2513, 2515, + 2516, 2520, 2523, 2527, 2528, 2524, 2526, 2540, 2536, 2543, + 7612, 2539, 2538, 2542, 2551, 2547, 2549, 2546, 2550, 2553, + 2554, 2557, 2560, 2561, 2566, 2565, 2567, 2568, 2569, 2579, + 2581, 2571, 2578, 2590, 2574, 2582, 2587, 2584, 2595, 2592, + + 2594, 2597, 2598, 7612, 2600, 2604, 2606, 2601, 2607, 2615, + 2608, 295, 2611, 2614, 2618, 2617, 2624, 2621, 2627, 2631, + 2638, 2640, 2635, 2637, 2639, 2641, 2642, 2645, 2647, 2648, + 2649, 2653, 2656, 2657, 2658, 2659, 2663, 7612, 2667, 2664, + 2669, 2670, 2671, 2672, 2677, 2676, 2681, 7612, 2680, 2690, + 2688, 2699, 2685, 2694, 2701, 2702, 2705, 2703, 7612, 2706, + 2707, 2710, 2715, 2713, 2714, 2716, 2717, 7612, 2720, 2724, + 2725, 2731, 2732, 2734, 2733, 2735, 2739, 2740, 2741, 2743, + 2745, 2748, 2746, 2747, 2749, 2755, 2756, 2762, 2763, 2764, + 2766, 2769, 2770, 2772, 2775, 2774, 2776, 2777, 2788, 2779, + + 7612, 2789, 2780, 2790, 2794, 2796, 2781, 2798, 2800, 2811, + 2806, 2807, 2809, 2813, 2826, 2815, 2808, 2824, 2819, 2832, + 2829, 2838, 2836, 2841, 2843, 2850, 2823, 2852, 2854, 2840, + 2855, 2862, 2864, 2863, 2861, 2865, 2867, 2868, 2869, 2877, + 2874, 2881, 2878, 2884, 2876, 2886, 2891, 2879, 2897, 2910, + 2890, 7612, 2899, 2894, 2892, 2905, 2911, 2919, 2915, 2916, + 2914, 2917, 2921, 2928, 2926, 2927, 2929, 2938, 2930, 2939, + 2933, 2934, 2942, 2940, 2944, 2949, 2950, 2952, 2955, 2958, + 2959, 2962, 2964, 2963, 7612, 2967, 2966, 2972, 2973, 2976, + 2978, 2980, 2983, 2981, 2985, 2987, 2988, 2990, 2992, 2993, + + 2994, 2995, 3002, 2999, 3005, 3001, 3000, 7612, 3013, 3007, + 3011, 3020, 3017, 3021, 3019, 3023, 3029, 3030, 3033, 3036, + 3037, 3038, 3039, 3040, 7612, 3048, 3049, 3045, 3047, 3057, + 3054, 3056, 3058, 3060, 3061, 3062, 7612, 3065, 3066, 3064, + 3068, 3067, 3071, 3078, 3079, 3080, 3077, 7612, 3091, 3076, + 3089, 3092, 3099, 3095, 3098, 3100, 3101, 3104, 3102, 3106, + 3107, 3108, 3111, 3117, 3112, 3118, 7612, 3120, 3124, 3121, + 3133, 3126, 3128, 3140, 3136, 3130, 3141, 3146, 3143, 3147, + 3153, 7612, 3161, 3158, 3157, 3166, 3163, 3164, 3169, 3170, + 3171, 3172, 3173, 3174, 3178, 3179, 7612, 3181, 3180, 3184, + + 3185, 3188, 3189, 3193, 3203, 3196, 3200, 3201, 3204, 3206, + 3209, 3210, 3214, 3215, 3223, 3213, 3211, 3205, 3227, 3232, + 3230, 3234, 3217, 3238, 3241, 3246, 3242, 3247, 3250, 3251, + 3244, 3252, 3253, 3261, 3265, 3268, 3263, 3266, 7612, 3270, + 3271, 3272, 3274, 3277, 3276, 3278, 3280, 3282, 3279, 3294, + 3291, 3284, 3285, 3301, 3309, 3306, 3297, 3311, 3305, 3307, + 3313, 3314, 3315, 3316, 3320, 3327, 3318, 3325, 3328, 3329, + 3330, 3337, 3332, 3333, 3341, 3340, 3345, 3342, 3346, 3347, + 3349, 3350, 3352, 3355, 3357, 3360, 3353, 3362, 3367, 3375, + 3377, 3378, 3380, 3369, 3371, 3385, 3387, 3389, 7612, 3388, + + 3390, 3392, 3396, 3398, 3399, 3402, 3404, 3413, 3405, 3403, + 3423, 3414, 3421, 3422, 3410, 3424, 3427, 3412, 3434, 3438, + 7612, 3429, 7612, 3439, 3431, 3435, 3443, 3451, 3441, 7612, + 3449, 7612, 3450, 3455, 3446, 3456, 3457, 7612, 3460, 3458, + 3464, 3459, 3465, 3466, 3471, 3469, 3470, 3475, 3474, 3482, + 3477, 3483, 3481, 3487, 3491, 3493, 3494, 3496, 3497, 3498, + 3504, 3501, 3505, 3506, 3507, 3511, 3512, 3514, 3517, 3518, + 3522, 7612, 3524, 3535, 3536, 3528, 3538, 3530, 3532, 3540, + 3542, 3544, 3520, 3547, 3548, 3552, 3551, 3555, 3553, 3563, + 3559, 3565, 3567, 3569, 3568, 3570, 3575, 3583, 3579, 3587, + + 3584, 7612, 3582, 3586, 3590, 3591, 3592, 3594, 7612, 3593, + 3595, 3601, 3603, 3606, 3605, 3607, 3608, 3612, 3614, 3615, + 3616, 3625, 3624, 3621, 3630, 7612, 3629, 3634, 3617, 3637, + 3645, 3635, 3647, 3652, 3648, 3650, 3654, 3662, 3658, 3657, + 3660, 3661, 3664, 3665, 3672, 3673, 3675, 3671, 3683, 3674, + 3681, 3688, 3685, 3682, 3679, 3689, 3691, 3692, 3693, 3694, + 3695, 3696, 3698, 3701, 3711, 3702, 3715, 7612, 3706, 3716, + 3717, 3725, 3720, 3726, 3724, 3727, 3729, 3733, 3736, 7612, + 3738, 3731, 3743, 3735, 3752, 3739, 3746, 3749, 3756, 3755, + 3757, 3758, 3759, 3761, 7612, 3763, 7612, 3762, 3766, 3767, + + 3776, 3782, 3784, 3769, 3785, 3790, 3779, 3786, 3793, 3794, + 3797, 3795, 3801, 3802, 3803, 3804, 3807, 3808, 3809, 3814, + 3818, 3811, 3815, 3824, 3825, 3827, 3828, 3830, 3835, 3831, + 3837, 7612, 7612, 3832, 3840, 3847, 3850, 3839, 3843, 3859, + 3861, 3854, 3851, 3867, 3865, 3869, 3870, 3878, 7612, 3871, + 3874, 3873, 3875, 3879, 3887, 3882, 3892, 3902, 3894, 3884, + 3903, 3901, 7612, 3886, 3904, 3905, 3914, 3909, 3912, 3916, + 7612, 3917, 7612, 3911, 3913, 3918, 3920, 3926, 3927, 3929, + 3934, 3933, 3935, 3938, 3940, 3947, 3950, 3945, 3951, 3954, + 3955, 3956, 3957, 3959, 3960, 3968, 3963, 3965, 3966, 7612, + + 3970, 3967, 3978, 3972, 3971, 3983, 3989, 3986, 3979, 7612, + 3990, 7612, 3992, 3996, 3997, 3998, 3999, 4007, 4001, 4009, + 4008, 4012, 4013, 4015, 4016, 4019, 4017, 4022, 4025, 4026, + 7612, 4028, 4030, 4038, 4033, 4035, 4037, 4040, 4041, 4042, + 4049, 7612, 4051, 4058, 4054, 4055, 4063, 4060, 4061, 4065, + 4068, 4066, 4070, 4072, 4075, 4074, 4076, 4078, 4077, 4080, + 4083, 4082, 4085, 4094, 4096, 4097, 4103, 4113, 4098, 7612, + 4084, 4108, 4109, 4110, 4111, 4114, 4118, 4120, 4123, 4125, + 4115, 4130, 4136, 4117, 4133, 4139, 4141, 4142, 4149, 4144, + 7612, 4151, 4148, 4156, 4152, 4153, 4155, 4159, 4164, 4157, + + 4165, 4168, 4161, 4169, 4173, 4174, 4171, 4181, 4188, 4183, + 4184, 4185, 4187, 4198, 4189, 4191, 4193, 4194, 7612, 4214, + 4201, 4205, 4210, 4206, 4216, 4224, 4219, 4221, 4222, 4226, + 4223, 4229, 4227, 4232, 4233, 4236, 4238, 4239, 7612, 7612, + 4245, 4240, 4242, 7612, 4246, 4248, 4256, 4252, 4257, 4253, + 4261, 4258, 4262, 4263, 4266, 4264, 4280, 4283, 4268, 4272, + 7612, 4284, 4286, 4293, 4276, 4285, 4295, 4297, 7612, 4298, + 4306, 4302, 4303, 4304, 4305, 4307, 4309, 4311, 4310, 4312, + 4316, 4318, 4323, 4325, 4321, 4332, 4329, 4330, 4331, 7612, + 4336, 4337, 4338, 4340, 4341, 4342, 4347, 7612, 4348, 4346, + + 4352, 4354, 4355, 4358, 4363, 4366, 4368, 4374, 4369, 4371, + 4375, 4376, 4377, 4378, 4380, 4388, 4383, 4387, 4386, 4392, + 4396, 4403, 4389, 7612, 4399, 4406, 4407, 4409, 4411, 7612, + 4413, 4421, 4424, 7612, 4425, 4416, 4423, 4426, 4435, 7612, + 4431, 4430, 4432, 4436, 4433, 4445, 4440, 4447, 4446, 4448, + 4450, 4451, 4452, 4454, 4455, 7612, 4456, 4457, 4460, 7612, + 4464, 4466, 4473, 4478, 4479, 4482, 4489, 4471, 4475, 4490, + 4485, 4487, 4488, 4493, 7612, 4496, 4498, 7612, 4500, 4504, + 4499, 4505, 4506, 7612, 4509, 4510, 4511, 4513, 4514, 4519, + 4525, 4515, 4527, 4528, 4529, 4531, 4532, 4533, 4534, 4541, + + 4536, 4543, 4540, 4542, 7612, 4545, 4544, 4550, 4555, 4547, + 4560, 4563, 4553, 4566, 4568, 4569, 7612, 7612, 4571, 7612, + 4574, 4575, 4576, 4578, 7612, 4580, 4579, 4589, 4581, 4584, + 4586, 4590, 4596, 4600, 4597, 7612, 4602, 4606, 7612, 4603, + 4609, 4616, 4608, 4611, 4612, 4613, 4619, 4623, 4617, 4625, + 4627, 4621, 4628, 4629, 4635, 4630, 4647, 4631, 4650, 7612, + 4642, 4643, 4648, 4658, 4649, 4651, 4661, 4663, 4659, 7612, + 4665, 4672, 4673, 4675, 4676, 7612, 7612, 4677, 7612, 4678, + 4681, 4682, 4685, 4684, 4688, 4695, 4692, 7612, 4697, 4693, + 4701, 4698, 4704, 4711, 7612, 4705, 4714, 4702, 4715, 4706, + + 4722, 4718, 4717, 4725, 4735, 4728, 7612, 4721, 4727, 4731, + 4739, 4744, 4742, 4732, 4746, 4754, 4750, 4749, 4752, 4762, + 4757, 4759, 4760, 4763, 4767, 4769, 4771, 4761, 7612, 4777, + 4774, 4780, 4775, 4790, 4785, 4791, 4787, 7612, 4788, 4792, + 4793, 4802, 7612, 4795, 4803, 4805, 4810, 4794, 4806, 4813, + 4816, 4815, 4819, 4820, 4817, 7612, 4818, 4825, 4821, 4829, + 4838, 4827, 4826, 7612, 7612, 4839, 7612, 4842, 4828, 4846, + 4847, 4849, 4850, 4853, 4854, 4856, 4857, 4860, 4862, 4864, + 4867, 4868, 4870, 7612, 4872, 4877, 4873, 4882, 4884, 4892, + 4885, 7612, 4889, 4887, 7612, 4893, 7612, 4894, 4896, 4899, + + 4900, 4902, 4904, 4905, 4908, 4909, 7612, 4916, 4918, 4912, + 4919, 4921, 4929, 4925, 4937, 7612, 4934, 4923, 4935, 4936, + 7612, 4940, 4941, 4944, 4942, 4945, 4948, 4947, 4949, 4953, + 4951, 4955, 4960, 4959, 4970, 4961, 4952, 4962, 4971, 4968, + 4972, 4976, 4981, 4985, 7612, 4982, 4986, 4988, 4991, 4992, + 4993, 4994, 4995, 4996, 4997, 5004, 5006, 7612, 5009, 7612, + 5001, 5011, 5020, 5019, 5002, 5028, 5029, 5030, 5023, 5031, + 5032, 5035, 5037, 5040, 5041, 5045, 5042, 5047, 5050, 5052, + 7612, 5059, 5060, 5049, 5065, 5067, 5069, 5071, 5072, 7612, + 5073, 5054, 5075, 5080, 5082, 5084, 5085, 5087, 5088, 5090, + + 5093, 5091, 5098, 5100, 5101, 5003, 5102, 5094, 5110, 5105, + 5107, 7612, 5112, 5114, 5116, 5121, 5118, 5122, 5123, 5125, + 5130, 5133, 5124, 5134, 5137, 7612, 5138, 5140, 5142, 5150, + 7612, 5145, 5147, 5148, 5151, 5152, 5155, 5157, 5158, 5160, + 5167, 5168, 7612, 5173, 5161, 5170, 5174, 5175, 5178, 5179, + 5180, 5184, 5186, 5187, 5197, 7612, 5198, 5190, 5199, 5203, + 5205, 5191, 5201, 5207, 5209, 5219, 5211, 7612, 5220, 5221, + 5222, 5223, 5235, 5236, 5212, 5231, 5240, 5239, 5242, 5232, + 5241, 5245, 5243, 5249, 5250, 5251, 5252, 5253, 5262, 5270, + 5265, 7612, 5255, 7612, 5266, 5268, 5271, 5279, 5280, 5274, + + 5276, 5282, 5283, 5287, 5288, 7612, 5290, 5293, 5295, 5296, + 5298, 5303, 5297, 5299, 7612, 5301, 5300, 5302, 5314, 7612, + 5315, 5319, 5320, 5321, 5323, 5328, 5330, 5331, 7612, 5335, + 5336, 5337, 5344, 5347, 5343, 5346, 5348, 5349, 5351, 5353, + 5354, 5355, 5364, 5357, 5360, 7612, 5366, 5369, 5375, 5376, + 5377, 5359, 5378, 5379, 5380, 5386, 5383, 7612, 5388, 5389, + 5390, 5391, 5392, 5394, 5395, 5397, 5407, 5408, 5403, 5412, + 5400, 5405, 5416, 5417, 5419, 5421, 7612, 5425, 5423, 5426, + 5433, 5434, 5430, 5441, 7612, 5436, 7612, 5432, 5442, 5447, + 5449, 5450, 7612, 5454, 5429, 5455, 5453, 5459, 7612, 7612, + + 5461, 5468, 5463, 5467, 5464, 7612, 7612, 5470, 7612, 5471, + 7612, 5472, 5474, 7612, 7612, 5476, 5477, 5478, 5480, 7612, + 5482, 5483, 5485, 7612, 5492, 7612, 5499, 5494, 5497, 5495, + 5500, 5502, 7612, 5504, 5505, 5506, 5509, 5513, 7612, 5510, + 5515, 5519, 5533, 5516, 5517, 7612, 5529, 5535, 5537, 5530, + 5531, 5536, 7612, 5540, 5543, 5547, 5544, 5546, 5545, 5548, + 5557, 5556, 5560, 5561, 5563, 5564, 5565, 5566, 5576, 5567, + 5578, 5580, 5587, 5569, 5588, 5583, 5589, 5591, 5595, 5597, + 5593, 5599, 5600, 5602, 5603, 5604, 5607, 5608, 5610, 5614, + 5615, 5617, 5611, 5618, 5621, 5628, 5629, 5630, 5631, 5636, + + 5632, 5638, 5639, 5640, 5642, 5643, 5644, 5645, 5647, 5646, + 5661, 5652, 5656, 5653, 5666, 5669, 7612, 5670, 5649, 5672, + 5673, 5675, 5676, 5677, 5679, 5682, 5685, 5692, 5696, 5697, + 7612, 7612, 7612, 5700, 7612, 5702, 5686, 5705, 5689, 5706, + 7612, 5707, 5710, 5709, 5712, 5711, 5713, 5715, 5714, 5718, + 5719, 5722, 7612, 5725, 5739, 5726, 5724, 5735, 5742, 7612, + 5743, 5748, 5745, 5749, 5750, 5751, 5754, 5753, 5755, 5756, + 5757, 5760, 5759, 5762, 5775, 5765, 5770, 5777, 7612, 5779, + 5781, 5790, 5782, 5786, 5787, 5789, 5791, 5792, 5794, 5795, + 5796, 5798, 5799, 5801, 5803, 5806, 5807, 5814, 5817, 5821, + + 7612, 5822, 7612, 5824, 5825, 5826, 5827, 5829, 5828, 5830, + 5831, 5836, 7612, 7612, 5832, 5839, 5837, 5843, 5845, 5846, + 5850, 5854, 5853, 5858, 7612, 5856, 5859, 5861, 5866, 5873, + 5863, 7612, 5869, 5878, 5875, 5879, 5880, 5881, 5883, 7612, + 5885, 5887, 5886, 5891, 5894, 5889, 5900, 5902, 5903, 5904, + 5905, 5906, 5910, 7612, 5911, 7612, 7612, 7612, 5913, 5915, + 5916, 5919, 5921, 5922, 5923, 5928, 5930, 5931, 5942, 5925, + 5929, 7612, 5947, 7612, 7612, 5943, 7612, 5949, 5950, 5951, + 5952, 5953, 5957, 5955, 7612, 5958, 7612, 5962, 5965, 5959, + 5969, 5976, 5977, 5971, 5978, 5961, 5985, 5981, 5987, 5979, + + 5989, 5933, 5990, 5991, 5994, 7612, 5998, 6000, 6001, 6003, + 6005, 7612, 7612, 6009, 6011, 6013, 6018, 6014, 6020, 6021, + 6029, 6024, 6026, 6027, 6030, 6032, 6033, 6043, 6044, 6034, + 6041, 6047, 7612, 6042, 6050, 6048, 7612, 6052, 7612, 6056, + 6057, 6058, 6059, 6060, 6065, 6066, 6067, 6069, 6072, 6079, + 7612, 7612, 6070, 6086, 6081, 7612, 7612, 6071, 6082, 6083, + 6085, 6092, 6089, 6093, 7612, 6097, 6098, 6094, 6099, 6100, + 6101, 6111, 6105, 7612, 6108, 7612, 6113, 6115, 6118, 6120, + 6127, 6128, 6125, 6129, 6132, 6131, 6134, 6135, 6136, 7612, + 6137, 6138, 7612, 6149, 6150, 6148, 6139, 6140, 6156, 6158, + + 7612, 6161, 6159, 7612, 6164, 6165, 6167, 6169, 7612, 6171, + 6172, 6174, 6175, 7612, 6181, 7612, 6178, 6182, 6183, 6191, + 6189, 7612, 6186, 6192, 6193, 6196, 7612, 6200, 6203, 6205, + 6207, 6208, 6209, 7612, 6215, 6211, 7612, 6216, 6218, 6219, + 6224, 6225, 6227, 6228, 6230, 6231, 6238, 6234, 6235, 7612, + 7612, 6243, 6244, 6252, 6249, 123, 6256, 6251, 6253, 6257, + 6258, 6265, 6266, 6267, 6262, 6268, 6270, 7612, 7612, 6271, + 7612, 6275, 6278, 7612, 6263, 6279, 6284, 6280, 6286, 6289, + 6290, 6292, 6294, 6295, 6300, 6299, 6296, 6304, 7612, 6320, + 6322, 6305, 6302, 6317, 6325, 6327, 6329, 6331, 6323, 6333, + + 6334, 6335, 6336, 6337, 6341, 6340, 6342, 6343, 6344, 6348, + 6349, 7612, 6356, 6358, 6350, 6360, 6363, 6365, 6367, 6366, + 7612, 6374, 6370, 6379, 6376, 7612, 6383, 6380, 6385, 6387, + 6388, 6390, 7612, 6391, 6393, 6396, 6398, 6401, 6400, 6403, + 6405, 6404, 6412, 7612, 6408, 6407, 6413, 7612, 6415, 7612, + 7612, 7612, 6418, 6426, 6422, 7612, 6428, 6429, 6431, 6432, + 7612, 6434, 6438, 6435, 6445, 6440, 7612, 7612, 7612, 6441, + 6442, 6446, 7612, 6448, 6457, 7612, 6449, 7612, 6453, 7612, + 6454, 6458, 6464, 6460, 7612, 6462, 6470, 7612, 6471, 6472, + 6473, 6475, 7612, 6478, 6481, 6489, 6483, 6486, 6490, 6493, + + 6494, 6491, 7612, 6501, 6497, 6498, 6500, 6504, 6505, 6507, + 6509, 6508, 6521, 6511, 6519, 7612, 6516, 6524, 6525, 6531, + 6523, 6533, 6534, 7612, 6527, 7612, 6538, 7612, 6539, 6540, + 6541, 6546, 6535, 6543, 6545, 6555, 6551, 6557, 6558, 6560, + 6562, 6565, 6566, 6568, 6570, 6572, 7612, 7612, 6580, 6573, + 7612, 6575, 6585, 6589, 7612, 6576, 7612, 6594, 7612, 6582, + 6586, 7612, 6590, 6596, 6599, 7612, 7612, 6601, 6603, 6605, + 6613, 6606, 6609, 6611, 7612, 6615, 6610, 6617, 6619, 6621, + 7612, 6628, 7612, 6618, 6631, 6627, 7612, 7612, 6626, 6633, + 6635, 6640, 6641, 6642, 6644, 6646, 6645, 6647, 6655, 6650, + + 6652, 6651, 6661, 6653, 6666, 6668, 6670, 6672, 6676, 7612, + 7612, 7612, 6674, 6678, 6679, 6680, 6687, 6689, 6690, 6697, + 6682, 7612, 6696, 6695, 6702, 6684, 6710, 6705, 6709, 7612, + 6706, 6711, 6692, 6712, 6714, 6715, 6716, 6719, 7612, 6721, + 6727, 6731, 6733, 6735, 6736, 6740, 6743, 6745, 6737, 6748, + 6750, 6751, 6758, 6754, 7612, 7612, 6756, 6753, 7612, 6761, + 6765, 7612, 7612, 6757, 7612, 6762, 6766, 6767, 6768, 6770, + 7612, 6773, 6774, 6775, 6778, 7612, 6779, 6780, 6782, 6796, + 6783, 7612, 6785, 6797, 6793, 6798, 6801, 6802, 7612, 7612, + 6804, 6809, 7612, 6811, 6814, 6812, 6821, 6816, 6822, 6824, + + 6827, 7612, 6818, 7612, 6829, 6831, 6820, 6834, 6837, 6835, + 6839, 6841, 6843, 7612, 6844, 6845, 6846, 6848, 7612, 6853, + 6856, 6857, 6855, 6858, 7612, 6860, 6850, 6867, 6873, 7612, + 6862, 6877, 6879, 7612, 7612, 7612, 6884, 6886, 6887, 7612, + 7612, 7612, 6881, 7612, 6889, 6890, 6893, 6898, 7612, 6894, + 7612, 7612, 6900, 6904, 6908, 6911, 6916, 6903, 7612, 6915, + 6917, 6919, 6921, 6922, 7612, 7612, 6924, 6927, 6925, 6929, + 6930, 6932, 6933, 6934, 7612, 7612, 6937, 6940, 6938, 6941, + 6943, 7612, 6946, 6953, 6952, 6960, 6956, 6966, 6969, 6971, + 6973, 6961, 6948, 6974, 6975, 6982, 6986, 6977, 6978, 6985, + + 6989, 6990, 6988, 6992, 7003, 6998, 7000, 7009, 6996, 7005, + 7612, 7612, 7013, 7001, 7612, 7017, 7014, 7612, 7018, 7612, + 7020, 7022, 7025, 7027, 7612, 7029, 7031, 7033, 7035, 7037, + 7612, 7038, 7040, 7612, 7042, 7043, 7044, 7045, 7612, 7046, + 7049, 7050, 7054, 7051, 7055, 7058, 7059, 7062, 7072, 7612, + 7064, 7076, 7612, 7612, 7612, 7073, 7067, 7077, 7057, 7081, + 7084, 7612, 7086, 7093, 7090, 7091, 7088, 7092, 7095, 7612, + 7094, 7097, 7612, 7612, 7099, 7098, 7612, 7108, 7612, 7101, + 7105, 7612, 7612, 7612, 7612, 7612, 7612, 7612, 7612, 7112, + 7115, 7612, 7612, 7116, 7120, 7122, 7124, 7612, 7131, 7612, + + 7114, 7126, 7128, 7133, 7134, 7612, 7136, 7612, 7144, 7139, + 7140, 7141, 7143, 7142, 7147, 7152, 7154, 7156, 7155, 7158, + 7160, 7159, 7164, 7161, 7163, 7167, 7172, 7169, 7181, 7170, + 7182, 7612, 7612, 7612, 7612, 7178, 7185, 7194, 7186, 7196, + 7198, 7201, 7202, 7208, 7210, 7200, 7191, 7212, 7213, 7216, + 7189, 7217, 7226, 7222, 7223, 7224, 7228, 7225, 7231, 7234, + 7238, 7612, 7240, 7241, 7242, 7244, 7612, 7247, 7246, 7612, + 7248, 7249, 7612, 7612, 7251, 7252, 7255, 7254, 7264, 7265, + 7260, 7266, 7268, 7270, 7277, 7612, 7281, 7612, 7612, 7612, + 7612, 7269, 7271, 7612, 7278, 7283, 7284, 7285, 7612, 7286, + + 7288, 7294, 7295, 7296, 7297, 7298, 7299, 7302, 7612, 7612, + 7305, 7310, 7307, 7612, 7311, 7315, 7312, 7324, 7321, 7327, + 7329, 7330, 7319, 7337, 7612, 7340, 7336, 7343, 7333, 7612, + 7344, 7345, 7346, 7347, 7349, 7356, 7352, 7354, 7612, 7357, + 7612, 7355, 7362, 7363, 7365, 7359, 7369, 7373, 7376, 7374, + 7380, 7381, 7612, 7382, 7383, 7387, 7389, 7391, 7394, 7395, + 7396, 7398, 7401, 7404, 7403, 7411, 7407, 7412, 7413, 7416, + 7417, 7612, 7612, 7423, 7418, 7612, 7420, 7424, 7426, 7427, + 7430, 7612, 7434, 7428, 7435, 7438, 7441, 7442, 7612, 7444, + 7451, 7448, 7612, 7452, 7612, 7612, 7453, 7456, 7459, 7461, + + 7463, 7612, 7612, 7612, 7492, 7499, 7506, 7513, 7520, 7527, + 7534, 88, 7541, 7548, 7555, 7562, 7569, 7576, 7583, 7590, + 7597, 7604 } ; -static yyconst flex_int16_t yy_def[3834] = +static yyconst flex_int16_t yy_def[3923] = { 0, - 3815, 1, 3816, 3816, 3817, 3817, 3818, 3818, 3819, 3819, - 3820, 3820, 3821, 3821, 3822, 3822, 3815, 3823, 3815, 3815, - 3815, 3815, 3824, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3825, 3815, 3815, 3815, - 3825, 3826, 3815, 3815, 3815, 3826, 3827, 3815, 3815, 3815, - 3815, 3827, 3828, 3815, 3815, 3815, 3828, 3829, 3815, 3830, - 3815, 3829, 3829, 3831, 3815, 3815, 3815, 3815, 3831, 3832, - 3815, 3815, 3815, 3832, 3823, 3823, 3815, 3833, 3824, 3833, - 3824, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3825, 3825, 3826, 3826, 3827, 3827, 3815, 3828, 3828, 3829, - 3829, 3830, 3830, 3829, 3831, 3831, 3815, 3832, 3832, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3829, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3829, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, - 3823, 3829, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3829, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3823, 3815, 3815, 3823, 3823, - - 3815, 3815, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3829, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3815, 3823, 3823, 3815, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3829, 3829, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3829, 3823, 3823, 3823, 3823, 3823, - 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3815, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3829, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3829, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3815, 3815, 3823, 3823, 3823, 3815, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, - - 3823, 3823, 3815, 3823, 3823, 3823, 3815, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3829, 3823, 3815, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3815, 3823, 3823, 3823, - 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3815, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3815, 3823, 3823, 3815, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3815, 3815, 3823, 3815, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3815, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, - 3823, 3823, 3829, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3815, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3829, 3823, 3815, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3815, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3823, - 3823, 3823, 3823, 3815, 3815, 3823, 3815, 3823, 3815, 3823, - 3823, 3815, 3815, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, - - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3829, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3815, 3815, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3823, 3815, 3815, 3823, 3815, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3815, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3829, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3815, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3815, 3823, 3823, 3823, 3815, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, - - 3815, 3823, 3823, 3823, 3815, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, - 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3815, - - 3823, 3823, 3829, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3815, 3823, 3815, 3823, 3823, 3815, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, - 3823, 3823, 3815, 3823, 3815, 3815, 3815, 3823, 3823, 3823, - - 3815, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3815, 3815, 3815, 3823, 3823, 3823, 3815, 3823, 3823, - 3815, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3815, - 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3815, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3823, - 3815, 3823, 3823, 3823, 3815, 3823, 3815, 3823, 3815, 3823, - - 3823, 3815, 3823, 3823, 3823, 3815, 3815, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3815, 3823, 3823, 3823, 3815, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3815, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3815, 3823, 3823, 3815, 3823, 3823, 3815, 3815, 3823, - - 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, - 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3823, 3815, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, - 3823, 3815, 3823, 3823, 3823, 3815, 3815, 3815, 3823, 3823, - 3823, 3815, 3815, 3815, 3823, 3815, 3823, 3823, 3823, 3823, - 3815, 3823, 3815, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, - 3815, 3823, 3823, 3815, 3823, 3823, 3815, 3823, 3815, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3815, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3815, 3815, 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3815, 3815, - - 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3815, 3815, 3815, - 3815, 3815, 3815, 3815, 3815, 3823, 3823, 3815, 3815, 3823, - 3823, 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, - 3815, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3815, 3815, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3815, 3823, - 3815, 3823, 3815, 3815, 3823, 3823, 3823, 3823, 3823, 3823, - - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3815, 3815, 3815, - 3815, 3823, 3823, 3815, 3823, 3823, 3815, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3815, 3815, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3815, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3815, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, 3823, - 3823, 3823, 3823, 3815, 3823, 3823, 3815, 3823, 3823, 3823, - 3823, 3823, 3815, 3823, 3823, 3823, 3823, 3823, 3823, 3815, - - 3823, 3823, 3823, 3815, 3823, 3815, 3815, 3823, 3823, 3823, - 3823, 3823, 3815, 3815, 0, 3815, 3815, 3815, 3815, 3815, - 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, - 3815, 3815, 3815 + 3904, 1, 3905, 3905, 3906, 3906, 3907, 3907, 3908, 3908, + 3909, 3909, 3910, 3910, 3911, 3911, 3904, 3912, 3904, 3904, + 3904, 3904, 3913, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3914, 3904, 3904, + 3904, 3914, 3915, 3904, 3904, 3904, 3915, 3916, 3904, 3904, + 3904, 3904, 3916, 3917, 3904, 3904, 3904, 3917, 3918, 3904, + 3919, 3904, 3918, 3918, 3920, 3904, 3904, 3904, 3904, 3920, + 3921, 3904, 3904, 3904, 3921, 3912, 3912, 3904, 3922, 3913, + 3922, 3913, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3914, 3914, 3915, 3915, 3916, 3916, 3904, 3917, + 3917, 3918, 3918, 3919, 3919, 3918, 3920, 3920, 3904, 3921, + 3921, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3918, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3918, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3904, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3918, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3918, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3904, 3912, 3904, 3904, 3912, 3912, + 3904, 3904, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3918, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3904, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, + 3918, 3918, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, + 3918, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3918, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3904, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3904, 3912, 3912, 3912, 3918, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3904, + 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3918, 3912, 3904, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3904, 3912, 3912, + 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3904, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, + 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3904, 3904, 3912, 3904, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3904, 3912, 3912, 3918, 3912, 3912, 3912, + 3912, 3904, 3912, 3912, 3904, 3912, 3904, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, + 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3904, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, + 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3918, 3912, 3904, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3912, 3912, + 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3904, 3904, + + 3912, 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3904, 3912, + 3904, 3912, 3912, 3904, 3904, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3912, 3912, 3912, + 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, + 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3918, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3904, 3904, 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912, + 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3904, 3904, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3904, 3912, 3904, 3904, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3904, 3904, 3912, 3904, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3918, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, + 3912, 3904, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3904, 3912, 3912, 3912, 3904, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3904, 3904, 3912, 3912, 3912, 3904, 3904, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3904, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, + 3912, 3912, 3912, 3904, 3912, 3912, 3904, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3904, 3912, 3912, 3912, 3912, 3918, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3904, 3912, + 3904, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3904, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, + 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3904, 3912, 3904, + 3904, 3904, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, + 3904, 3912, 3912, 3912, 3912, 3912, 3904, 3904, 3904, 3912, + 3912, 3912, 3904, 3912, 3912, 3904, 3912, 3904, 3912, 3904, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3904, 3912, 3912, + 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3912, + 3904, 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3904, 3912, + 3912, 3904, 3912, 3912, 3912, 3904, 3904, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, + 3904, 3912, 3904, 3912, 3912, 3912, 3904, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3904, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3912, 3904, 3912, + 3912, 3904, 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912, + 3904, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3904, + 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3904, 3904, 3904, 3912, 3912, 3912, 3904, + 3904, 3904, 3912, 3904, 3912, 3912, 3912, 3912, 3904, 3912, + 3904, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3904, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3904, 3904, 3912, 3912, 3904, 3912, 3912, 3904, 3912, 3904, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, + 3904, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3904, 3904, 3904, 3912, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3904, 3904, 3912, 3912, 3904, 3912, 3904, 3912, + 3912, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3912, + 3912, 3904, 3904, 3912, 3912, 3912, 3912, 3904, 3912, 3904, + + 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3904, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3904, 3904, 3904, 3904, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3904, + 3912, 3912, 3904, 3904, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3904, 3912, 3904, 3904, 3904, + 3904, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3904, 3912, + + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3904, + 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3904, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, + 3912, 3904, 3904, 3912, 3912, 3904, 3912, 3912, 3912, 3912, + 3912, 3904, 3912, 3912, 3912, 3912, 3912, 3912, 3904, 3912, + 3912, 3912, 3904, 3912, 3904, 3904, 3912, 3912, 3912, 3912, + + 3912, 3904, 3904, 0, 3904, 3904, 3904, 3904, 3904, 3904, + 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, + 3904, 3904 } ; -static yyconst flex_int16_t yy_nxt[7477] = +static yyconst flex_int16_t yy_nxt[7653] = { 0, 18, 19, 20, 21, 22, 23, 22, 18, 18, 18, 18, 18, 22, 24, 25, 26, 27, 28, 29, 30, 18, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 18, 18, 18, 46, - 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, 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, 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, 236, 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, 289, 137, 86, 174, - 165, 152, 165, 165, 90, 165, 90, 90, 170, 90, - 170, 170, 175, 170, 175, 175, 173, 175, 85, 268, - 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, 234, 86, 226, 229, 86, 223, 227, 235, 238, - 86, 232, 228, 86, 86, 86, 86, 240, 233, 86, - 237, 242, 245, 86, 246, 243, 86, 86, 239, 86, - 248, 244, 241, 86, 251, 247, 254, 86, 179, 249, - 258, 86, 86, 86, 261, 250, 86, 255, 253, 259, - - 257, 256, 86, 252, 260, 86, 86, 266, 86, 264, - 270, 262, 86, 86, 263, 86, 86, 274, 86, 271, - 265, 86, 269, 277, 267, 273, 301, 275, 161, 161, - 163, 272, 86, 163, 276, 278, 165, 171, 165, 165, - 279, 165, 168, 168, 170, 86, 170, 170, 90, 170, - 90, 90, 175, 90, 175, 175, 86, 175, 178, 178, - 173, 280, 281, 283, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 286, 86, 292, 282, 288, 284, - 86, 287, 295, 86, 291, 86, 294, 296, 285, 290, - 299, 86, 293, 86, 297, 86, 300, 302, 86, 86, - - 86, 328, 303, 311, 305, 298, 86, 310, 86, 306, - 312, 86, 86, 315, 307, 313, 86, 314, 86, 304, - 308, 309, 319, 316, 317, 86, 86, 86, 86, 321, - 86, 318, 322, 86, 86, 86, 86, 86, 86, 86, - 329, 330, 323, 336, 324, 86, 326, 86, 325, 327, - 86, 320, 86, 331, 339, 338, 332, 337, 333, 341, - 86, 86, 340, 343, 393, 86, 348, 344, 345, 86, - 334, 342, 335, 346, 86, 349, 351, 86, 86, 86, - 352, 86, 350, 86, 354, 86, 86, 353, 347, 86, - 86, 355, 357, 86, 86, 86, 356, 86, 86, 86, - - 359, 361, 86, 86, 86, 360, 358, 86, 86, 367, - 362, 365, 86, 86, 86, 366, 368, 86, 86, 363, - 372, 86, 374, 364, 370, 373, 86, 369, 86, 378, - 86, 86, 375, 371, 376, 86, 86, 382, 385, 86, - 377, 383, 381, 86, 384, 86, 379, 380, 86, 86, - 388, 389, 391, 86, 86, 387, 86, 86, 86, 86, - 394, 395, 86, 396, 386, 392, 398, 171, 390, 86, - 86, 86, 86, 399, 86, 402, 86, 401, 86, 403, - 86, 86, 86, 86, 405, 407, 410, 397, 409, 411, - 400, 86, 86, 404, 86, 86, 412, 414, 406, 413, - - 86, 86, 86, 86, 408, 86, 86, 421, 86, 86, - 426, 423, 422, 86, 418, 415, 416, 420, 86, 417, - 419, 86, 86, 424, 86, 425, 86, 428, 86, 429, - 86, 86, 86, 431, 433, 86, 86, 86, 438, 434, - 427, 86, 440, 86, 86, 435, 430, 432, 86, 86, - 436, 441, 442, 86, 445, 86, 437, 439, 86, 443, - 86, 447, 448, 86, 86, 446, 86, 86, 86, 86, - 86, 454, 86, 86, 86, 455, 444, 86, 457, 453, - 86, 86, 451, 450, 86, 460, 86, 449, 86, 462, - 452, 456, 86, 86, 86, 465, 458, 466, 459, 461, - - 464, 86, 475, 86, 467, 86, 463, 86, 86, 86, - 477, 468, 484, 493, 86, 491, 469, 86, 86, 470, - 486, 476, 502, 86, 471, 472, 473, 474, 86, 86, - 485, 478, 86, 479, 487, 488, 489, 86, 86, 86, - 492, 490, 86, 86, 496, 480, 481, 482, 86, 483, - 86, 86, 86, 504, 497, 494, 503, 500, 495, 501, - 498, 499, 86, 505, 86, 86, 86, 86, 86, 86, - 86, 508, 513, 86, 514, 86, 515, 86, 86, 509, - 507, 86, 519, 86, 512, 516, 521, 510, 520, 506, - 511, 86, 517, 527, 86, 518, 522, 526, 86, 86, - - 86, 524, 523, 525, 86, 86, 533, 528, 534, 532, - 535, 86, 86, 86, 86, 86, 86, 536, 550, 86, - 529, 177, 171, 530, 86, 531, 86, 537, 86, 538, - 86, 552, 86, 549, 553, 539, 551, 86, 554, 540, - 555, 567, 557, 572, 541, 566, 86, 542, 86, 543, - 176, 544, 568, 86, 86, 86, 556, 569, 86, 570, - 86, 86, 577, 575, 545, 573, 571, 546, 86, 547, - 574, 548, 86, 86, 558, 559, 86, 86, 86, 576, - 171, 580, 584, 582, 560, 561, 562, 563, 564, 86, - 86, 565, 581, 583, 578, 86, 86, 86, 86, 579, - - 585, 86, 589, 590, 86, 593, 592, 86, 86, 86, - 586, 588, 86, 597, 86, 587, 591, 86, 86, 86, - 595, 86, 86, 596, 86, 86, 600, 594, 601, 602, - 86, 86, 86, 599, 608, 86, 616, 86, 603, 598, - 605, 606, 604, 86, 607, 86, 86, 86, 609, 610, - 611, 86, 86, 619, 86, 613, 614, 86, 86, 86, - 86, 618, 632, 634, 617, 622, 623, 612, 86, 633, - 86, 615, 620, 621, 635, 86, 637, 624, 86, 625, - 86, 86, 86, 86, 636, 626, 86, 639, 86, 86, - 640, 641, 169, 627, 628, 86, 86, 629, 630, 638, - - 642, 631, 645, 643, 86, 644, 646, 86, 86, 648, - 86, 649, 650, 647, 86, 86, 86, 86, 86, 651, - 652, 86, 86, 86, 657, 86, 655, 656, 86, 86, - 653, 86, 658, 86, 86, 86, 663, 659, 654, 86, - 665, 86, 86, 662, 666, 667, 86, 661, 660, 86, - 669, 670, 86, 86, 668, 664, 86, 672, 674, 86, - 675, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 677, 86, 681, 671, 679, 673, 86, 86, 86, 688, - 690, 683, 676, 167, 678, 86, 86, 680, 682, 684, - 86, 685, 689, 86, 686, 692, 86, 687, 693, 691, - - 86, 86, 86, 86, 86, 697, 86, 701, 695, 86, - 694, 696, 86, 86, 704, 700, 86, 698, 86, 699, - 86, 703, 86, 86, 86, 86, 706, 707, 710, 702, - 86, 86, 86, 86, 86, 712, 86, 709, 705, 714, - 86, 86, 711, 86, 86, 708, 713, 86, 715, 717, - 86, 729, 716, 86, 718, 731, 86, 166, 728, 719, - 726, 720, 727, 730, 86, 86, 86, 721, 86, 722, - 733, 736, 723, 724, 741, 86, 86, 86, 86, 725, - 732, 734, 737, 742, 739, 735, 86, 740, 86, 86, - 744, 86, 86, 86, 743, 746, 86, 749, 86, 751, - - 86, 747, 738, 86, 745, 86, 748, 86, 752, 86, - 755, 86, 753, 86, 86, 86, 750, 86, 754, 758, - 759, 86, 86, 762, 756, 764, 86, 86, 766, 757, - 761, 763, 760, 171, 86, 86, 86, 765, 767, 771, - 86, 86, 768, 86, 86, 86, 86, 774, 776, 86, - 770, 86, 86, 164, 769, 772, 86, 775, 780, 773, - 778, 779, 86, 781, 86, 782, 783, 86, 784, 86, - 785, 86, 86, 777, 86, 86, 86, 86, 86, 789, - 788, 86, 794, 786, 86, 817, 790, 795, 86, 787, - 797, 86, 86, 791, 793, 800, 792, 796, 798, 86, - - 799, 86, 86, 801, 86, 802, 86, 803, 86, 804, - 806, 86, 86, 86, 805, 86, 86, 810, 86, 809, - 86, 86, 86, 808, 813, 86, 86, 814, 812, 807, - 818, 86, 86, 86, 86, 86, 86, 811, 820, 86, - 822, 86, 824, 86, 86, 816, 86, 823, 815, 827, - 821, 819, 86, 86, 825, 831, 86, 86, 86, 86, - 839, 86, 832, 86, 826, 828, 834, 86, 829, 86, - 833, 835, 86, 830, 836, 837, 838, 86, 86, 86, - 846, 86, 842, 843, 845, 840, 86, 86, 841, 86, - 847, 849, 848, 844, 86, 86, 86, 86, 86, 852, - - 853, 854, 86, 86, 86, 86, 86, 861, 86, 86, - 857, 859, 86, 850, 851, 86, 856, 858, 855, 86, - 864, 862, 86, 86, 86, 860, 86, 86, 863, 870, - 872, 86, 86, 868, 86, 86, 866, 871, 869, 867, - 865, 873, 874, 86, 86, 86, 876, 86, 875, 86, - 877, 86, 878, 86, 883, 86, 881, 86, 885, 86, - 86, 879, 884, 880, 86, 86, 86, 86, 886, 86, - 86, 888, 882, 890, 162, 889, 86, 86, 891, 86, - 887, 894, 892, 893, 898, 86, 899, 86, 895, 86, - 86, 916, 901, 86, 900, 896, 897, 902, 86, 903, - - 904, 86, 86, 908, 86, 906, 86, 912, 905, 86, - 86, 910, 913, 86, 86, 914, 909, 86, 86, 86, - 907, 911, 86, 86, 918, 86, 86, 86, 925, 86, - 86, 86, 86, 926, 86, 915, 917, 920, 86, 919, - 927, 921, 86, 922, 86, 923, 86, 924, 930, 932, - 935, 931, 86, 928, 86, 86, 86, 929, 933, 934, - 86, 86, 86, 86, 86, 86, 86, 938, 937, 942, - 86, 86, 936, 86, 86, 86, 952, 951, 86, 939, - 944, 941, 940, 950, 943, 86, 86, 86, 945, 946, - 947, 953, 948, 949, 86, 86, 86, 86, 86, 954, - - 86, 958, 86, 86, 86, 955, 956, 962, 957, 963, - 964, 86, 86, 959, 86, 961, 86, 960, 86, 966, - 86, 967, 86, 86, 86, 969, 86, 974, 86, 970, - 968, 976, 972, 86, 171, 965, 971, 86, 973, 975, - 86, 977, 86, 86, 86, 86, 86, 981, 984, 86, - 987, 979, 86, 985, 978, 988, 86, 86, 980, 982, - 86, 986, 989, 86, 992, 86, 86, 983, 86, 990, - 86, 86, 995, 86, 86, 999, 86, 86, 86, 86, - 86, 86, 991, 996, 993, 1000, 994, 1001, 1013, 86, - 86, 86, 998, 86, 1002, 1016, 86, 86, 997, 1004, - - 1050, 86, 86, 1003, 86, 1012, 1005, 1018, 86, 1006, - 1014, 1015, 86, 1007, 86, 86, 1008, 1019, 1017, 1021, - 86, 1022, 86, 1009, 1010, 1024, 1011, 86, 1020, 86, - 1023, 86, 1028, 86, 86, 86, 86, 1041, 86, 1038, - 1025, 1026, 86, 86, 86, 86, 86, 86, 1065, 1043, - 86, 1027, 86, 1029, 1030, 1037, 1031, 1039, 86, 1032, - 1040, 1048, 1077, 1045, 1033, 1044, 1046, 1042, 86, 86, - 1034, 1035, 1051, 1036, 1047, 1049, 86, 1052, 86, 86, - 1054, 86, 86, 1053, 86, 1057, 86, 1056, 86, 86, - 86, 1058, 1059, 1060, 1061, 86, 1055, 86, 86, 1062, - - 86, 86, 1063, 86, 86, 1069, 86, 86, 86, 1068, - 86, 86, 1073, 86, 86, 1079, 86, 1064, 86, 86, - 1066, 1070, 1067, 1078, 1072, 1075, 1074, 1071, 1080, 86, - 86, 1083, 86, 1081, 86, 1082, 1076, 86, 1085, 1087, - 86, 86, 1089, 1090, 86, 86, 1088, 1084, 86, 86, - 1091, 86, 1086, 1093, 86, 1094, 86, 1092, 86, 86, - 86, 86, 86, 86, 86, 1098, 1096, 1099, 1100, 1095, - 86, 1104, 86, 86, 1107, 86, 86, 1097, 86, 1108, - 1101, 86, 1105, 1103, 1106, 86, 1102, 86, 86, 86, - 86, 86, 86, 179, 86, 86, 1109, 1111, 1112, 1115, - - 1110, 1116, 86, 86, 86, 1114, 1117, 1118, 86, 1119, - 86, 1113, 1123, 1121, 86, 1126, 1120, 1124, 86, 86, - 86, 1122, 86, 86, 1125, 86, 86, 86, 86, 1132, - 1134, 1129, 1135, 86, 1127, 86, 86, 1133, 86, 1128, - 1137, 86, 86, 1131, 86, 86, 1139, 1130, 1136, 86, - 86, 86, 86, 177, 86, 1146, 86, 1138, 1140, 1144, - 86, 1149, 1141, 86, 86, 1143, 1142, 86, 1151, 1150, - 1147, 86, 1145, 1148, 86, 86, 86, 86, 86, 1152, - 1155, 86, 1158, 1153, 1156, 1154, 1159, 86, 86, 1157, - 86, 86, 86, 86, 86, 176, 86, 1160, 86, 1162, - - 1164, 1161, 86, 1170, 1171, 86, 1173, 86, 1163, 86, - 86, 1165, 86, 1167, 1176, 1166, 1168, 1177, 1169, 1172, - 86, 1174, 1175, 86, 86, 86, 86, 86, 1178, 86, - 86, 1184, 1182, 1185, 1186, 86, 86, 1190, 1180, 86, - 86, 86, 86, 86, 1179, 1187, 1181, 1192, 86, 1189, - 1183, 86, 86, 1188, 1198, 86, 86, 1194, 1195, 1199, - 171, 1191, 86, 86, 86, 1202, 86, 1201, 86, 1193, - 86, 1196, 86, 1197, 86, 1206, 86, 1200, 1203, 86, - 86, 86, 86, 1205, 86, 86, 1204, 86, 1221, 1220, - 1209, 1207, 86, 1210, 1211, 86, 1222, 86, 1208, 86, - - 1212, 1224, 86, 1213, 86, 86, 86, 1214, 1661, 1215, - 1223, 1230, 86, 1216, 1228, 1217, 1226, 1227, 86, 1229, - 1218, 1232, 1225, 86, 86, 1219, 1233, 86, 86, 86, - 86, 86, 1231, 1234, 1236, 86, 1242, 1235, 86, 86, - 1239, 1241, 86, 1238, 1244, 86, 1237, 86, 86, 86, - 1240, 86, 1243, 1249, 1248, 1251, 1246, 1247, 86, 1252, - 1245, 86, 1255, 1250, 1254, 86, 1253, 86, 86, 86, - 86, 86, 86, 1256, 86, 86, 86, 1270, 171, 1267, - 86, 86, 86, 1266, 86, 86, 1271, 1269, 86, 1257, - 1258, 86, 1259, 1272, 1268, 86, 1273, 1260, 1279, 1261, - - 1274, 86, 1275, 86, 86, 1262, 86, 86, 86, 86, - 1263, 1264, 1280, 86, 1276, 86, 86, 1265, 1281, 1278, - 1277, 1286, 86, 86, 1289, 1283, 1282, 1287, 86, 86, - 86, 1284, 1290, 1285, 86, 86, 1288, 1294, 86, 1292, - 86, 86, 86, 86, 86, 1295, 1300, 1291, 1293, 86, - 1297, 1298, 86, 86, 86, 86, 86, 1296, 1301, 1303, - 1299, 86, 1306, 86, 86, 86, 86, 86, 86, 86, - 1305, 86, 1302, 1311, 1309, 1304, 1308, 1310, 1313, 86, - 86, 86, 1314, 1307, 86, 1315, 1312, 86, 1319, 86, - 86, 86, 1318, 86, 86, 169, 86, 86, 1324, 1316, - - 1320, 1325, 1326, 1321, 86, 1317, 1323, 86, 1322, 1327, - 86, 1329, 1330, 1331, 86, 86, 1328, 86, 86, 86, - 86, 86, 1336, 1332, 86, 86, 1338, 1337, 86, 1339, - 1333, 86, 1340, 1334, 1341, 86, 86, 1335, 1342, 86, - 86, 86, 86, 1349, 86, 1351, 1345, 86, 86, 86, - 86, 86, 1344, 1353, 1347, 1343, 86, 1348, 1346, 86, - 1355, 86, 1352, 86, 1350, 86, 1356, 86, 86, 167, - 1354, 1357, 1358, 1359, 1361, 86, 86, 1360, 86, 86, - 1362, 1363, 86, 86, 86, 1365, 1369, 1370, 86, 1367, - 1364, 86, 86, 86, 86, 86, 1374, 1373, 1366, 86, - - 1371, 86, 86, 86, 1380, 1368, 1378, 1381, 86, 1382, - 86, 1372, 86, 86, 86, 86, 166, 1375, 86, 1383, - 1376, 1379, 1377, 1384, 1385, 86, 86, 1387, 86, 86, - 86, 1386, 1390, 86, 1388, 1391, 86, 86, 1393, 86, - 86, 86, 1392, 1389, 86, 1394, 86, 1398, 86, 1395, - 86, 1396, 86, 1399, 86, 1400, 86, 86, 86, 1401, - 1406, 1402, 1397, 86, 1407, 86, 86, 86, 86, 1404, - 86, 86, 1403, 1409, 1410, 86, 86, 1405, 1408, 86, - 86, 1412, 1415, 1413, 1411, 86, 86, 86, 86, 1417, - 1421, 86, 86, 86, 1414, 171, 86, 1416, 1423, 86, - - 1422, 1424, 86, 86, 1418, 86, 86, 1420, 1429, 86, - 1432, 86, 1419, 1426, 1430, 1425, 86, 1427, 1428, 1434, - 1435, 86, 86, 86, 1431, 86, 86, 86, 86, 86, - 1439, 86, 1438, 86, 1440, 1441, 1433, 1436, 1443, 1437, - 86, 86, 86, 86, 86, 1442, 1446, 86, 86, 1447, - 1450, 86, 86, 86, 86, 1444, 1452, 86, 86, 1448, - 1445, 164, 1451, 1455, 86, 86, 1449, 86, 1461, 1454, - 1457, 1453, 86, 1462, 1465, 86, 1464, 86, 1456, 1458, - 1463, 1459, 86, 86, 1460, 86, 1467, 86, 86, 86, - 86, 86, 1474, 86, 1471, 86, 1466, 1470, 86, 86, - - 1475, 86, 86, 1473, 1468, 1469, 86, 1476, 86, 1472, - 1477, 1479, 86, 1480, 86, 1485, 86, 86, 86, 1481, - 1478, 1483, 1482, 86, 86, 86, 86, 1484, 1489, 86, - 86, 86, 1486, 1487, 86, 86, 1492, 1490, 86, 86, - 86, 1491, 1493, 1488, 1497, 86, 1500, 86, 86, 86, - 1494, 1499, 86, 1496, 1498, 1495, 86, 1503, 86, 86, - 86, 86, 1510, 86, 1504, 1501, 1512, 1502, 86, 86, - 1506, 86, 86, 86, 86, 1505, 1509, 86, 1507, 1515, - 86, 86, 86, 1511, 1513, 1508, 1518, 1514, 86, 86, - 1520, 86, 1519, 1517, 1516, 1521, 86, 86, 1525, 86, - - 86, 1522, 1523, 1556, 1524, 86, 1526, 86, 1536, 1534, - 1527, 1535, 1533, 1528, 1529, 86, 86, 86, 1530, 86, - 1537, 1540, 86, 1538, 1531, 1539, 86, 86, 1532, 86, - 86, 1541, 86, 1543, 1542, 86, 1545, 86, 86, 1550, - 1546, 1551, 1547, 1544, 86, 86, 86, 86, 86, 1552, - 1548, 86, 86, 1553, 1558, 86, 1549, 1555, 1560, 86, - 86, 1559, 86, 1562, 86, 86, 86, 1561, 1554, 1557, - 86, 86, 162, 86, 86, 1564, 1569, 86, 1563, 86, - 1565, 1574, 1566, 1575, 1567, 86, 1568, 1570, 86, 1571, - 1572, 1573, 1576, 86, 1577, 86, 1580, 86, 86, 86, - - 86, 1581, 86, 1578, 1579, 1585, 1582, 1583, 86, 86, - 86, 86, 86, 1591, 86, 1592, 86, 86, 1587, 86, - 86, 1584, 1586, 86, 86, 1594, 1590, 86, 1593, 1588, - 1589, 86, 1596, 1598, 1595, 86, 86, 1597, 1599, 86, - 1603, 86, 86, 86, 1602, 1605, 86, 86, 1606, 1607, - 86, 86, 86, 1600, 1608, 1609, 86, 1604, 1612, 86, - 86, 1601, 1614, 86, 86, 1611, 86, 1615, 86, 1616, - 86, 1610, 86, 1620, 86, 86, 86, 86, 86, 1623, - 1613, 1625, 86, 86, 1628, 86, 86, 86, 1626, 1617, - 86, 1618, 86, 1619, 1622, 1621, 86, 86, 1624, 1627, - - 1630, 1631, 86, 1629, 86, 1632, 86, 1633, 86, 1635, - 1634, 86, 86, 1637, 1636, 1638, 1639, 86, 1640, 86, - 86, 86, 86, 86, 1641, 1646, 1647, 1643, 86, 1644, - 86, 86, 86, 1648, 1650, 1649, 1645, 86, 1642, 86, - 86, 86, 1654, 86, 86, 86, 1651, 86, 171, 86, - 1656, 86, 1653, 86, 1662, 1663, 86, 86, 1652, 1658, - 86, 86, 1664, 1659, 1655, 1657, 1666, 1667, 1665, 86, - 1670, 1660, 86, 1668, 86, 86, 86, 86, 86, 86, - 1675, 86, 86, 86, 86, 86, 86, 1672, 1679, 1669, - 86, 1673, 1681, 86, 1671, 1683, 1674, 86, 86, 1686, - - 86, 1676, 1678, 1680, 1687, 86, 86, 1677, 86, 1682, - 86, 86, 1685, 86, 86, 1689, 1684, 86, 1688, 1690, - 86, 86, 1691, 1697, 86, 1692, 1695, 1700, 1693, 1696, - 86, 1694, 1698, 86, 1699, 86, 86, 1703, 86, 1701, - 86, 86, 1704, 86, 86, 86, 1708, 1702, 86, 1709, - 1706, 86, 86, 1710, 86, 86, 86, 1705, 1707, 1713, - 86, 86, 1718, 1711, 86, 86, 86, 1722, 1719, 1715, - 86, 1712, 1714, 86, 1716, 86, 86, 86, 1717, 86, - 86, 86, 1723, 1720, 86, 1721, 86, 86, 86, 1730, - 3815, 1724, 1727, 1726, 1731, 1725, 1728, 86, 86, 1729, - - 86, 86, 1732, 86, 1733, 86, 1737, 86, 86, 1735, - 1736, 1742, 1734, 86, 1741, 1738, 1739, 86, 1743, 86, - 1745, 86, 1744, 1740, 86, 1746, 86, 1747, 86, 86, - 86, 1751, 1752, 1753, 86, 1750, 3815, 86, 86, 86, - 86, 1754, 86, 1755, 1748, 1758, 86, 86, 86, 86, - 1749, 1759, 1761, 86, 86, 86, 86, 1760, 86, 1766, - 86, 1762, 1756, 1765, 1757, 86, 86, 1763, 1768, 1764, - 1769, 86, 1772, 86, 3815, 1767, 1774, 1773, 86, 86, - 1770, 1775, 86, 1776, 86, 1778, 86, 86, 86, 86, - 1771, 86, 86, 1777, 1782, 86, 1786, 1781, 86, 86, - - 86, 86, 86, 1787, 86, 1779, 1780, 86, 1792, 86, - 1783, 86, 1784, 1785, 86, 1794, 1790, 1788, 1795, 86, - 1789, 86, 86, 86, 86, 86, 1793, 86, 86, 86, - 1791, 1797, 1803, 86, 86, 1805, 86, 86, 1796, 1806, - 1798, 86, 1799, 1802, 1800, 86, 1801, 1807, 1804, 1810, - 86, 1811, 86, 1809, 86, 86, 1808, 86, 1814, 1812, - 86, 1813, 86, 86, 86, 86, 86, 1818, 3815, 1816, - 1815, 1819, 86, 86, 86, 1817, 1822, 1823, 86, 1824, - 86, 1821, 1827, 86, 1820, 1828, 1825, 1829, 86, 1832, - 1826, 1831, 86, 86, 86, 86, 86, 1833, 1834, 86, - - 1835, 86, 86, 1830, 86, 1840, 1841, 86, 86, 1843, - 1838, 86, 86, 86, 86, 86, 86, 1846, 1845, 1836, - 1837, 1847, 1849, 86, 1839, 86, 1842, 86, 1850, 1851, - 86, 86, 86, 1844, 1848, 86, 86, 86, 86, 1855, - 86, 86, 86, 86, 1860, 86, 86, 1852, 1853, 86, - 1858, 1854, 86, 1861, 1864, 86, 86, 1866, 1856, 86, - 1857, 1868, 1859, 86, 86, 1863, 1862, 86, 1867, 1865, - 86, 86, 1873, 86, 1869, 86, 86, 86, 86, 1870, - 86, 1876, 1878, 86, 1871, 86, 86, 1874, 86, 1879, - 1872, 86, 1877, 1875, 86, 1881, 86, 171, 1880, 1884, - - 1885, 86, 1882, 1888, 86, 1883, 1887, 86, 86, 86, - 1886, 1889, 86, 1892, 1891, 86, 86, 86, 86, 86, - 1890, 86, 1900, 86, 86, 86, 3815, 86, 1899, 1894, - 1893, 1897, 1901, 1905, 86, 1895, 1896, 86, 86, 86, - 86, 1909, 1904, 1898, 1902, 1903, 1906, 86, 86, 1911, - 1913, 86, 1907, 1910, 86, 86, 86, 86, 1908, 1914, - 1912, 1916, 86, 86, 86, 1915, 86, 86, 86, 1922, - 1919, 1920, 86, 1923, 86, 86, 1917, 86, 86, 86, - 1928, 1927, 1918, 86, 86, 86, 86, 86, 1924, 1935, - 1937, 1921, 1926, 1925, 86, 86, 1930, 1932, 86, 86, - - 1933, 1929, 86, 1936, 86, 1931, 1938, 1940, 1939, 3815, - 86, 1941, 1934, 1942, 1943, 86, 1945, 1946, 86, 86, - 86, 1948, 86, 86, 1947, 86, 1949, 1950, 1944, 86, - 86, 1952, 86, 86, 1951, 86, 86, 1957, 1958, 1956, - 1959, 86, 86, 86, 86, 86, 86, 1960, 1953, 86, - 1961, 1954, 1964, 86, 1963, 1955, 86, 86, 86, 86, - 86, 86, 1965, 1966, 1962, 86, 86, 86, 86, 86, - 86, 86, 1977, 86, 1968, 1976, 86, 86, 1967, 1969, - 1971, 1970, 1972, 1973, 1979, 1974, 86, 86, 1980, 1983, - 1975, 86, 1978, 86, 86, 86, 86, 86, 1981, 86, - - 1982, 86, 1988, 86, 1990, 86, 1991, 1992, 86, 1985, - 1987, 1984, 86, 86, 1986, 86, 1996, 1994, 86, 1998, - 1989, 1993, 86, 86, 86, 1995, 86, 86, 86, 86, - 86, 86, 86, 1997, 2003, 2001, 3815, 2004, 86, 2002, - 2005, 2000, 2012, 86, 86, 2006, 1999, 2007, 2009, 86, - 86, 2018, 2008, 2011, 2013, 86, 2010, 86, 2017, 86, - 2016, 2014, 2015, 86, 86, 86, 86, 86, 86, 2020, - 2021, 2022, 2024, 86, 86, 86, 86, 86, 86, 86, - 2034, 86, 2019, 86, 2027, 2033, 2029, 2023, 2032, 2030, - 2026, 86, 2025, 86, 86, 2028, 86, 86, 86, 86, - - 2035, 86, 2031, 2036, 2041, 86, 2043, 2037, 86, 2042, - 86, 2039, 86, 2047, 2038, 2040, 86, 2044, 86, 2048, - 86, 86, 2053, 2045, 86, 2058, 2046, 86, 2051, 2050, - 86, 86, 2052, 86, 2049, 86, 2054, 86, 2057, 2055, - 2062, 86, 2056, 86, 86, 2063, 86, 86, 86, 2059, - 86, 86, 2067, 86, 2069, 2061, 2060, 2064, 2073, 2065, - 86, 2072, 2068, 2066, 2071, 86, 86, 86, 2070, 2075, - 86, 2077, 86, 86, 86, 86, 2076, 2080, 86, 86, - 2074, 86, 2082, 86, 2084, 86, 86, 2079, 2083, 2085, - 86, 2081, 2078, 2086, 86, 86, 86, 86, 86, 86, - - 2090, 86, 2089, 86, 2087, 2088, 2091, 2093, 2099, 2092, - 2097, 86, 2094, 2100, 86, 2095, 86, 2096, 86, 86, - 86, 2101, 2103, 86, 86, 86, 2107, 86, 86, 2102, - 2109, 86, 2098, 86, 86, 86, 86, 2113, 86, 86, - 2104, 2108, 2105, 2115, 2106, 86, 86, 86, 86, 2111, - 2116, 86, 2112, 2110, 86, 2114, 2118, 2120, 86, 2119, - 86, 171, 86, 2124, 86, 86, 2117, 2127, 86, 2122, - 2121, 2123, 86, 2125, 86, 2131, 86, 86, 86, 2126, - 86, 86, 2132, 86, 2128, 86, 2129, 2134, 86, 86, - 2140, 2130, 2133, 2135, 86, 2136, 86, 86, 86, 2144, - - 86, 86, 2147, 86, 2143, 2137, 2141, 2138, 86, 2139, - 2149, 2145, 86, 86, 2151, 2142, 86, 2148, 2152, 86, - 86, 2146, 2150, 86, 86, 86, 2154, 86, 2155, 86, - 86, 86, 86, 86, 86, 2153, 86, 2160, 2161, 86, - 86, 2165, 86, 2162, 86, 86, 86, 2156, 2158, 2159, - 2169, 2157, 2163, 2166, 2164, 86, 86, 2170, 2173, 86, - 2171, 2172, 2168, 2174, 86, 86, 2167, 86, 86, 86, - 86, 86, 2181, 86, 2184, 86, 86, 2175, 2185, 86, - 2176, 2186, 86, 86, 2177, 86, 2178, 2179, 2180, 2182, - 86, 2183, 2188, 86, 86, 2189, 2187, 2193, 86, 86, - - 86, 2195, 86, 2194, 2190, 2196, 2191, 86, 2197, 2199, - 86, 2192, 86, 86, 86, 86, 86, 2201, 2198, 2203, - 2204, 86, 86, 86, 2207, 86, 86, 86, 2206, 86, - 86, 86, 2212, 2200, 2210, 2211, 86, 2214, 2202, 86, - 86, 2208, 2205, 86, 2213, 86, 86, 86, 2209, 2222, - 86, 86, 2215, 2216, 2217, 86, 2219, 86, 2225, 2218, - 86, 86, 2226, 2220, 86, 86, 2221, 2223, 2227, 86, - 2224, 2231, 86, 2228, 86, 2229, 2232, 2234, 86, 2230, - 86, 2237, 86, 86, 2238, 86, 86, 2233, 86, 2235, - 86, 2240, 86, 2243, 2244, 86, 2245, 86, 2236, 86, - - 2247, 86, 86, 86, 86, 86, 2241, 86, 2239, 2252, - 2242, 86, 2249, 2250, 86, 86, 2256, 86, 86, 2246, - 86, 86, 86, 2254, 86, 86, 2251, 2248, 2255, 2259, - 2253, 86, 2262, 2260, 86, 2258, 2263, 86, 2266, 2257, - 86, 86, 2268, 2271, 86, 2267, 86, 2261, 86, 86, - 2265, 2264, 86, 2270, 2272, 86, 2274, 2275, 86, 86, - 86, 2269, 86, 86, 2276, 86, 86, 86, 86, 2277, - 86, 2281, 86, 86, 2273, 2283, 86, 2286, 2278, 86, - 86, 2287, 2282, 2289, 2284, 2279, 2280, 86, 86, 86, - 86, 2288, 86, 86, 2292, 86, 86, 2297, 86, 2285, - - 2290, 2296, 86, 2291, 86, 86, 3815, 86, 86, 2303, - 2293, 2302, 2294, 2306, 86, 2295, 86, 86, 86, 2298, - 2300, 2299, 2304, 2301, 86, 86, 2305, 2307, 2308, 2311, - 86, 86, 86, 86, 86, 86, 2309, 86, 2315, 86, - 86, 2310, 2319, 86, 86, 86, 2313, 3815, 86, 2322, - 2324, 86, 2312, 2314, 86, 2316, 2323, 2317, 2320, 2318, - 2321, 86, 2325, 86, 86, 2328, 86, 2326, 86, 86, - 2329, 2332, 86, 2327, 2331, 2333, 86, 2334, 2336, 2337, - 86, 86, 2335, 86, 86, 86, 2330, 86, 86, 2341, - 86, 86, 2339, 2340, 2338, 86, 86, 86, 86, 2345, - - 2342, 2343, 2344, 2347, 2349, 2346, 2350, 86, 86, 86, - 86, 171, 86, 2348, 86, 2351, 2353, 86, 86, 2358, - 86, 86, 86, 2357, 2354, 2359, 2355, 86, 2352, 86, - 2360, 2361, 86, 2362, 86, 86, 2356, 2365, 86, 86, - 2367, 2364, 2363, 86, 2366, 2368, 86, 86, 2371, 86, - 86, 86, 2370, 2372, 86, 2369, 86, 2375, 2373, 86, - 86, 86, 86, 2374, 2379, 86, 2378, 86, 86, 86, - 86, 2376, 2377, 2381, 2382, 86, 2380, 86, 2383, 2384, - 86, 86, 2385, 86, 86, 2391, 2386, 2389, 2387, 2390, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 2396, - - 2388, 2393, 86, 86, 2402, 2399, 2400, 86, 2392, 2395, - 2397, 2394, 2398, 86, 86, 86, 2403, 86, 2408, 86, - 2406, 86, 2401, 86, 2409, 2404, 86, 86, 2415, 86, - 2407, 86, 86, 86, 86, 2405, 86, 2417, 86, 2410, - 2418, 86, 2411, 2412, 2413, 2414, 86, 2419, 86, 2416, - 2421, 86, 2423, 86, 2422, 86, 2424, 86, 2427, 2420, - 86, 86, 86, 2426, 86, 86, 86, 2432, 2429, 86, - 2433, 2425, 86, 86, 2428, 86, 86, 86, 2434, 86, - 86, 86, 86, 86, 2430, 2431, 86, 2436, 2437, 2441, - 86, 2439, 2438, 2435, 86, 2443, 2442, 2453, 86, 2440, - - 2444, 86, 2452, 2450, 86, 2445, 2446, 2447, 86, 2451, - 2448, 86, 2454, 86, 2456, 86, 86, 86, 2457, 2460, - 86, 2459, 86, 2449, 86, 86, 86, 2462, 2455, 86, - 86, 2463, 86, 86, 2464, 2458, 86, 2471, 2461, 2466, - 86, 2467, 2468, 86, 2465, 86, 86, 2473, 2475, 86, - 86, 2469, 86, 2470, 86, 86, 2472, 2477, 86, 86, - 2474, 2478, 86, 2479, 86, 2484, 86, 2480, 86, 86, - 86, 86, 2481, 2482, 2485, 86, 2476, 2488, 2490, 2486, - 2487, 86, 2489, 86, 2483, 86, 2494, 86, 86, 2495, - 86, 86, 86, 2499, 2491, 2492, 86, 2493, 86, 86, - - 86, 2496, 2501, 2500, 2503, 86, 2497, 2506, 86, 86, - 86, 86, 2498, 2504, 2502, 86, 2508, 86, 2509, 86, - 86, 2505, 86, 2507, 86, 2511, 2513, 2512, 2510, 86, - 86, 2516, 2518, 2514, 86, 86, 2515, 2519, 86, 3815, - 86, 86, 86, 86, 2521, 86, 2520, 2525, 86, 86, - 2526, 2517, 2522, 86, 2523, 2524, 86, 2528, 2531, 86, - 86, 2527, 2530, 86, 86, 86, 86, 86, 86, 2529, - 86, 2539, 86, 86, 2532, 3815, 86, 86, 2533, 2540, - 2535, 2534, 2537, 86, 2541, 2538, 86, 86, 2543, 86, - 2536, 2544, 86, 2542, 2546, 2547, 2545, 86, 2549, 86, - - 2550, 86, 86, 2555, 86, 86, 2557, 86, 2548, 86, - 86, 2554, 2551, 86, 2556, 86, 86, 2552, 2561, 2560, - 86, 171, 2564, 86, 86, 2566, 2553, 2558, 86, 2559, - 2567, 86, 2568, 2562, 2569, 2563, 86, 86, 86, 2570, - 86, 2573, 86, 2565, 2572, 2571, 2574, 86, 86, 2575, - 86, 2578, 2579, 86, 86, 2580, 86, 86, 2583, 86, - 86, 86, 2581, 2576, 86, 2585, 86, 2586, 2587, 86, - 2589, 2584, 86, 86, 2577, 2582, 86, 2588, 86, 2591, - 86, 2593, 2590, 86, 2592, 86, 86, 86, 2595, 86, - 86, 86, 2598, 86, 86, 2604, 86, 86, 2594, 2602, - - 86, 2597, 86, 86, 2605, 86, 2600, 2599, 2596, 86, - 2607, 2601, 2606, 86, 86, 2603, 86, 86, 86, 86, - 2608, 2613, 2616, 86, 86, 2611, 86, 2610, 86, 2609, - 2614, 86, 2617, 2612, 86, 86, 2615, 86, 2618, 86, - 86, 86, 2627, 2628, 86, 2619, 86, 2620, 86, 86, - 2629, 86, 2625, 86, 2621, 86, 2623, 2630, 2622, 2632, - 2624, 86, 2626, 2633, 86, 2631, 2634, 2635, 86, 2636, - 86, 86, 86, 2637, 86, 86, 2642, 2643, 86, 2639, - 86, 86, 2644, 86, 2638, 3815, 2640, 2641, 2645, 86, - 86, 86, 2649, 2651, 86, 2650, 2646, 86, 2647, 86, - - 2652, 86, 2654, 2648, 86, 2657, 86, 2658, 86, 86, - 86, 86, 2653, 2655, 2659, 2660, 2656, 86, 86, 2664, - 86, 2665, 86, 86, 2667, 86, 86, 2669, 86, 86, - 2663, 2661, 86, 86, 2671, 2672, 86, 2662, 2673, 86, - 86, 86, 2666, 86, 2668, 86, 2676, 2670, 2678, 86, - 2675, 86, 2680, 86, 2674, 2682, 86, 86, 2681, 86, - 2677, 2684, 86, 86, 86, 2679, 86, 86, 2686, 2688, - 2687, 86, 2689, 2691, 86, 86, 2683, 2685, 86, 86, - 2694, 86, 2697, 86, 86, 2698, 2692, 2690, 86, 86, - 2693, 86, 86, 86, 2695, 2704, 86, 2703, 86, 86, - - 2696, 86, 86, 2700, 2699, 86, 2706, 2702, 86, 2707, - 86, 2709, 2701, 86, 2708, 2711, 86, 2705, 86, 86, - 2713, 86, 2712, 86, 86, 2710, 2715, 86, 2719, 86, - 86, 2721, 2714, 2720, 2725, 86, 2717, 2716, 2722, 86, - 86, 86, 2726, 86, 2727, 86, 2728, 86, 2729, 2718, - 86, 86, 86, 2723, 86, 2724, 2734, 86, 86, 86, - 2731, 2733, 2736, 2737, 2738, 86, 86, 2740, 2741, 86, - 2730, 2732, 2744, 86, 86, 86, 86, 86, 86, 86, - 2735, 2739, 2745, 86, 2743, 86, 2742, 86, 2746, 2748, - 2749, 86, 86, 86, 2751, 86, 86, 2756, 86, 2750, - - 2747, 2752, 2753, 86, 2754, 2755, 2757, 86, 86, 86, - 2762, 2758, 86, 2763, 86, 2764, 2759, 2761, 2760, 86, - 86, 86, 2767, 2765, 86, 171, 86, 86, 86, 2766, - 2768, 2773, 86, 86, 86, 86, 86, 2775, 86, 2776, - 86, 86, 2771, 2772, 2769, 86, 2770, 2777, 2774, 86, - 86, 86, 2778, 2779, 2781, 2782, 2847, 2780, 2785, 86, - 2783, 2784, 2786, 86, 86, 2787, 2788, 86, 86, 86, - 2791, 2789, 2792, 86, 2790, 86, 86, 86, 86, 2794, - 86, 86, 2793, 86, 2796, 86, 86, 2800, 2801, 2795, - 86, 2798, 86, 2797, 86, 2803, 86, 86, 86, 86, - - 2804, 2805, 2806, 86, 2799, 86, 2802, 86, 2809, 86, - 2807, 86, 2808, 2813, 86, 2812, 86, 2811, 2810, 86, - 86, 86, 86, 86, 2815, 86, 86, 86, 2823, 2814, - 2820, 86, 2822, 86, 86, 86, 2825, 2819, 86, 2824, - 2816, 2817, 2818, 86, 2826, 2821, 86, 86, 86, 2827, - 2832, 86, 2830, 86, 86, 86, 2836, 2828, 2835, 3815, - 86, 2837, 86, 86, 86, 2829, 2833, 86, 2838, 2831, - 86, 2834, 2839, 2840, 86, 86, 2843, 2841, 86, 86, - 2845, 2844, 86, 86, 86, 2846, 2848, 86, 2842, 86, - 2850, 2851, 2852, 86, 2854, 86, 86, 86, 86, 2856, - - 86, 86, 86, 86, 86, 2853, 2855, 86, 2860, 86, - 2849, 86, 86, 3815, 2857, 2858, 86, 2864, 2859, 2866, - 86, 2865, 2867, 86, 86, 2862, 86, 2868, 86, 2869, - 2861, 86, 2863, 86, 86, 2870, 2873, 86, 86, 86, - 2871, 2875, 2878, 86, 86, 86, 86, 2874, 2872, 2876, - 2882, 2877, 2881, 86, 2880, 86, 86, 2885, 86, 86, - 2879, 86, 2886, 2887, 86, 86, 86, 2892, 86, 86, - 2884, 2883, 2893, 86, 2894, 86, 86, 86, 86, 86, - 86, 2899, 2898, 2888, 2889, 2890, 2891, 2896, 86, 2897, - 86, 86, 86, 2895, 2900, 2903, 86, 2907, 86, 86, - - 86, 86, 2901, 2902, 2906, 2909, 86, 2910, 86, 2911, - 86, 86, 2904, 2912, 86, 2908, 2905, 86, 86, 2913, - 86, 2916, 86, 2915, 86, 2917, 86, 2918, 86, 2914, - 86, 86, 3815, 86, 2919, 2923, 2925, 86, 86, 2927, - 86, 86, 2921, 2928, 86, 2930, 86, 86, 2920, 2924, - 86, 2922, 2929, 86, 86, 86, 86, 2926, 86, 2931, - 2932, 2935, 2933, 2938, 86, 2940, 86, 86, 86, 86, - 86, 86, 86, 171, 2934, 2936, 2939, 86, 2937, 86, - 86, 2947, 86, 2943, 86, 2948, 2945, 86, 2949, 2942, - 86, 2950, 86, 86, 2941, 2944, 2955, 86, 2953, 2946, - - 86, 86, 3815, 2957, 86, 2951, 2954, 2952, 86, 2959, - 2961, 86, 86, 2960, 86, 2958, 2956, 2962, 86, 86, - 2963, 86, 2964, 86, 2965, 2967, 86, 86, 86, 86, - 2966, 86, 86, 86, 86, 86, 86, 86, 2976, 86, - 86, 86, 2969, 2974, 3815, 2968, 2992, 2971, 2970, 86, - 2980, 2978, 2973, 2972, 86, 2975, 86, 2977, 2979, 86, - 2981, 2982, 86, 2984, 86, 2986, 86, 86, 2983, 2988, - 86, 86, 86, 2985, 86, 86, 2987, 2989, 86, 86, - 86, 86, 3000, 86, 86, 2998, 3815, 86, 86, 2990, - 2991, 2996, 2994, 2993, 2999, 3001, 86, 2995, 86, 2997, - - 86, 86, 3005, 86, 3002, 3007, 3003, 3004, 3006, 86, - 86, 86, 86, 86, 86, 86, 3008, 86, 3009, 3013, - 3014, 86, 86, 86, 86, 3010, 3815, 3012, 86, 86, - 86, 3011, 3022, 86, 3018, 3015, 86, 3016, 3021, 3019, - 3023, 86, 3017, 86, 3020, 3024, 3025, 86, 3026, 86, - 86, 86, 86, 86, 86, 3028, 86, 3031, 3027, 3033, - 86, 86, 3029, 86, 86, 86, 3038, 3039, 86, 86, - 86, 3030, 86, 3032, 3042, 86, 3034, 86, 86, 3035, - 3040, 3036, 3037, 3043, 86, 3044, 86, 3041, 3045, 86, - 3049, 86, 3046, 3047, 86, 3048, 3050, 86, 3053, 86, - - 86, 86, 86, 86, 3051, 86, 3058, 86, 86, 3052, - 86, 3056, 86, 3059, 3061, 86, 3062, 3060, 3063, 86, - 3054, 3055, 3065, 86, 86, 3057, 86, 86, 86, 3066, - 86, 3064, 3071, 86, 86, 3067, 86, 3073, 86, 86, - 3069, 3076, 86, 3068, 86, 86, 86, 3074, 3083, 86, - 3070, 86, 86, 86, 86, 3072, 86, 3077, 3078, 3079, - 3080, 3075, 3081, 3082, 3086, 86, 86, 86, 86, 86, - 86, 3085, 3084, 3087, 3088, 3090, 86, 86, 86, 86, - 3089, 86, 86, 86, 3091, 3094, 3092, 3093, 3096, 86, - 86, 3099, 86, 86, 3095, 3097, 3098, 3100, 86, 86, - - 3104, 3102, 3103, 171, 3101, 86, 86, 3106, 3108, 3815, - 3105, 86, 86, 3110, 86, 86, 3109, 86, 3113, 86, - 3114, 86, 3112, 86, 3107, 3116, 86, 3118, 86, 86, - 3111, 3117, 3119, 86, 3120, 86, 3115, 86, 3123, 86, - 3121, 86, 86, 3124, 86, 86, 3125, 86, 86, 86, - 3130, 3122, 3131, 86, 3126, 3128, 86, 3127, 86, 86, - 3135, 3133, 3134, 86, 3132, 86, 86, 86, 86, 3129, - 3136, 3137, 3139, 86, 86, 86, 86, 86, 3138, 3140, - 3141, 86, 86, 3146, 86, 86, 3144, 86, 86, 3143, - 3145, 3142, 3148, 3147, 86, 3151, 86, 86, 86, 3149, - - 86, 86, 3152, 3150, 3157, 86, 3153, 86, 86, 86, - 3162, 86, 86, 86, 3158, 86, 86, 3154, 3155, 3156, - 3160, 3161, 3166, 86, 3164, 86, 86, 3159, 3163, 86, - 86, 3165, 3171, 86, 3170, 86, 3173, 3174, 86, 3177, - 86, 3168, 86, 86, 3167, 86, 3178, 86, 86, 3169, - 86, 86, 86, 86, 86, 86, 3179, 3175, 3176, 3181, - 3172, 3182, 3184, 86, 3183, 86, 3185, 86, 86, 3186, - 3190, 3187, 3189, 86, 86, 3180, 86, 3191, 3193, 86, - 86, 3188, 3195, 86, 3196, 86, 3197, 86, 86, 86, - 86, 86, 3192, 3198, 86, 3199, 86, 3200, 3201, 86, - - 86, 3203, 3205, 3194, 86, 86, 3204, 3206, 86, 86, - 3815, 3202, 3207, 86, 3211, 3212, 86, 3213, 86, 3214, - 86, 86, 86, 86, 3208, 3209, 3215, 3218, 86, 3210, - 86, 86, 3221, 86, 3216, 3217, 86, 3222, 3223, 86, - 86, 3225, 86, 86, 86, 86, 3229, 86, 3219, 3230, - 86, 3220, 86, 86, 3232, 3224, 3226, 3231, 86, 3228, - 86, 3234, 3227, 3233, 86, 86, 3235, 86, 86, 3240, - 3236, 86, 86, 86, 3239, 86, 3242, 3243, 86, 86, - 86, 86, 86, 3246, 3237, 3238, 3244, 3245, 86, 86, - 3249, 3248, 86, 86, 86, 86, 3241, 3252, 3247, 3250, - - 3251, 3256, 86, 86, 86, 86, 86, 3258, 86, 3255, - 86, 3253, 3268, 86, 3254, 3259, 3262, 3257, 3263, 3260, - 86, 3265, 86, 3264, 86, 3261, 3266, 86, 86, 3267, - 86, 3269, 86, 3270, 86, 3271, 86, 3272, 86, 3273, - 86, 86, 3276, 86, 3274, 3275, 3277, 86, 86, 86, - 3278, 86, 3280, 86, 3282, 86, 86, 3279, 3287, 86, - 3283, 3288, 86, 86, 86, 86, 3289, 3281, 3291, 86, - 86, 3292, 86, 3284, 3815, 3285, 3286, 3293, 86, 3290, - 3295, 86, 3297, 86, 86, 3296, 3299, 86, 3294, 3298, - 86, 86, 3302, 86, 86, 86, 86, 3306, 86, 3300, - - 3301, 3307, 86, 3303, 3304, 86, 86, 86, 86, 3308, - 86, 86, 3314, 86, 3305, 3309, 86, 3315, 86, 3311, - 86, 86, 3317, 86, 3318, 3312, 3310, 86, 3320, 3316, - 86, 3313, 3321, 86, 3323, 86, 3319, 86, 86, 3327, - 86, 3322, 3328, 86, 3324, 86, 3330, 86, 86, 86, - 86, 86, 86, 86, 3329, 3333, 3326, 3336, 3334, 3331, - 86, 86, 3325, 86, 86, 3337, 3339, 86, 3341, 3340, - 86, 3335, 86, 3332, 86, 86, 86, 3343, 3815, 3342, - 86, 3338, 86, 3346, 3348, 86, 3347, 3344, 86, 3345, - 3349, 86, 3350, 86, 86, 86, 3352, 3351, 3355, 3353, - - 3354, 86, 86, 86, 86, 86, 3356, 3357, 3358, 86, - 86, 86, 3359, 3364, 86, 3360, 3362, 3366, 86, 86, - 86, 86, 86, 86, 3367, 86, 3361, 3368, 3363, 86, - 3369, 86, 3370, 86, 3375, 86, 86, 86, 3372, 3365, - 3371, 86, 86, 86, 3373, 86, 3379, 86, 86, 3376, - 3377, 86, 3380, 3374, 3378, 86, 3383, 86, 86, 3387, - 3384, 3381, 86, 86, 86, 86, 3382, 3391, 86, 3392, - 86, 3385, 3388, 3394, 86, 86, 86, 3386, 3395, 86, - 3389, 3397, 3398, 86, 3393, 3399, 86, 86, 3396, 86, - 3390, 3401, 86, 86, 86, 86, 86, 3400, 3404, 86, - - 3406, 3407, 86, 3402, 86, 3403, 3410, 86, 3409, 86, - 3405, 86, 86, 3412, 86, 86, 3408, 86, 3414, 3418, - 86, 86, 3419, 3415, 86, 3421, 3413, 3411, 86, 3422, - 3416, 86, 86, 3417, 86, 3425, 86, 3426, 86, 86, - 86, 3420, 3429, 86, 86, 86, 86, 86, 86, 86, - 86, 3434, 3450, 3432, 3423, 3427, 3431, 86, 86, 3428, - 3424, 3436, 3430, 3438, 86, 86, 3433, 3435, 3440, 86, - 3437, 86, 3441, 3439, 86, 3442, 86, 86, 3445, 3446, - 86, 3448, 86, 3443, 86, 3447, 86, 86, 3451, 86, - 86, 3452, 3454, 86, 86, 3449, 3444, 86, 86, 3457, - - 86, 86, 86, 86, 3462, 86, 3458, 86, 86, 3453, - 3455, 3456, 3466, 86, 86, 3459, 3461, 3465, 3467, 86, - 3815, 3463, 86, 3464, 3468, 86, 3460, 3469, 3470, 86, - 3472, 86, 3473, 86, 3471, 3474, 86, 86, 3476, 86, - 86, 86, 3479, 86, 86, 86, 3475, 86, 86, 3480, - 3481, 86, 86, 3477, 3483, 86, 3484, 86, 86, 3482, - 86, 86, 3490, 86, 3485, 3491, 86, 3478, 86, 3486, - 86, 86, 86, 86, 3487, 3497, 86, 3488, 3498, 86, - 86, 3496, 3489, 86, 3494, 86, 86, 3493, 3501, 3492, - 3499, 3495, 86, 3502, 86, 86, 86, 3504, 3500, 86, - - 3505, 3509, 3503, 3507, 86, 3511, 3506, 3508, 86, 86, - 86, 86, 86, 3510, 3514, 86, 86, 3515, 3513, 86, - 3516, 3512, 86, 86, 3517, 86, 86, 86, 86, 86, - 3520, 86, 86, 3522, 86, 86, 3523, 86, 3521, 86, - 86, 86, 3518, 3519, 86, 3532, 3533, 86, 3524, 3815, - 3528, 3525, 3526, 3527, 3529, 3530, 3535, 86, 86, 3815, - 3531, 86, 86, 3536, 3534, 86, 86, 3537, 3538, 86, - 3539, 3540, 86, 3541, 86, 86, 3543, 3544, 86, 3542, - 86, 3547, 86, 86, 3561, 3545, 3549, 86, 3546, 3550, - 3551, 86, 86, 3552, 3553, 3557, 86, 86, 3548, 3554, - - 86, 3555, 3556, 86, 86, 86, 3559, 86, 3558, 3560, - 86, 3563, 86, 86, 3564, 86, 86, 3568, 86, 3562, - 86, 3567, 86, 86, 86, 86, 86, 3565, 86, 3573, - 86, 3572, 86, 3635, 86, 3566, 86, 3574, 3569, 3577, - 86, 3575, 3570, 3578, 86, 3579, 86, 3580, 3571, 86, - 3576, 3581, 86, 3582, 86, 3583, 86, 86, 3587, 3589, - 86, 3584, 86, 3588, 86, 86, 3585, 86, 86, 3586, - 86, 3815, 3593, 3594, 3590, 3591, 3596, 86, 3597, 86, - 3599, 86, 86, 3592, 86, 3598, 3600, 86, 86, 3595, - 3603, 86, 86, 3602, 3605, 86, 86, 3601, 86, 3608, - - 86, 3609, 86, 3610, 86, 3606, 3604, 3611, 86, 3612, - 86, 3613, 86, 3614, 86, 86, 3607, 3615, 86, 86, - 3618, 86, 3619, 86, 86, 86, 86, 86, 3617, 3624, - 86, 86, 86, 3620, 3626, 86, 86, 3621, 86, 86, - 86, 3616, 3623, 86, 3630, 86, 3622, 3627, 86, 3628, - 3625, 3629, 3631, 86, 3640, 3632, 3633, 86, 86, 3637, - 86, 86, 86, 3634, 3636, 3639, 3638, 86, 86, 86, - 86, 86, 3642, 86, 86, 3641, 86, 3646, 3648, 86, - 3650, 86, 3647, 86, 86, 3645, 86, 3643, 3644, 3653, - 86, 3649, 86, 3654, 3656, 86, 3657, 86, 86, 3655, - - 3658, 86, 86, 3652, 3659, 86, 86, 3651, 86, 86, - 3662, 3661, 86, 86, 86, 3660, 86, 3670, 3663, 3667, - 86, 86, 3664, 3666, 86, 86, 3668, 86, 3669, 86, - 86, 86, 3665, 3671, 86, 86, 86, 86, 86, 3677, - 3672, 3679, 86, 3673, 86, 3674, 3676, 3678, 86, 3681, - 3684, 86, 3675, 3682, 86, 3680, 86, 3683, 3687, 3686, - 3689, 86, 3685, 86, 3691, 86, 86, 3692, 3693, 86, - 3694, 86, 3690, 86, 86, 86, 3688, 86, 3697, 86, - 86, 86, 3698, 3702, 3699, 86, 86, 86, 86, 86, - 3706, 86, 3695, 3705, 3696, 86, 3701, 86, 3704, 3703, - - 3708, 86, 3709, 86, 86, 3700, 86, 3707, 3710, 86, - 3711, 86, 3712, 86, 3713, 3714, 86, 3717, 86, 3715, - 86, 3718, 86, 3721, 3716, 3722, 86, 86, 86, 86, - 3719, 86, 3720, 86, 3727, 86, 3728, 86, 3726, 86, - 3723, 3724, 86, 86, 86, 86, 3725, 86, 3732, 86, - 86, 86, 3734, 86, 86, 86, 86, 3731, 86, 3739, - 3729, 3740, 3730, 3736, 3737, 3733, 3741, 86, 3735, 86, - 3745, 86, 3738, 86, 3747, 3742, 3743, 86, 3746, 86, - 86, 86, 3748, 3753, 3749, 86, 86, 86, 3744, 86, - 3750, 3751, 3754, 86, 86, 86, 3752, 3756, 86, 3755, - - 86, 86, 3759, 86, 3757, 3762, 3758, 86, 86, 86, - 3765, 86, 3766, 86, 86, 86, 86, 86, 86, 3769, - 3760, 3764, 3761, 86, 3767, 86, 3763, 3768, 86, 3773, - 3774, 3772, 86, 86, 3777, 3770, 3771, 86, 86, 3779, - 86, 3780, 86, 86, 86, 3775, 86, 3781, 86, 3776, - 3782, 3784, 86, 3785, 86, 86, 3778, 3786, 3787, 86, - 86, 3788, 86, 3783, 86, 3790, 86, 3789, 86, 3791, - 3793, 86, 86, 3795, 86, 86, 86, 3796, 86, 3799, - 86, 3792, 3800, 86, 86, 3794, 86, 3803, 3804, 86, - 86, 3805, 86, 3797, 3798, 3801, 3806, 86, 86, 3802, - - 3807, 86, 86, 86, 3815, 3808, 3815, 3809, 3810, 3811, - 3815, 3812, 3813, 86, 3814, 86, 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, 3815, 89, 89, - 89, 89, 161, 161, 3815, 3815, 3815, 161, 161, 163, - 163, 3815, 3815, 163, 3815, 163, 165, 3815, 3815, 3815, - 3815, 3815, 165, 168, 168, 3815, 3815, 3815, 168, 168, - - 170, 3815, 3815, 3815, 3815, 3815, 170, 172, 172, 3815, - 172, 172, 172, 172, 175, 3815, 3815, 3815, 3815, 3815, - 175, 178, 178, 3815, 3815, 3815, 178, 178, 90, 90, - 3815, 90, 90, 90, 90, 17, 3815, 3815, 3815, 3815, - 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, - 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, - 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, - 3815, 3815, 3815, 3815, 3815, 3815 + 40, 41, 42, 43, 44, 45, 46, 18, 18, 47, + 49, 50, 51, 49, 50, 51, 54, 55, 54, 55, + 56, 52, 56, 86, 52, 86, 86, 57, 86, 57, + 59, 60, 61, 62, 86, 22, 59, 60, 61, 62, + 87, 22, 63, 65, 66, 67, 87, 99, 63, 65, + 66, 67, 88, 87, 68, 121, 89, 110, 86, 87, + 68, 19, 20, 21, 70, 71, 72, 76, 77, 78, + + 79, 87, 22, 73, 123, 87, 122, 111, 87, 80, + 87, 161, 74, 19, 20, 21, 70, 71, 72, 76, + 77, 78, 79, 191, 22, 73, 82, 83, 84, 132, + 91, 80, 91, 91, 74, 91, 173, 85, 82, 83, + 84, 91, 92, 87, 100, 87, 112, 87, 114, 85, + 87, 101, 87, 93, 94, 102, 115, 95, 103, 87, + 113, 87, 96, 117, 97, 238, 118, 116, 87, 87, + 158, 98, 87, 119, 159, 120, 162, 104, 160, 87, + 124, 105, 139, 87, 106, 87, 107, 108, 125, 154, + 87, 128, 163, 163, 126, 129, 87, 109, 127, 155, + + 87, 140, 186, 156, 157, 141, 173, 165, 185, 130, + 165, 131, 87, 133, 87, 142, 143, 134, 144, 145, + 176, 135, 146, 87, 150, 87, 151, 136, 182, 147, + 137, 170, 170, 148, 149, 152, 87, 138, 180, 180, + 167, 153, 167, 167, 91, 167, 91, 91, 172, 91, + 172, 172, 177, 172, 177, 177, 175, 177, 86, 288, + 86, 86, 88, 86, 87, 91, 89, 91, 91, 86, + 91, 87, 87, 87, 87, 183, 91, 92, 87, 184, + 87, 188, 192, 189, 187, 87, 87, 87, 193, 194, + 87, 195, 87, 87, 202, 87, 190, 196, 87, 197, + + 87, 87, 87, 205, 198, 199, 87, 204, 173, 200, + 207, 201, 206, 203, 87, 214, 87, 208, 209, 211, + 212, 215, 87, 221, 87, 210, 213, 217, 216, 87, + 218, 87, 87, 87, 87, 87, 226, 224, 87, 87, + 227, 87, 232, 219, 220, 87, 233, 87, 222, 231, + 223, 87, 236, 229, 234, 87, 228, 225, 230, 240, + 237, 235, 87, 87, 87, 87, 87, 239, 242, 87, + 87, 248, 87, 87, 244, 87, 87, 87, 245, 250, + 241, 243, 87, 87, 246, 247, 249, 253, 251, 87, + 259, 260, 256, 87, 252, 255, 87, 87, 268, 254, + + 261, 87, 263, 257, 270, 262, 87, 258, 87, 87, + 87, 87, 272, 266, 87, 269, 276, 87, 87, 264, + 275, 273, 265, 279, 267, 271, 277, 87, 87, 163, + 163, 165, 87, 274, 165, 278, 280, 283, 167, 181, + 167, 167, 281, 167, 170, 170, 172, 87, 172, 172, + 91, 172, 91, 91, 173, 91, 177, 282, 177, 177, + 284, 177, 175, 180, 180, 286, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 285, 289, 87, 292, 295, + 291, 87, 287, 290, 87, 87, 87, 294, 297, 299, + 293, 302, 179, 296, 298, 87, 300, 87, 303, 305, + + 304, 87, 306, 318, 87, 87, 301, 307, 87, 87, + 314, 87, 309, 315, 316, 87, 319, 310, 87, 317, + 87, 87, 311, 320, 308, 323, 87, 321, 312, 313, + 325, 87, 87, 87, 87, 87, 178, 326, 87, 87, + 87, 322, 87, 87, 333, 87, 87, 334, 328, 327, + 329, 340, 330, 87, 324, 331, 332, 87, 335, 342, + 343, 336, 87, 337, 345, 341, 87, 87, 344, 355, + 87, 87, 347, 348, 349, 338, 346, 339, 87, 350, + 87, 353, 356, 352, 87, 87, 87, 87, 87, 354, + 357, 358, 361, 87, 351, 359, 87, 87, 87, 87, + + 360, 87, 87, 87, 87, 363, 87, 87, 365, 362, + 87, 87, 87, 87, 369, 371, 366, 87, 376, 87, + 370, 364, 372, 377, 87, 367, 373, 87, 368, 87, + 87, 380, 375, 374, 378, 382, 87, 379, 87, 386, + 87, 87, 87, 87, 87, 87, 389, 388, 87, 385, + 87, 87, 381, 392, 383, 384, 87, 391, 393, 87, + 387, 87, 390, 395, 87, 397, 87, 394, 396, 87, + 87, 398, 399, 87, 400, 402, 87, 87, 403, 173, + 87, 87, 407, 87, 405, 87, 406, 87, 87, 87, + 415, 408, 87, 410, 412, 404, 87, 414, 401, 416, + + 87, 87, 409, 87, 419, 87, 417, 411, 418, 87, + 87, 413, 87, 87, 87, 420, 87, 87, 87, 427, + 173, 428, 423, 421, 425, 87, 87, 87, 424, 429, + 422, 87, 430, 87, 431, 432, 87, 434, 87, 87, + 435, 87, 426, 87, 433, 87, 437, 87, 87, 87, + 439, 87, 440, 87, 87, 444, 459, 436, 441, 446, + 438, 87, 442, 448, 87, 87, 447, 87, 445, 87, + 443, 449, 87, 451, 87, 453, 454, 87, 87, 452, + 87, 87, 87, 87, 87, 460, 87, 87, 450, 461, + 87, 463, 87, 87, 466, 87, 457, 456, 462, 87, + + 87, 455, 468, 87, 458, 471, 472, 87, 87, 464, + 465, 87, 470, 467, 87, 87, 481, 87, 490, 469, + 473, 87, 483, 87, 87, 474, 493, 494, 87, 495, + 475, 87, 482, 476, 496, 87, 491, 87, 477, 478, + 479, 480, 87, 492, 607, 484, 497, 485, 87, 87, + 87, 498, 499, 87, 500, 87, 87, 501, 87, 486, + 487, 488, 87, 489, 87, 502, 87, 506, 508, 87, + 503, 507, 87, 504, 505, 87, 510, 509, 87, 511, + 87, 513, 87, 87, 87, 514, 87, 519, 87, 512, + 87, 87, 87, 87, 515, 87, 520, 525, 521, 526, + + 538, 518, 516, 87, 517, 87, 87, 522, 524, 580, + 87, 527, 171, 87, 523, 528, 530, 532, 531, 533, + 87, 529, 540, 534, 87, 87, 87, 539, 87, 541, + 87, 87, 87, 87, 556, 87, 535, 542, 173, 536, + 87, 537, 87, 543, 555, 544, 87, 87, 558, 649, + 559, 545, 557, 87, 560, 546, 561, 87, 87, 579, + 547, 563, 576, 548, 87, 549, 573, 550, 87, 574, + 87, 87, 562, 572, 575, 87, 87, 577, 87, 582, + 551, 87, 87, 552, 578, 553, 584, 554, 87, 87, + 564, 565, 87, 581, 87, 583, 87, 169, 87, 585, + + 566, 567, 568, 569, 570, 589, 87, 571, 586, 587, + 588, 87, 87, 87, 593, 590, 599, 591, 594, 87, + 87, 595, 87, 87, 596, 597, 87, 600, 598, 87, + 87, 87, 605, 87, 87, 592, 87, 87, 87, 608, + 87, 602, 87, 601, 87, 604, 609, 610, 603, 87, + 87, 87, 87, 616, 615, 653, 611, 612, 606, 87, + 613, 87, 624, 87, 617, 87, 614, 618, 619, 87, + 87, 625, 87, 621, 622, 87, 87, 87, 626, 87, + 640, 87, 642, 87, 671, 620, 87, 87, 627, 623, + 629, 630, 631, 628, 87, 87, 641, 87, 643, 87, + + 646, 645, 87, 632, 644, 633, 87, 87, 647, 87, + 87, 634, 656, 648, 87, 650, 168, 651, 660, 635, + 636, 87, 652, 637, 638, 654, 87, 639, 87, 87, + 657, 658, 87, 655, 87, 87, 87, 87, 87, 659, + 87, 663, 87, 664, 87, 665, 87, 661, 87, 87, + 87, 87, 667, 666, 87, 673, 662, 87, 87, 674, + 670, 675, 668, 676, 669, 87, 677, 87, 87, 680, + 672, 87, 678, 87, 682, 87, 683, 87, 87, 679, + 87, 87, 87, 87, 87, 685, 87, 87, 689, 696, + 687, 87, 87, 681, 684, 87, 87, 166, 691, 686, + + 698, 87, 87, 688, 690, 692, 87, 693, 700, 694, + 697, 699, 695, 87, 87, 702, 87, 87, 701, 87, + 705, 87, 87, 709, 703, 87, 87, 704, 712, 87, + 87, 708, 87, 706, 87, 711, 707, 87, 87, 87, + 714, 87, 715, 718, 87, 710, 87, 87, 87, 720, + 87, 717, 713, 722, 87, 87, 87, 87, 719, 87, + 716, 721, 87, 723, 87, 87, 737, 725, 87, 724, + 87, 726, 736, 739, 744, 734, 727, 735, 728, 87, + 87, 740, 164, 738, 729, 745, 730, 87, 87, 731, + 732, 741, 87, 742, 87, 747, 733, 743, 748, 87, + + 750, 749, 87, 87, 87, 746, 87, 754, 87, 752, + 87, 751, 87, 757, 87, 753, 87, 759, 87, 87, + 87, 763, 761, 756, 87, 755, 87, 87, 87, 760, + 87, 766, 87, 758, 762, 87, 767, 764, 770, 87, + 87, 87, 87, 87, 772, 769, 765, 768, 87, 173, + 775, 771, 773, 774, 776, 777, 87, 779, 780, 87, + 778, 87, 87, 87, 87, 87, 783, 785, 87, 87, + 788, 87, 789, 87, 781, 791, 784, 787, 87, 782, + 792, 87, 87, 87, 87, 790, 87, 794, 87, 87, + 87, 87, 786, 798, 793, 797, 87, 795, 87, 799, + + 800, 87, 87, 796, 807, 87, 804, 801, 808, 87, + 802, 805, 87, 810, 803, 806, 809, 87, 87, 87, + 811, 87, 812, 87, 813, 87, 814, 87, 87, 87, + 87, 815, 87, 87, 820, 816, 819, 87, 87, 818, + 87, 823, 87, 87, 828, 822, 817, 821, 824, 87, + 87, 87, 87, 827, 87, 87, 830, 87, 834, 87, + 832, 826, 87, 825, 87, 87, 87, 87, 87, 841, + 837, 829, 831, 833, 87, 87, 87, 835, 87, 842, + 87, 87, 839, 87, 844, 836, 838, 87, 840, 845, + 843, 87, 846, 847, 87, 849, 848, 87, 850, 851, + + 87, 854, 852, 856, 87, 853, 855, 87, 87, 87, + 858, 87, 859, 857, 87, 87, 87, 87, 863, 862, + 87, 864, 87, 87, 87, 87, 87, 871, 87, 867, + 861, 869, 87, 865, 860, 87, 868, 87, 866, 87, + 87, 872, 874, 87, 870, 87, 875, 87, 181, 880, + 882, 87, 878, 876, 873, 87, 877, 879, 87, 883, + 884, 87, 87, 87, 881, 87, 886, 885, 87, 87, + 887, 87, 87, 87, 893, 895, 891, 87, 894, 888, + 87, 87, 889, 890, 87, 87, 87, 896, 87, 900, + 898, 892, 87, 87, 901, 87, 87, 908, 87, 902, + + 87, 904, 897, 87, 899, 903, 87, 910, 905, 87, + 913, 911, 909, 87, 87, 906, 907, 87, 87, 87, + 912, 914, 916, 918, 915, 919, 87, 922, 87, 87, + 926, 920, 923, 87, 87, 924, 87, 917, 87, 87, + 928, 921, 87, 925, 87, 87, 87, 87, 935, 87, + 87, 87, 87, 936, 87, 927, 87, 87, 87, 937, + 929, 933, 930, 931, 932, 87, 938, 934, 942, 945, + 940, 939, 87, 944, 87, 87, 941, 943, 87, 87, + 87, 87, 87, 87, 87, 87, 952, 87, 947, 87, + 948, 87, 946, 87, 87, 962, 179, 87, 949, 954, + + 951, 950, 953, 955, 87, 956, 957, 961, 958, 960, + 959, 87, 87, 87, 87, 963, 965, 87, 87, 87, + 87, 87, 968, 87, 966, 87, 964, 87, 967, 87, + 972, 178, 973, 971, 969, 87, 974, 87, 970, 87, + 976, 87, 977, 978, 87, 975, 979, 87, 87, 87, + 980, 87, 87, 985, 987, 173, 982, 983, 981, 87, + 986, 984, 87, 87, 87, 87, 988, 991, 992, 87, + 87, 995, 87, 990, 998, 87, 996, 989, 87, 999, + 87, 87, 87, 993, 997, 87, 1000, 1001, 1003, 87, + 87, 994, 87, 87, 87, 87, 1006, 1010, 87, 1011, + + 87, 1002, 1007, 87, 1004, 87, 1012, 1013, 87, 1005, + 87, 87, 87, 1009, 1025, 87, 87, 87, 1008, 173, + 87, 87, 87, 87, 87, 1027, 1014, 1024, 1028, 1030, + 1031, 1016, 1026, 87, 87, 1015, 87, 1033, 1017, 87, + 1032, 1018, 1029, 87, 1034, 1019, 87, 1035, 1020, 87, + 1036, 87, 1037, 1040, 87, 1021, 1022, 87, 1023, 87, + 87, 87, 87, 1038, 87, 1050, 87, 87, 1053, 87, + 1055, 1039, 87, 1041, 1042, 1051, 1043, 1049, 87, 1044, + 1052, 87, 87, 1057, 1045, 1054, 1056, 1059, 1058, 87, + 1046, 1047, 1061, 1048, 87, 1063, 1060, 1062, 87, 171, + + 1064, 87, 87, 1066, 1067, 1065, 87, 87, 1069, 87, + 87, 1068, 87, 1071, 1070, 1073, 87, 1072, 87, 87, + 1074, 87, 87, 87, 87, 87, 1077, 87, 1081, 87, + 87, 1075, 1080, 87, 87, 1085, 87, 87, 87, 87, + 1076, 87, 1089, 1078, 1079, 1082, 1090, 1084, 87, 1083, + 1087, 1091, 87, 87, 1086, 1092, 1095, 1096, 1094, 1088, + 1093, 87, 87, 87, 87, 1099, 87, 87, 1101, 1102, + 87, 87, 1100, 87, 87, 87, 1103, 1105, 87, 1106, + 87, 1104, 1097, 87, 1098, 87, 87, 87, 87, 87, + 1111, 1108, 1110, 1107, 87, 1112, 87, 1116, 87, 87, + + 1120, 87, 87, 1109, 1119, 87, 87, 1113, 1117, 1118, + 1114, 87, 87, 87, 87, 1115, 87, 87, 87, 87, + 1121, 1123, 1124, 1127, 87, 87, 1128, 1129, 87, 87, + 1122, 1126, 87, 1130, 87, 87, 1138, 87, 1125, 1131, + 1135, 1133, 1134, 87, 1132, 1136, 87, 87, 1137, 87, + 87, 87, 1139, 1146, 87, 87, 1141, 1144, 1147, 87, + 87, 87, 1140, 87, 87, 1145, 1149, 87, 1143, 1151, + 87, 87, 87, 1142, 87, 87, 1148, 87, 1158, 87, + 1161, 1150, 87, 1152, 1156, 87, 87, 1153, 87, 87, + 87, 1155, 1154, 87, 1162, 1157, 1160, 1159, 1164, 1167, + + 1163, 87, 87, 87, 1166, 87, 1171, 87, 1165, 1168, + 1170, 87, 87, 87, 87, 87, 1169, 87, 87, 1182, + 87, 1174, 1172, 1176, 87, 87, 1183, 87, 87, 1185, + 87, 1173, 87, 1175, 1177, 87, 87, 1179, 169, 1178, + 1180, 1184, 1186, 1188, 1181, 1189, 87, 87, 87, 87, + 1187, 87, 1190, 87, 87, 1191, 87, 1196, 1192, 1194, + 87, 1197, 87, 1198, 1202, 1199, 1193, 87, 1195, 87, + 87, 1200, 87, 1201, 1204, 87, 87, 87, 87, 87, + 1211, 87, 1208, 1207, 87, 1212, 173, 87, 1214, 87, + 1206, 87, 1203, 87, 1205, 1209, 1213, 1210, 87, 1215, + + 87, 87, 87, 87, 1218, 1219, 1223, 87, 87, 1216, + 87, 1217, 1220, 87, 87, 1235, 1222, 1224, 1234, 87, + 1225, 87, 87, 1236, 87, 1221, 1238, 87, 1226, 87, + 87, 1227, 87, 1240, 1241, 1228, 1237, 1229, 87, 87, + 87, 1230, 1305, 1231, 1242, 1243, 87, 1239, 1232, 87, + 1247, 1245, 1244, 1233, 1246, 1248, 87, 87, 1249, 87, + 87, 87, 87, 1251, 87, 87, 87, 1254, 87, 1257, + 168, 1250, 1256, 1259, 87, 1252, 1253, 1255, 87, 1258, + 87, 87, 1261, 1263, 87, 1266, 1265, 1260, 1267, 1262, + 1264, 87, 1268, 87, 87, 1269, 1270, 87, 87, 87, + + 87, 87, 87, 87, 87, 87, 1282, 87, 87, 87, + 1285, 1281, 1286, 1287, 87, 87, 87, 1272, 1283, 1271, + 1284, 1273, 87, 1274, 87, 87, 166, 87, 1275, 1288, + 1276, 1294, 1289, 1291, 87, 87, 1277, 87, 1290, 1295, + 87, 1278, 1279, 1293, 1292, 87, 87, 1296, 1280, 87, + 1301, 87, 87, 87, 1304, 87, 1302, 87, 1297, 87, + 87, 1298, 1307, 1309, 1299, 87, 87, 1300, 87, 87, + 1310, 87, 1308, 1303, 1306, 87, 1315, 1312, 87, 87, + 1313, 87, 87, 87, 87, 1311, 1318, 1316, 87, 87, + 1321, 1314, 87, 87, 87, 87, 87, 87, 1317, 87, + + 1326, 1324, 1320, 1319, 1322, 1323, 1325, 1328, 87, 87, + 1330, 87, 1327, 87, 1334, 1329, 1333, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 1339, 1340, 1331, 1341, + 1342, 87, 1336, 1345, 1332, 87, 1335, 1337, 1338, 87, + 1343, 87, 1344, 1346, 1347, 87, 87, 87, 1351, 87, + 87, 87, 1353, 1352, 87, 1354, 87, 87, 87, 1349, + 1348, 1356, 87, 1350, 87, 1355, 87, 87, 87, 1364, + 1357, 1360, 87, 1366, 87, 87, 87, 1358, 1359, 87, + 1362, 1368, 87, 1363, 1361, 87, 1370, 87, 87, 1367, + 1371, 87, 1365, 87, 87, 87, 1369, 87, 1373, 1374, + + 87, 87, 1377, 87, 1376, 1378, 87, 1375, 87, 1372, + 87, 1384, 1380, 1379, 1382, 1385, 87, 87, 87, 1381, + 87, 87, 87, 1389, 1388, 87, 87, 1386, 87, 87, + 1395, 1383, 1393, 87, 1396, 1397, 87, 87, 1387, 87, + 87, 87, 1398, 1390, 1399, 1391, 1394, 1400, 1392, 87, + 1402, 87, 87, 87, 1401, 87, 87, 1403, 1406, 87, + 87, 1408, 87, 87, 87, 1407, 87, 87, 1409, 1404, + 87, 1411, 1410, 87, 87, 1405, 1414, 1415, 87, 87, + 87, 87, 87, 1417, 87, 1412, 1421, 87, 1422, 1413, + 1416, 87, 87, 1419, 87, 87, 1424, 87, 1418, 1423, + + 87, 1420, 1425, 87, 1430, 87, 1426, 87, 87, 1427, + 87, 87, 1428, 87, 87, 1429, 1432, 87, 1437, 87, + 87, 173, 1438, 1431, 87, 1439, 1436, 87, 87, 1433, + 87, 87, 1435, 1440, 87, 1445, 1434, 87, 1442, 1448, + 87, 1441, 1443, 1444, 87, 1450, 1446, 1451, 87, 1447, + 87, 87, 87, 87, 87, 87, 1452, 1456, 87, 1455, + 87, 87, 87, 1457, 1449, 1453, 87, 1460, 1454, 87, + 87, 87, 87, 1463, 1458, 1459, 87, 87, 1464, 1467, + 87, 1461, 87, 87, 87, 87, 1469, 1465, 1462, 87, + 87, 1468, 1470, 87, 87, 1466, 1473, 1479, 87, 1475, + + 1472, 87, 1471, 87, 1480, 1483, 1481, 87, 1476, 1474, + 1477, 1482, 87, 1478, 87, 87, 87, 1485, 87, 87, + 87, 1484, 1492, 87, 1489, 1488, 87, 87, 87, 87, + 87, 1493, 1497, 87, 1486, 1491, 1487, 87, 87, 1490, + 1495, 1494, 1498, 1499, 87, 87, 87, 87, 87, 1496, + 1501, 1502, 87, 87, 87, 1503, 87, 1507, 87, 87, + 87, 87, 87, 1504, 1500, 1510, 1508, 1505, 87, 87, + 1518, 1509, 1506, 1511, 1515, 87, 87, 87, 1512, 87, + 1514, 1513, 87, 87, 1516, 87, 1517, 87, 87, 87, + 87, 1521, 87, 87, 87, 1528, 1530, 1519, 1522, 1520, + + 1524, 87, 87, 87, 1523, 1527, 1525, 87, 1531, 87, + 1535, 87, 1529, 87, 1526, 1533, 1536, 1532, 1538, 87, + 87, 87, 87, 1539, 87, 1537, 87, 1543, 87, 1534, + 1552, 1553, 87, 1554, 1541, 1542, 87, 87, 1540, 87, + 1544, 1551, 87, 1558, 1545, 87, 1556, 1546, 1547, 87, + 1555, 87, 1548, 87, 87, 164, 87, 1562, 1549, 1559, + 1557, 1560, 1550, 87, 1561, 87, 1563, 87, 87, 1568, + 1564, 1569, 1565, 1566, 87, 87, 87, 87, 87, 1570, + 87, 87, 87, 1571, 1576, 1573, 1567, 87, 1578, 87, + 87, 87, 87, 1577, 87, 1574, 1579, 87, 1572, 87, + + 1575, 1580, 1581, 87, 87, 87, 1588, 87, 1582, 1587, + 87, 1589, 87, 1583, 1592, 1584, 1593, 1585, 87, 1586, + 1590, 1591, 1594, 87, 87, 1595, 1598, 87, 87, 87, + 87, 1599, 87, 1597, 87, 1603, 1596, 1600, 1601, 87, + 87, 87, 87, 87, 1610, 1609, 87, 87, 1604, 1602, + 1605, 87, 87, 87, 1612, 87, 1608, 87, 1606, 1607, + 1614, 1613, 87, 87, 1611, 87, 1616, 1615, 87, 1617, + 1621, 87, 87, 1620, 1623, 87, 87, 87, 1625, 87, + 87, 1618, 1624, 1626, 1627, 87, 87, 1622, 1630, 87, + 1619, 87, 1632, 87, 87, 1629, 87, 1633, 87, 1634, + + 87, 87, 1638, 87, 1628, 87, 87, 87, 87, 1643, + 1641, 1631, 87, 87, 87, 87, 1646, 1644, 87, 1635, + 87, 1636, 1637, 1640, 87, 1639, 87, 1645, 1642, 1648, + 87, 1647, 87, 87, 87, 1649, 87, 1650, 1651, 1653, + 1654, 1655, 87, 87, 1652, 1656, 87, 1658, 1657, 87, + 87, 87, 87, 87, 1659, 1664, 1665, 1661, 87, 1662, + 87, 87, 87, 1666, 1668, 1667, 1663, 87, 1660, 87, + 87, 87, 1672, 87, 87, 87, 1669, 87, 87, 87, + 87, 173, 1671, 1675, 87, 1681, 1682, 1677, 1670, 87, + 87, 87, 87, 87, 1673, 1674, 1678, 1676, 1685, 1683, + + 1679, 1684, 87, 1686, 87, 87, 1691, 1680, 87, 1687, + 1690, 87, 87, 87, 87, 87, 1688, 87, 1696, 87, + 87, 87, 1689, 1693, 87, 87, 1700, 1694, 1692, 1702, + 87, 87, 1695, 87, 87, 1697, 1704, 87, 1699, 87, + 1708, 87, 1701, 87, 1698, 1709, 87, 1707, 1703, 87, + 1711, 1706, 1705, 87, 87, 87, 87, 1710, 1714, 87, + 87, 1712, 1720, 1713, 1717, 1719, 87, 1718, 1722, 1715, + 87, 87, 1716, 1725, 87, 1723, 87, 87, 1726, 87, + 1721, 1724, 87, 87, 87, 87, 87, 87, 1730, 1731, + 1732, 87, 87, 87, 87, 1727, 1735, 87, 87, 1740, + + 1729, 87, 87, 1728, 1733, 1741, 87, 1734, 1737, 87, + 1744, 1738, 1736, 87, 87, 1739, 87, 87, 87, 87, + 1742, 1745, 87, 87, 87, 1743, 87, 87, 87, 1746, + 87, 1748, 1752, 1747, 1749, 1753, 87, 1750, 1756, 1757, + 87, 1754, 1751, 87, 1755, 87, 1759, 87, 1764, 1758, + 1762, 87, 1763, 1765, 87, 87, 1761, 87, 1760, 87, + 87, 1767, 1768, 87, 87, 87, 87, 3904, 1773, 1766, + 1769, 1772, 1774, 1770, 87, 1775, 87, 1776, 87, 87, + 1777, 87, 1780, 87, 87, 87, 1771, 87, 1781, 87, + 87, 87, 87, 87, 1782, 87, 1788, 87, 87, 1778, + + 1787, 1779, 1784, 1785, 87, 1783, 1786, 87, 1794, 1791, + 87, 1792, 1789, 1795, 87, 1790, 1796, 1793, 87, 87, + 87, 1797, 87, 1798, 87, 1800, 87, 87, 87, 87, + 1799, 87, 1804, 87, 1808, 1803, 1809, 1801, 87, 1802, + 87, 87, 87, 87, 1814, 87, 87, 1805, 1817, 1806, + 87, 1807, 1816, 87, 87, 87, 1810, 1812, 87, 87, + 87, 1811, 87, 87, 1815, 87, 87, 1819, 87, 1813, + 87, 1827, 1818, 87, 1820, 87, 1828, 1824, 1821, 1822, + 87, 1823, 87, 1826, 87, 1829, 1825, 1832, 87, 1833, + 87, 87, 1831, 87, 1830, 1836, 1834, 1835, 87, 1837, + + 87, 87, 87, 87, 1840, 87, 1844, 1838, 1841, 87, + 1845, 87, 87, 1839, 1849, 87, 87, 87, 87, 1843, + 1851, 1842, 1850, 87, 1846, 87, 87, 87, 1848, 1853, + 1854, 1847, 1855, 1852, 87, 87, 87, 87, 1856, 1857, + 87, 1862, 87, 1858, 87, 1861, 1865, 87, 87, 1860, + 1863, 87, 87, 1867, 87, 1859, 87, 1868, 1869, 87, + 1864, 1871, 87, 87, 87, 1866, 1872, 1873, 87, 87, + 87, 87, 87, 87, 1870, 1874, 1877, 87, 87, 87, + 1882, 1880, 87, 87, 87, 1875, 1876, 87, 87, 1888, + 87, 1889, 1878, 1886, 87, 87, 87, 1879, 1881, 1883, + + 87, 1887, 1885, 1884, 87, 1890, 87, 87, 1895, 87, + 87, 87, 1891, 1900, 87, 1892, 1898, 87, 87, 87, + 87, 1903, 1901, 1896, 87, 87, 1894, 87, 1897, 1893, + 87, 87, 1899, 87, 1907, 87, 1910, 87, 1906, 1902, + 1909, 87, 1911, 173, 1905, 87, 1904, 1912, 87, 87, + 1908, 87, 1913, 87, 1914, 87, 1915, 87, 1922, 1916, + 87, 87, 1924, 1917, 87, 87, 87, 1918, 87, 1923, + 1925, 1921, 87, 1927, 1919, 1920, 87, 1931, 87, 1929, + 87, 87, 87, 87, 1926, 1935, 1928, 1933, 87, 1932, + 1937, 1930, 87, 1936, 1939, 87, 87, 87, 1942, 87, + + 87, 1934, 1940, 87, 87, 87, 87, 87, 87, 1941, + 1945, 1947, 1938, 1946, 87, 1949, 87, 1950, 87, 87, + 87, 87, 1943, 1944, 1954, 87, 1955, 87, 87, 87, + 87, 1962, 1948, 1951, 87, 1953, 1952, 87, 87, 1963, + 1957, 1959, 87, 87, 1960, 1956, 1964, 87, 87, 1958, + 87, 1966, 1967, 1969, 1972, 1968, 1961, 1970, 87, 1973, + 87, 87, 1965, 87, 1975, 87, 1974, 87, 1976, 1977, + 87, 87, 1971, 87, 87, 87, 1978, 87, 87, 1984, + 1985, 1983, 1986, 1979, 87, 87, 87, 87, 87, 1987, + 1988, 1980, 87, 1981, 87, 87, 87, 1982, 87, 1990, + + 1991, 87, 87, 1992, 87, 87, 87, 87, 87, 87, + 1989, 87, 1994, 1993, 87, 87, 3904, 1995, 2003, 87, + 1998, 1999, 2000, 1996, 87, 1997, 2004, 2001, 87, 87, + 87, 2007, 2010, 87, 2005, 2006, 2002, 87, 87, 87, + 87, 2008, 87, 2009, 87, 2015, 87, 2017, 87, 87, + 2019, 87, 87, 2011, 2014, 2012, 87, 2013, 2018, 87, + 2022, 2021, 87, 2016, 2020, 87, 2023, 2024, 87, 87, + 87, 87, 87, 2025, 87, 87, 87, 2028, 2030, 87, + 87, 2031, 87, 2038, 2032, 2029, 2026, 2027, 2039, 87, + 2033, 2034, 87, 2036, 2040, 87, 2035, 87, 87, 87, + + 2042, 2043, 2044, 87, 2037, 2045, 87, 87, 87, 2041, + 87, 2047, 2048, 2049, 87, 87, 87, 87, 2046, 2051, + 87, 87, 87, 2061, 87, 2060, 2054, 87, 87, 2050, + 2056, 87, 2053, 2057, 2052, 2062, 2059, 87, 87, 2055, + 87, 87, 2068, 87, 87, 87, 2058, 2069, 87, 2070, + 87, 2064, 87, 87, 3904, 2066, 87, 2063, 2065, 2067, + 87, 2074, 2071, 87, 87, 2077, 2075, 87, 2076, 2084, + 2072, 2073, 87, 2078, 87, 2080, 2082, 2079, 87, 2083, + 87, 2085, 87, 87, 87, 2089, 87, 87, 87, 2081, + 2090, 87, 87, 2094, 2096, 87, 2086, 87, 2091, 87, + + 87, 2088, 2092, 2087, 2098, 87, 2095, 87, 2093, 2099, + 2102, 2101, 2100, 2097, 87, 87, 87, 87, 87, 2104, + 2103, 2107, 87, 2111, 87, 87, 87, 87, 2109, 87, + 87, 87, 2106, 87, 2110, 2108, 3904, 2105, 2112, 87, + 87, 2116, 87, 2113, 2117, 2114, 87, 87, 87, 2118, + 2115, 87, 2124, 87, 2126, 2119, 2120, 2127, 87, 2121, + 87, 2128, 2122, 87, 87, 2123, 2130, 87, 87, 87, + 87, 2134, 87, 87, 2125, 2136, 87, 2129, 87, 87, + 87, 87, 2140, 87, 87, 87, 2135, 2132, 2131, 2133, + 2143, 87, 87, 3904, 2138, 2142, 87, 2139, 2137, 87, + + 2141, 2145, 87, 87, 2144, 87, 2149, 2146, 2147, 87, + 87, 173, 87, 2153, 87, 2148, 2151, 2150, 2152, 2156, + 87, 87, 87, 2154, 2160, 87, 87, 2155, 87, 87, + 87, 2161, 87, 2157, 2158, 87, 2163, 2165, 87, 87, + 2159, 87, 2162, 87, 2164, 2171, 87, 2166, 87, 2167, + 87, 87, 2175, 87, 87, 87, 2174, 2176, 2172, 2168, + 2169, 2178, 87, 2170, 87, 2180, 2173, 87, 87, 2179, + 2183, 87, 2184, 87, 87, 2177, 87, 2182, 87, 87, + 2186, 87, 2181, 87, 2187, 87, 2185, 87, 87, 87, + 87, 87, 2192, 87, 2193, 87, 87, 87, 87, 2188, + + 2194, 2197, 2195, 2190, 2198, 2189, 2191, 87, 2196, 87, + 87, 87, 2201, 2208, 2203, 2205, 87, 2199, 2200, 2202, + 2206, 87, 87, 87, 87, 2204, 87, 87, 87, 2213, + 87, 87, 2207, 87, 2216, 2217, 87, 2218, 87, 2211, + 2209, 2210, 2220, 87, 2212, 2214, 87, 2215, 2219, 87, + 2221, 2222, 87, 2225, 87, 87, 2227, 87, 2229, 2226, + 2228, 87, 87, 2231, 87, 87, 87, 2223, 87, 87, + 87, 2233, 87, 2224, 87, 2235, 2236, 87, 87, 2230, + 2239, 87, 87, 2238, 87, 2244, 87, 87, 2232, 2240, + 2237, 2242, 2243, 2234, 87, 2246, 87, 87, 87, 2245, + + 87, 87, 87, 2241, 87, 2254, 87, 87, 2247, 2248, + 2249, 87, 2258, 2257, 87, 2250, 2252, 2251, 87, 87, + 2253, 2259, 2255, 87, 2256, 2263, 2260, 87, 2261, 87, + 2264, 2266, 87, 2262, 87, 87, 87, 87, 2270, 87, + 87, 2267, 87, 2272, 2265, 87, 87, 2275, 2276, 87, + 2277, 87, 87, 87, 2268, 87, 2269, 2279, 87, 87, + 2273, 87, 2271, 2284, 2281, 87, 87, 2274, 2282, 87, + 87, 87, 2278, 2288, 87, 87, 87, 87, 2280, 87, + 2287, 87, 2283, 2291, 2285, 87, 2286, 3904, 2292, 87, + 2290, 2298, 2289, 87, 2294, 2295, 87, 87, 87, 87, + + 2300, 2297, 2303, 2293, 2299, 2302, 87, 2296, 87, 2301, + 87, 87, 2304, 2306, 2307, 87, 87, 87, 87, 87, + 87, 2308, 87, 87, 87, 87, 2309, 2313, 2315, 87, + 2305, 87, 2319, 2310, 87, 2314, 87, 2318, 87, 2321, + 2311, 2312, 87, 87, 87, 87, 2320, 2316, 2324, 87, + 87, 87, 2329, 87, 87, 87, 2328, 2317, 2323, 87, + 87, 87, 2322, 2334, 2325, 87, 2335, 87, 87, 2326, + 2338, 87, 2327, 2336, 2331, 2332, 87, 2337, 2330, 87, + 2333, 87, 87, 2340, 87, 2339, 2343, 87, 87, 87, + 87, 87, 2341, 87, 2347, 2351, 87, 2342, 2345, 87, + + 87, 87, 87, 2344, 2354, 87, 2358, 2346, 2356, 87, + 2348, 2349, 87, 2350, 2352, 2353, 87, 2357, 2355, 87, + 87, 2359, 87, 2364, 87, 2365, 87, 2363, 2366, 87, + 2360, 2368, 2369, 2367, 87, 2361, 87, 87, 87, 87, + 2362, 2371, 2373, 87, 87, 87, 87, 2375, 87, 87, + 2377, 2372, 2379, 87, 2381, 2370, 2374, 2376, 87, 87, + 87, 87, 2384, 87, 87, 87, 2383, 173, 87, 87, + 87, 2378, 2387, 87, 2382, 2380, 2392, 87, 2391, 87, + 2388, 2389, 2393, 2385, 87, 2386, 87, 2394, 87, 2390, + 2395, 87, 87, 2396, 2397, 87, 2398, 2401, 87, 2399, + + 87, 87, 87, 87, 2402, 2403, 87, 2404, 2400, 87, + 2407, 87, 87, 87, 2406, 2405, 2408, 87, 87, 87, + 2412, 2409, 87, 87, 87, 2416, 87, 87, 87, 2415, + 2411, 2420, 87, 2410, 2413, 2414, 2417, 2418, 87, 2421, + 87, 87, 87, 2419, 87, 87, 87, 87, 2428, 87, + 2426, 2423, 2427, 87, 87, 87, 87, 87, 87, 2433, + 87, 2422, 2424, 87, 2425, 2430, 87, 2429, 87, 2432, + 2434, 2431, 2436, 87, 2439, 2435, 87, 2437, 2441, 87, + 2438, 87, 87, 2445, 87, 2440, 2443, 87, 87, 87, + 2446, 87, 87, 87, 87, 2444, 2452, 87, 2454, 87, + + 2442, 2455, 87, 87, 2447, 2448, 2451, 2449, 2450, 87, + 87, 2453, 2458, 87, 2460, 87, 87, 2456, 2459, 87, + 2461, 87, 87, 2464, 87, 87, 87, 2457, 2463, 87, + 87, 2466, 87, 2469, 87, 2465, 87, 2470, 87, 2462, + 87, 87, 87, 87, 87, 2471, 2468, 2467, 87, 2475, + 2473, 2472, 2474, 2476, 2480, 87, 87, 2478, 2479, 2481, + 87, 87, 87, 87, 87, 2483, 2484, 2482, 2477, 2485, + 2490, 87, 87, 2489, 87, 2487, 87, 2493, 87, 2488, + 2491, 2494, 2486, 2496, 2492, 87, 87, 2497, 87, 87, + 87, 87, 2495, 2499, 87, 87, 2500, 87, 87, 2501, + + 2505, 87, 2508, 2503, 2498, 87, 87, 2504, 87, 2502, + 87, 87, 2510, 2512, 87, 87, 2506, 87, 87, 87, + 2511, 2507, 2514, 2516, 87, 2509, 2515, 87, 87, 2521, + 87, 87, 2517, 2518, 87, 87, 2522, 2513, 87, 2520, + 87, 87, 2525, 2523, 87, 87, 2519, 2526, 87, 2527, + 2524, 2531, 87, 2528, 2529, 87, 2530, 87, 2532, 87, + 2534, 2536, 87, 87, 2538, 87, 2533, 87, 2537, 2540, + 87, 2543, 87, 87, 87, 87, 87, 2545, 2541, 2535, + 87, 2546, 87, 2539, 87, 2544, 2542, 87, 87, 2548, + 87, 2547, 2549, 87, 2550, 2553, 2551, 2555, 87, 2552, + + 87, 87, 2556, 87, 87, 87, 87, 87, 87, 2554, + 2557, 2562, 2559, 2558, 2560, 87, 87, 2561, 87, 87, + 2563, 2564, 2568, 87, 2565, 2569, 87, 2567, 87, 87, + 87, 87, 87, 87, 87, 2576, 2566, 2570, 87, 87, + 87, 87, 87, 2577, 2571, 2572, 2574, 2580, 2575, 2582, + 2578, 87, 87, 2573, 2579, 87, 2581, 2583, 2584, 87, + 87, 2586, 87, 87, 2587, 2592, 87, 87, 2594, 87, + 87, 2585, 2591, 87, 2588, 87, 2593, 87, 2589, 2597, + 87, 87, 2598, 87, 2603, 87, 173, 2590, 2595, 2605, + 87, 2607, 2596, 2599, 2606, 87, 2600, 87, 87, 2608, + + 87, 2609, 87, 2601, 2602, 87, 87, 87, 2604, 87, + 2610, 2615, 87, 87, 2616, 87, 2620, 87, 87, 2621, + 2611, 87, 87, 2624, 2619, 87, 2612, 2614, 2617, 87, + 2613, 87, 87, 2622, 87, 2628, 87, 2627, 87, 2618, + 2623, 2629, 87, 2630, 2631, 2626, 2625, 87, 87, 87, + 87, 2632, 2634, 87, 87, 87, 2633, 87, 87, 2637, + 87, 87, 87, 2640, 87, 87, 87, 2646, 87, 2635, + 2639, 2644, 87, 87, 87, 87, 2642, 2647, 2636, 2641, + 2638, 87, 2643, 87, 87, 87, 2645, 2648, 2649, 87, + 2655, 2651, 2650, 2652, 87, 87, 2653, 2658, 87, 87, + + 2654, 87, 2656, 2659, 87, 87, 87, 87, 87, 87, + 87, 2669, 2657, 2670, 87, 87, 87, 87, 2660, 87, + 2661, 2667, 87, 2662, 87, 2717, 2665, 2672, 2663, 2666, + 2664, 2668, 87, 87, 2675, 2676, 87, 2671, 2673, 2674, + 2677, 87, 87, 87, 87, 87, 2679, 2678, 87, 2680, + 87, 2684, 2685, 87, 87, 87, 2686, 2687, 87, 2682, + 87, 2683, 87, 87, 3904, 87, 2691, 87, 2681, 2692, + 2688, 2693, 87, 87, 2694, 2689, 2690, 2695, 87, 2696, + 87, 2699, 87, 2700, 87, 87, 87, 2703, 87, 2697, + 2701, 2702, 2698, 87, 2706, 87, 2707, 87, 87, 2709, + + 87, 87, 2711, 87, 87, 2705, 87, 87, 2704, 2713, + 2714, 87, 2715, 87, 87, 87, 2718, 2708, 87, 2710, + 87, 2712, 2720, 87, 2719, 87, 2724, 87, 2716, 87, + 2723, 87, 2721, 2726, 87, 87, 87, 87, 87, 2722, + 2728, 2730, 2729, 87, 2731, 2733, 87, 87, 2725, 2727, + 87, 87, 2736, 87, 2739, 87, 2734, 2740, 87, 2732, + 87, 87, 2735, 87, 87, 87, 2737, 2746, 87, 2745, + 87, 87, 2738, 87, 87, 2742, 2748, 2749, 2741, 2744, + 87, 87, 2751, 87, 2743, 2753, 87, 87, 87, 2747, + 2755, 87, 87, 87, 2754, 2750, 2752, 87, 2761, 87, + + 87, 2756, 2763, 87, 87, 2767, 2757, 2759, 2762, 2758, + 87, 87, 87, 2764, 87, 2768, 87, 2769, 87, 2760, + 87, 2770, 87, 2771, 87, 87, 3904, 2773, 2765, 2772, + 2766, 2775, 87, 87, 87, 87, 87, 2776, 2778, 2779, + 2780, 2774, 2782, 2783, 87, 87, 2784, 2786, 87, 87, + 2777, 2781, 87, 87, 87, 87, 87, 2787, 87, 2785, + 2788, 2791, 87, 87, 87, 87, 87, 2790, 87, 2798, + 2789, 2793, 2794, 2795, 2796, 87, 2792, 2799, 87, 87, + 2797, 87, 2800, 87, 87, 2804, 2805, 87, 2801, 87, + 2803, 2809, 87, 87, 2806, 87, 87, 2811, 2808, 2802, + + 173, 87, 2807, 87, 2810, 2812, 87, 2817, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 2822, 2821, 2815, + 2819, 2813, 2816, 2814, 2818, 2820, 2823, 87, 87, 2824, + 2825, 2827, 87, 87, 87, 2831, 87, 2828, 3904, 2826, + 2832, 87, 2833, 87, 87, 2834, 2830, 2835, 87, 87, + 87, 2838, 2836, 2829, 2839, 2837, 87, 87, 2841, 87, + 87, 87, 87, 2843, 87, 2840, 87, 87, 87, 2847, + 87, 2848, 87, 87, 3904, 2842, 2844, 87, 2850, 87, + 2845, 2856, 87, 2851, 2849, 2852, 2846, 2853, 87, 87, + 87, 87, 87, 87, 2854, 2855, 87, 2859, 2860, 87, + + 2857, 87, 87, 87, 87, 87, 2862, 87, 87, 2861, + 87, 2867, 2858, 87, 2870, 2869, 87, 2872, 87, 2866, + 87, 87, 2863, 2864, 2865, 87, 2873, 2871, 2868, 87, + 87, 2874, 87, 2879, 87, 2877, 87, 2875, 87, 87, + 2883, 2884, 87, 87, 2882, 87, 87, 87, 2876, 87, + 2880, 2885, 2881, 2878, 87, 87, 2886, 2894, 2887, 2888, + 87, 2890, 87, 87, 2892, 2891, 87, 87, 87, 2889, + 2893, 2895, 87, 2897, 87, 2899, 87, 87, 2898, 2901, + 87, 87, 2903, 87, 87, 87, 2902, 87, 2900, 87, + 87, 87, 2896, 87, 2907, 87, 87, 2913, 87, 2905, + + 2911, 2912, 2904, 2906, 2914, 87, 2915, 87, 87, 2909, + 87, 2917, 87, 87, 2910, 87, 2908, 87, 87, 87, + 2920, 2922, 87, 87, 2918, 2925, 87, 2916, 87, 87, + 87, 2923, 87, 3904, 2924, 2919, 2921, 2927, 2928, 2926, + 2929, 2932, 87, 87, 87, 2931, 87, 2930, 87, 87, + 87, 2933, 2934, 87, 2939, 2940, 87, 87, 87, 87, + 87, 87, 2935, 2936, 2937, 2941, 2945, 2938, 2943, 87, + 87, 2944, 2946, 87, 87, 2942, 87, 87, 87, 87, + 87, 2950, 87, 2947, 2953, 3904, 2949, 2948, 2954, 87, + 2956, 87, 2957, 87, 2959, 2955, 87, 2951, 2952, 2958, + + 87, 87, 87, 2960, 87, 2963, 87, 2962, 87, 2964, + 87, 2965, 87, 87, 2961, 87, 87, 87, 2966, 2972, + 87, 87, 2974, 87, 87, 2968, 2975, 87, 87, 2977, + 87, 87, 2967, 2971, 87, 2969, 2978, 2970, 2979, 2976, + 2973, 87, 87, 87, 87, 87, 2980, 2982, 2985, 87, + 2987, 87, 87, 87, 2986, 87, 87, 87, 87, 87, + 87, 2981, 87, 2983, 2984, 173, 87, 2993, 2990, 87, + 2998, 2992, 2994, 2989, 87, 2999, 2996, 2997, 2988, 87, + 2991, 2995, 87, 87, 3003, 87, 87, 3006, 87, 87, + 87, 3005, 87, 3008, 3000, 87, 3904, 3001, 87, 87, + + 3010, 3002, 87, 3011, 3012, 87, 3009, 3004, 3013, 87, + 87, 3014, 3007, 87, 3015, 87, 3016, 3017, 87, 87, + 87, 3019, 87, 87, 87, 87, 87, 87, 87, 3018, + 3027, 87, 87, 3025, 3020, 87, 3031, 87, 87, 87, + 3021, 3022, 3032, 3904, 3023, 3024, 3026, 3028, 87, 3029, + 3030, 3033, 87, 3034, 3037, 87, 87, 3036, 87, 3035, + 3039, 87, 87, 87, 87, 3038, 87, 87, 87, 87, + 87, 3043, 87, 87, 3051, 87, 3040, 3049, 87, 3050, + 3041, 3042, 3044, 87, 3045, 3047, 3046, 3052, 87, 3048, + 87, 3056, 87, 3057, 87, 87, 3055, 3058, 3053, 87, + + 87, 3054, 87, 87, 87, 87, 3065, 87, 87, 87, + 3064, 87, 87, 3059, 87, 3061, 87, 3060, 3063, 87, + 87, 3062, 3073, 3069, 3072, 3070, 3074, 87, 3066, 3067, + 87, 3068, 3075, 3076, 87, 87, 3071, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 3078, 3082, 3084, 87, + 87, 3080, 87, 3089, 3077, 3090, 87, 3079, 87, 87, + 3081, 3083, 3093, 87, 3085, 3087, 87, 87, 3086, 87, + 3088, 87, 87, 3091, 87, 3096, 87, 3092, 3094, 87, + 3099, 3095, 87, 3100, 3097, 3101, 87, 3098, 87, 3102, + 3104, 87, 87, 87, 87, 3109, 87, 3103, 87, 87, + + 87, 3107, 87, 3112, 87, 3113, 3114, 87, 3105, 3111, + 3110, 3106, 3116, 87, 3108, 87, 87, 87, 87, 87, + 3117, 3115, 3122, 87, 87, 3118, 87, 3124, 87, 87, + 3120, 3127, 87, 3119, 87, 87, 87, 3125, 87, 3121, + 3161, 87, 87, 87, 87, 3123, 87, 3128, 3129, 3130, + 3131, 3126, 3132, 3133, 3134, 87, 87, 3136, 3135, 3137, + 87, 3138, 87, 87, 87, 87, 87, 3139, 87, 3141, + 87, 87, 87, 3142, 87, 87, 3145, 3140, 87, 3144, + 3147, 3150, 87, 3148, 87, 3143, 3146, 3149, 3151, 87, + 87, 87, 87, 3155, 87, 3152, 3154, 3156, 173, 3153, + + 87, 3157, 87, 87, 87, 3158, 3904, 87, 3162, 3163, + 3159, 87, 3165, 87, 87, 3168, 87, 3169, 87, 3167, + 3160, 3164, 87, 3171, 87, 3173, 87, 87, 3166, 3172, + 3174, 87, 3175, 87, 87, 3170, 3178, 87, 3176, 87, + 87, 3179, 87, 87, 3180, 87, 87, 87, 3177, 3181, + 3185, 3186, 3187, 3183, 87, 87, 87, 87, 3182, 3189, + 87, 87, 3190, 87, 3192, 87, 3188, 3184, 3191, 87, + 87, 87, 87, 87, 3194, 3195, 3196, 3193, 87, 87, + 87, 3201, 87, 87, 87, 87, 3198, 3199, 3200, 3203, + 3197, 3202, 87, 3206, 87, 87, 87, 3204, 87, 87, + + 3207, 3205, 87, 3208, 3212, 87, 87, 87, 3217, 3213, + 87, 87, 87, 87, 87, 3209, 3210, 3211, 87, 3215, + 3216, 87, 3219, 3221, 87, 3214, 87, 3218, 87, 3220, + 3226, 87, 3225, 87, 3228, 3229, 3223, 3222, 87, 3232, + 87, 87, 87, 3233, 87, 87, 3224, 87, 87, 87, + 87, 87, 87, 87, 3236, 3234, 3239, 3230, 3227, 3237, + 3231, 87, 87, 87, 3238, 3241, 3240, 3243, 3244, 87, + 3242, 87, 87, 3235, 87, 3246, 3248, 87, 87, 3250, + 87, 3251, 87, 3252, 87, 87, 3245, 87, 87, 3253, + 3247, 87, 3254, 3256, 87, 87, 87, 3255, 3260, 87, + + 3258, 3249, 87, 3261, 87, 87, 87, 3904, 3259, 87, + 3266, 3257, 3267, 87, 3262, 3268, 87, 3269, 87, 3263, + 87, 87, 87, 3270, 87, 3264, 3265, 3273, 87, 87, + 3276, 87, 87, 3277, 3271, 3272, 3278, 87, 87, 3280, + 87, 87, 3274, 87, 87, 3284, 3285, 87, 87, 3275, + 3287, 87, 3286, 3279, 3281, 3288, 87, 87, 3283, 3290, + 3289, 3282, 87, 3292, 87, 87, 87, 3291, 3293, 87, + 87, 87, 3298, 3299, 3300, 87, 87, 3297, 87, 87, + 87, 87, 3303, 87, 87, 3302, 3295, 3294, 87, 3304, + 3296, 87, 87, 87, 3306, 3308, 3305, 87, 3309, 87, + + 3301, 3307, 87, 87, 3312, 87, 3316, 87, 87, 87, + 3310, 3311, 87, 87, 3328, 87, 3318, 87, 87, 3315, + 3313, 3904, 3317, 3314, 3319, 3322, 3320, 3323, 3321, 3325, + 87, 3329, 3324, 87, 3326, 87, 87, 3327, 87, 3330, + 87, 3331, 87, 3332, 87, 3333, 87, 87, 87, 87, + 87, 3335, 3334, 87, 87, 87, 87, 87, 3338, 3340, + 3342, 87, 87, 87, 3339, 3343, 3349, 3336, 3347, 87, + 3348, 87, 3341, 87, 3337, 3351, 87, 3344, 87, 87, + 87, 3345, 3346, 87, 3352, 3353, 3355, 87, 3350, 87, + 3356, 3357, 87, 87, 3358, 3359, 87, 3354, 87, 3362, + + 87, 87, 3360, 87, 87, 3366, 87, 3361, 3367, 87, + 3363, 87, 3364, 87, 87, 3368, 87, 87, 87, 3374, + 87, 87, 3365, 3369, 3375, 87, 87, 3371, 87, 3377, + 3378, 87, 3370, 3372, 3376, 87, 3380, 3373, 3381, 87, + 3383, 87, 87, 3379, 87, 87, 3387, 87, 87, 3382, + 3388, 87, 3390, 87, 87, 87, 3384, 3389, 87, 87, + 3393, 87, 87, 3386, 3396, 3391, 87, 87, 3394, 3385, + 87, 87, 3399, 87, 3397, 87, 3400, 87, 3401, 3392, + 3403, 3395, 3402, 87, 87, 87, 87, 3398, 87, 3408, + 3410, 87, 3409, 3411, 87, 3405, 87, 3404, 3406, 87, + + 3407, 3412, 87, 87, 87, 3413, 87, 87, 3419, 3418, + 87, 87, 3422, 87, 87, 3420, 3421, 87, 87, 3414, + 87, 87, 87, 3415, 87, 3416, 3417, 3426, 3428, 87, + 3424, 3430, 87, 3431, 87, 3423, 87, 87, 87, 3427, + 87, 3425, 3432, 3433, 87, 3434, 87, 87, 87, 3429, + 3439, 87, 87, 87, 87, 3435, 87, 3444, 87, 87, + 3438, 3436, 3437, 3443, 87, 3440, 3441, 3442, 87, 3448, + 87, 87, 3445, 87, 3451, 87, 3447, 3446, 87, 87, + 3455, 87, 3456, 87, 3452, 87, 87, 3458, 87, 87, + 3449, 3450, 3459, 87, 3461, 87, 3453, 3462, 87, 87, + + 3460, 3463, 87, 87, 3457, 3454, 3465, 87, 3468, 87, + 3464, 3466, 87, 3471, 87, 3467, 87, 3470, 87, 87, + 3474, 3476, 87, 87, 87, 3469, 87, 3473, 87, 3478, + 87, 87, 87, 3482, 87, 3483, 3472, 3479, 3485, 87, + 87, 87, 3475, 3477, 87, 3486, 87, 3489, 87, 3480, + 3481, 3484, 3490, 87, 87, 87, 3493, 87, 87, 87, + 87, 3487, 3498, 87, 87, 87, 87, 3496, 87, 3491, + 3495, 3503, 3488, 3502, 87, 3492, 3494, 3500, 3504, 87, + 3497, 87, 3499, 87, 3501, 87, 3506, 87, 3507, 87, + 3508, 87, 87, 87, 3513, 87, 3505, 87, 3512, 3509, + + 87, 3514, 87, 87, 3516, 87, 3515, 3519, 87, 87, + 87, 3510, 3511, 3517, 3518, 87, 3521, 3522, 87, 87, + 3520, 3525, 87, 87, 87, 87, 3530, 87, 87, 87, + 3528, 3526, 87, 3534, 87, 3523, 3524, 3904, 3529, 3535, + 87, 3533, 3527, 3536, 87, 3532, 87, 3531, 87, 87, + 87, 3537, 3540, 87, 3539, 3541, 87, 3542, 87, 3543, + 3544, 87, 3538, 87, 87, 3547, 87, 87, 3549, 87, + 87, 87, 3548, 3551, 87, 87, 3545, 3552, 87, 87, + 87, 87, 3550, 87, 3558, 3559, 87, 87, 87, 3553, + 3546, 87, 87, 87, 3565, 87, 87, 3554, 87, 3556, + + 3567, 3555, 3564, 3557, 3569, 3562, 87, 3561, 3566, 87, + 87, 87, 3563, 3560, 87, 87, 3568, 87, 3904, 3572, + 3573, 3575, 87, 3576, 87, 87, 3570, 87, 3579, 87, + 3571, 87, 3577, 87, 87, 87, 3582, 87, 3574, 3578, + 87, 3580, 87, 3581, 87, 3583, 3585, 87, 87, 3586, + 87, 3584, 87, 3587, 87, 3589, 87, 87, 87, 87, + 3590, 87, 3593, 87, 3591, 3594, 87, 3588, 87, 87, + 87, 87, 3592, 87, 3606, 87, 3603, 3595, 3604, 3596, + 87, 3597, 3904, 3605, 3598, 3599, 87, 3600, 3601, 3602, + 87, 3607, 87, 3609, 87, 3608, 3611, 87, 3612, 87, + + 87, 3615, 87, 87, 3613, 3610, 87, 87, 3616, 3614, + 3618, 87, 3620, 87, 3621, 3622, 87, 87, 3623, 3624, + 3628, 87, 3619, 3625, 87, 3617, 3626, 3627, 87, 87, + 87, 3631, 87, 3629, 87, 87, 3634, 87, 87, 3630, + 87, 3635, 87, 87, 3639, 87, 87, 87, 3638, 3633, + 87, 87, 3632, 87, 87, 3644, 87, 3904, 3636, 87, + 3643, 87, 3637, 3645, 3640, 87, 87, 3641, 3648, 87, + 3649, 3646, 3650, 87, 87, 3642, 3657, 3647, 3651, 87, + 3652, 3653, 87, 3654, 87, 3655, 87, 87, 87, 3661, + 87, 87, 3658, 3663, 3662, 87, 3656, 3659, 87, 87, + + 3660, 87, 87, 87, 3670, 87, 3665, 3667, 3668, 87, + 3671, 87, 3673, 87, 87, 3664, 87, 3672, 87, 3666, + 3669, 3674, 87, 3676, 3675, 3677, 87, 87, 3678, 3679, + 87, 87, 3682, 87, 3683, 87, 3680, 3684, 87, 3685, + 87, 3686, 87, 3687, 87, 3688, 87, 3689, 87, 3681, + 87, 87, 3692, 87, 3693, 87, 87, 87, 87, 87, + 3691, 3698, 87, 87, 87, 3694, 3700, 87, 87, 3695, + 87, 87, 87, 3704, 3697, 87, 3690, 87, 3696, 3701, + 87, 3702, 3699, 3703, 3706, 87, 87, 3705, 3708, 87, + 87, 3709, 3707, 3711, 87, 3713, 3712, 87, 3710, 87, + + 3716, 87, 3715, 87, 87, 87, 87, 87, 87, 3718, + 87, 87, 87, 3722, 87, 3714, 3724, 3717, 87, 3723, + 3719, 87, 3726, 3720, 3721, 87, 3725, 87, 87, 87, + 3729, 3730, 3732, 87, 3733, 87, 3734, 87, 3728, 87, + 3727, 87, 3731, 3735, 87, 3738, 87, 87, 3737, 87, + 3736, 3742, 87, 87, 87, 87, 87, 87, 3746, 3745, + 87, 3748, 3740, 3741, 3744, 87, 3739, 87, 87, 87, + 3747, 87, 87, 87, 87, 3743, 87, 87, 3749, 3757, + 87, 3755, 87, 87, 3752, 87, 3750, 3751, 3754, 3756, + 3760, 87, 3759, 3762, 87, 87, 3753, 3758, 87, 87, + + 3764, 3761, 87, 3763, 87, 3765, 3767, 87, 3768, 87, + 3770, 87, 3769, 87, 87, 87, 3772, 3904, 3766, 3771, + 3773, 87, 3774, 87, 3776, 87, 87, 3780, 3777, 87, + 87, 3778, 3775, 3782, 3779, 87, 87, 87, 87, 87, + 3786, 87, 3785, 3788, 87, 3781, 3789, 87, 3784, 3783, + 3790, 87, 3791, 87, 87, 87, 3794, 87, 3787, 87, + 87, 87, 87, 3799, 87, 87, 3800, 87, 87, 3792, + 3796, 3803, 3804, 87, 3793, 3795, 3801, 87, 87, 87, + 3798, 87, 87, 87, 87, 3797, 3802, 3805, 3808, 3809, + 87, 87, 3806, 3810, 87, 3814, 87, 87, 87, 87, + + 3807, 87, 3816, 3811, 3812, 3813, 3818, 87, 87, 87, + 87, 87, 87, 3815, 3825, 87, 3823, 3824, 87, 3817, + 87, 3820, 3821, 87, 87, 87, 3819, 3830, 87, 3822, + 3831, 3832, 87, 3829, 87, 3833, 3904, 87, 3826, 3828, + 87, 3827, 87, 87, 3838, 3834, 87, 3835, 3836, 87, + 87, 3837, 3839, 87, 3840, 3841, 87, 87, 87, 87, + 87, 3843, 87, 3848, 3842, 87, 3845, 87, 87, 87, + 87, 3851, 87, 3852, 3853, 87, 87, 3844, 87, 3846, + 3850, 3847, 87, 3856, 3849, 3854, 87, 87, 3855, 87, + 3860, 3857, 3861, 87, 87, 87, 87, 3865, 3863, 3859, + + 87, 3858, 87, 3867, 87, 3868, 3862, 87, 87, 87, + 3872, 87, 3869, 3873, 87, 3870, 87, 87, 3875, 3866, + 87, 3864, 3874, 3876, 87, 87, 87, 3877, 3871, 87, + 87, 87, 3878, 87, 3880, 3882, 87, 87, 3884, 87, + 87, 87, 3885, 87, 3888, 3879, 3889, 87, 87, 3881, + 3883, 87, 3892, 3893, 87, 87, 3895, 87, 3886, 3887, + 3890, 87, 3894, 3896, 87, 87, 87, 3891, 3897, 87, + 3898, 3899, 87, 3902, 87, 3903, 87, 3904, 3904, 3904, + 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3900, 3904, + 3904, 3901, 48, 48, 48, 48, 48, 48, 48, 53, + + 53, 53, 53, 53, 53, 53, 58, 58, 58, 58, + 58, 58, 58, 64, 64, 64, 64, 64, 64, 64, + 69, 69, 69, 69, 69, 69, 69, 75, 75, 75, + 75, 75, 75, 75, 81, 81, 81, 81, 81, 81, + 81, 90, 90, 3904, 90, 90, 90, 90, 163, 163, + 3904, 3904, 3904, 163, 163, 165, 165, 3904, 3904, 165, + 3904, 165, 167, 3904, 3904, 3904, 3904, 3904, 167, 170, + 170, 3904, 3904, 3904, 170, 170, 172, 3904, 3904, 3904, + 3904, 3904, 172, 174, 174, 3904, 174, 174, 174, 174, + 177, 3904, 3904, 3904, 3904, 3904, 177, 180, 180, 3904, + + 3904, 3904, 180, 180, 91, 91, 3904, 91, 91, 91, + 91, 17, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, + 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, + 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, + 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, + 3904, 3904 } ; -static yyconst flex_int16_t yy_chk[7477] = +static yyconst flex_int16_t yy_chk[7653] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2529,820 +2579,840 @@ static yyconst flex_int16_t yy_chk[7477] = 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, 3823, 35, + 10, 10, 19, 29, 9, 33, 19, 29, 3912, 35, 10, 11, 11, 11, 11, 11, 11, 13, 13, 13, - 13, 34, 13, 11, 35, 100, 34, 29, 38, 13, - 51, 51, 11, 12, 12, 12, 12, 12, 12, 14, - 14, 14, 14, 100, 14, 12, 15, 15, 15, 38, - 23, 14, 23, 23, 12, 23, 3103, 15, 16, 16, + 13, 34, 13, 11, 35, 101, 34, 29, 38, 13, + 46, 46, 11, 12, 12, 12, 12, 12, 12, 14, + 14, 14, 14, 101, 14, 12, 15, 15, 15, 38, + 23, 14, 23, 23, 12, 23, 3156, 15, 16, 16, 16, 23, 23, 27, 27, 30, 30, 31, 31, 16, - 25, 27, 130, 25, 25, 27, 31, 25, 27, 32, - 30, 46, 25, 32, 25, 130, 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, 1199, 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, 127, 129, - 131, 128, 137, 122, 124, 132, 121, 123, 129, 132, - 133, 127, 123, 134, 135, 139, 136, 134, 127, 141, - 131, 136, 137, 138, 138, 136, 140, 142, 133, 143, - 140, 136, 135, 144, 141, 139, 144, 145, 178, 140, - 146, 150, 147, 148, 148, 140, 146, 144, 143, 146, - - 145, 144, 149, 142, 147, 151, 153, 150, 154, 149, - 154, 148, 156, 155, 148, 157, 158, 156, 159, 154, - 149, 160, 153, 159, 151, 155, 198, 157, 162, 162, - 164, 154, 198, 164, 158, 160, 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, 182, 183, 184, 185, 186, 181, 189, - 188, 190, 191, 193, 185, 192, 190, 181, 186, 183, - 195, 185, 193, 216, 189, 196, 192, 194, 184, 188, - 196, 202, 191, 194, 194, 197, 197, 199, 204, 199, - - 200, 216, 199, 202, 200, 195, 201, 201, 205, 200, - 203, 208, 207, 205, 200, 203, 203, 204, 206, 199, - 200, 200, 209, 206, 207, 210, 212, 211, 209, 210, - 213, 208, 211, 214, 215, 217, 218, 221, 220, 222, - 217, 218, 212, 220, 213, 230, 215, 227, 214, 215, - 271, 209, 219, 219, 223, 222, 219, 221, 219, 225, - 223, 224, 224, 226, 271, 225, 230, 227, 228, 226, - 219, 225, 219, 229, 228, 231, 233, 232, 233, 229, - 234, 231, 232, 235, 236, 241, 234, 235, 229, 237, - 236, 237, 238, 239, 240, 242, 237, 243, 238, 244, - - 240, 242, 246, 245, 247, 241, 239, 248, 250, 247, - 243, 245, 249, 251, 254, 246, 248, 253, 256, 243, - 252, 261, 253, 244, 250, 252, 252, 249, 258, 257, - 255, 259, 254, 251, 255, 257, 263, 260, 263, 262, - 256, 261, 259, 260, 262, 264, 258, 258, 265, 268, - 266, 267, 269, 270, 277, 265, 266, 267, 269, 272, - 272, 273, 273, 274, 264, 270, 275, 279, 268, 274, - 278, 276, 275, 276, 280, 278, 281, 277, 282, 279, - 283, 284, 297, 285, 281, 283, 286, 274, 285, 287, - 276, 288, 286, 280, 289, 287, 288, 290, 282, 289, - - 291, 293, 292, 290, 284, 294, 295, 297, 299, 296, - 302, 299, 298, 302, 294, 291, 292, 296, 298, 293, - 295, 300, 303, 300, 301, 301, 304, 304, 305, 305, - 306, 308, 307, 307, 308, 309, 310, 312, 314, 309, - 303, 311, 316, 315, 314, 310, 306, 307, 316, 317, - 311, 317, 318, 320, 320, 319, 312, 315, 318, 319, - 321, 322, 323, 324, 325, 321, 327, 322, 323, 326, - 328, 328, 329, 330, 331, 329, 319, 332, 331, 327, - 333, 335, 325, 324, 334, 334, 336, 323, 337, 336, - 326, 330, 340, 342, 339, 338, 332, 339, 333, 335, - - 337, 338, 342, 343, 340, 344, 336, 341, 348, 346, - 344, 341, 346, 353, 353, 351, 341, 347, 351, 341, - 348, 343, 360, 360, 341, 341, 341, 341, 345, 355, - 347, 345, 349, 345, 349, 349, 350, 352, 354, 356, - 352, 350, 350, 357, 355, 345, 345, 345, 358, 345, - 359, 361, 362, 362, 356, 354, 361, 358, 354, 359, - 357, 357, 363, 363, 364, 365, 366, 367, 368, 370, - 369, 366, 371, 372, 372, 374, 372, 375, 371, 367, - 365, 377, 375, 380, 370, 372, 377, 368, 376, 364, - 369, 378, 372, 381, 376, 374, 378, 380, 379, 381, - - 383, 379, 378, 379, 382, 384, 384, 382, 385, 383, - 386, 386, 387, 390, 385, 391, 392, 387, 391, 393, - 382, 177, 403, 382, 394, 382, 388, 388, 397, 388, - 399, 392, 400, 390, 393, 388, 391, 396, 394, 388, - 396, 400, 397, 403, 388, 399, 404, 388, 389, 389, - 175, 389, 401, 402, 406, 405, 396, 401, 401, 402, - 407, 411, 408, 406, 389, 404, 402, 389, 408, 389, - 405, 389, 398, 410, 398, 398, 409, 414, 412, 407, - 170, 411, 414, 413, 398, 398, 398, 398, 398, 413, - 415, 398, 412, 413, 409, 416, 417, 418, 419, 410, - - 414, 420, 418, 419, 422, 422, 421, 423, 424, 425, - 415, 417, 421, 426, 427, 416, 420, 428, 431, 426, - 424, 429, 432, 425, 433, 434, 429, 423, 430, 430, - 435, 430, 436, 428, 436, 441, 441, 444, 431, 427, - 433, 434, 432, 437, 435, 442, 443, 438, 437, 438, - 438, 439, 440, 444, 445, 439, 440, 447, 451, 446, - 450, 443, 449, 451, 442, 447, 447, 438, 449, 450, - 452, 440, 445, 446, 452, 453, 454, 447, 455, 447, - 448, 456, 454, 460, 453, 448, 457, 456, 458, 462, - 457, 458, 168, 448, 448, 459, 465, 448, 448, 455, - - 459, 448, 462, 460, 461, 461, 463, 463, 464, 465, - 466, 466, 467, 464, 468, 470, 469, 471, 467, 468, - 469, 472, 473, 474, 474, 475, 472, 473, 476, 477, - 470, 478, 474, 479, 480, 481, 479, 475, 471, 482, - 481, 483, 484, 478, 482, 483, 486, 477, 476, 485, - 485, 486, 487, 489, 484, 480, 488, 488, 491, 492, - 492, 494, 495, 496, 491, 497, 498, 499, 500, 501, - 495, 503, 499, 487, 497, 489, 504, 505, 507, 506, - 508, 501, 494, 167, 496, 506, 508, 498, 500, 503, - 509, 503, 507, 511, 504, 510, 512, 505, 511, 509, - - 513, 510, 514, 515, 516, 514, 517, 518, 513, 519, - 512, 513, 522, 518, 521, 517, 525, 515, 520, 516, - 521, 520, 523, 524, 526, 527, 522, 523, 526, 519, - 528, 529, 531, 532, 530, 528, 533, 525, 521, 530, - 536, 537, 527, 538, 540, 524, 529, 539, 531, 533, - 541, 539, 532, 534, 534, 541, 545, 165, 538, 534, - 536, 534, 537, 540, 542, 548, 543, 534, 547, 534, - 543, 545, 534, 534, 548, 550, 544, 546, 553, 534, - 542, 544, 546, 549, 547, 544, 554, 547, 551, 549, - 550, 556, 552, 558, 549, 552, 555, 555, 557, 557, - - 559, 553, 546, 560, 551, 562, 554, 563, 558, 561, - 561, 565, 559, 566, 564, 567, 556, 568, 560, 564, - 565, 571, 570, 568, 562, 571, 574, 575, 573, 563, - 567, 570, 566, 572, 573, 576, 577, 572, 574, 578, - 579, 580, 575, 581, 582, 578, 583, 581, 583, 584, - 577, 588, 585, 163, 576, 579, 591, 582, 587, 580, - 585, 586, 586, 588, 587, 589, 590, 592, 591, 593, - 592, 589, 590, 584, 594, 595, 596, 597, 598, 596, - 595, 620, 599, 593, 600, 620, 597, 599, 599, 594, - 601, 601, 609, 597, 598, 604, 597, 600, 602, 602, - - 603, 604, 603, 605, 605, 606, 606, 607, 610, 608, - 609, 611, 613, 607, 608, 608, 612, 613, 614, 612, - 615, 616, 617, 611, 616, 618, 619, 617, 615, 610, - 621, 622, 624, 626, 623, 625, 621, 614, 623, 628, - 625, 627, 627, 629, 630, 619, 631, 626, 618, 630, - 624, 622, 632, 633, 628, 634, 636, 635, 638, 639, - 639, 634, 635, 637, 629, 631, 637, 640, 632, 645, - 636, 637, 641, 633, 637, 637, 638, 642, 643, 644, - 647, 648, 642, 643, 645, 640, 647, 650, 641, 649, - 648, 650, 649, 644, 652, 651, 654, 653, 656, 652, - - 653, 654, 655, 657, 658, 660, 659, 661, 661, 663, - 657, 659, 662, 650, 651, 664, 656, 658, 655, 665, - 664, 662, 666, 667, 668, 660, 669, 672, 663, 670, - 672, 671, 674, 668, 677, 670, 666, 671, 669, 667, - 665, 673, 673, 675, 673, 676, 675, 678, 674, 679, - 676, 680, 677, 681, 682, 686, 680, 683, 684, 688, - 682, 678, 683, 679, 684, 685, 687, 694, 685, 690, - 691, 687, 681, 689, 161, 688, 692, 697, 689, 689, - 686, 692, 690, 691, 693, 695, 694, 696, 692, 708, - 693, 708, 696, 699, 695, 692, 692, 697, 698, 698, - - 699, 700, 701, 702, 703, 701, 704, 705, 700, 702, - 707, 704, 705, 705, 706, 706, 703, 709, 711, 712, - 701, 704, 710, 713, 710, 714, 715, 716, 717, 718, - 722, 719, 723, 718, 717, 707, 709, 712, 720, 711, - 719, 713, 721, 714, 725, 715, 724, 716, 722, 724, - 726, 723, 727, 720, 728, 729, 726, 721, 724, 725, - 730, 731, 732, 741, 735, 733, 734, 729, 728, 733, - 736, 737, 727, 738, 739, 742, 742, 741, 740, 730, - 735, 732, 731, 740, 734, 744, 745, 743, 736, 737, - 737, 743, 738, 739, 747, 746, 748, 749, 750, 744, - - 752, 748, 751, 754, 753, 745, 746, 752, 747, 753, - 754, 755, 758, 749, 756, 751, 757, 750, 759, 756, - 760, 757, 761, 762, 85, 759, 763, 764, 766, 760, - 758, 766, 762, 764, 765, 755, 761, 767, 763, 765, - 768, 767, 769, 770, 771, 772, 773, 771, 774, 774, - 776, 769, 775, 775, 768, 776, 776, 777, 770, 772, - 778, 775, 777, 780, 781, 782, 783, 773, 784, 778, - 781, 785, 784, 786, 787, 788, 791, 789, 792, 793, - 790, 788, 780, 785, 782, 789, 783, 790, 799, 804, - 796, 799, 787, 800, 791, 804, 806, 831, 786, 793, - - 831, 807, 803, 792, 794, 796, 794, 807, 808, 794, - 800, 803, 809, 794, 813, 810, 794, 808, 806, 810, - 811, 811, 814, 794, 794, 813, 794, 815, 809, 812, - 812, 816, 817, 823, 820, 819, 821, 823, 817, 820, - 814, 815, 822, 824, 845, 825, 829, 827, 845, 825, - 830, 816, 818, 818, 818, 819, 818, 821, 826, 818, - 822, 829, 857, 826, 818, 825, 827, 824, 857, 828, - 818, 818, 832, 818, 828, 830, 833, 832, 832, 834, - 834, 835, 836, 833, 837, 837, 838, 836, 840, 839, - 843, 838, 839, 840, 841, 841, 835, 842, 844, 842, - - 846, 848, 843, 847, 849, 849, 850, 851, 854, 848, - 852, 853, 853, 855, 856, 859, 859, 844, 858, 865, - 846, 850, 847, 858, 852, 855, 854, 851, 860, 864, - 862, 863, 866, 860, 860, 862, 856, 863, 865, 867, - 870, 868, 869, 870, 871, 867, 868, 864, 869, 872, - 871, 875, 866, 873, 873, 874, 874, 872, 876, 877, - 878, 880, 881, 879, 883, 878, 876, 879, 880, 875, - 882, 884, 884, 885, 887, 887, 886, 877, 889, 888, - 881, 890, 885, 883, 886, 888, 882, 894, 892, 893, - 895, 901, 897, 80, 896, 900, 889, 892, 893, 896, - - 890, 897, 899, 898, 902, 895, 898, 899, 903, 900, - 905, 894, 904, 902, 906, 906, 901, 904, 904, 907, - 908, 903, 909, 910, 905, 911, 912, 916, 914, 912, - 914, 909, 915, 915, 907, 917, 918, 912, 920, 908, - 917, 919, 921, 911, 922, 923, 919, 910, 916, 925, - 924, 926, 927, 75, 928, 926, 931, 918, 920, 924, - 930, 929, 921, 932, 933, 923, 922, 929, 931, 930, - 927, 934, 925, 928, 935, 937, 936, 938, 940, 932, - 935, 941, 938, 933, 936, 934, 939, 939, 943, 937, - 942, 945, 944, 946, 947, 74, 948, 940, 949, 942, - - 944, 941, 955, 950, 951, 952, 953, 954, 943, 950, - 951, 945, 953, 947, 956, 946, 948, 957, 949, 952, - 956, 954, 955, 957, 958, 959, 960, 961, 958, 962, - 963, 963, 961, 964, 965, 967, 968, 969, 960, 964, - 965, 970, 966, 969, 959, 966, 960, 971, 971, 968, - 962, 972, 973, 967, 975, 974, 979, 973, 974, 975, - 975, 970, 976, 977, 978, 978, 980, 977, 981, 972, - 982, 974, 983, 974, 985, 982, 986, 976, 979, 987, - 990, 989, 991, 981, 993, 1427, 980, 994, 994, 993, - 986, 983, 995, 987, 989, 996, 995, 998, 985, 1000, - - 990, 997, 997, 991, 992, 1001, 1002, 992, 1427, 992, - 996, 1002, 999, 992, 1000, 992, 999, 999, 1003, 1001, - 992, 1004, 998, 1006, 1005, 992, 1004, 1004, 1008, 1010, - 1007, 1011, 1003, 1005, 1007, 1009, 1011, 1006, 1012, 1014, - 1009, 1010, 1015, 1008, 1013, 1013, 1007, 1018, 1016, 1017, - 1009, 1025, 1012, 1018, 1017, 1020, 1015, 1016, 1019, 1021, - 1014, 1020, 1024, 1019, 1023, 1021, 1022, 1022, 1024, 1023, - 1026, 1029, 1027, 1025, 1030, 1032, 1033, 1033, 68, 1030, - 1031, 1034, 1036, 1029, 1037, 1035, 1034, 1032, 1038, 1026, - 1027, 1028, 1028, 1035, 1031, 1039, 1036, 1028, 1042, 1028, - - 1037, 1040, 1038, 1041, 1042, 1028, 1044, 1043, 1045, 1046, - 1028, 1028, 1043, 1047, 1039, 1048, 1051, 1028, 1044, 1041, - 1040, 1049, 1049, 1050, 1053, 1046, 1045, 1050, 1055, 1054, - 1053, 1047, 1054, 1048, 1056, 1057, 1051, 1058, 1060, 1056, - 1059, 1062, 1063, 1058, 1064, 1059, 1065, 1055, 1057, 1066, - 1062, 1063, 1065, 1067, 1068, 1069, 1070, 1060, 1066, 1068, - 1064, 1071, 1071, 1072, 1073, 1074, 1080, 1076, 1075, 1077, - 1070, 1082, 1067, 1076, 1074, 1069, 1073, 1075, 1078, 1083, - 1084, 1087, 1080, 1072, 1078, 1082, 1077, 1085, 1086, 1088, - 1089, 1090, 1085, 1091, 1086, 63, 1092, 1095, 1091, 1083, - - 1087, 1092, 1095, 1088, 1096, 1084, 1090, 1097, 1089, 1096, - 1098, 1098, 1099, 1100, 1101, 1102, 1097, 1109, 1099, 1100, - 1103, 1105, 1106, 1101, 1111, 1108, 1108, 1106, 1106, 1108, - 1102, 1110, 1109, 1103, 1110, 1112, 1113, 1105, 1111, 1114, - 1115, 1116, 1117, 1118, 1119, 1120, 1114, 1121, 1122, 1118, - 1127, 1120, 1113, 1122, 1116, 1112, 1123, 1117, 1115, 1125, - 1125, 1130, 1121, 1126, 1119, 1131, 1126, 1128, 1129, 58, - 1123, 1127, 1128, 1129, 1131, 1132, 1133, 1130, 1134, 1136, - 1132, 1133, 1137, 1138, 1139, 1136, 1140, 1141, 1141, 1138, - 1134, 1142, 1140, 1143, 1144, 1145, 1145, 1144, 1137, 1146, - - 1142, 1147, 1148, 1149, 1151, 1139, 1149, 1152, 1150, 1153, - 1151, 1143, 1162, 1152, 1154, 1153, 57, 1146, 1155, 1154, - 1147, 1150, 1148, 1155, 1156, 1161, 1157, 1158, 1170, 1160, - 1156, 1157, 1162, 1158, 1160, 1163, 1166, 1164, 1165, 1165, - 1167, 1163, 1164, 1161, 1169, 1166, 1168, 1170, 1173, 1167, - 1171, 1168, 1172, 1171, 1175, 1172, 1174, 1176, 1177, 1173, - 1178, 1174, 1169, 1180, 1179, 1183, 1178, 1184, 1181, 1176, - 1179, 1185, 1175, 1181, 1182, 1182, 1186, 1177, 1180, 1188, - 1189, 1184, 1187, 1185, 1183, 1190, 1187, 1191, 1193, 1189, - 1194, 1194, 1195, 1196, 1186, 1198, 1197, 1188, 1196, 1200, - - 1195, 1197, 1201, 1203, 1190, 1204, 1202, 1193, 1203, 1205, - 1206, 1206, 1191, 1200, 1204, 1198, 1207, 1201, 1202, 1208, - 1209, 1215, 1210, 1211, 1205, 1208, 1209, 1212, 1213, 1214, - 1213, 1216, 1212, 1217, 1214, 1215, 1207, 1210, 1217, 1211, - 1218, 1219, 1221, 1220, 1222, 1216, 1220, 1223, 1226, 1221, - 1225, 1225, 1227, 1228, 1229, 1218, 1227, 1230, 1231, 1222, - 1219, 52, 1226, 1230, 1234, 1232, 1223, 1238, 1234, 1229, - 1232, 1228, 1235, 1235, 1238, 1236, 1237, 1237, 1231, 1232, - 1236, 1232, 1239, 1240, 1232, 1241, 1240, 1242, 1243, 1245, - 1246, 1247, 1248, 1250, 1245, 1249, 1239, 1243, 1248, 1251, - - 1249, 1252, 1257, 1247, 1241, 1242, 1260, 1250, 1255, 1246, - 1251, 1254, 1254, 1255, 1256, 1260, 1258, 1261, 1262, 1256, - 1252, 1258, 1257, 1259, 1263, 1264, 1265, 1259, 1264, 1266, - 1267, 1268, 1261, 1262, 1269, 1270, 1266, 1264, 1271, 1272, - 1273, 1265, 1267, 1263, 1271, 1275, 1274, 1276, 1277, 1278, - 1268, 1273, 1274, 1270, 1272, 1269, 1279, 1277, 1280, 1281, - 1282, 1283, 1284, 1285, 1278, 1275, 1287, 1276, 1284, 1288, - 1280, 1290, 1287, 1289, 1291, 1279, 1283, 1292, 1281, 1290, - 1294, 1293, 1296, 1285, 1288, 1282, 1293, 1289, 1297, 1323, - 1295, 1298, 1294, 1292, 1291, 1295, 1295, 1299, 1299, 1301, - - 1302, 1296, 1297, 1323, 1298, 1300, 1300, 1304, 1304, 1302, - 1300, 1303, 1301, 1300, 1300, 1305, 1307, 1303, 1300, 1306, - 1305, 1308, 1312, 1306, 1300, 1307, 1309, 1308, 1300, 1310, - 1315, 1309, 1311, 1311, 1310, 1313, 1313, 1314, 1316, 1317, - 1314, 1318, 1314, 1312, 1320, 1317, 1319, 1318, 1321, 1319, - 1315, 1324, 1322, 1320, 1325, 1326, 1316, 1322, 1327, 1329, - 1325, 1326, 1328, 1329, 1327, 1330, 1331, 1328, 1321, 1324, - 1336, 1332, 47, 1333, 1340, 1331, 1332, 1339, 1330, 1338, - 1331, 1336, 1331, 1338, 1331, 1341, 1331, 1333, 1334, 1334, - 1335, 1335, 1339, 1335, 1340, 1342, 1343, 1344, 1345, 1346, - - 1347, 1343, 1343, 1341, 1342, 1347, 1344, 1345, 1348, 1349, - 1350, 1351, 1352, 1353, 1354, 1354, 1355, 1356, 1349, 1353, - 1357, 1346, 1348, 1359, 1360, 1356, 1352, 1358, 1355, 1350, - 1351, 1361, 1358, 1360, 1357, 1362, 1363, 1359, 1361, 1364, - 1365, 1365, 1366, 1368, 1364, 1367, 1367, 1369, 1368, 1369, - 1372, 1371, 1373, 1362, 1371, 1372, 1374, 1366, 1375, 1375, - 1376, 1363, 1377, 1377, 1379, 1374, 1378, 1378, 1380, 1379, - 1381, 1373, 1382, 1383, 1383, 1384, 1386, 1385, 1387, 1386, - 1376, 1388, 1391, 1389, 1391, 1392, 1395, 1388, 1389, 1380, - 1390, 1381, 1396, 1382, 1385, 1384, 1398, 1394, 1387, 1390, - - 1394, 1395, 1397, 1392, 1399, 1396, 1400, 1397, 1401, 1399, - 1398, 1403, 1402, 1401, 1400, 1402, 1403, 1404, 1404, 1405, - 1406, 1407, 1408, 1409, 1405, 1411, 1412, 1407, 1413, 1408, - 1414, 1411, 1412, 1413, 1415, 1414, 1409, 1416, 1406, 1417, - 1415, 1418, 1419, 1419, 1420, 1422, 1416, 1423, 1425, 1424, - 1422, 1426, 1418, 1434, 1428, 1429, 1430, 1431, 1417, 1424, - 1428, 1429, 1430, 1425, 1420, 1423, 1433, 1434, 1431, 1435, - 1436, 1426, 1433, 1434, 1437, 1438, 1436, 1439, 1440, 1441, - 1441, 1442, 1443, 1445, 1444, 1446, 1448, 1438, 1445, 1435, - 1449, 1439, 1447, 1447, 1437, 1449, 1440, 1451, 1452, 1453, - - 1454, 1442, 1444, 1446, 1453, 1453, 1455, 1443, 1457, 1448, - 1458, 1456, 1452, 1459, 1461, 1455, 1451, 18, 1454, 1456, - 1463, 1460, 1457, 1461, 1470, 1458, 1460, 1465, 1459, 1460, - 1462, 1459, 1462, 1465, 1463, 1466, 1467, 1468, 1469, 1466, - 1471, 1472, 1468, 1468, 1473, 1475, 1472, 1467, 1474, 1473, - 1470, 1476, 1478, 1474, 1477, 1480, 1481, 1469, 1471, 1477, - 1482, 1483, 1483, 1475, 1484, 1485, 1486, 1487, 1484, 1480, - 1488, 1476, 1478, 1487, 1481, 1489, 1490, 1492, 1482, 1491, - 1494, 1493, 1488, 1485, 1495, 1486, 1498, 1496, 1500, 1495, - 17, 1489, 1492, 1491, 1496, 1490, 1493, 1497, 1499, 1494, - - 1503, 1501, 1497, 1505, 1498, 1502, 1502, 1504, 1509, 1500, - 1501, 1507, 1499, 1506, 1506, 1503, 1504, 1507, 1508, 1510, - 1510, 1512, 1509, 1505, 1508, 1511, 1511, 1512, 1513, 1514, - 1515, 1516, 1517, 1518, 1525, 1515, 0, 1516, 1517, 1518, - 1519, 1519, 1520, 1520, 1513, 1522, 1522, 1523, 1524, 1526, - 1514, 1523, 1525, 1527, 1528, 1531, 1529, 1524, 1530, 1530, - 1532, 1526, 1520, 1529, 1520, 1533, 1534, 1527, 1532, 1528, - 1533, 1535, 1536, 1539, 0, 1531, 1537, 1536, 1536, 1538, - 1534, 1537, 1537, 1538, 1540, 1540, 1541, 1542, 1543, 1544, - 1535, 1545, 1546, 1539, 1544, 1547, 1548, 1543, 1549, 1550, - - 1551, 1552, 1548, 1549, 1553, 1541, 1542, 1555, 1554, 1556, - 1545, 1565, 1546, 1547, 1554, 1556, 1552, 1550, 1557, 1558, - 1551, 1560, 1559, 1561, 1557, 1562, 1555, 1563, 1569, 1564, - 1553, 1559, 1565, 1566, 1567, 1567, 1568, 1570, 1558, 1568, - 1560, 1571, 1561, 1564, 1562, 1576, 1563, 1569, 1566, 1572, - 1572, 1573, 1573, 1571, 1574, 1577, 1570, 1575, 1576, 1574, - 1578, 1575, 1579, 1582, 1585, 1580, 1586, 1580, 0, 1578, - 1577, 1580, 1584, 1583, 1587, 1579, 1583, 1584, 1592, 1585, - 1589, 1582, 1588, 1588, 1580, 1589, 1586, 1590, 1591, 1593, - 1587, 1592, 1594, 1590, 1595, 1593, 1596, 1594, 1595, 1597, - - 1596, 1599, 1598, 1591, 1600, 1601, 1602, 1602, 1604, 1606, - 1599, 1601, 1607, 1608, 1611, 1606, 1609, 1609, 1608, 1597, - 1598, 1610, 1613, 1613, 1600, 1615, 1604, 1610, 1615, 1616, - 1616, 1617, 1618, 1607, 1611, 1619, 1621, 1622, 1627, 1621, - 1623, 1624, 1625, 1626, 1626, 1628, 1629, 1617, 1618, 1630, - 1624, 1619, 1634, 1627, 1630, 1631, 1635, 1632, 1622, 1637, - 1623, 1634, 1625, 1632, 1636, 1629, 1628, 1633, 1633, 1631, - 1638, 1639, 1639, 1640, 1635, 1641, 1642, 1643, 1646, 1636, - 1648, 1642, 1644, 1644, 1637, 1645, 1649, 1640, 1650, 1645, - 1638, 1652, 1643, 1641, 1647, 1647, 1651, 1659, 1646, 1650, - - 1651, 1653, 1648, 1655, 1655, 1649, 1653, 1657, 1656, 1658, - 1652, 1656, 1660, 1659, 1658, 1661, 1662, 1663, 1664, 1665, - 1657, 1666, 1666, 1670, 1668, 1669, 0, 1667, 1665, 1661, - 1660, 1663, 1667, 1671, 1671, 1662, 1662, 1672, 1674, 1675, - 1678, 1675, 1670, 1664, 1668, 1669, 1672, 1673, 1676, 1677, - 1679, 1682, 1673, 1676, 1680, 1677, 1679, 1684, 1674, 1680, - 1678, 1683, 1683, 1685, 1686, 1682, 1688, 1689, 1690, 1690, - 1686, 1688, 1691, 1691, 1692, 1693, 1684, 1694, 1695, 1696, - 1696, 1695, 1685, 1697, 1698, 1699, 1707, 1703, 1692, 1701, - 1703, 1689, 1694, 1693, 1700, 1701, 1698, 1700, 1702, 1705, - - 1700, 1697, 1706, 1702, 1710, 1699, 1703, 1706, 1705, 0, - 1708, 1707, 1700, 1708, 1709, 1709, 1711, 1712, 1718, 1713, - 1714, 1714, 1711, 1712, 1713, 1715, 1715, 1716, 1710, 1717, - 1719, 1718, 1720, 1716, 1717, 1721, 1722, 1723, 1724, 1722, - 1725, 1728, 1726, 1723, 1724, 1732, 1725, 1726, 1719, 1729, - 1727, 1720, 1730, 1730, 1729, 1721, 1727, 1731, 1733, 1734, - 1735, 1736, 1731, 1732, 1728, 1741, 1737, 1740, 1738, 1739, - 1743, 1742, 1743, 1744, 1734, 1742, 1747, 1745, 1733, 1735, - 1737, 1736, 1738, 1739, 1745, 1740, 1748, 1749, 1747, 1750, - 1741, 1751, 1744, 1752, 1753, 1750, 1754, 1757, 1748, 1755, - - 1749, 1760, 1755, 1756, 1756, 1765, 1757, 1759, 1759, 1752, - 1754, 1751, 1761, 1762, 1753, 1763, 1763, 1761, 1764, 1765, - 1755, 1760, 1766, 1767, 1769, 1762, 1768, 1770, 1771, 1772, - 1776, 1777, 1774, 1764, 1770, 1768, 0, 1771, 1785, 1769, - 1771, 1767, 1779, 1779, 1782, 1772, 1766, 1774, 1776, 1781, - 1778, 1785, 1774, 1778, 1780, 1780, 1777, 1783, 1784, 1784, - 1783, 1781, 1782, 1786, 1787, 1788, 1790, 1791, 1789, 1787, - 1788, 1789, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, - 1800, 1800, 1786, 1802, 1794, 1799, 1796, 1790, 1798, 1796, - 1793, 1799, 1792, 1801, 1803, 1795, 1804, 1805, 1812, 1806, - - 1801, 1808, 1797, 1802, 1807, 1809, 1808, 1803, 1813, 1807, - 1807, 1805, 1814, 1814, 1804, 1806, 1815, 1809, 1816, 1815, - 1817, 1819, 1819, 1812, 1822, 1822, 1813, 1818, 1818, 1817, - 1820, 1823, 1818, 1821, 1816, 1824, 1819, 1825, 1821, 1820, - 1826, 1830, 1820, 1828, 1829, 1826, 1826, 1831, 1832, 1823, - 1834, 1842, 1831, 1837, 1833, 1825, 1824, 1828, 1837, 1829, - 1833, 1836, 1832, 1830, 1835, 1835, 1838, 1836, 1834, 1839, - 1840, 1842, 1843, 1844, 1852, 1839, 1840, 1845, 1846, 1847, - 1838, 1850, 1847, 1845, 1848, 1853, 1854, 1844, 1847, 1850, - 1848, 1846, 1843, 1852, 1855, 1856, 1858, 1857, 1859, 1860, - - 1856, 1861, 1855, 1862, 1853, 1854, 1857, 1859, 1864, 1858, - 1863, 1863, 1860, 1865, 1864, 1861, 1867, 1862, 1866, 1865, - 1869, 1866, 1868, 1868, 1870, 1871, 1872, 1872, 1873, 1867, - 1874, 1875, 1863, 1876, 1877, 1880, 1874, 1879, 1879, 1881, - 1869, 1873, 1870, 1881, 1871, 1882, 1883, 1887, 1886, 1876, - 1882, 1884, 1877, 1875, 1885, 1880, 1884, 1886, 1889, 1885, - 1891, 1892, 1890, 1891, 1893, 1895, 1883, 1894, 1894, 1889, - 1887, 1890, 1897, 1892, 1896, 1898, 1898, 1899, 1900, 1893, - 1901, 1902, 1899, 1903, 1895, 1904, 1896, 1901, 1906, 1907, - 1908, 1897, 1900, 1902, 1909, 1903, 1908, 1910, 1911, 1912, - - 1912, 1914, 1915, 1915, 1911, 1904, 1909, 1906, 1913, 1907, - 1918, 1913, 1917, 1919, 1920, 1910, 1918, 1917, 1921, 1921, - 1920, 1914, 1919, 1922, 1923, 1924, 1923, 1925, 1924, 1926, - 1927, 1928, 1929, 1930, 1931, 1922, 1934, 1929, 1930, 1933, - 1932, 1934, 1936, 1931, 1935, 1937, 1939, 1925, 1927, 1928, - 1937, 1926, 1932, 1935, 1933, 1938, 1942, 1937, 1940, 1940, - 1938, 1939, 1936, 1941, 1944, 1945, 1935, 1946, 1948, 1941, - 1949, 1947, 1949, 1951, 1951, 1950, 1954, 1942, 1952, 1952, - 1944, 1953, 1953, 1957, 1945, 1958, 1946, 1947, 1948, 1950, - 1959, 1950, 1955, 1955, 1956, 1956, 1954, 1960, 1960, 1961, - - 1966, 1962, 1963, 1961, 1957, 1963, 1958, 1962, 1965, 1967, - 1968, 1959, 1969, 1970, 1965, 1967, 1971, 1969, 1966, 1971, - 1972, 1972, 1973, 1974, 1975, 1975, 1976, 1977, 1974, 1978, - 1979, 1980, 1980, 1968, 1978, 1979, 1984, 1982, 1970, 1981, - 1983, 1976, 1973, 1982, 1981, 1985, 1986, 1988, 1977, 1987, - 1989, 1990, 1983, 1983, 1983, 1987, 1984, 1991, 1990, 1983, - 2002, 1994, 1991, 1985, 1995, 1997, 1986, 1988, 1993, 1996, - 1989, 1996, 1998, 1993, 1993, 1994, 1997, 1999, 2001, 1995, - 2000, 2002, 2004, 1999, 2003, 2003, 2006, 1998, 2007, 2000, - 2005, 2005, 2008, 2008, 2009, 2009, 2010, 2010, 2001, 2011, - - 2014, 2014, 2015, 2016, 2018, 2019, 2006, 2022, 2004, 2020, - 2007, 2021, 2016, 2018, 2023, 2020, 2024, 2024, 2025, 2011, - 2026, 2029, 2027, 2022, 2028, 2032, 2019, 2015, 2023, 2027, - 2021, 2030, 2030, 2028, 2033, 2026, 2031, 2031, 2035, 2025, - 2036, 2038, 2037, 2040, 2035, 2036, 2039, 2029, 2037, 2040, - 2033, 2032, 2041, 2039, 2041, 2043, 2044, 2045, 2045, 2046, - 2047, 2038, 2044, 2048, 2046, 2049, 2054, 2050, 2051, 2047, - 2052, 2051, 2053, 2055, 2043, 2053, 2056, 2056, 2048, 2058, - 2060, 2057, 2052, 2059, 2054, 2049, 2050, 2057, 2061, 2059, - 2062, 2058, 2064, 2065, 2062, 2068, 2066, 2067, 2067, 2055, - - 2060, 2066, 2069, 2061, 2072, 2070, 0, 2073, 2074, 2074, - 2062, 2073, 2064, 2077, 2077, 2065, 2075, 2076, 2078, 2068, - 2070, 2069, 2075, 2072, 2079, 2080, 2076, 2078, 2079, 2081, - 2081, 2082, 2083, 2085, 2084, 2086, 2080, 2087, 2085, 2088, - 2090, 2080, 2089, 2093, 2092, 2091, 2083, 0, 2089, 2092, - 2094, 2094, 2082, 2084, 2099, 2086, 2093, 2087, 2090, 2088, - 2091, 2095, 2095, 2096, 2098, 2099, 2100, 2096, 2109, 2101, - 2099, 2102, 2102, 2098, 2101, 2104, 2104, 2105, 2106, 2108, - 2118, 2111, 2105, 2105, 2106, 2108, 2100, 2110, 2114, 2112, - 2116, 2120, 2110, 2111, 2109, 2112, 2123, 2115, 2117, 2117, - - 2114, 2115, 2116, 2119, 2121, 2118, 2122, 2122, 2124, 2119, - 2121, 2125, 2126, 2120, 2128, 2123, 2125, 2129, 2130, 2132, - 2132, 2138, 2133, 2130, 2126, 2133, 2128, 2137, 2124, 2134, - 2134, 2135, 2135, 2136, 2136, 2141, 2129, 2139, 2140, 2142, - 2141, 2138, 2137, 2139, 2140, 2142, 2143, 2145, 2146, 2146, - 2148, 2150, 2145, 2148, 2149, 2143, 2151, 2151, 2149, 2153, - 2154, 2155, 2162, 2150, 2156, 2156, 2155, 2157, 2158, 2159, - 2164, 2153, 2154, 2158, 2159, 2160, 2157, 2163, 2160, 2161, - 2161, 2165, 2162, 2166, 2167, 2168, 2163, 2166, 2164, 2167, - 2169, 2168, 2170, 2171, 2175, 2172, 2176, 2177, 2174, 2174, - - 2165, 2170, 2178, 2179, 2179, 2176, 2177, 2180, 2169, 2172, - 2174, 2171, 2175, 2181, 2182, 2183, 2180, 2184, 2187, 2187, - 2183, 2189, 2178, 2190, 2189, 2181, 2191, 2192, 2196, 2194, - 2184, 2195, 2197, 2200, 2196, 2182, 2198, 2198, 2199, 2190, - 2199, 2201, 2191, 2192, 2194, 2195, 2203, 2200, 2208, 2197, - 2202, 2202, 2205, 2205, 2203, 2206, 2206, 2209, 2210, 2201, - 2211, 2212, 2213, 2209, 2210, 2214, 2215, 2215, 2212, 2216, - 2216, 2208, 2217, 2222, 2211, 2218, 2219, 2220, 2216, 2221, - 2223, 2224, 2226, 2229, 2213, 2214, 2230, 2218, 2219, 2223, - 2231, 2221, 2220, 2217, 2233, 2225, 2224, 2232, 2232, 2222, - - 2225, 2225, 2231, 2229, 2227, 2226, 2227, 2227, 2234, 2230, - 2227, 2235, 2233, 2236, 2235, 2237, 2239, 2240, 2236, 2240, - 2241, 2239, 2242, 2227, 2243, 2246, 2248, 2242, 2234, 2250, - 2249, 2243, 2252, 2253, 2246, 2237, 2255, 2254, 2241, 2249, - 2251, 2250, 2251, 2254, 2248, 2257, 2258, 2257, 2259, 2259, - 2260, 2252, 2261, 2253, 2266, 2267, 2255, 2261, 2264, 2262, - 2258, 2262, 2265, 2264, 2268, 2269, 2271, 2265, 2272, 2270, - 2274, 2269, 2266, 2267, 2270, 2276, 2260, 2273, 2274, 2271, - 2272, 2277, 2273, 2273, 2268, 2278, 2279, 2279, 2280, 2280, - 2281, 2282, 2283, 2284, 2276, 2277, 2287, 2278, 2285, 2284, - - 2286, 2281, 2286, 2285, 2288, 2289, 2282, 2290, 2290, 2296, - 2288, 2291, 2283, 2289, 2287, 2292, 2292, 2293, 2293, 2294, - 2295, 2289, 2298, 2291, 2299, 2295, 2298, 2296, 2294, 2300, - 2301, 2300, 2302, 2299, 2303, 2304, 2299, 2302, 2302, 0, - 2305, 2307, 2309, 2308, 2304, 2310, 2303, 2309, 2312, 2313, - 2310, 2301, 2305, 2314, 2307, 2308, 2316, 2313, 2315, 2315, - 2317, 2312, 2314, 2318, 2319, 2320, 2323, 2325, 2321, 2313, - 2322, 2323, 2326, 2327, 2316, 0, 2331, 2337, 2317, 2325, - 2319, 2318, 2321, 2328, 2326, 2322, 2329, 2330, 2328, 2334, - 2320, 2329, 2336, 2327, 2331, 2334, 2330, 2338, 2336, 2339, - - 2337, 2340, 2341, 2342, 2342, 2343, 2344, 2344, 2334, 2345, - 2346, 2341, 2338, 2348, 2343, 2347, 2351, 2339, 2348, 2347, - 2349, 2353, 2352, 2363, 2360, 2354, 2340, 2345, 2352, 2346, - 2354, 2354, 2355, 2349, 2356, 2351, 2357, 2359, 2355, 2357, - 2356, 2363, 2366, 2353, 2360, 2359, 2364, 2364, 2365, 2365, - 2369, 2366, 2367, 2367, 2368, 2368, 2373, 2370, 2372, 2381, - 2374, 2383, 2369, 2365, 2372, 2374, 2375, 2375, 2376, 2376, - 2378, 2373, 2377, 2385, 2365, 2370, 2378, 2377, 2380, 2381, - 2382, 2383, 2380, 2386, 2382, 2387, 2388, 2389, 2386, 2390, - 2391, 2392, 2389, 2394, 2393, 2395, 2395, 2397, 2385, 2393, - - 2396, 2388, 2399, 2400, 2396, 2398, 2391, 2390, 2387, 2401, - 2398, 2392, 2397, 2402, 2403, 2394, 2404, 2405, 2406, 2410, - 2399, 2404, 2407, 2407, 2409, 2402, 2411, 2401, 2412, 2400, - 2405, 2413, 2409, 2403, 2414, 2422, 2406, 2415, 2410, 2416, - 2417, 2418, 2419, 2420, 2424, 2411, 2428, 2412, 2419, 2420, - 2422, 2425, 2417, 2426, 2413, 2433, 2415, 2424, 2414, 2426, - 2416, 2427, 2418, 2427, 2430, 2425, 2428, 2429, 2429, 2430, - 2431, 2432, 2434, 2431, 2435, 2436, 2436, 2437, 2437, 2433, - 2438, 2440, 2438, 2441, 2432, 0, 2434, 2435, 2439, 2439, - 2442, 2443, 2443, 2445, 2445, 2443, 2440, 2447, 2441, 2446, - - 2446, 2448, 2448, 2442, 2449, 2450, 2450, 2451, 2451, 2452, - 2454, 2455, 2447, 2449, 2452, 2454, 2449, 2456, 2457, 2458, - 2458, 2459, 2459, 2460, 2461, 2461, 2462, 2463, 2463, 2465, - 2457, 2455, 2464, 2474, 2465, 2466, 2466, 2456, 2467, 2467, - 2468, 2469, 2460, 2471, 2462, 2470, 2470, 2464, 2472, 2472, - 2469, 2473, 2474, 2476, 2468, 2477, 2477, 2478, 2476, 2480, - 2471, 2479, 2479, 2481, 2482, 2473, 2483, 2486, 2481, 2483, - 2482, 2484, 2484, 2485, 2485, 2487, 2478, 2480, 2488, 2490, - 2488, 2491, 2492, 2492, 2495, 2493, 2486, 2484, 2496, 2497, - 2487, 2493, 2498, 2499, 2490, 2500, 2500, 2499, 2501, 2504, - - 2491, 2502, 2508, 2496, 2495, 2503, 2502, 2498, 2511, 2503, - 2505, 2505, 2497, 2509, 2504, 2507, 2507, 2501, 2510, 2512, - 2509, 2513, 2508, 2514, 2516, 2505, 2511, 2515, 2515, 2517, - 2521, 2517, 2510, 2516, 2520, 2518, 2513, 2512, 2518, 2522, - 2520, 2523, 2521, 2524, 2522, 2525, 2523, 2526, 2524, 2514, - 2527, 2529, 2528, 2518, 2530, 2518, 2529, 2532, 2533, 2534, - 2526, 2528, 2532, 2533, 2534, 2538, 2535, 2536, 2537, 2539, - 2525, 2527, 2540, 2536, 2537, 2543, 2544, 2541, 2540, 2546, - 2530, 2535, 2541, 2542, 2539, 2547, 2538, 2545, 2542, 2544, - 2545, 2551, 2548, 2549, 2547, 2550, 2556, 2552, 2558, 2546, - - 2543, 2548, 2549, 2552, 2550, 2551, 2553, 2554, 2559, 2560, - 2560, 2554, 2553, 2561, 2562, 2562, 2556, 2559, 2558, 2561, - 2563, 2564, 2564, 2562, 2566, 2565, 2568, 2569, 2572, 2563, - 2565, 2570, 2570, 2571, 2573, 2575, 2576, 2572, 2577, 2573, - 2582, 2653, 2568, 2569, 2566, 2578, 2566, 2575, 2571, 2583, - 2581, 2580, 2576, 2577, 2580, 2581, 2653, 2578, 2584, 2584, - 2582, 2583, 2585, 2585, 2586, 2586, 2588, 2588, 2589, 2590, - 2591, 2589, 2592, 2593, 2590, 2595, 2591, 2598, 2592, 2594, - 2594, 2597, 2593, 2596, 2596, 2599, 2600, 2600, 2601, 2595, - 2603, 2598, 2602, 2597, 2601, 2603, 2605, 2612, 2606, 2610, - - 2605, 2606, 2607, 2607, 2599, 2608, 2602, 2609, 2610, 2611, - 2608, 2613, 2609, 2614, 2614, 2613, 2615, 2612, 2611, 2617, - 2618, 2619, 2620, 2621, 2617, 2623, 2622, 2624, 2625, 2615, - 2622, 2629, 2624, 2626, 2625, 2627, 2627, 2621, 2630, 2626, - 2618, 2619, 2620, 2628, 2628, 2623, 2631, 2632, 2633, 2629, - 2634, 2634, 2632, 2638, 2636, 2637, 2639, 2630, 2638, 0, - 2641, 2640, 2639, 2646, 2644, 2631, 2636, 2640, 2641, 2633, - 2642, 2637, 2642, 2644, 2647, 2648, 2648, 2646, 2649, 2650, - 2650, 2649, 2652, 2654, 2655, 2652, 2654, 2659, 2647, 2656, - 2656, 2659, 2660, 2661, 2662, 2662, 2668, 2663, 2660, 2666, - - 2666, 2670, 2671, 2674, 2675, 2661, 2663, 2676, 2674, 2686, - 2655, 2677, 2679, 0, 2668, 2670, 2680, 2679, 2671, 2681, - 2681, 2680, 2683, 2683, 2688, 2676, 2689, 2685, 2692, 2686, - 2675, 2690, 2677, 2685, 2687, 2687, 2690, 2694, 2693, 2695, - 2688, 2693, 2696, 2696, 2698, 2699, 2700, 2692, 2689, 2694, - 2701, 2695, 2700, 2702, 2699, 2703, 2701, 2705, 2705, 2706, - 2698, 2707, 2706, 2707, 2708, 2709, 2712, 2712, 2710, 2714, - 2703, 2702, 2713, 2713, 2714, 2715, 2717, 2718, 2716, 2719, - 2720, 2719, 2718, 2708, 2709, 2709, 2710, 2716, 2721, 2717, - 2723, 2722, 2724, 2715, 2720, 2723, 2725, 2727, 2727, 2726, - - 2728, 2732, 2721, 2722, 2726, 2729, 2729, 2730, 2730, 2731, - 2731, 2734, 2724, 2732, 2743, 2728, 2725, 2733, 2735, 2733, - 2736, 2736, 2739, 2735, 2737, 2737, 2738, 2738, 2740, 2734, - 2741, 2742, 0, 2744, 2739, 2743, 2745, 2745, 2746, 2747, - 2747, 2749, 2741, 2748, 2748, 2750, 2750, 2751, 2740, 2744, - 2753, 2742, 2749, 2752, 2754, 2756, 2755, 2746, 2757, 2751, - 2752, 2755, 2753, 2758, 2758, 2760, 2760, 2759, 2761, 2762, - 2763, 2764, 2765, 2768, 2754, 2756, 2759, 2766, 2757, 2767, - 2774, 2767, 2770, 2763, 2775, 2768, 2765, 2769, 2769, 2762, - 2771, 2770, 2772, 2777, 2761, 2764, 2776, 2776, 2774, 2766, - - 2778, 2779, 0, 2778, 2780, 2771, 2775, 2772, 2781, 2780, - 2782, 2782, 2790, 2781, 2791, 2779, 2777, 2783, 2783, 2784, - 2784, 2787, 2787, 2789, 2789, 2791, 2792, 2793, 2795, 2796, - 2790, 2797, 2798, 2803, 2799, 2800, 2801, 2802, 2801, 2819, - 2804, 2810, 2793, 2799, 0, 2792, 2819, 2796, 2795, 2805, - 2805, 2803, 2798, 2797, 2809, 2800, 2807, 2802, 2804, 2816, - 2807, 2808, 2808, 2810, 2811, 2812, 2812, 2814, 2809, 2815, - 2815, 2817, 2818, 2811, 2821, 2823, 2814, 2816, 2820, 2822, - 2824, 2825, 2827, 2827, 2829, 2825, 0, 2826, 2830, 2817, - 2818, 2823, 2821, 2820, 2826, 2828, 2828, 2822, 2836, 2824, - - 2837, 2831, 2833, 2833, 2829, 2835, 2830, 2831, 2834, 2834, - 2838, 2835, 2839, 2840, 2841, 2843, 2836, 2844, 2837, 2841, - 2842, 2842, 2845, 2846, 2848, 2838, 0, 2840, 2847, 2855, - 2850, 2839, 2850, 2849, 2846, 2843, 2858, 2844, 2849, 2847, - 2851, 2851, 2845, 2852, 2848, 2852, 2853, 2853, 2855, 2857, - 2859, 2860, 2861, 2862, 2863, 2858, 2864, 2861, 2857, 2863, - 2865, 2868, 2859, 2870, 2869, 2872, 2870, 2871, 2871, 2873, - 2876, 2860, 2875, 2862, 2874, 2874, 2864, 2879, 2880, 2865, - 2872, 2868, 2869, 2875, 2877, 2876, 2882, 2873, 2877, 2881, - 2882, 2884, 2879, 2880, 2886, 2881, 2883, 2883, 2887, 2887, - - 2888, 2894, 2889, 2890, 2884, 2891, 2892, 2892, 2895, 2886, - 2896, 2890, 2899, 2894, 2896, 2897, 2897, 2895, 2898, 2898, - 2888, 2889, 2900, 2900, 2901, 2891, 2902, 2903, 2904, 2901, - 2905, 2899, 2906, 2906, 2908, 2902, 2912, 2912, 2913, 2914, - 2904, 2915, 2915, 2903, 2916, 2917, 2918, 2913, 2922, 2922, - 2905, 2919, 2923, 2920, 2921, 2908, 2924, 2916, 2917, 2918, - 2919, 2914, 2920, 2921, 2926, 2926, 2932, 2935, 2929, 2931, - 2933, 2924, 2923, 2929, 2931, 2933, 2934, 2937, 2936, 2939, - 2932, 2943, 2947, 2941, 2934, 2937, 2935, 2936, 2941, 2951, - 2942, 2944, 2944, 2949, 2939, 2942, 2943, 2945, 2945, 2946, - - 2949, 2947, 2948, 2948, 2946, 2950, 2952, 2951, 2953, 0, - 2950, 2954, 2956, 2956, 2953, 2957, 2954, 2958, 2959, 2959, - 2960, 2960, 2958, 2963, 2952, 2964, 2964, 2966, 2965, 2967, - 2957, 2965, 2966, 2966, 2967, 2968, 2963, 2969, 2970, 2971, - 2968, 2972, 2974, 2971, 2970, 2973, 2972, 2975, 2976, 2980, - 2977, 2969, 2978, 2983, 2973, 2975, 2977, 2974, 2978, 2979, - 2983, 2980, 2981, 2981, 2979, 2984, 2987, 2989, 2985, 2976, - 2984, 2985, 2989, 2992, 2990, 2991, 2993, 2994, 2987, 2990, - 2991, 2995, 2996, 2996, 2997, 3002, 2994, 3007, 2998, 2993, - 2995, 2992, 2998, 2997, 2999, 3003, 3004, 3008, 3009, 2999, - - 3010, 3003, 3004, 3002, 3011, 3011, 3007, 3012, 3013, 3017, - 3017, 3015, 3016, 3018, 3012, 3019, 3020, 3008, 3009, 3010, - 3015, 3016, 3021, 3021, 3019, 3022, 3024, 3013, 3018, 3026, - 3027, 3020, 3028, 3028, 3027, 3029, 3030, 3031, 3032, 3034, - 3033, 3024, 3030, 3031, 3022, 3034, 3035, 3035, 3036, 3026, - 3037, 3041, 3040, 3046, 3038, 3049, 3036, 3032, 3033, 3038, - 3029, 3040, 3043, 3044, 3041, 3045, 3044, 3047, 3043, 3045, - 3049, 3046, 3048, 3048, 3052, 3037, 3051, 3051, 3054, 3054, - 3055, 3047, 3056, 3056, 3057, 3057, 3059, 3059, 3062, 3060, - 3061, 3066, 3052, 3060, 3068, 3061, 3067, 3062, 3064, 3064, - - 3070, 3067, 3069, 3055, 3072, 3073, 3068, 3069, 3069, 3074, - 0, 3066, 3070, 3075, 3075, 3077, 3077, 3078, 3078, 3079, - 3079, 3081, 3082, 3080, 3072, 3073, 3080, 3084, 3084, 3074, - 3085, 3087, 3088, 3088, 3081, 3082, 3089, 3089, 3090, 3090, - 3091, 3092, 3092, 3093, 3094, 3095, 3096, 3105, 3085, 3097, - 3097, 3087, 3096, 3098, 3101, 3091, 3093, 3098, 3102, 3095, - 3101, 3104, 3094, 3102, 3106, 3107, 3104, 3104, 3108, 3109, - 3105, 3110, 3111, 3120, 3108, 3109, 3111, 3112, 3112, 3117, - 3118, 3115, 3123, 3118, 3106, 3107, 3115, 3117, 3121, 3122, - 3122, 3121, 3124, 3125, 3126, 3127, 3110, 3124, 3120, 3123, - - 3123, 3128, 3128, 3129, 3130, 3131, 3132, 3130, 3133, 3127, - 3137, 3125, 3138, 3138, 3126, 3130, 3133, 3129, 3135, 3131, - 3147, 3136, 3146, 3135, 3135, 3132, 3136, 3136, 3144, 3137, - 3139, 3139, 3140, 3140, 3141, 3141, 3142, 3142, 3143, 3143, - 3145, 3148, 3146, 3149, 3144, 3145, 3147, 3150, 3151, 3152, - 3148, 3153, 3150, 3154, 3152, 3155, 3156, 3149, 3158, 3158, - 3153, 3159, 3159, 3160, 3161, 3163, 3160, 3151, 3162, 3162, - 3165, 3163, 3164, 3154, 0, 3155, 3156, 3164, 3168, 3161, - 3167, 3167, 3169, 3169, 3170, 3168, 3172, 3172, 3165, 3170, - 3173, 3174, 3175, 3175, 3176, 3177, 3179, 3180, 3180, 3173, - - 3174, 3181, 3181, 3176, 3177, 3182, 3183, 3184, 3185, 3182, - 3186, 3187, 3188, 3191, 3179, 3183, 3190, 3188, 3188, 3185, - 3192, 3194, 3191, 3198, 3192, 3186, 3184, 3200, 3198, 3190, - 3203, 3187, 3199, 3199, 3202, 3202, 3194, 3204, 3205, 3207, - 3207, 3200, 3208, 3208, 3203, 3209, 3210, 3211, 3215, 3217, - 3216, 3219, 3210, 3222, 3209, 3216, 3205, 3220, 3217, 3211, - 3224, 3226, 3204, 3220, 3227, 3222, 3226, 3228, 3228, 3227, - 3229, 3219, 3231, 3215, 3232, 3233, 3240, 3231, 0, 3229, - 3241, 3224, 3234, 3234, 3236, 3236, 3234, 3232, 3239, 3233, - 3237, 3237, 3238, 3238, 3248, 3242, 3240, 3239, 3244, 3241, - - 3242, 3245, 3246, 3249, 3244, 3250, 3245, 3246, 3247, 3247, - 3252, 3251, 3248, 3253, 3254, 3249, 3251, 3255, 3255, 3253, - 3257, 3261, 3258, 3262, 3257, 3259, 3250, 3258, 3252, 3263, - 3259, 3260, 3260, 3265, 3267, 3267, 3269, 3270, 3262, 3254, - 3261, 3271, 3272, 3273, 3263, 3274, 3272, 3275, 3276, 3269, - 3270, 3278, 3273, 3265, 3271, 3277, 3276, 3279, 3280, 3280, - 3277, 3274, 3282, 3281, 3283, 3286, 3275, 3284, 3284, 3285, - 3285, 3278, 3281, 3289, 3290, 3292, 3296, 3279, 3289, 3289, - 3282, 3292, 3293, 3293, 3286, 3294, 3294, 3300, 3290, 3301, - 3283, 3298, 3298, 3303, 3304, 3305, 3309, 3296, 3303, 3310, - - 3305, 3308, 3308, 3300, 3312, 3301, 3311, 3314, 3310, 3317, - 3304, 3318, 3311, 3313, 3313, 3319, 3309, 3316, 3316, 3320, - 3320, 3324, 3322, 3317, 3326, 3325, 3314, 3312, 3322, 3326, - 3318, 3325, 3329, 3319, 3330, 3331, 3331, 3332, 3332, 3334, - 3333, 3324, 3335, 3335, 3337, 3336, 3338, 3359, 3340, 3341, - 3342, 3339, 3359, 3337, 3329, 3333, 3336, 3339, 3344, 3334, - 3330, 3341, 3335, 3343, 3343, 3345, 3338, 3340, 3345, 3346, - 3342, 3351, 3346, 3344, 3347, 3347, 3352, 3357, 3353, 3354, - 3354, 3356, 3355, 3351, 3353, 3355, 3361, 3356, 3360, 3360, - 3362, 3361, 3363, 3364, 3367, 3357, 3352, 3368, 3363, 3365, - - 3365, 3369, 3372, 3370, 3371, 3371, 3367, 3373, 3374, 3362, - 3364, 3364, 3376, 3376, 3380, 3368, 3370, 3374, 3377, 3377, - 0, 3372, 3379, 3373, 3378, 3378, 3369, 3379, 3380, 3381, - 3382, 3382, 3383, 3383, 3381, 3384, 3384, 3385, 3386, 3386, - 3387, 3388, 3389, 3394, 3390, 3400, 3385, 3402, 3389, 3390, - 3393, 3393, 3403, 3387, 3396, 3396, 3397, 3397, 3404, 3394, - 3405, 3406, 3406, 3409, 3400, 3408, 3408, 3388, 3410, 3402, - 3411, 3413, 3414, 3421, 3403, 3415, 3415, 3404, 3416, 3416, - 3419, 3414, 3405, 3422, 3411, 3427, 3417, 3410, 3420, 3409, - 3417, 3413, 3423, 3421, 3420, 3424, 3431, 3423, 3419, 3432, - - 3424, 3431, 3422, 3428, 3428, 3433, 3427, 3430, 3430, 3434, - 3435, 3433, 3437, 3432, 3436, 3436, 3439, 3437, 3435, 3440, - 3439, 3434, 3441, 3442, 3440, 3443, 3444, 3445, 3447, 3448, - 3443, 3449, 3450, 3445, 3453, 3452, 3447, 3454, 3444, 3455, - 3456, 3458, 3441, 3442, 3459, 3456, 3458, 3463, 3448, 0, - 3453, 3449, 3450, 3452, 3454, 3454, 3460, 3465, 3461, 0, - 3455, 3475, 3460, 3461, 3459, 3464, 3495, 3463, 3464, 3479, - 3465, 3469, 3469, 3470, 3470, 3471, 3475, 3477, 3477, 3471, - 3478, 3480, 3480, 3482, 3495, 3478, 3485, 3485, 3479, 3486, - 3486, 3490, 3486, 3487, 3487, 3490, 3487, 3493, 3482, 3488, - - 3488, 3489, 3489, 3492, 3489, 3496, 3493, 3501, 3492, 3494, - 3494, 3499, 3499, 3500, 3500, 3502, 3503, 3504, 3504, 3496, - 3505, 3503, 3506, 3509, 3510, 3511, 3513, 3501, 3512, 3511, - 3584, 3510, 3515, 3584, 3516, 3502, 3518, 3512, 3505, 3516, - 3522, 3513, 3506, 3517, 3517, 3518, 3519, 3519, 3509, 3527, - 3515, 3520, 3520, 3521, 3521, 3522, 3523, 3524, 3525, 3526, - 3528, 3523, 3529, 3525, 3525, 3526, 3524, 3530, 3531, 3524, - 3532, 0, 3530, 3531, 3527, 3528, 3533, 3533, 3534, 3535, - 3536, 3536, 3538, 3529, 3534, 3535, 3537, 3537, 3539, 3532, - 3542, 3542, 3543, 3539, 3545, 3545, 3546, 3538, 3548, 3550, - - 3550, 3551, 3551, 3552, 3552, 3546, 3543, 3553, 3553, 3555, - 3555, 3556, 3556, 3557, 3557, 3559, 3548, 3558, 3558, 3561, - 3562, 3562, 3564, 3564, 3565, 3566, 3567, 3569, 3561, 3570, - 3570, 3571, 3573, 3565, 3572, 3572, 3574, 3566, 3585, 3575, - 3579, 3559, 3569, 3576, 3576, 3583, 3567, 3573, 3587, 3574, - 3571, 3575, 3577, 3577, 3590, 3579, 3580, 3580, 3586, 3586, - 3590, 3591, 3589, 3583, 3585, 3589, 3587, 3592, 3593, 3595, - 3594, 3597, 3592, 3598, 3601, 3591, 3602, 3597, 3601, 3604, - 3604, 3606, 3598, 3607, 3616, 3595, 3620, 3593, 3594, 3616, - 3617, 3602, 3627, 3617, 3621, 3621, 3622, 3622, 3630, 3620, - - 3623, 3623, 3628, 3607, 3625, 3625, 3629, 3606, 3632, 3634, - 3629, 3628, 3635, 3638, 3636, 3627, 3639, 3639, 3630, 3636, - 3640, 3641, 3632, 3635, 3637, 3642, 3637, 3644, 3638, 3643, - 3646, 3645, 3634, 3640, 3649, 3647, 3648, 3650, 3652, 3646, - 3641, 3648, 3654, 3642, 3660, 3643, 3645, 3647, 3651, 3650, - 3653, 3653, 3644, 3651, 3655, 3649, 3661, 3652, 3660, 3655, - 3662, 3662, 3654, 3663, 3664, 3664, 3665, 3665, 3666, 3666, - 3667, 3667, 3663, 3668, 3669, 3670, 3661, 3671, 3670, 3672, - 3673, 3674, 3671, 3675, 3672, 3676, 3677, 3680, 3678, 3675, - 3679, 3679, 3668, 3678, 3669, 3687, 3674, 3686, 3677, 3676, - - 3681, 3681, 3682, 3682, 3690, 3673, 3692, 3680, 3683, 3683, - 3685, 3685, 3686, 3698, 3687, 3688, 3688, 3695, 3695, 3690, - 3696, 3696, 3697, 3699, 3692, 3700, 3701, 3703, 3702, 3699, - 3697, 3700, 3698, 3704, 3705, 3705, 3707, 3707, 3704, 3712, - 3701, 3702, 3713, 3715, 3716, 3718, 3703, 3719, 3716, 3720, - 3721, 3722, 3719, 3723, 3724, 3729, 3725, 3715, 3730, 3724, - 3712, 3725, 3713, 3721, 3722, 3718, 3726, 3726, 3720, 3731, - 3732, 3732, 3723, 3733, 3734, 3729, 3730, 3739, 3733, 3736, - 3734, 3735, 3735, 3740, 3736, 3737, 3738, 3747, 3731, 3740, - 3737, 3738, 3742, 3742, 3743, 3748, 3739, 3744, 3744, 3743, - - 3746, 3749, 3748, 3750, 3746, 3751, 3747, 3752, 3753, 3755, - 3755, 3751, 3757, 3757, 3759, 3758, 3760, 3761, 3762, 3759, - 3749, 3753, 3750, 3767, 3758, 3764, 3752, 3758, 3763, 3763, - 3764, 3762, 3765, 3768, 3768, 3760, 3761, 3769, 3770, 3770, - 3771, 3771, 3772, 3773, 3774, 3765, 3781, 3772, 3776, 3767, - 3773, 3775, 3775, 3776, 3779, 3777, 3769, 3777, 3778, 3778, - 3780, 3779, 3783, 3774, 3782, 3781, 3786, 3780, 3788, 3782, - 3785, 3785, 3789, 3788, 3790, 3791, 3795, 3789, 3792, 3792, - 3796, 3783, 3794, 3794, 3799, 3786, 3797, 3797, 3798, 3798, - 3809, 3799, 3810, 3790, 3791, 3795, 3801, 3801, 3803, 3796, - - 3802, 3802, 3805, 3808, 0, 3803, 0, 3805, 3808, 3809, - 0, 3810, 3811, 3811, 3812, 3812, 3816, 3816, 3816, 3816, - 3816, 3816, 3816, 3817, 3817, 3817, 3817, 3817, 3817, 3817, - 3818, 3818, 3818, 3818, 3818, 3818, 3818, 3819, 3819, 3819, - 3819, 3819, 3819, 3819, 3820, 3820, 3820, 3820, 3820, 3820, - 3820, 3821, 3821, 3821, 3821, 3821, 3821, 3821, 3822, 3822, - 3822, 3822, 3822, 3822, 3822, 3824, 3824, 0, 3824, 3824, - 3824, 3824, 3825, 3825, 0, 0, 0, 3825, 3825, 3826, - 3826, 0, 0, 3826, 0, 3826, 3827, 0, 0, 0, - 0, 0, 3827, 3828, 3828, 0, 0, 0, 3828, 3828, - - 3829, 0, 0, 0, 0, 0, 3829, 3830, 3830, 0, - 3830, 3830, 3830, 3830, 3831, 0, 0, 0, 0, 0, - 3831, 3832, 3832, 0, 0, 0, 3832, 3832, 3833, 3833, - 0, 3833, 3833, 3833, 3833, 3815, 3815, 3815, 3815, 3815, - 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, - 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, - 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, 3815, - 3815, 3815, 3815, 3815, 3815, 3815 + 25, 27, 131, 25, 25, 27, 31, 25, 27, 32, + 30, 47, 25, 32, 25, 131, 32, 31, 40, 45, + 45, 25, 28, 32, 45, 32, 47, 28, 45, 36, + 36, 28, 40, 97, 28, 44, 28, 28, 36, 44, + 37, 37, 52, 52, 36, 37, 96, 28, 36, 44, + + 41, 41, 97, 44, 44, 41, 74, 57, 96, 37, + 57, 37, 39, 39, 42, 41, 41, 39, 41, 42, + 74, 39, 42, 43, 43, 93, 43, 39, 93, 42, + 39, 68, 68, 42, 42, 43, 186, 39, 85, 85, + 63, 43, 63, 63, 71, 63, 71, 71, 73, 71, + 73, 73, 80, 73, 80, 80, 71, 80, 87, 186, + 87, 87, 88, 87, 98, 90, 88, 90, 90, 87, + 90, 94, 95, 102, 103, 94, 90, 90, 99, 95, + 100, 99, 102, 100, 98, 104, 105, 106, 103, 103, + 111, 104, 107, 109, 108, 116, 100, 104, 110, 104, + + 108, 113, 114, 110, 105, 105, 112, 109, 1212, 106, + 111, 107, 110, 108, 118, 116, 117, 112, 112, 113, + 114, 117, 115, 120, 119, 112, 115, 119, 118, 120, + 119, 121, 122, 123, 124, 125, 123, 122, 126, 127, + 123, 128, 126, 119, 119, 129, 127, 132, 120, 125, + 121, 130, 129, 124, 128, 133, 123, 122, 124, 133, + 130, 128, 134, 136, 135, 138, 140, 132, 135, 137, + 139, 139, 142, 143, 137, 141, 144, 146, 137, 141, + 134, 136, 151, 153, 137, 138, 140, 142, 141, 145, + 146, 147, 145, 148, 141, 144, 152, 147, 151, 143, + + 147, 149, 149, 145, 153, 148, 150, 145, 156, 154, + 155, 157, 155, 150, 158, 152, 157, 159, 160, 149, + 156, 155, 149, 160, 150, 154, 158, 161, 162, 164, + 164, 166, 182, 155, 166, 159, 161, 182, 168, 180, + 168, 168, 162, 168, 171, 171, 173, 184, 173, 173, + 174, 173, 174, 174, 176, 174, 178, 176, 178, 178, + 183, 178, 174, 181, 181, 184, 183, 185, 187, 188, + 189, 190, 191, 193, 192, 183, 187, 194, 189, 192, + 188, 197, 185, 187, 206, 195, 198, 191, 194, 196, + 190, 198, 179, 193, 195, 196, 196, 199, 199, 200, + + 199, 204, 201, 206, 201, 200, 197, 201, 202, 203, + 203, 207, 202, 204, 205, 209, 207, 202, 208, 205, + 205, 210, 202, 208, 201, 211, 212, 209, 202, 202, + 212, 211, 213, 214, 215, 216, 177, 213, 218, 219, + 217, 210, 220, 224, 219, 223, 222, 220, 215, 214, + 216, 222, 217, 229, 211, 217, 218, 221, 221, 224, + 225, 221, 232, 221, 227, 223, 225, 226, 226, 235, + 227, 235, 228, 229, 230, 221, 227, 221, 228, 231, + 230, 233, 236, 232, 234, 231, 237, 233, 236, 234, + 237, 238, 240, 239, 231, 239, 241, 238, 240, 242, + + 239, 243, 244, 245, 246, 242, 247, 248, 244, 241, + 249, 251, 253, 250, 247, 249, 245, 252, 254, 256, + 248, 243, 250, 254, 254, 245, 251, 257, 246, 255, + 258, 257, 253, 252, 255, 259, 260, 256, 261, 262, + 263, 259, 264, 266, 265, 262, 265, 264, 270, 261, + 267, 273, 258, 268, 260, 260, 272, 267, 269, 268, + 263, 279, 266, 271, 269, 273, 280, 270, 272, 271, + 274, 274, 275, 275, 276, 277, 278, 281, 278, 282, + 276, 277, 281, 283, 279, 284, 280, 285, 287, 286, + 289, 282, 288, 284, 286, 278, 289, 288, 276, 290, + + 294, 291, 283, 292, 293, 290, 291, 285, 292, 295, + 293, 287, 296, 297, 298, 294, 299, 300, 302, 301, + 172, 302, 297, 295, 299, 301, 307, 303, 298, 303, + 296, 304, 304, 305, 305, 306, 308, 308, 306, 309, + 309, 310, 300, 331, 307, 311, 311, 312, 313, 314, + 312, 316, 313, 315, 319, 318, 331, 310, 314, 320, + 311, 318, 315, 322, 321, 320, 321, 323, 319, 322, + 316, 323, 324, 324, 325, 326, 327, 328, 329, 325, + 334, 326, 327, 330, 332, 332, 333, 335, 323, 333, + 336, 335, 337, 338, 338, 339, 329, 328, 334, 340, + + 341, 327, 340, 343, 330, 342, 343, 346, 344, 336, + 337, 342, 341, 339, 347, 350, 346, 348, 350, 340, + 344, 345, 348, 351, 353, 345, 353, 353, 434, 354, + 345, 352, 347, 345, 354, 354, 351, 358, 345, 345, + 345, 345, 349, 352, 434, 349, 355, 349, 356, 355, + 359, 356, 357, 357, 358, 360, 361, 358, 362, 349, + 349, 349, 363, 349, 368, 359, 369, 362, 364, 364, + 360, 363, 365, 361, 361, 366, 366, 365, 367, 367, + 370, 369, 371, 372, 373, 370, 374, 375, 378, 368, + 409, 387, 379, 375, 371, 376, 376, 379, 376, 380, + + 387, 374, 372, 384, 373, 380, 381, 376, 378, 409, + 382, 381, 170, 383, 376, 382, 383, 384, 383, 385, + 386, 382, 389, 386, 394, 385, 388, 388, 389, 390, + 390, 395, 391, 396, 395, 397, 386, 391, 408, 386, + 398, 386, 392, 392, 394, 392, 464, 401, 396, 464, + 397, 392, 395, 400, 398, 392, 400, 404, 403, 408, + 392, 401, 406, 392, 393, 393, 404, 393, 406, 405, + 411, 407, 400, 403, 405, 405, 412, 407, 410, 411, + 393, 414, 415, 393, 407, 393, 413, 393, 402, 416, + 402, 402, 413, 410, 420, 412, 417, 169, 421, 414, + + 402, 402, 402, 402, 402, 418, 422, 402, 415, 416, + 417, 418, 419, 425, 420, 418, 426, 419, 421, 423, + 424, 422, 426, 428, 423, 424, 427, 427, 425, 429, + 430, 431, 432, 433, 435, 419, 437, 438, 432, 435, + 441, 429, 468, 428, 439, 431, 436, 436, 430, 436, + 440, 442, 448, 442, 441, 468, 437, 438, 433, 443, + 439, 447, 447, 449, 443, 444, 440, 444, 444, 445, + 446, 448, 450, 445, 446, 451, 452, 457, 449, 461, + 455, 485, 457, 453, 485, 444, 455, 456, 450, 446, + 452, 453, 453, 451, 458, 459, 456, 466, 458, 471, + + 461, 460, 462, 453, 459, 453, 454, 460, 462, 463, + 465, 454, 471, 463, 475, 465, 167, 466, 475, 454, + 454, 467, 467, 454, 454, 469, 469, 454, 470, 472, + 472, 473, 476, 470, 474, 477, 478, 473, 479, 474, + 481, 478, 482, 479, 480, 480, 483, 476, 484, 486, + 487, 490, 481, 480, 488, 487, 477, 489, 493, 488, + 484, 489, 482, 490, 483, 491, 491, 492, 494, 494, + 486, 495, 492, 500, 497, 498, 498, 501, 502, 493, + 497, 503, 504, 505, 506, 501, 507, 509, 505, 512, + 503, 510, 511, 495, 500, 512, 513, 165, 507, 502, + + 514, 518, 515, 504, 506, 509, 514, 509, 516, 510, + 513, 515, 511, 517, 516, 518, 519, 520, 517, 521, + 520, 522, 523, 524, 519, 525, 528, 519, 527, 524, + 531, 523, 526, 521, 527, 526, 522, 529, 530, 532, + 528, 533, 529, 532, 534, 525, 535, 537, 536, 534, + 538, 531, 527, 536, 539, 542, 543, 544, 533, 551, + 530, 535, 545, 537, 546, 548, 545, 539, 547, 538, + 540, 540, 544, 547, 551, 542, 540, 543, 540, 553, + 552, 548, 163, 546, 540, 552, 540, 549, 550, 540, + 540, 549, 554, 550, 556, 553, 540, 550, 553, 557, + + 555, 554, 559, 560, 558, 552, 555, 558, 562, 556, + 565, 555, 561, 561, 564, 557, 563, 563, 568, 566, + 567, 567, 565, 560, 569, 559, 570, 571, 572, 564, + 573, 570, 574, 562, 566, 577, 571, 568, 574, 576, + 582, 583, 581, 584, 577, 573, 569, 572, 578, 579, + 580, 576, 578, 579, 581, 582, 580, 584, 585, 586, + 583, 587, 588, 589, 585, 590, 588, 590, 591, 592, + 593, 593, 594, 595, 586, 596, 589, 592, 594, 587, + 597, 596, 598, 600, 599, 595, 597, 599, 601, 603, + 602, 605, 591, 603, 598, 602, 604, 600, 606, 604, + + 605, 86, 608, 601, 609, 609, 607, 605, 610, 610, + 605, 607, 607, 612, 606, 608, 611, 617, 611, 612, + 613, 613, 614, 614, 615, 618, 616, 619, 622, 621, + 615, 616, 616, 620, 621, 617, 620, 623, 624, 619, + 626, 624, 627, 625, 629, 623, 618, 622, 625, 628, + 629, 630, 631, 628, 632, 633, 631, 635, 635, 634, + 633, 627, 636, 626, 637, 638, 640, 639, 641, 642, + 638, 630, 632, 634, 643, 642, 644, 636, 646, 643, + 648, 645, 640, 649, 645, 637, 639, 652, 641, 645, + 644, 653, 645, 645, 647, 647, 646, 650, 648, 649, + + 651, 652, 650, 655, 656, 651, 653, 657, 658, 655, + 657, 659, 658, 656, 660, 661, 662, 663, 661, 660, + 664, 662, 665, 666, 668, 673, 667, 669, 669, 665, + 659, 667, 670, 663, 658, 671, 666, 672, 664, 674, + 675, 670, 672, 676, 668, 677, 673, 680, 81, 678, + 680, 682, 676, 674, 671, 678, 675, 677, 679, 681, + 681, 685, 681, 683, 679, 684, 683, 682, 686, 687, + 684, 688, 689, 691, 690, 692, 688, 694, 691, 685, + 690, 692, 686, 687, 693, 695, 698, 693, 696, 697, + 695, 689, 699, 702, 697, 697, 700, 701, 703, 698, + + 705, 700, 694, 701, 696, 699, 704, 703, 700, 706, + 706, 704, 702, 711, 707, 700, 700, 708, 715, 709, + 705, 707, 709, 710, 708, 711, 712, 713, 716, 710, + 716, 712, 713, 713, 714, 714, 717, 709, 718, 719, + 718, 712, 723, 715, 720, 721, 722, 724, 725, 726, + 727, 728, 730, 726, 725, 717, 729, 731, 733, 727, + 719, 723, 720, 721, 722, 732, 728, 724, 732, 734, + 730, 729, 735, 733, 736, 734, 731, 732, 737, 738, + 739, 740, 741, 743, 742, 744, 741, 745, 736, 746, + 737, 747, 735, 749, 750, 750, 76, 753, 738, 743, + + 740, 739, 742, 744, 748, 745, 745, 749, 746, 748, + 747, 751, 752, 754, 755, 751, 753, 756, 757, 758, + 759, 763, 756, 760, 754, 766, 752, 761, 755, 762, + 760, 75, 761, 759, 757, 764, 762, 765, 758, 767, + 764, 768, 765, 766, 769, 763, 767, 770, 771, 772, + 768, 775, 779, 773, 775, 774, 770, 771, 769, 773, + 774, 772, 776, 777, 778, 780, 776, 779, 780, 781, + 782, 783, 783, 778, 785, 784, 784, 777, 787, 785, + 785, 786, 789, 781, 784, 791, 786, 787, 790, 792, + 794, 782, 793, 795, 790, 796, 793, 797, 799, 798, + + 800, 789, 794, 797, 791, 798, 799, 800, 801, 792, + 802, 803, 806, 796, 809, 810, 813, 809, 795, 69, + 816, 818, 814, 817, 819, 813, 801, 806, 814, 817, + 818, 803, 810, 820, 824, 802, 804, 820, 804, 823, + 819, 804, 816, 821, 821, 804, 822, 822, 804, 825, + 823, 826, 824, 827, 831, 804, 804, 829, 804, 827, + 830, 834, 832, 825, 833, 830, 835, 840, 833, 837, + 835, 826, 828, 828, 828, 831, 828, 829, 836, 828, + 832, 839, 838, 836, 828, 834, 835, 838, 837, 845, + 828, 828, 840, 828, 841, 842, 839, 841, 843, 64, + + 842, 842, 844, 844, 845, 843, 846, 847, 847, 848, + 849, 846, 850, 849, 848, 851, 851, 850, 852, 853, + 852, 854, 855, 856, 858, 857, 855, 859, 859, 861, + 860, 853, 858, 862, 863, 863, 864, 866, 865, 874, + 854, 868, 867, 856, 857, 860, 868, 862, 867, 861, + 865, 869, 869, 872, 864, 870, 873, 874, 872, 866, + 870, 870, 873, 875, 876, 877, 880, 878, 879, 880, + 881, 877, 878, 882, 879, 885, 881, 883, 883, 884, + 884, 882, 875, 886, 876, 887, 889, 888, 890, 891, + 889, 886, 888, 885, 892, 890, 893, 894, 894, 895, + + 898, 896, 899, 887, 897, 897, 898, 891, 895, 896, + 892, 900, 902, 903, 904, 893, 905, 907, 906, 911, + 899, 902, 903, 906, 908, 910, 907, 908, 909, 913, + 900, 905, 912, 909, 915, 916, 916, 917, 904, 910, + 914, 912, 913, 918, 911, 914, 914, 919, 915, 920, + 921, 924, 917, 924, 922, 926, 919, 922, 925, 925, + 928, 927, 918, 930, 929, 922, 927, 931, 921, 929, + 932, 933, 935, 920, 936, 934, 926, 938, 936, 937, + 939, 928, 942, 930, 934, 940, 939, 931, 941, 943, + 944, 933, 932, 945, 940, 935, 938, 937, 942, 945, + + 941, 946, 947, 950, 944, 948, 949, 949, 943, 946, + 948, 951, 952, 953, 955, 954, 947, 956, 957, 960, + 958, 952, 950, 954, 959, 960, 961, 962, 964, 963, + 965, 951, 961, 953, 955, 963, 969, 957, 59, 956, + 958, 962, 964, 966, 959, 967, 970, 972, 968, 966, + 965, 967, 968, 977, 971, 969, 973, 973, 970, 971, + 978, 974, 976, 975, 979, 976, 970, 974, 972, 975, + 979, 977, 980, 978, 981, 981, 982, 983, 984, 985, + 986, 987, 985, 984, 988, 986, 986, 990, 988, 992, + 983, 991, 980, 994, 982, 985, 987, 985, 989, 989, + + 993, 996, 997, 998, 992, 993, 998, 1000, 1001, 990, + 1002, 991, 994, 1004, 1005, 1005, 997, 998, 1004, 1006, + 1000, 1007, 1009, 1006, 1011, 996, 1008, 1008, 1001, 1010, + 1012, 1002, 1003, 1010, 1010, 1003, 1007, 1003, 1013, 1066, + 1015, 1003, 1066, 1003, 1011, 1012, 1014, 1009, 1003, 1017, + 1016, 1014, 1013, 1003, 1015, 1016, 1016, 1018, 1017, 1019, + 1022, 1020, 1021, 1019, 1023, 1024, 1026, 1021, 1027, 1023, + 58, 1018, 1022, 1025, 1025, 1019, 1020, 1021, 1029, 1024, + 1028, 1031, 1027, 1029, 1030, 1032, 1031, 1026, 1033, 1028, + 1030, 1032, 1034, 1034, 1033, 1035, 1036, 1037, 1038, 1041, + + 1035, 1042, 1036, 1039, 1043, 1047, 1042, 1046, 1044, 1045, + 1045, 1041, 1046, 1047, 1051, 1048, 1049, 1038, 1043, 1037, + 1044, 1039, 1040, 1040, 1050, 1052, 53, 1053, 1040, 1048, + 1040, 1054, 1049, 1051, 1055, 1056, 1040, 1054, 1050, 1055, + 1057, 1040, 1040, 1053, 1052, 1058, 1059, 1056, 1040, 1060, + 1061, 1061, 1062, 1063, 1065, 1067, 1062, 1068, 1057, 1069, + 1065, 1058, 1068, 1070, 1059, 1071, 1072, 1060, 1074, 1070, + 1071, 1075, 1069, 1063, 1067, 1076, 1077, 1074, 1078, 1079, + 1075, 1080, 1077, 1081, 1084, 1072, 1080, 1078, 1082, 1083, + 1083, 1076, 1086, 1085, 1088, 1089, 1094, 1087, 1079, 1092, + + 1088, 1086, 1082, 1081, 1084, 1085, 1087, 1090, 1095, 1096, + 1094, 1097, 1089, 1090, 1098, 1092, 1097, 1099, 1100, 1101, + 1098, 1103, 1104, 1102, 1107, 1108, 1103, 1104, 1095, 1107, + 1108, 1109, 1100, 1111, 1096, 1113, 1099, 1101, 1102, 1111, + 1109, 1110, 1110, 1112, 1113, 1114, 1115, 1117, 1118, 1112, + 1121, 1120, 1120, 1118, 1118, 1120, 1123, 1124, 1122, 1115, + 1114, 1122, 1125, 1117, 1126, 1121, 1127, 1128, 1129, 1130, + 1123, 1126, 1131, 1132, 1133, 1130, 1134, 1124, 1125, 1132, + 1128, 1134, 1135, 1129, 1127, 1137, 1137, 1138, 1139, 1133, + 1138, 1142, 1131, 1140, 1141, 1143, 1135, 1144, 1140, 1141, + + 1145, 1146, 1144, 1149, 1143, 1145, 1148, 1142, 1150, 1139, + 1151, 1152, 1148, 1146, 1150, 1153, 1153, 1152, 1154, 1149, + 1155, 1156, 1157, 1157, 1156, 1158, 1159, 1154, 1160, 1161, + 1163, 1151, 1161, 1162, 1164, 1165, 1163, 1166, 1155, 1167, + 1164, 1165, 1166, 1158, 1167, 1159, 1162, 1168, 1160, 1169, + 1170, 1173, 1172, 1168, 1169, 1174, 1170, 1172, 1175, 1178, + 1176, 1177, 1177, 1179, 1175, 1176, 1180, 1181, 1178, 1173, + 1182, 1180, 1179, 1183, 1184, 1174, 1183, 1184, 1186, 1185, + 1187, 1188, 1189, 1186, 1192, 1181, 1190, 1195, 1191, 1182, + 1185, 1193, 1190, 1188, 1191, 1196, 1193, 1198, 1187, 1192, + + 1197, 1189, 1194, 1194, 1199, 1200, 1195, 1201, 1199, 1196, + 1202, 1203, 1197, 1205, 1208, 1198, 1201, 1206, 1207, 1207, + 1209, 1211, 1208, 1200, 1213, 1209, 1206, 1214, 1210, 1202, + 1216, 1215, 1205, 1210, 1218, 1216, 1203, 1217, 1213, 1219, + 1219, 1211, 1214, 1215, 1220, 1221, 1217, 1222, 1223, 1218, + 1224, 1221, 1225, 1222, 1226, 1227, 1223, 1227, 1228, 1226, + 1229, 1230, 1231, 1228, 1220, 1224, 1232, 1231, 1225, 1233, + 1234, 1235, 1236, 1234, 1229, 1230, 1237, 1240, 1235, 1239, + 1239, 1232, 1241, 1242, 1243, 1244, 1241, 1236, 1233, 1246, + 1245, 1240, 1242, 1249, 1247, 1237, 1245, 1249, 1253, 1247, + + 1244, 1251, 1243, 1250, 1250, 1253, 1251, 1254, 1247, 1246, + 1247, 1252, 1252, 1247, 1255, 1256, 1258, 1255, 1257, 1260, + 1261, 1254, 1263, 1262, 1260, 1258, 1264, 1265, 1263, 1266, + 1267, 1264, 1269, 1269, 1256, 1262, 1257, 1270, 1271, 1261, + 1266, 1265, 1270, 1271, 1272, 1273, 1275, 1274, 1276, 1267, + 1273, 1274, 1277, 1278, 1279, 1275, 1280, 1279, 1281, 1283, + 1284, 1282, 1285, 1276, 1272, 1281, 1279, 1277, 1286, 1287, + 1289, 1280, 1278, 1282, 1286, 1288, 1289, 1290, 1283, 1291, + 1285, 1284, 1292, 1293, 1287, 1294, 1288, 1296, 1295, 1297, + 1298, 1292, 1300, 1303, 1307, 1299, 1302, 1290, 1293, 1291, + + 1295, 1299, 1302, 1304, 1294, 1298, 1296, 1305, 1303, 1306, + 1307, 1308, 1300, 1309, 1297, 1305, 1308, 1304, 1310, 1311, + 1312, 1317, 1313, 1310, 1310, 1309, 1314, 1314, 1316, 1306, + 1317, 1318, 1319, 1319, 1312, 1313, 1327, 1318, 1311, 1315, + 1315, 1316, 1321, 1323, 1315, 1320, 1321, 1315, 1315, 1323, + 1320, 1322, 1315, 1330, 1324, 48, 1325, 1327, 1315, 1324, + 1322, 1325, 1315, 1326, 1326, 1328, 1328, 1329, 1331, 1332, + 1329, 1333, 1329, 1330, 1335, 1332, 1334, 1333, 1336, 1334, + 1337, 1338, 1339, 1335, 1340, 1337, 1331, 1341, 1342, 1345, + 1340, 1343, 1348, 1341, 1342, 1338, 1343, 1344, 1336, 1346, + + 1339, 1344, 1345, 1351, 1347, 1355, 1348, 1354, 1346, 1347, + 1349, 1349, 1353, 1346, 1351, 1346, 1353, 1346, 1356, 1346, + 1350, 1350, 1354, 1350, 1357, 1355, 1358, 1361, 1359, 1360, + 1362, 1358, 1358, 1357, 1363, 1362, 1356, 1359, 1360, 1365, + 1366, 1364, 1367, 1369, 1369, 1368, 1371, 1372, 1363, 1361, + 1364, 1368, 1370, 1374, 1371, 1373, 1367, 1375, 1365, 1366, + 1373, 1372, 1376, 1377, 1370, 1378, 1375, 1374, 1379, 1376, + 1380, 1380, 1381, 1379, 1382, 1382, 1384, 1383, 1384, 1387, + 1386, 1377, 1383, 1386, 1387, 1388, 1389, 1381, 1390, 1390, + 1378, 1391, 1392, 1392, 1394, 1389, 1393, 1393, 1395, 1394, + + 1396, 1397, 1398, 1398, 1388, 1399, 1400, 1401, 1402, 1403, + 1401, 1391, 1404, 1407, 1406, 1403, 1406, 1404, 1405, 1395, + 1410, 1396, 1397, 1400, 1411, 1399, 1409, 1405, 1402, 1409, + 1413, 1407, 1415, 1412, 1414, 1410, 1416, 1411, 1412, 1414, + 1415, 1416, 1417, 1418, 1413, 1417, 1419, 1419, 1418, 1420, + 1421, 1422, 1423, 1424, 1420, 1426, 1427, 1422, 1428, 1423, + 1429, 1426, 1427, 1428, 1430, 1429, 1424, 1431, 1421, 1432, + 1430, 1433, 1434, 1434, 1435, 1436, 1431, 1440, 1438, 1439, + 1442, 1441, 1433, 1438, 1443, 1444, 1445, 1440, 1432, 1450, + 1447, 1444, 1445, 1446, 1435, 1436, 1441, 1439, 1449, 1446, + + 1442, 1447, 1451, 1450, 1449, 1452, 1453, 1443, 1454, 1450, + 1452, 1455, 1453, 1456, 1457, 1459, 1451, 1458, 1458, 1460, + 1461, 1462, 1451, 1455, 1463, 1465, 1462, 1456, 1454, 1464, + 1464, 1466, 1457, 1468, 1470, 1459, 1466, 1469, 1461, 1472, + 1471, 1473, 1463, 1476, 1460, 1471, 1471, 1470, 1465, 1475, + 1473, 1469, 1468, 1474, 1477, 18, 1479, 1472, 1476, 1478, + 1480, 1474, 1480, 1475, 1478, 1479, 1481, 1478, 1483, 1477, + 1485, 1484, 1477, 1486, 1483, 1484, 1487, 1488, 1486, 1486, + 1481, 1485, 1489, 1490, 1491, 1492, 1493, 1494, 1490, 1491, + 1492, 1495, 1496, 1499, 1498, 1487, 1495, 1500, 1501, 1501, + + 1489, 1502, 1503, 1488, 1493, 1502, 1504, 1494, 1498, 1506, + 1505, 1499, 1496, 1507, 1508, 1500, 1505, 1509, 1518, 1510, + 1503, 1506, 1511, 1512, 1517, 1504, 1516, 1513, 1514, 1507, + 1523, 1509, 1513, 1508, 1510, 1514, 1515, 1511, 1517, 1518, + 1519, 1515, 1512, 1521, 1516, 1520, 1520, 1522, 1525, 1519, + 1523, 1524, 1524, 1526, 1525, 1527, 1522, 1531, 1521, 1526, + 1528, 1528, 1529, 1529, 1530, 1532, 1533, 17, 1534, 1527, + 1530, 1533, 1535, 1531, 1534, 1536, 1537, 1537, 1535, 1538, + 1538, 1536, 1540, 1540, 1541, 1542, 1532, 1543, 1541, 1545, + 1544, 1546, 1549, 1547, 1542, 1548, 1548, 1552, 1553, 1538, + + 1547, 1538, 1544, 1545, 1551, 1543, 1546, 1550, 1554, 1551, + 1557, 1552, 1549, 1554, 1554, 1550, 1555, 1553, 1559, 1556, + 1560, 1555, 1555, 1556, 1558, 1558, 1561, 1562, 1563, 1564, + 1557, 1567, 1562, 1565, 1566, 1561, 1567, 1559, 1568, 1560, + 1566, 1569, 1570, 1571, 1572, 1573, 1574, 1563, 1575, 1564, + 1572, 1565, 1574, 1576, 1575, 1578, 1568, 1570, 1577, 1579, + 1580, 1569, 1581, 1582, 1573, 1583, 1587, 1577, 1584, 1571, + 1585, 1585, 1576, 1586, 1578, 1588, 1586, 1582, 1579, 1580, + 1589, 1581, 1594, 1584, 1595, 1587, 1583, 1590, 1590, 1591, + 1591, 1592, 1589, 1593, 1588, 1594, 1592, 1593, 1596, 1595, + + 1597, 1600, 1598, 1601, 1598, 1602, 1601, 1596, 1598, 1603, + 1602, 1604, 1605, 1597, 1606, 1606, 1610, 1607, 1609, 1600, + 1608, 1598, 1607, 1615, 1603, 1618, 1608, 1612, 1605, 1610, + 1611, 1604, 1612, 1609, 1613, 1614, 1611, 1616, 1613, 1614, + 1617, 1619, 1622, 1615, 1625, 1618, 1624, 1619, 1626, 1617, + 1620, 1620, 1624, 1626, 1629, 1616, 1627, 1627, 1628, 1635, + 1622, 1631, 1631, 1633, 1628, 1625, 1633, 1634, 1634, 1636, + 1637, 1640, 1642, 1639, 1629, 1635, 1639, 1641, 1643, 1644, + 1644, 1642, 1646, 1647, 1645, 1636, 1637, 1649, 1648, 1650, + 1651, 1651, 1640, 1648, 1653, 1650, 1652, 1641, 1643, 1645, + + 1654, 1649, 1647, 1646, 1655, 1652, 1656, 1657, 1657, 1658, + 1659, 1660, 1653, 1662, 1662, 1654, 1660, 1661, 1663, 1664, + 1665, 1665, 1663, 1658, 1666, 1667, 1656, 1668, 1659, 1655, + 1669, 1670, 1661, 1683, 1669, 1671, 1673, 1673, 1668, 1664, + 1671, 1676, 1674, 1678, 1667, 1679, 1666, 1674, 1674, 1675, + 1670, 1677, 1675, 1680, 1676, 1681, 1677, 1682, 1683, 1678, + 1684, 1685, 1685, 1679, 1687, 1686, 1689, 1680, 1688, 1684, + 1686, 1682, 1691, 1688, 1681, 1681, 1690, 1692, 1692, 1690, + 1693, 1695, 1694, 1696, 1687, 1696, 1689, 1694, 1697, 1693, + 1698, 1691, 1699, 1697, 1700, 1703, 1698, 1701, 1704, 1704, + + 1700, 1695, 1701, 1705, 1706, 1707, 1710, 1708, 1711, 1703, + 1707, 1710, 1699, 1708, 1712, 1712, 1713, 1713, 1715, 1714, + 1716, 1717, 1705, 1706, 1717, 1718, 1718, 1719, 1720, 1721, + 1729, 1723, 1711, 1714, 1724, 1716, 1715, 1723, 1722, 1724, + 1720, 1722, 1727, 1725, 1722, 1719, 1725, 1728, 1732, 1721, + 1730, 1727, 1728, 1730, 1733, 1729, 1722, 1731, 1731, 1734, + 1733, 1735, 1725, 1736, 1736, 1734, 1735, 1737, 1737, 1738, + 1740, 1739, 1732, 1741, 1742, 1738, 1739, 1743, 1744, 1745, + 1746, 1744, 1747, 1740, 1748, 1745, 1746, 1750, 1747, 1748, + 1749, 1741, 1755, 1742, 1751, 1754, 1749, 1743, 1753, 1751, + + 1752, 1752, 1756, 1753, 1757, 1758, 1759, 1760, 1761, 1762, + 1750, 1763, 1755, 1754, 1764, 1766, 0, 1756, 1764, 1769, + 1759, 1760, 1761, 1757, 1765, 1758, 1765, 1762, 1767, 1770, + 1771, 1769, 1772, 1773, 1766, 1767, 1763, 1775, 1772, 1774, + 1776, 1770, 1777, 1771, 1782, 1777, 1778, 1778, 1784, 1779, + 1781, 1781, 1786, 1773, 1776, 1774, 1783, 1775, 1779, 1787, + 1784, 1783, 1788, 1777, 1782, 1785, 1785, 1786, 1790, 1789, + 1791, 1792, 1793, 1787, 1794, 1798, 1796, 1790, 1792, 1799, + 1800, 1793, 1804, 1800, 1793, 1791, 1788, 1789, 1801, 1801, + 1794, 1796, 1807, 1798, 1802, 1802, 1796, 1803, 1805, 1808, + + 1804, 1805, 1806, 1806, 1799, 1807, 1809, 1810, 1812, 1803, + 1811, 1809, 1810, 1811, 1813, 1814, 1815, 1816, 1808, 1813, + 1817, 1818, 1819, 1822, 1822, 1821, 1816, 1820, 1823, 1812, + 1818, 1821, 1815, 1818, 1814, 1823, 1820, 1824, 1825, 1817, + 1826, 1827, 1829, 1828, 1830, 1834, 1819, 1829, 1829, 1830, + 1831, 1825, 1838, 1835, 0, 1827, 1839, 1824, 1826, 1828, + 1836, 1836, 1831, 1837, 1843, 1839, 1837, 1842, 1838, 1843, + 1834, 1835, 1840, 1840, 1841, 1841, 1842, 1840, 1845, 1842, + 1844, 1844, 1846, 1847, 1850, 1848, 1852, 1851, 1853, 1841, + 1848, 1848, 1854, 1853, 1855, 1856, 1845, 1860, 1850, 1864, + + 1855, 1847, 1851, 1846, 1857, 1857, 1854, 1859, 1852, 1858, + 1861, 1860, 1859, 1856, 1862, 1858, 1861, 1865, 1866, 1864, + 1862, 1867, 1868, 1870, 1874, 1869, 1875, 1867, 1869, 1870, + 1872, 1876, 1866, 1877, 1869, 1868, 0, 1865, 1872, 1878, + 1879, 1877, 1880, 1874, 1878, 1875, 1882, 1881, 1883, 1879, + 1876, 1884, 1885, 1885, 1886, 1880, 1881, 1887, 1888, 1882, + 1886, 1888, 1883, 1887, 1889, 1884, 1890, 1890, 1891, 1892, + 1893, 1894, 1894, 1895, 1885, 1896, 1897, 1889, 1898, 1899, + 1902, 1896, 1901, 1901, 1905, 1904, 1895, 1892, 1891, 1893, + 1904, 1903, 1909, 0, 1898, 1903, 1906, 1899, 1897, 1908, + + 1902, 1906, 1907, 1911, 1905, 1913, 1911, 1907, 1908, 1914, + 1915, 1916, 1917, 1915, 1919, 1909, 1913, 1911, 1914, 1918, + 1918, 1921, 1920, 1916, 1922, 1922, 1923, 1917, 1924, 1925, + 1927, 1923, 1926, 1919, 1920, 1928, 1925, 1927, 1929, 1930, + 1921, 1932, 1924, 1933, 1926, 1934, 1935, 1928, 1936, 1929, + 1937, 1934, 1938, 1938, 1939, 1940, 1937, 1939, 1935, 1930, + 1932, 1941, 1941, 1933, 1943, 1944, 1936, 1945, 1946, 1943, + 1947, 1944, 1948, 1948, 1949, 1940, 1947, 1946, 1950, 1952, + 1950, 1951, 1945, 1953, 1951, 1954, 1949, 1956, 1955, 1957, + 1959, 1958, 1956, 1960, 1957, 1962, 1961, 1971, 1963, 1952, + + 1958, 1961, 1959, 1954, 1962, 1953, 1955, 1964, 1960, 1965, + 1966, 1969, 1964, 1971, 1965, 1967, 1967, 1962, 1963, 1964, + 1968, 1972, 1973, 1974, 1975, 1966, 1968, 1976, 1981, 1976, + 1984, 1977, 1969, 1978, 1978, 1979, 1979, 1980, 1980, 1974, + 1972, 1973, 1982, 1982, 1975, 1977, 1985, 1977, 1981, 1983, + 1983, 1984, 1986, 1987, 1987, 1988, 1989, 1990, 1992, 1988, + 1990, 1993, 1989, 1994, 1992, 1995, 1996, 1985, 1997, 1994, + 2000, 1996, 1998, 1986, 2003, 1998, 1999, 1999, 2001, 1993, + 2002, 2002, 2004, 2001, 2007, 2007, 2005, 2006, 1995, 2003, + 2000, 2005, 2006, 1997, 2008, 2009, 2010, 2011, 2012, 2008, + + 2013, 2009, 2015, 2004, 2016, 2014, 2017, 2018, 2010, 2010, + 2010, 2014, 2018, 2017, 2021, 2010, 2012, 2011, 2022, 2024, + 2013, 2020, 2015, 2023, 2016, 2023, 2020, 2020, 2021, 2025, + 2024, 2026, 2027, 2022, 2028, 2029, 2031, 2026, 2030, 2030, + 2033, 2027, 2032, 2032, 2025, 2034, 2035, 2035, 2036, 2036, + 2037, 2037, 2038, 2042, 2028, 2043, 2029, 2041, 2041, 2045, + 2033, 2046, 2031, 2047, 2043, 2048, 2050, 2034, 2045, 2047, + 2049, 2052, 2038, 2051, 2051, 2053, 2054, 2056, 2042, 2055, + 2050, 2059, 2046, 2054, 2048, 2060, 2049, 0, 2055, 2065, + 2053, 2062, 2052, 2057, 2057, 2058, 2058, 2062, 2066, 2063, + + 2064, 2060, 2067, 2056, 2063, 2066, 2064, 2059, 2067, 2065, + 2068, 2070, 2068, 2071, 2072, 2072, 2073, 2074, 2075, 2071, + 2076, 2073, 2077, 2079, 2078, 2080, 2074, 2078, 2080, 2081, + 2070, 2082, 2084, 2075, 2085, 2079, 2083, 2083, 2084, 2086, + 2076, 2077, 2087, 2088, 2089, 2086, 2085, 2081, 2089, 2091, + 2092, 2093, 2094, 2094, 2095, 2096, 2093, 2082, 2088, 2100, + 2097, 2099, 2087, 2100, 2089, 2101, 2101, 2102, 2103, 2091, + 2104, 2104, 2092, 2102, 2096, 2097, 2105, 2103, 2095, 2106, + 2099, 2107, 2109, 2106, 2110, 2105, 2108, 2108, 2111, 2112, + 2113, 2114, 2107, 2115, 2112, 2116, 2117, 2107, 2110, 2119, + + 2118, 2116, 2123, 2109, 2119, 2120, 2123, 2111, 2121, 2121, + 2113, 2114, 2125, 2115, 2117, 2118, 2122, 2122, 2120, 2126, + 2127, 2125, 2128, 2129, 2129, 2131, 2131, 2128, 2132, 2136, + 2126, 2133, 2135, 2132, 2132, 2126, 2137, 2133, 2135, 2138, + 2127, 2137, 2139, 2142, 2141, 2143, 2145, 2142, 2139, 2144, + 2144, 2138, 2146, 2147, 2148, 2136, 2141, 2143, 2146, 2149, + 2148, 2150, 2151, 2151, 2152, 2153, 2150, 2154, 2155, 2157, + 2158, 2145, 2154, 2159, 2149, 2147, 2161, 2161, 2159, 2162, + 2155, 2157, 2162, 2152, 2168, 2153, 2163, 2163, 2169, 2158, + 2164, 2164, 2165, 2165, 2166, 2166, 2167, 2170, 2171, 2168, + + 2172, 2173, 2167, 2170, 2171, 2172, 2174, 2173, 2169, 2176, + 2177, 2177, 2181, 2179, 2176, 2174, 2179, 2180, 2182, 2183, + 2183, 2180, 2185, 2186, 2187, 2188, 2188, 2189, 2192, 2187, + 2182, 2192, 2190, 2181, 2185, 2186, 2189, 2190, 2191, 2193, + 2193, 2194, 2195, 2191, 2196, 2197, 2198, 2199, 2200, 2201, + 2198, 2195, 2199, 2203, 2200, 2204, 2202, 2207, 2206, 2206, + 2210, 2194, 2196, 2208, 2197, 2202, 2213, 2201, 2209, 2204, + 2206, 2203, 2208, 2211, 2211, 2207, 2212, 2209, 2213, 2214, + 2210, 2215, 2216, 2219, 2219, 2212, 2215, 2221, 2222, 2223, + 2221, 2224, 2227, 2226, 2229, 2216, 2228, 2230, 2230, 2231, + + 2214, 2231, 2228, 2232, 2222, 2223, 2227, 2224, 2226, 2233, + 2235, 2229, 2234, 2234, 2237, 2237, 2240, 2232, 2235, 2238, + 2238, 2243, 2241, 2242, 2244, 2245, 2246, 2233, 2241, 2242, + 2249, 2244, 2247, 2247, 2252, 2243, 2248, 2248, 2250, 2240, + 2251, 2253, 2254, 2256, 2258, 2248, 2246, 2245, 2255, 2252, + 2250, 2249, 2251, 2253, 2257, 2261, 2262, 2255, 2256, 2257, + 2257, 2263, 2265, 2259, 2266, 2259, 2259, 2258, 2254, 2259, + 2264, 2264, 2269, 2263, 2267, 2261, 2268, 2267, 2271, 2262, + 2265, 2268, 2259, 2271, 2266, 2272, 2273, 2272, 2274, 2275, + 2278, 2280, 2269, 2274, 2281, 2282, 2275, 2284, 2283, 2278, + + 2283, 2285, 2286, 2281, 2273, 2287, 2290, 2282, 2286, 2280, + 2289, 2292, 2289, 2291, 2291, 2298, 2284, 2293, 2296, 2300, + 2290, 2285, 2293, 2296, 2294, 2287, 2294, 2297, 2299, 2301, + 2303, 2302, 2297, 2298, 2308, 2301, 2302, 2292, 2304, 2300, + 2309, 2306, 2305, 2303, 2310, 2314, 2299, 2305, 2305, 2306, + 2304, 2311, 2311, 2308, 2309, 2313, 2310, 2312, 2312, 2315, + 2314, 2316, 2318, 2317, 2318, 2319, 2313, 2316, 2317, 2320, + 2321, 2322, 2322, 2323, 2328, 2320, 2324, 2324, 2321, 2315, + 2325, 2325, 2326, 2319, 2327, 2323, 2321, 2331, 2333, 2327, + 2330, 2326, 2328, 2332, 2330, 2332, 2331, 2334, 2335, 2331, + + 2337, 2339, 2334, 2334, 2336, 2340, 2341, 2348, 2344, 2333, + 2335, 2341, 2337, 2336, 2339, 2342, 2345, 2340, 2346, 2349, + 2342, 2344, 2347, 2347, 2345, 2348, 2350, 2346, 2352, 2351, + 2355, 2357, 2353, 2354, 2359, 2355, 2345, 2349, 2358, 2363, + 2362, 2369, 2360, 2357, 2350, 2351, 2353, 2360, 2354, 2362, + 2358, 2361, 2366, 2352, 2359, 2368, 2361, 2363, 2366, 2370, + 2371, 2368, 2372, 2373, 2369, 2374, 2374, 2375, 2376, 2376, + 2377, 2366, 2373, 2378, 2370, 2379, 2375, 2380, 2371, 2379, + 2381, 2382, 2380, 2383, 2386, 2385, 2387, 2372, 2377, 2388, + 2386, 2389, 2378, 2381, 2388, 2388, 2382, 2389, 2391, 2390, + + 2394, 2391, 2393, 2383, 2385, 2390, 2396, 2398, 2387, 2399, + 2393, 2400, 2400, 2401, 2401, 2402, 2403, 2403, 2404, 2404, + 2394, 2405, 2406, 2408, 2402, 2410, 2396, 2399, 2401, 2408, + 2398, 2409, 2411, 2405, 2412, 2412, 2418, 2411, 2414, 2401, + 2406, 2413, 2413, 2414, 2415, 2410, 2409, 2417, 2419, 2420, + 2415, 2417, 2419, 2422, 2423, 2425, 2418, 2424, 2426, 2423, + 2428, 2427, 2429, 2426, 2431, 2437, 2430, 2432, 2432, 2420, + 2425, 2430, 2434, 2433, 2436, 2438, 2428, 2433, 2422, 2427, + 2424, 2440, 2429, 2435, 2439, 2441, 2431, 2434, 2435, 2442, + 2441, 2437, 2436, 2438, 2443, 2446, 2439, 2444, 2444, 2447, + + 2440, 2448, 2442, 2446, 2449, 2450, 2451, 2452, 2453, 2454, + 2455, 2456, 2443, 2457, 2461, 2465, 2506, 2456, 2447, 2457, + 2448, 2454, 2459, 2449, 2462, 2506, 2452, 2461, 2450, 2453, + 2451, 2455, 2464, 2463, 2464, 2465, 2469, 2459, 2462, 2463, + 2466, 2466, 2467, 2468, 2470, 2471, 2468, 2467, 2472, 2469, + 2473, 2473, 2474, 2474, 2475, 2477, 2475, 2476, 2476, 2471, + 2478, 2472, 2484, 2479, 0, 2480, 2480, 2492, 2470, 2480, + 2477, 2482, 2482, 2483, 2483, 2478, 2479, 2484, 2485, 2485, + 2486, 2487, 2487, 2488, 2488, 2489, 2491, 2492, 2493, 2486, + 2489, 2491, 2486, 2494, 2495, 2495, 2496, 2496, 2497, 2498, + + 2498, 2499, 2500, 2500, 2502, 2494, 2501, 2508, 2493, 2502, + 2503, 2503, 2504, 2504, 2505, 2507, 2507, 2497, 2510, 2499, + 2511, 2501, 2509, 2509, 2508, 2513, 2514, 2514, 2505, 2515, + 2513, 2517, 2510, 2516, 2516, 2518, 2519, 2523, 2520, 2511, + 2518, 2520, 2519, 2521, 2521, 2522, 2522, 2524, 2515, 2517, + 2525, 2527, 2525, 2528, 2529, 2529, 2523, 2530, 2532, 2521, + 2533, 2534, 2524, 2530, 2535, 2536, 2527, 2537, 2537, 2536, + 2538, 2539, 2528, 2540, 2545, 2533, 2539, 2540, 2532, 2535, + 2541, 2542, 2542, 2546, 2534, 2544, 2544, 2547, 2548, 2538, + 2546, 2549, 2550, 2551, 2545, 2541, 2542, 2552, 2552, 2553, + + 2554, 2547, 2554, 2558, 2562, 2557, 2548, 2550, 2553, 2549, + 2555, 2557, 2559, 2555, 2563, 2558, 2560, 2559, 2561, 2551, + 2564, 2560, 2565, 2561, 2567, 2575, 0, 2563, 2555, 2562, + 2555, 2565, 2566, 2569, 2570, 2571, 2572, 2566, 2569, 2570, + 2571, 2564, 2573, 2574, 2576, 2580, 2575, 2577, 2573, 2574, + 2567, 2572, 2578, 2577, 2581, 2579, 2583, 2578, 2582, 2576, + 2579, 2582, 2584, 2585, 2586, 2587, 2588, 2581, 2593, 2589, + 2580, 2584, 2585, 2586, 2587, 2589, 2583, 2590, 2591, 2595, + 2588, 2596, 2591, 2590, 2597, 2597, 2598, 2600, 2593, 2601, + 2596, 2601, 2598, 2599, 2599, 2602, 2603, 2603, 2600, 2595, + + 2604, 2605, 2599, 2607, 2602, 2604, 2608, 2609, 2609, 2610, + 2613, 2611, 2614, 2617, 2616, 2618, 2612, 2614, 2613, 2607, + 2611, 2605, 2608, 2605, 2610, 2612, 2616, 2619, 2621, 2617, + 2618, 2621, 2622, 2623, 2624, 2625, 2625, 2622, 0, 2619, + 2626, 2626, 2627, 2627, 2628, 2628, 2624, 2630, 2630, 2631, + 2632, 2633, 2631, 2623, 2634, 2632, 2635, 2633, 2636, 2636, + 2634, 2637, 2638, 2638, 2639, 2635, 2640, 2641, 2642, 2642, + 2644, 2643, 2652, 2645, 0, 2637, 2639, 2643, 2645, 2647, + 2640, 2652, 2648, 2647, 2644, 2648, 2641, 2649, 2649, 2650, + 2651, 2653, 2654, 2655, 2650, 2651, 2657, 2655, 2656, 2656, + + 2653, 2659, 2660, 2661, 2662, 2663, 2659, 2664, 2665, 2657, + 2666, 2664, 2654, 2671, 2667, 2666, 2669, 2669, 2672, 2663, + 2667, 2668, 2660, 2661, 2662, 2670, 2670, 2668, 2665, 2673, + 2674, 2671, 2675, 2676, 2676, 2674, 2679, 2672, 2678, 2680, + 2681, 2682, 2695, 2683, 2680, 2688, 2681, 2682, 2673, 2686, + 2678, 2683, 2679, 2675, 2684, 2689, 2684, 2695, 2686, 2688, + 2690, 2690, 2691, 2692, 2692, 2691, 2697, 2694, 2696, 2689, + 2694, 2696, 2698, 2698, 2701, 2702, 2703, 2705, 2701, 2704, + 2704, 2702, 2708, 2708, 2710, 2712, 2705, 2713, 2703, 2716, + 2717, 2718, 2697, 2719, 2716, 2721, 2722, 2723, 2723, 2712, + + 2721, 2722, 2710, 2713, 2725, 2725, 2727, 2728, 2730, 2718, + 2729, 2729, 2727, 2731, 2719, 2732, 2717, 2734, 2735, 2736, + 2732, 2735, 2737, 2740, 2730, 2738, 2738, 2728, 2741, 2744, + 2745, 2736, 2742, 0, 2737, 2731, 2734, 2741, 2742, 2740, + 2743, 2747, 2747, 2750, 2751, 2745, 2743, 2744, 2748, 2752, + 2749, 2748, 2749, 2754, 2754, 2755, 2755, 2757, 2759, 2758, + 2756, 2760, 2750, 2751, 2751, 2756, 2760, 2752, 2758, 2762, + 2761, 2759, 2761, 2763, 2764, 2757, 2765, 2766, 2767, 2768, + 2770, 2765, 2774, 2762, 2768, 0, 2764, 2763, 2769, 2769, + 2771, 2771, 2772, 2772, 2774, 2770, 2776, 2766, 2767, 2773, + + 2773, 2775, 2777, 2775, 2778, 2778, 2781, 2777, 2779, 2779, + 2780, 2780, 2782, 2783, 2776, 2784, 2785, 2786, 2781, 2787, + 2787, 2788, 2789, 2789, 2793, 2783, 2790, 2790, 2791, 2792, + 2792, 2794, 2782, 2786, 2795, 2784, 2793, 2785, 2794, 2791, + 2788, 2796, 2797, 2798, 2799, 2801, 2795, 2797, 2800, 2800, + 2802, 2802, 2803, 2804, 2801, 2805, 2806, 2807, 2808, 2810, + 2809, 2796, 2819, 2798, 2799, 2812, 2814, 2808, 2805, 2813, + 2813, 2807, 2809, 2804, 2811, 2814, 2811, 2812, 2803, 2815, + 2806, 2810, 2816, 2818, 2819, 2820, 2821, 2822, 2822, 2823, + 2824, 2821, 2825, 2824, 2815, 2826, 0, 2816, 2827, 2837, + + 2826, 2818, 2839, 2827, 2828, 2828, 2825, 2820, 2829, 2829, + 2830, 2830, 2823, 2834, 2834, 2836, 2836, 2837, 2838, 2840, + 2842, 2839, 2844, 2843, 2846, 2845, 2847, 2849, 2848, 2838, + 2848, 2850, 2851, 2846, 2840, 2852, 2852, 2857, 2854, 2856, + 2842, 2843, 2854, 0, 2844, 2845, 2847, 2849, 2858, 2850, + 2851, 2855, 2855, 2856, 2859, 2859, 2861, 2858, 2863, 2857, + 2862, 2862, 2864, 2865, 2866, 2861, 2868, 2867, 2869, 2870, + 2871, 2866, 2873, 2872, 2874, 2874, 2863, 2872, 2876, 2873, + 2864, 2865, 2867, 2877, 2868, 2870, 2869, 2875, 2875, 2871, + 2878, 2880, 2880, 2881, 2881, 2883, 2878, 2882, 2876, 2884, + + 2885, 2877, 2886, 2882, 2887, 2888, 2889, 2889, 2890, 2891, + 2888, 2892, 2893, 2883, 2894, 2885, 2895, 2884, 2887, 2896, + 2897, 2886, 2897, 2893, 2896, 2894, 2898, 2898, 2890, 2891, + 2899, 2892, 2899, 2900, 2900, 2902, 2895, 2904, 2905, 2906, + 2907, 2909, 2908, 2910, 2911, 2915, 2904, 2908, 2910, 2912, + 2917, 2906, 2916, 2917, 2902, 2918, 2918, 2905, 2919, 2920, + 2907, 2909, 2921, 2921, 2911, 2915, 2923, 2922, 2912, 2926, + 2916, 2924, 2927, 2919, 2928, 2924, 2931, 2920, 2922, 2929, + 2928, 2923, 2933, 2929, 2926, 2930, 2930, 2927, 2935, 2931, + 2934, 2934, 2936, 2937, 2938, 2939, 2939, 2933, 2941, 2943, + + 2942, 2937, 2946, 2943, 2944, 2944, 2945, 2945, 2935, 2942, + 2941, 2936, 2947, 2947, 2938, 2948, 2949, 2950, 2951, 2952, + 2948, 2946, 2953, 2953, 2955, 2949, 2959, 2959, 2960, 2961, + 2951, 2962, 2962, 2950, 2963, 2964, 2965, 2960, 2970, 2952, + 3002, 2966, 2971, 2967, 2968, 2955, 3002, 2963, 2964, 2965, + 2966, 2961, 2967, 2968, 2969, 2969, 2976, 2971, 2970, 2973, + 2973, 2976, 2978, 2979, 2980, 2981, 2982, 2978, 2984, 2980, + 2983, 2986, 2990, 2981, 2996, 2988, 2984, 2979, 2989, 2983, + 2988, 2991, 2991, 2989, 2994, 2982, 2986, 2990, 2992, 2992, + 2993, 2995, 3000, 2996, 2998, 2993, 2995, 2997, 2997, 2994, + + 2999, 2998, 3001, 3003, 3004, 2999, 0, 3005, 3003, 3004, + 3000, 3007, 3007, 3008, 3009, 3010, 3010, 3011, 3011, 3009, + 3001, 3005, 3014, 3015, 3015, 3017, 3016, 3018, 3008, 3016, + 3017, 3017, 3018, 3019, 3020, 3014, 3021, 3022, 3019, 3023, + 3024, 3022, 3021, 3025, 3023, 3026, 3027, 3030, 3020, 3024, + 3028, 3029, 3030, 3026, 3031, 3034, 3028, 3029, 3025, 3032, + 3032, 3036, 3034, 3035, 3036, 3038, 3031, 3027, 3035, 3040, + 3041, 3042, 3043, 3044, 3040, 3041, 3042, 3038, 3045, 3046, + 3047, 3047, 3048, 3053, 3058, 3049, 3044, 3045, 3046, 3049, + 3043, 3048, 3050, 3054, 3055, 3059, 3060, 3050, 3061, 3054, + + 3055, 3053, 3063, 3058, 3062, 3062, 3064, 3068, 3068, 3063, + 3066, 3067, 3069, 3070, 3071, 3059, 3060, 3061, 3073, 3066, + 3067, 3075, 3070, 3072, 3072, 3064, 3077, 3069, 3078, 3071, + 3079, 3079, 3078, 3080, 3081, 3082, 3075, 3073, 3083, 3085, + 3081, 3082, 3084, 3086, 3086, 3085, 3077, 3087, 3088, 3089, + 3091, 3092, 3097, 3098, 3089, 3087, 3094, 3083, 3080, 3091, + 3084, 3096, 3094, 3095, 3092, 3096, 3095, 3098, 3099, 3099, + 3097, 3100, 3103, 3088, 3102, 3102, 3105, 3105, 3106, 3107, + 3107, 3108, 3108, 3110, 3110, 3111, 3100, 3112, 3113, 3111, + 3103, 3117, 3112, 3115, 3115, 3118, 3119, 3113, 3120, 3123, + + 3118, 3106, 3121, 3120, 3120, 3124, 3125, 0, 3119, 3126, + 3126, 3117, 3128, 3128, 3121, 3129, 3129, 3130, 3130, 3123, + 3131, 3132, 3133, 3131, 3136, 3124, 3125, 3135, 3135, 3138, + 3139, 3139, 3140, 3140, 3132, 3133, 3141, 3141, 3142, 3143, + 3143, 3144, 3136, 3145, 3146, 3147, 3148, 3148, 3149, 3138, + 3152, 3147, 3149, 3142, 3144, 3152, 3152, 3153, 3146, 3154, + 3153, 3145, 3155, 3157, 3158, 3154, 3159, 3155, 3157, 3157, + 3160, 3161, 3162, 3163, 3164, 3165, 3175, 3161, 3162, 3163, + 3164, 3166, 3167, 3167, 3170, 3166, 3159, 3158, 3172, 3170, + 3160, 3173, 3176, 3178, 3173, 3176, 3172, 3177, 3177, 3179, + + 3165, 3175, 3180, 3181, 3179, 3182, 3183, 3183, 3184, 3187, + 3178, 3178, 3186, 3185, 3193, 3193, 3185, 3188, 3192, 3182, + 3180, 0, 3184, 3181, 3185, 3188, 3186, 3190, 3187, 3191, + 3194, 3194, 3190, 3190, 3191, 3191, 3199, 3192, 3195, 3195, + 3196, 3196, 3197, 3197, 3198, 3198, 3200, 3201, 3202, 3203, + 3204, 3200, 3199, 3206, 3205, 3207, 3208, 3209, 3203, 3205, + 3207, 3210, 3211, 3215, 3204, 3208, 3215, 3201, 3213, 3213, + 3214, 3214, 3206, 3216, 3202, 3217, 3217, 3209, 3218, 3220, + 3219, 3210, 3211, 3223, 3218, 3219, 3222, 3222, 3216, 3225, + 3223, 3224, 3224, 3228, 3225, 3227, 3227, 3220, 3229, 3230, + + 3230, 3231, 3228, 3232, 3234, 3235, 3235, 3229, 3236, 3236, + 3231, 3237, 3232, 3239, 3238, 3237, 3240, 3242, 3241, 3243, + 3246, 3245, 3234, 3238, 3243, 3243, 3247, 3240, 3249, 3246, + 3247, 3253, 3239, 3241, 3245, 3255, 3253, 3242, 3254, 3254, + 3257, 3257, 3258, 3249, 3259, 3260, 3262, 3262, 3264, 3255, + 3263, 3263, 3265, 3266, 3270, 3271, 3258, 3264, 3265, 3272, + 3271, 3274, 3277, 3260, 3275, 3266, 3279, 3281, 3272, 3259, + 3275, 3282, 3281, 3284, 3277, 3286, 3282, 3283, 3283, 3270, + 3286, 3274, 3284, 3287, 3289, 3290, 3291, 3279, 3292, 3292, + 3294, 3294, 3292, 3295, 3295, 3289, 3297, 3287, 3290, 3298, + + 3291, 3296, 3296, 3299, 3302, 3297, 3300, 3301, 3304, 3302, + 3305, 3306, 3307, 3307, 3304, 3305, 3306, 3308, 3309, 3298, + 3310, 3312, 3311, 3299, 3314, 3300, 3301, 3311, 3313, 3317, + 3309, 3315, 3315, 3317, 3313, 3308, 3321, 3318, 3319, 3312, + 3325, 3310, 3318, 3319, 3320, 3320, 3322, 3323, 3333, 3314, + 3327, 3327, 3329, 3330, 3331, 3321, 3334, 3333, 3335, 3332, + 3325, 3322, 3323, 3332, 3337, 3329, 3330, 3331, 3336, 3337, + 3338, 3339, 3334, 3340, 3340, 3341, 3336, 3335, 3342, 3343, + 3344, 3344, 3345, 3345, 3341, 3346, 3350, 3349, 3352, 3356, + 3338, 3339, 3349, 3349, 3352, 3360, 3342, 3353, 3353, 3361, + + 3350, 3354, 3354, 3363, 3346, 3343, 3358, 3358, 3363, 3364, + 3356, 3360, 3365, 3368, 3368, 3361, 3369, 3365, 3370, 3372, + 3371, 3373, 3373, 3377, 3374, 3364, 3371, 3370, 3376, 3376, + 3378, 3384, 3379, 3380, 3380, 3382, 3369, 3377, 3385, 3389, + 3386, 3382, 3372, 3374, 3385, 3386, 3390, 3391, 3391, 3378, + 3379, 3384, 3392, 3392, 3393, 3394, 3395, 3395, 3397, 3396, + 3398, 3389, 3399, 3400, 3402, 3401, 3404, 3397, 3399, 3393, + 3396, 3404, 3390, 3403, 3403, 3394, 3395, 3401, 3405, 3405, + 3398, 3406, 3400, 3407, 3402, 3408, 3407, 3413, 3408, 3409, + 3409, 3414, 3415, 3416, 3417, 3421, 3406, 3426, 3416, 3413, + + 3417, 3418, 3418, 3419, 3420, 3433, 3419, 3424, 3424, 3423, + 3420, 3414, 3415, 3421, 3423, 3425, 3426, 3427, 3428, 3431, + 3425, 3429, 3429, 3427, 3432, 3434, 3435, 3435, 3436, 3437, + 3433, 3431, 3438, 3440, 3440, 3428, 3428, 0, 3434, 3441, + 3441, 3438, 3432, 3442, 3442, 3437, 3443, 3436, 3444, 3445, + 3449, 3443, 3446, 3446, 3445, 3447, 3447, 3448, 3448, 3449, + 3450, 3450, 3444, 3451, 3452, 3453, 3458, 3454, 3457, 3457, + 3464, 3453, 3454, 3460, 3460, 3466, 3451, 3461, 3461, 3467, + 3468, 3469, 3458, 3470, 3470, 3472, 3472, 3473, 3474, 3464, + 3452, 3475, 3477, 3478, 3479, 3479, 3481, 3466, 3483, 3468, + + 3481, 3467, 3478, 3469, 3484, 3475, 3485, 3474, 3480, 3480, + 3484, 3486, 3477, 3473, 3487, 3488, 3483, 3491, 0, 3487, + 3488, 3492, 3492, 3494, 3494, 3496, 3485, 3495, 3497, 3498, + 3486, 3503, 3495, 3507, 3497, 3499, 3500, 3500, 3491, 3496, + 3501, 3498, 3505, 3499, 3506, 3501, 3505, 3508, 3510, 3506, + 3509, 3503, 3511, 3507, 3512, 3509, 3513, 3515, 3516, 3517, + 3510, 3518, 3513, 3527, 3511, 3515, 3520, 3508, 3523, 3521, + 3522, 3524, 3512, 3526, 3528, 3531, 3524, 3516, 3526, 3517, + 3528, 3518, 0, 3527, 3520, 3521, 3529, 3522, 3522, 3523, + 3532, 3529, 3533, 3532, 3543, 3531, 3537, 3537, 3538, 3538, + + 3539, 3545, 3545, 3546, 3539, 3533, 3547, 3550, 3546, 3543, + 3548, 3548, 3553, 3553, 3554, 3554, 3558, 3554, 3555, 3555, + 3558, 3555, 3550, 3556, 3556, 3547, 3557, 3557, 3560, 3557, + 3561, 3562, 3562, 3560, 3563, 3564, 3567, 3567, 3569, 3561, + 3568, 3568, 3570, 3571, 3572, 3572, 3573, 3574, 3571, 3564, + 3577, 3579, 3563, 3578, 3580, 3579, 3581, 0, 3569, 3583, + 3578, 3593, 3570, 3580, 3573, 3585, 3584, 3574, 3584, 3587, + 3585, 3581, 3586, 3586, 3592, 3577, 3593, 3583, 3587, 3588, + 3588, 3589, 3589, 3590, 3590, 3591, 3591, 3594, 3595, 3596, + 3598, 3599, 3594, 3597, 3596, 3596, 3592, 3595, 3600, 3597, + + 3595, 3603, 3601, 3602, 3604, 3604, 3599, 3601, 3602, 3609, + 3605, 3606, 3607, 3607, 3614, 3598, 3605, 3606, 3610, 3600, + 3603, 3608, 3608, 3610, 3609, 3613, 3613, 3617, 3614, 3616, + 3616, 3619, 3621, 3621, 3622, 3622, 3617, 3623, 3623, 3624, + 3624, 3626, 3626, 3627, 3627, 3628, 3628, 3629, 3629, 3619, + 3630, 3632, 3633, 3633, 3635, 3635, 3636, 3637, 3638, 3640, + 3632, 3641, 3641, 3642, 3644, 3636, 3643, 3643, 3645, 3637, + 3659, 3646, 3647, 3647, 3640, 3648, 3630, 3651, 3638, 3644, + 3657, 3645, 3642, 3646, 3649, 3649, 3656, 3648, 3652, 3652, + 3658, 3656, 3651, 3658, 3660, 3660, 3659, 3661, 3657, 3663, + + 3664, 3667, 3663, 3665, 3666, 3668, 3664, 3671, 3669, 3666, + 3672, 3676, 3675, 3671, 3680, 3661, 3675, 3665, 3681, 3672, + 3667, 3678, 3678, 3668, 3669, 3690, 3676, 3701, 3691, 3694, + 3690, 3691, 3695, 3695, 3696, 3696, 3697, 3697, 3681, 3702, + 3680, 3703, 3694, 3699, 3699, 3703, 3704, 3705, 3702, 3707, + 3701, 3709, 3710, 3711, 3712, 3714, 3713, 3709, 3713, 3712, + 3715, 3715, 3705, 3707, 3711, 3716, 3704, 3717, 3719, 3718, + 3714, 3720, 3722, 3721, 3724, 3710, 3725, 3723, 3716, 3724, + 3726, 3722, 3728, 3730, 3719, 3727, 3717, 3718, 3721, 3723, + 3727, 3736, 3726, 3729, 3729, 3731, 3720, 3725, 3737, 3739, + + 3731, 3728, 3751, 3730, 3747, 3736, 3738, 3738, 3739, 3740, + 3741, 3741, 3740, 3746, 3742, 3743, 3743, 0, 3737, 3742, + 3744, 3744, 3745, 3745, 3747, 3748, 3749, 3751, 3748, 3750, + 3752, 3749, 3746, 3753, 3750, 3754, 3755, 3756, 3758, 3753, + 3757, 3757, 3756, 3759, 3759, 3752, 3760, 3760, 3755, 3754, + 3761, 3761, 3763, 3763, 3764, 3765, 3766, 3766, 3758, 3769, + 3768, 3771, 3772, 3775, 3775, 3776, 3776, 3778, 3777, 3764, + 3769, 3779, 3780, 3781, 3765, 3768, 3777, 3779, 3780, 3782, + 3772, 3783, 3792, 3784, 3793, 3771, 3778, 3781, 3784, 3785, + 3785, 3795, 3782, 3787, 3787, 3796, 3796, 3797, 3798, 3800, + + 3783, 3801, 3798, 3792, 3793, 3795, 3801, 3802, 3803, 3804, + 3805, 3806, 3807, 3797, 3808, 3808, 3806, 3807, 3811, 3800, + 3813, 3803, 3804, 3812, 3815, 3817, 3802, 3816, 3816, 3805, + 3817, 3818, 3823, 3815, 3819, 3819, 0, 3818, 3811, 3813, + 3820, 3812, 3821, 3822, 3824, 3820, 3829, 3821, 3822, 3827, + 3824, 3823, 3826, 3826, 3827, 3828, 3828, 3831, 3832, 3833, + 3834, 3831, 3835, 3836, 3829, 3837, 3833, 3838, 3842, 3836, + 3840, 3840, 3846, 3842, 3843, 3843, 3844, 3832, 3845, 3834, + 3838, 3835, 3847, 3845, 3837, 3844, 3848, 3850, 3844, 3849, + 3849, 3846, 3850, 3851, 3852, 3854, 3855, 3855, 3852, 3848, + + 3856, 3847, 3857, 3857, 3858, 3858, 3851, 3859, 3860, 3861, + 3862, 3862, 3859, 3863, 3863, 3860, 3865, 3864, 3865, 3856, + 3867, 3854, 3864, 3866, 3866, 3868, 3869, 3867, 3861, 3870, + 3871, 3875, 3868, 3877, 3870, 3874, 3874, 3878, 3877, 3879, + 3880, 3884, 3878, 3881, 3881, 3869, 3883, 3883, 3885, 3871, + 3875, 3886, 3886, 3887, 3887, 3888, 3890, 3890, 3879, 3880, + 3884, 3892, 3888, 3891, 3891, 3894, 3897, 3885, 3892, 3898, + 3894, 3897, 3899, 3900, 3900, 3901, 3901, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3898, 0, + 0, 3899, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3906, + + 3906, 3906, 3906, 3906, 3906, 3906, 3907, 3907, 3907, 3907, + 3907, 3907, 3907, 3908, 3908, 3908, 3908, 3908, 3908, 3908, + 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3910, 3910, 3910, + 3910, 3910, 3910, 3910, 3911, 3911, 3911, 3911, 3911, 3911, + 3911, 3913, 3913, 0, 3913, 3913, 3913, 3913, 3914, 3914, + 0, 0, 0, 3914, 3914, 3915, 3915, 0, 0, 3915, + 0, 3915, 3916, 0, 0, 0, 0, 0, 3916, 3917, + 3917, 0, 0, 0, 3917, 3917, 3918, 0, 0, 0, + 0, 0, 3918, 3919, 3919, 0, 3919, 3919, 3919, 3919, + 3920, 0, 0, 0, 0, 0, 3920, 3921, 3921, 0, + + 0, 0, 3921, 3921, 3922, 3922, 0, 3922, 3922, 3922, + 3922, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, + 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, + 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, + 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, 3904, + 3904, 3904 } ; static yy_state_type yy_last_accepting_state; @@ -3557,7 +3627,7 @@ static void config_end_include(void) #define YY_NO_INPUT 1 #endif -#line 3559 "" +#line 3629 "" #define INITIAL 0 #define quotedstring 1 @@ -3775,7 +3845,7 @@ YY_DECL { #line 211 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -#line 3777 "" +#line 3847 "" while ( 1 ) /* loops until end-of-file is reached */ { @@ -3808,13 +3878,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 >= 3816 ) + if ( yy_current_state >= 3905 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 7436 ); + while ( yy_base[yy_current_state] != 7612 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4269,122 +4339,122 @@ YY_RULE_SETUP case 86: YY_RULE_SETUP #line 300 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHE_MIN_TTL) } +{ YDVAR(1, VAR_CACHE_MIN_NEGATIVE_TTL) } YY_BREAK case 87: YY_RULE_SETUP #line 301 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_HOST_TTL) } +{ YDVAR(1, VAR_CACHE_MIN_TTL) } YY_BREAK case 88: YY_RULE_SETUP #line 302 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_LAME_TTL) } +{ YDVAR(1, VAR_INFRA_HOST_TTL) } YY_BREAK case 89: YY_RULE_SETUP #line 303 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } +{ YDVAR(1, VAR_INFRA_LAME_TTL) } YY_BREAK case 90: YY_RULE_SETUP #line 304 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } +{ YDVAR(1, VAR_INFRA_CACHE_SLABS) } YY_BREAK case 91: YY_RULE_SETUP #line 305 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } +{ YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) } YY_BREAK case 92: YY_RULE_SETUP #line 306 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } +{ YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) } YY_BREAK case 93: YY_RULE_SETUP #line 307 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_CACHE_MAX_RTT) } +{ YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) } YY_BREAK case 94: YY_RULE_SETUP #line 308 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INFRA_KEEP_PROBING) } +{ YDVAR(1, VAR_INFRA_CACHE_MAX_RTT) } YY_BREAK case 95: YY_RULE_SETUP #line 309 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } +{ YDVAR(1, VAR_INFRA_KEEP_PROBING) } YY_BREAK case 96: YY_RULE_SETUP #line 310 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } +{ YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) } YY_BREAK case 97: YY_RULE_SETUP #line 311 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DELAY_CLOSE) } +{ YDVAR(1, VAR_JOSTLE_TIMEOUT) } YY_BREAK case 98: YY_RULE_SETUP #line 312 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_UDP_CONNECT) } +{ YDVAR(1, VAR_DELAY_CLOSE) } YY_BREAK case 99: YY_RULE_SETUP #line 313 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } +{ YDVAR(1, VAR_UDP_CONNECT) } YY_BREAK case 100: YY_RULE_SETUP #line 314 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } +{ YDVAR(1, VAR_TARGET_FETCH_POLICY) } YY_BREAK case 101: YY_RULE_SETUP #line 315 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } +{ YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) } YY_BREAK case 102: YY_RULE_SETUP #line 316 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_GLUE) } +{ YDVAR(1, VAR_HARDEN_LARGE_QUERIES) } YY_BREAK case 103: YY_RULE_SETUP #line 317 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } +{ YDVAR(1, VAR_HARDEN_GLUE) } YY_BREAK case 104: YY_RULE_SETUP #line 318 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } +{ YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) } YY_BREAK case 105: YY_RULE_SETUP #line 319 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } +{ YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) } YY_BREAK case 106: YY_RULE_SETUP #line 320 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } +{ YDVAR(1, VAR_HARDEN_REFERRAL_PATH) } YY_BREAK case 107: YY_RULE_SETUP #line 321 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HARDEN_UNKNOWN_ADDITIONAL) } +{ YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) } YY_BREAK case 108: YY_RULE_SETUP #line 322 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } +{ YDVAR(1, VAR_HARDEN_UNKNOWN_ADDITIONAL) } YY_BREAK case 109: YY_RULE_SETUP #line 323 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CAPS_WHITELIST) } +{ YDVAR(1, VAR_USE_CAPS_FOR_ID) } YY_BREAK case 110: YY_RULE_SETUP @@ -4394,72 +4464,72 @@ YY_RULE_SETUP case 111: YY_RULE_SETUP #line 325 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } +{ YDVAR(1, VAR_CAPS_WHITELIST) } YY_BREAK case 112: YY_RULE_SETUP #line 326 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_ADDRESS) } +{ YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) } YY_BREAK case 113: YY_RULE_SETUP #line 327 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PRIVATE_DOMAIN) } +{ YDVAR(1, VAR_PRIVATE_ADDRESS) } YY_BREAK case 114: YY_RULE_SETUP #line 328 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH_KEY) } +{ YDVAR(1, VAR_PRIVATE_DOMAIN) } YY_BREAK case 115: YY_RULE_SETUP #line 329 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PREFETCH) } +{ YDVAR(1, VAR_PREFETCH_KEY) } YY_BREAK case 116: YY_RULE_SETUP #line 330 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DENY_ANY) } +{ YDVAR(1, VAR_PREFETCH) } YY_BREAK case 117: YY_RULE_SETUP #line 331 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_STUB_ZONE) } +{ YDVAR(1, VAR_DENY_ANY) } YY_BREAK case 118: YY_RULE_SETUP #line 332 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_NAME) } +{ YDVAR(0, VAR_STUB_ZONE) } YY_BREAK case 119: YY_RULE_SETUP #line 333 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STUB_ADDR) } +{ YDVAR(1, VAR_NAME) } YY_BREAK case 120: YY_RULE_SETUP #line 334 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STUB_HOST) } +{ YDVAR(1, VAR_STUB_ADDR) } YY_BREAK case 121: YY_RULE_SETUP #line 335 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STUB_PRIME) } +{ YDVAR(1, VAR_STUB_HOST) } YY_BREAK case 122: YY_RULE_SETUP #line 336 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STUB_FIRST) } +{ YDVAR(1, VAR_STUB_PRIME) } YY_BREAK case 123: YY_RULE_SETUP #line 337 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STUB_NO_CACHE) } +{ YDVAR(1, VAR_STUB_FIRST) } YY_BREAK case 124: YY_RULE_SETUP #line 338 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } +{ YDVAR(1, VAR_STUB_NO_CACHE) } YY_BREAK case 125: YY_RULE_SETUP @@ -4469,37 +4539,37 @@ YY_RULE_SETUP case 126: YY_RULE_SETUP #line 340 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STUB_TCP_UPSTREAM) } +{ YDVAR(1, VAR_STUB_SSL_UPSTREAM) } YY_BREAK case 127: YY_RULE_SETUP #line 341 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_FORWARD_ZONE) } +{ YDVAR(1, VAR_STUB_TCP_UPSTREAM) } YY_BREAK case 128: YY_RULE_SETUP #line 342 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_ADDR) } +{ YDVAR(0, VAR_FORWARD_ZONE) } YY_BREAK case 129: YY_RULE_SETUP #line 343 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_HOST) } +{ YDVAR(1, VAR_FORWARD_ADDR) } YY_BREAK case 130: YY_RULE_SETUP #line 344 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_FIRST) } +{ YDVAR(1, VAR_FORWARD_HOST) } YY_BREAK case 131: YY_RULE_SETUP #line 345 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_NO_CACHE) } +{ YDVAR(1, VAR_FORWARD_FIRST) } YY_BREAK case 132: YY_RULE_SETUP #line 346 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_NO_CACHE) } YY_BREAK case 133: YY_RULE_SETUP @@ -4509,57 +4579,57 @@ YY_RULE_SETUP case 134: YY_RULE_SETUP #line 348 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FORWARD_TCP_UPSTREAM) } +{ YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) } YY_BREAK case 135: YY_RULE_SETUP #line 349 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_AUTH_ZONE) } +{ YDVAR(1, VAR_FORWARD_TCP_UPSTREAM) } YY_BREAK case 136: YY_RULE_SETUP #line 350 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_RPZ) } +{ YDVAR(0, VAR_AUTH_ZONE) } YY_BREAK case 137: YY_RULE_SETUP #line 351 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_TAGS) } +{ YDVAR(0, VAR_RPZ) } YY_BREAK case 138: YY_RULE_SETUP #line 352 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } +{ YDVAR(1, VAR_TAGS) } YY_BREAK case 139: YY_RULE_SETUP #line 353 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } +{ YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) } YY_BREAK case 140: YY_RULE_SETUP #line 354 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG) } +{ YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) } YY_BREAK case 141: YY_RULE_SETUP #line 355 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_LOG_NAME) } +{ YDVAR(1, VAR_RPZ_LOG) } YY_BREAK case 142: YY_RULE_SETUP #line 356 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RPZ_SIGNAL_NXDOMAIN_RA) } +{ YDVAR(1, VAR_RPZ_LOG_NAME) } YY_BREAK case 143: YY_RULE_SETUP #line 357 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_ZONEFILE) } +{ YDVAR(1, VAR_RPZ_SIGNAL_NXDOMAIN_RA) } YY_BREAK case 144: YY_RULE_SETUP #line 358 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MASTER) } +{ YDVAR(1, VAR_ZONEFILE) } YY_BREAK case 145: YY_RULE_SETUP @@ -4569,1104 +4639,1139 @@ YY_RULE_SETUP case 146: YY_RULE_SETUP #line 360 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_URL) } +{ YDVAR(1, VAR_MASTER) } YY_BREAK case 147: YY_RULE_SETUP #line 361 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_ALLOW_NOTIFY) } +{ YDVAR(1, VAR_URL) } YY_BREAK case 148: YY_RULE_SETUP #line 362 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FOR_DOWNSTREAM) } +{ YDVAR(1, VAR_ALLOW_NOTIFY) } YY_BREAK case 149: YY_RULE_SETUP #line 363 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FOR_UPSTREAM) } +{ YDVAR(1, VAR_FOR_DOWNSTREAM) } YY_BREAK case 150: YY_RULE_SETUP #line 364 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FALLBACK_ENABLED) } +{ YDVAR(1, VAR_FOR_UPSTREAM) } YY_BREAK case 151: YY_RULE_SETUP #line 365 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_VIEW) } +{ YDVAR(1, VAR_FALLBACK_ENABLED) } YY_BREAK case 152: YY_RULE_SETUP #line 366 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VIEW_FIRST) } +{ YDVAR(0, VAR_VIEW) } YY_BREAK case 153: YY_RULE_SETUP #line 367 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } +{ YDVAR(1, VAR_VIEW_FIRST) } YY_BREAK case 154: YY_RULE_SETUP #line 368 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } +{ YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) } YY_BREAK case 155: YY_RULE_SETUP #line 369 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL) } +{ YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) } YY_BREAK case 156: YY_RULE_SETUP #line 370 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_INTERFACE_ACTION) } +{ YDVAR(2, VAR_ACCESS_CONTROL) } YY_BREAK case 157: YY_RULE_SETUP #line 371 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } +{ YDVAR(2, VAR_INTERFACE_ACTION) } YY_BREAK case 158: YY_RULE_SETUP #line 372 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } +{ YDVAR(1, VAR_SEND_CLIENT_SUBNET) } YY_BREAK case 159: YY_RULE_SETUP #line 373 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ZONE) } YY_BREAK case 160: YY_RULE_SETUP #line 374 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } +{ YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) } YY_BREAK case 161: YY_RULE_SETUP #line 375 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) } YY_BREAK case 162: YY_RULE_SETUP #line 376 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) } YY_BREAK case 163: YY_RULE_SETUP #line 377 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } +{ YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) } YY_BREAK case 164: YY_RULE_SETUP #line 378 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) } YY_BREAK case 165: YY_RULE_SETUP #line 379 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } +{ YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) } YY_BREAK case 166: YY_RULE_SETUP #line 380 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) } YY_BREAK case 167: YY_RULE_SETUP #line 381 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_IDENTITY) } +{ YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) } YY_BREAK case 168: YY_RULE_SETUP #line 382 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_VERSION) } +{ YDVAR(1, VAR_HIDE_IDENTITY) } YY_BREAK case 169: YY_RULE_SETUP #line 383 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } +{ YDVAR(1, VAR_HIDE_VERSION) } YY_BREAK case 170: YY_RULE_SETUP #line 384 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HIDE_HTTP_USER_AGENT) } +{ YDVAR(1, VAR_HIDE_TRUSTANCHOR) } YY_BREAK case 171: YY_RULE_SETUP #line 385 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IDENTITY) } +{ YDVAR(1, VAR_HIDE_HTTP_USER_AGENT) } YY_BREAK case 172: YY_RULE_SETUP #line 386 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VERSION) } +{ YDVAR(1, VAR_IDENTITY) } YY_BREAK case 173: YY_RULE_SETUP #line 387 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_HTTP_USER_AGENT) } +{ YDVAR(1, VAR_VERSION) } YY_BREAK case 174: YY_RULE_SETUP #line 388 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MODULE_CONF) } +{ YDVAR(1, VAR_HTTP_USER_AGENT) } YY_BREAK case 175: YY_RULE_SETUP #line 389 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR) } +{ YDVAR(1, VAR_MODULE_CONF) } YY_BREAK case 176: YY_RULE_SETUP #line 390 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR) } YY_BREAK case 177: YY_RULE_SETUP #line 391 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_DLV_ANCHOR_FILE) } YY_BREAK case 178: YY_RULE_SETUP #line 392 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } +{ YDVAR(1, VAR_TRUST_ANCHOR_FILE) } YY_BREAK case 179: YY_RULE_SETUP #line 393 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } +{ YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) } YY_BREAK case 180: YY_RULE_SETUP #line 394 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR) } +{ YDVAR(1, VAR_TRUSTED_KEYS_FILE) } YY_BREAK case 181: YY_RULE_SETUP #line 395 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } +{ YDVAR(1, VAR_TRUST_ANCHOR) } YY_BREAK case 182: YY_RULE_SETUP #line 396 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } +{ YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) } YY_BREAK case 183: YY_RULE_SETUP #line 397 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } +{ YDVAR(1, VAR_ROOT_KEY_SENTINEL) } YY_BREAK case 184: YY_RULE_SETUP #line 398 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } +{ YDVAR(1, VAR_VAL_OVERRIDE_DATE) } YY_BREAK case 185: YY_RULE_SETUP #line 399 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MIN) } YY_BREAK case 186: YY_RULE_SETUP #line 400 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VAL_MAX_RESTART) } +{ YDVAR(1, VAR_VAL_SIG_SKEW_MAX) } YY_BREAK case 187: YY_RULE_SETUP #line 401 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_BOGUS_TTL) } +{ YDVAR(1, VAR_VAL_MAX_RESTART) } YY_BREAK case 188: YY_RULE_SETUP #line 402 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } +{ YDVAR(1, VAR_BOGUS_TTL) } YY_BREAK case 189: YY_RULE_SETUP #line 403 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } +{ YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) } YY_BREAK case 190: YY_RULE_SETUP #line 404 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } +{ YDVAR(1, VAR_VAL_PERMISSIVE_MODE) } YY_BREAK case 191: YY_RULE_SETUP #line 405 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IGNORE_CD_FLAG) } +{ YDVAR(1, VAR_AGGRESSIVE_NSEC) } YY_BREAK case 192: YY_RULE_SETUP #line 406 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_EDNS_DO) } +{ YDVAR(1, VAR_IGNORE_CD_FLAG) } YY_BREAK case 193: YY_RULE_SETUP #line 407 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED) } +{ YDVAR(1, VAR_DISABLE_EDNS_DO) } YY_BREAK case 194: YY_RULE_SETUP #line 408 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED) } YY_BREAK case 195: YY_RULE_SETUP #line 409 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL) } YY_BREAK case 196: YY_RULE_SETUP #line 410 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } +{ YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) } YY_BREAK case 197: YY_RULE_SETUP #line 411 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } +{ YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) } YY_BREAK case 198: YY_RULE_SETUP #line 412 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_EDE_SERVE_EXPIRED) } +{ YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) } YY_BREAK case 199: YY_RULE_SETUP #line 413 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } +{ YDVAR(1, VAR_EDE_SERVE_EXPIRED) } YY_BREAK case 200: YY_RULE_SETUP #line 414 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_DSA) } +{ YDVAR(1, VAR_SERVE_ORIGINAL_TTL) } YY_BREAK case 201: YY_RULE_SETUP #line 415 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FAKE_SHA1) } +{ YDVAR(1, VAR_FAKE_DSA) } YY_BREAK case 202: YY_RULE_SETUP #line 416 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_VAL_LOG_LEVEL) } +{ YDVAR(1, VAR_FAKE_SHA1) } YY_BREAK case 203: YY_RULE_SETUP #line 417 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SIZE) } +{ YDVAR(1, VAR_VAL_LOG_LEVEL) } YY_BREAK case 204: YY_RULE_SETUP #line 418 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_KEY_CACHE_SLABS) } +{ YDVAR(1, VAR_KEY_CACHE_SIZE) } YY_BREAK case 205: YY_RULE_SETUP #line 419 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_NEG_CACHE_SIZE) } +{ YDVAR(1, VAR_KEY_CACHE_SLABS) } YY_BREAK case 206: YY_RULE_SETUP #line 420 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } +{ YDVAR(1, VAR_NEG_CACHE_SIZE) } YY_BREAK case 207: YY_RULE_SETUP -#line 422 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } +#line 421 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) } YY_BREAK case 208: YY_RULE_SETUP #line 423 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_CHECK) } +{ YDVAR(1, VAR_ZONEMD_PERMISSIVE_MODE) } YY_BREAK case 209: YY_RULE_SETUP #line 424 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } +{ YDVAR(1, VAR_ZONEMD_CHECK) } YY_BREAK case 210: YY_RULE_SETUP #line 425 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_ADD_HOLDDOWN) } +{ YDVAR(1, VAR_ZONEMD_REJECT_ABSENCE) } YY_BREAK case 211: YY_RULE_SETUP #line 426 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DEL_HOLDDOWN) } +{ YDVAR(1, VAR_ADD_HOLDDOWN) } YY_BREAK case 212: YY_RULE_SETUP #line 427 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_KEEP_MISSING) } +{ YDVAR(1, VAR_DEL_HOLDDOWN) } YY_BREAK case 213: YY_RULE_SETUP #line 428 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } +{ YDVAR(1, VAR_KEEP_MISSING) } YY_BREAK case 214: YY_RULE_SETUP #line 429 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_USE_SYSLOG) } +{ YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) } YY_BREAK case 215: YY_RULE_SETUP #line 430 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOG_IDENTITY) } +{ YDVAR(1, VAR_USE_SYSLOG) } YY_BREAK case 216: YY_RULE_SETUP #line 431 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TIME_ASCII) } +{ YDVAR(1, VAR_LOG_IDENTITY) } YY_BREAK case 217: YY_RULE_SETUP #line 432 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOG_QUERIES) } +{ YDVAR(1, VAR_LOG_TIME_ASCII) } YY_BREAK case 218: YY_RULE_SETUP #line 433 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOG_REPLIES) } +{ YDVAR(1, VAR_LOG_QUERIES) } YY_BREAK case 219: YY_RULE_SETUP #line 434 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } +{ YDVAR(1, VAR_LOG_REPLIES) } YY_BREAK case 220: YY_RULE_SETUP #line 435 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } +{ YDVAR(1, VAR_LOG_TAG_QUERYREPLY) } YY_BREAK case 221: YY_RULE_SETUP #line 436 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOG_SERVFAIL) } +{ YDVAR(1, VAR_LOG_LOCAL_ACTIONS) } YY_BREAK case 222: YY_RULE_SETUP #line 437 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOG_DESTADDR) } +{ YDVAR(1, VAR_LOG_SERVFAIL) } YY_BREAK case 223: YY_RULE_SETUP #line 438 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE) } +{ YDVAR(1, VAR_LOG_DESTADDR) } YY_BREAK case 224: YY_RULE_SETUP #line 439 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA) } +{ YDVAR(2, VAR_LOCAL_ZONE) } YY_BREAK case 225: YY_RULE_SETUP #line 440 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOCAL_DATA_PTR) } +{ YDVAR(1, VAR_LOCAL_DATA) } YY_BREAK case 226: YY_RULE_SETUP #line 441 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } +{ YDVAR(1, VAR_LOCAL_DATA_PTR) } YY_BREAK case 227: YY_RULE_SETUP #line 442 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } +{ YDVAR(1, VAR_UNBLOCK_LAN_ZONES) } YY_BREAK case 228: YY_RULE_SETUP #line 443 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INTERVAL) } +{ YDVAR(1, VAR_INSECURE_LAN_ZONES) } YY_BREAK case 229: YY_RULE_SETUP #line 444 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } +{ YDVAR(1, VAR_STATISTICS_INTERVAL) } YY_BREAK case 230: YY_RULE_SETUP #line 445 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_EXTENDED_STATISTICS) } +{ YDVAR(1, VAR_STATISTICS_CUMULATIVE) } YY_BREAK case 231: YY_RULE_SETUP #line 446 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_STATISTICS_INHIBIT_ZERO) } +{ YDVAR(1, VAR_EXTENDED_STATISTICS) } YY_BREAK case 232: YY_RULE_SETUP #line 447 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SHM_ENABLE) } +{ YDVAR(1, VAR_STATISTICS_INHIBIT_ZERO) } YY_BREAK case 233: YY_RULE_SETUP #line 448 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SHM_KEY) } +{ YDVAR(1, VAR_SHM_ENABLE) } YY_BREAK case 234: YY_RULE_SETUP #line 449 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_REMOTE_CONTROL) } +{ YDVAR(1, VAR_SHM_KEY) } YY_BREAK case 235: YY_RULE_SETUP #line 450 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_ENABLE) } +{ YDVAR(0, VAR_REMOTE_CONTROL) } YY_BREAK case 236: YY_RULE_SETUP #line 451 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_INTERFACE) } +{ YDVAR(1, VAR_CONTROL_ENABLE) } YY_BREAK case 237: YY_RULE_SETUP #line 452 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_PORT) } +{ YDVAR(1, VAR_CONTROL_INTERFACE) } YY_BREAK case 238: YY_RULE_SETUP #line 453 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_USE_CERT) } +{ YDVAR(1, VAR_CONTROL_PORT) } YY_BREAK case 239: YY_RULE_SETUP #line 454 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_KEY_FILE) } +{ YDVAR(1, VAR_CONTROL_USE_CERT) } YY_BREAK case 240: YY_RULE_SETUP #line 455 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_SERVER_CERT_FILE) } +{ YDVAR(1, VAR_SERVER_KEY_FILE) } YY_BREAK case 241: YY_RULE_SETUP #line 456 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_KEY_FILE) } +{ YDVAR(1, VAR_SERVER_CERT_FILE) } YY_BREAK case 242: YY_RULE_SETUP #line 457 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CONTROL_CERT_FILE) } +{ YDVAR(1, VAR_CONTROL_KEY_FILE) } YY_BREAK case 243: YY_RULE_SETUP #line 458 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PYTHON_SCRIPT) } +{ YDVAR(1, VAR_CONTROL_CERT_FILE) } YY_BREAK case 244: YY_RULE_SETUP #line 459 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_PYTHON) } +{ YDVAR(1, VAR_PYTHON_SCRIPT) } YY_BREAK case 245: YY_RULE_SETUP #line 460 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DYNLIB_FILE) } +{ YDVAR(0, VAR_PYTHON) } YY_BREAK case 246: YY_RULE_SETUP #line 461 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_DYNLIB) } +{ YDVAR(1, VAR_DYNLIB_FILE) } YY_BREAK case 247: YY_RULE_SETUP #line 462 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DOMAIN_INSECURE) } +{ YDVAR(0, VAR_DYNLIB) } YY_BREAK case 248: YY_RULE_SETUP #line 463 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MINIMAL_RESPONSES) } +{ YDVAR(1, VAR_DOMAIN_INSECURE) } YY_BREAK case 249: YY_RULE_SETUP #line 464 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } +{ YDVAR(1, VAR_MINIMAL_RESPONSES) } YY_BREAK case 250: YY_RULE_SETUP #line 465 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +{ YDVAR(1, VAR_RRSET_ROUNDROBIN) } YY_BREAK case 251: YY_RULE_SETUP #line 466 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MAX_UDP_SIZE) } +{ YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } YY_BREAK case 252: YY_RULE_SETUP #line 467 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_PREFIX) } +{ YDVAR(1, VAR_DISCARD_TIMEOUT) } YY_BREAK case 253: YY_RULE_SETUP #line 468 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_SYNTHALL) } +{ YDVAR(1, VAR_WAIT_LIMIT) } YY_BREAK case 254: YY_RULE_SETUP #line 469 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } +{ YDVAR(1, VAR_WAIT_LIMIT_COOKIE) } YY_BREAK case 255: YY_RULE_SETUP #line 470 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_NAT64_PREFIX) } +{ YDVAR(1, VAR_WAIT_LIMIT_NETBLOCK) } YY_BREAK case 256: YY_RULE_SETUP #line 471 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DEFINE_TAG) } +{ YDVAR(1, VAR_WAIT_LIMIT_COOKIE_NETBLOCK) } YY_BREAK case 257: YY_RULE_SETUP #line 472 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } +{ YDVAR(1, VAR_MAX_UDP_SIZE) } YY_BREAK case 258: YY_RULE_SETUP #line 473 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } +{ YDVAR(1, VAR_DNS64_PREFIX) } YY_BREAK case 259: YY_RULE_SETUP #line 474 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } +{ YDVAR(1, VAR_DNS64_SYNTHALL) } YY_BREAK case 260: YY_RULE_SETUP #line 475 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } +{ YDVAR(1, VAR_DNS64_IGNORE_AAAA) } YY_BREAK case 261: YY_RULE_SETUP #line 476 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } +{ YDVAR(1, VAR_NAT64_PREFIX) } YY_BREAK case 262: YY_RULE_SETUP #line 477 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_INTERFACE_TAG) } +{ YDVAR(1, VAR_DEFINE_TAG) } YY_BREAK case 263: YY_RULE_SETUP #line 478 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(3, VAR_INTERFACE_TAG_ACTION) } +{ YDVAR(2, VAR_LOCAL_ZONE_TAG) } YY_BREAK case 264: YY_RULE_SETUP #line 479 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(3, VAR_INTERFACE_TAG_DATA) } +{ YDVAR(2, VAR_ACCESS_CONTROL_TAG) } YY_BREAK case 265: YY_RULE_SETUP #line 480 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_INTERFACE_VIEW) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) } YY_BREAK case 266: YY_RULE_SETUP #line 481 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } +{ YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) } YY_BREAK case 267: YY_RULE_SETUP #line 482 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_DNSTAP) } +{ YDVAR(2, VAR_ACCESS_CONTROL_VIEW) } YY_BREAK case 268: YY_RULE_SETUP #line 483 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_ENABLE) } +{ YDVAR(2, VAR_INTERFACE_TAG) } YY_BREAK case 269: YY_RULE_SETUP #line 484 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } +{ YDVAR(3, VAR_INTERFACE_TAG_ACTION) } YY_BREAK case 270: YY_RULE_SETUP #line 485 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } +{ YDVAR(3, VAR_INTERFACE_TAG_DATA) } YY_BREAK case 271: YY_RULE_SETUP #line 486 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IP) } +{ YDVAR(2, VAR_INTERFACE_VIEW) } YY_BREAK case 272: YY_RULE_SETUP #line 487 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS) } +{ YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) } YY_BREAK case 273: YY_RULE_SETUP #line 488 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } +{ YDVAR(0, VAR_DNSTAP) } YY_BREAK case 274: YY_RULE_SETUP #line 489 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } +{ YDVAR(1, VAR_DNSTAP_ENABLE) } YY_BREAK case 275: YY_RULE_SETUP #line 490 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } +{ YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) } YY_BREAK case 276: YY_RULE_SETUP -#line 492 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } +#line 491 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_SOCKET_PATH) } YY_BREAK case 277: YY_RULE_SETUP -#line 494 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } +#line 492 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_IP) } YY_BREAK case 278: YY_RULE_SETUP -#line 495 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } +#line 493 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_TLS) } YY_BREAK case 279: YY_RULE_SETUP -#line 496 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_IDENTITY) } +#line 494 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) } YY_BREAK case 280: YY_RULE_SETUP -#line 497 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSTAP_VERSION) } +#line 495 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) } YY_BREAK case 281: YY_RULE_SETUP -#line 498 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 496 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) } YY_BREAK case 282: YY_RULE_SETUP -#line 500 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 498 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { - YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } + YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) } YY_BREAK case 283: YY_RULE_SETUP -#line 502 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } +#line 500 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) } YY_BREAK case 284: YY_RULE_SETUP -#line 504 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } +#line 501 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_SEND_VERSION) } YY_BREAK case 285: YY_RULE_SETUP -#line 506 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } +#line 502 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_IDENTITY) } YY_BREAK case 286: YY_RULE_SETUP -#line 508 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } +#line 503 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSTAP_VERSION) } YY_BREAK case 287: YY_RULE_SETUP -#line 510 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } +#line 504 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) } YY_BREAK case 288: YY_RULE_SETUP -#line 511 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT) } +#line 506 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) } YY_BREAK case 289: YY_RULE_SETUP -#line 512 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_COOKIE) } +#line 508 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) } YY_BREAK case 290: YY_RULE_SETUP -#line 513 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT) } +#line 510 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) } YY_BREAK case 291: YY_RULE_SETUP -#line 514 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } +#line 512 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) } YY_BREAK case 292: YY_RULE_SETUP -#line 515 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SLABS) } +#line 514 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) } YY_BREAK case 293: YY_RULE_SETUP #line 516 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) } YY_BREAK case 294: YY_RULE_SETUP #line 517 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_SIZE) } +{ YDVAR(1, VAR_IP_RATELIMIT) } YY_BREAK case 295: YY_RULE_SETUP #line 518 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } +{ YDVAR(1, VAR_IP_RATELIMIT_COOKIE) } YY_BREAK case 296: YY_RULE_SETUP #line 519 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } +{ YDVAR(1, VAR_RATELIMIT) } YY_BREAK case 297: YY_RULE_SETUP #line 520 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_IP_RATELIMIT_SLABS) } YY_BREAK case 298: YY_RULE_SETUP #line 521 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_FACTOR) } +{ YDVAR(1, VAR_RATELIMIT_SLABS) } YY_BREAK case 299: YY_RULE_SETUP #line 522 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IP_RATELIMIT_BACKOFF) } +{ YDVAR(1, VAR_IP_RATELIMIT_SIZE) } YY_BREAK case 300: YY_RULE_SETUP #line 523 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_RATELIMIT_BACKOFF) } +{ YDVAR(1, VAR_RATELIMIT_SIZE) } YY_BREAK case 301: YY_RULE_SETUP #line 524 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) } +{ YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) } YY_BREAK case 302: YY_RULE_SETUP #line 525 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MAX_SENT_COUNT) } +{ YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) } YY_BREAK case 303: YY_RULE_SETUP #line 526 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_MAX_QUERY_RESTARTS) } +{ YDVAR(1, VAR_IP_RATELIMIT_FACTOR) } YY_BREAK case 304: YY_RULE_SETUP #line 527 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_LOW_RTT) } +{ YDVAR(1, VAR_RATELIMIT_FACTOR) } YY_BREAK case 305: YY_RULE_SETUP #line 528 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_NUM) } +{ YDVAR(1, VAR_IP_RATELIMIT_BACKOFF) } YY_BREAK case 306: YY_RULE_SETUP #line 529 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_RATELIMIT_BACKOFF) } YY_BREAK case 307: YY_RULE_SETUP #line 530 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_OUTBOUND_MSG_RETRY) } YY_BREAK case 308: YY_RULE_SETUP #line 531 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } +{ YDVAR(1, VAR_MAX_SENT_COUNT) } YY_BREAK case 309: YY_RULE_SETUP #line 532 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_TAG) } +{ YDVAR(1, VAR_MAX_QUERY_RESTARTS) } YY_BREAK case 310: YY_RULE_SETUP #line 533 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP) } +{ YDVAR(1, VAR_LOW_RTT) } YY_BREAK case 311: YY_RULE_SETUP #line 534 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_RESPONSE_IP_DATA) } +{ YDVAR(1, VAR_FAST_SERVER_NUM) } YY_BREAK case 312: YY_RULE_SETUP #line 535 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_DNSCRYPT) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 313: YY_RULE_SETUP #line 536 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 314: YY_RULE_SETUP #line 537 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PORT) } +{ YDVAR(1, VAR_FAST_SERVER_PERMIL) } YY_BREAK case 315: YY_RULE_SETUP #line 538 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } +{ YDVAR(2, VAR_RESPONSE_IP_TAG) } YY_BREAK case 316: YY_RULE_SETUP #line 539 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } +{ YDVAR(2, VAR_RESPONSE_IP) } YY_BREAK case 317: YY_RULE_SETUP #line 540 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +{ YDVAR(2, VAR_RESPONSE_IP_DATA) } YY_BREAK case 318: YY_RULE_SETUP #line 541 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } +{ YDVAR(0, VAR_DNSCRYPT) } YY_BREAK case 319: YY_RULE_SETUP #line 542 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +{ YDVAR(1, VAR_DNSCRYPT_ENABLE) } YY_BREAK case 320: YY_RULE_SETUP -#line 544 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ - YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } +#line 543 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PORT) } YY_BREAK case 321: YY_RULE_SETUP -#line 546 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } +#line 544 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER) } YY_BREAK case 322: YY_RULE_SETUP -#line 547 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } +#line 545 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } YY_BREAK case 323: YY_RULE_SETUP -#line 548 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PAD_RESPONSES) } +#line 546 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } YY_BREAK case 324: YY_RULE_SETUP -#line 549 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } +#line 547 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) } YY_BREAK case 325: YY_RULE_SETUP -#line 550 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PAD_QUERIES) } +#line 548 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 326: YY_RULE_SETUP -#line 551 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } +#line 550 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 327: YY_RULE_SETUP #line 552 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) } YY_BREAK case 328: YY_RULE_SETUP #line 553 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +{ YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) } YY_BREAK case 329: YY_RULE_SETUP #line 554 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +{ YDVAR(1, VAR_PAD_RESPONSES) } YY_BREAK case 330: YY_RULE_SETUP #line 555 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +{ YDVAR(1, VAR_PAD_RESPONSES_BLOCK_SIZE) } YY_BREAK case 331: YY_RULE_SETUP #line 556 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_PAD_QUERIES) } YY_BREAK case 332: YY_RULE_SETUP #line 557 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +{ YDVAR(1, VAR_PAD_QUERIES_BLOCK_SIZE) } YY_BREAK case 333: YY_RULE_SETUP #line 558 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 334: YY_RULE_SETUP #line 559 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_CACHEDB) } +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 335: YY_RULE_SETUP #line 560 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_BACKEND) } +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 336: YY_RULE_SETUP #line 561 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 337: YY_RULE_SETUP #line 562 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_NO_STORE) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 338: YY_RULE_SETUP #line 563 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISHOST) } +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK case 339: YY_RULE_SETUP #line 564 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPORT) } +{ YDVAR(1, VAR_IPSECMOD_STRICT) } YY_BREAK case 340: YY_RULE_SETUP #line 565 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPATH) } +{ YDVAR(0, VAR_CACHEDB) } YY_BREAK case 341: YY_RULE_SETUP #line 566 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISPASSWORD) } +{ YDVAR(1, VAR_CACHEDB_BACKEND) } YY_BREAK case 342: YY_RULE_SETUP #line 567 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } YY_BREAK case 343: YY_RULE_SETUP #line 568 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } +{ YDVAR(1, VAR_CACHEDB_NO_STORE) } YY_BREAK case 344: YY_RULE_SETUP #line 569 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_CACHEDB_REDISLOGICALDB) } +{ YDVAR(1, VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED) } YY_BREAK case 345: YY_RULE_SETUP #line 570 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(0, VAR_IPSET) } +{ YDVAR(1, VAR_CACHEDB_REDISHOST) } YY_BREAK case 346: YY_RULE_SETUP #line 571 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V4) } +{ YDVAR(1, VAR_CACHEDB_REDISPORT) } YY_BREAK case 347: YY_RULE_SETUP #line 572 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_IPSET_NAME_V6) } +{ YDVAR(1, VAR_CACHEDB_REDISPATH) } YY_BREAK case 348: YY_RULE_SETUP #line 573 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } +{ YDVAR(1, VAR_CACHEDB_REDISPASSWORD) } YY_BREAK case 349: YY_RULE_SETUP #line 574 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } +{ YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) } YY_BREAK case 350: YY_RULE_SETUP #line 575 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_ANSWER_COOKIE ) } +{ YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) } YY_BREAK case 351: YY_RULE_SETUP #line 576 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_COOKIE_SECRET) } +{ YDVAR(1, VAR_CACHEDB_REDISLOGICALDB) } YY_BREAK case 352: YY_RULE_SETUP #line 577 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } +{ YDVAR(0, VAR_IPSET) } YY_BREAK case 353: YY_RULE_SETUP #line 578 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } +{ YDVAR(1, VAR_IPSET_NAME_V4) } YY_BREAK case 354: YY_RULE_SETUP #line 579 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_NSID ) } +{ YDVAR(1, VAR_IPSET_NAME_V6) } YY_BREAK case 355: YY_RULE_SETUP #line 580 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_EDE ) } +{ YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) } YY_BREAK case 356: YY_RULE_SETUP #line 581 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ YDVAR(1, VAR_PROXY_PROTOCOL_PORT) } +{ YDVAR(2, VAR_TCP_CONNECTION_LIMIT) } YY_BREAK case 357: -/* rule 357 can match eol */ YY_RULE_SETUP #line 582 "/usr/src/usr.sbin/unbound/util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } +{ YDVAR(1, VAR_ANSWER_COOKIE ) } YY_BREAK -/* Quoted strings. Strip leading and ending quotes */ case 358: YY_RULE_SETUP +#line 583 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_COOKIE_SECRET) } + YY_BREAK +case 359: +YY_RULE_SETUP +#line 584 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(2, VAR_EDNS_CLIENT_STRING) } + YY_BREAK +case 360: +YY_RULE_SETUP #line 585 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } + YY_BREAK +case 361: +YY_RULE_SETUP +#line 586 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_NSID ) } + YY_BREAK +case 362: +YY_RULE_SETUP +#line 587 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_EDE ) } + YY_BREAK +case 363: +YY_RULE_SETUP +#line 588 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ YDVAR(1, VAR_PROXY_PROTOCOL_PORT) } + YY_BREAK +case 364: +/* rule 364 can match eol */ +YY_RULE_SETUP +#line 589 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++; } + YY_BREAK +/* Quoted strings. Strip leading and ending quotes */ +case 365: +YY_RULE_SETUP +#line 592 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 586 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 593 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 359: +case 366: YY_RULE_SETUP -#line 591 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 598 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 360: -/* rule 360 can match eol */ +case 367: +/* rule 367 can match eol */ YY_RULE_SETUP -#line 592 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 599 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 361: +case 368: YY_RULE_SETUP -#line 594 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 601 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5679,34 +5784,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 362: +case 369: YY_RULE_SETUP -#line 606 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 613 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 607 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 614 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 363: +case 370: YY_RULE_SETUP -#line 612 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 619 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 364: -/* rule 364 can match eol */ +case 371: +/* rule 371 can match eol */ YY_RULE_SETUP -#line 613 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 620 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 365: +case 372: YY_RULE_SETUP -#line 615 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 622 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -5719,38 +5824,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 366: +case 373: YY_RULE_SETUP -#line 627 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 634 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 629 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 636 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 367: +case 374: YY_RULE_SETUP -#line 633 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 640 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK -case 368: -/* rule 368 can match eol */ +case 375: +/* rule 375 can match eol */ YY_RULE_SETUP -#line 634 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 641 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK -case 369: +case 376: YY_RULE_SETUP -#line 635 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 642 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK -case 370: +case 377: YY_RULE_SETUP -#line 636 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 643 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 0); @@ -5758,27 +5863,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 641 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 648 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 371: +case 378: YY_RULE_SETUP -#line 645 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 652 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 372: -/* rule 372 can match eol */ +case 379: +/* rule 379 can match eol */ YY_RULE_SETUP -#line 646 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 653 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 373: +case 380: YY_RULE_SETUP -#line 648 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 655 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -5788,7 +5893,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 654 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 661 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -5803,39 +5908,39 @@ case YY_STATE_EOF(val): } YY_BREAK /* include-toplevel: directive */ -case 374: +case 381: YY_RULE_SETUP -#line 668 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 675 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel); } YY_BREAK case YY_STATE_EOF(include_toplevel): -#line 671 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 678 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("EOF inside include_toplevel directive"); BEGIN(inc_prev); } YY_BREAK -case 375: +case 382: YY_RULE_SETUP -#line 675 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 682 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("ITSP ")); /* ignore */ } YY_BREAK -case 376: -/* rule 376 can match eol */ +case 383: +/* rule 383 can match eol */ YY_RULE_SETUP -#line 676 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 683 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++; } YY_BREAK -case 377: +case 384: YY_RULE_SETUP -#line 677 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 684 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); } YY_BREAK -case 378: +case 385: YY_RULE_SETUP -#line 678 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 685 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("ITunquotedstr(%s) ", yytext)); config_start_include_glob(yytext, 1); @@ -5844,29 +5949,29 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_toplevel_quoted): -#line 684 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 691 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 379: +case 386: YY_RULE_SETUP -#line 688 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 695 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("ITSTR(%s) ", yytext)); yymore(); } YY_BREAK -case 380: -/* rule 380 can match eol */ +case 387: +/* rule 387 can match eol */ YY_RULE_SETUP -#line 689 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 696 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 381: +case 388: YY_RULE_SETUP -#line 693 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 700 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("ITQE ")); yytext[yyleng - 1] = '\0'; @@ -5875,33 +5980,33 @@ YY_RULE_SETUP return (VAR_FORCE_TOPLEVEL); } YY_BREAK -case 382: +case 389: YY_RULE_SETUP -#line 701 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 708 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 383: +case 390: YY_RULE_SETUP -#line 705 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 712 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 384: +case 391: YY_RULE_SETUP -#line 709 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 716 "/usr/src/usr.sbin/unbound/util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 385: +case 392: YY_RULE_SETUP -#line 713 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 720 "/usr/src/usr.sbin/unbound/util/configlexer.lex" ECHO; YY_BREAK -#line 5903 "" +#line 6008 "" case YY_END_OF_BUFFER: { @@ -6194,7 +6299,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 >= 3816 ) + if ( yy_current_state >= 3905 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -6222,11 +6327,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 >= 3816 ) + if ( yy_current_state >= 3905 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 3815); + yy_is_jam = (yy_current_state == 3904); return yy_is_jam ? 0 : yy_current_state; } @@ -6859,7 +6964,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 713 "/usr/src/usr.sbin/unbound/util/configlexer.lex" +#line 720 "/usr/src/usr.sbin/unbound/util/configlexer.lex" diff --git a/sbin/unwind/libunbound/util/configlexer.lex b/sbin/unwind/libunbound/util/configlexer.lex index e1ab76e2556..7ae1b8c38f4 100644 --- a/sbin/unwind/libunbound/util/configlexer.lex +++ b/sbin/unwind/libunbound/util/configlexer.lex @@ -297,6 +297,7 @@ rrset-cache-size{COLON} { YDVAR(1, VAR_RRSET_CACHE_SIZE) } rrset-cache-slabs{COLON} { YDVAR(1, VAR_RRSET_CACHE_SLABS) } cache-max-ttl{COLON} { YDVAR(1, VAR_CACHE_MAX_TTL) } cache-max-negative-ttl{COLON} { YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) } +cache-min-negative-ttl{COLON} { YDVAR(1, VAR_CACHE_MIN_NEGATIVE_TTL) } cache-min-ttl{COLON} { YDVAR(1, VAR_CACHE_MIN_TTL) } infra-host-ttl{COLON} { YDVAR(1, VAR_INFRA_HOST_TTL) } infra-lame-ttl{COLON} { YDVAR(1, VAR_INFRA_LAME_TTL) } @@ -463,6 +464,11 @@ domain-insecure{COLON} { YDVAR(1, VAR_DOMAIN_INSECURE) } minimal-responses{COLON} { YDVAR(1, VAR_MINIMAL_RESPONSES) } rrset-roundrobin{COLON} { YDVAR(1, VAR_RRSET_ROUNDROBIN) } unknown-server-time-limit{COLON} { YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) } +discard-timeout{COLON} { YDVAR(1, VAR_DISCARD_TIMEOUT) } +wait-limit{COLON} { YDVAR(1, VAR_WAIT_LIMIT) } +wait-limit-cookie{COLON} { YDVAR(1, VAR_WAIT_LIMIT_COOKIE) } +wait-limit-netblock{COLON} { YDVAR(1, VAR_WAIT_LIMIT_NETBLOCK) } +wait-limit-cookie-netblock{COLON} { YDVAR(1, VAR_WAIT_LIMIT_COOKIE_NETBLOCK) } max-udp-size{COLON} { YDVAR(1, VAR_MAX_UDP_SIZE) } dns64-prefix{COLON} { YDVAR(1, VAR_DNS64_PREFIX) } dns64-synthall{COLON} { YDVAR(1, VAR_DNS64_SYNTHALL) } @@ -560,6 +566,7 @@ cachedb{COLON} { YDVAR(0, VAR_CACHEDB) } backend{COLON} { YDVAR(1, VAR_CACHEDB_BACKEND) } secret-seed{COLON} { YDVAR(1, VAR_CACHEDB_SECRETSEED) } cachedb-no-store{COLON} { YDVAR(1, VAR_CACHEDB_NO_STORE) } +cachedb-check-when-serve-expired{COLON} { YDVAR(1, VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED) } redis-server-host{COLON} { YDVAR(1, VAR_CACHEDB_REDISHOST) } redis-server-port{COLON} { YDVAR(1, VAR_CACHEDB_REDISPORT) } redis-server-path{COLON} { YDVAR(1, VAR_CACHEDB_REDISPATH) } diff --git a/sbin/unwind/libunbound/util/configparser.h b/sbin/unwind/libunbound/util/configparser.h index e611d8b3dc8..a6eb58aaa5a 100644 --- a/sbin/unwind/libunbound/util/configparser.h +++ b/sbin/unwind/libunbound/util/configparser.h @@ -222,129 +222,136 @@ #define VAR_CAPS_WHITELIST 478 #define VAR_CACHE_MAX_NEGATIVE_TTL 479 #define VAR_PERMIT_SMALL_HOLDDOWN 480 -#define VAR_QNAME_MINIMISATION 481 -#define VAR_QNAME_MINIMISATION_STRICT 482 -#define VAR_IP_FREEBIND 483 -#define VAR_DEFINE_TAG 484 -#define VAR_LOCAL_ZONE_TAG 485 -#define VAR_ACCESS_CONTROL_TAG 486 -#define VAR_LOCAL_ZONE_OVERRIDE 487 -#define VAR_ACCESS_CONTROL_TAG_ACTION 488 -#define VAR_ACCESS_CONTROL_TAG_DATA 489 -#define VAR_VIEW 490 -#define VAR_ACCESS_CONTROL_VIEW 491 -#define VAR_VIEW_FIRST 492 -#define VAR_SERVE_EXPIRED 493 -#define VAR_SERVE_EXPIRED_TTL 494 -#define VAR_SERVE_EXPIRED_TTL_RESET 495 -#define VAR_SERVE_EXPIRED_REPLY_TTL 496 -#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 497 -#define VAR_EDE_SERVE_EXPIRED 498 -#define VAR_SERVE_ORIGINAL_TTL 499 -#define VAR_FAKE_DSA 500 -#define VAR_FAKE_SHA1 501 -#define VAR_LOG_IDENTITY 502 -#define VAR_HIDE_TRUSTANCHOR 503 -#define VAR_HIDE_HTTP_USER_AGENT 504 -#define VAR_HTTP_USER_AGENT 505 -#define VAR_TRUST_ANCHOR_SIGNALING 506 -#define VAR_AGGRESSIVE_NSEC 507 -#define VAR_USE_SYSTEMD 508 -#define VAR_SHM_ENABLE 509 -#define VAR_SHM_KEY 510 -#define VAR_ROOT_KEY_SENTINEL 511 -#define VAR_DNSCRYPT 512 -#define VAR_DNSCRYPT_ENABLE 513 -#define VAR_DNSCRYPT_PORT 514 -#define VAR_DNSCRYPT_PROVIDER 515 -#define VAR_DNSCRYPT_SECRET_KEY 516 -#define VAR_DNSCRYPT_PROVIDER_CERT 517 -#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 518 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 519 -#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 520 -#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 521 -#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 522 -#define VAR_PAD_RESPONSES 523 -#define VAR_PAD_RESPONSES_BLOCK_SIZE 524 -#define VAR_PAD_QUERIES 525 -#define VAR_PAD_QUERIES_BLOCK_SIZE 526 -#define VAR_IPSECMOD_ENABLED 527 -#define VAR_IPSECMOD_HOOK 528 -#define VAR_IPSECMOD_IGNORE_BOGUS 529 -#define VAR_IPSECMOD_MAX_TTL 530 -#define VAR_IPSECMOD_WHITELIST 531 -#define VAR_IPSECMOD_STRICT 532 -#define VAR_CACHEDB 533 -#define VAR_CACHEDB_BACKEND 534 -#define VAR_CACHEDB_SECRETSEED 535 -#define VAR_CACHEDB_REDISHOST 536 -#define VAR_CACHEDB_REDISPORT 537 -#define VAR_CACHEDB_REDISTIMEOUT 538 -#define VAR_CACHEDB_REDISEXPIRERECORDS 539 -#define VAR_CACHEDB_REDISPATH 540 -#define VAR_CACHEDB_REDISPASSWORD 541 -#define VAR_CACHEDB_REDISLOGICALDB 542 -#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 543 -#define VAR_FOR_UPSTREAM 544 -#define VAR_AUTH_ZONE 545 -#define VAR_ZONEFILE 546 -#define VAR_MASTER 547 -#define VAR_URL 548 -#define VAR_FOR_DOWNSTREAM 549 -#define VAR_FALLBACK_ENABLED 550 -#define VAR_TLS_ADDITIONAL_PORT 551 -#define VAR_LOW_RTT 552 -#define VAR_LOW_RTT_PERMIL 553 -#define VAR_FAST_SERVER_PERMIL 554 -#define VAR_FAST_SERVER_NUM 555 -#define VAR_ALLOW_NOTIFY 556 -#define VAR_TLS_WIN_CERT 557 -#define VAR_TCP_CONNECTION_LIMIT 558 -#define VAR_ANSWER_COOKIE 559 -#define VAR_COOKIE_SECRET 560 -#define VAR_IP_RATELIMIT_COOKIE 561 -#define VAR_FORWARD_NO_CACHE 562 -#define VAR_STUB_NO_CACHE 563 -#define VAR_LOG_SERVFAIL 564 -#define VAR_DENY_ANY 565 -#define VAR_UNKNOWN_SERVER_TIME_LIMIT 566 -#define VAR_LOG_TAG_QUERYREPLY 567 -#define VAR_STREAM_WAIT_SIZE 568 -#define VAR_TLS_CIPHERS 569 -#define VAR_TLS_CIPHERSUITES 570 -#define VAR_TLS_USE_SNI 571 -#define VAR_IPSET 572 -#define VAR_IPSET_NAME_V4 573 -#define VAR_IPSET_NAME_V6 574 -#define VAR_TLS_SESSION_TICKET_KEYS 575 -#define VAR_RPZ 576 -#define VAR_TAGS 577 -#define VAR_RPZ_ACTION_OVERRIDE 578 -#define VAR_RPZ_CNAME_OVERRIDE 579 -#define VAR_RPZ_LOG 580 -#define VAR_RPZ_LOG_NAME 581 -#define VAR_DYNLIB 582 -#define VAR_DYNLIB_FILE 583 -#define VAR_EDNS_CLIENT_STRING 584 -#define VAR_EDNS_CLIENT_STRING_OPCODE 585 -#define VAR_NSID 586 -#define VAR_ZONEMD_PERMISSIVE_MODE 587 -#define VAR_ZONEMD_CHECK 588 -#define VAR_ZONEMD_REJECT_ABSENCE 589 -#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 590 -#define VAR_INTERFACE_AUTOMATIC_PORTS 591 -#define VAR_EDE 592 -#define VAR_INTERFACE_ACTION 593 -#define VAR_INTERFACE_VIEW 594 -#define VAR_INTERFACE_TAG 595 -#define VAR_INTERFACE_TAG_ACTION 596 -#define VAR_INTERFACE_TAG_DATA 597 -#define VAR_PROXY_PROTOCOL_PORT 598 -#define VAR_STATISTICS_INHIBIT_ZERO 599 -#define VAR_HARDEN_UNKNOWN_ADDITIONAL 600 -#define VAR_DISABLE_EDNS_DO 601 -#define VAR_CACHEDB_NO_STORE 602 -#define VAR_LOG_DESTADDR 603 +#define VAR_CACHE_MIN_NEGATIVE_TTL 481 +#define VAR_QNAME_MINIMISATION 482 +#define VAR_QNAME_MINIMISATION_STRICT 483 +#define VAR_IP_FREEBIND 484 +#define VAR_DEFINE_TAG 485 +#define VAR_LOCAL_ZONE_TAG 486 +#define VAR_ACCESS_CONTROL_TAG 487 +#define VAR_LOCAL_ZONE_OVERRIDE 488 +#define VAR_ACCESS_CONTROL_TAG_ACTION 489 +#define VAR_ACCESS_CONTROL_TAG_DATA 490 +#define VAR_VIEW 491 +#define VAR_ACCESS_CONTROL_VIEW 492 +#define VAR_VIEW_FIRST 493 +#define VAR_SERVE_EXPIRED 494 +#define VAR_SERVE_EXPIRED_TTL 495 +#define VAR_SERVE_EXPIRED_TTL_RESET 496 +#define VAR_SERVE_EXPIRED_REPLY_TTL 497 +#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 498 +#define VAR_EDE_SERVE_EXPIRED 499 +#define VAR_SERVE_ORIGINAL_TTL 500 +#define VAR_FAKE_DSA 501 +#define VAR_FAKE_SHA1 502 +#define VAR_LOG_IDENTITY 503 +#define VAR_HIDE_TRUSTANCHOR 504 +#define VAR_HIDE_HTTP_USER_AGENT 505 +#define VAR_HTTP_USER_AGENT 506 +#define VAR_TRUST_ANCHOR_SIGNALING 507 +#define VAR_AGGRESSIVE_NSEC 508 +#define VAR_USE_SYSTEMD 509 +#define VAR_SHM_ENABLE 510 +#define VAR_SHM_KEY 511 +#define VAR_ROOT_KEY_SENTINEL 512 +#define VAR_DNSCRYPT 513 +#define VAR_DNSCRYPT_ENABLE 514 +#define VAR_DNSCRYPT_PORT 515 +#define VAR_DNSCRYPT_PROVIDER 516 +#define VAR_DNSCRYPT_SECRET_KEY 517 +#define VAR_DNSCRYPT_PROVIDER_CERT 518 +#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 519 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 520 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 521 +#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 522 +#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 523 +#define VAR_PAD_RESPONSES 524 +#define VAR_PAD_RESPONSES_BLOCK_SIZE 525 +#define VAR_PAD_QUERIES 526 +#define VAR_PAD_QUERIES_BLOCK_SIZE 527 +#define VAR_IPSECMOD_ENABLED 528 +#define VAR_IPSECMOD_HOOK 529 +#define VAR_IPSECMOD_IGNORE_BOGUS 530 +#define VAR_IPSECMOD_MAX_TTL 531 +#define VAR_IPSECMOD_WHITELIST 532 +#define VAR_IPSECMOD_STRICT 533 +#define VAR_CACHEDB 534 +#define VAR_CACHEDB_BACKEND 535 +#define VAR_CACHEDB_SECRETSEED 536 +#define VAR_CACHEDB_REDISHOST 537 +#define VAR_CACHEDB_REDISPORT 538 +#define VAR_CACHEDB_REDISTIMEOUT 539 +#define VAR_CACHEDB_REDISEXPIRERECORDS 540 +#define VAR_CACHEDB_REDISPATH 541 +#define VAR_CACHEDB_REDISPASSWORD 542 +#define VAR_CACHEDB_REDISLOGICALDB 543 +#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 544 +#define VAR_FOR_UPSTREAM 545 +#define VAR_AUTH_ZONE 546 +#define VAR_ZONEFILE 547 +#define VAR_MASTER 548 +#define VAR_URL 549 +#define VAR_FOR_DOWNSTREAM 550 +#define VAR_FALLBACK_ENABLED 551 +#define VAR_TLS_ADDITIONAL_PORT 552 +#define VAR_LOW_RTT 553 +#define VAR_LOW_RTT_PERMIL 554 +#define VAR_FAST_SERVER_PERMIL 555 +#define VAR_FAST_SERVER_NUM 556 +#define VAR_ALLOW_NOTIFY 557 +#define VAR_TLS_WIN_CERT 558 +#define VAR_TCP_CONNECTION_LIMIT 559 +#define VAR_ANSWER_COOKIE 560 +#define VAR_COOKIE_SECRET 561 +#define VAR_IP_RATELIMIT_COOKIE 562 +#define VAR_FORWARD_NO_CACHE 563 +#define VAR_STUB_NO_CACHE 564 +#define VAR_LOG_SERVFAIL 565 +#define VAR_DENY_ANY 566 +#define VAR_UNKNOWN_SERVER_TIME_LIMIT 567 +#define VAR_LOG_TAG_QUERYREPLY 568 +#define VAR_DISCARD_TIMEOUT 569 +#define VAR_WAIT_LIMIT 570 +#define VAR_WAIT_LIMIT_COOKIE 571 +#define VAR_WAIT_LIMIT_NETBLOCK 572 +#define VAR_WAIT_LIMIT_COOKIE_NETBLOCK 573 +#define VAR_STREAM_WAIT_SIZE 574 +#define VAR_TLS_CIPHERS 575 +#define VAR_TLS_CIPHERSUITES 576 +#define VAR_TLS_USE_SNI 577 +#define VAR_IPSET 578 +#define VAR_IPSET_NAME_V4 579 +#define VAR_IPSET_NAME_V6 580 +#define VAR_TLS_SESSION_TICKET_KEYS 581 +#define VAR_RPZ 582 +#define VAR_TAGS 583 +#define VAR_RPZ_ACTION_OVERRIDE 584 +#define VAR_RPZ_CNAME_OVERRIDE 585 +#define VAR_RPZ_LOG 586 +#define VAR_RPZ_LOG_NAME 587 +#define VAR_DYNLIB 588 +#define VAR_DYNLIB_FILE 589 +#define VAR_EDNS_CLIENT_STRING 590 +#define VAR_EDNS_CLIENT_STRING_OPCODE 591 +#define VAR_NSID 592 +#define VAR_ZONEMD_PERMISSIVE_MODE 593 +#define VAR_ZONEMD_CHECK 594 +#define VAR_ZONEMD_REJECT_ABSENCE 595 +#define VAR_RPZ_SIGNAL_NXDOMAIN_RA 596 +#define VAR_INTERFACE_AUTOMATIC_PORTS 597 +#define VAR_EDE 598 +#define VAR_INTERFACE_ACTION 599 +#define VAR_INTERFACE_VIEW 600 +#define VAR_INTERFACE_TAG 601 +#define VAR_INTERFACE_TAG_ACTION 602 +#define VAR_INTERFACE_TAG_DATA 603 +#define VAR_PROXY_PROTOCOL_PORT 604 +#define VAR_STATISTICS_INHIBIT_ZERO 605 +#define VAR_HARDEN_UNKNOWN_ADDITIONAL 606 +#define VAR_DISABLE_EDNS_DO 607 +#define VAR_CACHEDB_NO_STORE 608 +#define VAR_LOG_DESTADDR 609 +#define VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED 610 #ifndef YYSTYPE_DEFINED #define YYSTYPE_DEFINED typedef union { diff --git a/sbin/unwind/libunbound/util/configparser.y b/sbin/unwind/libunbound/util/configparser.y index 0e4cd5960a2..0feeb61b168 100644 --- a/sbin/unwind/libunbound/util/configparser.y +++ b/sbin/unwind/libunbound/util/configparser.y @@ -153,6 +153,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_MIN_CLIENT_SUBNET_IPV4 VAR_MIN_CLIENT_SUBNET_IPV6 %token VAR_MAX_ECS_TREE_SIZE_IPV4 VAR_MAX_ECS_TREE_SIZE_IPV6 %token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL VAR_PERMIT_SMALL_HOLDDOWN +%token VAR_CACHE_MIN_NEGATIVE_TTL %token VAR_QNAME_MINIMISATION VAR_QNAME_MINIMISATION_STRICT VAR_IP_FREEBIND %token VAR_DEFINE_TAG VAR_LOCAL_ZONE_TAG VAR_ACCESS_CONTROL_TAG %token VAR_LOCAL_ZONE_OVERRIDE VAR_ACCESS_CONTROL_TAG_ACTION @@ -188,6 +189,8 @@ extern struct config_parser_state* cfg_parser; %token VAR_ANSWER_COOKIE VAR_COOKIE_SECRET VAR_IP_RATELIMIT_COOKIE %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_DISCARD_TIMEOUT VAR_WAIT_LIMIT VAR_WAIT_LIMIT_COOKIE +%token VAR_WAIT_LIMIT_NETBLOCK VAR_WAIT_LIMIT_COOKIE_NETBLOCK %token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES VAR_TLS_USE_SNI %token VAR_IPSET VAR_IPSET_NAME_V4 VAR_IPSET_NAME_V6 %token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE @@ -200,7 +203,7 @@ extern struct config_parser_state* cfg_parser; %token VAR_INTERFACE_TAG_ACTION VAR_INTERFACE_TAG_DATA %token VAR_PROXY_PROTOCOL_PORT VAR_STATISTICS_INHIBIT_ZERO %token VAR_HARDEN_UNKNOWN_ADDITIONAL VAR_DISABLE_EDNS_DO VAR_CACHEDB_NO_STORE -%token VAR_LOG_DESTADDR +%token VAR_LOG_DESTADDR VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -298,6 +301,7 @@ content_server: server_num_threads | server_verbosity | server_port | server_min_client_subnet_ipv4 | server_min_client_subnet_ipv6 | server_max_ecs_tree_size_ipv4 | server_max_ecs_tree_size_ipv6 | server_caps_whitelist | server_cache_max_negative_ttl | + server_cache_min_negative_ttl | server_permit_small_holddown | server_qname_minimisation | server_ip_freebind | server_define_tag | server_local_zone_tag | server_disable_dnssec_lame_check | server_access_control_tag | @@ -325,6 +329,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_fast_server_permil | server_fast_server_num | server_tls_win_cert | server_tcp_connection_limit | server_log_servfail | server_deny_any | server_unknown_server_time_limit | server_log_tag_queryreply | + server_discard_timeout | server_wait_limit | server_wait_limit_cookie | + server_wait_limit_netblock | server_wait_limit_cookie_netblock | server_stream_wait_size | server_tls_ciphers | server_tls_ciphersuites | server_tls_session_ticket_keys | server_answer_cookie | server_cookie_secret | server_ip_ratelimit_cookie | @@ -2014,6 +2020,15 @@ server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG free($2); } ; +server_cache_min_negative_ttl: VAR_CACHE_MIN_NEGATIVE_TTL STRING_ARG + { + OUTYY(("P(server_cache_min_negative_ttl:%s)\n", $2)); + if(atoi($2) == 0 && strcmp($2, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->min_negative_ttl = atoi($2); + free($2); + } + ; server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG { OUTYY(("P(server_cache_min_ttl:%s)\n", $2)); @@ -2366,6 +2381,57 @@ server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG free($2); } ; +server_discard_timeout: VAR_DISCARD_TIMEOUT STRING_ARG + { + OUTYY(("P(server_discard_timeout:%s)\n", $2)); + cfg_parser->cfg->discard_timeout = atoi($2); + free($2); + } + ; +server_wait_limit: VAR_WAIT_LIMIT STRING_ARG + { + OUTYY(("P(server_wait_limit:%s)\n", $2)); + cfg_parser->cfg->wait_limit = atoi($2); + free($2); + } + ; +server_wait_limit_cookie: VAR_WAIT_LIMIT_COOKIE STRING_ARG + { + OUTYY(("P(server_wait_limit_cookie:%s)\n", $2)); + cfg_parser->cfg->wait_limit_cookie = atoi($2); + free($2); + } + ; +server_wait_limit_netblock: VAR_WAIT_LIMIT_NETBLOCK STRING_ARG STRING_ARG + { + OUTYY(("P(server_wait_limit_netblock:%s %s)\n", $2, $3)); + if(atoi($3) == 0 && strcmp($3, "0") != 0) { + yyerror("number expected"); + free($2); + free($3); + } else { + if(!cfg_str2list_insert(&cfg_parser->cfg-> + wait_limit_netblock, $2, $3)) + fatal_exit("out of memory adding " + "wait-limit-netblock"); + } + } + ; +server_wait_limit_cookie_netblock: VAR_WAIT_LIMIT_COOKIE_NETBLOCK STRING_ARG STRING_ARG + { + OUTYY(("P(server_wait_limit_cookie_netblock:%s %s)\n", $2, $3)); + if(atoi($3) == 0 && strcmp($3, "0") != 0) { + yyerror("number expected"); + free($2); + free($3); + } else { + if(!cfg_str2list_insert(&cfg_parser->cfg-> + wait_limit_cookie_netblock, $2, $3)) + fatal_exit("out of memory adding " + "wait-limit-cookie-netblock"); + } + } + ; server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG { OUTYY(("P(server_max_udp_size:%s)\n", $2)); @@ -3723,7 +3789,7 @@ contents_cachedb: contents_cachedb content_cachedb content_cachedb: cachedb_backend_name | cachedb_secret_seed | redis_server_host | redis_server_port | redis_timeout | redis_expire_records | redis_server_path | redis_server_password | - cachedb_no_store | redis_logical_db + cachedb_no_store | redis_logical_db | cachedb_check_when_serve_expired ; cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG { @@ -3762,6 +3828,19 @@ cachedb_no_store: VAR_CACHEDB_NO_STORE STRING_ARG free($2); } ; +cachedb_check_when_serve_expired: VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED STRING_ARG + { + #ifdef USE_CACHEDB + OUTYY(("P(cachedb_check_when_serve_expired:%s)\n", $2)); + if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) + yyerror("expected yes or no."); + else cfg_parser->cfg->cachedb_check_when_serve_expired = (strcmp($2, "yes")==0); + #else + OUTYY(("P(Compiled without cachedb, ignoring)\n")); + #endif + free($2); + } + ; redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG { #if defined(USE_CACHEDB) && defined(USE_REDIS) diff --git a/sbin/unwind/libunbound/util/data/msgparse.h b/sbin/unwind/libunbound/util/data/msgparse.h index 8e5c94a28cb..656e0d285dc 100644 --- a/sbin/unwind/libunbound/util/data/msgparse.h +++ b/sbin/unwind/libunbound/util/data/msgparse.h @@ -82,6 +82,8 @@ extern time_t MAX_TTL; extern time_t MIN_TTL; /** Maximum Negative TTL that is allowed */ extern time_t MAX_NEG_TTL; +/** Minimum Negative TTL that is allowed */ +extern time_t MIN_NEG_TTL; /** If we serve expired entries and prefetch them */ extern int SERVE_EXPIRED; /** Time to serve records after expiration */ diff --git a/sbin/unwind/libunbound/util/data/msgreply.c b/sbin/unwind/libunbound/util/data/msgreply.c index 2286d46bc3f..c9d7bbf3ad4 100644 --- a/sbin/unwind/libunbound/util/data/msgreply.c +++ b/sbin/unwind/libunbound/util/data/msgreply.c @@ -61,6 +61,8 @@ time_t MAX_TTL = 3600 * 24 * 10; /* ten days */ time_t MIN_TTL = 0; /** MAX Negative TTL, for SOA records in authority section */ time_t MAX_NEG_TTL = 3600; /* one hour */ +/** MIN Negative TTL, for SOA records in authority section */ +time_t MIN_NEG_TTL = 0; /** If we serve expired entries and prefetch them */ int SERVE_EXPIRED = 0; /** Time to serve records after expiration */ @@ -223,18 +225,25 @@ rdata_copy(sldns_buffer* pkt, struct packed_rrset_data* data, uint8_t* to, if(type == LDNS_RR_TYPE_SOA && section == LDNS_SECTION_AUTHORITY) { /* negative response. see if TTL of SOA record larger than the * minimum-ttl in the rdata of the SOA record */ - if(*rr_ttl > soa_find_minttl(rr)) - *rr_ttl = soa_find_minttl(rr); - } - if(!SERVE_ORIGINAL_TTL && (*rr_ttl < MIN_TTL)) - *rr_ttl = MIN_TTL; - if(!SERVE_ORIGINAL_TTL && (*rr_ttl > MAX_TTL)) - *rr_ttl = MAX_TTL; - if(type == LDNS_RR_TYPE_SOA && section == LDNS_SECTION_AUTHORITY) { - /* max neg ttl overrides the min and max ttl of everything - * else, it is for a more specific record */ - if(*rr_ttl > MAX_NEG_TTL) - *rr_ttl = MAX_NEG_TTL; + if(*rr_ttl > soa_find_minttl(rr)) *rr_ttl = soa_find_minttl(rr); + if(!SERVE_ORIGINAL_TTL) { + /* If MIN_NEG_TTL is configured skip setting MIN_TTL */ + if(MIN_NEG_TTL <= 0 && *rr_ttl < MIN_TTL) { + *rr_ttl = MIN_TTL; + } + if(*rr_ttl > MAX_TTL) *rr_ttl = MAX_TTL; + } + /* MAX_NEG_TTL overrides the min and max ttl of everything + * else; it is for a more specific record */ + if(*rr_ttl > MAX_NEG_TTL) *rr_ttl = MAX_NEG_TTL; + /* MIN_NEG_TTL overrides the min and max ttl of everything + * else if configured; it is for a more specific record */ + if(MIN_NEG_TTL > 0 && *rr_ttl < MIN_NEG_TTL) { + *rr_ttl = MIN_NEG_TTL; + } + } else if(!SERVE_ORIGINAL_TTL) { + if(*rr_ttl < MIN_TTL) *rr_ttl = MIN_TTL; + if(*rr_ttl > MAX_TTL) *rr_ttl = MAX_TTL; } if(*rr_ttl < data->ttl) data->ttl = *rr_ttl; diff --git a/sbin/unwind/libunbound/util/module.c b/sbin/unwind/libunbound/util/module.c index 62e5de4a05b..90a155b5e8a 100644 --- a/sbin/unwind/libunbound/util/module.c +++ b/sbin/unwind/libunbound/util/module.c @@ -129,7 +129,7 @@ void errinf_origin(struct module_qstate* qstate, struct sock_list *origin) } } -char* errinf_to_str_bogus(struct module_qstate* qstate) +char* errinf_to_str_bogus(struct module_qstate* qstate, struct regional* region) { char buf[20480]; char* p = buf; @@ -148,7 +148,10 @@ char* errinf_to_str_bogus(struct module_qstate* qstate) snprintf(p, left, " %s", s->str); left -= strlen(p); p += strlen(p); } - p = strdup(buf); + if(region) + p = regional_strdup(region, buf); + else + p = strdup(buf); if(!p) log_err("malloc failure in errinf_to_str"); return p; @@ -188,7 +191,7 @@ char* errinf_to_str_servfail(struct module_qstate* qstate) snprintf(p, left, " %s", s->str); left -= strlen(p); p += strlen(p); } - p = strdup(buf); + p = regional_strdup(qstate->region, buf); if(!p) log_err("malloc failure in errinf_to_str"); return p; @@ -206,7 +209,7 @@ char* errinf_to_str_misc(struct module_qstate* qstate) snprintf(p, left, "%s%s", (s==qstate->errinf?"":" "), s->str); left -= strlen(p); p += strlen(p); } - p = strdup(buf); + p = regional_strdup(qstate->region, buf); if(!p) log_err("malloc failure in errinf_to_str"); return p; diff --git a/sbin/unwind/libunbound/util/module.h b/sbin/unwind/libunbound/util/module.h index 8a9da3f931a..c9df7462491 100644 --- a/sbin/unwind/libunbound/util/module.h +++ b/sbin/unwind/libunbound/util/module.h @@ -180,6 +180,7 @@ struct iter_hints; struct respip_set; struct respip_client_info; struct respip_addr_info; +struct module_stack; /** Maximum number of modules in operation */ #define MAX_MODULE 16 @@ -511,10 +512,10 @@ struct module_env { /** auth zones */ struct auth_zones* auth_zones; /** Mapping of forwarding zones to targets. - * iterator forwarder information. per-thread, created by worker */ + * iterator forwarder information. */ struct iter_forwards* fwds; /** - * iterator forwarder information. per-thread, created by worker. + * iterator stub information. * The hints -- these aren't stored in the cache because they don't * expire. The hints are always used to "prime" the cache. Note * that both root hints and stub zone "hints" are stored in this @@ -537,6 +538,12 @@ struct module_env { /** EDNS client string information */ struct edns_strings* edns_strings; + /** module stack */ + struct module_stack* modstack; +#ifdef USE_CACHEDB + /** the cachedb enabled value, copied and stored here. */ + int cachedb_enabled; +#endif /* Make every mesh state unique, do not aggregate mesh states. */ int unique_mesh; }; @@ -824,10 +831,11 @@ void errinf_dname(struct module_qstate* qstate, const char* str, /** * Create error info in string. For validation failures. * @param qstate: query state. + * @param region: the region for the result or NULL for malloced result. * @return string or NULL on malloc failure (already logged). - * This string is malloced and has to be freed by caller. + * This string is malloced if region is NULL and has to be freed by caller. */ -char* errinf_to_str_bogus(struct module_qstate* qstate); +char* errinf_to_str_bogus(struct module_qstate* qstate, struct regional* region); /** * Check the sldns_ede_code of the qstate->errinf. @@ -840,7 +848,6 @@ sldns_ede_code errinf_to_reason_bogus(struct module_qstate* qstate); * Create error info in string. For other servfails. * @param qstate: query state. * @return string or NULL on malloc failure (already logged). - * This string is malloced and has to be freed by caller. */ char* errinf_to_str_servfail(struct module_qstate* qstate); @@ -848,7 +855,6 @@ char* errinf_to_str_servfail(struct module_qstate* qstate); * Create error info in string. For misc failures that are not servfail. * @param qstate: query state. * @return string or NULL on malloc failure (already logged). - * This string is malloced and has to be freed by caller. */ char* errinf_to_str_misc(struct module_qstate* qstate); diff --git a/sbin/unwind/libunbound/util/net_help.c b/sbin/unwind/libunbound/util/net_help.c index 8970247926d..d2218ea8833 100644 --- a/sbin/unwind/libunbound/util/net_help.c +++ b/sbin/unwind/libunbound/util/net_help.c @@ -77,6 +77,8 @@ /** max length of an IP address (the address portion) that we allow */ #define MAX_ADDR_STRLEN 128 /* characters */ +/** max length of a hostname (with port and tls name) that we allow */ +#define MAX_HOST_STRLEN (LDNS_MAX_DOMAINLEN * 3) /* characters */ /** default value for EDNS ADVERTISED size */ uint16_t EDNS_ADVERTISED_SIZE = 4096; @@ -486,28 +488,38 @@ uint8_t* authextstrtodname(char* str, int* port, char** auth_name) *port = UNBOUND_DNS_PORT; *auth_name = NULL; if((s=strchr(str, '@'))) { + char buf[MAX_HOST_STRLEN]; + size_t len = (size_t)(s-str); char* hash = strchr(s+1, '#'); if(hash) { *auth_name = hash+1; } else { *auth_name = NULL; } + if(len >= MAX_HOST_STRLEN) { + return NULL; + } + (void)strlcpy(buf, str, sizeof(buf)); + buf[len] = 0; *port = atoi(s+1); if(*port == 0) { if(!hash && strcmp(s+1,"0")!=0) - return 0; + return NULL; if(hash && strncmp(s+1,"0#",2)!=0) - return 0; + return NULL; } - *s = 0; - dname = sldns_str2wire_dname(str, &dname_len); - *s = '@'; + dname = sldns_str2wire_dname(buf, &dname_len); } else if((s=strchr(str, '#'))) { + char buf[MAX_HOST_STRLEN]; + size_t len = (size_t)(s-str); + if(len >= MAX_HOST_STRLEN) { + return NULL; + } + (void)strlcpy(buf, str, sizeof(buf)); + buf[len] = 0; *port = UNBOUND_DNS_OVER_TLS_PORT; *auth_name = s+1; - *s = 0; - dname = sldns_str2wire_dname(str, &dname_len); - *s = '#'; + dname = sldns_str2wire_dname(buf, &dname_len); } else { dname = sldns_str2wire_dname(str, &dname_len); } @@ -1026,11 +1038,11 @@ static void log_crypto_err_io_code_arg(const char* str, int r, } else { if(print_errno) { if(errno == 0) - log_err("str: syscall error with errno %s", - strerror(errno)); - else log_err("str: %s", strerror(errno)); + log_err("%s: syscall error with errno %s", + str, strerror(errno)); + else log_err("%s: %s", str, strerror(errno)); } else { - log_err("str: %s", inf); + log_err("%s: %s", str, inf); } } } diff --git a/sbin/unwind/libunbound/util/netevent.c b/sbin/unwind/libunbound/util/netevent.c index 1fc8c6b8658..980829d087e 100644 --- a/sbin/unwind/libunbound/util/netevent.c +++ b/sbin/unwind/libunbound/util/netevent.c @@ -4772,9 +4772,9 @@ comm_point_send_reply(struct comm_reply *repinfo) * 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, "from local addr", (void*)repinfo->c->socket->addr, repinfo->c->socket->addrlen); 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->ssl, repinfo->c->buffer); + dt_msg_send_client_response(repinfo->c->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr, repinfo->c->type, repinfo->c->ssl, repinfo->c->buffer); } #endif } else { @@ -4783,9 +4783,9 @@ comm_point_send_reply(struct comm_reply *repinfo) * sending src (client)/dst (local service) addresses over DNSTAP from TCP callback */ 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, "from local addr", (void*)repinfo->c->socket->addr, repinfo->c->socket->addrlen); 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->ssl, + dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, &repinfo->client_addr, (void*)repinfo->c->socket->addr, repinfo->c->type, repinfo->c->ssl, ( repinfo->c->tcp_req_info? repinfo->c->tcp_req_info->spool_buffer: repinfo->c->buffer )); } #endif diff --git a/sbin/unwind/libunbound/util/netevent.h b/sbin/unwind/libunbound/util/netevent.h index dc9619c163b..1e4a13f9b7e 100644 --- a/sbin/unwind/libunbound/util/netevent.h +++ b/sbin/unwind/libunbound/util/netevent.h @@ -181,6 +181,8 @@ struct comm_point { /** if the event is added or not */ int event_added; + /** Reference to struct that is part of the listening ports, + * where for listening ports information is kept about the address. */ struct unbound_socket* socket; /** file descriptor for communication point */ diff --git a/sbin/unwind/libunbound/util/storage/lookup3.c b/sbin/unwind/libunbound/util/storage/lookup3.c index c4026626c6d..f2a48f413da 100644 --- a/sbin/unwind/libunbound/util/storage/lookup3.c +++ b/sbin/unwind/libunbound/util/storage/lookup3.c @@ -89,7 +89,7 @@ on 1 byte), but shoehorning those bytes into integers efficiently is messy. # if (defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && \ __BYTE_ORDER == __LITTLE_ENDIAN) || \ (defined(i386) || defined(__i386__) || defined(__i486__) || \ - defined(__i586__) || defined(__i686__) || defined(vax) || defined(MIPSEL) || defined(__x86)) + defined(__i586__) || defined(__i686__) || defined(vax) || defined(MIPSEL) || defined(__x86) || defined(__loongarch__)) # define HASH_LITTLE_ENDIAN 1 # define HASH_BIG_ENDIAN 0 # elif (defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && \ diff --git a/sbin/unwind/libunbound/util/storage/lruhash.c b/sbin/unwind/libunbound/util/storage/lruhash.c index e17b180db8b..aba9fcc1d83 100644 --- a/sbin/unwind/libunbound/util/storage/lruhash.c +++ b/sbin/unwind/libunbound/util/storage/lruhash.c @@ -528,6 +528,40 @@ lruhash_setmarkdel(struct lruhash* table, lruhash_markdelfunc_type md) lock_quick_unlock(&table->lock); } +void +lruhash_update_space_used(struct lruhash* table, void* cb_arg, int diff_size) +{ + struct lruhash_entry *reclaimlist = NULL; + + fptr_ok(fptr_whitelist_hash_sizefunc(table->sizefunc)); + fptr_ok(fptr_whitelist_hash_delkeyfunc(table->delkeyfunc)); + fptr_ok(fptr_whitelist_hash_deldatafunc(table->deldatafunc)); + fptr_ok(fptr_whitelist_hash_markdelfunc(table->markdelfunc)); + + if(cb_arg == NULL) cb_arg = table->cb_arg; + + /* update space used */ + lock_quick_lock(&table->lock); + + if((int)table->space_used + diff_size < 0) + table->space_used = 0; + else table->space_used = (size_t)((int)table->space_used + diff_size); + + if(table->space_used > table->space_max) + reclaim_space(table, &reclaimlist); + + lock_quick_unlock(&table->lock); + + /* finish reclaim if any (outside of critical region) */ + while(reclaimlist) { + struct lruhash_entry* n = reclaimlist->overflow_next; + void* d = reclaimlist->data; + (*table->delkeyfunc)(reclaimlist->key, cb_arg); + (*table->deldatafunc)(d, cb_arg); + reclaimlist = n; + } +} + void lruhash_traverse(struct lruhash* h, int wr, void (*func)(struct lruhash_entry*, void*), void* arg) diff --git a/sbin/unwind/libunbound/util/storage/lruhash.h b/sbin/unwind/libunbound/util/storage/lruhash.h index 2086e4dec93..5ab488beb50 100644 --- a/sbin/unwind/libunbound/util/storage/lruhash.h +++ b/sbin/unwind/libunbound/util/storage/lruhash.h @@ -303,6 +303,17 @@ void lru_touch(struct lruhash* table, struct lruhash_entry* entry); */ void lruhash_setmarkdel(struct lruhash* table, lruhash_markdelfunc_type md); +/** + * Update the size of an element in the hashtable. + * + * @param table: hash table. + * @param cb_override: if not NULL overrides the cb_arg for deletefunc. + * @param diff_size: difference in size to the hash table storage. + * This is newsize - oldsize, a positive number uses more space. + */ +void lruhash_update_space_used(struct lruhash* table, void* cb_override, + int diff_size); + /************************* getdns functions ************************/ /*** these are used by getdns only and not by unbound. ***/ diff --git a/sbin/unwind/libunbound/util/storage/slabhash.c b/sbin/unwind/libunbound/util/storage/slabhash.c index 7d376c4d684..62396e16a82 100644 --- a/sbin/unwind/libunbound/util/storage/slabhash.c +++ b/sbin/unwind/libunbound/util/storage/slabhash.c @@ -166,6 +166,13 @@ int slabhash_is_size(struct slabhash* sl, size_t size, size_t slabs) return 0; } +void slabhash_update_space_used(struct slabhash* sl, hashvalue_type hash, + void* cb_arg, int diff_size) +{ + lruhash_update_space_used(sl->array[slab_idx(sl, hash)], cb_arg, + diff_size); +} + size_t slabhash_get_mem(struct slabhash* sl) { size_t i, total = sizeof(*sl); diff --git a/sbin/unwind/libunbound/util/storage/slabhash.h b/sbin/unwind/libunbound/util/storage/slabhash.h index dc5fc360329..089847d9359 100644 --- a/sbin/unwind/libunbound/util/storage/slabhash.h +++ b/sbin/unwind/libunbound/util/storage/slabhash.h @@ -161,6 +161,18 @@ size_t slabhash_get_size(struct slabhash* table); */ int slabhash_is_size(struct slabhash* table, size_t size, size_t slabs); +/** + * Update the size of an element in the hashtable, uses + * lruhash_update_space_used. + * + * @param table: hash table. + * @param hash: hash value. User calculates the hash. + * @param cb_override: if not NULL overrides the cb_arg for deletefunc. + * @param diff_size: difference in size to the hash table storage. + */ +void slabhash_update_space_used(struct slabhash* table, hashvalue_type hash, + void* cb_override, int diff_size); + /** * Retrieve slab hash current memory use. * @param table: hash table. diff --git a/sbin/unwind/libunbound/validator/val_utils.c b/sbin/unwind/libunbound/validator/val_utils.c index c316183a9d9..a7db41dadc3 100644 --- a/sbin/unwind/libunbound/validator/val_utils.c +++ b/sbin/unwind/libunbound/validator/val_utils.c @@ -118,7 +118,30 @@ val_classify_response(uint16_t query_flags, struct query_info* origqinf, * ANY responses are validated differently. */ if(rcode == LDNS_RCODE_NOERROR && qinf->qtype == LDNS_RR_TYPE_ANY) return VAL_CLASS_ANY; - + + /* For the query type DNAME, the name matters. Equal name is the + * answer looked for, but a subdomain redirects the query. */ + if(qinf->qtype == LDNS_RR_TYPE_DNAME) { + for(i=skip; ian_numrrsets; i++) { + if(rcode == LDNS_RCODE_NOERROR && + ntohs(rep->rrsets[i]->rk.type) + == LDNS_RR_TYPE_DNAME && + query_dname_compare(qinf->qname, + rep->rrsets[i]->rk.dname) == 0) { + /* type is DNAME and name is equal, it is + * the answer. For the query name a subdomain + * of the rrset.dname it would redirect. */ + return VAL_CLASS_POSITIVE; + } + if(ntohs(rep->rrsets[i]->rk.type) + == LDNS_RR_TYPE_CNAME) + return VAL_CLASS_CNAME; + } + log_dns_msg("validator: error. failed to classify response message: ", + qinf, rep); + return VAL_CLASS_UNKNOWN; + } + /* Note that DNAMEs will be ignored here, unless qtype=DNAME. Unless * qtype=CNAME, this will yield a CNAME response. */ for(i=skip; ian_numrrsets; i++) { @@ -231,6 +254,21 @@ val_find_signer(enum val_classification subtype, struct query_info* qinf, rep->rrsets[i]->rk.dname) == 0) { val_find_rrset_signer(rep->rrsets[i], signer_name, signer_len); + /* If there was no signer, and the query + * was for type CNAME, and this is a CNAME, + * and the previous is a DNAME, then this + * is the synthesized CNAME, use the signer + * of the DNAME record. */ + if(*signer_name == NULL && + qinf->qtype == LDNS_RR_TYPE_CNAME && + ntohs(rep->rrsets[i]->rk.type) == + LDNS_RR_TYPE_CNAME && i > skip && + ntohs(rep->rrsets[i-1]->rk.type) == + LDNS_RR_TYPE_DNAME && + dname_strict_subdomain_c(rep->rrsets[i]->rk.dname, rep->rrsets[i-1]->rk.dname)) { + val_find_rrset_signer(rep->rrsets[i-1], + signer_name, signer_len); + } return; } } diff --git a/sbin/unwind/libunbound/validator/validator.c b/sbin/unwind/libunbound/validator/validator.c index aa71df9cbf5..3cf291658e7 100644 --- a/sbin/unwind/libunbound/validator/validator.c +++ b/sbin/unwind/libunbound/validator/validator.c @@ -621,7 +621,6 @@ prime_trust_anchor(struct module_qstate* qstate, struct val_qstate* vq, * @param vq: validator query state. * @param env: module env for verify. * @param ve: validator env for verify. - * @param qchase: query that was made. * @param chase_reply: answer to validate. * @param key_entry: the key entry, which is trusted, and which matches * the signer of the answer. The key entry isgood(). @@ -632,7 +631,7 @@ prime_trust_anchor(struct module_qstate* qstate, struct val_qstate* vq, */ static int validate_msg_signatures(struct module_qstate* qstate, struct val_qstate* vq, - struct module_env* env, struct val_env* ve, struct query_info* qchase, + struct module_env* env, struct val_env* ve, struct reply_info* chase_reply, struct key_entry_key* key_entry, int* suspend) { @@ -640,7 +639,7 @@ validate_msg_signatures(struct module_qstate* qstate, struct val_qstate* vq, size_t i, slen; struct ub_packed_rrset_key* s; enum sec_status sec; - int dname_seen = 0, num_verifies = 0, verified, have_state = 0; + int num_verifies = 0, verified, have_state = 0; char* reason = NULL; sldns_ede_code reason_bogus = LDNS_EDE_DNSSEC_BOGUS; *suspend = 0; @@ -658,9 +657,13 @@ validate_msg_signatures(struct module_qstate* qstate, struct val_qstate* vq, /* Skip the CNAME following a (validated) DNAME. * Because of the normalization routines in the iterator, * there will always be an unsigned CNAME following a DNAME - * (unless qtype=DNAME). */ - if(dname_seen && ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME) { - dname_seen = 0; + * (unless qtype=DNAME in the answer part). */ + if(i>0 && ntohs(chase_reply->rrsets[i-1]->rk.type) == + LDNS_RR_TYPE_DNAME && + ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME && + ((struct packed_rrset_data*)chase_reply->rrsets[i-1]->entry.data)->security == sec_status_secure && + dname_strict_subdomain_c(s->rk.dname, chase_reply->rrsets[i-1]->rk.dname) + ) { /* CNAME was synthesized by our own iterator */ /* since the DNAME verified, mark the CNAME as secure */ ((struct packed_rrset_data*)s->entry.data)->security = @@ -691,12 +694,6 @@ validate_msg_signatures(struct module_qstate* qstate, struct val_qstate* vq, return 0; } - /* Notice a DNAME that should be followed by an unsigned - * CNAME. */ - if(qchase->qtype != LDNS_RR_TYPE_DNAME && - ntohs(s->rk.type) == LDNS_RR_TYPE_DNAME) { - dname_seen = 1; - } num_verifies += verified; if(num_verifies > MAX_VALIDATE_AT_ONCE && i+1 < (env->cfg->val_clean_additional? @@ -2186,7 +2183,7 @@ processValidate(struct module_qstate* qstate, struct val_qstate* vq, /* check signatures in the message; * answer and authority must be valid, additional is only checked. */ - if(!validate_msg_signatures(qstate, vq, qstate->env, ve, &vq->qchase, + if(!validate_msg_signatures(qstate, vq, qstate->env, ve, vq->chase_reply, vq->key_entry, &suspend)) { if(suspend) { if(!validate_suspend_setup_timer(qstate, vq, @@ -2456,19 +2453,12 @@ processFinished(struct module_qstate* qstate, struct val_qstate* vq, log_query_info(NO_VERBOSE, "validation failure", &qstate->qinfo); else { - char* err_str = errinf_to_str_bogus(qstate); + char* err_str = errinf_to_str_bogus(qstate, + qstate->region); if(err_str) { - size_t err_str_len = strlen(err_str); log_info("%s", err_str); - /* allocate space and store the error - * string */ - vq->orig_msg->rep->reason_bogus_str = regional_alloc( - qstate->region, - sizeof(char) * (err_str_len+1)); - memcpy(vq->orig_msg->rep->reason_bogus_str, - err_str, err_str_len+1); + vq->orig_msg->rep->reason_bogus_str = err_str; } - free(err_str); } } /* -- 2.20.1