Re: Fix for #686929, Optimize pdf_simple_font_needs_ToUnicode()
"Igor V. Melichev" <[email protected]>
| Newsgroups | gmane.comp.printing.ghostscript.patches |
|---|---|
| Message-ID | <[email protected]> |
The patch looks fine. Please commit and inform me. Igor. ----- Original Message ----- From: "Alex Cherepanov" <[email protected]> To: "gs-code-review" <[email protected]>; "Igor V. Melichev" <[email protected]> Sent: Monday, July 21, 2003 1:01 AM Subject: Fix for #686929, Optimize pdf_simple_font_needs_ToUnicode() > Create a table that decides whether the glyph index belongs to > [WinAnsiEncoding, StandardEncoding, MacExpertEncoding], or > SymbolEncoding, or none of them. Use this table instead of > searching the encoding vectors for every glyph. > Fix bug 686929. > > The code was tested on PDF files from our test suite. > ---------------------------------------------------------------------------- ---- > Index: gs/doc/Develop.htm > =================================================================== > RCS file: /cvs/ghostscript/gs/doc/Develop.htm,v > retrieving revision 1.117 > diff -b -u -r1.117 Develop.htm > --- gs/doc/Develop.htm 8 Jul 2003 14:51:03 -0000 1.117 > +++ gs/doc/Develop.htm 20 Jul 2003 19:55:14 -0000 > @@ -1683,6 +1683,8 @@ > <a href="../src/gdevpdts.h">src/gdevpdts.h</a>, > <a href="../src/gdevpdtt.c">src/gdevpdtt.c</a>, > <a href="../src/gdevpdtt.h">src/gdevpdtt.h</a>, > +<a href="../src/gdevpdtv.c">src/gdevpdtv.c</a>, > +<a href="../src/gdevpdtv.h">src/gdevpdtv.h</a>, > <a href="../src/gdevpdtw.c">src/gdevpdtw.c</a>, > <a href="../src/gdevpdtw.h">src/gdevpdtw.h</a>, > <a href="../src/gdevpdtx.h">src/gdevpdtx.h</a>. > Index: gs/src/devs.mak > =================================================================== > RCS file: /cvs/ghostscript/gs/src/devs.mak,v > retrieving revision 1.92 > diff -b -u -r1.92 devs.mak > --- gs/src/devs.mak 21 Apr 2003 15:39:47 -0000 1.92 > +++ gs/src/devs.mak 20 Jul 2003 19:55:14 -0000 > @@ -876,6 +876,7 @@ > gdevpdti_h=$(GLSRC)gdevpdti.h $(gdevpdt_h) > gdevpdts_h=$(GLSRC)gdevpdts.h $(gsmatrix_h) > gdevpdtt_h=$(GLSRC)gdevpdtt.h > +gdevpdtv_h=$(GLSRC)gdevpdtv.h > gdevpdtw_h=$(GLSRC)gdevpdtw.h > > # We reserve space for all of a..z, just in case. > @@ -886,7 +887,7 @@ > pdxtext_lmn= > pdxtext_opq= > pdxtext_rst=$(GLOBJ)gdevpdts.$(OBJ) $(GLOBJ)gdevpdtt.$(OBJ) > -pdxtext_uvw=$(GLOBJ)gdevpdtw.$(OBJ) > +pdxtext_uvw=$(GLOBJ)gdevpdtv.$(OBJ) $(GLOBJ)gdevpdtw.$(OBJ) > pdxtext_xyz= > pdxtext_=$(pdxtext_ab) $(pdxtext_cde) $(pdxtext_fgh) $(pdxtext_ijk)\ > $(pdxtext_lmn) $(pdxtext_opq) $(pdxtext_rst) $(pdxtext_uvw) $(pdxtext_xyz)\ > @@ -955,10 +956,13 @@ > $(gdevpdtx_h) $(gdevpdtd_h) $(gdevpdtf_h) $(gdevpdts_h) $(gdevpdtt_h) $(gdevpdti_h) > $(GLCC) $(GLO_)gdevpdtt.$(OBJ) $(C_) $(GLSRC)gdevpdtt.c > > +$(GLOBJ)gdevpdtv.$(OBJ) : $(GLSRC)gdevpdtv.c $(gx_h) $(gdevpdtv_h) > + $(GLCC) $(GLO_)gdevpdtv.$(OBJ) $(C_) $(GLSRC)gdevpdtv.c > + > $(GLOBJ)gdevpdtw.$(OBJ) : $(GLSRC)gdevpdtw.c $(gx_h) $(memory__h)\ > $(gxfcmap_h) $(gxfont_h) $(gscencs_h)\ > $(gdevpsf_h) $(gdevpdfx_h) $(gdevpdfo_h)\ > - $(gdevpdtd_h) $(gdevpdtf_h) $(gdevpdti_h) $(gdevpdtw_h) > + $(gdevpdtd_h) $(gdevpdtf_h) $(gdevpdti_h) $(gdevpdtw_h) $(gdevpdtv_h) > $(GLCC) $(GLO_)gdevpdtw.$(OBJ) $(C_) $(GLSRC)gdevpdtw.c > > ################ END PDF WRITER ################ > Index: gs/src/gdevpdtw.c > =================================================================== > RCS file: /cvs/ghostscript/gs/src/gdevpdtw.c,v > retrieving revision 1.19 > diff -b -u -r1.19 gdevpdtw.c > --- gs/src/gdevpdtw.c 21 Jun 2003 15:16:53 -0000 1.19 > +++ gs/src/gdevpdtw.c 20 Jul 2003 19:55:14 -0000 > @@ -28,6 +28,7 @@ > #include "gdevpdtf.h" > #include "gdevpdti.h" /* for writing bitmap fonts Encoding */ > #include "gdevpdtw.h" > +#include "gdevpdtv.h" > > private const char *const encoding_names[] = { > KNOWN_REAL_ENCODING_NAMES > @@ -99,20 +100,13 @@ > return ch; > } > > -private ushort good_encodings[] = { > - 4, /* WinAnsiEncoding */ > - 0, /* StandardEncoding */ > - 6, /* MacExpertEncoding */ > - 2 /* SymbolEncoding */ > - }; /* Ths table must be conssitent with gs_c_known_encodings. */ > - > /* Check for unknown encode (simple fonts only). */ > private bool > pdf_simple_font_needs_ToUnicode(const pdf_font_resource_t *pdfont) > { > int ch, ch1, i; > - int ne = (pdfont->FontType == ft_encrypted || pdfont->FontType == ft_encrypted2 > - ? count_of(good_encodings) : count_of(good_encodings) - 1); > + unsigned char mask = (pdfont->FontType == ft_encrypted || pdfont->FontType == ft_encrypted2 > + ? GS_C_PDF_GOOD_GLYPH_MASK : GS_C_PDF_GOOD_NON_SYMBOL_MASK); > > if (pdfont->u.simple.Encoding == NULL) > return true; /* Bitmap Type 3 fonts have no pdfont->u.simple.Encoding . */ > @@ -129,26 +123,10 @@ > if (glyph == GS_NO_GLYPH) > return true; > } > - for (i = 0; i < ne; i++) { > - gs_glyph glyph1 = gs_c_known_encode(ch, good_encodings[i]); > - > - if (glyph == glyph1) > - goto next; > - } > - for (i = 0; i < ne; i++) { > - ushort ei = good_encodings[i]; > - > - for (ch1 = 0; ch1 < 256; ++ch1) { > - gs_glyph glyph1 = gs_c_known_encode(ch1, ei); > - > - if (glyph == glyph1) > - goto next; > - } > - } > - /* fixme : the 2 loops above to be optimized with a new statically > - * defined table in gscedata.c . */ > + glyph -= gs_c_min_std_encoding_glyph; > + if( glyph > GS_C_PDF_MAX_GOOD_GLYPH || > + !(gs_c_pdf_glyph_type[glyph >> 2] & (mask << (( glyph & 3 )<<1) ))) > return true; > - next: continue; > } > return false; > } > Index: gs/toolbin/encs2c.ps > =================================================================== > RCS file: /cvs/ghostscript/gs/toolbin/encs2c.ps,v > retrieving revision 1.3 > diff -b -u -r1.3 encs2c.ps > --- gs/toolbin/encs2c.ps 9 Jul 2002 14:04:19 -0000 1.3 > +++ gs/toolbin/encs2c.ps 20 Jul 2003 19:55:14 -0000 > @@ -23,21 +23,24 @@ > % represent them in a compact format described in src/gscencs.c. > % The generated files are named gscedata.[ch] and are included in the > % source distribution in the src directory. The canonical invocation is > -% gs -dNODISPLAY -q -DH -SO=gscedata.h toolbin/encs2c.ps > src/gscedata.h > +% gs -dNODISPLAY -q -SO=gscedata.h toolbin/encs2c.ps > src/gscedata.h > % gs -dNODISPLAY -q -SO=gscedata.c toolbin/encs2c.ps > src/gscedata.c > - > +% > % NOTE: If the C representation of encodings changes, this file > % (toolbin/encs2c.ps), src/gscencs.h, and src/gscencs.c must be kept > % consistent with each other. > +% > +% This program also generates a table of glyphs available in > +% WinAnsiEncoding, StandardEncoding, MacExpertEncoding, SymbolEncoding > +% for pdfwrite device. > +% > +% gs -dNODISPLAY -q -SO=gdevpdtv.h toolbin/encs2c.ps > src/gdevpdtv.h > +% gs -dNODISPLAY -q -SO=gdevpdtv.c toolbin/encs2c.ps > src/gdevpdtv.c > > % ================ Write header file ================ % > > % Free variables: maxlen. > /writeheader { > - % Compute the division of the glyph number into length and offset. > - /lenbits 1 maxlen { > - dup 1 eq { exit } if exch 1 add exch -1 bitshift > - } loop pop def > (#ifndef gscedata_INCLUDED) = > (# define gscedata_INCLUDED) = > () = > @@ -71,27 +74,24 @@ > % alphabetically increasing within the same length. > ( > const char gs_c_known_encoding_chars[] = {) = > - /lbase maxlen 1 add array def > - lbase 0 0 put > - /offset 0 def > 1 1 maxlen { > /len exch def > - lbase len offset put > /noff 0 def > % Collect and sort names of this length. > - /new [ estrs { > + [ estrs { > pop dup length len ne { pop } { .namestring } ifelse > - } forall ] /lt load .sort def > + } forall ] /lt load .sort > % Output the names. > - new { > + { > dup { > (') print (x) dup 0 4 -1 roll put print (',) print > } forall > ( /*N\() print len =only (,) print noff =only (\)*/) = > - estrs exch noff put > + estrs exch get noff ne { > + (Different offsets in 1st and 2nd pass) = > + } if > /noff noff len add def > } forall > - /offset offset noff add def > } for > (0};) = > ( > @@ -145,6 +145,76 @@ > > } def > > +% ========= Write PDF good glyph table ========= % > + > +/calc_glyph_table { > + > + /N { lenbits bitshift add } bind def > + > + /enc_mame_to_index << > + 0 encnames { > + exch dup 1 add > + } forall pop > + >> readonly def > + > + /glyph_type 600 dict begin > + > + /SymbolEncoding enc_mame_to_index exch get encodings exch get { > + dup length > + exch estrs exch get > + N 1 def > + } forall > + > + { /StandardEncoding /WinAnsiEncoding /MacExpertEncoding } { > + enc_mame_to_index exch get encodings exch get { > + dup length exch estrs exch get N 3 def > + } forall > + } forall > + currentdict end def > + > + /max_glyph 0 def > + > + glyph_type { > + pop max_glyph .max /max_glyph exch def > + } forall > + > +} bind def > + > +/write_glyph_table { > + calc_glyph_table > + (/*) = > + ( * Glyph attributes for every glyph <= GS_C_PDF_MAX_GOOD_GLYPH) = > + ( * packed 4 per byte least significant bits first.) = > + ( */)= > + > + (const unsigned char gs_c_pdf_glyph_type[] = {) = > + 0 1 max_glyph 4 idiv { > + 4 mul > + dup glyph_type exch .knownget not { 0 } if > + 1 index 1 add glyph_type exch .knownget not { 0 } if 2 bitshift or > + 1 index 2 add glyph_type exch .knownget not { 0 } if 4 bitshift or > + 1 index 3 add glyph_type exch .knownget not { 0 } if 6 bitshift or > + =only > + 3 add max_glyph lt { (,) } { () = (};) } ifelse = > + } for > + > +} bind def > + > +/write_glyph_table_header { > + calc_glyph_table > + > + (#ifndef gdevpdtv_INCLUDED) = > + (#define gdevpdtv_INCLUDED) = > + () = > + (#define GS_C_PDF_MAX_GOOD_GLYPH ) print max_glyph = > + (#define GS_C_PDF_GOOD_GLYPH_MASK 1) = > + (#define GS_C_PDF_GOOD_NON_SYMBOL_MASK 2) = > + () = > + (extern const unsigned char gs_c_pdf_glyph_type[];) = > + () = > + (#endif /* gdevpdtv_INCLUDED */) = > +} bind def > + > % ================ Main program ================ % > > % Collect the registered encodings. > @@ -180,17 +250,41 @@ > } forall > } forall > > +% Calculate glyph offset dictionary > +/lbase maxlen 1 add array def > +lbase 0 0 put > +/offset 0 def > +1 1 maxlen { > + /len exch def > + lbase len offset put > + /noff 0 def > + % Collect and sort names of this length. > + [ estrs { > + pop dup length len ne { pop } { .namestring } ifelse > + } forall ] /lt load .sort > + % Output the names. > + { > + estrs exch noff put > + /noff noff len add def > + } forall > + /offset offset noff add def > +} for > +estrs readonly pop > + > +% Compute the division of the glyph number into length and offset. > +/lenbits 1 maxlen { > + dup 1 eq { exit } if exch 1 add exch -1 bitshift > +} loop pop def > + > % Write the initial boilerplate. > (/*) = > ( * Copyright (C) 2002 artofcode LLC. All rights reserved.) = > ( * See toolbin/encs2c.ps for the complete license notice.) = > ( *) = > -/O where { > - pop > - % Break up the next line to prevent RCS from substituting in it. > - ( * $) print (Id: ) print O print ( $) = > - ( *) = > -} if > + > +% Break up the next line to prevent RCS from substituting in it. > +( * $) print (Id: ) print O print ( $) = > +( *) = > ( * This file contains substantial parts of toolbin/encs2c.ps,) = > ( * which generated the remainder of the file mechanically from) = > encfiles { > @@ -199,10 +293,18 @@ > ( */) = > () = > > -/H where { pop H } { false } ifelse { > - writeheader > +<< > + /gscedata.h { writeheader } > + /gscedata.c { writedata } > + /gdevpdtv.h { write_glyph_table_header } > + /gdevpdtv.c { write_glyph_table } > +>> O .knownget { > + exec > } { > - writedata > + (%stderr) (w) file dup dup > + (Don't know how to create ) writestring > + O writestring > + (\n) writestring > } ifelse > > quit > ---------------------------------------------------------------------------- ---- > /* > * Copyright (C) 2002 artofcode LLC. All rights reserved. > * See toolbin/encs2c.ps for the complete license notice. > * > * $Id: gdevpdtv.h $ > * > * This file contains substantial parts of toolbin/encs2c.ps, > * which generated the remainder of the file mechanically from > * gs_std_e.ps gs_il1_e.ps gs_sym_e.ps gs_dbt_e.ps > * gs_wan_e.ps gs_mro_e.ps gs_mex_e.ps gs_mgl_e.ps > * gs_lgo_e.ps gs_lgx_e.ps gs_css_e.ps > */ > > #ifndef gdevpdtv_INCLUDED > #define gdevpdtv_INCLUDED > > #define GS_C_PDF_MAX_GOOD_GLYPH 21894 > #define GS_C_PDF_GOOD_GLYPH_MASK 1 > #define GS_C_PDF_GOOD_NON_SYMBOL_MASK 2 > > extern const unsigned char gs_c_pdf_glyph_type[]; > > #endif /* gdevpdtv_INCLUDED */ > ---------------------------------------------------------------------------- ---- > /* > * Copyright (C) 2002 artofcode LLC. All rights reserved. > * See toolbin/encs2c.ps for the complete license notice. > * > * $Id: gdevpdtv.c $ > * > * This file contains substantial parts of toolbin/encs2c.ps, > * which generated the remainder of the file mechanically from > * gs_std_e.ps gs_il1_e.ps gs_sym_e.ps gs_dbt_e.ps > * gs_wan_e.ps gs_mro_e.ps gs_mex_e.ps gs_mgl_e.ps > * gs_lgo_e.ps gs_lgx_e.ps gs_css_e.ps > */ > > /* > * Glyph attributes for every glyph <= GS_C_PDF_MAX_GOOD_GLYPH > * packed 4 per byte least significant bits first. > */ > const unsigned char gs_c_pdf_glyph_type[] = { > 124, > 241, > 255, > 255, > 255, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 76, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 28, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 220, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 60, > 1, > 3, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 28, > 12, > 48, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 92, > 49, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 76, > 4, > 0, > 192, > 0, > 0, > 0, > 0, > 12, > 0, > 1, > 0, > 3, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 76, > 48, > 12, > 0, > 48, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 4, > 48, > 0, > 0, > 0, > 0, > 0, > 76, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 48, > 1, > 0, > 0, > 0, > 0, > 0, > 12, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 52, > 48, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 60, > 0, > 0, > 0, > 3, > 0, > 0, > 0, > 12, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 60, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 12, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 60, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 60, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 60, > 4, > 1, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 60, > 64, > 0, > 48, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 28, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 12, > 12, > 12, > 0, > 0, > 0, > 0, > 0, > 60, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 28, > 48, > 3, > 0, > 3, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 28, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 3, > 48, > 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, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 3, > 0, > 3, > 0, > 0, > 0, > 0, > 4, > 0, > 4, > 0, > 0, > 0, > 0, > 0, > 48, > 192, > 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, > 4, > 48, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 15, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 51, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 195, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 60, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 4, > 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, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 1, > 1, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 196, > 0, > 0, > 0, > 0, > 0, > 0, > 4, > 16, > 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, > 3, > 4, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 4, > 1, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 208, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 1, > 16, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 4, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 52, > 17, > 1, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 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, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 112, > 12, > 16, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 1, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 4, > 48, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 192, > 1, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 4, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 68, > 48, > 16, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 12, > 0, > 0, > 0, > 0, > 0, > 48, > 13, > 1, > 0, > 0, > 0, > 0, > 0, > 4, > 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, > 12, > 16, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 192, > 16, > 0, > 0, > 0, > 0, > 0, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 16, > 0, > 5, > 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, > 12, > 51, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 3, > 17, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 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, > 60, > 60, > 1, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 0, > 28, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 1, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 4, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 204, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 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, > 48, > 0, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 112, > 16, > 48, > 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, > 48, > 12, > 3, > 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, > 208, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 16, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 12, > 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, > 192, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 16, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 12, > 51, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 16, > 12, > 0, > 0, > 0, > 0, > 64, > 0, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 48, > 192, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 48, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 52, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 192, > 48, > 0, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 12, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 64, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 112, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 68, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 48, > 48, > 3, > 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, > 48, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 12, > 1, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 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, > 48, > 64, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 51, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 12, > 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, > 1, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 16, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 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, > 48, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 60, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 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, > 64, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 48, > 12, > 16, > 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, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 16, > 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, > 68, > 3, > 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, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 3, > 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, > 12, > 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, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 1, > 0, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 1, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 51, > 4, > 3, > 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, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 1, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 4, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 51, > 0, > 1, > 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, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 1, > 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, > 51, > 0, > 1, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 3, > 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, > 49, > 12, > 1, > 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, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 12, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 1, > 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, > 64, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 4, > 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, > 48, > 0, > 1, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 76, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 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, > 48, > 0, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 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, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 16, > 0, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 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, > 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, > 48, > 192, > 3, > 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, > 48, > 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, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 16, > 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, > 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, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 1, > 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, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 0, > 1, > 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, > 48, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 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, > 48, > 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, > 16, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 192, > 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, > 48, > 0, > 3, > 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, > 48, > 192, > 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, > 48, > 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, > 192, > 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, > 0, > 3, > 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, > 192, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 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, > 3, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 64, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 0, > 48, > 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, > 16, > 0, > 3, > 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, > 16, > 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, > 3, > 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, > 16, > 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, > 48, > 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, > 48, > 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, > 48, > 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, > 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, > 48 > }; >