[ruby-core:98590] [Ruby master Feature#16254] MRI internal: Define built-in classes in Ruby with `__intrinsic__` syntax
From:
eregontp@...
Date:
2020-05-30 08:35:02 UTC
List:
ruby-core #98590
SXNzdWUgIzE2MjU0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgRXJlZ29uIChCZW5vaXQgRGFsb3plKS4N Cg0KDQpQUiB0byBmaXggdGhlIE5ldDo6SFRUUC9nemlwIGNhc2Ugd2l0aCBzcGVjcyB0byB2ZXJp ZnkgdGhlIGZpeDogaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzMxNjQNCg0KLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRmVhdHVyZSAjMTYyNTQ6IE1S SSBpbnRlcm5hbDogRGVmaW5lIGJ1aWx0LWluIGNsYXNzZXMgaW4gUnVieSB3aXRoIGBfX2ludHJp bnNpY19fYCBzeW50YXgNCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNjI1NCNj aGFuZ2UtODU5MDYNCg0KKiBBdXRob3I6IGtvMSAoS29pY2hpIFNhc2FkYSkNCiogU3RhdHVzOiBB c3NpZ25lZA0KKiBQcmlvcml0eTogTm9ybWFsDQoqIEFzc2lnbmVlOiBrbzEgKEtvaWNoaSBTYXNh ZGEpDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIEFic3RyYWN0 DQoNCk1SSSBkZWZpbmVzIG1vc3Qgb2YgYnVpbHQtaW4gY2xhc3NlcyBpbiBDIHdpdGggQy1BUElz IGxpa2UgYHJiX2RlZmluZV9tZXRob2QoKWAuDQpIb3dldmVyLCB0aGVyZSBhcmUgc2V2ZXJhbCBp c3N1ZXMgdXNpbmcgQy1BUElzLg0KDQpBIGZldyBtZXRob2RzIGFyZSBkZWZpbmVkIGluIFJ1Ynkg d3JpdHRlbiBpbiBgcHJlbHVkZS5yYmAuDQpIb3dldmVyLCB3ZSBjYW4gbm90IGRlZmluZSBhbGwg b2YgY2xhc3NlcyBiZWNhdXNlIHdlIGNhbiBub3QgdG91Y2ggZGVlcCBkYXRhIHN0cnVjdHVyZSBp biBSdWJ5Lg0KRnVydGhlcm1vcmUsIHRoZXJlIGFyZSBwZXJmb3JtYW5jZSBpc3N1ZXMgaWYgd2Ug d3JpdGUgYWxsIG9mIHRoZW0gaW4gUnVieS4NCg0KVG8gc29sdmUgdGhpcyBzaXR1YXRpb24sIEkg d2FudCB0byBzdWdnZXN0IHdyaXR0ZW4gaW4gUnVieSB3aXRoIEMgaW50cmluc2ljIGZ1bmN0aW9u cy4NClRoaXMgcHJvcG9zYWwgaXMgc2FtZSBhcyBteSBSdWJ5S2FpZ2kgMjAxOSB0YWxrIDxodHRw czovL3J1YnlrYWlnaS5vcmcvMjAxOS9wcmVzZW50YXRpb25zL2tvMS5odG1sPi4NCg0KIyBUZXJt aW5vbG9neQ0KDQoqIEMtbWV0aG9kczogbWV0aG9kcyBkZWZpbmVkIGluIEMgKGRlZmluZWQgd2l0 aCBgcmJfZGVmaW5lX21ldGhvZCgpYCwgZXRjKS4NCiogUnVieS1tZXRob2RzOiBtZXRob2RzIGRl ZmluZWQgaW4gUnVieS4NCiogSVNlcTogVGhlIGJvZHkgb2YgYFJVYnlWTTo6SW5zdHJ1Y3Rpb25T ZXF1ZW5jZWAgb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgYnl0ZWNvZGUgZm9yIFZNLg0KDQojIEJh Y2tncm91bmQgLyBQcm9ibGVtIC8gSWRlYQ0KDQojIyBXcml0dGVuIGluIEMNCg0KQXMgeW91IE1S SSBkZXZlbG9wZXJzIGtub3csIG1vc3Qgb2YgbWV0aG9kcyBhcmUgd3JpdHRlbiBpbiBDIHdpdGgg Qy1BUElzLg0KSG93ZXZlciwgdGhlcmUgYXJlIHNldmVyYWwgaXNzdWVzLg0KDQojIyMgKDEpIEFu bm90YXRpb24gaXNzdWVzIChjb21wYXJlIHdpdGggUnVieSBtZXRob2RzKQ0KDQpGb3IgZXhhbXBs ZSwgQy1tZXRob2RzIGRlZmluZWQgYnkgQy1BUElzIGRvZXNuJ3QgaGF2ZSBgcGFyYW1ldGVyc2Ag aW5mb3JtYXRpb24gd2hpY2ggYXJlIHJldHVybmVkIGJ5IGBNZXRob2QjcGFyYW1ldGVyc2AsIGJl Y2F1c2UgdGhlcmUgaXMgd2F5IHRvIGRlZmluZSBwYXJhbWV0ZXJzIGZvciBDIG1ldGhvZHMuDQpU aGVyZSBhcmUgcHJvcG9zYWxzIHRvIGFkZCBwYXJhbWV0ZXIgbmFtZSBpbmZvcm1hdGlvbiBmb3Ig Qy1tZXRob2RzLCBob3dldmVyLCBJIHRoaW5rIGl0IHdpbGwgaW50cm9kdWNlIG5ldyBjb21wbGV4 IEMtQVBJcyBhbmQgaW50cm9kdWNlIGFkZGl0aW9uYWwgb3ZlcmhlYWQgb24gYm9vdCB0aW1lLg0K DQotPiBJZGVhOyBXcml0aW5nIG1ldGhvZHMgaW4gUnVieSB3aWxsIHNvbHZlIHRoaXMgaXNzdWUu DQoNCiMjIyAoMikgQW5ub3RhdGlvbiBpc3N1ZXMgKGZvciBmdXJ0aGVyIG9wdGltaXphdGlvbikN Cg0KSXQgaXMgdXNlZnVsIHRvIGtub3cgdGhlIG1ldGhvZHMgYXR0cmlidXRlLCBmb3IgZXhhbXBs ZSwgdGhlIG1ldGhvZCBjYXVzZXMgbm8gc2lkZS1lZmZlY3QgKGEgcHVyZSBtZXRob2QpLg0KTGFi ZWxpbmcgYWxsIG9mIG1ldGhvZHMgaW5jbHVkaW5nIHVzZXIgcHJvZ3JhbSdzIG1ldGhvZHMgZG9l c24ndCBzZWVtIGdvb2QgaWRlYSAobm90IFJ1Ynktd2F5KS4gQnV0IEkgdGhpbmsgYW5ub3RhdGlu ZyBidWlsdC1pbiBtZXRob2RzIGlzIGdvb2Qgd2F5IGJlY2F1c2Ugd2UgY2FuIG1hbmFnZSAoYW5k IHdlIGNhbiByZW1vdmUgdGhlbSB3aGVuIHdlIGNhbiBtYWtlIGdvb2QgYW5hbHl6ZXIpLg0KDQpU aGVyZSBhcmUgbm8gd2F5IHRvIGFubm90YXRlIHRoaXMga2luZCBvZiBhdHRyaWJ1dGVzLg0KDQot PiBJZGVhOiBXcml0aW5nIG1ldGhvZHMgaW4gUnVieSB3aWxsIG1ha2UgaXQgZWFzeSB0byBpbnRy b2R1Y2UgbmV3IGFubm90YXRpb25zLg0KDQojIyMgKDMpIFBlcmZvcm1hbmNlIGlzc3VlDQoNClRo ZXJlIGFyZSBzZXZlcmFsIGZlYXR1cmVzIHdoaWNoIGFyZSBzbG93ZXIgaW4gQyB0aGFuIHdyaXR0 ZW4gaW4gUnVieS4NCg0KKiBleGNlcHRpb24gaGFuZGxpbmcgKGByYl9lbnN1cmUoKWAsIGV0Yykg YmVjYXVzZSB3ZSBuZWVkIHRvIGNhcHR1cmUgY29udGV4dCB3aXRoIGBzZXRqbXBgIG9uIEMtbWV0 aG9kcy4gUnVieS1tZXRob2RzIGRvZXNuJ3QgbmVlZCB0byBjYXB0dXJlIGFueSBjb250ZXh0IGZv ciBleGNlcHRpb24gaGFuZGxpbmcuDQoqIFBhc3Npbmcga2V5d29yZCBwYXJhbWV0ZXJzIGJlY2F1 c2UgUnVieS1tZXRob2RzIGRvZXNuJ3QgbmVlZCB0byBtYWtlIGEgSGFzaCBvYmplY3QgdG8gcGFz cyB0aGUga2V5d29yZCBwYXJhbWV0ZXJzIGlmIHRoZXkgYXJlIHBhc3NlZCB3aXRoIGV4cGxpY2l0 IGtleXdvcmQgcGFyYW1ldGVycyAoYGZvbyhrMTogdjEsIGsyOiB2MilgKS4NCg0KLT4gSWRlYTog V3JpdGluZyBtZXRob2RzIGluIFJ1YnkgbWFrZXMgdGhlbSBmYXN0ZXIuDQoNCiMjIyAoNCkgUHJv ZHVjdGl2aXR5DQoNCkl0IGlzIHRvdWdoIHRvIHdyaXRlIHNvbWUgZmVhdHVyZXMgaW4gQzoNCg0K Rm9yIGV4YW1wbGUsIGl0IGlzIGVhc3kgdG8gd3JpdGUgYHJlc2N1ZWAgc3ludGF4IGluIFJ1Ynk6 DQoNCmBgYHJ1YnkNCiMgaW4gUnVieQ0KZGVmIGR1bW15X2Z1bmNfcmVzY3VlDQogIG5pbA0KcmVz Y3VlDQogIG5pbA0KZW5kDQpgYGANCg0KQnV0IGl0IGlzIGRpZmZpY3VsdCB0byB3cml0ZS9yZWFk IGluIEM6DQoNCmBgYEMNCnN0YXRpYyBWQUxVRQ0KZHVtbXlfYm9keShWQUxVRSBzZWxmKQ0Kew0K ICAgIHJldHVybiBRbmlsOw0KfQ0Kc3RhdGljIFZBTFVFDQpkdW1teV9yZXNjdWUoVkFMVUUgc2Vs ZikNCnsNCiAgICByZXR1cm4gUW5pbDsNCn0NCnN0YXRpYyBWQUxVRQ0KdGR1bW15X2Z1bmNfcmVz Y3VlKFZBTFVFIHNlbGYpDQp7DQogICAgcmV0dXJuIHJiX3Jlc2N1ZShkdW1teV9ib2R5LCBzZWxm LCBkdW1teV9yZXNjdWUsIHNlbGYpOw0KfQ0KYGBgDQoNCih0cmFpbmVkIE1SSSBkZXZlbG9wZXIg Y2FuIHNheSBpdCBpcyBub3QgdG91Z2gsIHRob3VnaCA6cCkNCg0KLT4gSWRlYTogV3JpdGluZyBt ZXRob2RzIGluIFJ1YnkgbWFrZXMgdGhlbSBlYXN5Lg0KDQojIyMgKDUpIEFQSSBjaGFuZ2UNCg0K VG8gaW50cm9kdWNlIGBHdWlsZGAsIEkgd2FudCB0byBwYXNzIGEgImNvbnRleHQiIHBhcmFtZXRl ciAoYXMgYSBmaXJzdCBwYXJhbWV0ZXIpIGZvciBlYWNoIEMtZnVuY3Rpb25zIGxpa2UgYG1yYl9z dGF0ZWAgb24gbXJ1YnkuDQpUaGlzIGlzIGJlY2F1c2UgZ2V0dGluZyBpdCBmcm9tIFRMUyAoVGhy ZWFkLWxvY2FsLXN0b3JhZ2UpIGlzIGhpZ2gtY29zdCBvcGVyYXRpb24gb24gZHluYW1pYyBsaWJy YXJ5IChsaWJydWJ5KS4NCg0KTWF5YmUgbm9ib2R5IGFsbG93IG1lIHRvIGNoYW5nZSB0aGUgc3Bl Y2lmaWNhdGlvbiBvZiBmdW5jdGlvbnMgdXNlZCBieSBgcmJfZGVmaW5lX21ldGhvZCgpYC4NCg0K LT4gSWRlYTogQnV0IGludHJvZHVjZSBuZXcgbWV0aG9kIGRlZmluaXRpb24gZnJhbWV3b3JrLCB3 ZSBjYW4gbW92ZSBhbmQgY2hhbmdlIHRoZSBzcGVjaWZpY2F0aW9uLCBJIGhvcGUuDQpPZiBjb3Vy c2UsIHdlIGNhbiByZW1haW4gY3VycmVudCBgcmJfZGVmaW5lX21ldGhvZCgpYCBBUElzICh3aXRo IGFkZGl0aW9uYWwgY29zdCBvbiBgR3VpbGRgIGF2YWlsYWJsZSBNUkkpLg0KDQojIyBXcml0dGVu IGluIFJ1YnkgaW4gYHByZWx1ZGUucmJgDQoNClRoZXJlIGlzIGEgZmlsZSBgcHJlbHVkZS5yYmAg d2hpY2ggYXJlIGxvYWRlZCBhdCBib290IHRpbWUuDQpUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZp bmUgc2V2ZXJhbCBtZXRob2RzLCB0byByZWR1Y2Uga2V5d29yZCBwYXJhbWV0ZXJzIG92ZXJoZWFk LCBmb3IgZXhhbXBsZSAoYElPI3JlYWRfbm9uYmxvY2tgLCBgVHJhY2VQb2ludCNlbmFibGVgKS4N Cg0KSG93ZXZlciwgd3JpdGluZyBhbGwgb2YgbWV0aG9kcyBpbiBSdWJ5IGlzIG5vdCBwb3NzaWJs ZSBiZWNhdXNlOg0KDQoqICgxKSBmZWFzaWJpbGl0eSBpc3N1ZSAod2UgY2FuIG5vdCBhY2Nlc3Mg aW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUpDQoqICgyKSBwZXJmb3JtYW5jZSBpc3N1ZSAoc2xvdyBp biBnZW5lcmFsLCBvZiBjb3Vyc2UpDQoqICgzKSBhdG9taWNpdHkgaXNzdWUgKEdWTC9HSUwpDQoN ClRvIHNvbHZlICgxKSwgd2UgY2FuIHByb3ZpZGUgbG93LWxldmVsIEMtbWV0aG9kcyB0byBpbXBs ZW1lbnQgaGlnaC1sZXZlbCAobm9ybWFsIGJ1aWx0LWluKSBtZXRob2RzLiBIb3dldmVyIGlzc3Vl cyAoMikgYW5kICgzKSBhcmUgbm90IHNvbHZlZC4NCihGcm9tIENTIHJlc2VhcmNoZXJzIHBlcnNw ZWN0aXZlLCBtYWtpbmcgY2xldmVyIGNvbXBpbGVyIHdpbGwgc29sdmUgdGhlbSwgbGlrZSBKVk0s IGV0YywgQnV0IHdlIGRvbid0IGhhdmUgaXQgeWV0KQ0KDQotPiBJZGVhOiBXcml0aW5nIG1ldGhv ZCBib2R5IGluIEMgaXMgZmVhc2libGUuDQoNCiMgUHJvcG9zYWwNCg0KKDEpIEludHJvZHVjaW5n IGBpbnRyaW5zaWNgIG1lY2hhbmlzbSB0byBkZWZpbmUgYnVpbHQtaW4gbWV0aG9kcyBpbiBSdWJ5 Lg0KKDIpIExvYWQgZnJvbSBiaW5hcnkgZm9ybWF0IHRvIHJlZHVjZSBzdGFydHVwIHRpbWUuDQoN CiMjICgxKSBJbnRyaW5zaWMgZnVuY3Rpb24NCg0KIyMjIENhbGxpbmcgaW50cmluc2ljIGZ1bmN0 aW9uIHN5bnRheCBpbiBSdWJ5DQoNClRvIGRlZmluZSBidWlsdC1pbiBtZXRob2RzLCBpbnRyb2R1 Y2Ugc3BlY2lhbCBSdWJ5IHN5bnRheCBgX19pbnRyaW5zaWNfXy5mdW5jKGFyZ3MpYC4NCkluIHRo aXMgY2FzZSwgcmVnaXN0ZXJlZCBpbnRyaW5zaWMgZnVuY3Rpb24gYGZ1bmMoKWAgaXMgY2FsbGVk IHdpdGggYGFyZ3NgLg0KDQpJbiBub3JtYWwgUnVieSBwcm9ncmFtLCBgX19pbnRyaW5zaWNfX2Ag aXMgYSBsb2NhbCB2YXJpYWJsZSBvciBhIG1ldGhvZC4NCkhvd2V2ZXIsIHJ1bm5pbmcgb24gc3Bl Y2lhbCBtb2RlLCB0aGV5IGFyZSBwYXJzZWQgYXMgaW50cmluc2ljIGZ1bmN0aW9uIGNhbGwuDQoN CkludHJpbnNpYyBmdW5jdGlvbnMgY2FuIG5vdCBiZSBjYWxsZWQgd2l0aDoNCg0KKiBibG9jayAN Cioga2V5d29yZCBhcmd1bWVudHMNCiogc3BsYXQgYXJndW1lbnRzDQoNCiMjIyBEZXZlbG9wbWVu dCBzdGVwIHdpdGggaW50cmluc2ljIGZ1bmN0aW9ucw0KDQooMSkgV3JpdGUgYSBjbGFzcy9tb2R1 bGUgaW4gUnVieSB3aXRoIGludHJpbnNpYyBmdW5jdGlvbi4NCg0KYGBgcnVieQ0KIyBzdHJpbmcu cmINCmNsYXNzIFN0cmluZw0KICBkZWYgbGVuZ3RoDQogICAgX19pbnRyaW5zaWNfXy5zdHJfbGVu Z3RoDQogIGVuZA0KZW5kDQpgYGANCg0KKDIpIEltcGxlbWVudCBpbnRyaW5zaWMgZnVuY3Rpb25z DQoNCkl0IGlzIGFsbW9zdCBzYW1lIGFzIGZ1bmN0aW9ucyB1c2VkIGJ5IGByYl9kZWZpbmVfbWV0 aG9kKClgLg0KSG93ZXZlciBpdCB3aWxsIGFjY2VwdCBjb250ZXh0IHBhcmFtZXRlciBhcyB0aGUg Zmlyc3QgcGFyYW1ldGVyLg0KDQooYHJiX2V4ZWN1dGlvbl9jb250ZXh0X3RgIGlzIHRvbyBsb25n LCBzbyB3ZSBjYW4gcmVuYW1lIGl0LCBgcmJfc3RhdGVgIGZvciBleGFtcGxlKQ0KDQpgYGBDDQpz dGF0aWMgVkFMVUUNCnN0cl9sZW5ndGgocmJfZXhlY3V0aW9uX2NvbnRleHRfdCAqZWMsIFZBTFVF IHNlbGYpDQp7DQogIHJldHVybiBMT05HMk5VTShSU1RSSU5HX0xFTihzZWxmKSk7DQp9DQpgYGAN Cg0KKDMpIERlZmluZSBhbiBpbnRyaW5zaWMgZnVuY3Rpb24gdGFibGUgYW5kIGxvYWQgYC5yYmAg ZmlsZSB3aXRoIHRoZSB0YWJsZS4NCg0KYGBgQw0KSW5pdF9TdHJpbmcodm9pZCkNCnsNCiAgLi4u DQogIHN0YXRpYyBjb25zdCByYl9leHBvcnRfaW50cmluc2ljX3QgdGFibGVbXSA9IHsNCiAgICBS Ql9FWFBPUlRfSU5UUklOU0lDKHN0cl9sZW5ndGgsIDApLCAvLyAwIGlzIGFyaXR5DQogICAgLi4u DQogIH07DQogIHJiX3ZtX2J1aWx0aW5fbG9hZCgic3RyaW5nIiwgdGFibGUpOw0KfQ0KYGBgDQoN CiMjIyBFeGFtcGxlDQoNClRoZXJlIGFyZSB0d28gZXhhbXBsZXM6DQoNCigxKSBDb21wYXJhYmxl IG1vZHVsZTogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20va28xLzdmMThlNjZkMWFlMjViYjMwYzdl ODIzYWE1N2YwZDMxDQooMikgVHJhY2VQb2ludCBjbGFzczogaHR0cHM6Ly9naXN0LmdpdGh1Yi5j b20va28xLzk2OWU1NjkwY2RhNjE4MGVkOTg5ZWI3OTYxOWNhNjEyDQoNCiMjICgyKSBMb2FkIGZy b20gYmluYXJ5IGZpbGUgd2l0aCBsYXp5IGxvYWRpbmcNCg0KTG9hZGluZyBtYW55ICIucmIiIGZp bGVzIHNsb3dzIGRvd24gc3RhcnR1cCB0aW1lLg0KDQpXZSBoYXZlIGBJU2VxI3RvX2JpbmFyeWAg bWV0aG9kIHRvIGdlbmVyYXRlIGNvbXBpbGVkIGJpbmFyeSBkYXRhIHNvIHRoYXQgd2UgY2FuIGVs aW1pbmF0ZSBwYXJzZS9jb21waWxlIHRpbWUuDQpGb3J0dW5hdGVseSwgW0ZlYXR1cmUgIzE2MTYz XSBtYWtlcyBiaW5hcnkgZGF0YSBzbWFsbC4NCkZ1cnRoZXJtb3JlLCBlbmFibGluZyAibGF6eSBs b2FkaW5nIiBmZWF0dXJlIGltcHJvdmVzIHN0YXJ0dXAgdGltZSBiZWNhdXNlIHdlIGRvbid0IG5l ZWQgdG8gZ2VuZXJhdGUgY29tcGxldGUgSVNlcXMuIGBVU0VfTEFaWV9MT0FEYCBpbiB2bV9jb3Jl LmggZW5hYmxlcyB0aGlzIGZlYXR1cmUuDQoNCldlIG5lZWQgdG8gY29tYmluZSBiaW5hcnkuIFRo ZXJlIGFyZSBzZXZlcmFsIHdheSAoY29udmVydCBpbnRvIEMncyBhcnJheSwgY29uY2F0IHdpdGgg b2JqY29weSBpZiBhdmFpbGFibGUgYW5kIHNvIG9uKS4NCg0KIyBFdmFsdWF0aW9uDQoNCkV2YWx1 YXRpb25zIGFyZSB3cml0dGVuIGluIG15IFJ1YnlLYWlnaSAyMDE5IHByZXNlbnRhdGlvbjogPGh0 dHBzOi8vcnVieWthaWdpLm9yZy8yMDE5L3ByZXNlbnRhdGlvbnMva28xLmh0bWw+DQoNClBvaW50 czoNCg0KKiBDYWxsaW5nIG92ZXJoZWFkIG9mIFJ1YnkgbWVodG9kcyB3aXRoIGludHJpbnNpYyBm dW5jdGlvbnMNCiAgKiBOb3JtYWwgY2FzZSwgaXQgaXMgYWxtb3N0IHNhbWUgYXMgQy1tZXRob2Rz IHVzaW5nIG9wdGltaXplZCBWTSBpbnN0cnVjdGlvbnMuDQogICogV2l0aCBrZXl3b3JkIHBhcmFt ZXRlcnMsIGl0IGlzIGZhc3RlciB0aGFuIEMtbWV0aG9kcy4NCiAgKiBXaXRoIG9wdGlvbmFsIHBh cmFtZXRlcnMsIGl0IGlzIHgyIHNsb3dlciBzbyBpdCBzaG91bGQgYmUgc29sdmVkICgqMSkuDQoN CiogTG9hZGluZyBvdmVyaGVhZA0KICAqIFJlcXVpcmluZyAiLnJiIiBmaWxlcyBpcyBhYm91dCB4 MTUgc2xvd2VyIHRoYW4gZGVmaW5pbmcgQyBtZXRob2RzLg0KICAqIExvYWRpbmcgYmluYXJ5IGRh dGEgd2l0aCBsYXp5IGxvYWRpbmcgdGVjaG5pcXVlIGlzIGFib3V0IHgyIHNsb3dlciB0aGFuIEMg bWV0aG9kcy4gTm90IHNvIGJhZCByZXN1bHQuDQogICogQXQgUnVieUthaWdpIDIwMTksIHRoZSBi aW5hcnkgZGF0YSB3YXMgdmVyeSBodWdlLCBidXQgW0ZlYXR1cmUgIzE2MTYzXSByZWR1Y2VzIHRo ZSBzaXplIG9mIGJpbmFyeSBkYXRhLg0KDQpbKjFdIEludHJvZHVjaW5nIHNwZWNpYWwgIm92ZXJs b2FkaW5nIiBzcGVjaWZpZXIgY2FuIHNvbHZlIGl0IGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byBh c3NpZ24gb3B0aW9uYWwgcGFyYW1ldGVycy4gRmlyc3QgbWV0aG9kIGxvb2t1cCBjYW4gYmUgc2xv d2VkIGRvd24sIGJ1dCB3ZSBjYW4gY2FjaGUgdGhlIG1ldGhvZCBsb29rdXAgcmVzdWx0cyAod2l0 aCBhcml0eSkuDQoNCmBgYHJ1YnkNCiMgZXhhbXBsZSBzeW50YXgNCm92ZXJsb2FkIGRlZiBmb28o YSkNCiAgX19pbnRyaW5zaWNfXy5mb28xKGEpDQplbmQNCm92ZXJsb2FkIGRlZiBmb28oYSwgYikN CiAgX19pbnRyaW5zaWNfXy5mb28yKGEsIGIpDQplbmQNCmBgYA0KDQojIEltcGxlbWVudGF0aW9u DQoNCkRvbmU6DQoqIENvbXBpbGUgY2FsbGluZyBpbnRyaW5zaWMgZnVuY3Rpb25zICgucmIpDQoq IEV4cG9ydGluZyBpbnRyaW5zaWMgZnVuY3Rpb24gdGFibGUgKC5jKQ0KDQpOb3QgeWV0Og0KKiBM b2FkaW5nIGZyb20gYmluYXJ5IG1lY2hhbmlzbQ0KKiBBdHRyaWJ1dGUgc3ludGF4DQoqIG1vc3Qg b2YgYnVpbHQtaW4gY2xhc3MgcmVwbGFjZW1lbnQNCg0KTm93LCBtaW5pcnVieSBhbmQgcnVieSAo bGlicnVieSkgbG9hZCAnKi5yYicgZmlsZXMgZGlyZWN0bHkuIEhvd2V2ZXIsIHJ1YnkgKGxpYnJ1 YnkpIHNob3VsZCBsb2FkIGNvbXBpbGVkIGJpbmFyeSBmaWxlLg0KDQojIERpc2N1c3Npb24NCg0K IyMgRG8gd2UgcmV3cml0ZSBhbGwgb2YgYnVpbHQtaW4gY2xhc3NlcyBhdCBvbmNlPw0KDQpOby4g V2UgY2FuIHRyeSBhbmQgbWlncmF0ZSB0aGVtLg0KDQojIyBEbyB3ZSBzdXBwb3J0IGludHJpbnNp YyBtZWNoYW5pc20gZm9yIEMtZXh0ZW5zaW9uIGxpYnJhcmllcz8NCg0KTWF5YmUgaW4gZnV0dXJl LiBOb3cgd2UgY2FuIHRyeSBpdCBvbiBNUkkgY29yZXMuDQoNCiMjIGBfX2ludHJpbnNpY19fYCBr ZXl3b3JkDQoNCk9uIG15IFJ1YnlLYWlnaSAyMDE5IHRhbGssIEkgcHJvcG9zZWQgYF9fQ19fYCwg YnV0IEkgdGhpbmsgYF9faW50cmluc2ljX19gIGlzIG1vcmUgZGVzY3JpcHRpdmUgKGJ1dCBhIGJp dCBsb25nKS4NCkFub3RoZXIgaWRlYSBpcyBgUnVieVZNOjppbnRyaW5zaWMuZnVuYyguLi4pYC4N Cg0KSSBoYXZlIG5vIHN0cm9uZyBvcGluaW9uLiBXZSBjYW4gY2hhbmdlIHRoaXMgc3ludGF4IHVu dGlsIHdlIGV4cG9zZSB0aGlzIHN5bnRheCBmb3IgQy1leHRlbnNpb25zLg0KDQojIyBDYW4gd2Ug c3VwcG9ydCBgX19pbnRyaW5zaWNfX2AgaW4gbm9ybWFsIFJ1Ynkgc2NyaXB0Pw0KDQpOby4gVGhp cyBmZWF0dXJlIGlzIG9ubHkgZm9yIGJ1aWx0LWluIGZlYXR1cmVzLg0KQXMgSSBkZXNjcmliZWQs 44CAY2FsbGluZyBpbnRyaW5zaWMgZnVuY3Rpb24gc3ludGF4IGhhcyBzZXZlcmFsIHJlc3RyaWN0 aW9uIGNvbXBhcmUgd2l0aCBub3JtYWwgbWV0aG9kIGNhbGxzLCBzbyB0aGF0IEkgdGhpbmsgdGhl eSBhcmUgbm90IGV4cG9zZWQgYXMgbm9ybWFsIFJ1YnkgcHJvZ3JhbXMsIElNTy4NCg0KIyMgU2hv dWxkIHdlIG1haW50YWluIGludHJpbnNpYyBmdW5jdGlvbiB0YWJsZT8NCg0KTm93LCB5ZXMuIEFu ZCB3ZSBuZWVkIHRvIG1ha2UgdGhpcyB0YWJsZSBhdXRvbWF0aWNhbGx5IGJlY2F1c2UgbWFudWFs IG9wZXJhdGlvbnMgY2FuIGludHJvZHVjZSBtaXN0YWtlIHZlcnkgZWFzaWx5Lg0KDQpDb3JyZXNw b25kaW5nICIucmIiIGZpbGUgKGB0cmFjZV9wb2ludC5yYmAsIGZvciBleGFtcGxlKSBrbm93cyB3 aGljaCBpbnRyaW5zaWMgZnVuY3Rpb25zIGFyZSBuZWVkZWQuDQpQYXJzaW5nICIucmIiIGZpbGUg Y2FuIGdlbmVyYXRlIHRoZSB0YWJsZSBhdXRvbWF0aWNhbGx5Lg0KSG93ZXZlciwgd2UgbmVlZCBh IGxhdGVzdCB2ZXJzaW9uIFJ1YnkgdG8gcGFyc2UgdGhlIHNjcmlwdHMgaWYgdGhleSB1c2VzIHN5 bnRheCB3aGljaCBhcmUgc3VwcG9ydGVkIGJ5IGxhdGVzdCB2ZXJzaW9uIG9mIFJ1YnkuDQoNCkZv ciBleGFtcGxlLCB3ZSBuZWVkIFJ1YnkgMi43IG1hc3RlciB0byBwYXJzZSBhIHNjcmlwdCB3aGlj aCB1c2VzIHBhdHRlcm4gbWF0Y2hpbmcgc3ludGF4Lg0KSG93ZXZlciwgdGhlIHN5c3RlbSdzIHJ1 YnkgKGBCQVNFX1JVQllgKSBzaG91bGQgYmUgb2xkZXIgdmVyc2lvbi4gVGhpcyBpcyBvbmUgb2Yg Ym9vdHN0cmFwIHByb2JsZW0uDQpUaGlzIGlzICJjaGlja2VuLWFuZC1lZ2ciIHByb2JsZW0uDQoN ClRoZXJlIGFyZSBzZXZlcmFsIGlkZWFzLg0KDQooMSkgUGFyc2UgYSAiLmMiIGZpbGUgdG8gZ2Vu ZXJhdGUgYSB0YWJsZSB1c2luZyBmdW5jdGlvbiBhdHRyaWJ1dGUuDQoNCmBgYEMNCklOVFJJTlNJ Q19GVU5DVElPTiBzdGF0aWMgVkFMVUUNCnN0cl9sZW5ndGgoLi4uKQ0KLi4uDQpgYGANCg0KKDIp IEJ1aWxkIGFub3RoZXIgcnVieSBwYXJzZXIgd2l0aCBzb3VyY2UgY29kZSwgInBhcnNlLXJ1Ynki Lg0KDQoqIDEuIGdlbmVyYXRlIHBhcnNlLXJ1Ynkgd2l0aCBDIGNvZGUuDQoqIDIuIHJ1biBwYXJz ZS1ydWJ5IHRvIGdlbmVyYXRlIHRhYmxlcyBieSBwYXJzaW5nICIucmIiIGZpbGVzLiBUaGlzIHBy b2Nlc3MgaXMgd3JpdHRlbiBpbiBDLg0KKiAzLiBidWlsZCBtaW5pcnVieSBhbmQgcnVieSB3aXRo IGdlbmVyYXRlZCB0YWJsZS4NCg0KV2UgY2FuIG1ha2UgaXQsIGJ1dCBpdCBpbnRyb2R1Y2VzIG5l dyBjb21wbGV4IGJ1aWxkIHByb2Nlc3MuDQoNCigzKSBSZXN0cmljdCAiLnJiIiBzeW50YXgNCg0K UmVzdHJpY3Qgc3ludGF4IHdoaWNoIGNhbiBiZSB1c2VkIGJ5IGBCQVNFX1JVQllgIGZvciBidWls dC1pbiAiLnJiIiBmaWxlcy4NCkl0IGlzIGVhc3kgdG8gbGlzdCB1cCBpbnRyaW5zaWMgZnVuY3Rp b25zIHVzaW5nIFJpcHBlciBvciBBU1Qgb3IgYElTZXEjdG9fYWAuDQoNCigzKSBpcyBtb3N0IGVh c3kgYnV0IG5vdCBzbyBjb29sLg0KKDIpIGlzIGZsZXhpYmxlLCBidXQgaXQgbmVlZHMgaW1wbGVt ZW50YXRpb24gY29zdCBhbmQgaW5jcmVhc2VzIGJ1aWxkIGNvbXBsZXhpdHkuDQoNCg0KIyMgUGF0 aCBvZiAnKi5yYicgZmlsZXMgYW5kIGluc3RhbGwgb3Igbm90DQoNClRoZSBwYXRoIG9mIGBwcmVs dWRlLnJiYCBpcyBgPGludGVybmFsOnByZWx1ZGU+YC4gV2UgaGF2ZSBzZXZlcmFsIG9wdGlvbnMu DQoNCiogKDEpIERvbid0IGluc3RhbGwgIi5yYiIgZmlsZXMgYW5kIG1ha2UgdGhlc2UgcGF0aCBg PGludGVybmFsOnRyYWNlX3BvaW50LnJiPmAsIGZvciBleGFtcGxlLg0KKiAoMikgSW5zdGFsbCAi LnJiIiBhbmQgbWFrZSB0aGVzZSBwYXRocyBub24tZXhpc3RpbmcgcGF0aHMgc3VjaCBhcyBgPGlu dGVybmFsPi9pbnN0YWxsZGlyL2xpYi9idWlsdGluL3RyYWNlX3BvaW50LnJiYC4NCiogKDMpIElu c3RhbGwgIi5yYiIgYW5kIG1ha2UgdGhlc2UgcGF0aHMgcmVhbCBwYXRocy4NCg0KV2Ugd2lsbCB0 cmFuc2xhdGUgIi5yYiIgZmlsZXMgaW50byBiaW5hcnkgZGF0YSBhbmQgbGluayB0aGVtIGludG8g YHJ1YnlgIChgbGlicnVieWApLg0KU28gdGhlIG1vZGlmaWNhdGlvbiBvZiBpbnN0YWxsZWQgIi5y YiIgZmlsZXMgYXJlIG5vdCBhZmZlY3QgdGhlIGJlaGF2aW9yLiBJdCBjYW4gaW50cm9kdWNlIGNv bmZ1c2lvbiBzbyB0aGF0IEkgd3JvdGUgKDEpIGFuZCAoMikuDQoNCkZvciAoMyksIGl0IGlzIHBv c3NpYmxlIHRvIGxvYWQgIi5yYiIgZmlsZXMgaWYgdGhlcmUgaXMgbW9kaWZpY2F0aW9uIChtYXli ZSBkZXRlY3QgYnkgbW9kaWZpZWQgZGF0ZSkgYW5kIGxvYWQgZnJvbSB0aGVtLiBCdXQgaXQgd2ls bCBpbnRyb2R1Y2UgYW4gb3ZlcmhlYWQgKGRpc2sgYWNjZXNzIG92ZXJoZWFkKS4NCg0KIyMgQ29t cGF0aWJpbGl0eSBpc3N1ZT8NCg0KVGhlcmUgYXJlIHNldmVyYWwgY29tcGF0aWJpbGl0eSBpc3N1 ZXMuIEZvciBleGFtcGxlLCBgVHJhY2VQb2ludGAgYGMtY2FsbGAgZXZlbnRzIGFyZSBjaGFuZ2Vk IHRvIGBjYWxsYCBldmVudHMuDQpBbmQgdGhlcmUgYXJlIG1vcmUgaW5jb21wYXRpYmxlcy4NCldl IG5lZWQgdG8gY2hlY2sgdGhlbSBjYXJlZnVsbHkuDQoNCiMjIEJvb3RzdHJhcCBpc3N1ZT8NCg0K WWVzLCB0aGVyZSBhcmUuDQoNCkxvYWRpbmcgYC5yYmAgZmlsZXMgYXQgYm9vdCB0aW1pbmcgb2Yg YW4gaW50ZXJwcmV0ZXIgY2FuIGNhdXNlIHByb2JsZW0uDQpGb3IgZXhhbXBsZSwgYmVmb3JlIGlu aXRpYWxpemluZyBTdHJpbmcgY2xhc3MsIHRoZSBjbGFzcyBvZiBTdHJpbmcgbGl0ZXJhbCBpcyAw IChiZWNhdXNlIFN0cmluZyBjbGFzcyBpcyBub3QgZ2VuZXJhdGVkKS4NCg0KSSBpbnRyb2R1Y2Vz IHNldmVyYWwgd29ya2Fyb3VuZHMgYnV0IHdlIG5lZWQgdG8gbW9kaWZ5IG1vcmUuDQoNCiMgQ29u Y2x1c2lvbg0KDQpIb3cgYWJvdXQgdG8gaW50cm9kdWNlIHRoaXMgbWVjaGFuaXNtIGFuZCB0cnkg aXQgb24gUnVieSAyLjc/DQpXZSBjYW4gcmV2ZXJ0IHRoZXNlIGNoYW5nZXMgaWYgd2UgZm91bmQg YW55IHRyb3VibGVzLCBpZiB3ZSBkb24ndCBleHBvc2UgdGhpcyBtZWNoYW5pc20gYW5kIG9ubHkg aW50ZXJuYWwgY2hhbmdlcy4NCg0KDQoNCg0KLS0gDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9y Zy8NCgpVbnN1YnNjcmliZTogPG1haWx0bzpydWJ5LWNvcmUtcmVxdWVzdEBydWJ5LWxhbmcub3Jn P3N1YmplY3Q9dW5zdWJzY3JpYmU+CjxodHRwOi8vbGlzdHMucnVieS1sYW5nLm9yZy9jZ2ktYmlu L21haWxtYW4vb3B0aW9ucy9ydWJ5LWNvcmU+Cg==