[#75687] [Ruby trunk Bug#12416] struct rb_id_table lacks mark function — shyouhei@...
Issue #12416 has been reported by Shyouhei Urabe.
3 messages
2016/05/23
[#75763] [Ruby trunk Feature#12435] Using connect_nonblock to open TCP connections in Net::HTTP#connect — mohamed.m.m.hafez@...
Issue #12435 has been reported by Mohamed Hafez.
3 messages
2016/05/28
[#75774] Errno::EAGAIN thrown by OpenSSL::SSL::SSLSocket#connect_nonblock — Mohamed Hafez <mohamed.m.m.hafez@...>
Hi all, every now and then in my production server, I'm
4 messages
2016/05/30
[#75775] Re: Errno::EAGAIN thrown by OpenSSL::SSL::SSLSocket#connect_nonblock
— Mohamed Hafez <mohamed.m.m.hafez@...>
2016/05/30
Or does MRI's OpenSSL::SSL::SSLSocket#connect_nonblock just return
[#75782] Important: Somewhat backwards-incompatible change (Fwd: [ruby-cvs:62388] duerst:r55225 (trunk): * string.c: Activate full Unicode case mapping for UTF-8) — Martin J. Dürst <duerst@...>
V2l0aCB0aGUgY2hhbmdlIGJlbG93LCBJIGhhdmUgYWN0aXZhdGVkIGZ1bGwgVW5pY29kZSBjYXNl
4 messages
2016/05/31
[ruby-core:75441] [Ruby trunk Feature#12361] Proposal: add Geo::Coord class to standard library
From:
zverok.offline@...
Date:
2016-05-10 09:43:14 UTC
List:
ruby-core #75441
SXNzdWUgIzEyMzYxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgVmljdG9yIFNoZXBlbGV2LgoKCllvdSBz ZWUsIG15IHBvaW50IHdhcyBub3QgIkkgY3JlYXRlZCBhIGNvb2wgY29kZSwgbGV0cyBhZGQgaXQg dG8gc3RkbGliISIKTXkgcG9pbnQgd2FzICJXZSBuZWVkIHN0YW5kYXJkIEdlbyBDb29yZGluYXRl cyB0eXBlIGluIHN0ZGxpYiIgKGJlY2F1c2Ugb2YgPHJlYXNvbnM+KS4KSSd2ZSBqdXN0IHRob3Vn aHQgaXQgd291bGQgYmUgZWFzaWVyIHRvIGRpc2N1c3Mgd2l0aCBzb21lIHNhbXBsZSBjb2RlIChi dXQgSSBjYW4gdGhyb3VnaCBpdCBhd2F5LCBpZiBpdCBhZmZlY3RzIHRoZSBkaXNjdXNzaW9uKS4K CkxldCdzIHNheSBpdCB0aGlzIHdheToKCioqUHJvcG9zYWw6KiogV2UgbmVlZCAiZ2VvIGNvb3Jk aW5hdGVzIiB0eXBlIGluIHN0YW5kYXJkIGxpYnJhcnkuCgoqKlJlYXNvbjoqKgogCiogaW4gbW9k ZXJuIGFwcGxpY2F0aW9ucyAod2ViLCBtb2JpbGUsIHNjaWVudGlmaWMgYW5kIHNvIG9uKSBpdCBp cyBwcmV0dHkgY29tbW9uIHR5cGU7CiogdGhlcmUgYXJlIG1hbnkgaW5jb21wYXRpYmxlIGltcGxl bWVudGF0aW9ucyBpbiBzZXZlcmFsIHBvcHVsYXIgbGlicmFyaWVzOwoqIGZvciBzdWNoIGEgYmFz aWMgdHlwZSwgbm8gImV4dGVybmFsIGxpYnJhcnkiIHdvdWxkIGJlIG5ldmVyIHdpZGVseSBhY2Nl cHRlZCAodGhpbmsgIm9rLCBjcmVhdGUgeW91ciBvd24gQysrIHN0cmluZyBjbGFzcyBhbmQgbWFr ZSBpdCB3aWRlbHkgYWNjZXB0ZWQhIGJ1dCBpbiB0aGUgbWVhbnRpbWUsIGp1c3QgdXNlIGBjaGFy KmAiIC0tIGBzdGQ6OnN0cmluZ2AgaGFkIHRvIGZpZ2h0IGZvciB5ZWFycyB0byBiZSB1c2VkIGlu IHNvbWUgb2YgdGhlIGxpYnJhcmllcyk7CiogdGhlIGVhcmxpZXIgbmV3IHR5cGUgYmVjYW1lICJz dGFuZGFyZCIsIHRoZSBiZXR0ZXIuCgpXaGV0aGVyIG15IGRlc2luZyBhbmQgaW1wbGVtZW50YXRp b24gaXMgZ29vZCBvciBub3QsIGlzIG5vdCBleGFjdGx5IHJlbGV2YW50IHRvIHByb3Bvc2FsIC0t IGl0IG1lYW50IHRvIGJlIHN0YXJ0aW5nIHBvaW50IGZvciBkaXNjdXNzaW9uLgoKQW5kIHRoYXQn cyBpdC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAj MTIzNjE6IFByb3Bvc2FsOiBhZGQgR2VvOjpDb29yZCBjbGFzcyB0byBzdGFuZGFyZCBsaWJyYXJ5 Cmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xMjM2MSNjaGFuZ2UtNTg1NjAKCiog QXV0aG9yOiBWaWN0b3IgU2hlcGVsZXYKKiBTdGF0dXM6IE9wZW4KKiBQcmlvcml0eTogTm9ybWFs CiogQXNzaWduZWU6IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMj IFByb3Bvc2FsCgpBZGQgYEdlbzo6Q29vcmRgIGNsYXNzIHRvIFJ1Ynkgc3RhbmRhcmQgbGlicmFy eSwgcmVwcmVzZW50aW5nIGBbbGF0aXR1ZGUsIGxvbmdpdHVkZV1gIHBhaXIgKyBjb252ZW5pZW5j ZSBtZXRob2RzLiBBZGQgYEdlb2Agc3RhbmRhcmQgbGlicmFyeSB3aXRoIGFkZGl0aW9uYWwgY2Fs Y3VsYXRpb25zIGFuZCBjb252ZW5pZW5jZSBtZXRob2RzLgoKIyMgUmF0aW9uYWxlCgpJbiBtb2Rl cm4gYXBwbGljYXRpb25zLCB3b3JraW5nIHdpdGggZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIGlz IGZyZXF1ZW50LiBXZSBwcm9wb3NlIHRvIHRoaW5rIG9mIHN1Y2ggY29vcmRpbmF0ZXMgKG5hbWVs eSwgYGxhdGl0dWRlLCBsb25naXR1ZGVgIHBhaXIpIGFzIG9mICJiYXNpYyIgdHlwZSB0aGF0IHNo b3VsZCBiZSBzdXBwb3J0ZWQgYnkgc3RhbmRhcmQgbGlicmFyeSAtIHRoZSBzYW1lIHdheSBhcyB3 ZSBzdXBwb3J0IGBUaW1lYC9gRGF0ZWAvYERhdGVUaW1lYCBpbnN0ZWFkIG9mIGhhdmluZyBpdCBk ZWZpbmVkCmJ5IHVzZXIvZ2Vtcy4KClRoaXMgdHlwZSBpcyB0b28gInNtYWxsIiB0byBiZSBkZWZp bmVkIGJ5IHNlcGFyYXRlIGdlbSwgc28sIGFsbCBvZiBleGlzdGluZyBnZW8gZ2VtcyAoR2VvS2l0 LCBSR2VvLCBHZW9SdWJ5LCBHcmF0aWN1bGUgZXRjLikgZGVmaW5lIHRoZWlyIG93biBgTGF0TG5n YCwgb3IgYExvY2F0aW9uYCwgb3IgYFBvaW50YCwgd2hhdGV2ZXIuCgpPbiBvdGhlciBoYW5kLCBB UEkgZGVzaWduIGZvciB0aGlzICJzbWFsbCIgdHlwZSBpcyB2YWd1ZSBlbm91Z2ggZm9yIGFsbCB0 aG9zZSBzaW1pbGFyIHR5cGVzIHRvIGJlIGluY29tcGF0aWJsZSBhbmQgYnJlYWsgc21hbGwgaGFi aXRzIGFuZCBjb252ZW50aW9ucyB3aGVuIHlvdSBjaGFuZ2UgZnJvbSBvbmUgZ2VvIGxpYnJhcnkg dG8gYW5vdGhlciwgb3IgdHJ5IHRvIHVzZSBzZXZlcmFsCnNpbXVsdGFuZW91c2x5LgoKQWRkaXRp b25hbHksIG1hbnkgZ2VtcyBzb21laG93IHdvcmtpbmcgd2l0aCBnZW8gY29vcmRpbmF0ZXMgKGZv ciB3ZWF0aGVyLCBvciB0aW1lem9uZSwgb3IgYW5vdGhlciB0YXNrcykgZ2VuZXJhbGx5IHByZWZl ciBub3QgdG8gaW50cm9kdWNlIHR5cGUsIGFuZCBqdXN0IHdvcmsgd2l0aCBgW2xhdCwgbG5nXWAg YXJyYXksIHdoaWNoIGlzIG5vdCB2ZXJ5IGNvbnZlbmllbnQsIGZhaXRoZnVsbHkuCgpTbywgaGF2 aW5nICJnZW8gY29vcmRpbmF0ZXMiIGZ1bmN0aW9uYWxpdHkgaW4gc3RhbmRhcmQgbGlicmFyeSBz ZWVtcyByZWFzb25hYmxlIGFuZCB2YWx1YWJsZS4KCiMjIEV4aXN0aW5nL3JlZmVyZW5jZSBzb2x1 dGlvbnMKClJ1Ynk6CgoqIFtHZW9LaXQ6OkxhdExuZ10oaHR0cDovL3d3dy5ydWJ5ZG9jLmluZm8v Z2l0aHViL2dlb2tpdC9nZW9raXQvbWFzdGVyL0dlb2tpdC9MYXRMbmcpOwoqIFtSR2VvOjpGZWF0 dXJlOjpQb2ludF0oaHR0cDovL3d3dy5ydWJ5ZG9jLmluZm8vZ2Vtcy9yZ2VvL1JHZW8vRmVhdHVy ZS9Qb2ludCkgKHdpdGggc2V2ZXJhbCAicHJpdmF0ZSIgaW1wbGVtZW50YXRpb24gY2xhc3Nlcyk7 IFJHZW8gaW1wbGVtZW50cyBmdWxsIFtPR0MgU2ltcGxlIEZlYXR1cmVzXShodHRwczovL2VuLndp a2lwZWRpYS5vcmcvd2lraS9TaW1wbGVfRmVhdHVyZXMpIHNwZWNpZmljYXRpb24sIHNvLCBpdHMg cG9pbnRzIGhhdmUgYHpgIGFuZCBgbWAgY29vcmRpbmF0ZXMsIHByb2plY3Rpb24gYW5kIG11Y2gg bW9yZTsKKiBbR3JhdGljdWxlOjpMb2NhdGlvbl0oaHR0cDovL3d3dy5ydWJ5ZG9jLmluZm8vZ2l0 aHViL2NvbGxlY3RpdmVpZGVhL2dyYXRpY3VsZS9HcmF0aWN1bGUvTG9jYXRpb24pIChub3Qgc3Ry aWN0bHkgYSBgW2xhdCxsbmddYCB3cmFwcGVyKTsKKiBbUm9zYW1hcnk6Ok5vZGVdKGh0dHA6Ly93 d3cucnVieWRvYy5pbmZvL2dlbXMvcm9zZW1hcnkvMC40LjQvUm9zZW1hcnkvTm9kZSkgKGZvbGxv d3MgbmFtaW5nIGNvbnZlbnRpb24gb2YgdW5kZXJseWluZyBPcGVuU3RyZWV0TWFwIEFQSSk7CgpP dGhlciBzb3VyY2VzOgoKKiBQeXRob246IFtnZW9weS5Qb2ludF0oaHR0cDovL2dlb3B5LnJlYWR0 aGVkb2NzLm9yZy9lbi9sYXRlc3QvI2dlb3B5LnBvaW50LlBvaW50KTsKKiBbRWxhc3RpY1NlYXJj aF0oaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9ibG9nL2dlby1sb2NhdGlvbi1hbmQtc2VhcmNoKSB1 c2VzIGhhc2ggd2l0aCAibGF0IiBhbmQgImxvbiIga2V5czsKKiBHb29nbGUgTWFwcyBbR2VvY29k aW5nIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9u L2dlb2NvZGluZy9pbnRybyNHZW9jb2RpbmdSZXNwb25zZXMpIHVzZXMgaGFzaCB3aXRoICJsYXQi IGFuZCAibG5nIiBrZXlzOwoqIFBvc3RHSVM6IFtwcmV0dHkgY29tcGxpY2F0ZWRdKGh0dHA6Ly9w b3N0Z2lzLm5ldC9kb2NzL21hbnVhbC0yLjIvdXNpbmdfcG9zdGdpc19kYm1hbmFnZW1lbnQuaHRt bCNSZWZPYmplY3QpICBoYXMgX2dlb21ldHJpY2FsXyAocHJvamVjdGVkKSBhbmQgX2dlb2dyYXBo aWNhbF8gKGxhdCwgbG5nKSBwb2ludHMgYW5kIHN0dWZmLgoKIyMgRGVzaWduIGRlY2lzaW9ucwoK V2hpbGUgZGVzaWduaW5nIGBHZW9gIGxpYnJhcnksIG91ciByZWZlcmVuY2UgcG9pbnQgd2FzIHN0 YW5kYXJkIGBUaW1lYCBjbGFzcyAoYW5kLCB0byBsZXNzZXIgZXh0ZW50LCBgRGF0ZWAvYERhdGVU aW1lYCkuIEl0IGhhcyB0aGlzIHJlc3BvbnNpYmlsaXRpZXM6CgoqIHN0b3JlcyBkYXRhIGluIHNp bXBsZSBpbnRlcm5hbCBmb3JtOwoqIGhlbHBzIHRvIHBhcnNlIGFuZCBmb3JtYXQgZGF0YSB0byBh bmQgZnJvbSBzdHJpbmdzOwoqIHByb3ZpZGVzIGVhc3kgYWNjZXNzIHRvIGxvZ2ljYWwgY29tcG9u ZW50cyBvZiBkYXRhOwoqIGFsbG93cyBtb3N0IHNpbXBsZSBhbmQgdW5hbWJpZ3VvdXMgY2FsY3Vs YXRpb25zLgoKKipNYWluIHR5cGUgbmFtZSoqOiBhcyBmYXIgYXMgd2UgY2FuIHNlZSwgdGhlcmUn cyBubyBnb29kIHNpbmd1bGFyIG5hbWUgZm9yIGAobGF0LCBsbmcpYCBwYWlyIGNvbmNlcHQuIEFz IG1lbnRpb25lZCBhYm92ZSwgdGhlcmUgY2FuIGJlIHNlZW4gbmFtZXMgbGlrZSBgTGF0TG5nYCwg b3IgYExvY2F0aW9uYCwgb3IgYFBvaW50YDsgYW5kIGluIG5hdHVyYWwgbGFuZ3VhZ2UKanVzdCAi Y29vcmRpbmF0ZXMiIHVzZWQgZnJlcXVlbnRseS4gV2UgcHJvcG9zZSB0aGUgbmFtZSBgQ29vcmRg LCB3aGljaCBpcyBwcmV0dHkgc2hvcnQsIGVhc3kgdG8gcmVtZW1iZXIsIGRlbW9uc3RyYXRlcyBp bnRlbnRpb25zIChhbmQgbG9va3MgbGlrZSBzaW5ndWxhciwgc28geW91IGNhbiBoYXZlICJvbmUg Y29vcmQgb2JqZWN0IiBhbmQgImFycmF5IG9mIGNvb3JkcyIsCndoaWNoIGlzIG5vdCAxMDAlIGxp bmd1aXN0aWNhbGx5IGNvcnJlY3QsIHlldCBjb252ZW5pZW50KS4gQWx0ZXJuYXRpdmUgYFBvaW50 YCBuYW1lIHNlZW1zIHRvIGJlIHRvbyBhbWJpZ291cywgYmVpbmcgdXNlZCBpbiBtYW55IGNvbnRl eHRzLgoKYEdlbzo6Q29vcmRgIG9iamVjdCBpcyAqKmltbXV0YWJsZSoqLCB0aGVyZSdzIG5vIHNl bWFudGljYWwgc2Vuc2UgaW4gYGxvY2F0aW9uLmxhdGl0dWRlID0gLi4uYCBvciBzb21ldGhpbmcg bGlrZSB0aGlzLgoKKipVbml0cyoqOiBgR2VvYCBjYWxjdWxhdGlvbnMgKGp1c3QgbGlrZSBgVGlt ZWAgY2FsY3VsYXRpb25zKSBwcm92aWRlIG5vIHVuaXRzIG9wdGlvbnMsIGp1c3QgcmV0dXJuaW5n IG51bWJlcnMgbWVhc3VyZWQgaW4gImRlZmF1bHQiIHVuaXRzOiBtZXRyZXMgZm9yIGRpc3RhbmNl cyAoYXMgdGhleSBhcmUgU0kgdW5pdCkgYW5kIGRlZ3JlZXMgZm9yIGF6aW11dGguIExhdGl0dWRl IGFuZCBsb25naXR1ZGUgYXJlIHN0b3JlZCBpbiBkZWdyZWVzLCBidXQgcmFkaWFucyB2YWx1ZXMg YWNjZXNzb3JzIGFyZSBwcm92aWRlZCAoYmVpbmcgd2lkZWx5IHVzZWQgaW4gZ2VvZGVzeSBtYXRo KS4KCkFsbCBjb29yZGluYXRlcyBhbmQgY2FsY3VsYXRpb25zIGFyZSB0aG91Z2h0IHRvIGJlIGlu IFdHUyA4NCBjb29yZGluYXRlcyByZWZlcmVuY2Ugc3lzdGVtLCBiZWluZyBjdXJyZW50IHN0YW5k YXJkIGZvciBtYXBzIGFuZCBHUFMuCgpUaGVyZSdzIGludHJvZHVjZWQgKipjb25jZXB0IG9mIGds b2JlKiogdXNlZCBpbnRlcm5hbGx5IGZvciBjYWxjdWxhdGlvbnMuIE9ubHkgZ2VuZXJpYyAoc3Bo ZXJlKSBhbmQgRWFydGggZ2xvYmVzIGFyZSBpbXBsZW1lbnRlZCwgYnV0IGZvciAyMDE2IHdlIGZl ZWwgbGlrZSBjdXJyZW50IGRlc2lnbiBvZiBiYXNpYyB0eXBlcyBzaG91bGQgdGFrZSBpbiBjb25z aWRlcmF0aW9uCnBvc3NpYmlsaXR5IG9mIHdyaXRpbmcgUnVieSBzY3JpcHRzIGZvciBNYXJzIG1h cHMgYW5hbHlzaXMuIE9ubHkgb25lIGdlb2Rlc3kgZm9ybXVsYSBpcyBpbXBsZW1lbnRlZCAoVmlu Y2VudHksIGdlbmVyYWxseSBjb25zaWRlcmVkIG9uZSBvZiB0aGUgbW9zdCBwcmVjaXNlKSwgYXMg Zm9yIHN0YW5kYXJkIGxpYnJhcnkgY2xhc3MgaXQgY29uc2lkZXJlZCB1bm5lY2Vzc2FyeSB0byBw cm92aWRlIHVzZXIgd2l0aCBnZW9kZXN5IGZvcm11bGFlIG9wdGlvbnMuCgpObyAqKm1hcCBwcm9q ZWN0aW9uKiogbWF0aCB3YXMgYWRkZWQgaW50byBjdXJyZW50IHByb3Bvc2FsLCBidXQgaXQgbWF5 IGJlIGEgZ29vZCBkaXJlY3Rpb24gZm9yIGZ1cnRoZXIgd29yay4gTm8gKiplbGV2YXRpb24qKiBk YXRhIGNvbnNpZGVyZWQgZWl0aGVyLgoKIyMgUHJvcG9zYWwgZGV0YWlscwoKIyMjIGBHZW86OkNv b3JkYCBjbGFzcwoKUmVwcmVzZW50cyBgW2xhdGl0dWRlLCBsb25naXR1ZGVdYCBwYWlyLiBMYXRp dHVkZSBpcyAtOTAgdG8gKzkwIChkZWdyZWVzKS4gTG9uZ2l0dWRlIGlzIC0xODAgdG8gKzE4MC4K CkNsYXNzIG1ldGhvZHM6CgoqIGBuZXcobGF0LCBsbmcpYCBjcmVhdGVzIGluc3RhbmNlIGZyb20g dHdvIE51bWVyaWNzIChpbiBkZWdyZWVzKTsKKiBgbmV3KGxhdDosIGxuZzopYCBrZXl3b3JkIGFy Z3VtZW50cyBmb3JtIG9mIGFib3ZlOwoqIGBuZXcobGF0ZDosIGxhdG06LCBsYXRzOiwgbGF0aDos IGxuZ2Q6IGxuZ206LCBsbmdzOiBsbmdoOilgIGNyZWF0ZXMgaW5zdGFuY2UgZnJvbSBjb29yZGlu YXRlcyBpbiAoZGVnLCBtaW4sIHNlYywgaGVtaXNwaGVyZSkgZm9ybTsgaGVtaXNwaGVyZXMgYXJl ICJOIi8iUyIgZm9yIGxhdGl0dWRlIGFuZCAiVyIvRSIgZm9yIGxvbmdpdHVkZTsgYW55IGNvbXBv bmVudCBleGNlcHQgZm9yIGRlZ3JlZXMgY2FuIGJlIG9taXR0ZWQ7IGlmIGhlbWlzcGhlcmUgaXMg b21pdHRlZCwgaXQgaXMgZGVjaWRlZCBieSBkZWdyZWVzIHNpZ24gKGxhdDogcG9zaXRpdmUgaXMg Ik4iLCBsbmc6IHBvc2l0aXZlIGlzICJFIik7CiogYGZyb21faChoYXNoKWAgY3JlYXRlcyBpbnN0 YW5jZSBmcm9tIGhhc2ggd2l0aCBgImxhdCJgIG9yIGAibGF0aXR1ZGUiYCBrZXkgYW5kIGAibG9u ImAgb3IgYCJsbmciYCBvciBgImxvbmdpdHVkZSJgIGtleSAoY2FzZS1pbmRlcGVuZGVudCk7Ciog YGZyb21fcmFkaWFucyhwaGksIGxhKWAgY3JlYXRlcyBpbnN0YW5jZSBmcm9tIHJhZGlhbiB2YWx1 ZXM7CiogYHN0cnBjb29yZGAgcGFyc2VzIHN0cmluZyBpbnRvIGNvb3JkaW5hdGVzIGJ5IHByb3Zp ZGVkIHBhdHRlcm4gKHNlZSBiZWxvdyBmb3IgcGF0dGVybiBkZXNjcmlwdGlvbik7CiogYHBhcnNl X2xsYCBwYXJzZXMgY29vcmRpbmF0ZXMgc3RyaW5nIGluIGAiZmxvYXQsIGZsb2F0ImAgZm9ybTsK KiBgcGFyc2VfZG1zYCBwYXJzZXMgY29vcmRpbmF0ZXMgc3RyaW5nIGluIGBkIG0gcyBoLCBkIG0g cyBoYCBmb3JtYXQgKGNvbnNpZGVyaW5nIHNldmVyYWwgd2lkZWx5IHVzZWQgc3ltYm9scyBmb3Ig ZGVncmVlcywgbWludXRlcyBhbmQgc2Vjb25kcyk7CiogYHBhcnNlYCB0cmllcyB0byBwYXJzZSBz dHJpbmcgaW50byBjb29yZGluYXRlcyBmcm9tIHZhcmlvdXMgZm9ybWF0cy4KCkluc3RhbmNlIG1l dGhvZHM6CgoqIGBsYXRgIGFuZCBgbG5nYCwgcmV0dXJuaW5nIGBGbG9hdGBzLCBzaWduZWQ7Ciog YGxhdGl0dWRlYCBhbmQgYGxvbmdpdHVkZWAgYXMgYW4gYWxpYXNlczsgYGxvbmAgYXMgYW4gYWRk aXRpb25hbCBhbGlhc2VzIGZvciBsb25naXR1ZGU7CiogYGxhdGRgLCBgbGF0bWAsIGBsYXRzYCwg YGxhdGhgOiBkZWdyZWUsIG1pbnV0ZSwgc2Vjb25kLCBoZW1pc3BoZXJlOyBgbGF0ZGAgYW5kIGBs YXRtYCBhcmUgYEZpeG51bWAsIGBsYXRzYCBpcyBgRmxvYXRgLCBgbGF0aGAgaXMgIk4iLyJTIjsg YWxsIG51bWJlcnMgYXJlIHVuc2lnbmVkOwoqIGBsbmdkYCwgYGxuZ21gLCBgbG5nc2AsIGBsbmdo YDogdGhlIHNhbWUgZm9yIGxvbmdpdHVkZSAoaGVtaXNwaGVyZSBpcyAiVyIvIkUiKTsKKiBgbGF0 ZG1zKG5vaGVtaXNwaGVyZSA9IGZhbHNlKWAgcmV0dXJucyBgW2xhdGQsIGxhdG0sIGxhdHMsIGxh dGhdYCB3aXRoIGBub2hlbWlzcGhlcmVgIHBhcmFtIGVxdWFsIHRvIGBmYWxzZWAsIGFuZCBgW8Kx bGF0ZCwgbGF0bSwgbGF0c11gIHdpdGggYHRydWVgOyBzYW1lIHdpdGggYGxuZ2Rtc2AgZm9yIGxv bmdpdHVkZTsKKiBgcGhpYCBhbmQgYM+GYCBpcyBsYXRpdHVkZSBpbiByYWRpYW5zIChoZWxwZnVs IGZvciBtYXRoKSwgYGxhYCBvciBgzrtgIGlzIGxvbmdpdHVkZSBpbiByYWRpYW5zIChub3QgYGxh bWJkYWAgdG8gbm90IGNvbmZ1c2Ugd2l0aCBLZXJuZWwgbWV0aG9kKTsKKiBgdG9fc2AgcmV0dXJu aW5nIHN0cmluZyBsaWtlICI1MC4wMDQ0NDQsMzYuMjMxMzg5IiAoZ29vZCBmb3IgbWFwIFVSTHMg Y29uc3RydWN0aW9uLCBmb3IgZXhhbXBsZSk7CiogYHRvX2gobGF0OiA6bGF0LCBsbmc6IDpsbmcp YCBjb252ZXJ0cyBjb29yZCB0byBoYXNoICh3aXRoIGRlc2lyZWQga2V5IG5hbWVzKTsKKiBgdG9f YWAgY29udmVydHMgY29vcmQgdG8gc2ltcGxlIGBbbGF0LCBsbmddYCBwYWlyOwoqIGBzdHJmY29v cmQoZm9ybWF0c3RyKWAgZm9yIGNvbXBsZXggY29vcmRpbmF0ZSBmb3JtYXR0aW5nIChzZWUgYmVs b3cgZm9yIGZvcm1hdCBzdHJpbmcgZGVzY3JpcHRpb24pOwoqIGBkaXN0YW5jZShvdGhlcilgIGNh bGN1bGF0ZXMgZGlzdGFuY2UgdG8gYW5vdGhlciBwb2ludCAoaW4gbWV0cmVzKTsKKiBgYXppbXV0 aChvdGhlcilgIGNhbGN1bGF0ZXMgZGlyZWN0aW9uIHRvIHRhcmdldCAoaW4gZGVncmVlcyk7Ciog YGVuZHBvaW50KGRpcmVjdGlvbiwgYXppbXV0aClgIGNhbGN1bGF0ZXMgZmluYWwgcG9pbnQgb2Yg dGhlIGxpbmUgb2YgYGRpc3RhbmNlYCBtZXRyZXMgZ29pbmcgaW4gYGF6aW11dGhgIGRpcmVjdGlv biBmcm9tIGN1cnJlbnQgcG9pbnQuCgojIyMjIGBzdHJwY29vcmRgL2BzdHJmY29vcmRgCgpFeGFt cGxlOgoKfn5+cnVieQpraGFya2l2LnN0cmZjb29yZCgnJWxhdGR1wrAlbGF0beKAsiVsYXRz4oCz ICVsYXRoLCAlbG5nZHXCsCVsbmdt4oCyJWxuZ3PigLMgJWxuZ2gnKQojID0+ICI1MMKwMOKAsjE2 4oCzIE4sIDM2wrAxM+KAsjUz4oCzIEUiCn5+fgoKRGlyZWN0aXZlczoKCiogYCVsYXRgIC0gZnVs bCBsYXRpdHVkZSwgZmxvYXQ7IGNhbiBiZSBmb3JtYXR0ZWQgd2l0aCBtb3JlIGNvbnRyb2wgbGlr ZSBgJS40bGF0YCAoZm91ciBkaWdpdHMgYWZ0ZXIgcG9pbnQpIG9yIGAlK2xhdGAgKGV4cGxpY2l0 IHBsdXMgc2lnbiBmb3IgcG9zaXRpdmUgbGF0aXR1ZGVzKTsKKiBgJWxhdGRgIC0gbGF0aXR1ZGUg ZGVncmVlcywgdW5zaWduZWQsIGludGVnZXIKKiBgJWxhdGRzYCAtIGxhdGl0dWRlIGRlZ3JlZXMs IHNpZ25lZAoqIGAlbGF0bWAgLSBsYXRpdHVkZSBtaW51dGVzLCB1bnNpZ25lZCwgaW50ZWdlcgoq IGAlbGF0c2AgLSBsYXRpdHVkZSBzZWNvbmRzLCB1bnNpZ25lZCwgaW50ZWdlciwgYnV0IGNhbiBi ZSBmb3JtYXR0ZWQgYXMgZmxvYXQ6IGAlLjJsYXRzYAoqIGAlbGF0aGAgLSBsYXRpdHVkZSBoZW1p c3BoZXJlLCBvbmUgbGV0dGVyICgiTiIvIlMiKQoqIGAlbG5nYCwgYCVsbmdkYCwgYCVsbmdkc2As IGAlbG5nc2AsIGAlbG5naGAsIGAlbG5nSGAgLSBzYW1lIGZvciBsb25naXR1ZGUKKiBgJSVgIGxp dGVyYWwgYCVgIHNpZ24KCiMjIyBDdXJyZW50IGltcGxlbWVudGF0aW9uCgpQcm9wb3NlZCBpbXBs ZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgYXQgaHR0cHM6Ly9naXRodWIuY29tL3p2ZXJvay9nZW9f Y29vcmQuCgpJdCB3YXMgY3JlYXRlZCB3aXRoIHRob3VnaHRzIG9mIHN0YW5kYXJkIGxpYnJhcnks IHNvLCBhbGwgZG9jcyBhcmUgaW4gUkRvYyBmb3JtYXQsIGFuZCB0ZXN0cy9zcGVjcyBhcmUgaW4g bXNwZWMtY29tcGF0aWJsZSByc3BlYyBmbGF2b3VyLgoKCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5 LWxhbmcub3JnLwoKVW5zdWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3JlLXJlcXVlc3RAcnVieS1s YW5nLm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcv Y2dpLWJpbi9tYWlsbWFuL29wdGlvbnMvcnVieS1jb3JlPgo=