--------------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; name="157_benchmark_2.rb" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="157_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; name="157_lionel_bouton.rb" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="157_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--