Re: [PATCH v7 20/23] firmware: arm_scmi: Add System Telemetry driver
Fayssal Benmlih <[email protected]> Mon, 3 Aug 2026 22:34:20 +0000
| Newsgroups | org.kernel.vger.arm-scmi,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-doc,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
SGkgQ3Jpc3RpYW4sDQoNClRoYW5rcyBmb3IgYWRkaW5nIHRoZSBiYXRjaCBzdGF0dXMgYW5kIHdy aXRlLW1vZGUgc3VwcG9ydC4gSSBmb3VuZCBhDQpudW1iZXIgb2YgcmVtYWluaW5nIGltcGxlbWVu dGF0aW9uIGlzc3VlcyBpbmxpbmUuDQoNCj4gCWlmIChnZXRfdXNlcih1c2l6ZSwgKHUzMiBfX3Vz ZXIgKilhcmcpKQ0KPiAJCXJldHVybiAtRUZBVUxUOw0KPg0KPiAJaWYgKHVzaXplIDwgb2Zmc2V0 b2ZlbmQoc3RydWN0IHNjbWlfdGxtX2FiaV9pbmZvLCByZXNlcnZlZCkpDQo+IAkJcmV0dXJuIC1F SU5WQUw7DQo+DQo+IAlpZiAoY29weV9zdHJ1Y3RfZnJvbV91c2VyKCZiYXNlLCBzaXplb2YoYmFz ZSksIHVwdHIsIHVzaXplKSkNCj4gCQlyZXR1cm4gLUVGQVVMVDsNCg0KdXNpemUgc3RpbGwgaGFz IG5vIHVwcGVyIGJvdW5kLCBzbyBhIGxhcmdlIHZhbHVlIGNhbiBtYWtlIHRoZSBzdHJ1Y3QNCmhl bHBlcnMgaW5zcGVjdCBvciBjbGVhciBhIHZlcnkgbGFyZ2UgdXNlcnNwYWNlIHJhbmdlLiBQbGVh c2UgcmVqZWN0DQp2YWx1ZXMgYWJvdmUgYSBjb252ZW50aW9uYWwgbGltaXQgc3VjaCBhcyBQQUdF X1NJWkUuDQoNClBsZWFzZSBhbHNvIHByb3BhZ2F0ZSB0aGUgYWN0dWFsIGNvcHlfc3RydWN0X2Zy b21fdXNlcigpIGVycm9yIGluc3RlYWQgb2YNCmNvbnZlcnRpbmcgZXJyb3JzIHN1Y2ggYXMgLUUy QklHIGludG8gLUVGQVVMVC4NCg0KPiAJCXJldCA9IHRzcC0+b3BzLT5zdGF0ZV9zZXQodHNwLT5w aCwgdHJ1ZSwgY2ZnLmdycF9pZCwNCj4gCQkJCQkgICZlbmEsICZ0X2VuYSwgTlVMTCwgTlVMTCwg TlVMTCk7DQo+IAkJaWYgKHJldCkNCj4gCQkJcmV0dXJuIHJldDsNCj4gCX0NCj4NCj4gCWFjdGl2 ZSA9IFNDTUlfVExNX0JVSUxEX1VQREFURV9JTlRFUlZBTChjZmcuYWN0aXZlLnNlY3MsDQo+IAkJ CQkJCWNmZy5hY3RpdmUuZXhwKTsNCj4NCj4gCXJldHVybiB0c3AtPm9wcy0+Y29sbGVjdGlvbl9j b25maWd1cmUodHNwLT5waCwgY2ZnLmdycF9pZCwNCj4gCQkJCQkgICAgICAgJmVuYSwgJmFjdGl2 ZSwgTlVMTCk7DQoNCnNlY3MgYW5kIGV4cCBhcmUgc3RpbGwgcGFja2VkIHdpdGhvdXQgY2hlY2tp bmcgdGhhdCB0aGV5IGZpdCB0aGUgU0NNSQ0KaW50ZXJ2YWwgZW5jb2RpbmcuIE91dC1vZi1yYW5n ZSB2YWx1ZXMgY2FuIHRoZXJlZm9yZSBiZSBzaWxlbnRseQ0KdHJ1bmNhdGVkIGludG8gYSBkaWZm ZXJlbnQgaW50ZXJ2YWwuIFBsZWFzZSB2YWxpZGF0ZSBib3RoIGZpZWxkcyBhbmQNCnByZWZlcmFi bHkgdmVyaWZ5IHRoYXQgdGhlIGVuY29kZWQgdmFsdWUgYmVsb25ncyB0byB0aGUgYWR2ZXJ0aXNl ZA0KZGlzY3JldGUgb3Igc2VnbWVudGVkIGludGVydmFsIHNldC4NCg0KRm9yIGEgZ3JvdXAsIHN0 YXRlX3NldCgpIGNhbiBhbHNvIHN1Y2NlZWQgYmVmb3JlDQpjb2xsZWN0aW9uX2NvbmZpZ3VyZSgp IGZhaWxzLCBsZWF2aW5nIHBhcnRpYWxseSBhcHBsaWVkIHN0YXRlLiBQbGVhc2UgYWRkDQpyb2xs YmFjayBvciBkZWZpbmUgdGhlIHBhcnRpYWwtZmFpbHVyZSBiZWhhdmlvci4gQSBwZXItaW5zdGFu Y2UgbG9jayBpcw0KYWxzbyBuZWVkZWQgaWYgdGhpcyBtdWx0aS1jb21tYW5kIG9wZXJhdGlvbiBt dXN0IG5vdCBpbnRlcmxlYXZlIHdpdGgNCmFub3RoZXIgY2FsbGVyLg0KDQo+IAkJdGxtX2l2cyA9 IHJpbmZvLT5ncnBzW2l2cy5ncnBfaWRdLmludGVydmFsczsNCj4gCX0NCj4NCj4gCWlmIChpdnMu bnVtX2ludGVydmFscyA8IHRsbV9pdnMtPm51bV9pbnRlcnZhbHMpDQo+IAkJcmV0dXJuIC1FTk9T UEM7DQoNCnJpbmZvLT5ncnBzW2l2cy5ncnBfaWRdLmludGVydmFscyBjYW4gYmUgTlVMTCB3aGVu IHBlci1ncm91cCBpbnRlcnZhbA0KY29uZmlndXJhdGlvbiBpcyB1bnN1cHBvcnRlZCBvciBlbnVt ZXJhdGlvbiB3YXMgaW5jb21wbGV0ZS4gVGhpcyBpcw0KZGVyZWZlcmVuY2VkIGltbWVkaWF0ZWx5 IGFmdGVyd2FyZC4gUGxlYXNlIHJldHVybiAtRU9QTk9UU1VQUCBvciB0aGUNCnNhdmVkIGVudW1l cmF0aW9uIGVycm9yIGJlZm9yZSBhY2Nlc3NpbmcgaXQuDQoNCj4gCW91dC0+ZmxhZ3MgfD0gaW4t PmRpc2NyZXRlID8gU0NNSV9UTE1fSU5URVJWX0RJU0NSRVRFIDogMDsNCg0KVXNpbmcgfD0gZG9l cyBub3QgZnVsbHkgZml4IHRoZSBpbnB1dC1pbmhlcml0YW5jZSBpc3N1ZS4gSWYgdXNlcnNwYWNl DQpzdXBwbGllcyBTQ01JX1RMTV9JTlRFUlZfRElTQ1JFVEUgYW5kIGZpcm13YXJlIHJlcG9ydHMg c2VnbWVudGVkDQppbnRlcnZhbHMsIHRoZSBiaXQgcmVtYWlucyBzZXQuDQoNClBsZWFzZSBjbGVh ciB0aGUgb3V0cHV0LW9ubHkgYml0IGZpcnN0IGFuZCB0aGVuIHNldCBpdCBzb2xlbHkgZnJvbQ0K aW4tPmRpc2NyZXRlLg0KDQo+IAlpdnNfaW50cnZfc3ogPSBpdnMubnVtX2ludGVydmFscyAqDQo+ IAkJCXNpemVvZihzdHJ1Y3Qgc2NtaV90bG1fdXBkYXRlX2ludGVydmFsKTsNCj4gCXN0cnVjdCBz Y21pX3RsbV91cGRhdGVfaW50ZXJ2YWwgKml2c19pbnRydiBfX2ZyZWUoa2ZyZWUpID0NCj4gCQlr emFsbG9jKGl2c19pbnRydl9zeiwgR0ZQX0tFUk5FTCk7DQoNClRoaXMgbXVsdGlwbGljYXRpb24g cmVtYWlucyB1bmNoZWNrZWQgYW5kIHRoZSBhbGxvY2F0aW9uIHN0aWxsIHVzZXMgdGhlDQp1c2Vy c3BhY2UgY2FwYWNpdHkgaW5zdGVhZCBvZiB0aGUgcmVxdWlyZWQgZmlybXdhcmUgY291bnQuIE9u IGEgMzItYml0DQprZXJuZWwgdGhlIHNpemUgY2FuIHdyYXAgYmVmb3JlIGt6YWxsb2MoKS4NCg0K UGxlYXNlIHVzZSBrY2FsbG9jKCkgb3Igc2l6ZV9tdWwoKSB3aXRoIHRsbV9pdnMtPm51bV9pbnRl cnZhbHMgYW5kIGNvcHkNCm9ubHkgdGhlIG51bWJlciBvZiBlbnRyaWVzIGFjdHVhbGx5IHJldHVy bmVkLiBUaGUgc2FtZSBwYXR0ZXJuIHJlbWFpbnMgaW4NCnRoZSBvdGhlciB2YXJpYWJsZS1sZW5n dGggZW51bWVyYXRpb24gaGFuZGxlcnMuDQoNCj4gCWZvciAoaW50IGkgPSAwOyBpIDwgcmluZm8t Pm51bV9kZXM7IGkrKykgew0KPiAJCXJldCA9IHRpLT50c3AtPm9wcy0+c3RhdGVfc2V0KHRpLT50 c3AtPnBoLCBmYWxzZSwNCj4gCQkJCQkgICAgICByaW5mby0+ZGVzW2ldLT5pbmZvLT5pZCwNCj4g CQkJCQkgICAgICAmZW5hLCAmdF9lbmEsDQo+IAkJCQkJICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7 DQo+IAkJaWYgKHJldCkNCj4gCQkJcmV0dXJuIHJldDsNCj4gCX0NCg0KU0VUX0FMTF9DRkcgc3Rp bGwgbGVhdmVzIHByZWNlZGluZyBERXMgbW9kaWZpZWQgaWYgYSBsYXRlciBzdGF0ZV9zZXQoKQ0K ZmFpbHMuIEdFVF9BTExfQ0ZHIG9ubHkgcmV0dXJucyBjdW11bGF0aXZlIGJvb2xlYW5zLCBzbyB1 c2Vyc3BhY2UgY2Fubm90DQpkZXRlcm1pbmUgd2hhdCBjaGFuZ2VkLg0KDQpQbGVhc2UgcHJvdmlk ZSByb2xsYmFjayBvciBkZWZpbmUvcmVwb3J0IHBhcnRpYWwgY29tcGxldGlvbiwgYW5kIHNlcmlh bGl6ZQ0KdGhpcyBzZXF1ZW5jZSBhZ2FpbnN0IG90aGVyIGNvbmZpZ3VyYXRpb24gYW5kIHJlc2V0 IGNhbGxlcnMuDQoNCj4gCWlmIChiYXRjaC5zdGF0ZXMpIHsNCj4gCQlpbnQgKnN0YXRlc19hcnIg X19mcmVlKGtmcmVlKSA9DQo+IAkJCWtjYWxsb2MoYmF0Y2gubnVtX2l0ZW1zLCBzaXplb2YoKnN0 YXRlc19hcnIpLA0KPiAJCQkJR0ZQX0tFUk5FTCk7DQo+IFsuLi5dDQo+IAkJaWYgKGNvcHlfZnJv bV91c2VyKHN0YXRlc19hcnIsDQo+IAkJCQkgICB1NjRfdG9fdXNlcl9wdHIoYmF0Y2guc3RhdGVz KSwNCj4gCQkJCSAgIGJhdGNoLm51bV9pdGVtcyAqIHNpemVvZigqc3RhdGVzX2FycikpKQ0KPiAJ CQlyZXR1cm4gLUVGQVVMVDsNCj4NCj4gCQlzdGF0ZXMgPSBub19mcmVlX3B0cihzdGF0ZXNfYXJy KTsNCj4gCX0NCg0Kc3RhdGVzIGlzIGRvY3VtZW50ZWQgYXMgYW4gb3V0cHV0IGFycmF5LiBDb3B5 aW5nIGl0cyBpbml0aWFsIGNvbnRlbnRzIGZyb20NCnVzZXJzcGFjZSBtZWFucyBzdWNjZXNzZnVs IGVudHJpZXMgcmV0YWluIGFyYml0cmFyeSB1c2VyLXByb3ZpZGVkIHZhbHVlcywNCmJlY2F1c2Ug b25seSBmYWlsdXJlcyBhc3NpZ24gc3RhdGVzW2ldLg0KDQpQbGVhc2UgbGVhdmUgdGhlIGtjYWxs b2MoKS1pbml0aWFsaXplZCB6ZXJvcyBpbiBwbGFjZSBhbmQgb25seSBzdG9yZSBhDQpuZWdhdGl2 ZSBzdGF0dXMgZm9yIGZhaWxlZCBlbnRyaWVzLiBUaGUgc2FtZSBpc3N1ZSBleGlzdHMgaW4gdGhl IERFDQpjb25maWd1cmF0aW9uIGdldCBhbmQgYmF0Y2gtcmVhZCBoYW5kbGVycy4NCg0KVGhlcmUg aXMgYWxzbyBhIGNsZWFudXAgaXNzdWUgYWZ0ZXIgbm9fZnJlZV9wdHIoKTogc2V2ZXJhbCBzdWJz ZXF1ZW50DQpjb3B5X3RvX3VzZXIoKSBmYWlsdXJlcyByZXR1cm4gYmVmb3JlIHRoZSBtYW51YWwg a2ZyZWUoc3RhdGVzKSwgbGVha2luZw0KdGhlIGFycmF5LiBQbGVhc2UgcmV0YWluIGF1dG9tYXRp YyBjbGVhbnVwIHRocm91Z2ggZXZlcnkgY29weW91dCBwYXRoIG9yDQp1c2UgYSBjb21tb24gY2xl YW51cCBsYWJlbC4NCg0KPiAJc3RydWN0IHNjbWlfdGVsZW1ldHJ5X2RlX3NhbXBsZSAqc2FtcGxl cyBfX2ZyZWUoa2ZyZWUpID0NCj4gCQlrY2FsbG9jKGJhdGNoLm51bV9pdGVtcywgc2l6ZW9mKCpz YW1wbGVzKSwgR0ZQX0tFUk5FTCk7DQoNClRoZXJlIGlzIHN0aWxsIG5vIGV4cGxpY2l0IG1heGlt dW0gZm9yIGJhdGNoLm51bV9pdGVtcy4gUGxlYXNlIHZhbGlkYXRlIGl0DQphZ2FpbnN0IGFuIEFC SS1kZWZpbmVkIGxpbWl0IGJlZm9yZSBhbGxvY2F0aW5nIG9yIGl0ZXJhdGluZy4NCg0KPiAJLyog Q2hlY2sgdGhhdCB0aGUgcmVxdWVzdGVkIHNpemUgaXMgYWNjZXB0YWJsZSAqLw0KPiAJaWYgKHVk bC5udW1fdXVpZHMgPiB0aS0+aW5mby0+bnVtX3V1aWRzKQ0KPiAJCXJldHVybiAtRU5PU1BDOw0K DQpUaGlzIGNvbXBhcmlzb24gYXBwZWFycyByZXZlcnNlZC4gQSBjYXBhY2l0eSBsYXJnZXIgdGhh biB0aGUgYXZhaWxhYmxlDQpVVUlEIGNvdW50IHNob3VsZCBiZSBhY2NlcHRlZCwgd2hpbGUgYSBz bWFsbGVyIG5vbnplcm8gY2FwYWNpdHkgc2hvdWxkDQpyZXR1cm4gLUVOT1NQQyBhbmQgcmVwb3J0 IHRoZSByZXF1aXJlZCBjb3VudC4NCg0KVGhlIGN1cnJlbnQgY29kZSByZWplY3RzIG92ZXJzaXpl ZCBidWZmZXJzIGFuZCBzaWxlbnRseSByZXR1cm5zIG9ubHkgYQ0KcHJlZml4IGZvciB1bmRlcnNp emVkIGJ1ZmZlcnMuDQoNCj4gCWlmIChyZXEgPCBjdHgtPnNobXRpLT5sZW4pDQo+IAkJcmV0dXJu IC1FSU5WQUw7DQo+DQo+IAliYXNlID0gY3R4LT5zaG10aS0+cGh5cyAmIFBBR0VfTUFTSzsNCj4g CW5lZWRlZCA9IGN0eC0+c2htdGktPmxlbiArIGN0eC0+c2htdGktPm9mZnNldDsNCj4gCWV4cGVj dCA9IERJVl9ST1VORF9VUChuZWVkZWQsIFBBR0VfU0laRSk7DQo+IAlucGFnZXMgPSByZXEgPj4g UEFHRV9TSElGVDsNCj4gCWlmIChucGFnZXMgPiBleHBlY3QpDQo+IAkJcmV0dXJuIC1FSU5WQUw7 DQoNClRoZSByZXF1aXJlZCBtYXBwaW5nIGxlbmd0aCBpcyBQQUdFX0FMSUdOKG9mZnNldCArIGxl biksIG5vdCBqdXN0IGxlbi4gQQ0Kb25lLXBhZ2UgcmVxdWVzdCBjYW4gc3RpbGwgYmUgYWNjZXB0 ZWQgd2hlbiBvZmZzZXQgKyBsZW4gY3Jvc3NlcyBpbnRvIGENCnNlY29uZCBwYWdlLg0KDQpQbGVh c2UgY2FsY3VsYXRlIG5lZWRlZCB1c2luZyBjaGVja2VkIGFkZGl0aW9uIGFuZCByZXF1aXJlIHRo ZSBWTUEgdG8NCmNvdmVyIHRoZSBwYWdlLXJvdW5kZWQgcmVzdWx0LiBQbGVhc2UgYWxzbyByZWpl Y3Qgbm9uemVybyB2bV9wZ29mZiB1bmxlc3MNCnBhcnRpYWwgbWFwcGluZ3MgYXJlIGludGVudGlv bmFsbHkgcGFydCBvZiB0aGUgQUJJLg0KDQpTaG91bGQgZXhlY3V0YWJsZSBhbmQgcHJpdmF0ZSBt YXBwaW5ncyBhbHNvIGJlIHJlamVjdGVkPyBUaGUgZG9jdW1lbnRlZA0KaW50ZXJmYWNlIG9ubHkg YXBwZWFycyB0byByZXF1aXJlIGEgcmVhZC1vbmx5IHNoYXJlZCBtYXBwaW5nLg0KDQo+IAkJZmQg PSBhbm9uX2lub2RlX2dldGZkKFNDTUlfVExNX0RSSVZFUiwNCj4gCQkJCSAgICAgICZzY21pX3Rs bV9zaG10aV9mb3BzLCBjdHgsDQo+IAkJCQkgICAgICBPX1JET05MWSB8IE9fQ0xPRVhFQyk7DQoN CmFub25faW5vZGVfZ2V0ZmQoKSBpbnN0YWxscyB0aGUgZGVzY3JpcHRvciBpbW1lZGlhdGVseSwg YnV0IGJvdGgNCnN1YnNlcXVlbnQgdXNlcnNwYWNlIGNvcGllcyBjYW4gZmFpbC4gUmV0dXJuaW5n IC1FRkFVTFQgdGhlbiBsZWF2ZXMNCmluc3RhbGxlZCBmZHMgdGhhdCB1c2Vyc3BhY2UgZG9lcyBu b3Qga25vdyBhYm91dC4NCg0KUGxlYXNlIHJlc2VydmUgYW5kIGJ1aWxkIHRoZSBmaWxlcyBmaXJz dCwgcGVyZm9ybSBhbGwgY29weW91dHMsIGFuZCBvbmx5DQpjYWxsIGZkX2luc3RhbGwoKSBhZnRl ciB0aGV5IHN1Y2NlZWQsIHdpdGggcm9sbGJhY2sgZm9yIGV2ZXJ5IGZhaWx1cmUNCnBhdGguDQoN Cj4gc3RydWN0IHNjbWlfdGxtX3NobXRpX2N0eCB7DQo+IAlzdHJ1Y3Qgc2NtaV90ZWxlbWV0cnlf c2htdGlfaW5mbyAqc2htdGk7DQo+IAlzdHJ1Y3Qga3JlZiBrcmVmOw0KPiB9Ow0KDQpUaGUga3Jl ZiBvbmx5IHByb3RlY3RzIHRoaXMgY29udGV4dDsgaXQgZG9lcyBub3QgcGluIHRoZSBwcm90b2Nv bC1vd25lZA0KU0hNVEkgZGVzY3JpcHRvciBvciB0aGUgU0NNSSBkZXZpY2UuIEhvdyBhcmUgY3R4 LT5zaG10aSBhbmQgaXRzIHBoeXNpY2FsDQptZXRhZGF0YSBrZXB0IHZhbGlkIGFjcm9zcyBkcml2 ZXIgdW5iaW5kIHdoaWxlIGFuIGFub255bW91cyBmZCBvciBWTUENCnJlbWFpbnMgb3Blbj8NCg0K PiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdGxtX2ZvcHMgPSB7DQo+IAku b3duZXIgPSBUSElTX01PRFVMRSwNCj4gCS5vcGVuID0gbm9uc2Vla2FibGVfb3BlbiwNCj4gCS51 bmxvY2tlZF9pb2N0bCA9IHNjbWlfdGxtX3VubG9ja2VkX2lvY3RsLA0KPiAJLmNvbXBhdF9pb2N0 bCA9IGNvbXBhdF9wdHJfaW9jdGwsDQo+IH07DQoNCkV4aXN0aW5nIGRldmljZSBmZHMgY2FuIG91 dGxpdmUgY2Rldl9kZWwoKSwgYnV0IGV2ZXJ5IGlvY3RsIG9idGFpbnMgdGkNCmZyb20gdGhlIGVt YmVkZGVkIGNkZXYgYW5kIHRpIGlzIGRldm0tb3duZWQgYnkgdGhlIFNDTUkgZGV2aWNlLiBUaGlz DQphcHBlYXJzIHRvIHBlcm1pdCB1c2UtYWZ0ZXItZnJlZSBhZnRlciB1bmJpbmQuDQoNCkNvdWxk IG9wZW4gY3JlYXRlIGEgcGVyLWZpbGUgY29udGV4dCB0aGF0IHBpbnMgdGhlIGluc3RhbmNlL2Rl dmljZSwgd2l0aA0KcmVsZWFzZSBkcm9wcGluZyB0aGF0IHJlZmVyZW5jZSBhbmQgcmVqZWN0aW5n IG9wZXJhdGlvbnMgb25jZSByZW1vdmFsDQpiZWdpbnM/DQoNCj4gCXJldCA9IHhhX2FsbG9jKCZ0 aS0+ZXZlbnRzX3hhLCAmY29va2llLCBjdHgsDQo+IAkJICAgICAgIHNjbWlfZXZ0X3hhX2xpbWl0 LCBHRlBfS0VSTkVMKTsNCg0KRXZlbnQgc3Vic2NyaXB0aW9ucyBhcmUgc3RvcmVkIGluc3RhbmNl LXdpZGUgcmF0aGVyIHRoYW4gcGVyIG9wZW4gZmlsZSwNCmFuZCBzdGxtX2ZvcHMgaGFzIG5vIHJl bGVhc2UgY2FsbGJhY2suIENsb3NpbmcgdGhlIHRlbGVtZXRyeSBmZCB0aGVyZWZvcmUNCmxlYXZl cyB0aGUgZXZlbnRmZCByZWZlcmVuY2UgYW5kIGZpcm13YXJlIHN1YnNjcmlwdGlvbiBhY3RpdmUg dW50aWwNCmV4cGxpY2l0IGNhbmNlbGxhdGlvbiBvciBkZXZpY2UgcmVtb3ZhbC4NCg0KSXQgYWxz byBhbGxvd3MgYW5vdGhlciBvcGVuZXIgdGhhdCBrbm93cyB0aGUgY29va2llIHRvIGNhbmNlbCB0 aGUNCnN1YnNjcmlwdGlvbi4gUGxlYXNlIGFzc29jaWF0ZSBzdWJzY3JpcHRpb25zIHdpdGggYW4g b3Blbi1maWxlIGNvbnRleHQNCmFuZCBjbGVhbiB0aGVtIHVwIGF1dG9tYXRpY2FsbHkgZnJvbSBy ZWxlYXNlLg0KDQpUaGFua3MsDQpGYXnDp2FsDQoNCg==