Dear all,<br><br>I'm using R 2.8.1 with MySQL 5.1.33, RMySQL 0.7-3 (built against MySQL 5.1.3 version), DBI 0.2-4 on windows XP.<br><br>I'm trying to do a basic SQL statement <br><br>SELECT AVG(mycolumnA), COUNT(mycolumnA), mycolumnB FROM mytable GROUP BY mycolumnB;<br>
<br>directly from R using DBI functions. But it just crashes R with no explicit reason. If I do manually this statement in MySQL (exactly <br>SELECT AVG(mycolumnA), COUNT(mycolumnA), mycolumnB FROM mydb.mytable GROUP BY mycolumnB; ), it works and produces the following output :<br>
<br>+----------------+------------------+-----------+<br>| avg(mycolumnA) | count(mycolumnA) | mycolumnB |<br>+----------------+------------------+-----------+<br>| 0.5262 | 669 | 1 |<br>| 0.2242 | 455 | 2 |<br>
| 0.3347 | 505 | 3 |<br>| 0.2416 | 389 | 4 |<br>| 0.5857 | 1038 | 5 |<br>| 0.3250 | 523 | 6 |<br>| 0.1935 | 310 | 7 |<br>
| 0.3574 | 333 | 8 |<br>| 0.4132 | 167 | 9 |<br>| 0.3529 | 136 | 10 |<br>| 0.4043 | 282 | 11 |<br>| 0.0000 | 2 | 12 |<br>
+----------------+------------------+-----------+<br>12 rows in set (0.03 sec)<br><br clear="all">I have a reproductible example (this time). See the R file and the csv file. <br><br>Originally I worked with R 2.7.2 version and MySQL 5.0.67, RMySQL 0.6-1, DBI 0.2-4, and got the same crash.<br>
<br>Does anyone idea of what I'm doing wrong? or encounter similar problems?<br><br>Thanks in advance<br><br>Christophe<br><br>PS : I copy/paste my files, in the case attachments are not permitted.<br><br>---------------------------------------------------------------- mycode.R<br>
library(RODBC)<br>library(DBI)<br>library(RMySQL)<br>library(MASS)<br><br>options("max.print"=1000)<br>options(show.error.messages = TRUE)<br><br>checkMySQLreservedname <- function(name2check)<br>{<br># reserved name by MySQL cf. <a href="http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-1.html">http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-1.html</a><br>
<br><br> thelist <- c("ACCESSIBLE","ADD","ALL", "ALTER","ANALYZE","AND", "AS","ASC","ASENSITIVE",<br> "BEFORE","BETWEEN","BIGINT", "BINARY","BLOB","BOTH", "BY","CALL","CASCADE",<br>
"CASE","CHANGE","CHAR", "CHARACTER","CHECK","COLLATE", "COLUMN","CONDITION","CONNECTION",<br> "CONSTRAINT","CONTINUE","CONVERT", "CREATE","CROSS","CURRENT_DATE", "CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_USER",<br>
"CURSOR","DATABASE","DATABASES", "DAY_HOUR","DAY_MICROSECOND","DAY_MINUTE", "DAY_SECOND","DEC","DECIMAL",<br> "DECLARE","DEFAULT","DELAYED", "DELETE","DESC","DESCRIBE", "DETERMINISTIC","DISTINCT","DISTINCTROW",<br>
"DIV","DOUBLE","DROP", "DUAL","EACH","ELSE", "ELSEIF","ENCLOSED","ESCAPED",<br> "EXISTS","EXIT","EXPLAIN", "FALSE","FETCH","FLOAT", "FLOAT4","FLOAT8","FOR",<br>
"FORCE","FOREIGN","FROM", "FULLTEXT","GOTO","GRANT", "GROUP","HAVING","HIGH_PRIORITY",<br> "HOUR_MICROSECOND","HOUR_MINUTE","HOUR_SECOND", "IF","IGNORE","IN", "INDEX","INFILE","INNER",<br>
"INOUT","INSENSITIVE","INSERT", "INT","INT1","INT2", "INT3","INT4","INT8",<br> "INTEGER","INTERVAL","INTO", "IS","ITERATE","JOIN", "KEY","KEYS","KILL",<br>
"LABEL","LEADING","LEAVE", "LEFT","LIKE","LIMIT", "LINEAR","LINES","LOAD",<br> "LOCALTIME","LOCALTIMESTAMP","LOCK", "LONG","LONGBLOB","LONGTEXT", "LOOP","LOW_PRIORITY","MASTER_SSL_VERIFY_SERVER_CERT",<br>
"MATCH","MEDIUMBLOB","MEDIUMINT", "MEDIUMTEXT","MIDDLEINT","MINUTE_MICROSECOND", "MINUTE_SECOND","MOD","MODIFIES",<br> "NATURAL","NOT","NO_WRITE_TO_BINLOG", "NULL","NUMERIC","ON", "OPTIMIZE","OPTION","OPTIONALLY",<br>
"OR","ORDER","OUT", "OUTER","OUTFILE","PRECISION", "PRIMARY","PROCEDURE","PURGE",<br> "RANGE","READ","READS", "READ_ONLY","READ_WRITE","REAL", "REFERENCES","REGEXP","RELEASE",<br>
"RENAME","REPEAT","REPLACE", "REQUIRE","RESTRICT","RETURN", "REVOKE","RIGHT","RLIKE",<br> "SCHEMA","SCHEMAS","SECOND_MICROSECOND", "SELECT","SENSITIVE","SEPARATOR", "SET","SHOW","SMALLINT",<br>
"SPATIAL","SPECIFIC","SQL", "SQLEXCEPTION","SQLSTATE","SQLWARNING", "SQL_BIG_RESULT","SQL_CALC_FOUND_ROWS","SQL_SMALL_RESULT",<br>
"SSL","STARTING","STRAIGHT_JOIN", "TABLE","TERMINATED","THEN", "TINYBLOB","TINYINT","TINYTEXT",<br> "TO","TRAILING","TRIGGER", "TRUE","UNDO","UNION", "UNIQUE","UNLOCK","UNSIGNED",<br>
"UPDATE","UPGRADE","USAGE", "USE","USING","UTC_DATE", "UTC_TIME","UTC_TIMESTAMP","VALUES",<br> "VARBINARY","VARCHAR","VARCHARACTER", "VARYING","WHEN","WHERE", "WHILE","WITH","WRITE",<br>
"XOR","YEAR_MONTH","ZEROFILL")<br> <br> name2change <- name2check %in% thelist | name2check %in% tolower(thelist)<br> name2change <- name2check[name2change]<br><br> if(length(name2change) == 0) <br>
{<br> return(NULL)<br> }else<br> return(name2change)<br><br><br><br>}<br><br><br>changeName <- function(name)<br>{<br><br> result <- sapply(name, FUN = function(x) paste("my__", x, sep=""))<br>
<br> result<br>}<br><br><br>#-------------------------------------------------------<br><br>MyDirectory <- "C:/Documents and Settings/chris/Bureau/essai"<br>mytablename <- "mytable"<br>dbname <- "mydb"<br>
print.log <- TRUE<br>csvtype <- ";"<br><br>#-------------------------------------------------------<br><br>drv <- dbDriver("MySQL")<br>if(print.log) print(summary(drv))<br><br>con <- dbConnect(drv) <br>
if(print.log) print(summary(con))<br><br><br>dbSendQuery(con, paste("CREATE DATABASE IF NOT EXISTS ", dbname))<br>con <- dbConnect(drv, dbname=dbname) #as anonymous<br><br>if(print.log) print(summary(con))<br>
<br>if(!is.character(mytablename))<br> stop("internal error wrong table name") <br><br>if(dbExistsTable(con, mytablename))<br> dbRemoveTable(con, mytablename)<br><br><br>dbefore <- getwd()<br><br>setwd(MyDirectory)<br>
<br><br>lfile <- list.files()<br>lfile <- lfile[grep(".csv",lfile)]<br><br><br>resExport <- matrix("",length(lfile),4)<br>colnames(resExport) <- c("input file name", "nb row imported","nb column imported", "var name changed")<br>
<br>exporttoDB <- function(file, table, toappend, endofline="\r\n") <br>{<br> <br> #dimension checking<br> if(csvtype == ",") <br> { firstrow <- read.csv(file, nrows=1) <br>
}else if(csvtype == ";")<br> { firstrow <- read.csv2(file, nrows=1) <br> }else<br> { stop("wrong csv value separator, neither comma nor semi colon")<br> }<br> <br> zecolname <- colnames(firstrow)<br>
<br> nbcolumn <- length(zecolname)<br> if(nbcolumn > 1)<br> { mask <- c(NA, rep("NULL",nbcolumn-1))<br> }else<br> { mask <- NA<br> }<br><br> if(csvtype == ",") <br>
{ firstcolumn <- read.csv(file, colClasses=mask) <br> }else if(csvtype == ";")<br> { firstcolumn <- read.csv2(file, colClasses=mask) <br> }else<br> { stop("wrong csv value separator, neither comma nor semi colon")<br>
}<br> <br> nbrow <- NROW(firstcolumn)<br><br> need2Change <- checkMySQLreservedname(zecolname)<br> if(!is.null(need2Change))<br> {<br> newname <- changeName(need2Change)<br> zecolname[zecolname %in% need2Change] <- newname<br>
}else<br> {<br> newname <- "" <br> } <br><br><br> if(print.log) print("dimension")<br> if(print.log) print(nbrow)<br> if(print.log) print(nbcolumn)<br> <br> # can be loaded directly into R<br>
if(nbrow*nbcolumn <= 10*10^6)<br> {<br> if(csvtype == ",") <br> { data <- read.csv(file) <br> }else if(csvtype == ";")<br> { data <- read.csv2(file) <br>
}else<br> { stop("wrong csv value separator, neither comma nor semi colon")<br> }<br> print(head(data))<br> <br> colnames(data) <- zecolname <br><br> dbWriteTable(con, table, data, append=toappend, eol=endofline)<br>
<br> nbrowread <- NROW(data)<br> }else<br> {<br> # must be splitted <br> nbpart <- ceiling(nbrow*nbcolumn/(10*10^6))<br> nbrow2read <- ceiling(nbrow/nbpart)<br> <br> if(csvtype == ",") <br>
{ data <- read.csv(file, nrows=nbrow2read-1, skip=0, header=TRUE) <br> }else if(csvtype == ";")<br> { data <- read.csv2(file, nrows=nbrow2read-1, skip=0, header=TRUE) <br>
}else<br> { stop("wrong csv value separator, neither comma nor semi colon")<br> }<br><br> colnames(data) <- zecolname<br><br><br> <br> dbWriteTable(con, table, data, append=toappend, eol=endofline) <br>
<br> nbrowread <- NROW(data)<br><br><br> for(i in 2:nbpart)<br> {<br> if(csvtype == ",") <br> { data <- read.csv(file, nrows=nbrow2read, skip=(i-1)*nbrow2read, header=FALSE) <br>
}else if(csvtype == ";")<br> { data <- read.csv2(file, nrows=nbrow2read, skip=(i-1)*nbrow2read, header=FALSE) <br> }else<br> { stop("wrong csv value separator, neither comma nor semi colon")<br>
}<br> <br> colnames(data) <- zecolname<br><br><br><br> dbWriteTable(con, table, data, append=TRUE, eol=endofline) <br><br> nbrowread <- nbrowread + NROW(data)<br>
<br> }<br> } <br> c(nbrowread, nbcolumn, newname) <br>}<br><br><br><br><br><br>tryexport <- function(...) <br>{<br> as.character(try(exporttoDB(...)))<br> #!(is.character(try(exporttoDB(...))))<br>
<br>}<br> <br>for (i in 1:length(lfile)) <br>{<br> resExport[i,1] <- lfile[i]<br> cat(lfile[i],"\n")<br> resExport[i,2:4] <- tryexport(lfile[i], mytablename, ifelse(i==1, FALSE, TRUE)) <br>
}<br><br>setwd(dbefore)<br><br>if(print.log) <br>{<br>cat("check database\n")<br>print(dbListFields(con, mytablename))<br>print(dbListTables(con))<br>print(resExport)<br>}<br><br><br>sumdrv <- NULL<br>test.try <- try(sumdrv <- summary(drv))<br>
<br>if( !any(class(test.try) == "try-error" ))<br>{<br> test.try <- try(all_cons <- dbListConnections(drv))<br> if( any(class(test.try) == "try-error" ))<br> traceback()<br> <br> if(length(all_cons) > 0)<br>
{<br> for(i in 1:length(all_cons))<br> {<br> test.try <- try(all_res <- dbListResults(all_cons[[i]]))<br> <br> if(length(all_res) > 0)<br> {<br> for(j in 1:length(all_res))<br>
test.try <- try( dbClearResult(all_res[[j]]) )<br> }<br> test.try <- try( dbDisconnect(all_cons[[i]]) )<br> }<br> }<br><br>test.try <- try( dbUnloadDriver(drv) )<br><br>}<br><br>
<br>#-------------------------------------------------------<br><br>dodescriptive <- TRUE<br>dbname <- "mydb"<br>tablenametodescribe <- "mytable"<br>desciptvar <- "mycolumnA"<br>whereSQLcondition3 <- ""<br>
groupbySQLvar <- "mycolumnB"<br>havingSQLcondition3 <- ""<br>print.log <- TRUE<br>#-------------------------------------------------------<br># launch scripts<br>#open DBI connections<br>beginopen <- proc.time()[3]<br>
if(dodescriptive )<br>{<br> <br>drv <- dbDriver("MySQL")<br>if(print.log) print(summary(drv))<br>print("---")<br>con <- dbConnect(drv, dbname=dbname) #as anonymous<br>if(print.log) print(summary(con))<br>
print("---")<br>}<br>endopen <- proc.time()[3]<br>#compute MCA<br>begindescribe <- proc.time()[3]<br>if(dodescriptive )<br>{<br> <br>interestvar <- paste("AVG(",desciptvar,"), COUNT(",desciptvar, "), ",groupbySQLvar, sep="")<br>
<br>SQLDescribe <- paste("SELECT ", interestvar ,"FROM", tablenametodescribe, sep=" ")<br><br><br>if(nchar(whereSQLcondition3) != 0)<br>{<br> SQLDescribe<- paste(SQLDescribe, "WHERE", whereSQLcondition3, sep=" ")<br>
}<br><br>if(nchar(groupbySQLvar) != 0)<br>{<br> SQLDescribe <- paste(SQLDescribe, "GROUP BY", groupbySQLvar, sep=" ")<br>}<br><br>if(nchar(havingSQLcondition3) != 0)<br>{<br> SQLDescribe <- paste(SQLDescribe, "HAVING", havingSQLcondition3, sep=" ")<br>
}<br><br>print(SQLDescribe )<br><br>#get info on the database<br>options(show.error.messages = FALSE)<br><br>test.try <- try(resSQL <- dbSendQuery(con, SQLDescribe))<br><br>if(class(test.try) == "try-error")<br>
{<br> print("------ traceback")<br> traceback()<br> print("------ message")<br> print(test.try[1]) <br> stop("SQL query failed.")<br>}<br>print("---")<br>print(summary(con))<br>
<br>print("--->>>>")<br>print(resSQL)<br>print(summary(resSQL))<br>print("<<<<---")<br>options(show.error.messages = TRUE)<br><br><br>#if(print.log) print(summary(resSQL))<br><br>
#<br>#resfetched <- fetch(resSQL, n=-1)<br>#print(summary(resfetched))<br>#<br>#datadescribe <- data.frame(resfetched, stringsAsFactors=TRUE)<br>#<br>#if(print.log) print(whatis(datadescribe))<br>#<br># <br># <br> <br>
}<br>enddescribe <- proc.time()[3]<br>#close DBI connections<br>beginclose <- proc.time()[3]<br>if(dodescriptive )<br>{<br> <br>options(show.error.messages = FALSE)<br><br>sumdrv <- NULL<br>test.try <- try(sumdrv <- summary(drv))<br>
<br>if( !any(class(test.try) == "try-error" ))<br>{<br> test.try <- try(all_cons <- dbListConnections(drv))<br> if( any(class(test.try) == "try-error" ))<br> traceback()<br> <br> if(length(all_cons) > 0)<br>
{<br> for(i in 1:length(all_cons))<br> {<br> test.try <- try(all_res <- dbListResults(all_cons[[i]]))<br> <br> if(length(all_res) > 0)<br> {<br> for(j in 1:length(all_res))<br>
test.try <- try( dbClearResult(all_res[[j]]) )<br> }<br> test.try <- try( dbDisconnect(all_cons[[i]]) )<br> }<br> }<br><br>test.try <- try( dbUnloadDriver(drv) )<br><br>}<br><br>
options(show.error.messages = TRUE)<br><br><br><br>}<br>if(print.log) cat("database closing done\n")<br>endclose <- proc.time()[3]<br>timeopen <- significativeNumbers(4)(endopen-beginopen)<br>timedescribe <- significativeNumbers(4)(enddescribe - begindescribe)<br>
timeclose <- significativeNumbers(4)(endclose-beginclose)<br>time <- timeopen +begindescribe +timeclose<br><br><br>---------------------------------------------------------------- essai.csv<br><br>mycolumnA;mycolumnB<br>
1;7<br>1;11<br>1;10<br>1;11<br>1;11<br>1;11<br>1;11<br>1;11<br>1;9<br>1;11<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;11<br>1;11<br>1;10<br>1;11<br>1;5<br>1;11<br>1;11<br>1;5<br>1;5<br>
1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;11<br>1;4<br>1;4<br>1;4<br>1;4<br>1;4<br>1;4<br>1;4<br>1;4<br>1;4<br>1;4<br>1;10<br>1;5<br>1;11<br>1;4<br>1;8<br>1;8<br>1;8<br>1;8<br>1;8<br>
1;8<br>1;8<br>1;8<br>1;9<br>1;4<br>1;10<br>1;10<br>1;8<br>1;8<br>1;8<br>1;8<br>1;10<br>1;10<br>1;7<br>1;5<br>1;10<br>1;10<br>1;8<br>1;3<br>1;8<br>1;8<br>1;11<br>1;10<br>1;10<br>1;8<br>1;11<br>1;10<br>1;9<br>1;11<br>1;9<br>
1;11<br>1;11<br>1;9<br>1;9<br>1;2<br>1;9<br>1;9<br>1;11<br>1;11<br>1;11<br>1;6<br>1;11<br>1;9<br>1;9<br>1;7<br>1;4<br>1;10<br>1;10<br>1;8<br>1;11<br>1;2<br>1;9<br>1;9<br>1;11<br>1;9<br>1;9<br>1;11<br>1;7<br>1;11<br>1;11<br>
1;8<br>1;11<br>1;8<br>1;7<br>1;8<br>1;11<br>1;9<br>1;11<br>1;1<br>1;11<br>1;11<br>1;7<br>1;11<br>1;10<br>1;10<br>0;8<br>0;10<br>0;6<br>1;10<br>0;10<br>1;10<br>0;10<br>1;10<br>0;10<br>1;10<br>0;10<br>1;10<br>0;10<br>1;10<br>
1;10<br>0;10<br>1;10<br>0;10<br>1;10<br>0;10<br>1;10<br>0;10<br>1;10<br>1;10<br>0;10<br>0;10<br>1;10<br>0;10<br>1;10<br>0;8<br>0;8<br>0;7<br>0;7<br>0;7<br>0;6<br>0;6<br>0;6<br>0;10<br>0;10<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>
0;5<br>1;5<br>1;5<br>0;5<br>1;5<br>1;5<br>1;5<br>0;5<br>1;5<br>1;5<br>0;5<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;3<br>0;3<br>0;3<br>0;3<br>0;2<br>0;2<br>0;2<br>0;2<br>0;9<br>0;9<br>0;10<br>0;10<br>0;1<br>
0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;5<br>1;10<br>1;7<br>1;7<br>1;7<br>1;7<br>1;7<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>0;11<br>1;8<br>1;4<br>1;4<br>1;4<br>1;4<br>0;11<br>1;11<br>
1;11<br>1;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>1;8<br>1;8<br>1;8<br>0;8<br>0;8<br>0;8<br>0;8<br>
0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>1;8<br>1;8<br>1;8<br>1;8<br>1;8<br>1;8<br>1;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>
0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>1;5<br>0;5<br>0;5<br>
0;5<br>0;5<br>0;5<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;4<br>0;6<br>0;4<br>0;8<br>0;4<br>0;4<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;8<br>0;8<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>
0;8<br>0;7<br>0;8<br>0;6<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>1;9<br>0;11<br>0;11<br>0;5<br>
0;11<br>0;11<br>0;11<br>0;11<br>0;11<br>0;11<br>0;11<br>1;11<br>0;11<br>0;10<br>1;5<br>0;2<br>0;2<br>1;3<br>0;12<br>0;12<br>1;3<br>1;3<br>1;3<br>1;2<br>1;2<br>1;2<br>0;7<br>0;7<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>
0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>
0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>1;6<br>
1;6<br>1;6<br>0;6<br>0;6<br>1;6<br>1;6<br>0;6<br>1;6<br>0;6<br>1;6<br>0;6<br>0;6<br>0;6<br>0;6<br>1;6<br>0;6<br>0;6<br>1;6<br>1;6<br>0;6<br>0;6<br>1;6<br>0;6<br>1;6<br>0;6<br>1;6<br>1;6<br>1;6<br>0;6<br>0;6<br>1;6<br>0;6<br>
1;6<br>1;6<br>1;6<br>0;6<br>0;6<br>1;6<br>1;6<br>1;6<br>1;6<br>0;6<br>1;6<br>0;6<br>1;6<br>1;6<br>1;6<br>0;6<br>0;6<br>1;6<br>0;6<br>0;6<br>1;6<br>1;6<br>1;6<br>0;6<br>1;6<br>0;6<br>0;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>
1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>
1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>0;6<br>1;6<br>
1;6<br>1;6<br>0;6<br>0;6<br>1;6<br>1;6<br>1;6<br>0;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;8<br>0;8<br>1;8<br>0;8<br>1;8<br>1;8<br>1;8<br>1;8<br>1;7<br>0;8<br>0;7<br>0;9<br>1;7<br>1;7<br>1;7<br>1;11<br>1;11<br>
1;11<br>1;11<br>1;8<br>1;8<br>1;8<br>1;8<br>1;8<br>1;8<br>1;8<br>1;8<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;10<br>0;9<br>0;9<br>0;6<br>0;7<br>0;7<br>0;7<br>0;7<br>0;5<br>0;7<br>0;7<br>0;7<br>0;7<br>
0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;11<br>0;8<br>0;8<br>0;8<br>0;8<br>0;10<br>0;6<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>
0;5<br>0;5<br>0;5<br>0;8<br>0;11<br>0;8<br>0;8<br>0;9<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>1;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>
0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>
0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>
0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>
0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>
0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;7<br>0;5<br>0;9<br>0;7<br>0;11<br>0;10<br>0;7<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>
0;6<br>0;6<br>0;6<br>0;8<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>1;9<br>0;8<br>0;8<br>0;9<br>0;7<br>0;7<br>0;6<br>0;8<br>0;8<br>0;8<br>0;6<br>0;6<br>
0;6<br>0;6<br>0;8<br>0;6<br>0;6<br>0;9<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>1;3<br>
0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>
0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>
0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>
0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>
0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;11<br>0;9<br>0;6<br>0;6<br>0;7<br>0;6<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;9<br>0;9<br>0;9<br>0;9<br>0;11<br>0;11<br>0;3<br>
0;3<br>0;3<br>0;3<br>1;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>
0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;6<br>0;9<br>0;6<br>0;6<br>0;8<br>0;8<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>
0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>
0;3<br>1;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;5<br>0;5<br>0;5<br>0;6<br>0;7<br>0;7<br>0;7<br>0;7<br>0;6<br>0;5<br>0;5<br>0;10<br>0;7<br>0;7<br>0;7<br>0;10<br>0;6<br>0;10<br>0;3<br>0;10<br>0;3<br>0;4<br>0;3<br>0;3<br>0;7<br>
0;3<br>0;3<br>0;9<br>0;7<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;7<br>0;7<br>0;8<br>0;6<br>0;10<br>0;10<br>0;8<br>0;7<br>0;8<br>0;2<br>0;5<br>0;8<br>0;7<br>0;8<br>0;6<br>0;6<br>
0;7<br>0;8<br>0;7<br>0;7<br>0;10<br>0;5<br>0;6<br>0;7<br>0;7<br>0;6<br>0;7<br>0;7<br>0;7<br>0;6<br>0;7<br>0;6<br>0;6<br>0;7<br>0;7<br>0;10<br>0;10<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;7<br>0;7<br>0;7<br>
0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;7<br>0;7<br>0;10<br>0;6<br>0;8<br>0;8<br>0;8<br>0;8<br>
0;8<br>0;8<br>0;8<br>0;7<br>0;8<br>0;7<br>0;5<br>0;7<br>0;7<br>0;5<br>0;5<br>0;3<br>0;7<br>0;7<br>0;6<br>0;7<br>0;6<br>0;9<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;5<br>0;5<br>0;5<br>0;5<br>0;2<br>0;10<br>0;10<br>0;10<br>
0;10<br>0;10<br>0;10<br>0;10<br>0;10<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;8<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;2<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;6<br>0;5<br>0;5<br>0;5<br>0;5<br>
0;5<br>0;5<br>0;5<br>0;5<br>0;10<br>0;5<br>0;5<br>0;5<br>0;5<br>0;7<br>0;7<br>0;7<br>0;7<br>0;8<br>0;9<br>0;11<br>0;9<br>0;9<br>0;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;6<br>0;6<br>0;2<br>0;6<br>0;6<br>0;2<br>0;2<br>0;2<br>0;2<br>
0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;6<br>0;10<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;6<br>0;6<br>0;7<br>0;10<br>0;7<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;9<br>0;8<br>0;9<br>0;7<br>
0;9<br>0;10<br>0;10<br>0;6<br>0;8<br>0;11<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;6<br>0;5<br>0;6<br>0;5<br>0;6<br>
0;6<br>0;6<br>0;6<br>1;10<br>1;9<br>0;10<br>0;6<br>1;11<br>1;9<br>1;6<br>0;6<br>1;6<br>0;7<br>1;7<br>1;7<br>1;9<br>1;6<br>1;6<br>1;10<br>1;6<br>1;6<br>1;11<br>1;6<br>1;6<br>0;7<br>1;6<br>0;5<br>0;3<br>0;6<br>1;6<br>1;6<br>
1;6<br>1;6<br>1;6<br>1;6<br>0;6<br>1;6<br>1;1<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>1;6<br>0;6<br>1;6<br>0;6<br>1;6<br>0;6<br>1;6<br>1;6<br>0;5<br>0;7<br>0;10<br>0;5<br>1;1<br>1;1<br>1;1<br>1;1<br>1;1<br>1;1<br>
1;1<br>1;1<br>1;1<br>1;1<br>1;1<br>1;1<br>1;1<br>1;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;11<br>0;2<br>1;11<br>1;11<br>0;3<br>1;5<br>1;5<br>1;3<br>1;3<br>1;3<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>
0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>1;2<br>1;2<br>1;2<br>1;2<br>1;2<br>0;2<br>0;1<br>0;1<br>
0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>1;11<br>1;11<br>1;11<br>1;11<br>1;11<br>1;11<br>1;8<br>1;8<br>1;8<br>1;8<br>1;11<br>1;11<br>1;11<br>1;11<br>1;11<br>1;11<br>1;11<br>1;11<br>1;11<br>1;11<br>1;8<br>1;11<br>1;11<br>0;1<br>
0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>1;11<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;9<br>0;11<br>0;11<br>0;11<br>0;7<br>1;7<br>0;7<br>0;7<br>0;7<br>0;7<br>0;5<br>0;5<br>
0;5<br>0;9<br>0;5<br>0;9<br>0;5<br>0;5<br>0;4<br>0;11<br>0;6<br>0;8<br>0;8<br>0;4<br>0;4<br>0;4<br>0;11<br>0;11<br>0;11<br>0;8<br>0;8<br>0;11<br>0;3<br>0;11<br>0;11<br>0;2<br>0;2<br>0;2<br>0;9<br>0;11<br>0;2<br>0;2<br>0;1<br>
0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>1;1<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>
1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>
0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>1;5<br>0;5<br>1;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>0;5<br>
0;5<br>0;5<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;5<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>0;1<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>
1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;2<br>1;2<br>1;2<br>1;6<br>0;7<br>0;6<br>1;6<br>1;6<br>0;6<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>0;5<br>1;5<br>1;5<br>1;5<br>
1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>
1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>0;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>0;5<br>1;5<br>0;5<br>1;5<br>
1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>0;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>1;5<br>
1;5<br>1;5<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;4<br>0;7<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>
0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;3<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>1;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>
0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>
0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>
0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>0;2<br>
0;2<br>0;2<br>0;2<br>0;2<br><br><br>-- <br>Christophe DUTANG<br>Ph. D. student at ISFA<br>