--------------000406090707010202050202
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Bill Kelly wrote:
>
> From: "Lionel Bouton" <lionel-subscription / bouton.name>
>>
>> Here's a 157_benchmark_2.rb which benchs on several point 
>> distributions (square, disk, circle and gaussian) and my code adapted 
>> to the benchmark (the convex hull was done outside of encircle so it 
>> wasn't active for the benchmark).
>
> Neat!  :)

Oups : the 2D Gaussian was the same as the circle one (stupid me)... The 
gradient walking couldn't possibly be so slow on such a distribution :-)

I updated my submission with :
- a new heuristic for the initial step,
- an optimized step ratio for the gradient algorithm,
- a bug fix (it didn't run out of the benchmark).

Lionel

--------------000406090707010202050202
Content-Type: text/plain;
 name57_benchmark_2.rb"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename57_benchmark_2.rb"

DQpyZXF1aXJlICdiZW5jaG1hcmsnDQoNCm1vZHVsZSBQSElMSVBQIDsgZXZhbChGaWxlLnJl
YWQoJzE1N19waGlsaXBwX2hvZm1hbm4ucmInKSkgIDsgIGVuZA0KbW9kdWxlIExJT05FTCA7
ICBldmFsKEZpbGUucmVhZCgnMTU3X2xpb25lbF9ib3V0b24ucmInKSkgICAgOyAgZW5kDQpt
b2R1bGUgVEhPTUFTIDsgIGV2YWwoRmlsZS5yZWFkKCcxNTdfdGhvbWFzX21sLnJiJykpICAg
ICAgICA7ICBlbmQNCm1vZHVsZSBET1VHIDsgICAgZXZhbChGaWxlLnJlYWQoJzE1N19kb3Vn
X3NlaWZlcnQucmInKSkgICAgIDsgIGVuZA0KbW9kdWxlIEZSQU5LIDsgICBldmFsKEZpbGUu
cmVhZCgnMTU3X2ZyYW5rX2Zpc2NoZXIucmInKSkgICAgOyAgZW5kDQptb2R1bGUgSlVTVElO
IDsgIGV2YWwoRmlsZS5yZWFkKCcxNTdfanVzdGluX2V0aGllci5yYicpKSAgICA7ICBlbmQN
Cm1vZHVsZSBCSUxMIDsgICAgZXZhbChGaWxlLnJlYWQoJzE1N19iaWxsX2tlbGx5LnJiJykp
ICAgICAgIDsgIGVuZA0KDQpuYW1lc3BhY2VzID0gWw0KIyBUSE9NQVMsICAgIyBwb2ludHMu
Y29tYmluYXRpb24gPz8NCiAgRlJBTkssDQogIEpVU1RJTiwNCiAgRE9VRywNCiAgUEhJTElQ
UCwNCiAgTElPTkVMLA0KICBCSUxMLA0KICBdDQoNCiMgU29tZSBmb2xrcyBpbXBsZW1lbnRl
ZCBnZW5lcmF0ZV9zYW1wbGVzIGRpZmZlcmVudGx5LA0KIyBidXQgd2Ugd2FudCB0byBydW4g
YWxsIHNvbHV0aW9ucyBvbiB0aGUgc2FtZSBkYXRhc2V0Lg0KIyBXZSdsbCB1c2UgYW4gaW1w
bGVtZW50YXRpb24gZXF1aXZhbGVudCB0byB0aGF0DQojIHByb3ZpZGVkIGJ5IHRoZSBxdWl6
IGF1dGhvcjogW3JhbmQsIHJhbmRdDQoNCm51bV9ydW5zID0gMTANCm51bV9zYW1wbGVzID0g
MTAwMA0KDQpkZWYgZ2VuZXJhdGVfc2FtcGxlcyhtb2QsIGNvb3JkcykNCiAgY29vcmRzLm1h
cCB7fHh5fCBtb2Q6OlBvaW50Lm5ldygqeHkpfQ0KZW5kDQoNCmRlZiBwcmVwYXJlX3BvaW50
c2V0cyhuYW1lc3BhY2VzLCByYXdfY29vcmRzLCBudW1fcnVucykNCiAgcG9pbnRzZXRzID0g
e30NCiAgbmFtZXNwYWNlcy5lYWNoIGRvIHxtb2R8DQogICAgcG9pbnRzZXRzW21vZC5uYW1l
XSA9ICgwLi4ubnVtX3J1bnMpLm1hcCBkbyB8aXwNCiAgICAgIGdlbmVyYXRlX3NhbXBsZXMo
bW9kLCByYXdfY29vcmRzW2ldKQ0KICAgIGVuZA0KICBlbmQNCiAgcG9pbnRzZXRzDQplbmQN
Cg0KIyBQcmVnZW5lcmF0ZSBkaWZmZXJlbnQgcG9pbnQgZGF0YSBmb3Igc3VjY2Vzc2l2ZSBy
dW5zLg0KIyAoQWxsIHNvbHV0aW9ucyBhcmUgZmVkIHRoZSBzYW1lIHBvaW50IGRhdGEgcGVy
IHJ1bi4pDQoNCmRpc3RyaWJ1dGlvbnMgPSB7DQogICJSYW5kb20gb24gc3F1YXJlIiA9Pg0K
ICAgICgxLi5udW1fcnVucykubWFwIHsoMS4ubnVtX3NhbXBsZXMpLm1hcCB7W3JhbmQsIHJh
bmRdfX0sDQogICJSYW5kb20gb24gZGlzayIgPT4NCiAgICAoMS4ubnVtX3J1bnMpLm1hcCB7
KDEuLm51bV9zYW1wbGVzKS5tYXAgew0KICAgICAgICBybyA9IHJhbmQoMC41KQ0KICAgICAg
ICB0aGV0YSA9IE1hdGg6OlBJICogMiAqIHJhbmQNCiAgICAgICAgWyBybyAqIE1hdGg6OmNv
cyh0aGV0YSksIHJvICogTWF0aDo6c2luKHRoZXRhKV0NCiAgICAgIH0NCiAgICB9LA0KICAi
UmFuZG9tIG9uIGNpcmNsZSIgPT4NCiAgICAoMS4ubnVtX3J1bnMpLm1hcCB7KDEuLm51bV9z
YW1wbGVzKS5tYXAgew0KICAgICAgICB0aGV0YSA9IE1hdGg6OlBJICogMiAqIHJhbmQNCiAg
ICAgICAgWyBNYXRoOjpjb3ModGhldGEpLCBNYXRoOjpzaW4odGhldGEpXQ0KICAgICAgfQ0K
ICAgIH0sDQogICIyRCBHYXVzc2lhbiIgPT4NCiAgICAoMS4ubnVtX3J1bnMpLm1hcCB7KDEu
Lm51bV9zYW1wbGVzKS5tYXAgew0KCXJvID0gTWF0aDo6c3FydCgtMiAqIE1hdGg6OmxvZyhy
YW5kKSkNCiAgICAgICAgdGhldGEgPSBNYXRoOjpQSSAqIDIgKiByYW5kDQogICAgICAgIFsg
cm8gKiBNYXRoOjpjb3ModGhldGEpLCBybyAqIE1hdGg6OnNpbih0aGV0YSldDQogICAgICB9
DQogICAgfSwNCn0NCg0KbGFiZWxfd2lkdGggPSBuYW1lc3BhY2VzLm1hcCB7fG1vZHwgbW9k
Lm5hbWUubGVuZ3RofS5tYXgNCg0KZGlzdHJpYnV0aW9ucy5lYWNoIHsgfG5hbWUscmF3X2Nv
b3Jkc3wNCiAgcHV0cyAiLS0gI3tuYW1lfSAtLSINCiAgcG9pbnRzZXRzID0gcHJlcGFyZV9w
b2ludHNldHMobmFtZXNwYWNlcywgcmF3X2Nvb3JkcywgbnVtX3J1bnMpDQogIHNvbHV0aW9u
cyA9IHt9DQogIG5hbWVzcGFjZXMuZWFjaCB7fG1vZHwgc29sdXRpb25zW21vZC5uYW1lXSA9
IENsYXNzLm5ldyB7IGluY2x1ZGUgbW9kIH0ubmV3fQ0KICBCZW5jaG1hcmsuYm0obGFiZWxf
d2lkdGgpIGRvIHx4fA0KICAgIG5hbWVzcGFjZXMuZWFjaCBkbyB8bW9kfA0KICAgICAgbmFt
ZSA9IG1vZC5uYW1lDQogICAgICBzb2x1dGlvbiA9IHNvbHV0aW9uc1tuYW1lXQ0KICAgICAg
eC5yZXBvcnQobmFtZSkgZG8NCiAgICAgICAgbnVtX3J1bnMudGltZXMgZG8gfGl8DQogICAg
ICAgICAgcG9pbnRzID0gcG9pbnRzZXRzW25hbWVdW2ldDQogICAgICAgICAgc29sdXRpb24u
ZW5jaXJjbGUocG9pbnRzKQ0KICAgICAgICBlbmQNCiAgICAgIGVuZA0KICAgIGVuZA0KICBl
bmQNCn0NCg--------------000406090707010202050202
Content-Type: text/plain;
 name57_lionel_bouton.rb"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename57_lionel_bouton.rb"

aW5jbHVkZSBNYXRoCgpTVEVQX1JBVElPID0gNwoKbW9kdWxlIENvbnZleEh1bGwKCiAgIyBh
ZnRlciBncmFoYW0gJiBhbmRyZXcKICBkZWYgc2VsZi5jb252ZXhfaHVsbChwb2ludHMpCiAg
ICBsb3AgPSBwb2ludHMuc29ydF9ieSB7IHxwfCBwLnggfQogICAgbGVmdCA9IGxvcC5zaGlm
dAogICAgcmlnaHQgPSBsb3AucG9wCiAgICBsb3dlciwgdXBwZXIgPSBbbGVmdF0sIFtsZWZ0
XQogICAgbG93ZXJfaHVsbCwgdXBwZXJfaHVsbCA9IFtdLCBbXQogICAgZGV0X2Z1bmMgPSBk
ZXRlcm1pbmFudF9mdW5jdGlvbihsZWZ0LCByaWdodCkKICAgIHVudGlsIGxvcC5lbXB0eT8K
ICAgICAgcCA9IGxvcC5zaGlmdAogICAgICAoIGRldF9mdW5jLmNhbGwocCkgPCAwID8gbG93
ZXIgOiB1cHBlciApIDw8IHAKICAgIGVuZAogICAgbG93ZXIgPDwgcmlnaHQKICAgIHVudGls
IGxvd2VyLmVtcHR5PwogICAgICBsb3dlcl9odWxsIDw8IGxvd2VyLnNoaWZ0CiAgICAgIHdo
aWxlIChsb3dlcl9odWxsLnNpemUgPj0gMykgJiYKICAgICAgICAgICFjb252ZXg/KGxvd2Vy
X2h1bGwubGFzdCgzKSwgdHJ1ZSkKICAgICAgICBsYXN0ID0gbG93ZXJfaHVsbC5wb3AKICAg
ICAgICBsb3dlcl9odWxsLnBvcAogICAgICAgIGxvd2VyX2h1bGwgPDwgbGFzdAogICAgICBl
bmQKICAgIGVuZAogICAgdXBwZXIgPDwgcmlnaHQKICAgIHVudGlsIHVwcGVyLmVtcHR5Pwog
ICAgICB1cHBlcl9odWxsIDw8IHVwcGVyLnNoaWZ0CiAgICAgIHdoaWxlICh1cHBlcl9odWxs
LnNpemUgPj0gMykgJiYKICAgICAgICAgICFjb252ZXg/KHVwcGVyX2h1bGwubGFzdCgzKSwg
ZmFsc2UpCiAgICAgICAgbGFzdCA9IHVwcGVyX2h1bGwucG9wCiAgICAgICAgdXBwZXJfaHVs
bC5wb3AKICAgICAgICB1cHBlcl9odWxsIDw8IGxhc3QKICAgICAgZW5kCiAgICBlbmQKICAg
IHVwcGVyX2h1bGwuc2hpZnQKICAgIHVwcGVyX2h1bGwucG9wCiAgICBsb3dlcl9odWxsICsg
dXBwZXJfaHVsbC5yZXZlcnNlCiAgZW5kCgogIHByaXZhdGUKCiAgZGVmIHNlbGYuZGV0ZXJt
aW5hbnRfZnVuY3Rpb24ocDAsIHAxKQogICAgcHJvYyB7IHxwfCAoKHAwLngtcDEueCkqKHAu
eS1wMS55KSktKChwLngtcDEueCkqKHAwLnktcDEueSkpIH0KICBlbmQKCiAgZGVmIHNlbGYu
Y29udmV4PyhsaXN0X29mX3RocmVlLCBsb3dlcikKICAgIHAwLCBwMSwgcDIgPSBsaXN0X29m
X3RocmVlCiAgICAoZGV0ZXJtaW5hbnRfZnVuY3Rpb24ocDAsIHAyKS5jYWxsKHAxKSA+IDAp
IF4gbG93ZXIKICBlbmQKCmVuZAoKY2xhc3MgUG9pbnQgPCBTdHJ1Y3QubmV3KDp4LCA6eSkK
ICBkZWYgc2VsZi5yYW5kb20KICAgIHJvID0gc3FydCgtMiAqIGxvZyhyYW5kKSkKICAgIHRo
ZXRhID0gMiAqIFBJICogcmFuZAogICAgUG9pbnQubmV3KHJvICogY29zKHRoZXRhKSwgcm8g
KiBzaW4odGhldGEpKQogIGVuZAoKICBkZWYgc2VsZi5nZW5lcmF0ZV9zYW1wbGVzKG4pCiAg
ICAoMS4ubikubWFwIHsgc2VsZi5yYW5kb20gfQogIGVuZAoKICBkZWYgdG9fcwogICAgIigj
e3h9LCAje3l9KSIKICBlbmQKZW5kCgpjbGFzcyBQb3RlbnRpYWxDZW50ZXIgPCBTdHJ1Y3Qu
bmV3KDp4LCA6eSwgOnBvaW50cykKICBpbmNsdWRlIE1hdGgKCiAgIyBTcXVhcmUgZGlzdGFu
Y2Ugd2l0aCBhIHBvaW50CiAgZGVmIHNxdWFyZV9kaXN0YW5jZShwb2ludCkKICAgICgocG9p
bnQueCAtIHgpICoqIDIpICsgKChwb2ludC55IC0geSkgKiogMikKICBlbmQKCiAgIyBNYXhp
bXVtIHNxdWFyZSBkaXN0YW5jZSB3aXRoIG15IHBvaW50cwogICMgSXQncyBjYWNoZWQgYmVj
YXVzZSBpdCdzIGNhbGxlZCBzZXZlcmFsIHRpbWVzIGFuZCBjYW4gYmUgdmVyeSBjb3N0bHkK
ICBkZWYgbWF4X3NxdWFyZV9kaXN0YW5jZQogICAgQHNxX2Rpc3QgfHw9IChwb2ludHMubWFw
IHsgfHBvaW50fCBzcXVhcmVfZGlzdGFuY2UocG9pbnQpIH0ubWF4KQogIGVuZAoKICAjIENv
bXB1dGUgdGhlIGJlc3QgbW92ZSB3aXRoIGdpdmVuIGRpc3RhbmNlIChybykKICAjIGFuZCBh
bmdsZXMgKHRoZXRhcykKICAjIHJldHVybnMgbmlsIGlmIG5vbmUgaXMgYmV0dGVyIHRoYW4g
dGhlIGN1cnJlbnQgcG9zaXRpb24KICBkZWYgYmVzdF9tb3ZlKHJvLCB0aGV0YXMpCiAgICBw
b3RlbnRpYWxfbW92ZXMgPSB0aGV0YXMubWFwIHsgfHRoZXRhfAogICAgICBuZXdfeCA9IHgg
KyAocm8gKiBjb3ModGhldGEpKQogICAgICBuZXdfeSA9IHkgKyAocm8gKiBzaW4odGhldGEp
KQogICAgICBQb3RlbnRpYWxDZW50ZXIubmV3KG5ld194LG5ld195LHBvaW50cykKICAgIH0K
ICAgIGNob29zZV9tb3ZlXzEocG90ZW50aWFsX21vdmVzKQogIGVuZAoKICAjIER1bWJlciwg
ZmFzdGVyCiAgZGVmIGNob29zZV9tb3ZlXzEocG90ZW50aWFsX21vdmVzKQogICAgcG90ZW50
aWFsX21vdmVzLmRldGVjdCB7IHxtb3ZlfAogICAgICBtYXhfc3F1YXJlX2Rpc3RhbmNlID4g
bW92ZS5tYXhfc3F1YXJlX2Rpc3RhbmNlCiAgICB9CiAgZW5kCgogICMgTG9vayBmb3IgdGhl
IHNob3J0ZXN0IHBhdGgsIHNsb3dlciAofjEuNHggb24gYXZlcmFnZSB3aXRoIG1hbnkgcG9p
bnRzKQogIGRlZiBjaG9vc2VfbW92ZV8yKHBvdGVudGlhbF9tb3ZlcykKICAgIHBvdGVudGlh
bF9tb3Zlcy5yZWplY3QhIHsgfG1vdmV8CiAgICAgIG1heF9zcXVhcmVfZGlzdGFuY2UgPD0g
bW92ZS5tYXhfc3F1YXJlX2Rpc3RhbmNlCiAgICB9CiAgICBwb3RlbnRpYWxfbW92ZXMubWlu
IHsgfGMxLGMyfAogICAgICBjMS5tYXhfc3F1YXJlX2Rpc3RhbmNlIDw9PiBjMi5tYXhfc3F1
YXJlX2Rpc3RhbmNlCiAgICB9CiAgZW5kCgogICMgQ2hlY2sgdGhhdCB0aGUgZ2l2ZW4gb2Zm
c2V0IGlzIGJpZyBlbm91Z2ggdG8gbW92ZQogICMgdGhlIGN1cnJlbnQgcG9zaXRpb24KICAj
IChmbG9hdGluZyBwb2ludCByb3VuZGluZyBlcnJvcnMgcHJldmVudCBpbmZpbml0ZSBwcmVj
aXNpb24uLi4pCiAgZGVmIGNhbl9iZV9tb3ZlZF9ieShvZmZzZXQpCiAgICAoKHggKyBvZmZz
ZXQpICE9IHgpIHx8ICgoeSArIG9mZnNldCkgIT0geSkKICBlbmQKCiAgZGVmIHRvX3MKICAg
ICIoI3t4fSwgI3t5fSkiCiAgZW5kCmVuZAoKY2xhc3MgQ2lyY2xlIDwgU3RydWN0Lm5ldyg6
Y2VudGVyLCA6cmFkaXVzKQogIGRlZiB0b19zCiAgICAie2NlbnRlcjoje2NlbnRlcn0sIHJh
ZGl1czoje3JhZGl1c319IgogIGVuZAplbmQKCmRlZiBjaG9zZV9vcmlnaW5hbF9jZW50ZXJf
YW5kX21vdmVfYW1vdW50KHBvaW50cykKICAjIFN0YXJ0IHdpdGggYSBnb29kIHBvdGVudGlh
bCAoYXJvdW5kIHRoZSBtaWRkbGUgb2YgdGhlIHBvaW50IGNsb3VkKQogIG1heF94ID0gcG9p
bnRzLm1hcHt8cHwgcC54fS5tYXgKICBtaW5feCA9IHBvaW50cy5tYXB7fHB8IHAueH0ubWlu
CiAgeCA9IChtYXhfeCArIG1pbl94KSAvIDIKICBtYXhfeSA9IHBvaW50cy5tYXB7fHB8IHAu
eX0ubWF4CiAgbWluX3kgPSBwb2ludHMubWFwe3xwfCBwLnl9Lm1pbgogIHkgPSAobWF4X3kg
KyBtaW5feSkgLyAyCiAgY2VudGVyID0gUG90ZW50aWFsQ2VudGVyLm5ldyh4LCB5LCBwb2lu
dHMpCiAgZF95ID0gbWF4X3kgLSBtaW5feTsgZF94ID0gbWF4X3ggLSBtaW5feAogICMgdGhl
IG1heCBhbW91bnQgb2YgbW92ZW1lbnQgaXMgaW5mZXJpb3IgdG8gdGhpcwogIG1heF9tb3Zl
X2luX2JvdW5kaW5nX2JveCA9IFsgZF95LCBkX3ggXS5taW4gLyAyCiAgIyBhbmQgdGhpcwog
IG1vdmVfYW1vdW50ID0gbWF4X21vdmVfaW5fYm91bmRpbmdfYm94IC8gU1RFUF9SQVRJTwog
IHJldHVybiBbY2VudGVyLCBtb3ZlX2Ftb3VudF0KZW5kCgojIExvb2sgZm9yIHRoZSBiZXN0
IGNlbnRlciBieSBtaW5pbWl6aW5nCiMgaXRzIG1heGltdW0gZGlzdGFuY2Ugd2l0aCB0aGUg
Z2l2ZW4gcG9pbnRzCiMgVGhpcyBpcyB0aGUgc2FtZSBhcyBtaW5pbWl6aW5nIGl0cyBzcXVh
cmUKIyAodGhlIG1heGltdW0gb2YgdGhlIHNxdWFyZSBkaXN0YW5jZXMpCiMgVGhpcyBjYW4g
YmUgc2VlbiBhcyBhIGRpY2hvdG9teSBvbiBhIDItZGltZW5zaW9uYWwgc3BhY2UKZGVmIGVu
Y2lyY2xlKHBvaW50cykKICBwb2ludHMgPSBDb252ZXhIdWxsLmNvbnZleF9odWxsKHBvaW50
cykKICBjZW50ZXIsIHJvID0gY2hvc2Vfb3JpZ2luYWxfY2VudGVyX2FuZF9tb3ZlX2Ftb3Vu
dChwb2ludHMpCiAgIyBXZSdsbCBtb3ZlIHdpdGggcG9sYXIgY29vcmRpbmF0ZXMgKGRpc3Rh
bmNlICsgYW5nbGUgOiByby90aGV0YSkKICAjIEhvdyBtYW55IGRpcmVjdGlvbnMgZG8gd2Ug
Zm9sbG93PwogICMgZWFjaCBuZXcgYW5nbGUgY3JlYXRlcyBhIG5ldyAoY29zdGx5KSBtYXhf
c3F1YXJlX2Rpc3RhbmNlIGNhbGwKICAjIHNvIHdlIHRha2UgdGhlIG1pbmltdW0gbmVlZGVk
IHRvIG1vdmUgYXJvdW5kIGFuZCBjbGltYiB0aGUKICAjIHNxdWFyZV9kaXN0YW5jZSBncmFk
aWVudDogMwogIGFuZ2xlX2NvdW50ID0gMwogIHRoZXRhcyA9ICgxLi5hbmdsZV9jb3VudCku
bWFwIHsgfGN8ICgyICogYyAqIE1hdGg6OlBJKSAvIGFuZ2xlX2NvdW50fQogIGl0ZXIgPSAw
CiAgIyBUcmFjZSBvdXIgbW92ZXMKICBjZW50ZXJfbGlzdCA9IFtdCgogIGxvb3AgZG8KICAg
IGNlbnRlcl9saXN0IDw8IGNlbnRlcgogICAgaXRlciArPSAxCiAgICMgcHV0cyAiI3tpdGVy
fTogI3tjZW50ZXIubWF4X3NxdWFyZV9kaXN0YW5jZX0iCiAgICAjIElzIHRoZXJlIGEgYmVz
dCBtb3ZlIGF2YWlsYWJsZSA/CiAgICBpZiBuZXdfY2VudGVyID0gY2VudGVyLmJlc3RfbW92
ZShybywgdGhldGFzKQogICAgICBjZW50ZXIgPSBuZXdfY2VudGVyCiAgICBlbHNlCiAgICAg
IHJvIC89IFNURVBfUkFUSU8KICAgICAgIyBXZSBzdG9wIHdoZW4gcm8gYmVjb21lcyB0b28g
c21hbGwgdG8gbW92ZSB0aGUgY2VudGVyCiAgICAgIGJyZWFrIHVubGVzcyBjZW50ZXIuY2Fu
X2JlX21vdmVkX2J5KHJvKQogICAgZW5kCiAgZW5kCiAjIHB1dHMgIkNpcmNsZSBmb3VuZCBp
biAje2l0ZXJ9IGl0ZXJhdGlvbnMiCiAgcmV0dXJuIFsgQ2lyY2xlLm5ldyhjZW50ZXIsIHNx
cnQoY2VudGVyLm1heF9zcXVhcmVfZGlzdGFuY2UpKSwKICAgICAgICAgICBjZW50ZXJfbGlz
dCBdCmVuZAoKaWYgJDAgPT0gX19GSUxFX18KCiAgIyBVc2VzIDEwIHBvaW50cyBieSBkZWZh
dWx0CiAgUE9JTlRfQ09VTlQgPSAoQVJHVlswXS50b19pID09IDApID8gMTAgOiBBUkdWWzBd
LnRvX2kKCiAgcG9pbnRzID0gUG9pbnQuZ2VuZXJhdGVfc2FtcGxlcyhQT0lOVF9DT1VOVCkK
ICB0ID0gVGltZS5ub3cKICBjaXJjbGUsIGNlbnRlcl9saXN0ID0gZW5jaXJjbGUocG9pbnRz
KQogIHB1dHMgY2lyY2xlCiAgcHV0cyAiRm91bmQgaW46ICN7VGltZS5ub3cgLSB0fXMiCiAg
CiAgIyBHZW5lcmF0ZSBhIEdudVBsb3QgY29tbWFuZCBmaWxlIHRvIHNlZSB0aGUgcmVzdWx0
CiAgZiA9IEZpbGUub3BlbigncGxvdGNvbW1hbmQuY21kJywgJ3cnKQogIGYucHJpbnQgPDxF
T0YKc2V0IHBhcmFtZXRyaWMKc2V0IHNpemUgc3F1YXJlCnNldCB4cmFuZ2UgWy0wLjI6MS4y
XQpzZXQgeXJhbmdlIFstMC4yOjEuMl0Kc2V0IG11bHRpcGxvdApwbG90ICItIgoje3BvaW50
cy5tYXAgeyB8cHwgIiN7cC54fSAje3AueX0iIH0uam9pbigiXG4iKX0KZW5kCnBsb3QgIi0i
IHdpdGggbGluZXMKI3tjZW50ZXJfbGlzdC5tYXAgeyB8cHwgIiN7cC54fSAje3AueX0iIH0u
am9pbigiXG4iKX0KZW5kCnBsb3QgWzA6MipwaV0gCihzaW4odCkqI3tjaXJjbGUucmFkaXVz
fSkrI3tjaXJjbGUuY2VudGVyLnh9LChjb3ModCkqI3tjaXJjbGUucmFkaXVzfSkrI3tjaXJj
bGUuY2VudGVyLnl9CnNldCBub211bHRpcGxvdApFT0YKICBmLmNsb3NlCiAgCiAgcHV0cyA8
PEVPRgp1c2UgJ2dudXBsb3QgLXBlcnNpc3QgcGxvdGNvbW1hbmQuY21kJyB0byBzZWUKdGhl
IGNpcmNsZSwgcG9pbnRzIGFuZCBwYXRoIHRvIHRoZSBjZW50ZXIKRU9GCiAgCmVuZAoKCg--------------000406090707010202050202--