From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [PATCH v2 08/27] ARM: GICv3 ITS: introduce host LPI array Date: Wed, 22 Mar 2017 16:38:52 -0700 (PDT) Message-ID: References: <20170316112030.20419-1-andre.przywara@arm.com> <20170316112030.20419-9-andre.przywara@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cqpqH-0008Pu-Ce for xen-devel@lists.xenproject.org; Wed, 22 Mar 2017 23:39:01 +0000 In-Reply-To: <20170316112030.20419-9-andre.przywara@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andre Przywara Cc: xen-devel@lists.xenproject.org, Julien Grall , Stefano Stabellini , Shanker Donthineni , Vijay Kilari List-Id: xen-devel@lists.xenproject.org T24gVGh1LCAxNiBNYXIgMjAxNywgQW5kcmUgUHJ6eXdhcmEgd3JvdGU6Cj4gVGhlIG51bWJlciBv ZiBMUElzIG9uIGEgaG9zdCBjYW4gYmUgcG90ZW50aWFsbHkgaHVnZSAobWlsbGlvbnMpLAo+IGFs dGhvdWdoIGluIHByYWN0aXNlIHdpbGwgYmUgbW9zdGx5IHJlYXNvbmFibGUuIFNvIHByZW1hdHVy ZWx5IGFsbG9jYXRpbmcKPiBhbiBhcnJheSBvZiBzdHJ1Y3QgaXJxX2Rlc2MncyBmb3IgZWFjaCBM UEkgaXMgbm90IGFuIG9wdGlvbi4KPiBIb3dldmVyIFhlbiBpdHNlbGYgZG9lcyBub3QgY2FyZSBh Ym91dCBMUElzLCBhcyBldmVyeSBMUEkgd2lsbCBiZSBpbmplY3RlZAo+IGludG8gYSBndWVzdCAo RG9tMCBmb3Igbm93KS4KPiBDcmVhdGUgYSBkZW5zZSBkYXRhIHN0cnVjdHVyZSAoOCBCeXRlcykg Zm9yIGVhY2ggTFBJIHdoaWNoIGhvbGRzIGp1c3QKPiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZGV0 ZXJtaW5lIHRoZSB2aXJ0dWFsIElSUSBudW1iZXIgYW5kIHRoZSBWQ1BVIGludG8KPiB3aGljaCB0 aGUgTFBJIG5lZWRzIHRvIGJlIGluamVjdGVkLgo+IEFsc28gdG8gbm90IGFydGlmaWNpYWxseSBs aW1pdCB0aGUgbnVtYmVyIG9mIExQSXMsIHdlIGNyZWF0ZSBhIDItbGV2ZWwKPiB0YWJsZSBmb3Ig aG9sZGluZyB0aG9zZSBzdHJ1Y3R1cmVzLgo+IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlv bnMgdG8gaW5pdGlhbGl6ZSB0aGVzZSB0YWJsZXMgYW5kIHRvCj4gY3JlYXRlLCBsb29rdXAgYW5k IGRlc3Ryb3kgZW50cmllcyBmb3IgYSBnaXZlbiBMUEkuCj4gQnkgdXNpbmcgdGhlIG5hdHVyYWxs eSBhdG9taWMgYWNjZXNzIGd1YXJhbnRlZSB0aGUgbmF0aXZlIHVpbnQ2NF90IGRhdGEKPiB0eXBl IGdpdmVzIHVzLCB3ZSBhbGxvY2F0ZSBhbmQgYWNjZXNzIExQSSBpbmZvcm1hdGlvbiBpbiBhIHdh eSB0aGF0IGRvZXMKPiBub3QgcmVxdWlyZSBhIGxvY2suCj4gCj4gU2lnbmVkLW9mZi1ieTogQW5k cmUgUHJ6eXdhcmEgPGFuZHJlLnByenl3YXJhQGFybS5jb20+Cj4gLS0tCj4gIHhlbi9hcmNoL2Fy bS9naWMtdjMtaXRzLmMgICAgICAgIHwgIDkwICsrKysrKysrKysrKysrKysrKy0KPiAgeGVuL2Fy Y2gvYXJtL2dpYy12My1scGkuYyAgICAgICAgfCAxODggKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCj4gIHhlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljLmggICAgICAgIHwgICA1 ICsrCj4gIHhlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljX3YzX2l0cy5oIHwgIDExICsrKwo+ICA0IGZp bGVzIGNoYW5nZWQsIDI5MiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYg LS1naXQgYS94ZW4vYXJjaC9hcm0vZ2ljLXYzLWl0cy5jIGIveGVuL2FyY2gvYXJtL2dpYy12My1p dHMuYwo+IGluZGV4IDYwYjE1YjUuLmVkMTRkOTUgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gvYXJt L2dpYy12My1pdHMuYwo+ICsrKyBiL3hlbi9hcmNoL2FybS9naWMtdjMtaXRzLmMKPiBAQCAtMTQ4 LDYgKzE0OCwyMCBAQCBzdGF0aWMgaW50IGl0c19zZW5kX2NtZF9zeW5jKHN0cnVjdCBob3N0X2l0 cyAqaXRzLCB1bnNpZ25lZCBpbnQgY3B1KQo+ICAgICAgcmV0dXJuIGl0c19zZW5kX2NvbW1hbmQo aXRzLCBjbWQpOwo+ICB9Cj4gIAo+ICtzdGF0aWMgaW50IGl0c19zZW5kX2NtZF9tYXB0aShzdHJ1 Y3QgaG9zdF9pdHMgKml0cywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy X3QgZGV2aWNlaWQsIHVpbnQzMl90IGV2ZW50aWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQzMl90IHBpbnRpZCwgdWludDE2X3QgaWNpZCkKPiArewo+ICsgICAgdWludDY0 X3QgY21kWzRdOwo+ICsKPiArICAgIGNtZFswXSA9IEdJVFNfQ01EX01BUFRJIHwgKCh1aW50NjRf dClkZXZpY2VpZCA8PCAzMik7Cj4gKyAgICBjbWRbMV0gPSBldmVudGlkIHwgKCh1aW50NjRfdClw aW50aWQgPDwgMzIpOwo+ICsgICAgY21kWzJdID0gaWNpZDsKPiArICAgIGNtZFszXSA9IDB4MDA7 Cj4gKwo+ICsgICAgcmV0dXJuIGl0c19zZW5kX2NvbW1hbmQoaXRzLCBjbWQpOwo+ICt9Cj4gKwo+ ICBzdGF0aWMgaW50IGl0c19zZW5kX2NtZF9tYXBjKHN0cnVjdCBob3N0X2l0cyAqaXRzLCB1aW50 MzJfdCBjb2xsZWN0aW9uX2lkLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBjcHUpCj4gIHsKPiBAQCAtMTgwLDYgKzE5NCwxOSBAQCBzdGF0aWMgaW50IGl0c19z ZW5kX2NtZF9tYXBkKHN0cnVjdCBob3N0X2l0cyAqaXRzLCB1aW50MzJfdCBkZXZpY2VpZCwKPiAg ICAgIHJldHVybiBpdHNfc2VuZF9jb21tYW5kKGl0cywgY21kKTsKPiAgfQo+ICAKPiArc3RhdGlj IGludCBpdHNfc2VuZF9jbWRfaW52KHN0cnVjdCBob3N0X2l0cyAqaXRzLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGV2aWNlaWQsIHVpbnQzMl90IGV2ZW50aWQpCj4g K3sKPiArICAgIHVpbnQ2NF90IGNtZFs0XTsKPiArCj4gKyAgICBjbWRbMF0gPSBHSVRTX0NNRF9J TlYgfCAoKHVpbnQ2NF90KWRldmljZWlkIDw8IDMyKTsKPiArICAgIGNtZFsxXSA9IGV2ZW50aWQ7 Cj4gKyAgICBjbWRbMl0gPSAweDAwOwo+ICsgICAgY21kWzNdID0gMHgwMDsKPiArCj4gKyAgICBy ZXR1cm4gaXRzX3NlbmRfY29tbWFuZChpdHMsIGNtZCk7Cj4gK30KPiArCj4gIC8qIFNldCB1cCB0 aGUgKDE6MSkgY29sbGVjdGlvbiBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gaG9zdCBDUFUuICovCj4g IGludCBnaWN2M19pdHNfc2V0dXBfY29sbGVjdGlvbih1bnNpZ25lZCBpbnQgY3B1KQo+ICB7Cj4g QEAgLTQ2Miw3ICs0ODksNyBAQCBpbnQgZ2ljdjNfaXRzX2luaXQodm9pZCkKPiAgCj4gIHN0YXRp YyBpbnQgcmVtb3ZlX21hcHBlZF9ndWVzdF9kZXZpY2Uoc3RydWN0IGl0c19kZXZpY2VzICpkZXYp Cj4gIHsKPiAtICAgIGludCByZXQ7Cj4gKyAgICBpbnQgcmV0LCBpOwo+ICAKPiAgICAgIGlmICgg ZGV2LT5od19pdHMgKQo+ICAgICAgewo+IEBAIC00NzEsMTEgKzQ5OCwxOSBAQCBzdGF0aWMgaW50 IHJlbW92ZV9tYXBwZWRfZ3Vlc3RfZGV2aWNlKHN0cnVjdCBpdHNfZGV2aWNlcyAqZGV2KQo+ICAg ICAgICAgICAgICByZXR1cm4gcmV0Owo+ICAgICAgfQo+ICAKPiArICAgIC8qCj4gKyAgICAgKiBU aGUgb25seSBlcnJvciB0aGUgZnVuY3Rpb24gYmVsb3cgd291bGQgcmV0dXJuIGlzIC1FTk9FTlQs IGluIHdoaWNoCj4gKyAgICAgKiBjYXNlIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnJlZSBoZXJlLiBT byB3ZSBqdXN0IGlnbm9yZSBpdC4KPiArICAgICAqLwo+ICsgICAgZm9yICggaSA9IDA7IGkgPCBE SVZfUk9VTkRfVVAoZGV2LT5ldmVudGlkcywgTFBJX0JMT0NLKTsgaSsrICkKPiArICAgICAgICBn aWN2M19mcmVlX2hvc3RfbHBpX2Jsb2NrKGRldi0+aHdfaXRzLCBkZXYtPmhvc3RfbHBpc1tpXSk7 Cj4gKwo+ICAgICAgcmV0ID0gZ2ljdjNfaXRzX3dhaXRfY29tbWFuZHMoZGV2LT5od19pdHMpOwo+ ICAgICAgaWYgKCByZXQgKQo+ICAgICAgICAgIHJldHVybiByZXQ7Cj4gIAo+ICAgICAgeGZyZWUo ZGV2LT5pdHRfYWRkcik7Cj4gKyAgICB4ZnJlZShkZXYtPmhvc3RfbHBpcyk7Cj4gICAgICB4ZnJl ZShkZXYpOwo+ICAKPiAgICAgIHJldHVybiAwOwo+IEBAIC01MTMsNiArNTQ4LDM2IEBAIHN0YXRp YyBpbnQgY29tcGFyZV9pdHNfZ3Vlc3RfZGV2aWNlcyhzdHJ1Y3QgaXRzX2RldmljZXMgKmRldiwK PiAgfQo+ICAKPiAgLyoKPiArICogT24gdGhlIGhvc3QgSVRTIEBpdHMsIG1hcCBAbnJfZXZlbnRz IGNvbnNlY3V0aXZlIExQSXMuCj4gKyAqIFRoZSBtYXBwaW5nIGNvbm5lY3RzIGEgZGV2aWNlIEBk ZXZpZCBhbmQgZXZlbnQgQGV2ZW50aWQgcGFpciB0byBMUEkgQGxwaSwKPiArICogaW5jcmVhc2lu ZyBib3RoIEBldmVudGlkIGFuZCBAbHBpIHRvIGNvdmVyIHRoZSBudW1iZXIgb2YgcmVxdWVzdGVk IExQSXMuCj4gKyAqLwo+ICtpbnQgZ2ljdjNfaXRzX21hcF9ob3N0X2V2ZW50cyhzdHJ1Y3QgaG9z dF9pdHMgKml0cywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGV2 aWQsIHVpbnQzMl90IGV2ZW50aWQsIHVpbnQzMl90IGxwaSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDMyX3QgbnJfZXZlbnRzKQo+ICt7Cj4gKyAgICB1aW50MzJfdCBpOwo+ ICsgICAgaW50IHJldDsKPiArCj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IG5yX2V2ZW50czsgaSsr ICkKPiArICAgIHsKPiArICAgICAgICAvKiBGb3Igbm93IHdlIG1hcCBldmVyeSBob3N0IExQSSB0 byBob3N0IENQVSAwICovCj4gKyAgICAgICAgcmV0ID0gaXRzX3NlbmRfY21kX21hcHRpKGl0cywg ZGV2aWQsIGV2ZW50aWQgKyBpLCBscGkgKyBpLCAwKTsKPiArICAgICAgICBpZiAoIHJldCApCj4g KyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAgcmV0ID0gaXRzX3NlbmRfY21kX2lu dihpdHMsIGRldmlkLCBldmVudGlkICsgaSk7Cj4gKyAgICAgICAgaWYgKCByZXQgKQo+ICsgICAg ICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9IGl0c19zZW5kX2Nt ZF9zeW5jKGl0cywgMCk7Cj4gKyAgICBpZiAoIHJldCApCj4gKyAgICAgICAgcmV0dXJuIHJldDsK PiArCj4gKyAgICByZXR1cm4gZ2ljdjNfaXRzX3dhaXRfY29tbWFuZHMoaXRzKTsKPiArfQo+ICsK PiArLyoKPiAgICogTWFwIGEgaGFyZHdhcmUgZGV2aWNlLCBpZGVudGlmaWVkIGJ5IGEgY2VydGFp biBob3N0IElUUyBhbmQgaXRzIGRldmljZSBJRAo+ICAgKiB0byBkb21haW4gZCwgYSBndWVzdCBJ VFMgKGlkZW50aWZpZWQgYnkgaXRzIGRvb3JiZWxsIGFkZHJlc3MpIGFuZCBkZXZpY2UgSUQuCj4g ICAqIEFsc28gcHJvdmlkZSB0aGUgbnVtYmVyIG9mIGV2ZW50cyAoTVNJcykgbmVlZGVkIGZvciB0 aGF0IGRldmljZS4KPiBAQCAtNTI4LDcgKzU5Myw3IEBAIGludCBnaWN2M19pdHNfbWFwX2d1ZXN0 X2RldmljZShzdHJ1Y3QgZG9tYWluICpkLAo+ICAgICAgc3RydWN0IGhvc3RfaXRzICpod19pdHM7 Cj4gICAgICBzdHJ1Y3QgaXRzX2RldmljZXMgKmRldiA9IE5VTEwsICp0ZW1wOwo+ICAgICAgc3Ry dWN0IHJiX25vZGUgKipuZXcgPSAmZC0+YXJjaC52Z2ljLml0c19kZXZpY2VzLnJiX25vZGUsICpw YXJlbnQgPSBOVUxMOwo+IC0gICAgaW50IHJldCA9IC1FTk9FTlQ7Cj4gKyAgICBpbnQgcmV0ID0g LUVOT0VOVCwgaTsKPiAgCj4gICAgICBod19pdHMgPSBnaWN2M19pdHNfZmluZF9ieV9kb29yYmVs bChob3N0X2Rvb3JiZWxsKTsKPiAgICAgIGlmICggIWh3X2l0cyApCj4gQEAgLTU3NCw2ICs2Mzks MTEgQEAgaW50IGdpY3YzX2l0c19tYXBfZ3Vlc3RfZGV2aWNlKHN0cnVjdCBkb21haW4gKmQsCj4g ICAgICBpZiAoICFkZXYgKQo+ICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsKPiAgCj4gKyAgICBk ZXYtPmhvc3RfbHBpcyA9IHh6YWxsb2NfYXJyYXkodWludDMyX3QsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRElWX1JPVU5EX1VQKG5yX2V2ZW50cywgTFBJX0JMT0NLKSk7 Cj4gKyAgICBpZiAoICFkZXYtPmhvc3RfbHBpcyApCj4gKyAgICAgICAgZ290byBvdXRfdW5sb2Nr OwoKVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIGFsbG9jYXRlIGZhciBt b3JlIHRoYW4gMzIgbHBpcwpmb3Igb25lIGRldmljZSwgcG9zc2libHkgdGhvdXNhbmRzLCByaWdo dD8KSWYgc28sIGRldi0+aG9zdF9scGlzIGNvdWxkIGJlIHF1aXRlIGxhcmdlLiBJIGFtIHRoaW5r aW5nIHdlIHNob3VsZApjb25zaWRlciBzd2l0Y2hpbmcgdG8gYSBzcGFyc2UgZGF0YSBzdHJ1Y3R1 cmUgdG8gc2F2ZSBtZW1vcnksIGFzIGluIG1vc3QKY2FzZXMgdGhlIGFsbG9jYXRlZCBibG9ja3Mg YXJlIGdvaW5nIHRvIGJlIGNvbnNlY3V0aXZlLgoKSSB3b3VsZCBwcm9iYWJseSBzdG9yZSB0aGUg Zmlyc3QgbHBpIGFuZCB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGxwaXMsCnJhdGhlciB0aGFu IHRoZSBmaXJzdCBscGkgaW4gZWFjaCBibG9jay4gRm9yIGV4YW1wbGUsIGlmIHRoZSBhbGxvY2F0 ZWQKYmxvY2tzIGFyZToKCiAwLTMxLCAzMi02MywgNjQtOTUsIDk2LTEyNywgMTI4LTE1OSwgMjU2 LTI4NwoKTm93IHdlIHN0b3JlOiAwLCAzMiwgNjQsIDk2LCAxMjgsIDI1NgpJIHdvdWxkIHN0b3Jl IFswLCAxNjBdLCBbMjU2LCAzMl0KCkluIHRoZSBjYXNlIG9mIGEgdGhvdXNhbmQgY29uc2VjdXRp dmUgYmxvY2sgYWxsb2NhdGlvbnMsIGl0IHdvdWxkCnNob3J0ZW4gdGhlIGFycmF5IGZyb20gMTAw MC8zMiB0byAxIGVsZW1lbnQuCgpEb2VzIGl0IG1ha2Ugc2Vuc2U/IElzIGl0IHdvcnRoIGRvaW5n PyBUaGlzIGxhc3QgcXVlc3Rpb24gaXMgbW9zdGx5IGZvcgp0aGUgUXVhbGNvbW0gYW5kIENhdml1 bSBndXlzIG9uIHRoZSBsaXN0IGJlY2F1c2UgaXQgZGVwZW5kcyBvbiB0aGUKbnVtYmVycyBvZiBl dmVudHMgb24gYSBnaXZlbiBwbGF0Zm9ybS4KCgo+ICAgICAgcmV0ID0gaXRzX3NlbmRfY21kX21h cGQoaHdfaXRzLCBob3N0X2RldmlkLCBmbHMobnJfZXZlbnRzIC0gMSkgLSAxLAo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdmlydF90b19tYWRkcihpdHRfYWRkciksIHRydWUpOwo+ICAg ICAgaWYgKCByZXQgKQo+IEBAIC01OTEsMTAgKzY2MSwyNiBAQCBpbnQgZ2ljdjNfaXRzX21hcF9n dWVzdF9kZXZpY2Uoc3RydWN0IGRvbWFpbiAqZCwKPiAgCj4gICAgICBzcGluX3VubG9jaygmZC0+ YXJjaC52Z2ljLml0c19kZXZpY2VzX2xvY2spOwo+ICAKPiArICAgIC8qCj4gKyAgICAgKiBNYXAg YWxsIGhvc3QgTFBJcyB3aXRoaW4gdGhpcyBkZXZpY2UgYWxyZWFkeS4gV2UgY2FuJ3QgYWZmb3Jk IHRvIHF1ZXVlCj4gKyAgICAgKiBhbnkgaG9zdCBJVFMgY29tbWFuZHMgbGF0ZXIgb24gZHVyaW5n IHRoZSBndWVzdCdzIHJ1bnRpbWUuCj4gKyAgICAgKi8KPiArICAgIGZvciAoIGkgPSAwOyBpIDwg RElWX1JPVU5EX1VQKG5yX2V2ZW50cywgTFBJX0JMT0NLKTsgaSsrICkKPiArICAgIHsKPiArICAg ICAgICByZXQgPSBnaWN2M19hbGxvY2F0ZV9ob3N0X2xwaV9ibG9jayhod19pdHMsIGQsIGhvc3Rf ZGV2aWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAq IExQSV9CTE9DSyk7Cj4gKyAgICAgICAgaWYgKCByZXQgPCAwICkKPiArICAgICAgICAgICAgZ290 byBvdXQ7Cj4gKwo+ICsgICAgICAgIGRldi0+aG9zdF9scGlzW2ldID0gcmV0Owo+ICsgICAgfQo+ ICsKPiAgICAgIHJldHVybiAwOwo+ICAKPiAgb3V0X3VubG9jazoKPiAgICAgIHNwaW5fdW5sb2Nr KCZkLT5hcmNoLnZnaWMuaXRzX2RldmljZXNfbG9jayk7Cj4gKwo+ICtvdXQ6Cj4gICAgICBpZiAo IGRldiApCj4gICAgICAgICAgeGZyZWUoZGV2LT5ob3N0X2xwaXMpOwo+ICAgICAgeGZyZWUoaXR0 X2FkZHIpOwo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vZ2ljLXYzLWxwaS5jIGIveGVuL2Fy Y2gvYXJtL2dpYy12My1scGkuYwo+IGluZGV4IDUxZDc0MjUuLjU5ZDNiYTQgMTAwNjQ0Cj4gLS0t IGEveGVuL2FyY2gvYXJtL2dpYy12My1scGkuYwo+ICsrKyBiL3hlbi9hcmNoL2FybS9naWMtdjMt bHBpLmMKPiBAQCAtMjAsMjQgKzIwLDQ0IEBACj4gIAo+ICAjaW5jbHVkZSA8eGVuL2xpYi5oPgo+ ICAjaW5jbHVkZSA8eGVuL21tLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KPiArI2luY2x1 ZGUgPGFzbS9hdG9taWMuaD4KPiArI2luY2x1ZGUgPGFzbS9kb21haW4uaD4KPiAgI2luY2x1ZGUg PGFzbS9naWMuaD4KPiAgI2luY2x1ZGUgPGFzbS9naWNfdjNfZGVmcy5oPgo+ICAjaW5jbHVkZSA8 YXNtL2dpY192M19pdHMuaD4KPiAgI2luY2x1ZGUgPGFzbS9pby5oPgo+ICAjaW5jbHVkZSA8YXNt L3BhZ2UuaD4KPiAgCj4gKy8qIExQSXMgb24gdGhlIGhvc3QgYWx3YXlzIGdvIHRvIGEgZ3Vlc3Qs IHNvIG5vIHN0cnVjdCBpcnFfZGVzYyBmb3IgdGhlbS4gKi8KPiArdW5pb24gaG9zdF9scGkgewo+ ICsgICAgdWludDY0X3QgZGF0YTsKPiArICAgIHN0cnVjdCB7Cj4gKyAgICAgICAgdWludDMyX3Qg dmlydF9scGk7Cj4gKyAgICAgICAgdWludDE2X3QgZG9tX2lkOwo+ICsgICAgICAgIHVpbnQxNl90 IHZjcHVfaWQ7Cj4gKyAgICB9Owo+ICt9Owo+Cj4gICNkZWZpbmUgTFBJX1BST1BUQUJMRV9ORUVE U19GTFVTSElORyAgICAoMVUgPDwgMCkKPiAgLyogR2xvYmFsIHN0YXRlICovCj4gIHN0YXRpYyBz dHJ1Y3Qgewo+ICAgICAgLyogVGhlIGdsb2JhbCBMUEkgcHJvcGVydHkgdGFibGUsIHNoYXJlZCBi eSBhbGwgcmVkaXN0cmlidXRvcnMuICovCj4gICAgICB1aW50OF90ICpscGlfcHJvcGVydHk7Cj4g ICAgICAvKgo+ICsgICAgICogQSB0d28tbGV2ZWwgdGFibGUgdG8gbG9va3VwIExQSXMgZmlyaW5n IG9uIHRoZSBob3N0IGFuZCBsb29rIHVwIHRoZQo+ICsgICAgICogZG9tYWluIGFuZCB2aXJ0dWFs IExQSSBudW1iZXIgdG8gaW5qZWN0Lgo+ICsgICAgICovCj4gKyAgICB1bmlvbiBob3N0X2xwaSAq Kmhvc3RfbHBpczsKPiArICAgIC8qCj4gICAgICAgKiBOdW1iZXIgb2YgcGh5c2ljYWwgTFBJcyB0 aGUgaG9zdCBzdXBwb3J0cy4gVGhpcyBpcyBhIHByb3BlcnR5IG9mCj4gICAgICAgKiB0aGUgR0lD IGhhcmR3YXJlLiBXZSBkZXBhcnQgZnJvbSB0aGUgaGFiaXQgb2YgbmFtaW5nIHRoZXNlIHRoaW5n cwo+ICAgICAgICogInBoeXNpY2FsIiBpbiBYZW4sIGFzIHRoZSBHSUN2My80IHNwZWMgdXNlcyB0 aGUgdGVybSAicGh5c2ljYWwgTFBJIgo+ICAgICAgICogaW4gYSBkaWZmZXJlbnQgY29udGV4dCB0 byBkaWZmZXJlbnRpYXRlIHRoZW0gZnJvbSAidmlydHVhbCBMUElzIi4KPiAgICAgICAqLwo+ICAg ICAgdW5zaWduZWQgbG9uZyBpbnQgbnJfaG9zdF9scGlzOwo+ICsgICAgLyogUHJvdGVjdHMgYWxs b2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG9mIGhvc3QgTFBJcywgYnV0IG5vdCB0aGUgYWNjZXNz ICovCgpPSy4gV2hhdCBkb2VzIHByb3RlY3QgdGhlIGFjY2VzcyB0byBob3N0IExQSXM/CgoKPiAr ICAgIHNwaW5sb2NrX3QgaG9zdF9scGlzX2xvY2s7Cj4gICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7 Cj4gIH0gbHBpX2RhdGE7Cj4gIAo+IEBAIC01MCw2ICs3MCwxOSBAQCBzdHJ1Y3QgbHBpX3JlZGlz dF9kYXRhIHsKPiAgc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBscGlfcmVkaXN0X2RhdGEs IGxwaV9yZWRpc3QpOwo+ICAKPiAgI2RlZmluZSBNQVhfUEhZU19MUElTICAgKGxwaV9kYXRhLm5y X2hvc3RfbHBpcyAtIExQSV9PRkZTRVQpCj4gKyNkZWZpbmUgSE9TVF9MUElTX1BFUl9QQUdFICAg ICAgKFBBR0VfU0laRSAvIHNpemVvZih1bmlvbiBob3N0X2xwaSkpCj4gKwo+ICtzdGF0aWMgdW5p b24gaG9zdF9scGkgKmdpY19nZXRfaG9zdF9scGkodWludDMyX3QgcGxwaSkKPiArewo+ICsgICAg aWYgKCAhaXNfbHBpKHBscGkpIHx8IHBscGkgPj0gTUFYX1BIWVNfTFBJUyArIExQSV9PRkZTRVQg KQoKQXJndWFibHkgaWYgKHBscGkgPj0gTUFYX1BIWVNfTFBJUyArIExQSV9PRkZTRVQpIGlzIG5v dCByZWFsbHkgYW4gbHBpLiBJCndvdWxkIGFkZCB0aGUgcGxwaSA+PSBNQVhfUEhZU19MUElTICsg TFBJX09GRlNFVCBjaGVjayB0byBpc19scGkuCgoKPiArICAgICAgICByZXR1cm4gTlVMTDsKPiAr Cj4gKyAgICBwbHBpIC09IExQSV9PRkZTRVQ7Cj4gKyAgICBpZiAoICFscGlfZGF0YS5ob3N0X2xw aXNbcGxwaSAvIEhPU1RfTFBJU19QRVJfUEFHRV0gKQo+ICsgICAgICAgIHJldHVybiBOVUxMOwo+ ICsKPiArICAgIHJldHVybiAmbHBpX2RhdGEuaG9zdF9scGlzW3BscGkgLyBIT1NUX0xQSVNfUEVS X1BBR0VdW3BscGkgJSBIT1NUX0xQSVNfUEVSX1BBR0VdOwoKSSBhbSBhbG1vc3Qgc3VyZSB0aGlz IGxpbmUgaXMgbG9uZ2VyIHRoYW4gODAgY2hhcmFjdGVycy4uIFBsZWFzZSBkb3VibGUKY2hlY2sg dGhlIGNvZGluZyBzdHlsZSB0aHJvdWdob3V0IHRoZSBzZXJpZXMuCgoKPiArfQo+ICAKPiAgLyog U3RvcmVzIHRoaXMgcmVkaXN0cmlidXRvcidzIHBoeXNpY2FsIGFkZHJlc3MgYW5kIElEIGluIGEg cGVyLUNQVSB2YXJpYWJsZSAqLwo+ICB2b2lkIGdpY3YzX3NldF9yZWRpc3RfYWRkcmVzcyhwYWRk cl90IGFkZHJlc3MsIHVuc2lnbmVkIGludCByZWRpc3RfaWQpCj4gQEAgLTIwNCwxNSArMjM3LDE3 MCBAQCBpbnQgZ2ljdjNfbHBpX2luaXRfcmRpc3Qodm9pZCBfX2lvbWVtICogcmRpc3RfYmFzZSkK PiAgc3RhdGljIHVuc2lnbmVkIGludCBtYXhfbHBpX2JpdHMgPSBDT05GSUdfTUFYX1BIWVNfTFBJ X0JJVFM7Cj4gIGludGVnZXJfcGFyYW0oIm1heF9scGlfYml0cyIsIG1heF9scGlfYml0cyk7Cj4g IAo+ICsvKgo+ICsgKiBBbGxvY2F0ZSB0aGUgMm5kIGxldmVsIGFycmF5IGZvciBob3N0IExQSXMu IFRoaXMgb25lIGhvbGRzIHBvaW50ZXJzCj4gKyAqIHRvIHRoZSBwYWdlIHdpdGggdGhlIGFjdHVh bCAidW5pb24gaG9zdF9scGkiIGVudHJpZXMuIE91ciBMUEkgbGltaXQKPiArICogYXZvaWRzIGV4 Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2UuCj4gKyAqLwo+ICBpbnQgZ2ljdjNfbHBpX2luaXRfaG9zdF9s cGlzKHVuc2lnbmVkIGludCBod19scGlfYml0cykKPiAgewo+ICsgICAgaW50IG5yX2xwaV9wdHJz Owo+ICsKPiArICAgIC8qIFdlIHJlbHkgb24gdGhlIGRhdGEgc3RydWN0dXJlIGJlaW5nIGF0b21p Y2FsbHkgYWNjZXNzaWJsZS4gKi8KPiArICAgIEJVSUxEX0JVR19PTihzaXplb2YodW5pb24gaG9z dF9scGkpID4gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKClRlY2huaWNhbGx5LCBJIHRoaW5rIHRo YXQgYXJtMzIgaXMgYWJsZSB0byBhY2Nlc3MgdWludDY0X3QgYXRvbWljYWxseQoobGRyZXhkIGFu ZCBzdHJleGQpLgoKCj4gICAgICBscGlfZGF0YS5ucl9ob3N0X2xwaXMgPSBCSVRfVUxMKG1pbiho d19scGlfYml0cywgbWF4X2xwaV9iaXRzKSk7Cj4gIAo+ICsgICAgc3Bpbl9sb2NrX2luaXQoJmxw aV9kYXRhLmhvc3RfbHBpc19sb2NrKTsKPiArCj4gKyAgICBucl9scGlfcHRycyA9IE1BWF9QSFlT X0xQSVMgLyAoUEFHRV9TSVpFIC8gc2l6ZW9mKHVuaW9uIGhvc3RfbHBpKSk7Cj4gKyAgICBscGlf ZGF0YS5ob3N0X2xwaXMgPSB4emFsbG9jX2FycmF5KHVuaW9uIGhvc3RfbHBpICosIG5yX2xwaV9w dHJzKTsKPiArICAgIGlmICggIWxwaV9kYXRhLmhvc3RfbHBpcyApCj4gKyAgICAgICAgcmV0dXJu IC1FTk9NRU07Cj4gKwo+ICAgICAgcHJpbnRrKCJHSUN2MzogdXNpbmcgYXQgbW9zdCAlbGQgTFBJ cyBvbiB0aGUgaG9zdC5cbiIsIE1BWF9QSFlTX0xQSVMpOwo+ICAKPiAgICAgIHJldHVybiAwOwo+ ICB9Cj4gIAo+ICsvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGhvc3RfbHBpc19sb2NrIGhlbGQuICov Cj4gK3N0YXRpYyBpbnQgZmluZF91bnVzZWRfaG9zdF9scGkoaW50IHN0YXJ0LCB1aW50MzJfdCAq aW5kZXgpCj4gK3sKPiArICAgIGludCBjaHVuazsKPiArICAgIHVpbnQzMl90IGkgPSAqaW5kZXg7 Cj4gKwo+ICsgICAgZm9yICggY2h1bmsgPSBzdGFydDsgY2h1bmsgPCBNQVhfUEhZU19MUElTIC8g SE9TVF9MUElTX1BFUl9QQUdFOyBjaHVuaysrICkKPiArICAgIHsKPiArICAgICAgICAvKiBJZiB3 ZSBoaXQgYW4gdW5hbGxvY2F0ZWQgY2h1bmssIHVzZSBlbnRyeSAwIGluIHRoYXQgb25lLiAqLwo+ ICsgICAgICAgIGlmICggIWxwaV9kYXRhLmhvc3RfbHBpc1tjaHVua10gKQo+ICsgICAgICAgIHsK PiArICAgICAgICAgICAgKmluZGV4ID0gMDsKPiArICAgICAgICAgICAgcmV0dXJuIGNodW5rOwo+ ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLyogRmluZCBhbiB1bmFsbG9jYXRlZCBlbnRyeSBp biB0aGlzIGNodW5rLiAqLwo+ICsgICAgICAgIGZvciAoIDsgaSA8IEhPU1RfTFBJU19QRVJfUEFH RTsgaSArPSBMUElfQkxPQ0sgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgaWYgKCBscGlf ZGF0YS5ob3N0X2xwaXNbY2h1bmtdW2ldLmRvbV9pZCA9PSBJTlZBTElEX0RPTUlEICkKPiArICAg ICAgICAgICAgewo+ICsgICAgICAgICAgICAgICAgKmluZGV4ID0gaTsKPiArICAgICAgICAgICAg ICAgIHJldHVybiBjaHVuazsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArICAgICAg ICBpID0gMDsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gLTE7Cj4gK30KPiArCj4gKy8qCj4g KyAqIEFsbG9jYXRlIGEgYmxvY2sgb2YgMzIgTFBJcyBvbiB0aGUgZ2l2ZW4gaG9zdCBJVFMgZm9y IGRldmljZSAiZGV2aWQiLAo+ICsgKiBzdGFydGluZyB3aXRoICJldmVudGlkIi4gUHV0IHRoZW0g aW50byB0aGUgcmVzcGVjdGl2ZSBJVFQgYnkgaXNzdWluZyBhCj4gKyAqIE1BUFRJIGNvbW1hbmQg Zm9yIGVhY2ggb2YgdGhlbS4KPiArICovCj4gK2ludCBnaWN2M19hbGxvY2F0ZV9ob3N0X2xwaV9i bG9jayhzdHJ1Y3QgaG9zdF9pdHMgKml0cywgc3RydWN0IGRvbWFpbiAqZCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGhvc3RfZGV2aWQsIHVpbnQzMl90IGV2 ZW50aWQpCj4gK3sKPiArICAgIHN0YXRpYyB1aW50MzJfdCBuZXh0X2xwaSA9IDA7Cj4gKyAgICB1 aW50MzJfdCBscGksIGxwaV9pZHggPSBuZXh0X2xwaSAlIEhPU1RfTFBJU19QRVJfUEFHRTsKPiAr ICAgIGludCBjaHVuazsKPiArICAgIGludCBpOwo+ICsKPiArICAgIHNwaW5fbG9jaygmbHBpX2Rh dGEuaG9zdF9scGlzX2xvY2spOwo+ICsgICAgY2h1bmsgPSBmaW5kX3VudXNlZF9ob3N0X2xwaShu ZXh0X2xwaSAvIEhPU1RfTFBJU19QRVJfUEFHRSwgJmxwaV9pZHgpOwo+ICsKPiArICAgIGlmICgg Y2h1bmsgPT0gLSAxICkgICAgICAgICAgLyogcmVzY2FuIGZvciBhIGhvbGUgZnJvbSB0aGUgYmVn aW5uaW5nICovCj4gKyAgICB7Cj4gKyAgICAgICAgbHBpX2lkeCA9IDA7Cj4gKyAgICAgICAgY2h1 bmsgPSBmaW5kX3VudXNlZF9ob3N0X2xwaSgwLCAmbHBpX2lkeCk7Cj4gKyAgICAgICAgaWYgKCBj aHVuayA9PSAtMSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBzcGluX3VubG9jaygmbHBp X2RhdGEuaG9zdF9scGlzX2xvY2spOwo+ICsgICAgICAgICAgICByZXR1cm4gLUVOT1NQQzsKPiAr ICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogSWYgd2UgaGl0IGFuIHVuYWxsb2NhdGVk IGNodW5rLCB3ZSBpbml0aWFsaXplIGl0IGFuZCB1c2UgZW50cnkgMC4gKi8KPiArICAgIGlmICgg IWxwaV9kYXRhLmhvc3RfbHBpc1tjaHVua10gKQo+ICsgICAgewo+ICsgICAgICAgIHVuaW9uIGhv c3RfbHBpICpuZXdfY2h1bms7Cj4gKwo+ICsgICAgICAgIG5ld19jaHVuayA9IGFsbG9jX3hlbmhl YXBfcGFnZXMoMCwgMCk7Cj4gKyAgICAgICAgaWYgKCAhbmV3X2NodW5rICkKPiArICAgICAgICB7 Cj4gKyAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZscGlfZGF0YS5ob3N0X2xwaXNfbG9jayk7Cj4g KyAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAg Zm9yICggaSA9IDA7IGkgPCBIT1NUX0xQSVNfUEVSX1BBR0U7IGkgKz0gTFBJX0JMT0NLICkKPiAr ICAgICAgICAgICAgbmV3X2NodW5rW2ldLmRvbV9pZCA9IElOVkFMSURfRE9NSUQ7Cj4gKwo+ICsg ICAgICAgIGxwaV9kYXRhLmhvc3RfbHBpc1tjaHVua10gPSBuZXdfY2h1bms7Cj4gKyAgICAgICAg bHBpX2lkeCA9IDA7Cj4gKyAgICB9Cj4gKwo+ICsgICAgbHBpID0gY2h1bmsgKiBIT1NUX0xQSVNf UEVSX1BBR0UgKyBscGlfaWR4Owo+ICsKPiArICAgIGZvciAoIGkgPSAwOyBpIDwgTFBJX0JMT0NL OyBpKysgKQo+ICsgICAgewo+ICsgICAgICAgIHVuaW9uIGhvc3RfbHBpIGhscGk7Cj4gKwo+ICsg ICAgICAgIC8qCj4gKyAgICAgICAgICogTWFyayB0aGlzIGhvc3QgTFBJIGFzIGJlbG9uZ2luZyB0 byB0aGUgZG9tYWluLCBidXQgZG9uJ3QgYXNzaWduCj4gKyAgICAgICAgICogYW55IHZpcnR1YWwg TFBJIG9yIGEgVkNQVSB5ZXQuCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgaGxwaS52aXJ0X2xw aSA9IElOVkFMSURfTFBJOwo+ICsgICAgICAgIGhscGkuZG9tX2lkID0gZC0+ZG9tYWluX2lkOwo+ ICsgICAgICAgIGhscGkudmNwdV9pZCA9IElOVkFMSURfRE9NSUQ7Cj4gKyAgICAgICAgd3JpdGVf dTY0X2F0b21pYygmbHBpX2RhdGEuaG9zdF9scGlzW2NodW5rXVtscGlfaWR4ICsgaV0uZGF0YSwK PiArICAgICAgICAgICAgICAgICAgICAgICAgIGhscGkuZGF0YSk7Cj4gKwo+ICsgICAgICAgIC8q Cj4gKyAgICAgICAgICogRW5hYmxlIHRoaXMgaG9zdCBMUEksIHNvIHdlIGRvbid0IGhhdmUgdG8g ZG8gdGhpcyBkdXJpbmcgdGhlCj4gKyAgICAgICAgICogZ3Vlc3QncyBydW50aW1lLgo+ICsgICAg ICAgICAqLwo+ICsgICAgICAgIGxwaV9kYXRhLmxwaV9wcm9wZXJ0eVtscGkgKyBpXSB8PSBMUElf UFJPUF9FTkFCTEVEOwo+ICsgICAgfQo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBXZSBoYXZlIGFs bG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgdGhlIGhvc3QgTFBJIGVudHJpZXMsIHNvIGl0J3Mgc2Fm ZQo+ICsgICAgICogdG8gZHJvcCB0aGUgbG9jayBub3cuIEFjY2VzcyB0byB0aGUgc3RydWN0dXJl cyBjYW4gYmUgZG9uZSBjb25jdXJyZW50bHkKPiArICAgICAqIGFzIGl0IGludm9sdmVzIG9ubHkg YW4gYXRvbWljIHVpbnQ2NF90IGFjY2Vzcy4KPiArICAgICAqLwo+ICsgICAgc3Bpbl91bmxvY2so JmxwaV9kYXRhLmhvc3RfbHBpc19sb2NrKTsKPiArCj4gKyAgICBpZiAoIGxwaV9kYXRhLmZsYWdz ICYgTFBJX1BST1BUQUJMRV9ORUVEU19GTFVTSElORyApCj4gKyAgICAgICAgY2xlYW5fYW5kX2lu dmFsaWRhdGVfZGNhY2hlX3ZhX3JhbmdlKCZscGlfZGF0YS5scGlfcHJvcGVydHlbbHBpXSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBJX0JMT0NLKTsK Ckkgd291bGQgbW92ZSB0aGlzIHJpZ2h0IGJlbG93IAogIGxwaV9kYXRhLmxwaV9wcm9wZXJ0eVts cGkgKyBpXSB8PSBMUElfUFJPUF9FTkFCTEVEOwoKCj4gKyAgICBnaWN2M19pdHNfbWFwX2hvc3Rf ZXZlbnRzKGl0cywgaG9zdF9kZXZpZCwgZXZlbnRpZCwgbHBpICsgTFBJX09GRlNFVCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBJX0JMT0NLKTsKPiArCj4gKyAgICBuZXh0X2xw aSA9IGxwaSArIExQSV9CTE9DSzsKPiArICAgIHJldHVybiBscGkgKyBMUElfT0ZGU0VUOwo+ICt9 Cj4gKwo+ICtpbnQgZ2ljdjNfZnJlZV9ob3N0X2xwaV9ibG9jayhzdHJ1Y3QgaG9zdF9pdHMgKml0 cywgdWludDMyX3QgbHBpKQo+ICt7Cj4gKyAgICB1bmlvbiBob3N0X2xwaSAqaGxwaSwgZW1wdHlf bHBpID0geyAuZG9tX2lkID0gSU5WQUxJRF9ET01JRCB9Owo+ICsgICAgaW50IGk7Cj4gKwo+ICsg ICAgaGxwaSA9IGdpY19nZXRfaG9zdF9scGkobHBpKTsKCkkgdGhpbmsgeW91IG5lZWQgdG8gbWFr ZSBzdXJlIHRoYXQgImxwaSIgaXMgdGhlIGZpcnN0IGxwaSBvZiBhIExQSV9CTE9DSy4KRWl0aGVy IHRoYXQsIG9yIGdpY19nZXRfaG9zdF9scGkgc2hvdWxkIG1ha2Ugc3VyZSB0byBhbHdheXMgcmV0 dXJuIHRoZQpmaXJzdCBscGkgaW4gYSBibG9jay4gCgoKPiArICAgIGlmICggIWhscGkgKQo+ICsg ICAgICAgIHJldHVybiAtRU5PRU5UOwo+ICsKPiArICAgIHNwaW5fbG9jaygmbHBpX2RhdGEuaG9z dF9scGlzX2xvY2spOwo+ICsKPiArICAgIGZvciAoIGkgPSAwOyBpIDwgTFBJX0JMT0NLOyBpKysg KQo+ICsgICAgICAgIHdyaXRlX3U2NF9hdG9taWMoJmhscGlbaV0uZGF0YSwgZW1wdHlfbHBpLmRh dGEpOwo+ICsKPiArICAgIC8qIFRPRE86IENhbGwgYSBmdW5jdGlvbiBpbiBnaWMtdjMtaXRzLmMg dG8gc2VuZCBESVNDQVJEcyAqLwo+ICsKPiArICAgIHNwaW5fdW5sb2NrKCZscGlfZGF0YS5ob3N0 X2xwaXNfbG9jayk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gIC8qCj4gICAqIExv Y2FsIHZhcmlhYmxlczoKPiAgICogbW9kZTogQwo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9h c20tYXJtL2dpYy5oIGIveGVuL2luY2x1ZGUvYXNtLWFybS9naWMuaAo+IGluZGV4IDEyYmQxNTUu Ljc4MjU1NzUgMTAwNjQ0Cj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS9naWMuaAo+ICsrKyBi L3hlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljLmgKPiBAQCAtMjIwLDcgKzIyMCwxMiBAQCBlbnVtIGdp Y192ZXJzaW9uIHsKPiAgICAgIEdJQ19WMywKPiAgfTsKPiAgCj4gKyNkZWZpbmUgSU5WQUxJRF9M UEkgICAgIDAKPiAgI2RlZmluZSBMUElfT0ZGU0VUICAgICAgODE5Mgo+ICtzdGF0aWMgaW5saW5l IGJvb2wgaXNfbHBpKHVuc2lnbmVkIGludCBpcnEpCj4gK3sKPiArICAgIHJldHVybiBpcnEgPj0g TFBJX09GRlNFVDsKPiArfQo+ICAKPiAgZXh0ZXJuIGVudW0gZ2ljX3ZlcnNpb24gZ2ljX2h3X3Zl cnNpb24odm9pZCk7Cj4gIAo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL2dpY192 M19pdHMuaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljX3YzX2l0cy5oCj4gaW5kZXggMzQyMWVh MC4uMjM4Nzk3MiAxMDA2NDQKPiAtLS0gYS94ZW4vaW5jbHVkZS9hc20tYXJtL2dpY192M19pdHMu aAo+ICsrKyBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljX3YzX2l0cy5oCj4gQEAgLTEwNiw2ICsx MDYsMTEgQEAKPiAgI2RlZmluZSBIT1NUX0lUU19GTFVTSF9DTURfUVVFVUUgICAgICAgICgxVSA8 PCAwKQo+ICAjZGVmaW5lIEhPU1RfSVRTX1VTRVNfUFRBICAgICAgICAgICAgICAgKDFVIDw8IDEp Cj4gIAo+ICsjZGVmaW5lIElOVkFMSURfRE9NSUQgKCh1aW50MTZfdCl+MCkKCldlIGFscmVhZHkg aGF2ZSBET01JRF9JTlZBTElECgoKPiArLyogV2UgYWxsb2NhdGUgTFBJcyBvbiB0aGUgaG9zdHMg aW4gY2h1bmtzIG9mIDMyIHRvIHJlZHVjZSBoYW5kbGluZyBvdmVyaGVhZC4gKi8KPiArI2RlZmlu ZSBMUElfQkxPQ0sgICAgICAgICAgICAgICAgICAgICAgIDMyCj4gKwo+ICAvKiBkYXRhIHN0cnVj dHVyZSBmb3IgZWFjaCBoYXJkd2FyZSBJVFMgKi8KPiAgc3RydWN0IGhvc3RfaXRzIHsKPiAgICAg IHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7Cj4gQEAgLTE1MSw2ICsxNTYsMTIgQEAgaW50IGdpY3Yz X2l0c19tYXBfZ3Vlc3RfZGV2aWNlKHN0cnVjdCBkb21haW4gKmQsCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwYWRkcl90IGhvc3RfZG9vcmJlbGwsIHVpbnQzMl90IGhvc3RfZGV2 aWQsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkcl90IGd1ZXN0X2Rvb3Ji ZWxsLCB1aW50MzJfdCBndWVzdF9kZXZpZCwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQzMl90IG5yX2V2ZW50cywgYm9vbCB2YWxpZCk7Cj4gK2ludCBnaWN2M19pdHNfbWFw X2hvc3RfZXZlbnRzKHN0cnVjdCBob3N0X2l0cyAqaXRzLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50MzJfdCBob3N0X2RldmlkLCB1aW50MzJfdCBldmVudGlkLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBscGksIHVpbnQzMl90IG5yZXZlbnRz KTsKPiAraW50IGdpY3YzX2FsbG9jYXRlX2hvc3RfbHBpX2Jsb2NrKHN0cnVjdCBob3N0X2l0cyAq aXRzLCBzdHJ1Y3QgZG9tYWluICpkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3QgaG9zdF9kZXZpZCwgdWludDMyX3QgZXZlbnRpZCk7Cj4gK2ludCBnaWN2M19m cmVlX2hvc3RfbHBpX2Jsb2NrKHN0cnVjdCBob3N0X2l0cyAqaXRzLCB1aW50MzJfdCBscGkpOwo+ ICAKPiAgI2Vsc2UKPiAgCj4gLS0gCj4gMi45LjAKPiAKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVs QGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=