From 10a438c117ec9636cf48d0764a3e9cf9e35613d3 Mon Sep 17 00:00:00 2001 From: sam Date: Tue, 4 Jan 2005 23:10:43 +0000 Subject: [PATCH] * linuxfr.org captchas git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/pwntcha/trunk@419 92316355-f0b4-4df1-b90c-862c8a59935f --- Makefile.am | 3 +- extras/Makefile.am | 3 +- extras/NOTES | 5 ++ extras/font_linuxfr.php | 11 +++ share/font_linuxfr.png | Bin 0 -> 626 bytes src/Makefile.am | 1 + src/common.h | 1 + src/linuxfr.c | 155 ++++++++++++++++++++++++++++++++++ src/main.c | 9 +- testsuite/Makefile.am | 2 +- testsuite/linuxfr/control.txt | 100 ++++++++++++++++++++++ 11 files changed, 286 insertions(+), 4 deletions(-) create mode 100644 extras/font_linuxfr.php create mode 100644 share/font_linuxfr.png create mode 100644 src/linuxfr.c create mode 100644 testsuite/linuxfr/control.txt diff --git a/Makefile.am b/Makefile.am index ef4b2e5..2ef2623 100644 --- a/Makefile.am +++ b/Makefile.am @@ -6,8 +6,9 @@ DIST_SUBDIRS = $(SUBDIRS) extras testsuite EXTRA_DIST = \ bootstrap \ ChangeLog \ - share/font_slashdot.png \ + share/font_linuxfr.png \ share/font_phpbb.png \ + share/font_slashdot.png \ share/font_vbulletin.png \ $(NULL) diff --git a/extras/Makefile.am b/extras/Makefile.am index 43dafc6..d024d5e 100644 --- a/extras/Makefile.am +++ b/extras/Makefile.am @@ -2,7 +2,8 @@ NULL = EXTRA_DIST = \ NOTES \ - usercp_confirm.php \ + font_linuxfr.php \ getphpbbcaptcha.py \ + usercp_confirm.php \ $(NULL) diff --git a/extras/NOTES b/extras/NOTES index 53db58e..bae4d17 100644 --- a/extras/NOTES +++ b/extras/NOTES @@ -17,3 +17,8 @@ getphpbbcaptcha.py Usage: getphpbbcaptcha.py > captcha.png +font_linuxfr.php +---------------- + This file is used to create the linuxfr font. + + Usage: php4 font_linuxfr.php > font_linuxfr.png diff --git a/extras/font_linuxfr.php b/extras/font_linuxfr.php new file mode 100644 index 0000000..0d2aa31 --- /dev/null +++ b/extras/font_linuxfr.php @@ -0,0 +1,11 @@ + diff --git a/share/font_linuxfr.png b/share/font_linuxfr.png new file mode 100644 index 0000000000000000000000000000000000000000..02433491bbdf03b55833fa1124c6627e6f0ec6fd GIT binary patch literal 626 zcmV-&0*(ENP)54iP`k_XWKg$g@g6@Wyi2av+sH=y}>w(()p6W$uygwiqU!%gCDN1{|3t) zTZ?=zMn!<%=YiMnggJC-ESAI9aB6GCX0*RBkMeIY7o1}%Yv+#Pcc5&Ftm_$LrZu{sdLCt z9x&t|v*Owl&kBZXSpV4Q7yB;;Idy6fi}^SqwZ$^+#OO1@2SeH67Ck?n}+L208HRQ?|9bZ zGY{g^teX(q>=9`A8`Y_=-P`!oXQQ`62A$%Tkb|rr@9y!j8ovm}?~FEYVEkO;)&3-% zbI8xi#LeB3)D4E!_*Dy2g#2o!MGw;>wukzkOIsq;-eyk!|NbvkGX*-$_+Tjj0000< MMNUMnLSTX*3OJ=F+W-In literal 0 HcmV?d00001 diff --git a/src/Makefile.am b/src/Makefile.am index e7ef826..ff8a7ef 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -8,6 +8,7 @@ pwntcha_SOURCES = \ image.c \ filters.c \ common.h \ + linuxfr.c \ phpbb.c \ scode.c \ slashdot.c \ diff --git a/src/common.h b/src/common.h index 2a1817d..6bdc0c1 100644 --- a/src/common.h +++ b/src/common.h @@ -21,6 +21,7 @@ struct image void dprintf(const char *fmt, ...); /* available CAPTCHA decoders */ +char *decode_linuxfr(struct image *img); char *decode_phpbb(struct image *img); char *decode_scode(struct image *img); char *decode_slashdot(struct image *img); diff --git a/src/linuxfr.c b/src/linuxfr.c new file mode 100644 index 0000000..31856a2 --- /dev/null +++ b/src/linuxfr.c @@ -0,0 +1,155 @@ +/* + * linuxfr.c: decode linuxfr.org captchas + * $Id$ + * + * Copyright: (c) 2005 Sam Hocevar + * This program is free software; you can redistribute it and/or + * modify it under the terms of the Do What The Fuck You Want To + * Public License as published by Banlu Kemiyatorn. See + * http://sam.zoy.org/projects/COPYING.WTFPL for more details. + */ + +#include +#include +#include +#include + +#include "config.h" +#include "common.h" + +#define FONTNAME "share/font_linuxfr.png" + +/* Main function */ +char *decode_linuxfr(struct image *img) +{ + char all[] = "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789"; + char *result; + struct image *tmp, *font; + int x, y, r, g, b, i, j, c; + int stats[40]; + + font = image_load(FONTNAME); + if(!font) + { + fprintf(stderr, "cannot load font %s\n", FONTNAME); + exit(-1); + } + + /* linuxfr captchas have 7 characters */ + result = malloc(8 * sizeof(char)); + memset(result, '\0', 8); + + tmp = filter_equalize(img, 150); + + for(y = 0; y < img->height; y++) + { + int count = 0; + for(x = 0; x < img->width; x++) + { + getpixel(tmp, x, y, &r, &g, &b); + if(r == 0) + count++; + } + stats[y] = count; + } + + /* Find 7 consecutive lines that have at least 14 pixels; they're + * baseline candidates */ + for(y = 0; y < img->height - 11; y++) + { + int ycan = 1; + for(j = 3; j < 10; j++) + { + if(stats[y + j] < 14) + { + ycan = 0; + y = y + j - 3; + break; + } + } + if(!ycan) + continue; + + /* Find 7 consecutive cells that have at least 2 pixels on + * each line; they're base column candidates */ + for(x = 0; x < img->width - 9 * 7 + 1; x++) + { + int xcan = 1; + for(c = 0; c < 7; c++, xcan) + { + for(j = 3; j < 10; j++) + { + int count = 0; + for(i = 0; i < 8; i++) + { + getpixel(tmp, x + c * 9 + i, y + j, &r, &g, &b); + if(r == 0) + { + count++; + if(count == 2) + break; + } + } + if(count < 2) + { + xcan = 0; + break; + } + } + } + if(!xcan) + continue; + + /* Now we have an (x,y) candidate - try to fit 7 characters */ + for(c = 0; c < 7; c++, xcan) + { + int r2, g2, b2, test, tcan; + for(test = 0; test < 62; test++) + { + tcan = 1; + for(j = 0; j < 12; j++, tcan) + for(i = 0; i < 8; i++) + { + getpixel(tmp, x + c * 9 + i, y + j, &r, &g, &b); + getpixel(font, test * 9 + i, j, &r2, &g2, &b2); + /* Only die if font is black and image is white */ + if(r > r2) + { + tcan = 0; + break; + } + } + if(tcan) + { + result[c] = all[test]; + result[c+1] = '\0'; + break; + } + } + if(!tcan) + { + xcan = 0; + break; + } + } + if(xcan) + { + break; + } + } + } + + image_free(tmp); + image_free(font); + + if(strlen(result) != 7) + { + free(result); + return NULL; + } + + return result; +} + diff --git a/src/main.c b/src/main.c index 626bde2..9fec225 100644 --- a/src/main.c +++ b/src/main.c @@ -124,6 +124,8 @@ int main(int argc, char *argv[]) if(!strcmp(mode, "test")) result = decode_test(img); + else if(!strcmp(mode, "linuxfr")) + result = decode_linuxfr(img); else if(!strcmp(mode, "phpbb")) result = decode_phpbb(img); else if(!strcmp(mode, "scode")) @@ -134,7 +136,12 @@ int main(int argc, char *argv[]) result = decode_vbulletin(img); else { - if(img->width == 320 && img->height == 50) + if(img->width == 100 && img->height == 40) + { + dprintf("autodetected linuxfr captcha\n"); + result = decode_linuxfr(img); + } + else if(img->width == 320 && img->height == 50) { dprintf("autodetected phpBB captcha\n"); result = decode_phpbb(img); diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am index 97a7731..d4ccdad 100644 --- a/testsuite/Makefile.am +++ b/testsuite/Makefile.am @@ -4,7 +4,7 @@ EXTRA_DIST = \ README \ auditor/auditor00.png auditor/auditor01.png auditor/auditor02.png auditor/auditor03.png auditor/auditor04.png auditor/auditor05.png auditor/auditor06.png auditor/auditor07.png auditor/auditor08.png auditor/auditor09.png auditor/auditor10.png auditor/auditor11.png auditor/auditor12.png auditor/auditor13.png auditor/auditor14.png auditor/auditor15.png auditor/auditor16.png auditor/auditor17.png auditor/auditor18.png auditor/auditor19.png auditor/auditor20.png auditor/auditor21.png auditor/auditor22.png auditor/auditor23.png auditor/auditor24.png auditor/auditor25.png auditor/auditor26.png auditor/auditor27.png auditor/auditor28.png auditor/auditor29.png auditor/auditor30.png auditor/auditor31.png auditor/auditor32.png auditor/auditor33.png auditor/auditor34.png auditor/auditor35.png auditor/auditor36.png auditor/auditor37.png auditor/auditor38.png auditor/auditor39.png auditor/auditor40.png auditor/auditor41.png auditor/auditor42.png auditor/auditor43.png auditor/auditor44.png auditor/auditor45.png auditor/auditor46.png auditor/auditor47.png auditor/auditor48.png auditor/auditor49.png auditor/auditor50.png auditor/auditor51.png auditor/auditor52.png auditor/auditor53.png auditor/auditor54.png auditor/auditor55.png auditor/auditor56.png auditor/auditor57.png auditor/auditor58.png auditor/auditor59.png auditor/auditor60.png auditor/auditor61.png auditor/auditor62.png auditor/auditor63.png auditor/auditor64.png auditor/auditor65.png auditor/auditor66.png auditor/auditor67.png auditor/auditor68.png auditor/auditor69.png auditor/auditor70.png auditor/auditor71.png auditor/auditor72.png auditor/auditor73.png auditor/auditor74.png auditor/auditor75.png auditor/auditor76.png auditor/auditor77.png auditor/auditor78.png auditor/auditor79.png auditor/auditor80.png auditor/auditor81.png auditor/auditor82.png auditor/auditor83.png auditor/auditor84.png auditor/auditor85.png auditor/auditor86.png auditor/auditor87.png auditor/auditor88.png auditor/auditor89.png auditor/auditor90.png auditor/auditor91.png auditor/auditor92.png auditor/auditor93.png auditor/auditor94.png auditor/auditor95.png auditor/auditor96.png auditor/auditor97.png auditor/auditor98.png auditor/auditor99.png auditor/control.txt \ cfxcaptcha/cvxcaptcha00.jpeg cfxcaptcha/cvxcaptcha01.jpeg cfxcaptcha/cvxcaptcha02.jpeg cfxcaptcha/cvxcaptcha03.jpeg cfxcaptcha/cvxcaptcha04.jpeg cfxcaptcha/cvxcaptcha05.jpeg cfxcaptcha/cvxcaptcha06.jpeg cfxcaptcha/cvxcaptcha07.jpeg cfxcaptcha/cvxcaptcha08.jpeg cfxcaptcha/cvxcaptcha09.jpeg cfxcaptcha/cvxcaptcha10.jpeg cfxcaptcha/cvxcaptcha11.jpeg cfxcaptcha/cvxcaptcha12.jpeg cfxcaptcha/cvxcaptcha13.jpeg cfxcaptcha/cvxcaptcha14.jpeg cfxcaptcha/cvxcaptcha15.jpeg cfxcaptcha/cvxcaptcha16.jpeg cfxcaptcha/cvxcaptcha17.jpeg cfxcaptcha/cvxcaptcha18.jpeg cfxcaptcha/cvxcaptcha19.jpeg cfxcaptcha/cvxcaptcha20.jpeg cfxcaptcha/cvxcaptcha21.jpeg cfxcaptcha/cvxcaptcha22.jpeg cfxcaptcha/cvxcaptcha23.jpeg cfxcaptcha/cvxcaptcha24.jpeg cfxcaptcha/cvxcaptcha25.jpeg cfxcaptcha/cvxcaptcha26.jpeg cfxcaptcha/cvxcaptcha27.jpeg cfxcaptcha/cvxcaptcha28.jpeg cfxcaptcha/cvxcaptcha29.jpeg cfxcaptcha/cvxcaptcha30.jpeg cfxcaptcha/cvxcaptcha31.jpeg cfxcaptcha/cvxcaptcha32.jpeg cfxcaptcha/cvxcaptcha33.jpeg cfxcaptcha/cvxcaptcha34.jpeg cfxcaptcha/cvxcaptcha35.jpeg cfxcaptcha/cvxcaptcha36.jpeg cfxcaptcha/cvxcaptcha37.jpeg cfxcaptcha/cvxcaptcha38.jpeg cfxcaptcha/cvxcaptcha39.jpeg cfxcaptcha/cvxcaptcha40.jpeg cfxcaptcha/cvxcaptcha41.jpeg cfxcaptcha/cvxcaptcha42.jpeg cfxcaptcha/cvxcaptcha43.jpeg cfxcaptcha/cvxcaptcha44.jpeg cfxcaptcha/cvxcaptcha45.jpeg cfxcaptcha/cvxcaptcha46.jpeg cfxcaptcha/cvxcaptcha47.jpeg cfxcaptcha/cvxcaptcha48.jpeg cfxcaptcha/cvxcaptcha49.jpeg cfxcaptcha/cvxcaptcha50.jpeg cfxcaptcha/cvxcaptcha51.jpeg cfxcaptcha/cvxcaptcha52.jpeg cfxcaptcha/cvxcaptcha53.jpeg cfxcaptcha/cvxcaptcha54.jpeg cfxcaptcha/cvxcaptcha55.jpeg cfxcaptcha/cvxcaptcha56.jpeg cfxcaptcha/cvxcaptcha57.jpeg cfxcaptcha/cvxcaptcha58.jpeg cfxcaptcha/cvxcaptcha59.jpeg cfxcaptcha/cvxcaptcha60.jpeg cfxcaptcha/cvxcaptcha61.jpeg cfxcaptcha/cvxcaptcha62.jpeg cfxcaptcha/cvxcaptcha63.jpeg cfxcaptcha/cvxcaptcha64.jpeg cfxcaptcha/cvxcaptcha65.jpeg cfxcaptcha/cvxcaptcha66.jpeg cfxcaptcha/cvxcaptcha67.jpeg cfxcaptcha/cvxcaptcha68.jpeg cfxcaptcha/cvxcaptcha69.jpeg cfxcaptcha/cvxcaptcha70.jpeg cfxcaptcha/cvxcaptcha71.jpeg cfxcaptcha/cvxcaptcha72.jpeg cfxcaptcha/cvxcaptcha73.jpeg cfxcaptcha/cvxcaptcha74.jpeg cfxcaptcha/cvxcaptcha75.jpeg cfxcaptcha/cvxcaptcha76.jpeg cfxcaptcha/cvxcaptcha77.jpeg cfxcaptcha/cvxcaptcha78.jpeg cfxcaptcha/cvxcaptcha79.jpeg cfxcaptcha/cvxcaptcha80.jpeg cfxcaptcha/cvxcaptcha81.jpeg cfxcaptcha/cvxcaptcha82.jpeg cfxcaptcha/cvxcaptcha83.jpeg cfxcaptcha/cvxcaptcha84.jpeg cfxcaptcha/cvxcaptcha85.jpeg cfxcaptcha/cvxcaptcha86.jpeg cfxcaptcha/cvxcaptcha87.jpeg cfxcaptcha/cvxcaptcha88.jpeg cfxcaptcha/cvxcaptcha89.jpeg cfxcaptcha/cvxcaptcha90.jpeg cfxcaptcha/cvxcaptcha91.jpeg cfxcaptcha/cvxcaptcha92.jpeg cfxcaptcha/cvxcaptcha93.jpeg cfxcaptcha/cvxcaptcha94.jpeg cfxcaptcha/cvxcaptcha95.jpeg cfxcaptcha/cvxcaptcha96.jpeg cfxcaptcha/cvxcaptcha97.jpeg cfxcaptcha/cvxcaptcha98.jpeg cfxcaptcha/cvxcaptcha99.jpeg \ - linuxfr/linuxfr00.png linuxfr/linuxfr01.png linuxfr/linuxfr02.png linuxfr/linuxfr03.png linuxfr/linuxfr04.png linuxfr/linuxfr05.png linuxfr/linuxfr06.png linuxfr/linuxfr07.png linuxfr/linuxfr08.png linuxfr/linuxfr09.png linuxfr/linuxfr10.png linuxfr/linuxfr11.png linuxfr/linuxfr12.png linuxfr/linuxfr13.png linuxfr/linuxfr14.png linuxfr/linuxfr15.png linuxfr/linuxfr16.png linuxfr/linuxfr17.png linuxfr/linuxfr18.png linuxfr/linuxfr19.png linuxfr/linuxfr20.png linuxfr/linuxfr21.png linuxfr/linuxfr22.png linuxfr/linuxfr23.png linuxfr/linuxfr24.png linuxfr/linuxfr25.png linuxfr/linuxfr26.png linuxfr/linuxfr27.png linuxfr/linuxfr28.png linuxfr/linuxfr29.png linuxfr/linuxfr30.png linuxfr/linuxfr31.png linuxfr/linuxfr32.png linuxfr/linuxfr33.png linuxfr/linuxfr34.png linuxfr/linuxfr35.png linuxfr/linuxfr36.png linuxfr/linuxfr37.png linuxfr/linuxfr38.png linuxfr/linuxfr39.png linuxfr/linuxfr40.png linuxfr/linuxfr41.png linuxfr/linuxfr42.png linuxfr/linuxfr43.png linuxfr/linuxfr44.png linuxfr/linuxfr45.png linuxfr/linuxfr46.png linuxfr/linuxfr47.png linuxfr/linuxfr48.png linuxfr/linuxfr49.png linuxfr/linuxfr50.png linuxfr/linuxfr51.png linuxfr/linuxfr52.png linuxfr/linuxfr53.png linuxfr/linuxfr54.png linuxfr/linuxfr55.png linuxfr/linuxfr56.png linuxfr/linuxfr57.png linuxfr/linuxfr58.png linuxfr/linuxfr59.png linuxfr/linuxfr60.png linuxfr/linuxfr61.png linuxfr/linuxfr62.png linuxfr/linuxfr63.png linuxfr/linuxfr64.png linuxfr/linuxfr65.png linuxfr/linuxfr66.png linuxfr/linuxfr67.png linuxfr/linuxfr68.png linuxfr/linuxfr69.png linuxfr/linuxfr70.png linuxfr/linuxfr71.png linuxfr/linuxfr72.png linuxfr/linuxfr73.png linuxfr/linuxfr74.png linuxfr/linuxfr75.png linuxfr/linuxfr76.png linuxfr/linuxfr77.png linuxfr/linuxfr78.png linuxfr/linuxfr79.png linuxfr/linuxfr80.png linuxfr/linuxfr81.png linuxfr/linuxfr82.png linuxfr/linuxfr83.png linuxfr/linuxfr84.png linuxfr/linuxfr85.png linuxfr/linuxfr86.png linuxfr/linuxfr87.png linuxfr/linuxfr88.png linuxfr/linuxfr89.png linuxfr/linuxfr90.png linuxfr/linuxfr91.png linuxfr/linuxfr92.png linuxfr/linuxfr93.png linuxfr/linuxfr94.png linuxfr/linuxfr95.png linuxfr/linuxfr96.png linuxfr/linuxfr97.png linuxfr/linuxfr98.png linuxfr/linuxfr99.png \ + linuxfr/linuxfr00.png linuxfr/linuxfr01.png linuxfr/linuxfr02.png linuxfr/linuxfr03.png linuxfr/linuxfr04.png linuxfr/linuxfr05.png linuxfr/linuxfr06.png linuxfr/linuxfr07.png linuxfr/linuxfr08.png linuxfr/linuxfr09.png linuxfr/linuxfr10.png linuxfr/linuxfr11.png linuxfr/linuxfr12.png linuxfr/linuxfr13.png linuxfr/linuxfr14.png linuxfr/linuxfr15.png linuxfr/linuxfr16.png linuxfr/linuxfr17.png linuxfr/linuxfr18.png linuxfr/linuxfr19.png linuxfr/linuxfr20.png linuxfr/linuxfr21.png linuxfr/linuxfr22.png linuxfr/linuxfr23.png linuxfr/linuxfr24.png linuxfr/linuxfr25.png linuxfr/linuxfr26.png linuxfr/linuxfr27.png linuxfr/linuxfr28.png linuxfr/linuxfr29.png linuxfr/linuxfr30.png linuxfr/linuxfr31.png linuxfr/linuxfr32.png linuxfr/linuxfr33.png linuxfr/linuxfr34.png linuxfr/linuxfr35.png linuxfr/linuxfr36.png linuxfr/linuxfr37.png linuxfr/linuxfr38.png linuxfr/linuxfr39.png linuxfr/linuxfr40.png linuxfr/linuxfr41.png linuxfr/linuxfr42.png linuxfr/linuxfr43.png linuxfr/linuxfr44.png linuxfr/linuxfr45.png linuxfr/linuxfr46.png linuxfr/linuxfr47.png linuxfr/linuxfr48.png linuxfr/linuxfr49.png linuxfr/linuxfr50.png linuxfr/linuxfr51.png linuxfr/linuxfr52.png linuxfr/linuxfr53.png linuxfr/linuxfr54.png linuxfr/linuxfr55.png linuxfr/linuxfr56.png linuxfr/linuxfr57.png linuxfr/linuxfr58.png linuxfr/linuxfr59.png linuxfr/linuxfr60.png linuxfr/linuxfr61.png linuxfr/linuxfr62.png linuxfr/linuxfr63.png linuxfr/linuxfr64.png linuxfr/linuxfr65.png linuxfr/linuxfr66.png linuxfr/linuxfr67.png linuxfr/linuxfr68.png linuxfr/linuxfr69.png linuxfr/linuxfr70.png linuxfr/linuxfr71.png linuxfr/linuxfr72.png linuxfr/linuxfr73.png linuxfr/linuxfr74.png linuxfr/linuxfr75.png linuxfr/linuxfr76.png linuxfr/linuxfr77.png linuxfr/linuxfr78.png linuxfr/linuxfr79.png linuxfr/linuxfr80.png linuxfr/linuxfr81.png linuxfr/linuxfr82.png linuxfr/linuxfr83.png linuxfr/linuxfr84.png linuxfr/linuxfr85.png linuxfr/linuxfr86.png linuxfr/linuxfr87.png linuxfr/linuxfr88.png linuxfr/linuxfr89.png linuxfr/linuxfr90.png linuxfr/linuxfr91.png linuxfr/linuxfr92.png linuxfr/linuxfr93.png linuxfr/linuxfr94.png linuxfr/linuxfr95.png linuxfr/linuxfr96.png linuxfr/linuxfr97.png linuxfr/linuxfr98.png linuxfr/linuxfr99.png linuxfr/control.txt \ livejournal/livejournal00.png livejournal/livejournal01.png livejournal/livejournal02.png livejournal/livejournal03.png livejournal/livejournal04.png livejournal/livejournal05.png livejournal/livejournal06.png livejournal/livejournal07.png livejournal/livejournal08.png livejournal/livejournal09.png livejournal/livejournal10.png livejournal/livejournal11.png livejournal/livejournal12.png livejournal/livejournal13.png livejournal/livejournal14.png livejournal/livejournal15.png livejournal/livejournal16.png livejournal/livejournal17.png livejournal/livejournal18.png livejournal/livejournal19.png livejournal/livejournal20.png livejournal/livejournal21.png livejournal/livejournal22.png livejournal/livejournal23.png livejournal/livejournal24.png livejournal/livejournal25.png livejournal/livejournal26.png livejournal/livejournal27.png livejournal/livejournal28.png livejournal/livejournal29.png livejournal/livejournal30.png livejournal/livejournal31.png livejournal/livejournal32.png livejournal/livejournal33.png livejournal/livejournal34.png livejournal/livejournal35.png livejournal/livejournal36.png livejournal/livejournal37.png livejournal/livejournal38.png livejournal/livejournal39.png livejournal/livejournal40.png livejournal/livejournal41.png livejournal/livejournal42.png livejournal/livejournal43.png livejournal/livejournal44.png livejournal/livejournal45.png livejournal/livejournal46.png livejournal/livejournal47.png livejournal/livejournal48.png livejournal/livejournal49.png livejournal/livejournal50.png livejournal/livejournal51.png livejournal/livejournal52.png livejournal/livejournal53.png livejournal/livejournal54.png livejournal/livejournal55.png livejournal/livejournal56.png livejournal/livejournal57.png livejournal/livejournal58.png livejournal/livejournal59.png livejournal/livejournal60.png livejournal/livejournal61.png livejournal/livejournal62.png livejournal/livejournal63.png livejournal/livejournal64.png livejournal/livejournal65.png livejournal/livejournal66.png livejournal/livejournal67.png livejournal/livejournal68.png livejournal/livejournal69.png livejournal/livejournal70.png livejournal/livejournal71.png livejournal/livejournal72.png livejournal/livejournal73.png livejournal/livejournal74.png livejournal/livejournal75.png livejournal/livejournal76.png livejournal/livejournal77.png livejournal/livejournal78.png livejournal/livejournal79.png livejournal/livejournal80.png livejournal/livejournal81.png livejournal/livejournal82.png livejournal/livejournal83.png livejournal/livejournal84.png livejournal/livejournal85.png livejournal/livejournal86.png livejournal/livejournal87.png livejournal/livejournal88.png livejournal/livejournal89.png livejournal/livejournal90.png livejournal/livejournal91.png livejournal/livejournal92.png livejournal/livejournal93.png livejournal/livejournal94.png livejournal/livejournal95.png livejournal/livejournal96.png livejournal/livejournal97.png livejournal/livejournal98.png livejournal/livejournal99.png \ passport/passport00.jpeg passport/passport01.jpeg passport/passport02.jpeg passport/passport03.jpeg passport/passport04.jpeg passport/passport05.jpeg passport/passport06.jpeg passport/passport07.jpeg passport/passport08.jpeg passport/passport09.jpeg passport/passport10.jpeg passport/passport11.jpeg passport/passport12.jpeg passport/passport13.jpeg passport/passport14.jpeg passport/passport15.jpeg passport/passport16.jpeg passport/passport17.jpeg passport/passport18.jpeg passport/passport19.jpeg passport/passport20.jpeg passport/passport21.jpeg passport/passport22.jpeg passport/passport23.jpeg passport/passport24.jpeg passport/passport25.jpeg passport/passport26.jpeg passport/passport27.jpeg passport/passport28.jpeg passport/passport29.jpeg passport/passport30.jpeg passport/passport31.jpeg passport/passport32.jpeg passport/passport33.jpeg passport/passport34.jpeg passport/passport35.jpeg passport/passport36.jpeg passport/passport37.jpeg passport/passport38.jpeg passport/passport39.jpeg passport/passport40.jpeg passport/passport41.jpeg passport/passport42.jpeg passport/passport43.jpeg passport/passport44.jpeg passport/passport45.jpeg passport/passport46.jpeg passport/passport47.jpeg passport/passport48.jpeg passport/passport49.jpeg passport/passport50.jpeg passport/passport51.jpeg passport/passport52.jpeg passport/passport53.jpeg passport/passport54.jpeg passport/passport55.jpeg passport/passport56.jpeg passport/passport57.jpeg passport/passport58.jpeg passport/passport59.jpeg passport/passport60.jpeg passport/passport61.jpeg passport/passport62.jpeg passport/passport63.jpeg passport/passport64.jpeg passport/passport65.jpeg passport/passport66.jpeg passport/passport67.jpeg passport/passport68.jpeg passport/passport69.jpeg passport/passport70.jpeg passport/passport71.jpeg passport/passport72.jpeg passport/passport73.jpeg passport/passport74.jpeg passport/passport75.jpeg passport/passport76.jpeg passport/passport77.jpeg passport/passport78.jpeg passport/passport79.jpeg passport/passport80.jpeg passport/passport81.jpeg passport/passport82.jpeg passport/passport83.jpeg passport/passport84.jpeg passport/passport85.jpeg passport/passport86.jpeg passport/passport87.jpeg passport/passport88.jpeg passport/passport89.jpeg passport/passport90.jpeg passport/passport91.jpeg passport/passport92.jpeg passport/passport93.jpeg passport/passport94.jpeg passport/passport95.jpeg passport/passport96.jpeg passport/passport97.jpeg passport/passport98.jpeg passport/passport99.jpeg \ phpbb/phpbb00.png phpbb/phpbb01.png phpbb/phpbb02.png phpbb/phpbb03.png phpbb/phpbb04.png phpbb/phpbb05.png phpbb/phpbb06.png phpbb/phpbb07.png phpbb/phpbb08.png phpbb/phpbb09.png phpbb/phpbb10.png phpbb/phpbb11.png phpbb/phpbb12.png phpbb/phpbb13.png phpbb/phpbb14.png phpbb/phpbb15.png phpbb/phpbb16.png phpbb/phpbb17.png phpbb/phpbb18.png phpbb/phpbb19.png phpbb/phpbb20.png phpbb/phpbb21.png phpbb/phpbb22.png phpbb/phpbb23.png phpbb/phpbb24.png phpbb/phpbb25.png phpbb/phpbb26.png phpbb/phpbb27.png phpbb/phpbb28.png phpbb/phpbb29.png phpbb/phpbb30.png phpbb/phpbb31.png phpbb/phpbb32.png phpbb/phpbb33.png phpbb/phpbb34.png phpbb/phpbb35.png phpbb/phpbb36.png phpbb/phpbb37.png phpbb/phpbb38.png phpbb/phpbb39.png phpbb/phpbb40.png phpbb/phpbb41.png phpbb/phpbb42.png phpbb/phpbb43.png phpbb/phpbb44.png phpbb/phpbb45.png phpbb/phpbb46.png phpbb/phpbb47.png phpbb/phpbb48.png phpbb/phpbb49.png phpbb/phpbb50.png phpbb/phpbb51.png phpbb/phpbb52.png phpbb/phpbb53.png phpbb/phpbb54.png phpbb/phpbb55.png phpbb/phpbb56.png phpbb/phpbb57.png phpbb/phpbb58.png phpbb/phpbb59.png phpbb/phpbb60.png phpbb/phpbb61.png phpbb/phpbb62.png phpbb/phpbb63.png phpbb/phpbb64.png phpbb/phpbb65.png phpbb/phpbb66.png phpbb/phpbb67.png phpbb/phpbb68.png phpbb/phpbb69.png phpbb/phpbb70.png phpbb/phpbb71.png phpbb/phpbb72.png phpbb/phpbb73.png phpbb/phpbb74.png phpbb/phpbb75.png phpbb/phpbb76.png phpbb/phpbb77.png phpbb/phpbb78.png phpbb/phpbb79.png phpbb/phpbb80.png phpbb/phpbb81.png phpbb/phpbb82.png phpbb/phpbb83.png phpbb/phpbb84.png phpbb/phpbb85.png phpbb/phpbb86.png phpbb/phpbb87.png phpbb/phpbb88.png phpbb/phpbb89.png phpbb/phpbb90.png phpbb/phpbb91.png phpbb/phpbb92.png phpbb/phpbb93.png phpbb/phpbb94.png phpbb/phpbb95.png phpbb/phpbb96.png phpbb/phpbb97.png phpbb/phpbb98.png phpbb/phpbb99.png phpbb/control.txt \ diff --git a/testsuite/linuxfr/control.txt b/testsuite/linuxfr/control.txt new file mode 100644 index 0000000..f93c38e --- /dev/null +++ b/testsuite/linuxfr/control.txt @@ -0,0 +1,100 @@ +tEHhOvK +egcXvmd +PjFvqau +KUhuaDs +DmwLiUH +DuLcaHf +CSaNFLl +vGwzWNE +zoCucuh +WjikOBC +BbEOaSs +wSeAkuu +hjbHvin +xOmBzlq +McCUroO +TFdmmiK +gkHaGEK +XzfqbuS +BFlOzwq +NFDBmfm +qzzDilT +ZdusZnh +PmhzZPL +AOeCsPD +btZGKnl +wpfVpai +rtDPugJ +PvspMJO +PKFrJTX +EVbKlUM +TOXOzuY +pFbSBTD +ZkFVWhk +CBlSCkh +MpjaaDq +vouZvvk +GOucaYn +phPtpdq +VmGnfZC +JSEVPZH +BtqpOUC +ZlLWZWu +DXYndfL +fqqhGYL +GEnJVJH +xfHJsBV +XuOuFjt +HLqjlza +MhwutaO +JugmBlc +FcmLZFu +JuaocqJ +VvFfSdT +muAASFU +jmvPflE +lnusBSe +uVTTaOl +BiNlSNW +lcqzuPc +dnZNenC +EXWwPES +izCHLXu +eOrxuva +OWXHAmm +pYlDnDf +FPqWdcf +EAaVzLD +sOvdOEL +WExmjHL +xODiwFF +ANSnOpb +kcBgrjc +HHmCNFx +tUFqNlc +LdCzCOw +FjEElxG +FCAhWZp +ZSEokTi +qqZZGdH +almMBzB +DdMhhwK +uobBZWp +YCxsUHr +oraVSFP +xuzzhvh +Yifbkzq +ebttbkj +EzJjsHE +dEOnsXL +wcjSPea +jMGDfYO +CgGkduT +JBJMMpY +oPvDKkz +uAuKTOS +XjPrioj +unuJumu +NiVdvTh +avhDElE +ZoNuvOO