From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: Re: [PATCH 4/4] drm/i915: expose EU topology through sysfs Date: Mon, 20 Nov 2017 16:54:24 +0000 Message-ID: <9dff124a-3404-7eec-760a-ecd9b655e1bb@intel.com> References: <20171120122316.25830-1-lionel.g.landwerlin@intel.com> <20171120122316.25830-5-lionel.g.landwerlin@intel.com> <2c007984-be6e-5160-1903-2ab7d0a57e22@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 258CC6E210 for ; Mon, 20 Nov 2017 16:54:32 +0000 (UTC) In-Reply-To: <2c007984-be6e-5160-1903-2ab7d0a57e22@linux.intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMjAvMTEvMTcgMTY6MTMsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+Cj4gT24gMjAvMTEvMjAx NyAxMjoyMywgTGlvbmVsIExhbmR3ZXJsaW4gd3JvdGU6Cj4+IFdpdGggdGhlIGludHJvZHVjdGlv biBvZiBhc3ltZXRyaWMgc2xpY2VzIGluIENOTCwgd2UgY2Fubm90IHJlbHkgb24KPj4gdGhlIHBy ZXZpb3VzIFNVQlNMSUNFX01BU0sgZ2V0cGFyYW0uIEhlcmUgd2UgaW50cm9kdWNlIGEgbW9yZSBk ZXRhaWxlZAo+PiB3YXkgb2YgcXVlcnlpbmcgdGhlIEdlbidzIEdQVSB0b3BvbG9neSB0aGF0IGRv ZXNuJ3QgYWdncmVnYXRlIG51bWJlcnMuCj4+Cj4+IFRoaXMgaXMgZXNzZW50aWFsIGZvciBtb25p dG9yaW5nIHBhcnRzIG9mIHRoZSBHUFUgd2l0aCB0aGUgT0EgdW5pdCwKPj4gYmVjYXVzZSBzaWdu YWxzIG5lZWQgdG8gYmUgYWNjb3VudGVkIHByb3Blcmx5IGJhc2VkIG9uIHdoZXRoZXIgcGFydCBv Zgo+PiB0aGUgR1BVIGhhcyBiZWVuIGZ1c2VkIG9mZi4gVGhlIGN1cnJlbnQgYWdncmVnYXRlZCBu dW1iZXJzIGxpa2UKPj4gRVVfVE9UQUwgZG8gbm90IGdpdmVzIHVzIHN1ZmZpY2llbnQgaW5mb3Jt YXRpb24uCj4+Cj4+IEhlcmUgaXMgdGhlIHN5c2ZzIGxheW91dCBvbiBhIFNreWxha2UgR1Q0IDoK Pj4KPj4gL3N5cy9kZXZpY2VzL3BjaTAwMDA6MDAvMDAwMDowMDowMi4wL2RybS9jYXJkMC9ndC9y Y3MvMC8KPj4g4pSc4pSA4pSAIGNhcGFiaWxpdGllcwo+PiDilJzilIDilIAgY2xhc3MKPj4g4pSc 4pSA4pSAIGlkCj4+IOKUnOKUgOKUgCBtYXhfZXVzX3Blcl9zdWJzbGljZQo+PiDilJzilIDilIAg bWF4X3NsaWNlcwo+PiDilJzilIDilIAgbWF4X3N1YnNsaWNlc19wZXJfc2xpY2UKPj4g4pSc4pSA 4pSAIHNsaWNlMAo+PiDilILCoMKgIOKUnOKUgOKUgCBzdWJzbGljZTAKPj4g4pSCwqDCoCDilILC oMKgIOKUlOKUgOKUgCBldXNfZW5hYmxlZF9tYXNrCj4+IOKUgsKgwqAg4pSc4pSA4pSAIHN1YnNs aWNlMQo+PiDilILCoMKgIOKUgsKgwqAg4pSU4pSA4pSAIGV1c19lbmFibGVkX21hc2sKPj4g4pSC wqDCoCDilJzilIDilIAgc3Vic2xpY2UyCj4+IOKUgsKgwqAg4pSCwqDCoCDilJTilIDilIAgZXVz X2VuYWJsZWRfbWFzawo+PiDilILCoMKgIOKUnOKUgOKUgCBzdWJzbGljZTMKPj4g4pSCwqDCoCDi lILCoMKgIOKUlOKUgOKUgCBldXNfZW5hYmxlZF9tYXNrCj4+IOKUgsKgwqAg4pSU4pSA4pSAIHN1 YnNsaWNlc19lbmFibGVkX21hc2sKPj4g4pSc4pSA4pSAIHNsaWNlMQo+PiDilILCoMKgIOKUnOKU gOKUgCBzdWJzbGljZTAKPj4g4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCBldXNfZW5hYmxlZF9t YXNrCj4+IOKUgsKgwqAg4pSc4pSA4pSAIHN1YnNsaWNlMQo+PiDilILCoMKgIOKUgsKgwqAg4pSU 4pSA4pSAIGV1c19lbmFibGVkX21hc2sKPj4g4pSCwqDCoCDilJzilIDilIAgc3Vic2xpY2UyCj4+ IOKUgsKgwqAg4pSCwqDCoCDilJTilIDilIAgZXVzX2VuYWJsZWRfbWFzawo+PiDilILCoMKgIOKU nOKUgOKUgCBzdWJzbGljZTMKPj4g4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCBldXNfZW5hYmxl ZF9tYXNrCj4+IOKUgsKgwqAg4pSU4pSA4pSAIHN1YnNsaWNlc19lbmFibGVkX21hc2sKPj4g4pSc 4pSA4pSAIHNsaWNlMgo+PiDilILCoMKgIOKUnOKUgOKUgCBzdWJzbGljZTAKPj4g4pSCwqDCoCDi lILCoMKgIOKUlOKUgOKUgCBldXNfZW5hYmxlZF9tYXNrCj4+IOKUgsKgwqAg4pSc4pSA4pSAIHN1 YnNsaWNlMQo+PiDilILCoMKgIOKUgsKgwqAg4pSU4pSA4pSAIGV1c19lbmFibGVkX21hc2sKPj4g 4pSCwqDCoCDilJzilIDilIAgc3Vic2xpY2UyCj4+IOKUgsKgwqAg4pSCwqDCoCDilJTilIDilIAg ZXVzX2VuYWJsZWRfbWFzawo+PiDilILCoMKgIOKUnOKUgOKUgCBzdWJzbGljZTMKPj4g4pSCwqDC oCDilILCoMKgIOKUlOKUgOKUgCBldXNfZW5hYmxlZF9tYXNrCj4+IOKUgsKgwqAg4pSU4pSA4pSA IHN1YnNsaWNlc19lbmFibGVkX21hc2sKPj4g4pSU4pSA4pSAIHNsaWNlc19lbmFibGVkX21hc2sK Pgo+IEZvciB0aGUgdG9wb2xvZ3kgbGF5b3V0IEkgZG9uJ3QgZmVlbCBsaWtlIGFuIGV4cGVydC4g OigKPgo+IElzIGl0IG1vcmUgY29ycmVjdCBmb3IgaXQgdG8gYmUgcGVyIGVuZ2luZSBpbnN0YW5j ZSwgb3IgcGVyIGNsYXNzPwoKSSB0aGluayB5b3UgaGF2ZSBhIHBvaW50IGhlcmUuCkFzIGZhciBh cyBJIGNhbiB0ZWxsIHRoaXMgaXMgb25seSBvbmUgc2V0cyBvZiBzbGljZXMuIFNvIEkgZ3Vlc3Mg aXQgCnNob3VsZCBiZSBhdCB0aGUgY2xhc3MgbGV2ZWwuCgo+Cj4gU2hvdWxkIGl0IGdvIHVuZGVy IHRoZSB0b3BvbG9neSBzdWJkaXI/Cj4KPiBTaG91bGQgdGhlcmUgYmUgYSBzeW1saW5rIGZyb20g cmNzLzAvdG9wb2xvZ3kgLT4gLi4vdG9wb2xvZ3kgPwoKWWVhaCwgc291bmRzIGdvb2QgdG8gbWUu Cgo+Cj4gU2hvdWxkIHRoZSBvcmdhbml6YXRpb24gYmUgd2l0aCBtb3JlIHN1YmRpcnMgbGlrZSAK PiB0b3BvbG9neS9zbGljZS8wL3N1YnNsaWNlLzAvZXVzX2VuYWJsZWRfbWFzaz8KCkkgd291bGQg bGVhdmUgaXQgc2xpY2UwL3N1YnNsaWNlMC8uLi4gZm9yIG5vdyBhbmQgaWYgaXQgYmVjb21lcyBt b3JlIApjcm93ZGVkLCBjcmVhdGUgc2xpY2UvPGlkPi9zdWJzbGljZS88aWQ+IHdpdGggbGlua3Mg Zm9yIGJhY2t3YXJkIApjb21wYXRpYmlsaXR5LgpJIGRvbid0IHRoaW5rIHdlJ3JlIGdvaW5nIHRv IGV4cG9zZSBhIGxvdCBvZiBwcm9wZXJ0aWVzLgoKPgo+IElzIChzdWIpc2xpY2VzX2VuYWJsZWRf bWFzayByZXF1aXJlZC9oZWxwZnVsIG9yIGl0IGNhbiBiZSBpbmZlcnJlZCAKPiBmcm9tIGVudW1l cmF0aW5nIHRoZSBzbGljZXM/CgpGb3Igc2ltcGxpY2l0eSBpbiB0aGUga2VybmVsICYgdXNlcnNw YWNlLCBpdCdzIGhlbHBmdWwuCkl0IG1ha2VzIHRoZSByZWFkaW5nIG9mIHRoZSBzdHJ1Y3R1cmUg c2ltcGxlci4KCj4KPiBTYW1lIGZvciBtYXhfc2xpY2VzPyBPciBwZXJoYXBzIGl0IGlzIGEgZGlm ZmVyZW50IG1lYW5pbmcgdGhhbiB0aGUgCj4gZW5hYmxlZCBtYXNrPwoKVGhhdCBpcyBlc3NlbnRp YWxseSB0byBoZWxwIG91dCB1c2Vyc3BhY2UuCk1vc3QgYXBwbGljYXRpb24gd2lsbCB1c2UgYSBm bGF0IHN0cnVjdHVyZSB0byBhY2Nlc3MgdGhpcyBpbmZvcm1hdGlvbiAKd2l0aCBhIGNvdXBsZSBv ZiBzdHJpZGVzLgpUaGUgbWF4XyogZmllbGRzIGdpdmVzIHRoZSBzdHJpZGVzLgoKPgo+IFNvcnJ5 LCB0aGlzIGlzIG5vdCB2ZXJ5IGNvbnN0cnVjdGl2ZSwgbW9yZSBxdWVzdGlvbnMgdGhhbiBhbnN3 ZXJzLi4uIDooCgpBbiBvdXRzaWRlIG9waW5pb24gYWx3YXlzIHJhaXNlcyBpbnRlcmVzdGluZyBx dWVzdGlvbnMgOikKVGhhbmtzIQoKPgo+IFJlZ2FyZHMsCj4KPiBUdnJ0a28KPgo+Pgo+PiBFYWNo IGVuYWJsZWRfbWFzayBmaWxlIGdpdmVzIHVzIGEgbWFzayBvZiB0aGUgZW5hYmxlZCB1bml0cyA6 Cj4+Cj4+ICQgY2F0IAo+PiAvc3lzL2RldmljZXMvcGNpMDAwMFw6MDAvMDAwMFw6MDBcOjAyLjAv ZHJtL2NhcmQwL2d0L3Jjcy8wL3NsaWNlc19lbmFibGVkX21hc2sKPj4gMHg3Cj4+Cj4+ICQgY2F0 IAo+PiAvc3lzL2RldmljZXMvcGNpMDAwMFw6MDAvMDAwMFw6MDBcOjAyLjAvZHJtL2NhcmQwL2d0 L3Jjcy8wL3NsaWNlMC9zdWJzbGljZTIvZXVzX2VuYWJsZWRfbWFzawo+PiAweGZmCj4+Cj4+IHYy OiBNb3ZlIHRvcG9sb2d5IGJlbG93IHJjcyBlbmdpbmUgKENocmlzKQo+PiDCoMKgwqDCoCBBZGQg bWF4X2V1c19wZXJfc3Vic2xpY2UvbWF4X3NsaWNlcy9tYXhfc3Vic2xpY2VzX3Blcl9zbGljZSAK Pj4gKExpb25lbCkKPj4KPj4gdjM6IFJlbmFtZSBlbmFibGVkX21hc2sgKExpb25lbCkKPj4KPj4g U2lnbmVkLW9mZi1ieTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50 ZWwuY29tPgo+PiAtLS0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaMKgwqAg fMKgIDI2ICsrKysrKwo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMgfCAx ODggCj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+IMKgIDIgZmls ZXMgY2hhbmdlZCwgMjE0IGluc2VydGlvbnMoKykKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAo+PiBpbmRleCBkYjU1MDMyMjIwN2MuLjFhYzBhMTkxZThmYyAxMDA2NDQKPj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCj4+IEBAIC0yMjU5LDYgKzIyNTksMjQgQEAgc3RydWN0IGludGVsX2Nk Y2xrX3N0YXRlIHsKPj4gwqDCoMKgwqDCoCB1OCB2b2x0YWdlX2xldmVsOwo+PiDCoCB9Owo+PiDC oCArc3RydWN0IGludGVsX3RvcG9sb2d5X2tvYmplY3Qgewo+PiArwqDCoMKgIHN0cnVjdCBrb2Jq ZWN0IGtvYmo7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2Owo+ PiArfTsKPj4gKwo+PiArc3RydWN0IGludGVsX3NsaWNlX2tvYmplY3Qgewo+PiArwqDCoMKgIHN0 cnVjdCBrb2JqZWN0IGtvYmo7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2Owo+PiArwqDCoMKgIHU4IHNsaWNlX2luZGV4Owo+PiArfTsKPj4gKwo+PiArc3RydWN0 IGludGVsX3N1YnNsaWNlX2tvYmplY3Qgewo+PiArwqDCoMKgIHN0cnVjdCBrb2JqZWN0IGtvYmo7 Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2Owo+PiArwqDCoMKg IHU4IHNsaWNlX2luZGV4Owo+PiArwqDCoMKgIHU4IHN1YnNsaWNlX2luZGV4Owo+PiArfTsKPj4g Kwo+PiDCoCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGRy bV9kZXZpY2UgZHJtOwo+PiDCoCBAQCAtMjczMiw2ICsyNzUwLDE0IEBAIHN0cnVjdCBkcm1faTkx NV9wcml2YXRlIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3Qgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IGtvYmplY3Qga29iajsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBrb2JqZWN0 IGNsYXNzZXNfa29ianNbTUFYX0VOR0lORV9DTEFTU107Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKg IHN0cnVjdCBzeXNmc19zbGljZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBp bnRlbF9zbGljZV9rb2JqZWN0IGtvYmo7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IHN5c2ZzX3N1YnNsaWNlIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgaW50ZWxfc3Vic2xpY2Vfa29iamVjdCBrb2JqOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB9IHN1YnNsaWNlc1tHRU5fTUFYX1NVQlNMSUNFU107Cj4+ICvCoMKgwqDCoMKgwqDC oCB9IHNsaWNlc1tHRU5fTUFYX1NMSUNFU107Cj4+IMKgwqDCoMKgwqAgfSBndF90b3BvbG9neTsK Pj4gwqAgwqDCoMKgwqDCoCAvKiBBYnN0cmFjdCB0aGUgc3VibWlzc2lvbiBtZWNoYW5pc20gKGxl Z2FjeSByaW5nYnVmZmVyIG9yIAo+PiBleGVjbGlzdHMpIGF3YXkgKi8KPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3N5c2ZzLmMKPj4gaW5kZXggZmQwNGQwYjkzZWFmLi5kZjlkOGZkYmNiMGEgMTAw NjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3lzZnMuYwo+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N5c2ZzLmMKPj4gQEAgLTU1OSw2ICs1NTksMTc0IEBA IHN0YXRpYyB2b2lkIGk5MTVfc2V0dXBfZXJyb3JfY2FwdHVyZShzdHJ1Y3QgCj4+IGRldmljZSAq a2Rldikge30KPj4gwqAgc3RhdGljIHZvaWQgaTkxNV90ZWFyZG93bl9lcnJvcl9jYXB0dXJlKHN0 cnVjdCBkZXZpY2UgKmtkZXYpIHt9Cj4+IMKgICNlbmRpZgo+PiDCoCArc3RhdGljIHN0cnVjdCBh dHRyaWJ1dGUgc2xpY2VzX2VuYWJsZWRfbWFza19hdHRyID0gewo+PiArwqDCoMKgIC5uYW1lID0g InNsaWNlc19lbmFibGVkX21hc2siLAo+PiArwqDCoMKgIC5tb2RlID0gMDQ0NCwKPj4gK307Cj4+ ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlIHN1YnNsaWNlc19lbmFibGVkX21hc2tfYXR0 ciA9IHsKPj4gK8KgwqDCoCAubmFtZSA9ICJzdWJzbGljZXNfZW5hYmxlZF9tYXNrIiwKPj4gK8Kg wqDCoCAubW9kZSA9IDA0NDQsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGF0dHJpYnV0 ZSBldXNfZW5hYmxlZF9tYXNrX2F0dHIgPSB7Cj4+ICvCoMKgwqAgLm5hbWUgPSAiZXVzX2VuYWJs ZWRfbWFzayIsCj4+ICvCoMKgwqAgLm1vZGUgPSAwNDQ0LAo+PiArfTsKPj4gKwo+PiArc3RhdGlj IHN0cnVjdCBhdHRyaWJ1dGUgbWF4X3NsaWNlc19hdHRyID0gewo+PiArwqDCoMKgIC5uYW1lID0g Im1heF9zbGljZXMiLAo+PiArwqDCoMKgIC5tb2RlID0gMDQ0NCwKPj4gK307Cj4+ICsKPj4gK3N0 YXRpYyBzdHJ1Y3QgYXR0cmlidXRlIG1heF9zdWJzbGljZXNfcGVyX3NsaWNlX2F0dHIgPSB7Cj4+ ICvCoMKgwqAgLm5hbWUgPSAibWF4X3N1YnNsaWNlc19wZXJfc2xpY2UiLAo+PiArwqDCoMKgIC5t b2RlID0gMDQ0NCwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlIG1heF9l dXNfcGVyX3N1YnNsaWNlX2F0dHIgPSB7Cj4+ICvCoMKgwqAgLm5hbWUgPSAibWF4X2V1c19wZXJf c3Vic2xpY2UiLAo+PiArwqDCoMKgIC5tb2RlID0gMDQ0NCwKPj4gK307Cj4+ICsKPj4gK3N0YXRp YyBzc2l6ZV90Cj4+ICtzaG93X3NsaWNlX2F0dHIoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVj dCBhdHRyaWJ1dGUgKmF0dHIsIGNoYXIgCj4+ICpidWYpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0 IGludGVsX3NsaWNlX2tvYmplY3QgKmtvYmpfd3JhcHBlciA9Cj4+ICvCoMKgwqDCoMKgwqDCoCBj b250YWluZXJfb2Yoa29iaiwgc3RydWN0IGludGVsX3NsaWNlX2tvYmplY3QsIGtvYmopOwo+PiAr wqDCoMKgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGtvYmpfd3JhcHBlci0+ ZGV2X3ByaXY7Cj4+ICvCoMKgwqAgY29uc3Qgc3RydWN0IHNzZXVfZGV2X2luZm8gKnNzZXUgPSAm SU5URUxfSU5GTyhkZXZfcHJpdiktPnNzZXU7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoYXR0ciA9PSAm c3Vic2xpY2VzX2VuYWJsZWRfbWFza19hdHRyKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g c3ByaW50ZihidWYsICIweCVoaHhcbiIsCj4+ICsgc3NldS0+c3Vic2xpY2VzX21hc2tba29ial93 cmFwcGVyLT5zbGljZV9pbmRleF0pOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJldHVy biBzcHJpbnRmKGJ1ZiwgIjB4MFxuIik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgc3lzZnNfb3BzIHNsaWNlX29wcyA9IHsKPj4gK8KgwqDCoCAuc2hvdyA9IHNob3dfc2xpY2Vf YXR0ciwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3Qga29ial90eXBlIHNsaWNlX3R5cGUg PSB7Cj4+ICvCoMKgwqAgLnN5c2ZzX29wcyA9ICZzbGljZV9vcHMsCj4+ICt9Owo+PiArCj4+ICtz dGF0aWMgc3NpemVfdAo+PiArc2hvd19zdWJzbGljZV9hdHRyKHN0cnVjdCBrb2JqZWN0ICprb2Jq LCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCAKPj4gY2hhciAqYnVmKQo+PiArewo+PiArwqDCoMKg IHN0cnVjdCBpbnRlbF9zdWJzbGljZV9rb2JqZWN0ICprb2JqX3dyYXBwZXIgPQo+PiArwqDCoMKg wqDCoMKgwqAgY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBpbnRlbF9zdWJzbGljZV9rb2JqZWN0 LCBrb2JqKTsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBr b2JqX3dyYXBwZXItPmRldl9wcml2Owo+PiArwqDCoMKgIGNvbnN0IHN0cnVjdCBzc2V1X2Rldl9p bmZvICpzc2V1ID0gJklOVEVMX0lORk8oZGV2X3ByaXYpLT5zc2V1Owo+PiArwqDCoMKgIGludCBz dWJzbGljZV9zdHJpZGUgPSBBTElHTihzc2V1LT5tYXhfZXVzX3Blcl9zdWJzbGljZSwgOCkgLyA4 Owo+PiArwqDCoMKgIGludCBzbGljZV9zdHJpZGUgPSBzc2V1LT5tYXhfc3Vic2xpY2VzICogc3Vi c2xpY2Vfc3RyaWRlOwo+PiArCj4+ICvCoMKgwqAgaWYgKGF0dHIgPT0gJmV1c19lbmFibGVkX21h c2tfYXR0cikKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JWhoeFxu IiwKPj4gKyBzc2V1LT5ldV9tYXNrW2tvYmpfd3JhcHBlci0+c2xpY2VfaW5kZXggKiBzbGljZV9z dHJpZGUgKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGtvYmpfd3JhcHBlci0+c3Vic2xpY2VfaW5kZXggKiAKPj4gc3Vic2xpY2Vfc3RyaWRlXSk7 Cj4+ICvCoMKgwqAgcmV0dXJuIHNwcmludGYoYnVmLCAiMHgwXG4iKTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgc3Vic2xpY2Vfb3BzID0gewo+PiArwqDCoMKg IC5zaG93ID0gc2hvd19zdWJzbGljZV9hdHRyLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIHN0cnVj dCBrb2JqX3R5cGUgc3Vic2xpY2VfdHlwZSA9IHsKPj4gK8KgwqDCoCAuc3lzZnNfb3BzID0gJnN1 YnNsaWNlX29wcywKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbnQgaTkxNV9zZXR1cF9yY3NfdG9w b2xvZ3lfc3lzZnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgCj4+ICpkZXZfcHJpdiwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGtvYmplY3QgKmVu Z2luZV9rb2JqKQo+PiArewo+PiArwqDCoMKgIGNvbnN0IHN0cnVjdCBzc2V1X2Rldl9pbmZvICpz c2V1ID0gJklOVEVMX0lORk8oZGV2X3ByaXYpLT5zc2V1Owo+PiArwqDCoMKgIGludCByZXQsIHMs IHNzOwo+PiArCj4+ICvCoMKgwqAgcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoZW5naW5lX2tvYmos ICZzbGljZXNfZW5hYmxlZF9tYXNrX2F0dHIpOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArCj4+ICvCoMKgwqAgcmV0ID0gc3lzZnNfY3JlYXRl X2ZpbGUoZW5naW5lX2tvYmosICZtYXhfc2xpY2VzX2F0dHIpOwo+PiArwqDCoMKgIGlmIChyZXQp Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArCj4+ICvCoMKgwqAgcmV0ID0gc3lz ZnNfY3JlYXRlX2ZpbGUoZW5naW5lX2tvYmosIAo+PiAmbWF4X3N1YnNsaWNlc19wZXJfc2xpY2Vf YXR0cik7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7 Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBzeXNmc19jcmVhdGVfZmlsZShlbmdpbmVfa29iaiwgJm1h eF9ldXNfcGVyX3N1YnNsaWNlX2F0dHIpOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gcmV0Owo+PiArCj4+ICvCoMKgwqAgZm9yIChzID0gMDsgcyA8IHNzZXUt Pm1heF9zbGljZXM7IHMrKykgewo+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IGludGVsX3NsaWNl X2tvYmplY3QgKnNsaWNlX2tvYmogPQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmZGV2X3By aXYtPmd0X3RvcG9sb2d5LnNsaWNlc1tzXS5rb2JqOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBz bGljZV9rb2JqLT5kZXZfcHJpdiA9IGRldl9wcml2Owo+PiArwqDCoMKgwqDCoMKgwqAgc2xpY2Vf a29iai0+c2xpY2VfaW5kZXggPSBzOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0ga29iamVjdF9p bml0X2FuZF9hZGQoJnNsaWNlX2tvYmotPmtvYmosICZzbGljZV90eXBlLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW5naW5lX2tvYmosICJzbGljZSVp Iiwgcyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gcmV0Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBzeXNmc19jcmVh dGVfZmlsZSgmc2xpY2Vfa29iai0+a29iaiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICZzdWJzbGljZXNfZW5hYmxlZF9tYXNrX2F0dHIpOwo+PiArwqDCoMKgwqDC oMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqAgZm9yIChzcyA9IDA7IHNzIDwgc3NldS0+bWF4X3N1YnNsaWNl czsgc3MrKykgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfc3Vic2xp Y2Vfa29iamVjdCAqc3Vic2xpY2Vfa29iaiA9Cj4+ICsgJmRldl9wcml2LT5ndF90b3BvbG9neS5z bGljZXNbc10uc3Vic2xpY2VzW3NzXS5rb2JqOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN1YnNsaWNlX2tvYmotPmRldl9wcml2ID0gZGV2X3ByaXY7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN1YnNsaWNlX2tvYmotPnNsaWNlX2luZGV4ID0gczsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3Vic2xpY2Vfa29iai0+c3Vic2xpY2VfaW5kZXggPSBzczsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0ga29iamVjdF9pbml0X2FuZF9hZGQoJnN1YnNsaWNlX2tv YmotPmtvYmosCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICZzdWJzbGljZV90eXBlLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmc2xpY2Vfa29iai0+a29iaiwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgInN1YnNsaWNlJWki LCBzcyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXQgPSBzeXNmc19jcmVhdGVfZmlsZSgmc3Vic2xpY2Vfa29iai0+a29iaiwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmV1c19lbmFi bGVkX21hc2tfYXR0cik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gK8KgwqDCoMKgwqDC oMKgIH0KPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+ PiArc3RhdGljIHZvaWQgaTkxNV90ZWFyZG93bl9yY3NfdG9wb2xvZ3lfc3lzZnMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgCj4+ICpkZXZfcHJpdiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qga29iamVjdCAqZW5naW5lX2tvYmopCj4+ ICt7Cj4+ICvCoMKgwqAgY29uc3Qgc3RydWN0IHNzZXVfZGV2X2luZm8gKnNzZXUgPSAmSU5URUxf SU5GTyhkZXZfcHJpdiktPnNzZXU7Cj4+ICvCoMKgwqAgaW50IHMsIHNzOwo+PiArCj4+ICvCoMKg wqAgZm9yIChzID0gMDsgcyA8IHNzZXUtPm1heF9zbGljZXM7IHMrKykgewo+PiArwqDCoMKgwqDC oMKgwqAgc3RydWN0IGludGVsX3NsaWNlX2tvYmplY3QgKnNsaWNlX2tvYmogPQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAmZGV2X3ByaXYtPmd0X3RvcG9sb2d5LnNsaWNlc1tzXS5rb2JqOwo+ PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKHNzID0gMDsgc3MgPCBzc2V1LT5tYXhfc3Vic2xp Y2VzOyBzcysrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9zdWJz bGljZV9rb2JqZWN0ICpzdWJzbGljZV9rb2JqID0KPj4gKyAmZGV2X3ByaXYtPmd0X3RvcG9sb2d5 LnNsaWNlc1tzXS5zdWJzbGljZXNbc3NdLmtvYmo7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3lzZnNfcmVtb3ZlX2ZpbGUoJnN1YnNsaWNlX2tvYmotPmtvYmosCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmV1c19lbmFibGVkX21hc2tfYXR0 cik7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHN5c2ZzX3Jl bW92ZV9maWxlKCZzbGljZV9rb2JqLT5rb2JqLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmc3Vic2xpY2VzX2VuYWJsZWRfbWFza19hdHRyKTsKPj4gK8KgwqDCoCB9Cj4+ ICvCoMKgwqAgc3lzZnNfcmVtb3ZlX2ZpbGUoZW5naW5lX2tvYmosICZzbGljZXNfZW5hYmxlZF9t YXNrX2F0dHIpOwo+PiArwqDCoMKgIHN5c2ZzX3JlbW92ZV9maWxlKGVuZ2luZV9rb2JqLCAmbWF4 X2V1c19wZXJfc3Vic2xpY2VfYXR0cik7Cj4+ICvCoMKgwqAgc3lzZnNfcmVtb3ZlX2ZpbGUoZW5n aW5lX2tvYmosICZtYXhfc3Vic2xpY2VzX3Blcl9zbGljZV9hdHRyKTsKPj4gK8KgwqDCoCBzeXNm c19yZW1vdmVfZmlsZShlbmdpbmVfa29iaiwgJm1heF9zbGljZXNfYXR0cik7Cj4+ICt9Cj4+ICsK Pj4gwqAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgZW5naW5lX2lkX2F0dHIgPSB7Cj4+IMKgwqDC oMKgwqAgLm5hbWUgPSAiaWQiLAo+PiDCoMKgwqDCoMKgIC5tb2RlID0gMDQ0NCwKPj4gQEAgLTU3 NCwxMSArNzQyLDIwIEBAIHNob3dfZW5naW5lX2F0dHIoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0 cnVjdCAKPj4gYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4+IMKgIHsKPj4gwqDCoMKgwqDC oCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAg Y29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MsIGluc3RhbmNlX2tvYmop Owo+PiArwqDCoMKgIGNvbnN0IHN0cnVjdCBzc2V1X2Rldl9pbmZvICpzc2V1ID0gJklOVEVMX0lO Rk8oZW5naW5lLT5pOTE1KS0+c3NldTsKPj4gwqAgwqDCoMKgwqDCoCBpZiAoYXR0ciA9PSAmZW5n aW5lX2lkX2F0dHIpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gc3ByaW50ZihidWYsICIl aGh1XG4iLCBlbmdpbmUtPnVhYmlfaWQpOwo+PiDCoMKgwqDCoMKgIGlmIChhdHRyID09ICZlbmdp bmVfY2xhc3NfYXR0cikKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBzcHJpbnRmKGJ1Ziwg IiVoaHVcbiIsIGVuZ2luZS0+dWFiaV9jbGFzcyk7Cj4+ICvCoMKgwqAgaWYgKGF0dHIgPT0gJnNs aWNlc19lbmFibGVkX21hc2tfYXR0cikKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBzcHJpbnRm KGJ1ZiwgIjB4JWhoeFxuIiwgc3NldS0+c2xpY2VfbWFzayk7Cj4+ICvCoMKgwqAgaWYgKGF0dHIg PT0gJm1heF9ldXNfcGVyX3N1YnNsaWNlX2F0dHIpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g c3ByaW50ZihidWYsICIlaGhkXG4iLCBzc2V1LT5tYXhfZXVzX3Blcl9zdWJzbGljZSk7Cj4+ICvC oMKgwqAgaWYgKGF0dHIgPT0gJm1heF9zdWJzbGljZXNfcGVyX3NsaWNlX2F0dHIpCj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gc3ByaW50ZihidWYsICIlaGhkXG4iLCBzc2V1LT5tYXhfc3Vic2xp Y2VzKTsKPj4gK8KgwqDCoCBpZiAoYXR0ciA9PSAmbWF4X3NsaWNlc19hdHRyKQo+PiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIHNwcmludGYoYnVmLCAiJWhoZFxuIiwgc3NldS0+bWF4X3NsaWNlcyk7 Cj4+IMKgwqDCoMKgwqAgcmV0dXJuIHNwcmludGYoYnVmLCAiXG4iKTsKPj4gwqAgfQo+PiDCoCBA QCAtNjcxLDYgKzg0OCwxMiBAQCBzdGF0aWMgaW50IGk5MTVfc2V0dXBfZW5naW5lc19zeXNmcyhz dHJ1Y3QgCj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChlbmdpbmUtPmlkID09IFJDUykgewo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IGk5MTVfc2V0dXBfcmNzX3Rv cG9sb2d5X3N5c2ZzKGRldl9wcml2LAo+PiArICZlbmdpbmUtPmluc3RhbmNlX2tvYmopOwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoCBA QCAtNjgzLDYgKzg2NiwxMSBAQCBzdGF0aWMgdm9pZCBpOTE1X3RlYXJkb3duX2VuZ2luZXNfc3lz ZnMoc3RydWN0IAo+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gwqDCoMKgwqDCoCBl bnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPj4gwqAgwqDCoMKgwqDCoCBmb3JfZWFjaF9lbmdpbmUo ZW5naW5lLCBkZXZfcHJpdiwgaWQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChpZCA9PSBSQ1Mp IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaTkxNV90ZWFyZG93bl9yY3NfdG9wb2xvZ3lf c3lzZnMoZGV2X3ByaXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAmZW5naW5lLT5pbnN0YW5jZV9rb2JqKTsKPj4gK8KgwqDCoMKg wqDCoMKgIH0KPj4gKwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3lzZnNfcmVtb3ZlX2ZpbGUoJmVu Z2luZS0+aW5zdGFuY2Vfa29iaiwgJmVuZ2luZV9pZF9hdHRyKTsKPj4gwqDCoMKgwqDCoMKgwqDC oMKgIHN5c2ZzX3JlbW92ZV9maWxlKCZlbmdpbmUtPmluc3RhbmNlX2tvYmosICZlbmdpbmVfY2xh c3NfYXR0cik7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzeXNmc19yZW1vdmVfZmlsZSgmZW5naW5l LT5jYXBhYmlsaXRpZXNfa29iaiwKPj4KPgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==