1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <inttypes.h>
4 # define U(x) x
5 # define NLSTATE yyprevious=YYNEWLINE
6 # define BEGIN yybgin = yysvec + 1 +
7 # define INITIAL 0
8 # define YYLERR yysvec
9 # define YYSTATE (yyestate-yysvec-1)
10 # define YYOPTIM 1
11 # ifndef YYLMAX
12 # define YYLMAX BUFSIZ
13 # endif
14 #ifndef __cplusplus
15 # define output(c) (void)putc(c,yyout)
16 #else
17 # define lex_output(c) (void)putc(c,yyout)
18 #endif
19 
20 #if defined(__cplusplus) || defined(__STDC__)
21 
22 #if defined(__cplusplus) && defined(__EXTERN_C__)
23 extern "C" {
24 #endif
25 	int yyback(int *, int);
26 	int yyinput(void);
27 	int yylook(void);
28 	void yyoutput(int);
29 	int yyracc(int);
30 	int yyreject(void);
31 	void yyunput(int);
32 	int yylex(void);
33 #ifdef YYLEX_E
34 	void yywoutput(wchar_t);
35 	wchar_t yywinput(void);
36 	void yywunput(wchar_t);
37 #endif
38 #ifndef yyless
39 	int yyless(int);
40 #endif
41 #ifndef yywrap
42 	int yywrap(void);
43 #endif
44 #ifdef LEXDEBUG
45 	void allprint(char);
46 	void sprint(char *);
47 #endif
48 #if defined(__cplusplus) && defined(__EXTERN_C__)
49 }
50 #endif
51 
52 #ifdef __cplusplus
53 extern "C" {
54 #endif
55 	void exit(int);
56 #ifdef __cplusplus
57 }
58 #endif
59 
60 #endif
61 # define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
62 # define yymore() (yymorfg=1)
63 #ifndef __cplusplus
64 # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
65 #else
66 # define lex_input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
67 #endif
68 #define ECHO fprintf(yyout, "%s",yytext)
69 # define REJECT { nstr = yyreject(); goto yyfussy;}
70 int yyleng;
71 #define YYISARRAY
72 char yytext[YYLMAX];
73 int yymorfg;
74 extern char *yysptr, yysbuf[];
75 int yytchar;
76 FILE *yyin = {stdin}, *yyout = {stdout};
77 extern int yylineno;
78 struct yysvf {
79 	struct yywork *yystoff;
80 	struct yysvf *yyother;
81 	int *yystops;};
82 struct yysvf *yyestate;
83 extern struct yysvf yysvec[], *yybgin;
84 
85 # line 3 "../itm_comp.l"
86 /*
87  * CDDL HEADER START
88  *
89  * The contents of this file are subject to the terms of the
90  * Common Development and Distribution License, Version 1.0 only
91  * (the "License").  You may not use this file except in compliance
92  * with the License.
93  *
94  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
95  * or http://www.opensolaris.org/os/licensing.
96  * See the License for the specific language governing permissions
97  * and limitations under the License.
98  *
99  * When distributing Covered Code, include this CDDL HEADER in each
100  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
101  * If applicable, add the following below this CDDL HEADER, with the
102  * fields enclosed by brackets "[]" replaced with your own identifying
103  * information: Portions Copyright [yyyy] [name of copyright owner]
104  *
105  * CDDL HEADER END
106  *
107  * Copyright (c) 1999 by Sun Microsystems, Inc.
108  * All rights reserved.
109  */
110 
111 #pragma ident	"%Z%%M%	%I%	%E% SMI"
112 
113 #include <assert.h>
114 #include <stdio.h>
115 #include <stdlib.h>
116 #include <unistd.h>
117 #include <libintl.h>
118 #include <string.h>
119 
120 #include <regexpr.h>
121 
122 #include "iconv_tm.h"
123 #include "itmcomp.h"
124 #include "y.tab.h"
125 
126 static itm_data_t	*hexadecimal_data(int, char *);
127 static itm_data_t	*name_data(int, char *);
128 static void		filename_lineno(void);
129 static int		at_name_to_token(char *);
130 
131 
132 # define norm 2
133 # define comment 4
134 # define YYNEWLINE 10
135 int yylex(){
136 int nstr; extern int yyprevious;
137 #ifdef __cplusplus
138 /* to avoid CC and lint complaining yyfussy not being used ...*/
139 static int __lex_hack = 0;
140 if (__lex_hack) goto yyfussy;
141 #endif
142 while((nstr = yylook()) >= 0)
143 yyfussy: switch(nstr){
144 case 0:
145 if(yywrap()) return(0); break;
146 case 1:
147 
148 # line 62 "../itm_comp.l"
149 ;
150 break;
151 case 2:
152 
153 # line 63 "../itm_comp.l"
154 ;
155 break;
156 case 3:
157 
158 # line 65 "../itm_comp.l"
159 {
160 			filename_lineno();
161 		}
162 break;
163 case 4:
164 
165 # line 69 "../itm_comp.l"
166 {
167 			if (NULL == cmd_opt.preprocess) {
168 				itm_error(
169 				gettext("warning: "
170 					"preprocess may be required\n"));
171 			}
172 		}
173 break;
174 case 5:
175 
176 # line 77 "../itm_comp.l"
177 {
178 			yylval.num = strtoul(yytext, (char **)NULL, 10);
179 			return (DECIMAL);
180 		}
181 break;
182 case 6:
183 
184 # line 82 "../itm_comp.l"
185 	{	yylval.num = strtoul(yytext, (char **)NULL, 8);
186 			return (DECIMAL);
187 		}
188 break;
189 case 7:
190 
191 # line 86 "../itm_comp.l"
192 {	yylval.data = hexadecimal_data(yyleng - 2, yytext + 2);
193 			return (HEXADECIMAL);
194 		}
195 break;
196 case 8:
197 
198 # line 90 "../itm_comp.l"
199 {	yylval.data = str_to_data(yyleng, yytext);
200 			return (ITMNAME);
201 		}
202 break;
203 case 9:
204 
205 # line 94 "../itm_comp.l"
206 {	return at_name_to_token(yytext);
207 		}
208 break;
209 case 10:
210 
211 # line 97 "../itm_comp.l"
212 {	yylval.num = at_name_to_token(yytext);
213 			yylval.data = name_data(yyleng, yytext);
214 			return (MAPTYPE_NAME);
215 
216 		}
217 break;
218 case 11:
219 
220 # line 103 "../itm_comp.l"
221 	{	yylval.num = at_name_to_token(yytext);
222 			if (0 != yylval.num) {
223 				return (yylval.num);
224 			} else {
225 				yylval.data = name_data(yyleng, yytext);
226 				return (NAME);
227 			}
228 		}
229 break;
230 case 12:
231 
232 # line 113 "../itm_comp.l"
233 	{return (CBO);}
234 break;
235 case 13:
236 
237 # line 114 "../itm_comp.l"
238 	{return (CBC);}
239 break;
240 case 14:
241 
242 # line 115 "../itm_comp.l"
243 	{return (SBO);}
244 break;
245 case 15:
246 
247 # line 116 "../itm_comp.l"
248 	{return (SBC);}
249 break;
250 case 16:
251 
252 # line 117 "../itm_comp.l"
253 	{return (PO);}
254 break;
255 case 17:
256 
257 # line 118 "../itm_comp.l"
258 	{return (PC);}
259 break;
260 case 18:
261 
262 # line 119 "../itm_comp.l"
263 	{return (SC);}
264 break;
265 case 19:
266 
267 # line 120 "../itm_comp.l"
268 	{return (COMMA);}
269 break;
270 case 20:
271 
272 # line 121 "../itm_comp.l"
273 	{return (COLON);}
274 break;
275 case 21:
276 
277 # line 122 "../itm_comp.l"
278 	{return (ELLIPSES);}
279 break;
280 case 22:
281 
282 # line 125 "../itm_comp.l"
283 	{return (ASSIGN);}
284 break;
285 case 23:
286 
287 # line 126 "../itm_comp.l"
288 	{return (LOR);}
289 break;
290 case 24:
291 
292 # line 127 "../itm_comp.l"
293 	{return (LAND);}
294 break;
295 case 25:
296 
297 # line 128 "../itm_comp.l"
298 	{return (OR);}
299 break;
300 case 26:
301 
302 # line 129 "../itm_comp.l"
303 	{return (XOR);}
304 break;
305 case 27:
306 
307 # line 130 "../itm_comp.l"
308 	{return (AND);}
309 break;
310 case 28:
311 
312 # line 131 "../itm_comp.l"
313 	{return (EQ);}
314 break;
315 case 29:
316 
317 # line 132 "../itm_comp.l"
318 	{return (NE);}
319 break;
320 case 30:
321 
322 # line 133 "../itm_comp.l"
323 	{return (LT);}
324 break;
325 case 31:
326 
327 # line 134 "../itm_comp.l"
328 	{return (LE);}
329 break;
330 case 32:
331 
332 # line 135 "../itm_comp.l"
333 	{return (GT);}
334 break;
335 case 33:
336 
337 # line 136 "../itm_comp.l"
338 	{return (GE);}
339 break;
340 case 34:
341 
342 # line 137 "../itm_comp.l"
343 	{return (SHL);}
344 break;
345 case 35:
346 
347 # line 138 "../itm_comp.l"
348 	{return (SHR);}
349 break;
350 case 36:
351 
352 # line 139 "../itm_comp.l"
353 	{return (PLUS);}
354 break;
355 case 37:
356 
357 # line 140 "../itm_comp.l"
358 	{return (MINUS);}
359 break;
360 case 38:
361 
362 # line 141 "../itm_comp.l"
363 	{return (MUL);}
364 break;
365 case 39:
366 
367 # line 142 "../itm_comp.l"
368 	{return (DIV);}
369 break;
370 case 40:
371 
372 # line 143 "../itm_comp.l"
373 	{return (MOD);}
374 break;
375 case 41:
376 
377 # line 144 "../itm_comp.l"
378 	{return (NOT);}
379 break;
380 case 42:
381 
382 # line 145 "../itm_comp.l"
383 	{return (NEG);}
384 break;
385 case 43:
386 
387 # line 147 "../itm_comp.l"
388 	{	itm_error(
389 				gettext("Unrecognized token '%1$c' \n"),
390 				cmd_opt.my_name, yytext[0]);
391 			return (0);
392 		}
393 break;
394 case -1:
395 break;
396 default:
397 (void)fprintf(yyout,"bad switch yylook %d",nstr);
398 } return(0); }
399 /* end of yylex */
400 
401 # line 154 "../itm_comp.l"
402 
403 /*
404  * lexinit - starts the Lexical Analyzer off in the right start condition
405  */
406 void
407 lexinit()
408 {
409 	BEGIN norm;
410 }
411 
412 /* does this really need to be here? */
413 int
414 yywrap()
415 {
416 	return (1);
417 }
418 
419 void
420 yyerror(char *s)
421 {
422 	extern int	yylineno;
423 
424 	itm_error(
425 		gettext("%1$s: file(%2$s) line(%3$d) last token(%4$s)\n"),
426 		s, itm_input_file, yylineno, yytext);
427 
428 	exit(ITMC_STATUS_BT);
429 }
430 
431 typedef struct {
432 	char	*name;
433 	int	token;
434 } at_name_token_t;
435 
436 /*
437  * NOT: This table must be sorted alphabetically.
438  */
439 static at_name_token_t at_table[] = {
440 	"@automatic",	MAPTYPE_AUTO,
441 	"@binary",	MAPTYPE_BINARY,
442 	"@between",	BETWEEN,
443 	"@condition",	CONDITION,
444 	"@default",	ITM_DEFAULT,
445 	"@dense",	MAPTYPE_DENSE,
446 	"@direction",	DIRECTION,
447 	"@discard",	DISCARD,
448 	"@else",	ITM_ELSE,
449 	"@error",	ERROR,
450 	"@escapeseq",	ESCAPESEQ,
451 	"@false",	ITM_FALSE,
452 	"@hash",	MAPTYPE_HASH,
453 	"@identical",	ITM_IDENTICAL,
454 	"@if",		ITM_IF,
455 	"@in",		ITM_IN,
456 	"@index",	MAPTYPE_INDEX,
457 	"@init",	ITM_INIT,
458 	"@input",	ITM_IN,
459 	"@inputsize",	ITM_INSIZE,
460 	"@map",		MAP,
461 	"@maptype",	MAPTYPE,
462 	"@no_change_copy",	ITM_IDENTICAL,
463 	"@nop",		NOP,
464 	"@operation",	OPERATION,
465 	"@out",		ITM_OUT,
466 	"@output",	ITM_OUT,
467 	"@output_byte_length",	RESULTLEN,
468 	"@outputsize",	ITM_OUTSIZE,
469 	"@printchr",	PRINTCHR,
470 	"@printhd",	PRINTHD,
471 	"@printint",	PRINTINT,
472 	"@reset",	RESET,
473 	"@resultlen",	RESULTLEN,
474 	"@return",	RETURN,
475 	"@true",	ITM_TRUE,
476 	"automatic",	MAPTYPE_AUTO,
477 	"between",	BETWEEN,
478 	"binary",	MAPTYPE_BINARY,
479 	"break",	BREAK,
480 	"condition",	CONDITION,
481 	"default",	ITM_DEFAULT,
482 	"dense",	MAPTYPE_DENSE,
483 	"direction",	DIRECTION,
484 	"discard",	DISCARD,
485 	"else",		ITM_ELSE,
486 	"error",	ERROR,
487 	"escapeseq",	ESCAPESEQ,
488 	"false",	ITM_FALSE,
489 	"hash",		MAPTYPE_HASH,
490 	"if",		ITM_IF,
491 	"index",	MAPTYPE_INDEX,
492 	"init",		ITM_INIT,
493 	"input",	ITM_IN,
494 	"inputsize",	ITM_INSIZE,
495 	"map",		MAP,
496 	"maptype",	MAPTYPE,
497 	"no_change_copy",	ITM_IDENTICAL,
498 	"nop",		NOP,
499 	"operation",	OPERATION,
500 	"output",	ITM_OUT,
501 	"output_byte_length",	RESULTLEN,
502 	"outputsize",	ITM_OUTSIZE,
503 	"printchr",	PRINTCHR,
504 	"printhd",	PRINTHD,
505 	"printint",	PRINTINT,
506 	"reset",	RESET,
507 	"return",	RETURN,
508 	"true",		ITM_TRUE,
509 };
510 
511 int
512 at_name_to_token(char *s)
513 {
514 	int	high;
515 	int	mid;
516 	int	low;
517 	int	result;
518 
519 	TRACE_MESSAGE('l', ("at_name_to_token: %s", s));
520 	for (low = 0, high = (sizeof (at_table) /
521 				sizeof (at_name_token_t));
522 	    low < high; /* NOP */) {
523 		mid = (low + high) / 2;
524 		result = strcmp(s, at_table[mid].name);
525 		if (result < 0) {
526 			high = mid;
527 		} else if (0 < result) {
528 			low = mid + 1;
529 		} else { /* 0 == result */
530 			TRACE_MESSAGE('l', (" %d\n", at_table[mid].token));
531 			return (at_table[mid].token);
532 		}
533 	}
534 	TRACE_MESSAGE('l', (" - not found\n"));
535 	return (0);
536 }
537 
538 static itm_data_t *
539 hexadecimal_data(int seqsize, char *seq)
540 {
541 	itm_data_t	*data;
542 	char		*binary;
543 	int		i, j;
544 	int		val;
545 	int		high;
546 	int		low;
547 	int		size;
548 
549 	/* size is assured to be multiple of 2 */
550 	assert(seqsize != 0);
551 	size = seqsize + 1;
552 	size /= 2;
553 	if (size > MAXSEQUENCE) {
554 		itm_error(
555 		gettext(" specified sequence must be less than %$1d\n"),
556 		MAXSEQUENCE);
557 		return (NULL);
558 	}
559 	binary = malloc_vital(size);
560 	i = j = 0;
561 	if (seqsize % 2 != 0) {
562 		low =  *(seq);
563 		if (('0' <= low) && (low <= '9')) {
564 			val = (low - '0');
565 		} else if (('a' <= low) && (low <= 'f')) {
566 			val = (low - 'a' + 10);
567 		} else if (('A' <= low) && (low <= 'F')) {
568 			val = (low - 'A' + 10);
569 		}
570 		*(binary + i) = val;
571 		i++;
572 		j++;
573 	}
574 	for (/* NOP */; i < size; i++, j += 2) {
575 		high = *(seq + j);
576 		low =  *(seq + j + 1);
577 		if (('0' <= high) && (high <= '9')) {
578 			val = ((high - '0') << 4);
579 		} else if (('a' <= high) && (high <= 'f')) {
580 			val = ((high - 'a' + 10) << 4);
581 		} else if (('A' <= high) && (high <= 'F')) {
582 			val = ((high - 'A' + 10) << 4);
583 		}
584 		if (('0' <= low) && (low <= '9')) {
585 			val |= (low - '0');
586 		} else if (('a' <= low) && (low <= 'f')) {
587 			val |= (low - 'a' + 10);
588 		} else if (('A' <= low) && (low <= 'F')) {
589 			val |= (low - 'A' + 10);
590 		}
591 		*(binary + i) = val;
592 	}
593 
594 	data = malloc_vital(sizeof (itm_data_t));
595 
596 	data->size = size;
597 	if (size <= sizeof (data->place)) {
598 		(void) memmove(&(data->place), binary, size);
599 		free(binary);
600 	} else {
601 		data->place.itm_ptr = (itm_place2_t)binary;
602 	}
603 
604 	return (data);
605 }
606 
607 static itm_data_t *
608 name_data(int size, char *seq)
609 {
610 	itm_data_t *data;
611 
612 
613 	if (size > MAXNAMELENGTH) {
614 		itm_error(gettext("the length(%d) exceed limitation(%d)"),
615 		size, MAXNAMELENGTH);
616 		exit(ITMC_STATUS_BT2);
617 	}
618 	data = malloc_vital(sizeof (itm_data_t));
619 
620 	data->size = size;
621 	if (size <= sizeof (data->place)) {
622 		(void) memmove(&(data->place), seq, size);
623 	} else {
624 		data->place.itm_ptr = (itm_place2_t)malloc_vital(size);
625 		(void) memmove((char *)(data->place.itm_ptr), seq, size);
626 	}
627 
628 	return (data);
629 }
630 
631 static void
632 filename_lineno(void)
633 {
634 	static char	*re;
635 	static char	restr[] =
636 			"^#[ \t]*\\([0-9]\\{1,\\}\\)[ \t]*\"\\(.*\\)\".*";
637 	int		match;
638 	extern char	*braslist[];
639 	extern char	*braelist[];
640 	static char	*filename;
641 	int		len;
642 	int		lineno;
643 
644 	if (NULL == re) {
645 		re = compile(restr, NULL, NULL);
646 		if (NULL == re) {
647 			itm_error(
648 				gettext("REGEXP compile error\n"));
649 			exit(ITMC_STATUS_BT);
650 		}
651 	}
652 	match = step(yytext, re);
653 	if (0 != match) {
654 		lineno = atoi(braslist[0]);
655 		free(filename);
656 		len = braelist[1] - braslist[1];
657 		filename = malloc_vital(len + 1);
658 		(void) memcpy(filename, braslist[1], len);
659 		*(filename + len) = '\0';
660 		itm_input_file = filename;
661 		yylineno = lineno;
662 	}
663 }
664 int yyvstop[] = {
665 0,
666 
667 43,
668 0,
669 
670 1,
671 43,
672 0,
673 
674 1,
675 0,
676 
677 43,
678 0,
679 
680 41,
681 43,
682 0,
683 
684 40,
685 43,
686 0,
687 
688 27,
689 43,
690 0,
691 
692 16,
693 43,
694 0,
695 
696 17,
697 43,
698 0,
699 
700 38,
701 43,
702 0,
703 
704 36,
705 43,
706 0,
707 
708 19,
709 43,
710 0,
711 
712 37,
713 43,
714 0,
715 
716 43,
717 0,
718 
719 39,
720 43,
721 0,
722 
723 5,
724 43,
725 0,
726 
727 5,
728 43,
729 0,
730 
731 20,
732 43,
733 0,
734 
735 18,
736 43,
737 0,
738 
739 30,
740 43,
741 0,
742 
743 22,
744 43,
745 0,
746 
747 32,
748 43,
749 0,
750 
751 43,
752 0,
753 
754 11,
755 43,
756 0,
757 
758 14,
759 43,
760 0,
761 
762 15,
763 43,
764 0,
765 
766 26,
767 43,
768 0,
769 
770 11,
771 43,
772 0,
773 
774 11,
775 43,
776 0,
777 
778 11,
779 43,
780 0,
781 
782 11,
783 43,
784 0,
785 
786 11,
787 43,
788 0,
789 
790 12,
791 43,
792 0,
793 
794 25,
795 43,
796 0,
797 
798 13,
799 43,
800 0,
801 
802 42,
803 43,
804 0,
805 
806 43,
807 0,
808 
809 29,
810 0,
811 
812 24,
813 0,
814 
815 5,
816 0,
817 
818 5,
819 0,
820 
821 34,
822 0,
823 
824 31,
825 0,
826 
827 28,
828 0,
829 
830 33,
831 0,
832 
833 35,
834 0,
835 
836 9,
837 0,
838 
839 11,
840 0,
841 
842 11,
843 0,
844 
845 11,
846 0,
847 
848 11,
849 0,
850 
851 11,
852 0,
853 
854 11,
855 0,
856 
857 23,
858 0,
859 
860 4,
861 0,
862 
863 8,
864 0,
865 
866 21,
867 0,
868 
869 2,
870 0,
871 
872 5,
873 6,
874 0,
875 
876 7,
877 0,
878 
879 11,
880 0,
881 
882 11,
883 0,
884 
885 11,
886 0,
887 
888 11,
889 0,
890 
891 11,
892 0,
893 
894 8,
895 0,
896 
897 8,
898 0,
899 
900 11,
901 0,
902 
903 11,
904 0,
905 
906 11,
907 0,
908 
909 10,
910 11,
911 0,
912 
913 11,
914 0,
915 
916 11,
917 0,
918 
919 11,
920 0,
921 
922 3,
923 4,
924 0,
925 
926 8,
927 0,
928 
929 8,
930 0,
931 
932 11,
933 0,
934 
935 11,
936 0,
937 
938 11,
939 0,
940 0};
941 # define YYTYPE unsigned char
942 struct yywork { YYTYPE verify, advance; } yycrank[] = {
943 0,0,	0,0,	1,7,	0,0,
944 0,0,	0,0,	0,0,	0,0,
945 0,0,	0,0,	1,8,	1,9,
946 8,9,	8,9,	1,10,	84,86,
947 0,0,	0,0,	0,0,	0,0,
948 0,0,	0,0,	0,0,	0,0,
949 0,0,	0,0,	0,0,	0,0,
950 69,69,	0,0,	66,69,	0,0,
951 0,0,	0,0,	1,11,	8,9,
952 0,0,	0,0,	1,12,	1,13,
953 84,94,	1,14,	1,15,	1,16,
954 1,17,	1,18,	1,19,	1,20,
955 1,21,	1,22,	1,23,	1,23,
956 1,23,	1,23,	1,23,	1,23,
957 1,23,	1,23,	66,70,	1,24,
958 1,25,	1,26,	1,27,	1,28,
959 0,0,	1,29,	1,30,	69,69,
960 0,0,	66,66,	0,0,	0,0,
961 1,30,	0,0,	0,0,	69,69,
962 0,0,	66,66,	0,0,	11,0,
963 11,0,	13,0,	13,0,	11,0,
964 0,0,	13,0,	71,86,	0,0,
965 0,0,	14,0,	14,0,	0,0,
966 1,31,	14,0,	1,32,	1,33,
967 0,0,	0,0,	1,34,	1,35,
968 0,0,	1,36,	11,0,	0,0,
969 13,0,	1,37,	1,38,	11,45,
970 0,0,	13,45,	13,47,	71,87,
971 14,0,	0,0,	71,70,	0,0,
972 0,0,	14,45,	0,0,	0,0,
973 0,0,	0,0,	0,0,	0,0,
974 1,39,	1,40,	1,41,	1,42,
975 2,11,	0,0,	2,43,	11,46,
976 2,12,	2,13,	0,0,	2,14,
977 2,15,	2,16,	2,17,	2,18,
978 2,19,	2,20,	2,21,	0,0,
979 2,23,	2,23,	2,23,	2,23,
980 2,23,	2,23,	2,23,	0,0,
981 0,0,	2,24,	2,25,	2,26,
982 2,27,	2,28,	0,0,	2,29,
983 0,0,	0,0,	15,0,	15,0,
984 0,0,	0,0,	15,0,	0,0,
985 16,0,	16,0,	0,0,	0,0,
986 16,0,	0,0,	17,0,	17,0,
987 86,86,	0,0,	17,0,	0,0,
988 18,0,	18,0,	0,0,	0,0,
989 18,0,	15,0,	2,31,	0,0,
990 2,32,	2,33,	15,45,	16,0,
991 2,34,	2,35,	0,0,	2,36,
992 16,45,	17,0,	0,0,	2,37,
993 2,38,	86,94,	17,45,	18,0,
994 0,0,	0,0,	0,0,	0,0,
995 18,45,	0,0,	0,0,	0,0,
996 0,0,	0,0,	0,0,	86,69,
997 0,0,	0,0,	2,39,	2,40,
998 2,41,	2,42,	3,11,	86,69,
999 0,0,	0,0,	3,12,	3,13,
1000 0,0,	3,14,	3,15,	3,16,
1001 3,17,	3,18,	3,19,	3,20,
1002 3,21,	0,0,	3,23,	3,23,
1003 3,23,	3,23,	3,23,	3,23,
1004 3,23,	0,0,	0,0,	3,24,
1005 3,25,	3,26,	3,27,	3,28,
1006 0,0,	3,29,	0,0,	0,0,
1007 19,0,	19,0,	0,0,	0,0,
1008 19,0,	0,0,	20,0,	20,0,
1009 0,0,	0,0,	20,0,	0,0,
1010 21,0,	21,0,	0,0,	0,0,
1011 21,0,	0,0,	24,0,	24,0,
1012 0,0,	0,0,	24,0,	19,0,
1013 3,31,	0,0,	3,32,	3,33,
1014 19,45,	20,0,	3,34,	3,35,
1015 0,0,	3,36,	20,45,	21,0,
1016 0,0,	3,37,	3,38,	0,0,
1017 21,45,	24,0,	0,0,	20,48,
1018 0,0,	0,0,	24,45,	0,0,
1019 0,0,	0,0,	21,49,	0,0,
1020 0,0,	0,0,	0,0,	0,0,
1021 3,39,	3,40,	3,41,	3,42,
1022 4,11,	0,0,	4,43,	0,0,
1023 4,12,	4,13,	0,0,	4,14,
1024 4,15,	4,16,	4,17,	4,18,
1025 4,19,	4,20,	4,21,	0,0,
1026 4,23,	4,23,	4,23,	4,23,
1027 4,23,	4,23,	4,23,	0,0,
1028 0,0,	4,24,	4,25,	4,26,
1029 4,27,	4,28,	0,0,	4,29,
1030 0,0,	0,0,	23,0,	23,0,
1031 0,0,	0,0,	23,0,	0,0,
1032 25,0,	25,0,	0,0,	0,0,
1033 25,0,	0,0,	31,0,	31,0,
1034 0,0,	0,0,	31,0,	0,0,
1035 32,0,	32,0,	0,0,	0,0,
1036 32,0,	23,0,	4,31,	0,0,
1037 4,32,	4,33,	23,45,	25,0,
1038 4,34,	4,35,	0,0,	4,36,
1039 25,45,	31,0,	0,0,	4,37,
1040 4,38,	23,51,	31,45,	32,0,
1041 0,0,	0,0,	0,0,	0,0,
1042 32,45,	23,51,	0,0,	0,0,
1043 0,0,	0,0,	0,0,	0,0,
1044 0,0,	0,0,	4,39,	4,40,
1045 4,41,	4,42,	5,11,	0,0,
1046 0,0,	0,0,	5,12,	5,13,
1047 0,0,	5,14,	5,15,	5,16,
1048 5,17,	5,18,	5,19,	5,20,
1049 5,21,	0,0,	5,23,	5,23,
1050 5,23,	5,23,	5,23,	5,23,
1051 5,23,	0,0,	0,0,	5,24,
1052 5,25,	5,26,	5,27,	5,28,
1053 0,0,	5,29,	0,0,	0,0,
1054 26,0,	26,0,	0,0,	0,0,
1055 26,0,	0,0,	0,0,	0,0,
1056 0,0,	0,0,	0,0,	27,0,
1057 27,0,	33,0,	33,0,	27,0,
1058 0,0,	33,0,	0,0,	0,0,
1059 0,0,	39,0,	39,0,	26,0,
1060 5,31,	39,0,	5,32,	5,33,
1061 26,45,	0,0,	5,34,	5,35,
1062 0,0,	5,36,	27,0,	0,0,
1063 33,0,	5,37,	5,38,	27,45,
1064 0,0,	33,45,	0,0,	0,0,
1065 39,0,	0,0,	0,0,	0,0,
1066 0,0,	39,45,	0,0,	26,53,
1067 26,54,	0,0,	0,0,	0,0,
1068 5,39,	5,40,	5,41,	5,42,
1069 6,11,	0,0,	6,43,	27,55,
1070 6,12,	6,13,	0,0,	6,14,
1071 6,15,	6,16,	6,17,	6,18,
1072 6,19,	6,20,	6,21,	0,0,
1073 6,23,	6,23,	6,23,	6,23,
1074 6,23,	6,23,	6,23,	0,0,
1075 0,0,	6,24,	6,25,	6,26,
1076 6,27,	6,28,	0,0,	6,29,
1077 7,44,	0,0,	22,0,	22,0,
1078 0,0,	0,0,	22,0,	0,0,
1079 7,0,	7,0,	0,0,	0,0,
1080 7,0,	0,0,	28,0,	28,0,
1081 0,0,	0,0,	28,0,	0,0,
1082 40,0,	40,0,	0,0,	0,0,
1083 40,0,	22,0,	6,31,	0,0,
1084 6,32,	6,33,	22,45,	7,0,
1085 6,34,	6,35,	0,0,	6,36,
1086 7,45,	28,0,	0,0,	6,37,
1087 6,38,	22,50,	28,45,	40,0,
1088 0,0,	0,0,	0,0,	7,44,
1089 40,45,	22,51,	29,0,	29,0,
1090 30,0,	30,0,	29,0,	7,44,
1091 30,0,	0,0,	6,39,	6,40,
1092 6,41,	6,42,	0,0,	0,0,
1093 7,44,	0,0,	28,56,	28,57,
1094 0,0,	0,0,	7,44,	0,0,
1095 0,0,	29,0,	34,44,	30,0,
1096 0,0,	0,0,	29,45,	0,0,
1097 30,45,	22,52,	34,0,	34,0,
1098 35,44,	0,0,	34,0,	0,0,
1099 0,0,	29,58,	0,0,	30,59,
1100 35,0,	35,0,	41,0,	41,0,
1101 35,0,	29,58,	41,0,	30,59,
1102 0,0,	0,0,	0,0,	0,0,
1103 0,0,	34,0,	29,58,	0,0,
1104 30,59,	0,0,	34,45,	0,0,
1105 29,58,	22,52,	30,59,	35,0,
1106 36,44,	41,0,	0,0,	0,0,
1107 35,45,	34,59,	41,45,	0,0,
1108 36,0,	36,0,	0,0,	0,0,
1109 36,0,	34,59,	0,0,	35,59,
1110 42,0,	42,0,	37,44,	40,65,
1111 42,0,	0,0,	34,59,	35,59,
1112 0,0,	0,0,	37,0,	37,0,
1113 34,59,	0,0,	37,0,	36,0,
1114 35,59,	0,0,	0,0,	0,0,
1115 36,45,	0,0,	35,59,	42,0,
1116 0,0,	0,0,	0,0,	0,0,
1117 42,45,	0,0,	0,0,	36,59,
1118 38,44,	37,0,	0,0,	0,0,
1119 0,0,	0,0,	37,45,	36,59,
1120 38,0,	38,0,	44,0,	44,0,
1121 38,0,	0,0,	44,0,	0,0,
1122 36,59,	37,59,	0,0,	0,0,
1123 43,66,	0,0,	36,59,	0,0,
1124 35,61,	37,59,	34,60,	0,0,
1125 43,67,	43,68,	0,0,	38,0,
1126 43,69,	44,0,	37,59,	0,0,
1127 38,45,	0,0,	44,45,	0,0,
1128 37,59,	45,72,	0,0,	0,0,
1129 0,0,	0,0,	0,0,	38,59,
1130 0,0,	45,0,	45,0,	0,0,
1131 36,62,	45,0,	0,0,	38,59,
1132 43,70,	46,0,	46,0,	47,0,
1133 47,0,	46,0,	0,0,	47,0,
1134 38,59,	0,0,	37,63,	43,71,
1135 0,0,	0,0,	38,59,	0,0,
1136 45,0,	0,0,	0,0,	43,71,
1137 0,0,	45,0,	0,0,	76,88,
1138 46,0,	0,0,	47,0,	0,0,
1139 43,66,	46,45,	0,0,	47,45,
1140 45,72,	49,49,	43,66,	48,0,
1141 48,0,	0,0,	0,0,	48,0,
1142 45,72,	49,74,	49,75,	50,0,
1143 50,0,	49,74,	0,0,	50,0,
1144 0,0,	45,72,	0,0,	0,0,
1145 0,0,	38,64,	0,0,	45,72,
1146 0,0,	0,0,	48,0,	0,0,
1147 0,0,	51,0,	51,0,	48,45,
1148 0,0,	51,0,	50,0,	0,0,
1149 0,0,	49,76,	76,88,	50,45,
1150 48,73,	52,0,	52,0,	0,0,
1151 0,0,	52,0,	76,88,	0,0,
1152 49,49,	0,0,	50,77,	0,0,
1153 51,0,	0,0,	0,0,	76,88,
1154 49,49,	51,45,	50,51,	53,0,
1155 53,0,	76,88,	0,0,	53,0,
1156 52,0,	49,49,	54,0,	54,0,
1157 51,51,	52,45,	54,0,	49,49,
1158 0,0,	55,0,	55,0,	0,0,
1159 51,51,	55,0,	0,0,	0,0,
1160 52,78,	0,0,	53,0,	0,0,
1161 0,0,	0,0,	88,88,	53,45,
1162 52,78,	54,0,	0,0,	56,0,
1163 56,0,	0,0,	54,45,	56,0,
1164 55,0,	52,78,	57,0,	57,0,
1165 0,0,	55,45,	57,0,	0,0,
1166 58,0,	58,0,	59,0,	59,0,
1167 58,0,	0,0,	59,0,	0,0,
1168 0,0,	0,0,	56,0,	0,0,
1169 60,44,	0,0,	0,0,	56,45,
1170 0,0,	57,0,	0,0,	0,0,
1171 60,0,	60,0,	57,45,	58,0,
1172 60,0,	59,0,	0,0,	0,0,
1173 58,45,	88,88,	59,45,	0,0,
1174 61,0,	61,0,	0,0,	0,0,
1175 61,0,	88,88,	0,0,	58,58,
1176 101,103,	59,59,	0,0,	60,0,
1177 0,0,	0,0,	88,88,	58,58,
1178 60,45,	59,59,	62,0,	62,0,
1179 88,88,	0,0,	62,0,	61,0,
1180 58,58,	0,0,	59,59,	60,59,
1181 61,45,	0,0,	58,58,	0,0,
1182 59,59,	0,0,	0,0,	60,59,
1183 0,0,	0,0,	0,0,	63,44,
1184 0,0,	62,0,	0,0,	0,0,
1185 60,59,	0,0,	62,45,	63,0,
1186 63,0,	0,0,	60,59,	63,0,
1187 64,44,	65,0,	65,0,	101,103,
1188 0,0,	65,0,	0,0,	67,69,
1189 64,0,	64,0,	0,0,	101,103,
1190 64,0,	0,0,	70,85,	67,67,
1191 67,68,	0,0,	63,0,	67,69,
1192 101,103,	0,0,	70,69,	63,45,
1193 65,0,	0,0,	101,103,	0,0,
1194 0,0,	65,45,	0,0,	64,0,
1195 0,0,	0,0,	63,59,	0,0,
1196 64,45,	72,0,	72,0,	0,0,
1197 0,0,	72,0,	63,59,	60,79,
1198 0,0,	0,0,	0,0,	64,59,
1199 0,0,	61,80,	0,0,	63,59,
1200 73,0,	73,0,	67,84,	64,59,
1201 73,0,	63,59,	0,0,	0,0,
1202 72,0,	70,85,	67,84,	0,0,
1203 64,59,	72,0,	0,0,	62,81,
1204 85,85,	70,85,	64,59,	67,69,
1205 0,0,	74,74,	0,0,	73,0,
1206 85,69,	67,69,	70,85,	0,0,
1207 73,45,	74,74,	74,75,	0,0,
1208 70,85,	74,74,	77,0,	77,0,
1209 78,0,	78,0,	77,0,	0,0,
1210 78,0,	0,0,	0,0,	79,44,
1211 80,0,	80,0,	0,0,	64,83,
1212 80,0,	63,82,	0,0,	79,0,
1213 79,0,	0,0,	0,0,	79,0,
1214 96,102,	77,0,	0,0,	78,0,
1215 0,0,	0,0,	77,45,	85,85,
1216 78,45,	81,0,	81,0,	80,0,
1217 74,74,	81,0,	0,0,	85,85,
1218 80,45,	77,77,	79,0,	78,78,
1219 74,74,	0,0,	0,0,	79,45,
1220 85,85,	77,51,	0,0,	78,78,
1221 0,0,	74,74,	85,85,	82,44,
1222 81,0,	96,103,	79,59,	74,74,
1223 78,78,	81,45,	0,0,	82,0,
1224 82,0,	0,0,	79,59,	82,0,
1225 87,87,	83,0,	83,0,	96,102,
1226 0,0,	83,0,	0,0,	79,59,
1227 87,94,	87,68,	0,0,	96,102,
1228 87,94,	79,59,	0,0,	0,0,
1229 0,0,	0,0,	82,0,	0,0,
1230 96,102,	91,0,	91,0,	82,45,
1231 83,0,	91,0,	96,102,	0,0,
1232 0,0,	83,45,	0,0,	89,44,
1233 80,90,	87,95,	82,59,	0,0,
1234 87,96,	0,0,	0,0,	89,0,
1235 89,0,	0,0,	82,59,	89,0,
1236 91,0,	0,0,	0,0,	87,87,
1237 0,0,	91,45,	0,0,	82,59,
1238 0,0,	79,89,	0,0,	87,87,
1239 0,0,	82,59,	0,0,	0,0,
1240 90,44,	0,0,	89,0,	0,0,
1241 87,87,	0,0,	0,0,	89,45,
1242 90,0,	90,0,	87,87,	81,91,
1243 90,0,	0,0,	0,0,	92,0,
1244 92,0,	0,0,	89,59,	92,0,
1245 93,44,	0,0,	0,0,	0,0,
1246 0,0,	0,0,	89,59,	0,0,
1247 93,0,	93,0,	82,92,	90,0,
1248 93,0,	83,93,	0,0,	89,59,
1249 90,45,	0,0,	92,0,	0,0,
1250 94,94,	89,59,	0,0,	92,45,
1251 0,0,	0,0,	0,0,	90,59,
1252 94,94,	94,68,	0,0,	93,0,
1253 94,94,	91,92,	92,59,	90,59,
1254 93,45,	97,0,	97,0,	102,102,
1255 95,95,	97,0,	92,59,	0,0,
1256 90,59,	0,0,	0,0,	93,59,
1257 95,99,	95,100,	90,59,	92,59,
1258 95,99,	94,99,	0,0,	93,59,
1259 0,0,	92,59,	0,0,	89,97,
1260 97,0,	0,0,	0,0,	0,0,
1261 93,59,	97,45,	103,103,	94,94,
1262 0,0,	98,44,	93,59,	99,99,
1263 102,103,	0,0,	0,0,	94,94,
1264 95,101,	98,0,	98,0,	99,99,
1265 99,100,	98,0,	0,0,	99,99,
1266 94,94,	0,0,	102,102,	95,95,
1267 0,0,	0,0,	94,94,	0,0,
1268 0,0,	90,98,	102,102,	95,95,
1269 0,0,	0,0,	0,0,	0,0,
1270 98,0,	0,0,	0,0,	102,102,
1271 95,95,	98,45,	0,0,	0,0,
1272 0,0,	102,102,	95,95,	0,0,
1273 0,0,	103,103,	0,0,	0,0,
1274 98,59,	0,0,	99,99,	93,92,
1275 0,0,	103,103,	0,0,	0,0,
1276 98,59,	97,104,	99,99,	104,0,
1277 104,0,	0,0,	103,103,	104,0,
1278 0,0,	98,59,	0,0,	99,99,
1279 103,103,	0,0,	0,0,	98,59,
1280 0,0,	99,99,	105,0,	105,0,
1281 106,44,	0,0,	105,0,	0,0,
1282 0,0,	0,0,	104,0,	0,0,
1283 106,0,	106,0,	0,0,	104,45,
1284 106,0,	0,0,	0,0,	0,0,
1285 0,0,	0,0,	0,0,	0,0,
1286 0,0,	105,0,	0,0,	0,0,
1287 0,0,	0,0,	105,45,	0,0,
1288 0,0,	0,0,	0,0,	106,0,
1289 0,0,	0,0,	0,0,	0,0,
1290 106,45,	0,0,	0,0,	0,0,
1291 0,0,	0,0,	0,0,	0,0,
1292 0,0,	98,92,	0,0,	106,59,
1293 0,0,	0,0,	0,0,	0,0,
1294 0,0,	0,0,	0,0,	106,59,
1295 0,0,	0,0,	0,0,	0,0,
1296 0,0,	0,0,	0,0,	0,0,
1297 106,59,	0,0,	0,0,	0,0,
1298 0,0,	0,0,	106,59,	0,0,
1299 0,0,	0,0,	0,0,	0,0,
1300 0,0,	0,0,	0,0,	0,0,
1301 0,0,	0,0,	0,0,	0,0,
1302 0,0,	0,0,	0,0,	0,0,
1303 0,0,	0,0,	104,105,	0,0,
1304 0,0,	0,0,	105,106,	0,0,
1305 0,0,	0,0,	106,92,	0,0,
1306 0,0};
1307 struct yysvf yysvec[] = {
1308 0,	0,	0,
1309 yycrank+-1,	0,		0,
1310 yycrank+-95,	yysvec+1,	0,
1311 yycrank+-189,	yysvec+1,	0,
1312 yycrank+-283,	yysvec+1,	0,
1313 yycrank+-377,	yysvec+1,	0,
1314 yycrank+-471,	yysvec+1,	0,
1315 yycrank+-535,	0,		yyvstop+1,
1316 yycrank+3,	0,		yyvstop+3,
1317 yycrank+0,	yysvec+8,	yyvstop+6,
1318 yycrank+0,	0,		yyvstop+8,
1319 yycrank+-70,	yysvec+7,	yyvstop+10,
1320 yycrank+0,	0,		yyvstop+13,
1321 yycrank+-72,	yysvec+7,	yyvstop+16,
1322 yycrank+-80,	yysvec+7,	yyvstop+19,
1323 yycrank+-153,	yysvec+7,	yyvstop+22,
1324 yycrank+-159,	yysvec+7,	yyvstop+25,
1325 yycrank+-165,	yysvec+7,	yyvstop+28,
1326 yycrank+-171,	yysvec+7,	yyvstop+31,
1327 yycrank+-247,	yysvec+7,	yyvstop+34,
1328 yycrank+-253,	yysvec+7,	yyvstop+37,
1329 yycrank+-259,	yysvec+7,	yyvstop+39,
1330 yycrank+-529,	yysvec+7,	yyvstop+42,
1331 yycrank+-341,	yysvec+7,	yyvstop+45,
1332 yycrank+-265,	yysvec+7,	yyvstop+48,
1333 yycrank+-347,	yysvec+7,	yyvstop+51,
1334 yycrank+-435,	yysvec+7,	yyvstop+54,
1335 yycrank+-446,	yysvec+7,	yyvstop+57,
1336 yycrank+-541,	yysvec+7,	yyvstop+60,
1337 yycrank+-577,	yysvec+7,	yyvstop+63,
1338 yycrank+-579,	yysvec+7,	yyvstop+65,
1339 yycrank+-353,	yysvec+7,	yyvstop+68,
1340 yycrank+-359,	yysvec+7,	yyvstop+71,
1341 yycrank+-448,	yysvec+7,	yyvstop+74,
1342 yycrank+-609,	0,		yyvstop+77,
1343 yycrank+-619,	0,		yyvstop+80,
1344 yycrank+-651,	0,		yyvstop+83,
1345 yycrank+-669,	0,		yyvstop+86,
1346 yycrank+-699,	0,		yyvstop+89,
1347 yycrank+-456,	yysvec+7,	yyvstop+92,
1348 yycrank+-547,	yysvec+7,	yyvstop+95,
1349 yycrank+-621,	yysvec+7,	yyvstop+98,
1350 yycrank+-659,	yysvec+7,	yyvstop+101,
1351 yycrank+-719,	0,		yyvstop+104,
1352 yycrank+-701,	yysvec+7,	0,
1353 yycrank+-740,	0,		0,
1354 yycrank+-748,	yysvec+7,	yyvstop+106,
1355 yycrank+-750,	yysvec+7,	yyvstop+108,
1356 yycrank+-782,	yysvec+7,	0,
1357 yycrank+-788,	0,		0,
1358 yycrank+-790,	yysvec+7,	yyvstop+110,
1359 yycrank+-808,	yysvec+7,	yyvstop+112,
1360 yycrank+-820,	yysvec+7,	0,
1361 yycrank+-838,	yysvec+7,	yyvstop+114,
1362 yycrank+-845,	yysvec+7,	yyvstop+116,
1363 yycrank+-852,	yysvec+7,	yyvstop+118,
1364 yycrank+-870,	yysvec+7,	yyvstop+120,
1365 yycrank+-877,	yysvec+7,	yyvstop+122,
1366 yycrank+-883,	yysvec+7,	yyvstop+124,
1367 yycrank+-885,	yysvec+7,	yyvstop+126,
1368 yycrank+-903,	0,		yyvstop+128,
1369 yycrank+-915,	yysvec+38,	yyvstop+130,
1370 yycrank+-933,	yysvec+38,	yyvstop+132,
1371 yycrank+-962,	0,		yyvstop+134,
1372 yycrank+-975,	0,		yyvstop+136,
1373 yycrank+-968,	yysvec+7,	yyvstop+138,
1374 yycrank+-21,	yysvec+43,	0,
1375 yycrank+-982,	0,		0,
1376 yycrank+0,	0,		yyvstop+140,
1377 yycrank+-19,	yysvec+67,	0,
1378 yycrank+-989,	yysvec+67,	0,
1379 yycrank+-77,	yysvec+43,	0,
1380 yycrank+-1004,	yysvec+45,	yyvstop+142,
1381 yycrank+-1019,	yysvec+7,	yyvstop+144,
1382 yycrank+-1048,	0,		0,
1383 yycrank+0,	0,		yyvstop+146,
1384 yycrank+-778,	yysvec+74,	0,
1385 yycrank+-1053,	yysvec+7,	yyvstop+148,
1386 yycrank+-1055,	yysvec+7,	yyvstop+151,
1387 yycrank+-1070,	0,		yyvstop+153,
1388 yycrank+-1063,	yysvec+37,	yyvstop+155,
1389 yycrank+-1084,	yysvec+63,	yyvstop+157,
1390 yycrank+-1114,	0,		yyvstop+159,
1391 yycrank+-1120,	yysvec+36,	yyvstop+161,
1392 yycrank+-6,	yysvec+67,	0,
1393 yycrank+-1043,	yysvec+67,	yyvstop+163,
1394 yycrank+-167,	yysvec+67,	0,
1395 yycrank+-1127,	0,		0,
1396 yycrank+-873,	yysvec+74,	yyvstop+165,
1397 yycrank+-1158,	0,		yyvstop+167,
1398 yycrank+-1187,	0,		yyvstop+169,
1399 yycrank+-1140,	yysvec+36,	yyvstop+171,
1400 yycrank+-1194,	yysvec+7,	yyvstop+173,
1401 yycrank+-1207,	0,		yyvstop+176,
1402 yycrank+-1227,	0,		0,
1403 yycrank+-1247,	0,		0,
1404 yycrank+-1083,	yysvec+94,	0,
1405 yycrank+-1236,	yysvec+37,	yyvstop+178,
1406 yycrank+-1276,	0,		yyvstop+180,
1407 yycrank+-1278,	0,		0,
1408 yycrank+0,	0,		yyvstop+182,
1409 yycrank+-931,	yysvec+99,	0,
1410 yycrank+-1246,	yysvec+94,	yyvstop+185,
1411 yycrank+-1273,	yysvec+99,	yyvstop+187,
1412 yycrank+-1326,	yysvec+60,	yyvstop+189,
1413 yycrank+-1341,	yysvec+35,	yyvstop+191,
1414 yycrank+-1351,	0,		yyvstop+193,
1415 0,	0,	0};
1416 struct yywork *yytop = yycrank+1450;
1417 struct yysvf *yybgin = yysvec+1;
1418 char yymatch[] = {
1419   0,   1,   1,   1,   1,   1,   1,   1,
1420   1,   9,  10,   1,   1,  13,   1,   1,
1421   1,   1,   1,   1,   1,   1,   1,   1,
1422   1,   1,   1,   1,   1,   1,   1,   1,
1423   9,   1,   1,   1,   1,  13,   1,   1,
1424   1,   1,   1,   1,   1,   1,   1,   1,
1425  48,  48,  48,  48,  48,  48,  48,  48,
1426  56,  56,   1,   1,   1,   1,   1,   1,
1427   1,  65,  65,  65,  65,  65,  65,  71,
1428  71,  71,  71,  71,  71,  71,  71,  71,
1429  71,  71,  71,  71,  71,  71,  71,  71,
1430  71,  71,  71,   1,   1,   1,   1,  71,
1431   1,  65,  65,  65,  65,  65,  65,  71,
1432  71,  71,  71,  71,  71,  71,  71,  71,
1433  71,  71,  71,  71,  71,  71,  71,  71,
1434  71,  71,  71,   1,   1,   1,   1,   1,
1435   1,   1,   1,   1,   1,   1,   1,   1,
1436   1,   1,   1,   1,   1,   1,   1,   1,
1437   1,   1,   1,   1,   1,   1,   1,   1,
1438   1,   1,   1,   1,   1,   1,   1,   1,
1439   1,   1,   1,   1,   1,   1,   1,   1,
1440   1,   1,   1,   1,   1,   1,   1,   1,
1441   1,   1,   1,   1,   1,   1,   1,   1,
1442   1,   1,   1,   1,   1,   1,   1,   1,
1443   1,   1,   1,   1,   1,   1,   1,   1,
1444   1,   1,   1,   1,   1,   1,   1,   1,
1445   1,   1,   1,   1,   1,   1,   1,   1,
1446   1,   1,   1,   1,   1,   1,   1,   1,
1447   1,   1,   1,   1,   1,   1,   1,   1,
1448   1,   1,   1,   1,   1,   1,   1,   1,
1449   1,   1,   1,   1,   1,   1,   1,   1,
1450   1,   1,   1,   1,   1,   1,   1,   1,
1451 0};
1452 char yyextra[] = {
1453 0,0,0,0,0,0,0,0,
1454 0,0,0,0,0,0,0,0,
1455 0,0,0,0,0,0,0,0,
1456 0,0,0,0,0,0,0,0,
1457 0,0,0,0,0,0,0,0,
1458 0,0,0,0,0,0,0,0,
1459 0};
1460 /*
1461  * CDDL HEADER START
1462  *
1463  * The contents of this file are subject to the terms of the
1464  * Common Development and Distribution License, Version 1.0 only
1465  * (the "License").  You may not use this file except in compliance
1466  * with the License.
1467  *
1468  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1469  * or http://www.opensolaris.org/os/licensing.
1470  * See the License for the specific language governing permissions
1471  * and limitations under the License.
1472  *
1473  * When distributing Covered Code, include this CDDL HEADER in each
1474  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1475  * If applicable, add the following below this CDDL HEADER, with the
1476  * fields enclosed by brackets "[]" replaced with your own identifying
1477  * information: Portions Copyright [yyyy] [name of copyright owner]
1478  *
1479  * CDDL HEADER END
1480  */
1481 
1482 /*	Copyright (c) 1989 AT&T	*/
1483 /*	  All Rights Reserved  	*/
1484 
1485 #pragma ident	"%Z%%M%	%I%	%E% SMI"
1486 
1487 int yylineno =1;
1488 # define YYU(x) x
1489 # define NLSTATE yyprevious=YYNEWLINE
1490 struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
1491 char yysbuf[YYLMAX];
1492 char *yysptr = yysbuf;
1493 int *yyfnd;
1494 extern struct yysvf *yyestate;
1495 int yyprevious = YYNEWLINE;
1496 #if defined(__cplusplus) || defined(__STDC__)
1497 int yylook(void)
1498 #else
1499 yylook()
1500 #endif
1501 {
1502 	register struct yysvf *yystate, **lsp;
1503 	register struct yywork *yyt;
1504 	struct yysvf *yyz;
1505 	int yych, yyfirst;
1506 	struct yywork *yyr;
1507 # ifdef LEXDEBUG
1508 	int debug;
1509 # endif
1510 	char *yylastch;
1511 	/* start off machines */
1512 # ifdef LEXDEBUG
1513 	debug = 0;
1514 # endif
1515 	yyfirst=1;
1516 	if (!yymorfg)
1517 		yylastch = yytext;
1518 	else {
1519 		yymorfg=0;
1520 		yylastch = yytext+yyleng;
1521 		}
1522 	for(;;){
1523 		lsp = yylstate;
1524 		yyestate = yystate = yybgin;
1525 		if (yyprevious==YYNEWLINE) yystate++;
1526 		for (;;){
1527 # ifdef LEXDEBUG
1528 			if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
1529 # endif
1530 			yyt = yystate->yystoff;
1531 			if(yyt == yycrank && !yyfirst){  /* may not be any transitions */
1532 				yyz = yystate->yyother;
1533 				if(yyz == 0)break;
1534 				if(yyz->yystoff == yycrank)break;
1535 				}
1536 #ifndef __cplusplus
1537 			*yylastch++ = yych = input();
1538 #else
1539 			*yylastch++ = yych = lex_input();
1540 #endif
1541 #ifdef YYISARRAY
1542 			if(yylastch > &yytext[YYLMAX]) {
1543 				fprintf(yyout,gettext("Input string too long, limit %d\n"),YYLMAX);
1544 				exit(1);
1545 			}
1546 #else
1547 			if (yylastch >= &yytext[ yytextsz ]) {
1548 				int	x = yylastch - yytext;
1549 
1550 				yytextsz += YYTEXTSZINC;
1551 				if (yytext == yy_tbuf) {
1552 				    yytext = (char *) malloc(yytextsz);
1553 				    memcpy(yytext, yy_tbuf, sizeof (yy_tbuf));
1554 				}
1555 				else
1556 				    yytext = (char *) realloc(yytext, yytextsz);
1557 				if (!yytext) {
1558 				    fprintf(yyout,
1559 					gettext("Cannot realloc yytext\n"));
1560 				    exit(1);
1561 				}
1562 				yylastch = yytext + x;
1563 			}
1564 #endif
1565 			yyfirst=0;
1566 		tryagain:
1567 # ifdef LEXDEBUG
1568 			if(debug){
1569 				fprintf(yyout,"char ");
1570 				allprint(yych);
1571 				putchar('\n');
1572 				}
1573 # endif
1574 			yyr = yyt;
1575 			if ( (uintptr_t)yyt > (uintptr_t)yycrank){
1576 				yyt = yyr + yych;
1577 				if (yyt <= yytop && yyt->verify+yysvec == yystate){
1578 					if(yyt->advance+yysvec == YYLERR)	/* error transitions */
1579 						{unput(*--yylastch);break;}
1580 					*lsp++ = yystate = yyt->advance+yysvec;
1581 					if(lsp > &yylstate[YYLMAX]) {
1582 						fprintf(yyout,gettext("Input string too long, limit %d\n"),YYLMAX);
1583 						exit(1);
1584 					}
1585 					goto contin;
1586 					}
1587 				}
1588 # ifdef YYOPTIM
1589 			else if((uintptr_t)yyt < (uintptr_t)yycrank) {	/* r < yycrank */
1590 				yyt = yyr = yycrank+(yycrank-yyt);
1591 # ifdef LEXDEBUG
1592 				if(debug)fprintf(yyout,"compressed state\n");
1593 # endif
1594 				yyt = yyt + yych;
1595 				if(yyt <= yytop && yyt->verify+yysvec == yystate){
1596 					if(yyt->advance+yysvec == YYLERR)	/* error transitions */
1597 						{unput(*--yylastch);break;}
1598 					*lsp++ = yystate = yyt->advance+yysvec;
1599 					if(lsp > &yylstate[YYLMAX]) {
1600 						fprintf(yyout,gettext("Input string too long, limit %d\n"),YYLMAX);
1601 						exit(1);
1602 					}
1603 					goto contin;
1604 					}
1605 				yyt = yyr + YYU(yymatch[yych]);
1606 # ifdef LEXDEBUG
1607 				if(debug){
1608 					fprintf(yyout,"try fall back character ");
1609 					allprint(YYU(yymatch[yych]));
1610 					putchar('\n');
1611 					}
1612 # endif
1613 				if(yyt <= yytop && yyt->verify+yysvec == yystate){
1614 					if(yyt->advance+yysvec == YYLERR)	/* error transition */
1615 						{unput(*--yylastch);break;}
1616 					*lsp++ = yystate = yyt->advance+yysvec;
1617 					if(lsp > &yylstate[YYLMAX]) {
1618 						fprintf(yyout,gettext("Input string too long, limit %d\n"),YYLMAX);
1619 						exit(1);
1620 					}
1621 					goto contin;
1622 					}
1623 				}
1624 			if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
1625 # ifdef LEXDEBUG
1626 				if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
1627 # endif
1628 				goto tryagain;
1629 				}
1630 # endif
1631 			else
1632 				{unput(*--yylastch);break;}
1633 		contin:
1634 # ifdef LEXDEBUG
1635 			if(debug){
1636 				fprintf(yyout,"state %d char ",yystate-yysvec-1);
1637 				allprint(yych);
1638 				putchar('\n');
1639 				}
1640 # endif
1641 			;
1642 			}
1643 # ifdef LEXDEBUG
1644 		if(debug){
1645 			fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
1646 			allprint(yych);
1647 			putchar('\n');
1648 			}
1649 # endif
1650 		while (lsp-- > yylstate){
1651 			*yylastch-- = 0;
1652 			if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
1653 				yyolsp = lsp;
1654 				if(yyextra[*yyfnd]){		/* must backup */
1655 					while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
1656 						lsp--;
1657 						unput(*yylastch--);
1658 						}
1659 					}
1660 				yyprevious = YYU(*yylastch);
1661 				yylsp = lsp;
1662 				yyleng = yylastch-yytext+1;
1663 				yytext[yyleng] = 0;
1664 # ifdef LEXDEBUG
1665 				if(debug){
1666 					fprintf(yyout,"\nmatch ");
1667 					sprint(yytext);
1668 					fprintf(yyout," action %d\n",*yyfnd);
1669 					}
1670 # endif
1671 				return(*yyfnd++);
1672 				}
1673 			unput(*yylastch);
1674 			}
1675 		if (yytext[0] == 0  /* && feof(yyin) */)
1676 			{
1677 			yysptr=yysbuf;
1678 			return(0);
1679 			}
1680 #ifndef __cplusplus
1681 		yyprevious = yytext[0] = input();
1682 		if (yyprevious>0)
1683 			output(yyprevious);
1684 #else
1685 		yyprevious = yytext[0] = lex_input();
1686 		if (yyprevious>0)
1687 			lex_output(yyprevious);
1688 #endif
1689 		yylastch=yytext;
1690 # ifdef LEXDEBUG
1691 		if(debug)putchar('\n');
1692 # endif
1693 		}
1694 	}
1695 #if defined(__cplusplus) || defined(__STDC__)
1696 int yyback(int *p, int m)
1697 #else
1698 yyback(p, m)
1699 	int *p;
1700 #endif
1701 {
1702 	if (p==0) return(0);
1703 	while (*p) {
1704 		if (*p++ == m)
1705 			return(1);
1706 	}
1707 	return(0);
1708 }
1709 	/* the following are only used in the lex library */
1710 #if defined(__cplusplus) || defined(__STDC__)
1711 int yyinput(void)
1712 #else
1713 yyinput()
1714 #endif
1715 {
1716 #ifndef __cplusplus
1717 	return(input());
1718 #else
1719 	return(lex_input());
1720 #endif
1721 	}
1722 #if defined(__cplusplus) || defined(__STDC__)
1723 void yyoutput(int c)
1724 #else
1725 yyoutput(c)
1726   int c;
1727 #endif
1728 {
1729 #ifndef __cplusplus
1730 	output(c);
1731 #else
1732 	lex_output(c);
1733 #endif
1734 	}
1735 #if defined(__cplusplus) || defined(__STDC__)
1736 void yyunput(int c)
1737 #else
1738 yyunput(c)
1739    int c;
1740 #endif
1741 {
1742 	unput(c);
1743 	}
1744