[ruby-core:75997] [Ruby trunk Feature#12361][Rejected] Proposal: add Geo::Coord class to standard library
From:
matz@...
Date:
2016-06-13 14:50:10 UTC
List:
ruby-core #75997
SXNzdWUgIzEyMzYxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgWXVraWhpcm8gTWF0c3Vtb3RvLgoKU3Rh dHVzIGNoYW5nZWQgZnJvbSBPcGVuIHRvIFJlamVjdGVkCgpBbHRob3VnaCBJIGZlZWwgaXQncyBn b29kIHRvIGhhdmUgY29tbW9uIGNvb3JkaW5hdGlvbiBjbGFzcywgSSBkb24ndCB0aGluayBpdCdz IHdpc2UgdG8gcGljayBvbmUgaW1wbGVtZW50YXRpb24gb3ZlciBtYW55IGFuZCBhZGQgaXQgdG8g dGhlIHN0YW5kYXJkIGxpYnJhcnkuIEl0IHNob3VsZCBiZSBkb25lIHRocm91Z2ggc291bmQgY29t cGV0aXRpb24uCgpJZiB5b3UgbmVlZCBhbnkgaGVscCBmcm9tIHRoZSBjb3JlIHRlYW0gKG90aGVy IHRoYW4gYWRkaW5nIGl0IHRvIHRoZSBzdGFuZGFyZCBsaWIpLCBsZXQgdXMga25vdy4KCk1hdHou CgoKCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZlYXR1cmUgIzEy MzYxOiBQcm9wb3NhbDogYWRkIEdlbzo6Q29vcmQgY2xhc3MgdG8gc3RhbmRhcmQgbGlicmFyeQpo dHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTIzNjEjY2hhbmdlLTU5MTk1CgoqIEF1 dGhvcjogVmljdG9yIFNoZXBlbGV2CiogU3RhdHVzOiBSZWplY3RlZAoqIFByaW9yaXR5OiBOb3Jt YWwKKiBBc3NpZ25lZTogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K IyMgUHJvcG9zYWwKCkFkZCBgR2VvOjpDb29yZGAgY2xhc3MgdG8gUnVieSBzdGFuZGFyZCBsaWJy YXJ5LCByZXByZXNlbnRpbmcgYFtsYXRpdHVkZSwgbG9uZ2l0dWRlXWAgcGFpciArIGNvbnZlbmll bmNlIG1ldGhvZHMuIEFkZCBgR2VvYCBzdGFuZGFyZCBsaWJyYXJ5IHdpdGggYWRkaXRpb25hbCBj YWxjdWxhdGlvbnMgYW5kIGNvbnZlbmllbmNlIG1ldGhvZHMuCgojIyBSYXRpb25hbGUKCkluIG1v ZGVybiBhcHBsaWNhdGlvbnMsIHdvcmtpbmcgd2l0aCBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMg aXMgZnJlcXVlbnQuIFdlIHByb3Bvc2UgdG8gdGhpbmsgb2Ygc3VjaCBjb29yZGluYXRlcyAobmFt ZWx5LCBgbGF0aXR1ZGUsIGxvbmdpdHVkZWAgcGFpcikgYXMgb2YgImJhc2ljIiB0eXBlIHRoYXQg c2hvdWxkIGJlIHN1cHBvcnRlZCBieSBzdGFuZGFyZCBsaWJyYXJ5IC0gdGhlIHNhbWUgd2F5IGFz IHdlIHN1cHBvcnQgYFRpbWVgL2BEYXRlYC9gRGF0ZVRpbWVgIGluc3RlYWQgb2YgaGF2aW5nIGl0 IGRlZmluZWQKYnkgdXNlci9nZW1zLgoKVGhpcyB0eXBlIGlzIHRvbyAic21hbGwiIHRvIGJlIGRl ZmluZWQgYnkgc2VwYXJhdGUgZ2VtLCBzbywgYWxsIG9mIGV4aXN0aW5nIGdlbyBnZW1zIChHZW9L aXQsIFJHZW8sIEdlb1J1YnksIEdyYXRpY3VsZSBldGMuKSBkZWZpbmUgdGhlaXIgb3duIGBMYXRM bmdgLCBvciBgTG9jYXRpb25gLCBvciBgUG9pbnRgLCB3aGF0ZXZlci4KCk9uIG90aGVyIGhhbmQs IEFQSSBkZXNpZ24gZm9yIHRoaXMgInNtYWxsIiB0eXBlIGlzIHZhZ3VlIGVub3VnaCBmb3IgYWxs IHRob3NlIHNpbWlsYXIgdHlwZXMgdG8gYmUgaW5jb21wYXRpYmxlIGFuZCBicmVhayBzbWFsbCBo YWJpdHMgYW5kIGNvbnZlbnRpb25zIHdoZW4geW91IGNoYW5nZSBmcm9tIG9uZSBnZW8gbGlicmFy eSB0byBhbm90aGVyLCBvciB0cnkgdG8gdXNlIHNldmVyYWwKc2ltdWx0YW5lb3VzbHkuCgpBZGRp dGlvbmFseSwgbWFueSBnZW1zIHNvbWVob3cgd29ya2luZyB3aXRoIGdlbyBjb29yZGluYXRlcyAo Zm9yIHdlYXRoZXIsIG9yIHRpbWV6b25lLCBvciBhbm90aGVyIHRhc2tzKSBnZW5lcmFsbHkgcHJl ZmVyIG5vdCB0byBpbnRyb2R1Y2UgdHlwZSwgYW5kIGp1c3Qgd29yayB3aXRoIGBbbGF0LCBsbmdd YCBhcnJheSwgd2hpY2ggaXMgbm90IHZlcnkgY29udmVuaWVudCwgZmFpdGhmdWxseS4KClNvLCBo YXZpbmcgImdlbyBjb29yZGluYXRlcyIgZnVuY3Rpb25hbGl0eSBpbiBzdGFuZGFyZCBsaWJyYXJ5 IHNlZW1zIHJlYXNvbmFibGUgYW5kIHZhbHVhYmxlLgoKIyMgRXhpc3RpbmcvcmVmZXJlbmNlIHNv bHV0aW9ucwoKUnVieToKCiogW0dlb0tpdDo6TGF0TG5nXShodHRwOi8vd3d3LnJ1Ynlkb2MuaW5m by9naXRodWIvZ2Vva2l0L2dlb2tpdC9tYXN0ZXIvR2Vva2l0L0xhdExuZyk7CiogW1JHZW86OkZl YXR1cmU6OlBvaW50XShodHRwOi8vd3d3LnJ1Ynlkb2MuaW5mby9nZW1zL3JnZW8vUkdlby9GZWF0 dXJlL1BvaW50KSAod2l0aCBzZXZlcmFsICJwcml2YXRlIiBpbXBsZW1lbnRhdGlvbiBjbGFzc2Vz KTsgUkdlbyBpbXBsZW1lbnRzIGZ1bGwgW09HQyBTaW1wbGUgRmVhdHVyZXNdKGh0dHBzOi8vZW4u d2lraXBlZGlhLm9yZy93aWtpL1NpbXBsZV9GZWF0dXJlcykgc3BlY2lmaWNhdGlvbiwgc28sIGl0 cyBwb2ludHMgaGF2ZSBgemAgYW5kIGBtYCBjb29yZGluYXRlcywgcHJvamVjdGlvbiBhbmQgbXVj aCBtb3JlOwoqIFtHcmF0aWN1bGU6OkxvY2F0aW9uXShodHRwOi8vd3d3LnJ1Ynlkb2MuaW5mby9n aXRodWIvY29sbGVjdGl2ZWlkZWEvZ3JhdGljdWxlL0dyYXRpY3VsZS9Mb2NhdGlvbikgKG5vdCBz dHJpY3RseSBhIGBbbGF0LGxuZ11gIHdyYXBwZXIpOwoqIFtSb3NhbWFyeTo6Tm9kZV0oaHR0cDov L3d3dy5ydWJ5ZG9jLmluZm8vZ2Vtcy9yb3NlbWFyeS8wLjQuNC9Sb3NlbWFyeS9Ob2RlKSAoZm9s bG93cyBuYW1pbmcgY29udmVudGlvbiBvZiB1bmRlcmx5aW5nIE9wZW5TdHJlZXRNYXAgQVBJKTsK Ck90aGVyIHNvdXJjZXM6CgoqIFB5dGhvbjogW2dlb3B5LlBvaW50XShodHRwOi8vZ2VvcHkucmVh ZHRoZWRvY3Mub3JnL2VuL2xhdGVzdC8jZ2VvcHkucG9pbnQuUG9pbnQpOwoqIFtFbGFzdGljU2Vh cmNoXShodHRwczovL3d3dy5lbGFzdGljLmNvL2Jsb2cvZ2VvLWxvY2F0aW9uLWFuZC1zZWFyY2gp IHVzZXMgaGFzaCB3aXRoICJsYXQiIGFuZCAibG9uIiBrZXlzOwoqIEdvb2dsZSBNYXBzIFtHZW9j b2RpbmcgQVBJXShodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRp b24vZ2VvY29kaW5nL2ludHJvI0dlb2NvZGluZ1Jlc3BvbnNlcykgdXNlcyBoYXNoIHdpdGggImxh dCIgYW5kICJsbmciIGtleXM7CiogUG9zdEdJUzogW3ByZXR0eSBjb21wbGljYXRlZF0oaHR0cDov L3Bvc3RnaXMubmV0L2RvY3MvbWFudWFsLTIuMi91c2luZ19wb3N0Z2lzX2RibWFuYWdlbWVudC5o dG1sI1JlZk9iamVjdCkgIGhhcyBfZ2VvbWV0cmljYWxfIChwcm9qZWN0ZWQpIGFuZCBfZ2VvZ3Jh cGhpY2FsXyAobGF0LCBsbmcpIHBvaW50cyBhbmQgc3R1ZmYuCgojIyBEZXNpZ24gZGVjaXNpb25z CgpXaGlsZSBkZXNpZ25pbmcgYEdlb2AgbGlicmFyeSwgb3VyIHJlZmVyZW5jZSBwb2ludCB3YXMg c3RhbmRhcmQgYFRpbWVgIGNsYXNzIChhbmQsIHRvIGxlc3NlciBleHRlbnQsIGBEYXRlYC9gRGF0 ZVRpbWVgKS4gSXQgaGFzIHRoaXMgcmVzcG9uc2liaWxpdGllczoKCiogc3RvcmVzIGRhdGEgaW4g c2ltcGxlIGludGVybmFsIGZvcm07CiogaGVscHMgdG8gcGFyc2UgYW5kIGZvcm1hdCBkYXRhIHRv IGFuZCBmcm9tIHN0cmluZ3M7CiogcHJvdmlkZXMgZWFzeSBhY2Nlc3MgdG8gbG9naWNhbCBjb21w b25lbnRzIG9mIGRhdGE7CiogYWxsb3dzIG1vc3Qgc2ltcGxlIGFuZCB1bmFtYmlndW91cyBjYWxj dWxhdGlvbnMuCgoqKk1haW4gdHlwZSBuYW1lKio6IGFzIGZhciBhcyB3ZSBjYW4gc2VlLCB0aGVy ZSdzIG5vIGdvb2Qgc2luZ3VsYXIgbmFtZSBmb3IgYChsYXQsIGxuZylgIHBhaXIgY29uY2VwdC4g QXMgbWVudGlvbmVkIGFib3ZlLCB0aGVyZSBjYW4gYmUgc2VlbiBuYW1lcyBsaWtlIGBMYXRMbmdg LCBvciBgTG9jYXRpb25gLCBvciBgUG9pbnRgOyBhbmQgaW4gbmF0dXJhbCBsYW5ndWFnZQpqdXN0 ICJjb29yZGluYXRlcyIgdXNlZCBmcmVxdWVudGx5LiBXZSBwcm9wb3NlIHRoZSBuYW1lIGBDb29y ZGAsIHdoaWNoIGlzIHByZXR0eSBzaG9ydCwgZWFzeSB0byByZW1lbWJlciwgZGVtb25zdHJhdGVz IGludGVudGlvbnMgKGFuZCBsb29rcyBsaWtlIHNpbmd1bGFyLCBzbyB5b3UgY2FuIGhhdmUgIm9u ZSBjb29yZCBvYmplY3QiIGFuZCAiYXJyYXkgb2YgY29vcmRzIiwKd2hpY2ggaXMgbm90IDEwMCUg bGluZ3Vpc3RpY2FsbHkgY29ycmVjdCwgeWV0IGNvbnZlbmllbnQpLiBBbHRlcm5hdGl2ZSBgUG9p bnRgIG5hbWUgc2VlbXMgdG8gYmUgdG9vIGFtYmlnb3VzLCBiZWluZyB1c2VkIGluIG1hbnkgY29u dGV4dHMuCgpgR2VvOjpDb29yZGAgb2JqZWN0IGlzICoqaW1tdXRhYmxlKiosIHRoZXJlJ3Mgbm8g c2VtYW50aWNhbCBzZW5zZSBpbiBgbG9jYXRpb24ubGF0aXR1ZGUgPSAuLi5gIG9yIHNvbWV0aGlu ZyBsaWtlIHRoaXMuCgoqKlVuaXRzKio6IGBHZW9gIGNhbGN1bGF0aW9ucyAoanVzdCBsaWtlIGBU aW1lYCBjYWxjdWxhdGlvbnMpIHByb3ZpZGUgbm8gdW5pdHMgb3B0aW9ucywganVzdCByZXR1cm5p bmcgbnVtYmVycyBtZWFzdXJlZCBpbiAiZGVmYXVsdCIgdW5pdHM6IG1ldHJlcyBmb3IgZGlzdGFu Y2VzIChhcyB0aGV5IGFyZSBTSSB1bml0KSBhbmQgZGVncmVlcyBmb3IgYXppbXV0aC4gTGF0aXR1 ZGUgYW5kIGxvbmdpdHVkZSBhcmUgc3RvcmVkIGluIGRlZ3JlZXMsIGJ1dCByYWRpYW5zIHZhbHVl cyBhY2Nlc3NvcnMgYXJlIHByb3ZpZGVkIChiZWluZyB3aWRlbHkgdXNlZCBpbiBnZW9kZXN5IG1h dGgpLgoKQWxsIGNvb3JkaW5hdGVzIGFuZCBjYWxjdWxhdGlvbnMgYXJlIHRob3VnaHQgdG8gYmUg aW4gV0dTIDg0IGNvb3JkaW5hdGVzIHJlZmVyZW5jZSBzeXN0ZW0sIGJlaW5nIGN1cnJlbnQgc3Rh bmRhcmQgZm9yIG1hcHMgYW5kIEdQUy4KClRoZXJlJ3MgaW50cm9kdWNlZCAqKmNvbmNlcHQgb2Yg Z2xvYmUqKiB1c2VkIGludGVybmFsbHkgZm9yIGNhbGN1bGF0aW9ucy4gT25seSBnZW5lcmljIChz cGhlcmUpIGFuZCBFYXJ0aCBnbG9iZXMgYXJlIGltcGxlbWVudGVkLCBidXQgZm9yIDIwMTYgd2Ug ZmVlbCBsaWtlIGN1cnJlbnQgZGVzaWduIG9mIGJhc2ljIHR5cGVzIHNob3VsZCB0YWtlIGluIGNv bnNpZGVyYXRpb24KcG9zc2liaWxpdHkgb2Ygd3JpdGluZyBSdWJ5IHNjcmlwdHMgZm9yIE1hcnMg bWFwcyBhbmFseXNpcy4gT25seSBvbmUgZ2VvZGVzeSBmb3JtdWxhIGlzIGltcGxlbWVudGVkIChW aW5jZW50eSwgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgb25lIG9mIHRoZSBtb3N0IHByZWNpc2UpLCBh cyBmb3Igc3RhbmRhcmQgbGlicmFyeSBjbGFzcyBpdCBjb25zaWRlcmVkIHVubmVjZXNzYXJ5IHRv IHByb3ZpZGUgdXNlciB3aXRoIGdlb2Rlc3kgZm9ybXVsYWUgb3B0aW9ucy4KCk5vICoqbWFwIHBy b2plY3Rpb24qKiBtYXRoIHdhcyBhZGRlZCBpbnRvIGN1cnJlbnQgcHJvcG9zYWwsIGJ1dCBpdCBt YXkgYmUgYSBnb29kIGRpcmVjdGlvbiBmb3IgZnVydGhlciB3b3JrLiBObyAqKmVsZXZhdGlvbioq IGRhdGEgY29uc2lkZXJlZCBlaXRoZXIuCgojIyBQcm9wb3NhbCBkZXRhaWxzCgojIyMgYEdlbzo6 Q29vcmRgIGNsYXNzCgpSZXByZXNlbnRzIGBbbGF0aXR1ZGUsIGxvbmdpdHVkZV1gIHBhaXIuIExh dGl0dWRlIGlzIC05MCB0byArOTAgKGRlZ3JlZXMpLiBMb25naXR1ZGUgaXMgLTE4MCB0byArMTgw LgoKQ2xhc3MgbWV0aG9kczoKCiogYG5ldyhsYXQsIGxuZylgIGNyZWF0ZXMgaW5zdGFuY2UgZnJv bSB0d28gTnVtZXJpY3MgKGluIGRlZ3JlZXMpOwoqIGBuZXcobGF0OiwgbG5nOilgIGtleXdvcmQg YXJndW1lbnRzIGZvcm0gb2YgYWJvdmU7CiogYG5ldyhsYXRkOiwgbGF0bTosIGxhdHM6LCBsYXRo OiwgbG5nZDogbG5nbTosIGxuZ3M6IGxuZ2g6KWAgY3JlYXRlcyBpbnN0YW5jZSBmcm9tIGNvb3Jk aW5hdGVzIGluIChkZWcsIG1pbiwgc2VjLCBoZW1pc3BoZXJlKSBmb3JtOyBoZW1pc3BoZXJlcyBh cmUgIk4iLyJTIiBmb3IgbGF0aXR1ZGUgYW5kICJXIi9FIiBmb3IgbG9uZ2l0dWRlOyBhbnkgY29t cG9uZW50IGV4Y2VwdCBmb3IgZGVncmVlcyBjYW4gYmUgb21pdHRlZDsgaWYgaGVtaXNwaGVyZSBp cyBvbWl0dGVkLCBpdCBpcyBkZWNpZGVkIGJ5IGRlZ3JlZXMgc2lnbiAobGF0OiBwb3NpdGl2ZSBp cyAiTiIsIGxuZzogcG9zaXRpdmUgaXMgIkUiKTsKKiBgZnJvbV9oKGhhc2gpYCBjcmVhdGVzIGlu c3RhbmNlIGZyb20gaGFzaCB3aXRoIGAibGF0ImAgb3IgYCJsYXRpdHVkZSJgIGtleSBhbmQgYCJs b24iYCBvciBgImxuZyJgIG9yIGAibG9uZ2l0dWRlImAga2V5IChjYXNlLWluZGVwZW5kZW50KTsK KiBgZnJvbV9yYWRpYW5zKHBoaSwgbGEpYCBjcmVhdGVzIGluc3RhbmNlIGZyb20gcmFkaWFuIHZh bHVlczsKKiBgc3RycGNvb3JkYCBwYXJzZXMgc3RyaW5nIGludG8gY29vcmRpbmF0ZXMgYnkgcHJv dmlkZWQgcGF0dGVybiAoc2VlIGJlbG93IGZvciBwYXR0ZXJuIGRlc2NyaXB0aW9uKTsKKiBgcGFy c2VfbGxgIHBhcnNlcyBjb29yZGluYXRlcyBzdHJpbmcgaW4gYCJmbG9hdCwgZmxvYXQiYCBmb3Jt OwoqIGBwYXJzZV9kbXNgIHBhcnNlcyBjb29yZGluYXRlcyBzdHJpbmcgaW4gYGQgbSBzIGgsIGQg bSBzIGhgIGZvcm1hdCAoY29uc2lkZXJpbmcgc2V2ZXJhbCB3aWRlbHkgdXNlZCBzeW1ib2xzIGZv ciBkZWdyZWVzLCBtaW51dGVzIGFuZCBzZWNvbmRzKTsKKiBgcGFyc2VgIHRyaWVzIHRvIHBhcnNl IHN0cmluZyBpbnRvIGNvb3JkaW5hdGVzIGZyb20gdmFyaW91cyBmb3JtYXRzLgoKSW5zdGFuY2Ug bWV0aG9kczoKCiogYGxhdGAgYW5kIGBsbmdgLCByZXR1cm5pbmcgYEZsb2F0YHMsIHNpZ25lZDsK KiBgbGF0aXR1ZGVgIGFuZCBgbG9uZ2l0dWRlYCBhcyBhbiBhbGlhc2VzOyBgbG9uYCBhcyBhbiBh ZGRpdGlvbmFsIGFsaWFzZXMgZm9yIGxvbmdpdHVkZTsKKiBgbGF0ZGAsIGBsYXRtYCwgYGxhdHNg LCBgbGF0aGA6IGRlZ3JlZSwgbWludXRlLCBzZWNvbmQsIGhlbWlzcGhlcmU7IGBsYXRkYCBhbmQg YGxhdG1gIGFyZSBgRml4bnVtYCwgYGxhdHNgIGlzIGBGbG9hdGAsIGBsYXRoYCBpcyAiTiIvIlMi OyBhbGwgbnVtYmVycyBhcmUgdW5zaWduZWQ7CiogYGxuZ2RgLCBgbG5nbWAsIGBsbmdzYCwgYGxu Z2hgOiB0aGUgc2FtZSBmb3IgbG9uZ2l0dWRlIChoZW1pc3BoZXJlIGlzICJXIi8iRSIpOwoqIGBs YXRkbXMobm9oZW1pc3BoZXJlID0gZmFsc2UpYCByZXR1cm5zIGBbbGF0ZCwgbGF0bSwgbGF0cywg bGF0aF1gIHdpdGggYG5vaGVtaXNwaGVyZWAgcGFyYW0gZXF1YWwgdG8gYGZhbHNlYCwgYW5kIGBb wrFsYXRkLCBsYXRtLCBsYXRzXWAgd2l0aCBgdHJ1ZWA7IHNhbWUgd2l0aCBgbG5nZG1zYCBmb3Ig bG9uZ2l0dWRlOwoqIGBwaGlgIGFuZCBgz4ZgIGlzIGxhdGl0dWRlIGluIHJhZGlhbnMgKGhlbHBm dWwgZm9yIG1hdGgpLCBgbGFgIG9yIGDOu2AgaXMgbG9uZ2l0dWRlIGluIHJhZGlhbnMgKG5vdCBg bGFtYmRhYCB0byBub3QgY29uZnVzZSB3aXRoIEtlcm5lbCBtZXRob2QpOwoqIGB0b19zYCByZXR1 cm5pbmcgc3RyaW5nIGxpa2UgIjUwLjAwNDQ0NCwzNi4yMzEzODkiIChnb29kIGZvciBtYXAgVVJM cyBjb25zdHJ1Y3Rpb24sIGZvciBleGFtcGxlKTsKKiBgdG9faChsYXQ6IDpsYXQsIGxuZzogOmxu ZylgIGNvbnZlcnRzIGNvb3JkIHRvIGhhc2ggKHdpdGggZGVzaXJlZCBrZXkgbmFtZXMpOwoqIGB0 b19hYCBjb252ZXJ0cyBjb29yZCB0byBzaW1wbGUgYFtsYXQsIGxuZ11gIHBhaXI7CiogYHN0cmZj b29yZChmb3JtYXRzdHIpYCBmb3IgY29tcGxleCBjb29yZGluYXRlIGZvcm1hdHRpbmcgKHNlZSBi ZWxvdyBmb3IgZm9ybWF0IHN0cmluZyBkZXNjcmlwdGlvbik7CiogYGRpc3RhbmNlKG90aGVyKWAg Y2FsY3VsYXRlcyBkaXN0YW5jZSB0byBhbm90aGVyIHBvaW50IChpbiBtZXRyZXMpOwoqIGBhemlt dXRoKG90aGVyKWAgY2FsY3VsYXRlcyBkaXJlY3Rpb24gdG8gdGFyZ2V0IChpbiBkZWdyZWVzKTsK KiBgZW5kcG9pbnQoZGlyZWN0aW9uLCBhemltdXRoKWAgY2FsY3VsYXRlcyBmaW5hbCBwb2ludCBv ZiB0aGUgbGluZSBvZiBgZGlzdGFuY2VgIG1ldHJlcyBnb2luZyBpbiBgYXppbXV0aGAgZGlyZWN0 aW9uIGZyb20gY3VycmVudCBwb2ludC4KCiMjIyMgYHN0cnBjb29yZGAvYHN0cmZjb29yZGAKCkV4 YW1wbGU6Cgp+fn5ydWJ5CmtoYXJraXYuc3RyZmNvb3JkKCclbGF0ZHXCsCVsYXRt4oCyJWxhdHPi gLMgJWxhdGgsICVsbmdkdcKwJWxuZ23igLIlbG5nc+KAsyAlbG5naCcpCiMgPT4gIjUwwrAw4oCy MTbigLMgTiwgMzbCsDEz4oCyNTPigLMgRSIKfn5+CgpEaXJlY3RpdmVzOgoKKiBgJWxhdGAgLSBm dWxsIGxhdGl0dWRlLCBmbG9hdDsgY2FuIGJlIGZvcm1hdHRlZCB3aXRoIG1vcmUgY29udHJvbCBs aWtlIGAlLjRsYXRgIChmb3VyIGRpZ2l0cyBhZnRlciBwb2ludCkgb3IgYCUrbGF0YCAoZXhwbGlj aXQgcGx1cyBzaWduIGZvciBwb3NpdGl2ZSBsYXRpdHVkZXMpOwoqIGAlbGF0ZGAgLSBsYXRpdHVk ZSBkZWdyZWVzLCB1bnNpZ25lZCwgaW50ZWdlcgoqIGAlbGF0ZHNgIC0gbGF0aXR1ZGUgZGVncmVl cywgc2lnbmVkCiogYCVsYXRtYCAtIGxhdGl0dWRlIG1pbnV0ZXMsIHVuc2lnbmVkLCBpbnRlZ2Vy CiogYCVsYXRzYCAtIGxhdGl0dWRlIHNlY29uZHMsIHVuc2lnbmVkLCBpbnRlZ2VyLCBidXQgY2Fu IGJlIGZvcm1hdHRlZCBhcyBmbG9hdDogYCUuMmxhdHNgCiogYCVsYXRoYCAtIGxhdGl0dWRlIGhl bWlzcGhlcmUsIG9uZSBsZXR0ZXIgKCJOIi8iUyIpCiogYCVsbmdgLCBgJWxuZ2RgLCBgJWxuZ2Rz YCwgYCVsbmdzYCwgYCVsbmdoYCwgYCVsbmdIYCAtIHNhbWUgZm9yIGxvbmdpdHVkZQoqIGAlJWAg bGl0ZXJhbCBgJWAgc2lnbgoKIyMjIEN1cnJlbnQgaW1wbGVtZW50YXRpb24KClByb3Bvc2VkIGlt cGxlbWVudGF0aW9uIGNhbiBiZSBmb3VuZCBhdCBodHRwczovL2dpdGh1Yi5jb20venZlcm9rL2dl b19jb29yZC4KCkl0IHdhcyBjcmVhdGVkIHdpdGggdGhvdWdodHMgb2Ygc3RhbmRhcmQgbGlicmFy eSwgc28sIGFsbCBkb2NzIGFyZSBpbiBSRG9jIGZvcm1hdCwgYW5kIHRlc3RzL3NwZWNzIGFyZSBp biBtc3BlYy1jb21wYXRpYmxlIHJzcGVjIGZsYXZvdXIuCgoKCgotLSAKaHR0cHM6Ly9idWdzLnJ1 YnktbGFuZy5vcmcvCgpVbnN1YnNjcmliZTogPG1haWx0bzpydWJ5LWNvcmUtcmVxdWVzdEBydWJ5 LWxhbmcub3JnP3N1YmplY3Q9dW5zdWJzY3JpYmU+CjxodHRwOi8vbGlzdHMucnVieS1sYW5nLm9y Zy9jZ2ktYmluL21haWxtYW4vb3B0aW9ucy9ydWJ5LWNvcmU+Cg==