From: Bruce Momjian Date: Sat, 3 Oct 1998 05:41:01 +0000 (+0000) Subject: Integrate new IP type from Tom Ivar Helbekkmo. X-Git-Tag: REL6_4_2~350 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2d69fd90b969935ea2d0c192e0fad669050ce10b;p=postgresql Integrate new IP type from Tom Ivar Helbekkmo. --- diff --git a/contrib/README b/contrib/README index b66dd8012c..88dc7b645a 100644 --- a/contrib/README +++ b/contrib/README @@ -31,10 +31,6 @@ int8 - 64-bit integer arithmetic for Postgres by Thomas G. Lockhart -ip_and_mac - - PostgreSQL type extensions for IP and MAC addresses - by Tom Ivar Helbekkmo - isbn_issn - PostgreSQL type extensions for ISBN (books) and ISSN (serials) by Garrett A. Wollman diff --git a/contrib/ip_and_mac/Makefile b/contrib/ip_and_mac/Makefile deleted file mode 100644 index 0071eb6123..0000000000 --- a/contrib/ip_and_mac/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -# -# PostgreSQL types for IP and MAC addresses -# -# $Id: Makefile,v 1.5 1998/06/16 05:35:10 momjian Exp $ - -all: ip.so mac.so - -ip.so: ip.o - ld -Bshareable -o ip.so ip.o - -ip.o: ip.c - cc -g -O -fPIC -I/usr/local/pgsql/include -c ip.c - -mac.so: mac.o - ld -Bshareable -o mac.so mac.o - -mac.o: mac.c mac.h - cc -g -O -fPIC -I/usr/local/pgsql/include -c mac.c - -install: ip.so mac.so - install -c ip.so mac.so /usr/local/pgsql/contrib/ip_and_macs - -clean: - rm -f *.o *.so *.b -# -# eof -# diff --git a/contrib/ip_and_mac/README b/contrib/ip_and_mac/README deleted file mode 100644 index c946f20b9e..0000000000 --- a/contrib/ip_and_mac/README +++ /dev/null @@ -1,43 +0,0 @@ - -This directory contain 2 new classes - macaddr to store mac addresses -written by (Bergen, Norway, 1998-01-31, Tom Ivar Helbekkmo -(tih@Hamartun.Priv.NO)), and ipaddr type and ipaddr_ops operator class, -rewritten by me (alex@relcom.EU.net, Aleksei Roudnev, Moscow, Russia, -25.05.98) and written first by Bergen. - -To see the description of macaddr type, read README.ORIG file. To see -the description of ipaddr type, read ipaddr.html file. - ^^^^^^^^^^^ - -This ipaddr type differ slightly from the original one. First, if you -input '193.124.23.0' it sets /24 prefix instead of /32 (this is in -accordance to CISCO's notification and our internal data bases and -records); if you input '0.0.0.0' it's '0.0.0.0/0' (default) but not NULL -or NOADDR value. - -Then, you can store ADDRESS/PREFIX pair, even if ADDRESS is not the -subnet address (for example, you can store interface address and mask at -the single attribute). This allow us to determine, for example, which -interfaces/routers are accessible by connected network for our interface -(select * from database where '193.124.23.4' @ interface_address); - -Then, it have been written a few new functions and a few operators -(addr1 @ addr - TRUE if addr1 is the part of subnet addr2); -'ipaddr_print' function allow you to convert address to any form you -want; and so on. - -And then, I add ipi.sql setup script and test1.sql + test2.sql test -scripts to allow and test indexing by this new class. - -This ipaddr type/opclass are used for our internal IP ROUTING and -ACCOUNTING data base, and I hope it shpuld be usefull for more people. - -For those who like crazy tasks, I propose to realise 'RTREE' indexing -method to allow effectively use '@' operation for the binding statistic -records to the customers etc networks. Note 'ipaddr' type can be written -as 'start,end' coordination pair and it's possible to define all '<<, -&<, @@, etc graphical operators over this type. - - -25.05.1998, Aleksei Roudnev, alex@relcom.EU.net, Relcom, Moscow, Russia. /+7-095-194-1995. -========================================================================================== diff --git a/contrib/ip_and_mac/README.ORIG b/contrib/ip_and_mac/README.ORIG deleted file mode 100644 index d0e4f436a6..0000000000 --- a/contrib/ip_and_mac/README.ORIG +++ /dev/null @@ -1,56 +0,0 @@ -PostgreSQL type extensions for IP and MAC addresses. ---------------------------------------------------- - -$Id: README.ORIG,v 1.2 1998/06/16 05:35:10 momjian Exp $ - -I needed to record IP and MAC level ethernet addresses in a data -base, and I really didn't want to store them as plain strings, with -no enforced error checking, so I put together the accompanying code -as my first experiment with adding a data type to PostgreSQL. I -then thought that this might be useful to others, both directly and -as a very simple example of how to do this sort of thing, so here -it is, in the hope that it will be useful. - -IP addresses are implemented as a 6 byte struct (this may be 1 byte -more than is useful, but I figured that since it has to be at least 5, -it might as well be an even number of bytes) that contains the four -byte address and a mask width. The external representation of an IP -address looks like '158.37.96.15/32' (or just '158.37.96.15', which is -understood to mean the same thing). This address happens to be part -of a subnet where I work; '158.37.96.0/24', which itself is a part of -the larger subnet allocated to our site, which is '158.37.96.0/21', -which again, if you go by the old book, is part of the class "B" net -called '158.37.0.0/16'. - -Input and output functions are supplied, along with the "normal" <, -<=, =, >=, > and <> operators, which all do what you expect. In -addition, there is a function to check whether a given address is a -member of a given subnet: ipaddr_in_net(addr, net), and functions to -return the netmask and the broadcast address of a given network: -ipaddr_mask(net) and ipaddr_bcast(net). - -MAC level ethernet addresses are implemented as a 6 byte struct that -contains the address as unsigned chars. Several input forms are -accepted; the following are all the same address: '08002b:010203', -'08002b-010203', '0800.2b01.0203', '08-00-2b-01-02-03' and -'08:00:2b:01:02:03'. Upper and lower case is accepted for the digits -'a' through 'f'. Output is always in the latter of the given forms. - -As with IP addresses, input and output functions are supplied as well -as the "normal" operators, which do what you expect. As an extra -feature, a function macaddr_manuf() is defined, which returns the name -of the manufacturer as a string. This is currently held in a -hard-coded struct internal to the C module -- it might be smarter to -put this information into an actual data base table, and look up the -manufacturer there. (Another TODO, for both new data types, is to -interface them to indices. If anyone can explain this to me in a way -that is easier to understand than the current documentation, I would -be most grateful!) - -I don't know what changes are needed to the Makefile for other systems -than the one I'm running (NetBSD 1.3), but anyway: to install on a BSD -system: fix the path names in the SQL files and the Makefile if you -need to, then make, make install, slurp the SQL files into psql or -whatever, and you're off. Enjoy! - -Bergen, Norway, 1998-01-31, Tom Ivar Helbekkmo (tih@Hamartun.Priv.NO). diff --git a/contrib/ip_and_mac/ip.c b/contrib/ip_and_mac/ip.c deleted file mode 100644 index 0b56375488..0000000000 --- a/contrib/ip_and_mac/ip.c +++ /dev/null @@ -1,448 +0,0 @@ -/* - * PostgreSQL type definitions for IP addresses. - * - * $Id: ip.c,v 1.5 1998/06/16 05:35:10 momjian Exp $ - */ - -#include - -#include -#include - -/* - * This is the internal storage format for IP addresses: - */ - -typedef struct ipaddr -{ - uint32 address; - int16 width; -} ipaddr; - -/* - * Various forward declarations: - */ - -ipaddr *ipaddr_in(char *str); -char *ipaddr_out(ipaddr * addr); - -bool ipaddr_lt(ipaddr * a1, ipaddr * a2); -bool ipaddr_le(ipaddr * a1, ipaddr * a2); -bool ipaddr_eq(ipaddr * a1, ipaddr * a2); -bool ipaddr_ge(ipaddr * a1, ipaddr * a2); -bool ipaddr_gt(ipaddr * a1, ipaddr * a2); - -bool ipaddr_ne(ipaddr * a1, ipaddr * a2); - -int4 ipaddr_cmp(ipaddr * a1, ipaddr * a2); - -bool ipaddr_in_net(ipaddr * a1, ipaddr * a2); -ipaddr *ipaddr_mask(ipaddr * a); -ipaddr *ipaddr_bcast(ipaddr * a); - -/* - * Build a mask of a given width: - */ - -unsigned long -build_mask(unsigned char bits) -{ - unsigned long mask = 0; - int i; - - for (i = 0; i < bits; i++) - mask = (mask >> 1) | 0x80000000; - return mask; -} - -/* - * IP address reader. Note how the count returned by sscanf() - * is used to determine whether the mask size was specified. - */ - -ipaddr * -ipaddr_in(char *str) -{ - int a, - b, - c, - d, - w; - ipaddr *result; - int count; - - if (strlen(str) > 0) - { - - count = sscanf(str, "%d.%d.%d.%d/%d", &a, &b, &c, &d, &w); - - if (count < 4) - { - elog(ERROR, "ipaddr_in: error in parsing \"%s\"", str); - return (NULL); - } - if ( count == 3 ) { - d = 0; - count = 4; - }; - if (count == 4) - { - w = 32; - if ( a >= 192 && a < 224 && d == 0 ) w = 24; - if ( a >= 128 && a < 192 && d == 0 && c == 0 ) w = 16; - if ( a > 0 && a < 128 && c == 0 && b == 0 && a < 128 ) w = 8; - if ( a == 0 && b == 0 && c == 0 && d == 0 ) w = 0; - }; - if ((a < 0) || (a > 255) || (b < 0) || (b > 255) || - (c < 0) || (c > 255) || (d < 0) || (d > 255) || - (w < 0) || (w > 32)) - { - elog(ERROR, "ipaddr_in: illegal address \"%s\"", str); - return (NULL); - } - } - else - { - a = b = c = d = w = 255; /* special case for missing address */ - } - - result = (ipaddr *) palloc(sizeof(ipaddr)); - - result->address = (uint32) ((a << 24) | (b << 16) | (c << 8) | d); - result->width = w; - - return (result); -} - -/* - * IP address output function. Note mask size specification - * generated only for subnets, not for plain host addresses. - */ - -char * -ipaddr_out(ipaddr * addr) -{ - char *result; - int a, b, c, d, w; - if (addr == NULL) - return (NULL); - - result = (char *) palloc(32); - - w = addr->width; - a = (addr->address >> 24) & 0xff; - b = (addr->address >> 16) & 0xff; - c = (addr->address >> 8) & 0xff; - d = (addr->address >> 0) & 0xff; - /* Check by missing address (w > 32 ) */ - if ( w >= 0 && w <= 32 ) - { - /* In case of NATURAL network don't output the prefix */ - if ( (a == 0 && b == 0 && c == 0 && d == 0 && w == 0 ) || - (a < 128 && b == 0 && c == 0 && d == 0 && w == 8 ) || - (a < 192 && c == 0 && d == 0 && w == 16 ) || - (a < 224 && d == 0 && w == 24 ) || - ( d != 0 ) ) w = -1; - if (w == -1 ) - sprintf(result, "%d.%d.%d.%d",a,b,c,d); - else - sprintf(result, "%d.%d.%d.%d/%d",a,b,c,d,w); - } - else - { - result[0] = 0; /* special case for missing address */ - } - return (result); -} - -/* - * Print ipaddr by format - * %A - address - * %M - maska - * %P - prefix - * %B - negated maska - */ -# define TXT_LEN_0 4 -text * -ipaddr_print(ipaddr * addr, text *fmt) -{ - text *result; - char *p, *op; - uint32 aaa; - int a, b, c, d; - if (addr == NULL) - return (NULL); - - result = (text *) palloc( sizeof(text) + 64 ); - - /* Check by missing address (w > 32 ) */ - for ( p = fmt->vl_dat, op = result->vl_dat; *p && (p - fmt->vl_dat) < (fmt->vl_len - TXT_LEN_0) && (op - result->vl_dat) < 48; p++) { - if ( *p != '%' ) { - *op++ = *p; - continue; - }; - p++; - if ( *p == 'A' ) - { - aaa = addr->address; - goto pta; - }; - if ( *p == 'M' ) { - aaa = build_mask(addr->width); - goto pta; - } - if ( *p == 'B' ) { - aaa = build_mask(32 - addr->width) >> addr->width; - goto pta; - } - if ( *p == 'P' ) { - sprintf(op,"%d",addr->width); - while ( *op) op++; - continue; - }; - *op++ = *p; - continue; -pta: - a = (aaa >> 24) & 0xff; - b = (aaa >> 16) & 0xff; - c = (aaa >> 8) & 0xff; - d = (aaa >> 0) & 0xff; - sprintf(op, "%d.%d.%d.%d",a,b,c,d); - while ( *op ) op++; - continue; - }; - *op = 0; - result->vl_len = (op - result->vl_dat) + TXT_LEN_0; - return (result); -} - -/* - * Boolean tests for magnitude. - */ - -bool -ipaddr_lt(ipaddr * a1, ipaddr * a2) -{ - if ( a1->address == a2->address ) return(a1->width < a2->width); - return (a1->address < a2->address); -}; - -bool -ipaddr_le(ipaddr * a1, ipaddr * a2) -{ - if ( a1->address == a2->address ) return(a1->width <= a2->width); - return (a1->address <= a2->address); -}; - -bool -ipaddr_eq(ipaddr * a1, ipaddr * a2) -{ - if ( a1->address == a2->address ) return(a1->width == a2->width); - return (a1->address == a2->address); -}; - -bool -ipaddr_ge(ipaddr * a1, ipaddr * a2) -{ - if ( a1->address == a2->address ) return(a1->width >= a2->width); - return (a1->address >= a2->address); -}; - -bool -ipaddr_gt(ipaddr * a1, ipaddr * a2) -{ - if ( a1->address == a2->address ) return(a1->width > a2->width); - return (a1->address > a2->address); -}; - -bool -ipaddr_ne(ipaddr * a1, ipaddr * a2) -{ - if ( a1->address == a2->address ) return(a1->width != a2->width); - return (a1->address != a2->address); -}; - -/* - * Comparison function for sorting: - */ - -int4 -ipaddr_cmp(ipaddr * a1, ipaddr * a2) -{ - if (a1->address < a2->address) - return -1; - else if (a1->address > a2->address) - return 1; - else - { - if (a1->width < a2->width) - return -1; - else if (a1->width > a2->width) - return 1; - } - return 0; -} - -/* - * The number of hosts in the network - */ -int4 -ipaddr_len(ipaddr * a) -{ - if ( a->width > 32 || a->width < 0 ) return(0); - return(1 << (32 - a->width)); -} - -/* - * The number of network bits - */ -int4 -ipaddr_pref(ipaddr * a) -{ - if ( a->width > 32 || a->width < 0 ) return(0); - return(a->width); -} - -/* - * The host addr as an integer - */ -int4 -ipaddr_integer(ipaddr * a) -{ - return(a->address); -} - -/* - * Test whether an address is within a given subnet: - */ - -bool -ipaddr_in_net(ipaddr * a1, ipaddr * a2) -{ - uint32 maskbits; - - if (a1->width < a2->width) - return FALSE; - if ((a1->width == 32) && (a2->width == 32)) - return ipaddr_eq(a1, a2); - maskbits = build_mask(a2->width); - if ((a1->address & maskbits) == (a2->address & maskbits)) - return TRUE; - return FALSE; -} - -/* - * Test whether an address is the network or a host in the network: - */ - -bool -ipaddr_is_net(ipaddr * a) -{ - uint32 maskbits; - - if (a->width == 32) - return FALSE; - maskbits = build_mask(a->width); - if ( (a->address & maskbits) == a->address ) - return TRUE; - return FALSE; -} - -/* - * Pick out just the mask of a network: - */ - -ipaddr * -ipaddr_mask(ipaddr * a) -{ - ipaddr *result; - - result = (ipaddr *) palloc(sizeof(ipaddr)); - result->address = build_mask(a->width); - result->width = 32; - - return result; -} - -/* - * Return the broadcast address of a network: - */ - -ipaddr * -ipaddr_bcast(ipaddr * a) -{ - ipaddr *result; - - result = (ipaddr *) palloc(sizeof(ipaddr)); - result->address = a->address; - result->address |= (build_mask(32 - a->width) >> a->width); - result->width = 32; - - return result; -} - -/* - * Return the base network of the address/network: - */ - -ipaddr * -ipaddr_net(ipaddr * a) -{ - ipaddr *result; - - result = (ipaddr *) palloc(sizeof(ipaddr)); - result->address = a->address; - result->address &= build_mask(a->width); - result->width = a->width; - - return result; -} - -/* - * Compose ipaddr from ADDR and PREFIX - */ -ipaddr * -ipaddr_compose(int4 addr, int4 pref) -{ - ipaddr *result; - - result = (ipaddr *) palloc(sizeof(ipaddr)); - if ( pref < 0 || pref > 32 ) { - pref = 255; - addr = 0; - }; - result->address = addr; - result->width = pref; - return result; -} - -/* - * Plus and Minus operators - */ -ipaddr * -ipaddr_plus(ipaddr * a, int4 i) -{ - ipaddr *result; - - result = (ipaddr *) palloc(sizeof(ipaddr)); - result->address = a->address + i; - result->width = a->width; - - return result; -} - -ipaddr * -ipaddr_minus(ipaddr * a, int4 i) -{ - ipaddr *result; - - result = (ipaddr *) palloc(sizeof(ipaddr)); - result->address = a->address - i; - result->width = a->width; - - return result; -} - -/* - * eof - */ diff --git a/contrib/ip_and_mac/ip.sql b/contrib/ip_and_mac/ip.sql deleted file mode 100644 index 2d402bd8f0..0000000000 --- a/contrib/ip_and_mac/ip.sql +++ /dev/null @@ -1,301 +0,0 @@ --- --- PostgreSQL code for IP addresses. --- --- $Id: ip.sql,v 1.5 1998/06/16 05:35:10 momjian Exp $ --- Invoced from 1998/02/14 17:58:04 scrappy --- --- New - INPUT/OUTPUT, functions, indexing by btree, test. --- PART # 1 - ip.sql - load new type, functions and operators. --- Then you should execute ipi.sql - add ipaddr_ops class to allow indexing. - -load '/usr/local/pgsql/contrib/ip_and_macs/ip.so'; - --- --- Input and output functions and the type itself: --- Note - we input 193.124.23.1 as /32, and 193.124.23.0 as /24. --- We output /24 network withouth /24 suffix, and /32 hosts wothouth suffixes --- if it is not '0' address of /24 network. --- Just the same, we threat 0.0.0.0 as 0.0.0.0/0 == DEFAULT. --- - -create function ipaddr_in(opaque) - returns opaque - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - - - -create function ipaddr_out(opaque) - returns opaque - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - -create type ipaddr ( - internallength = 6, - externallength = variable, - input = ipaddr_in, - output = ipaddr_out -); - --- --- Print address by format --- %A - address --- %P - /Pref --- %M - maska --- %B - reversed maska -drop function ipaddr_print; -create function ipaddr_print(ipaddr, text) - returns text - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; -); - --- --- The various boolean tests: --- In case if addresseas are equal, we compare prefix length --- It means 193.124.23.0/24 < 193.124.23.0/32 --- - -create function ipaddr_lt(ipaddr, ipaddr) - returns bool - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - -create function ipaddr_le(ipaddr, ipaddr) - returns bool - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - -create function ipaddr_eq(ipaddr, ipaddr) - returns bool - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - -create function ipaddr_ge(ipaddr, ipaddr) - returns bool - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - -create function ipaddr_gt(ipaddr, ipaddr) - returns bool - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - -create function ipaddr_ne(ipaddr, ipaddr) - returns bool - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - --- --- Test if a1 is in net a2 --- Return TRUE if a1 is IN a2 subnet or if a1 == a2 --- -create function ipaddr_in_net(ipaddr, ipaddr) - returns bool - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - --- --- Return the network from the host/network address. This means --- 193.124.23.4/24 -> 193.124.23.0/24. --- This allow to use interface address (with the real netmask) to create --- network, and to link interfaces and addresses belongs to the same network. --- - - create function ipaddr_net(ipaddr) - returns ipaddr - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - --- --- Return TRUE if addr describe NETWORK, not host in the network --- It's equivalent to ipaddr_net(a) == a --- - - create function ipaddr_is_net(ipaddr) - returns boolean - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - --- --- Return the number of the hosts in the network --- - - create function ipaddr_len(ipaddr) - returns int4 - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - --- --- Return the prefix length of the network --- - - create function ipaddr_pref(ipaddr) - returns int4 - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - --- --- Convert network into the integer. --- Can be used for 'compose' function --- - - create function ipaddr_integer(ipaddr) - returns int4 - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - --- --- Compose ipaddr from the ADDRESS and PREF --- ipaddr_compose(ipaddr_integer(a),ipaddr_pref(a)) == a --- - - create function ipaddr_compose(int4,int4) - returns ipaddr - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - --- --- Return MASK for the network --- - - create function ipaddr_mask(ipaddr) - returns ipaddr - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - --- --- Return BROADCAST address for the network --- - - create function ipaddr_bcast(ipaddr) - returns ipaddr - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - --- --- Compare 2 addresses. First, compare addresses, then, compare prefixes (if the addresses --- are the same). --- - - create function ipaddr_cmp(ipaddr,ipaddr) - returns int4 - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - --- --- Plus and Minus operators --- - - create function ipaddr_plus(ipaddr,int4) - returns ipaddr - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - - create function ipaddr_minus(ipaddr,int4) - returns ipaddr - as '/usr/local/pgsql/contrib/ip_and_macs/ip.so' - language 'c'; - --- --- Now the operators. Note how some of the parameters to some --- of the 'create operator' commands are commented out. This --- is because they reference as yet undefined operators, and --- will be implicitly defined when those are, further down. --- - --- drop operator < ( ipaddr, ipaddr); -create operator < ( - leftarg = ipaddr, - rightarg = ipaddr, --- negator = >=, - procedure = ipaddr_lt, - restrict = intltsel, - join = intltjoinsel -); - --- drop operator <= (ipaddr,ipaddr); -create operator <= ( - leftarg = ipaddr, - rightarg = ipaddr, --- negator = >, - procedure = ipaddr_le, - restrict = intltsel, - join = intltjoinsel -); - --- drop operator = (ipaddr,ipaddr); -create operator = ( - leftarg = ipaddr, - rightarg = ipaddr, - commutator = =, --- negator = <>, - restrict = eqsel, - join = eqjoinsel, - procedure = ipaddr_eq -); - - --- drop operator >= (ipaddr,ipaddr); -create operator >= ( - leftarg = ipaddr, - rightarg = ipaddr, - negator = <, - procedure = ipaddr_ge, - restrict = intgtsel, - join = intgtjoinsel -); - --- drop operator > (ipaddr,ipaddr); -create operator > ( - leftarg = ipaddr, - rightarg = ipaddr, - negator = <=, - procedure = ipaddr_gt, - restrict = intgtsel, - join = intgtjoinsel -); - --- drop operator <> (ipaddr,ipaddr); -create operator <> ( - leftarg = ipaddr, - rightarg = ipaddr, - negator = =, - procedure = ipaddr_ne, - restrict = neqsel, - join = neqjoinsel -); - -create operator @ ( - leftarg = ipaddr, - rightarg = ipaddr, - procedure = ipaddr_in_net -); - -create operator + ( - leftarg = ipaddr, - rightarg = int4, - procedure = ipaddr_plus -); - -create operator - ( - leftarg = ipaddr, - rightarg = int4, - procedure = ipaddr_minus -); - --- ***************************************************************************************** --- * For now, you have: input/output (remember, '193.124.23.0' means /24 network, * --- * '193.124.23.1' means /32 host) * --- * <, <=, = <>, >=, > relational operations; host @ net (host is the part of the net) op * --- * varchar ipaddr_print(addr, '%A/%P %M %B') - print by pattern function * --- * ipaddr ipaddr_mask(a),ipaddr_bcast(a),ipaddr_net(a) functions (mask,bcast, start addr)* --- * int4 ipaddr_len(a) - lenght of subnet; ipaddr_pref(a) - prefix length, * --- * int4 ipaddr_integer(a) - integer value; ipaddr ipaddr_compose(integer_addr,pref_len) * --- * compose ipaddr from addr and mask * --- * '+' and '-' operators (ipaddr = ipaddr + integer),(ipaddr = ipaddr - integer) ops * --- ***************************************************************************************** --- * R E A D T H I S T E X T B E F O R E E X I T I N G : * --- * Now you should execute ipi.sql to allow BTREE indexing on this class. * --- ***************************************************************************************** --- eof diff --git a/contrib/ip_and_mac/ip_orig.c b/contrib/ip_and_mac/ip_orig.c deleted file mode 100644 index 316e824407..0000000000 --- a/contrib/ip_and_mac/ip_orig.c +++ /dev/null @@ -1,257 +0,0 @@ -/* - * PostgreSQL type definitions for IP addresses. - * - * $Id: ip_orig.c,v 1.1 1998/06/16 05:35:11 momjian Exp $ - */ - -#include - -#include -#include - -/* - * This is the internal storage format for IP addresses: - */ - -typedef struct ipaddr -{ - uint32 address; - int16 width; -} ipaddr; - -/* - * Various forward declarations: - */ - -ipaddr *ipaddr_in(char *str); -char *ipaddr_out(ipaddr * addr); - -bool ipaddr_lt(ipaddr * a1, ipaddr * a2); -bool ipaddr_le(ipaddr * a1, ipaddr * a2); -bool ipaddr_eq(ipaddr * a1, ipaddr * a2); -bool ipaddr_ge(ipaddr * a1, ipaddr * a2); -bool ipaddr_gt(ipaddr * a1, ipaddr * a2); - -bool ipaddr_ne(ipaddr * a1, ipaddr * a2); - -int4 ipaddr_cmp(ipaddr * a1, ipaddr * a2); - -bool ipaddr_in_net(ipaddr * a1, ipaddr * a2); -ipaddr *ipaddr_mask(ipaddr * a); -ipaddr *ipaddr_bcast(ipaddr * a); - -/* - * Build a mask of a given width: - */ - -unsigned long -build_mask(unsigned char bits) -{ - unsigned long mask = 0; - int i; - - for (i = 0; i < bits; i++) - mask = (mask >> 1) | 0x80000000; - return mask; -} - -/* - * IP address reader. Note how the count returned by sscanf() - * is used to determine whether the mask size was specified. - */ - -ipaddr * -ipaddr_in(char *str) -{ - int a, - b, - c, - d, - w; - ipaddr *result; - int count; - - if (strlen(str) > 0) - { - - count = sscanf(str, "%d.%d.%d.%d/%d", &a, &b, &c, &d, &w); - - if (count < 4) - { - elog(ERROR, "ipaddr_in: error in parsing \"%s\"", str); - return (NULL); - } - - if (count == 4) - w = 32; - - if ((a < 0) || (a > 255) || (b < 0) || (b > 255) || - (c < 0) || (c > 255) || (d < 0) || (d > 255) || - (w < 0) || (w > 32)) - { - elog(ERROR, "ipaddr_in: illegal address \"%s\"", str); - return (NULL); - } - } - else - { - a = b = c = d = w = 0; /* special case for missing address */ - } - - result = (ipaddr *) palloc(sizeof(ipaddr)); - - result->address = (uint32) ((a << 24) | (b << 16) | (c << 8) | d); - result->address &= build_mask(w); - result->width = w; - - return (result); -} - -/* - * IP address output function. Note mask size specification - * generated only for subnets, not for plain host addresses. - */ - -char * -ipaddr_out(ipaddr * addr) -{ - char *result; - - if (addr == NULL) - return (NULL); - - result = (char *) palloc(32); - - if (addr->address > 0) - { - if (addr->width == 32) - sprintf(result, "%d.%d.%d.%d", - (addr->address >> 24) & 0xff, - (addr->address >> 16) & 0xff, - (addr->address >> 8) & 0xff, - addr->address & 0xff); - else - sprintf(result, "%d.%d.%d.%d/%d", - (addr->address >> 24) & 0xff, - (addr->address >> 16) & 0xff, - (addr->address >> 8) & 0xff, - addr->address & 0xff, - addr->width); - } - else - { - result[0] = 0; /* special case for missing address */ - } - return (result); -} - -/* - * Boolean tests for magnitude. - */ - -bool -ipaddr_lt(ipaddr * a1, ipaddr * a2) -{ - return (a1->address < a2->address); -}; - -bool -ipaddr_le(ipaddr * a1, ipaddr * a2) -{ - return (a1->address <= a2->address); -}; - -bool -ipaddr_eq(ipaddr * a1, ipaddr * a2) -{ - return (a1->address == a2->address); -}; - -bool -ipaddr_ge(ipaddr * a1, ipaddr * a2) -{ - return (a1->address >= a2->address); -}; - -bool -ipaddr_gt(ipaddr * a1, ipaddr * a2) -{ - return (a1->address > a2->address); -}; - -bool -ipaddr_ne(ipaddr * a1, ipaddr * a2) -{ - return (a1->address != a2->address); -}; - -/* - * Comparison function for sorting: - */ - -int4 -ipaddr_cmp(ipaddr * a1, ipaddr * a2) -{ - if (a1->address < a2->address) - return -1; - else if (a1->address > a2->address) - return 1; - else - return 0; -} - -/* - * Test whether an address is within a given subnet: - */ - -bool -ipaddr_in_net(ipaddr * a1, ipaddr * a2) -{ - uint32 maskbits; - - if (a1->width < a2->width) - return FALSE; - if ((a1->width == 32) && (a2->width == 32)) - return ipaddr_eq(a1, a2); - maskbits = build_mask(a2->width); - if ((a1->address & maskbits) == (a2->address & maskbits)) - return TRUE; - return FALSE; -} - -/* - * Pick out just the mask of a network: - */ - -ipaddr * -ipaddr_mask(ipaddr * a) -{ - ipaddr *result; - - result = (ipaddr *) palloc(sizeof(ipaddr)); - result->address = build_mask(a->width); - result->width = 32; - - return result; -} - -/* - * Return the broadcast address of a network: - */ - -ipaddr * -ipaddr_bcast(ipaddr * a) -{ - ipaddr *result; - - result = (ipaddr *) palloc(sizeof(ipaddr)); - result->address = a->address; - result->address |= (build_mask(32 - a->width) >> a->width); - result->width = 32; - - return result; -} - -/* - * eof - */ diff --git a/contrib/ip_and_mac/ipaddr.html b/contrib/ip_and_mac/ipaddr.html deleted file mode 100644 index 8b7d3eb164..0000000000 --- a/contrib/ip_and_mac/ipaddr.html +++ /dev/null @@ -1,488 +0,0 @@ - - - - - - - - -

New object class for the IP ADDRESSES manipulations.

- -

1. Description:

- -
    -

    Type name: ipaddr
    -
    Data lenght: 6 bytes
    -
    Data context: ip address and prefix length

    -
- -

2. How to install:

- -
    -

    Use script ip.sql to add new type, new functions and operators -to the data base.

    - -

    Use script ipi.sql to add new type and new operator class ipaddr_ops -to the index system and allow indexing by this new type (with search by -'>', '>=', '<', '<=', '=' -boolean operators).

    - -

    Use scripts 'test1.sql' and 'test2.sql' (edit second script -first) to check if indexing work properly.

    -
- -

3. Input / output formsts.

- -

New type stores IP address and IP prefix in the single data attribute. -To input data, you should use the form

- -
    -

    DDD.DDD.DDD.DDD/PP

    -
- -

for the address DDD.DDD.DDD.DDD and prefix PP (prefix -is len from 0 (for 0.0.0.0) to 32 (for 255.255.255.255)). You can miss -/PP n two cases:

- -
    -
  • You enter host address (this means /32 prefix) and this is not the -address of the natural class A, B or C network.
  • - -
  • You enter natural class A, B, C network with the /8, /16 and /24 prefix.
  • -
- -

For example, 193.124.23.0 should be read as '193.124.23.0/24' -network, and '193.124.23.1' should be read as /32 host address. -To enter interface address 193.124.23.6/24, you should use exact -form '193.124.23.6/24'.

- -

The address '0.0.0.0' means '0.0.0.0/0', this is default in terms -of routers.

- -

ipaddr type data are printed just in the same form (to allow -input/output compatibility) - 193.124.23.0/24 should be printed -as '193.124.23.0' and '193.124.23.1/32' should be printed -as '193.124.23.1'.

- -

There is special function to convert ipaddr data into string by the -format:

- -
    -

    char ipaddr_print(ipaddr,format)

    -
- -

format consist of plain text and %C special characters:

- -
    -

    %A - address in form ddd.ddd.ddd.ddd,
    -%M - network mask in form ddd.ddd.ddd.ddd,
    -%B - negated mask ('0.0.0.7' for '/29' prefix, for example),
    -%P - prefix (withouth '/' delimiter).

    -
- -

4. Operators.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Left argument
-A1
OpRight argument
-A2
Result
-R
Description
ipaddr<ipaddrbooleanCompare addresses, if they are equal, compare prefixes,
ipaddr<=ipaddrbooleanCompare addresses, if they are equal, compare prefixes,
ipaddr=ipaddrbooleanCompare addresses, if they are equal, compare prefixes,
ipaddr>=ipaddrbooleanCompare addresses, if they are equal, compare prefixes,
ipaddr>ipaddrbooleanCompare addresses, if they are equal, compare prefixes,
ipaddr<>ipaddrbooleanCompare addresses, if they are equal, compare prefixes,
ipaddr@ipaddrbooleanTrue if A1 is the part of network (subnetwork) A2 or if A1 = A2
ipaddr+int4ipaddrIncrease address A1 on A2 value (A2 is integer).
ipaddr -int4ipaddrDecrease address A1 on A2.
- -

5. Functions.

- -

There is a lot of functions defined for new ipaddr data type. Some of -them are duplicated by operators described above, some are not.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Function(arguments)Function typeDescriptionOperator
ipaddr_print(ipaddr, text)textConverts ipaddr to the text string by format from the second argument. -Format can contain %A - address, %M - mask, %B - reversed mask, %P - prefix, -and any other characters.
ipaddr_lt(ipaddr, ipaddr)booleanCompare by '<'<
ipaddr_le(ipaddr,ipaddr)booleanCompare by '<='<=
ipaddr_eq(ipaddr, ipaddr)booleanCompare by '='=
ipaddr_ne(ipaddr, ipaddr)booleanCompare by '<>'<>
ipaddr_ge(ipaddr, ipaddr)booleanCompare by '>='>=
ipaddr_gt(ipaddr, ipaddr)booleanCompare by '>'>
ipaddr_in_net(ipaddr, ipaddr)booleanTrue if fisrt argument is the host or subnetwork of the second -argument (first address is equal or included into the second one)@
ipaddr_net(ipaddr)ipaddrReturn the network (with the 0 in host bits) for the argument; for -example ipaddr_net('193.124.23.1/24') = '193.124.23.0';
ipaddr_bcast(ipaddr)ipaddrReturn broadcast address (with the /32 prefix) for the network described -by argument.
ipaddr_is_net(ipaddr)booleanTrue if ipaddr is network address; false if its' the -host in the network. For the /32 addresses, returns false.
ipaddr_mask(ipaddr)ipaddrReturn netmask (with /32 prefix) for the network.
ipaddr_prefix(ipaddr)int4Return the prefix size (from 0 to 32).
ipaddr_len(ipaddr)int4Return the number of addresses in the particular network (for example, -256 for /24 prefix).
ipaddr_integer(ipaddr)int4Return IP address (withouth the prefix) as integer.
ipaddr_compose(int4,int4)ipaddrCompose ipaddr object from ip address (first argument) and prefix lenght -(second argument). ipaddr_compose(ipaddr_integer(a),ipaddr_prefix(a)) = -a.
ipaddr_plus(ipaddr, int4)ipaddrOperator PLUS (addres increased, prefix does not changed)+
ipaddr_minus(ipaddr, int4)ipaddrOperator MINUS (address decreased, prefix does not changed).-
ipaddr_cmp(ipaddr, ipaddr)int4Compare it's arguments and return -1, 0 or +1.
- -

5. Usage.

- -

New type opens many interesting futures for the ip routing or ip accounting -networks. For example, you can search all interfaces connected to the same -phisical network by comparing ipaddr_net(interface_address) /if you store -address as address/prefix pair in the single attribute, and so on.

- -

Unfortunately, I had not time (and was not too familiar with RTree ideas -used in Postgres) to check if it's possible to use RTree indexing for the -fast routing lookups by data base. It's important task because usial usage -of this future is _determine the nearest network the particular address -contain to, and link the accounting record to this network_. And so on.

- -

Write any questions or wishes to me by e-mail. This is BETA version -of this package for now, because we are building our IP routing data base -just now and did not tested all this fucntions under heavy conditions; -through I hope this functions are too simple for the hidden bugs, and they -was tested carefully at the simple tests.

- -

6. Installation.

- -
    -
  1. Translate shared library ip.so:
    -make
  2. - -
  3. Install shared library to the proper place (/usr/local/pgsql/contrib/ip_and_macs)
    -make install
    -(in case if your system is not FreeBSD, it can be nessesary modify 'Makefile' -before).
  4. - -
  5. Public to the accessible place scripts ip.sql (installation of data -type), ipi.sql (describing of this data type for the proper indexing), -test1.sql, test2.sql, test.DATA (test and data). Modify test1.sql in accordance -to real location of the data files.
  6. - -
  7. To add new data type into your data base, exec scripts in this data -base:
    -psql DATA_BASE
    -\i ip.sql -- change this to the real location
    -\i ipi.sql -- change this to the real location
  8. - -
  9. To test this data type, exec test1.sql and test2.sql SQL scripts.
  10. -
- -

7. Download.

- -

You can download this data type from http://relcom.EU.net/ip_class.tar.gz

- -


-

- -

-


- -

Aleksei Roudnev, The Network Operation Centre, Relcom Network; Moscow, -Russia.

- -
- -
    - - - diff --git a/contrib/ip_and_mac/ipi.sql b/contrib/ip_and_mac/ipi.sql deleted file mode 100644 index 66dc1e3d93..0000000000 --- a/contrib/ip_and_mac/ipi.sql +++ /dev/null @@ -1,64 +0,0 @@ -begin; -select pgam.oid from pg_am pgam -where amname = 'btree'; --- --- Temporary oper table --- --- drop table tmp_op; -create table tmp_op ( oprname name, opi int2); --- --- Fill in this table --- -insert into tmp_op values('<','1'); -insert into tmp_op values('<=','2'); -insert into tmp_op values('=','3'); -insert into tmp_op values('>=','4'); -insert into tmp_op values('>','5'); -select * from tmp_op; --- --- Add record to the pg_opclass --- -DELETE FROM pg_opclass WHERE opcname = 'ipaddr_ops'; -INSERT INTO pg_opclass (opcname,opcdeftype) -select 'ipaddr_ops',oid from pg_type where typname = 'ipaddr'; --- --- And determine oid --- -SELECT opc.oid,opc.opcname - FROM pg_opclass opc - WHERE opc.opcname = 'ipaddr_ops'; --- -SELECT o.oid AS opoid, o.oprname -INTO TABLE ipaddr_tmp -FROM pg_operator o, pg_type t -WHERE o.oprleft = t.oid and o.oprright = t.oid and t.typname = 'ipaddr'; -SELECT * FROM ipaddr_tmp; --- -INSERT INTO pg_amop (amopid, amopclaid, amopopr, amopstrategy, amopselect, amopnpages) -SELECT am.oid,opcl.oid,c.opoid,t.opi,'btreesel'::regproc, 'btreenpage'::regproc -FROM pg_am am, pg_opclass opcl, ipaddr_tmp c, tmp_op t -WHERE t.oprname = c.oprname - and amname = 'btree' - and opcname = 'ipaddr_ops'; --- -SELECT prc.oid, prc.proname FROM pg_proc prc -WHERE prc.proname = 'ipaddr_cmp'; --- -INSERT INTO pg_amproc (amid, amopclaid, amproc, amprocnum) -SELECT pgam.oid, opc.oid,prc.oid,'1'::int2 -FROM pg_am pgam, - pg_opclass opc, - pg_proc prc -WHERE prc.proname = 'ipaddr_cmp' - and pgam.amname = 'btree' - and opc.opcname = 'ipaddr_ops'; - -drop table tmp_op; -DROP TABLE ipaddr_tmp; -COMMIT; - --- ***************************************************************** --- * Now you should test this by running test1.sql and test2.sql * --- * In test2, be sure the 'explain' operator show you * --- * search by index in the last line of output * --- ***************************************************************** diff --git a/contrib/ip_and_mac/mac.c b/contrib/ip_and_mac/mac.c deleted file mode 100644 index f4f5fff7df..0000000000 --- a/contrib/ip_and_mac/mac.c +++ /dev/null @@ -1,244 +0,0 @@ -/* - * PostgreSQL type definitions for MAC addresses. - * - * $Id: mac.c,v 1.3 1998/02/26 04:27:44 momjian Exp $ - */ - -#include - -#include -#include - -#include "mac.h" - -/* - * This is the internal storage format for MAC addresses: - */ - -typedef struct macaddr -{ - unsigned char a; - unsigned char b; - unsigned char c; - unsigned char d; - unsigned char e; - unsigned char f; -} macaddr; - -/* - * Various forward declarations: - */ - -macaddr *macaddr_in(char *str); -char *macaddr_out(macaddr * addr); - -bool macaddr_lt(macaddr * a1, macaddr * a2); -bool macaddr_le(macaddr * a1, macaddr * a2); -bool macaddr_eq(macaddr * a1, macaddr * a2); -bool macaddr_ge(macaddr * a1, macaddr * a2); -bool macaddr_gt(macaddr * a1, macaddr * a2); - -bool macaddr_ne(macaddr * a1, macaddr * a2); - -int4 macaddr_cmp(macaddr * a1, macaddr * a2); - -text *macaddr_manuf(macaddr * addr); - -/* - * Utility macros used for sorting and comparing: - */ - -#define hibits(addr) \ - ((unsigned long)((addr->a<<16)|(addr->b<<8)|(addr->c))) - -#define lobits(addr) \ - ((unsigned long)((addr->c<<16)|(addr->e<<8)|(addr->f))) - -/* - * MAC address reader. Accepts several common notations. - */ - -macaddr * -macaddr_in(char *str) -{ - int a, - b, - c, - d, - e, - f; - macaddr *result; - int count; - - if (strlen(str) > 0) - { - - count = sscanf(str, "%x:%x:%x:%x:%x:%x", &a, &b, &c, &d, &e, &f); - if (count != 6) - count = sscanf(str, "%x-%x-%x-%x-%x-%x", &a, &b, &c, &d, &e, &f); - if (count != 6) - count = sscanf(str, "%2x%2x%2x:%2x%2x%2x", &a, &b, &c, &d, &e, &f); - if (count != 6) - count = sscanf(str, "%2x%2x%2x-%2x%2x%2x", &a, &b, &c, &d, &e, &f); - if (count != 6) - count = sscanf(str, "%2x%2x.%2x%2x.%2x%2x", &a, &b, &c, &d, &e, &f); - - if (count != 6) - { - elog(ERROR, "macaddr_in: error in parsing \"%s\"", str); - return (NULL); - } - - if ((a < 0) || (a > 255) || (b < 0) || (b > 255) || - (c < 0) || (c > 255) || (d < 0) || (d > 255) || - (e < 0) || (e > 255) || (f < 0) || (f > 255)) - { - elog(ERROR, "macaddr_in: illegal address \"%s\"", str); - return (NULL); - } - } - else - { - a = b = c = d = e = f = 0; /* special case for missing - * address */ - } - - result = (macaddr *) palloc(sizeof(macaddr)); - - result->a = a; - result->b = b; - result->c = c; - result->d = d; - result->e = e; - result->f = f; - - return (result); -} - -/* - * MAC address output function. Fixed format. - */ - -char * -macaddr_out(macaddr * addr) -{ - char *result; - - if (addr == NULL) - return (NULL); - - result = (char *) palloc(32); - - if ((hibits(addr) > 0) || (lobits(addr) > 0)) - { - sprintf(result, "%02x:%02x:%02x:%02x:%02x:%02x", - addr->a, addr->b, addr->c, addr->d, addr->e, addr->f); - } - else - { - result[0] = 0; /* special case for missing address */ - } - return (result); -} - -/* - * Boolean tests. - */ - -bool -macaddr_lt(macaddr * a1, macaddr * a2) -{ - return ((hibits(a1) < hibits(a2)) || - ((hibits(a1) == hibits(a2)) && lobits(a1) < lobits(a2))); -}; - -bool -macaddr_le(macaddr * a1, macaddr * a2) -{ - return ((hibits(a1) < hibits(a2)) || - ((hibits(a1) == hibits(a2)) && lobits(a1) <= lobits(a2))); -}; - -bool -macaddr_eq(macaddr * a1, macaddr * a2) -{ - return ((hibits(a1) == hibits(a2)) && (lobits(a1) == lobits(a2))); -}; - -bool -macaddr_ge(macaddr * a1, macaddr * a2) -{ - return ((hibits(a1) > hibits(a2)) || - ((hibits(a1) == hibits(a2)) && lobits(a1) >= lobits(a2))); -}; - -bool -macaddr_gt(macaddr * a1, macaddr * a2) -{ - return ((hibits(a1) > hibits(a2)) || - ((hibits(a1) == hibits(a2)) && lobits(a1) > lobits(a2))); -}; - -bool -macaddr_ne(macaddr * a1, macaddr * a2) -{ - return ((hibits(a1) != hibits(a2)) || (lobits(a1) != lobits(a2))); -}; - -/* - * Comparison function for sorting: - */ - -int4 -macaddr_cmp(macaddr * a1, macaddr * a2) -{ - if (hibits(a1) < hibits(a2)) - return -1; - else if (hibits(a1) > hibits(a2)) - return 1; - else if (lobits(a1) < lobits(a2)) - return -1; - else if (lobits(a1) > lobits(a2)) - return 1; - else - return 0; -} - -/* - * The special manufacturer fetching function. See "mac.h". - */ - -text * -macaddr_manuf(macaddr * addr) -{ - manufacturer *manuf; - int length; - text *result; - - for (manuf = manufacturers; manuf->name != NULL; manuf++) - { - if ((manuf->a == addr->a) && - (manuf->b == addr->b) && - (manuf->c == addr->c)) - break; - } - if (manuf->name == NULL) - { - result = palloc(VARHDRSZ + 1); - memset(result, 0, VARHDRSZ + 1); - VARSIZE(result) = VARHDRSZ + 1; - } - else - { - length = strlen(manuf->name) + 1; - result = palloc(length + VARHDRSZ); - memset(result, 0, length + VARHDRSZ); - VARSIZE(result) = length + VARHDRSZ; - memcpy(VARDATA(result), manuf->name, length); - } - return result; -} - -/* - * eof - */ diff --git a/contrib/ip_and_mac/mac.h b/contrib/ip_and_mac/mac.h deleted file mode 100644 index 954dc05925..0000000000 --- a/contrib/ip_and_mac/mac.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * PostgreSQL type definitions for MAC addresses. - * - * $Id: mac.h,v 1.3 1998/02/26 04:27:50 momjian Exp $ - */ - -typedef struct manufacturer -{ - unsigned char a; - unsigned char b; - unsigned char c; - char *name; -} manufacturer; - -manufacturer manufacturers[] = { - {0x00, 0x00, 0x0C, "Cisco"}, - {0x00, 0x00, 0x0E, "Fujitsu"}, - {0x00, 0x00, 0x0F, "NeXT"}, - {0x00, 0x00, 0x10, "Sytek"}, - {0x00, 0x00, 0x1D, "Cabletron"}, - {0x00, 0x00, 0x20, "DIAB"}, - {0x00, 0x00, 0x22, "Visual Technology"}, - {0x00, 0x00, 0x2A, "TRW"}, - {0x00, 0x00, 0x32, "GPT Limited"}, - {0x00, 0x00, 0x5A, "S & Koch"}, - {0x00, 0x00, 0x5E, "IANA"}, - {0x00, 0x00, 0x65, "Network General"}, - {0x00, 0x00, 0x6B, "MIPS"}, - {0x00, 0x00, 0x77, "MIPS"}, - {0x00, 0x00, 0x7A, "Ardent"}, - {0x00, 0x00, 0x89, "Cayman Systems"}, - {0x00, 0x00, 0x93, "Proteon"}, - {0x00, 0x00, 0x9F, "Ameristar Technology"}, - {0x00, 0x00, 0xA2, "Wellfleet"}, - {0x00, 0x00, 0xA3, "Network Application Technology"}, - {0x00, 0x00, 0xA6, "Network General"}, - {0x00, 0x00, 0xA7, "NCD"}, - {0x00, 0x00, 0xA9, "Network Systems"}, - {0x00, 0x00, 0xAA, "Xerox"}, - {0x00, 0x00, 0xB3, "CIMLinc"}, - {0x00, 0x00, 0xB7, "Dove Fastnet"}, - {0x00, 0x00, 0xBC, "Allen-Bradley"}, - {0x00, 0x00, 0xC0, "Western Digital"}, - {0x00, 0x00, 0xC5, "Farallon"}, - {0x00, 0x00, 0xC6, "Hewlett-Packard"}, - {0x00, 0x00, 0xC8, "Altos"}, - {0x00, 0x00, 0xC9, "Emulex"}, - {0x00, 0x00, 0xD7, "Dartmouth College"}, - {0x00, 0x00, 0xD8, "3Com (?)"}, - {0x00, 0x00, 0xDD, "Gould"}, - {0x00, 0x00, 0xDE, "Unigraph"}, - {0x00, 0x00, 0xE2, "Acer Counterpoint"}, - {0x00, 0x00, 0xEF, "Alantec"}, - {0x00, 0x00, 0xFD, "High Level Hardware"}, - {0x00, 0x01, 0x02, "BBN internal usage"}, - {0x00, 0x20, 0xAF, "3Com"}, - {0x00, 0x17, 0x00, "Kabel"}, - {0x00, 0x80, 0x64, "Wyse Technology"}, - {0x00, 0x80, 0x2B, "IMAC (?)"}, - {0x00, 0x80, 0x2D, "Xylogics, Inc."}, - {0x00, 0x80, 0x8C, "Frontier Software Development"}, - {0x00, 0x80, 0xC2, "IEEE 802.1 Committee"}, - {0x00, 0x80, 0xD3, "Shiva"}, - {0x00, 0xAA, 0x00, "Intel"}, - {0x00, 0xDD, 0x00, "Ungermann-Bass"}, - {0x00, 0xDD, 0x01, "Ungermann-Bass"}, - {0x02, 0x07, 0x01, "Racal InterLan"}, - {0x02, 0x04, 0x06, "BBN internal usage"}, - {0x02, 0x60, 0x86, "Satelcom MegaPac"}, - {0x02, 0x60, 0x8C, "3Com"}, - {0x02, 0xCF, 0x1F, "CMC"}, - {0x08, 0x00, 0x02, "3Com"}, - {0x08, 0x00, 0x03, "ACC"}, - {0x08, 0x00, 0x05, "Symbolics"}, - {0x08, 0x00, 0x08, "BBN"}, - {0x08, 0x00, 0x09, "Hewlett-Packard"}, - {0x08, 0x00, 0x0A, "Nestar Systems"}, - {0x08, 0x00, 0x0B, "Unisys"}, - {0x08, 0x00, 0x11, "Tektronix"}, - {0x08, 0x00, 0x14, "Excelan"}, - {0x08, 0x00, 0x17, "NSC"}, - {0x08, 0x00, 0x1A, "Data General"}, - {0x08, 0x00, 0x1B, "Data General"}, - {0x08, 0x00, 0x1E, "Apollo"}, - {0x08, 0x00, 0x20, "Sun"}, - {0x08, 0x00, 0x22, "NBI"}, - {0x08, 0x00, 0x25, "CDC"}, - {0x08, 0x00, 0x26, "Norsk Data"}, - {0x08, 0x00, 0x27, "PCS Computer Systems GmbH"}, - {0x08, 0x00, 0x28, "Texas Instruments"}, - {0x08, 0x00, 0x2B, "DEC"}, - {0x08, 0x00, 0x2E, "Metaphor"}, - {0x08, 0x00, 0x2F, "Prime Computer"}, - {0x08, 0x00, 0x36, "Intergraph"}, - {0x08, 0x00, 0x37, "Fujitsu-Xerox"}, - {0x08, 0x00, 0x38, "Bull"}, - {0x08, 0x00, 0x39, "Spider Systems"}, - {0x08, 0x00, 0x41, "DCA Digital Comm. Assoc."}, - {0x08, 0x00, 0x45, "Xylogics (?)"}, - {0x08, 0x00, 0x46, "Sony"}, - {0x08, 0x00, 0x47, "Sequent"}, - {0x08, 0x00, 0x49, "Univation"}, - {0x08, 0x00, 0x4C, "Encore"}, - {0x08, 0x00, 0x4E, "BICC"}, - {0x08, 0x00, 0x56, "Stanford University"}, - {0x08, 0x00, 0x58, "DECsystem 20 (?)"}, - {0x08, 0x00, 0x5A, "IBM"}, - {0x08, 0x00, 0x67, "Comdesign"}, - {0x08, 0x00, 0x68, "Ridge"}, - {0x08, 0x00, 0x69, "Silicon Graphics"}, - {0x08, 0x00, 0x6E, "Concurrent"}, - {0x08, 0x00, 0x75, "DDE"}, - {0x08, 0x00, 0x7C, "Vitalink"}, - {0x08, 0x00, 0x80, "XIOS"}, - {0x08, 0x00, 0x86, "Imagen/QMS"}, - {0x08, 0x00, 0x87, "Xyplex"}, - {0x08, 0x00, 0x89, "Kinetics"}, - {0x08, 0x00, 0x8B, "Pyramid"}, - {0x08, 0x00, 0x8D, "XyVision"}, - {0x08, 0x00, 0x90, "Retix Inc"}, - {0x48, 0x44, 0x53, "HDS (?)"}, - {0x80, 0x00, 0x10, "AT&T"}, - {0xAA, 0x00, 0x00, "DEC"}, - {0xAA, 0x00, 0x01, "DEC"}, - {0xAA, 0x00, 0x02, "DEC"}, - {0xAA, 0x00, 0x03, "DEC"}, - {0xAA, 0x00, 0x04, "DEC"}, - {0x00, 0x00, 0x00, NULL} -}; - -/* - * eof - */ diff --git a/contrib/ip_and_mac/mac.sql b/contrib/ip_and_mac/mac.sql deleted file mode 100644 index e0f4d72079..0000000000 --- a/contrib/ip_and_mac/mac.sql +++ /dev/null @@ -1,125 +0,0 @@ --- --- PostgreSQL code for MAC addresses. --- --- $Id: mac.sql,v 1.4 1998/06/16 05:35:11 momjian Exp $ --- - -load '/usr/local/pgsql/contrib/ip_and_macs/mac.so'; - --- --- Input and output functions and the type itself: --- - -create function macaddr_in(opaque) - returns opaque - as '/usr/local/pgsql/contrib/ip_and_macs/mac.so' - language 'c'; - -create function macaddr_out(opaque) - returns opaque - as '/usr/local/pgsql/contrib/ip_and_macs/mac.so' - language 'c'; - -create type macaddr ( - internallength = 6, - externallength = variable, - input = macaddr_in, - output = macaddr_out -); - --- --- The boolean tests: --- - -create function macaddr_lt(macaddr, macaddr) - returns bool - as '/usr/local/pgsql/contrib/ip_and_macs/mac.so' - language 'c'; - -create function macaddr_le(macaddr, macaddr) - returns bool - as '/usr/local/pgsql/contrib/ip_and_macs/mac.so' - language 'c'; - -create function macaddr_eq(macaddr, macaddr) - returns bool - as '/usr/local/pgsql/contrib/ip_and_macs/mac.so' - language 'c'; - -create function macaddr_ge(macaddr, macaddr) - returns bool - as '/usr/local/pgsql/contrib/ip_and_macs/mac.so' - language 'c'; - -create function macaddr_gt(macaddr, macaddr) - returns bool - as '/usr/local/pgsql/contrib/ip_and_macs/mac.so' - language 'c'; - -create function macaddr_ne(macaddr, macaddr) - returns bool - as '/usr/local/pgsql/contrib/ip_and_macs/mac.so' - language 'c'; - --- --- Now the operators. Note how some of the parameters to some --- of the 'create operator' commands are commented out. This --- is because they reference as yet undefined operators, and --- will be implicitly defined when those are, further down. --- - -create operator < ( - leftarg = macaddr, - rightarg = macaddr, --- negator = >=, - procedure = macaddr_lt -); - -create operator <= ( - leftarg = macaddr, - rightarg = macaddr, --- negator = >, - procedure = macaddr_le -); - -create operator = ( - leftarg = macaddr, - rightarg = macaddr, - commutator = =, --- negator = <>, - procedure = macaddr_eq -); - -create operator >= ( - leftarg = macaddr, - rightarg = macaddr, - negator = <, - procedure = macaddr_ge -); - -create operator > ( - leftarg = macaddr, - rightarg = macaddr, - negator = <=, - procedure = macaddr_gt -); - -create operator <> ( - leftarg = macaddr, - rightarg = macaddr, - negator = =, - procedure = macaddr_ne -); - --- --- Finally, the special manufacurer matching function: --- - -create function macaddr_manuf(macaddr) - returns text - as '/usr/local/pgsql/contrib/ip_and_macs/mac.so' - language 'c'; - --- --- eof --- diff --git a/contrib/ip_and_mac/t1.sql b/contrib/ip_and_mac/t1.sql deleted file mode 100644 index 0ded14f3d3..0000000000 --- a/contrib/ip_and_mac/t1.sql +++ /dev/null @@ -1,5 +0,0 @@ -insert into xx values('193.124.23.2','host2'); -insert into xx values('193.124.23.3','host3'); -insert into xx values('193.124.22.1','host4'); -insert into xx values('193.124.22.2','host5'); -insert into xx values('193.124.22.3','host6'); diff --git a/contrib/ip_and_mac/test.DATA b/contrib/ip_and_mac/test.DATA deleted file mode 100644 index 1bce53bd62..0000000000 --- a/contrib/ip_and_mac/test.DATA +++ /dev/null @@ -1,999 +0,0 @@ -193.125.80.35 193.232.202.80 2 880 -193.125.80.35 194.87.0.22 2 574 -194.87.42.38 195.16.106.31 262 10696 -204.62.245.169 193.125.24.10 14 833 -193.125.80.35 195.24.128.65 3 180 -193.125.80.35 195.54.2.1 2 630 -193.125.80.35 195.54.192.33 7 448 -194.87.42.38 195.16.106.22 14 736 -193.125.80.35 195.210.140.7 3 1068 -194.87.41.131 195.46.160.46 10 681 -194.87.37.2 194.135.213.244 66 9088 -194.87.36.193 195.9.53.1 8 464 -194.87.36.193 194.135.2.7 8 464 -194.87.36.1 195.24.224.1 2 716 -194.87.34.44 195.16.96.2 2 164 -194.87.31.230 195.46.160.92 10 757 -194.87.24.93 195.46.160.46 9 664 -194.87.24.93 195.16.104.35 8 598 -194.87.23.28 195.210.155.149 22 1249 -194.87.22.107 195.46.160.34 76 3630 -194.87.18.152 195.90.162.2 15 666 -194.87.18.152 195.90.128.107 1 66 -193.125.80.35 62.76.114.44 2 880 -194.87.16.174 195.46.160.120 17 2276 -204.62.245.168 194.226.45.36 8 444 -194.87.16.78 195.16.104.35 8 720 -194.87.16.61 195.16.96.22 29 1248 -194.87.16.39 194.220.215.66 324 25148 -194.87.16.10 195.128.133.65 57 4301 -194.87.16.10 194.135.176.121 237 18379 -193.125.80.38 194.84.69.5 21 1929 -193.125.80.38 212.46.1.30 40 3758 -204.62.245.168 144.206.160.32 8 450 -193.125.80.44 195.151.199.4 45 2520 -194.87.15.158 195.46.160.46 2 112 -193.125.80.60 193.232.127.78 2 880 -193.125.80.60 193.232.202.80 2 864 -194.87.15.138 195.16.110.7 2 112 -193.125.80.60 195.96.65.2 2 864 -194.87.15.138 193.124.110.130 2 112 -194.87.15.1 195.90.130.133 3 84 -193.125.80.144 212.46.4.3 311 21140 -193.125.80.163 194.84.132.222 261 110114 -193.125.80.163 194.87.12.50 582 38097 -193.125.80.163 194.87.13.2 34 2499 -194.87.14.221 195.46.165.215 5 382 -193.125.81.139 195.34.34.70 107 7799 -193.125.81.140 194.67.115.130 5 220 -204.62.245.167 195.222.130.72 9 475 -204.62.245.167 193.125.242.225 2 88 -194.87.14.221 195.46.163.47 117 99564 -193.125.81.146 194.87.5.3 12 672 -193.125.81.146 194.87.12.50 4 224 -193.125.81.146 194.87.13.2 5 280 -194.87.14.221 195.46.162.91 137 21211 -193.125.81.146 195.161.0.34 2 112 -193.125.81.146 195.218.135.39 2 112 -194.87.14.221 195.12.32.8 131 132002 -194.87.14.221 193.124.252.73 530 214220 -193.125.81.148 194.67.146.145 201 8040 -193.125.81.148 194.87.5.3 49 3140 -193.125.81.148 194.87.12.50 230 12526 -193.125.81.148 194.87.13.2 31 2042 -194.87.14.216 195.210.154.154 68 32028 -193.125.81.148 194.190.218.2 8 611 -193.125.81.148 195.161.0.34 17 1473 -193.125.81.148 195.218.135.39 245 16647 -193.125.81.152 193.193.192.2 215 14797 -193.125.81.152 194.87.13.2 12 748 -193.125.81.152 195.24.128.65 27 1896 -193.125.81.152 195.54.192.118 53 3209 -194.87.14.216 195.210.154.152 83 81270 -193.125.84.12 195.46.160.45 47 2373 -193.125.84.154 195.90.128.107 1 62 -193.125.84.154 195.90.140.2 1 62 -194.87.14.203 195.210.130.62 6 821 -194.87.14.152 195.46.160.69 12 2172 -193.125.86.4 195.19.32.1 176 89133 -194.87.14.73 195.90.162.2 41 42955 -194.87.14.53 195.46.162.75 149 138236 -194.87.14.51 195.210.190.19 19 10290 -194.87.14.6 195.46.163.31 22 24836 -193.125.90.34 194.87.161.7 2 208 -193.125.90.34 194.87.161.229 13 8867 -193.125.90.34 195.54.17.33 644 81839 -194.87.14.5 193.124.97.131 53 12784 -193.125.90.130 194.58.95.62 82 7119 -194.87.13.26 212.248.36.8 14 7757 -194.87.13.26 195.98.162.111 80 39391 -194.87.13.26 195.98.161.25 70 76902 -194.87.13.26 195.46.165.196 30 14838 -194.87.13.26 195.46.161.219 47 39327 -193.125.95.121 193.124.1.131 248 101051 -194.87.13.26 194.85.149.13 28 24599 -194.87.13.21 195.98.162.9 32 16101 -194.87.13.21 195.90.136.148 84 93861 -193.125.95.121 194.186.254.26 79 5470 -194.87.13.21 195.46.162.244 10 400 -194.87.13.21 195.12.32.182 96 53171 -194.87.13.20 212.248.36.8 14 6798 -194.87.13.20 212.20.8.250 358 438254 -194.87.13.20 195.222.130.242 4 550 -194.87.13.20 195.222.130.77 8 6753 -193.125.95.124 192.124.176.69 4 538 -193.125.95.124 193.124.5.54 2 126 -194.87.13.20 195.210.143.145 4 168 -193.125.95.124 193.124.110.129 21 2181 -193.125.95.124 193.124.148.81 2 310 -194.87.13.20 195.210.136.25 4 626 -193.125.95.124 194.67.2.97 3 382 -193.125.95.124 194.84.222.2 3 382 -194.87.13.20 195.208.94.133 115 122276 -194.87.13.20 195.182.129.11 15 17177 -194.87.13.20 195.170.195.70 14 14313 -204.62.245.167 193.124.97.135 9 472 -194.87.13.20 195.144.198.159 90 40576 -194.87.13.20 195.144.192.198 79 91293 -193.125.95.124 195.222.130.67 9 745 -194.87.13.20 195.128.144.246 14 12816 -194.87.13.20 195.128.140.71 17 15901 -194.87.13.20 195.128.140.3 44 47802 -194.87.13.20 195.128.132.20 25 27119 -194.87.13.20 195.128.128.98 28 15369 -194.87.13.20 195.98.162.188 2 3000 -193.125.98.254 194.190.170.19 26 1456 -193.125.98.254 195.72.225.204 73 4088 -204.62.245.166 195.9.80.194 2 88 -204.62.245.161 193.124.182.40 2 138 -204.62.132.32 193.124.97.131 3 618 -193.125.103.137 195.46.163.141 7 372 -194.87.13.20 195.98.162.170 4 628 -193.125.121.1 193.124.22.22 2 136 -193.125.121.121 194.85.157.200 790 31921 -193.125.125.253 193.124.22.65 80 5411 -193.125.127.42 193.124.22.65 18 1368 -193.125.127.42 194.190.170.19 1227 63804 -194.87.13.20 195.98.162.155 73 70166 -194.87.13.20 195.98.162.9 323 163018 -194.87.13.20 195.98.161.32 10 9756 -194.87.13.20 195.98.161.25 4 1208 -194.87.13.20 195.90.180.25 3 568 -194.87.13.20 195.90.162.2 4 738 -194.87.13.20 195.54.8.139 42 53309 -194.87.13.20 195.54.5.129 27 13705 -194.87.13.20 195.46.164.25 11 12641 -194.87.13.20 195.46.164.16 62 74088 -194.87.13.20 195.46.163.158 35 37649 -194.87.13.20 195.46.163.89 52 57716 -194.87.13.20 195.46.163.15 11 12641 -193.125.132.129 193.124.215.71 26 4734 -193.125.132.129 193.124.222.161 5 220 -194.87.13.20 195.46.162.196 13 12813 -194.87.13.20 195.46.162.173 30 36193 -194.87.13.20 195.46.161.242 69 82486 -194.87.13.20 195.46.161.210 15 13392 -194.87.13.20 195.46.161.209 43 39183 -193.125.132.129 194.190.211.25 2 80 -194.87.13.20 195.46.161.111 85 93111 -194.87.13.20 195.46.161.100 41 8909 -194.87.13.20 195.16.102.4 5 3716 -194.87.13.20 195.16.101.109 17 20273 -194.87.13.20 195.16.101.101 93 112303 -194.87.13.20 195.16.98.99 152 171268 -194.87.13.20 195.9.103.3 11 12641 -194.87.13.20 194.220.53.195 303 100520 -194.87.13.20 194.190.56.83 8 1096 -194.87.13.20 194.85.149.18 43 48875 -194.87.13.20 194.85.137.152 30 34921 -194.87.13.20 194.58.169.23 5 590 -194.87.13.20 194.58.92.67 10 1044 -194.87.13.20 194.58.72.102 34 31635 -194.87.13.20 194.58.47.81 4 172 -194.87.13.20 193.124.241.239 53 51597 -193.125.142.40 195.54.3.15 7 500 -193.125.142.40 195.90.183.40 1 40 -193.125.143.130 195.90.128.103 13 11141 -193.125.143.135 195.46.160.46 45 2957 -204.62.129.195 195.19.1.132 10 4438 -193.125.148.150 193.124.22.65 12 912 -194.87.13.20 193.124.121.65 4 2216 -194.87.13.20 193.124.114.33 8 1084 -194.87.13.16 195.98.162.134 259 254892 -194.87.13.16 195.46.165.162 292 145058 -194.87.13.16 195.46.162.200 51 42010 -194.87.13.16 195.46.160.69 97 45411 -194.87.13.16 193.124.97.35 74 81434 -194.87.13.15 212.20.1.95 11 10485 -194.87.13.15 195.210.136.135 16 15786 -194.87.13.15 195.210.131.39 6 3168 -193.125.152.1 147.45.130.1 2 326 -194.87.13.15 195.98.162.153 136 143332 -194.87.13.15 195.98.162.9 308 168069 -194.87.13.15 195.46.165.185 1183 633028 -194.87.13.15 195.46.165.166 2 104 -194.87.13.15 195.46.164.44 70 53112 -194.87.13.15 195.46.163.156 159 113967 -194.87.13.15 195.46.162.241 64 20483 -194.87.13.15 195.46.162.30 120 95284 -194.87.13.15 195.16.101.67 115 82325 -194.87.13.15 195.9.90.85 7 600 -194.87.13.15 194.135.176.88 92 7543 -193.125.152.1 193.124.5.54 382 18328 -193.125.152.1 193.124.22.22 271 246786 -193.125.152.1 193.124.22.65 58 3504 -193.125.152.1 193.124.22.68 12 1443 -193.125.152.1 193.124.22.69 535 50134 -193.125.152.1 193.124.22.70 10 1187 -193.125.152.1 193.124.22.71 430 57506 -193.125.152.1 193.124.22.72 57 7236 -193.125.152.1 193.124.22.73 12 1443 -193.125.152.1 193.124.22.74 9 1059 -193.125.152.1 193.124.22.75 237 33658 -193.125.152.1 193.124.22.77 266 37279 -193.125.152.1 193.124.22.81 2265 522913 -193.125.152.1 193.124.22.83 739 88013 -193.125.152.1 193.124.36.45 1639 813217 -193.125.152.1 193.124.57.65 219 74665 -194.87.13.15 194.135.2.7 75 27476 -194.87.13.15 193.124.252.73 254 110171 -193.125.152.1 193.124.182.41 4 160 -193.125.152.1 193.124.241.3 15 2284 -193.125.152.1 193.124.241.14 1 244 -193.125.152.1 193.124.241.18 3 636 -193.125.152.1 193.124.241.29 19 3767 -193.125.152.1 193.124.241.40 13 3140 -193.125.152.1 193.124.241.53 32 7802 -193.125.152.1 193.124.241.58 2 420 -193.125.152.1 193.124.241.75 1 244 -193.125.152.1 193.124.241.84 4 670 -193.125.152.1 193.124.241.123 16 3574 -193.125.152.1 193.124.241.154 2 524 -193.125.152.1 193.124.241.158 44 10519 -193.125.152.1 193.124.241.229 1 200 -193.125.152.1 193.124.241.239 22 4490 -193.125.152.1 193.124.241.249 6 1748 -193.125.152.1 193.125.65.235 321 13793 -193.125.152.1 193.125.80.35 2 476 -194.87.13.15 193.124.241.39 512 271010 -194.87.13.15 193.124.32.49 1119 1170153 -194.87.13.14 195.210.136.135 188 193578 -193.125.152.1 193.232.0.205 24 1555 -193.125.152.1 193.232.21.26 17 1138 -193.125.152.1 193.232.21.31 24 2206 -193.125.152.1 193.232.69.159 8 1176 -193.125.152.1 193.232.88.17 19 1387 -193.125.152.1 193.232.119.131 783 31804 -193.125.152.1 193.232.202.12 2 818 -193.125.152.1 193.233.86.14 11 660 -193.125.152.1 193.233.86.33 11 660 -193.125.152.1 193.233.208.3 3 738 -194.87.13.12 212.248.36.8 5 1763 -194.87.13.12 212.20.8.250 49 37420 -194.87.13.12 195.210.182.31 50 3544 -194.87.13.12 195.210.179.4 37 33062 -193.125.152.1 194.58.169.17 357 155601 -193.125.152.1 194.58.201.193 6 774 -193.125.152.1 194.58.230.92 8 1576 -193.125.152.1 194.58.230.110 1 60 -193.125.152.1 194.67.2.97 10 2760 -193.125.152.1 194.67.90.1 8 448 -194.87.13.12 195.210.154.48 37 13937 -194.87.13.12 195.210.130.50 20 2117 -193.125.152.1 194.84.23.125 16 1168 -193.125.152.1 194.84.41.68 298 127287 -193.125.152.1 194.84.42.17 16 1325 -193.125.152.1 194.84.96.2 44 10261 -193.125.152.1 194.84.204.222 1 112 -193.125.152.1 194.84.242.126 10 2178 -193.125.152.1 194.85.80.238 18 1178 -193.125.152.1 194.85.128.10 25 1375 -193.125.152.1 194.85.137.89 8 440 -194.87.13.12 195.208.94.133 33 20968 -193.125.152.1 194.85.224.33 28 1708 -193.125.152.1 194.85.224.34 26 1586 -193.125.152.1 194.87.0.20 12 873 -193.125.152.1 194.87.5.3 8 448 -193.125.152.1 194.87.5.21 2 518 -193.125.152.1 194.87.13.2 4 224 -193.125.152.1 194.87.44.1 1 146 -193.125.152.1 194.87.210.41 2 402 -194.87.13.12 195.182.129.11 23 15865 -194.87.13.12 195.170.195.70 63 44135 -194.87.13.12 195.144.192.198 31 6314 -193.125.152.1 194.117.64.34 20 1271 -193.125.152.1 194.135.34.19 13 2470 -193.125.152.1 194.135.34.85 12 2254 -193.125.152.1 194.135.34.136 6 866 -193.125.152.1 194.135.34.150 2 488 -193.125.152.1 194.135.34.159 1 467 -193.125.152.1 194.135.34.212 11 2560 -193.125.152.1 194.135.34.229 2 337 -193.125.152.1 194.135.34.233 4 680 -193.125.152.1 194.135.102.10 2 414 -193.125.152.1 194.135.178.74 7 1162 -193.125.152.1 194.154.93.80 2 284 -194.87.13.12 195.128.140.3 14 872 -193.125.152.1 194.190.218.2 2 518 -194.87.13.12 195.128.130.2 4 352 -194.87.13.12 195.98.162.155 75 60095 -194.87.13.12 195.98.162.78 98 64468 -193.125.152.1 194.220.36.1 37 2850 -193.125.152.1 194.220.146.79 2 522 -194.87.13.12 195.98.162.9 62 13543 -194.87.13.12 195.98.161.59 7 476 -194.87.13.12 195.98.161.32 12 865 -204.62.128.51 195.19.1.132 43 38029 -204.62.128.48 193.124.97.153 9 3356 -204.59.144.222 194.85.149.1 2 266 -193.125.152.1 195.5.128.130 2 512 -194.87.13.12 195.98.161.25 8 3438 -193.125.152.1 195.16.104.35 5 280 -193.125.152.1 195.34.19.108 2 312 -193.125.152.1 195.34.32.11 2 476 -193.125.152.1 195.34.41.33 9 504 -194.87.13.12 195.90.136.148 32 3564 -194.87.13.12 195.90.136.143 10 890 -193.125.152.1 195.46.160.2 8 448 -193.125.152.1 195.46.160.34 2 630 -193.125.152.1 195.54.193.9 18 1405 -193.125.152.1 195.91.133.77 4 1212 -193.125.152.1 195.98.55.1 18 1405 -193.125.152.1 195.133.94.129 23 1485 -193.125.152.1 195.138.67.91 8 544 -193.125.152.1 195.138.80.33 19 1245 -193.125.152.1 195.138.80.34 20 1308 -193.125.152.1 195.146.64.131 4 472 -193.125.152.1 195.161.8.6 19 1445 -193.125.152.1 195.161.8.159 42 3569 -194.87.13.12 195.54.8.139 74 6178 -193.125.152.1 195.208.141.38 2 512 -193.125.152.1 195.209.37.18 2 670 -193.125.152.1 195.209.39.133 8 1698 -194.87.13.12 195.46.165.250 2 80 -193.125.152.1 195.218.133.114 24 1905 -194.87.13.12 195.46.165.196 9 3478 -193.125.152.1 195.230.64.66 101 4508 -193.125.152.1 195.239.88.50 37 1480 -193.125.152.1 195.239.193.64 2 476 -193.125.152.1 195.239.210.2 2 500 -194.87.13.12 195.46.164.25 69 4776 -194.87.13.12 195.46.164.17 28 16790 -194.87.13.12 195.46.163.158 30 6337 -194.87.13.12 195.46.163.89 56 28328 -194.87.13.12 195.46.163.15 8 336 -194.87.13.12 195.46.162.213 4 160 -194.87.13.12 195.46.162.206 41 25676 -194.87.13.12 195.46.162.196 54 38487 -194.87.13.12 195.46.162.173 63 40346 -194.87.13.12 195.46.162.55 7 657 -194.87.13.12 195.46.162.31 5 200 -194.87.13.12 195.46.161.242 67 20130 -194.87.13.12 195.46.161.219 5 1831 -194.87.13.12 195.46.161.210 12 13389 -194.87.13.12 195.46.161.209 64 26136 -194.87.13.12 195.46.161.111 47 3947 -194.87.13.12 195.16.101.109 31 2924 -194.87.13.12 195.16.101.101 42 3051 -194.87.13.12 195.16.98.99 13 903 -194.87.13.12 195.9.103.3 74 5122 -194.87.13.12 194.220.215.111 75 5304 -194.87.13.12 194.220.215.110 22 2367 -194.87.13.12 194.220.215.66 6 539 -194.87.13.12 194.190.82.40 14 1558 -194.87.13.12 193.125.19.101 23 2074 -194.87.13.12 193.124.241.239 10 4274 -194.87.13.12 193.124.114.33 42 13726 -193.125.152.1 62.76.114.44 9 2780 -194.87.13.8 212.20.8.250 110 87859 -194.87.13.8 195.222.130.242 4 527 -194.87.13.8 195.210.182.31 9 1222 -194.87.13.8 195.210.179.4 14 15689 -194.87.13.8 195.210.154.48 13 1602 -194.87.13.8 195.210.136.135 163 171207 -194.87.13.8 195.210.130.50 8 6213 -194.87.13.8 195.210.128.65 6 408 -194.87.13.8 195.208.94.133 63 43061 -194.87.13.8 195.208.76.33 5 355 -194.87.13.8 195.208.67.19 400 446069 -194.87.13.8 195.208.64.146 50 39549 -194.87.13.8 195.208.64.144 12 12685 -194.87.13.8 195.182.129.11 16 18647 -194.87.13.8 195.170.195.70 14 2119 -194.87.13.8 195.146.70.100 49 27151 -194.87.13.8 195.144.198.159 12 1336 -194.87.13.8 195.144.192.198 16 2213 -194.87.13.8 195.128.140.71 15 6105 -194.87.13.8 195.128.140.3 8 821 -194.87.13.8 195.98.162.170 5 699 -194.87.13.8 195.98.162.155 43 43382 -194.87.13.8 195.98.162.153 12 8634 -194.87.13.8 195.98.162.78 57 25228 -194.87.13.8 195.98.162.9 94 33009 -194.87.13.8 195.98.161.57 4 6000 -194.87.13.8 195.98.161.41 52 57725 -194.87.13.8 195.98.161.32 6 433 -194.87.13.8 195.96.174.178 17 20989 -194.87.13.8 195.96.163.66 13 8510 -194.87.13.8 195.90.188.105 169 68987 -194.87.13.8 195.90.188.98 13 13679 -194.87.13.8 195.90.185.38 100 23568 -194.87.13.8 195.90.162.2 26 9575 -194.87.13.8 195.90.136.148 25 3160 -194.87.13.8 195.90.136.143 4 2024 -194.87.13.8 195.90.132.57 4 1398 -194.87.13.8 195.54.8.139 33 10681 -194.87.13.8 195.54.5.129 4 735 -194.87.13.8 195.46.165.250 5 697 -194.87.13.8 195.46.165.215 23 10108 -194.87.13.8 195.46.164.25 25 2325 -194.87.13.8 195.46.164.17 16 11423 -194.87.13.8 195.46.164.16 9 6253 -194.87.13.8 195.46.163.171 50 24920 -194.87.13.8 195.46.163.158 19 6681 -194.87.13.8 195.46.163.156 18 19033 -194.87.13.8 195.46.163.123 11 10683 -194.87.13.8 195.46.163.89 69 36648 -194.87.13.8 195.46.163.15 4 353 -194.87.13.8 195.46.163.7 173 112297 -194.87.13.8 195.46.162.206 12 2050 -194.87.13.8 195.46.162.196 30 35369 -194.87.13.8 195.46.162.184 80 104089 -194.87.13.8 195.46.162.173 18 16346 -194.87.13.8 195.46.162.91 306 246711 -194.87.13.8 195.46.162.55 5 393 -194.87.13.8 195.46.162.31 9 557 -194.87.13.8 195.46.162.13 10 1014 -194.87.13.8 195.46.161.242 44 35502 -194.87.13.8 195.46.161.210 15 18274 -194.87.13.8 195.46.161.209 24 15531 -194.87.13.8 195.46.161.186 31 27219 -194.87.13.8 195.46.161.170 9 1482 -194.87.13.8 195.46.161.133 21 24725 -194.87.13.8 195.46.161.123 11 10683 -194.87.13.8 195.46.161.111 26 2791 -194.87.13.8 195.46.161.83 25 10320 -194.87.13.8 195.46.161.71 124 123406 -194.87.13.8 195.46.160.69 11 10785 -194.87.13.8 195.16.101.109 5 393 -193.125.152.3 158.250.39.28 2 126 -193.125.152.3 158.250.100.24 2 734 -193.125.152.3 159.93.17.7 4 234 -194.87.13.8 195.16.101.101 57 53033 -194.87.13.8 195.16.98.99 100 68835 -194.87.13.8 195.16.98.37 24 4428 -194.87.13.8 195.12.35.2 18 17726 -194.87.13.8 195.9.103.3 76 32081 -194.87.13.8 195.9.96.7 22 14498 -194.87.13.8 194.220.215.111 16 2352 -194.87.13.8 194.220.215.110 13 1554 -194.87.13.8 194.220.215.66 5 759 -194.87.13.8 194.220.53.195 7 797 -194.87.13.8 194.135.178.214 70 27886 -194.87.13.8 194.135.111.18 260 289019 -194.87.13.8 194.85.149.18 6 475 -194.87.13.8 194.58.72.102 5 703 -194.87.13.8 193.124.241.239 13 6926 -194.87.13.8 193.124.241.39 31 18403 -194.87.13.8 193.124.121.118 17 1675 -194.87.13.8 193.124.114.33 43 19148 -194.87.13.6 195.98.162.153 2 120 -194.87.13.2 212.20.8.250 16 3749 -194.87.13.2 212.20.8.246 5 1259 -194.87.13.2 212.20.1.95 33 7367 -194.87.13.2 195.238.68.234 9 2454 -194.87.13.2 195.222.138.108 7 1203 -194.87.13.2 195.222.130.242 21 5860 -194.87.13.2 195.210.190.19 19 4260 -194.87.13.2 195.210.189.1 5 1119 -194.87.13.2 195.210.182.31 35 26895 -194.87.13.2 195.210.176.170 4 1079 -194.87.13.2 195.210.174.6 5 1119 -194.87.13.2 195.210.164.25 5 1119 -194.87.13.2 195.210.154.164 9 2484 -194.87.13.2 195.210.154.152 8 1376 -193.125.152.3 192.188.189.3 2 136 -194.87.13.2 195.210.154.48 43 28721 -194.87.13.2 195.210.150.2 31 6855 -194.87.13.2 195.210.148.242 17 2910 -194.87.13.2 195.210.143.145 7 2110 -194.87.13.2 195.210.136.145 20 3862 -194.87.13.2 195.210.136.135 9 1423 -194.87.13.2 195.210.136.131 7 1353 -194.87.13.2 195.210.130.50 16 14690 -194.87.13.2 195.208.94.133 33 9913 -194.87.13.2 195.208.93.154 9 1411 -194.87.13.2 195.208.72.139 4 1079 -194.87.13.2 195.208.72.47 8 2154 -194.87.13.2 195.208.67.19 4 1079 -194.87.13.2 195.208.67.10 8 1376 -194.87.13.2 195.208.64.152 4 1079 -194.87.13.2 195.208.64.144 6 2066 -193.125.152.3 193.124.5.37 11 1336 -193.125.152.3 193.124.5.50 2 266 -193.125.152.3 193.124.5.54 4 692 -193.125.152.3 193.124.22.22 11 2138 -193.125.152.3 193.124.22.65 141 15806 -193.125.152.3 193.124.32.129 5 1116 -193.125.152.3 193.124.57.100 3 197 -193.125.152.3 193.124.76.86 1 278 -194.87.13.2 195.208.64.129 6 1167 -193.125.152.3 193.124.110.130 2 766 -193.125.152.3 193.124.134.19 4 548 -194.87.13.2 195.182.129.8 9 3525 -193.125.152.3 193.124.148.73 9 1408 -193.125.152.3 193.124.171.67 2 354 -193.125.152.3 193.124.182.40 2 144 -193.125.152.3 193.124.241.39 2 356 -193.125.152.3 193.124.241.83 4 866 -194.87.13.2 195.182.128.2 39 9020 -193.125.152.3 193.124.250.22 79 12968 -193.125.152.3 193.125.80.35 2 300 -194.87.13.2 195.170.195.70 55 42078 -194.87.13.2 195.146.71.226 5 1119 -194.87.13.2 195.146.71.178 53 11410 -194.87.13.2 195.146.70.100 6 2070 -194.87.13.2 195.146.70.97 7 1199 -194.87.13.2 195.144.198.159 44 14597 -194.87.13.2 195.144.192.198 17 4040 -194.87.13.2 195.128.144.142 7 2110 -194.87.13.2 195.128.144.133 6 2342 -194.87.13.2 195.128.140.71 19 16072 -194.87.13.2 195.128.140.3 22 5159 -194.87.13.2 195.128.139.110 13 2642 -194.87.13.2 195.128.139.94 18 6772 -193.125.152.3 193.193.193.100 2 132 -193.125.152.3 193.193.193.107 4 1148 -193.125.152.3 193.193.226.226 3 489 -194.87.13.2 195.128.138.136 6 1309 -194.87.13.2 195.128.136.186 20 4622 -193.125.152.3 193.232.8.20 5 323 -193.125.152.3 193.232.68.1 2 120 -193.125.152.3 193.232.88.17 44 4923 -193.125.152.3 193.232.88.125 2 388 -193.125.152.3 193.232.112.1 2 134 -193.125.152.3 193.232.127.78 20 4237 -193.125.152.3 193.232.212.12 9 1177 -193.125.152.3 193.232.232.66 4 1210 -193.125.152.3 193.233.48.9 7 447 -193.125.152.3 193.233.48.65 2 130 -193.125.152.3 193.233.56.200 2 294 -193.125.152.3 193.233.78.1 2 276 -193.125.152.3 193.233.86.14 4 240 -193.125.152.3 193.233.86.33 4 240 -193.125.152.3 193.233.192.19 2 118 -193.125.152.3 193.233.208.3 4 238 -193.125.152.3 193.233.224.1 4 800 -194.87.13.2 195.128.136.71 6 1159 -194.87.13.2 195.128.134.99 5 1264 -194.87.13.2 195.128.132.70 23 6787 -194.87.13.2 195.128.129.155 4 1079 -194.87.13.2 195.128.128.98 30 17304 -193.125.152.3 194.44.157.250 2 134 -194.87.13.2 195.128.128.70 5 2372 -194.87.13.2 195.128.128.66 8 2422 -193.125.152.3 194.58.101.95 12 2368 -193.125.152.3 194.58.124.24 2 320 -194.87.13.2 195.128.128.3 5 1187 -193.125.152.3 194.58.230.249 7 1050 -194.87.13.2 195.112.226.35 23 956 -193.125.152.3 194.67.1.154 9 1436 -193.125.152.3 194.67.2.97 11 1861 -193.125.152.3 194.67.2.98 12 973 -193.125.152.3 194.67.66.176 2 122 -193.125.152.3 194.67.82.228 2 552 -193.125.152.3 194.67.110.2 4 688 -193.125.152.3 194.67.114.81 3 198 -193.125.152.3 194.67.114.193 5 330 -193.125.152.3 194.67.115.35 5 330 -193.125.152.3 194.67.115.38 2 412 -193.125.152.3 194.67.128.130 2 330 -194.87.13.2 195.98.162.189 11 2282 -194.87.13.2 195.98.162.182 10 3433 -194.87.13.2 195.98.162.170 56 55418 -194.87.13.2 195.98.162.165 12 2318 -193.125.152.3 194.84.2.73 2 298 -193.125.152.3 194.84.17.34 17 2183 -193.125.152.3 194.84.21.18 6 1320 -193.125.152.3 194.84.23.125 21 1523 -193.125.152.3 194.84.31.233 11 5316 -193.125.152.3 194.84.32.67 2 138 -193.125.152.3 194.84.39.28 7 981 -193.125.152.3 194.84.48.11 2 130 -193.125.152.3 194.84.54.130 2 358 -193.125.152.3 194.84.86.6 1 58 -193.125.152.3 194.84.96.57 6 387 -193.125.152.3 194.84.122.1 20 1460 -193.125.152.3 194.84.132.2 8 2208 -193.125.152.3 194.84.167.1 2 146 -193.125.152.3 194.84.168.49 4 670 -193.125.152.3 194.84.204.131 2 146 -193.125.152.3 194.84.204.222 2 476 -193.125.152.3 194.84.206.3 5 305 -193.125.152.3 194.84.206.193 18 1098 -193.125.152.3 194.84.223.2 2 148 -193.125.152.3 194.84.243.71 2 300 -194.87.13.2 195.98.162.164 9 1287 -194.87.13.2 195.98.162.160 29 8361 -194.87.13.2 195.98.162.155 8 2174 -194.87.13.2 195.98.162.151 15 3499 -194.87.13.2 195.98.162.147 6 1300 -193.125.152.3 194.85.128.10 28 1552 -193.125.152.3 194.85.137.89 76 4180 -194.87.13.2 195.98.162.141 22 5639 -194.87.13.2 195.98.162.135 35 10480 -194.87.13.2 195.98.162.131 31 25682 -194.87.13.2 195.98.162.118 5 1262 -194.87.13.2 195.98.162.114 6 1159 -193.125.152.3 194.85.200.204 6 816 -193.125.152.3 194.85.224.33 68 4150 -193.125.152.3 194.85.224.34 64 3904 -193.125.152.3 194.87.0.8 4 294 -193.125.152.3 194.87.0.22 50 8498 -193.125.152.3 194.87.0.242 24 4272 -193.125.152.3 194.87.37.2 2 308 -193.125.152.3 194.87.43.111 2 114 -193.125.152.3 194.87.110.35 2 114 -193.125.152.3 194.87.157.34 2 318 -193.125.152.3 194.87.161.7 2 430 -193.125.152.3 194.87.162.120 2 308 -193.125.152.3 194.87.186.1 4 692 -193.125.152.3 194.87.210.41 2 112 -193.125.152.3 194.87.224.99 5 875 -193.125.152.3 194.87.233.66 2 238 -193.125.152.3 194.87.239.39 2 358 -194.87.13.2 195.98.162.111 5 1119 -194.87.13.2 195.98.162.102 7 1341 -194.87.13.2 195.98.162.97 5 2030 -194.87.13.2 195.98.162.94 13 2362 -194.87.13.2 195.98.162.78 134 104964 -194.87.13.2 195.98.162.77 6 1163 -194.87.13.2 195.98.162.73 15 5512 -194.87.13.2 195.98.162.72 26 5763 -194.87.13.2 195.98.162.66 4 1225 -194.87.13.2 195.98.162.9 231 74902 -194.87.13.2 195.98.161.71 13 3581 -193.125.152.3 194.135.2.131 16 3134 -193.125.152.3 194.135.34.42 3 733 -193.125.152.3 194.135.34.85 11 2042 -193.125.152.3 194.135.34.136 6 866 -194.87.13.2 195.98.161.67 10 2513 -193.125.152.3 194.135.102.10 8 1490 -193.125.152.3 194.135.161.11 13 1287 -193.125.152.3 194.154.82.67 2 304 -193.125.152.3 194.154.82.122 2 102 -194.87.13.2 195.98.161.59 20 4472 -193.125.152.3 194.186.38.34 2 298 -193.125.152.3 194.186.113.254 5 644 -193.125.152.3 194.186.170.253 2 476 -193.125.152.3 194.186.208.51 4 550 -193.125.152.3 194.186.212.137 2 336 -193.125.152.3 194.186.254.23 2 360 -194.87.13.2 195.98.161.57 28 6345 -193.125.152.3 194.190.105.2 2 232 -193.125.152.3 194.190.163.127 6 702 -193.125.152.3 194.190.195.66 4 268 -193.125.152.3 194.190.199.1 2 430 -193.125.152.3 194.190.215.113 10 1471 -193.125.152.3 194.190.216.124 2 448 -193.125.152.3 194.190.218.2 4 598 -194.87.13.2 195.98.161.46 8 1387 -194.87.13.2 195.98.161.40 11 3193 -194.87.13.2 195.98.161.33 13 3387 -194.87.13.2 195.98.160.174 5 1119 -194.87.13.2 195.98.160.148 11 1907 -194.87.13.2 195.98.160.146 8 428 -194.87.13.2 195.96.163.66 37 22436 -194.87.13.2 195.90.188.112 8 2150 -194.87.13.2 195.90.188.111 5 1237 -193.125.152.3 194.220.146.79 2 322 -194.87.13.2 195.90.188.105 27 7280 -193.125.152.3 194.226.167.195 14 1947 -194.87.13.2 195.90.188.101 1 1089 -194.87.13.2 195.90.186.228 7 1332 -194.87.13.2 195.90.185.38 20 3294 -194.87.13.2 195.90.183.122 12 3627 -194.87.13.2 195.90.180.25 22 18568 -204.58.155.18 144.206.2.1 3 173 -204.57.67.249 194.58.72.120 4 160 -204.57.67.150 195.146.67.100 5 200 -204.57.67.150 194.58.72.120 4 160 -204.57.67.146 195.146.67.100 5 200 -204.57.67.146 194.58.72.120 4 160 -194.87.13.2 195.90.180.12 4 1300 -194.87.13.2 195.90.162.2 53 15773 -193.125.152.3 195.5.128.130 4 814 -193.125.152.3 195.5.141.6 11 1500 -193.125.152.3 195.5.151.21 5 615 -194.87.13.2 195.90.158.23 3 1035 -194.87.13.2 195.90.152.133 3 124 -193.125.152.3 195.7.179.36 4 744 -194.87.13.2 195.90.146.80 4 1075 -194.87.13.2 195.90.145.35 6 2070 -193.125.152.3 195.9.90.65 66 14486 -193.125.152.3 195.9.90.70 3 615 -193.125.152.3 195.9.94.33 2 140 -193.125.152.3 195.12.66.1 4 250 -193.125.152.3 195.16.96.2 3 482 -193.125.152.3 195.16.101.2 2 126 -193.125.152.3 195.16.114.47 3 192 -194.87.13.2 195.90.145.1 3 1180 -193.125.152.3 195.19.160.1 6 1066 -193.125.152.3 195.19.188.66 4 248 -194.87.13.2 195.90.142.27 7 2280 -194.87.13.2 195.90.137.230 4 1075 -194.87.13.2 195.90.136.148 4 1276 -194.87.13.2 195.90.136.143 4 1260 -194.87.13.2 195.90.136.135 6 2066 -193.125.152.3 195.26.160.48 3 434 -193.125.152.3 195.34.0.1 4 618 -193.125.152.3 195.34.17.13 4 843 -193.125.152.3 195.34.32.11 2 352 -193.125.152.3 195.34.41.33 3 495 -193.125.152.3 195.46.160.4 7 1412 -193.125.152.3 195.46.163.120 42 9840 -193.125.152.3 195.54.2.1 9 1433 -193.125.152.3 195.54.192.33 20 2704 -193.125.152.3 195.54.193.30 2 230 -194.87.13.2 195.90.136.82 10 2230 -194.87.13.2 195.90.134.250 7 2387 -193.125.152.3 195.90.128.103 2 455 -193.125.152.3 195.90.128.107 3 197 -193.125.152.3 195.90.136.1 2 286 -193.125.152.3 195.90.158.139 6 318 -193.125.152.3 195.90.184.66 15 2690 -193.125.152.3 195.91.133.54 28 5845 -193.125.152.3 195.96.65.2 23 5249 -193.125.152.3 195.98.64.65 2 494 -193.125.152.3 195.98.162.10 2 520 -193.125.152.3 195.98.163.16 2 144 -194.87.13.2 195.90.132.67 7 1199 -194.87.13.2 195.90.132.57 9 2318 -193.125.152.3 195.128.128.1 18 1801 -193.125.152.3 195.133.0.8 6 420 -193.125.152.3 195.133.103.1 2 274 -194.87.13.2 195.90.132.10 7 2256 -193.125.152.3 195.146.64.42 5 736 -193.125.152.3 195.146.72.34 4 232 -194.87.13.2 195.90.132.3 9 2190 -194.87.13.2 195.90.128.103 27 7388 -193.125.152.3 195.151.16.12 2 288 -193.125.152.3 195.151.16.13 2 436 -193.125.152.3 195.151.35.66 9 1339 -193.125.152.3 195.151.108.130 2 280 -193.125.152.3 195.151.163.75 3 552 -193.125.152.3 195.161.0.135 6 543 -193.125.152.3 195.161.20.33 3 552 -193.125.152.3 195.161.21.2 3 186 -193.125.152.3 195.161.21.130 5 291 -193.125.152.3 195.178.199.130 2 104 -193.125.152.3 195.208.49.11 2 282 -193.125.152.3 195.208.72.3 3 363 -193.125.152.3 195.208.93.132 3 416 -194.87.13.2 195.72.224.74 16 3667 -194.87.13.2 195.54.8.139 28 17598 -193.125.152.3 195.208.248.36 2 512 -193.125.152.3 195.208.252.2 2 346 -193.125.152.3 195.208.252.180 2 118 -193.125.152.3 195.209.0.6 4 236 -193.125.152.3 195.209.63.161 2 446 -193.125.152.3 195.210.128.6 2 264 -194.87.13.2 195.54.6.67 5 1266 -194.87.13.2 195.54.5.129 60 27325 -193.125.152.3 195.218.218.37 4 264 -193.125.152.3 195.222.130.67 3 186 -193.125.152.3 195.239.46.189 2 706 -193.125.152.3 195.239.193.64 2 374 -193.125.152.3 195.239.210.2 1 51 -194.87.13.2 195.54.2.8 6 1438 -194.87.13.2 195.46.165.248 16 6178 -194.87.13.2 195.46.165.239 10 4284 -194.87.13.2 195.46.165.227 8 2254 -194.87.13.2 195.46.165.226 11 6825 -194.87.13.2 195.46.165.204 6 2070 -194.87.13.2 195.46.165.200 70 42657 -194.87.13.2 195.46.165.196 10 4963 -194.87.13.2 195.46.165.194 7 2110 -194.87.13.2 195.46.165.193 10 5874 -194.87.13.2 195.46.165.191 7 2400 -194.87.13.2 195.46.165.172 14 11492 -194.87.13.2 195.46.165.162 19 11262 -194.87.13.2 195.46.165.158 7 2382 -194.87.13.2 195.46.165.151 8 2254 -194.87.13.2 195.46.165.145 161 74887 -194.87.13.2 195.46.165.135 26 11996 -194.87.13.2 195.46.165.133 14 5629 -194.87.13.2 195.46.164.27 11 2278 -194.87.13.2 195.46.164.25 64 67188 -194.87.13.2 195.46.164.17 35 26017 -194.87.13.2 195.46.164.16 6 1300 -194.87.13.2 195.46.164.8 14 5798 -194.87.13.2 195.46.164.6 5 1254 -194.87.13.2 195.46.164.2 4 1079 -194.87.13.2 195.46.163.180 5 1187 -194.87.13.2 195.46.163.178 25 2053 -194.87.13.2 195.46.163.174 5 1119 -194.87.13.2 195.46.163.160 8 1365 -194.87.13.2 195.46.163.159 5 1119 -194.87.13.2 195.46.163.158 28 17225 -194.87.13.2 195.46.163.156 16 3397 -194.87.13.2 195.46.163.147 6 1163 -194.87.13.2 195.46.163.136 5 1119 -194.87.13.2 195.46.163.133 10 2370 -194.87.13.2 195.46.163.132 6 1284 -194.87.13.2 195.46.163.123 15 3503 -194.87.13.2 195.46.163.120 14 3613 -194.87.13.2 195.46.163.105 6 1294 -194.87.13.2 195.46.163.94 5 1119 -194.87.13.2 195.46.163.89 132 107364 -194.87.13.2 195.46.163.76 13 2646 -194.87.13.2 195.46.163.65 20 4627 -194.87.13.2 195.46.163.60 8 1239 -194.87.13.2 195.46.163.47 7 2110 -194.87.13.2 195.46.163.38 17 3593 -194.87.13.2 195.46.163.31 9 2378 -194.87.13.2 195.46.163.30 14 2506 -194.87.13.2 195.46.163.13 18 3681 -194.87.13.2 195.46.163.7 21 3885 -194.87.13.2 195.46.162.243 19 4865 -194.87.13.2 195.46.162.226 8 2440 -194.87.13.2 195.46.162.221 21 2981 -194.87.13.2 195.46.162.218 5 1265 -194.87.13.2 195.46.162.213 5 1257 -194.87.13.2 195.46.162.206 59 43287 -194.87.13.2 195.46.162.203 5 1119 -194.87.13.2 195.46.162.196 18 14883 -194.87.13.2 195.46.162.193 5 1119 -194.87.13.2 195.46.162.184 13 1455 -194.87.13.2 195.46.162.180 5 1119 -194.87.13.2 195.46.162.179 9 3109 -194.87.13.2 195.46.162.177 4 1079 -194.87.13.2 195.46.162.173 8 2499 -194.87.13.2 195.46.162.172 6 1159 -194.87.13.2 195.46.162.169 8 2420 -194.87.13.2 195.46.162.165 4 1079 -194.87.13.2 195.46.162.120 5 1119 -194.87.13.2 195.46.162.119 5 1262 -194.87.13.2 195.46.162.104 4 1079 -194.87.13.2 195.46.162.100 6 1290 -194.87.13.2 195.46.162.72 5 1119 -194.87.13.2 195.46.162.70 10 2373 -194.87.13.2 195.46.162.60 14 3601 -194.87.13.2 195.46.162.55 27 28360 -194.87.13.2 195.46.162.53 7 1203 -194.87.13.2 195.46.162.47 21 3887 -194.87.13.2 195.46.162.42 12 2624 -194.87.13.2 195.46.162.40 11 2420 -194.87.13.2 195.46.162.34 11 2411 -194.87.13.2 195.46.162.30 7 1207 -194.87.13.2 195.46.162.28 18 3603 -194.87.13.2 195.46.162.13 42 51477 -194.87.13.2 195.46.162.8 5 1119 -194.87.13.2 195.46.162.6 9 2452 -194.87.13.2 195.46.162.1 14 2562 -194.87.13.2 195.46.161.252 5 1119 -194.87.13.2 195.46.161.251 21 4943 -194.87.13.2 195.46.161.236 5 1260 -193.125.152.3 212.192.34.200 2 298 -193.125.152.3 212.248.39.3 3 174 -194.87.13.2 195.46.161.233 5 1262 -194.87.13.2 195.46.161.224 11 1508 -194.87.13.2 195.46.161.217 22 5891 -194.87.13.2 195.46.161.209 11 2619 -194.87.13.2 195.46.161.207 20 2351 -193.125.152.3 62.76.0.1 12 888 -193.125.152.3 62.76.114.44 4 861 -194.87.13.2 195.46.161.205 5 1119 -194.87.13.2 195.46.161.201 5 1262 -194.87.13.2 195.46.161.199 13 4623 -194.87.13.2 195.46.161.186 90 82991 -193.125.152.4 193.124.1.131 20 1742 -193.125.152.4 193.124.22.81 402 73761 -193.125.152.4 193.124.36.34 37 8132 -193.125.152.4 193.124.188.65 101 48405 -193.125.152.4 193.125.44.76 6 240 -193.125.152.4 193.125.80.35 37 3336 -193.125.152.4 193.233.208.3 4 240 -193.125.152.4 194.58.38.18 36 3384 -194.87.13.2 195.46.161.184 5 1119 -193.125.152.4 194.58.124.17 39 3399 -193.125.152.4 194.58.212.34 25 3742 -193.125.152.4 194.67.80.42 25 1795 -193.125.152.4 194.84.44.35 18 1638 -193.125.152.4 194.87.0.20 82 19845 -193.125.152.4 194.87.160.195 17 1150 -193.125.152.4 194.87.206.137 19 1690 -193.125.152.4 194.87.211.1 103 8898 -194.87.13.2 195.46.161.177 6 2360 -194.87.13.2 195.46.161.172 5 1259 -193.125.152.4 194.154.92.129 31 5655 -193.125.152.4 194.186.221.251 19 1238 -193.125.152.4 194.186.254.26 62 31955 -193.125.152.4 194.190.194.33 16 1534 -194.87.13.2 195.46.161.171 16 3685 -204.57.67.27 194.58.72.120 4 160 -193.125.152.4 195.9.16.2 23 1913 -193.125.152.4 195.12.66.81 16 1534 -194.87.13.2 195.46.161.170 32 7476 -193.125.152.4 195.54.2.7 17 1586 -193.125.152.4 195.58.1.145 35 7789 -193.125.152.4 195.90.136.21 94 11466 -193.125.152.4 195.222.130.67 17 1577 -193.125.152.4 195.239.88.50 21 1220 -194.87.13.2 195.46.161.164 7 2364 -194.87.13.2 195.46.161.156 12 2478 -194.87.13.2 195.46.161.155 6 1296 -194.87.13.2 195.46.161.154 11 2282 -194.87.13.2 195.46.161.153 5 1256 -194.87.13.2 195.46.161.146 6 252 -194.87.13.2 195.46.161.113 11 3596 -194.87.13.2 195.46.161.111 16 3598 -193.125.152.5 193.124.22.65 18 1368 -194.87.13.2 195.46.161.109 4 1079 -194.87.13.2 195.46.161.85 10 1383 -194.87.13.2 195.46.161.84 21 4799 -194.87.13.2 195.46.161.83 121 57225 -194.87.13.2 195.46.161.75 3 124 -193.125.152.6 193.124.22.22 2 88 -193.125.152.6 193.124.22.65 15 930 -193.125.152.6 193.232.119.131 2 80 -194.87.13.2 195.46.160.69 147 34960 -193.125.152.6 194.226.235.33 6 254 -194.87.13.2 195.38.160.38 10 1591 -194.87.13.2 195.16.108.139 10 9589 -193.125.152.6 195.91.161.2 4 176 -193.125.152.6 195.128.140.2 19 5145 -193.125.152.6 195.161.24.66 23 1283 -194.87.13.2 195.16.108.135 8 3272 -194.87.13.2 195.16.102.4 8 2154 -194.87.13.2 195.16.101.101 4 1280 -194.87.13.2 195.16.101.67 72 52581 -193.125.152.6 212.46.3.250 4 176 -193.125.152.8 193.124.22.65 4 224 -194.87.13.2 195.16.98.235 22 3020 -193.125.152.8 193.124.224.35 14 2571 -194.87.13.2 195.16.98.230 7 1330 -194.87.13.2 195.16.98.209 10 3463 -194.87.13.2 195.16.98.204 27 5394 -194.87.13.2 195.16.98.194 13 3269 -194.87.13.2 195.16.98.193 14 4507 -194.87.13.2 195.16.98.99 7 1400 -194.87.13.2 195.16.98.37 44 49756 -194.87.13.2 195.16.98.13 14 3317 -193.125.152.10 158.250.26.145 18 1368 -194.87.13.2 195.16.96.9 11 2554 -194.87.13.2 195.12.32.170 8 3451 -193.125.152.10 193.124.22.65 18 1368 -193.125.152.10 193.233.11.84 4 304 -193.125.152.10 194.67.64.33 18 1368 -193.125.152.10 194.67.65.17 18 1368 -193.125.152.10 194.67.65.18 18 1368 -193.125.152.10 194.67.65.130 18 1368 -193.125.152.10 194.67.106.209 20 1520 -193.125.152.10 194.84.127.22 12 912 -194.87.13.2 195.12.32.165 27 4363 -194.87.13.2 195.12.32.52 5 2138 -194.87.13.2 195.12.32.7 4 1219 -193.125.152.10 194.190.105.2 2 152 -193.125.152.10 194.190.105.4 1 76 -193.125.152.10 194.190.105.7 2 152 -193.125.152.10 195.5.128.42 18 1368 -193.125.152.10 195.5.138.6 18 1368 -193.125.152.10 195.5.138.44 16 1216 -193.125.152.10 195.26.160.48 15 1140 -193.125.152.10 195.26.160.50 18 1368 -193.125.152.10 195.54.192.1 2 152 -193.125.152.10 195.54.192.43 2 152 -193.125.152.10 195.133.94.129 4 336 -193.125.152.10 195.151.111.45 13 988 -194.87.13.2 195.9.176.153 18 5299 -194.87.13.2 195.9.103.3 184 183787 -194.87.13.2 195.9.96.7 96 66779 -193.125.152.12 193.124.22.65 2 152 -193.125.152.15 193.124.22.65 18 1368 -193.125.152.16 193.124.22.65 15 1140 -193.125.152.17 193.124.22.22 12 906 -193.125.152.17 193.124.22.65 12 912 -193.125.152.18 193.124.22.65 2 152 -204.57.67.9 195.146.67.100 5 200 -194.87.13.2 195.9.94.33 11 2544 -193.125.152.19 193.124.22.65 13 988 -194.87.13.2 195.9.90.85 139 61939 -194.87.13.2 195.9.67.45 18 3485 -193.125.152.23 193.124.22.65 4 246 -194.87.13.2 195.9.47.230 7 2488 -193.125.152.23 194.87.0.28 3783 538698 -193.125.152.23 194.186.254.26 6986 644105 -194.87.13.2 194.220.215.111 73 61702 -193.125.152.24 192.124.174.67 5717 2168144 -194.87.13.2 194.220.215.110 56 45039 -193.125.152.24 193.124.97.131 504 27627 -194.87.13.2 194.220.215.66 59 35775 -194.87.13.2 194.220.169.1 32 14343 -193.125.152.24 193.125.95.121 1040 572488 -194.87.13.2 194.220.140.106 6 1159 -194.87.13.2 194.190.105.4 40 8033 -194.87.13.2 194.190.82.40 34 24976 -193.125.152.24 194.58.72.102 2072 1038564 -193.125.152.24 194.58.110.33 649 310072 -194.87.13.2 194.190.56.83 11 1499 diff --git a/contrib/ip_and_mac/test.sql b/contrib/ip_and_mac/test.sql deleted file mode 100644 index d1a99aca41..0000000000 --- a/contrib/ip_and_mac/test.sql +++ /dev/null @@ -1,71 +0,0 @@ --- --- A quick test of the IP address code --- --- $Id: test.sql,v 1.2 1998/06/16 05:35:12 momjian Exp $ --- This is original test (it was written before my changes in this class). alex. - --- temporary table: -create table addresses (address ipaddr); - --- sample data from two subnets: -insert into addresses values ('158.37.96.15'); -insert into addresses values ('158.37.96.16'); -insert into addresses values ('158.37.96.17'); -insert into addresses values ('158.37.97.15'); -insert into addresses values ('158.37.97.16'); -insert into addresses values ('158.37.97.17'); -insert into addresses values ('158.37.98.15'); -insert into addresses values ('158.37.98.16'); -insert into addresses values ('158.37.98.17'); -insert into addresses values ('158.37.96.150'); -insert into addresses values ('158.37.96.160'); -insert into addresses values ('158.37.96.170'); -insert into addresses values ('158.37.97.150'); -insert into addresses values ('158.37.97.160'); -insert into addresses values ('158.37.97.170'); -insert into addresses values ('158.37.98.150'); -insert into addresses values ('158.37.98.160'); -insert into addresses values ('158.37.98.170'); - --- show them all: -select * from addresses; - --- select the ones in subnet 96: -select * from addresses where ipaddr_in_net(address, '158.37.96.0/24'); - --- select the ones not in subnet 96: -select * from addresses where not ipaddr_in_net(address, '158.37.96.0/24'); - --- select the ones in subnet 97: -select * from addresses where ipaddr_in_net(address, '158.37.97.0/24'); - --- select the ones not in subnet 97: -select * from addresses where not ipaddr_in_net(address, '158.37.97.0/24'); - --- select the ones in subnet 96 or 97, sorted: -select * from addresses where ipaddr_in_net(address, '158.37.96.0/23') - order by address; - --- now some networks: -create table networks (network ipaddr); - --- now the subnets mentioned above: -insert into networks values ('158.37.96.0/24'); -insert into networks values ('158.37.97.0/24'); -insert into networks values ('158.37.98.0/24'); - --- select the netmasks of the net containing each: -select address, ipaddr_mask(network) from addresses, networks - where ipaddr_in_net(address, network); - --- select the broadcast address of the net containing each: -select address, ipaddr_bcast(network) from addresses, networks - where ipaddr_in_net(address, network); - --- tidy up: -drop table addresses; -drop table networks; - --- --- eof --- diff --git a/contrib/ip_and_mac/test1.sql b/contrib/ip_and_mac/test1.sql deleted file mode 100644 index 372a0843eb..0000000000 --- a/contrib/ip_and_mac/test1.sql +++ /dev/null @@ -1,11 +0,0 @@ -drop table stat_t; -create table stat_t(i1 ipaddr, i2 ipaddr, p int4, b int4); -create index stat_i1 on stat_t using btree (i1 ipaddr_ops); -create index stat_i2 on stat_t using btree (i2 ipaddr_ops); -copy stat_t from '/v/noc/src/ip_class/test.DATA' using delimiters ' '; --- --- Please, check if your test data are not in /v/noc/src/ip_class/test.DATA file, --- edit test1.sql file and repeatr it. --- --- If everything is OK, you should run test2.sql now --- diff --git a/contrib/ip_and_mac/test2.sql b/contrib/ip_and_mac/test2.sql deleted file mode 100644 index 3207aa2c22..0000000000 --- a/contrib/ip_and_mac/test2.sql +++ /dev/null @@ -1,26 +0,0 @@ -vacuum verbose analyze stat_t (i1,i2); --- --- -select i2,sum(b) as b -into tmp -from stat_t -where i1 >= '144.206.0.0' and i1 <= '144.206.255.255' -group by i2; -insert into tmp -select '0.0.0.0' as i2,sum(b) as k -from tmp -where b < 10 * 1024; -delete from tmp -where b < 10 * 1024 and i2 <> '0.0.0.0'; -select i2,b / 1024 as k from tmp -order by k desc; -select ipaddr_print(i2,'%A/%P'),b from tmp where i2 = '0.0.0.0'; -drop table tmp; -explain select i2,sum(b) as b -into tmp -from stat_t -where i1 >= '144.206.0.0' and i1 <= '144.206.255.255' -group by i2; --- ******************************************************** --- * Now remove test table by 'drop table stat_t' command * --- ******************************************************** diff --git a/doc/README.ipaddr b/doc/README.ipaddr new file mode 100644 index 0000000000..7e7883a47e --- /dev/null +++ b/doc/README.ipaddr @@ -0,0 +1,74 @@ +PostgreSQL type extensions for IP and MAC addresses. +--------------------------------------------------- + +$Id: README.ipaddr,v 1.1 1998/10/03 05:40:41 momjian Exp $ + +I needed to record IP and MAC level ethernet addresses in a data +base, and I really didn't want to store them as plain strings, with +no enforced error checking, so I put together the accompanying code +as my first experiment with adding a data type to PostgreSQL. I +then thought that this might be useful to others, both directly and +as a very simple example of how to do this sort of thing, so I +submitted it to the PostgreSQL project for inclusion in the contrib +directory. Since then, that directory has been modified to contain +Aleksei Roudnev's implementation, which is based on mine. + +For those who have seen my previous contribution of these types, note +that much has changed: I've modified the IP address type to work the +way Paul Vixie did with his CIDR type. In fact, I've pretty much just +stolen his solution, modifying it into my framework in such a way as +to facilitate the addition of IPV6 handling code in the future. I've +pretty much ignored Aleksei's C code, but I've added his SQL code to +enter the necessary operators into the various system tables needed to +make the types indexable. + +IP addresses are implemented as a struct of fixed in-memory length, +but variable on-disk storage size. For IPV4, it contains the address +family (AF_INET), the CIDR prefix length and four byte address. For +IPV6, the address family will be different, and the address longer. + +The external representation of an IP address generally looks like +'158.37.96.15/32'. This address happens to be part of a subnet where +I work; '158.37.96.0/24', which itself is a part of the larger subnet +allocated to our site, which is '158.37.96.0/21', which again, if you +go by the old book, is part of the class "B" net '158.37.0.0/16'. + +Input and output functions are supplied, along with the "normal" <, +<=, =, >=, > and <> operators, which all do what you expect. In +addition, there are operators to check for networks or addresses being +subnets of or addresses contained within other networks. << tests +whether the left operand is contained within the right, <<= includes +equality, >> and >>= do the same things the opposite way. + +The input and output functions use routines from Paul Vixie's BIND, +and I've snarfed the source files inet_net_ntop.c and inet_net_pton.c +directly from a recent distribution of that code. They are included +here to avoid the need to fetch and install the BIND libraries to be +able to use this code. IANAL, but it looks from the copyright +messages in the files as if this should be acceptable. Read the +documentation in inet_net_pton.c to see the legal input formats. + +MAC level ethernet addresses are implemented as a 6 byte struct that +contains the address as unsigned chars. Several input forms are +accepted; the following are all the same address: '08002b:010203', +'08002b-010203', '0800.2b01.0203', '08-00-2b-01-02-03' and +'08:00:2b:01:02:03'. Upper and lower case is accepted for the digits +'a' through 'f'. Output is always in the latter of the given forms. + +As with IP addresses, input and output functions are supplied as well +as the "normal" operators, which do what you expect. As an extra +feature, a function macaddr_manuf() is defined, which returns the name +of the manufacturer as a string. This is currently held in a +hard-coded struct internal to the C module -- it might be smarter to +put this information into an actual data base table, and look up the +manufacturer there. + +Many thanks to Aleksei Roudnev and Paul Vixie for their fine work! + +I don't know what changes are needed to the Makefile for other systems +than the one I'm running (NetBSD 1.3), but anyway: to install on a BSD +system: fix the path names in the Makefile if you need to, then make, +make install, slurp the SQL files into psql or whatever, and you're +off. Enjoy! + +Bergen, Norway, 1998-08-09, Tom Ivar Helbekkmo (tih@nhh.no). diff --git a/src/backend/parser/gram.c b/src/backend/parser/gram.c index 770d47d6fe..76e80c6d71 100644 --- a/src/backend/parser/gram.c +++ b/src/backend/parser/gram.c @@ -229,7 +229,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.39 1998/09/30 05:48:25 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.40 1998/10/03 05:40:42 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -344,7 +344,7 @@ typedef union -#define YYFINAL 1649 +#define YYFINAL 1650 #define YYFLAG -32768 #define YYNTBASE 229 @@ -483,18 +483,18 @@ static const short yyprhs[] = { 0, 2574, 2578, 2582, 2584, 2588, 2592, 2596, 2598, 2600, 2605, 2608, 2612, 2616, 2618, 2622, 2624, 2628, 2630, 2632, 2633, 2635, 2637, 2639, 2641, 2643, 2645, 2647, 2649, 2651, 2653, - 2655, 2657, 2659, 2661, 2664, 2666, 2668, 2670, 2672, 2674, - 2676, 2678, 2680, 2682, 2684, 2686, 2688, 2690, 2692, 2694, - 2696, 2698, 2700, 2702, 2704, 2706, 2708, 2710, 2712, 2714, - 2716, 2718, 2720, 2722, 2724, 2726, 2728, 2730, 2732, 2734, - 2736, 2738, 2740, 2742, 2744, 2746, 2748, 2750, 2752, 2754, - 2756, 2758, 2760, 2762, 2764, 2766, 2768, 2770, 2772, 2774, - 2776, 2778, 2780, 2782, 2784, 2786, 2788, 2790, 2792, 2794, - 2796, 2798, 2800, 2802, 2804, 2806, 2808, 2810, 2812, 2814, - 2816, 2818, 2820, 2822, 2824, 2826, 2828, 2830, 2832, 2834, - 2836, 2838, 2840, 2842, 2844, 2846, 2848, 2850, 2852, 2854, - 2856, 2858, 2860, 2862, 2864, 2866, 2868, 2870, 2872, 2874, - 2876, 2878, 2880, 2882, 2884, 2886, 2888, 2890 + 2655, 2657, 2659, 2661, 2664, 2666, 2668, 2670, 2673, 2675, + 2677, 2679, 2681, 2683, 2685, 2687, 2689, 2691, 2693, 2695, + 2697, 2699, 2701, 2703, 2705, 2707, 2709, 2711, 2713, 2715, + 2717, 2719, 2721, 2723, 2725, 2727, 2729, 2731, 2733, 2735, + 2737, 2739, 2741, 2743, 2745, 2747, 2749, 2751, 2753, 2755, + 2757, 2759, 2761, 2763, 2765, 2767, 2769, 2771, 2773, 2775, + 2777, 2779, 2781, 2783, 2785, 2787, 2789, 2791, 2793, 2795, + 2797, 2799, 2801, 2803, 2805, 2807, 2809, 2811, 2813, 2815, + 2817, 2819, 2821, 2823, 2825, 2827, 2829, 2831, 2833, 2835, + 2837, 2839, 2841, 2843, 2845, 2847, 2849, 2851, 2853, 2855, + 2857, 2859, 2861, 2863, 2865, 2867, 2869, 2871, 2873, 2875, + 2877, 2879, 2881, 2883, 2885, 2887, 2889, 2891 }; static const short yyrhs[] = { 230, @@ -765,29 +765,29 @@ static const short yyrhs[] = { 230, 486, 0, 204, 0, 486, 0, 486, 0, 486, 0, 483, 0, 204, 0, 482, 0, 209, 0, 483, 0, 421, 483, 0, 481, 0, 119, 0, 47, 0, 208, - 0, 207, 0, 205, 0, 204, 0, 486, 0, 426, - 0, 431, 0, 204, 0, 436, 0, 3, 0, 4, - 0, 137, 0, 138, 0, 140, 0, 141, 0, 143, - 0, 146, 0, 147, 0, 148, 0, 149, 0, 150, - 0, 41, 0, 152, 0, 153, 0, 156, 0, 157, - 0, 158, 0, 159, 0, 160, 0, 161, 0, 60, - 0, 162, 0, 163, 0, 66, 0, 67, 0, 164, - 0, 167, 0, 72, 0, 169, 0, 170, 0, 79, - 0, 173, 0, 174, 0, 176, 0, 178, 0, 84, - 0, 179, 0, 86, 0, 180, 0, 87, 0, 181, - 0, 95, 0, 96, 0, 182, 0, 99, 0, 183, - 0, 101, 0, 184, 0, 186, 0, 187, 0, 188, - 0, 105, 0, 189, 0, 190, 0, 193, 0, 194, - 0, 195, 0, 196, 0, 111, 0, 113, 0, 114, - 0, 134, 0, 197, 0, 135, 0, 201, 0, 203, - 0, 133, 0, 486, 0, 136, 0, 139, 0, 142, - 0, 144, 0, 25, 0, 145, 0, 27, 0, 28, - 0, 151, 0, 154, 0, 155, 0, 47, 0, 51, - 0, 55, 0, 165, 0, 166, 0, 168, 0, 171, - 0, 172, 0, 175, 0, 89, 0, 92, 0, 93, - 0, 185, 0, 191, 0, 192, 0, 110, 0, 117, - 0, 119, 0, 200, 0, 202, 0, 28, 0, 172, - 0 + 449, 0, 207, 0, 205, 0, 204, 0, 486, 0, + 426, 0, 431, 0, 204, 0, 436, 0, 3, 0, + 4, 0, 137, 0, 138, 0, 140, 0, 141, 0, + 143, 0, 146, 0, 147, 0, 148, 0, 149, 0, + 150, 0, 41, 0, 152, 0, 153, 0, 156, 0, + 157, 0, 158, 0, 159, 0, 160, 0, 161, 0, + 60, 0, 162, 0, 163, 0, 66, 0, 67, 0, + 164, 0, 167, 0, 72, 0, 169, 0, 170, 0, + 79, 0, 173, 0, 174, 0, 176, 0, 178, 0, + 84, 0, 179, 0, 86, 0, 180, 0, 87, 0, + 181, 0, 95, 0, 96, 0, 182, 0, 99, 0, + 183, 0, 101, 0, 184, 0, 186, 0, 187, 0, + 188, 0, 105, 0, 189, 0, 190, 0, 193, 0, + 194, 0, 195, 0, 196, 0, 111, 0, 113, 0, + 114, 0, 134, 0, 197, 0, 135, 0, 201, 0, + 203, 0, 133, 0, 486, 0, 136, 0, 139, 0, + 142, 0, 144, 0, 25, 0, 145, 0, 27, 0, + 28, 0, 151, 0, 154, 0, 155, 0, 47, 0, + 51, 0, 55, 0, 165, 0, 166, 0, 168, 0, + 171, 0, 172, 0, 175, 0, 89, 0, 92, 0, + 93, 0, 185, 0, 191, 0, 192, 0, 110, 0, + 117, 0, 119, 0, 200, 0, 202, 0, 28, 0, + 172, 0 }; #endif @@ -875,18 +875,18 @@ static const short yyrline[] = { 0, 4376, 4384, 4394, 4396, 4398, 4409, 4411, 4413, 4428, 4435, 4442, 4461, 4463, 4468, 4475, 4482, 4494, 4508, 4509, 4512, 4517, 4529, 4530, 4531, 4532, 4533, 4539, 4540, 4542, 4543, - 4548, 4555, 4562, 4569, 4577, 4579, 4589, 4601, 4608, 4609, - 4610, 4617, 4619, 4621, 4632, 4633, 4634, 4635, 4636, 4637, - 4638, 4639, 4640, 4641, 4642, 4643, 4644, 4645, 4646, 4647, - 4648, 4649, 4650, 4651, 4652, 4653, 4654, 4655, 4656, 4657, - 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665, 4666, 4667, - 4668, 4669, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, - 4678, 4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, - 4688, 4689, 4690, 4691, 4692, 4693, 4694, 4695, 4696, 4697, - 4698, 4699, 4700, 4701, 4714, 4715, 4716, 4717, 4718, 4719, - 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, - 4730, 4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, - 4740, 4741, 4742, 4743, 4744, 4745, 4748, 4755 + 4548, 4555, 4562, 4569, 4577, 4579, 4589, 4601, 4609, 4610, + 4611, 4618, 4620, 4622, 4633, 4634, 4635, 4636, 4637, 4638, + 4639, 4640, 4641, 4642, 4643, 4644, 4645, 4646, 4647, 4648, + 4649, 4650, 4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, + 4659, 4660, 4661, 4662, 4663, 4664, 4665, 4666, 4667, 4668, + 4669, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678, + 4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, + 4689, 4690, 4691, 4692, 4693, 4694, 4695, 4696, 4697, 4698, + 4699, 4700, 4701, 4702, 4715, 4716, 4717, 4718, 4719, 4720, + 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730, + 4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 4740, + 4741, 4742, 4743, 4744, 4745, 4746, 4749, 4756 }; #endif @@ -1144,7 +1144,7 @@ static const short yyr2[] = { 0, 3, 3, 1, 3, 3, 3, 1, 1, 4, 2, 3, 3, 1, 3, 1, 3, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1193,7 +1193,7 @@ static const short yydefact[] = { 0, 292, 302, 0, 0, 443, 0, 0, 0, 568, 568, 640, 641, 643, 645, 559, 839, 0, 0, 817, 553, 593, 0, 568, 0, 595, 556, 0, 0, 886, 584, - 0, 816, 646, 564, 891, 0, 825, 0, 818, 812, + 0, 816, 646, 564, 891, 0, 825, 0, 730, 812, 0, 797, 0, 0, 0, 0, 0, 531, 538, 541, 540, 536, 561, 539, 826, 795, 615, 594, 730, 469, 793, 0, 0, 616, 815, 811, 813, 617, 417, 69, @@ -1206,731 +1206,819 @@ static const short yydefact[] = { 0, 563, 570, 0, 0, 0, 546, 545, 0, 735, 0, 544, 579, 580, 581, 577, 585, 576, 568, 566, 695, 0, 0, 547, 740, 765, 0, 574, 0, 0, 575, - 543, 542, 537, 573, 635, 618, 628, 626, 627, 0, - 0, 0, 594, 814, 0, 535, 0, 0, 0, 0, - 665, 0, 0, 0, 0, 655, 657, 636, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 614, 471, 0, - 500, 0, 0, 0, 73, 74, 68, 72, 71, 66, - 70, 67, 788, 730, 500, 787, 0, 0, 730, 420, - 0, 0, 335, 286, 428, 374, 374, 374, 374, 79, - 0, 54, 55, 59, 0, 0, 0, 0, 0, 0, - 101, 103, 104, 152, 0, 219, 220, 0, 59, 405, - 247, 246, 248, 0, 243, 0, 412, 550, 839, 548, - 551, 341, 0, 823, 824, 342, 822, 346, 0, 0, - 225, 0, 0, 0, 0, 222, 0, 0, 276, 0, - 273, 0, 0, 525, 493, 261, 0, 0, 366, 299, - 298, 0, 0, 445, 730, 0, 477, 0, 438, 0, - 0, 0, 572, 0, 0, 0, 477, 0, 737, 738, - 736, 0, 0, 0, 0, 0, 0, 0, 565, 0, + 543, 542, 537, 573, 635, 0, 818, 618, 628, 626, + 627, 0, 0, 0, 594, 814, 0, 535, 0, 0, + 0, 0, 665, 0, 0, 0, 0, 655, 657, 636, + 0, 0, 0, 0, 0, 0, 0, 0, 614, 471, + 0, 500, 0, 0, 0, 73, 74, 68, 72, 71, + 66, 70, 67, 788, 730, 500, 787, 0, 0, 730, + 420, 0, 0, 335, 286, 428, 374, 374, 374, 374, + 79, 0, 54, 55, 59, 0, 0, 0, 0, 0, + 0, 101, 103, 104, 152, 0, 219, 220, 0, 59, + 405, 247, 246, 248, 0, 243, 0, 412, 550, 839, + 548, 551, 341, 0, 823, 824, 342, 822, 346, 0, + 0, 225, 0, 0, 0, 0, 222, 0, 0, 276, + 0, 273, 0, 0, 525, 493, 261, 0, 0, 366, + 299, 298, 0, 0, 445, 730, 0, 477, 0, 438, + 0, 0, 0, 572, 0, 0, 0, 477, 0, 737, + 738, 736, 0, 0, 0, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 730, 0, 742, 755, 731, 767, 0, 0, 0, - 0, 0, 0, 594, 772, 0, 631, 0, 0, 534, - 0, 0, 900, 902, 903, 907, 908, 909, 916, 917, - 918, 922, 923, 924, 896, 897, 898, 899, 901, 904, - 905, 906, 910, 911, 912, 913, 914, 915, 919, 920, - 921, 925, 926, 895, 794, 693, 0, 715, 716, 718, - 720, 0, 0, 0, 721, 0, 0, 0, 0, 0, - 0, 0, 730, 0, 697, 698, 0, 661, 0, 656, - 659, 633, 0, 667, 0, 694, 0, 0, 0, 632, - 0, 0, 0, 625, 0, 0, 0, 623, 0, 0, - 0, 624, 0, 0, 0, 619, 0, 0, 0, 620, - 0, 0, 0, 622, 0, 0, 0, 621, 629, 0, - 0, 792, 0, 526, 796, 781, 783, 804, 0, 638, - 0, 782, 790, 0, 526, 0, 0, 95, 89, 88, - 0, 0, 422, 373, 102, 85, 0, 0, 0, 372, - 52, 57, 58, 63, 0, 0, 0, 0, 0, 0, - 214, 0, 216, 112, 108, 215, 63, 0, 0, 415, - 0, 407, 549, 0, 340, 345, 339, 0, 0, 0, - 224, 234, 226, 227, 228, 229, 0, 0, 0, 0, - 272, 322, 477, 0, 356, 0, 0, 312, 316, 314, - 0, 442, 446, 440, 0, 0, 317, 0, 0, 0, - 562, 642, 644, 0, 558, 0, 647, 648, 0, 552, - 587, 588, 589, 590, 591, 592, 586, 0, 555, 0, - 740, 765, 0, 753, 743, 748, 0, 649, 0, 754, - 0, 0, 0, 0, 0, 741, 0, 0, 0, 0, - 769, 650, 583, 0, 771, 0, 0, 0, 654, 0, - 0, 604, 606, 605, 607, 608, 609, 610, 611, 0, - 601, 0, 529, 534, 560, 0, 0, 0, 740, 765, - 0, 711, 699, 706, 704, 705, 0, 0, 712, 0, - 0, 0, 0, 0, 696, 0, 0, 660, 658, 662, - 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 730, 0, 742, 755, 731, 767, 0, 0, + 0, 0, 0, 0, 594, 772, 0, 0, 631, 0, + 0, 534, 0, 0, 900, 902, 903, 907, 908, 909, + 916, 917, 918, 922, 923, 924, 896, 897, 898, 899, + 901, 904, 905, 906, 910, 911, 912, 913, 914, 915, + 919, 920, 921, 925, 926, 895, 794, 693, 0, 715, + 716, 718, 720, 0, 0, 0, 721, 0, 0, 0, + 0, 0, 0, 0, 730, 0, 697, 698, 0, 661, + 0, 656, 659, 633, 0, 667, 0, 694, 0, 0, + 0, 632, 0, 0, 0, 625, 0, 0, 0, 623, + 0, 0, 0, 624, 0, 0, 0, 619, 0, 0, + 0, 620, 0, 0, 0, 622, 0, 0, 0, 621, + 629, 0, 792, 0, 526, 796, 781, 783, 804, 0, + 638, 0, 782, 790, 0, 526, 0, 0, 95, 89, + 88, 0, 0, 422, 373, 102, 85, 0, 0, 0, + 372, 52, 57, 58, 63, 0, 0, 0, 0, 0, + 0, 214, 0, 216, 112, 108, 215, 63, 0, 0, + 415, 0, 407, 549, 0, 340, 345, 339, 0, 0, + 0, 224, 234, 226, 227, 228, 229, 0, 0, 0, + 0, 272, 322, 477, 0, 356, 0, 0, 312, 316, + 314, 0, 442, 446, 440, 0, 0, 317, 0, 0, + 0, 562, 642, 644, 0, 558, 0, 647, 648, 0, + 552, 587, 588, 589, 590, 591, 592, 586, 0, 555, + 0, 740, 765, 0, 753, 743, 748, 0, 649, 0, + 754, 0, 0, 0, 0, 0, 741, 0, 0, 0, + 0, 769, 650, 583, 0, 771, 0, 0, 0, 654, + 0, 730, 0, 0, 604, 606, 605, 607, 608, 609, + 610, 611, 0, 601, 0, 529, 534, 560, 0, 0, + 0, 740, 765, 0, 711, 699, 706, 704, 705, 0, + 0, 712, 0, 0, 0, 0, 0, 696, 0, 0, + 660, 658, 662, 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 730, 468, - 0, 499, 503, 506, 527, 495, 0, 637, 639, 786, - 449, 791, 0, 91, 92, 98, 90, 0, 429, 0, - 0, 80, 0, 82, 0, 371, 0, 65, 0, 0, - 160, 0, 0, 0, 0, 0, 0, 0, 0, 159, - 815, 161, 151, 0, 0, 0, 100, 0, 99, 218, - 220, 0, 106, 0, 0, 0, 0, 0, 0, 119, - 105, 107, 110, 114, 65, 0, 244, 414, 409, 413, - 418, 343, 0, 0, 344, 390, 391, 388, 389, 0, - 235, 0, 0, 232, 360, 280, 230, 231, 277, 279, - 281, 278, 275, 274, 0, 0, 0, 368, 369, 367, - 313, 0, 301, 444, 500, 0, 0, 569, 571, 0, - 500, 734, 0, 0, 0, 0, 0, 0, 0, 0, - 751, 739, 752, 744, 745, 747, 746, 749, 756, 0, - 766, 733, 732, 0, 764, 651, 652, 653, 770, 0, - 0, 613, 612, 0, 0, 534, 0, 530, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 709, 663, 710, - 700, 701, 703, 702, 707, 713, 0, 773, 0, 774, - 775, 0, 0, 0, 0, 669, 0, 0, 676, 0, - 0, 674, 0, 0, 675, 0, 0, 670, 0, 0, - 671, 0, 0, 673, 0, 0, 672, 0, 728, 514, - 0, 0, 0, 505, 528, 0, 497, 785, 784, 789, - 0, 87, 0, 427, 81, 0, 0, 0, 0, 0, - 50, 0, 183, 184, 162, 172, 170, 171, 0, 0, - 0, 0, 0, 0, 0, 0, 186, 188, 185, 0, - 0, 0, 0, 0, 0, 0, 0, 153, 0, 0, - 0, 154, 0, 111, 0, 0, 0, 144, 145, 147, - 149, 116, 150, 0, 0, 0, 0, 0, 0, 117, - 0, 124, 118, 120, 443, 109, 49, 251, 0, 0, - 411, 338, 0, 0, 0, 282, 233, 803, 321, 0, - 500, 0, 526, 439, 630, 557, 526, 554, 0, 758, - 759, 0, 0, 0, 763, 757, 768, 0, 0, 0, - 0, 603, 0, 532, 534, 0, 717, 719, 722, 723, - 0, 0, 0, 727, 714, 666, 0, 664, 777, 0, - 778, 779, 685, 677, 692, 684, 690, 682, 691, 683, - 686, 678, 687, 679, 689, 681, 688, 680, 730, 516, - 512, 516, 514, 511, 516, 513, 0, 501, 0, 504, - 0, 0, 464, 0, 430, 84, 0, 370, 62, 61, - 0, 0, 175, 181, 0, 200, 0, 191, 0, 187, - 190, 179, 0, 0, 0, 182, 178, 167, 168, 169, - 163, 164, 166, 165, 173, 176, 0, 158, 0, 155, - 0, 0, 113, 0, 0, 0, 142, 125, 135, 133, - 134, 0, 143, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 203, 250, 0, 0, 245, 0, 526, 387, - 236, 0, 323, 324, 326, 331, 0, 804, 526, 315, - 495, 495, 0, 760, 761, 762, 596, 0, 599, 600, - 0, 533, 0, 724, 725, 726, 776, 668, 0, 729, - 515, 508, 509, 507, 510, 0, 502, 494, 496, 473, - 479, 97, 83, 0, 64, 0, 0, 0, 199, 193, - 189, 192, 0, 0, 180, 0, 177, 0, 213, 115, - 0, 0, 0, 138, 141, 130, 131, 132, 126, 127, - 129, 128, 136, 139, 0, 123, 0, 206, 252, 253, - 249, 0, 0, 0, 0, 339, 0, 0, 0, 334, - 0, 495, 497, 497, 750, 597, 598, 708, 780, 519, - 472, 0, 0, 461, 60, 0, 196, 0, 194, 0, - 0, 157, 443, 0, 146, 148, 0, 140, 201, 202, - 0, 121, 205, 0, 337, 393, 386, 318, 325, 330, - 329, 0, 805, 328, 332, 0, 497, 464, 464, 0, - 0, 0, 477, 463, 466, 0, 174, 198, 197, 195, - 203, 0, 122, 0, 0, 204, 256, 392, 0, 333, - 331, 464, 441, 462, 0, 0, 498, 0, 473, 478, - 480, 488, 206, 137, 210, 0, 0, 207, 208, 260, - 257, 258, 0, 254, 259, 377, 0, 0, 376, 378, - 334, 479, 0, 0, 520, 524, 522, 500, 0, 0, - 486, 487, 0, 482, 156, 209, 211, 212, 0, 240, - 0, 381, 382, 0, 327, 457, 517, 0, 518, 0, - 526, 465, 481, 483, 484, 485, 255, 379, 384, 385, - 380, 0, 450, 521, 523, 495, 383, 0, 0, 456, - 497, 458, 0, 459, 467, 460, 0, 0, 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 468, 0, 499, 503, 506, 527, 495, 0, 637, 639, + 786, 449, 791, 0, 91, 92, 98, 90, 0, 429, + 0, 0, 80, 0, 82, 0, 371, 0, 65, 0, + 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, + 159, 815, 161, 151, 0, 0, 0, 100, 0, 99, + 218, 220, 0, 106, 0, 0, 0, 0, 0, 0, + 119, 105, 107, 110, 114, 65, 0, 244, 414, 409, + 413, 418, 343, 0, 0, 344, 390, 391, 388, 389, + 0, 235, 0, 0, 232, 360, 280, 230, 231, 277, + 279, 281, 278, 275, 274, 0, 0, 0, 368, 369, + 367, 313, 0, 301, 444, 500, 0, 0, 569, 571, + 0, 500, 734, 0, 0, 0, 0, 0, 0, 0, + 0, 751, 739, 752, 744, 745, 747, 746, 749, 756, + 0, 766, 733, 732, 0, 764, 651, 652, 653, 770, + 0, 728, 0, 0, 613, 612, 0, 0, 534, 0, + 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 709, 663, 710, 700, 701, 703, 702, 707, 713, 0, + 773, 0, 774, 775, 0, 0, 0, 0, 669, 0, + 0, 676, 0, 0, 674, 0, 0, 675, 0, 0, + 670, 0, 0, 671, 0, 0, 673, 0, 0, 672, + 514, 0, 0, 0, 505, 528, 0, 497, 785, 784, + 789, 0, 87, 0, 427, 81, 0, 0, 0, 0, + 0, 50, 0, 183, 184, 162, 172, 170, 171, 0, + 0, 0, 0, 0, 0, 0, 0, 186, 188, 185, + 0, 0, 0, 0, 0, 0, 0, 0, 153, 0, + 0, 0, 154, 0, 111, 0, 0, 0, 144, 145, + 147, 149, 116, 150, 0, 0, 0, 0, 0, 0, + 117, 0, 124, 118, 120, 443, 109, 49, 251, 0, + 0, 411, 338, 0, 0, 0, 282, 233, 803, 321, + 0, 500, 0, 526, 439, 630, 557, 526, 554, 0, + 758, 759, 0, 0, 0, 763, 757, 768, 730, 0, + 0, 0, 0, 603, 0, 532, 534, 0, 717, 719, + 722, 723, 0, 0, 0, 727, 714, 666, 0, 664, + 777, 0, 778, 779, 685, 677, 692, 684, 690, 682, + 691, 683, 686, 678, 687, 679, 689, 681, 688, 680, + 516, 512, 516, 514, 511, 516, 513, 0, 501, 0, + 504, 0, 0, 464, 0, 430, 84, 0, 370, 62, + 61, 0, 0, 175, 181, 0, 200, 0, 191, 0, + 187, 190, 179, 0, 0, 0, 182, 178, 167, 168, + 169, 163, 164, 166, 165, 173, 176, 0, 158, 0, + 155, 0, 0, 113, 0, 0, 0, 142, 125, 135, + 133, 134, 0, 143, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 203, 250, 0, 0, 245, 0, 526, + 387, 236, 0, 323, 324, 326, 331, 0, 804, 526, + 315, 495, 495, 0, 760, 761, 762, 729, 596, 0, + 599, 600, 0, 533, 0, 724, 725, 726, 776, 668, + 0, 515, 508, 509, 507, 510, 0, 502, 494, 496, + 473, 479, 97, 83, 0, 64, 0, 0, 0, 199, + 193, 189, 192, 0, 0, 180, 0, 177, 0, 213, + 115, 0, 0, 0, 138, 141, 130, 131, 132, 126, + 127, 129, 128, 136, 139, 0, 123, 0, 206, 252, + 253, 249, 0, 0, 0, 0, 339, 0, 0, 0, + 334, 0, 495, 497, 497, 750, 597, 598, 708, 780, + 519, 472, 0, 0, 461, 60, 0, 196, 0, 194, + 0, 0, 157, 443, 0, 146, 148, 0, 140, 201, + 202, 0, 121, 205, 0, 337, 393, 386, 318, 325, + 330, 329, 0, 805, 328, 332, 0, 497, 464, 464, + 0, 0, 0, 477, 463, 466, 0, 174, 198, 197, + 195, 203, 0, 122, 0, 0, 204, 256, 392, 0, + 333, 331, 464, 441, 462, 0, 0, 498, 0, 473, + 478, 480, 488, 206, 137, 210, 0, 0, 207, 208, + 260, 257, 258, 0, 254, 259, 377, 0, 0, 376, + 378, 334, 479, 0, 0, 520, 524, 522, 500, 0, + 0, 486, 487, 0, 482, 156, 209, 211, 212, 0, + 240, 0, 381, 382, 0, 327, 457, 517, 0, 518, + 0, 526, 465, 481, 483, 484, 485, 255, 379, 384, + 385, 380, 0, 450, 521, 523, 495, 383, 0, 0, + 456, 497, 458, 0, 459, 467, 460, 0, 0, 0 }; -static const short yydefgoto[] = { 1647, - 33, 34, 35, 36, 37, 400, 544, 794, 1339, 998, - 1191, 38, 520, 517, 39, 40, 41, 540, 42, 43, - 781, 986, 235, 532, 1182, 44, 550, 551, 552, 1031, - 1032, 1023, 1033, 1034, 1475, 1240, 553, 554, 1367, 1008, - 1448, 1449, 1478, 1522, 1523, 1578, 1019, 45, 402, 555, - 556, 46, 412, 586, 1056, 1057, 1058, 47, 181, 48, - 49, 407, 564, 565, 1249, 1395, 1481, 1583, 1584, 50, - 51, 279, 182, 589, 415, 590, 591, 1059, 52, 53, - 207, 310, 432, 54, 214, 215, 216, 839, 1073, 55, - 56, 183, 1066, 1402, 1403, 1404, 1405, 1490, 1534, 57, - 58, 59, 1044, 410, 573, 817, 818, 60, 200, 61, - 424, 62, 63, 1060, 281, 598, 64, 995, 787, 65, - 579, 1589, 1611, 1612, 1399, 1050, 1559, 66, 67, 68, - 69, 88, 70, 71, 72, 567, 812, 1039, 380, 73, - 74, 75, 237, 395, 783, 988, 76, 77, 78, 609, - 436, 603, 604, 79, 80, 81, 82, 287, 1633, 1640, - 1644, 83, 618, 1441, 1544, 1545, 511, 244, 1502, 222, - 1504, 1570, 1571, 1604, 398, 289, 290, 1177, 1333, 764, - 972, 973, 1327, 1432, 1542, 1594, 1595, 420, 974, 486, - 913, 357, 358, 359, 360, 361, 574, 451, 463, 446, - 362, 363, 441, 613, 851, 364, 365, 467, 457, 646, - 367, 481, 482, 910, 1115, 368, 717, 942, 712, 508, - 655, 622, 623, 640, 641, 648, 891, 1105, 656, 1139, - 1140, 1300, 1301, 369, 766, 525, 526, 370, 371, 165, - 461, 262, 1259, 767, 1535, 232, 291, 373, 241, 304, - 374, 375, 376, 377, 257, 576, 378, 695, 230 +static const short yydefgoto[] = { 1648, + 33, 34, 35, 36, 37, 400, 545, 795, 1340, 999, + 1192, 38, 521, 518, 39, 40, 41, 541, 42, 43, + 782, 987, 235, 533, 1183, 44, 551, 552, 553, 1032, + 1033, 1024, 1034, 1035, 1476, 1241, 554, 555, 1368, 1009, + 1449, 1450, 1479, 1523, 1524, 1579, 1020, 45, 402, 556, + 557, 46, 412, 587, 1057, 1058, 1059, 47, 181, 48, + 49, 407, 565, 566, 1250, 1396, 1482, 1584, 1585, 50, + 51, 279, 182, 590, 415, 591, 592, 1060, 52, 53, + 207, 310, 432, 54, 214, 215, 216, 840, 1074, 55, + 56, 183, 1067, 1403, 1404, 1405, 1406, 1491, 1535, 57, + 58, 59, 1045, 410, 574, 818, 819, 60, 200, 61, + 424, 62, 63, 1061, 281, 599, 64, 996, 788, 65, + 580, 1590, 1612, 1613, 1400, 1051, 1560, 66, 67, 68, + 69, 88, 70, 71, 72, 568, 813, 1040, 380, 73, + 74, 75, 237, 395, 784, 989, 76, 77, 78, 610, + 436, 604, 605, 79, 80, 81, 82, 287, 1634, 1641, + 1645, 83, 619, 1442, 1545, 1546, 512, 244, 1503, 222, + 1505, 1571, 1572, 1605, 398, 289, 290, 1178, 1334, 765, + 973, 974, 1328, 1433, 1543, 1595, 1596, 420, 975, 488, + 916, 357, 358, 359, 360, 361, 575, 451, 463, 446, + 362, 363, 441, 614, 852, 364, 365, 467, 457, 647, + 367, 483, 484, 913, 1118, 368, 719, 945, 714, 477, + 656, 623, 624, 641, 642, 649, 892, 1106, 657, 1142, + 1143, 1302, 1303, 369, 767, 526, 527, 370, 371, 165, + 461, 262, 1260, 768, 1536, 232, 291, 373, 241, 304, + 374, 375, 376, 377, 257, 577, 378, 697, 230 }; -static const short yypact[] = { 14006, - 192, 129, 13511, 129, 1933, 13511, 65, 2257, 129, -58, - 73, 49, 87, 49, 129, 243, 12870, 12568, 129, 13511, - 61, 57, 91, 12568, 96, 156, 73, 12568, 13662, 13813, - 12568, 57, 14006, 135,-32768,-32768,-32768,-32768,-32768,-32768, +static const short yypact[] = { 13937, + 246, 264, 13442, 264, 1338, 13442, 20, 4215, 264, -92, + 60, 55, 40, 55, 264, 80, 12801, 12499, 264, 13442, + -10, -20, 63, 12499, 76, 163, 60, 12499, 13593, 13744, + 12499, -20, 13937, 142,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 12499, 131,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 12568, 154,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 12499,-32768, 131, + 13442, 13442,-32768,-32768, 13442, 13442,-32768, 13442, 12499,-32768, + 193, 10521, 225, 32,-32768, 12499, 13442, 131,-32768, 13442, +-32768, 13442, 13442, 13442,-32768, 1013, 392,-32768, 13442, 13442, +-32768, 239,-32768,-32768,-32768,-32768, 68, 371,-32768,-32768, +-32768,-32768,-32768, 386, 276,-32768, 12499, 405,-32768,-32768, + 418, 5123, 17, 383, -63,-32768,-32768, 422,-32768,-32768, +-32768, 441,-32768,-32768, 12499,-32768, 355, 13442,-32768,-32768, +-32768,-32768,-32768, 12499, 68,-32768, 410,-32768, 413,-32768, +-32768, 411, 334,-32768, 335,-32768, 439, 341, 439, 562, + 152, 450,-32768, 358,-32768, 591,-32768, 543,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 390, +-32768,-32768, 13442, 508,-32768,-32768, 589, 501,-32768, 412, +-32768,-32768, 554, 10904,-32768, 358,-32768, 415,-32768, 76, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 436, 434, +-32768,-32768, 13442, 24, 420, 13442, 13442, 423, 534, 534, +-32768, 447, 469,-32768, 474, 594, 475, 485,-32768, 498, + 626, 707, 534, 7826,-32768, 502, 517, 523, 104, 646, + 552,-32768,-32768,-32768, 171, 1935, 203, 7826, 512,-32768, + 7826,-32768, 7826, 7826, 7826, 7205, 76, 533,-32768,-32768, +-32768,-32768, 574,-32768, 234, 794,-32768, 9875, 512, 26, +-32768, 586, 583,-32768, 587,-32768,-32768, -99,-32768,-32768, +-32768, 12, 45, 45, 10716, 12499, 685,-32768, 501,-32768, + 434,-32768,-32768,-32768, 12499,-32768,-32768, 52, 642, 182, + 12311, 814, 182, 722,-32768,-32768, 250, 664, 3076, 647, +-32768, 456, 76, 10353,-32768, 752,-32768, 788, 7826,-32768, + 13442, 12499,-32768,-32768,-32768,-32768, 12952,-32768,-32768, 13442, + 13442,-32768, 725,-32768, 13442, 28, 789,-32768, 7826,-32768, +-32768, 823, 436, 436, 436,-32768,-32768, 736, 833, 436, +-32768, 729, 730, 745, 746,-32768,-32768, 534,-32768, 1547, + 641, 436,-32768, 9056, 7205, 753,-32768, 4502, 594,-32768, +-32768,-32768,-32768,-32768, 440, 7826,-32768, 645, 645, 645, + 645, 638, 643, 649, 1949,-32768, 105,-32768, 436, 11928, + 7826, 8033,-32768, 48, 7826, 123, 7826,-32768,-32768, 7412, + 5342, 5549, 5756, 5963, 6170, 6377, 6584, 3331,-32768, 163, + 5123, 820, 11055, 3479, 13442,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768, 512, -8,-32768, 654, 587, 256, +-32768, 704, 87,-32768,-32768, 659, 33, 865, 865, 865, +-32768, 131,-32768,-32768, 186, 665, 13442, 821, 828, 669, + 314,-32768,-32768,-32768,-32768, 395,-32768, 2994, 736, 186, +-32768,-32768,-32768,-32768, 815, 817, 697, 757,-32768, 818, +-32768,-32768,-32768, 401,-32768,-32768,-32768,-32768, 721, 829, + -4,-32768, -4, -4, -4, -4,-32768, 755, 706, 709, + 438,-32768, 12499, 808, 9875,-32768,-32768, 692, 696, 699, +-32768,-32768, 12650, 445,-32768, 512, 802, 80, 710,-32768, + 12650, 2435, 830, 914, 712, 713, 449, 80, 714,-32768, +-32768,-32768, 715, 893, 723, 228, 197, 843, 876,-32768, + 13442, 460, 726, 728, 731, 732, 9056, 9056, 9056, 9056, + 733, 367, 512, 735,-32768, -99,-32768, 74, 738, 824, + 6791, 7205, 6791, 6791, 2607, -60, 739, 2243,-32768, 478, + 7826, 741, 749, 742,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768, 12568,-32768, 154, - 13511, 13511,-32768,-32768, 13511, 13511,-32768, 13511, 12568,-32768, - 183, 10590, 220, 39,-32768, 12568, 13511, 154,-32768, 13511, --32768, 13511, 13511, 13511,-32768, 688, 329,-32768, 13511, 13511, --32768, 210,-32768,-32768,-32768,-32768, 29, 313,-32768,-32768, --32768,-32768,-32768, 344, 197,-32768, 12568, 348,-32768,-32768, - 357, 5028, 19, 310, -82,-32768,-32768, 342,-32768,-32768, --32768, 372,-32768,-32768, 12568,-32768, 109, 13511,-32768,-32768, --32768,-32768,-32768, 12568, 29,-32768, 327,-32768, 347,-32768, --32768, 349, 277,-32768, 278,-32768, 373, 275, 373, 505, - 252, 398,-32768, 304,-32768, 525,-32768, 473,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 312, --32768,-32768, 13511, 439,-32768,-32768, 515, 423,-32768, 346, --32768,-32768, 490, 10973,-32768, 304,-32768, 354,-32768, 96, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 387, 271, --32768,-32768, 13511, 97, 368, 13511, 13511, 378, 482, 482, --32768, 388, 411,-32768, 414, 507, 417, 425,-32768, 436, - 539, 595, 482, 7731,-32768, 446, 452, 456, -103, 554, - 474,-32768,-32768,-32768, -13, 902, 53, 7731,-32768,-32768, - 7731,-32768, 7731, 7731, 7731, 7110, 96, 465,-32768,-32768, --32768,-32768, 491,-32768, 93, 717,-32768, 9962, 509, 16, --32768, 523, 524,-32768, 528,-32768,-32768, 150,-32768,-32768, --32768, 25, 22, 22, 10785, 12568, 622,-32768, 423,-32768, - 271,-32768,-32768,-32768, 12568,-32768,-32768, 59, 573, 104, - 12380, 745, 104, 649,-32768,-32768, 45, 590, 4219, 580, --32768, 526, 96, 10422,-32768, 689,-32768, 726, 7731,-32768, - 13511, 12568,-32768,-32768,-32768,-32768, 13021,-32768,-32768, 13511, - 13511,-32768, 662,-32768, 13511, 36, 729,-32768, 7731,-32768, --32768, 769, 387, 387, 387,-32768,-32768, 676, 999, 387, --32768, 674, 675, 678, 680,-32768,-32768, 482,-32768, 1279, - 569, 387,-32768, 8961, 7110, 687,-32768, 4407, 507,-32768, --32768,-32768,-32768,-32768, 519, 576, 576, 576, 576, 574, - 575, 578, 2320,-32768, 88,-32768, 387, 11997, 7731, 7938, --32768, 200, 7731, 82, 7731,-32768,-32768, 7317, 5247, 5454, - 5661, 5868, 6075, 6282, 6489, 1549, 7731,-32768, 156, 5028, - 754, 11124, 3208, 13511,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 509, -1,-32768, 585, 528, 152,-32768, - 630, 34,-32768,-32768, 589, 38, 805, 805, 805,-32768, - 154,-32768,-32768, 132, 603, 13511, 766, 770, 610, 118, --32768,-32768,-32768,-32768, 162,-32768, 14255, 676, 132,-32768, --32768,-32768,-32768, 755, 751, 632, 692,-32768, 748,-32768, --32768,-32768, 246,-32768,-32768,-32768,-32768, 659, 768, -93, --32768, -93, -93, -93, -93,-32768, 693, 643, 644, 297, --32768, 12568, 749, 9962,-32768,-32768, 631, 633, 634,-32768, --32768, 12719, 393,-32768, 509, 734, 243, 636,-32768, 12719, - 9780, 757, 844, 641, 642, 396, 243, 646,-32768,-32768, --32768, 647, 820, 654, 191, 24, 780, 809,-32768, 13511, - 400, 666, 670, 681, 682, 8961, 8961, 8961, 8961, 679, - 376, 509, 690,-32768, 150,-32768, -8, 686, 782, 6696, - 7110, 6696, 6696, 2922, -49, 696,-32768, 777, 7731, 697, - 707, 704,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1547, 754,-32768, + 762, 763,-32768, 764, 765, 766,-32768, 8033, 8033, 8033, + 8033, 8033, 7826, 62, 512, 767,-32768, -99, 768,-32768, + 332,-32768,-32768, 910, 8033,-32768, 7826, 640, 770, 779, + 6998, 440, 780, 782, 6998, 950, 783, 784, 6998, 2526, + 790, 795, 6998, 2526, 803, 805, 6998, 115, 813, 816, + 6998, 115, 819, 825, 6998, 645, 835, 836, 6998, 645, +-32768, 12499,-32768, 9836, 501,-32768, 734,-32768,-32768, 751, +-32768, -34, 734,-32768, 11552, 501, 11206, 804,-32768,-32768, +-32768, 245, 13442,-32768,-32768, 12311,-32768, 13442, 13442, 13442, + 13442,-32768,-32768,-32768, 958, 9446, 326, 837, 844, 13442, + 12311, 881, 13442,-32768, 931, 582,-32768, 958, 12499, 250, + 51, 834,-32768,-32768, 12123,-32768,-32768, 919, 12123, 64, + 436,-32768,-32768,-32768,-32768,-32768,-32768, 10521, 10158, 10158, + 10353,-32768, 936, 80, 13442,-32768, 13103, 13442,-32768, 939, +-32768, 13442,-32768,-32768,-32768, 5123, 5123,-32768, 3331, 13442, + 13442,-32768,-32768,-32768, 436,-32768, 5123,-32768,-32768, 7826, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 436,-32768, + 9056, 9056, 7205, 4709, 238, 847, 847, 381,-32768, 9056, + 9251, 9056, 9056, 9056, 9056, 3331,-32768, 3686, 7205, 7826, + 7205, 1024,-32768,-32768, 848, -60, 849, 854, 7205,-32768, + 7826, 512, 856, 1026,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768, 37, 1980, 224,-32768, 741,-32768, 8033, 436, + 436, 9056, 7205, 4916, 605, 860, 860, 860, 860, 890, + 8033, 8240, 8033, 8033, 8033, 8033, 3331,-32768, 3893, 13978, +-32768,-32768,-32768, 101, 859, 910, 736, 736, 862, 736, + 736, 863, 736, 736, 866, 736, 736, 869, 736, 736, + 870, 736, 736, 871, 736, 736, 872, 736, 736, 880, +-32768, 12499, 861, 1065, 13291, 894, 1054, 11357,-32768,-32768, +-32768,-32768,-32768, 7205,-32768,-32768, 988,-32768, 491,-32768, + 525, 2994,-32768, 25,-32768, 999,-32768, 1066, 928, 903, + 9446,-32768, 9446, 9446, 9446, 9446, 9446, 9446, 1342, 904, +-32768,-32768, 905,-32768, 13442, 13442, 529,-32768, 911,-32768, +-32768,-32768, 1071,-32768, 912, 13442, 8447, 1038, 1077, 13442, +-32768,-32768, 582,-32768,-32768, 928, 1098, 1067,-32768,-32768, +-32768, 17,-32768, 390, 1143,-32768,-32768,-32768,-32768,-32768, + 1039,-32768, 993, 13442,-32768, 472,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768, 954, 932, 5123,-32768,-32768, +-32768,-32768, 1114,-32768,-32768, 14, 536, 942,-32768,-32768, + 944, 14, 9875, 945, 259, 946, 948, 6791, 6791, 6791, + 949,-32768, 864, 238, 266, 266, 847, 847,-32768,-32768, + -18, -60, 9875,-32768, 7205,-32768,-32768,-32768,-32768, -60, + 2504,-32768, 736, 951,-32768,-32768, 7619, 955, 741, 961, +-32768, 361, 959, 960, 963, 968, 6791, 6791, 6791, 969, +-32768, 935, 605, 289, 289, 860, 860,-32768,-32768, 46, +-32768, 973, 979,-32768, 8033, 13978, 987, 990,-32768, 992, + 994,-32768, 1011, 1014,-32768, 1015, 1016,-32768, 1017, 1018, +-32768, 1019, 1021,-32768, 1022, 1027,-32768, 1029, 1032,-32768, + 832, 12499, 1124, 11928,-32768,-32768, 1191, 1185,-32768,-32768, +-32768, 1104,-32768, 13442,-32768,-32768, 1224, 1226, 13442, 131, + 1072,-32768, 9446, 10398, 453, 1047, 1047, 1047, 1047, 1563, + 9446, 14097, 1046, 255, 9446, 351, 9446,-32768,-32768, 9641, + 9446, 9446, 9446, 9446, 9446, 9446, 9446, 3331,-32768, 4295, + 537, 541,-32768, 13442,-32768, 9446, 660, 1048,-32768, 1050, + 1052,-32768,-32768,-32768, 8654, 8654, 8654, 8654, 8654, 8654, + 771, 1056,-32768,-32768,-32768, 420,-32768,-32768, 1122, 1236, + 250,-32768,-32768, 76, 12499, 76,-32768,-32768,-32768,-32768, + 13442, 14, 1194, 501,-32768,-32768,-32768, 501,-32768, 3331, +-32768,-32768, 1057, 1058, 1061,-32768,-32768, -60, 512, 1068, + 736, 1069, 1073, 9875, 736,-32768, 741, 3331,-32768,-32768, +-32768,-32768, 1076, 1079, 1083,-32768,-32768,-32768, 14097, 935, +-32768, 1084, 1074,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768, 1279, 694,-32768, 706, 708, --32768, 711, 712, 714,-32768, 7938, 7938, 7938, 7938, 7938, - 7731, 134, 509, 715,-32768, 150, 718,-32768, 27,-32768, --32768, 440, 7938,-32768, 7731, 10023, 719, 720, 6903, 519, - 722, 723, 6903, 1108, 727, 730, 6903, 2017, 733, 735, - 6903, 2017, 736, 738, 6903, 114, 740, 742, 6903, 114, - 743, 746, 6903, 576, 752, 753, 6903, 576,-32768, 2902, - 12568,-32768, 9741, 423,-32768, 731,-32768,-32768, 716,-32768, - -40, 731,-32768, 11621, 423, 11275, 750,-32768,-32768,-32768, - 230, 13511,-32768,-32768, 12380,-32768, 13511, 13511, 13511, 13511, --32768,-32768,-32768, 876, 9351, 270, 759, 760, 13511, 12380, - 811, 13511,-32768, 884, 504,-32768, 876, 12568, 45, 23, - 771,-32768,-32768, 12192,-32768,-32768, 851, 12192, 44, 387, --32768,-32768,-32768,-32768,-32768,-32768, 10590, 10227, 10227, 10422, --32768, 860, 243, 13511,-32768, 13172, 13511,-32768, 865,-32768, - 13511,-32768,-32768,-32768, 5028, 5028,-32768, 1549, 13511, 13511, --32768,-32768,-32768, 387,-32768, 5028,-32768,-32768, 7731,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768, 387,-32768, 8961, - 8961, 7110, 4614, 461, 773, 773, 547,-32768, 8961, 9156, - 8961, 8961, 8961, 8961, 1549,-32768, 3415, 7110, 7731, 7110, - 946,-32768,-32768, 778, -49, 779, 787, 7110,-32768, 783, - 947,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 48, - 2711, 119,-32768, 697,-32768, 7938, 387, 387, 8961, 7110, - 4821, 604, 791, 791, 791, 791, 1360, 7938, 8145, 7938, - 7938, 7938, 7938, 1549,-32768, 3622, 14047,-32768,-32768,-32768, - 146, 790, 440, 676, 676, 799, 676, 676, 801, 676, - 676, 802, 676, 676, 803, 676, 676, 807, 676, 676, - 808, 676, 676, 816, 676, 676, 818, 7731, 509,-32768, - 12568, 792, 1020, 13360, 832, 998, 11426,-32768,-32768,-32768, --32768,-32768, 7110,-32768,-32768, 930,-32768, 403,-32768, 404, - 14255,-32768, 77,-32768, 942,-32768, 1003, 863, 839, 9351, --32768, 9351, 9351, 9351, 9351, 9351, 9351, 1522, 848,-32768, --32768, 849,-32768, 13511, 13511, 421,-32768, 852,-32768,-32768, --32768, 1014,-32768, 855, 13511, 8352, 1001, 1018, 13511,-32768, --32768, 504,-32768,-32768, 863, 1036, 1000,-32768,-32768,-32768, - 19,-32768, 312, 1080,-32768,-32768,-32768,-32768,-32768, 977, --32768, 929, 13511,-32768, 257,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 898, 880, 5028,-32768,-32768,-32768, --32768, 1049,-32768,-32768, 0, 422, 881,-32768,-32768, 883, - 0, 9962, 888, 170, 889, 891, 6696, 6696, 6696, 892, --32768, 853, 461, 153, 153, 773, 773,-32768,-32768, -20, - -49, 9962,-32768, 7110,-32768,-32768,-32768,-32768, -49, 676, - 899,-32768,-32768, 7524, 900, 697, 904,-32768, 253, 906, - 907, 909, 916, 6696, 6696, 6696, 931,-32768, 908, 604, - 205, 205, 791, 791,-32768,-32768, -17,-32768, 933, 882, --32768, 7938, 14047, 934, 935,-32768, 937, 941,-32768, 943, - 945,-32768, 948, 951,-32768, 953, 954,-32768, 955, 956, --32768, 958, 959,-32768, 960, 962,-32768, 9899,-32768, 468, - 12568, 1093, 11997,-32768,-32768, 1145, 1118,-32768,-32768,-32768, - 1025,-32768, 13511,-32768,-32768, 1154, 1155, 13511, 154, 994, --32768, 9351, 10467, 846, 969, 969, 969, 969, 2047, 9351, - 14166, 968, 206, 9351, 90, 9351,-32768,-32768, 9546, 9351, - 9351, 9351, 9351, 9351, 9351, 9351, 1549,-32768, 4024, 432, - 433,-32768, 13511,-32768, 9351, 516, 971,-32768, 972, 973, --32768,-32768,-32768, 8559, 8559, 8559, 8559, 8559, 8559, 1047, - 975,-32768,-32768,-32768, 368,-32768,-32768, 1052, 1161, 45, --32768,-32768, 96, 12568, 96,-32768,-32768,-32768,-32768, 13511, - 0, 1127, 423,-32768,-32768,-32768, 423,-32768, 1549,-32768, --32768, 987, 989, 990,-32768,-32768, -49, 991, 676, 993, - 995, 9962, 676,-32768, 697, 1549,-32768,-32768,-32768,-32768, - 996, 997, 1002,-32768,-32768,-32768, 14166, 908,-32768, 1010, - 1015,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 509, 1136, --32768, 1136, 468,-32768, 1136,-32768, 1162,-32768, 12568,-32768, - 7110, 7731, 1109, 96,-32768,-32768, 8559,-32768, 1016,-32768, - 1038, 9940,-32768, 10467, 1236,-32768, 14166,-32768, 80,-32768, --32768, 553, 14166, 1019, 9351, 10063, 846, 1655, 2130, 2130, - 238, 238, 969, 969,-32768,-32768, 438, 10003, 1147,-32768, - 1021, 2260,-32768, 8559, 387, 387, 932, 1023, 1023, 1023, - 1023, 939, 8766, 8559, 8559, 8559, 8559, 8559, 8559, 8559, - 1549, 3829, 1180,-32768, 6, 1158,-32768, 1189, 423, 1043, --32768, 1039, 1040,-32768,-32768, 3, 1041, 849, 423,-32768, - 998, 998, 1042,-32768,-32768,-32768,-32768, 1045,-32768,-32768, - 1046,-32768, 1050,-32768,-32768,-32768,-32768,-32768, 14166,-32768, --32768,-32768,-32768,-32768,-32768, 12568,-32768, -49, 9962, 1263, - 1186,-32768, 1047, 154,-32768, 1549, 14166, 444,-32768,-32768, --32768,-32768, 1271, 14166, 553, 9351,-32768, 13511,-32768,-32768, - 188, 1054, 1057,-32768, 932, 1047, 826, 826, 274, 274, - 1023, 1023,-32768,-32768, 472, 1047, 202, 1204,-32768,-32768, --32768, 13511, 96, 1142, 13511, 851, 13511, 1549, 1549, -26, - 13511, 998, 1118, 1118,-32768,-32768,-32768,-32768,-32768, 15, --32768, 1188, 1281,-32768,-32768, 1069,-32768, 14166,-32768, 14166, - 495, 10003, 368, 1549,-32768,-32768, 8559,-32768,-32768,-32768, - 33,-32768, 1204, 1073,-32768, 1139,-32768,-32768,-32768,-32768, --32768, 1099,-32768,-32768,-32768, 496, 1118, 1109, 1109, 1081, - 1082, 1079, 243, 1190,-32768, 7731,-32768,-32768,-32768,-32768, - 1180, 1085, 1047, 56, 56,-32768, 203,-32768, 379,-32768, - 3, 1109,-32768,-32768, 7731, 11809,-32768, 5028, 1263, 1089, --32768, 2880, 1204,-32768,-32768, 1312, 75,-32768,-32768,-32768, --32768,-32768, 502,-32768,-32768,-32768, 109, 109,-32768,-32768, - -26, 1186, 2619, 521,-32768,-32768, 1095, 0, 1188, 7731, --32768,-32768, 374,-32768,-32768,-32768,-32768,-32768, 203,-32768, - 1103, 109, 1110, 1100,-32768, 1282,-32768, 11809,-32768, 13511, - 423,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1111,-32768, --32768, 195,-32768,-32768,-32768, 998,-32768, 1249, 1252,-32768, - 1118,-32768, 13511,-32768,-32768, 1113, 1340, 1342,-32768 + 1223,-32768, 1223, 832,-32768, 1223,-32768, 1249,-32768, 12499, +-32768, 7205, 7826, 1197, 76,-32768,-32768, 8654,-32768, 1092, +-32768, 1117, 3275,-32768, 10398, 1313,-32768, 14097,-32768, 376, +-32768,-32768, 1235, 14097, 1096, 9446, 10035, 453, 1053, 2621, + 2621, 331, 331, 1047, 1047,-32768,-32768, 542, 9994, 1225, +-32768, 1100, 1607,-32768, 8654, 436, 436, 978, 1099, 1099, + 1099, 1099, 822, 8861, 8654, 8654, 8654, 8654, 8654, 8654, + 8654, 3331, 4100, 1254,-32768, 223, 1232,-32768, 1263, 501, + 1109,-32768, 1106, 1111,-32768,-32768, 0, 1105, 905, 501, +-32768, 1054, 1054, 1112,-32768,-32768,-32768,-32768,-32768, 1113, +-32768,-32768, 1115,-32768, 1118,-32768,-32768,-32768,-32768,-32768, + 14097,-32768,-32768,-32768,-32768,-32768, 12499,-32768, -60, 9875, + 1333, 1253,-32768, 771, 131,-32768, 3331, 14097, 545,-32768, +-32768,-32768,-32768, 1336, 14097, 1235, 9446,-32768, 13442,-32768, +-32768, 349, 1119, 1120,-32768, 978, 771, 842, 842, 354, + 354, 1099, 1099,-32768,-32768, 549, 771, 43, 1260,-32768, +-32768,-32768, 13442, 76, 1198, 13442, 919, 13442, 3331, 3331, + -55, 13442, 1054, 1185, 1185,-32768,-32768,-32768,-32768,-32768, + 173,-32768, 1245, 1341,-32768,-32768, 1130,-32768, 14097,-32768, + 14097, 556, 9994, 420, 3331,-32768,-32768, 8654,-32768,-32768, +-32768, 77,-32768, 1260, 1132,-32768, 1199,-32768,-32768,-32768, +-32768,-32768, 1158,-32768,-32768,-32768, 564, 1185, 1197, 1197, + 1139, 1140, 1141, 80, 1248,-32768, 7826,-32768,-32768,-32768, +-32768, 1254, 1145, 771, 44, 44,-32768, 384,-32768, 258, +-32768, 0, 1197,-32768,-32768, 7826, 11740,-32768, 5123, 1333, + 1148,-32768, 2222, 1260,-32768,-32768, 1367, 31,-32768,-32768, +-32768,-32768,-32768, 568,-32768,-32768,-32768, 355, 355,-32768, +-32768, -55, 1253, 1634, 579,-32768,-32768, 1153, 14, 1245, + 7826,-32768,-32768, 399,-32768,-32768,-32768,-32768,-32768, 384, +-32768, 1152, 355, 1157, 1150,-32768, 1329,-32768, 11740,-32768, + 13442, 501,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1160, +-32768,-32768, 164,-32768,-32768,-32768, 1054,-32768, 1305, 1308, +-32768, 1185,-32768, 13442,-32768,-32768, 1167, 1394, 1395,-32768 }; static const short yypgoto[] = {-32768, --32768, 1311,-32768,-32768,-32768, 1086, 950, 789,-32768, 544, - 311,-32768, 970,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768, 570, 557, 571,-32768, --32768,-32768, 330, 133,-32768, -675,-32768, -504,-32768, -115, - -91, -1190, -179, -212, -149, -180,-32768,-32768,-32768,-32768, - 577,-32768,-32768,-32768,-32768,-32768, -15,-32768,-32768,-32768, --32768,-32768,-32768, -779,-32768,-32768,-32768,-32768, -233,-32768, --32768,-32768,-32768, -176, 334,-32768, 548, 559,-32768,-32768, - 1363, 1148, 1005,-32768, 1378,-32768, 1083, 784,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768, -89, -162, -187,-32768, --32768,-32768, -81, 1114,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 1211, -189,-32768,-32768,-32768, -31,-32768, --32768,-32768, -177,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 338,-32768,-32768,-32768,-32768,-32768,-32768, 367,-32768, --32768,-32768, 1377,-32768,-32768,-32768,-32768, -221,-32768,-32768, - -1214, -794, 572,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 1008, 1075, -1234,-32768, -185,-32768, 910, -154, -595, - -175,-32768, -184,-32768,-32768, -195, -71, -1369, -1424, -524, --32768, -1106, 98, -1014,-32768,-32768, -196, -344, -963,-32768, - -904, -469, 1077,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, -373, -253,-32768,-32768,-32768, 1112,-32768,-32768, -203, --32768, 317,-32768,-32768,-32768, 1355,-32768,-32768, -660, -511, - -436,-32768,-32768, -793, -546, -787,-32768,-32768, -612,-32768, --32768,-32768,-32768, -190, 912,-32768, 653, -822, 922,-32768, - 110, 1241,-32768, -938, -97, -101, 62, 764,-32768,-32768, - 1815, 1424, -6, -16, -168, -703, -3, 263,-32768 +-32768, 1363,-32768,-32768,-32768, 1138, 998, 845,-32768, 595, + 366,-32768, 1020,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 621, 607, 623,-32768, +-32768,-32768, 382, 187,-32768, -1160,-32768, -498,-32768, -863, + -46, -1166, -136, -157, -106, -137,-32768,-32768,-32768,-32768, + 617,-32768,-32768,-32768,-32768,-32768, 130,-32768,-32768,-32768, +-32768,-32768,-32768, -787,-32768,-32768,-32768,-32768, -189,-32768, +-32768,-32768,-32768, -176, 380,-32768, 596, 598,-32768,-32768, + 1398, 1181, 1040,-32768, 1425,-32768, 1126, 831,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, -45, -118, -147,-32768, +-32768,-32768, -41, 1159,-32768,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 1257, -185,-32768,-32768,-32768, -39,-32768, +-32768,-32768, -132,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 509,-32768,-32768,-32768,-32768,-32768,-32768, 416,-32768, +-32768,-32768, 1431,-32768,-32768,-32768,-32768, -224,-32768,-32768, + -1208, -795, 625,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 1070, -220, -1103,-32768, -135,-32768, 965, -101, -600, + -123,-32768, -130,-32768,-32768, -195, -15, -1371, -1387, -524, +-32768, -1125, 154, -1122,-32768,-32768, -140, -369, -965,-32768, + -882, -471, 1135,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, -377, -216,-32768,-32768,-32768, 1116,-32768,-32768, -206, +-32768, 365,-32768,-32768,-32768, 1763,-32768,-32768, -611, -345, + -443,-32768,-32768, -767, -481, -763,-32768,-32768, -620,-32768, +-32768,-32768,-32768, 798, 971,-32768, 716, -817, 977,-32768, + 27, 1291,-32768, -966, -43, -119, 67, 1144,-32768,-32768, + 2085, 1551, -197, -16, -169, -386, -3, 318,-32768 }; -#define YYLAST 14459 +#define YYLAST 14306 static const short yytable[] = { 166, - 775, 259, 185, 301, 1016, 280, 299, 1170, 242, 1118, - 1345, 845, 773, 225, 229, 388, 233, 777, 366, 292, - 229, 856, 1075, 1076, 229, 248, 250, 229, 647, 1037, - 1393, 786, 383, 1081, 305, 575, 759, 894, 1179, 896, - 897, 1493, 1494, 888, 533, 922, 923, 924, 925, 926, - 763, 763, 1488, 1112, 208, 379, 1113, 545, 519, 1038, - 784, 515, 941, 536, 1328, 537, 442, 184, 1538, 1539, - 1554, 1575, 606, 938, 889, 203, 771, 1085, 509, 459, - 229, 1046, 561, 889, 1086, 779, 209, 805, 547, 874, - 875, 876, 877, 843, 723, 516, 864, 1532, 284, 1540, - 538, -575, 1353, 889, 1047, 562, 889, 306, 939, 210, - 1042, 1607, 1562, 308, 1045, 889, 186, 433, 1186, -575, - 437, 820, 1537, 307, 202, 1122, 1450, 228, 384, 865, - 886, 548, 1123, 239, 209, 1576, 389, 246, 1541, 724, - 251, 928, 607, 285, 6, 940, 7, 1354, 780, 217, - 1048, 725, 480, 1142, 1555, 211, 1608, 210, 549, 1355, - 608, 1451, 1453, 1577, 229, 1049, 563, 185, 185, 13, - 212, 263, 265, 204, 185, 229, 890, 1533, 282, 1269, - 286, 416, 229, 185, 1187, 890, 185, 979, 185, 263, - 265, -543, 1479, 255, 524, 185, 185, 1514, 1452, 1480, - 311, 935, 234, 211, 629, 890, 381, 1276, 890, -543, - 1295, 1284, 205, 229, 895, 16, 1645, 890, 212, 1220, - 1221, 1489, 1437, 240, 774, 510, 240, 240, 206, 240, - 18, 229, 260, 261, 233, 308, 213, 1067, 311, 266, - 229, 510, 539, 309, 1261, 86, 718, 861, 220, 542, - 238, 293, 1348, 294, 1519, 1119, 1507, -542, 236, 87, - 1090, 302, 1286, 862, 785, 243, 1641, 1129, 1130, 1131, - 1132, 1133, 1134, 642, 1114, -542, 543, 258, 792, 233, - 719, 720, 221, 428, 213, 28, 1349, 1350, 267, 545, - 185, 1013, 1520, 1638, 308, 288, 863, -573, 1551, 713, - 240, 84, 429, 1563, 1564, 793, 366, 1433, 1127, 185, - 1435, 660, 185, 438, 85, -573, 1639, 1548, 721, 1549, - 547, 1406, 430, 1084, 1351, 308, 315, 1592, 431, 504, - 505, 372, 1092, 1093, 1094, 1095, 1096, 1097, 506, 929, - 484, 167, 1116, 800, 387, 801, 201, 930, 931, 932, - 933, 929, 219, 390, 254, 425, 231, 256, 934, 930, - 931, 932, 933, 548, 268, 518, 521, 521, 883, 884, - 934, -801, 791, -801, 507, 880, -808, 885, 1077, 283, - 1422, 529, 229, 881, 882, 883, 884, 802, 405, 803, - 549, 229, 406, 1383, 885, 300, 587, 557, 1384, 1385, - 1386, 1387, 1388, 1389, 1390, 577, 1580, 240, 312, 1581, - 282, 1582, 1391, 303, 6, 1098, 7, 185, 229, 976, - 932, 933, 314, 185, 984, 985, 185, 185, 313, 934, - 981, 605, 316, 879, 240, 647, 614, 615, 616, 13, - 575, 317, 382, 624, 575, 642, 642, 642, 642, 385, - 1100, 1101, 490, 1215, 1216, 631, 386, 1169, 929, 392, - 645, 1109, 1217, 308, 1135, 1257, 930, 931, 932, 933, - 1397, 814, 1500, 815, 1272, 1273, 1274, 934, 661, 393, - 662, 1298, 595, 647, 694, 16, 716, 394, 599, 1389, - 1390, 600, 601, 397, 527, 530, 396, 491, 1391, 1137, - 18, 401, 399, 492, 535, 788, 789, 790, 768,-32768, - 768, 1291, 1292, 1293, 404, 713, 713, 713, 713, 713, - 1320, 805, 830, 1024, 831, 480, 1321, 408, 1025, 480, - 409, 596, 713, 480, 411, 1024, 1322, 480, 414, 413, - 1026, 480, 185, 417, 1323, 480, 1527, 418, 1406, 480, - 1263, 419, 1026, 480, 1586, 28, 1267, 1324, 1377, 1378, - 1379, 1380, 1381, 1382, 821, 1201, 823, 824, 825, 826, - 1325, 421, 452, 822, 422, 822, 822, 822, 822, 1624, - 427, 880, 492, 524, 1027, 1625, 1626, 1326, 229, 881, - 882, 883, 884, 308, 435, 453, 1027, 1028, 840, 447, - 885, 1587, 496, 1029, 439, 1588, 840, 796, 440, 1028, - 1202, 454, 99, 458, 443, 1029, 1203, 497, 841, 372, - 842, 854,-32768, 855, 1030, 868, 768, 869, 1183, 800, - 1184, 1185, 645, 645, 645, 645, 1030, 444, 299, 299, - 445, 366, 366, 448, 109, 498, 841, 510, 1222, 1264, - 1052, 449, 366, 502, 503, 504, 505, 841, 841, 1369, - 1370, 1443, 450, 1456, 506, 1457,-32768, 1277, 580, 1508, - 455, 1509, 462, 581, 881, 882, 883, 884, 464, 642, - 642, 496, 465, 466, 582, 885, 1103, 485, 642, 642, - 642, 642, 642, 642, 583, 584, 497, 1517, 1461, 1518, - 468, 832, 716, 716, 716, 716, 716, 1465, 1466, 1467, - 1468, 1469, 1470, 1471, 1472, 1207, 1476, 487, 585, 716, - 1508, 421, 1550, 1561,-32768, 713, 488, 1609, 642, 1610, - 1208, 507, 502, 503, 504, 505, 1409, 713, 713, 713, - 713, 713, 713, 506, 512, 1598, 1618, 1365, 1619, 514, - 513, 531, 880, 541, 558, 16, 566, 229, 1209, 229, - 881, 882, 883, 884, 987, 578, 1213, 1214, 1215, 1216, - 529, 885, 768, 592, 1091, 593, 602, 1217, 185, 1180, - 610, 991, 617, 991, 993, 994, 185, 612, 625, 626, - 630, 1012, 627, 1040, 628, 605, 991, 649, 1021, 1413, - 506, 657, 658, 659, 229, 763, 776, 1430, 778,-32768, - 577, 1061, 1061, 1051, 577, 782, 1423, 930, 931, 932, - 933, 822, 822, 282, 1062, 1062, 282, 784, 934, 795, - 185, 797, 185, 1071, 900, 798, 799, 605, 809, 808, - 813, 1553, 810, 989, 811, 1078, 1079, 1080, 1646, 816, - 827, 996, 819, 828, 829, 833, 834, 901, 844, 836, - 835, 1083, 846, 366, 849, 850, 645, 645, 852, 853, - 970, 859, 975, 857, 858, 645, 645, 645, 645, 645, - 645, 860, 867, 527, 1193, 866, 1194, 1195, 1196, 1197, - 1198, 1199, 870, 297, 1438, 1068, 871, 1070, 272, 273, - 274, 275, 276, 277, 278, 1117, 878, 872, 873, 1203, - 1120, 1121, 716, 892, 893, 645, 887, 1036, 1411, 912, - 916, 1473, 1412, 899, 716, 716, 716, 716, 716, 716, - 914, 915, 917, 997, 918, 91, 325, 919, 920, 264, - 921, 936, 469, 978, 937, 944, 945, 1568, 947, 948, - 330, 713, 977, 950, 372, 372, 951, 296, 93, 953, - 983, 954, 956, 331, 957, 372, 959, 229, 960, 962, - 1174, 1018, 963, 768, 98, 99, 1506, 1022, 965, 966, - 1043, 1041, 902, 1065, 336, 1014, 1015, 903, 904, 905, - 906, 907, 908, 909, 1072, 1104, 1012, 885, 1012, 1012, - 1012, 1012, 1012, 1012, 1111, 1106, 1107, 109, 1207, 1110, - 605, 605, 470, 340, 1108, 934, 1143, 1171, 1530, 1531, - 1340, 185, 265, 1208, 381, 1245, 1146, 1371, 1149, 1152, - 1155, 1383, 91, 113, 1158, 1161, 471,-32768,-32768, 1387, - 1388, 1389, 1390, 1164, 1552, 1167, 1172, 1175, 1051, 1256, - 1391,-32768, 1176, 1181, 1484, 93, 1188, 1189, 880, 1213, - 1214, 1215, 1216, 1190, 1492, 1192, 881, 882, 883, 884, - 1217, 98, 99, 1621, 1219, -808, 1342, 885, 1223, 1224, - 975, 1225, 1243, 1244, 1344, 1248, 1226, 1250, 1352, 1253, - 1356, 1254, 1255, 1357, 1358, 1359, 1360, 1361, 1362, 1363, - 1364, 1258, 1262, 1368, 109, 472, 1260, 1297, 1265, 1372, - 1266, 619, 620, 929, 164, 1268, 1270, 164, 1271, 1275, - 490, 930, 931, 932, 933, 1279, 1283, 1285, 164, 164, - 113, 164, 934, 1287, 1288, 164, 1289,-32768, 716, 164, - 164, 164, 164, 1290, 1383, 1387, 1388, 1389, 1390, 1384, - 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1329, 1294, 1331, - 1296, 1303, 1304, 1391, 1305, 491, 1464, 229, 1306, 694, - 1307, 492, 1308, 1332, 1334, 1309, 372, 493, 1310, 185, - 1311, 1312, 1313, 1314, 185, 1315, 1316, 1317, 1012, 1318, - 1336, 1337, 1341, 1217, 1347, 164, 1012, 1374, 1375, 1376, - 1012, 1392, 1012, 1394, 1396, 1012, 1012, 1012, 1012, 1012, - 1012, 1012, 1012, 1410, 1414, 1012, 1415, 1416, 1417, 185, - 1419, 1012, 1420, 1424, 1425, 1431, 1436, 643, 1440, 1426, - 265, 265, 265, 265, 265, 265, 1398, 1428, 1401, 1455, - 1429, 1444, 1445, 1447, 1335, 1454, 1458, 1391, 1459, 1338, - 229, 1477, 1383, 714, 1482, 1483, 1408, 1384, 1385, 1386, - 1387, 1388, 1389, 1390, 1485, 1487, 1486, 1491, 1501, 1495, - 496, 1391, 1496, 1497, 1503, 1505, 1636, 1498, 1510, 164, - 975, 1515, 164, 164, 1516, 497, 164, 164, 1521, 164, - 164, 490, 1526, 164, 1543, 1546, 1547, 164, 164, 1557, - 1558, 164, 1533, 164, 164, 164, 1567, 1565, 1566, 1569, - 164, 164, 1574, 498, 1600, 1606, 1620, 1442, 499, 500, - 501, 502, 503, 504, 505, 229, 1628, 1631, 164, 1630, - 1637, 1632, 506, 265, 1642, 1643, 491, 1590, 841, 1648, - 1512, 1649, 492, 253, 403, 1247, 164, 807, 493, 164, - 1035, 1012, 559, 522, 990, 164, 1017, 992, 1373, 494, - 1605, 1246, 1511, 1400, 366, 1613, 1613, 489, 1462, 1463, - 265, 1573, 490, 1556, 1579, 1627, 1252, 1064, 1020, 265, - 265, 265, 265, 265, 265, 265, 265, 1063, 265, 245, - 1629, 218, 391, 847, 164, 534, 434, 1529, 1591, 643, - 643, 643, 643, 1615, 1528, 164, 298, 1251, 252, 426, - 1614, 560, 1074, 1622, 1599, 1623, 1616, 491, 761, 1536, - 1434, 1634, 473, 492, 164, 772, 980, 164, 164, 493, - 1281, 762, 229, 295, 1560, 1330, 0, 0, 975, 0, - 494, 496, 456, 0, 0, 0, 0, 495, 0, 0, - 0, 0, 1012, 0, 1513, 0, 497, 474, 0, 0, - 0, 0, 0, 0, 0, 0, 1525, 0, 0, 714, - 714, 714, 714, 714, 0, 0, 0, 0, 185, 0, - 0, 768, 0, 768, 498, 0, 714, 185, 0, 499, - 500, 501, 502, 503, 504, 505, 164, 164, 0, 0, - 0, 0, 0, 506, 0, 0, 164, 0, 0, 0, - 0, 0, 164, 265, 0, 0, 0, 0, 0, 0, - 164, 0, 496, 0, 0, 164, 0, 0, 0, 1200, - 0, 0, 164, 164, 1201, 0, 0, 497, 164, 0, - 1585, 164, 164, 1524, 0, 975, 164, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1009, 1596, - 621, 0, 1597, 0, 0, 498, 319, 320, 0, 0, - 499, 500, 501, 502, 503, 504, 505, 0, 0, 1202, - 0, 0, 91, 325, 506, 1203, 0, 1128, 0, 469, - 0, 1204, 1585, 0, 0, 0, 0, 330, 0, 164, - 0, 0, 1205, 0, 0, 93, 0, 0, 0, 1206, - 331, 1596, 0, 0, 1597, 0, 1635, 474, 0, 0, - 0, 98, 99, 164, 332, 164, 333, 0, 0, 0, - 0, 336, 806, 643, 643, 0, 0, 0, 0, 605, - 0, 0, 643, 643, 643, 643, 643, 643, 0, 0, - 0, 0, 0, 0, 109, 0, 0, 164, 0, 470, - 340, 0, 0, 0, 0, 0, 0, 1201, 474, 0, - 0, 0, 0, 0, 344, 0, 0, 372, 0, 714, - 113, 0, 643, 471, 1207, 0, 0, 0, 460, 0, - 0, 714, 714, 714, 714, 714, 714, 0, 0, 1208, - 0, 0, 475, 164, 0, 476, 0, 477, 478, 479, - 483, 0, 1202, 164, 0, 0, 0, 0, 1203, 0, - 0, 164, 0, 0, 1204, 0, 0, 1209, 0, 0, - 0, 0, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 346, - 0, 164, 0, 0, 0, 0, 1217, 0, 0, 1218, - 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1009, 0, 1009, 1009, 1009, 1009, 1009, - 1009, 0, 0, 594, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1241, - 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 946, 0, 0, 0, 949, 528, 0, - 0, 952, 0, 0, 0, 955, 0, 1207, 0, 958, - 0, 0, 654, 961, 0, 0, 0, 964, 0, 0, - 0, 967, 1208, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 696, 0, 0, 0, 722, 0, 726, - 0, 0, 730, 734, 738, 742, 746, 750, 754, 758, - 1209, 760, 0, 0, 0, 1210, 1211, 1212, 1213, 1214, - 1215, 1216, 164, 0, 164, 0, 0, 0, 0, 1217, - 0, 0, 0, 0, 0, 164, 0, 164, 0, 0, - 0, 0, 0, 164, 0, 0, 164, 0, 164, 164, - 164, 164, 0, 0, 0, 714, 0, 0, 0, 0, - 164, 164, 0, 164, 0, 0, 0, 0, 0, 164, - 0, 0, 0, 0, 0, 164, 0, 0, 0, 164, - 0, 0, 0, 0, 0, 0, 0, 0, 164, 164, - 164, 164, 0, 0, 0, 164, 0, 164, 164, 0, - 0, 0, 164, 0, 0, 1009, 0, 0, 0, 474, - 164, 164, 0, 1009, 0, 0, 0, 1009, 0, 1009, - 0, 0, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 0, 0, 1009, 0, 0, 0, 0, 0, 1009, 0, - 0, 0, 0, 0, 0, 0, 474, 1241, 1241, 1241, - 1241, 1241, 1241, 0, 654, 0, 654, 654, 0, 0, - 0, 1138, 0, 911, 0, 0, 0, 0, 1144, 1145, - 0, 1147, 1148, 1407, 1150, 1151, 0, 1153, 1154, 490, - 1156, 1157, 0, 1159, 1160, 0, 1162, 1163, 0, 1165, - 1166, 0, 168, 0, 0, 474, 0, 0, 474, 0, - 0, 0, 0, 169, 1200, 170, 0, 0, 0, 1201, - 171, 0, 0, 0, 0, 927, 172, 173, 0, 0, - 174, 0, 0, 0, 491, 0, 0, 0, 0, 943, - 492, 175, 164, 483, 0, 164, 493, 483, 164, 176, - 0, 483, -320, 0, 0, 483, 0, 0, 0, 483, - 1241, 0, 474, 483, 1202, 0, 0, 483, 0, 0, - 1203, 483, 177, 0, 0, 0, 1204, 0, 1009, 0, - 178, 179, 0, 0, 0, 164, 164, 1205, 0, 180, - 0, 0, 0, 0, 1206, 0, 164, 1241, 0, 0, - 164, 0, 1201, 0, 0, 0, 1241, 1241, 1241, 1241, - 1241, 1241, 1241, 1241, 0, 1241, 0, 0, 0, 0, - 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, - 0, 0, 0, 0, 1278, 0, 0, 1202, 1280, 0, - 0, 0, 0, 1203, 497, 0, 0, 528, 0, 1204, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1207, - 0, 0, 0, 1082, 0, 0, 0, 1299, 1011, 1009, - 0, 0, 498, 0, 1208, 0, 0, 654,-32768,-32768, - 502, 503, 504, 505, 0, 0, 0, 0, 0, 0, - 0, 506, 0, 1102, 0, 0, 0, 0, 0, 0, - 0, 0, 1209, 0, 474, 0, 0, 1210, 1211, 1212, - 1213, 1214, 1215, 1216, 0, 0, 0, 1200, 0, 0, - 0, 1217, 1201, 0, 1343, 654, 0, 0, 644, 0, - 1241, 0, 164, 0, 164, 0, 0, 0, 0, 0, - 0, 0, 1207, 0, 164, 0, 0, 0, 0, 164, - 0, 0, 0, 0, 715, 0, 0, 1208, 0, 0, - 0, 0, 474, 0, 0, 0, 0, 1202, 0, 0, - 0, 0, 1168, 1203, 0, 0, 0, 489, 474, 1204, - 0, 0, 490, 0, 164, 1209, 0, 0, 0, 0, - 1205,-32768,-32768, 1213, 1214, 1215, 1216, 1206, 0, 0, - 0, 0, 0, 1418, 1217, 0, 0, 1421, 0, 0, - 1011, 0, 0, 0, 0, 164, 187, 0, 0, 0, - 0, 164, 0, 0, 0, 0, 0, 491, 0, 188, - 474, 0, 0, 492, 189, 0, 0, 0, 0, 493, - 190, 191, 0, 0, 192, 0, 0, 474, 0, 0, - 494, 0, 0, 0, 0, 193, 0, 495, 474, 0, - 0, 0, 0, 194, 0, 0, 195, 0, 0, 0, - 0, 0, 1207, 1011, 0, 1011, 1011, 1011, 1011, 1011, - 1011, 0, 0, 0, 0, 0, 196, 1208, 197, 0, - 164, 654, 654, 654, 198, 199, 0, 0, 0, 1011, - 644, 644, 644, 644, 0, 0, 0, 0, 474, 0, - 0, 0, 0, 0, 474, 1209, 0, 0, 1282, 0, - 1210, 1211, 1212, 1213, 1214, 1215, 1216, 0, 654, 654, - 654, 0, 496, 0, 1217, 0, 0, 1460, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, - 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, + 259, 776, 185, 301, 1017, 280, 1171, 846, 242, 311, + 299, 1180, 388, 225, 229, 366, 233, 857, 292, 534, + 229, 648, 1038, 509, 229, 248, 250, 229, 1076, 1077, + 895, 576, 897, 898, 1121, 1346, 761, 1394, 787, 1082, + 1494, 1495, 1115, 764, 228, 1116, 1329, 311, 516, 1489, + 239, 383, 546, 379, 246, 785, 537, 251, 538, 1576, + 208, 209, 203, 890, 607, 764, 1187, 1608, 1533, 931, + 772, 186, 184, 305, 1378, 1379, 1380, 1381, 1382, 1383, + 229, 520, 517, 548, 210, 220, 806, 1039, 510, 890, + 202, 284, 209, 539, 720, 1520, 925, 926, 927, 928, + 929, 1047, 217, 442, 1086, 890, 1539, 1540, 1145, 1087, + 255, 429, 1609, 944, 1555, 210, 459, 433, 389, 221, + 437, 1538, -801, 1577, 1048, 889, 549, -808, 721, 722, + 211, 234, 1188, 1521, 608, 725, 285, 1194, 780, 1195, + 1196, 1197, 1198, 1199, 1200, 212, 306, 384, 1534, 482, + 1563, 1578, 609, 550, 1125, 875, 876, 877, 878, 1126, + 204, 211, 307, 416, 229, 891, 723, 185, 185, 890, + 1049, 263, 265, 286, 185, 229, 212, 1444, 282, 774, + 726, 236, 229, 185, 778, 1050, 185, 1454, 185, 263, + 265, 891, 727, 980, 258, 185, 185, 890, 1556, 205, + 1434, 781, 308, 1436, 1438, 267, 381, 891, 896, 1277, + 821, 213, 288, 229, 1462, 206, 240, 775, 1490, 1221, + 1222, 240, 238, 1466, 1467, 1468, 1469, 1470, 1471, 1472, + 1473, 229, 1477, 1068, 233, 540, 1286, 260, 261, 511, + 229, 630, 213, 315, 266, 615, 616, 617, 372, 240, + 1262, 511, 625, 1091, 1646, 240, 293, 1541, 294, 786, + 844, 387, 1639, 1117, 632, 1642, 302, 932, 1270, 865, + 390, 891, 243, 1297, 308, 933, 934, 935, 936, 233, + 240, 1508, 309, 428, 862, 1640, 937, 562, 405, 663, + 185, 664, 406, 6, 1407, 7, 1542, 887, 1014, 891, + 863, 1349, 866, 1130, 366, 1552, 932, 1122, -575, 185, + 563, 308, 185, 438, 933, 934, 935, 936, 13, 1132, + 1133, 1134, 1135, 1136, 1137, 937, -575, 543, 662, 1343, + 506, 507, 793, 864, 256, 1350, 1351, 1345, 807, 508, + 486, 1353, 1549, 1357, 1550, 546, 1358, 1359, 1360, 1361, + 1362, 1363, 1364, 1365, 544, 84, 1369, 1554, 1515, 794, + 425, 254, 1373, 1354, 16, 519, 522, 522, 85, 938, + 1288, 564, 792, 1352, 268, -543, 548, 1078, 941, 18, + 86, 530, 229, 823, 283, 823, 823, 823, 823, 1085, + 6, 229, 7, -543, 87, 977, 588, 558, 1093, 1094, + 1095, 1096, 1097, 1098, 1424, 578, 982, -542, 1355, 1480, + 282, 528, 531, 942, 1099, 13, 1481, 185, 229, 549, + 1356, 536, 1451, 185, 880, -542, 185, 185, 1043, 648, + 308, 606, 1046, 1587, 28, 1564, 1565, 576, -573, 985, + 986, 576, 303,-32768, 1101, 1102, 550, 1119, 597, 240, + 943, 882, 883, 884, 885, 1110, -573, 1452, 300, 1593, + 646, 16, 886, 1398, 881, 1138, 312, 1273, 1274, 1275, + 313, 1501, 882, 883, 884, 885, 18, -801, 476, 648, + 1588, 884, 885, 886, 1589, 430, 696, 596, 718, 316, + 886, 431, 1456, 600, 1453, 1140, 601, 602, 789, 790, + 791, 314, 317, 494, 935, 936, 1293, 1294, 1295, 769, + 949, 769, 167, 937, 952, 382, 1204, 201, 955, 1528, + 806, 1407, 958, 219, 482, 386, 961, 231, 482, 385, + 964, 28, 482, 1300, 967, 903, 482, 372, 970, 801, + 482, 802, 392, 185, 482, 393, 1216, 1217, 482, 394, + 397, 1264, 482, 396, 1384, 1218, 1112, 1268, 904, 1385, + 1386, 1387, 1388, 1389, 1390, 1391, 932, 401, 399, 1390, + 1391, 404, 881, 1392, 933, 934, 935, 936, 1392, 408, + 882, 883, 884, 885, 409, 937, 881, 1581, 240, 229, + 1582, 886, 1583, 1513, 882, 883, 884, 885, 581, 841, + 411, 1025, 498, 582, 1625, 886, 1026, 841, 1092, 413, + 1626, 1627, 417, 797, 583, 1208, 414, 499, 1027, 833, + 803, 418, 804, 1052, 584, 585, 815, 769, 816, 419, + 1209, 823, 823, 646, 646, 646, 646, 421, 422, 366, + 366, 427, 308, 299, 299,-32768, 435, 491, 586, 439, + 366, 1053, 492, 504, 505, 506, 507, 1081,-32768, 452, + 440, 1278, 1028, 831, 508, 832, 1214, 1215, 1216, 1217, + 842, 1084, 843, 443, 855, 1029, 856, 1218, 308, 1025, + 1258, 1030, 453, 905, 1104, 869, 447, 870, 906, 907, + 908, 909, 910, 911, 912, 444, 1027, 493, 454, 99, + 445, 448, 1031, 494, 718, 718, 718, 718, 718, 495, + 822, 449, 824, 825, 826, 827, 1184, 1120, 1185, 1141, + 496, 718, 1123, 1124, 450, 458, 1147, 1148, 462, 1150, + 1151, 109, 1153, 1154, 476, 1156, 1157, 1410, 1159, 1160, + 1028, 1162, 1163, 464, 1165, 1166, 1366, 1168, 1169, 465, + 801, 1599, 1186, 1029, 842, 487, 1223, 455, 229, 1030, + 229, 511, 842, 1265, 1370, 988, 842, 1457, 1371, 1458, + 1509, 530, 1510, 769, 1518, 466, 1519, 1181, 468, 185, + 1031, 1509, 992, 1551, 992, 994, 995, 185, 971, 421, + 976, 1562, 1013, 1610, 1041, 1611, 606, 992, 1414, 1022, + 489, 528, 498, 490, 1619, 229, 1620, 513, 515, 514, +-32768, 578, 1062, 1062, 532, 578, 1425, 499, 933, 934, + 935, 936, 542, 559, 282, 1063, 1063, 282, 16, 937, + 567, 185, 579, 185, 1072, 1037, 593, 594, 606, 603, + 611, 613, 618, 626, 627, 500, 1079, 1080, 1647, 990, + 501, 502, 503, 504, 505, 506, 507, 997, 1052, 628, + 629, 366, 631, 650, 508, 659, 91, 646, 646, 508, + 660, 764, 372, 372, 661, 777, 646, 646, 646, 646, + 646, 646, 779, 372, 1321, 783, 798, 785, 1439, 93, + 1322, 796, 1280, 799, 1412, 800, 1282, 491, 1413, 809, + 1323, 1069, 492, 1071, 810, 98, 99, 811, 1324, 812, + 814, 817, 828, 820, 834, 718, 829, 835, 646, 830, + 1474, 1325, 492, 836, 837, 1301, 845, 718, 718, 718, + 718, 718, 718, 1418, 1326, 851, 847, 850, 109, 853, + 854, 858, 859, 1569, 860, 620, 621, 493, 867, 868, + 861, 1327, 871, 494, 872, 978, 894, 873, 874, 495, + 879, 888, 492, 915, 113, 893, 900, 493, 229, 918, + 496, 1175, 917, 494, 769, 1507, 1384, 497, 979,-32768, + 919, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 920, 921, + 922, 923, 924, 939, 940, 1392, 947, 1013, 976, 1013, + 1013, 1013, 1013, 1013, 1013, 948, 950, 493, 951, 953, + 954, 606, 606, 494, 984, 998, 956, 1531, 1532, 495, + 1341, 957, 185, 265, 1023, 381, 1246, 1384, 1372, 959, + 1485, 960, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 962, + 1493, 1019, 963, 1553, 1042, 965, 1392, 1384, 1044, 1465, + 1257, 966, 498,-32768,-32768, 1388, 1389, 1390, 1391, 1066, + 1420, 968, 969, 1015, 1423, 1202, 1392, 499, 1073, 881, + 1016, 886, 498, 1105, 1622, 1107, 1108, 882, 883, 884, + 885, 1109, 1113, 1114, 937, 1146, 1172, 499, 886, 1149, + 1152, 1173, 1227, 1155, 372, 500, 1158, 1161, 1164, 1167, + 501, 502, 503, 504, 505, 506, 507, 1170, 1177, 1176, + 1203, 1182, 498, 1189, 508, 500, 1204, 1131, 164, 1244, + 1190, 164, 1205, 504, 505, 506, 507, 499, 1191, 1193, + 1220, -808, 164, 164, 508, 164, 1225, 1224, 1226, 164, + 932, 718, 1245, 164, 164, 164, 164, 1249, 933, 934, + 935, 936, 1254, 1255, 1251, 500, 1256, 1259, 1261, 937, + 501, 502, 503, 504, 505, 506, 507, 1263, 229, 1266, + 696, 1267, 1269, 1271, 508, 1272, 1276, 1281, 1463, 1464, + 185, 1285, 525,-32768, 1287, 185, 1289, 1290, 1330, 1013, + 1291, 1388, 1389, 1390, 1391, 1292, 1296, 1013, 976, 164, + 1298, 1013, 1392, 1013, 1299, 1332, 1013, 1013, 1013, 1013, + 1013, 1013, 1013, 1013, 1305, 1208, 1013, 1306, 297, 1307, + 185, 1308, 1013, 272, 273, 274, 275, 276, 277, 278, + 1209, 265, 265, 265, 265, 265, 265, 1399, 1309, 1402, + 1333, 1310, 1311, 1312, 1313, 1314, 1315, 1202, 1316, 1317, + 1336, 229, 1637, 1335, 1318, 1339, 1319, 1409, 1210, 1320, + 1337, 643, 1338, 1211, 1212, 1213, 1214, 1215, 1216, 1217, + 1342, 1218, 1348, 1395, 1375, 1506, 1376, 1218, 1377, 1397, + 1411, 1401, 1393, 164, 1415, 1416, 164, 164, 1417, 715, + 164, 164, 1203, 164, 164, 1419, 1421, 164, 1204, 1431, + 1422, 164, 164, 1426,-32768, 164, 1427, 164, 164, 164, + 1428, 1430, 1432, 1437, 164, 164, 1441, 1445, 1443, 264, + 1448, 1446, 1455, 1392, 1459, 1478, 229, 1460, 1483, 1484, + 1486, 1492, 164, 1487, 265, 1591, 1488, 296, 1502, 1496, + 1497, 1504, 1498, 1511, 1522, 1499, 1516, 1517, 1527, 1201, + 164, 1544, 1013, 164, 1202, 1547, 976, 1548, 1558, 164, + 1559, 1534, 366, 1614, 1614, 1566, 1567, 1570, 1568, 1597, + 1607, 265, 1575, 1601, 1621, 1629, 1631, 1632, 1633, 1638, + 265, 265, 265, 265, 265, 265, 265, 265, 1630, 265, + 1643, 1644, 842, 1649, 1650, 253, 403, 1208, 164, 1203, + 560, 1248, 1036, 523, 808, 1204, 991, 1018, 1512, 164, + 993, 1205, 1209, 1374, 1247, 1574, 1606, 1557, 1580, 1021, + 1628, 1597, 1206, 1253, 245, 391, 1065, 1064, 164, 1207, + 535, 164, 164, 229, 643, 643, 643, 643, 218, 434, + 1210, 848, 1530, 1592, 1616, 1529, 456, 168, 1214, 1215, + 1216, 1217, 298, 1013, 426, 1514, 1615, 1252, 169, 1218, + 170, 474, 252, 976, 1623, 171, 1075, 1526, 1600, 1617, + 1624, 172, 173, 561, 762, 174, 1537, 1435, 1635, 185, + 473, 1283, 769, 295, 769, 773, 175, 763, 185, 1561, + 981, 1331, 0, 0, 176, 0, 0, -320, 0, 0, + 164, 164, 0, 0, 1208, 715, 715, 715, 715, 715, + 164, 0, 0, 0, 265, 0, 164, 177, 0, 1209, + 0, 0, 715, 0, 164, 178, 179, 0, 0, 164, + 0, 0, 0, 0, 180, 0, 164, 164, 0, 0, + 0, 1586, 164, 0, 0, 164, 164, 1210, 0, 1525, + 164, 0, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 492, + 0, 0, 0, 1598, 622, 0, 1218, 0, 0, 1219, + 1201, 0, 525, 0, 0, 1202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 715, 715, 715, 715, 715, 498, 0, 0, 0, 0, - 499, 500, 501, 502, 503, 504, 505, 715, 0, 0, - 474, 0, 0, 0, 506, -603, 0, 164, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 474, 474, 0, - 0, 0, 0, 0, 0, 474, 1011, 0, 0, 164, + 0, 0, 0, 1586, 0, 372, 0, 0, 0, 0, + 0, 0, 0, 0, 493, 164, 0, 644, 0, 0, + 494, 0, 0, 0, 1201, 1598, 495, 1636, 0, 1202, + 1203, 0, 0, 474, 0, 0, 1204, 496, 164, 0, + 164, 0, 1205, 0, 0, 716, 0, 0, 0, 0, + 606, 491, 0, 1206, 0, 0, 492, 0, 0, 0, + 1207, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 164, 0, 1203, 0, 0, 0, 643, 643, + 1204, 0, 0, 474, 0, 0, 1205, 643, 643, 643, + 643, 643, 643, 0, 0, 0, 0, 1206, 0, 0, + 0, 493, 0, 0, 1207, 0, 0, 494, 0, 0, + 0, 0, 0, 495, 0, 0, 0, 0, 164, 498, + 0, 0, 0, 0, 496, 0, 715, 0, 164, 643, + 0, 497, 0, 0, 499, 1208, 164, 0, 715, 715, + 715, 715, 715, 715, 0, 0, 0, 0, 0, 0, + 1209, 0, 0, 0, 0, 0, 164, 0, 0, 0, + 0, 0, 500, 0, 0, 0, 0, 501, 502, 503, + 504, 505, 506, 507, 0, 0, 0, 0, 1210, 1208, + 0, 508, 0, 1211, 1212, 1213, 1214, 1215, 1216, 1217, + 644, 644, 644, 644, 1209, 0, 0, 1218, 0, 0, + 1344, 0, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 499, 1210, 0, 0, 0, 0, 1211, 1212, 1213, + 1214, 1215, 1216, 1217, 0, 0, 0, 0, 0, 0, + 0, 1218, 0, 0, 1461, 0, 0, 0, 0, 500, + 0, 0, 0, 0, 501, 502, 503, 504, 505, 506, + 507, 716, 716, 716, 716, 716, 0, 0, 508, 0, + 0, 1618, 0, 0, 0, 0, 0, 0, 716, 0, + 0, 0, 0, 0, 0, 0, 0, 164, 0, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 164, 0, 0, 164, 0, 164, 474, - 474, 0, 164, 0, 0, 0, 0, 0, 0, 1010, - 0, 0, 0, 0, 0, 1011, 0, 0, 0, 474, - 0, 474, 0, 1011, 1011, 474, 489, 1011, 0, 1011, - 0, 490, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, - 0, 0, 1011, 0, 0, 0, 0, 0, 1011, 0, - 0, 0, 0, 0, 0, 0, 0, 1011, 1011, 1011, - 1011, 1011, 1011, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 491, 164, 0, 0, - 0, 0, 492, 0, 644, 644, 1439, 0, 493, 0, - 0, 0, 0, 644, 644, 644, 644, 644, 644, 494, - 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 489, 0, - 1011, 0, 0, 490, 0, 0, 0, 0, 0, 164, - 715, 164, 0, 644, 0, 0, 0, 0, 0, 0, - 0, 0, 715, 715, 715, 715, 715, 715, 0, 0, - 0, 1141, 0, 0, 164, 0, 0, 0, 0, 0, - 1011, 0, 0, 0, 0, 0, 0, 0, 491, 0, - 1011, 0, 0, 0, 492, 0, 1011, 0, 1011, 0, - 493, 496, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 494, 0, 0, 0, 0, 497, 1011, 495, 0, - 0, 0, 0, 0, 0, 0, 1011, 1011, 1011, 1011, - 1011, 1011, 1011, 1011, 1010, 1011, 1010, 1010, 1010, 1010, - 1010, 1010, 0, 0, 498, 0, 0, 0, 0, 499, - 500, 501, 502, 503, 504, 505, 0, 0, 0, 0, - 1242, 0, 0, 506, 0, 0, 1617, 0, 0, 0, - 0, 0, 1011, 0, 0, 0, 0, 0, 0, 0, + 164, 0, 164, 0, 0, 0, 0, 0, 164, 0, + 0, 164, 0, 164, 164, 164, 164, 0, 0, 0, + 0, 0, 0, 0, 0, 164, 164, 0, 164, 0, + 0, 0, 0, 0, 164, 0, 0, 0, 0, 0, + 164, 0, 0, 0, 164, 529, 0, 0, 0, 1010, + 0, 0, 715, 164, 164, 164, 164, 0, 0, 0, + 164, 0, 164, 164, 0, 0, 491, 164, 0, 0, + 0, 492, 0, 0, 474, 164, 164, 0, 91, 325, + 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, + 0, 0, 0, 330, 0, 0, 0, 491, 0, 0, + 0, 93, 492, 0, 0, 0, 331, 0, 0, 0, + 0, 474, 0, 0, 0, 0, 493, 98, 99, 0, + 0, 0, 494, 0, 644, 644, 0, 336, 495, 0, + 0, 0, 0, 644, 644, 644, 644, 644, 644, 496, + 0, 0, 0, 0, 0, 0, 497, 493, 0, 0, + 109, 0, 0, 494, 0, 470, 340, 0, 0, 495, + 0, 0, 474, 0, 0, 474, 0, 0, 0, 0, + 496, 0, 716, 0, 0, 644, 113, 497, 0, 471, + 0, 0, 0, 0, 716, 716, 716, 716, 716, 716, + 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, + 164, 0, 0, 164, 0, 0, 460, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, + 475, 498, 0, 478, 0, 479, 480, 481, 485, 0, + 0, 0, 0, 0, 0, 0, 499, 0, 0, 0, + 164, 164, 0, 0, 0, 0, 0, 0, 472, 0, + 0, 164, 498, 0, 1010, 164, 1010, 1010, 1010, 1010, + 1010, 1010, 0, 0, 500, 0, 0, 499, 0, 501, + 502, 503, 504, 505, 506, 507, 0, 0, 0, 164, + 1242, 0, 0, 508, -603, 0, 0, 0, 0, 0, + 0, 595, 0, 0, 0, 500, 0, 0, 0, 0, + 501, 502, 503, 504, 505, 506, 507, 0, 0, 0, + 0, 612, 0, 0, 508, -602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1011, 0, 0, 496, 0, 0, 0, 1011, 0, 1011, - 0, 0, 0, 0, 0, 0, 0, 489, 497, 0, - 1601, 0, 490, 0, 0, 0, 0, 0, 0, 0, - 1572, 0, 0, 0, 0, 0, 0, 0, 0, 489, - 0, 0, 0, 0, 490, 0, 498, 0, 1602, 1593, - 0, 499, 500, 501, 502, 503, 504, 505, 0, 489, - 0, 1011, 0, 1011, 490, 506, -602, 491, 0, 0, - 1011, 0, 0, 492, 0, 0, 0, 0, 0, 493, - 0, 0, 0, 0, 1572, 0, 715, 1302, 0, 491, - 494, 0, 0, 0, 0, 492, 0, 495, 0, 0, - 0, 493, 0, 898, 0, 0, 0, 0, 0, 491, - 0, 0, 494, 0, 0, 492, 0, 0, 0, 495, - 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 494, 1603, 0, 0, 1010, 0, 0, 495, - 0, 0, 0, 0, 1010, 1346, 0, 0, 1010, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, + 655, 0, 1602, 0, 492, 0, 0, 0, 658, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 491, 0, 0, 698, 0, 492, 0, 724, 0, 728, + 1603, 474, 732, 736, 740, 744, 748, 752, 756, 760, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, + 0, 0, 0, 0, 0, 494, 0, 164, 716, 164, + 0, 495, 0, 0, 0, 0, 0, 0, 0, 164, + 493, 0, 496, 0, 164, 0, 494, 0, 0, 497, + 0, 0, 495, 0, 0, 0, 0, 474, 0, 0, + 0, 0, 0, 496, 0, 529, 0, 0, 0, 0, + 497, 0, 0, 474, 0, 0, 1010, 0, 0, 164, + 0, 0, 0, 0, 1010, 1604, 1012, 0, 1010, 0, 1010, 0, 0, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 0, 0, 1010, 0, 0, 0, 0, 0, 1010, - 0, 0, 496, 0, 0, 0, 0, 0, 1242, 1242, - 1242, 1242, 1242, 1242, 0, 0, 0, 497, 0, 0, - 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, - 0, 0, 0, 0, 496, 498, 0, 0, 0, 0, - 499, 500, 501, 502, 503, 504, 505, 0, 0, 497, - 0, 0, 0, 0, 506, 0, 0, 498, 0, 0, - 0, 1427, 499, 500, 501, 502, 503, 504, 505, 0, - 968, 0, 0, 0, 0, 969, 506, 498, 0, 0, - 0, 0, 499, 500, 501, 502, 503, 504, 505, 0, - 0, 0, 0, 0, 0, 0, 506, 0, 0, 0, - 0, 1242, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1346, 0, 0, 0, 0, 0, 1346, 0, 1010, + 164, 0, 0, 0, 0, 0, 164, 0, 1242, 1242, + 1242, 1242, 1242, 1242, 498, 474, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, + 0, 0, 0, 474, 1408, 498, 0, 0, 0, 0, + 0, 0, 0, 655, 474, 655, 655, 0, 0, 0, + 499, 0, 0, 914, 0, 0, 0, 500, 0, 0, + 0, 0, 501, 502, 503, 504, 505, 506, 507, 0, + 0, 0, 491, 0, 849, 164, 508, 492, 500, 0, + 0, 0, 0, 501, 502, 503, 504, 505, 506, 507, + 0, 901, 0, 474, 0, 0, 902, 508, 0, 474, + 0, 0, 0, 0, 0, 930, 0, 0, 0, 0, + 0, 1242, 0, 0, 0, 0, 0, 0, 0, 946, + 1012, 0, 493, 485, 0, 0, 0, 485, 494, 1010, + 0, 485, 0, 0, 495, 485, 0, 474, 0, 485, + 0, 491, 0, 485, 0, 496, 492, 485, 1242, 0, + 0, 485, 497, 0, 0, 0, 0, 1242, 1242, 1242, + 1242, 1242, 1242, 1242, 1242, 0, 1242, 0, 492, 0, + 0, 0, 0, 0, 0, 0, 474, 0, 645, 0, + 0, 1012, 164, 1012, 1012, 1012, 1012, 1012, 1012, 0, + 0, 493, 474, 474, 0, 0, 0, 494, 0, 0, + 474, 0, 0, 495, 164, 0, 717, 1012, 0, 0, + 0, 0, 0, 493, 496, 0, 0, 0, 0, 494, + 0, 497, 0, 0, 0, 495, 0, 498, 164, 0, + 1010, 164, 0, 164, 474, 474, 0, 164, 0, 0, + 0, 0, 499, 0, 491, 0, 0, 0, 0, 492, + 0, 0, 1083, 0, 474, 0, 474, 0, 0, 0, + 474, 0, 0, 1202, 0, 0, 655, 0, 0, 0, + 500, 0, 0, 0, 0, 501, 502, 503, 504, 505, + 506, 507, 1103, 0, 0, 0, 0, 0, 899, 508, + 0, 1242, 0, 1111, 493, 0, 498, 0, 0, 0, + 494, 0, 0, 0, 0, 0, 495, 0, 1203, 0, + 0, 499, 164, 0, 1204, 0, 655, 496, 498, 0, + 1205, 0, 0, 0, 497, 0, 1012, 0, 0, 0, + 0, 0, 0, 499, 0, 0, 0, 0, 0, 500, + 0, 0, 0, 0, 501, 502, 503, 504, 505, 506, + 507, 645, 645, 645, 645, 0, 0, 1279, 508, 0, + 0, 500, 0, 0, 164, 0, 164,-32768,-32768, 504, + 505, 506, 507, 1012, 0, 0, 0, 0, 0, 0, + 508, 1012, 1012, 0, 0, 1012, 0, 1012, 0, 164, + 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 0, 498, + 1012, 0, 0, 0, 0, 0, 1012, 0, 0, 0, + 0, 0, 0, 1208, 499, 1012, 1012, 1012, 1012, 1012, + 1012, 0, 717, 717, 717, 717, 717, 0, 1209, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 717, + 0, 0, 500, 0, 0, 0, 0, 501, 502, 503, + 504, 505, 506, 507, 0, 0, 1210, 0, 0, 0, + 0, 508,-32768,-32768, 1214, 1215, 1216, 1217, 0, 0, + 0, 0, 0, 0, 0, 1218, 0, 0, 0, 1012, + 655, 655, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1242, 0, - 0, 0, 0, 0, 0, 0, 0, 1242, 1242, 1242, - 1242, 1242, 1242, 1242, 1242, 0, 1242, 0, 0, 0, - 89, 90, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 318, 319, 320, 0, 0, 0, - 0, 0, 0, 0, 0, 226, 321, 322, 323, 324, - 0, 91, 325, 1499, 0, 0, 0, 0, 326, 0, - 0, 0, 327, 328, 329, 0, 330, 0, 0, 0, - 0, 1346, 0, 0, 93, 0, 0, 94, 1346, 331, - 1010, 0, 0, 95, 96, 0, 0, 0, 0, 97, - 98, 99, 0, 332, 0, 333, 100, 0, 334, 335, - 336, 101, 0, 102, 103, 0, 0, 0, 0, 337, - 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, - 0, 0, 108, 109, 0, 0, 338, 0, 339, 340, - 111, 112, 1346, 0, 1346, 341, 342, 0, 0, 0, - 343, 1242, 0, 344, 0, 0, 0, 0, 0, 113, - 114, 115, 345, 0, 117, 118, 0, 119, 120, 0, - 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, - 128, 0, 0, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 0, 0, 138, 0, 139, 140, 0, 227, - 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, - 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, - 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, - 162, 347, 240, 348, 308, 349, 350, 89, 90, 0, - 0, 0, 351, 769, 0, 353, 354, 355, 0, 0, - 0, 318, 319, 320, 356, 770, 0, 0, 0, 0, - 0, 0, 226, 321, 322, 323, 324, 0, 91, 325, - 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, - 328, 329, 0, 330, 0, 0, 0, 0, 0, 0, - 0, 93, 0, 0, 94, 0, 331, 0, 0, 0, - 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, - 332, 0, 333, 100, 0, 334, 335, 336, 101, 0, - 102, 103, 0, 0, 0, 0, 337, 0, 0, 104, - 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, - 109, 0, 0, 338, 0, 339, 340, 111, 112, 0, - 0, 0, 341, 342, 0, 0, 0, 343, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1284, + 1011, 0, 0, 0, 0, 0, 0, 0, 1012, 655, + 655, 655, 0, 0, 0, 0, 0, 0, 1012, 0, + 0, 0, 0, 0, 1012, 0, 1012, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1012, 0, 0, 0, 0, + 0, 0, 0, 0, 1012, 1012, 1012, 1012, 1012, 1012, + 1012, 1012, 0, 1012, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 645, 645, 0, 0, 0, + 0, 0, 0, 0, 645, 645, 645, 645, 645, 645, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1012, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1012, 0, + 0, 0, 0, 717, 0, 1012, 645, 1012, 0, 0, + 0, 319, 320, 0, 0, 717, 717, 717, 717, 717, + 717, 0, 0, 0, 1144, 0, 0, 91, 325, 0, + 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, + 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, + 93, 0, 0, 0, 0, 331, 0, 0, 0, 1012, + 0, 1012, 0, 0, 0, 0, 98, 99, 1012, 332, + 0, 333, 0, 0, 0, 0, 336, 0, 89, 90, + 0, 0, 0, 0, 0, 1011, 0, 1011, 1011, 1011, + 1011, 1011, 1011, 319, 320, 1440, 0, 0, 0, 109, + 0, 0, 0, 0, 470, 340, 0, 0, 0, 91, + 569, 1243, 0, 0, 0, 0, 570, 0, 0, 344, + 0, 0, 0, 0, 571, 113, 0, 0, 471, 0, + 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, + 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, + 0, 332, 0, 333, 100, 0, 0, 0, 572, 101, + 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, + 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, + 108, 109, 0, 805, 346, 0, 110, 0, 111, 112, + 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, + 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, + 116, 0, 117, 118, 0, 119, 120, 0, 121, 0, + 0, 122, 123, 124, 125, 126, 0, 127, 128, 717, + 1304, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 0, 0, 138, 0, 139, 140, 0, 0, 141, 142, + 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, + 0, 151, 152, 153, 154, 155, 0, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 161, 1011, 162, 163, + 0, 0, 1201, 0, 1447, 1011, 1347, 1202, 0, 1011, + 0, 1011, 0, 0, 1011, 1011, 1011, 1011, 1011, 1011, + 1011, 1011, 0, 573, 1011, 0, 0, 0, 0, 1573, + 1011, 0, 0, 0, 0, 0, 0, 0, 0, 1243, + 1243, 1243, 1243, 1243, 1243, 0, 0, 0, 1594, 0, + 0, 0, 1203, 0, 0, 0, 0, 0, 1204, 0, + 0, 0, 0, 0, 1205, 0, 0, 0, 319, 320, + 0, 0, 0, 0, 0, 1206, 0, 0, 0, 0, + 0, 0, 1207, 1573, 91, 325, 0, 0, 0, 0, + 0, 469, 0, 0, 0, 0, 0, 0, 0, 330, + 0, 0, 0, 1429, 0, 0, 0, 93, 0, 0, + 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 98, 99, 0, 332, 0, 333, 0, + 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, + 0, 0, 1243, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1347, 0, 0, 0, 109, 1208, 1347, 0, + 1011, 470, 340, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1209, 0, 0, 0, 344, 0, 0, 1243, + 0, 0, 113, 0, 0, 471, 0, 0, 1243, 1243, + 1243, 1243, 1243, 1243, 1243, 1243, 0, 1243, 0, 0, + 1210, 89, 90, 0, 0, 1211, 1212, 1213, 1214, 1215, + 1216, 1217, 0, 0, 0, 318, 319, 320, 0, 1218, + 0, 0, 0, 0, 0, 0, 226, 321, 322, 323, + 324, 0, 91, 325, 0, 1500, 0, 0, 0, 326, + 0, 346, 0, 327, 328, 329, 0, 330, 0, 0, + 0, 0, 1347, 0, 472, 93, 0, 0, 94, 1347, + 331, 1011, 0, 0, 95, 96, 0, 0, 0, 0, + 97, 98, 99, 0, 332, 0, 333, 100, 0, 334, + 335, 336, 101, 0, 102, 103, 0, 0, 0, 0, + 337, 0, 0, 104, 105, 0, 0, 106, 0, 107, + 0, 0, 0, 108, 109, 0, 0, 338, 0, 339, + 340, 111, 112, 1347, 0, 1347, 341, 342, 0, 0, + 0, 343, 1243, 0, 344, 0, 0, 0, 0, 0, + 113, 114, 115, 345, 0, 117, 118, 0, 119, 120, + 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, + 127, 128, 0, 0, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 0, 0, 138, 0, 139, 140, 0, + 227, 141, 142, 0, 143, 0, 144, 145, 146, 147, + 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, + 0, 156, 157, 158, 159, 160, 0, 0, 0, 161, + 0, 162, 347, 240, 348, 308, 349, 350, 89, 90, + 0, 0, 0, 351, 770, 0, 353, 354, 355, 0, + 0, 0, 318, 319, 320, 356, 771, 0, 0, 0, + 0, 0, 0, 226, 321, 322, 323, 324, 0, 91, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 327, 328, 329, 0, 330, 0, 0, 0, 0, 0, + 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, + 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, + 0, 332, 0, 333, 100, 0, 334, 335, 336, 101, + 0, 102, 103, 0, 0, 0, 0, 337, 0, 0, + 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, + 108, 109, 0, 0, 338, 0, 339, 340, 111, 112, + 0, 0, 0, 341, 342, 0, 0, 0, 343, 0, + 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, + 345, 0, 117, 118, 0, 119, 120, 0, 121, 0, + 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, + 0, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 0, 0, 138, 0, 139, 140, 0, 227, 141, 142, + 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, + 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 161, 0, 162, 347, + 240, 348, 308, 349, 350, 89, 90, 0, 0, 0, + 351, 0, 0, 353, 354, 355, 0, 0, 0, 318, + 319, 320, 356, 1100, 0, 0, 0, 0, 0, 0, + 226, 321, 322, 323, 324, 0, 91, 325, 0, 0, + 0, 0, 0, 326, 0, 0, 0, 327, 328, 329, + 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, + 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, + 0, 0, 0, 0, 97, 98, 99, 0, 332, 0, + 333, 100, 0, 334, 335, 336, 101, 0, 102, 103, + 0, 0, 0, 0, 337, 0, 0, 104, 105, 0, + 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, + 0, 338, 0, 339, 340, 111, 112, 0, 0, 0, + 341, 342, 0, 0, 0, 343, 0, 0, 344, 0, + 0, 0, 0, 0, 113, 114, 115, 345, 0, 117, + 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, + 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 0, 0, 138, + 0, 139, 140, 0, 227, 141, 142, 0, 143, 0, + 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, + 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, + 0, 0, 0, 161, 0, 162, 347, 240, 348, 308, + 349, 350, 89, 90, 0, 0, 0, 351, 0, 0, + 353, 354, 355, 0, 0, 0, 1228, 319, 320, 356, + 1139, 0, 0, 0, 0, 0, 0, 0, 1229, 1230, + 1231, 1232, 0, 91, 325, 0, 0, 0, 0, 0, + 326, 0, 0, 0, 0, 0, 329, 0, 330, 0, + 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, + 0, 331, 0, 0, 0, 95, 96, 0, 0, 0, + 0, 97, 98, 99, 0, 332, 0, 333, 100, 0, + 0, 0, 336, 101, 0, 102, 103, 0, 0, 0, + 0, 0, 0, 0, 104, 105, 0, 0, 106, 0, + 107, 0, 0, 0, 108, 109, 0, 0, 0, 0, + 339, 340, 111, 112, 0, 0, 0, 0, 342, 0, + 0, 0, 1234, 0, 0, 344, 0, 0, 0, 0, + 0, 113, 114, 115, 345, 0, 117, 118, 0, 119, + 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, + 0, 127, 128, 0, 0, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 0, 0, 138, 0, 139, 140, + 0, 0, 141, 142, 0, 143, 0, 144, 145, 146, + 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, + 346, 0, 156, 157, 158, 159, 160, 89, 90, 0, + 161, 0, 162, 347, 240, 1235, 308, 349, 350, 0, + 0, 1000, 319, 320, 1236, 0, 0, 1237, 1238, 1239, + 0, 0, 0, 0, 187, 0, 1240, 1475, 91, 325, + 0, 0, 0, 0, 0, 326, 0, 188, 0, 0, + 0, 329, 189, 330, 0, 0, 0, 0, 190, 191, + 0, 93, 192, 0, 94, 0, 331, 0, 0, 0, + 95, 96, 0, 193, 0, 0, 97, 98, 99, 0, + 332, 194, 333, 100, 195, 1001, 1002, 336, 101, 0, + 102, 103, 0, 0, 0, 0, 0, 0, 0, 104, + 105, 0, 0, 106, 196, 107, 197, 0, 0, 108, + 109, 0, 198, 199, 0, 339, 340, 111, 112, 0, + 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, 345, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, 137, 0, - 0, 138, 0, 139, 140, 0, 227, 141, 142, 0, + 0, 138, 0, 139, 140, 0, 0, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, 162, 347, 240, - 348, 308, 349, 350, 89, 90, 0, 0, 0, 351, - 0, 0, 353, 354, 355, 0, 0, 0, 318, 319, - 320, 356, 1099, 0, 0, 0, 0, 0, 0, 226, + 1003, 308, 349, 350, 89, 90, 0, 0, 0, 1004, + 0, 0, 1005, 1006, 1007, 651, 0, 0, 318, 319, + 320, 1008, 1367, 0, 0, 0, 0, 0, 0, 226, 321, 322, 323, 324, 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, 328, 329, 0, - 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, - 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, + 330, 0, 0, 652, 0, 0, 0, 0, 93, 0, + 0, 94, 0, 331, 0, 0, 0, 95, 96, 653, 0, 0, 0, 97, 98, 99, 0, 332, 0, 333, 100, 0, 334, 335, 336, 101, 0, 102, 103, 0, 0, 0, 0, 337, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, 0, - 338, 0, 339, 340, 111, 112, 0, 0, 0, 341, + 338, 0, 339, 340, 111, 112, 0, 654, 0, 341, 342, 0, 0, 0, 343, 0, 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, 345, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, @@ -1941,149 +2029,174 @@ static const short yytable[] = { 166, 154, 155, 346, 0, 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, 162, 347, 240, 348, 308, 349, 350, 89, 90, 0, 0, 0, 351, 0, 0, 353, - 354, 355, 0, 0, 0, 1227, 319, 320, 356, 1136, - 0, 0, 0, 0, 0, 0, 0, 1228, 1229, 1230, - 1231, 0, 91, 325, 0, 0, 0, 0, 0, 326, - 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, - 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, - 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, - 97, 98, 99, 0, 332, 0, 333, 100, 0, 0, - 0, 336, 101, 0, 102, 103, 0, 0, 0, 0, - 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, - 0, 0, 0, 108, 109, 0, 0, 0, 0, 339, - 340, 111, 112, 0, 0, 0, 0, 342, 0, 0, - 0, 1233, 0, 0, 344, 0, 0, 0, 0, 0, + 354, 355, 1088, 0, 0, 318, 319, 320, 356, 0, + 0, 0, 0, 0, 0, 0, 226, 321, 322, 323, + 324, 0, 91, 325, 0, 0, 0, 0, 0, 326, + 0, 0, 0, 327, 328, 329, 0, 330, 0, 0, + 652, 0, 0, 0, 0, 93, 0, 0, 94, 0, + 331, 0, 0, 0, 95, 96, 1089, 0, 0, 0, + 97, 98, 99, 0, 332, 0, 333, 100, 0, 334, + 335, 336, 101, 0, 102, 103, 0, 0, 0, 0, + 337, 0, 0, 104, 105, 0, 0, 106, 0, 107, + 0, 0, 0, 108, 109, 0, 0, 338, 0, 339, + 340, 111, 112, 0, 1090, 0, 341, 342, 0, 0, + 0, 343, 0, 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, 345, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, 137, 0, 0, 138, 0, 139, 140, 0, - 0, 141, 142, 0, 143, 0, 144, 145, 146, 147, + 227, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, - 0, 156, 157, 158, 159, 160, 89, 90, 0, 161, - 0, 162, 347, 240, 1234, 308, 349, 350, 0, 0, - 999, 319, 320, 1235, 0, 0, 1236, 1237, 1238, 0, - 0, 0, 0, 0, 0, 1239, 1474, 91, 325, 0, - 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, - 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, - 93, 0, 0, 94, 0, 331, 0, 0, 0, 95, - 96, 0, 0, 0, 0, 97, 98, 99, 0, 332, - 0, 333, 100, 0, 1000, 1001, 336, 101, 0, 102, - 103, 0, 0, 0, 0, 0, 0, 0, 104, 105, - 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, - 0, 0, 0, 0, 339, 340, 111, 112, 0, 0, - 0, 0, 342, 0, 0, 0, 0, 0, 0, 344, - 0, 0, 0, 0, 0, 113, 114, 115, 345, 0, - 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, - 123, 124, 125, 126, 0, 127, 128, 0, 0, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 0, 0, - 138, 0, 139, 140, 0, 0, 141, 142, 0, 143, - 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, - 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, - 160, 89, 90, 0, 161, 0, 162, 347, 240, 1002, - 308, 349, 350, 0, 0, 0, 319, 320, 1003, 0, - 0, 1004, 1005, 1006, 0, 0, 0, 0, 0, 0, - 1007, 1366, 91, 568, 0, 0, 0, 0, 0, 569, - 0, 0, 0, 0, 0, 0, 0, 570, 0, 0, + 0, 156, 157, 158, 159, 160, 0, 0, 0, 161, + 0, 162, 347, 240, 348, 308, 349, 350, 89, 90, + 0, 0, 0, 351, 0, 0, 353, 354, 355, 1127, + 0, 0, 318, 319, 320, 356, 0, 0, 0, 0, + 0, 0, 0, 226, 321, 322, 323, 324, 0, 91, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 327, 328, 329, 0, 330, 0, 0, 652, 0, 0, + 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, + 0, 95, 96, 1128, 0, 0, 0, 97, 98, 99, + 0, 332, 0, 333, 100, 0, 334, 335, 336, 101, + 0, 102, 103, 0, 0, 0, 0, 337, 0, 0, + 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, + 108, 109, 0, 0, 338, 0, 339, 340, 111, 112, + 0, 1129, 0, 341, 342, 0, 0, 0, 343, 0, + 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, + 345, 0, 117, 118, 0, 119, 120, 0, 121, 0, + 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, + 0, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 0, 0, 138, 0, 139, 140, 0, 227, 141, 142, + 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, + 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 161, 0, 162, 347, + 240, 348, 308, 349, 350, 89, 90, 0, 0, 0, + 351, 0, 0, 353, 354, 355, 0, 0, 0, 318, + 319, 320, 356, 0, 0, 0, 0, 0, 0, 0, + 226, 321, 322, 323, 324, 0, 91, 325, 0, 0, + 0, 0, 0, 326, 0, 0, 0, 327, 328, 329, + 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, + 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, + 0, 0, 0, 0, 97, 98, 99, 0, 332, 0, + 333, 100, 0, 334, 335, 336, 101, 0, 102, 103, + 0, 0, 0, 0, 337, 0, 0, 104, 105, 0, + 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, + 0, 338, 0, 339, 340, 111, 112, 0, 0, 0, + 341, 342, 0, 0, 0, 343, 0, 0, 344, 0, + 0, 0, 0, 0, 113, 114, 115, 345, 0, 117, + 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, + 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 0, 0, 138, + 0, 139, 140, 0, 227, 141, 142, 0, 143, 0, + 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, + 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, + 0, 0, 0, 161, 0, 162, 347, 240, 348, 308, + 349, 350, 0, 0, 0, 0, 0, 351, 352, 0, + 353, 354, 355, 0, 89, 90, 0, 733, 0, 356, + 734, 0, 0, 0, 0, 0, 0, 0, 318, 319, + 320, 0, 0, 0, 0, 0, 0, 0, 0, 226, + 321, 322, 323, 324, 0, 91, 325, 0, 0, 0, + 0, 0, 326, 0, 0, 0, 327, 328, 329, 0, + 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, + 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, + 0, 0, 0, 97, 98, 99, 0, 332, 0, 333, + 100, 0, 334, 0, 336, 101, 0, 102, 103, 0, + 0, 0, 0, 337, 0, 0, 104, 105, 0, 0, + 106, 0, 107, 0, 0, 0, 108, 109, 0, 0, + 338, 0, 339, 340, 111, 112, 0, 0, 0, 341, + 342, 0, 0, 0, 343, 0, 0, 344, 0, 0, + 0, 0, 0, 113, 114, 115, 345, 0, 117, 118, + 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, + 125, 126, 0, 127, 128, 0, 0, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 0, 0, 138, 0, + 139, 140, 0, 227, 141, 142, 0, 143, 0, 144, + 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, + 154, 155, 346, 0, 156, 157, 158, 159, 160, 0, + 0, 0, 161, 0, 162, 347, 240, 348, 308, 349, + 350, 89, 90, 0, 737, 0, 351, 738, 0, 353, + 354, 355, 0, 0, 0, 318, 319, 320, 735, 0, + 0, 0, 0, 0, 0, 0, 226, 321, 322, 323, + 324, 0, 91, 325, 0, 0, 0, 0, 0, 326, + 0, 0, 0, 327, 328, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, - 0, 0, 0, 0, 95, 96, 0, 0, 0, 0, - 97, 98, 99, 0, 332, 0, 333, 100, 0, 0, - 0, 571, 101, 0, 102, 103, 0, 0, 0, 0, - 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, - 0, 0, 0, 108, 109, 0, 0, 0, 0, 110, - 0, 111, 112, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, - 113, 114, 115, 116, 0, 117, 118, 0, 119, 120, + 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, + 97, 98, 99, 0, 332, 0, 333, 100, 0, 334, + 0, 336, 101, 0, 102, 103, 0, 0, 0, 0, + 337, 0, 0, 104, 105, 0, 0, 106, 0, 107, + 0, 0, 0, 108, 109, 0, 0, 338, 0, 339, + 340, 111, 112, 0, 0, 0, 341, 342, 0, 0, + 0, 343, 0, 0, 344, 0, 0, 0, 0, 0, + 113, 114, 115, 345, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, 137, 0, 0, 138, 0, 139, 140, 0, - 0, 141, 142, 0, 143, 0, 144, 145, 146, 147, - 148, 149, 150, 0, 151, 152, 153, 154, 155, 89, - 90, 156, 157, 158, 159, 160, 0, 0, 0, 161, - 650, 162, 163, 318, 319, 320, 0, 0, 0, 0, - 0, 0, 0, 0, 226, 321, 322, 323, 324, 0, - 91, 325, 0, 0, 0, 0, 572, 326, 0, 0, - 0, 327, 328, 329, 0, 330, 0, 0, 651, 0, - 0, 0, 0, 93, 0, 0, 94, 0, 331, 0, - 0, 0, 95, 96, 652, 0, 0, 0, 97, 98, - 99, 0, 332, 0, 333, 100, 0, 334, 335, 336, - 101, 0, 102, 103, 0, 0, 0, 0, 337, 0, - 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, - 0, 108, 109, 0, 0, 338, 0, 339, 340, 111, - 112, 0, 653, 0, 341, 342, 0, 0, 0, 343, - 0, 0, 344, 0, 0, 0, 0, 0, 113, 114, - 115, 345, 0, 117, 118, 0, 119, 120, 0, 121, - 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, - 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 0, 0, 138, 0, 139, 140, 0, 227, 141, - 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, - 150, 0, 151, 152, 153, 154, 155, 346, 0, 156, - 157, 158, 159, 160, 0, 0, 0, 161, 0, 162, - 347, 240, 348, 308, 349, 350, 89, 90, 0, 0, - 0, 351, 0, 0, 353, 354, 355, 1087, 0, 0, - 318, 319, 320, 356, 0, 0, 0, 0, 0, 0, - 0, 226, 321, 322, 323, 324, 0, 91, 325, 0, - 0, 0, 0, 0, 326, 0, 0, 0, 327, 328, - 329, 0, 330, 0, 0, 651, 0, 0, 0, 0, - 93, 0, 0, 94, 0, 331, 0, 0, 0, 95, - 96, 1088, 0, 0, 0, 97, 98, 99, 0, 332, - 0, 333, 100, 0, 334, 335, 336, 101, 0, 102, - 103, 0, 0, 0, 0, 337, 0, 0, 104, 105, - 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, - 0, 0, 338, 0, 339, 340, 111, 112, 0, 1089, - 0, 341, 342, 0, 0, 0, 343, 0, 0, 344, - 0, 0, 0, 0, 0, 113, 114, 115, 345, 0, - 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, - 123, 124, 125, 126, 0, 127, 128, 0, 0, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 0, 0, - 138, 0, 139, 140, 0, 227, 141, 142, 0, 143, - 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, - 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, - 160, 0, 0, 0, 161, 0, 162, 347, 240, 348, - 308, 349, 350, 89, 90, 0, 0, 0, 351, 0, - 0, 353, 354, 355, 1124, 0, 0, 318, 319, 320, - 356, 0, 0, 0, 0, 0, 0, 0, 226, 321, - 322, 323, 324, 0, 91, 325, 0, 0, 0, 0, - 0, 326, 0, 0, 0, 327, 328, 329, 0, 330, - 0, 0, 651, 0, 0, 0, 0, 93, 0, 0, - 94, 0, 331, 0, 0, 0, 95, 96, 1125, 0, - 0, 0, 97, 98, 99, 0, 332, 0, 333, 100, - 0, 334, 335, 336, 101, 0, 102, 103, 0, 0, - 0, 0, 337, 0, 0, 104, 105, 0, 0, 106, - 0, 107, 0, 0, 0, 108, 109, 0, 0, 338, - 0, 339, 340, 111, 112, 0, 1126, 0, 341, 342, - 0, 0, 0, 343, 0, 0, 344, 0, 0, 0, - 0, 0, 113, 114, 115, 345, 0, 117, 118, 0, - 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, - 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 0, 0, 138, 0, 139, - 140, 0, 227, 141, 142, 0, 143, 0, 144, 145, - 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, - 155, 346, 0, 156, 157, 158, 159, 160, 0, 0, - 0, 161, 0, 162, 347, 240, 348, 308, 349, 350, - 89, 90, 0, 0, 0, 351, 0, 0, 353, 354, - 355, 0, 0, 0, 318, 319, 320, 356, 0, 0, - 0, 0, 0, 0, 0, 226, 321, 322, 323, 324, - 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, - 0, 0, 327, 328, 329, 0, 330, 0, 0, 0, - 0, 0, 0, 0, 93, 0, 0, 94, 0, 331, - 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, - 98, 99, 0, 332, 0, 333, 100, 0, 334, 335, - 336, 101, 0, 102, 103, 0, 0, 0, 0, 337, - 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, - 0, 0, 108, 109, 0, 0, 338, 0, 339, 340, - 111, 112, 0, 0, 0, 341, 342, 0, 0, 0, - 343, 0, 0, 344, 0, 0, 0, 0, 0, 113, - 114, 115, 345, 0, 117, 118, 0, 119, 120, 0, - 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, - 128, 0, 0, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 0, 0, 138, 0, 139, 140, 0, 227, - 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, - 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, - 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, - 162, 347, 240, 348, 308, 349, 350, 0, 0, 0, - 0, 0, 351, 352, 0, 353, 354, 355, 0, 89, - 90, 0, 731, 0, 356, 732, 0, 0, 0, 0, - 0, 0, 0, 318, 319, 320, 0, 0, 0, 0, + 227, 141, 142, 0, 143, 0, 144, 145, 146, 147, + 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, + 0, 156, 157, 158, 159, 160, 0, 0, 0, 161, + 0, 162, 347, 240, 348, 308, 349, 350, 89, 90, + 0, 741, 0, 351, 742, 0, 353, 354, 355, 0, + 0, 0, 318, 319, 320, 739, 0, 0, 0, 0, + 0, 0, 0, 226, 321, 322, 323, 324, 0, 91, + 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 327, 328, 329, 0, 330, 0, 0, 0, 0, 0, + 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, + 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, + 0, 332, 0, 333, 100, 0, 334, 0, 336, 101, + 0, 102, 103, 0, 0, 0, 0, 337, 0, 0, + 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, + 108, 109, 0, 0, 338, 0, 339, 340, 111, 112, + 0, 0, 0, 341, 342, 0, 0, 0, 343, 0, + 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, + 345, 0, 117, 118, 0, 119, 120, 0, 121, 0, + 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, + 0, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 0, 0, 138, 0, 139, 140, 0, 227, 141, 142, + 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, + 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 161, 0, 162, 347, + 240, 348, 308, 349, 350, 89, 90, 0, 745, 0, + 351, 746, 0, 353, 354, 355, 0, 0, 0, 318, + 319, 320, 743, 0, 0, 0, 0, 0, 0, 0, + 226, 321, 322, 323, 324, 0, 91, 325, 0, 0, + 0, 0, 0, 326, 0, 0, 0, 327, 328, 329, + 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, + 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, + 0, 0, 0, 0, 97, 98, 99, 0, 332, 0, + 333, 100, 0, 334, 0, 336, 101, 0, 102, 103, + 0, 0, 0, 0, 337, 0, 0, 104, 105, 0, + 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, + 0, 338, 0, 339, 340, 111, 112, 0, 0, 0, + 341, 342, 0, 0, 0, 343, 0, 0, 344, 0, + 0, 0, 0, 0, 113, 114, 115, 345, 0, 117, + 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, + 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 0, 0, 138, + 0, 139, 140, 0, 227, 141, 142, 0, 143, 0, + 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, + 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, + 0, 0, 0, 161, 0, 162, 347, 240, 348, 308, + 349, 350, 89, 90, 0, 749, 0, 351, 750, 0, + 353, 354, 355, 0, 0, 0, 318, 319, 320, 747, + 0, 0, 0, 0, 0, 0, 0, 226, 321, 322, + 323, 324, 0, 91, 325, 0, 0, 0, 0, 0, + 326, 0, 0, 0, 327, 328, 329, 0, 330, 0, + 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, + 0, 331, 0, 0, 0, 95, 96, 0, 0, 0, + 0, 97, 98, 99, 0, 332, 0, 333, 100, 0, + 334, 0, 336, 101, 0, 102, 103, 0, 0, 0, + 0, 337, 0, 0, 104, 105, 0, 0, 106, 0, + 107, 0, 0, 0, 108, 109, 0, 0, 338, 0, + 339, 340, 111, 112, 0, 0, 0, 341, 342, 0, + 0, 0, 343, 0, 0, 344, 0, 0, 0, 0, + 0, 113, 114, 115, 345, 0, 117, 118, 0, 119, + 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, + 0, 127, 128, 0, 0, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 0, 0, 138, 0, 139, 140, + 0, 227, 141, 142, 0, 143, 0, 144, 145, 146, + 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, + 346, 0, 156, 157, 158, 159, 160, 0, 0, 0, + 161, 0, 162, 347, 240, 348, 308, 349, 350, 89, + 90, 0, 753, 0, 351, 754, 0, 353, 354, 355, + 0, 0, 0, 318, 319, 320, 751, 0, 0, 0, 0, 0, 0, 0, 226, 321, 322, 323, 324, 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, 328, 329, 0, 330, 0, 0, 0, 0, @@ -2102,9 +2215,9 @@ static const short yytable[] = { 166, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, 162, - 347, 240, 348, 308, 349, 350, 89, 90, 0, 735, - 0, 351, 736, 0, 353, 354, 355, 0, 0, 0, - 318, 319, 320, 733, 0, 0, 0, 0, 0, 0, + 347, 240, 348, 308, 349, 350, 89, 90, 0, 757, + 0, 351, 758, 0, 353, 354, 355, 0, 0, 0, + 318, 319, 320, 755, 0, 0, 0, 0, 0, 0, 0, 226, 321, 322, 323, 324, 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, 328, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, @@ -2123,15 +2236,15 @@ static const short yytable[] = { 166, 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, 162, 347, 240, 348, - 308, 349, 350, 89, 90, 0, 739, 0, 351, 740, + 308, 349, 350, 89, 90, 0, 0, 0, 351, 0, 0, 353, 354, 355, 0, 0, 0, 318, 319, 320, - 737, 0, 0, 0, 0, 0, 0, 0, 226, 321, + 759, 0, 0, 0, 0, 0, 0, 0, 226, 321, 322, 323, 324, 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, 328, 329, 0, 330, - 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, + 0, 0, 652, 0, 0, 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 332, 0, 333, 100, - 0, 334, 0, 336, 101, 0, 102, 103, 0, 0, + 0, 334, 335, 336, 101, 0, 102, 103, 0, 0, 0, 0, 337, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, 0, 338, 0, 339, 340, 111, 112, 0, 0, 0, 341, 342, @@ -2144,17 +2257,17 @@ static const short yytable[] = { 166, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, 162, 347, 240, 348, 308, 349, 350, - 89, 90, 0, 743, 0, 351, 744, 0, 353, 354, - 355, 0, 0, 0, 318, 319, 320, 741, 0, 0, + 89, 90, 0, 0, 0, 351, 0, 0, 353, 354, + 355, 0, 0, 0, 318, 319, 320, 356, 0, 0, 0, 0, 0, 0, 0, 226, 321, 322, 323, 324, 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, 328, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, - 98, 99, 0, 332, 0, 333, 100, 0, 334, 0, + 98, 99, 0, 332, 0, 333, 100, 0, 334, 335, 336, 101, 0, 102, 103, 0, 0, 0, 0, 337, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, - 0, 0, 108, 109, 0, 0, 338, 0, 339, 340, + 0, 0, 108, 109, 618, 0, 338, 0, 339, 340, 111, 112, 0, 0, 0, 341, 342, 0, 0, 0, 343, 0, 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, 345, 0, 117, 118, 0, 119, 120, 0, @@ -2165,14 +2278,14 @@ static const short yytable[] = { 166, 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, 162, 347, 240, 348, 308, 349, 350, 89, 90, 0, - 747, 0, 351, 748, 0, 353, 354, 355, 0, 0, - 0, 318, 319, 320, 745, 0, 0, 0, 0, 0, + 0, 0, 351, 0, 0, 353, 354, 355, 0, 0, + 0, 318, 319, 320, 356, 0, 0, 0, 0, 0, 0, 0, 226, 321, 322, 323, 324, 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, 328, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, - 332, 0, 333, 100, 0, 334, 0, 336, 101, 0, + 332, 0, 333, 100, 0, 334, 335, 336, 101, 0, 102, 103, 0, 0, 0, 0, 337, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, 0, 338, 0, 339, 340, 111, 112, 0, @@ -2185,15 +2298,15 @@ static const short yytable[] = { 166, 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, 162, 347, 240, - 348, 308, 349, 350, 89, 90, 0, 751, 0, 351, - 752, 0, 353, 354, 355, 0, 0, 0, 318, 319, - 320, 749, 0, 0, 0, 0, 0, 0, 0, 226, + 348, 308, 349, 350, 89, 90, 0, 729, 0, 351, + 730, 0, 353, 354, 355, 0, 0, 0, 318, 319, + 320, 356, 0, 0, 0, 0, 0, 0, 0, 226, 321, 322, 323, 324, 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, 328, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 332, 0, 333, - 100, 0, 334, 0, 336, 101, 0, 102, 103, 0, + 100, 0, 0, 0, 336, 101, 0, 102, 103, 0, 0, 0, 0, 337, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, 0, 338, 0, 339, 340, 111, 112, 0, 0, 0, 341, @@ -2205,9 +2318,9 @@ static const short yytable[] = { 166, 139, 140, 0, 227, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, 0, - 0, 0, 161, 0, 162, 347, 240, 348, 308, 349, - 350, 89, 90, 0, 755, 0, 351, 756, 0, 353, - 354, 355, 0, 0, 0, 318, 319, 320, 753, 0, + 0, 0, 161, 0, 162, 347, 240,-32768, 308, 349, + 350, 89, 90, 0, 0, 0, 351, 0, 0, 353, + 354, 355, 0, 0, 0, 318, 319, 320, 731, 0, 0, 0, 0, 0, 0, 0, 226, 321, 322, 323, 324, 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 327, 328, 329, 0, 330, 0, 0, @@ -2216,7 +2329,7 @@ static const short yytable[] = { 166, 97, 98, 99, 0, 332, 0, 333, 100, 0, 334, 0, 336, 101, 0, 102, 103, 0, 0, 0, 0, 337, 0, 0, 104, 105, 0, 0, 106, 0, 107, - 0, 0, 0, 108, 109, 0, 0, 338, 0, 339, + 0, 0, 0, 108, 109, 618, 0, 338, 0, 339, 340, 111, 112, 0, 0, 0, 341, 342, 0, 0, 0, 343, 0, 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, 345, 0, 117, 118, 0, 119, 120, @@ -2228,13 +2341,13 @@ static const short yytable[] = { 166, 0, 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, 162, 347, 240, 348, 308, 349, 350, 89, 90, 0, 0, 0, 351, 0, 0, 353, 354, 355, 0, - 0, 0, 318, 319, 320, 757, 0, 0, 0, 0, + 0, 0, 318, 319, 320, 356, 0, 0, 0, 0, 0, 0, 0, 226, 321, 322, 323, 324, 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, - 327, 328, 329, 0, 330, 0, 0, 651, 0, 0, + 327, 328, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, - 0, 332, 0, 333, 100, 0, 334, 335, 336, 101, + 0, 332, 0, 333, 100, 0, 334, 0, 336, 101, 0, 102, 103, 0, 0, 0, 0, 337, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, 0, 338, 0, 339, 340, 111, 112, @@ -2248,18 +2361,18 @@ static const short yytable[] = { 166, 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, 162, 347, 240, 348, 308, 349, 350, 89, 90, 0, 0, 0, - 351, 0, 0, 353, 354, 355, 0, 0, 0, 318, + 351, 0, 0, 353, 354, 355, 0, 0, 0, 699, 319, 320, 356, 0, 0, 0, 0, 0, 0, 0, - 226, 321, 322, 323, 324, 0, 91, 325, 0, 0, - 0, 0, 0, 326, 0, 0, 0, 327, 328, 329, + 226, 700, 701, 702, 703, 0, 91, 325, 0, 0, + 0, 0, 0, 326, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 332, 0, - 333, 100, 0, 334, 335, 336, 101, 0, 102, 103, - 0, 0, 0, 0, 337, 0, 0, 104, 105, 0, - 0, 106, 0, 107, 0, 0, 0, 108, 109, 617, - 0, 338, 0, 339, 340, 111, 112, 0, 0, 0, - 341, 342, 0, 0, 0, 343, 0, 0, 344, 0, + 333, 100, 0, 0, 0, 336, 101, 0, 102, 103, + 0, 0, 0, 0, 704, 0, 0, 104, 105, 0, + 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, + 0, 705, 0, 339, 340, 111, 112, 0, 0, 0, + 706, 342, 0, 0, 0, 707, 0, 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, 345, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, @@ -2267,20 +2380,20 @@ static const short yytable[] = { 166, 0, 139, 140, 0, 227, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, - 0, 0, 0, 161, 0, 162, 347, 240, 348, 308, - 349, 350, 89, 90, 0, 0, 0, 351, 0, 0, - 353, 354, 355, 0, 0, 0, 318, 319, 320, 356, - 0, 0, 0, 0, 0, 0, 0, 226, 321, 322, - 323, 324, 0, 91, 325, 0, 0, 0, 0, 0, - 326, 0, 0, 0, 327, 328, 329, 0, 330, 0, + 0, 0, 0, 161, 0, 162, 347, 240, 708, 308, + 349, 350, 89, 90, 0, 0, 0, 709, 0, 0, + 710, 711, 712, 0, 0, 0, 699, 319, 320, 713, + 0, 0, 0, 0, 0, 0, 0, 226, 700, 701, + 702, 703, 0, 91, 325, 0, 0, 0, 0, 0, + 326, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 332, 0, 333, 100, 0, - 334, 335, 336, 101, 0, 102, 103, 0, 0, 0, - 0, 337, 0, 0, 104, 105, 0, 0, 106, 0, - 107, 0, 0, 0, 108, 109, 0, 0, 338, 0, - 339, 340, 111, 112, 0, 0, 0, 341, 342, 0, - 0, 0, 343, 0, 0, 344, 0, 0, 0, 0, + 0, 0, 336, 101, 0, 102, 103, 0, 0, 0, + 0, 704, 0, 0, 104, 105, 0, 0, 106, 0, + 107, 0, 0, 0, 108, 109, 0, 0, 705, 0, + 339, 340, 111, 112, 0, 0, 0, 706, 342, 0, + 0, 0, 707, 0, 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, 345, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, 133, @@ -2288,183 +2401,99 @@ static const short yytable[] = { 166, 0, 227, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 161, 0, 162, 347, 240, 348, 308, 349, 350, 89, - 90, 0, 727, 0, 351, 728, 0, 353, 354, 355, - 0, 0, 0, 318, 319, 320, 356, 0, 0, 0, - 0, 0, 0, 0, 226, 321, 322, 323, 324, 0, + 161, 0, 162, 347, 240,-32768, 308, 349, 350, 89, + 90, 0, 0, 0, 709, 0, 0, 710, 711, 712, + 0, 0, 0, 1228, 319, 320, 713, 0, 0, 0, + 0, 0, 0, 0, 0, 1229, 1230, 1231, 1232, 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, 0, - 0, 327, 328, 329, 0, 330, 0, 0, 0, 0, + 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, - 99, 0, 332, 0, 333, 100, 0, 0, 0, 336, - 101, 0, 102, 103, 0, 0, 0, 0, 337, 0, + 99, 0, 332, 0, 333, 100, 0, 0, 1233, 336, + 101, 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, - 0, 108, 109, 0, 0, 338, 0, 339, 340, 111, - 112, 0, 0, 0, 341, 342, 0, 0, 0, 343, + 0, 108, 109, 0, 0, 0, 0, 339, 340, 111, + 112, 0, 0, 0, 0, 342, 0, 0, 0, 1234, 0, 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, 345, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 0, 0, 138, 0, 139, 140, 0, 227, 141, + 137, 0, 0, 138, 0, 139, 140, 0, 0, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, 162, - 347, 240,-32768, 308, 349, 350, 89, 90, 0, 0, - 0, 351, 0, 0, 353, 354, 355, 0, 0, 0, - 318, 319, 320, 729, 0, 0, 0, 0, 0, 0, - 0, 226, 321, 322, 323, 324, 0, 91, 325, 0, - 0, 0, 0, 0, 326, 0, 0, 0, 327, 328, + 347, 240, 1235, 308, 349, 350, 89, 90, 0, 0, + 0, 1236, 0, 0, 1237, 1238, 1239, 0, 0, 0, + 1228, 319, 320, 1240, 0, 0, 0, 0, 0, 0, + 0, 0, 1229, 1230, 1231, 1232, 0, 91, 325, 0, + 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 332, - 0, 333, 100, 0, 334, 0, 336, 101, 0, 102, - 103, 0, 0, 0, 0, 337, 0, 0, 104, 105, + 0, 333, 100, 0, 0, 0, 336, 101, 0, 102, + 103, 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, - 617, 0, 338, 0, 339, 340, 111, 112, 0, 0, - 0, 341, 342, 0, 0, 0, 343, 0, 0, 344, + 0, 0, 0, 0, 339, 340, 111, 112, 0, 0, + 0, 0, 342, 0, 0, 0, 1234, 0, 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, 345, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, 0, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 0, 0, - 138, 0, 139, 140, 0, 227, 141, 142, 0, 143, - 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, - 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, - 160, 0, 0, 0, 161, 0, 162, 347, 240, 348, - 308, 349, 350, 89, 90, 0, 0, 0, 351, 0, - 0, 353, 354, 355, 0, 0, 0, 318, 319, 320, - 356, 0, 0, 0, 0, 0, 0, 0, 226, 321, - 322, 323, 324, 0, 91, 325, 0, 0, 0, 0, - 0, 326, 0, 0, 0, 327, 328, 329, 0, 330, - 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, - 94, 0, 331, 0, 0, 0, 95, 96, 0, 0, - 0, 0, 97, 98, 99, 0, 332, 0, 333, 100, - 0, 334, 0, 336, 101, 0, 102, 103, 0, 0, - 0, 0, 337, 0, 0, 104, 105, 0, 0, 106, - 0, 107, 0, 0, 0, 108, 109, 0, 0, 338, - 0, 339, 340, 111, 112, 0, 0, 0, 341, 342, - 0, 0, 0, 343, 0, 0, 344, 0, 0, 0, - 0, 0, 113, 114, 115, 345, 0, 117, 118, 0, - 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, - 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 0, 0, 138, 0, 139, - 140, 0, 227, 141, 142, 0, 143, 0, 144, 145, - 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, - 155, 346, 0, 156, 157, 158, 159, 160, 0, 0, - 0, 161, 0, 162, 347, 240, 348, 308, 349, 350, - 89, 90, 0, 0, 0, 351, 0, 0, 353, 354, - 355, 0, 0, 0, 697, 319, 320, 356, 0, 0, - 0, 0, 0, 0, 0, 226, 698, 699, 700, 701, - 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, - 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, - 0, 0, 0, 0, 93, 0, 0, 94, 0, 331, - 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, - 98, 99, 0, 332, 0, 333, 100, 0, 0, 0, - 336, 101, 0, 102, 103, 0, 0, 0, 0, 702, - 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, - 0, 0, 108, 109, 0, 0, 703, 0, 339, 340, - 111, 112, 0, 0, 0, 704, 342, 0, 0, 0, - 705, 0, 0, 344, 0, 0, 0, 0, 0, 113, - 114, 115, 345, 0, 117, 118, 0, 119, 120, 0, - 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, - 128, 0, 0, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 0, 0, 138, 0, 139, 140, 0, 227, - 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, - 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, - 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, - 162, 347, 240, 706, 308, 349, 350, 89, 90, 0, - 0, 0, 707, 0, 0, 708, 709, 710, 0, 0, - 0, 697, 319, 320, 711, 0, 0, 0, 0, 0, - 0, 0, 226, 698, 699, 700, 701, 0, 91, 325, - 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, - 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, - 0, 93, 0, 0, 94, 0, 331, 0, 0, 0, - 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, - 332, 0, 333, 100, 0, 0, 0, 336, 101, 0, - 102, 103, 0, 0, 0, 0, 702, 0, 0, 104, - 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, - 109, 0, 0, 703, 0, 339, 340, 111, 112, 0, - 0, 0, 704, 342, 0, 0, 0, 705, 0, 0, - 344, 0, 0, 0, 0, 0, 113, 114, 115, 345, - 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, - 122, 123, 124, 125, 126, 0, 127, 128, 0, 0, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 0, - 0, 138, 0, 139, 140, 0, 227, 141, 142, 0, - 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, - 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 161, 0, 162, 347, 240, --32768, 308, 349, 350, 89, 90, 0, 0, 0, 707, - 0, 0, 708, 709, 710, 0, 0, 0, 1227, 319, - 320, 711, 0, 0, 0, 0, 0, 0, 0, 0, - 1228, 1229, 1230, 1231, 0, 91, 325, 0, 0, 0, - 0, 0, 326, 0, 0, 0, 0, 0, 329, 0, - 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, - 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, - 0, 0, 0, 97, 98, 99, 0, 332, 0, 333, - 100, 0, 0, 1232, 336, 101, 0, 102, 103, 0, - 0, 0, 0, 0, 0, 0, 104, 105, 0, 0, - 106, 0, 107, 0, 0, 0, 108, 109, 0, 0, - 0, 0, 339, 340, 111, 112, 0, 0, 0, 0, - 342, 0, 0, 0, 1233, 0, 0, 344, 0, 0, - 0, 0, 0, 113, 114, 115, 345, 0, 117, 118, - 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, - 125, 126, 0, 127, 128, 0, 0, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 0, 0, 138, 0, - 139, 140, 0, 0, 141, 142, 0, 143, 0, 144, - 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, - 154, 155, 346, 0, 156, 157, 158, 159, 160, 0, - 0, 0, 161, 0, 162, 347, 240, 1234, 308, 349, - 350, 89, 90, 0, 0, 0, 1235, 0, 0, 1236, - 1237, 1238, 0, 0, 0, 1227, 319, 320, 1239, 0, - 0, 0, 0, 0, 0, 0, 0, 1228, 1229, 1230, - 1231, 0, 91, 325, 0, 0, 0, 0, 0, 326, - 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, - 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, - 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, - 97, 98, 99, 0, 332, 0, 333, 100, 0, 0, - 0, 336, 101, 0, 102, 103, 0, 0, 0, 0, - 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, - 0, 0, 0, 108, 109, 0, 0, 0, 0, 339, - 340, 111, 112, 0, 0, 0, 0, 342, 0, 0, - 0, 1233, 0, 0, 344, 0, 0, 0, 0, 0, - 113, 114, 115, 345, 0, 117, 118, 0, 119, 120, - 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, - 127, 128, 0, 0, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 0, 0, 138, 0, 139, 140, 0, - 0, 141, 142, 0, 143, 0, 144, 145, 146, 147, - 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, - 0, 156, 157, 158, 159, 160, 0, 0, 0, 161, - 0, 162, 347, 240, 1234, 308, 349, 350, 89, 90, - 0, 0, 0, 1235, 0, 0, 1236, 1237, 1238, 0, - 0, 0, 1227, 319, 320, 1239, 0, 0, 0, 0, - 0, 0, 0, 0, 1228, 1229, 1230, 1231, 0, 91, + 130, 131, 132, 133, 134, 135, 136, 137, 0, 0, + 138, 0, 139, 140, 0, 0, 141, 142, 0, 143, + 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, + 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, + 160, 0, 0, 0, 161, 0, 162, 347, 240, 1235, + 308, 349, 350, 89, 90, 0, 0, 0, 1236, 0, + 0, 1237, 1238, 1239, 0, 0, 0, 1228, 319, 320, + 1240, 0, 0, 0, 0, 0, 0, 0, 0, 1229, + 1230, 1231, 1232, 0, 91, 325, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 0, 0, 329, 0, 330, + 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, + 94, 0, 331, 0, 0, 0, 95, 96, 0, 0, + 0, 0, 97, 98, 99, 0, 332, 0, 333, 100, + 0, 0, 0, 336, 101, 0, 102, 103, 0, 0, + 0, 0, 0, 0, 0, 104, 105, 0, 0, 106, + 0, 107, 0, 0, 0, 108, 109, 0, 0, 0, + 0, 339, 340, 111, 112, 0, 0, 0, 0, 342, + 0, 0, 0, 1234, 0, 0, 344, 0, 0, 0, + 0, 0, 113, 114, 115, 345, 0, 117, 118, 0, + 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, + 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 0, 0, 138, 0, 139, + 140, 0, 0, 141, 142, 0, 143, 0, 144, 145, + 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, + 155, 346, 0, 156, 157, 158, 159, 160, 89, 90, + 0, 161, 0, 162, 347, 240,-32768, 308, 349, 350, + 0, 0, 633, 319, 320, 1236, 0, 0, 1237, 1238, + 1239, 0, 0, 226, 0, 0, 0, 1240, 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 332, 0, 333, 100, 0, 0, 0, 336, 101, - 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, + 0, 102, 103, 0, 0, 0, 0, 634, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, - 108, 109, 0, 0, 0, 0, 339, 340, 111, 112, - 0, 0, 0, 0, 342, 0, 0, 0, 1233, 0, + 108, 109, 0, 0, 635, 0, 339, 340, 111, 112, + 0, 0, 0, 636, 342, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, 345, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 0, 0, 138, 0, 139, 140, 0, 0, 141, 142, + 0, 0, 138, 0, 139, 140, 0, 227, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, 89, 90, 0, 161, 0, 162, 347, - 240,-32768, 308, 349, 350, 0, 0, 632, 319, 320, - 1235, 0, 0, 1236, 1237, 1238, 0, 0, 226, 0, - 0, 0, 1239, 0, 91, 325, 0, 0, 0, 0, + 240, 637, 308, 349, 350, 0, 0, 633, 319, 320, + 638, 0, 0, 639, 0, 0, 0, 0, 226, 0, + 0, 0, 640, 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 332, 0, 333, 100, 0, 0, 0, 336, 101, 0, 102, 103, 0, 0, - 0, 0, 633, 0, 0, 104, 105, 0, 0, 106, - 0, 107, 0, 0, 0, 108, 109, 0, 0, 634, - 0, 339, 340, 111, 112, 0, 0, 0, 635, 342, + 0, 0, 634, 0, 0, 104, 105, 0, 0, 106, + 0, 107, 0, 0, 0, 108, 109, 0, 0, 635, + 0, 339, 340, 111, 112, 0, 0, 0, 636, 342, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, 345, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, @@ -2473,34 +2502,34 @@ static const short yytable[] = { 166, 140, 0, 227, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, 89, 90, - 0, 161, 0, 162, 347, 240, 636, 308, 349, 350, - 0, 0, 632, 319, 320, 637, 0, 0, 638, 0, - 0, 0, 0, 226, 0, 0, 0, 639, 0, 91, + 0, 161, 0, 162, 347, 240,-32768, 308, 349, 350, + 0, 0, 1000, 319, 320, 638, 0, 0, 639, 0, + 0, 0, 0, 0, 0, 0, 0, 640, 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, - 0, 332, 0, 333, 100, 0, 0, 0, 336, 101, - 0, 102, 103, 0, 0, 0, 0, 633, 0, 0, + 0, 332, 0, 333, 100, 0, 1001, 1002, 336, 101, + 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, - 108, 109, 0, 0, 634, 0, 339, 340, 111, 112, - 0, 0, 0, 635, 342, 0, 0, 0, 0, 0, + 108, 109, 0, 0, 0, 0, 339, 340, 111, 112, + 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, 345, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 0, 0, 138, 0, 139, 140, 0, 227, 141, 142, + 0, 0, 138, 0, 139, 140, 0, 0, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, 89, 90, 0, 161, 0, 162, 347, - 240,-32768, 308, 349, 350, 0, 0, 999, 319, 320, - 637, 0, 0, 638, 0, 0, 0, 0, 0, 0, - 0, 0, 639, 0, 91, 325, 0, 0, 0, 0, + 240, 1003, 308, 349, 350, 0, 0, 1000, 319, 320, + 1004, 0, 0, 1005, 1006, 1007, 0, 0, 0, 0, + 0, 0, 1008, 0, 91, 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 332, 0, 333, 100, - 0, 1000, 1001, 336, 101, 0, 102, 103, 0, 0, + 0, 0, 1002, 336, 101, 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, 0, 0, 0, 339, 340, 111, 112, 0, 0, 0, 0, 342, @@ -2512,170 +2541,119 @@ static const short yytable[] = { 166, 140, 0, 0, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, 158, 159, 160, 89, 90, - 0, 161, 0, 162, 347, 240, 1002, 308, 349, 350, - 0, 0, 999, 319, 320, 1003, 0, 0, 1004, 1005, - 1006, 0, 0, 0, 0, 0, 0, 1007, 0, 91, - 325, 0, 0, 0, 0, 0, 326, 0, 0, 0, - 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, - 0, 0, 93, 0, 0, 94, 0, 331, 0, 0, + 0, 161, 0, 162, 347, 240,-32768, 308, 349, 350, + 0, 0, 0, 0, 0, 1004, 0, 0, 1005, 1006, + 1007, 0, 0, 226, 0, 0, 0, 1008, 0, 91, + 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, + 0, 0, 491, 0, 0, 0, 0, 492, 0, 0, + 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, - 0, 332, 0, 333, 100, 0, 0, 1001, 336, 101, + 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, - 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, - 108, 109, 0, 0, 0, 0, 339, 340, 111, 112, - 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, - 0, 344, 0, 0, 0, 0, 0, 113, 114, 115, - 345, 0, 117, 118, 0, 119, 120, 0, 121, 0, + 104, 105, 493, 0, 106, 0, 107, 0, 494, 0, + 108, 109, 0, 0, 495, 0, 110, 0, 111, 112, + 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, + 0, 0, 497, 0, 0, 0, 0, 113, 114, 115, + 116, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 0, 0, 138, 0, 139, 140, 0, 0, 141, 142, + 0, 1201, 138, 0, 139, 140, 1202, 227, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, - 0, 151, 152, 153, 154, 155, 346, 0, 156, 157, - 158, 159, 160, 89, 90, 0, 161, 0, 162, 347, - 240,-32768, 308, 349, 350, 0, 0, 0, 0, 0, - 1003, 0, 0, 1004, 1005, 1006, 0, 0, 226, 0, - 0, 0, 1007, 0, 91, 0, 0, 0, 0, 0, - 0, 92, 0, 0, 0, 0, 0, 489, 0, 848, - 0, 0, 490, 0, 0, 0, 0, 93, 0, 0, - 94, 0, 0, 0, 0, 0, 95, 96, 0, 0, - 0, 0, 97, 98, 99, 0, 0, 0, 0, 100, - 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, - 0, 0, 0, 0, 0, 104, 105, 491, 0, 106, - 0, 107, 0, 492, 0, 108, 109, 0, 0, 493, - 0, 110, 0, 111, 112, 0, 0, 0, 0, 0, - 494, 0, 0, 0, 0, 0, 0, 495, 0, 0, - 0, 0, 113, 114, 115, 116, 0, 117, 118, 0, - 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, - 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 0, 489, 138, 0, 139, - 140, 490, 227, 141, 142, 0, 143, 0, 144, 145, - 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, - 155, 0, 0, 156, 157, 158, 159, 160, 0, 0, - 0, 161, 496, 162, 163, 0, 0, 1200, 0, 1446, - 0, 0, 1201, 0, 0, 0, 491, 497, 0, 0, - 0, 0, 492, 0, 0, 0, 0, 971, 493, 489, - 0, 0, 0, 0, 490, 0, 0, 0, 0, 494, - 0, 0, 0, 0, 0, 498, 495, 0, 0, 0, - 499, 500, 501, 502, 503, 504, 505, 1202, 0, 0, - 0, 0, 0, 1203, 506, 0, 0, 0, 0, 1204, - 1200, 0, 0, 0, 0, 1201, 0, 0, 0, 491, - 1205, 0, 0, 0, 0, 492, 0, 1206, 0, 0, - 489, 493, 0, 0, 0, 490, 0, 0, 0, 0, - 0, 0, 494, 0, 0, 0, 0, 0, 0, 495, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1202, 496, 0, 0, 0, 0, 1203, 0, 0, 0, - 1200, 0, 1204, 0, 0, 1201, 497, 0, 0, 0, - 491, 0, 0, 1205, 0, 0, 492, 0, 0, 0, - 1206, 0, 493, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1207, 494, 498, 0, 0, 0, 0, 499, - 500, 501, 502, 503, 504, 505, 0, 1208, 0, 0, - 1202, 0, 1319, 506, 496, 0, 1203, 0, 0, 0, - 0, 0, 1204, 0, 0, 0, 0, 0, 0, 497, - 0, 0, 0, 1205, 0, 1209, 0, 0, 0, 0, - 1210, 1211, 1212, 1213, 1214, 1215, 1216, 0, 0, 0, - 0, 0, 0, 0, 1217, 1207, 0, 498, 0, 0, - 0, 0, 499, 500, 501, 502, 503, 504, 505, 0, - 1208, 0, 0, 0, 0, 496, 506, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 497, 0, 0, 0, 0, 0, 0, 0, 1209, 0, - 0, 0, 0, 1210, 1211, 1212, 1213, 1214, 1215, 1216, - 0, 0, 0, 0, 0, 1207, 0, 1217, 498, 89, - 90, 0, 0, 499, 500, 501, 502, 503, 504, 505, - 1208, 0, 0, 0, 0, 0, 0, 506, 0, 0, + 0, 151, 152, 153, 154, 155, 0, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 161, 498, 162, 163, + 0, 0, 1201, 0, 0, 0, 0, 1202, 0, 0, + 0, 1203, 499, 0, 0, 0, 0, 1204, 0, 0, + 0, 0, 972, 1205, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1206, 0, 0, 0, 0, 0, + 500, 1207, 0, 0, 0, 501, 502, 503, 504, 505, + 506, 507, 1203, 0, 0, 0, 0, 0, 1204, 508, + 0, 0, 0, 0, 1205, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 91, 0, 0, 0, 0, 0, 0, 92, 1209, 0, - 0, 0, 0, 1210, 1211, 1212, 1213, 1214, 1215, 1216, - 0, 0, 0, 93, 0, 0, 94, 1217, 0, 0, - 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, - 99, 0, 0, 0, 0, 100, 0, 0, 0, 0, - 101, 0, 102, 103, 0, 0, 0, 0, 0, 0, - 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, - 0, 108, 109, 0, 0, 0, 0, 110, 0, 111, - 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, - 115, 116, 0, 117, 118, 0, 119, 120, 0, 121, - 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, - 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 0, 0, 138, 0, 139, 140, 0, 0, 141, - 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, - 150, 0, 151, 152, 153, 154, 155, 1053, 0, 156, - 157, 158, 159, 160, 89, 90, 0, 161, 0, 162, - 163, 240, 297, 308, 0, 1054, 0, 272, 273, 274, - 275, 1055, 277, 278, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 91, 0, 0, 588, 0, - 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 93, 1201, - 0, 94, 0, 0, 0, 0, 269, 95, 96, 0, - 0, 0, 0, 97, 98, 99, 0, 0, 0, 0, - 100, 0, 0, 0, 0, 101, 0, 102, 103, 0, - 0, 0, 0, 0, 0, 0, 104, 105, 270, 0, - 106, 0, 107, 0, 1202, 0, 108, 109, 0, 0, - 1203, 0, 110, 0, 111, 112, 1204, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1205, 0, 0, - 0, 0, 0, 113, 114, 115, 116, 0, 117, 118, - 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, - 125, 126, 0, 127, 128, 0, 0, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 0, 0, 138, 0, - 139, 140, 89, 90, 141, 142, 0, 143, 0, 144, - 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, - 154, 155, 0, 0, 156, 157, 158, 159, 160, 0, - 0, 0, 161, 91, 162, 163, 0, 271, 0, 1207, - 92, 0, 272, 273, 274, 275, 276, 277, 278, 0, - 0, 0, 0, 0, 1208, 0, 93, 0, 0, 94, - 0, 0, 0, 0, 269, 95, 96, 0, 0, 0, - 0, 97, 98, 99, 0, 0, 0, 0, 100, 0, - 0, 0, 1209, 101, 0, 102, 103, 1210, 1211, 1212, - 1213, 1214, 1215, 1216, 104, 105, 270, 0, 106, 0, - 107, 1217, 0, 0, 108, 109, 0, 0, 0, 0, - 110, 0, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 113, 114, 115, 116, 0, 117, 118, 0, 119, - 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, - 0, 127, 128, 0, 0, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 0, 0, 138, 0, 139, 140, - 0, 0, 141, 142, 0, 143, 0, 144, 145, 146, - 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, - 0, 0, 156, 157, 158, 159, 160, 89, 90, 0, - 161, 0, 162, 163, 0, 271, 0, 0, 0, 0, - 272, 273, 274, 275, 276, 277, 278, 0, 0, 0, - 0, 0, 226, 0, 0, 0, 0, 0, 91, 0, - 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, - 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, - 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, - 102, 103, 0, 0, 0, 0, 0, 0, 0, 104, - 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, - 109, 0, 0, 0, 0, 110, 0, 111, 112, 0, + 0, 0, 0, 0, 0, 0, 1208, 0, 0, 0, + 89, 90, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, - 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, - 122, 123, 124, 125, 126, 0, 127, 128, 0, 0, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 0, - 0, 138, 0, 139, 140, 0, 227, 141, 142, 0, - 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, - 151, 152, 153, 154, 155, 89, 90, 156, 157, 158, - 159, 160, 0, 0, 0, 161, 0, 162, 163, 0, - 0, 0, 349, 0, 0, 0, 0, 0, 0, 0, - 523, 0, 0, 0, 0, 0, 91, 0, 0, 0, + 0, 91, 0, 0, 0, 0, 0, 1208, 92, 1210, + 0, 0, 0, 0, 1211, 1212, 1213, 1214, 1215, 1216, + 1217, 0, 1209, 0, 93, 0, 0, 94, 1218, 0, + 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, + 98, 99, 0, 0, 0, 0, 100, 0, 0, 0, + 1210, 101, 0, 102, 103, 1211, 1212, 1213, 1214, 1215, + 1216, 1217, 104, 105, 0, 0, 106, 0, 107, 1218, + 0, 0, 108, 109, 0, 0, 0, 0, 110, 0, + 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, + 114, 115, 116, 0, 117, 118, 0, 119, 120, 0, + 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, + 128, 0, 0, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 0, 0, 138, 0, 139, 140, 0, 0, + 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, + 149, 150, 0, 151, 152, 153, 154, 155, 1054, 0, + 156, 157, 158, 159, 160, 89, 90, 0, 161, 0, + 162, 163, 240, 297, 308, 0, 1055, 0, 272, 273, + 274, 275, 1056, 277, 278, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 91, 0, 0, 589, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, - 0, 0, 94, 0, 0, 0, 0, 0, 95, 96, + 1202, 0, 94, 0, 0, 0, 0, 269, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, 103, - 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, - 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, - 0, 0, 0, 110, 0, 111, 112, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 104, 105, 270, + 0, 106, 0, 107, 0, 1203, 0, 108, 109, 0, + 0, 1204, 0, 110, 0, 111, 112, 1205, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1206, 0, 0, 0, 0, 0, 113, 114, 115, 116, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, - 124, 125, 126, 0, 127, 128, 89, 90, 129, 130, + 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, 137, 0, 0, 138, - 0, 139, 140, 0, 0, 141, 142, 0, 143, 0, - 144, 145, 146, 147, 148, 149, 150, 91, 151, 152, - 153, 154, 155, 0, 92, 156, 157, 158, 159, 160, - 0, 0, 0, 161, 0, 162, 163, 0, 0, 0, - 93, 0, 0, 94, 0, 0, 0, 0, 423, 95, + 0, 139, 140, 89, 90, 141, 142, 0, 143, 0, + 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, + 153, 154, 155, 0, 0, 156, 157, 158, 159, 160, + 0, 0, 0, 161, 91, 162, 163, 0, 271, 0, + 1208, 92, 0, 272, 273, 274, 275, 276, 277, 278, + 0, 0, 0, 0, 0, 1209, 0, 93, 0, 0, + 94, 0, 0, 0, 0, 269, 95, 96, 0, 0, + 0, 0, 97, 98, 99, 0, 0, 0, 0, 100, + 0, 0, 0, 1210, 101, 0, 102, 103, 1211, 1212, + 1213, 1214, 1215, 1216, 1217, 104, 105, 270, 0, 106, + 0, 107, 1218, 0, 0, 108, 109, 0, 0, 0, + 0, 110, 0, 111, 112, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 113, 114, 115, 116, 0, 117, 118, 0, + 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, + 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 0, 0, 138, 0, 139, + 140, 0, 0, 141, 142, 0, 143, 0, 144, 145, + 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, + 155, 0, 0, 156, 157, 158, 159, 160, 89, 90, + 0, 161, 0, 162, 163, 0, 271, 0, 0, 0, + 0, 272, 273, 274, 275, 276, 277, 278, 0, 0, + 0, 0, 0, 226, 0, 0, 0, 0, 0, 91, + 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, + 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, + 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, + 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, + 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, + 108, 109, 0, 0, 0, 0, 110, 0, 111, 112, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, + 116, 0, 117, 118, 0, 119, 120, 0, 121, 0, + 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, + 0, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 0, 0, 138, 0, 139, 140, 0, 227, 141, 142, + 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, + 0, 151, 152, 153, 154, 155, 89, 90, 156, 157, + 158, 159, 160, 0, 0, 0, 161, 0, 162, 163, + 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, + 0, 524, 0, 0, 0, 0, 0, 91, 0, 0, + 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 93, 0, 0, 94, 0, 0, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, 104, 105, @@ -2690,7 +2668,7 @@ static const short yytable[] = { 166, 0, 144, 145, 146, 147, 148, 149, 150, 91, 151, 152, 153, 154, 155, 0, 92, 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, 162, 163, 0, 0, - 0, 93, 0, 0, 94, 0, 0, 0, 0, 765, + 0, 93, 0, 0, 94, 0, 0, 0, 0, 423, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, 104, @@ -2706,7 +2684,7 @@ static const short yytable[] = { 166, 151, 152, 153, 154, 155, 0, 92, 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, 162, 163, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, - 982, 95, 96, 0, 0, 0, 0, 97, 98, 99, + 766, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, @@ -2714,100 +2692,58 @@ static const short yytable[] = { 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, 0, 117, 118, 0, 119, 120, 0, 121, 0, - 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, - 0, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 0, 122, 123, 124, 125, 126, 0, 127, 128, 89, + 90, 129, 130, 131, 132, 133, 134, 135, 136, 137, 0, 0, 138, 0, 139, 140, 0, 0, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, - 0, 151, 152, 153, 154, 155, 0, 0, 156, 157, - 158, 159, 160, 89, 90, 0, 161, 0, 162, 163, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1178, 0, 0, 0, 0, 0, 0, 226, 0, - 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, - 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, - 94, 0, 0, 0, 0, 0, 95, 96, 0, 0, - 0, 0, 97, 98, 99, 0, 0, 0, 0, 100, - 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, - 0, 0, 0, 0, 0, 104, 105, 0, 0, 106, - 0, 107, 0, 0, 0, 108, 109, 0, 0, 0, - 0, 110, 0, 111, 112, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 113, 114, 115, 116, 0, 117, 118, 0, - 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, - 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 0, 0, 138, 0, 139, - 140, 0, 227, 141, 142, 0, 143, 0, 144, 145, - 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, - 155, 89, 90, 156, 157, 158, 159, 160, 0, 0, - 0, 161, 0, 162, 163, 0, 0, 0, 349, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 91, 0, 0, 0, 0, 0, 0, 92, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, - 0, 0, 0, 0, 95, 96, 0, 0, 0, 0, - 97, 98, 99, 0, 0, 0, 0, 100, 0, 0, - 0, 0, 101, 0, 102, 103, 0, 0, 0, 0, - 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, - 0, 0, 0, 108, 109, 0, 0, 0, 0, 110, - 0, 111, 112, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 113, 114, 115, 116, 0, 117, 118, 0, 119, 120, - 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, - 127, 128, 0, 0, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 0, 0, 138, 0, 139, 140, 0, - 0, 141, 142, 0, 143, 0, 144, 145, 146, 147, - 148, 149, 150, 0, 151, 152, 153, 154, 155, 89, - 90, 156, 157, 158, 159, 160, 0, 0, 0, 161, - 0, 162, 163, 0, 0, 308, 0, 0, 0, 0, - 0, 663, 0, 664, 665, 0, 0, 0, 0, 0, - 91, 0, 0, 0, 0, 0, 0, 92, 0, 0, - 0, 0, 0, 666, 0, 0, 0, 667, 0, 0, - 0, 668, 0, 93, 0, 0, 94, 0, 0, 0, - 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, + 91, 151, 152, 153, 154, 155, 0, 92, 156, 157, + 158, 159, 160, 0, 0, 0, 161, 0, 162, 163, + 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, + 0, 983, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 0, 0, 0, 100, 0, 0, 0, 0, - 101, 0, 102, 103, 0, 669, 0, 0, 670, 671, + 101, 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, - 0, 108, 109, 0, 0, 0, 672, 110, 0, 111, - 112, 0, 0, 673, 0, 674, 0, 0, 0, 0, + 0, 108, 109, 0, 0, 0, 0, 110, 0, 111, + 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, - 115, 116, 675, 117, 118, 676, 119, 120, 677, 121, - 678, 679, 122, 123, 124, 125, 126, 680, 127, 128, - 681, 682, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 683, 684, 138, 685, 139, 140, 686, 687, 141, - 142, 688, 143, 0, 144, 145, 146, 147, 148, 149, - 150, 689, 151, 152, 153, 154, 155, 690, 691, 156, - 157, 158, 159, 160, 89, 90, 692, 161, 693, 162, - 163, 0, 0, 0, 0, 0, 0, 0, 0, 319, - 320, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 91, 568, 0, 0, 0, - 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, - 570, 0, 0, 0, 0, 0, 0, 0, 93, 0, + 115, 116, 0, 117, 118, 0, 119, 120, 0, 121, + 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, + 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 0, 0, 138, 0, 139, 140, 0, 0, 141, + 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, + 150, 0, 151, 152, 153, 154, 155, 0, 0, 156, + 157, 158, 159, 160, 89, 90, 0, 161, 0, 162, + 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1179, 0, 0, 0, 0, 0, 0, 226, + 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, + 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 95, 96, 0, - 0, 0, 0, 97, 98, 99, 0, 332, 0, 333, - 100, 0, 0, 0, 571, 101, 0, 102, 103, 0, + 0, 0, 0, 97, 98, 99, 0, 0, 0, 0, + 100, 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, 0, 0, 0, 110, 0, 111, 112, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, 133, 134, 135, 136, 137, 0, 0, 138, 0, - 139, 140, 0, 0, 141, 142, 0, 143, 0, 144, + 139, 140, 0, 227, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 89, 90, 156, 157, 158, 159, 160, 0, - 0, 0, 161, 0, 162, 163, 0, 0, 0, 545, - 0, 0, 0, 0, 546, 0, 0, 0, 0, 0, + 0, 0, 161, 0, 162, 163, 0, 0, 0, 349, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 547, 0, 0, 0, 0, 0, 93, 0, 0, 94, + 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, 0, - 0, 0, 0, 548, 104, 105, 0, 0, 106, 0, + 0, 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, 0, 0, 0, 110, 0, 111, 112, 0, 0, 0, 0, 0, 0, - 549, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, 133, @@ -2815,30 +2751,72 @@ static const short yytable[] = { 166, 0, 0, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 89, 90, 156, 157, 158, 159, 160, 0, 0, 0, - 161, 0, 162, 163, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, + 161, 0, 162, 163, 0, 0, 308, 0, 0, 0, + 0, 0, 665, 0, 666, 667, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 92, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 93, 0, 0, 94, 0, 0, + 0, 0, 0, 0, 668, 0, 0, 0, 669, 0, + 0, 0, 670, 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 0, 0, 0, 100, 0, 0, 0, - 0, 101, 0, 102, 103, 0, 0, 0, 0, 0, - 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, - 0, 0, 108, 109, 0, 0, 0, 0, 110, 0, - 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 101, 0, 102, 103, 0, 671, 0, 0, 672, + 673, 0, 104, 105, 0, 0, 106, 0, 107, 0, + 0, 0, 108, 109, 0, 0, 0, 674, 110, 0, + 111, 112, 0, 0, 675, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, - 114, 115, 116, 0, 117, 118, 0, 119, 120, 0, - 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, - 128, 89, 90, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 0, 0, 138, 0, 139, 140, 0, 227, - 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, - 149, 150, 91, 151, 152, 153, 154, 155, 0, 92, - 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, - 162, 163, 0, 837, 0, 93, 0, 0, 94, 0, + 114, 115, 116, 677, 117, 118, 678, 119, 120, 679, + 121, 680, 681, 122, 123, 124, 125, 126, 682, 127, + 128, 683, 684, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 685, 686, 138, 687, 139, 140, 688, 689, + 141, 142, 690, 143, 0, 144, 145, 146, 147, 148, + 149, 150, 691, 151, 152, 153, 154, 155, 692, 693, + 156, 157, 158, 159, 160, 89, 90, 694, 161, 695, + 162, 163, 0, 0, 0, 0, 0, 0, 0, 0, + 319, 320, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 91, 569, 0, 0, + 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, + 0, 571, 0, 0, 0, 0, 0, 0, 0, 93, + 0, 0, 94, 0, 0, 0, 0, 0, 95, 96, + 0, 0, 0, 0, 97, 98, 99, 0, 332, 0, + 333, 100, 0, 0, 0, 572, 101, 0, 102, 103, + 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, + 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, + 0, 0, 0, 110, 0, 111, 112, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, + 0, 0, 0, 0, 113, 114, 115, 116, 0, 117, + 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, + 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 0, 0, 138, + 0, 139, 140, 0, 0, 141, 142, 0, 143, 0, + 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, + 153, 154, 155, 89, 90, 156, 157, 158, 159, 160, + 0, 0, 0, 161, 0, 162, 163, 0, 0, 0, + 546, 0, 0, 0, 0, 547, 0, 0, 0, 0, + 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, + 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 548, 0, 0, 0, 0, 0, 93, 0, 0, + 94, 0, 0, 0, 0, 0, 95, 96, 0, 0, + 0, 0, 97, 98, 99, 0, 0, 0, 0, 100, + 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, + 0, 0, 0, 0, 549, 104, 105, 0, 0, 106, + 0, 107, 0, 0, 0, 108, 109, 0, 0, 0, + 0, 110, 0, 111, 112, 0, 0, 0, 0, 0, + 0, 550, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 113, 114, 115, 116, 0, 117, 118, 0, + 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, + 126, 0, 127, 128, 0, 0, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 0, 0, 138, 0, 139, + 140, 0, 0, 141, 142, 0, 143, 0, 144, 145, + 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, + 155, 89, 90, 156, 157, 158, 159, 160, 0, 0, + 0, 161, 0, 162, 163, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, + 0, 0, 91, 0, 0, 0, 0, 0, 0, 92, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, 0, 0, - 0, 0, 0, 104, 105, 0, 838, 106, 0, 107, + 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, 0, 0, 0, 110, 0, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2846,16 +2824,16 @@ static const short yytable[] = { 166, 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, 89, 90, 129, 130, 131, 132, 133, 134, 135, 136, 137, 0, 0, 138, 0, 139, 140, 0, - 0, 141, 142, 0, 143, 0, 144, 145, 146, 147, + 227, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, 91, 151, 152, 153, 154, 155, 0, 92, 156, 157, 158, 159, 160, 0, 0, 0, 161, - 0, 162, 163, 0, 0, 0, 93, 0, 0, 94, + 0, 162, 163, 0, 838, 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 95, 96, 0, 0, 0, - 0, 97, 98, 99, 223, 0, 0, 0, 100, 0, + 0, 97, 98, 99, 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, 0, - 0, 0, 0, 0, 104, 105, 0, 0, 106, 0, + 0, 0, 0, 0, 104, 105, 0, 839, 106, 0, 107, 0, 0, 0, 108, 109, 0, 0, 0, 0, - 224, 0, 111, 112, 0, 0, 0, 0, 0, 0, + 110, 0, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, @@ -2866,17 +2844,17 @@ static const short yytable[] = { 166, 0, 92, 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, 162, 163, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 95, 96, 0, 0, - 0, 0, 97, 98, 99, 0, 0, 0, 0, 100, + 0, 0, 97, 98, 99, 223, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, 0, 0, - 0, 110, 0, 111, 112, 0, 0, 0, 0, 0, + 0, 224, 0, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, 0, 127, 128, 89, 90, 129, 130, 131, 132, 133, 134, 135, 136, 137, 0, 0, 138, 0, 139, - 140, 0, 0, 141, 142, 597, 143, 0, 144, 145, + 140, 0, 0, 141, 142, 0, 143, 0, 144, 145, 146, 147, 148, 149, 150, 91, 151, 152, 153, 154, 155, 0, 92, 156, 157, 158, 159, 160, 0, 0, 0, 161, 0, 162, 163, 0, 0, 0, 93, 0, @@ -2889,31 +2867,31 @@ static const short yytable[] = { 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, - 125, 126, 0, 127, 128, 0, 0, 129, 130, 131, + 125, 126, 0, 127, 128, 89, 90, 129, 130, 131, 132, 133, 134, 135, 136, 137, 0, 0, 138, 0, - 139, 140, 0, 0, 141, 142, 1069, 143, 0, 144, - 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, - 154, 155, 89, 90, 156, 157, 158, 159, 160, 1173, - 0, 0, 161, 0, 162, 163, 0, 0, 0, 0, + 139, 140, 0, 0, 141, 142, 598, 143, 0, 144, + 145, 146, 147, 148, 149, 150, 91, 151, 152, 153, + 154, 155, 0, 92, 156, 157, 158, 159, 160, 0, + 0, 0, 161, 0, 162, 163, 0, 0, 0, 93, + 0, 0, 94, 0, 0, 0, 0, 0, 95, 96, + 0, 0, 0, 0, 97, 98, 99, 0, 0, 0, + 0, 100, 0, 0, 0, 0, 101, 0, 102, 103, + 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, + 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, + 0, 0, 0, 110, 0, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, - 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, - 0, 0, 0, 0, 0, 95, 96, 0, 0, 0, - 0, 97, 98, 99, 0, 0, 0, 0, 100, 0, - 0, 0, 0, 101, 0, 102, 103, 0, 0, 0, - 0, 0, 0, 0, 104, 105, 0, 0, 106, 0, - 107, 0, 0, 0, 108, 109, 0, 0, 0, 0, - 110, 0, 111, 112, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 113, 114, 115, 116, 0, 117, + 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, + 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 0, 0, 138, + 0, 139, 140, 0, 0, 141, 142, 1070, 143, 0, + 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, + 153, 154, 155, 89, 90, 156, 157, 158, 159, 160, + 1174, 0, 0, 161, 0, 162, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 113, 114, 115, 116, 0, 117, 118, 0, 119, - 120, 0, 121, 0, 0, 122, 123, 124, 125, 126, - 0, 127, 128, 89, 90, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 0, 0, 138, 0, 139, 140, - 0, 0, 141, 142, 0, 143, 0, 144, 145, 146, - 147, 148, 149, 150, 91, 151, 152, 153, 154, 155, - 0, 92, 156, 157, 158, 159, 160, 0, 0, 0, - 161, 0, 162, 163, 0, 0, 0, 93, 0, 0, + 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, + 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 94, 0, 0, 0, 0, 0, 95, 96, 0, 0, 0, 0, 97, 98, 99, 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, @@ -2934,7 +2912,7 @@ static const short yytable[] = { 166, 100, 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, 0, - 0, 0, 247, 0, 111, 112, 0, 0, 0, 0, + 0, 0, 110, 0, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, 124, @@ -2949,437 +2927,532 @@ static const short yytable[] = { 166, 0, 100, 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, 0, - 0, 0, 0, 249, 0, 111, 112, 0, 0, 0, + 0, 0, 0, 247, 0, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 114, 115, 116, 0, 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, 123, - 124, 125, 126, 0, 127, 128, 0, 0, 129, 130, + 124, 125, 126, 0, 127, 128, 89, 90, 129, 130, 131, 132, 133, 134, 135, 136, 137, 0, 0, 138, 0, 139, 140, 0, 0, 141, 142, 0, 143, 0, - 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, - 153, 154, 155, 0, 0, 156, 157, 158, 159, 160, - 0, 0, 1, 161, 0, 162, 163, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, - 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 6, 0, 7, 0, 0, 0, 8, 9, 10, - 0, 0, 0, 11, 0, 0, 0, 0, 0, 12, - 0, 0, 0, 0, 319, 320, 13, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 91, 325, 0, 0, 0, 0, 0, 469, 0, 0, - 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, - 0, 0, 0, 93, 0, 0, 0, 14, 331, 15, - 0, 0, 16, 17, 0, 0, 0, 0, 0, 98, - 99, 0, 332, 0, 333, 0, 0, 18, 0, 336, + 144, 145, 146, 147, 148, 149, 150, 91, 151, 152, + 153, 154, 155, 0, 92, 156, 157, 158, 159, 160, + 0, 0, 0, 161, 0, 162, 163, 0, 0, 0, + 93, 0, 0, 94, 0, 0, 0, 0, 0, 95, + 96, 0, 0, 0, 0, 97, 98, 99, 0, 0, + 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, + 103, 0, 0, 0, 0, 0, 0, 0, 104, 105, + 0, 0, 106, 0, 107, 0, 0, 0, 108, 109, + 0, 0, 0, 0, 249, 0, 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 19, 0, 0, 0, 0, 0, 0, 0, 20, - 21, 0, 109, 617, 0, 0, 0, 470, 340, 22, - 23, 0, 0, 0, 0, 342, 0, 0, 0, 0, - 24, 25, 344, 26, 0, 0, 27, 0, 113, 0, - 0, 471, 28, 319, 320, 0, 0, 0, 0, 0, - 29, 0, 0, 0, 0, 0, 0, 30, 0, 91, - 325, 0, 0, 31, 0, 32, 469, 0, 0, 0, - 0, 0, 329, 0, 330, 0, 0, 0, 0, 0, - 0, 0, 93, 0, 0, 0, 0, 331, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 346, 98, 99, - 0, 332, 0, 333, 0, 0, 0, 0, 336, 0, - 472, 240, 0, 308, 349, 350, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 113, 114, 115, 116, 0, + 117, 118, 0, 119, 120, 0, 121, 0, 0, 122, + 123, 124, 125, 126, 0, 127, 128, 0, 0, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 0, 0, + 138, 0, 139, 140, 0, 0, 141, 142, 0, 143, + 0, 144, 145, 146, 147, 148, 149, 150, 0, 151, + 152, 153, 154, 155, 0, 0, 156, 157, 158, 159, + 160, 0, 0, 1, 161, 0, 162, 163, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, + 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 7, 0, 0, 0, 8, 9, + 10, 0, 0, 0, 11, 0, 0, 0, 0, 0, + 12, 0, 0, 0, 0, 319, 320, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 109, 319, 320, 0, 0, 470, 340, 0, 0, - 0, 0, 0, 0, 342, 0, 0, 0, 91, 325, - 0, 344, 0, 0, 0, 469, 0, 113, 0, 0, - 471, 0, 0, 330, 0, 0, 0, 0, 0, 0, - 0, 93, 0, 0, 0, 0, 331, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 98, 99, 0, - 332, 0, 333, 0, 0, 0, 0, 336, 0, 0, + 0, 91, 325, 0, 0, 0, 0, 0, 469, 0, + 0, 0, 0, 0, 329, 0, 330, 0, 0, 0, + 0, 0, 0, 0, 93, 0, 0, 0, 14, 331, + 15, 0, 0, 16, 17, 0, 0, 0, 0, 0, + 98, 99, 0, 332, 0, 333, 0, 0, 18, 0, + 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, + 20, 21, 0, 109, 618, 0, 0, 0, 470, 340, + 22, 23, 0, 0, 0, 0, 342, 0, 0, 0, + 0, 24, 25, 344, 26, 0, 0, 27, 0, 113, + 0, 0, 471, 28, 319, 320, 0, 0, 0, 0, + 0, 29, 0, 0, 0, 0, 0, 0, 30, 0, + 91, 325, 0, 0, 31, 0, 32, 469, 0, 0, + 0, 0, 0, 329, 0, 330, 0, 0, 0, 0, + 0, 0, 0, 93, 0, 0, 0, 0, 331, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 346, 98, + 99, 0, 332, 0, 333, 0, 0, 0, 0, 336, + 0, 472, 240, 0, 308, 349, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, - 109, 0, 0, 0, 0, 470, 340, 0, 0, 472, - 240, 0, 308, 349, 350, 0, 0, 0, 0, 0, - 344, 0, 0, 0, 0, 0, 113, 0, 0, 471, + 0, 0, 109, 0, 0, 0, 0, 470, 340, 0, + 0, 0, 0, 0, 0, 342, 0, 0, 0, 0, + 0, 0, 344, 0, 0, 0, 0, 0, 113, 0, + 0, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 804, 346, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 472 + 472, 240, 0, 308, 349, 350 }; static const short yycheck[] = { 3, - 525, 170, 6, 199, 799, 182, 196, 971, 25, 914, - 1201, 607, 524, 17, 18, 237, 20, 529, 222, 188, - 24, 617, 845, 846, 28, 29, 30, 31, 465, 809, - 1245, 536, 115, 856, 6, 409, 506, 650, 977, 652, - 653, 1411, 1412, 52, 389, 706, 707, 708, 709, 710, - 52, 52, 50, 6, 6, 37, 9, 20, 37, 37, - 23, 37, 723, 5, 1171, 7, 320, 6, 1493, 1494, - 38, 16, 37, 47, 124, 3, 513, 871, 63, 333, - 84, 38, 38, 124, 872, 52, 38, 557, 51, 636, - 637, 638, 639, 605, 13, 71, 73, 124, 60, 85, - 42, 205, 13, 124, 61, 61, 124, 79, 82, 61, - 814, 37, 1537, 207, 818, 124, 52, 313, 42, 223, - 316, 215, 1492, 95, 183, 919, 47, 18, 211, 106, - 642, 94, 920, 24, 38, 80, 238, 28, 124, 58, - 31, 8, 107, 105, 36, 119, 38, 58, 115, 63, - 107, 70, 356, 8, 122, 107, 82, 61, 121, 70, - 125, 82, 1353, 108, 168, 122, 122, 171, 172, 61, - 122, 175, 176, 101, 178, 179, 226, 204, 182, 10, - 142, 283, 186, 187, 108, 226, 190, 228, 192, 193, - 194, 205, 187, 84, 385, 199, 200, 10, 119, 194, - 207, 713, 142, 107, 458, 226, 223, 228, 226, 223, - 228, 1116, 140, 217, 651, 107, 1641, 226, 122, 1014, - 1015, 219, 1329, 205, 226, 226, 205, 205, 156, 205, - 122, 235, 171, 172, 238, 207, 188, 833, 245, 178, - 244, 226, 184, 215, 1067, 117, 47, 57, 6, 146, - 160, 190, 47, 192, 53, 916, 1447, 205, 202, 131, - 873, 200, 10, 73, 227, 110, 1636, 928, 929, 930, - 931, 932, 933, 464, 227, 223, 173, 168, 147, 283, - 81, 82, 40, 300, 188, 177, 81, 82, 179, 20, - 294, 796, 91, 99, 207, 186, 106, 205, 1513, 490, - 205, 110, 309, 1538, 1539, 174, 510, 1322, 921, 313, - 1325, 224, 316, 317, 123, 223, 122, 1508, 119, 1510, - 51, 1260, 52, 870, 119, 207, 217, 1562, 58, 216, - 217, 222, 879, 880, 881, 882, 883, 884, 225, 206, - 357, 4, 224, 226, 235, 228, 9, 214, 215, 216, - 217, 206, 15, 244, 220, 294, 19, 204, 225, 214, - 215, 216, 217, 94, 182, 382, 383, 384, 216, 217, - 225, 222, 541, 222, 223, 206, 227, 225, 848, 160, - 1285, 385, 386, 214, 215, 216, 217, 226, 137, 228, - 121, 395, 141, 206, 225, 67, 413, 401, 211, 212, - 213, 214, 215, 216, 217, 409, 204, 205, 96, 207, - 414, 209, 225, 204, 36, 885, 38, 421, 422, 764, - 216, 217, 226, 427, 195, 196, 430, 431, 85, 225, - 775, 435, 85, 58, 205, 872, 443, 444, 445, 61, - 814, 85, 133, 450, 818, 636, 637, 638, 639, 108, - 887, 888, 13, 216, 217, 462, 85, 969, 206, 133, - 464, 898, 225, 207, 934, 209, 214, 215, 216, 217, - 1250, 226, 1436, 228, 1087, 1088, 1089, 225, 485, 133, - 487, 1142, 421, 920, 488, 107, 490, 139, 427, 216, - 217, 430, 431, 216, 385, 386, 220, 58, 225, 936, - 122, 227, 130, 64, 395, 537, 538, 539, 512, 70, - 514, 1124, 1125, 1126, 10, 706, 707, 708, 709, 710, - 53, 991, 226, 20, 228, 729, 59, 130, 25, 733, - 227, 422, 723, 737, 10, 20, 69, 741, 227, 67, - 37, 745, 546, 105, 77, 749, 1485, 33, 1487, 753, - 1075, 129, 37, 757, 176, 177, 1081, 90, 1234, 1235, - 1236, 1237, 1238, 1239, 580, 13, 582, 583, 584, 585, - 103, 226, 34, 580, 85, 582, 583, 584, 585, 206, - 227, 206, 64, 774, 81, 212, 213, 120, 592, 214, - 215, 216, 217, 207, 227, 57, 81, 94, 602, 93, - 225, 223, 163, 100, 227, 227, 610, 546, 127, 94, - 58, 73, 74, 19, 227, 100, 64, 178, 226, 510, - 228, 226, 70, 228, 121, 226, 630, 228, 226, 226, - 228, 228, 636, 637, 638, 639, 121, 227, 828, 829, - 227, 845, 846, 227, 106, 206, 226, 226, 228, 228, - 827, 227, 856, 214, 215, 216, 217, 226, 226, 228, - 228, 1337, 227, 226, 225, 228, 206, 1104, 143, 226, - 132, 228, 227, 148, 214, 215, 216, 217, 227, 870, - 871, 163, 227, 130, 159, 225, 890, 223, 879, 880, - 881, 882, 883, 884, 169, 170, 178, 226, 1374, 228, - 227, 592, 706, 707, 708, 709, 710, 1383, 1384, 1385, - 1386, 1387, 1388, 1389, 1390, 163, 1392, 227, 193, 723, - 226, 226, 228, 228, 206, 916, 10, 226, 919, 228, - 178, 223, 214, 215, 216, 217, 1261, 928, 929, 930, - 931, 932, 933, 225, 222, 1568, 226, 1217, 228, 222, - 227, 130, 206, 181, 10, 107, 167, 761, 206, 763, - 214, 215, 216, 217, 781, 186, 214, 215, 216, 217, - 774, 225, 776, 85, 228, 50, 115, 225, 782, 983, - 52, 785, 107, 787, 788, 789, 790, 19, 115, 115, - 222, 795, 115, 810, 115, 799, 800, 111, 802, 1269, - 225, 228, 228, 226, 808, 52, 222, 1319, 179, 206, - 814, 828, 829, 820, 818, 227, 1286, 214, 215, 216, - 217, 828, 829, 827, 828, 829, 830, 23, 225, 227, - 834, 66, 836, 837, 58, 66, 227, 841, 88, 85, - 93, 1517, 211, 782, 153, 849, 850, 854, 1643, 191, - 158, 790, 85, 211, 211, 107, 226, 81, 125, 226, - 228, 868, 227, 1067, 108, 22, 870, 871, 228, 228, - 761, 52, 763, 228, 228, 879, 880, 881, 882, 883, - 884, 228, 74, 774, 1000, 106, 1002, 1003, 1004, 1005, - 1006, 1007, 227, 206, 1331, 834, 227, 836, 211, 212, - 213, 214, 215, 216, 217, 912, 228, 227, 227, 64, - 917, 918, 916, 228, 133, 919, 227, 808, 1263, 223, - 227, 1391, 1267, 228, 928, 929, 930, 931, 932, 933, - 224, 228, 227, 58, 227, 34, 35, 227, 227, 176, - 227, 227, 41, 228, 227, 227, 227, 1543, 227, 227, - 49, 1142, 222, 227, 845, 846, 227, 194, 57, 227, - 211, 227, 227, 62, 227, 856, 227, 971, 227, 227, - 974, 161, 227, 977, 73, 74, 1446, 94, 227, 227, - 130, 211, 206, 124, 83, 227, 227, 211, 212, 213, - 214, 215, 216, 217, 130, 50, 1000, 225, 1002, 1003, - 1004, 1005, 1006, 1007, 58, 228, 228, 106, 163, 227, - 1014, 1015, 111, 112, 228, 225, 227, 226, 1488, 1489, - 1189, 1025, 1026, 178, 1041, 1029, 228, 1223, 228, 228, - 228, 206, 34, 132, 228, 228, 135, 212, 213, 214, - 215, 216, 217, 228, 1514, 228, 27, 216, 1055, 1053, - 225, 206, 55, 124, 1399, 57, 115, 55, 206, 214, - 215, 216, 217, 201, 1409, 227, 214, 215, 216, 217, - 225, 73, 74, 1598, 227, 227, 1192, 225, 227, 66, - 971, 227, 82, 66, 1200, 50, 1025, 88, 1204, 10, - 1206, 115, 164, 1209, 1210, 1211, 1212, 1213, 1214, 1215, - 1216, 204, 54, 1219, 106, 204, 227, 226, 228, 1225, - 228, 113, 114, 206, 3, 228, 228, 6, 228, 228, - 13, 214, 215, 216, 217, 227, 227, 224, 17, 18, - 132, 20, 225, 228, 228, 24, 228, 206, 1142, 28, - 29, 30, 31, 228, 206, 214, 215, 216, 217, 211, - 212, 213, 214, 215, 216, 217, 225, 65, 228, 15, - 228, 228, 228, 225, 228, 58, 228, 1171, 228, 1173, - 228, 64, 228, 56, 150, 228, 1067, 70, 228, 1183, - 228, 228, 228, 228, 1188, 228, 228, 228, 1192, 228, - 37, 37, 199, 225, 227, 84, 1200, 227, 227, 227, - 1204, 227, 1206, 152, 44, 1209, 1210, 1211, 1212, 1213, - 1214, 1215, 1216, 87, 228, 1219, 228, 228, 228, 1223, - 228, 1225, 228, 228, 228, 90, 65, 464, 120, 228, - 1234, 1235, 1236, 1237, 1238, 1239, 1253, 228, 1255, 1355, - 226, 226, 205, 8, 1183, 227, 100, 225, 228, 1188, - 1254, 72, 206, 490, 97, 67, 1260, 211, 212, 213, - 214, 215, 216, 217, 222, 226, 228, 227, 6, 228, - 163, 225, 228, 228, 89, 1444, 1621, 228, 8, 168, - 1171, 228, 171, 172, 228, 178, 175, 176, 85, 178, - 179, 13, 151, 182, 107, 15, 228, 186, 187, 227, - 162, 190, 204, 192, 193, 194, 228, 227, 227, 120, - 199, 200, 228, 206, 226, 4, 222, 1334, 211, 212, - 213, 214, 215, 216, 217, 1329, 224, 228, 217, 220, - 220, 50, 225, 1337, 86, 84, 58, 1559, 226, 0, - 1456, 0, 64, 33, 259, 1035, 235, 559, 70, 238, - 807, 1355, 403, 384, 785, 244, 800, 787, 1226, 81, - 1573, 1032, 1454, 1254, 1568, 1587, 1588, 8, 1375, 1376, - 1374, 1551, 13, 1523, 1555, 1609, 1043, 830, 802, 1383, - 1384, 1385, 1386, 1387, 1388, 1389, 1390, 829, 1392, 27, - 1612, 14, 245, 610, 283, 391, 314, 1487, 1561, 636, - 637, 638, 639, 1591, 1486, 294, 196, 1041, 32, 296, - 1588, 404, 841, 1599, 1569, 1600, 1592, 58, 509, 1491, - 1323, 1618, 346, 64, 313, 514, 774, 316, 317, 70, - 1114, 510, 1436, 193, 1532, 1173, -1, -1, 1329, -1, - 81, 163, 331, -1, -1, -1, -1, 88, -1, -1, - -1, -1, 1456, -1, 1458, -1, 178, 346, -1, -1, - -1, -1, -1, -1, -1, -1, 1483, -1, -1, 706, - 707, 708, 709, 710, -1, -1, -1, -1, 1482, -1, - -1, 1485, -1, 1487, 206, -1, 723, 1491, -1, 211, - 212, 213, 214, 215, 216, 217, 385, 386, -1, -1, - -1, -1, -1, 225, -1, -1, 395, -1, -1, -1, - -1, -1, 401, 1517, -1, -1, -1, -1, -1, -1, - 409, -1, 163, -1, -1, 414, -1, -1, -1, 8, - -1, -1, 421, 422, 13, -1, -1, 178, 427, -1, - 1557, 430, 431, 1482, -1, 1436, 435, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 795, 1566, - 449, -1, 1566, -1, -1, 206, 18, 19, -1, -1, - 211, 212, 213, 214, 215, 216, 217, -1, -1, 58, - -1, -1, 34, 35, 225, 64, -1, 228, -1, 41, - -1, 70, 1609, -1, -1, -1, -1, 49, -1, 488, - -1, -1, 81, -1, -1, 57, -1, -1, -1, 88, - 62, 1618, -1, -1, 1618, -1, 1620, 506, -1, -1, - -1, 73, 74, 512, 76, 514, 78, -1, -1, -1, - -1, 83, 558, 870, 871, -1, -1, -1, -1, 1643, - -1, -1, 879, 880, 881, 882, 883, 884, -1, -1, - -1, -1, -1, -1, 106, -1, -1, 546, -1, 111, - 112, -1, -1, -1, -1, -1, -1, 13, 557, -1, - -1, -1, -1, -1, 126, -1, -1, 1568, -1, 916, - 132, -1, 919, 135, 163, -1, -1, -1, 334, -1, - -1, 928, 929, 930, 931, 932, 933, -1, -1, 178, - -1, -1, 348, 592, -1, 351, -1, 353, 354, 355, - 356, -1, 58, 602, -1, -1, -1, -1, 64, -1, - -1, 610, -1, -1, 70, -1, -1, 206, -1, -1, - -1, -1, 211, 212, 213, 214, 215, 216, 217, 191, - -1, 630, -1, -1, -1, -1, 225, -1, -1, 228, - -1, -1, 204, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 1000, -1, 1002, 1003, 1004, 1005, 1006, - 1007, -1, -1, 419, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1026, - -1, -1, -1, 439, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 729, -1, -1, -1, 733, 385, -1, - -1, 737, -1, -1, -1, 741, -1, 163, -1, 745, - -1, -1, 468, 749, -1, -1, -1, 753, -1, -1, - -1, 757, 178, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 489, -1, -1, -1, 493, -1, 495, - -1, -1, 498, 499, 500, 501, 502, 503, 504, 505, - 206, 507, -1, -1, -1, 211, 212, 213, 214, 215, - 216, 217, 761, -1, 763, -1, -1, -1, -1, 225, - -1, -1, -1, -1, -1, 774, -1, 776, -1, -1, - -1, -1, -1, 782, -1, -1, 785, -1, 787, 788, - 789, 790, -1, -1, -1, 1142, -1, -1, -1, -1, - 799, 800, -1, 802, -1, -1, -1, -1, -1, 808, - -1, -1, -1, -1, -1, 814, -1, -1, -1, 818, - -1, -1, -1, -1, -1, -1, -1, -1, 827, 828, - 829, 830, -1, -1, -1, 834, -1, 836, 837, -1, - -1, -1, 841, -1, -1, 1192, -1, -1, -1, 848, - 849, 850, -1, 1200, -1, -1, -1, 1204, -1, 1206, - -1, -1, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, - -1, -1, 1219, -1, -1, -1, -1, -1, 1225, -1, - -1, -1, -1, -1, -1, -1, 885, 1234, 1235, 1236, - 1237, 1238, 1239, -1, 650, -1, 652, 653, -1, -1, - -1, 937, -1, 659, -1, -1, -1, -1, 944, 945, - -1, 947, 948, 1260, 950, 951, -1, 953, 954, 13, - 956, 957, -1, 959, 960, -1, 962, 963, -1, 965, - 966, -1, 110, -1, -1, 934, -1, -1, 937, -1, - -1, -1, -1, 121, 8, 123, -1, -1, -1, 13, - 128, -1, -1, -1, -1, 711, 134, 135, -1, -1, - 138, -1, -1, -1, 58, -1, -1, -1, -1, 725, - 64, 149, 971, 729, -1, 974, 70, 733, 977, 157, - -1, 737, 160, -1, -1, 741, -1, -1, -1, 745, - 1337, -1, 991, 749, 58, -1, -1, 753, -1, -1, - 64, 757, 180, -1, -1, -1, 70, -1, 1355, -1, - 188, 189, -1, -1, -1, 1014, 1015, 81, -1, 197, - -1, -1, -1, -1, 88, -1, 1025, 1374, -1, -1, - 1029, -1, 13, -1, -1, -1, 1383, 1384, 1385, 1386, - 1387, 1388, 1389, 1390, -1, 1392, -1, -1, -1, -1, - -1, -1, -1, -1, 1053, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 163, - -1, -1, -1, -1, 1110, -1, -1, 58, 1114, -1, - -1, -1, -1, 64, 178, -1, -1, 774, -1, 70, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 163, - -1, -1, -1, 859, -1, -1, -1, 1143, 795, 1456, - -1, -1, 206, -1, 178, -1, -1, 873, 212, 213, - 214, 215, 216, 217, -1, -1, -1, -1, -1, -1, - -1, 225, -1, 889, -1, -1, -1, -1, -1, -1, - -1, -1, 206, -1, 1143, -1, -1, 211, 212, 213, - 214, 215, 216, 217, -1, -1, -1, 8, -1, -1, - -1, 225, 13, -1, 228, 921, -1, -1, 464, -1, - 1517, -1, 1171, -1, 1173, -1, -1, -1, -1, -1, - -1, -1, 163, -1, 1183, -1, -1, -1, -1, 1188, - -1, -1, -1, -1, 490, -1, -1, 178, -1, -1, - -1, -1, 1201, -1, -1, -1, -1, 58, -1, -1, - -1, -1, 968, 64, -1, -1, -1, 8, 1217, 70, - -1, -1, 13, -1, 1223, 206, -1, -1, -1, -1, - 81, 212, 213, 214, 215, 216, 217, 88, -1, -1, - -1, -1, -1, 1279, 225, -1, -1, 1283, -1, -1, - 937, -1, -1, -1, -1, 1254, 110, -1, -1, -1, - -1, 1260, -1, -1, -1, -1, -1, 58, -1, 123, - 1269, -1, -1, 64, 128, -1, -1, -1, -1, 70, - 134, 135, -1, -1, 138, -1, -1, 1286, -1, -1, - 81, -1, -1, -1, -1, 149, -1, 88, 1297, -1, - -1, -1, -1, 157, -1, -1, 160, -1, -1, -1, - -1, -1, 163, 1000, -1, 1002, 1003, 1004, 1005, 1006, - 1007, -1, -1, -1, -1, -1, 180, 178, 182, -1, - 1329, 1087, 1088, 1089, 188, 189, -1, -1, -1, 1026, - 636, 637, 638, 639, -1, -1, -1, -1, 1347, -1, - -1, -1, -1, -1, 1353, 206, -1, -1, 1114, -1, - 211, 212, 213, 214, 215, 216, 217, -1, 1124, 1125, - 1126, -1, 163, -1, 225, -1, -1, 228, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 178, -1, -1, - -1, -1, 1391, -1, -1, -1, -1, -1, -1, -1, + 170, 526, 6, 199, 800, 182, 972, 608, 25, 207, + 196, 978, 237, 17, 18, 222, 20, 618, 188, 389, + 24, 465, 810, 369, 28, 29, 30, 31, 846, 847, + 651, 409, 653, 654, 917, 1202, 508, 1246, 537, 857, + 1412, 1413, 6, 52, 18, 9, 1172, 245, 37, 50, + 24, 115, 20, 37, 28, 23, 5, 31, 7, 16, + 6, 38, 3, 124, 37, 52, 42, 37, 124, 8, + 514, 52, 6, 6, 1235, 1236, 1237, 1238, 1239, 1240, + 84, 37, 71, 51, 61, 6, 558, 37, 63, 124, + 183, 60, 38, 42, 47, 53, 708, 709, 710, 711, + 712, 38, 63, 320, 872, 124, 1494, 1495, 8, 873, + 84, 309, 82, 725, 38, 61, 333, 313, 238, 40, + 316, 1493, 222, 80, 61, 52, 94, 227, 81, 82, + 107, 142, 108, 91, 107, 13, 105, 1001, 52, 1003, + 1004, 1005, 1006, 1007, 1008, 122, 79, 211, 204, 356, + 1538, 108, 125, 121, 922, 637, 638, 639, 640, 923, + 101, 107, 95, 283, 168, 226, 119, 171, 172, 124, + 107, 175, 176, 142, 178, 179, 122, 1338, 182, 525, + 58, 202, 186, 187, 530, 122, 190, 1354, 192, 193, + 194, 226, 70, 228, 168, 199, 200, 124, 122, 140, + 1323, 115, 207, 1326, 1330, 179, 223, 226, 652, 228, + 215, 188, 186, 217, 1375, 156, 205, 226, 219, 1015, + 1016, 205, 160, 1384, 1385, 1386, 1387, 1388, 1389, 1390, + 1391, 235, 1393, 834, 238, 184, 1119, 171, 172, 226, + 244, 458, 188, 217, 178, 443, 444, 445, 222, 205, + 1068, 226, 450, 874, 1642, 205, 190, 85, 192, 227, + 606, 235, 99, 227, 462, 1637, 200, 206, 10, 73, + 244, 226, 110, 228, 207, 214, 215, 216, 217, 283, + 205, 1448, 215, 300, 57, 122, 225, 38, 137, 487, + 294, 489, 141, 36, 1261, 38, 124, 643, 797, 226, + 73, 47, 106, 924, 511, 1514, 206, 919, 205, 313, + 61, 207, 316, 317, 214, 215, 216, 217, 61, 931, + 932, 933, 934, 935, 936, 225, 223, 146, 224, 1193, + 216, 217, 147, 106, 204, 81, 82, 1201, 559, 225, + 357, 1205, 1509, 1207, 1511, 20, 1210, 1211, 1212, 1213, + 1214, 1215, 1216, 1217, 173, 110, 1220, 1518, 10, 174, + 294, 220, 1226, 13, 107, 382, 383, 384, 123, 715, + 10, 122, 542, 119, 182, 205, 51, 849, 47, 122, + 117, 385, 386, 581, 160, 583, 584, 585, 586, 871, + 36, 395, 38, 223, 131, 765, 413, 401, 880, 881, + 882, 883, 884, 885, 1287, 409, 776, 205, 58, 187, + 414, 385, 386, 82, 886, 61, 194, 421, 422, 94, + 70, 395, 47, 427, 58, 223, 430, 431, 815, 873, + 207, 435, 819, 176, 177, 1539, 1540, 815, 205, 195, + 196, 819, 204, 206, 888, 889, 121, 224, 422, 205, + 119, 214, 215, 216, 217, 899, 223, 82, 67, 1563, + 464, 107, 225, 1251, 206, 937, 96, 1088, 1089, 1090, + 85, 1437, 214, 215, 216, 217, 122, 222, 223, 923, + 223, 216, 217, 225, 227, 52, 490, 421, 492, 85, + 225, 58, 1356, 427, 119, 939, 430, 431, 538, 539, + 540, 226, 85, 64, 216, 217, 1127, 1128, 1129, 513, + 731, 515, 4, 225, 735, 133, 64, 9, 739, 1486, + 992, 1488, 743, 15, 731, 85, 747, 19, 735, 108, + 751, 177, 739, 1145, 755, 58, 743, 511, 759, 226, + 747, 228, 133, 547, 751, 133, 216, 217, 755, 139, + 216, 1076, 759, 220, 206, 225, 902, 1082, 81, 211, + 212, 213, 214, 215, 216, 217, 206, 227, 130, 216, + 217, 10, 206, 225, 214, 215, 216, 217, 225, 130, + 214, 215, 216, 217, 227, 225, 206, 204, 205, 593, + 207, 225, 209, 1457, 214, 215, 216, 217, 143, 603, + 10, 20, 163, 148, 206, 225, 25, 611, 228, 67, + 212, 213, 105, 547, 159, 163, 227, 178, 37, 593, + 226, 33, 228, 821, 169, 170, 226, 631, 228, 129, + 178, 829, 830, 637, 638, 639, 640, 226, 85, 846, + 847, 227, 207, 829, 830, 206, 227, 8, 193, 227, + 857, 828, 13, 214, 215, 216, 217, 855, 206, 34, + 127, 1105, 81, 226, 225, 228, 214, 215, 216, 217, + 226, 869, 228, 227, 226, 94, 228, 225, 207, 20, + 209, 100, 57, 206, 891, 226, 93, 228, 211, 212, + 213, 214, 215, 216, 217, 227, 37, 58, 73, 74, + 227, 227, 121, 64, 708, 709, 710, 711, 712, 70, + 581, 227, 583, 584, 585, 586, 226, 915, 228, 940, + 81, 725, 920, 921, 227, 19, 947, 948, 227, 950, + 951, 106, 953, 954, 223, 956, 957, 1262, 959, 960, + 81, 962, 963, 227, 965, 966, 1218, 968, 969, 227, + 226, 1569, 228, 94, 226, 223, 228, 132, 762, 100, + 764, 226, 226, 228, 228, 782, 226, 226, 228, 228, + 226, 775, 228, 777, 226, 130, 228, 984, 227, 783, + 121, 226, 786, 228, 788, 789, 790, 791, 762, 226, + 764, 228, 796, 226, 811, 228, 800, 801, 1270, 803, + 227, 775, 163, 10, 226, 809, 228, 222, 222, 227, + 206, 815, 829, 830, 130, 819, 1288, 178, 214, 215, + 216, 217, 181, 10, 828, 829, 830, 831, 107, 225, + 167, 835, 186, 837, 838, 809, 85, 50, 842, 115, + 52, 19, 107, 115, 115, 206, 850, 851, 1644, 783, + 211, 212, 213, 214, 215, 216, 217, 791, 1056, 115, + 115, 1068, 222, 111, 225, 228, 34, 871, 872, 225, + 228, 52, 846, 847, 226, 222, 880, 881, 882, 883, + 884, 885, 179, 857, 53, 227, 66, 23, 1332, 57, + 59, 227, 1113, 66, 1264, 227, 1117, 8, 1268, 85, + 69, 835, 13, 837, 88, 73, 74, 211, 77, 153, + 93, 191, 158, 85, 107, 919, 211, 226, 922, 211, + 1392, 90, 13, 228, 226, 1146, 125, 931, 932, 933, + 934, 935, 936, 1279, 103, 22, 227, 108, 106, 228, + 228, 228, 228, 1544, 52, 113, 114, 58, 106, 74, + 228, 120, 227, 64, 227, 222, 133, 227, 227, 70, + 228, 227, 13, 223, 132, 228, 228, 58, 972, 228, + 81, 975, 224, 64, 978, 1447, 206, 88, 228, 70, + 227, 211, 212, 213, 214, 215, 216, 217, 227, 227, + 227, 227, 227, 227, 227, 225, 227, 1001, 972, 1003, + 1004, 1005, 1006, 1007, 1008, 227, 227, 58, 227, 227, + 227, 1015, 1016, 64, 211, 58, 227, 1489, 1490, 70, + 1190, 227, 1026, 1027, 94, 1042, 1030, 206, 1224, 227, + 1400, 227, 211, 212, 213, 214, 215, 216, 217, 227, + 1410, 161, 227, 1515, 211, 227, 225, 206, 130, 228, + 1054, 227, 163, 212, 213, 214, 215, 216, 217, 124, + 1281, 227, 227, 227, 1285, 13, 225, 178, 130, 206, + 227, 225, 163, 50, 1599, 228, 228, 214, 215, 216, + 217, 228, 227, 58, 225, 227, 226, 178, 225, 228, + 228, 27, 1026, 228, 1068, 206, 228, 228, 228, 228, + 211, 212, 213, 214, 215, 216, 217, 228, 55, 216, + 58, 124, 163, 115, 225, 206, 64, 228, 3, 82, + 55, 6, 70, 214, 215, 216, 217, 178, 201, 227, + 227, 227, 17, 18, 225, 20, 66, 227, 227, 24, + 206, 1145, 66, 28, 29, 30, 31, 50, 214, 215, + 216, 217, 10, 115, 88, 206, 164, 204, 227, 225, + 211, 212, 213, 214, 215, 216, 217, 54, 1172, 228, + 1174, 228, 228, 228, 225, 228, 228, 227, 1376, 1377, + 1184, 227, 385, 206, 224, 1189, 228, 228, 65, 1193, + 228, 214, 215, 216, 217, 228, 228, 1201, 1172, 84, + 228, 1205, 225, 1207, 226, 15, 1210, 1211, 1212, 1213, + 1214, 1215, 1216, 1217, 228, 163, 1220, 228, 206, 228, + 1224, 228, 1226, 211, 212, 213, 214, 215, 216, 217, + 178, 1235, 1236, 1237, 1238, 1239, 1240, 1254, 228, 1256, + 56, 228, 228, 228, 228, 228, 228, 13, 228, 228, + 1184, 1255, 1622, 150, 228, 1189, 228, 1261, 206, 228, + 37, 464, 37, 211, 212, 213, 214, 215, 216, 217, + 199, 225, 227, 152, 227, 1445, 227, 225, 227, 44, + 87, 1255, 227, 168, 228, 228, 171, 172, 228, 492, + 175, 176, 58, 178, 179, 228, 228, 182, 64, 226, + 228, 186, 187, 228, 70, 190, 228, 192, 193, 194, + 228, 228, 90, 65, 199, 200, 120, 226, 1335, 176, + 8, 205, 227, 225, 100, 72, 1330, 228, 97, 67, + 222, 227, 217, 228, 1338, 1560, 226, 194, 6, 228, + 228, 89, 228, 8, 85, 228, 228, 228, 151, 8, + 235, 107, 1356, 238, 13, 15, 1330, 228, 227, 244, + 162, 204, 1569, 1588, 1589, 227, 227, 120, 228, 1567, + 4, 1375, 228, 226, 222, 224, 220, 228, 50, 220, + 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1613, 1393, + 86, 84, 226, 0, 0, 33, 259, 163, 283, 58, + 403, 1036, 808, 384, 560, 64, 786, 801, 1455, 294, + 788, 70, 178, 1227, 1033, 1552, 1574, 1524, 1556, 803, + 1610, 1619, 81, 1044, 27, 245, 831, 830, 313, 88, + 391, 316, 317, 1437, 637, 638, 639, 640, 14, 314, + 206, 611, 1488, 1562, 1592, 1487, 331, 110, 214, 215, + 216, 217, 196, 1457, 296, 1459, 1589, 1042, 121, 225, + 123, 346, 32, 1437, 1600, 128, 842, 1484, 1570, 1593, + 1601, 134, 135, 404, 510, 138, 1492, 1324, 1619, 1483, + 346, 1117, 1486, 193, 1488, 515, 149, 511, 1492, 1533, + 775, 1174, -1, -1, 157, -1, -1, 160, -1, -1, + 385, 386, -1, -1, 163, 708, 709, 710, 711, 712, + 395, -1, -1, -1, 1518, -1, 401, 180, -1, 178, + -1, -1, 725, -1, 409, 188, 189, -1, -1, 414, + -1, -1, -1, -1, 197, -1, 421, 422, -1, -1, + -1, 1558, 427, -1, -1, 430, 431, 206, -1, 1483, + 435, -1, 211, 212, 213, 214, 215, 216, 217, 13, + -1, -1, -1, 1567, 449, -1, 225, -1, -1, 228, + 8, -1, 775, -1, -1, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 706, 707, 708, 709, 710, 206, -1, -1, -1, -1, - 211, 212, 213, 214, 215, 216, 217, 723, -1, -1, - 1429, -1, -1, -1, 225, 226, -1, 1436, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1446, 1447, -1, - -1, -1, -1, -1, -1, 1454, 1143, -1, -1, 1458, + -1, -1, -1, 1610, -1, 1569, -1, -1, -1, -1, + -1, -1, -1, -1, 58, 490, -1, 464, -1, -1, + 64, -1, -1, -1, 8, 1619, 70, 1621, -1, 13, + 58, -1, -1, 508, -1, -1, 64, 81, 513, -1, + 515, -1, 70, -1, -1, 492, -1, -1, -1, -1, + 1644, 8, -1, 81, -1, -1, 13, -1, -1, -1, + 88, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 547, -1, 58, -1, -1, -1, 871, 872, + 64, -1, -1, 558, -1, -1, 70, 880, 881, 882, + 883, 884, 885, -1, -1, -1, -1, 81, -1, -1, + -1, 58, -1, -1, 88, -1, -1, 64, -1, -1, + -1, -1, -1, 70, -1, -1, -1, -1, 593, 163, + -1, -1, -1, -1, 81, -1, 919, -1, 603, 922, + -1, 88, -1, -1, 178, 163, 611, -1, 931, 932, + 933, 934, 935, 936, -1, -1, -1, -1, -1, -1, + 178, -1, -1, -1, -1, -1, 631, -1, -1, -1, + -1, -1, 206, -1, -1, -1, -1, 211, 212, 213, + 214, 215, 216, 217, -1, -1, -1, -1, 206, 163, + -1, 225, -1, 211, 212, 213, 214, 215, 216, 217, + 637, 638, 639, 640, 178, -1, -1, 225, -1, -1, + 228, -1, -1, -1, -1, -1, 163, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 178, 206, -1, -1, -1, -1, 211, 212, 213, + 214, 215, 216, 217, -1, -1, -1, -1, -1, -1, + -1, 225, -1, -1, 228, -1, -1, -1, -1, 206, + -1, -1, -1, -1, 211, 212, 213, 214, 215, 216, + 217, 708, 709, 710, 711, 712, -1, -1, 225, -1, + -1, 228, -1, -1, -1, -1, -1, -1, 725, -1, + -1, -1, -1, -1, -1, -1, -1, 762, -1, 764, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 775, -1, 777, -1, -1, -1, -1, -1, 783, -1, + -1, 786, -1, 788, 789, 790, 791, -1, -1, -1, + -1, -1, -1, -1, -1, 800, 801, -1, 803, -1, + -1, -1, -1, -1, 809, -1, -1, -1, -1, -1, + 815, -1, -1, -1, 819, 385, -1, -1, -1, 796, + -1, -1, 1145, 828, 829, 830, 831, -1, -1, -1, + 835, -1, 837, 838, -1, -1, 8, 842, -1, -1, + -1, 13, -1, -1, 849, 850, 851, -1, 34, 35, + -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, + -1, -1, -1, 49, -1, -1, -1, 8, -1, -1, + -1, 57, 13, -1, -1, -1, 62, -1, -1, -1, + -1, 886, -1, -1, -1, -1, 58, 73, 74, -1, + -1, -1, 64, -1, 871, 872, -1, 83, 70, -1, + -1, -1, -1, 880, 881, 882, 883, 884, 885, 81, + -1, -1, -1, -1, -1, -1, 88, 58, -1, -1, + 106, -1, -1, 64, -1, 111, 112, -1, -1, 70, + -1, -1, 937, -1, -1, 940, -1, -1, -1, -1, + 81, -1, 919, -1, -1, 922, 132, 88, -1, 135, + -1, -1, -1, -1, 931, 932, 933, 934, 935, 936, + -1, -1, -1, -1, -1, -1, -1, 972, -1, -1, + 975, -1, -1, 978, -1, -1, 334, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 992, -1, -1, + 348, 163, -1, 351, -1, 353, 354, 355, 356, -1, + -1, -1, -1, -1, -1, -1, 178, -1, -1, -1, + 1015, 1016, -1, -1, -1, -1, -1, -1, 204, -1, + -1, 1026, 163, -1, 1001, 1030, 1003, 1004, 1005, 1006, + 1007, 1008, -1, -1, 206, -1, -1, 178, -1, 211, + 212, 213, 214, 215, 216, 217, -1, -1, -1, 1054, + 1027, -1, -1, 225, 226, -1, -1, -1, -1, -1, + -1, 419, -1, -1, -1, 206, -1, -1, -1, -1, + 211, 212, 213, 214, 215, 216, 217, -1, -1, -1, + -1, 439, -1, -1, 225, 226, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 1482, -1, -1, 1485, -1, 1487, 1488, - 1489, -1, 1491, -1, -1, -1, -1, -1, -1, 795, - -1, -1, -1, -1, -1, 1192, -1, -1, -1, 1508, - -1, 1510, -1, 1200, 1201, 1514, 8, 1204, -1, 1206, - -1, 13, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, - -1, -1, 1219, -1, -1, -1, -1, -1, 1225, -1, - -1, -1, -1, -1, -1, -1, -1, 1234, 1235, 1236, - 1237, 1238, 1239, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 58, 1566, -1, -1, - -1, -1, 64, -1, 870, 871, 1332, -1, 70, -1, - -1, -1, -1, 879, 880, 881, 882, 883, 884, 81, - -1, -1, -1, -1, -1, -1, 88, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 8, -1, - 1297, -1, -1, 13, -1, -1, -1, -1, -1, 1618, - 916, 1620, -1, 919, -1, -1, -1, -1, -1, -1, - -1, -1, 928, 929, 930, 931, 932, 933, -1, -1, - -1, 937, -1, -1, 1643, -1, -1, -1, -1, -1, - 1337, -1, -1, -1, -1, -1, -1, -1, 58, -1, - 1347, -1, -1, -1, 64, -1, 1353, -1, 1355, -1, - 70, 163, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 81, -1, -1, -1, -1, 178, 1374, 88, -1, - -1, -1, -1, -1, -1, -1, 1383, 1384, 1385, 1386, - 1387, 1388, 1389, 1390, 1000, 1392, 1002, 1003, 1004, 1005, - 1006, 1007, -1, -1, 206, -1, -1, -1, -1, 211, - 212, 213, 214, 215, 216, 217, -1, -1, -1, -1, - 1026, -1, -1, 225, -1, -1, 228, -1, -1, -1, - -1, -1, 1429, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, + 468, -1, 11, -1, 13, -1, -1, -1, 476, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1447, -1, -1, 163, -1, -1, -1, 1454, -1, 1456, - -1, -1, -1, -1, -1, -1, -1, 8, 178, -1, - 11, -1, 13, -1, -1, -1, -1, -1, -1, -1, - 1546, -1, -1, -1, -1, -1, -1, -1, -1, 8, - -1, -1, -1, -1, 13, -1, 206, -1, 39, 1565, - -1, 211, 212, 213, 214, 215, 216, 217, -1, 8, - -1, 1508, -1, 1510, 13, 225, 226, 58, -1, -1, - 1517, -1, -1, 64, -1, -1, -1, -1, -1, 70, - -1, -1, -1, -1, 1600, -1, 1142, 1143, -1, 58, - 81, -1, -1, -1, -1, 64, -1, 88, -1, -1, - -1, 70, -1, 52, -1, -1, -1, -1, -1, 58, - -1, -1, 81, -1, -1, 64, -1, -1, -1, 88, - -1, 70, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 81, 124, -1, -1, 1192, -1, -1, 88, - -1, -1, -1, -1, 1200, 1201, -1, -1, 1204, -1, - 1206, -1, -1, 1209, 1210, 1211, 1212, 1213, 1214, 1215, - 1216, -1, -1, 1219, -1, -1, -1, -1, -1, 1225, - -1, -1, 163, -1, -1, -1, -1, -1, 1234, 1235, - 1236, 1237, 1238, 1239, -1, -1, -1, 178, -1, -1, - -1, -1, -1, -1, 163, -1, -1, -1, -1, -1, + 8, -1, -1, 491, -1, 13, -1, 495, -1, 497, + 39, 1146, 500, 501, 502, 503, 504, 505, 506, 507, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, + -1, -1, -1, -1, -1, 64, -1, 1172, 1145, 1174, + -1, 70, -1, -1, -1, -1, -1, -1, -1, 1184, + 58, -1, 81, -1, 1189, -1, 64, -1, -1, 88, + -1, -1, 70, -1, -1, -1, -1, 1202, -1, -1, + -1, -1, -1, 81, -1, 775, -1, -1, -1, -1, + 88, -1, -1, 1218, -1, -1, 1193, -1, -1, 1224, + -1, -1, -1, -1, 1201, 124, 796, -1, 1205, -1, + 1207, -1, -1, 1210, 1211, 1212, 1213, 1214, 1215, 1216, + 1217, -1, -1, 1220, -1, -1, -1, -1, -1, 1226, + 1255, -1, -1, -1, -1, -1, 1261, -1, 1235, 1236, + 1237, 1238, 1239, 1240, 163, 1270, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 178, - -1, -1, -1, -1, 163, 206, -1, -1, -1, -1, - 211, 212, 213, 214, 215, 216, 217, -1, -1, 178, - -1, -1, -1, -1, 225, -1, -1, 206, -1, -1, - -1, 1297, 211, 212, 213, 214, 215, 216, 217, -1, - 219, -1, -1, -1, -1, 224, 225, 206, -1, -1, + -1, -1, -1, 1288, 1261, 163, -1, -1, -1, -1, + -1, -1, -1, 651, 1299, 653, 654, -1, -1, -1, + 178, -1, -1, 661, -1, -1, -1, 206, -1, -1, -1, -1, 211, 212, 213, 214, 215, 216, 217, -1, - -1, -1, -1, -1, -1, -1, 225, -1, -1, -1, - -1, 1337, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1347, -1, -1, -1, -1, -1, 1353, -1, 1355, + -1, -1, 8, -1, 10, 1330, 225, 13, 206, -1, + -1, -1, -1, 211, 212, 213, 214, 215, 216, 217, + -1, 219, -1, 1348, -1, -1, 224, 225, -1, 1354, + -1, -1, -1, -1, -1, 713, -1, -1, -1, -1, + -1, 1338, -1, -1, -1, -1, -1, -1, -1, 727, + 940, -1, 58, 731, -1, -1, -1, 735, 64, 1356, + -1, 739, -1, -1, 70, 743, -1, 1392, -1, 747, + -1, 8, -1, 751, -1, 81, 13, 755, 1375, -1, + -1, 759, 88, -1, -1, -1, -1, 1384, 1385, 1386, + 1387, 1388, 1389, 1390, 1391, -1, 1393, -1, 13, -1, + -1, -1, -1, -1, -1, -1, 1431, -1, 464, -1, + -1, 1001, 1437, 1003, 1004, 1005, 1006, 1007, 1008, -1, + -1, 58, 1447, 1448, -1, -1, -1, 64, -1, -1, + 1455, -1, -1, 70, 1459, -1, 492, 1027, -1, -1, + -1, -1, -1, 58, 81, -1, -1, -1, -1, 64, + -1, 88, -1, -1, -1, 70, -1, 163, 1483, -1, + 1457, 1486, -1, 1488, 1489, 1490, -1, 1492, -1, -1, + -1, -1, 178, -1, 8, -1, -1, -1, -1, 13, + -1, -1, 860, -1, 1509, -1, 1511, -1, -1, -1, + 1515, -1, -1, 13, -1, -1, 874, -1, -1, -1, + 206, -1, -1, -1, -1, 211, 212, 213, 214, 215, + 216, 217, 890, -1, -1, -1, -1, -1, 52, 225, + -1, 1518, -1, 901, 58, -1, 163, -1, -1, -1, + 64, -1, -1, -1, -1, -1, 70, -1, 58, -1, + -1, 178, 1567, -1, 64, -1, 924, 81, 163, -1, + 70, -1, -1, -1, 88, -1, 1146, -1, -1, -1, + -1, -1, -1, 178, -1, -1, -1, -1, -1, 206, + -1, -1, -1, -1, 211, 212, 213, 214, 215, 216, + 217, 637, 638, 639, 640, -1, -1, 224, 225, -1, + -1, 206, -1, -1, 1619, -1, 1621, 212, 213, 214, + 215, 216, 217, 1193, -1, -1, -1, -1, -1, -1, + 225, 1201, 1202, -1, -1, 1205, -1, 1207, -1, 1644, + 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, -1, 163, + 1220, -1, -1, -1, -1, -1, 1226, -1, -1, -1, + -1, -1, -1, 163, 178, 1235, 1236, 1237, 1238, 1239, + 1240, -1, 708, 709, 710, 711, 712, -1, 178, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 725, + -1, -1, 206, -1, -1, -1, -1, 211, 212, 213, + 214, 215, 216, 217, -1, -1, 206, -1, -1, -1, + -1, 225, 212, 213, 214, 215, 216, 217, -1, -1, + -1, -1, -1, -1, -1, 225, -1, -1, -1, 1299, + 1088, 1089, 1090, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 1374, -1, - -1, -1, -1, -1, -1, -1, -1, 1383, 1384, 1385, - 1386, 1387, 1388, 1389, 1390, -1, 1392, -1, -1, -1, - 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 17, 18, 19, -1, -1, -1, - -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, - -1, 34, 35, 1429, -1, -1, -1, -1, 41, -1, - -1, -1, 45, 46, 47, -1, 49, -1, -1, -1, - -1, 1447, -1, -1, 57, -1, -1, 60, 1454, 62, - 1456, -1, -1, 66, 67, -1, -1, -1, -1, 72, - 73, 74, -1, 76, -1, 78, 79, -1, 81, 82, - 83, 84, -1, 86, 87, -1, -1, -1, -1, 92, - -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, - -1, -1, 105, 106, -1, -1, 109, -1, 111, 112, - 113, 114, 1508, -1, 1510, 118, 119, -1, -1, -1, - 123, 1517, -1, 126, -1, -1, -1, -1, -1, 132, - 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, - 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, - 153, -1, -1, 156, 157, 158, 159, 160, 161, 162, - 163, 164, -1, -1, 167, -1, 169, 170, -1, 172, - 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, -1, - 193, 194, 195, 196, 197, -1, -1, -1, 201, -1, - 203, 204, 205, 206, 207, 208, 209, 3, 4, -1, - -1, -1, 215, 216, -1, 218, 219, 220, -1, -1, - -1, 17, 18, 19, 227, 228, -1, -1, -1, -1, - -1, -1, 28, 29, 30, 31, 32, -1, 34, 35, - -1, -1, -1, -1, -1, 41, -1, -1, -1, 45, - 46, 47, -1, 49, -1, -1, -1, -1, -1, -1, - -1, 57, -1, -1, 60, -1, 62, -1, -1, -1, - 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, - 76, -1, 78, 79, -1, 81, 82, 83, 84, -1, - 86, 87, -1, -1, -1, -1, 92, -1, -1, 95, - 96, -1, -1, 99, -1, 101, -1, -1, -1, 105, - 106, -1, -1, 109, -1, 111, 112, 113, 114, -1, - -1, -1, 118, 119, -1, -1, -1, 123, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1117, + 796, -1, -1, -1, -1, -1, -1, -1, 1338, 1127, + 1128, 1129, -1, -1, -1, -1, -1, -1, 1348, -1, + -1, -1, -1, -1, 1354, -1, 1356, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1375, -1, -1, -1, -1, + -1, -1, -1, -1, 1384, 1385, 1386, 1387, 1388, 1389, + 1390, 1391, -1, 1393, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 871, 872, -1, -1, -1, + -1, -1, -1, -1, 880, 881, 882, 883, 884, 885, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1431, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1448, -1, + -1, -1, -1, 919, -1, 1455, 922, 1457, -1, -1, + -1, 18, 19, -1, -1, 931, 932, 933, 934, 935, + 936, -1, -1, -1, 940, -1, -1, 34, 35, -1, + -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, + -1, -1, 49, -1, -1, -1, -1, -1, -1, -1, + 57, -1, -1, -1, -1, 62, -1, -1, -1, 1509, + -1, 1511, -1, -1, -1, -1, 73, 74, 1518, 76, + -1, 78, -1, -1, -1, -1, 83, -1, 3, 4, + -1, -1, -1, -1, -1, 1001, -1, 1003, 1004, 1005, + 1006, 1007, 1008, 18, 19, 1333, -1, -1, -1, 106, + -1, -1, -1, -1, 111, 112, -1, -1, -1, 34, + 35, 1027, -1, -1, -1, -1, 41, -1, -1, 126, + -1, -1, -1, -1, 49, 132, -1, -1, 135, -1, + -1, -1, 57, -1, -1, 60, -1, -1, -1, -1, + -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, + -1, 76, -1, 78, 79, -1, -1, -1, 83, 84, + -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, + 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, + 105, 106, -1, 190, 191, -1, 111, -1, 113, 114, + -1, -1, -1, -1, -1, -1, -1, 204, -1, -1, + -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, + 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, + -1, 146, 147, 148, 149, 150, -1, 152, 153, 1145, + 1146, 156, 157, 158, 159, 160, 161, 162, 163, 164, + -1, -1, 167, -1, 169, 170, -1, -1, 173, 174, + -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, + -1, 186, 187, 188, 189, 190, -1, -1, 193, 194, + 195, 196, 197, -1, -1, -1, 201, 1193, 203, 204, + -1, -1, 8, -1, 10, 1201, 1202, 13, -1, 1205, + -1, 1207, -1, -1, 1210, 1211, 1212, 1213, 1214, 1215, + 1216, 1217, -1, 228, 1220, -1, -1, -1, -1, 1547, + 1226, -1, -1, -1, -1, -1, -1, -1, -1, 1235, + 1236, 1237, 1238, 1239, 1240, -1, -1, -1, 1566, -1, + -1, -1, 58, -1, -1, -1, -1, -1, 64, -1, + -1, -1, -1, -1, 70, -1, -1, -1, 18, 19, + -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, + -1, -1, 88, 1601, 34, 35, -1, -1, -1, -1, + -1, 41, -1, -1, -1, -1, -1, -1, -1, 49, + -1, -1, -1, 1299, -1, -1, -1, 57, -1, -1, + -1, -1, 62, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 73, 74, -1, 76, -1, 78, -1, + -1, -1, -1, 83, -1, -1, -1, -1, -1, -1, + -1, -1, 1338, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1348, -1, -1, -1, 106, 163, 1354, -1, + 1356, 111, 112, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 178, -1, -1, -1, 126, -1, -1, 1375, + -1, -1, 132, -1, -1, 135, -1, -1, 1384, 1385, + 1386, 1387, 1388, 1389, 1390, 1391, -1, 1393, -1, -1, + 206, 3, 4, -1, -1, 211, 212, 213, 214, 215, + 216, 217, -1, -1, -1, 17, 18, 19, -1, 225, + -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, + 32, -1, 34, 35, -1, 1431, -1, -1, -1, 41, + -1, 191, -1, 45, 46, 47, -1, 49, -1, -1, + -1, -1, 1448, -1, 204, 57, -1, -1, 60, 1455, + 62, 1457, -1, -1, 66, 67, -1, -1, -1, -1, + 72, 73, 74, -1, 76, -1, 78, 79, -1, 81, + 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, + 92, -1, -1, 95, 96, -1, -1, 99, -1, 101, + -1, -1, -1, 105, 106, -1, -1, 109, -1, 111, + 112, 113, 114, 1509, -1, 1511, 118, 119, -1, -1, + -1, 123, 1518, -1, 126, -1, -1, -1, -1, -1, + 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, + -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, + 152, 153, -1, -1, 156, 157, 158, 159, 160, 161, + 162, 163, 164, -1, -1, 167, -1, 169, 170, -1, + 172, 173, 174, -1, 176, -1, 178, 179, 180, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + -1, 193, 194, 195, 196, 197, -1, -1, -1, 201, + -1, 203, 204, 205, 206, 207, 208, 209, 3, 4, + -1, -1, -1, 215, 216, -1, 218, 219, 220, -1, + -1, -1, 17, 18, 19, 227, 228, -1, -1, -1, + -1, -1, -1, 28, 29, 30, 31, 32, -1, 34, + 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, + 45, 46, 47, -1, 49, -1, -1, -1, -1, -1, + -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, + -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, + -1, 76, -1, 78, 79, -1, 81, 82, 83, 84, + -1, 86, 87, -1, -1, -1, -1, 92, -1, -1, + 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, + 105, 106, -1, -1, 109, -1, 111, 112, 113, 114, + -1, -1, -1, 118, 119, -1, -1, -1, 123, -1, + -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, + 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, + -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, + -1, 156, 157, 158, 159, 160, 161, 162, 163, 164, + -1, -1, 167, -1, 169, 170, -1, 172, 173, 174, + -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, + -1, 186, 187, 188, 189, 190, 191, -1, 193, 194, + 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, + 205, 206, 207, 208, 209, 3, 4, -1, -1, -1, + 215, -1, -1, 218, 219, 220, -1, -1, -1, 17, + 18, 19, 227, 228, -1, -1, -1, -1, -1, -1, + 28, 29, 30, 31, 32, -1, 34, 35, -1, -1, + -1, -1, -1, 41, -1, -1, -1, 45, 46, 47, + -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, + -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, + -1, -1, -1, -1, 72, 73, 74, -1, 76, -1, + 78, 79, -1, 81, 82, 83, 84, -1, 86, 87, + -1, -1, -1, -1, 92, -1, -1, 95, 96, -1, + -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, + -1, 109, -1, 111, 112, 113, 114, -1, -1, -1, + 118, 119, -1, -1, -1, 123, -1, -1, 126, -1, + -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, + 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, + 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, + 158, 159, 160, 161, 162, 163, 164, -1, -1, 167, + -1, 169, 170, -1, 172, 173, 174, -1, 176, -1, + 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, + 188, 189, 190, 191, -1, 193, 194, 195, 196, 197, + -1, -1, -1, 201, -1, 203, 204, 205, 206, 207, + 208, 209, 3, 4, -1, -1, -1, 215, -1, -1, + 218, 219, 220, -1, -1, -1, 17, 18, 19, 227, + 228, -1, -1, -1, -1, -1, -1, -1, 29, 30, + 31, 32, -1, 34, 35, -1, -1, -1, -1, -1, + 41, -1, -1, -1, -1, -1, 47, -1, 49, -1, + -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, + -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, + -1, 72, 73, 74, -1, 76, -1, 78, 79, -1, + -1, -1, 83, 84, -1, 86, 87, -1, -1, -1, + -1, -1, -1, -1, 95, 96, -1, -1, 99, -1, + 101, -1, -1, -1, 105, 106, -1, -1, -1, -1, + 111, 112, 113, 114, -1, -1, -1, -1, 119, -1, + -1, -1, 123, -1, -1, 126, -1, -1, -1, -1, + -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, + 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, + -1, 152, 153, -1, -1, 156, 157, 158, 159, 160, + 161, 162, 163, 164, -1, -1, 167, -1, 169, 170, + -1, -1, 173, 174, -1, 176, -1, 178, 179, 180, + 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, + 191, -1, 193, 194, 195, 196, 197, 3, 4, -1, + 201, -1, 203, 204, 205, 206, 207, 208, 209, -1, + -1, 17, 18, 19, 215, -1, -1, 218, 219, 220, + -1, -1, -1, -1, 110, -1, 227, 228, 34, 35, + -1, -1, -1, -1, -1, 41, -1, 123, -1, -1, + -1, 47, 128, 49, -1, -1, -1, -1, 134, 135, + -1, 57, 138, -1, 60, -1, 62, -1, -1, -1, + 66, 67, -1, 149, -1, -1, 72, 73, 74, -1, + 76, 157, 78, 79, 160, 81, 82, 83, 84, -1, + 86, 87, -1, -1, -1, -1, -1, -1, -1, 95, + 96, -1, -1, 99, 180, 101, 182, -1, -1, 105, + 106, -1, 188, 189, -1, 111, 112, 113, 114, -1, + -1, -1, -1, 119, -1, -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, 160, 161, 162, 163, 164, -1, - -1, 167, -1, 169, 170, -1, 172, 173, 174, -1, + -1, 167, -1, 169, 170, -1, -1, 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, -1, 193, 194, 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, 205, 206, 207, 208, 209, 3, 4, -1, -1, -1, 215, - -1, -1, 218, 219, 220, -1, -1, -1, 17, 18, + -1, -1, 218, 219, 220, 14, -1, -1, 17, 18, 19, 227, 228, -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, 45, 46, 47, -1, - 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, - -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, + 49, -1, -1, 52, -1, -1, -1, -1, 57, -1, + -1, 60, -1, 62, -1, -1, -1, 66, 67, 68, -1, -1, -1, 72, 73, 74, -1, 76, -1, 78, 79, -1, 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, 92, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, -1, - 109, -1, 111, 112, 113, 114, -1, -1, -1, 118, + 109, -1, 111, 112, 113, 114, -1, 116, -1, 118, 119, -1, -1, -1, 123, -1, -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, @@ -3390,149 +3463,174 @@ static const short yycheck[] = { 3, 189, 190, 191, -1, 193, 194, 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, 205, 206, 207, 208, 209, 3, 4, -1, -1, -1, 215, -1, -1, 218, - 219, 220, -1, -1, -1, 17, 18, 19, 227, 228, - -1, -1, -1, -1, -1, -1, -1, 29, 30, 31, + 219, 220, 14, -1, -1, 17, 18, 19, 227, -1, + -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, -1, 34, 35, -1, -1, -1, -1, -1, 41, - -1, -1, -1, -1, -1, 47, -1, 49, -1, -1, - -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, - 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, - 72, 73, 74, -1, 76, -1, 78, 79, -1, -1, - -1, 83, 84, -1, 86, 87, -1, -1, -1, -1, - -1, -1, -1, 95, 96, -1, -1, 99, -1, 101, - -1, -1, -1, 105, 106, -1, -1, -1, -1, 111, - 112, 113, 114, -1, -1, -1, -1, 119, -1, -1, + -1, -1, -1, 45, 46, 47, -1, 49, -1, -1, + 52, -1, -1, -1, -1, 57, -1, -1, 60, -1, + 62, -1, -1, -1, 66, 67, 68, -1, -1, -1, + 72, 73, 74, -1, 76, -1, 78, 79, -1, 81, + 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, + 92, -1, -1, 95, 96, -1, -1, 99, -1, 101, + -1, -1, -1, 105, 106, -1, -1, 109, -1, 111, + 112, 113, 114, -1, 116, -1, 118, 119, -1, -1, -1, 123, -1, -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, 160, 161, 162, 163, 164, -1, -1, 167, -1, 169, 170, -1, - -1, 173, 174, -1, 176, -1, 178, 179, 180, 181, + 172, 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, - -1, 193, 194, 195, 196, 197, 3, 4, -1, 201, - -1, 203, 204, 205, 206, 207, 208, 209, -1, -1, - 17, 18, 19, 215, -1, -1, 218, 219, 220, -1, - -1, -1, -1, -1, -1, 227, 228, 34, 35, -1, - -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, - 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, - 57, -1, -1, 60, -1, 62, -1, -1, -1, 66, - 67, -1, -1, -1, -1, 72, 73, 74, -1, 76, - -1, 78, 79, -1, 81, 82, 83, 84, -1, 86, - 87, -1, -1, -1, -1, -1, -1, -1, 95, 96, - -1, -1, 99, -1, 101, -1, -1, -1, 105, 106, - -1, -1, -1, -1, 111, 112, 113, 114, -1, -1, - -1, -1, 119, -1, -1, -1, -1, -1, -1, 126, - -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, - 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, - 147, 148, 149, 150, -1, 152, 153, -1, -1, 156, - 157, 158, 159, 160, 161, 162, 163, 164, -1, -1, - 167, -1, 169, 170, -1, -1, 173, 174, -1, 176, - -1, 178, 179, 180, 181, 182, 183, 184, -1, 186, - 187, 188, 189, 190, 191, -1, 193, 194, 195, 196, - 197, 3, 4, -1, 201, -1, 203, 204, 205, 206, - 207, 208, 209, -1, -1, -1, 18, 19, 215, -1, - -1, 218, 219, 220, -1, -1, -1, -1, -1, -1, - 227, 228, 34, 35, -1, -1, -1, -1, -1, 41, - -1, -1, -1, -1, -1, -1, -1, 49, -1, -1, + -1, 193, 194, 195, 196, 197, -1, -1, -1, 201, + -1, 203, 204, 205, 206, 207, 208, 209, 3, 4, + -1, -1, -1, 215, -1, -1, 218, 219, 220, 14, + -1, -1, 17, 18, 19, 227, -1, -1, -1, -1, + -1, -1, -1, 28, 29, 30, 31, 32, -1, 34, + 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, + 45, 46, 47, -1, 49, -1, -1, 52, -1, -1, + -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, + -1, 66, 67, 68, -1, -1, -1, 72, 73, 74, + -1, 76, -1, 78, 79, -1, 81, 82, 83, 84, + -1, 86, 87, -1, -1, -1, -1, 92, -1, -1, + 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, + 105, 106, -1, -1, 109, -1, 111, 112, 113, 114, + -1, 116, -1, 118, 119, -1, -1, -1, 123, -1, + -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, + 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, + -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, + -1, 156, 157, 158, 159, 160, 161, 162, 163, 164, + -1, -1, 167, -1, 169, 170, -1, 172, 173, 174, + -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, + -1, 186, 187, 188, 189, 190, 191, -1, 193, 194, + 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, + 205, 206, 207, 208, 209, 3, 4, -1, -1, -1, + 215, -1, -1, 218, 219, 220, -1, -1, -1, 17, + 18, 19, 227, -1, -1, -1, -1, -1, -1, -1, + 28, 29, 30, 31, 32, -1, 34, 35, -1, -1, + -1, -1, -1, 41, -1, -1, -1, 45, 46, 47, + -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, + -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, + -1, -1, -1, -1, 72, 73, 74, -1, 76, -1, + 78, 79, -1, 81, 82, 83, 84, -1, 86, 87, + -1, -1, -1, -1, 92, -1, -1, 95, 96, -1, + -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, + -1, 109, -1, 111, 112, 113, 114, -1, -1, -1, + 118, 119, -1, -1, -1, 123, -1, -1, 126, -1, + -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, + 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, + 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, + 158, 159, 160, 161, 162, 163, 164, -1, -1, 167, + -1, 169, 170, -1, 172, 173, 174, -1, 176, -1, + 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, + 188, 189, 190, 191, -1, 193, 194, 195, 196, 197, + -1, -1, -1, 201, -1, 203, 204, 205, 206, 207, + 208, 209, -1, -1, -1, -1, -1, 215, 216, -1, + 218, 219, 220, -1, 3, 4, -1, 6, -1, 227, + 9, -1, -1, -1, -1, -1, -1, -1, 17, 18, + 19, -1, -1, -1, -1, -1, -1, -1, -1, 28, + 29, 30, 31, 32, -1, 34, 35, -1, -1, -1, + -1, -1, 41, -1, -1, -1, 45, 46, 47, -1, + 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, + -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, + -1, -1, -1, 72, 73, 74, -1, 76, -1, 78, + 79, -1, 81, -1, 83, 84, -1, 86, 87, -1, + -1, -1, -1, 92, -1, -1, 95, 96, -1, -1, + 99, -1, 101, -1, -1, -1, 105, 106, -1, -1, + 109, -1, 111, 112, 113, 114, -1, -1, -1, 118, + 119, -1, -1, -1, 123, -1, -1, 126, -1, -1, + -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, + -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, + 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, + 159, 160, 161, 162, 163, 164, -1, -1, 167, -1, + 169, 170, -1, 172, 173, 174, -1, 176, -1, 178, + 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, -1, 193, 194, 195, 196, 197, -1, + -1, -1, 201, -1, 203, 204, 205, 206, 207, 208, + 209, 3, 4, -1, 6, -1, 215, 9, -1, 218, + 219, 220, -1, -1, -1, 17, 18, 19, 227, -1, + -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, + 32, -1, 34, 35, -1, -1, -1, -1, -1, 41, + -1, -1, -1, 45, 46, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, - -1, -1, -1, -1, 66, 67, -1, -1, -1, -1, - 72, 73, 74, -1, 76, -1, 78, 79, -1, -1, + 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, + 72, 73, 74, -1, 76, -1, 78, 79, -1, 81, -1, 83, 84, -1, 86, 87, -1, -1, -1, -1, - -1, -1, -1, 95, 96, -1, -1, 99, -1, 101, - -1, -1, -1, 105, 106, -1, -1, -1, -1, 111, - -1, 113, 114, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, + 92, -1, -1, 95, 96, -1, -1, 99, -1, 101, + -1, -1, -1, 105, 106, -1, -1, 109, -1, 111, + 112, 113, 114, -1, -1, -1, 118, 119, -1, -1, + -1, 123, -1, -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, 160, 161, 162, 163, 164, -1, -1, 167, -1, 169, 170, -1, - -1, 173, 174, -1, 176, -1, 178, 179, 180, 181, - 182, 183, 184, -1, 186, 187, 188, 189, 190, 3, - 4, 193, 194, 195, 196, 197, -1, -1, -1, 201, - 14, 203, 204, 17, 18, 19, -1, -1, -1, -1, - -1, -1, -1, -1, 28, 29, 30, 31, 32, -1, - 34, 35, -1, -1, -1, -1, 228, 41, -1, -1, - -1, 45, 46, 47, -1, 49, -1, -1, 52, -1, - -1, -1, -1, 57, -1, -1, 60, -1, 62, -1, - -1, -1, 66, 67, 68, -1, -1, -1, 72, 73, - 74, -1, 76, -1, 78, 79, -1, 81, 82, 83, - 84, -1, 86, 87, -1, -1, -1, -1, 92, -1, - -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, - -1, 105, 106, -1, -1, 109, -1, 111, 112, 113, - 114, -1, 116, -1, 118, 119, -1, -1, -1, 123, - -1, -1, 126, -1, -1, -1, -1, -1, 132, 133, - 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, - -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, - -1, -1, 156, 157, 158, 159, 160, 161, 162, 163, - 164, -1, -1, 167, -1, 169, 170, -1, 172, 173, - 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, - 184, -1, 186, 187, 188, 189, 190, 191, -1, 193, - 194, 195, 196, 197, -1, -1, -1, 201, -1, 203, - 204, 205, 206, 207, 208, 209, 3, 4, -1, -1, - -1, 215, -1, -1, 218, 219, 220, 14, -1, -1, - 17, 18, 19, 227, -1, -1, -1, -1, -1, -1, - -1, 28, 29, 30, 31, 32, -1, 34, 35, -1, - -1, -1, -1, -1, 41, -1, -1, -1, 45, 46, - 47, -1, 49, -1, -1, 52, -1, -1, -1, -1, - 57, -1, -1, 60, -1, 62, -1, -1, -1, 66, - 67, 68, -1, -1, -1, 72, 73, 74, -1, 76, - -1, 78, 79, -1, 81, 82, 83, 84, -1, 86, - 87, -1, -1, -1, -1, 92, -1, -1, 95, 96, - -1, -1, 99, -1, 101, -1, -1, -1, 105, 106, - -1, -1, 109, -1, 111, 112, 113, 114, -1, 116, - -1, 118, 119, -1, -1, -1, 123, -1, -1, 126, - -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, - 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, - 147, 148, 149, 150, -1, 152, 153, -1, -1, 156, - 157, 158, 159, 160, 161, 162, 163, 164, -1, -1, - 167, -1, 169, 170, -1, 172, 173, 174, -1, 176, - -1, 178, 179, 180, 181, 182, 183, 184, -1, 186, - 187, 188, 189, 190, 191, -1, 193, 194, 195, 196, - 197, -1, -1, -1, 201, -1, 203, 204, 205, 206, - 207, 208, 209, 3, 4, -1, -1, -1, 215, -1, - -1, 218, 219, 220, 14, -1, -1, 17, 18, 19, - 227, -1, -1, -1, -1, -1, -1, -1, 28, 29, - 30, 31, 32, -1, 34, 35, -1, -1, -1, -1, - -1, 41, -1, -1, -1, 45, 46, 47, -1, 49, - -1, -1, 52, -1, -1, -1, -1, 57, -1, -1, - 60, -1, 62, -1, -1, -1, 66, 67, 68, -1, - -1, -1, 72, 73, 74, -1, 76, -1, 78, 79, - -1, 81, 82, 83, 84, -1, 86, 87, -1, -1, - -1, -1, 92, -1, -1, 95, 96, -1, -1, 99, - -1, 101, -1, -1, -1, 105, 106, -1, -1, 109, - -1, 111, 112, 113, 114, -1, 116, -1, 118, 119, - -1, -1, -1, 123, -1, -1, 126, -1, -1, -1, - -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, - 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, - 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, - 160, 161, 162, 163, 164, -1, -1, 167, -1, 169, - 170, -1, 172, 173, 174, -1, 176, -1, 178, 179, - 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, - 190, 191, -1, 193, 194, 195, 196, 197, -1, -1, - -1, 201, -1, 203, 204, 205, 206, 207, 208, 209, - 3, 4, -1, -1, -1, 215, -1, -1, 218, 219, - 220, -1, -1, -1, 17, 18, 19, 227, -1, -1, - -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, - -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, - -1, -1, 45, 46, 47, -1, 49, -1, -1, -1, - -1, -1, -1, -1, 57, -1, -1, 60, -1, 62, - -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, - 73, 74, -1, 76, -1, 78, 79, -1, 81, 82, - 83, 84, -1, 86, 87, -1, -1, -1, -1, 92, - -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, - -1, -1, 105, 106, -1, -1, 109, -1, 111, 112, - 113, 114, -1, -1, -1, 118, 119, -1, -1, -1, - 123, -1, -1, 126, -1, -1, -1, -1, -1, 132, - 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, - 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, - 153, -1, -1, 156, 157, 158, 159, 160, 161, 162, - 163, 164, -1, -1, 167, -1, 169, 170, -1, 172, - 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, -1, - 193, 194, 195, 196, 197, -1, -1, -1, 201, -1, - 203, 204, 205, 206, 207, 208, 209, -1, -1, -1, - -1, -1, 215, 216, -1, 218, 219, 220, -1, 3, - 4, -1, 6, -1, 227, 9, -1, -1, -1, -1, - -1, -1, -1, 17, 18, 19, -1, -1, -1, -1, + 172, 173, 174, -1, 176, -1, 178, 179, 180, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + -1, 193, 194, 195, 196, 197, -1, -1, -1, 201, + -1, 203, 204, 205, 206, 207, 208, 209, 3, 4, + -1, 6, -1, 215, 9, -1, 218, 219, 220, -1, + -1, -1, 17, 18, 19, 227, -1, -1, -1, -1, + -1, -1, -1, 28, 29, 30, 31, 32, -1, 34, + 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, + 45, 46, 47, -1, 49, -1, -1, -1, -1, -1, + -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, + -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, + -1, 76, -1, 78, 79, -1, 81, -1, 83, 84, + -1, 86, 87, -1, -1, -1, -1, 92, -1, -1, + 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, + 105, 106, -1, -1, 109, -1, 111, 112, 113, 114, + -1, -1, -1, 118, 119, -1, -1, -1, 123, -1, + -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, + 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, + -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, + -1, 156, 157, 158, 159, 160, 161, 162, 163, 164, + -1, -1, 167, -1, 169, 170, -1, 172, 173, 174, + -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, + -1, 186, 187, 188, 189, 190, 191, -1, 193, 194, + 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, + 205, 206, 207, 208, 209, 3, 4, -1, 6, -1, + 215, 9, -1, 218, 219, 220, -1, -1, -1, 17, + 18, 19, 227, -1, -1, -1, -1, -1, -1, -1, + 28, 29, 30, 31, 32, -1, 34, 35, -1, -1, + -1, -1, -1, 41, -1, -1, -1, 45, 46, 47, + -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, + -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, + -1, -1, -1, -1, 72, 73, 74, -1, 76, -1, + 78, 79, -1, 81, -1, 83, 84, -1, 86, 87, + -1, -1, -1, -1, 92, -1, -1, 95, 96, -1, + -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, + -1, 109, -1, 111, 112, 113, 114, -1, -1, -1, + 118, 119, -1, -1, -1, 123, -1, -1, 126, -1, + -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, + 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, + 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, + 158, 159, 160, 161, 162, 163, 164, -1, -1, 167, + -1, 169, 170, -1, 172, 173, 174, -1, 176, -1, + 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, + 188, 189, 190, 191, -1, 193, 194, 195, 196, 197, + -1, -1, -1, 201, -1, 203, 204, 205, 206, 207, + 208, 209, 3, 4, -1, 6, -1, 215, 9, -1, + 218, 219, 220, -1, -1, -1, 17, 18, 19, 227, + -1, -1, -1, -1, -1, -1, -1, 28, 29, 30, + 31, 32, -1, 34, 35, -1, -1, -1, -1, -1, + 41, -1, -1, -1, 45, 46, 47, -1, 49, -1, + -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, + -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, + -1, 72, 73, 74, -1, 76, -1, 78, 79, -1, + 81, -1, 83, 84, -1, 86, 87, -1, -1, -1, + -1, 92, -1, -1, 95, 96, -1, -1, 99, -1, + 101, -1, -1, -1, 105, 106, -1, -1, 109, -1, + 111, 112, 113, 114, -1, -1, -1, 118, 119, -1, + -1, -1, 123, -1, -1, 126, -1, -1, -1, -1, + -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, + 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, + -1, 152, 153, -1, -1, 156, 157, 158, 159, 160, + 161, 162, 163, 164, -1, -1, 167, -1, 169, 170, + -1, 172, 173, 174, -1, 176, -1, 178, 179, 180, + 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, + 191, -1, 193, 194, 195, 196, 197, -1, -1, -1, + 201, -1, 203, 204, 205, 206, 207, 208, 209, 3, + 4, -1, 6, -1, 215, 9, -1, 218, 219, 220, + -1, -1, -1, 17, 18, 19, 227, -1, -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, 45, 46, 47, -1, 49, -1, -1, -1, -1, @@ -3572,15 +3670,15 @@ static const short yycheck[] = { 3, -1, 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, -1, 193, 194, 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, 205, 206, - 207, 208, 209, 3, 4, -1, 6, -1, 215, 9, + 207, 208, 209, 3, 4, -1, -1, -1, 215, -1, -1, 218, 219, 220, -1, -1, -1, 17, 18, 19, 227, -1, -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, 45, 46, 47, -1, 49, - -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, + -1, -1, 52, -1, -1, -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, 76, -1, 78, 79, - -1, 81, -1, 83, 84, -1, 86, 87, -1, -1, + -1, 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, 92, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, -1, 109, -1, 111, 112, 113, 114, -1, -1, -1, 118, 119, @@ -3593,17 +3691,17 @@ static const short yycheck[] = { 3, 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, -1, 193, 194, 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, 205, 206, 207, 208, 209, - 3, 4, -1, 6, -1, 215, 9, -1, 218, 219, + 3, 4, -1, -1, -1, 215, -1, -1, 218, 219, 220, -1, -1, -1, 17, 18, 19, 227, -1, -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, 45, 46, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, - 73, 74, -1, 76, -1, 78, 79, -1, 81, -1, + 73, 74, -1, 76, -1, 78, 79, -1, 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, 92, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, - -1, -1, 105, 106, -1, -1, 109, -1, 111, 112, + -1, -1, 105, 106, 107, -1, 109, -1, 111, 112, 113, 114, -1, -1, -1, 118, 119, -1, -1, -1, 123, -1, -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, @@ -3614,14 +3712,14 @@ static const short yycheck[] = { 3, 183, 184, -1, 186, 187, 188, 189, 190, 191, -1, 193, 194, 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, 205, 206, 207, 208, 209, 3, 4, -1, - 6, -1, 215, 9, -1, 218, 219, 220, -1, -1, + -1, -1, 215, -1, -1, 218, 219, 220, -1, -1, -1, 17, 18, 19, 227, -1, -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, 45, 46, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, - 76, -1, 78, 79, -1, 81, -1, 83, 84, -1, + 76, -1, 78, 79, -1, 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, 92, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, -1, 109, -1, 111, 112, 113, 114, -1, @@ -3642,7 +3740,7 @@ static const short yycheck[] = { 3, 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, 76, -1, 78, - 79, -1, 81, -1, 83, 84, -1, 86, 87, -1, + 79, -1, -1, -1, 83, 84, -1, 86, 87, -1, -1, -1, -1, 92, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, -1, 109, -1, 111, 112, 113, 114, -1, -1, -1, 118, @@ -3655,7 +3753,7 @@ static const short yycheck[] = { 3, 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, -1, 193, 194, 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, 205, 206, 207, 208, - 209, 3, 4, -1, 6, -1, 215, 9, -1, 218, + 209, 3, 4, -1, -1, -1, 215, -1, -1, 218, 219, 220, -1, -1, -1, 17, 18, 19, 227, -1, -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, -1, 34, 35, -1, -1, -1, -1, -1, 41, @@ -3665,7 +3763,7 @@ static const short yycheck[] = { 3, 72, 73, 74, -1, 76, -1, 78, 79, -1, 81, -1, 83, 84, -1, 86, 87, -1, -1, -1, -1, 92, -1, -1, 95, 96, -1, -1, 99, -1, 101, - -1, -1, -1, 105, 106, -1, -1, 109, -1, 111, + -1, -1, -1, 105, 106, 107, -1, 109, -1, 111, 112, 113, 114, -1, -1, -1, 118, 119, -1, -1, -1, 123, -1, -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, @@ -3680,10 +3778,10 @@ static const short yycheck[] = { 3, -1, -1, 17, 18, 19, 227, -1, -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, - 45, 46, 47, -1, 49, -1, -1, 52, -1, -1, + 45, 46, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, - -1, 76, -1, 78, 79, -1, 81, 82, 83, 84, + -1, 76, -1, 78, 79, -1, 81, -1, 83, 84, -1, 86, 87, -1, -1, -1, -1, 92, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, -1, 109, -1, 111, 112, 113, 114, @@ -3700,13 +3798,13 @@ static const short yycheck[] = { 3, 215, -1, -1, 218, 219, 220, -1, -1, -1, 17, 18, 19, 227, -1, -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, -1, 34, 35, -1, -1, - -1, -1, -1, 41, -1, -1, -1, 45, 46, 47, + -1, -1, -1, 41, -1, -1, -1, -1, -1, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, 76, -1, - 78, 79, -1, 81, 82, 83, 84, -1, 86, 87, + 78, 79, -1, -1, -1, 83, 84, -1, 86, 87, -1, -1, -1, -1, 92, -1, -1, 95, 96, -1, - -1, 99, -1, 101, -1, -1, -1, 105, 106, 107, + -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, -1, 109, -1, 111, 112, 113, 114, -1, -1, -1, 118, 119, -1, -1, -1, 123, -1, -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, @@ -3721,11 +3819,11 @@ static const short yycheck[] = { 3, 218, 219, 220, -1, -1, -1, 17, 18, 19, 227, -1, -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, -1, 34, 35, -1, -1, -1, -1, -1, - 41, -1, -1, -1, 45, 46, 47, -1, 49, -1, + 41, -1, -1, -1, -1, -1, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, 76, -1, 78, 79, -1, - 81, 82, 83, 84, -1, 86, 87, -1, -1, -1, + -1, -1, 83, 84, -1, 86, 87, -1, -1, -1, -1, 92, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, -1, 109, -1, 111, 112, 113, 114, -1, -1, -1, 118, 119, -1, @@ -3738,173 +3836,89 @@ static const short yycheck[] = { 3, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, -1, 193, 194, 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, 205, 206, 207, 208, 209, 3, - 4, -1, 6, -1, 215, 9, -1, 218, 219, 220, + 4, -1, -1, -1, 215, -1, -1, 218, 219, 220, -1, -1, -1, 17, 18, 19, 227, -1, -1, -1, - -1, -1, -1, -1, 28, 29, 30, 31, 32, -1, + -1, -1, -1, -1, -1, 29, 30, 31, 32, -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, - -1, 45, 46, 47, -1, 49, -1, -1, -1, -1, + -1, -1, -1, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, - 74, -1, 76, -1, 78, 79, -1, -1, -1, 83, - 84, -1, 86, 87, -1, -1, -1, -1, 92, -1, + 74, -1, 76, -1, 78, 79, -1, -1, 82, 83, + 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, - -1, 105, 106, -1, -1, 109, -1, 111, 112, 113, - 114, -1, -1, -1, 118, 119, -1, -1, -1, 123, + -1, 105, 106, -1, -1, -1, -1, 111, 112, 113, + 114, -1, -1, -1, -1, 119, -1, -1, -1, 123, -1, -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, 160, 161, 162, 163, - 164, -1, -1, 167, -1, 169, 170, -1, 172, 173, + 164, -1, -1, 167, -1, 169, 170, -1, -1, 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, -1, 193, 194, 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, 205, 206, 207, 208, 209, 3, 4, -1, -1, -1, 215, -1, -1, 218, 219, 220, -1, -1, -1, 17, 18, 19, 227, -1, -1, -1, -1, -1, -1, - -1, 28, 29, 30, 31, 32, -1, 34, 35, -1, - -1, -1, -1, -1, 41, -1, -1, -1, 45, 46, + -1, -1, 29, 30, 31, 32, -1, 34, 35, -1, + -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, 76, - -1, 78, 79, -1, 81, -1, 83, 84, -1, 86, - 87, -1, -1, -1, -1, 92, -1, -1, 95, 96, + -1, 78, 79, -1, -1, -1, 83, 84, -1, 86, + 87, -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, 105, 106, - 107, -1, 109, -1, 111, 112, 113, 114, -1, -1, - -1, 118, 119, -1, -1, -1, 123, -1, -1, 126, + -1, -1, -1, -1, 111, 112, 113, 114, -1, -1, + -1, -1, 119, -1, -1, -1, 123, -1, -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, 160, 161, 162, 163, 164, -1, -1, - 167, -1, 169, 170, -1, 172, 173, 174, -1, 176, + 167, -1, 169, 170, -1, -1, 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, -1, 193, 194, 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, 205, 206, 207, 208, 209, 3, 4, -1, -1, -1, 215, -1, -1, 218, 219, 220, -1, -1, -1, 17, 18, 19, - 227, -1, -1, -1, -1, -1, -1, -1, 28, 29, + 227, -1, -1, -1, -1, -1, -1, -1, -1, 29, 30, 31, 32, -1, 34, 35, -1, -1, -1, -1, - -1, 41, -1, -1, -1, 45, 46, 47, -1, 49, + -1, 41, -1, -1, -1, -1, -1, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, 76, -1, 78, 79, - -1, 81, -1, 83, 84, -1, 86, 87, -1, -1, - -1, -1, 92, -1, -1, 95, 96, -1, -1, 99, - -1, 101, -1, -1, -1, 105, 106, -1, -1, 109, - -1, 111, 112, 113, 114, -1, -1, -1, 118, 119, + -1, -1, -1, 83, 84, -1, 86, 87, -1, -1, + -1, -1, -1, -1, -1, 95, 96, -1, -1, 99, + -1, 101, -1, -1, -1, 105, 106, -1, -1, -1, + -1, 111, 112, 113, 114, -1, -1, -1, -1, 119, -1, -1, -1, 123, -1, -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, 160, 161, 162, 163, 164, -1, -1, 167, -1, 169, - 170, -1, 172, 173, 174, -1, 176, -1, 178, 179, + 170, -1, -1, 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, - 190, 191, -1, 193, 194, 195, 196, 197, -1, -1, + 190, 191, -1, 193, 194, 195, 196, 197, 3, 4, -1, 201, -1, 203, 204, 205, 206, 207, 208, 209, - 3, 4, -1, -1, -1, 215, -1, -1, 218, 219, - 220, -1, -1, -1, 17, 18, 19, 227, -1, -1, - -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, - -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, - -1, -1, -1, -1, 47, -1, 49, -1, -1, -1, - -1, -1, -1, -1, 57, -1, -1, 60, -1, 62, - -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, - 73, 74, -1, 76, -1, 78, 79, -1, -1, -1, - 83, 84, -1, 86, 87, -1, -1, -1, -1, 92, - -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, - -1, -1, 105, 106, -1, -1, 109, -1, 111, 112, - 113, 114, -1, -1, -1, 118, 119, -1, -1, -1, - 123, -1, -1, 126, -1, -1, -1, -1, -1, 132, - 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, - 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, - 153, -1, -1, 156, 157, 158, 159, 160, 161, 162, - 163, 164, -1, -1, 167, -1, 169, 170, -1, 172, - 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, -1, - 193, 194, 195, 196, 197, -1, -1, -1, 201, -1, - 203, 204, 205, 206, 207, 208, 209, 3, 4, -1, - -1, -1, 215, -1, -1, 218, 219, 220, -1, -1, - -1, 17, 18, 19, 227, -1, -1, -1, -1, -1, - -1, -1, 28, 29, 30, 31, 32, -1, 34, 35, - -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, - -1, 47, -1, 49, -1, -1, -1, -1, -1, -1, - -1, 57, -1, -1, 60, -1, 62, -1, -1, -1, - 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, - 76, -1, 78, 79, -1, -1, -1, 83, 84, -1, - 86, 87, -1, -1, -1, -1, 92, -1, -1, 95, - 96, -1, -1, 99, -1, 101, -1, -1, -1, 105, - 106, -1, -1, 109, -1, 111, 112, 113, 114, -1, - -1, -1, 118, 119, -1, -1, -1, 123, -1, -1, - 126, -1, -1, -1, -1, -1, 132, 133, 134, 135, - -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, - 146, 147, 148, 149, 150, -1, 152, 153, -1, -1, - 156, 157, 158, 159, 160, 161, 162, 163, 164, -1, - -1, 167, -1, 169, 170, -1, 172, 173, 174, -1, - 176, -1, 178, 179, 180, 181, 182, 183, 184, -1, - 186, 187, 188, 189, 190, 191, -1, 193, 194, 195, - 196, 197, -1, -1, -1, 201, -1, 203, 204, 205, - 206, 207, 208, 209, 3, 4, -1, -1, -1, 215, - -1, -1, 218, 219, 220, -1, -1, -1, 17, 18, - 19, 227, -1, -1, -1, -1, -1, -1, -1, -1, - 29, 30, 31, 32, -1, 34, 35, -1, -1, -1, - -1, -1, 41, -1, -1, -1, -1, -1, 47, -1, - 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, - -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, - -1, -1, -1, 72, 73, 74, -1, 76, -1, 78, - 79, -1, -1, 82, 83, 84, -1, 86, 87, -1, - -1, -1, -1, -1, -1, -1, 95, 96, -1, -1, - 99, -1, 101, -1, -1, -1, 105, 106, -1, -1, - -1, -1, 111, 112, 113, 114, -1, -1, -1, -1, - 119, -1, -1, -1, 123, -1, -1, 126, -1, -1, - -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, - -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, - 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, - 159, 160, 161, 162, 163, 164, -1, -1, 167, -1, - 169, 170, -1, -1, 173, 174, -1, 176, -1, 178, - 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, - 189, 190, 191, -1, 193, 194, 195, 196, 197, -1, - -1, -1, 201, -1, 203, 204, 205, 206, 207, 208, - 209, 3, 4, -1, -1, -1, 215, -1, -1, 218, - 219, 220, -1, -1, -1, 17, 18, 19, 227, -1, - -1, -1, -1, -1, -1, -1, -1, 29, 30, 31, - 32, -1, 34, 35, -1, -1, -1, -1, -1, 41, - -1, -1, -1, -1, -1, 47, -1, 49, -1, -1, - -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, - 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, - 72, 73, 74, -1, 76, -1, 78, 79, -1, -1, - -1, 83, 84, -1, 86, 87, -1, -1, -1, -1, - -1, -1, -1, 95, 96, -1, -1, 99, -1, 101, - -1, -1, -1, 105, 106, -1, -1, -1, -1, 111, - 112, 113, 114, -1, -1, -1, -1, 119, -1, -1, - -1, 123, -1, -1, 126, -1, -1, -1, -1, -1, - 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, - -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, - 152, 153, -1, -1, 156, 157, 158, 159, 160, 161, - 162, 163, 164, -1, -1, 167, -1, 169, 170, -1, - -1, 173, 174, -1, 176, -1, 178, 179, 180, 181, - 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, - -1, 193, 194, 195, 196, 197, -1, -1, -1, 201, - -1, 203, 204, 205, 206, 207, 208, 209, 3, 4, - -1, -1, -1, 215, -1, -1, 218, 219, 220, -1, - -1, -1, 17, 18, 19, 227, -1, -1, -1, -1, - -1, -1, -1, -1, 29, 30, 31, 32, -1, 34, + -1, -1, 17, 18, 19, 215, -1, -1, 218, 219, + 220, -1, -1, 28, -1, -1, -1, 227, -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, 76, -1, 78, 79, -1, -1, -1, 83, 84, - -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, + -1, 86, 87, -1, -1, -1, -1, 92, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, - 105, 106, -1, -1, -1, -1, 111, 112, 113, 114, - -1, -1, -1, -1, 119, -1, -1, -1, 123, -1, + 105, 106, -1, -1, 109, -1, 111, 112, 113, 114, + -1, -1, -1, 118, 119, -1, -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, 160, 161, 162, 163, 164, - -1, -1, 167, -1, 169, 170, -1, -1, 173, 174, + -1, -1, 167, -1, 169, 170, -1, 172, 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, -1, 193, 194, 195, 196, 197, 3, 4, -1, 201, -1, 203, 204, 205, 206, 207, 208, 209, -1, -1, 17, 18, 19, - 215, -1, -1, 218, 219, 220, -1, -1, 28, -1, + 215, -1, -1, 218, -1, -1, -1, -1, 28, -1, -1, -1, 227, -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, @@ -3924,32 +3938,32 @@ static const short yycheck[] = { 3, 190, 191, -1, 193, 194, 195, 196, 197, 3, 4, -1, 201, -1, 203, 204, 205, 206, 207, 208, 209, -1, -1, 17, 18, 19, 215, -1, -1, 218, -1, - -1, -1, -1, 28, -1, -1, -1, 227, -1, 34, + -1, -1, -1, -1, -1, -1, -1, 227, -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, - -1, 76, -1, 78, 79, -1, -1, -1, 83, 84, - -1, 86, 87, -1, -1, -1, -1, 92, -1, -1, + -1, 76, -1, 78, 79, -1, 81, 82, 83, 84, + -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, - 105, 106, -1, -1, 109, -1, 111, 112, 113, 114, - -1, -1, -1, 118, 119, -1, -1, -1, -1, -1, + 105, 106, -1, -1, -1, -1, 111, 112, 113, 114, + -1, -1, -1, -1, 119, -1, -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, 160, 161, 162, 163, 164, - -1, -1, 167, -1, 169, 170, -1, 172, 173, 174, + -1, -1, 167, -1, 169, 170, -1, -1, 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, -1, 193, 194, 195, 196, 197, 3, 4, -1, 201, -1, 203, 204, 205, 206, 207, 208, 209, -1, -1, 17, 18, 19, - 215, -1, -1, 218, -1, -1, -1, -1, -1, -1, + 215, -1, -1, 218, 219, 220, -1, -1, -1, -1, -1, -1, 227, -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, 47, -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, 76, -1, 78, 79, - -1, 81, 82, 83, 84, -1, 86, 87, -1, -1, + -1, -1, 82, 83, 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, -1, -1, -1, 111, 112, 113, 114, -1, -1, -1, -1, 119, @@ -3962,169 +3976,118 @@ static const short yycheck[] = { 3, 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, -1, 193, 194, 195, 196, 197, 3, 4, -1, 201, -1, 203, 204, 205, 206, 207, 208, 209, - -1, -1, 17, 18, 19, 215, -1, -1, 218, 219, - 220, -1, -1, -1, -1, -1, -1, 227, -1, 34, - 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, - -1, -1, 47, -1, 49, -1, -1, -1, -1, -1, - -1, -1, 57, -1, -1, 60, -1, 62, -1, -1, + -1, -1, -1, -1, -1, 215, -1, -1, 218, 219, + 220, -1, -1, 28, -1, -1, -1, 227, -1, 34, + -1, -1, -1, -1, -1, -1, 41, -1, -1, -1, + -1, -1, 8, -1, -1, -1, -1, 13, -1, -1, + -1, -1, 57, -1, -1, 60, -1, -1, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, - -1, 76, -1, 78, 79, -1, -1, 82, 83, 84, + -1, -1, -1, -1, 79, -1, -1, -1, -1, 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, - 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, - 105, 106, -1, -1, -1, -1, 111, 112, 113, 114, - -1, -1, -1, -1, 119, -1, -1, -1, -1, -1, - -1, 126, -1, -1, -1, -1, -1, 132, 133, 134, + 95, 96, 58, -1, 99, -1, 101, -1, 64, -1, + 105, 106, -1, -1, 70, -1, 111, -1, 113, 114, + -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, + -1, -1, 88, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, 160, 161, 162, 163, 164, - -1, -1, 167, -1, 169, 170, -1, -1, 173, 174, + -1, 8, 167, -1, 169, 170, 13, 172, 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, -1, 193, 194, - 195, 196, 197, 3, 4, -1, 201, -1, 203, 204, - 205, 206, 207, 208, 209, -1, -1, -1, -1, -1, - 215, -1, -1, 218, 219, 220, -1, -1, 28, -1, - -1, -1, 227, -1, 34, -1, -1, -1, -1, -1, - -1, 41, -1, -1, -1, -1, -1, 8, -1, 10, - -1, -1, 13, -1, -1, -1, -1, 57, -1, -1, - 60, -1, -1, -1, -1, -1, 66, 67, -1, -1, - -1, -1, 72, 73, 74, -1, -1, -1, -1, 79, - -1, -1, -1, -1, 84, -1, 86, 87, -1, -1, - -1, -1, -1, -1, -1, 95, 96, 58, -1, 99, - -1, 101, -1, 64, -1, 105, 106, -1, -1, 70, - -1, 111, -1, 113, 114, -1, -1, -1, -1, -1, - 81, -1, -1, -1, -1, -1, -1, 88, -1, -1, - -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, - 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, - 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, - 160, 161, 162, 163, 164, -1, 8, 167, -1, 169, - 170, 13, 172, 173, 174, -1, 176, -1, 178, 179, - 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, - 190, -1, -1, 193, 194, 195, 196, 197, -1, -1, - -1, 201, 163, 203, 204, -1, -1, 8, -1, 10, - -1, -1, 13, -1, -1, -1, 58, 178, -1, -1, - -1, -1, 64, -1, -1, -1, -1, 227, 70, 8, - -1, -1, -1, -1, 13, -1, -1, -1, -1, 81, - -1, -1, -1, -1, -1, 206, 88, -1, -1, -1, - 211, 212, 213, 214, 215, 216, 217, 58, -1, -1, - -1, -1, -1, 64, 225, -1, -1, -1, -1, 70, - 8, -1, -1, -1, -1, 13, -1, -1, -1, 58, - 81, -1, -1, -1, -1, 64, -1, 88, -1, -1, - 8, 70, -1, -1, -1, 13, -1, -1, -1, -1, - -1, -1, 81, -1, -1, -1, -1, -1, -1, 88, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 58, 163, -1, -1, -1, -1, 64, -1, -1, -1, - 8, -1, 70, -1, -1, 13, 178, -1, -1, -1, - 58, -1, -1, 81, -1, -1, 64, -1, -1, -1, - 88, -1, 70, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 163, 81, 206, -1, -1, -1, -1, 211, - 212, 213, 214, 215, 216, 217, -1, 178, -1, -1, - 58, -1, 224, 225, 163, -1, 64, -1, -1, -1, - -1, -1, 70, -1, -1, -1, -1, -1, -1, 178, - -1, -1, -1, 81, -1, 206, -1, -1, -1, -1, - 211, 212, 213, 214, 215, 216, 217, -1, -1, -1, - -1, -1, -1, -1, 225, 163, -1, 206, -1, -1, - -1, -1, 211, 212, 213, 214, 215, 216, 217, -1, - 178, -1, -1, -1, -1, 163, 225, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 178, -1, -1, -1, -1, -1, -1, -1, 206, -1, - -1, -1, -1, 211, 212, 213, 214, 215, 216, 217, - -1, -1, -1, -1, -1, 163, -1, 225, 206, 3, - 4, -1, -1, 211, 212, 213, 214, 215, 216, 217, - 178, -1, -1, -1, -1, -1, -1, 225, -1, -1, + -1, 186, 187, 188, 189, 190, -1, -1, 193, 194, + 195, 196, 197, -1, -1, -1, 201, 163, 203, 204, + -1, -1, 8, -1, -1, -1, -1, 13, -1, -1, + -1, 58, 178, -1, -1, -1, -1, 64, -1, -1, + -1, -1, 227, 70, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, + 206, 88, -1, -1, -1, 211, 212, 213, 214, 215, + 216, 217, 58, -1, -1, -1, -1, -1, 64, 225, + -1, -1, -1, -1, 70, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 34, -1, -1, -1, -1, -1, -1, 41, 206, -1, - -1, -1, -1, 211, 212, 213, 214, 215, 216, 217, - -1, -1, -1, 57, -1, -1, 60, 225, -1, -1, - -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, - 74, -1, -1, -1, -1, 79, -1, -1, -1, -1, - 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, - -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, - -1, 105, 106, -1, -1, -1, -1, 111, -1, 113, - 114, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 132, 133, - 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, - -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, - -1, -1, 156, 157, 158, 159, 160, 161, 162, 163, - 164, -1, -1, 167, -1, 169, 170, -1, -1, 173, - 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, - 184, -1, 186, 187, 188, 189, 190, 191, -1, 193, - 194, 195, 196, 197, 3, 4, -1, 201, -1, 203, - 204, 205, 206, 207, -1, 209, -1, 211, 212, 213, - 214, 215, 216, 217, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 34, -1, -1, 37, -1, - -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 57, 13, - -1, 60, -1, -1, -1, -1, 65, 66, 67, -1, - -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, - 79, -1, -1, -1, -1, 84, -1, 86, 87, -1, - -1, -1, -1, -1, -1, -1, 95, 96, 97, -1, - 99, -1, 101, -1, 58, -1, 105, 106, -1, -1, - 64, -1, 111, -1, 113, 114, 70, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, - -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, - -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, - 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, - 159, 160, 161, 162, 163, 164, -1, -1, 167, -1, - 169, 170, 3, 4, 173, 174, -1, 176, -1, 178, - 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, - 189, 190, -1, -1, 193, 194, 195, 196, 197, -1, - -1, -1, 201, 34, 203, 204, -1, 206, -1, 163, - 41, -1, 211, 212, 213, 214, 215, 216, 217, -1, - -1, -1, -1, -1, 178, -1, 57, -1, -1, 60, - -1, -1, -1, -1, 65, 66, 67, -1, -1, -1, - -1, 72, 73, 74, -1, -1, -1, -1, 79, -1, - -1, -1, 206, 84, -1, 86, 87, 211, 212, 213, - 214, 215, 216, 217, 95, 96, 97, -1, 99, -1, - 101, 225, -1, -1, 105, 106, -1, -1, -1, -1, - 111, -1, 113, 114, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, - 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, - -1, 152, 153, -1, -1, 156, 157, 158, 159, 160, - 161, 162, 163, 164, -1, -1, 167, -1, 169, 170, - -1, -1, 173, 174, -1, 176, -1, 178, 179, 180, - 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, - -1, -1, 193, 194, 195, 196, 197, 3, 4, -1, - 201, -1, 203, 204, -1, 206, -1, -1, -1, -1, - 211, 212, 213, 214, 215, 216, 217, -1, -1, -1, - -1, -1, 28, -1, -1, -1, -1, -1, 34, -1, - -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 57, -1, -1, 60, -1, -1, -1, -1, -1, - 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, - -1, -1, -1, 79, -1, -1, -1, -1, 84, -1, - 86, 87, -1, -1, -1, -1, -1, -1, -1, 95, - 96, -1, -1, 99, -1, 101, -1, -1, -1, 105, - 106, -1, -1, -1, -1, 111, -1, 113, 114, -1, + -1, -1, -1, -1, -1, -1, 163, -1, -1, -1, + 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 178, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 132, 133, 134, 135, - -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, - 146, 147, 148, 149, 150, -1, 152, 153, -1, -1, - 156, 157, 158, 159, 160, 161, 162, 163, 164, -1, - -1, 167, -1, 169, 170, -1, 172, 173, 174, -1, - 176, -1, 178, 179, 180, 181, 182, 183, 184, -1, - 186, 187, 188, 189, 190, 3, 4, 193, 194, 195, - 196, 197, -1, -1, -1, 201, -1, 203, 204, -1, - -1, -1, 208, -1, -1, -1, -1, -1, -1, -1, - 216, -1, -1, -1, -1, -1, 34, -1, -1, -1, + -1, 34, -1, -1, -1, -1, -1, 163, 41, 206, + -1, -1, -1, -1, 211, 212, 213, 214, 215, 216, + 217, -1, 178, -1, 57, -1, -1, 60, 225, -1, + -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, + 73, 74, -1, -1, -1, -1, 79, -1, -1, -1, + 206, 84, -1, 86, 87, 211, 212, 213, 214, 215, + 216, 217, 95, 96, -1, -1, 99, -1, 101, 225, + -1, -1, 105, 106, -1, -1, -1, -1, 111, -1, + 113, 114, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 132, + 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, + 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, + 153, -1, -1, 156, 157, 158, 159, 160, 161, 162, + 163, 164, -1, -1, 167, -1, 169, 170, -1, -1, + 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, -1, + 193, 194, 195, 196, 197, 3, 4, -1, 201, -1, + 203, 204, 205, 206, 207, -1, 209, -1, 211, 212, + 213, 214, 215, 216, 217, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 34, -1, -1, 37, -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 57, - -1, -1, 60, -1, -1, -1, -1, -1, 66, 67, + 13, -1, 60, -1, -1, -1, -1, 65, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, 79, -1, -1, -1, -1, 84, -1, 86, 87, - -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, - -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, - -1, -1, -1, 111, -1, 113, 114, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 95, 96, 97, + -1, 99, -1, 101, -1, 58, -1, 105, 106, -1, + -1, 64, -1, 111, -1, 113, 114, 70, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, - 148, 149, 150, -1, 152, 153, 3, 4, 156, 157, + 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, 160, 161, 162, 163, 164, -1, -1, 167, - -1, 169, 170, -1, -1, 173, 174, -1, 176, -1, - 178, 179, 180, 181, 182, 183, 184, 34, 186, 187, - 188, 189, 190, -1, 41, 193, 194, 195, 196, 197, - -1, -1, -1, 201, -1, 203, 204, -1, -1, -1, - 57, -1, -1, 60, -1, -1, -1, -1, 216, 66, + -1, 169, 170, 3, 4, 173, 174, -1, 176, -1, + 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, + 188, 189, 190, -1, -1, 193, 194, 195, 196, 197, + -1, -1, -1, 201, 34, 203, 204, -1, 206, -1, + 163, 41, -1, 211, 212, 213, 214, 215, 216, 217, + -1, -1, -1, -1, -1, 178, -1, 57, -1, -1, + 60, -1, -1, -1, -1, 65, 66, 67, -1, -1, + -1, -1, 72, 73, 74, -1, -1, -1, -1, 79, + -1, -1, -1, 206, 84, -1, 86, 87, 211, 212, + 213, 214, 215, 216, 217, 95, 96, 97, -1, 99, + -1, 101, 225, -1, -1, 105, 106, -1, -1, -1, + -1, 111, -1, 113, 114, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, + 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, + 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, + 160, 161, 162, 163, 164, -1, -1, 167, -1, 169, + 170, -1, -1, 173, 174, -1, 176, -1, 178, 179, + 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, + 190, -1, -1, 193, 194, 195, 196, 197, 3, 4, + -1, 201, -1, 203, 204, -1, 206, -1, -1, -1, + -1, 211, 212, 213, 214, 215, 216, 217, -1, -1, + -1, -1, -1, 28, -1, -1, -1, -1, -1, 34, + -1, -1, -1, -1, -1, -1, 41, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 57, -1, -1, 60, -1, -1, -1, -1, + -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, + -1, -1, -1, -1, 79, -1, -1, -1, -1, 84, + -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, + 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, + 105, 106, -1, -1, -1, -1, 111, -1, 113, 114, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 132, 133, 134, + 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, + -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, + -1, 156, 157, 158, 159, 160, 161, 162, 163, 164, + -1, -1, 167, -1, 169, 170, -1, 172, 173, 174, + -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, + -1, 186, 187, 188, 189, 190, 3, 4, 193, 194, + 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, + -1, -1, -1, 208, -1, -1, -1, -1, -1, -1, + -1, 216, -1, -1, -1, -1, -1, 34, -1, -1, + -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 57, -1, -1, 60, -1, -1, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, 79, -1, -1, -1, -1, 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, 95, 96, @@ -4163,100 +4126,58 @@ static const short yycheck[] = { 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, - -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, - -1, 156, 157, 158, 159, 160, 161, 162, 163, 164, + -1, 146, 147, 148, 149, 150, -1, 152, 153, 3, + 4, 156, 157, 158, 159, 160, 161, 162, 163, 164, -1, -1, 167, -1, 169, 170, -1, -1, 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, -1, -1, 193, 194, - 195, 196, 197, 3, 4, -1, 201, -1, 203, 204, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 216, -1, -1, -1, -1, -1, -1, 28, -1, - -1, -1, -1, -1, 34, -1, -1, -1, -1, -1, - -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, - 60, -1, -1, -1, -1, -1, 66, 67, -1, -1, - -1, -1, 72, 73, 74, -1, -1, -1, -1, 79, - -1, -1, -1, -1, 84, -1, 86, 87, -1, -1, - -1, -1, -1, -1, -1, 95, 96, -1, -1, 99, - -1, 101, -1, -1, -1, 105, 106, -1, -1, -1, - -1, 111, -1, 113, 114, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, - 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, - 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, - 160, 161, 162, 163, 164, -1, -1, 167, -1, 169, - 170, -1, 172, 173, 174, -1, 176, -1, 178, 179, - 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, - 190, 3, 4, 193, 194, 195, 196, 197, -1, -1, - -1, 201, -1, 203, 204, -1, -1, -1, 208, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 34, -1, -1, -1, -1, -1, -1, 41, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, - -1, -1, -1, -1, 66, 67, -1, -1, -1, -1, - 72, 73, 74, -1, -1, -1, -1, 79, -1, -1, - -1, -1, 84, -1, 86, 87, -1, -1, -1, -1, - -1, -1, -1, 95, 96, -1, -1, 99, -1, 101, - -1, -1, -1, 105, 106, -1, -1, -1, -1, 111, - -1, 113, 114, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, - -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, - 152, 153, -1, -1, 156, 157, 158, 159, 160, 161, - 162, 163, 164, -1, -1, 167, -1, 169, 170, -1, - -1, 173, 174, -1, 176, -1, 178, 179, 180, 181, - 182, 183, 184, -1, 186, 187, 188, 189, 190, 3, - 4, 193, 194, 195, 196, 197, -1, -1, -1, 201, - -1, 203, 204, -1, -1, 207, -1, -1, -1, -1, - -1, 25, -1, 27, 28, -1, -1, -1, -1, -1, - 34, -1, -1, -1, -1, -1, -1, 41, -1, -1, - -1, -1, -1, 47, -1, -1, -1, 51, -1, -1, - -1, 55, -1, 57, -1, -1, 60, -1, -1, -1, - -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, + 34, 186, 187, 188, 189, 190, -1, 41, 193, 194, + 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, + -1, -1, -1, 57, -1, -1, 60, -1, -1, -1, + -1, 216, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, 79, -1, -1, -1, -1, - 84, -1, 86, 87, -1, 89, -1, -1, 92, 93, + 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, - -1, 105, 106, -1, -1, -1, 110, 111, -1, 113, - 114, -1, -1, 117, -1, 119, -1, -1, -1, -1, + -1, 105, 106, -1, -1, -1, -1, 111, -1, 113, + 114, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, -1, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, 3, 4, 200, 201, 202, 203, - 204, -1, -1, -1, -1, -1, -1, -1, -1, 18, - 19, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 34, 35, -1, -1, -1, + 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, + -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, + -1, -1, 156, 157, 158, 159, 160, 161, 162, 163, + 164, -1, -1, 167, -1, 169, 170, -1, -1, 173, + 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, + 184, -1, 186, 187, 188, 189, 190, -1, -1, 193, + 194, 195, 196, 197, 3, 4, -1, 201, -1, 203, + 204, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 216, -1, -1, -1, -1, -1, -1, 28, + -1, -1, -1, -1, -1, 34, -1, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, - 49, -1, -1, -1, -1, -1, -1, -1, 57, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, -1, -1, -1, -1, 66, 67, -1, - -1, -1, -1, 72, 73, 74, -1, 76, -1, 78, - 79, -1, -1, -1, 83, 84, -1, 86, 87, -1, + -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, + 79, -1, -1, -1, -1, 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, -1, -1, -1, 111, -1, 113, 114, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 126, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, 160, 161, 162, 163, 164, -1, -1, 167, -1, - 169, 170, -1, -1, 173, 174, -1, 176, -1, 178, + 169, 170, -1, 172, 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 3, 4, 193, 194, 195, 196, 197, -1, - -1, -1, 201, -1, 203, 204, -1, -1, -1, 20, - -1, -1, -1, -1, 25, -1, -1, -1, -1, -1, + -1, -1, 201, -1, 203, 204, -1, -1, -1, 208, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 34, -1, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 51, -1, -1, -1, -1, -1, 57, -1, -1, 60, + -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, -1, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, 79, -1, -1, -1, -1, 84, -1, 86, 87, -1, -1, -1, - -1, -1, -1, 94, 95, 96, -1, -1, 99, -1, + -1, -1, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, -1, -1, -1, 111, -1, 113, 114, -1, -1, -1, -1, -1, -1, - 121, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, 160, @@ -4264,30 +4185,72 @@ static const short yycheck[] = { 3, -1, -1, 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 3, 4, 193, 194, 195, 196, 197, -1, -1, -1, - 201, -1, 203, 204, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 28, -1, -1, -1, -1, + 201, -1, 203, 204, -1, -1, 207, -1, -1, -1, + -1, -1, 25, -1, 27, 28, -1, -1, -1, -1, -1, 34, -1, -1, -1, -1, -1, -1, 41, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 57, -1, -1, 60, -1, -1, + -1, -1, -1, -1, 47, -1, -1, -1, 51, -1, + -1, -1, 55, -1, 57, -1, -1, 60, -1, -1, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, 79, -1, -1, -1, - -1, 84, -1, 86, 87, -1, -1, -1, -1, -1, - -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, - -1, -1, 105, 106, -1, -1, -1, -1, 111, -1, - 113, 114, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 84, -1, 86, 87, -1, 89, -1, -1, 92, + 93, -1, 95, 96, -1, -1, 99, -1, 101, -1, + -1, -1, 105, 106, -1, -1, -1, 110, 111, -1, + 113, 114, -1, -1, 117, -1, 119, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 132, - 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, - 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, - 153, 3, 4, 156, 157, 158, 159, 160, 161, 162, - 163, 164, -1, -1, 167, -1, 169, 170, -1, 172, - 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, - 183, 184, 34, 186, 187, 188, 189, 190, -1, 41, - 193, 194, 195, 196, 197, -1, -1, -1, 201, -1, - 203, 204, -1, 55, -1, 57, -1, -1, 60, -1, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, -1, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 3, 4, 200, 201, 202, + 203, 204, -1, -1, -1, -1, -1, -1, -1, -1, + 18, 19, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 34, 35, -1, -1, + -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, + -1, 49, -1, -1, -1, -1, -1, -1, -1, 57, + -1, -1, 60, -1, -1, -1, -1, -1, 66, 67, + -1, -1, -1, -1, 72, 73, 74, -1, 76, -1, + 78, 79, -1, -1, -1, 83, 84, -1, 86, 87, + -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, + -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, + -1, -1, -1, 111, -1, 113, 114, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 126, -1, + -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, + 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, + 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, + 158, 159, 160, 161, 162, 163, 164, -1, -1, 167, + -1, 169, 170, -1, -1, 173, 174, -1, 176, -1, + 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, + 188, 189, 190, 3, 4, 193, 194, 195, 196, 197, + -1, -1, -1, 201, -1, 203, 204, -1, -1, -1, + 20, -1, -1, -1, -1, 25, -1, -1, -1, -1, + -1, -1, -1, -1, 34, -1, -1, -1, -1, -1, + -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 51, -1, -1, -1, -1, -1, 57, -1, -1, + 60, -1, -1, -1, -1, -1, 66, 67, -1, -1, + -1, -1, 72, 73, 74, -1, -1, -1, -1, 79, + -1, -1, -1, -1, 84, -1, 86, 87, -1, -1, + -1, -1, -1, -1, 94, 95, 96, -1, -1, 99, + -1, 101, -1, -1, -1, 105, 106, -1, -1, -1, + -1, 111, -1, 113, 114, -1, -1, -1, -1, -1, + -1, 121, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, + 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, + 150, -1, 152, 153, -1, -1, 156, 157, 158, 159, + 160, 161, 162, 163, 164, -1, -1, 167, -1, 169, + 170, -1, -1, 173, 174, -1, 176, -1, 178, 179, + 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, + 190, 3, 4, 193, 194, 195, 196, 197, -1, -1, + -1, 201, -1, 203, 204, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 28, -1, -1, -1, + -1, -1, 34, -1, -1, -1, -1, -1, -1, 41, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, -1, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, 79, -1, -1, -1, -1, 84, -1, 86, 87, -1, -1, -1, -1, - -1, -1, -1, 95, 96, -1, 98, 99, -1, 101, + -1, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, -1, -1, -1, 111, -1, 113, 114, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -4295,14 +4258,14 @@ static const short yycheck[] = { 3, -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, 3, 4, 156, 157, 158, 159, 160, 161, 162, 163, 164, -1, -1, 167, -1, 169, 170, -1, - -1, 173, 174, -1, 176, -1, 178, 179, 180, 181, + 172, 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, 34, 186, 187, 188, 189, 190, -1, 41, 193, 194, 195, 196, 197, -1, -1, -1, 201, - -1, 203, 204, -1, -1, -1, 57, -1, -1, 60, + -1, 203, 204, -1, 55, -1, 57, -1, -1, 60, -1, -1, -1, -1, -1, 66, 67, -1, -1, -1, - -1, 72, 73, 74, 75, -1, -1, -1, 79, -1, + -1, 72, 73, 74, -1, -1, -1, -1, 79, -1, -1, -1, -1, 84, -1, 86, 87, -1, -1, -1, - -1, -1, -1, -1, 95, 96, -1, -1, 99, -1, + -1, -1, -1, -1, 95, 96, -1, 98, 99, -1, 101, -1, -1, -1, 105, 106, -1, -1, -1, -1, 111, -1, 113, 114, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -4315,7 +4278,7 @@ static const short yycheck[] = { 3, -1, 41, 193, 194, 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, -1, -1, -1, 57, -1, -1, 60, -1, -1, -1, -1, -1, 66, 67, -1, -1, - -1, -1, 72, 73, 74, -1, -1, -1, -1, 79, + -1, -1, 72, 73, 74, 75, -1, -1, -1, 79, -1, -1, -1, -1, 84, -1, 86, 87, -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, -1, -1, @@ -4325,7 +4288,7 @@ static const short yycheck[] = { 3, 140, 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, -1, 152, 153, 3, 4, 156, 157, 158, 159, 160, 161, 162, 163, 164, -1, -1, 167, -1, 169, - 170, -1, -1, 173, 174, 175, 176, -1, 178, 179, + 170, -1, -1, 173, 174, -1, 176, -1, 178, 179, 180, 181, 182, 183, 184, 34, 186, 187, 188, 189, 190, -1, 41, 193, 194, 195, 196, 197, -1, -1, -1, 201, -1, 203, 204, -1, -1, -1, 57, -1, @@ -4338,31 +4301,31 @@ static const short yycheck[] = { 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, 148, - 149, 150, -1, 152, 153, -1, -1, 156, 157, 158, + 149, 150, -1, 152, 153, 3, 4, 156, 157, 158, 159, 160, 161, 162, 163, 164, -1, -1, 167, -1, 169, 170, -1, -1, 173, 174, 175, 176, -1, 178, - 179, 180, 181, 182, 183, 184, -1, 186, 187, 188, - 189, 190, 3, 4, 193, 194, 195, 196, 197, 10, - -1, -1, 201, -1, 203, 204, -1, -1, -1, -1, + 179, 180, 181, 182, 183, 184, 34, 186, 187, 188, + 189, 190, -1, 41, 193, 194, 195, 196, 197, -1, + -1, -1, 201, -1, 203, 204, -1, -1, -1, 57, + -1, -1, 60, -1, -1, -1, -1, -1, 66, 67, + -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, + -1, 79, -1, -1, -1, -1, 84, -1, 86, 87, + -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, + -1, 99, -1, 101, -1, -1, -1, 105, 106, -1, + -1, -1, -1, 111, -1, 113, 114, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 34, -1, -1, -1, -1, -1, -1, - 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, - -1, -1, -1, -1, -1, 66, 67, -1, -1, -1, - -1, 72, 73, 74, -1, -1, -1, -1, 79, -1, - -1, -1, -1, 84, -1, 86, 87, -1, -1, -1, - -1, -1, -1, -1, 95, 96, -1, -1, 99, -1, - 101, -1, -1, -1, 105, 106, -1, -1, -1, -1, - 111, -1, 113, 114, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, + 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, + 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, + 158, 159, 160, 161, 162, 163, 164, -1, -1, 167, + -1, 169, 170, -1, -1, 173, 174, 175, 176, -1, + 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, + 188, 189, 190, 3, 4, 193, 194, 195, 196, 197, + 10, -1, -1, 201, -1, 203, 204, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, - 141, -1, 143, -1, -1, 146, 147, 148, 149, 150, - -1, 152, 153, 3, 4, 156, 157, 158, 159, 160, - 161, 162, 163, 164, -1, -1, 167, -1, 169, 170, - -1, -1, 173, 174, -1, 176, -1, 178, 179, 180, - 181, 182, 183, 184, 34, 186, 187, 188, 189, 190, - -1, 41, 193, 194, 195, 196, 197, -1, -1, -1, - 201, -1, 203, 204, -1, -1, -1, 57, -1, -1, + -1, -1, -1, -1, 34, -1, -1, -1, -1, -1, + -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 57, -1, -1, 60, -1, -1, -1, -1, -1, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, 79, -1, -1, -1, -1, 84, -1, 86, 87, -1, -1, @@ -4402,59 +4365,66 @@ static const short yycheck[] = { 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, 147, - 148, 149, 150, -1, 152, 153, -1, -1, 156, 157, + 148, 149, 150, -1, 152, 153, 3, 4, 156, 157, 158, 159, 160, 161, 162, 163, 164, -1, -1, 167, -1, 169, 170, -1, -1, 173, 174, -1, 176, -1, - 178, 179, 180, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, -1, -1, 193, 194, 195, 196, 197, - -1, -1, 7, 201, -1, 203, 204, 12, -1, -1, - -1, -1, -1, -1, -1, -1, 21, -1, -1, 24, - -1, 26, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 36, -1, 38, -1, -1, -1, 42, 43, 44, - -1, -1, -1, 48, -1, -1, -1, -1, -1, 54, - -1, -1, -1, -1, 18, 19, 61, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, - -1, -1, -1, 47, -1, 49, -1, -1, -1, -1, - -1, -1, -1, 57, -1, -1, -1, 102, 62, 104, - -1, -1, 107, 108, -1, -1, -1, -1, -1, 73, - 74, -1, 76, -1, 78, -1, -1, 122, -1, 83, + 178, 179, 180, 181, 182, 183, 184, 34, 186, 187, + 188, 189, 190, -1, 41, 193, 194, 195, 196, 197, + -1, -1, -1, 201, -1, 203, 204, -1, -1, -1, + 57, -1, -1, 60, -1, -1, -1, -1, -1, 66, + 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, + -1, -1, 79, -1, -1, -1, -1, 84, -1, 86, + 87, -1, -1, -1, -1, -1, -1, -1, 95, 96, + -1, -1, 99, -1, 101, -1, -1, -1, 105, 106, + -1, -1, -1, -1, 111, -1, 113, 114, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 136, -1, -1, -1, -1, -1, -1, -1, 144, - 145, -1, 106, 107, -1, -1, -1, 111, 112, 154, - 155, -1, -1, -1, -1, 119, -1, -1, -1, -1, - 165, 166, 126, 168, -1, -1, 171, -1, 132, -1, - -1, 135, 177, 18, 19, -1, -1, -1, -1, -1, - 185, -1, -1, -1, -1, -1, -1, 192, -1, 34, - 35, -1, -1, 198, -1, 200, 41, -1, -1, -1, - -1, -1, 47, -1, 49, -1, -1, -1, -1, -1, - -1, -1, 57, -1, -1, -1, -1, 62, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 191, 73, 74, - -1, 76, -1, 78, -1, -1, -1, -1, 83, -1, - 204, 205, -1, 207, 208, 209, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 132, 133, 134, 135, -1, + 137, 138, -1, 140, 141, -1, 143, -1, -1, 146, + 147, 148, 149, 150, -1, 152, 153, -1, -1, 156, + 157, 158, 159, 160, 161, 162, 163, 164, -1, -1, + 167, -1, 169, 170, -1, -1, 173, 174, -1, 176, + -1, 178, 179, 180, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, -1, -1, 193, 194, 195, 196, + 197, -1, -1, 7, 201, -1, 203, 204, 12, -1, + -1, -1, -1, -1, -1, -1, -1, 21, -1, -1, + 24, -1, 26, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 36, -1, 38, -1, -1, -1, 42, 43, + 44, -1, -1, -1, 48, -1, -1, -1, -1, -1, + 54, -1, -1, -1, -1, 18, 19, 61, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 106, 18, 19, -1, -1, 111, 112, -1, -1, - -1, -1, -1, -1, 119, -1, -1, -1, 34, 35, - -1, 126, -1, -1, -1, 41, -1, 132, -1, -1, - 135, -1, -1, 49, -1, -1, -1, -1, -1, -1, - -1, 57, -1, -1, -1, -1, 62, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 73, 74, -1, - 76, -1, 78, -1, -1, -1, -1, 83, -1, -1, + -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, + -1, -1, -1, -1, 47, -1, 49, -1, -1, -1, + -1, -1, -1, -1, 57, -1, -1, -1, 102, 62, + 104, -1, -1, 107, 108, -1, -1, -1, -1, -1, + 73, 74, -1, 76, -1, 78, -1, -1, 122, -1, + 83, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 136, -1, -1, -1, -1, -1, -1, -1, + 144, 145, -1, 106, 107, -1, -1, -1, 111, 112, + 154, 155, -1, -1, -1, -1, 119, -1, -1, -1, + -1, 165, 166, 126, 168, -1, -1, 171, -1, 132, + -1, -1, 135, 177, 18, 19, -1, -1, -1, -1, + -1, 185, -1, -1, -1, -1, -1, -1, 192, -1, + 34, 35, -1, -1, 198, -1, 200, 41, -1, -1, + -1, -1, -1, 47, -1, 49, -1, -1, -1, -1, + -1, -1, -1, 57, -1, -1, -1, -1, 62, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 191, 73, + 74, -1, 76, -1, 78, -1, -1, -1, -1, 83, + -1, 204, 205, -1, 207, 208, 209, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 191, -1, -1, -1, - 106, -1, -1, -1, -1, 111, 112, -1, -1, 204, - 205, -1, 207, 208, 209, -1, -1, -1, -1, -1, - 126, -1, -1, -1, -1, -1, 132, -1, -1, 135, + -1, -1, 106, -1, -1, -1, -1, 111, 112, -1, + -1, -1, -1, -1, -1, 119, -1, -1, -1, -1, + -1, -1, 126, -1, -1, -1, -1, -1, 132, -1, + -1, 135, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 191, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 190, 191, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 204 + 204, 205, -1, 207, 208, 209 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/usr/lib/bison.simple" +#line 3 "/usr/local/bison/bison.simple" /* Skeleton output parser for bison, Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. @@ -4647,7 +4617,7 @@ __yy_memcpy (char *to, char *from, int count) #endif #endif -#line 196 "/usr/lib/bison.simple" +#line 196 "/usr/local/bison/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed into yyparse. The argument should have type void *. @@ -9938,443 +9908,444 @@ case 818: #line 4602 "gram.y" { yyval.paramno = makeNode(ParamNo); - yyval.paramno->number = yyvsp[0].ival; + yyval.paramno->number = yyvsp[-1].ival; + yyval.paramno->indirection = yyvsp[0].list; ; break;} case 819: -#line 4608 "gram.y" +#line 4609 "gram.y" { yyval.ival = yyvsp[0].ival; ; break;} case 820: -#line 4609 "gram.y" +#line 4610 "gram.y" { yyval.str = yyvsp[0].str; ; break;} case 821: -#line 4610 "gram.y" +#line 4611 "gram.y" { yyval.str = yyvsp[0].str; ; break;} case 822: -#line 4618 "gram.y" +#line 4619 "gram.y" { yyval.str = xlateSqlType(yyvsp[0].str); ; break;} case 823: -#line 4620 "gram.y" +#line 4621 "gram.y" { yyval.str = xlateSqlType(yyvsp[0].str); ; break;} case 824: -#line 4622 "gram.y" +#line 4623 "gram.y" { yyval.str = xlateSqlType(yyvsp[0].str); ; break;} case 825: -#line 4632 "gram.y" +#line 4633 "gram.y" { yyval.str = yyvsp[0].str; ; break;} case 826: -#line 4633 "gram.y" +#line 4634 "gram.y" { yyval.str = yyvsp[0].str; ; break;} case 827: -#line 4634 "gram.y" +#line 4635 "gram.y" { yyval.str = "absolute"; ; break;} case 828: -#line 4635 "gram.y" +#line 4636 "gram.y" { yyval.str = "action"; ; break;} case 829: -#line 4636 "gram.y" +#line 4637 "gram.y" { yyval.str = "after"; ; break;} case 830: -#line 4637 "gram.y" +#line 4638 "gram.y" { yyval.str = "aggregate"; ; break;} case 831: -#line 4638 "gram.y" +#line 4639 "gram.y" { yyval.str = "backward"; ; break;} case 832: -#line 4639 "gram.y" +#line 4640 "gram.y" { yyval.str = "before"; ; break;} case 833: -#line 4640 "gram.y" +#line 4641 "gram.y" { yyval.str = "cache"; ; break;} case 834: -#line 4641 "gram.y" +#line 4642 "gram.y" { yyval.str = "createdb"; ; break;} case 835: -#line 4642 "gram.y" +#line 4643 "gram.y" { yyval.str = "createuser"; ; break;} case 836: -#line 4643 "gram.y" +#line 4644 "gram.y" { yyval.str = "cycle"; ; break;} case 837: -#line 4644 "gram.y" +#line 4645 "gram.y" { yyval.str = "database"; ; break;} case 838: -#line 4645 "gram.y" +#line 4646 "gram.y" { yyval.str = "delimiters"; ; break;} case 839: -#line 4646 "gram.y" +#line 4647 "gram.y" { yyval.str = "double"; ; break;} case 840: -#line 4647 "gram.y" +#line 4648 "gram.y" { yyval.str = "each"; ; break;} case 841: -#line 4648 "gram.y" +#line 4649 "gram.y" { yyval.str = "encoding"; ; break;} case 842: -#line 4649 "gram.y" +#line 4650 "gram.y" { yyval.str = "forward"; ; break;} case 843: -#line 4650 "gram.y" +#line 4651 "gram.y" { yyval.str = "function"; ; break;} case 844: -#line 4651 "gram.y" +#line 4652 "gram.y" { yyval.str = "handler"; ; break;} case 845: -#line 4652 "gram.y" +#line 4653 "gram.y" { yyval.str = "increment"; ; break;} case 846: -#line 4653 "gram.y" +#line 4654 "gram.y" { yyval.str = "index"; ; break;} case 847: -#line 4654 "gram.y" +#line 4655 "gram.y" { yyval.str = "inherits"; ; break;} case 848: -#line 4655 "gram.y" +#line 4656 "gram.y" { yyval.str = "insensitive"; ; break;} case 849: -#line 4656 "gram.y" +#line 4657 "gram.y" { yyval.str = "instead"; ; break;} case 850: -#line 4657 "gram.y" +#line 4658 "gram.y" { yyval.str = "isnull"; ; break;} case 851: -#line 4658 "gram.y" +#line 4659 "gram.y" { yyval.str = "key"; ; break;} case 852: -#line 4659 "gram.y" +#line 4660 "gram.y" { yyval.str = "language"; ; break;} case 853: -#line 4660 "gram.y" +#line 4661 "gram.y" { yyval.str = "lancompiler"; ; break;} case 854: -#line 4661 "gram.y" +#line 4662 "gram.y" { yyval.str = "location"; ; break;} case 855: -#line 4662 "gram.y" +#line 4663 "gram.y" { yyval.str = "match"; ; break;} case 856: -#line 4663 "gram.y" +#line 4664 "gram.y" { yyval.str = "maxvalue"; ; break;} case 857: -#line 4664 "gram.y" +#line 4665 "gram.y" { yyval.str = "minvalue"; ; break;} case 858: -#line 4665 "gram.y" +#line 4666 "gram.y" { yyval.str = "next"; ; break;} case 859: -#line 4666 "gram.y" +#line 4667 "gram.y" { yyval.str = "nocreatedb"; ; break;} case 860: -#line 4667 "gram.y" +#line 4668 "gram.y" { yyval.str = "nocreateuser"; ; break;} case 861: -#line 4668 "gram.y" +#line 4669 "gram.y" { yyval.str = "nothing"; ; break;} case 862: -#line 4669 "gram.y" +#line 4670 "gram.y" { yyval.str = "notnull"; ; break;} case 863: -#line 4670 "gram.y" +#line 4671 "gram.y" { yyval.str = "of"; ; break;} case 864: -#line 4671 "gram.y" +#line 4672 "gram.y" { yyval.str = "oids"; ; break;} case 865: -#line 4672 "gram.y" +#line 4673 "gram.y" { yyval.str = "only"; ; break;} case 866: -#line 4673 "gram.y" +#line 4674 "gram.y" { yyval.str = "operator"; ; break;} case 867: -#line 4674 "gram.y" +#line 4675 "gram.y" { yyval.str = "option"; ; break;} case 868: -#line 4675 "gram.y" +#line 4676 "gram.y" { yyval.str = "password"; ; break;} case 869: -#line 4676 "gram.y" +#line 4677 "gram.y" { yyval.str = "prior"; ; break;} case 870: -#line 4677 "gram.y" +#line 4678 "gram.y" { yyval.str = "privileges"; ; break;} case 871: -#line 4678 "gram.y" +#line 4679 "gram.y" { yyval.str = "procedural"; ; break;} case 872: -#line 4679 "gram.y" +#line 4680 "gram.y" { yyval.str = "read"; ; break;} case 873: -#line 4680 "gram.y" +#line 4681 "gram.y" { yyval.str = "recipe"; ; break;} case 874: -#line 4681 "gram.y" +#line 4682 "gram.y" { yyval.str = "relative"; ; break;} case 875: -#line 4682 "gram.y" +#line 4683 "gram.y" { yyval.str = "rename"; ; break;} case 876: -#line 4683 "gram.y" +#line 4684 "gram.y" { yyval.str = "returns"; ; break;} case 877: -#line 4684 "gram.y" +#line 4685 "gram.y" { yyval.str = "row"; ; break;} case 878: -#line 4685 "gram.y" +#line 4686 "gram.y" { yyval.str = "rule"; ; break;} case 879: -#line 4686 "gram.y" +#line 4687 "gram.y" { yyval.str = "scroll"; ; break;} case 880: -#line 4687 "gram.y" +#line 4688 "gram.y" { yyval.str = "sequence"; ; break;} case 881: -#line 4688 "gram.y" +#line 4689 "gram.y" { yyval.str = "serial"; ; break;} case 882: -#line 4689 "gram.y" +#line 4690 "gram.y" { yyval.str = "start"; ; break;} case 883: -#line 4690 "gram.y" +#line 4691 "gram.y" { yyval.str = "statement"; ; break;} case 884: -#line 4691 "gram.y" +#line 4692 "gram.y" { yyval.str = "stdin"; ; break;} case 885: -#line 4692 "gram.y" +#line 4693 "gram.y" { yyval.str = "stdout"; ; break;} case 886: -#line 4693 "gram.y" +#line 4694 "gram.y" { yyval.str = "time"; ; break;} case 887: -#line 4694 "gram.y" +#line 4695 "gram.y" { yyval.str = "timezone_hour"; ; break;} case 888: -#line 4695 "gram.y" +#line 4696 "gram.y" { yyval.str = "timezone_minute"; ; break;} case 889: -#line 4696 "gram.y" +#line 4697 "gram.y" { yyval.str = "trigger"; ; break;} case 890: -#line 4697 "gram.y" +#line 4698 "gram.y" { yyval.str = "trusted"; ; break;} case 891: -#line 4698 "gram.y" +#line 4699 "gram.y" { yyval.str = "type"; ; break;} case 892: -#line 4699 "gram.y" +#line 4700 "gram.y" { yyval.str = "valid"; ; break;} case 893: -#line 4700 "gram.y" +#line 4701 "gram.y" { yyval.str = "version"; ; break;} case 894: -#line 4701 "gram.y" +#line 4702 "gram.y" { yyval.str = "zone"; ; break;} case 895: -#line 4714 "gram.y" +#line 4715 "gram.y" { yyval.str = yyvsp[0].str; ; break;} case 896: -#line 4715 "gram.y" +#line 4716 "gram.y" { yyval.str = "abort"; ; break;} case 897: -#line 4716 "gram.y" +#line 4717 "gram.y" { yyval.str = "analyze"; ; break;} case 898: -#line 4717 "gram.y" +#line 4718 "gram.y" { yyval.str = "binary"; ; break;} case 899: -#line 4718 "gram.y" +#line 4719 "gram.y" { yyval.str = "cluster"; ; break;} case 900: -#line 4719 "gram.y" +#line 4720 "gram.y" { yyval.str = "constraint"; ; break;} case 901: -#line 4720 "gram.y" +#line 4721 "gram.y" { yyval.str = "copy"; ; break;} case 902: -#line 4721 "gram.y" +#line 4722 "gram.y" { yyval.str = "cross"; ; break;} case 903: -#line 4722 "gram.y" +#line 4723 "gram.y" { yyval.str = "current"; ; break;} case 904: -#line 4723 "gram.y" +#line 4724 "gram.y" { yyval.str = "do"; ; break;} case 905: -#line 4724 "gram.y" +#line 4725 "gram.y" { yyval.str = "explain"; ; break;} case 906: -#line 4725 "gram.y" +#line 4726 "gram.y" { yyval.str = "extend"; ; break;} case 907: -#line 4726 "gram.y" +#line 4727 "gram.y" { yyval.str = "false"; ; break;} case 908: -#line 4727 "gram.y" +#line 4728 "gram.y" { yyval.str = "foreign"; ; break;} case 909: -#line 4728 "gram.y" +#line 4729 "gram.y" { yyval.str = "group"; ; break;} case 910: -#line 4729 "gram.y" +#line 4730 "gram.y" { yyval.str = "listen"; ; break;} case 911: -#line 4730 "gram.y" +#line 4731 "gram.y" { yyval.str = "load"; ; break;} case 912: -#line 4731 "gram.y" +#line 4732 "gram.y" { yyval.str = "lock"; ; break;} case 913: -#line 4732 "gram.y" +#line 4733 "gram.y" { yyval.str = "move"; ; break;} case 914: -#line 4733 "gram.y" +#line 4734 "gram.y" { yyval.str = "new"; ; break;} case 915: -#line 4734 "gram.y" +#line 4735 "gram.y" { yyval.str = "none"; ; break;} case 916: -#line 4735 "gram.y" +#line 4736 "gram.y" { yyval.str = "order"; ; break;} case 917: -#line 4736 "gram.y" +#line 4737 "gram.y" { yyval.str = "position"; ; break;} case 918: -#line 4737 "gram.y" +#line 4738 "gram.y" { yyval.str = "precision"; ; break;} case 919: -#line 4738 "gram.y" +#line 4739 "gram.y" { yyval.str = "reset"; ; break;} case 920: -#line 4739 "gram.y" +#line 4740 "gram.y" { yyval.str = "setof"; ; break;} case 921: -#line 4740 "gram.y" +#line 4741 "gram.y" { yyval.str = "show"; ; break;} case 922: -#line 4741 "gram.y" +#line 4742 "gram.y" { yyval.str = "table"; ; break;} case 923: -#line 4742 "gram.y" +#line 4743 "gram.y" { yyval.str = "transaction"; ; break;} case 924: -#line 4743 "gram.y" +#line 4744 "gram.y" { yyval.str = "true"; ; break;} case 925: -#line 4744 "gram.y" +#line 4745 "gram.y" { yyval.str = "vacuum"; ; break;} case 926: -#line 4745 "gram.y" +#line 4746 "gram.y" { yyval.str = "verbose"; ; break;} case 927: -#line 4749 "gram.y" +#line 4750 "gram.y" { if (QueryIsRule) yyval.str = "*CURRENT*"; @@ -10383,7 +10354,7 @@ case 927: ; break;} case 928: -#line 4756 "gram.y" +#line 4757 "gram.y" { if (QueryIsRule) yyval.str = "*NEW*"; @@ -10393,7 +10364,7 @@ case 928: break;} } /* the action file gets copied in in place of this dollarsign */ -#line 498 "/usr/lib/bison.simple" +#line 498 "/usr/local/bison/bison.simple" yyvsp -= yylen; yyssp -= yylen; @@ -10589,7 +10560,7 @@ yyerrhandle: yystate = yyn; goto yynewstate; } -#line 4764 "gram.y" +#line 4765 "gram.y" static Node * diff --git a/src/backend/utils/adt/Makefile b/src/backend/utils/adt/Makefile index d9812a5236..686a2d0e8c 100644 --- a/src/backend/utils/adt/Makefile +++ b/src/backend/utils/adt/Makefile @@ -4,7 +4,7 @@ # Makefile for utils/adt # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/backend/utils/adt/Makefile,v 1.17 1998/08/24 01:38:04 momjian Exp $ +# $Header: /cvsroot/pgsql/src/backend/utils/adt/Makefile,v 1.18 1998/10/03 05:40:47 momjian Exp $ # #------------------------------------------------------------------------- @@ -23,7 +23,8 @@ OBJS = acl.o arrayfuncs.o arrayutils.o bool.o cash.o char.o chunk.o \ misc.o nabstime.o name.o not_in.o numutils.o \ oid.o oracle_compat.o \ regexp.o regproc.o ruleutils.o selfuncs.o sets.o \ - tid.o timestamp.o varchar.o varlena.o version.o + tid.o timestamp.o varchar.o varlena.o version.o \ + ip.o mac.o inet_net_ntop.o inet_net_pton.o all: SUBSYS.o diff --git a/src/backend/utils/adt/inet_net_ntop.c b/src/backend/utils/adt/inet_net_ntop.c new file mode 100644 index 0000000000..655f8ba62e --- /dev/null +++ b/src/backend/utils/adt/inet_net_ntop.c @@ -0,0 +1,137 @@ +/* + * Copyright (c) 1996 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static const char rcsid[] = "$Id: inet_net_ntop.c,v 1.1 1998/10/03 05:40:48 momjian Exp $"; + +#endif + +#include +#include +#include +#include + +#include +#include +#include +#include + +#ifdef SPRINTF_CHAR +#define SPRINTF(x) strlen(sprintf/**/x) +#else +#define SPRINTF(x) ((size_t)sprintf x) +#endif + +static char *inet_net_ntop_ipv4(const u_char *src, int bits, + char *dst, size_t size); + +/* + * char * + * inet_net_ntop(af, src, bits, dst, size) + * convert network number from network to presentation format. + * generates CIDR style result always. + * return: + * pointer to dst, or NULL if an error occurred (check errno). + * author: + * Paul Vixie (ISC), July 1996 + */ +char * +inet_net_ntop(int af, const void *src, int bits, char *dst, size_t size) +{ + switch (af) + { + case AF_INET: + return (inet_net_ntop_ipv4(src, bits, dst, size)); + default: + errno = EAFNOSUPPORT; + return (NULL); + } +} + +/* + * static char * + * inet_net_ntop_ipv4(src, bits, dst, size) + * convert IPv4 network number from network to presentation format. + * generates CIDR style result always. + * return: + * pointer to dst, or NULL if an error occurred (check errno). + * note: + * network byte order assumed. this means 192.5.5.240/28 has + * 0x11110000 in its fourth octet. + * author: + * Paul Vixie (ISC), July 1996 + */ +static char * +inet_net_ntop_ipv4(const u_char *src, int bits, char *dst, size_t size) +{ + char *odst = dst; + char *t; + u_int m; + int b; + + if (bits < 0 || bits > 32) + { + errno = EINVAL; + return (NULL); + } + if (bits == 0) + { + if (size < sizeof "0") + goto emsgsize; + *dst++ = '0'; + *dst = '\0'; + } + + /* Format whole octets. */ + for (b = bits / 8; b > 0; b--) + { + if (size < sizeof "255.") + goto emsgsize; + t = dst; + dst += SPRINTF((dst, "%u", *src++)); + if (b > 1) + { + *dst++ = '.'; + *dst = '\0'; + } + size -= (size_t) (dst - t); + } + + /* Format partial octet. */ + b = bits % 8; + if (b > 0) + { + if (size < sizeof ".255") + goto emsgsize; + t = dst; + if (dst != odst) + *dst++ = '.'; + m = ((1 << b) - 1) << (8 - b); + dst += SPRINTF((dst, "%u", *src & m)); + size -= (size_t) (dst - t); + } + + /* Format CIDR /width. */ + if (size < sizeof "/32") + goto emsgsize; + dst += SPRINTF((dst, "/%u", bits)); + return (odst); + +emsgsize: + errno = EMSGSIZE; + return (NULL); +} diff --git a/src/backend/utils/adt/inet_net_pton.c b/src/backend/utils/adt/inet_net_pton.c new file mode 100644 index 0000000000..8b3ae41127 --- /dev/null +++ b/src/backend/utils/adt/inet_net_pton.c @@ -0,0 +1,217 @@ +/* + * Copyright (c) 1996 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static const char rcsid[] = "$Id: inet_net_pton.c,v 1.1 1998/10/03 05:40:49 momjian Exp $"; + +#endif + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#ifdef SPRINTF_CHAR +#define SPRINTF(x) strlen(sprintf/**/x) +#else +#define SPRINTF(x) ((size_t)sprintf x) +#endif + +static int inet_net_pton_ipv4(const char *src, u_char *dst, size_t size); + +/* + * static int + * inet_net_pton(af, src, dst, size) + * convert network number from presentation to network format. + * accepts hex octets, hex strings, decimal octets, and /CIDR. + * "size" is in bytes and describes "dst". + * return: + * number of bits, either imputed classfully or specified with /CIDR, + * or -1 if some failure occurred (check errno). ENOENT means it was + * not a valid network specification. + * author: + * Paul Vixie (ISC), June 1996 + */ +int +inet_net_pton(int af, const char *src, void *dst, size_t size) +{ + switch (af) + { + case AF_INET: + return (inet_net_pton_ipv4(src, dst, size)); + default: + errno = EAFNOSUPPORT; + return (-1); + } +} + +/* + * static int + * inet_net_pton_ipv4(src, dst, size) + * convert IPv4 network number from presentation to network format. + * accepts hex octets, hex strings, decimal octets, and /CIDR. + * "size" is in bytes and describes "dst". + * return: + * number of bits, either imputed classfully or specified with /CIDR, + * or -1 if some failure occurred (check errno). ENOENT means it was + * not an IPv4 network specification. + * note: + * network byte order assumed. this means 192.5.5.240/28 has + * 0x11110000 in its fourth octet. + * author: + * Paul Vixie (ISC), June 1996 + */ +static int +inet_net_pton_ipv4(const char *src, u_char *dst, size_t size) +{ + static const char + xdigits[] = "0123456789abcdef", + digits[] = "0123456789"; + int n, + ch, + tmp, + dirty, + bits; + const u_char *odst = dst; + + ch = *src++; + if (ch == '0' && (src[0] == 'x' || src[0] == 'X') + && isascii(src[1]) && isxdigit(src[1])) + { + /* Hexadecimal: Eat nybble string. */ + if (size <= 0) + goto emsgsize; + *dst = 0, dirty = 0; + src++; /* skip x or X. */ + while ((ch = *src++) != '\0' && + isascii(ch) && isxdigit(ch)) + { + if (isupper(ch)) + ch = tolower(ch); + n = strchr(xdigits, ch) - xdigits; + assert(n >= 0 && n <= 15); + *dst |= n; + if (!dirty++) + *dst <<= 4; + else if (size-- > 0) + *++dst = 0, dirty = 0; + else + goto emsgsize; + } + if (dirty) + size--; + } + else if (isascii(ch) && isdigit(ch)) + { + /* Decimal: eat dotted digit string. */ + for (;;) + { + tmp = 0; + do + { + n = strchr(digits, ch) - digits; + assert(n >= 0 && n <= 9); + tmp *= 10; + tmp += n; + if (tmp > 255) + goto enoent; + } while ((ch = *src++) != '\0' && + isascii(ch) && isdigit(ch)); + if (size-- <= 0) + goto emsgsize; + *dst++ = (u_char) tmp; + if (ch == '\0' || ch == '/') + break; + if (ch != '.') + goto enoent; + ch = *src++; + if (!isascii(ch) || !isdigit(ch)) + goto enoent; + } + } + else + goto enoent; + + bits = -1; + if (ch == '/' && isascii(src[0]) && isdigit(src[0]) && dst > odst) + { + /* CIDR width specifier. Nothing can follow it. */ + ch = *src++; /* Skip over the /. */ + bits = 0; + do + { + n = strchr(digits, ch) - digits; + assert(n >= 0 && n <= 9); + bits *= 10; + bits += n; + } while ((ch = *src++) != '\0' && + isascii(ch) && isdigit(ch)); + if (ch != '\0') + goto enoent; + if (bits > 32) + goto emsgsize; + } + + /* Firey death and destruction unless we prefetched EOS. */ + if (ch != '\0') + goto enoent; + + /* If nothing was written to the destination, we found no address. */ + if (dst == odst) + goto enoent; + /* If no CIDR spec was given, infer width from net class. */ + if (bits == -1) + { + if (*odst >= 240) /* Class E */ + bits = 32; + else if (*odst >= 224) /* Class D */ + bits = 4; + else if (*odst >= 192) /* Class C */ + bits = 24; + else if (*odst >= 128) /* Class B */ + bits = 16; + else +/* Class A */ + bits = 8; + /* If imputed mask is narrower than specified octets, widen. */ + if (bits >= 8 && bits < ((dst - odst) * 8)) + bits = (dst - odst) * 8; + } + /* Extend network to cover the actual mask. */ + while (bits > ((dst - odst) * 8)) + { + if (size-- <= 0) + goto emsgsize; + *dst++ = '\0'; + } + return (bits); + +enoent: + errno = ENOENT; + return (-1); + +emsgsize: + errno = EMSGSIZE; + return (-1); +} diff --git a/src/backend/utils/adt/ip.c b/src/backend/utils/adt/ip.c new file mode 100644 index 0000000000..b29339694b --- /dev/null +++ b/src/backend/utils/adt/ip.c @@ -0,0 +1,283 @@ +/* + * PostgreSQL type definitions for IP addresses. This + * is for IP V4 CIDR notation, but prepared for V6: just + * add the necessary bits where the comments indicate. + * + * $Id: ip.c,v 1.1 1998/10/03 05:40:49 momjian Exp $ + */ + +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include + +/* + * Access macros. Add IPV6 support. + */ + +#define ip_addrsize(ipaddrptr) \ + (((ipaddr_struct *)VARDATA(ipaddrptr))->family == AF_INET ? 4 : -1) + +#define ip_family(ipaddrptr) \ + (((ipaddr_struct *)VARDATA(ipaddrptr))->family) + +#define ip_bits(ipaddrptr) \ + (((ipaddr_struct *)VARDATA(ipaddrptr))->bits) + +#define ip_v4addr(ipaddrptr) \ + (((ipaddr_struct *)VARDATA(ipaddrptr))->addr.ipv4_addr) + +/* + * IP address reader. + */ + +ipaddr * +ipaddr_in(char *src) +{ + int bits; + ipaddr *dst; + + dst = palloc(VARHDRSZ + sizeof(ipaddr_struct)); + if (dst == NULL) + { + elog(ERROR, "unable to allocate memory in ipaddr_in()"); + return (NULL); + } + /* First, try for an IP V4 address: */ + ip_family(dst) = AF_INET; + bits = inet_net_pton(ip_family(dst), src, &ip_v4addr(dst), ip_addrsize(dst)); + if ((bits < 0) || (bits > 32)) + { + /* Go for an IPV6 address here, before faulting out: */ + elog(ERROR, "could not parse \"%s\"", src); + pfree(dst); + return (NULL); + } + VARSIZE(dst) = VARHDRSZ + + ((char *) &ip_v4addr(dst) - (char *) VARDATA(dst)) + + ip_addrsize(dst); + ip_bits(dst) = bits; + return (dst); +} + +/* + * IP address output function. + */ + +char * +ipaddr_out(ipaddr *src) +{ + char *dst, + tmp[sizeof("255.255.255.255/32")]; + + if (ip_family(src) == AF_INET) + { + /* It's an IP V4 address: */ + if (inet_net_ntop(AF_INET, &ip_v4addr(src), ip_bits(src), + tmp, sizeof(tmp)) < 0) + { + elog(ERROR, "unable to print address (%s)", strerror(errno)); + return (NULL); + } + } + else + { + /* Go for an IPV6 address here, before faulting out: */ + elog(ERROR, "unknown address family (%d)", ip_family(src)); + return (NULL); + } + dst = palloc(strlen(tmp) + 1); + if (dst == NULL) + { + elog(ERROR, "unable to allocate memory in ipaddr_out()"); + return (NULL); + } + strcpy(dst, tmp); + return (dst); +} + +/* + * Boolean tests for magnitude. Add V4/V6 testing! + */ + +bool +ipaddr_lt(ipaddr *a1, ipaddr *a2) +{ + if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET)) + { + int order = v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a2)); + + return ((order < 0) || ((order == 0) && (ip_bits(a1) < ip_bits(a2)))); + } + else + { + /* Go for an IPV6 address here, before faulting out: */ + elog(ERROR, "cannot compare address families %d and %d", + ip_family(a1), ip_family(a2)); + return (FALSE); + } +} + +bool +ipaddr_le(ipaddr *a1, ipaddr *a2) +{ + return (ipaddr_lt(a1, a2) || ipaddr_eq(a1, a2)); +} + +bool +ipaddr_eq(ipaddr *a1, ipaddr *a2) +{ + if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET)) + { + return ((ip_bits(a1) == ip_bits(a2)) + && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a1)) == 0)); + } + else + { + /* Go for an IPV6 address here, before faulting out: */ + elog(ERROR, "cannot compare address families %d and %d", + ip_family(a1), ip_family(a2)); + return (FALSE); + } +} + +bool +ipaddr_ge(ipaddr *a1, ipaddr *a2) +{ + return (ipaddr_gt(a1, a2) || ipaddr_eq(a1, a2)); +} + +bool +ipaddr_gt(ipaddr *a1, ipaddr *a2) +{ + if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET)) + { + int order = v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a2)); + + return ((order > 0) || ((order == 0) && (ip_bits(a1) > ip_bits(a2)))); + } + else + { + /* Go for an IPV6 address here, before faulting out: */ + elog(ERROR, "cannot compare address families %d and %d", + ip_family(a1), ip_family(a2)); + return (FALSE); + } +} + +bool +ipaddr_ne(ipaddr *a1, ipaddr *a2) +{ + return (!ipaddr_eq(a1, a2)); +} + +bool +ipaddr_sub(ipaddr *a1, ipaddr *a2) +{ + if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET)) + { + return ((ip_bits(a1) > ip_bits(a2)) + && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a2)) == 0)); + } + else + { + /* Go for an IPV6 address here, before faulting out: */ + elog(ERROR, "cannot compare address families %d and %d", + ip_family(a1), ip_family(a2)); + return (FALSE); + } +} + +bool +ipaddr_subeq(ipaddr *a1, ipaddr *a2) +{ + if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET)) + { + return ((ip_bits(a1) >= ip_bits(a2)) + && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a2)) == 0)); + } + else + { + /* Go for an IPV6 address here, before faulting out: */ + elog(ERROR, "cannot compare address families %d and %d", + ip_family(a1), ip_family(a2)); + return (FALSE); + } +} + +bool +ipaddr_sup(ipaddr *a1, ipaddr *a2) +{ + if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET)) + { + return ((ip_bits(a1) < ip_bits(a2)) + && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a1)) == 0)); + } + else + { + /* Go for an IPV6 address here, before faulting out: */ + elog(ERROR, "cannot compare address families %d and %d", + ip_family(a1), ip_family(a2)); + return (FALSE); + } +} + +bool +ipaddr_supeq(ipaddr *a1, ipaddr *a2) +{ + if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET)) + { + return ((ip_bits(a1) <= ip_bits(a2)) + && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a1)) == 0)); + } + else + { + /* Go for an IPV6 address here, before faulting out: */ + elog(ERROR, "cannot compare address families %d and %d", + ip_family(a1), ip_family(a2)); + return (FALSE); + } +} + +/* + * Comparison function for sorting. Add V4/V6 testing! + */ + +int4 +ipaddr_cmp(ipaddr *a1, ipaddr *a2) +{ + if (ntohl(ip_v4addr(a1)) < ntohl(ip_v4addr(a2))) + return (-1); + else if (ntohl(ip_v4addr(a1)) > ntohl(ip_v4addr(a2))) + return (1); + return 0; +} + +/* + * Bitwise comparison for V4 addresses. Add V6 implementation! + */ + +int +v4bitncmp(u_int32_t a1, u_int32_t a2, int bits) +{ + unsigned long mask = 0; + int i; + + for (i = 0; i < bits; i++) + mask = (mask >> 1) | 0x80000000; + a1 = ntohl(a1); + a2 = ntohl(a2); + if ((a1 & mask) < (a2 & mask)) + return (-1); + else if ((a1 & mask) > (a2 & mask)) + return (1); + return (0); +} diff --git a/src/backend/utils/adt/mac.c b/src/backend/utils/adt/mac.c new file mode 100644 index 0000000000..8d09ea16c6 --- /dev/null +++ b/src/backend/utils/adt/mac.c @@ -0,0 +1,323 @@ +/* + * PostgreSQL type definitions for MAC addresses. + * + * $Id: mac.c,v 1.1 1998/10/03 05:40:50 momjian Exp $ + */ + +#include + +#include +#include + +#include + +manufacturer manufacturers[] = { + {0x00, 0x00, 0x0C, "Cisco"}, + {0x00, 0x00, 0x0E, "Fujitsu"}, + {0x00, 0x00, 0x0F, "NeXT"}, + {0x00, 0x00, 0x10, "Sytek"}, + {0x00, 0x00, 0x1D, "Cabletron"}, + {0x00, 0x00, 0x20, "DIAB"}, + {0x00, 0x00, 0x22, "Visual Technology"}, + {0x00, 0x00, 0x2A, "TRW"}, + {0x00, 0x00, 0x32, "GPT Limited"}, + {0x00, 0x00, 0x5A, "S & Koch"}, + {0x00, 0x00, 0x5E, "IANA"}, + {0x00, 0x00, 0x65, "Network General"}, + {0x00, 0x00, 0x6B, "MIPS"}, + {0x00, 0x00, 0x77, "MIPS"}, + {0x00, 0x00, 0x7A, "Ardent"}, + {0x00, 0x00, 0x89, "Cayman Systems"}, + {0x00, 0x00, 0x93, "Proteon"}, + {0x00, 0x00, 0x9F, "Ameristar Technology"}, + {0x00, 0x00, 0xA2, "Wellfleet"}, + {0x00, 0x00, 0xA3, "Network Application Technology"}, + {0x00, 0x00, 0xA6, "Network General"}, + {0x00, 0x00, 0xA7, "NCD"}, + {0x00, 0x00, 0xA9, "Network Systems"}, + {0x00, 0x00, 0xAA, "Xerox"}, + {0x00, 0x00, 0xB3, "CIMLinc"}, + {0x00, 0x00, 0xB7, "Dove Fastnet"}, + {0x00, 0x00, 0xBC, "Allen-Bradley"}, + {0x00, 0x00, 0xC0, "Western Digital"}, + {0x00, 0x00, 0xC5, "Farallon"}, + {0x00, 0x00, 0xC6, "Hewlett-Packard"}, + {0x00, 0x00, 0xC8, "Altos"}, + {0x00, 0x00, 0xC9, "Emulex"}, + {0x00, 0x00, 0xD7, "Dartmouth College"}, + {0x00, 0x00, 0xD8, "3Com (?)"}, + {0x00, 0x00, 0xDD, "Gould"}, + {0x00, 0x00, 0xDE, "Unigraph"}, + {0x00, 0x00, 0xE2, "Acer Counterpoint"}, + {0x00, 0x00, 0xEF, "Alantec"}, + {0x00, 0x00, 0xFD, "High Level Hardware"}, + {0x00, 0x01, 0x02, "BBN internal usage"}, + {0x00, 0x20, 0xAF, "3Com"}, + {0x00, 0x17, 0x00, "Kabel"}, + {0x00, 0x80, 0x64, "Wyse Technology"}, + {0x00, 0x80, 0x2B, "IMAC (?)"}, + {0x00, 0x80, 0x2D, "Xylogics, Inc."}, + {0x00, 0x80, 0x8C, "Frontier Software Development"}, + {0x00, 0x80, 0xC2, "IEEE 802.1 Committee"}, + {0x00, 0x80, 0xD3, "Shiva"}, + {0x00, 0xAA, 0x00, "Intel"}, + {0x00, 0xDD, 0x00, "Ungermann-Bass"}, + {0x00, 0xDD, 0x01, "Ungermann-Bass"}, + {0x02, 0x07, 0x01, "Racal InterLan"}, + {0x02, 0x04, 0x06, "BBN internal usage"}, + {0x02, 0x60, 0x86, "Satelcom MegaPac"}, + {0x02, 0x60, 0x8C, "3Com"}, + {0x02, 0xCF, 0x1F, "CMC"}, + {0x08, 0x00, 0x02, "3Com"}, + {0x08, 0x00, 0x03, "ACC"}, + {0x08, 0x00, 0x05, "Symbolics"}, + {0x08, 0x00, 0x08, "BBN"}, + {0x08, 0x00, 0x09, "Hewlett-Packard"}, + {0x08, 0x00, 0x0A, "Nestar Systems"}, + {0x08, 0x00, 0x0B, "Unisys"}, + {0x08, 0x00, 0x11, "Tektronix"}, + {0x08, 0x00, 0x14, "Excelan"}, + {0x08, 0x00, 0x17, "NSC"}, + {0x08, 0x00, 0x1A, "Data General"}, + {0x08, 0x00, 0x1B, "Data General"}, + {0x08, 0x00, 0x1E, "Apollo"}, + {0x08, 0x00, 0x20, "Sun"}, + {0x08, 0x00, 0x22, "NBI"}, + {0x08, 0x00, 0x25, "CDC"}, + {0x08, 0x00, 0x26, "Norsk Data"}, + {0x08, 0x00, 0x27, "PCS Computer Systems GmbH"}, + {0x08, 0x00, 0x28, "Texas Instruments"}, + {0x08, 0x00, 0x2B, "DEC"}, + {0x08, 0x00, 0x2E, "Metaphor"}, + {0x08, 0x00, 0x2F, "Prime Computer"}, + {0x08, 0x00, 0x36, "Intergraph"}, + {0x08, 0x00, 0x37, "Fujitsu-Xerox"}, + {0x08, 0x00, 0x38, "Bull"}, + {0x08, 0x00, 0x39, "Spider Systems"}, + {0x08, 0x00, 0x41, "DCA Digital Comm. Assoc."}, + {0x08, 0x00, 0x45, "Xylogics (?)"}, + {0x08, 0x00, 0x46, "Sony"}, + {0x08, 0x00, 0x47, "Sequent"}, + {0x08, 0x00, 0x49, "Univation"}, + {0x08, 0x00, 0x4C, "Encore"}, + {0x08, 0x00, 0x4E, "BICC"}, + {0x08, 0x00, 0x56, "Stanford University"}, + {0x08, 0x00, 0x58, "DECsystem 20 (?)"}, + {0x08, 0x00, 0x5A, "IBM"}, + {0x08, 0x00, 0x67, "Comdesign"}, + {0x08, 0x00, 0x68, "Ridge"}, + {0x08, 0x00, 0x69, "Silicon Graphics"}, + {0x08, 0x00, 0x6E, "Concurrent"}, + {0x08, 0x00, 0x75, "DDE"}, + {0x08, 0x00, 0x7C, "Vitalink"}, + {0x08, 0x00, 0x80, "XIOS"}, + {0x08, 0x00, 0x86, "Imagen/QMS"}, + {0x08, 0x00, 0x87, "Xyplex"}, + {0x08, 0x00, 0x89, "Kinetics"}, + {0x08, 0x00, 0x8B, "Pyramid"}, + {0x08, 0x00, 0x8D, "XyVision"}, + {0x08, 0x00, 0x90, "Retix Inc"}, + {0x48, 0x44, 0x53, "HDS (?)"}, + {0x80, 0x00, 0x10, "AT&T"}, + {0xAA, 0x00, 0x00, "DEC"}, + {0xAA, 0x00, 0x01, "DEC"}, + {0xAA, 0x00, 0x02, "DEC"}, + {0xAA, 0x00, 0x03, "DEC"}, + {0xAA, 0x00, 0x04, "DEC"}, + {0x00, 0x00, 0x00, NULL} +}; + +/* + * Utility macros used for sorting and comparing: + */ + +#define hibits(addr) \ + ((unsigned long)((addr->a<<16)|(addr->b<<8)|(addr->c))) + +#define lobits(addr) \ + ((unsigned long)((addr->c<<16)|(addr->e<<8)|(addr->f))) + +/* + * MAC address reader. Accepts several common notations. + */ + +macaddr * +macaddr_in(char *str) +{ + int a, + b, + c, + d, + e, + f; + macaddr *result; + int count; + + if (strlen(str) > 0) + { + + count = sscanf(str, "%x:%x:%x:%x:%x:%x", &a, &b, &c, &d, &e, &f); + if (count != 6) + count = sscanf(str, "%x-%x-%x-%x-%x-%x", &a, &b, &c, &d, &e, &f); + if (count != 6) + count = sscanf(str, "%2x%2x%2x:%2x%2x%2x", &a, &b, &c, &d, &e, &f); + if (count != 6) + count = sscanf(str, "%2x%2x%2x-%2x%2x%2x", &a, &b, &c, &d, &e, &f); + if (count != 6) + count = sscanf(str, "%2x%2x.%2x%2x.%2x%2x", &a, &b, &c, &d, &e, &f); + + if (count != 6) + { + elog(ERROR, "macaddr_in: error in parsing \"%s\"", str); + return (NULL); + } + + if ((a < 0) || (a > 255) || (b < 0) || (b > 255) || + (c < 0) || (c > 255) || (d < 0) || (d > 255) || + (e < 0) || (e > 255) || (f < 0) || (f > 255)) + { + elog(ERROR, "macaddr_in: illegal address \"%s\"", str); + return (NULL); + } + } + else + { + a = b = c = d = e = f = 0; /* special case for missing + * address */ + } + + result = (macaddr *) palloc(sizeof(macaddr)); + + result->a = a; + result->b = b; + result->c = c; + result->d = d; + result->e = e; + result->f = f; + + return (result); +} + +/* + * MAC address output function. Fixed format. + */ + +char * +macaddr_out(macaddr *addr) +{ + char *result; + + if (addr == NULL) + return (NULL); + + result = (char *) palloc(32); + + if ((hibits(addr) > 0) || (lobits(addr) > 0)) + { + sprintf(result, "%02x:%02x:%02x:%02x:%02x:%02x", + addr->a, addr->b, addr->c, addr->d, addr->e, addr->f); + } + else + { + result[0] = 0; /* special case for missing address */ + } + return (result); +} + +/* + * Boolean tests. + */ + +bool +macaddr_lt(macaddr *a1, macaddr *a2) +{ + return ((hibits(a1) < hibits(a2)) || + ((hibits(a1) == hibits(a2)) && lobits(a1) < lobits(a2))); +}; + +bool +macaddr_le(macaddr *a1, macaddr *a2) +{ + return ((hibits(a1) < hibits(a2)) || + ((hibits(a1) == hibits(a2)) && lobits(a1) <= lobits(a2))); +}; + +bool +macaddr_eq(macaddr *a1, macaddr *a2) +{ + return ((hibits(a1) == hibits(a2)) && (lobits(a1) == lobits(a2))); +}; + +bool +macaddr_ge(macaddr *a1, macaddr *a2) +{ + return ((hibits(a1) > hibits(a2)) || + ((hibits(a1) == hibits(a2)) && lobits(a1) >= lobits(a2))); +}; + +bool +macaddr_gt(macaddr *a1, macaddr *a2) +{ + return ((hibits(a1) > hibits(a2)) || + ((hibits(a1) == hibits(a2)) && lobits(a1) > lobits(a2))); +}; + +bool +macaddr_ne(macaddr *a1, macaddr *a2) +{ + return ((hibits(a1) != hibits(a2)) || (lobits(a1) != lobits(a2))); +}; + +/* + * Comparison function for sorting: + */ + +int4 +macaddr_cmp(macaddr *a1, macaddr *a2) +{ + if (hibits(a1) < hibits(a2)) + return -1; + else if (hibits(a1) > hibits(a2)) + return 1; + else if (lobits(a1) < lobits(a2)) + return -1; + else if (lobits(a1) > lobits(a2)) + return 1; + else + return 0; +} + +/* + * The special manufacturer fetching function. See "mac.h". + */ + +text * +macaddr_manuf(macaddr *addr) +{ + manufacturer *manuf; + int length; + text *result; + + for (manuf = manufacturers; manuf->name != NULL; manuf++) + { + if ((manuf->a == addr->a) && + (manuf->b == addr->b) && + (manuf->c == addr->c)) + break; + } + if (manuf->name == NULL) + { + result = palloc(VARHDRSZ + 1); + memset(result, 0, VARHDRSZ + 1); + VARSIZE(result) = VARHDRSZ + 1; + } + else + { + length = strlen(manuf->name) + 1; + result = palloc(length + VARHDRSZ); + memset(result, 0, length + VARHDRSZ); + VARSIZE(result) = length + VARHDRSZ; + memcpy(VARDATA(result), manuf->name, length); + } + return result; +} diff --git a/src/include/catalog/pg_amop.h b/src/include/catalog/pg_amop.h index 40a112e642..140eaa3b39 100644 --- a/src/include/catalog/pg_amop.h +++ b/src/include/catalog/pg_amop.h @@ -7,7 +7,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: pg_amop.h,v 1.15 1998/09/01 04:34:48 momjian Exp $ + * $Id: pg_amop.h,v 1.16 1998/10/03 05:40:51 momjian Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki @@ -298,6 +298,26 @@ DATA(insert OID = 0 ( 403 1313 1330 3 btreesel btreenpage )); DATA(insert OID = 0 ( 403 1313 1335 4 btreesel btreenpage )); DATA(insert OID = 0 ( 403 1313 1334 5 btreesel btreenpage )); +/* + * nbtree macaddr + */ + +DATA(insert OID = 0 ( 403 810 1222 1 btreesel btreenpage )); +DATA(insert OID = 0 ( 403 810 1223 2 btreesel btreenpage )); +DATA(insert OID = 0 ( 403 810 1220 3 btreesel btreenpage )); +DATA(insert OID = 0 ( 403 810 1225 4 btreesel btreenpage )); +DATA(insert OID = 0 ( 403 810 1224 5 btreesel btreenpage )); + +/* + * nbtree ip + */ + +DATA(insert OID = 0 ( 403 935 1203 1 btreesel btreenpage )); +DATA(insert OID = 0 ( 403 935 1204 2 btreesel btreenpage )); +DATA(insert OID = 0 ( 403 935 1201 3 btreesel btreenpage )); +DATA(insert OID = 0 ( 403 935 1206 4 btreesel btreenpage )); +DATA(insert OID = 0 ( 403 935 1205 5 btreesel btreenpage )); + /* * hash table _ops */ diff --git a/src/include/catalog/pg_amproc.h b/src/include/catalog/pg_amproc.h index 4c12668d66..fc9c526379 100644 --- a/src/include/catalog/pg_amproc.h +++ b/src/include/catalog/pg_amproc.h @@ -9,7 +9,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: pg_amproc.h,v 1.10 1998/09/01 04:34:49 momjian Exp $ + * $Id: pg_amproc.h,v 1.11 1998/10/03 05:40:52 momjian Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki @@ -99,6 +99,8 @@ DATA(insert OID = 0 (403 1115 1107 1)); DATA(insert OID = 0 (403 1181 359 1)); DATA(insert OID = 0 (403 1312 1314 1)); DATA(insert OID = 0 (403 1313 1315 1)); +DATA(insert OID = 0 (403 810 836 1)); +DATA(insert OID = 0 (403 935 926 1)); /* hash */ diff --git a/src/include/catalog/pg_opclass.h b/src/include/catalog/pg_opclass.h index 3f7814a11f..388f598630 100644 --- a/src/include/catalog/pg_opclass.h +++ b/src/include/catalog/pg_opclass.h @@ -7,7 +7,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: pg_opclass.h,v 1.11 1998/09/01 04:35:06 momjian Exp $ + * $Id: pg_opclass.h,v 1.12 1998/10/03 05:40:54 momjian Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki @@ -107,5 +107,9 @@ DATA(insert OID = 1312 ( datetime_ops 1184 )); DESCR(""); DATA(insert OID = 1313 ( timespan_ops 1186 )); DESCR(""); +DATA(insert OID = 810 ( macaddr_ops 829 )); +DESCR(""); +DATA(insert OID = 935 ( ipaddr_ops 869 )); +DESCR(""); #endif /* PG_OPCLASS_H */ diff --git a/src/include/catalog/pg_operator.h b/src/include/catalog/pg_operator.h index 4b22362418..4604ccd7a9 100644 --- a/src/include/catalog/pg_operator.h +++ b/src/include/catalog/pg_operator.h @@ -7,7 +7,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: pg_operator.h,v 1.38 1998/09/14 01:14:48 momjian Exp $ + * $Id: pg_operator.h,v 1.39 1998/10/03 05:40:55 momjian Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki @@ -466,7 +466,7 @@ DATA(insert OID = 1094 ( "<>" PGUID 0 b t f 1082 1082 16 1094 1093 0 0 da DATA(insert OID = 1095 ( "<" PGUID 0 b t f 1082 1082 16 1097 1098 0 0 date_lt intltsel intltjoinsel )); DATA(insert OID = 1096 ( "<=" PGUID 0 b t f 1082 1082 16 1098 1097 0 0 date_le intltsel intltjoinsel )); DATA(insert OID = 1097 ( ">" PGUID 0 b t f 1082 1082 16 1095 1096 0 0 date_gt intltsel intltjoinsel )); -DATA(insert OID = 1098 ( ">=" PGUID 0 b t f 1082 1082 16 1096 1065 0 0 date_ge intltsel intltjoinsel )); +DATA(insert OID = 1098 ( ">=" PGUID 0 b t f 1082 1082 16 1096 1095 0 0 date_ge intltsel intltjoinsel )); DATA(insert OID = 1099 ( "-" PGUID 0 b t f 1082 1082 23 0 0 0 0 date_mi - - )); DATA(insert OID = 1100 ( "+" PGUID 0 b t f 1082 23 1082 0 0 0 0 date_pli - - )); DATA(insert OID = 1101 ( "-" PGUID 0 b t f 1082 23 1082 0 0 0 0 date_mii - - )); @@ -477,7 +477,7 @@ DATA(insert OID = 1109 ( "<>" PGUID 0 b t f 1083 1083 16 1109 1108 0 0 time DATA(insert OID = 1110 ( "<" PGUID 0 b t f 1083 1083 16 1112 1113 0 0 time_lt intltsel intltjoinsel )); DATA(insert OID = 1111 ( "<=" PGUID 0 b t f 1083 1083 16 1113 1112 0 0 time_le intltsel intltjoinsel )); DATA(insert OID = 1112 ( ">" PGUID 0 b t f 1083 1083 16 1110 1111 0 0 time_gt intltsel intltjoinsel )); -DATA(insert OID = 1113 ( ">=" PGUID 0 b t f 1083 1083 16 1111 1065 0 0 time_ge intltsel intltjoinsel )); +DATA(insert OID = 1113 ( ">=" PGUID 0 b t f 1083 1083 16 1111 1110 0 0 time_ge intltsel intltjoinsel )); /* float48 operators */ DATA(insert OID = 1116 ( "+" PGUID 0 b t f 700 701 701 1116 0 0 0 float48pl - - )); @@ -538,10 +538,10 @@ DATA(insert OID = 1305 ( ">=" PGUID 0 b t f 1296 1296 16 1304 1302 0 0 timest /* name, owner, prec, kind, isleft, canhash, left, right, result, com, negate, lsortop, rsortop, oprcode, operrest, oprjoin */ DATA(insert OID = 1320 ( "=" PGUID 0 b t t 1184 1184 16 1320 1321 1322 1322 datetime_eq eqsel eqjoinsel )); DATA(insert OID = 1321 ( "<>" PGUID 0 b t f 1184 1184 16 1321 1320 0 0 datetime_ne neqsel neqjoinsel )); -DATA(insert OID = 1322 ( "<" PGUID 0 b t f 1184 1184 16 1325 1325 0 0 datetime_lt intltsel intltjoinsel )); -DATA(insert OID = 1323 ( "<=" PGUID 0 b t f 1184 1184 16 1324 1324 0 0 datetime_le intltsel intltjoinsel )); -DATA(insert OID = 1324 ( ">" PGUID 0 b t f 1184 1184 16 1323 1323 0 0 datetime_gt intltsel intltjoinsel )); -DATA(insert OID = 1325 ( ">=" PGUID 0 b t f 1184 1184 16 1322 1322 0 0 datetime_ge intltsel intltjoinsel )); +DATA(insert OID = 1322 ( "<" PGUID 0 b t f 1184 1184 16 1324 1325 0 0 datetime_lt intltsel intltjoinsel )); +DATA(insert OID = 1323 ( "<=" PGUID 0 b t f 1184 1184 16 1325 1324 0 0 datetime_le intltsel intltjoinsel )); +DATA(insert OID = 1324 ( ">" PGUID 0 b t f 1184 1184 16 1322 1323 0 0 datetime_gt intltsel intltjoinsel )); +DATA(insert OID = 1325 ( ">=" PGUID 0 b t f 1184 1184 16 1323 1322 0 0 datetime_ge intltsel intltjoinsel )); DATA(insert OID = 1327 ( "+" PGUID 0 b t f 1184 1186 1184 1327 0 0 0 datetime_pl_span - - )); DATA(insert OID = 1328 ( "-" PGUID 0 b t f 1184 1184 1186 0 0 0 0 datetime_mi - - )); @@ -550,10 +550,10 @@ DATA(insert OID = 1329 ( "-" PGUID 0 b t f 1184 1186 1184 0 0 0 0 datetim /* timespan operators */ DATA(insert OID = 1330 ( "=" PGUID 0 b t t 1186 1186 16 1330 1331 1332 1332 timespan_eq eqsel eqjoinsel )); DATA(insert OID = 1331 ( "<>" PGUID 0 b t f 1186 1186 16 1331 1330 0 0 timespan_ne neqsel neqjoinsel )); -DATA(insert OID = 1332 ( "<" PGUID 0 b t f 1186 1186 16 1335 1335 0 0 timespan_lt intltsel intltjoinsel )); -DATA(insert OID = 1333 ( "<=" PGUID 0 b t f 1186 1186 16 1334 1334 0 0 timespan_le intltsel intltjoinsel )); -DATA(insert OID = 1334 ( ">" PGUID 0 b t f 1186 1186 16 1333 1333 0 0 timespan_gt intltsel intltjoinsel )); -DATA(insert OID = 1335 ( ">=" PGUID 0 b t f 1186 1186 16 1332 1332 0 0 timespan_ge intltsel intltjoinsel )); +DATA(insert OID = 1332 ( "<" PGUID 0 b t f 1186 1186 16 1334 1335 0 0 timespan_lt intltsel intltjoinsel )); +DATA(insert OID = 1333 ( "<=" PGUID 0 b t f 1186 1186 16 1335 1334 0 0 timespan_le intltsel intltjoinsel )); +DATA(insert OID = 1334 ( ">" PGUID 0 b t f 1186 1186 16 1332 1333 0 0 timespan_gt intltsel intltjoinsel )); +DATA(insert OID = 1335 ( ">=" PGUID 0 b t f 1186 1186 16 1333 1332 0 0 timespan_ge intltsel intltjoinsel )); DATA(insert OID = 1336 ( "-" PGUID 0 l t f 0 1186 1186 0 0 0 0 timespan_um 0 0 )); DATA(insert OID = 1337 ( "+" PGUID 0 b t f 1186 1186 1186 1337 0 0 0 timespan_pl - - )); @@ -563,10 +563,10 @@ DATA(insert OID = 1338 ( "-" PGUID 0 b t f 1186 1186 1186 0 0 0 0 timespa DATA(insert OID = 1420 ( "@@" PGUID 0 l t f 0 718 600 0 0 0 0 circle_center - - )); DATA(insert OID = 1500 ( "=" PGUID 0 b t t 718 718 16 1500 1501 1502 1502 circle_eq eqsel eqjoinsel )); DATA(insert OID = 1501 ( "<>" PGUID 0 b t f 718 718 16 1501 1500 0 0 circle_ne neqsel neqjoinsel )); -DATA(insert OID = 1502 ( "<" PGUID 0 b t f 718 718 16 0 0 0 0 circle_lt areasel areajoinsel )); -DATA(insert OID = 1503 ( ">" PGUID 0 b t f 718 718 16 0 0 0 0 circle_gt areasel areajoinsel )); -DATA(insert OID = 1504 ( "<=" PGUID 0 b t f 718 718 16 0 0 0 0 circle_le areasel areajoinsel )); -DATA(insert OID = 1505 ( ">=" PGUID 0 b t f 718 718 16 0 0 0 0 circle_ge areasel areajoinsel )); +DATA(insert OID = 1502 ( "<" PGUID 0 b t f 718 718 16 1503 1505 0 0 circle_lt areasel areajoinsel )); +DATA(insert OID = 1503 ( ">" PGUID 0 b t f 718 718 16 1502 1504 0 0 circle_gt areasel areajoinsel )); +DATA(insert OID = 1504 ( "<=" PGUID 0 b t f 718 718 16 1505 1503 0 0 circle_le areasel areajoinsel )); +DATA(insert OID = 1505 ( ">=" PGUID 0 b t f 718 718 16 1504 1502 0 0 circle_ge areasel areajoinsel )); DATA(insert OID = 1506 ( "<<" PGUID 0 b t f 718 718 16 0 0 0 0 circle_left intltsel intltjoinsel )); DATA(insert OID = 1507 ( "&<" PGUID 0 b t f 718 718 16 0 0 0 0 circle_overleft intltsel intltjoinsel )); @@ -635,6 +635,27 @@ DATA(insert OID = 1615 ( "?|" PGUID 0 l t f 0 628 16 1615 0 0 0 line_ver DATA(insert OID = 1616 ( "=" PGUID 0 b t f 628 628 16 1616 0 0 0 line_eq intltsel - )); DATA(insert OID = 1617 ( "#" PGUID 0 b t f 628 628 600 1617 0 0 0 line_interpt - - )); +/* MAC type */ +DATA(insert OID = 1220 ( "=" PGUID 0 b t t 829 829 16 1220 1221 0 0 macaddr_eq eqsel eqjoinsel )); +DATA(insert OID = 1221 ( "<>" PGUID 0 b t f 829 829 16 1221 1220 0 0 macaddr_ne neqsel neqjoinsel )); +DATA(insert OID = 1222 ( "<" PGUID 0 b t f 829 829 16 1224 1225 0 0 macaddr_lt intltsel intltjoinsel )); +DATA(insert OID = 1223 ( "<=" PGUID 0 b t f 829 829 16 1225 1224 0 0 macaddr_le intltsel intltjoinsel )); +DATA(insert OID = 1224 ( ">" PGUID 0 b t f 829 829 16 1222 1223 0 0 macaddr_gt intltsel intltjoinsel )); +DATA(insert OID = 1225 ( ">=" PGUID 0 b t f 829 829 16 1223 1222 0 0 macaddr_ge intltsel intltjoinsel )); + +/* IP type */ +DATA(insert OID = 1201 ( "=" PGUID 0 b t t 869 869 16 1201 1202 0 0 ipaddr_eq eqsel eqjoinsel )); +DATA(insert OID = 1202 ( "<>" PGUID 0 b t f 869 869 16 1202 1201 0 0 ipaddr_ne neqsel neqjoinsel )); +DATA(insert OID = 1203 ( "<" PGUID 0 b t f 869 869 16 1205 1206 0 0 ipaddr_lt intltsel intltjoinsel )); +DATA(insert OID = 1204 ( "<=" PGUID 0 b t f 869 869 16 1206 1205 0 0 ipaddr_le intltsel intltjoinsel )); +DATA(insert OID = 1205 ( ">" PGUID 0 b t f 869 869 16 1203 1204 0 0 ipaddr_gt intltsel intltjoinsel )); +DATA(insert OID = 1206 ( ">=" PGUID 0 b t f 869 869 16 1204 1203 0 0 ipaddr_ge intltsel intltjoinsel )); +DATA(insert OID = 931 ( "<<" PGUID 0 b t f 869 869 16 933 934 0 0 ipaddr_sub intltsel intltjoinsel )); +DATA(insert OID = 932 ( "<<=" PGUID 0 b t f 869 869 16 934 933 0 0 ipaddr_subeq intltsel intltjoinsel )); +DATA(insert OID = 933 ( ">>" PGUID 0 b t f 869 869 16 931 932 0 0 ipaddr_sup intltsel intltjoinsel )); +DATA(insert OID = 934 ( ">>=" PGUID 0 b t f 869 869 16 932 931 0 0 ipaddr_supeq intltsel intltjoinsel )); + + /* * function prototypes */ diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 1f8ca51583..76f92f0e61 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: pg_proc.h,v 1.70 1998/10/02 16:27:55 momjian Exp $ + * $Id: pg_proc.h,v 1.71 1998/10/03 05:40:56 momjian Exp $ * * NOTES * The script catalog/genbki.sh reads this file and generates .bki @@ -2045,6 +2045,59 @@ DESCR("user name by UID (with fallback)"); DATA(insert OID = 1643 ( pg_get_indexdef PGUID 11 f t f 1 f 25 "26" 100 0 0 100 foo bar )); DESCR("index description"); +/* for mac type support */ +DATA(insert OID = 436 ( macaddr_in PGUID 11 f t f 1 f 829 "0" 100 0 0 100 foo bar )); +DESCR("(internal)"); +DATA(insert OID = 437 ( macaddr_out PGUID 11 f t f 1 f 23 "0" 100 0 0 100 foo bar )); +DESCR("(internal)"); + +DATA(insert OID = 830 ( macaddr_eq PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100 foo bar )); +DESCR("equal"); +DATA(insert OID = 831 ( macaddr_lt PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100 foo bar )); +DESCR("less-than"); +DATA(insert OID = 832 ( macaddr_le PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100 foo bar )); +DESCR("less-than-or-equal"); +DATA(insert OID = 833 ( macaddr_gt PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100 foo bar )); +DESCR("greater-than"); +DATA(insert OID = 834 ( macaddr_ge PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100 foo bar )); +DESCR("greater-than-or-equal"); +DATA(insert OID = 835 ( macaddr_ne PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100 foo bar )); +DESCR("not equal"); +DATA(insert OID = 836 ( macaddr_cmp PGUID 11 f t f 2 f 23 "829 829" 100 0 0 100 foo bar )); +DESCR("less-equal-greater"); +DATA(insert OID = 837 ( macaddr_manuf PGUID 11 f t f 1 f 25 "829" 100 0 0 100 foo bar )); +DESCR("MAC manufacturer"); + +/* for ip type support */ +DATA(insert OID = 910 ( ipaddr_in PGUID 11 f t f 1 f 869 "0" 100 0 0 100 foo bar )); +DESCR("(internal)"); +DATA(insert OID = 911 ( ipaddr_out PGUID 11 f t f 1 f 23 "0" 100 0 0 100 foo bar )); +DESCR("(internal)"); + +DATA(insert OID = 920 ( ipaddr_eq PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100 foo bar )); +DESCR("equal"); +DATA(insert OID = 921 ( ipaddr_lt PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100 foo bar )); +DESCR("less-than"); +DATA(insert OID = 922 ( ipaddr_le PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100 foo bar )); +DESCR("less-than-or-equal"); +DATA(insert OID = 923 ( ipaddr_gt PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100 foo bar )); +DESCR("greater-than"); +DATA(insert OID = 924 ( ipaddr_ge PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100 foo bar )); +DESCR("greater-than-or-equal"); +DATA(insert OID = 925 ( ipaddr_ne PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100 foo bar )); +DESCR("not equal"); +DATA(insert OID = 926 ( ipaddr_cmp PGUID 11 f t f 2 f 23 "869 869" 100 0 0 100 foo bar )); +DESCR("less-equal-greater"); +DATA(insert OID = 927 ( ipaddr_sub PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100 foo bar )); +DESCR("is-subnet"); +DATA(insert OID = 928 ( ipaddr_subeq PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100 foo bar )); +DESCR("is-subnet-or-equal"); +DATA(insert OID = 929 ( ipaddr_sup PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100 foo bar )); +DESCR("is-supernet"); +DATA(insert OID = 930 ( ipaddr_supeq PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100 foo bar )); +DESCR("is-supernet-or-equal"); + + /* * prototypes for functions pg_proc.c */ diff --git a/src/include/catalog/pg_type.h b/src/include/catalog/pg_type.h index 99d0de22dc..3a675c1c33 100644 --- a/src/include/catalog/pg_type.h +++ b/src/include/catalog/pg_type.h @@ -7,7 +7,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: pg_type.h,v 1.47 1998/09/01 04:35:18 momjian Exp $ + * $Id: pg_type.h,v 1.48 1998/10/03 05:40:58 momjian Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki @@ -298,6 +298,10 @@ DESCR("money '$d,ddd.cc'"); DATA(insert OID = 791 ( _money PGUID -1 -1 f b t \054 0 790 array_in array_out array_in array_out i _null_ )); /* OIDS 800 - 899 */ +DATA(insert OID = 829 ( macaddr PGUID 6 -1 f b t \054 0 0 macaddr_in macaddr_out macaddr_in macaddr_out i _null_ )); +DESCR("MAC address"); +DATA(insert OID = 869 ( ipaddr PGUID -1 -1 f b t \054 0 0 ipaddr_in ipaddr_out ipaddr_in ipaddr_out i _null_ )); +DESCR("IP address"); /* OIDS 900 - 999 */ @@ -333,8 +337,9 @@ DATA(insert OID = 1027 ( _polygon PGUID -1 -1 f b t \054 0 604 array_in array /* Note: the size of an aclitem needs to match sizeof(AclItem) in acl.h */ DATA(insert OID = 1033 ( aclitem PGUID 8 -1 f b t \054 0 0 aclitemin aclitemout aclitemin aclitemout i _null_ )); DESCR("access control list"); -DATA(insert OID = 1034 ( _aclitem PGUID -1 -1 f b t \054 0 1033 array_in array_out array_in array_out i _null_ )); - +DATA(insert OID = 1034 ( _aclitem PGUID -1 -1 f b t \054 0 1033 array_in array_out array_in array_out i _null_ )); +DATA(insert OID = 1040 ( _macaddr PGUID -1 -1 f b t \054 0 829 array_in array_out array_in array_out i _null_ )); +DATA(insert OID = 1041 ( _ipaddr PGUID -1 -1 f b t \054 0 869 array_in array_out array_in array_out i _null_ )); DATA(insert OID = 1042 ( bpchar PGUID -1 -1 f b t \054 0 18 bpcharin bpcharout bpcharin bpcharout i _null_ )); DESCR("blank-padded characters, length specifed when created"); #define BPCHAROID 1042 diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h index f0cfd5b988..fd6f50e944 100644 --- a/src/include/utils/builtins.h +++ b/src/include/utils/builtins.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: builtins.h,v 1.55 1998/09/22 20:28:13 momjian Exp $ + * $Id: builtins.h,v 1.56 1998/10/03 05:40:59 momjian Exp $ * * NOTES * This should normally only be included by fmgr.h. @@ -28,6 +28,7 @@ #include #include #include +#include #include /* @@ -511,4 +512,40 @@ extern text *translate(text *string, char from, char to); /* acl.c */ +/* inet_net_ntop.c */ +char *inet_net_ntop(int af, const void *src, int bits, char *dst, size_t size); + +/* inet_net_pton.c */ +int inet_net_pton(int af, const char *src, void *dst, size_t size); + +/* ip.c */ +ipaddr *ipaddr_in(char *str); +char *ipaddr_out(ipaddr * addr); +bool ipaddr_lt(ipaddr * a1, ipaddr * a2); +bool ipaddr_le(ipaddr * a1, ipaddr * a2); +bool ipaddr_eq(ipaddr * a1, ipaddr * a2); +bool ipaddr_ge(ipaddr * a1, ipaddr * a2); +bool ipaddr_gt(ipaddr * a1, ipaddr * a2); +bool ipaddr_ne(ipaddr * a1, ipaddr * a2); +bool ipaddr_sub(ipaddr * a1, ipaddr * a2); +bool ipaddr_subeq(ipaddr * a1, ipaddr * a2); +bool ipaddr_sup(ipaddr * a1, ipaddr * a2); +bool ipaddr_supeq(ipaddr * a1, ipaddr * a2); +int4 ipaddr_cmp(ipaddr * a1, ipaddr * a2); +int v4bitncmp(u_int32_t a1, u_int32_t a2, int bits); + + +/* mac.c */ +macaddr *macaddr_in(char *str); +char *macaddr_out(macaddr * addr); +bool macaddr_lt(macaddr * a1, macaddr * a2); +bool macaddr_le(macaddr * a1, macaddr * a2); +bool macaddr_eq(macaddr * a1, macaddr * a2); +bool macaddr_ge(macaddr * a1, macaddr * a2); +bool macaddr_gt(macaddr * a1, macaddr * a2); +bool macaddr_ne(macaddr * a1, macaddr * a2); +int4 macaddr_cmp(macaddr * a1, macaddr * a2); +text *macaddr_manuf(macaddr * addr); + + #endif /* BUILTINS_H */ diff --git a/src/include/utils/mac.h b/src/include/utils/mac.h new file mode 100644 index 0000000000..3ecb61cb46 --- /dev/null +++ b/src/include/utils/mac.h @@ -0,0 +1,58 @@ +/*------------------------------------------------------------------------- + * + * builtins.h-- + * Declarations for operations on built-in types. + * + * + * Copyright (c) 1994, Regents of the University of California + * + * $Id: mac.h,v 1.1 1998/10/03 05:41:01 momjian Exp $ + * + *------------------------------------------------------------------------- + */ +#ifndef MAC_H +#define MAC_H + +/* + * This is the internal storage format for IP addresses: + */ + +typedef struct +{ + unsigned char family; + unsigned char bits; + union + { + u_int32_t ipv4_addr; /* network byte order */ + /* add IPV6 address type here */ + } addr; +} ipaddr_struct; + +typedef struct varlena ipaddr; + +/* + * This is the internal storage format for MAC addresses: + */ +typedef struct macaddr +{ + unsigned char a; + unsigned char b; + unsigned char c; + unsigned char d; + unsigned char e; + unsigned char f; +} macaddr; + + +typedef struct manufacturer +{ + unsigned char a; + unsigned char b; + unsigned char c; + char *name; +} manufacturer; + +extern manufacturer manufacturers[]; + +#endif /* MAC_H */ + diff --git a/src/tools/pgindent/pgindent b/src/tools/pgindent/pgindent index 40a9122a76..5873ae2702 100755 --- a/src/tools/pgindent/pgindent +++ b/src/tools/pgindent/pgindent @@ -786,6 +786,8 @@ do -Tword8 \ -Tyy_size_t \ -Tyy_state_type \ +-Tipaddr \ +-Tmacaddr \ /tmp/$$a >/tmp/$$ 2>&1 if [ "$?" -ne 0 -o -s /tmp/$$ ] then echo "$FILE"