[ruby-core:112944] [Ruby master Feature#19541] Proposal: Generate frame unwinding info for YJIT code
From:
"kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core" <ruby-core@...>
Date:
2023-03-19 07:22:27 UTC
List:
ruby-core #112944
SXNzdWUgIzE5NTQxIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGtqdHNhbmFrdHNpZGlzIChLSiBUc2Fu YWt0c2lkaXMpLg0NCg0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N DQpGZWF0dXJlICMxOTU0MTogUHJvcG9zYWw6IEdlbmVyYXRlIGZyYW1lIHVud2luZGluZyBpbmZv IGZvciBZSklUIGNvZGUNDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTk1NDEN DQoNDQoqIEF1dGhvcjoga2p0c2FuYWt0c2lkaXMgKEtKIFRzYW5ha3RzaWRpcykNDQoqIFN0YXR1 czogT3Blbg0NCiogUHJpb3JpdHk6IE5vcm1hbA0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NDQojIyBXaGF0IGlzIGJlaW5nIHByb3BzZWQ/DQ0KDQ0KQ3VycmVudGx5 LCBSdWJ5IGNyYXNoZXMgd2l0aCB5aml0IGdlbmVyYXRlZCBjb2RlIG9uIHRoZSBzdGFjaywgYHJi X3ByaW50X2JhY2t0cmFjZSgpYCBpcyB1bmFibGUgdG8gYWN0dWFsbHkgc2hvdyBhbnkgZnJhbWVz IHVuZGVybmVhdGggdGhlIHlqaXQgY29kZS4gRm9yIGV4YW1wbGUsIGlmIHlvdSBzZW5kIFNJR1NF R1YgdG8gYSBSdWJ5IHByb2Nlc3MgcnVubmluZyB5aml0LCB0aGlzIGlzIHdoYXQgeW91IHNlZToN DQoNDQpgYGANDQovcnVieS9taW5pcnVieShyYl9wcmludF9iYWNrdHJhY2UrMHhjKSBbMHhhYWFh ZDAyNzY4ODRdIC9ydWJ5L3ZtX2R1bXAuYzo3ODUNDQovcnVieS9taW5pcnVieShyYl92bV9idWdy ZXBvcnQpIC9ydWJ5L3ZtX2R1bXAuYzoxMDkzDQ0KL3J1YnkvbWluaXJ1YnkocmJfYnVnX2Zvcl9m YXRhbF9zaWduYWwrMHhkMCkgWzB4YWFhYWQwMDc1NTgwXSAvcnVieS9lcnJvci5jOjgxMw0NCi9y dWJ5L21pbmlydWJ5KHNpZ3NlZ3YrMHg1YykgWzB4YWFhYWQwMWJlZGFjXSAvcnVieS9zaWduYWwu Yzo5MTkNDQpsaW51eC12ZHNvLnNvLjEoX19rZXJuZWxfcnRfc2lncmV0dXJuKzB4MCkgWzB4ZmZm ZjkxYTNlOGJjXQ0NCi9ydWJ5L21pbmlydWJ5KG1hcDwodXNpemUsIHlqaXQ6OmJhY2tlbmQ6Omly OjpJbnNuKSwgKHVzaXplLCB5aml0OjpiYWNrZW5kOjppcjo6SW5zbiksIHlqaXQ6OmJhY2tlbmQ6 OmlyOjp7aW1wbCMxN306Om5leHRfbWFwcGVkOjp7Y2xvc3VyZV9lbnYjMH0+KzB4OGMpIFsweGFh YWFkMDNiOGIwMF0gL3J1c3RjLzg5N2UzNzU1M2JiYThiNDI3NTFjNjc2NTg5Njc4ODlkMTFlY2Qx MjAvbGlicmFyeS9jb3JlL3NyYy9vcHRpb24ucnM6OTI5DQ0KL3J1YnkvbWluaXJ1YnkobmV4dF9t YXBwZWQrMHgzYykgWzB4YWFhYWQwMjkxZGMwXSBzcmMvYmFja2VuZC9pci5yczoxMjI1DQ0KL3J1 YnkvbWluaXJ1YnkoYXJtNjRfc3BsaXQrMHgxMTQpIFsweGFhYWFkMDI4Nzc0NF0gc3JjL2JhY2tl bmQvYXJtNjQvbW9kLnJzOjM1OQ0NCi9ydWJ5L21pbmlydWJ5KGNvbXBpbGVfd2l0aF9yZWdzKzB4 ODApIFsweGFhYWFkMDI4YmY4NF0gc3JjL2JhY2tlbmQvYXJtNjQvbW9kLnJzOjExMDYNDQovcnVi eS9taW5pcnVieShjb21waWxlKzB4YzQpIFsweGFhYWFkMDI5MWFlMF0gc3JjL2JhY2tlbmQvaXIu cnM6MTE1OA0NCi9ydWJ5L21pbmlydWJ5KGdlbl9zaW5nbGVfYmxvY2srMHhlNDQpIFsweGFhYWFk MDJiMWY4OF0gc3JjL2NvZGVnZW4ucnM6ODU0DQ0KL3J1YnkvbWluaXJ1YnkoZ2VuX2Jsb2NrX3Nl cmllc19ib2R5KzB4OWMpIFsweGFhYWFkMDNiMDI1MF0gc3JjL2NvcmUucnM6MTY5OA0NCi9ydWJ5 L21pbmlydWJ5KGdlbl9ibG9ja19zZXJpZXMrMHg1MCkgWzB4YWFhYWQwM2IwMTAwXSBzcmMvY29y ZS5yczoxNjc2DQ0KL3J1YnkvbWluaXJ1YnkoYnJhbmNoX3N0dWJfaGl0X2JvZHkrMHg4MGMpIFsw eGFhYWFkMDNiMWY2OF0gc3JjL2NvcmUucnM6MjAyMQ0NCi9ydWJ5L21pbmlydWJ5KHtjbG9zdXJl IzB9KzB4MjgpIFsweGFhYWFkMDJlYjg2Y10gc3JjL2NvcmUucnM6MTkyNA0NCi9ydWJ5L21pbmly dWJ5KGRvX2NhbGw8eWppdDo6Y29yZTo6YnJhbmNoX3N0dWJfaGl0Ojp7Y2xvc3VyZV9lbnYjMH0s ICpjb25zdCB1OD4rMHg5OCkgWzB4YWFhYWQwMzViYTNjXSAvcnVzdGMvODk3ZTM3NTUzYmJhOGI0 Mjc1MWM2NzY1ODk2Nzg4OWQxMWVjZDEyMC9saWJyYXJ5L3N0ZC9zcmMvcGFuaWNraW5nLnJzOjQ5 Mg0NClsweGFhYWFkMDM1YzliNF0NDQpgYGANDQoNDQoobi5iLiAtIEkgY29tcGlsZWQgUnVieSB3 aXRoIGAtZmFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzIOKAk3JkeW5hbWljIOKAk2dgIGluIGNm bGFncyB0byBtYWtlIHN1cmUgZ2NjIGdlbmVyYXRlcyBhcHByb3ByaWF0ZSB1bndpbmQgaW5mbyAm IGtlZXBzIHRoZSBzeW1ib2wgdGFibGVzKS4NDQoNDQpMaWtld2lzZSwgaWYgeW91IGF0dGFjaCBn ZGIgdG8gYSBSdWJ5IHByb2Nlc3Mgd2l0aCB5aml0IGVuYWJsZWQsIGdkYiBjYW4ndCBzaG93IHRo cmVhZCBiYWNrdHJhY2VzIHRocm91Z2ggeWppdC1nZW5lcmF0ZWQgY29kZSBlaXRoZXIuDQ0KDQ0K TXkgcHJvcG9zYWwgaXMgdGhhdCBZSklUIGdlbmVyYXRlIHN1ZmZpY2llbnQgdW53aW5kaW5nIGFu ZCBkZWJ1ZyBpbmZvcm1hdGlvbiBvbiBhbGwgcGxhdGZvcm1zIHRvIGFsbG93IGJvdGggYHJiX3By aW50X2JhY2t0cmFjZSgpYCBhbmQgdGhlIHBsYXRmb3JtJ3MgZGVidWdnZXIgKGdkYi9sbGRiL1dp bkRiZykgdG8gc2hvdzoNDQoNDQoqIEZ1bGwgc3RhY2sgdHJhY2VzIGFsbCB0aGUgd2F5IGJhY2sg dG8gYG1haW5gLiBUaGF0IGlzLCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gc2VlIGZyYW1lcyBf dW5kZXJuZWF0aF8gYFsweGFhYWFkMDM1YzliNF1gIGZyb20gdGhlIGJhY2t0cmFjZSBhYm92ZS4N DQoqIE5hbWVzIGZvciB0aGUgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHlqaXQgYmxvY2tzIChlLmcu IGluc3RlYWQgb2YgYFsweGFhYWFkMDM1YzliNF1gLCB3ZSBzaG91bGQgc2VlIHNvbWV0aGluZyBs aWtlIGB5aml0JCRuYW1lX29mX3J1YnlfbWV0aG9kYCwgd2hlcmUgYG5hbWVfb2ZfcnVieV9tZXRo b2RgIGlzIHRoZSBgbGFiZWxgIGZvciB0aGUgaXNlcSB0aGlzIGlzIEpJVCdkIGNvZGUgZm9yKS4N DQoNDQojIyBNb3RpdmF0aW9uDQ0KDQ0KSSBoYXZlIGEgZmV3IG1vdGl2YXRpb25zIGZvciB3YW50 aW5nIHRoaXMuIEZpcnN0bHksIEkgZmVlbCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgaW5kZXBlbmRl bnRseSB1c2VmdWwuIFdoZW4gUnVieSBjcmFzaGVzLCB0aGUgbW9yZSBpbmZvcm1hdGlvbiB3ZSBj YW4gZ2V0LCB0aGUgbW9yZSBsaWtlbHkgd2UgYXJlIHRvIGZpbmQgdGhlIHJvb3QgY2F1c2UuIExp a2V3aXNlLCB0aGUgc2FtZSBwcmluY2lwbGUgYXBwbGllcyB0byBkZWJ1Z2dpbmcgd2l0aCBnZGIg LSB5b3UgY2FuIGdldCBhIGZ1bGxlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlIHByb2Nlc3Mg aXMgZG9pbmcgaWYgeW91IHNlZSB0aGUgd2hvbGUgc3RhY2suDQ0KDQ0KSSBoYXZlIG9mdGVuIGZv dW5kIGF0dGFjaGluZyBnZGIgdG8gdGhlIFJ1YnkgaW50ZXJwcmV0ZXIgaGVscHMgaW4gdW5kZXJz dGFuZGluZyBwcm9ibGVtcyBpbiBSdWJ5IGNvZGUgb3IgQyBleHRlbnNpb25zIGFuZCBpcyBzb21l dGhpbmcgSSBkbyByZWxhdGl2ZWx5IGZyZXF1ZW50bHk7IHlqaXQgYnJlYWtpbmcgdGhhdCB3aWxs IGRlZmluaXRlbHkgYmUgaW5jb252ZW5pZW50IGZvciBtZSENDQoNDQojIyBJbXBsZW1lbnRhdGlv bg0NCg0NCkkgaGF2ZSBhIGRyYWZ0IGltcGxlbWVudGF0aW9uIGhlcmUgb24gaG93IEknZCBpbXBs ZW1lbnQgdGhpczogLiBJdCdzIGN1cnJlbnRseSBtaXNzaW5nIHRlc3RzICYgcGxhdGZvcm0gc3Vw cG9ydCAoaXQgb25seSB3b3JrcyBvbiBMaW51eCBhYXJjaDY0KS4gQWxzbywgaXQgaW1wbGVtZW50 cyB1bndpbmQgaW5mbyBnZW5lcmF0aW9uLCBzbyB1bndpbmRpbmcgY2FuIHdvcmsgX3Rocm91Z2hf IHlqaXQgY29kZSwgYnV0IGl0IGRvZXMgbm90IGN1cnJlbnRseSBlbWl0IHN5bWJvbHMgdG8gZ2l2 ZSBfbmFtZXNfIHRvIHRob3NlIHlqaXQgZnJhbWVzLg0NCg0NCk15IFBSIGNvbnRhaW5zIGEgZG9j dW1lbnQgd2hpY2ggZXhwbGFpbnMgaG93IHRoZSBMaW51eCBpbnRlcmZhY2VzIGZvciByZWdpc3Rl cmluZyB1bndpbmQgaW5mbyBmb3IgSklUJ2QgY29kZSB3b3JrLCBzbyBJIHdvbid0IGR1cGxpY2F0 ZSB0aGF0IGluZm9ybWF0aW9uIGhlcmUuDQ0KDQ0KVGhlIGJpZ2dlc3QgaW1wbGVtZW50YXRpb24g cXVlc3Rpb24gSSBoYWQgaXMgYXJvdW5kIHRoZSB1c2Ugb2YgUnVzdCBjcmF0ZXMuIEN1cnJlbnRs eSwgSSBwcm90b3R5cGVkIG15IGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBnaW1saSAmIG9iamVj dCBjcmF0ZXMsIGZvciBnZW5lcmF0aW5nIERXQVJGIGluZm8gYW5kIEVMRiBiaW5hcmllcy4gSG93 ZXZlciwgdGhlIHlqaXQgYnVpbGQgZG9lcyBwdXJwb3NlZnVsbHkgZG9lcyBub3QgdXNlIGNhcmdv ICYgZXh0ZXJuYWwgY3JhdGVzIGZvciByZWxlYXNlIGJ1aWxkcy4gVGhlcmUgYXJlIGEgZmV3IGRp ZmZlcmVudCB3YXlzIHdlIGNvdWxkIGdvIGhlcmU6DQ0KDQ0KKiBEb24ndCB1c2UgdGhlIGdpbWxp ICYgb2JqZWN0IGNyYXRlczsgaW5zdGVhZCwgcmUtaW1wbGVtZW50IGFsbCBkZWJ1ZyBpbmZvICYg b2JqZWN0IGZpbGUgZ2VuZXJhdGlvbiBjb2RlIGluIHlqaXQuDQ0KKiBEb24ndCB1c2UgdGhlIGNy YXRlczsgaW5zdGVhZCwgbGluayBhZ2FpbnQgQyBsaWJyYXJpZXMgdG8gcHJvdmlkZSB0aGlzIGZ1 bmN0aW9uYWxpdHkgJiBjYWxsIHRoZW0gZnJvbSBSdXN0IChwZXJoYXBzIHNvbWUgY29tYmluYXRp b24gb2YgbGliZWxmLCBsaWJkdywgbGliYmZkLCBvciBsbHZtIG1pZ2h0IGRvIHdoYXQgd2UgbmVl ZCkNDQoqIFVzZSBjYXJnbyBhZnRlciBhbGwgZm9yIHRoZSByZWxlYXNlIGJ1aWxkICYgZG93bmxv YWQgdGhlIGNyYXRlcyBhdCBidWlsZC10aW1lDQ0KKiBVc2UgY2FyZ28gZm9yIHRoZSByZWxlYXNl IGJ1aWxkLCBidXQgdmVuZG9yIGV2ZXJ5dGhpbmcsIHNvIHRoZSBidWlsZCBkb2Vzbid0IG5lZWQg dG8gZG93bmxvYWQgYW55dGhpbmcNDQoqIE9ubHkgbWFrZSB1bndpbmQgaW5mbyBnZW5lcmF0aW9u IGF2YWlsYWJsZSBpbiBkZXYgbW9kZSB3aGVyZSBjYXJnbyBpcyB1c2VkLCBhbmQgc28gbWFyayB0 aGUgZ2ltbGkvb2JqZWN0IGRlcGVuZGVuY2llcyBhcyBvcHRpb25hbCBpbiBDYXJnby50b21sLg0N Cg0NCldlJ2QgbmVlZCB0byBkZWNpZGUgb24gb25lIG9mIHRoZXNlIGFwcHJvYWNoZXMgZm9yIHRo aXMgcHJvcG9zYWwgdG8gd29yay4gSSBkb24ndCByZWFsbHkgaGF2ZSBhIHN0cm9uZyBzZW5zZSBv ZiB0aGUgcHJvcy9jb25zIG9mIGVhY2guDQ0KDQ0KKFNpZGUgbm90ZSAtIG15IFBSIGFjdHVhbGx5 IGRlcGVuZHMgb24gYSBfZm9ya18gb2YgZ2ltbGkgLSBJJ3ZlIGJlZW4gZGlzY3Vzc2luZyBhZGRp bmcgdGhlIG5lZWRlZCBpbnRlcmZhY2VzIHVwc3RyZWFtIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNv bS9naW1saS1ycy9naW1saS9pc3N1ZXMvNjQ4KS4NDQoNDQojIyBCZW5jaG1hcmtzDQ0KDQ0KSSBy YW4gdGhlIHlpdC1iZW5jaCBzdWl0ZSBvbiBteSBicmFuY2ggYW5kIGNvbXBhcmVkIGl0IHRvIFJ1 YnkgbWFzdGVyOg0NCg0NCiogTXkgYnJhbmNoOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9LSlRz YW5ha3RzaWRpcy81NzQxYTlmNjRlNWNkNzVjZGY1ZmVkZDg0NjA5MWE0Zg0NCiogUnVieSBtYXN0 ZXI6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0tKVHNhbmFrdHNpZGlzLzU5MmQzZWJjZjk4ZjY3 NDVkZmEzZWZiZDMwYTI1YWNmDQ0KDQ0KVGhpcyBpcyBhICh2ZXJ5IHNpbXBsZSkgY29tcGFyaXNv bjoNDQoNDQpgYGANDQotLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tIC0t LS0tLS0tLS0tLS0tLQ0NCmJlbmNoICAgICAgICAgIHlqaXQgKG1zKSAgICBicmFuY2ggKG1zKSAg YnJhbmNoL3lqaXQgKCUpDQ0KYWN0aXZlcmVjb3JkICAgOTcuNSAgICAgICAgIDk4LjUgICAgICAg ICAxMDEuMDMlDQ0KaGV4YXBkZiAgICAgICAgMjQxNS4zICAgICAgIDI0NTguMiAgICAgICAxMDEu NzglDQ0KbGlxdWlkLWMgICAgICAgNjEuOSAgICAgICAgIDYzLjEgICAgICAgICAxMDEuOTQlDQ0K bGlxdWlkLXJlbmRlciAgMTM1LjMgICAgICAgIDEzNS4wICAgICAgICA5OS43OCUNDQptYWlsICAg ICAgICAgICAxMDQuNiAgICAgICAgMTA1LjUgICAgICAgIDEwMC44NiUNDQpwc3ljaC1sb2FkICAg ICAxODg3LjEgICAgICAgMTkyMi4wICAgICAgIDEwMS44NSUNDQpyYWlsc2JlbmNoICAgICAxNTQ0 LjQgICAgICAgMTU1Ni4wICAgICAgIDEwMC43NSUNDQpydWJ5LWxzcCAgICAgICA4OC40ICAgICAg ICAgODkuNSAgICAgICAgIDEwMS4yNCUNDQpzZXF1ZWwgICAgICAgICAxNDcuNSAgICAgICAgMTUx LjEgICAgICAgIDEwMi40NCUNDQpiaW5hcnl0cmVlcyAgICAzMDMgICAgICAgICAgMzA1LjYgICAg ICAgIDEwMC44NiUNDQpjaHVua3lfcG5nICAgICAxMDc1LjggICAgICAgMTA3OS40ICAgICAgIDEw MC4zMyUNDQplcnViaSAgICAgICAgICAzOTIuOSAgICAgICAgMzkyLjMgICAgICAgIDk5Ljg1JQ0N CmVydWJpX3JhaWxzICAgIDE0LjcgICAgICAgICAxNC43ICAgICAgICAgMTAwLjAwJQ0NCmV0YW5u aSAgICAgICAgIDc5Mi4zICAgICAgICA3OTEuNCAgICAgICAgOTkuODklDQ0KZmFubmt1Y2hyZWR1 eCAgMzgxNS45ICAgICAgIDM4MTMuNiAgICAgICA5OS45NCUNDQpsZWUgICAgICAgICAgICAxMDMw LjIgICAgICAgMTAzOS4yICAgICAgIDEwMC44NyUNDQpuYm9keSAgICAgICAgICA0OS4yICAgICAg ICAgNDkuMyAgICAgICAgIDEwMC4yMCUNDQpvcHRjYXJyb3QgICAgICA0MTQyICAgICAgICAgNDE0 My4zICAgICAgIDEwMC4wMyUNDQpydWJ5LWpzb24gICAgICAyODYwLjcgICAgICAgMjg3NC4wICAg ICAgIDEwMC40NiUNDQpydWJ5a29uICAgICAgICA3OTA2LjYgICAgICAgNzkwNC4yICAgICAgIDk5 Ljk3JQ0NCjMwa19pZmVsc2UgICAgIDM0OC43ICAgICAgICAzNDUuNCAgICAgICAgOTkuMDUlDQ0K MzBrX21ldGhvZHMgICAgODI4LjYgICAgICAgIDgzMS44ICAgICAgICAxMDAuMzklDQ0KY2Z1bmNf aXRzZWxmICAgMjguOCAgICAgICAgIDI4LjkgICAgICAgICAxMDAuMzUlDQ0KZmliICAgICAgICAg ICAgMzQuNCAgICAgICAgIDM0LjUgICAgICAgICAxMDAuMjklDQ0KZ2V0aXZhciAgICAgICAgMTE1 LjUgICAgICAgIDEwOS43ICAgICAgICA5NC45OCUNDQprZXl3b3JkX2FyZ3MgICAzNy43ICAgICAg ICAgMzguMCAgICAgICAgIDEwMC44MCUNDQpyZXNwb25kX3RvICAgICAyNiAgICAgICAgICAgMjYu MSAgICAgICAgIDEwMC4zOCUNDQpzZXRpdmFyICAgICAgICAzMy44ICAgICAgICAgMzMuNSAgICAg ICAgIDk5LjExJQ0NCnNldGl2YXJfb2JqZWN0IDIwOC43ICAgICAgICAxOTQuMyAgICAgICAgOTMu MTAlDQ0Kc3RyX2NvbmNhdCAgICAgNTIuNiAgICAgICAgIDUyLjIgICAgICAgICA5OS4yNCUNDQp0 aHJvdyAgICAgICAgICAyMy44ICAgICAgICAgMjQuMSAgICAgICAgIDEwMS4yNiUNDQotLS0tLS0t LS0tLS0tLSAtLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLQ0NCmBgYA0N Cg0NCkl0IHNlZW1zIGxpa2UgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiBnZW5lcmF0aW5nIGFu ZCByZWdpc3RlcmluZyB0aGUgZGVidWcgaW5mbyBpcyBtYXJnaW5hbC4NDQoNDQoNDQoNDQotLSAN DQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NDQogX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwogcnVieS1jb3JlIG1haWxpbmcgbGlzdCAtLSBydWJ5LWNv cmVAbWwucnVieS1sYW5nLm9yZwogVG8gdW5zdWJzY3JpYmUgc2VuZCBhbiBlbWFpbCB0byBydWJ5 LWNvcmUtbGVhdmVAbWwucnVieS1sYW5nLm9yZwogcnVieS1jb3JlIGluZm8gLS0gaHR0cHM6Ly9t bC5ydWJ5LWxhbmcub3JnL21haWxtYW4zL3Bvc3Rvcml1cy9saXN0cy9ydWJ5LWNvcmUubWwucnVi eS1sYW5nLm9yZy8=