<div dir="ltr">Hi Benoit,<div><br></div><div>   the upshot is that in 32-bits one should probably model a chess board bit mask with three or four SmallIntegers, for example 16 squares per integer, but in 64-bits one can use two SmallIntegers, with 32 squares per integer.  You could construct a family of class that hide the representational details.  A ChessBoardBitMap abstract class with subclasses for the 4 32-bit SmallIntegers representation, the 2 64-bit SmallIntegers representation, and the polymorphic single integer that will be either a SmallInteger or a LargePositiveInteger, depending on the board and the word size of the system.  You can then play with the representation as your program evolves and as e.g. the Sista optimizer evolves, which should be abel to optimize away some of the overhead of using this "boxed" ChessBoardBitMap approach.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 10, 2017 at 4:21 AM, Benoit St-Jean via Pharo-dev <span dir="ltr"><<a href="mailto:pharo-dev@lists.pharo.org" target="_blank">pharo-dev@lists.pharo.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br><br>---------- Forwarded message ----------<br>From: Benoit St-Jean <<a href="mailto:bstjean@yahoo.com">bstjean@yahoo.com</a>><br>To: "Clément Bera" <<a href="mailto:bera.clement@gmail.com">bera.clement@gmail.com</a>>, Pharo Development List <<a href="mailto:pharo-dev@lists.pharo.org">pharo-dev@lists.pharo.org</a>><br>Cc: The General-purpose Squeak Developers List <<a href="mailto:squeak-dev@lists.squeakfoundation.org">squeak-dev@lists.squeakfoundation.org</a>><br>Date: Fri, 10 Feb 2017 12:21:33 +0000 (UTC)<br>Subject: Re: [Pharo-dev] Integer arithmetic and bit counting performance in Squeak and Pharo<br><div><div style="color:#000;background-color:#fff;font-family:times new roman,new york,times,serif;font-size:16px"><div id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63527">Oh!  Many thanks for all the details!  I thought about special selectors and remembered that #bitAnd: and #bitOr: were those special kind of "beasts" but I falsely assumed that #bitXor: was also a special selector... :(  I should have looked at the code!<br></div><div id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63600"><br></div><div dir="ltr" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63601">So that also explains the "strange" behavior of the 64bit image.  Lots of the tests in the 32bit image fell into the LargeInteger "range" and then, executing the same code on the 64bit image, those numbers suddenly became considered SmallInteger...  That explains it all and why some operations "suddenly" became so fast for no apparent reason !!!</div><div dir="ltr" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63688"><br></div><div dir="ltr" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63803">Now, just for my personal curiosity, what is going to be the impact of a 64bit VM on such code? (Unfortunately, I am on Windows so I will have to wait...) ?</div><div dir="ltr" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63861"><br></div><div dir="ltr" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63865">P.S. I should have persevered in my google searches as I just came across this *excellent* post :  <a href="https://clementbera.wordpress.com/2014/08/12/arithmetic-inlined-and-special-selectors/" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63886" class="m_7077073579195541968enhancr2_1619c6d5-5bcf-12c4-2c7c-f75404b09bc0" target="_blank">Arithmetic, inlined and special selectors</a></div><div dir="ltr" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63894"><br></div><div dir="ltr" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63895">:)</div><div dir="ltr" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63897"><br></div><div dir="ltr" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63896">Thanks a lot!<br></div><div><br></div><div id="m_7077073579195541968enhancr2_1619c6d5-5bcf-12c4-2c7c-f75404b09bc0" class="m_7077073579195541968yahoo-link-enhancr-card m_7077073579195541968ymail-preserve-class m_7077073579195541968ymail-preserve-style" style="max-width:400px;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif" dir="ltr"> <a href="https://clementbera.wordpress.com/2014/08/12/arithmetic-inlined-and-special-selectors/" style="text-decoration:none!important;color:#000!important" class="m_7077073579195541968yahoo-enhancr-cardlink" rel="noreferrer" target="_blank"> <table class="m_7077073579195541968card-wrapper m_7077073579195541968yahoo-ignore-table" style="max-width:400px" cellspacing="0" cellpadding="0" border="0"> <tbody><tr> <td width="400"> <table class="m_7077073579195541968card m_7077073579195541968yahoo-ignore-table" style="max-width:400px" width="100%" cellspacing="0" cellpadding="0" border="0"> <tbody><tr> <td class="m_7077073579195541968card-primary-image-cell" style="background:#000 url('https://ci5.googleusercontent.com/proxy/Asrk2CptQ3zmWczyoMAxVkVJDDMRXmELKfm42erUkiMZE6WdUfau1WoIMHVT1qbzonuHwJp2UreqN6s1E4Dg_inSQDWu-ER3dw1xNrNqHg-hUZfNlNrMndU8-tZAH3eDQz5HVN-URZxXExZuKo-gtDszy1ljcu-qTVPwo0TRhgQrnNz6vwR5DZhyVwfN5HvCWW_CN7I59r9wwIuWCs-1dr6altmkOFnIgLc0319s6_jHBFB9PWl5nva7GMCNQg=s0-d-e1-ft#https://s.yimg.com/vv//api/res/1.2/_0rdgOdOxSWb0Cf03UtRUA--/YXBwaWQ9bWFpbDtmaT1maWxsO2g9MjAwO3c9NDAw/https://clementbera.files.wordpress.com/2014/06/atcache.png.cf.jpg') no-repeat center center;background-size:cover;height:200px" valign="top" bgcolor="#000000" background="https://s.yimg.com/vv//api/res/1.2/_0rdgOdOxSWb0Cf03UtRUA--/YXBwaWQ9bWFpbDtmaT1maWxsO2g9MjAwO3c9NDAw/https://clementbera.files.wordpress.com/2014/06/atcache.png.cf.jpg">  <table class="m_7077073579195541968yahoo-ignore-table" valign="top" style="width:100%" cellspacing="0" cellpadding="0" border="0"> <tbody><tr> <td style="background:transparent url('https://ci6.googleusercontent.com/proxy/Or0PpNz8Q2N-T77lb2rdWKcTmD4Aucmk2Ee_LS8DyP6g6BDF3rwx4OyZl6lsUYsZqw8AQBiEM0n0IXQQ0XX4vUAoRYgzG6vu_JFg3P_OaiyHSXs0y-U=s0-d-e1-ft#https://s.yimg.com/nq/storm/assets/enhancrV2/12/overlay-tile.png') repeat left top;height:200px" valign="top" bgcolor="transparent" background="https://s.yimg.com/nq/storm/assets/enhancrV2/12/overlay-tile.png">  <table class="m_7077073579195541968yahoo-ignore-table" style="width:100%;height:185px;min-height:185px" height="185"> <tbody><tr> <td class="m_7077073579195541968card-richInfo2" style="text-align:left;text-align:left;padding:15px 0 0 15px;vertical-align:top">  </td> <td class="m_7077073579195541968card-actions" style="text-align:right;padding:15px 15px 0 0;vertical-align:top"> <div class="m_7077073579195541968card-share-container"></div> </td> </tr> </tbody></table>  </td> </tr> </tbody></table> </td> </tr> <tr> <td> <table class="m_7077073579195541968card-info m_7077073579195541968yahoo-ignore-table" style="background:#fff;width:95%;max-width:380px;border:1px solid #e0e4e9;border-bottom:3px solid #000000;margin-left:auto;margin-right:auto" cellspacing="0" cellpadding="0" border="0" align="center"> <tbody><tr> <td style="background-color:#ffffff;padding:16px 0 16px 12px;vertical-align:top">  </td> <td style="vertical-align:middle;padding:16px 12px;width:99%"> <h2 class="m_7077073579195541968card-title" style="font-size:16px;line-height:19px;margin:0 0 4px 0;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;word-break:break-word">Arithmetic, inlined and special selectors</h2>  <div class="m_7077073579195541968card-description" style="font-size:11px;line-height:15px;color:#999;word-break:break-word">Today we are going to discuss how message sends are dispatched in the VM and/or compiled in the image for arithm...</div> </td> <td style="text-align:right;padding:16px 12px 16px 0">  </td> </tr> </tbody></table> </td> </tr> </tbody></table> </td> </tr> </tbody></table> </a></div><div><br></div><div id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63456"><span></span></div><div id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63457"> </div><div class="m_7077073579195541968signature" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63458">----------------- <br>Benoît St-Jean <br>Yahoo! Messenger: bstjean
 <br>Twitter: @BenLeChialeux
 <br>Pinterest: benoitstjean
 <br>Instagram: Chef_Benito<br>IRC: lamneth
 <br>Blogue: <a href="http://endormitoire.wordpress.com" target="_blank">endormitoire.wordpress.com</a>
 <br>"A standpoint is an intellectual horizon of radius zero".  (A. Einstein)</div><div class="m_7077073579195541968qtdSeparateBR"><br><br></div><div class="m_7077073579195541968yahoo_quoted" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63643" style="display:block">  <div style="font-family:times new roman,new york,times,serif;font-size:16px" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63642"> <div style="font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:16px" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63641"> <div dir="ltr" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63640"> <font size="2" face="Arial"> <hr size="1"> <b><span style="font-weight:bold">From:</span></b> Clément Bera <<a href="mailto:bera.clement@gmail.com" target="_blank">bera.clement@gmail.com</a>><br> <b><span style="font-weight:bold">To:</span></b> Benoit St-Jean <<a href="mailto:bstjean@yahoo.com" target="_blank">bstjean@yahoo.com</a>>; Pharo Development List <<a href="mailto:pharo-dev@lists.pharo.org" target="_blank">pharo-dev@lists.pharo.org</a>> <br><b><span style="font-weight:bold">Cc:</span></b> The General-purpose Squeak Developers List <<a href="mailto:squeak-dev@lists.squeakfoundation.org" target="_blank">squeak-dev@lists.<wbr>squeakfoundation.org</a>><br> <b><span style="font-weight:bold">Sent:</span></b> Friday, February 10, 2017 5:14 AM<br> <b><span style="font-weight:bold">Subject:</span></b> Re: [Pharo-dev] Integer arithmetic and bit counting performance in Squeak and Pharo<br> </font> </div> <div class="m_7077073579195541968y_msg_container" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63649"><br><div id="m_7077073579195541968yiv2150089983"><div id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63648"><div dir="ltr" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63647">Hi,<div><br clear="none"></div><div>This is a lovely post. Thanks for posting about Smalltalk / Pharo / Squeak.</div><div><br clear="none"></div><div id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63646"><ol style="padding:0px 0px 0px 35px;margin:0px;color:rgb(51,51,51);font-family:verdana;font-size:12px" id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63645"><li style="list-style:decimal outside;margin:7px 0px 8px 10px;padding:0px">Why <strong>exactly</strong> does the override work (in 32bit images)?</li><li style="list-style:decimal outside;margin:7px 0px 8px 10px;padding:0px">What changed so that things are different in Squeak 5.1 64bit image (overrides partially work)?</li></ol><div id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63668">If I am correct your questions are exclusively for bitOr: and bitAnd:. I don't know what you are aware of and what you're not aware of, hence I am going to give you some details on how bitAnd: is executed (bitOr: is done exactly the same way), and hopefully there will be something you don't know yet that should help you understand what's going on. </div></div><div><b><u><br clear="none"></u></b></div><div><b><u>Execution of bitAnd:</u></b></div><div><br clear="none"></div><div id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63652">bitAnd: a special selector. If you run <font face="monospace, monospace">Smalltalk specialSelectors</font> you get this array:  <font face="monospace, monospace">#(#+ 1 #- 1 #< 1 #> 1 #<= 1 #>= 1 #= 1 #~= 1 #* 1 #/ 1 #\\ 1 #@ 1 #bitShift: 1 #// 1 #bitAnd: 1 #bitOr: 1 #at: 1 #at:put: 2 #size 0 #next 0 #nextPut: 1 #atEnd 0 #== 1 #class 0 #blockCopy: 1 #value 0 #value: 1 #do: 1 #new 0 #new: 1 #x 0 #y 0)</font> which includes bitAnd: .</div><div><br clear="none"></div><div>Special selectors are encoded in the bytecode differently to save memory, so they can be executed differently without inducing overhead. In Cog, bitAnd: is executed differently using type-prediction. </div><div><br clear="none"></div><div>In the Stack Interpreter, the execution of bitAnd: is done as follows:</div><div><font face="monospace, monospace">    If both operands are SmallIntegers, </font></div><div id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63655"><font face="monospace, monospace">        push the bitAnd: value of the 2 SmallIntegers</font></div><div><font face="monospace, monospace">    else </font></div><div><font face="monospace, monospace">        Try the primitive BitAnd for SmallIntegers (14)</font></div><div><font face="monospace, monospace">        on success</font></div><div><font face="monospace, monospace">            push the result</font></div><div><font face="monospace, monospace">        on failure</font></div><div><font face="monospace, monospace">            perform the send.</font></div><div><font face="verdana" color="#333333"><br clear="none"></font></div><div><font face="arial, helvetica, sans-serif" color="#333333">In the JIT, bitAnd: sends are compiled differently that normal send, the compilation logic is as follows:</font></div><div id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63658"><font color="#333333"><font face="arial, helvetica, sans-serif">  </font><font face="monospace, monospace">  If both operands are SmallInteger literals</font></font></div><div><font face="monospace, monospace" color="#333333">        compute the result during compilation and use this value</font></div><div><font face="monospace, monospace" color="#333333">    else</font></div><div><font face="monospace, monospace" color="#333333">        If one of the 2 operands is a SmallInteger literal</font></div><div><font face="monospace, monospace" color="#333333">            generate 2 paths, a quick inlined path testing at runtime that the other operand is a SmallInteger, and if so, Ands the operands and use that result, else use the slow path performing a send</font></div><div><font face="monospace, monospace" color="#333333">        else</font></div><div><font face="monospace, monospace" color="#333333">            generate a normal send</font></div><div id="m_7077073579195541968yui_3_16_0_ym19_1_1486701322869_63660"><font face="monospace, monospace" color="#333333"><br clear="none"></font></div><div><font face="arial, helvetica, sans-serif" color="#333333"><b><u>Primitives</u></b></font></div><div><font face="arial, helvetica, sans-serif" color="#333333"><b><u><br clear="none"></u></b></font></div><div><font face="arial, helvetica, sans-serif" color="#333333">primitive 14 -> Works for SmallIntegers and LargePositiveInteger fitting in an unsigned machine word. (Slower than direct SmallInteger bitAnd performed by the special selector)</font></div><div>primitive 34 -> Works for SmallIntegers and LargePositiveInteger fitting in an unsigned int64. (Slower than primitive 14 in 32 bits but covering more cases, equivalent in 64 bits)</div><div>primDigitBitAnd (in Integer) -> Works for any integer. (Slower than the primitive 14 and 34)</div><div><font face="monospace, monospace" color="#333333"><br clear="none"></font></div><b><u>SmallInteger encoding</u></b><div><b><u><br clear="none"></u></b><div><div>In 32 bits, SmallIntegers are signed 31bits integer.</div><div>In 64 bits, SmallIntegers are signed 61 bits integer.</div><div><font face="arial, helvetica, sans-serif" color="#333333"><br clear="none"></font></div><div><font face="arial, helvetica, sans-serif" color="#333333"><b><u>Discussion</u></b></font></div><div><font face="arial, helvetica, sans-serif" color="#333333"><br clear="none"></font></div><div><font face="arial, helvetica, sans-serif" color="#333333">Let's make some assertions based on previous information:</font></div><div><font face="arial, helvetica, sans-serif" color="#333333"><br clear="none"></font></div><div><font face="arial, helvetica, sans-serif" color="#333333">1)</font><span style="color:rgb(51,51,51);font-family:arial,helvetica,sans-serif"> If you have the exact same bitAnd: implementation for #bitAnd: and #bitAnd2:, #bitAnd2: is slower because it is not a special selector.</span></div><div><span style="color:rgb(51,51,51);font-family:arial,helvetica,sans-serif"><br clear="none"></span></div><div>2) Still with the exact same bitAnd: implementation, using the JIT, things like that:</div><font face="monospace, monospace">16r1 bitAnd: 1. "1 bits"<br clear="none">16r2 bitAnd: 2. "2 bit"<br clear="none">16r4 bitAnd: 4. "3 bit"<br clear="none">16r8 bitAnd: 3. "4 bit"</font><div><font face="arial, helvetica, sans-serif" color="#333333">Are bitAnd: operations between SmallInteger constants and the result is unused. Hence this whole portion of code does not generate any native instructions.</font></div><div><font face="arial, helvetica, sans-serif" color="#333333">On the other hand, things like that:</font></div><font face="monospace, monospace">16r1 bitAnd2: 1. "1 bits"<br clear="none">16r2 bitAnd2: 2. "2 bit"<br clear="none">16r4 bitAnd2: 4. "3 bit"<br clear="none">16r8 bitAnd2: 3. "4 bit"</font><div><span style="color:rgb(51,51,51);font-family:arial,helvetica,sans-serif">Are sends, generating multiple native instructions including calls.</span><br clear="none"></div><div><span style="color:rgb(51,51,51);font-family:arial,helvetica,sans-serif"><br clear="none"></span></div><div>3) Because of the SmallInteger encoding,</div><div><font face="monospace, monospace">16r200000000000000 bitAnd: 98490667780264321.<span class="m_7077073579195541968yiv2150089983gmail-Apple-tab-span" style="white-space:pre-wrap">   </span>"58 bit"</font><br clear="none"></div><div>is compiled by the JIT to nothing in 64 bits but to a send in 32 bits (the JIT can't solve LargeInteger arithmetic at compilation time).</div><div><br clear="none"></div><div>4) primitive 34 provides some speed-up over primitive 14 in 32 bits, covering bitAnd: operations from unsigned 33 bits integer to unsigned 64 bits integer, but makes no difference in 64 bits. In 64bits all the cases covered by primitive 34 are covered by primitive 14, so it should even slow down things.</div><div><br clear="none"></div><div><b><u>So...</u></b></div><br clear="none">Does this answer your questions ?<br clear="none">Don't hesitate to ask further questions. </div><div><br clear="none"></div><div>If you want more details, I wrote something about special selectors a while ago: <a rel="nofollow" shape="rect" href="https://clementbera.wordpress.com/2014/08/12/arithmetic-inlined-and-special-selectors/" target="_blank">https://clementbera.<wbr>wordpress.com/2014/08/12/<wbr>arithmetic-inlined-and-<wbr>special-selectors/</a> .</div><div><br clear="none"></div><div>Best,</div><div><br clear="none"></div><div>Clement</div><div><br clear="none"></div><div>PS1: If I'm correct, you referenced my blog a couple times, thank you for doing this, I really appreciate that.</div><div>PS2: I enjoy chess myself, so if you have an open-source/MIT working algorithm at some point please send it to me, I will play against the AI and look at the code.</div><div><br clear="none"></div><div><br clear="none"><div class="m_7077073579195541968yiv2150089983gmail_extra"><div class="m_7077073579195541968yiv2150089983gmail_quote">On Fri, Feb 10, 2017 at 8:18 AM, Benoit St-Jean via Pharo-dev <span dir="ltr"><<a rel="nofollow" shape="rect" href="mailto:pharo-dev@lists.pharo.org" target="_blank">pharo-dev@lists.pharo.org</a>></span> wrote:<br clear="none"><div class="m_7077073579195541968yiv2150089983yqt2116815702" id="m_7077073579195541968yiv2150089983yqt33955"><blockquote class="m_7077073579195541968yiv2150089983gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br clear="none"><br clear="none">---------- Forwarded message ----------<br clear="none">From: Benoit St-Jean <<a rel="nofollow" shape="rect" href="mailto:bstjean@yahoo.com" target="_blank">bstjean@yahoo.com</a>><br clear="none">To: The General-purpose Squeak Developers List <<a rel="nofollow" shape="rect" href="mailto:squeak-dev@lists.squeakfoundation.org" target="_blank">squeak-dev@lists. squeakfoundation.org</a>>, "<a rel="nofollow" shape="rect" href="mailto:pharo-dev@lists.pharo.org" target="_blank">pharo-dev@lists.pharo.org</a>" <<a rel="nofollow" shape="rect" href="mailto:pharo-dev@lists.pharo.org" target="_blank">pharo-dev@lists.pharo.org</a>><br clear="none">Cc: <br clear="none">Date: Fri, 10 Feb 2017 07:18:02 +0000 (UTC)<br clear="none">Subject: Integer arithmetic and bit counting performance in Squeak and Pharo<br clear="none"><div><div style="color:rgb(0,0,0);background-color:rgb(255,255,255)"><div dir="ltr" id="m_7077073579195541968yiv2150089983gmail-m_-2759988881068770192m_6321411534766108408yui_3_16_0_ym19_1_1486701322869_29126"><span id="m_7077073579195541968yiv2150089983gmail-m_-2759988881068770192m_6321411534766108408yui_3_16_0_ym19_1_1486701322869_29186">For those interested in performance of bit operations and integer arithmetic in Squeak and Pharo :<br id="m_7077073579195541968yiv2150089983gmail-m_-2759988881068770192m_6321411534766108408yui_3_16_0_ym19_1_1486701322869_29180" clear="none"><br id="m_7077073579195541968yiv2150089983gmail-m_-2759988881068770192m_6321411534766108408yui_3_16_0_ym19_1_1486701322869_29181" clear="none">Bit operations in general : <a rel="nofollow" shape="rect" href="https://endormitoire.wordpress.com/2017/02/10/bits-and-pieces/" target="_blank">https://endormitoire.wordpress .com/2017/02/10/bits-and- pieces/</a><br id="m_7077073579195541968yiv2150089983gmail-m_-2759988881068770192m_6321411534766108408yui_3_16_0_ym19_1_1486701322869_29182" clear="none"><br id="m_7077073579195541968yiv2150089983gmail-m_-2759988881068770192m_6321411534766108408yui_3_16_0_ym19_1_1486701322869_29183" clear="none">Bit counting algorithms : <a rel="nofollow" shape="rect" href="https://endormitoire.wordpress.com/2017/02/10/1001001-sos/" target="_blank">https://endormitoire.wordpress .com/2017/02/10/1001001-sos/</a><br id="m_7077073579195541968yiv2150089983gmail-m_-2759988881068770192m_6321411534766108408yui_3_16_0_ym19_1_1486701322869_29184" clear="none"><br id="m_7077073579195541968yiv2150089983gmail-m_-2759988881068770192m_6321411534766108408yui_3_16_0_ym19_1_1486701322869_29185" clear="none">Some questions, some results, some answers...</span></div><div id="m_7077073579195541968yiv2150089983gmail-m_-2759988881068770192m_6321411534766108408yui_3_16_0_ym19_1_1486701322869_29125"> </div><div class="m_7077073579195541968yiv2150089983gmail-m_-2759988881068770192m_6321411534766108408signature" id="m_7077073579195541968yiv2150089983gmail-m_-2759988881068770192m_6321411534766108408yui_3_16_0_ym19_1_1486701322869_29001">----------------- <br clear="none">Benoît St-Jean <br clear="none">Yahoo! Messenger: bstjean
 <br clear="none">Twitter: @BenLeChialeux
 <br clear="none">Pinterest: benoitstjean
 <br clear="none">Instagram: Chef_Benito<br clear="none">IRC: lamneth
 <br clear="none">Blogue: <a rel="nofollow" shape="rect" href="http://endormitoire.wordpress.com/" target="_blank">endormitoire.wordpress.com</a>
 <br clear="none">"A standpoint is an intellectual horizon of radius zero".  (A. Einstein)</div></div></div><br clear="none"></blockquote></div></div><br clear="none"></div></div></div></div></div></div><br><br></div> </div> </div>  </div></div></div><br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div>
</div>