Author: toad Date: 2006-09-01 19:55:29 +0000 (Fri, 01 Sep 2006) New Revision: 10328
Modified: trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.java trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.jflex trunk/freenet/src/freenet/clients/http/filter/UnsafeContentTypeException.java Log: Pick up and sanitize CSS comments. Modified: trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.java =================================================================== --- trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.java 2006-09-01 19:03:37 UTC (rev 10327) +++ trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.java 2006-09-01 19:55:29 UTC (rev 10328) @@ -1,7 +1,8 @@ -/* The following code was generated by JFlex 1.3.5 on 18/03/06 13:46 */ +/* The following code was generated by JFlex 1.3.5 on 01/09/06 20:33 */ package freenet.clients.http.filter; import java.io.*; +import java.util.*; /* This class tokenizes a CSS2 Reader stream, writes it out to the output Writer, and filters any URLs found */ // WARNING: this is not as thorough as the HTML parser - new versions of the standard could lead to anonymity risks. See comments in SaferFilter.java // Mostly from http://www.w3.org/TR/REC-CSS2/grammar.html @@ -10,7 +11,7 @@ /** * This class is a scanner generated by * <a href="http://www.jflex.de/">JFlex</a> 1.3.5 - * on 18/03/06 13:46 from the specification file + * on 01/09/06 20:33 from the specification file * <tt>file:/usr/src/cvs/eclipse-workspace/Freenet 0.7/src/freenet/clients/http/filter/CSSTokenizerFilter.jflex</tt> */ class CSSTokenizerFilter { @@ -58,27 +59,27 @@ 2862, 2915, 2968, 3021, 3074, 3127, 3180, 3233, 53, 3286, 3339, 3392, 3445, 3498, 3551, 3604, 3657, 3710, 3763, 3816, 3869, 3922, 3975, 4028, 4081, 4134, 4187, 4240, 1696, 4293, - 4346, 4399, 4452, 4505, 4558, 53, 4611, 53, 4664, 4717, - 4770, 4823, 4876, 4929, 4982, 4081, 5035, 5088, 53, 5141, - 5194, 5247, 5300, 5353, 5406, 5459, 1696, 5512, 5565, 2067, - 5618, 5671, 5724, 5777, 5830, 4929, 5883, 5936, 5989, 6042, - 6095, 6148, 53, 6201, 6254, 6307, 6360, 6413, 1696, 6466, - 6519, 6572, 6625, 6678, 1537, 6731, 6784, 5035, 5989, 6837, - 6890, 6943, 5088, 6095, 6996, 5141, 7049, 7102, 7155, 7208, - 7261, 7314, 7367, 7420, 7473, 7526, 5989, 7579, 6095, 7632, - 7685, 53, 7738, 7791, 7844, 7897, 7950, 8003, 8056, 8109, - 8162, 8162, 8215, 8268, 8321, 8374, 8427, 8480, 8533, 8586, - 7897, 7897, 8639, 8692, 8745, 8798, 8851, 8798, 8162, 8904, - 8957, 9010, 9063, 9116, 9169, 53, 9222, 9275, 9328, 9381, - 9434, 53, 9487, 9540, 9593, 9646, 9699, 1696, 9752, 9805, - 9858, 9911, 9911, 9964, 10017, 10070, 10123, 10176, 8056, 10229, - 10282, 10335, 10388, 10441, 8798, 10494, 10547, 10600, 9328, 10653, - 53, 10706, 10759, 10812, 10865, 10918, 10971, 11024, 11077, 11130, - 11183, 11236, 11289, 11342, 11289, 11395, 11448, 11501, 9063, 11554, - 11607, 11660, 11713, 11766, 11819, 11872, 11925, 11978, 12031, 12084, - 12137, 12190, 9911, 53, 12243, 12296, 12349, 12402, 12455, 12508, - 12561, 12614, 12667, 12720, 12773, 12826, 12879, 12932, 12985, 13038, - 13091, 13144, 13197, 13250, 13303 + 4346, 4399, 4452, 4505, 4558, 53, 53, 4611, 4664, 4717, + 4770, 4823, 4876, 4929, 4081, 4982, 5035, 53, 5088, 5141, + 5194, 5247, 5300, 5353, 5406, 1696, 5459, 5512, 5565, 5618, + 5671, 5724, 5777, 4876, 5830, 5883, 5936, 5989, 6042, 6095, + 53, 6148, 6201, 6254, 6307, 6360, 1696, 6413, 6466, 6519, + 6572, 6625, 1537, 6678, 6731, 4982, 5936, 6784, 6837, 6890, + 5035, 6042, 6943, 5088, 6996, 7049, 7102, 7155, 7208, 7261, + 7314, 7367, 7420, 7473, 5936, 7526, 6042, 7579, 7632, 53, + 7685, 7738, 7791, 7844, 7897, 7950, 8003, 8056, 8109, 8109, + 8162, 8215, 8268, 8321, 8374, 8427, 8480, 8533, 7844, 7844, + 8586, 8639, 8692, 8745, 8798, 8745, 8109, 8851, 8904, 8957, + 9010, 9063, 9116, 53, 9169, 9222, 9275, 9328, 9381, 53, + 9434, 9487, 9540, 9593, 9646, 1696, 9699, 9752, 9805, 9858, + 9858, 9911, 9964, 10017, 10070, 10123, 8003, 10176, 10229, 10282, + 10335, 10388, 8745, 10441, 10494, 10547, 9275, 10600, 53, 10653, + 10706, 10759, 10812, 10865, 10918, 10971, 11024, 11077, 11130, 11183, + 11236, 11289, 11236, 11342, 11395, 11448, 9010, 11501, 11554, 11607, + 11660, 11713, 11766, 11819, 11872, 11925, 11978, 12031, 12084, 12137, + 9858, 53, 12190, 12243, 12296, 12349, 12402, 12455, 12508, 12561, + 12614, 12667, 12720, 12773, 12826, 12879, 12932, 12985, 13038, 13091, + 13144, 13197, 13250 }; /** @@ -181,363 +182,362 @@ "\1\117\1\115\1\117\10\115\6\54\1\115\4\54\3\115"+ "\1\54\1\116\3\115\3\54\1\0\3\115\6\54\4\115"+ "\2\54\1\115\3\54\1\117\1\115\1\117\10\115\1\151"+ - "\5\54\1\115\4\54\2\115\40\63\1\152\1\153\23\63"+ - "\10\0\1\154\113\0\1\155\26\0\1\156\1\71\1\70"+ - "\1\0\1\70\1\156\2\70\4\0\6\70\3\0\1\34"+ - "\2\70\1\0\3\70\1\35\12\0\5\156\1\70\1\0"+ - "\4\70\3\0\1\157\1\30\1\6\1\0\1\6\1\157"+ + "\5\54\1\115\4\54\2\115\40\63\1\152\1\126\23\63"+ + "\10\0\1\153\113\0\1\154\26\0\1\155\1\71\1\70"+ + "\1\0\1\70\1\155\2\70\4\0\6\70\3\0\1\34"+ + "\2\70\1\0\3\70\1\35\12\0\5\155\1\70\1\0"+ + "\4\70\3\0\1\156\1\30\1\6\1\0\1\6\1\156"+ "\2\6\4\0\6\6\1\33\2\0\1\34\2\6\1\0"+ - "\3\6\1\35\12\0\5\157\1\6\1\0\4\6\54\0"+ - "\1\36\34\0\1\36\43\0\1\160\1\50\3\0\1\160"+ + "\3\6\1\35\12\0\5\156\1\6\1\0\4\6\54\0"+ + "\1\36\34\0\1\36\43\0\1\157\1\50\3\0\1\157"+ "\2\51\4\0\6\51\4\0\2\51\1\0\3\51\13\0"+ - "\5\160\1\51\1\0\4\51\3\0\1\161\1\50\1\51"+ - "\1\0\1\51\1\161\2\51\4\0\6\51\4\0\2\51"+ - "\1\0\3\51\13\0\5\161\1\51\1\0\4\51\2\0"+ - "\2\162\1\163\1\164\1\162\1\164\3\162\1\165\1\166"+ - "\1\162\1\167\6\162\1\170\41\162\1\0\1\171\4\0"+ - "\1\171\1\0\1\141\13\0\1\172\23\0\5\171\11\0"+ - "\1\173\4\0\1\173\41\0\5\173\34\0\1\172\40\0"+ - "\1\115\1\174\1\116\1\54\1\115\1\54\1\174\2\54"+ + "\5\157\1\51\1\0\4\51\3\0\1\160\1\50\1\51"+ + "\1\0\1\51\1\160\2\51\4\0\6\51\4\0\2\51"+ + "\1\0\3\51\13\0\5\160\1\51\1\0\4\51\2\0"+ + "\2\161\1\162\1\163\1\161\1\163\3\161\1\164\1\165"+ + "\1\161\1\166\6\161\1\167\41\161\1\0\1\170\4\0"+ + "\1\170\1\0\1\141\13\0\1\171\23\0\5\170\11\0"+ + "\1\172\4\0\1\172\41\0\5\172\34\0\1\171\40\0"+ + "\1\115\1\173\1\116\1\54\1\115\1\54\1\173\2\54"+ "\1\0\3\115\6\54\4\115\2\54\1\115\3\54\1\117"+ - "\1\115\1\117\10\115\5\174\1\54\1\115\4\54\3\115"+ + "\1\115\1\117\10\115\5\173\1\54\1\115\4\54\3\115"+ "\1\54\1\116\3\115\3\54\1\0\3\115\6\54\4\115"+ - "\2\54\1\115\2\54\1\175\1\117\1\115\1\117\10\115"+ + "\2\54\1\115\2\54\1\174\1\117\1\115\1\117\10\115"+ "\6\54\1\115\4\54\3\115\1\54\1\116\3\115\3\54"+ - "\1\0\3\115\3\54\1\176\2\54\4\115\2\54\1\115"+ + "\1\0\3\115\3\54\1\175\2\54\4\115\2\54\1\115"+ "\3\54\1\117\1\115\1\117\10\115\6\54\1\115\4\54"+ "\3\115\1\54\1\116\3\115\3\54\1\0\3\115\6\54"+ "\4\115\2\54\1\115\3\54\1\117\1\115\1\117\10\115"+ - "\1\54\1\177\4\54\1\115\4\54\3\115\1\54\1\116"+ - "\3\115\3\54\1\0\3\115\1\54\1\200\4\54\4\115"+ + "\1\54\1\176\4\54\1\115\4\54\3\115\1\54\1\116"+ + "\3\115\3\54\1\0\3\115\1\54\1\177\4\54\4\115"+ "\2\54\1\115\3\54\1\117\1\115\1\117\10\115\6\54"+ "\1\115\4\54\3\115\1\54\1\116\3\115\3\54\1\0"+ - "\3\115\2\54\1\201\3\54\4\115\2\54\1\115\3\54"+ + "\3\115\2\54\1\200\3\54\4\115\2\54\1\115\3\54"+ "\1\117\1\115\1\117\10\115\6\54\1\115\4\54\2\115"+ - "\40\63\1\202\1\153\23\63\20\0\1\203\45\0\1\204"+ - "\1\71\1\70\1\0\1\70\1\204\2\70\4\0\6\70"+ - "\3\0\1\34\2\70\1\0\3\70\1\35\12\0\5\204"+ - "\1\70\1\0\4\70\3\0\1\205\1\30\1\6\1\0"+ - "\1\6\1\205\2\6\4\0\6\6\1\33\2\0\1\34"+ - "\2\6\1\0\3\6\1\35\12\0\5\205\1\6\1\0"+ - "\4\6\3\0\1\206\1\50\3\0\1\206\2\51\4\0"+ - "\6\51\4\0\2\51\1\0\3\51\13\0\5\206\1\51"+ - "\1\0\4\51\3\0\1\207\1\50\1\51\1\0\1\51"+ - "\1\207\2\51\4\0\6\51\4\0\2\51\1\0\3\51"+ - "\13\0\5\207\1\51\1\0\4\51\2\0\2\162\1\163"+ - "\6\162\2\170\1\162\1\167\6\162\1\170\43\162\1\163"+ - "\11\162\1\210\50\162\2\165\1\211\6\165\1\212\2\165"+ - "\1\213\50\165\2\166\1\214\7\166\1\212\1\166\1\215"+ - "\50\166\2\170\1\216\11\170\1\217\50\170\1\0\1\220"+ - "\4\0\1\220\1\0\1\141\13\0\1\221\23\0\5\220"+ - "\34\0\1\221\41\0\1\222\4\0\1\222\41\0\5\222"+ - "\10\0\1\115\1\223\1\116\1\54\1\115\1\54\1\223"+ - "\2\54\1\0\3\115\6\54\4\115\2\54\1\115\3\54"+ - "\1\117\1\115\1\117\10\115\5\223\1\54\1\115\4\54"+ - "\3\115\1\54\1\116\3\115\3\54\1\0\3\115\2\54"+ - "\1\224\3\54\4\115\2\54\1\115\3\54\1\117\1\115"+ - "\1\117\10\115\6\54\1\115\4\54\3\115\1\54\1\116"+ - "\3\115\3\54\1\0\3\115\6\54\4\115\2\54\1\115"+ - "\3\54\1\117\1\115\1\117\10\115\1\225\5\54\1\115"+ - "\4\54\3\115\1\54\1\116\3\115\2\54\1\226\1\0"+ - "\3\115\6\54\4\115\2\54\1\115\3\54\1\117\1\115"+ - "\1\117\10\115\6\54\1\115\4\54\3\115\1\54\1\116"+ - "\3\115\3\54\1\0\3\115\1\227\5\54\4\115\2\54"+ + "\20\0\1\201\45\0\1\202\1\71\1\70\1\0\1\70"+ + "\1\202\2\70\4\0\6\70\3\0\1\34\2\70\1\0"+ + "\3\70\1\35\12\0\5\202\1\70\1\0\4\70\3\0"+ + "\1\203\1\30\1\6\1\0\1\6\1\203\2\6\4\0"+ + "\6\6\1\33\2\0\1\34\2\6\1\0\3\6\1\35"+ + "\12\0\5\203\1\6\1\0\4\6\3\0\1\204\1\50"+ + "\3\0\1\204\2\51\4\0\6\51\4\0\2\51\1\0"+ + "\3\51\13\0\5\204\1\51\1\0\4\51\3\0\1\205"+ + "\1\50\1\51\1\0\1\51\1\205\2\51\4\0\6\51"+ + "\4\0\2\51\1\0\3\51\13\0\5\205\1\51\1\0"+ + "\4\51\2\0\2\161\1\162\6\161\2\167\1\161\1\166"+ + "\6\161\1\167\43\161\1\162\11\161\1\206\50\161\2\164"+ + "\1\207\6\164\1\210\2\164\1\211\50\164\2\165\1\212"+ + "\7\165\1\210\1\165\1\213\50\165\2\167\1\214\11\167"+ + "\1\215\50\167\1\0\1\216\4\0\1\216\1\0\1\141"+ + "\13\0\1\217\23\0\5\216\34\0\1\217\41\0\1\220"+ + "\4\0\1\220\41\0\5\220\10\0\1\115\1\221\1\116"+ + "\1\54\1\115\1\54\1\221\2\54\1\0\3\115\6\54"+ + "\4\115\2\54\1\115\3\54\1\117\1\115\1\117\10\115"+ + "\5\221\1\54\1\115\4\54\3\115\1\54\1\116\3\115"+ + "\3\54\1\0\3\115\2\54\1\222\3\54\4\115\2\54"+ "\1\115\3\54\1\117\1\115\1\117\10\115\6\54\1\115"+ - "\4\54\2\115\32\0\1\230\33\0\1\231\1\71\1\70"+ - "\1\0\1\70\1\231\2\70\4\0\6\70\3\0\1\34"+ - "\2\70\1\0\3\70\1\35\12\0\5\231\1\70\1\0"+ - "\4\70\3\0\1\232\1\30\1\6\1\0\1\6\1\232"+ - "\2\6\4\0\6\6\1\33\2\0\1\34\2\6\1\0"+ - "\3\6\1\35\12\0\5\232\1\6\1\0\4\6\3\0"+ - "\1\233\1\50\3\0\1\233\2\51\4\0\6\51\4\0"+ - "\2\51\1\0\3\51\13\0\5\233\1\51\1\0\4\51"+ - "\3\0\1\234\1\50\1\51\1\0\1\51\1\234\2\51"+ - "\4\0\6\51\4\0\2\51\1\0\3\51\13\0\5\234"+ - "\1\51\1\0\4\51\2\0\2\165\1\211\6\165\1\235"+ - "\2\165\1\236\50\165\2\170\1\216\1\212\1\170\1\212"+ - "\6\170\1\167\50\170\2\237\1\240\6\237\1\241\53\237"+ - "\2\166\1\214\7\166\1\242\1\166\1\243\50\166\2\244"+ - "\1\245\7\244\1\241\52\244\2\170\1\216\11\170\1\246"+ - "\50\170\1\0\1\247\4\0\1\247\1\0\1\141\13\0"+ - "\1\250\23\0\5\247\34\0\1\250\41\0\1\251\4\0"+ - "\1\251\41\0\5\251\10\0\1\115\1\252\1\116\1\54"+ - "\1\115\1\54\1\252\2\54\1\0\3\115\6\54\4\115"+ - "\2\54\1\115\3\54\1\117\1\115\1\117\10\115\5\252"+ - "\1\54\1\115\4\54\3\115\1\54\1\116\3\115\3\54"+ - "\1\0\3\115\1\54\1\253\4\54\4\115\2\54\1\115"+ - "\3\54\1\117\1\115\1\117\10\115\6\54\1\115\4\54"+ - "\3\115\1\54\1\116\3\115\3\54\1\0\3\115\6\54"+ + "\4\54\3\115\1\54\1\116\3\115\3\54\1\0\3\115"+ + "\6\54\4\115\2\54\1\115\3\54\1\117\1\115\1\117"+ + "\10\115\1\223\5\54\1\115\4\54\3\115\1\54\1\116"+ + "\3\115\2\54\1\224\1\0\3\115\6\54\4\115\2\54"+ + "\1\115\3\54\1\117\1\115\1\117\10\115\6\54\1\115"+ + "\4\54\3\115\1\54\1\116\3\115\3\54\1\0\3\115"+ + "\1\225\5\54\4\115\2\54\1\115\3\54\1\117\1\115"+ + "\1\117\10\115\6\54\1\115\4\54\2\115\32\0\1\226"+ + "\33\0\1\227\1\71\1\70\1\0\1\70\1\227\2\70"+ + "\4\0\6\70\3\0\1\34\2\70\1\0\3\70\1\35"+ + "\12\0\5\227\1\70\1\0\4\70\3\0\1\230\1\30"+ + "\1\6\1\0\1\6\1\230\2\6\4\0\6\6\1\33"+ + "\2\0\1\34\2\6\1\0\3\6\1\35\12\0\5\230"+ + "\1\6\1\0\4\6\3\0\1\231\1\50\3\0\1\231"+ + "\2\51\4\0\6\51\4\0\2\51\1\0\3\51\13\0"+ + "\5\231\1\51\1\0\4\51\3\0\1\232\1\50\1\51"+ + "\1\0\1\51\1\232\2\51\4\0\6\51\4\0\2\51"+ + "\1\0\3\51\13\0\5\232\1\51\1\0\4\51\2\0"+ + "\2\164\1\207\6\164\1\233\2\164\1\234\50\164\2\167"+ + "\1\214\1\210\1\167\1\210\6\167\1\166\50\167\2\235"+ + "\1\236\6\235\1\237\53\235\2\165\1\212\7\165\1\240"+ + "\1\165\1\241\50\165\2\242\1\243\7\242\1\237\52\242"+ + "\2\167\1\214\11\167\1\244\50\167\1\0\1\245\4\0"+ + "\1\245\1\0\1\141\13\0\1\246\23\0\5\245\34\0"+ + "\1\246\41\0\1\247\4\0\1\247\41\0\5\247\10\0"+ + "\1\115\1\250\1\116\1\54\1\115\1\54\1\250\2\54"+ + "\1\0\3\115\6\54\4\115\2\54\1\115\3\54\1\117"+ + "\1\115\1\117\10\115\5\250\1\54\1\115\4\54\3\115"+ + "\1\54\1\116\3\115\3\54\1\0\3\115\1\54\1\251"+ + "\4\54\4\115\2\54\1\115\3\54\1\117\1\115\1\117"+ + "\10\115\6\54\1\115\4\54\3\115\1\54\1\116\3\115"+ + "\3\54\1\0\3\115\6\54\4\115\2\54\1\115\3\54"+ + "\1\117\1\115\1\117\10\115\3\54\1\252\2\54\1\115"+ + "\4\54\3\115\1\54\1\116\3\115\3\54\1\0\3\115"+ + "\6\54\4\115\2\54\1\115\3\54\1\117\1\115\1\117"+ + "\10\115\1\54\1\253\4\54\1\115\4\54\2\115\33\0"+ + "\1\254\32\0\1\255\1\71\1\70\1\0\1\70\1\255"+ + "\2\70\4\0\6\70\3\0\1\34\2\70\1\0\3\70"+ + "\1\35\12\0\5\255\1\70\1\0\4\70\3\0\1\6"+ + "\1\30\1\6\1\0\4\6\4\0\6\6\1\33\2\0"+ + "\1\34\2\6\1\0\3\6\1\35\12\0\6\6\1\0"+ + "\4\6\3\0\1\256\1\50\1\51\1\0\1\51\1\256"+ + "\2\51\4\0\6\51\4\0\2\51\1\0\3\51\13\0"+ + "\5\256\1\51\1\0\4\51\2\0\2\164\1\207\1\233"+ + "\1\164\1\233\3\164\1\210\2\164\1\257\50\164\2\235"+ + "\1\236\6\235\1\260\53\235\3\0\1\237\1\0\1\237"+ + "\6\0\1\166\50\0\2\165\1\212\1\240\1\165\1\240"+ + "\4\165\1\210\1\165\1\261\50\165\2\242\1\243\7\242"+ + "\1\262\52\242\1\0\1\263\4\0\1\263\1\0\1\141"+ + "\13\0\1\264\23\0\5\263\34\0\1\264\41\0\1\265"+ + "\4\0\1\265\41\0\5\265\10\0\1\115\1\266\1\116"+ + "\1\54\1\115\1\54\1\266\2\54\1\0\3\115\6\54"+ "\4\115\2\54\1\115\3\54\1\117\1\115\1\117\10\115"+ - "\3\54\1\254\2\54\1\115\4\54\3\115\1\54\1\116"+ + "\5\266\1\54\1\115\4\54\2\115\1\267\1\270\1\271"+ + "\1\272\1\267\1\272\3\270\1\273\1\274\1\267\1\115"+ + "\6\270\1\115\3\267\2\270\1\267\3\270\1\275\1\267"+ + "\1\276\10\267\6\270\1\267\4\270\2\267\1\115\1\54"+ + "\1\116\3\115\3\54\1\0\3\115\6\54\4\115\2\54"+ + "\1\115\3\54\1\117\1\115\1\117\10\115\1\277\5\54"+ + "\1\115\4\54\3\115\1\54\1\116\3\115\3\54\1\0"+ + "\3\115\1\54\1\300\4\54\4\115\2\54\1\115\3\54"+ + "\1\117\1\115\1\117\10\115\6\54\1\115\4\54\2\115"+ + "\34\0\1\301\31\0\1\302\1\71\1\70\1\0\1\70"+ + "\1\302\2\70\4\0\6\70\3\0\1\34\2\70\1\0"+ + "\3\70\1\35\12\0\5\302\1\70\1\0\4\70\3\0"+ + "\1\51\1\50\1\51\1\0\4\51\4\0\6\51\4\0"+ + "\2\51\1\0\3\51\13\0\6\51\1\0\4\51\2\0"+ + "\2\235\1\236\1\260\1\235\1\260\3\235\1\237\2\235"+ + "\1\257\50\235\2\242\1\243\1\262\1\242\1\262\4\242"+ + "\1\237\1\242\1\261\50\242\10\0\1\141\55\0\1\303"+ + "\4\0\1\303\41\0\5\303\10\0\1\115\1\54\1\116"+ + "\1\54\1\115\4\54\1\0\3\115\6\54\4\115\2\54"+ + "\1\115\3\54\1\117\1\115\1\117\10\115\6\54\1\115"+ + "\4\54\2\115\2\267\1\304\6\267\1\0\1\115\1\267"+ + "\1\115\6\267\1\115\11\267\1\275\1\267\1\276\26\267"+ + "\1\270\1\271\3\267\3\270\1\0\1\115\1\267\1\115"+ + "\6\270\1\115\3\267\2\270\1\267\3\270\1\275\1\267"+ + "\1\276\10\267\6\270\1\267\4\270\3\267\1\305\1\306"+ + "\1\267\2\270\1\305\26\270\1\307\1\270\1\310\10\270"+ + "\5\305\10\270\2\267\1\304\1\272\1\267\1\272\3\267"+ + "\1\273\1\274\1\267\1\115\6\267\1\115\11\267\1\275"+ + "\1\267\1\276\25\267\2\273\1\311\6\273\1\312\53\273"+ + "\2\274\1\313\6\274\1\314\1\315\22\274\1\316\1\274"+ + "\1\316\25\274\2\317\1\320\6\317\2\0\1\317\1\0"+ + "\6\317\1\0\11\317\1\275\27\317\1\115\1\54\1\116"+ "\3\115\3\54\1\0\3\115\6\54\4\115\2\54\1\115"+ - "\3\54\1\117\1\115\1\117\10\115\1\54\1\255\4\54"+ - "\1\115\4\54\2\115\33\0\1\256\32\0\1\257\1\71"+ - "\1\70\1\0\1\70\1\257\2\70\4\0\6\70\3\0"+ - "\1\34\2\70\1\0\3\70\1\35\12\0\5\257\1\70"+ - "\1\0\4\70\3\0\1\6\1\30\1\6\1\0\4\6"+ - "\4\0\6\6\1\33\2\0\1\34\2\6\1\0\3\6"+ - "\1\35\12\0\6\6\1\0\4\6\3\0\1\260\1\50"+ - "\1\51\1\0\1\51\1\260\2\51\4\0\6\51\4\0"+ - "\2\51\1\0\3\51\13\0\5\260\1\51\1\0\4\51"+ - "\2\0\2\165\1\211\1\235\1\165\1\235\3\165\1\212"+ - "\2\165\1\261\50\165\2\237\1\240\6\237\1\262\53\237"+ - "\3\0\1\241\1\0\1\241\6\0\1\167\50\0\2\166"+ - "\1\214\1\242\1\166\1\242\4\166\1\212\1\166\1\263"+ - "\50\166\2\244\1\245\7\244\1\264\52\244\1\0\1\265"+ - "\4\0\1\265\1\0\1\141\13\0\1\266\23\0\5\265"+ - "\34\0\1\266\41\0\1\267\4\0\1\267\41\0\5\267"+ - "\10\0\1\115\1\270\1\116\1\54\1\115\1\54\1\270"+ - "\2\54\1\0\3\115\6\54\4\115\2\54\1\115\3\54"+ - "\1\117\1\115\1\117\10\115\5\270\1\54\1\115\4\54"+ - "\2\115\1\271\1\272\1\273\1\274\1\271\1\274\3\272"+ - "\1\275\1\276\1\271\1\115\6\272\1\115\3\271\2\272"+ - "\1\271\3\272\1\277\1\271\1\300\10\271\6\272\1\271"+ - "\4\272\2\271\1\115\1\54\1\116\3\115\3\54\1\0"+ - "\3\115\6\54\4\115\2\54\1\115\3\54\1\117\1\115"+ - "\1\117\10\115\1\301\5\54\1\115\4\54\3\115\1\54"+ - "\1\116\3\115\3\54\1\0\3\115\1\54\1\302\4\54"+ - "\4\115\2\54\1\115\3\54\1\117\1\115\1\117\10\115"+ - "\6\54\1\115\4\54\2\115\34\0\1\303\31\0\1\304"+ - "\1\71\1\70\1\0\1\70\1\304\2\70\4\0\6\70"+ - "\3\0\1\34\2\70\1\0\3\70\1\35\12\0\5\304"+ - "\1\70\1\0\4\70\3\0\1\51\1\50\1\51\1\0"+ - "\4\51\4\0\6\51\4\0\2\51\1\0\3\51\13\0"+ - "\6\51\1\0\4\51\2\0\2\237\1\240\1\262\1\237"+ - "\1\262\3\237\1\241\2\237\1\261\50\237\2\244\1\245"+ - "\1\264\1\244\1\264\4\244\1\241\1\244\1\263\50\244"+ - "\10\0\1\141\55\0\1\305\4\0\1\305\41\0\5\305"+ - "\10\0\1\115\1\54\1\116\1\54\1\115\4\54\1\0"+ - "\3\115\6\54\4\115\2\54\1\115\3\54\1\117\1\115"+ - "\1\117\10\115\6\54\1\115\4\54\2\115\2\271\1\306"+ - "\6\271\1\0\1\115\1\271\1\115\6\271\1\115\11\271"+ - "\1\277\1\271\1\300\26\271\1\272\1\273\3\271\3\272"+ - "\1\0\1\115\1\271\1\115\6\272\1\115\3\271\2\272"+ - "\1\271\3\272\1\277\1\271\1\300\10\271\6\272\1\271"+ - "\4\272\3\271\1\307\1\310\1\271\2\272\1\307\26\272"+ - "\1\311\1\272\1\312\10\272\5\307\10\272\2\271\1\306"+ - "\1\274\1\271\1\274\3\271\1\275\1\276\1\271\1\115"+ - "\6\271\1\115\11\271\1\277\1\271\1\300\25\271\2\275"+ - "\1\313\6\275\1\314\53\275\2\276\1\315\6\276\1\316"+ - "\1\317\22\276\1\320\1\276\1\320\25\276\2\321\1\322"+ - "\6\321\2\0\1\321\1\0\6\321\1\0\11\321\1\277"+ - "\27\321\1\115\1\54\1\116\3\115\3\54\1\0\3\115"+ - "\6\54\4\115\2\54\1\115\3\54\1\117\1\115\1\117"+ - "\10\115\4\54\1\323\1\54\1\115\4\54\3\115\1\54"+ - "\1\116\1\324\1\115\1\324\3\54\1\325\1\326\2\115"+ - "\6\54\4\115\2\54\1\115\3\54\1\117\1\115\1\117"+ - "\10\115\6\54\1\115\4\54\2\115\17\0\1\327\46\0"+ - "\1\70\1\71\1\70\1\0\4\70\4\0\6\70\3\0"+ - "\1\34\2\70\1\0\3\70\1\35\12\0\6\70\1\0"+ - "\4\70\3\0\1\330\4\0\1\330\41\0\5\330\10\0"+ - "\2\271\1\306\6\271\1\321\23\271\1\277\1\271\1\300"+ - "\26\271\1\331\1\273\1\272\1\271\1\272\1\331\2\272"+ - "\1\0\1\115\1\271\1\115\6\272\1\115\3\271\2\272"+ - "\1\271\3\272\1\277\1\271\1\300\10\271\5\331\1\272"+ - "\1\271\4\272\3\271\1\272\1\273\3\271\3\272\1\321"+ - "\3\271\6\272\4\271\2\272\1\271\3\272\1\277\1\271"+ - "\1\300\10\271\6\272\1\271\4\272\2\271\2\275\1\313"+ - "\6\275\1\332\53\275\1\0\1\333\1\334\1\335\1\0"+ - "\1\335\2\333\5\0\6\333\4\0\2\333\1\0\3\333"+ - "\1\336\12\0\6\333\1\0\4\333\2\0\2\276\1\315"+ - "\6\276\1\316\1\337\22\276\1\320\1\276\1\320\25\276"+ - "\2\316\1\340\7\316\1\314\52\316\1\115\1\341\1\342"+ - "\1\343\1\115\1\343\2\341\1\115\1\0\3\115\6\341"+ - "\4\115\2\341\1\115\3\341\1\336\1\115\1\117\10\115"+ - "\6\341\1\115\4\341\2\115\2\321\1\322\32\321\1\277"+ - "\27\321\1\115\1\54\1\116\3\115\3\54\1\0\3\115"+ - "\6\54\4\115\2\54\1\115\3\54\1\117\1\115\1\117"+ - "\10\115\1\54\1\344\4\54\1\115\4\54\5\115\1\324"+ - "\1\115\1\324\3\115\1\325\1\326\22\115\1\117\1\115"+ - "\1\117\25\115\2\325\1\345\6\325\1\346\53\325\2\326"+ - "\1\347\6\326\1\350\1\115\22\326\1\351\1\326\1\351"+ - "\25\326\16\0\1\352\46\0\1\271\1\353\1\273\1\272"+ - "\1\271\1\272\1\353\2\272\1\0\1\115\1\271\1\115"+ - "\6\272\1\115\3\271\2\272\1\271\3\272\1\277\1\271"+ - "\1\300\10\271\5\353\1\272\1\271\4\272\2\271\1\275"+ - "\1\354\1\355\1\356\1\275\1\356\2\354\1\275\1\314"+ - "\3\275\6\354\4\275\2\354\1\275\3\354\1\357\12\275"+ - "\6\354\1\275\4\354\2\275\1\0\1\333\1\334\1\360"+ - "\1\0\1\360\3\333\4\0\6\333\3\0\1\335\2\333"+ - "\1\0\3\333\1\336\12\0\6\333\1\0\4\333\3\0"+ - "\1\361\1\333\1\0\2\333\1\361\41\333\5\361\10\333"+ - "\1\0\1\333\1\334\1\335\1\0\1\335\2\333\5\0"+ - "\6\333\4\0\2\333\1\0\3\333\13\0\6\333\1\0"+ - "\4\333\2\0\1\276\1\362\1\363\1\364\1\276\1\364"+ - "\2\362\1\276\1\316\1\317\2\276\6\362\4\276\2\362"+ - "\1\276\3\362\1\365\1\276\1\320\10\276\6\362\1\276"+ - "\4\362\2\276\2\316\1\340\7\316\1\366\52\316\1\115"+ - "\1\341\1\342\1\367\1\115\1\367\3\341\1\0\3\115"+ - "\6\341\3\115\1\343\2\341\1\115\3\341\1\336\1\115"+ - "\1\117\10\115\6\341\1\115\4\341\3\115\1\370\1\341"+ - "\1\115\2\341\1\370\2\341\1\333\23\341\1\371\1\341"+ - "\1\371\10\341\5\370\10\341\1\115\1\341\1\342\1\343"+ - "\1\115\1\343\2\341\1\115\1\0\3\115\6\341\4\115"+ - "\2\341\1\115\3\341\1\117\1\115\1\117\10\115\6\341"+ - "\1\115\4\341\2\115\2\325\1\345\6\325\1\372\53\325"+ - "\3\0\1\346\1\0\1\346\27\0\1\373\27\0\2\326"+ - "\1\347\6\326\1\350\23\326\1\351\1\326\1\351\25\326"+ - "\2\350\1\374\7\350\1\346\52\350\50\0\1\375\14\0"+ - "\1\271\1\376\1\273\1\272\1\271\1\272\1\376\2\272"+ - "\1\0\1\115\1\271\1\115\6\272\1\115\3\271\2\272"+ - "\1\271\3\272\1\277\1\271\1\300\10\271\5\376\1\272"+ - "\1\271\4\272\2\271\1\275\1\354\1\355\1\377\1\275"+ - "\1\377\3\354\1\314\3\275\6\354\3\275\1\356\2\354"+ - "\1\275\3\354\1\357\12\275\6\354\1\275\4\354\3\275"+ - "\1\u0100\1\u0101\1\275\2\354\1\u0100\2\354\1\u0102\36\354"+ - "\5\u0100\10\354\1\275\1\354\1\355\1\356\1\275\1\356"+ - "\2\354\1\275\1\314\3\275\6\354\4\275\2\354\1\275"+ - "\3\354\13\275\6\354\1\275\4\354\2\275\3\0\1\360"+ - "\1\0\1\360\20\0\1\335\6\0\1\336\30\0\1\u0103"+ - "\1\334\1\333\1\0\1\333\1\u0103\2\333\4\0\6\333"+ - "\3\0\1\335\2\333\1\0\3\333\1\336\12\0\5\u0103"+ - "\1\333\1\0\4\333\2\0\1\276\1\362\1\363\1\u0104"+ - "\1\276\1\u0104\3\362\1\316\1\317\2\276\6\362\3\276"+ - "\1\364\2\362\1\276\3\362\1\365\1\276\1\320\10\276"+ - "\6\362\1\276\4\362\3\276\1\u0105\1\u0106\1\276\2\362"+ - "\1\u0105\2\362\1\u0107\1\u0108\22\362\1\u0109\1\362\1\u0109"+ - "\10\362\5\u0105\10\362\1\276\1\362\1\363\1\364\1\276"+ - "\1\364\2\362\1\276\1\316\1\317\2\276\6\362\4\276"+ - "\2\362\1\276\3\362\1\320\1\276\1\320\10\276\6\362"+ - "\1\276\4\362\2\276\1\316\1\u0107\1\u010a\1\u010b\1\316"+ - "\1\u010b\2\u0107\2\316\1\314\2\316\6\u0107\4\316\2\u0107"+ - "\1\316\3\u0107\1\365\12\316\6\u0107\1\316\4\u0107\2\316"+ - "\3\115\1\367\1\115\1\367\3\115\1\0\14\115\1\343"+ - "\6\115\1\336\1\115\1\117\26\115\1\u010c\1\342\1\341"+ - "\1\115\1\341\1\u010c\2\341\1\0\3\115\6\341\3\115"+ - "\1\343\2\341\1\115\3\341\1\336\1\115\1\117\10\115"+ - "\5\u010c\1\341\1\115\4\341\2\115\2\325\1\345\1\372"+ - "\1\325\1\372\3\325\1\346\23\325\1\u010d\27\325\2\350"+ - "\1\374\7\350\1\u010e\52\350\21\0\1\u010f\43\0\1\271"+ - "\1\u0110\1\273\1\272\1\271\1\272\1\u0110\2\272\1\0"+ - "\1\115\1\271\1\115\6\272\1\115\3\271\2\272\1\271"+ - "\3\272\1\277\1\271\1\300\10\271\5\u0110\1\272\1\271"+ - "\4\272\2\271\2\275\1\313\1\377\1\275\1\377\3\275"+ - "\1\314\14\275\1\356\6\275\1\357\30\275\1\u0111\1\355"+ - "\1\354\1\275\1\354\1\u0111\2\354\1\314\3\275\6\354"+ - "\3\275\1\356\2\354\1\275\3\354\1\357\12\275\5\u0111"+ - "\1\354\1\275\4\354\3\275\1\354\1\355\1\377\1\275"+ - "\1\377\3\354\1\332\3\275\6\354\3\275\1\356\2\354"+ - "\1\275\3\354\1\357\12\275\6\354\1\275\4\354\3\275"+ - "\1\354\1\355\1\u0112\1\275\1\u0112\3\354\1\314\3\275"+ - "\6\354\3\275\1\356\2\354\1\275\3\354\1\357\12\275"+ - "\6\354\1\275\4\354\2\275\1\0\1\u0113\1\334\1\333"+ - "\1\0\1\333\1\u0113\2\333\4\0\6\333\3\0\1\335"+ - "\2\333\1\0\3\333\1\336\12\0\5\u0113\1\333\1\0"+ - "\4\333\2\0\2\276\1\315\1\u0104\1\276\1\u0104\3\276"+ - "\1\316\1\317\13\276\1\364\6\276\1\365\1\276\1\320"+ - "\26\276\1\u0114\1\363\1\362\1\276\1\362\1\u0114\2\362"+ - "\1\316\1\317\2\276\6\362\3\276\1\364\2\362\1\276"+ - "\3\362\1\365\1\276\1\320\10\276\5\u0114\1\362\1\276"+ - "\4\362\3\276\1\362\1\363\1\u0104\1\276\1\u0104\3\362"+ - "\1\316\1\337\2\276\6\362\3\276\1\364\2\362\1\276"+ - "\3\362\1\365\1\276\1\320\10\276\6\362\1\276\4\362"+ - "\2\276\1\316\1\u0107\1\u010a\1\u0115\1\316\1\u0115\3\u0107"+ - "\1\316\1\314\2\316\6\u0107\3\316\1\u010b\2\u0107\1\316"+ - "\3\u0107\1\365\12\316\6\u0107\1\316\4\u0107\2\316\1\276"+ - "\1\362\1\363\1\u0116\1\276\1\u0116\3\362\1\316\1\317"+ - "\2\276\6\362\3\276\1\364\2\362\1\276\3\362\1\365"+ - "\1\276\1\320\10\276\6\362\1\276\4\362\2\276\1\316"+ - "\1\u0117\1\u0118\1\316\2\u0107\1\u0117\3\u0107\1\u0119\35\u0107"+ - "\5\u0117\10\u0107\1\316\1\u0107\1\u010a\1\u010b\1\316\1\u010b"+ - "\2\u0107\2\316\1\314\2\316\6\u0107\4\316\2\u0107\1\316"+ - "\3\u0107\13\316\6\u0107\1\316\4\u0107\2\316\1\115\1\u011a"+ - "\1\342\1\341\1\115\1\341\1\u011a\2\341\1\0\3\115"+ - "\6\341\3\115\1\343\2\341\1\115\3\341\1\336\1\115"+ - "\1\117\10\115\5\u011a\1\341\1\115\4\341\2\115\2\350"+ - "\1\374\1\u010e\1\350\1\u010e\4\350\1\346\22\350\1\u011b"+ - "\27\350\16\0\1\u011c\46\0\1\271\1\u011d\1\273\1\272"+ - "\1\271\1\272\1\u011d\2\272\1\0\1\115\1\271\1\115"+ - "\6\272\1\115\3\271\2\272\1\271\3\272\1\277\1\271"+ - "\1\300\10\271\5\u011d\1\272\1\271\4\272\2\271\1\275"+ - "\1\u011e\1\355\1\354\1\275\1\354\1\u011e\2\354\1\314"+ - "\3\275\6\354\3\275\1\356\2\354\1\275\3\354\1\357"+ - "\12\275\5\u011e\1\354\1\275\4\354\3\275\1\354\1\355"+ - "\1\u0112\1\275\1\u0112\2\354\1\275\1\314\3\275\6\354"+ - "\3\275\1\356\2\354\1\275\3\354\1\357\12\275\6\354"+ - "\1\275\4\354\2\275\1\0\1\u011f\1\334\1\333\1\0"+ - "\1\333\1\u011f\2\333\4\0\6\333\3\0\1\335\2\333"+ - "\1\0\3\333\1\336\12\0\5\u011f\1\333\1\0\4\333"+ - "\2\0\1\276\1\u0120\1\363\1\362\1\276\1\362\1\u0120"+ - "\2\362\1\316\1\317\2\276\6\362\3\276\1\364\2\362"+ - "\1\276\3\362\1\365\1\276\1\320\10\276\5\u0120\1\362"+ - "\1\276\4\362\2\276\2\316\1\340\1\u0115\1\316\1\u0115"+ - "\4\316\1\314\13\316\1\u010b\6\316\1\365\27\316\1\276"+ - "\1\362\1\363\1\u0116\1\276\1\u0116\2\362\1\276\1\316"+ - "\1\317\2\276\6\362\3\276\1\364\2\362\1\276\3\362"+ - "\1\365\1\276\1\320\10\276\6\362\1\276\4\362\2\276"+ - "\1\316\1\u0121\1\u010a\1\u0107\1\316\1\u0107\1\u0121\2\u0107"+ - "\1\316\1\314\2\316\6\u0107\3\316\1\u010b\2\u0107\1\316"+ - "\3\u0107\1\365\12\316\5\u0121\1\u0107\1\316\4\u0107\3\316"+ - "\1\u0107\1\u010a\1\u0115\1\316\1\u0115\3\u0107\1\316\1\366"+ - "\2\316\6\u0107\3\316\1\u010b\2\u0107\1\316\3\u0107\1\365"+ - "\12\316\6\u0107\1\316\4\u0107\3\316\1\u0107\1\u010a\1\u0122"+ - "\1\316\1\u0122\3\u0107\1\316\1\314\2\316\6\u0107\3\316"+ - "\1\u010b\2\u0107\1\316\3\u0107\1\365\12\316\6\u0107\1\316"+ - "\4\u0107\2\316\1\115\1\u0123\1\342\1\341\1\115\1\341"+ - "\1\u0123\2\341\1\0\3\115\6\341\3\115\1\343\2\341"+ - "\1\115\3\341\1\336\1\115\1\117\10\115\5\u0123\1\341"+ - "\1\115\4\341\2\115\1\271\1\272\1\273\1\272\1\271"+ - "\4\272\1\0\1\115\1\271\1\115\6\272\1\115\3\271"+ - "\2\272\1\271\3\272\1\277\1\271\1\300\10\271\6\272"+ - "\1\271\4\272\2\271\1\275\1\u0124\1\355\1\354\1\275"+ - "\1\354\1\u0124\2\354\1\314\3\275\6\354\3\275\1\356"+ - "\2\354\1\275\3\354\1\357\12\275\5\u0124\1\354\1\275"+ - "\4\354\2\275\1\0\1\u0125\1\334\1\333\1\0\1\333"+ - "\1\u0125\2\333\4\0\6\333\3\0\1\335\2\333\1\0"+ - "\3\333\1\336\12\0\5\u0125\1\333\1\0\4\333\2\0"+ - "\1\276\1\u0126\1\363\1\362\1\276\1\362\1\u0126\2\362"+ - "\1\316\1\317\2\276\6\362\3\276\1\364\2\362\1\276"+ - "\3\362\1\365\1\276\1\320\10\276\5\u0126\1\362\1\276"+ - "\4\362\2\276\1\316\1\u0127\1\u010a\1\u0107\1\316\1\u0107"+ - "\1\u0127\2\u0107\1\316\1\314\2\316\6\u0107\3\316\1\u010b"+ - "\2\u0107\1\316\3\u0107\1\365\12\316\5\u0127\1\u0107\1\316"+ - "\4\u0107\3\316\1\u0107\1\u010a\1\u0122\1\316\1\u0122\2\u0107"+ - "\2\316\1\314\2\316\6\u0107\3\316\1\u010b\2\u0107\1\316"+ - "\3\u0107\1\365\12\316\6\u0107\1\316\4\u0107\2\316\1\115"+ - "\1\u0128\1\342\1\341\1\115\1\341\1\u0128\2\341\1\0"+ - "\3\115\6\341\3\115\1\343\2\341\1\115\3\341\1\336"+ - "\1\115\1\117\10\115\5\u0128\1\341\1\115\4\341\2\115"+ - "\1\275\1\u0129\1\355\1\354\1\275\1\354\1\u0129\2\354"+ - "\1\314\3\275\6\354\3\275\1\356\2\354\1\275\3\354"+ - "\1\357\12\275\5\u0129\1\354\1\275\4\354\2\275\1\0"+ - "\1\u012a\1\334\1\333\1\0\1\333\1\u012a\2\333\4\0"+ - "\6\333\3\0\1\335\2\333\1\0\3\333\1\336\12\0"+ - "\5\u012a\1\333\1\0\4\333\2\0\1\276\1\u012b\1\363"+ - "\1\362\1\276\1\362\1\u012b\2\362\1\316\1\317\2\276"+ - "\6\362\3\276\1\364\2\362\1\276\3\362\1\365\1\276"+ - "\1\320\10\276\5\u012b\1\362\1\276\4\362\2\276\1\316"+ - "\1\u012c\1\u010a\1\u0107\1\316\1\u0107\1\u012c\2\u0107\1\316"+ - "\1\314\2\316\6\u0107\3\316\1\u010b\2\u0107\1\316\3\u0107"+ - "\1\365\12\316\5\u012c\1\u0107\1\316\4\u0107\2\316\1\115"+ - "\1\u012d\1\342\1\341\1\115\1\341\1\u012d\2\341\1\0"+ - "\3\115\6\341\3\115\1\343\2\341\1\115\3\341\1\336"+ - "\1\115\1\117\10\115\5\u012d\1\341\1\115\4\341\2\115"+ - "\1\275\1\u012e\1\355\1\354\1\275\1\354\1\u012e\2\354"+ - "\1\314\3\275\6\354\3\275\1\356\2\354\1\275\3\354"+ - "\1\357\12\275\5\u012e\1\354\1\275\4\354\2\275\1\0"+ - "\1\333\1\334\1\333\1\0\4\333\4\0\6\333\3\0"+ - "\1\335\2\333\1\0\3\333\1\336\12\0\6\333\1\0"+ - "\4\333\2\0\1\276\1\u012f\1\363\1\362\1\276\1\362"+ - "\1\u012f\2\362\1\316\1\317\2\276\6\362\3\276\1\364"+ - "\2\362\1\276\3\362\1\365\1\276\1\320\10\276\5\u012f"+ - "\1\362\1\276\4\362\2\276\1\316\1\u0130\1\u010a\1\u0107"+ - "\1\316\1\u0107\1\u0130\2\u0107\1\316\1\314\2\316\6\u0107"+ - "\3\316\1\u010b\2\u0107\1\316\3\u0107\1\365\12\316\5\u0130"+ - "\1\u0107\1\316\4\u0107\2\316\1\115\1\341\1\342\1\341"+ - "\1\115\4\341\1\0\3\115\6\341\3\115\1\343\2\341"+ - "\1\115\3\341\1\336\1\115\1\117\10\115\6\341\1\115"+ - "\4\341\2\115\1\275\1\354\1\355\1\354\1\275\4\354"+ - "\1\314\3\275\6\354\3\275\1\356\2\354\1\275\3\354"+ - "\1\357\12\275\6\354\1\275\4\354\2\275\1\276\1\362"+ - "\1\363\1\362\1\276\4\362\1\316\1\317\2\276\6\362"+ - "\3\276\1\364\2\362\1\276\3\362\1\365\1\276\1\320"+ - "\10\276\6\362\1\276\4\362\2\276\1\316\1\u0131\1\u010a"+ - "\1\u0107\1\316\1\u0107\1\u0131\2\u0107\1\316\1\314\2\316"+ - "\6\u0107\3\316\1\u010b\2\u0107\1\316\3\u0107\1\365\12\316"+ - "\5\u0131\1\u0107\1\316\4\u0107\3\316\1\u0107\1\u010a\1\u0107"+ - "\1\316\4\u0107\1\316\1\314\2\316\6\u0107\3\316\1\u010b"+ - "\2\u0107\1\316\3\u0107\1\365\12\316\6\u0107\1\316\4\u0107"+ - "\2\316"; + "\3\54\1\117\1\115\1\117\10\115\4\54\1\321\1\54"+ + "\1\115\4\54\3\115\1\54\1\116\1\322\1\115\1\322"+ + "\3\54\1\323\1\324\2\115\6\54\4\115\2\54\1\115"+ + "\3\54\1\117\1\115\1\117\10\115\6\54\1\115\4\54"+ + "\2\115\17\0\1\325\46\0\1\70\1\71\1\70\1\0"+ + "\4\70\4\0\6\70\3\0\1\34\2\70\1\0\3\70"+ + "\1\35\12\0\6\70\1\0\4\70\3\0\1\326\4\0"+ + "\1\326\41\0\5\326\10\0\2\267\1\304\6\267\1\317"+ + "\23\267\1\275\1\267\1\276\26\267\1\327\1\271\1\270"+ + "\1\267\1\270\1\327\2\270\1\0\1\115\1\267\1\115"+ + "\6\270\1\115\3\267\2\270\1\267\3\270\1\275\1\267"+ + "\1\276\10\267\5\327\1\270\1\267\4\270\3\267\1\270"+ + "\1\271\3\267\3\270\1\317\3\267\6\270\4\267\2\270"+ + "\1\267\3\270\1\275\1\267\1\276\10\267\6\270\1\267"+ + "\4\270\2\267\2\273\1\311\6\273\1\330\53\273\1\0"+ + "\1\331\1\332\1\333\1\0\1\333\2\331\5\0\6\331"+ + "\4\0\2\331\1\0\3\331\1\334\12\0\6\331\1\0"+ + "\4\331\2\0\2\274\1\313\6\274\1\314\1\335\22\274"+ + "\1\316\1\274\1\316\25\274\2\314\1\336\7\314\1\312"+ + "\52\314\1\115\1\337\1\340\1\341\1\115\1\341\2\337"+ + "\1\115\1\0\3\115\6\337\4\115\2\337\1\115\3\337"+ + "\1\334\1\115\1\117\10\115\6\337\1\115\4\337\2\115"+ + "\2\317\1\320\32\317\1\275\27\317\1\115\1\54\1\116"+ + "\3\115\3\54\1\0\3\115\6\54\4\115\2\54\1\115"+ + "\3\54\1\117\1\115\1\117\10\115\1\54\1\342\4\54"+ + "\1\115\4\54\5\115\1\322\1\115\1\322\3\115\1\323"+ + "\1\324\22\115\1\117\1\115\1\117\25\115\2\323\1\343"+ + "\6\323\1\344\53\323\2\324\1\345\6\324\1\346\1\115"+ + "\22\324\1\347\1\324\1\347\25\324\16\0\1\350\46\0"+ + "\1\267\1\351\1\271\1\270\1\267\1\270\1\351\2\270"+ + "\1\0\1\115\1\267\1\115\6\270\1\115\3\267\2\270"+ + "\1\267\3\270\1\275\1\267\1\276\10\267\5\351\1\270"+ + "\1\267\4\270\2\267\1\273\1\352\1\353\1\354\1\273"+ + "\1\354\2\352\1\273\1\312\3\273\6\352\4\273\2\352"+ + "\1\273\3\352\1\355\12\273\6\352\1\273\4\352\2\273"+ + "\1\0\1\331\1\332\1\356\1\0\1\356\3\331\4\0"+ + "\6\331\3\0\1\333\2\331\1\0\3\331\1\334\12\0"+ + "\6\331\1\0\4\331\3\0\1\357\1\331\1\0\2\331"+ + "\1\357\41\331\5\357\10\331\1\0\1\331\1\332\1\333"+ + "\1\0\1\333\2\331\5\0\6\331\4\0\2\331\1\0"+ + "\3\331\13\0\6\331\1\0\4\331\2\0\1\274\1\360"+ + "\1\361\1\362\1\274\1\362\2\360\1\274\1\314\1\315"+ + "\2\274\6\360\4\274\2\360\1\274\3\360\1\363\1\274"+ + "\1\316\10\274\6\360\1\274\4\360\2\274\2\314\1\336"+ + "\7\314\1\364\52\314\1\115\1\337\1\340\1\365\1\115"+ + "\1\365\3\337\1\0\3\115\6\337\3\115\1\341\2\337"+ + "\1\115\3\337\1\334\1\115\1\117\10\115\6\337\1\115"+ + "\4\337\3\115\1\366\1\337\1\115\2\337\1\366\2\337"+ + "\1\331\23\337\1\367\1\337\1\367\10\337\5\366\10\337"+ + "\1\115\1\337\1\340\1\341\1\115\1\341\2\337\1\115"+ + "\1\0\3\115\6\337\4\115\2\337\1\115\3\337\1\117"+ + "\1\115\1\117\10\115\6\337\1\115\4\337\2\115\2\323"+ + "\1\343\6\323\1\370\53\323\3\0\1\344\1\0\1\344"+ + "\27\0\1\371\27\0\2\324\1\345\6\324\1\346\23\324"+ + "\1\347\1\324\1\347\25\324\2\346\1\372\7\346\1\344"+ + "\52\346\50\0\1\373\14\0\1\267\1\374\1\271\1\270"+ + "\1\267\1\270\1\374\2\270\1\0\1\115\1\267\1\115"+ + "\6\270\1\115\3\267\2\270\1\267\3\270\1\275\1\267"+ + "\1\276\10\267\5\374\1\270\1\267\4\270\2\267\1\273"+ + "\1\352\1\353\1\375\1\273\1\375\3\352\1\312\3\273"+ + "\6\352\3\273\1\354\2\352\1\273\3\352\1\355\12\273"+ + "\6\352\1\273\4\352\3\273\1\376\1\377\1\273\2\352"+ + "\1\376\2\352\1\u0100\36\352\5\376\10\352\1\273\1\352"+ + "\1\353\1\354\1\273\1\354\2\352\1\273\1\312\3\273"+ + "\6\352\4\273\2\352\1\273\3\352\13\273\6\352\1\273"+ + "\4\352\2\273\3\0\1\356\1\0\1\356\20\0\1\333"+ + "\6\0\1\334\30\0\1\u0101\1\332\1\331\1\0\1\331"+ + "\1\u0101\2\331\4\0\6\331\3\0\1\333\2\331\1\0"+ + "\3\331\1\334\12\0\5\u0101\1\331\1\0\4\331\2\0"+ + "\1\274\1\360\1\361\1\u0102\1\274\1\u0102\3\360\1\314"+ + "\1\315\2\274\6\360\3\274\1\362\2\360\1\274\3\360"+ + "\1\363\1\274\1\316\10\274\6\360\1\274\4\360\3\274"+ + "\1\u0103\1\u0104\1\274\2\360\1\u0103\2\360\1\u0105\1\u0106"+ + "\22\360\1\u0107\1\360\1\u0107\10\360\5\u0103\10\360\1\274"+ + "\1\360\1\361\1\362\1\274\1\362\2\360\1\274\1\314"+ + "\1\315\2\274\6\360\4\274\2\360\1\274\3\360\1\316"+ + "\1\274\1\316\10\274\6\360\1\274\4\360\2\274\1\314"+ + "\1\u0105\1\u0108\1\u0109\1\314\1\u0109\2\u0105\2\314\1\312"+ + "\2\314\6\u0105\4\314\2\u0105\1\314\3\u0105\1\363\12\314"+ + "\6\u0105\1\314\4\u0105\2\314\3\115\1\365\1\115\1\365"+ + "\3\115\1\0\14\115\1\341\6\115\1\334\1\115\1\117"+ + "\26\115\1\u010a\1\340\1\337\1\115\1\337\1\u010a\2\337"+ + "\1\0\3\115\6\337\3\115\1\341\2\337\1\115\3\337"+ + "\1\334\1\115\1\117\10\115\5\u010a\1\337\1\115\4\337"+ + "\2\115\2\323\1\343\1\370\1\323\1\370\3\323\1\344"+ + "\23\323\1\u010b\27\323\2\346\1\372\7\346\1\u010c\52\346"+ + "\21\0\1\u010d\43\0\1\267\1\u010e\1\271\1\270\1\267"+ + "\1\270\1\u010e\2\270\1\0\1\115\1\267\1\115\6\270"+ + "\1\115\3\267\2\270\1\267\3\270\1\275\1\267\1\276"+ + "\10\267\5\u010e\1\270\1\267\4\270\2\267\2\273\1\311"+ + "\1\375\1\273\1\375\3\273\1\312\14\273\1\354\6\273"+ + "\1\355\30\273\1\u010f\1\353\1\352\1\273\1\352\1\u010f"+ + "\2\352\1\312\3\273\6\352\3\273\1\354\2\352\1\273"+ + "\3\352\1\355\12\273\5\u010f\1\352\1\273\4\352\3\273"+ + "\1\352\1\353\1\375\1\273\1\375\3\352\1\330\3\273"+ + "\6\352\3\273\1\354\2\352\1\273\3\352\1\355\12\273"+ + "\6\352\1\273\4\352\3\273\1\352\1\353\1\u0110\1\273"+ + "\1\u0110\3\352\1\312\3\273\6\352\3\273\1\354\2\352"+ + "\1\273\3\352\1\355\12\273\6\352\1\273\4\352\2\273"+ + "\1\0\1\u0111\1\332\1\331\1\0\1\331\1\u0111\2\331"+ + "\4\0\6\331\3\0\1\333\2\331\1\0\3\331\1\334"+ + "\12\0\5\u0111\1\331\1\0\4\331\2\0\2\274\1\313"+ + "\1\u0102\1\274\1\u0102\3\274\1\314\1\315\13\274\1\362"+ + "\6\274\1\363\1\274\1\316\26\274\1\u0112\1\361\1\360"+ + "\1\274\1\360\1\u0112\2\360\1\314\1\315\2\274\6\360"+ + "\3\274\1\362\2\360\1\274\3\360\1\363\1\274\1\316"+ + "\10\274\5\u0112\1\360\1\274\4\360\3\274\1\360\1\361"+ + "\1\u0102\1\274\1\u0102\3\360\1\314\1\335\2\274\6\360"+ + "\3\274\1\362\2\360\1\274\3\360\1\363\1\274\1\316"+ + "\10\274\6\360\1\274\4\360\2\274\1\314\1\u0105\1\u0108"+ + "\1\u0113\1\314\1\u0113\3\u0105\1\314\1\312\2\314\6\u0105"+ + "\3\314\1\u0109\2\u0105\1\314\3\u0105\1\363\12\314\6\u0105"+ + "\1\314\4\u0105\2\314\1\274\1\360\1\361\1\u0114\1\274"+ + "\1\u0114\3\360\1\314\1\315\2\274\6\360\3\274\1\362"+ + "\2\360\1\274\3\360\1\363\1\274\1\316\10\274\6\360"+ + "\1\274\4\360\2\274\1\314\1\u0115\1\u0116\1\314\2\u0105"+ + "\1\u0115\3\u0105\1\u0117\35\u0105\5\u0115\10\u0105\1\314\1\u0105"+ + "\1\u0108\1\u0109\1\314\1\u0109\2\u0105\2\314\1\312\2\314"+ + "\6\u0105\4\314\2\u0105\1\314\3\u0105\13\314\6\u0105\1\314"+ + "\4\u0105\2\314\1\115\1\u0118\1\340\1\337\1\115\1\337"+ + "\1\u0118\2\337\1\0\3\115\6\337\3\115\1\341\2\337"+ + "\1\115\3\337\1\334\1\115\1\117\10\115\5\u0118\1\337"+ + "\1\115\4\337\2\115\2\346\1\372\1\u010c\1\346\1\u010c"+ + "\4\346\1\344\22\346\1\u0119\27\346\16\0\1\u011a\46\0"+ + "\1\267\1\u011b\1\271\1\270\1\267\1\270\1\u011b\2\270"+ + "\1\0\1\115\1\267\1\115\6\270\1\115\3\267\2\270"+ + "\1\267\3\270\1\275\1\267\1\276\10\267\5\u011b\1\270"+ + "\1\267\4\270\2\267\1\273\1\u011c\1\353\1\352\1\273"+ + "\1\352\1\u011c\2\352\1\312\3\273\6\352\3\273\1\354"+ + "\2\352\1\273\3\352\1\355\12\273\5\u011c\1\352\1\273"+ + "\4\352\3\273\1\352\1\353\1\u0110\1\273\1\u0110\2\352"+ + "\1\273\1\312\3\273\6\352\3\273\1\354\2\352\1\273"+ + "\3\352\1\355\12\273\6\352\1\273\4\352\2\273\1\0"+ + "\1\u011d\1\332\1\331\1\0\1\331\1\u011d\2\331\4\0"+ + "\6\331\3\0\1\333\2\331\1\0\3\331\1\334\12\0"+ + "\5\u011d\1\331\1\0\4\331\2\0\1\274\1\u011e\1\361"+ + "\1\360\1\274\1\360\1\u011e\2\360\1\314\1\315\2\274"+ + "\6\360\3\274\1\362\2\360\1\274\3\360\1\363\1\274"+ + "\1\316\10\274\5\u011e\1\360\1\274\4\360\2\274\2\314"+ + "\1\336\1\u0113\1\314\1\u0113\4\314\1\312\13\314\1\u0109"+ + "\6\314\1\363\27\314\1\274\1\360\1\361\1\u0114\1\274"+ + "\1\u0114\2\360\1\274\1\314\1\315\2\274\6\360\3\274"+ + "\1\362\2\360\1\274\3\360\1\363\1\274\1\316\10\274"+ + "\6\360\1\274\4\360\2\274\1\314\1\u011f\1\u0108\1\u0105"+ + "\1\314\1\u0105\1\u011f\2\u0105\1\314\1\312\2\314\6\u0105"+ + "\3\314\1\u0109\2\u0105\1\314\3\u0105\1\363\12\314\5\u011f"+ + "\1\u0105\1\314\4\u0105\3\314\1\u0105\1\u0108\1\u0113\1\314"+ + "\1\u0113\3\u0105\1\314\1\364\2\314\6\u0105\3\314\1\u0109"+ + "\2\u0105\1\314\3\u0105\1\363\12\314\6\u0105\1\314\4\u0105"+ + "\3\314\1\u0105\1\u0108\1\u0120\1\314\1\u0120\3\u0105\1\314"+ + "\1\312\2\314\6\u0105\3\314\1\u0109\2\u0105\1\314\3\u0105"+ + "\1\363\12\314\6\u0105\1\314\4\u0105\2\314\1\115\1\u0121"+ + "\1\340\1\337\1\115\1\337\1\u0121\2\337\1\0\3\115"+ + "\6\337\3\115\1\341\2\337\1\115\3\337\1\334\1\115"+ + "\1\117\10\115\5\u0121\1\337\1\115\4\337\2\115\1\267"+ + "\1\270\1\271\1\270\1\267\4\270\1\0\1\115\1\267"+ + "\1\115\6\270\1\115\3\267\2\270\1\267\3\270\1\275"+ + "\1\267\1\276\10\267\6\270\1\267\4\270\2\267\1\273"+ + "\1\u0122\1\353\1\352\1\273\1\352\1\u0122\2\352\1\312"+ + "\3\273\6\352\3\273\1\354\2\352\1\273\3\352\1\355"+ + "\12\273\5\u0122\1\352\1\273\4\352\2\273\1\0\1\u0123"+ + "\1\332\1\331\1\0\1\331\1\u0123\2\331\4\0\6\331"+ + "\3\0\1\333\2\331\1\0\3\331\1\334\12\0\5\u0123"+ + "\1\331\1\0\4\331\2\0\1\274\1\u0124\1\361\1\360"+ + "\1\274\1\360\1\u0124\2\360\1\314\1\315\2\274\6\360"+ + "\3\274\1\362\2\360\1\274\3\360\1\363\1\274\1\316"+ + "\10\274\5\u0124\1\360\1\274\4\360\2\274\1\314\1\u0125"+ + "\1\u0108\1\u0105\1\314\1\u0105\1\u0125\2\u0105\1\314\1\312"+ + "\2\314\6\u0105\3\314\1\u0109\2\u0105\1\314\3\u0105\1\363"+ + "\12\314\5\u0125\1\u0105\1\314\4\u0105\3\314\1\u0105\1\u0108"+ + "\1\u0120\1\314\1\u0120\2\u0105\2\314\1\312\2\314\6\u0105"+ + "\3\314\1\u0109\2\u0105\1\314\3\u0105\1\363\12\314\6\u0105"+ + "\1\314\4\u0105\2\314\1\115\1\u0126\1\340\1\337\1\115"+ + "\1\337\1\u0126\2\337\1\0\3\115\6\337\3\115\1\341"+ + "\2\337\1\115\3\337\1\334\1\115\1\117\10\115\5\u0126"+ + "\1\337\1\115\4\337\2\115\1\273\1\u0127\1\353\1\352"+ + "\1\273\1\352\1\u0127\2\352\1\312\3\273\6\352\3\273"+ + "\1\354\2\352\1\273\3\352\1\355\12\273\5\u0127\1\352"+ + "\1\273\4\352\2\273\1\0\1\u0128\1\332\1\331\1\0"+ + "\1\331\1\u0128\2\331\4\0\6\331\3\0\1\333\2\331"+ + "\1\0\3\331\1\334\12\0\5\u0128\1\331\1\0\4\331"+ + "\2\0\1\274\1\u0129\1\361\1\360\1\274\1\360\1\u0129"+ + "\2\360\1\314\1\315\2\274\6\360\3\274\1\362\2\360"+ + "\1\274\3\360\1\363\1\274\1\316\10\274\5\u0129\1\360"+ + "\1\274\4\360\2\274\1\314\1\u012a\1\u0108\1\u0105\1\314"+ + "\1\u0105\1\u012a\2\u0105\1\314\1\312\2\314\6\u0105\3\314"+ + "\1\u0109\2\u0105\1\314\3\u0105\1\363\12\314\5\u012a\1\u0105"+ + "\1\314\4\u0105\2\314\1\115\1\u012b\1\340\1\337\1\115"+ + "\1\337\1\u012b\2\337\1\0\3\115\6\337\3\115\1\341"+ + "\2\337\1\115\3\337\1\334\1\115\1\117\10\115\5\u012b"+ + "\1\337\1\115\4\337\2\115\1\273\1\u012c\1\353\1\352"+ + "\1\273\1\352\1\u012c\2\352\1\312\3\273\6\352\3\273"+ + "\1\354\2\352\1\273\3\352\1\355\12\273\5\u012c\1\352"+ + "\1\273\4\352\2\273\1\0\1\331\1\332\1\331\1\0"+ + "\4\331\4\0\6\331\3\0\1\333\2\331\1\0\3\331"+ + "\1\334\12\0\6\331\1\0\4\331\2\0\1\274\1\u012d"+ + "\1\361\1\360\1\274\1\360\1\u012d\2\360\1\314\1\315"+ + "\2\274\6\360\3\274\1\362\2\360\1\274\3\360\1\363"+ + "\1\274\1\316\10\274\5\u012d\1\360\1\274\4\360\2\274"+ + "\1\314\1\u012e\1\u0108\1\u0105\1\314\1\u0105\1\u012e\2\u0105"+ + "\1\314\1\312\2\314\6\u0105\3\314\1\u0109\2\u0105\1\314"+ + "\3\u0105\1\363\12\314\5\u012e\1\u0105\1\314\4\u0105\2\314"+ + "\1\115\1\337\1\340\1\337\1\115\4\337\1\0\3\115"+ + "\6\337\3\115\1\341\2\337\1\115\3\337\1\334\1\115"+ + "\1\117\10\115\6\337\1\115\4\337\2\115\1\273\1\352"+ + "\1\353\1\352\1\273\4\352\1\312\3\273\6\352\3\273"+ + "\1\354\2\352\1\273\3\352\1\355\12\273\6\352\1\273"+ + "\4\352\2\273\1\274\1\360\1\361\1\360\1\274\4\360"+ + "\1\314\1\315\2\274\6\360\3\274\1\362\2\360\1\274"+ + "\3\360\1\363\1\274\1\316\10\274\6\360\1\274\4\360"+ + "\2\274\1\314\1\u012f\1\u0108\1\u0105\1\314\1\u0105\1\u012f"+ + "\2\u0105\1\314\1\312\2\314\6\u0105\3\314\1\u0109\2\u0105"+ + "\1\314\3\u0105\1\363\12\314\5\u012f\1\u0105\1\314\4\u0105"+ + "\3\314\1\u0105\1\u0108\1\u0105\1\314\4\u0105\1\314\1\312"+ + "\2\314\6\u0105\3\314\1\u0109\2\u0105\1\314\3\u0105\1\363"+ + "\12\314\6\u0105\1\314\4\u0105\2\314"; /** * The transition table of the DFA @@ -569,19 +569,19 @@ 0, 0, 0, 0, 0, 9, 9, 0, 0, 1, 9, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, - 0, 1, 1, 0, 0, 0, 0, 0, 0, 9, 0, 9, 0, 0, 1, 1, - 1, 0, 0, 0, 0, 0, 9, 0, 1, 1, 1, 0, 0, 0, 1, 0, - 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 9, 1, - 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, - 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 1, 0, 1, 9, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + 0, 1, 1, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 1, 1, 1, + 0, 0, 0, 0, 0, 9, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 9, 1, 1, 1, + 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, + 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 1, 0, 1, 9, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, + 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 1, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /** the input device */ @@ -650,7 +650,7 @@ // Writer Writer w = null; // Will NPE if not initialized properly - public void parse () throws IOException, DataFilterException { + public void parse () throws IOException { while (yylex() != null); } @@ -660,7 +660,7 @@ this.paranoidStringCheck = paranoidStringCheck; } - void throwError(String s) throws IOException, DataFilterException { + void throwError(String s) throws IOException { throw new IllegalStateException("You MUST override throwError!"); } @@ -692,9 +692,9 @@ // This is not very efficient. The parser below knows the quoting rules too. static boolean isHexDigit(char c) { - return ((('a' <= c) && (c <= 'f')) || - (('A' <= c) && (c <= 'F')) || - (('0' <= c) && (c <= '9'))); + return ('a' <= c && c <= 'f' || + 'A' <= c && c <= 'F' || + '0' <= c && c <= '9'); } class DecodedStringThingy { @@ -708,7 +708,7 @@ url = true; } char q = s.charAt(0); - if((q == '\'') || (q == '\"')) { + if(q == '\'' || q == '\"') { quote = q; s = s.substring(1); } else quote = ' '; @@ -734,7 +734,7 @@ justEscaping = false; } } else if(stillEscaping) { - if(isHexDigit(c) && (hexEscape.length() < 6)) { + if(isHexDigit(c) && hexEscape.length() < 6) { hexEscape.append(c); } else if(Character.isWhitespace(c)) { // Ignore one whitespace char after an escape @@ -772,7 +772,7 @@ hexEscape = new StringBuffer(); } } else { - if((quote != ' ') && (c == quote)) { + if(quote != ' ' && c == quote) { break; } else if (c == '\\') { justEscaping = true; @@ -802,7 +802,7 @@ StringBuffer sb = new StringBuffer(); for(int i=0;i<data.length();i++) { char c = data.charAt(i); - if((c == quote) || (c == '\n')) { + if(c == quote || c == '\n') { sb.append('\\'); } sb.append(c); @@ -838,7 +838,7 @@ * @return the unpacked transition table */ private static int [] yy_unpack() { - int [] trans = new int[13356]; + int [] trans = new int[13303]; int offset = 0; offset = yy_unpack(yy_packed0, offset, trans); return trans; @@ -1060,9 +1060,8 @@ * * @return the next token * @exception IOException if any I/O-Error occurs - * @throws DataFilterException */ - public Yytoken yylex() throws java.io.IOException, DataFilterException { + public Yytoken yylex() throws java.io.IOException { int yy_input; int yy_action; @@ -1137,12 +1136,12 @@ case 78: case 98: - case 191: - case 201: - case 207: - case 232: - case 248: - case 264: + case 189: + case 199: + case 205: + case 230: + case 246: + case 262: { if(!deleteErrors) { throwError("Unknown @identifier "+yytext()); @@ -1152,11 +1151,11 @@ // Ignore } } - case 306: break; - case 118: - case 135: + case 304: break; + case 117: + case 133: + case 174: case 176: - case 178: { // This is horrible. However it seems that there is no other way to do it with either jflex or CUP, as {URL} cannot be an unambiguous token :( String s = yytext(); @@ -1176,7 +1175,7 @@ if(debug) log("URL now: "+s); s = processURL(s); dst.data = s; - if((s == null) || s.equals("")) { + if(s == null || s.equals("")) { if(debug) log("URL invalid"); w.write("url()"); } else { @@ -1185,7 +1184,7 @@ w.write(s); } } - case 307: break; + case 305: break; case 26: case 94: { @@ -1194,7 +1193,7 @@ w.write(s); if(debug) log("Matched function start: "+s); } - case 308: break; + case 306: break; case 28: { if(postBadImportFlag) { @@ -1208,12 +1207,12 @@ if(debug) log("Matched and passing on mediums list: "+s); } } - case 309: break; - case 190: - case 200: - case 221: - case 238: - case 244: + case 307: break; + case 188: + case 198: + case 219: + case 236: + case 242: { String s = yytext(); if(debug) log("Found @import: "+s); @@ -1223,7 +1222,7 @@ s = dst.data; if(debug) log("URL: "+s); s = processURL(s); - if (!((s == null) || s.equals(""))) { + if (!(s == null || s.equals(""))) { if(debug) log("URL now: "+s); s = "@import "+dst.toString(); if(debug) log("Writing: "+s); @@ -1231,78 +1230,68 @@ } else if(debug) log("Dropped @import"); } - case 310: break; - case 105: - case 129: - { - // Comment - // CSS comments are harmless? - FIXME check - String s = yytext(); - w.write(s); - if(debug) log("Matched comment: "+s); - } - case 311: break; - case 107: + case 308: break; + case 106: { String s = yytext(); w.write(s); if(debug) log("Matched HTML comment: "+s); } - case 312: break; - case 148: + case 309: break; + case 146: { String s = yytext(); w.write(s); if(debug) log("Matched @media: "+s); } - case 313: break; + case 310: break; case 74: case 75: case 95: case 97: + case 119: case 120: - case 121: - case 143: - case 144: - case 166: - case 167: - case 180: - case 181: + case 141: + case 142: + case 164: + case 165: + case 178: + case 179: { String s = yytext(); w.write(s); if(debug) log("Matched unicode: "+s); } - case 314: break; + case 311: break; case 37: { String s = yytext(); w.write(s); if(debug) log("Matched number: "+s); } - case 315: break; + case 312: break; case 54: { String s = yytext(); w.write(s); if(debug) log("Matched |=: "+s); } - case 316: break; - case 126: + case 313: break; + case 125: { String s = yytext(); w.write(s); if(debug) log("Matched @page: "+s); } - case 317: break; + case 314: break; case 92: - case 154: + case 152: { String s = yytext(); if(debug) log("Got hexcolor: "+s); w.write(s); } - case 318: break; + case 315: break; case 2: case 5: case 13: @@ -1311,115 +1300,140 @@ case 57: case 73: case 89: - case 110: - case 132: - case 153: + case 109: + case 130: + case 151: { String s = yytext(); w.write(s); if(debug) log("Matched ident: "+s); } - case 319: break; + case 316: break; case 34: case 59: case 60: { String s = yytext(); if(debug) log("Matched string: "+s); - if(paranoidStringCheck && (s.indexOf(':') != -1)) { + if(paranoidStringCheck && s.indexOf(':') != -1) { w.write("/* Deleted disallowed string */"); log("Deleted disallowed string: "+s); } else { w.write(s); } } - case 320: break; + case 317: break; case 38: case 40: case 71: case 72: case 93: + case 110: case 111: - case 112: - case 133: - case 134: - case 155: - case 175: + case 131: + case 132: + case 153: + case 173: { String s = yytext(); w.write(s); if(debug) log("Matched #name: "+s); } - case 321: break; - case 283: + case 318: break; + case 281: { String s = yytext(); w.write(s); if(debug) log("Matched important: "+s); } - case 322: break; + case 319: break; case 15: { String s = yytext(); w.write(s); if(debug) log("Matched semicolon: "+s); } - case 323: break; + case 320: break; + case 136: case 138: case 140: - case 142: - case 157: - case 162: - case 165: + case 155: + case 160: + case 163: { String s = yytext(); if(debug) log("Ignoring unrecognizable url: "+s); w.write("/* Ignoring unmatchable URL */url()"); } - case 324: break; + case 321: break; case 53: { String s = yytext(); w.write(s); if(debug) log("Matched ~=: "+s); } - case 325: break; - case 122: - case 145: - case 168: - case 182: - case 196: - case 215: + case 322: break; + case 121: + case 143: + case 166: + case 180: + case 194: + case 213: { String s = yytext(); w.write(s); if(debug) log("Matched unicode range: "+s); } - case 326: break; + case 323: break; case 17: { String s = yytext(); w.write(s); if(debug) log("Matched close braces: "+s); } - case 327: break; + case 324: break; case 10: { String s = yytext(); w.write(s); if(debug) log("Matched function end: "+s); } - case 328: break; - case 250: - case 268: - case 282: + case 325: break; + case 105: { String s = yytext(); + StringBuffer sb = new StringBuffer(s.length()); + sb.append("/* "); + boolean inPrefix = true; + for(int i=2;i<sb.length()-2;i++) { + char c = sb.charAt(i); + if(inPrefix && Character.isWhitespace(c)) { + continue; + } + if(Character.isDigit(c) || Character.isWhitespace(c) || + Character.isLetter(c) || c == '.' || c == '_' || c == '-') { + // No @, no !, etc; IE has been known to do things with comments + // in CSS, and other browsers may too + sb.append(c); + } + } + while(Character.isWhitespace(sb.charAt(sb.length()-1))) + sb.deleteCharAt(sb.length()-1); + sb.append(" */"); + w.write(sb.toString()); + if(debug) log("Matched comment: "+s+" -> "+sb.toString()); + } + case 326: break; + case 248: + case 266: + case 280: + { + String s = yytext(); detectedCharset = s; if(debug) log("Matched and ignoring charset: "+s); // Ignore } - case 329: break; + case 327: break; case 1: case 3: case 7: @@ -1436,21 +1450,21 @@ log("Matched anything: "+yytext()+" - ignoring"); w.write("/* ignored unmatched char: "+c+" */"); // single char cannot break out of comment } - case 330: break; - case 227: + case 328: break; + case 225: { String s = yytext(); w.write(s); if(debug) log("Matched @font-face: "+s); } - case 331: break; + case 329: break; case 16: { String s = yytext(); w.write(s); if(debug) log("Matched open braces: "+s); } - case 332: break; + case 330: break; case 6: case 9: case 12: @@ -1460,30 +1474,30 @@ w.write(s); if(debug) log("Matched single char: "+s); } - case 333: break; + case 331: break; case 4: { String s = yytext(); w.write(s); if(debug) log("Matched whitespace: "+s); } - case 334: break; + case 332: break; case 29: { String s = yytext(); w.write(s); if(debug) log("Matched measurement: "+s); } - case 335: break; + case 333: break; case 58: { String s = yytext(); w.write(s); if(debug) log("Matched HTML comment: "+s); } - case 336: break; + case 334: break; default: - if ((yy_input == YYEOF) && (yy_startRead == yy_currentPos)) { + if (yy_input == YYEOF && yy_startRead == yy_currentPos) { yy_atEOF = true; return null; } Modified: trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.jflex =================================================================== --- trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.jflex 2006-09-01 19:03:37 UTC (rev 10327) +++ trunk/freenet/src/freenet/clients/http/filter/CSSTokenizerFilter.jflex 2006-09-01 19:55:29 UTC (rev 10328) @@ -294,8 +294,26 @@ } "/*" ~"*/" { String s = yytext(); - w.write(s); - if(debug) log("Matched comment: "+s); + StringBuffer sb = new StringBuffer(s.length()); + sb.append("/* "); + boolean inPrefix = true; + for(int i=2;i<sb.length()-2;i++) { + char c = sb.charAt(i); + if(inPrefix && Character.isWhitespace(c)) { + continue; + } + if(Character.isDigit(c) || Character.isWhitespace(c) || + Character.isLetter(c) || c == '.' || c == '_' || c == '-') { + // No @, no !, etc; IE has been known to do things with comments + // in CSS, and other browsers may too + sb.append(c); + } + } + while(Character.isWhitespace(sb.charAt(sb.length()-1))) + sb.deleteCharAt(sb.length()-1); + sb.append(" */"); + w.write(sb.toString()); + if(debug) log("Matched comment: "+s+" -> "+sb.toString()); } "<!--" { String s = yytext(); Modified: trunk/freenet/src/freenet/clients/http/filter/UnsafeContentTypeException.java =================================================================== --- trunk/freenet/src/freenet/clients/http/filter/UnsafeContentTypeException.java 2006-09-01 19:03:37 UTC (rev 10327) +++ trunk/freenet/src/freenet/clients/http/filter/UnsafeContentTypeException.java 2006-09-01 19:55:29 UTC (rev 10328) @@ -1,5 +1,7 @@ package freenet.clients.http.filter; +import java.io.IOException; + import freenet.support.HTMLNode; /** @@ -8,7 +10,7 @@ * * Base class for UnknownContentTypeException and KnownUnsafeContentTypeException. */ -public abstract class UnsafeContentTypeException extends Exception { +public abstract class UnsafeContentTypeException extends IOException { /** * Get the contents of the error page.
