[ruby-core:118916] [Ruby master Feature#18368] Range#step semantics for non-Numeric ranges
From:
"zverok (Victor Shepelev) via ruby-core" <ruby-core@...>
Date:
2024-08-22 06:44:24 UTC
List:
ruby-core #118916
SXNzdWUgIzE4MzY4IGhhcyBiZWVuIHVwZGF0ZWQgYnkgenZlcm9rIChWaWN0b3IgU2hlcGVsZXYp Lg0KDQoNCkBtYXR6IEkgY2FuIGNlcnRhaW5seSBpbXBsZW1lbnQgdGhlIHNwZWNpYWxpemF0aW9u LCBidXQganVzdCB0byBjbGFyaWZ5OiBhcmUgdGhlcmUgYW55IGV2aWRlbmNlIHRoYXQgcGVvcGxl IHVzZSBgKCJhIi4uInoiKS5zdGVwKDMpYCBpbiBhbnkgbWVhbmluZ2Z1bCB3YXk/IChVbmZvcnR1 bmF0ZWx5LCBJIGhhdmUgbm8gd2F5IG9mIGRvaW5nIHRoZSBpbnZlc3RpZ2F0aW9uIG15c2VsZiwg YnV0IHByb2JhYmx5IHRob3NlIHdpdGggYWNjZXNzIHRvIOKAnHNlYXJjaCB0aHJvdWdoIGFsbCBl eGlzdGluZyBnZW1zIGNvZGXigJ0gc2VydmVyIG1pZ2h0IHNoZWQgc29tZSBsaWdodCBvbiBpdD8p DQoNCldoYXQgSSBhbSBjb25jZXJuZWQgYWJvdXQgaXMgdGhhdCBoYXZpbmcgaXQgc3BlY2lhbGl6 ZWQganVzdCBmb3Igc3RyaW5ncyBoYXMgYW4gaW50dWl0aW9uLWJyZWFraW5nIGNvbnNlcXVlbmNl cyBhbmQgd291bGQgY2VydGFpbmx5IGJlIHBlcmNlaXZlZCBsaWtlIGEg4oCcYnVn4oCdIHNvbWV3 aGVyZSBkb3duIHRoZSByb2FkLiBXZSBoYWQgdGhlIHNhbWUgd2l0aCBzd2l0Y2hpbmcgZnJvbSBg aW5jbHVkZT9gIHRvIGBjb3Zlcj9gIGFzIGEgYFJhbmdlIz09PWAgaW1wbGVtZW50YXRpb246DQoq IEluIDIuNiwgc3RyaW5ncyB3ZXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGNoYW5nZQ0KKiAuLi5idXQg YWZ0ZXIgc2V2ZXJhbCByZXBvcnRzLCBpdCB0dXJuZWQgb3V0IHRoYXQgaXQgaXMgYmV0dGVyIHRv IG1ha2Ugc3RyaW5nIHJhbmdlcyBiZWhhdmUgY29uc2lzdGVudGx5IHdpdGggZXZlcnl0aGluZyBl bHNlLCB3aGljaCBoYXBwZW5lZCBpbiAyLjcuDQoNCkluIGdlbmVyYWwsIFJhbmdlIGFscmVhZHkg aGF2ZSBhIGhpc3Rvcnkgb2Ygc3VjaCBzcGVjaWFsaXphdGlvbnMgKGxpa2Ugc3BlY2lmaWNhbGx5 IGNvbnNpZGVyaW5nIGBUaW1lYCDigJxsaW5lYXLigJ0gdmFsdWUgaW4gMi4zIHRvIGZpeCBgY2Fz ZSBUaW1lLm5vdyAuLi5gIGJlaGF2aW9yLCBiZWZvcmUgZ2VuZXJpYyBzd2l0Y2hpbmcgdG8gYGNv dmVyP2AgZml4ZWQgaXQgY29uc2lzdGVubHR5KSwgYW5kIEkgYmVsaWV2ZSBpdCBpcyBtb3N0bHkg Y29uZnVzaW5nIHRvIHRoZSBsYW5ndWFnZeKAmXMgdXNlcnM6IHNvbWUgY29yZSBjbGFzcyBiZWhh dmluZyBhIOKAnHNwZWNpYWzigJ0gd2F5IHRoYXQgY2Fu4oCZdCBiZSBpbWl0YXRlZCBieSBhbnkg b3RoZXIgY2xhc3MsIGJyZWFraW5nIGFsbCBhbmQgZXZlcnkg4oCcZHVjayB0eXBpbmfigJ0gaW50 dWl0aW9uLg0KDQpTbywgYSBiaWcgcXVlc3Rpb24gZm9yIG1lIGlzIGlmIHRoZSBzcGVjaWFsaXph dGlvbiBpcyBqdXN0aWZpZWQgYnkgc29tZSBleGlzdGluZyB1c2UgY2FzZXMsIG9yIGJ5IGEgZ2Vu ZXJpYyBjYXV0aW9uIGFnYWluc3QgYnJlYWtpbmcgdGhpbmdzIChhbmQgaW4gdGhlIGxhdHRlciBj YXNlLCB3aG8gZ3VhcmFudGVlcyB0aGF0IGluIHNvbWUgY29kZWJhc2Ugbm9ib2R5IGhhdmUgcmVs aWVkIG9uIHNvbWUgX2N1c3RvbV8gb2JqZWN0IHJhbmdlIGFuZCBpbnRlZ2VyIHN0ZXAgYmVoYXZp b3I/Li4gSURLKQ0KDQpTbywgSSBzZWUgdGhlc2Ugb3B0aW9ucyBoZXJlOg0KDQoxLiBMZWF2ZSB0 aGUg4oCcY29uc2lzdGVudCBmaXJzdOKAnSBvcHRpb246IG5vIHNwZWNpYWxpemF0aW9uIGZvciBg U3RyaW5nYCAodW5sZXNzIHRoZXJlIGlzIGEgc3Ryb25nIHByb29mIHRoYXQgc29tZSBwb3B1bGFy IGdlbSBvciBhIHdpZGVzcHJlYWQgaWRpb20gaXMgaHVydCBieSB0aGlzKTsNCjIuIFNwZWNpYWxp emUgaXQgZm9yIHN0cmluZ3MgdG8gb25seSB3b3JrIHdpdGggbnVtZXJpYyBzdGVwcywgYW5kIGRv Y3VtZW50IHRoYXQg4oCcc3RyaW5ncyBhcmUgc3BlY2lhbCwgZGVhbCB3aXRoIGl04oCdDQozLiBT cGVjaWFsaXplIGl0IGZvciBzdHJpbmdzIHRvIHdvcmsgd2l0aCBib3RoIG51bWVyaWMgX2FuZF8g c3RyaW5nIHN0ZXBzIChieSBleHBsaWNpdCB0eXBlLWNoZWNraW5nIOKAnGlmIHRoZSByYW5nZSBp cyBzdHJpbmcgJiB0aGUgc3RlcCBpcyBpbnRlZ2Vy4oCdKeKAlHRoYXTigJlzIHdoYXQgQGtudSBh c2tzIGFib3V0IGluICMxODM2OCNub3RlLTMzLiBNYXliZSBldmVuIGF2b2lkIGRvY3VtZW50aW5n IHRoZSBzcGVjaWFsIGJlaGF2aW9yLCBvciBkb2N1bWVudCBpdCBpcyBkaXNjb3VyYWdlZCAoc28g dGhlIG9sZCBjb2Rl4oCUaWYgaXQgZXhpc3Rz4oCUd291bGRu4oCZdCBicmVhaywgYnV0IHRoZSBu ZXcgY29kZSB3b3VsZG7igJl0IHJlbHkgb24gaXQpDQo0LiBNYXliZSBtYWtlIGl0IGFsd2F5cyB3 b3JrIHdpdGggaW50ZWdlciBzdGVwcyBhcyBhIGZhbGxiYWNrICh0aG91Z2ggdGhlcmUgaXMgbm8g d2F5IHRvIHJlbGlhYmx5IGNoZWNrIOKAnHdoZXRoZXIgdGhpcyBwYXJ0aWN1bGFyIGNsYXNzIHN1 cHBvcnRzIGBvYmoraW50YCBkaXJlY3RseSwgb3Igd2UgbmVlZCB0byBzd2l0Y2ggYmFjayB0byB0 aGUg4oCYbnVtYmVyIG9mIHN0ZXBz4oCZIGJlaGF2aW9y4oCdKQ0KNS4gUmV0aGluayB0aGUgZGVj aXNpb24gaW4gZ2VuZXJhbCAoYWdhaW4sIGlmIHRoZXJlIGlzIGEgZmlybSBncm91bmQgZm9yIGNv bmNlcm5zIG92ZXIgdGhlIGNvbXBhdGliaWxpdHkpLCBhbmQgaW50cm9kdWNlIF9hbm90aGVyXyBt ZXRob2QgdGhhdCB3aWxsIGJlaGF2ZSBsaWtlIHRoZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQgYCNz dGVwYCByZWx5aW5nIG9uIGAjK2AsIHJldmVydGluZyBgI3N0ZXBgIHRvIHRoZSBvbGQgYmVoYXZp b3IuDQoNCk9mIHRob3NlLCBJIHdvdWxkIGhvbmVzdGx5IHByZWZlciB0byBhdm9pZCAoMikgKHZl cnkgY29uZnVzaW5nIGZvciBuZXcgdXNlcnMsIHRlYWNoaW5nLCBhbmQgZ2VuZXJhbCBsYW5ndWFn ZeKAmXMgaW1hZ2UpIGFuZCAoNSk7IEkgZG9u4oCZdCB0aGluayAoNCkgaXMgZ2VuZXJhbGx5IHBv c3NpYmxlOyB3aGljaCBsZWF2ZXMgdXMgd2l0aCAoMSkgKGhvdyBpcyBpdCBub3cpIGFuZCAoMykg KGFkZGl0aW9uYWwgc3BlY2lhbGl6YXRpb24gZm9yIHN0cmluZ3Mgd2hpY2ggX2Fsc29fIHN1cHBv cnRzIG51bWVyaWMgc3RlcHMgb24gdGhlIGJhc2lzIG9mIHJhbmdlIGJlZ2luIGFuZCBzdGVwIGNs YXNzLCBpbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIHN0cmluZyBzdGVwcykuIA0KDQpUQkgsIEkg c3RpbGwgYmVsaWV2ZSB0aGVyZSB3b3VsZCBiZSB2ZXJ5IGxvdyBhbW91bnQgb2YgaW5jb21wYXRp YmlsaXR5IGluIGV4aXN0aW5nIGNvZGUsIGJ1dCBJIG1pZ2h0IGdlbnVpbmVseSBtaXNzIHNvbWUg Y29tbW9uIGtub3dsZWRnZS4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KRmVhdHVyZSAjMTgzNjg6IFJhbmdlI3N0ZXAgc2VtYW50aWNzIGZvciBub24tTnVtZXJp YyByYW5nZXMNCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xODM2OCNjaGFuZ2Ut MTA5NDg1DQoNCiogQXV0aG9yOiB6dmVyb2sgKFZpY3RvciBTaGVwZWxldikNCiogU3RhdHVzOiBP cGVuDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpJIGFtIHNvcnJ5 IGlmIHRoZSBxdWVzdGlvbiBoYWQgYWxyZWFkeSBiZWVuIGRpc2N1c3NlZCwgY2FuJ3QgZmluZCB0 aGUgcmVsZXZhbnQgdG9waWMuDQoNCiJJbnR1aXRpdmVseSIsIHRoaXMgbG9va3MgKGZvciBtZSkg bGlrZSBhIG1lYW5pbmdmdWwgc3RhdGVtZW50Og0KDQpgYGBydWJ5DQooVGltZS5wYXJzZSgnMjAy MS0xMi0wMScpLi5UaW1lLnBhcnNlKCcyMDIxLTEyLTI0JykpLnN0ZXAoMS5kYXkpLnRvX2ENCiMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBe Xl5eXiBvciBqdXN0IDI0KjYwKjYwDQpgYGANClVuZm9ydHVuYXRlbHksIGl0IGRvZXNuJ3Qgd29y ayB3aXRoICJUeXBlRXJyb3IgKGNhbid0IGl0ZXJhdGUgZnJvbSBUaW1lKSIuDQpJbml0aWFsbHkg aXQgbG9va2VkIGxpa2UgYSBidWcgZm9yIG1lLCBidXQgYWZ0ZXIgZGlnZ2luZyBhIGJpdCBpbnRv IGNvZGUvZG9jcywgSSB1bmRlcnN0b29kIHRoYXQgYFJhbmdlI3N0ZXBgIGhhcyBhbiBvZGQgc2Vt YW50aWNzIG9mICJhZHZhbmNlIHRoZSBiZWdpbiBOIHRpbWVzIHdpdGggYCNzdWNjYCwgYW5kIHlp ZWxkIHRoZSByZXN1bHQiLCB3aXRoIE4gYmVpbmcgYWx3YXlzIGludGVnZXI6DQpgYGBydWJ5DQoo J2EnLi4neicpLnN0ZXAoMykuZmlyc3QoNSkNCiMgPT4gWyJhIiwgImQiLCAiZyIsICJqIiwgIm0i XQ0KYGBgDQoNClRoZSBmYWN0IHRoYXQgc2VtYW50aWMgaXMgIm9kZCIgaXMgY29uZmlybWVkIGJ5 IHRoZSBmYWN0IHRoYXQgZm9yIEZsb2F0IGl0IGlzIHJlZGVmaW5lZCB0byBkbyB3aGF0IEkgImlu dHVpdGl2ZWx5IiBleHBlY3RlZDoNCmBgYHJ1YnkNCigxLjAuLjcuMCkuc3RlcCgwLjMpLmZpcnN0 KDUpDQojID0+IFsxLjAsIDEuMywgMS42LCAxLjksIDIuMl0gDQpgYGANCihMaWtlIHdpdGggW2BS YW5nZSM9PT1gIHNvbWUgdGltZSBhZ29dKGh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vl cy8xNDU3NSksIEkgYmVsaWV2ZSB0aGF0IHRvIGJlIGEgc3Ryb25nIHByb29mIG9mIHRoZSB3cm9u ZyBnZW5lcmljIHNlbWFudGljcywgaWYgZm9yIG51bWJlcnMgdGhlIHNlbWFudGljcyBuZWVkZWQg dG8gYmUgcmVkZWZpbmVkIGNvbXBsZXRlbHkuKQ0KDQpBbm90aGVyIHRoaW5nIHRvIG5vdGUgaXMg dGhhdCAic2tpcCBOIGVsZW1lbnRzIiBzZWVtIHRvIGJlIHJhdGhlciAiZ2VuZXJpY2FsbHkgRW51 bWVyYWJsZS1yZWxhdGVkIiB5ZXQgaXQgaXNuJ3QgZGVmaW5lZCBvbiBgRW51bWVyYWJsZWAgKGJl Y2F1c2Ugbm9ib2R5IG5lZWRzIHRoaXMgc2VtYW50aWNzLCB0eXBpY2FsbHkhKQ0KDQpIZW5jZSwg dHdvIHF1ZXN0aW9uczoNCiogQ2FuIHdlIHJlZGVmaW5lIGdlbmVyaWMgYFJhbmdlI3N0ZXBgIHRv IG5ldyBzZW1hbnRpY3MgKG9mIHVzaW5nIGBiZWdpbiArIHN0ZXBgIGl0ZXJhdGl2ZWx5KT8gSXQg aXMgaGFyZCB0byBpbWFnaW5lIHRoZSBhbW91bnQgb2YgYWN0dWFsIHVzYWdlIG9mIHRoZSBvbGQg YmVoYXZpb3IgKHdpdGggU3RyaW5nPy4uIHRvIHdoYXQgZW5kPykgaW4gdGhlIHdpbGQNCiogSWYg dGhlIGFuc3dlciBpcyAibm8iLCBjYW4gd2UgZGVmaW5lIGEgbmV3IG1ldGhvZCB3aXRoIG5ldyBz ZW1hbnRpY3MsIGxpa2UsIElESywgYFJhbmdlI292ZXIoc3BhbilgPw0KDQoqKlVQRDoqKiBNb3Jl IGV4YW1wbGVzIG9mIHVzZWZ1bCBiZWhhdmlvciAoaXQgaXMgTk9UIG9ubHkgYWJvdXQgY29yZSBg VGltZWAgY2xhc3MpOg0KDQpgYGBydWJ5DQpyZXF1aXJlICdhY3RpdmVfc3VwcG9ydC9hbGwnDQoN CigxLm1pbnV0ZS4uMjAubWludXRlcykuc3RlcCgyLm1pbnV0ZXMpLnRvX2ENCiM9PiBbMSBtaW51 dGUsIDMgbWludXRlcywgNSBtaW51dGVzLCA3IG1pbnV0ZXMsIDkgbWludXRlcywgMTEgbWludXRl cywgMTMgbWludXRlcywgMTUgbWludXRlcywgMTcgbWludXRlcywgMTkgbWludXRlc10NCg0KcmVx dWlyZSAndG9kJw0KDQooVG9kOjpUaW1lT2ZEYXkucGFyc2UoIjhhbSIpLi5Ub2Q6OlRpbWVPZkRh eS5wYXJzZSgiMTBhbSIpKS5zdGVwKDMwLm1pbnV0ZXMpLnRvX2EgDQojPT4gWyM8VG9kOjpUaW1l T2ZEYXkgMDg6MDA6MDA+LCAjPFRvZDo6VGltZU9mRGF5IDA4OjMwOjAwPiwgIzxUb2Q6OlRpbWVP ZkRheSAwOTowMDowMD4sICM8VG9kOjpUaW1lT2ZEYXkgMDk6MzA6MDA+LCAjPFRvZDo6VGltZU9m RGF5IDEwOjAwOjAwPl0NCg0KDQpyZXF1aXJlICdtYXRyaXgnDQooVmVjdG9yWzEsIDIsIDNdLi4p LnN0ZXAoVmVjdG9yWzEsIDEsIDFdKS50YWtlKDMpDQojPT4gW1ZlY3RvclsxLCAyLCAzXSwgVmVj dG9yWzIsIDMsIDRdLCBWZWN0b3JbMywgNCwgNV1dDQoNCnJlcXVpcmUgJ3VuaXR3aXNlJw0KKFVu aXR3aXNlKDAsICdrbScpLi5Vbml0d2lzZSgxLCAna20nKSkuc3RlcChVbml0d2lzZSgxMDAsICdt JykpLm1hcCgmOnRvX3MpDQojPT4gWyIwIGttIiwgIjEvMTAga20iLCAiMS81IGttIiwgIjMvMTAg a20iLCAiMi81IGttIiwgIjAuNSBrbSIsICIzLzUga20iLCAiNy8xMCBrbSIsICI0LzUga20iLCAi OS8xMCBrbSIsICIxIGttIl0NCmBgYA0KDQoNCioqVVBEOioqIFJlc3BvbmRpbmcgdG8gZGlzY3Vz c2lvbiBwb2ludHM6DQoNCioqUToqKiBNYXR6IGlzIGNvbmNlcm5lZCB0aGF0IHRoZSBwcm9wb3Nl ZCBzaW1wbGUgZGVmaW5pdGlvbiB3aWxsIGJlIGNvbmZ1c2luZyB3aXRoIHRoZSBjbGFzc2VzIHdo ZXJlIGArYCBpcyByZWRlZmluZWQgYXMgY29uY2F0ZW5hdGlvbi4NCg0KKipBOioqIEkgYmVsaWV2 ZSB0aGF0IHNpbXBsaWNpdHkgb2Ygc2VtYW50aWNzIGFuZCBlYXNlIG9mIGV4cGxhaW5pbmcgKCJp dCBqdXN0IHVzZXMgYCtgIHVuZGVybmVhdGgsIHdoYXRldmVyIGArYCBkb2VzLCB3aWxsIGJlIHBl cmZvcm1lZCIpIHdpbGwgbWFrZSB0aGUgY29uZnVzaW9uIG1pbmltYWwuDQoNCioqUToqKiBXaHkg bm90IGludHJvZHVjZSBuZXcgQVBJIHJlcXVpcmVtZW50IChsaWtlICJjbGFzcyBvZiByYW5nZSdz IGBiZWdpbmAgc2hvdWxkIGltcGxlbWVudCBgaW5jcmVtZW50YCBtZXRob2QsIGFuZCB0aGVuIGl0 IHdpbGwgYmUgdXNlZCBpbiBgc3RlcGApDQoNCioqQToqKiByZXF1aXJlICpldmVyeSogZ2VtIGF1 dGhvciB0byBjaGFuZ2UgKmV2ZXJ5KiBvZiB0aGVpciBvYmplY3RzJyBiZWhhdmlvci4gRm9yIHRo YXQsIHRoZXkgc2hvdWxkIGJlIGF3YXJlIG9mIHRoZSBjaGFuZ2UsIGNvbnNpZGVyIGl0IGltcG9y dGFudCBlbm91Z2ggdG8gY2FyZSwgY2xlYXJseSB1bmRlcnN0YW5kIHRoZSBuZWNlc3Nhcnkgc2Vt YW50aWNzIG9mIGltcGxlbWVudGF0aW9uLCBoYXZlIGEgcmVzb3VyY2UgdG8gcmVsZWFzZSBhIG5l dyB2ZXJzaW9uLi4uIFRoZW4gYWxsIHVzZXJzIG9mIGFsbCBzdWNoIGdlbXMgd291bGQgYmUgcmVx dWlyZWQgdG8gdXBncmFkZS4gVGhlIGZlYXR1cmUgd291bGQgYmUgRE9BIChkZWFkLW9uLWFycml2 YWwpLg0KDQpUaGUgdHdvIGFsdGVybmF0aXZlIHdheXMgSSBhbSBzdWdnZXN0aW5nOiBjaGFuZ2Ug dGhlIGJlaGF2aW9yIG9mIGAjc3RlcGAgb3IgaW50cm9kdWNlIGEgbmV3IG1ldGhvZCB3aXRoIGRl c2lyZWQgYmVoYXZpb3I6DQoxLiBFYXN5IHRvIGV4cGxhaW4gYW5kIGFubm91bmNlDQoyLiBSZXF1 aXJlIG5vIG90aGVyIGNvZGUgY2hhbmdlcyB0byBpbW1lZGlhdGVseSBiZWNvbWUgdXNlZnVsDQoz LiBXaXRoIHNvbWV0aGluZyBsaWtlIFtiYWNrcG9ydHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJj YW5kcmUvYmFja3BvcnRzKSBvciBbcnVieS1uZXh0XShodHRwczovL2dpdGh1Yi5jb20vcnVieS1u ZXh0L3J1YnktbmV4dCkgZWFzeSB0byBzdGFydCB1c2luZyBldmVuIGluIG9sZGVyIFJ1YnkgdmVy c2lvbiwgbWFraW5nIHRoZSBjb2RlIG1vcmUgZXhwcmVzc2l2ZSBldmVuIGJlZm9yZSBpdCB3b3Vs ZCBiZSBwb3NzaWJsZSBmb3Igc29tZSBwYXJ0aWN1bGFyIGFwcC9jb21wbnkgdG8gdXBncmFkZSB0 byAoc2F5KSAzLjINCg0KQWxsIGV4YW1wbGVzIG9mIGJlaGF2aW9yIGZyb20gdGhlIGNvZGUgYWJv dmUgYXJlIHJlYWwgYGlyYmAgb3V0cHV0IHdpdGggbW9ua2V5LXBhdGNoZWQgYFJhbmdlI3N0ZXBg LCBkZW1vbnN0cmF0aW5nIGhvdyBsaXR0bGUgY2hhbmdlIHdpbGwgYmUgbmVlZGVkIHRvIGNvZGUg b3V0c2lkZSBvZiB0aGUgYFJhbmdlYC4NCg0KDQoNCi0tIA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFu Zy5vcmcvDQogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwog cnVieS1jb3JlIG1haWxpbmcgbGlzdCAtLSBydWJ5LWNvcmVAbWwucnVieS1sYW5nLm9yZwogVG8g dW5zdWJzY3JpYmUgc2VuZCBhbiBlbWFpbCB0byBydWJ5LWNvcmUtbGVhdmVAbWwucnVieS1sYW5n Lm9yZwogcnVieS1jb3JlIGluZm8gLS0gaHR0cHM6Ly9tbC5ydWJ5LWxhbmcub3JnL21haWxtYW4z L2xpc3RzL3J1YnktY29yZS5tbC5ydWJ5LWxhbmcub3JnLw==