From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: Re: [PATCH v2 20/30] xen/x86: add the basic infrastructure to import QEMU passthrough code Date: Thu, 6 Oct 2016 17:08:33 +0200 Message-ID: <20161006150833.b4o4m3znhs4abbrd@mac> References: <1474991845-27962-1-git-send-email-roger.pau@citrix.com> <1474991845-27962-21-git-send-email-roger.pau@citrix.com> <52d5b45403534a9ca27a55f1859d61ab@AMSPEX02CL03.citrite.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bsALy-0004nk-Cr for xen-devel@lists.xenproject.org; Thu, 06 Oct 2016 15:12:58 +0000 Content-Disposition: inline In-Reply-To: <52d5b45403534a9ca27a55f1859d61ab@AMSPEX02CL03.citrite.net> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Paul Durrant Cc: lars.kurth@citrix.com, George.Dunlap@eu.citrix.com, Andrew Cooper , Jan Beulich , ian.jackson@citrix.com, "xen-devel@lists.xenproject.org" , "boris.ostrovsky@oracle.com" List-Id: xen-devel@lists.xenproject.org T24gTW9uLCBPY3QgMDMsIDIwMTYgYXQgMTA6NTQ6NTRBTSArMDEwMCwgUGF1bCBEdXJyYW50IHdy b3RlOgo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+IEZyb206IFJvZ2VyIFBhdSBN b25uZSBbbWFpbHRvOnJvZ2VyLnBhdUBjaXRyaXguY29tXQo+ID4gU2VudDogMjcgU2VwdGVtYmVy IDIwMTYgMTY6NTcKPiA+IFRvOiB4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKPiA+IENj OiBrb25yYWQud2lsa0BvcmFjbGUuY29tOyBib3Jpcy5vc3Ryb3Zza3lAb3JhY2xlLmNvbTsgUm9n ZXIgUGF1IE1vbm5lCj4gPiA8cm9nZXIucGF1QGNpdHJpeC5jb20+OyBKYW4gQmV1bGljaCA8amJl dWxpY2hAc3VzZS5jb20+OyBBbmRyZXcgQ29vcGVyCj4gPiA8QW5kcmV3LkNvb3BlcjNAY2l0cml4 LmNvbT47IFBhdWwgRHVycmFudCA8UGF1bC5EdXJyYW50QGNpdHJpeC5jb20+Cj4gPiBTdWJqZWN0 OiBbUEFUQ0ggdjIgMjAvMzBdIHhlbi94ODY6IGFkZCB0aGUgYmFzaWMgaW5mcmFzdHJ1Y3R1cmUg dG8gaW1wb3J0Cj4gPiBRRU1VIHBhc3N0aHJvdWdoIGNvZGUKPiA+IAo+ID4gTW9zdCBvZiB0aGlz IGNvZGUgaGFzIGJlZW4gcGlja2VkIHVwIGZyb20gUUVNVSBhbmQgbW9kaWZpZWQgc28gaXQgY2Fu IGJlCj4gPiBwbHVnZ2VkIGludG8gdGhlIGludGVybmFsIFhlbiBJTyBoYW5kbGVycy4gVGhlIHN0 cnVjdHVyZSBvZiB0aGUgaGFuZGxlcnMgaGFzCj4gPiBiZWVuIGtlZXAgcXVpdGUgc2ltaWxhciB0 byBRRU1VLCBzbyBleGlzdGluZyBoYW5kbGVycyBjYW4gYmUgaW1wb3J0ZWQKPiA+IHdpdGhvdXQg YSBsb3Qgb2YgZWZmb3J0Lgo+ID4gCj4gCj4gSWYgeW91IGxpZnRlZCBjb2RlIGZyb20gUUVNVSB0 aGVuIG9uZSBhc3N1bWVzIHRoZXJlIGlzIG5vIHByb2JsZW0gd2l0aCBsaWNlbnNlLCBidXQgZG8g eW91IG5lZWQgdG8gYW1lbmQgY29weXJpZ2h0cyBmb3IgYW55IG9mIHRoZSBmaWxlcyB3aGVyZSB5 b3UgcHV0IHRoZSBjb2RlPwoKTGljZW5zZSBpcyBHUEwgMiwgc2FtZSBhcyBYZW4uIEZvciBjb3B5 cmlnaHRzIEkgaGF2ZSB0byBhZG1pdCBJIGhhdmUgbm8gCmlkZWEuIFRoZSBjb2RlIGlzIG5vdCBp bXBvcnRlZCBhcy1pcyBmb3Igb2J2aW91cyByZWFzb25zLCBidXQgdGhlIGxvZ2ljIGlzIAptb3N0 bHkgdGhlIHNhbWUuIEkgZG9uJ3QgbWluZCBhZGRpbmcgdGhlIGNvcHlyaWdodCBob2xkZXJzIGZv ciBhbGwgdGhlIGNvZGUgCkkndmUgaW1wb3J0ZWQsIHRoZXkgYXJlOgoKQ29weXJpZ2h0IChjKSAy MDA3LCBOZW9jbGV1cyBDb3Jwb3JhdGlvbi4KQ29weXJpZ2h0IChjKSAyMDA3LCBJbnRlbCBDb3Jw b3JhdGlvbi4KCldpdGggZGlmZmVyZW50IGF1dGhvcnMgZGVwZW5kaW5nIG9uIHRoZSBmaWxlLiBB ZGRpbmcgTGFycywgSWFuIGFuZCBHZW9yZ2UgCnNpbmNlIHRoZXkgaGF2ZSBtb3JlIGV4cGVyaWVu Y2Ugd2l0aCBjb3B5cmlnaHRzLgoKPiA+IFNpZ25lZC1vZmYtYnk6IFJvZ2VyIFBhdSBNb25uw6kg PHJvZ2VyLnBhdUBjaXRyaXguY29tPgo+ID4gLS0tCj4gPiBDYzogSmFuIEJldWxpY2ggPGpiZXVs aWNoQHN1c2UuY29tPgo+ID4gQ2M6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJp eC5jb20+Cj4gPiBDYzogUGF1bCBEdXJyYW50IDxwYXVsLmR1cnJhbnRAY2l0cml4LmNvbT4KPiA+ IC0tLQo+ID4gIGRvY3MvbWlzYy94ZW4tY29tbWFuZC1saW5lLm1hcmtkb3duIHwgICA4ICsKPiA+ ICB4ZW4vYXJjaC94ODYvaHZtL2h2bS5jICAgICAgICAgICAgICB8ICAgMiArCj4gPiAgeGVuL2Fy Y2gveDg2L2h2bS9pby5jICAgICAgICAgICAgICAgfCA2MjEKPiA+ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwo+ID4gIHhlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2RvbWFpbi5o ICAgIHwgICA0ICsKPiA+ICB4ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9pby5oICAgICAgICB8IDE3 NiArKysrKysrKysrCj4gPiAgeGVuL2luY2x1ZGUveGVuL3BjaS5oICAgICAgICAgICAgICAgfCAg IDUgKwo+ID4gIDYgZmlsZXMgY2hhbmdlZCwgODE2IGluc2VydGlvbnMoKykKPiA+IAo+ID4gZGlm ZiAtLWdpdCBhL2RvY3MvbWlzYy94ZW4tY29tbWFuZC1saW5lLm1hcmtkb3duIGIvZG9jcy9taXNj L3hlbi0KPiA+IGNvbW1hbmQtbGluZS5tYXJrZG93bgo+ID4gaW5kZXggNTlkNzIxMC4uNzgxMzBj OCAxMDA2NDQKPiA+IC0tLSBhL2RvY3MvbWlzYy94ZW4tY29tbWFuZC1saW5lLm1hcmtkb3duCj4g PiArKysgYi9kb2NzL21pc2MveGVuLWNvbW1hbmQtbGluZS5tYXJrZG93bgo+ID4gQEAgLTY3MCw2 ICs2NzAsMTQgQEAgRmxhZyB0aGF0IG1ha2VzIGEgNjRiaXQgZG9tMCBib290IGluIFBWSCBtb2Rl LiBObwo+ID4gMzJiaXQgc3VwcG9ydCBhdCBwcmVzZW50Lgo+ID4gCj4gPiAgRmxhZyB0aGF0IG1h a2VzIGEgZG9tMCBib290IGluIFBWSHYyIG1vZGUuCj4gPiAKPiA+ICsjIyMgZG9tMHBlcm1pc3Np dmUKPiA+ICs+IGA9IDxib29sZWFuPmAKPiA+ICsKPiA+ICs+IERlZmF1bHQ6IGB0cnVlYAo+ID4g Kwo+ID4gK1NlbGVjdCBtb2RlIG9mIFBDSSBwYXNzLXRocm91Z2ggd2hlbiB1c2luZyBhIFBWSHYy IERvbTAsIGVpdGhlcgo+ID4gcGVybWlzc2l2ZSBvcgo+ID4gK25vdC4KPiA+ICsKPiA+ICAjIyMg ZHR1YXJ0IChBUk0pCj4gPiAgPiBgPSBwYXRoIFs6b3B0aW9uc11gCj4gPiAKPiA+IGRpZmYgLS1n aXQgYS94ZW4vYXJjaC94ODYvaHZtL2h2bS5jIGIveGVuL2FyY2gveDg2L2h2bS9odm0uYwo+ID4g aW5kZXggYTI5MWY4Mi4uYmM0ZjdiYyAxMDA2NDQKPiA+IC0tLSBhL3hlbi9hcmNoL3g4Ni9odm0v aHZtLmMKPiA+ICsrKyBiL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMKPiA+IEBAIC02MzIsNiArNjMy LDggQEAgaW50IGh2bV9kb21haW5faW5pdGlhbGlzZShzdHJ1Y3QgZG9tYWluICpkKQo+ID4gICAg ICAgICAgICAgIGdvdG8gZmFpbDE7Cj4gPiAgICAgICAgICB9Cj4gPiAgICAgICAgICBtZW1zZXQo ZC0+YXJjaC5odm1fZG9tYWluLmlvX2JpdG1hcCwgfjAsIEhWTV9JT0JJVE1BUF9TSVpFKTsKPiA+ ICsgICAgICAgIElOSVRfTElTVF9IRUFEKCZkLT5hcmNoLmh2bV9kb21haW4ucHRfZGV2aWNlcyk7 Cj4gPiArICAgICAgICByd2xvY2tfaW5pdCgmZC0+YXJjaC5odm1fZG9tYWluLnB0X2xvY2spOwo+ ID4gICAgICB9Cj4gPiAgICAgIGVsc2UKPiA+ICAgICAgICAgIGQtPmFyY2guaHZtX2RvbWFpbi5p b19iaXRtYXAgPSBodm1faW9fYml0bWFwOwo+ID4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9o dm0vaW8uYyBiL3hlbi9hcmNoL3g4Ni9odm0vaW8uYwo+ID4gaW5kZXggMzFkNTRkYy4uN2RlMWRl MyAxMDA2NDQKPiA+IC0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vaW8uYwo+ID4gKysrIGIveGVuL2Fy Y2gveDg2L2h2bS9pby5jCj4gPiBAQCAtNDYsNiArNDYsMTAgQEAKPiA+ICAjaW5jbHVkZSA8eGVu L2lvY2FwLmg+Cj4gPiAgI2luY2x1ZGUgPHB1YmxpYy9odm0vaW9yZXEuaD4KPiA+IAo+ID4gKy8q IFNldCBwZXJtaXNzaXZlIG1vZGUgZm9yIEhWTSBEb20wIFBDSSBwYXNzLXRocm91Z2ggYnkgZGVm YXVsdCAqLwo+ID4gK3N0YXRpYyBib29sX3Qgb3B0X2RvbTBwZXJtaXNzaXZlID0gMTsKPiA+ICti b29sZWFuX3BhcmFtKCJkb20wcGVybWlzc2l2ZSIsIG9wdF9kb20wcGVybWlzc2l2ZSk7Cj4gPiAr Cj4gPiAgdm9pZCBzZW5kX3RpbWVvZmZzZXRfcmVxKHVuc2lnbmVkIGxvbmcgdGltZW9mZikKPiA+ ICB7Cj4gPiAgICAgIGlvcmVxX3QgcCA9IHsKPiA+IEBAIC0yNTgsMTIgKzI2Miw0MDMgQEAgc3Rh dGljIGJvb2xfdCBod19kcGNpX3BvcnRpb19hY2NlcHQoY29uc3Qgc3RydWN0Cj4gPiBodm1faW9f aGFuZGxlciAqaGFuZGxlciwKPiA+ICAgICAgcmV0dXJuIDA7Cj4gPiAgfQo+ID4gCj4gPiArc3Rh dGljIHN0cnVjdCBodm1fcHRfZGV2aWNlICpod19kcGNpX2dldF9kZXZpY2Uoc3RydWN0IGRvbWFp biAqZCkKPiA+ICt7Cj4gPiArICAgIHVpbnQ4X3QgYnVzLCBzbG90LCBmdW5jOwo+ID4gKyAgICB1 aW50MzJfdCBhZGRyOwo+ID4gKyAgICBzdHJ1Y3QgaHZtX3B0X2RldmljZSAqZGV2Owo+ID4gKwo+ ID4gKyAgICAvKiBEZWNvZGUgYnVzLCBzbG90IGFuZCBmdW5jLiAqLwo+ID4gKyAgICBhZGRyID0g Q0Y4X0JERihkLT5hcmNoLnBjaV9jZjgpOwo+ID4gKyAgICBidXMgPSBQQ0lfQlVTKGFkZHIpOwo+ ID4gKyAgICBzbG90ID0gUENJX1NMT1QoYWRkcik7Cj4gPiArICAgIGZ1bmMgPSBQQ0lfRlVOQyhh ZGRyKTsKPiA+ICsKPiA+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSggZGV2LCAmZC0+YXJjaC5o dm1fZG9tYWluLnB0X2RldmljZXMsIGVudHJpZXMgKQo+ID4gKyAgICB7Cj4gPiArICAgICAgICBp ZiAoIGRldi0+cGRldi0+c2VnICE9IDAgfHwgZGV2LT5wZGV2LT5idXMgIT0gYnVzIHx8Cj4gPiAr ICAgICAgICAgICAgIGRldi0+cGRldi0+ZGV2Zm4gIT0gUENJX0RFVkZOKHNsb3QsZnVuYykgKQo+ ID4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gKwo+ID4gKyAgICAgICAgcmV0dXJuIGRldjsK PiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICByZXR1cm4gTlVMTDsKPiA+ICt9Cj4gPiArCj4gPiAr LyogRGlzcGF0Y2hlcnMgKi8KPiA+ICsKPiA+ICsvKiBGaW5kIGVtdWxhdGUgcmVnaXN0ZXIgZ3Jv dXAgZW50cnkgKi8KPiA+ICtzdHJ1Y3QgaHZtX3B0X3JlZ19ncm91cCAqaHZtX3B0X2ZpbmRfcmVn X2dycChzdHJ1Y3QgaHZtX3B0X2RldmljZQo+ID4gKmQsCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkcmVzcykKPiA+ICt7Cj4gPiAr ICAgIHN0cnVjdCBodm1fcHRfcmVnX2dyb3VwICplbnRyeSA9IE5VTEw7Cj4gPiArCj4gPiArICAg IC8qIEZpbmQgcmVnaXN0ZXIgZ3JvdXAgZW50cnkgKi8KPiA+ICsgICAgbGlzdF9mb3JfZWFjaF9l bnRyeSggZW50cnksICZkLT5yZWdpc3Rlcl9ncm91cHMsIGVudHJpZXMgKQo+ID4gKyAgICB7Cj4g PiArICAgICAgICAvKiBjaGVjayBhZGRyZXNzICovCj4gPiArICAgICAgICBpZiAoIChlbnRyeS0+ YmFzZV9vZmZzZXQgPD0gYWRkcmVzcykKPiA+ICsgICAgICAgICAgICAgJiYgKChlbnRyeS0+YmFz ZV9vZmZzZXQgKyBlbnRyeS0+c2l6ZSkgPiBhZGRyZXNzKSApCj4gPiArICAgICAgICAgICAgcmV0 dXJuIGVudHJ5Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIC8qIEdyb3VwIGVudHJ5IG5vdCBm b3VuZCAqLwo+ID4gKyAgICByZXR1cm4gTlVMTDsKPiA+ICt9Cj4gPiArCj4gPiArLyogRmluZCBl bXVsYXRlIHJlZ2lzdGVyIGVudHJ5ICovCj4gPiArc3RydWN0IGh2bV9wdF9yZWcgKmh2bV9wdF9m aW5kX3JlZyhzdHJ1Y3QgaHZtX3B0X3JlZ19ncm91cCAqcmVnX2dycCwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZHJlc3MpCj4gPiArewo+ID4gKyAg ICBzdHJ1Y3QgaHZtX3B0X3JlZyAqcmVnX2VudHJ5ID0gTlVMTDsKPiA+ICsgICAgc3RydWN0IGh2 bV9wdF9yZWdfaGFuZGxlciAqaGFuZGxlciA9IE5VTEw7Cj4gPiArICAgIHVpbnQzMl90IHJlYWxf b2Zmc2V0ID0gMDsKPiA+ICsKPiA+ICsgICAgLyogRmluZCByZWdpc3RlciBlbnRyeSAqLwo+ID4g KyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KCByZWdfZW50cnksICZyZWdfZ3JwLT5yZWdpc3RlcnMs IGVudHJpZXMgKQo+ID4gKyAgICB7Cj4gPiArICAgICAgICBoYW5kbGVyID0gcmVnX2VudHJ5LT5o YW5kbGVyOwo+ID4gKyAgICAgICAgcmVhbF9vZmZzZXQgPSByZWdfZ3JwLT5iYXNlX29mZnNldCAr IGhhbmRsZXItPm9mZnNldDsKPiA+ICsgICAgICAgIC8qIENoZWNrIGFkZHJlc3MgKi8KPiA+ICsg ICAgICAgIGlmICggKHJlYWxfb2Zmc2V0IDw9IGFkZHJlc3MpCj4gPiArICAgICAgICAgICAgICYm ICgocmVhbF9vZmZzZXQgKyBoYW5kbGVyLT5zaXplKSA+IGFkZHJlc3MpICkKPiA+ICsgICAgICAg ICAgICByZXR1cm4gcmVnX2VudHJ5Owo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiBO VUxMOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGh2bV9wdF9wY2lfY29uZmlnX2FjY2Vz c19jaGVjayhzdHJ1Y3QgaHZtX3B0X2RldmljZSAqZCwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhZGRyLCBpbnQgbGVuKQo+ID4gK3sKPiA+ ICsgICAgLyogQ2hlY2sgb2Zmc2V0IHJhbmdlICovCj4gPiArICAgIGlmICggYWRkciA+PSAweEZG ICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAgcHJpbnRrX3BkZXYoZC0+cGRldiwgWEVOTE9HX0RF QlVHLAo+ID4gKyAgICAgICAgICAgICJmYWlsZWQgdG8gYWNjZXNzIHJlZ2lzdGVyIHdpdGggb2Zm c2V0IGV4Y2VlZGluZyAweEZGLiAiCj4gPiArICAgICAgICAgICAgIihhZGRyOiAweCUwMngsIGxl bjogJWQpXG4iLCBhZGRyLCBsZW4pOwo+ID4gKyAgICAgICAgcmV0dXJuIC1FRE9NOwo+ID4gKyAg ICB9Cj4gPiArCj4gPiArICAgIC8qIENoZWNrIHJlYWQgc2l6ZSAqLwo+ID4gKyAgICBpZiAoIChs ZW4gIT0gMSkgJiYgKGxlbiAhPSAyKSAmJiAobGVuICE9IDQpICkKPiA+ICsgICAgewo+ID4gKyAg ICAgICAgcHJpbnRrX3BkZXYoZC0+cGRldiwgWEVOTE9HX0RFQlVHLAo+ID4gKyAgICAgICAgICAg ICJmYWlsZWQgdG8gYWNjZXNzIHJlZ2lzdGVyIHdpdGggaW52YWxpZCBhY2Nlc3MgbGVuZ3RoLiAi Cj4gPiArICAgICAgICAgICAgIihhZGRyOiAweCUwMngsIGxlbjogJWQpXG4iLCBhZGRyLCBsZW4p Owo+ID4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAg LyogQ2hlY2sgb2Zmc2V0IGFsaWdubWVudCAqLwo+ID4gKyAgICBpZiAoIGFkZHIgJiAobGVuIC0g MSkgKQo+ID4gKyAgICB7Cj4gPiArICAgICAgICBwcmludGtfcGRldihkLT5wZGV2LCBYRU5MT0df REVCVUcsCj4gPiArICAgICAgICAgICAgImZhaWxlZCB0byBhY2Nlc3MgcmVnaXN0ZXIgd2l0aCBp bnZhbGlkIGFjY2VzcyBzaXplICIKPiA+ICsgICAgICAgICAgICAiYWxpZ25tZW50LiAoYWRkcjog MHglMDJ4LCBsZW46ICVkKVxuIiwgYWRkciwgbGVuKTsKPiA+ICsgICAgICAgIHJldHVybiAtRUlO VkFMOwo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgaW50IGh2bV9wdF9wY2lfcmVhZF9jb25maWcoc3RydWN0IGh2bV9wdF9kZXZpY2Ug KmQsIHVpbnQzMl90IGFkZHIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQzMl90ICpkYXRhLCBpbnQgbGVuKQo+ID4gK3sKPiA+ICsgICAgdWludDMyX3QgdmFsID0g MDsKPiA+ICsgICAgc3RydWN0IGh2bV9wdF9yZWdfZ3JvdXAgKnJlZ19ncnBfZW50cnkgPSBOVUxM Owo+ID4gKyAgICBzdHJ1Y3QgaHZtX3B0X3JlZyAqcmVnX2VudHJ5ID0gTlVMTDsKPiA+ICsgICAg aW50IHJjID0gMDsKPiA+ICsgICAgaW50IGVtdWxfbGVuID0gMDsKPiA+ICsgICAgdWludDMyX3Qg ZmluZF9hZGRyID0gYWRkcjsKPiA+ICsgICAgdW5zaWduZWQgaW50IHNlZyA9IGQtPnBkZXYtPnNl ZzsKPiA+ICsgICAgdW5zaWduZWQgaW50IGJ1cyA9IGQtPnBkZXYtPmJ1czsKPiA+ICsgICAgdW5z aWduZWQgaW50IHNsb3QgPSBQQ0lfU0xPVChkLT5wZGV2LT5kZXZmbik7Cj4gPiArICAgIHVuc2ln bmVkIGludCBmdW5jID0gUENJX0ZVTkMoZC0+cGRldi0+ZGV2Zm4pOwo+ID4gKwo+ID4gKyAgICAv KiBTYW5pdHkgY2hlY2tzLiAqLwo+ID4gKyAgICBpZiAoIGh2bV9wdF9wY2lfY29uZmlnX2FjY2Vz c19jaGVjayhkLCBhZGRyLCBsZW4pICkKPiA+ICsgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFO RExFQUJMRTsKPiA+ICsKPiA+ICsgICAgLyogRmluZCByZWdpc3RlciBncm91cCBlbnRyeS4gKi8K PiA+ICsgICAgcmVnX2dycF9lbnRyeSA9IGh2bV9wdF9maW5kX3JlZ19ncnAoZCwgYWRkcik7Cj4g PiArICAgIGlmICggcmVnX2dycF9lbnRyeSA9PSBOVUxMICkKPiA+ICsgICAgICAgIHJldHVybiBY ODZFTVVMX1VOSEFORExFQUJMRTsKPiA+ICsKPiA+ICsgICAgLyogUmVhZCBJL08gZGV2aWNlIHJl Z2lzdGVyIHZhbHVlLiAqLwo+ID4gKyAgICBzd2l0Y2goIGxlbiApCj4gPiArICAgIHsKPiA+ICsg ICAgY2FzZSAxOgo+ID4gKyAgICAgICAgdmFsID0gcGNpX2NvbmZfcmVhZDgoc2VnLCBidXMsIHNs b3QsIGZ1bmMsIGFkZHIpOwo+ID4gKyAgICAgICAgYnJlYWs7Cj4gPiArICAgIGNhc2UgMjoKPiA+ ICsgICAgICAgIHZhbCA9IHBjaV9jb25mX3JlYWQxNihzZWcsIGJ1cywgc2xvdCwgZnVuYywgYWRk cik7Cj4gPiArICAgICAgICBicmVhazsKPiA+ICsgICAgY2FzZSA0Ogo+ID4gKyAgICAgICAgdmFs ID0gcGNpX2NvbmZfcmVhZDMyKHNlZywgYnVzLCBzbG90LCBmdW5jLCBhZGRyKTsKPiA+ICsgICAg ICAgIGJyZWFrOwo+ID4gKyAgICBkZWZhdWx0Ogo+ID4gKyAgICAgICAgQlVHKCk7Cj4gPiArICAg IH0KPiA+ICsKPiA+ICsgICAgLyogQWRqdXN0IHRoZSByZWFkIHZhbHVlIHRvIGFwcHJvcHJpYXRl IENGQy1DRkYgd2luZG93LiAqLwo+ID4gKyAgICB2YWwgPDw9IChhZGRyICYgMykgPDwgMzsKPiA+ ICsgICAgZW11bF9sZW4gPSBsZW47Cj4gPiArCj4gPiArICAgIC8qIExvb3AgYXJvdW5kIHRoZSBn dWVzdCByZXF1ZXN0ZWQgc2l6ZS4gKi8KPiA+ICsgICAgd2hpbGUgKCBlbXVsX2xlbiA+IDAgKQo+ ID4gKyAgICB7Cj4gPiArICAgICAgICAvKiBGaW5kIHJlZ2lzdGVyIGVudHJ5IHRvIGJlIGVtdWxh dGVkLiAqLwo+ID4gKyAgICAgICAgcmVnX2VudHJ5ID0gaHZtX3B0X2ZpbmRfcmVnKHJlZ19ncnBf ZW50cnksIGZpbmRfYWRkcik7Cj4gPiArICAgICAgICBpZiAoIHJlZ19lbnRyeSApCj4gPiArICAg ICAgICB7Cj4gPiArICAgICAgICAgICAgc3RydWN0IGh2bV9wdF9yZWdfaGFuZGxlciAqaGFuZGxl ciA9IHJlZ19lbnRyeS0+aGFuZGxlcjsKPiA+ICsgICAgICAgICAgICB1aW50MzJfdCByZWFsX29m ZnNldCA9IHJlZ19ncnBfZW50cnktPmJhc2Vfb2Zmc2V0ICsgaGFuZGxlci0KPiA+ID5vZmZzZXQ7 Cj4gPiArICAgICAgICAgICAgdWludDMyX3QgdmFsaWRfbWFzayA9IDB4RkZGRkZGRkYgPj4gKCg0 IC0gZW11bF9sZW4pIDw8IDMpOwo+IAo+IEZpZ3VyaW5nIG91dCB3aGV0aGVyIHRoaXMgbWFrZXMg c2Vuc2UgbWFrZXMgbXkgYnJhaW4gaHVydC4gQW55IGNoYW5jZSBvZiBzb21lIG1hY3JvIG9yIGF0 IGxlYXN0IGNvbW1lbnRzIGFib3V0IHRoaXM/CgpSaWdodC4gV2hhdCBhYm91dDoKCi8qIENyZWF0 ZSBhIGJpdG1hc2sgZnJvbSBhIGdpdmVuIHNpemUgKGluIGJ5dGVzKS4gKi8KI2RlZmluZSBIVk1f UFRfU0laRV9UT19NQVNLKHNpemUpICgweEZGRkZGRkZGID4+ICgoNCAtIChzaXplKSkgPDwgMykp Cgo+ID4gKyAgICAgICAgICAgIHVpbnQ4X3QgKnB0cl92YWwgPSBOVUxMOwo+ID4gKwo+ID4gKyAg ICAgICAgICAgIHZhbGlkX21hc2sgPDw9IChmaW5kX2FkZHIgLSByZWFsX29mZnNldCkgPDwgMzsK PiA+ICsgICAgICAgICAgICBwdHJfdmFsID0gKHVpbnQ4X3QgKikmdmFsICsgKHJlYWxfb2Zmc2V0 ICYgMyk7Cj4gPiArCj4gPiArICAgICAgICAgICAgLyogRG8gZW11bGF0aW9uIGJhc2VkIG9uIHJl Z2lzdGVyIHNpemUuICovCj4gPiArICAgICAgICAgICAgc3dpdGNoICggaGFuZGxlci0+c2l6ZSAp Cj4gPiArICAgICAgICAgICAgewo+ID4gKyAgICAgICAgICAgIGNhc2UgMToKPiA+ICsgICAgICAg ICAgICAgICAgaWYgKCBoYW5kbGVyLT51LmIucmVhZCApCj4gPiArICAgICAgICAgICAgICAgICAg ICByYyA9IGhhbmRsZXItPnUuYi5yZWFkKGQsIHJlZ19lbnRyeSwgcHRyX3ZhbCwgdmFsaWRfbWFz ayk7Cj4gPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgICAgIGNhc2UgMjoK PiA+ICsgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVyLT51LncucmVhZCApCj4gPiArICAgICAg ICAgICAgICAgICAgICByYyA9IGhhbmRsZXItPnUudy5yZWFkKGQsIHJlZ19lbnRyeSwgKHVpbnQx Nl90ICopcHRyX3ZhbCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmFsaWRfbWFzayk7Cj4gPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAg ICAgICAgIGNhc2UgNDoKPiA+ICsgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVyLT51LmR3LnJl YWQgKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgcmMgPSBoYW5kbGVyLT51LmR3LnJlYWQoZCwg cmVnX2VudHJ5LCAodWludDMyX3QgKilwdHJfdmFsLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRfbWFzayk7Cj4gPiArICAgICAgICAgICAgICAg IGJyZWFrOwo+ID4gKyAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICBpZiAoIHJj IDwgMCApCj4gPiArICAgICAgICAgICAgewo+ID4gKyAgICAgICAgICAgICAgICBnZHByaW50ayhY RU5MT0dfV0FSTklORywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgcmVh ZCBlbXVsYXRpb24sIHNodXR0aW5nIGRvd24gZG9tYWluXG4iKTsKPiA+ICsgICAgICAgICAgICAg ICAgZG9tYWluX2NyYXNoKGN1cnJlbnQtPmRvbWFpbik7Cj4gPiArICAgICAgICAgICAgICAgIHJl dHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKPiA+ICsgICAgICAgICAgICB9Cj4gPiArCj4gPiAr ICAgICAgICAgICAgLyogQ2FsY3VsYXRlIG5leHQgYWRkcmVzcyB0byBmaW5kLiAqLwo+ID4gKyAg ICAgICAgICAgIGVtdWxfbGVuIC09IGhhbmRsZXItPnNpemU7Cj4gPiArICAgICAgICAgICAgaWYg KCBlbXVsX2xlbiA+IDAgKQo+ID4gKyAgICAgICAgICAgICAgICBmaW5kX2FkZHIgPSByZWFsX29m ZnNldCArIGhhbmRsZXItPnNpemU7Cj4gPiArICAgICAgICB9Cj4gPiArICAgICAgICBlbHNlCj4g PiArICAgICAgICB7Cj4gPiArICAgICAgICAgICAgLyogTm90aGluZyB0byBkbyB3aXRoIHBhc3N0 aHJvdWdoIHR5cGUgcmVnaXN0ZXIgKi8KPiA+ICsgICAgICAgICAgICBlbXVsX2xlbi0tOwo+ID4g KyAgICAgICAgICAgIGZpbmRfYWRkcisrOwo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9Cj4gPiAr Cj4gPiArICAgIC8qIE5lZWQgdG8gc2hpZnQgYmFjayBiZWZvcmUgcmV0dXJuaW5nIHRoZW0gdG8g cGNpIGJ1cyBlbXVsYXRvciAqLwo+ID4gKyAgICB2YWwgPj49ICgoYWRkciAmIDMpIDw8IDMpOwo+ ID4gKyAgICAqZGF0YSA9IHZhbDsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBodm1fcHRfcGNpX3dyaXRlX2NvbmZpZyhzdHJ1 Y3QgaHZtX3B0X2RldmljZSAqZCwgdWludDMyX3QKPiA+IGFkZHIsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsLCBpbnQgbGVuKQo+ID4gK3sKPiA+ ICsgICAgaW50IGluZGV4ID0gMDsKPiA+ICsgICAgc3RydWN0IGh2bV9wdF9yZWdfZ3JvdXAgKnJl Z19ncnBfZW50cnkgPSBOVUxMOwo+ID4gKyAgICBpbnQgcmMgPSAwOwo+ID4gKyAgICB1aW50MzJf dCByZWFkX3ZhbCA9IDAsIHdiX21hc2s7Cj4gPiArICAgIGludCBlbXVsX2xlbiA9IDA7Cj4gPiAr ICAgIHN0cnVjdCBodm1fcHRfcmVnICpyZWdfZW50cnkgPSBOVUxMOwo+ID4gKyAgICB1aW50MzJf dCBmaW5kX2FkZHIgPSBhZGRyOwo+ID4gKyAgICBzdHJ1Y3QgaHZtX3B0X3JlZ19oYW5kbGVyICpo YW5kbGVyID0gTlVMTDsKPiA+ICsgICAgYm9vbCB3cF9mbGFnID0gZmFsc2U7Cj4gPiArICAgIHVu c2lnbmVkIGludCBzZWcgPSBkLT5wZGV2LT5zZWc7Cj4gPiArICAgIHVuc2lnbmVkIGludCBidXMg PSBkLT5wZGV2LT5idXM7Cj4gPiArICAgIHVuc2lnbmVkIGludCBzbG90ID0gUENJX1NMT1QoZC0+ cGRldi0+ZGV2Zm4pOwo+ID4gKyAgICB1bnNpZ25lZCBpbnQgZnVuYyA9IFBDSV9GVU5DKGQtPnBk ZXYtPmRldmZuKTsKPiA+ICsKPiA+ICsgICAgLyogU2FuaXR5IGNoZWNrcy4gKi8KPiA+ICsgICAg aWYgKCBodm1fcHRfcGNpX2NvbmZpZ19hY2Nlc3NfY2hlY2soZCwgYWRkciwgbGVuKSApCj4gPiAr ICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Cj4gPiArCj4gPiArICAgIC8qIEZp bmQgcmVnaXN0ZXIgZ3JvdXAgZW50cnkuICovCj4gPiArICAgIHJlZ19ncnBfZW50cnkgPSBodm1f cHRfZmluZF9yZWdfZ3JwKGQsIGFkZHIpOwo+ID4gKyAgICBpZiAoIHJlZ19ncnBfZW50cnkgPT0g TlVMTCApCj4gPiArICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Cj4gPiArCj4g PiArICAgIC8qIFJlYWQgSS9PIGRldmljZSByZWdpc3RlciB2YWx1ZS4gKi8KPiA+ICsgICAgc3dp dGNoKCBsZW4gKQo+ID4gKyAgICB7Cj4gPiArICAgIGNhc2UgMToKPiA+ICsgICAgICAgIHJlYWRf dmFsID0gcGNpX2NvbmZfcmVhZDgoc2VnLCBidXMsIHNsb3QsIGZ1bmMsIGFkZHIpOwo+ID4gKyAg ICAgICAgYnJlYWs7Cj4gPiArICAgIGNhc2UgMjoKPiA+ICsgICAgICAgIHJlYWRfdmFsID0gcGNp X2NvbmZfcmVhZDE2KHNlZywgYnVzLCBzbG90LCBmdW5jLCBhZGRyKTsKPiA+ICsgICAgICAgIGJy ZWFrOwo+ID4gKyAgICBjYXNlIDQ6Cj4gPiArICAgICAgICByZWFkX3ZhbCA9IHBjaV9jb25mX3Jl YWQzMihzZWcsIGJ1cywgc2xvdCwgZnVuYywgYWRkcik7Cj4gPiArICAgICAgICBicmVhazsKPiA+ ICsgICAgZGVmYXVsdDoKPiA+ICsgICAgICAgIEJVRygpOwo+ID4gKyAgICB9Cj4gPiArICAgIHdi X21hc2sgPSAweEZGRkZGRkZGID4+ICgoNCAtIGxlbikgPDwgMyk7Cj4gPiArCj4gPiArICAgIC8q IEFkanVzdCB0aGUgcmVhZCBhbmQgd3JpdGUgdmFsdWUgdG8gYXBwcm9wcmlhdGUgQ0ZDLUNGRiB3 aW5kb3cgKi8KPiA+ICsgICAgcmVhZF92YWwgPDw9IChhZGRyICYgMykgPDwgMzsKPiA+ICsgICAg dmFsIDw8PSAoYWRkciAmIDMpIDw8IDM7Cj4gPiArICAgIGVtdWxfbGVuID0gbGVuOwo+ID4gKwo+ ID4gKyAgICAvKiBMb29wIGFyb3VuZCB0aGUgZ3Vlc3QgcmVxdWVzdGVkIHNpemUgKi8KPiA+ICsg ICAgd2hpbGUgKCBlbXVsX2xlbiA+IDAgKQo+ID4gKyAgICB7Cj4gPiArICAgICAgICAvKiBGaW5k IHJlZ2lzdGVyIGVudHJ5IHRvIGJlIGVtdWxhdGVkICovCj4gPiArICAgICAgICByZWdfZW50cnkg PSBodm1fcHRfZmluZF9yZWcocmVnX2dycF9lbnRyeSwgZmluZF9hZGRyKTsKPiA+ICsgICAgICAg IGlmICggcmVnX2VudHJ5ICkKPiA+ICsgICAgICAgIHsKPiA+ICsgICAgICAgICAgICBoYW5kbGVy ID0gcmVnX2VudHJ5LT5oYW5kbGVyOwo+ID4gKyAgICAgICAgICAgIHVpbnQzMl90IHJlYWxfb2Zm c2V0ID0gcmVnX2dycF9lbnRyeS0+YmFzZV9vZmZzZXQgKyBoYW5kbGVyLQo+ID4gPm9mZnNldDsK PiA+ICsgICAgICAgICAgICB1aW50MzJfdCB2YWxpZF9tYXNrID0gMHhGRkZGRkZGRiA+PiAoKDQg LSBlbXVsX2xlbikgPDwgMyk7Cj4gPiArICAgICAgICAgICAgdWludDhfdCAqcHRyX3ZhbCA9IE5V TEw7Cj4gPiArICAgICAgICAgICAgdWludDMyX3Qgd3BfbWFzayA9IGhhbmRsZXItPmVtdV9tYXNr IHwgaGFuZGxlci0+cm9fbWFzazsKPiA+ICsKPiA+ICsgICAgICAgICAgICB2YWxpZF9tYXNrIDw8 PSAoZmluZF9hZGRyIC0gcmVhbF9vZmZzZXQpIDw8IDM7Cj4gPiArICAgICAgICAgICAgcHRyX3Zh bCA9ICh1aW50OF90ICopJnZhbCArIChyZWFsX29mZnNldCAmIDMpOwo+ID4gKyAgICAgICAgICAg IGlmICggIWQtPnBlcm1pc3NpdmUgKQo+ID4gKyAgICAgICAgICAgICAgICB3cF9tYXNrIHw9IGhh bmRsZXItPnJlc19tYXNrOwo+ID4gKyAgICAgICAgICAgIGlmICggd3BfbWFzayA9PSAoMHhGRkZG RkZGRiA+PiAoKDQgLSBoYW5kbGVyLT5zaXplKSA8PCAzKSkgKQo+ID4gKyAgICAgICAgICAgICAg ICB3Yl9tYXNrICY9IH4oKHdwX21hc2sgPj4gKChmaW5kX2FkZHIgLSByZWFsX29mZnNldCkgPDwg MykpCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAoKGxlbiAtIGVtdWxfbGVu KSA8PCAzKSk7Cj4gPiArCj4gPiArICAgICAgICAgICAgLyogRG8gZW11bGF0aW9uIGJhc2VkIG9u IHJlZ2lzdGVyIHNpemUgKi8KPiA+ICsgICAgICAgICAgICBzd2l0Y2ggKCBoYW5kbGVyLT5zaXpl ICkKPiA+ICsgICAgICAgICAgICB7Cj4gPiArICAgICAgICAgICAgY2FzZSAxOgo+ID4gKyAgICAg ICAgICAgICAgICBpZiAoIGhhbmRsZXItPnUuYi53cml0ZSApCj4gPiArICAgICAgICAgICAgICAg ICAgICByYyA9IGhhbmRsZXItPnUuYi53cml0ZShkLCByZWdfZW50cnksIHB0cl92YWwsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX3ZhbCA+PiAo KHJlYWxfb2Zmc2V0ICYgMykgPDwgMyksCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2YWxpZF9tYXNrKTsKPiA+ICsgICAgICAgICAgICAgICAgYnJlYWs7 Cj4gPiArICAgICAgICAgICAgY2FzZSAyOgo+ID4gKyAgICAgICAgICAgICAgICBpZiAoIGhhbmRs ZXItPnUudy53cml0ZSApCj4gPiArICAgICAgICAgICAgICAgICAgICByYyA9IGhhbmRsZXItPnUu dy53cml0ZShkLCByZWdfZW50cnksICh1aW50MTZfdCAqKXB0cl92YWwsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVhZF92YWwgPj4gKChyZWFsX29m ZnNldCAmIDMpIDw8IDMpKSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZhbGlkX21hc2spOwo+ID4gKyAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsg ICAgICAgICAgICBjYXNlIDQ6Cj4gPiArICAgICAgICAgICAgICAgIGlmICggaGFuZGxlci0+dS5k dy53cml0ZSApCj4gPiArICAgICAgICAgICAgICAgICAgICByYyA9IGhhbmRsZXItPnUuZHcud3Jp dGUoZCwgcmVnX2VudHJ5LCAodWludDMyX3QgKilwdHJfdmFsLAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkX3ZhbCA+PiAoKHJlYWxfb2Zmc2V0 ICYgMykgPDwgMykpLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZhbGlkX21hc2spOwo+ID4gKyAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAg ICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgaWYgKCByYyA8IDAgKQo+ID4gKyAgICAg ICAgICAgIHsKPiA+ICsgICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIHdyaXRlIGVtdWxhdGlvbiwgc2h1 dHRpbmcgZG93biBkb21haW5cbiIpOwo+ID4gKyAgICAgICAgICAgICAgICBkb21haW5fY3Jhc2go Y3VycmVudC0+ZG9tYWluKTsKPiA+ICsgICAgICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5I QU5ETEVBQkxFOwo+ID4gKyAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAvKiBD YWxjdWxhdGUgbmV4dCBhZGRyZXNzIHRvIGZpbmQgKi8KPiA+ICsgICAgICAgICAgICBlbXVsX2xl biAtPSBoYW5kbGVyLT5zaXplOwo+ID4gKyAgICAgICAgICAgIGlmICggZW11bF9sZW4gPiAwICkK PiA+ICsgICAgICAgICAgICAgICAgZmluZF9hZGRyID0gcmVhbF9vZmZzZXQgKyBoYW5kbGVyLT5z aXplOwo+ID4gKyAgICAgICAgfQo+ID4gKyAgICAgICAgZWxzZQo+ID4gKyAgICAgICAgewo+ID4g KyAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gd2l0aCBwYXNzdGhyb3VnaCB0eXBlIHJlZ2lz dGVyICovCj4gPiArICAgICAgICAgICAgaWYgKCAhZC0+cGVybWlzc2l2ZSApCj4gPiArICAgICAg ICAgICAgewo+ID4gKyAgICAgICAgICAgICAgICB3Yl9tYXNrICY9IH4oMHhmZiA8PCAoKGxlbiAt IGVtdWxfbGVuKSA8PCAzKSk7Cj4gPiArICAgICAgICAgICAgICAgIC8qCj4gPiArICAgICAgICAg ICAgICAgICAqIFVudXNlZCBCQVJzIHdpbGwgbWFrZSBpdCBoZXJlLCBidXQgd2UgZG9uJ3Qgd2Fu dCB0byBpc3N1ZQo+ID4gKyAgICAgICAgICAgICAgICAgKiB3YXJuaW5ncyBmb3Igd3JpdGVzIHRv IHRoZW0gKGJvZ3VzIHdyaXRlcyBnZXQgZGVhbHQgd2l0aAo+ID4gKyAgICAgICAgICAgICAgICAg KiBhYm92ZSkuCj4gPiArICAgICAgICAgICAgICAgICAqLwo+ID4gKyAgICAgICAgICAgICAgICBp ZiAoIGluZGV4IDwgMCApCj4gPiArICAgICAgICAgICAgICAgICAgICB3cF9mbGFnID0gdHJ1ZTsK PiA+ICsgICAgICAgICAgICB9Cj4gPiArICAgICAgICAgICAgZW11bF9sZW4tLTsKPiA+ICsgICAg ICAgICAgICBmaW5kX2FkZHIrKzsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgfQo+ID4gKwo+ID4g KyAgICAvKiBOZWVkIHRvIHNoaWZ0IGJhY2sgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB4ZW5faG9z dF9wY2lfc2V0X2Jsb2NrICovCj4gPiArICAgIHZhbCA+Pj0gKGFkZHIgJiAzKSA8PCAzOwo+ID4g Kwo+ID4gKyAgICBpZiAoIHdwX2ZsYWcgJiYgIWQtPnBlcm1pc3NpdmVfd2FybmVkICkKPiA+ICsg ICAgewo+ID4gKyAgICAgICAgZC0+cGVybWlzc2l2ZV93YXJuZWQgPSB0cnVlOwo+ID4gKyAgICAg ICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCj4gPiArICAgICAgICAgICJXcml0ZS1iYWNrIHRv IHVua25vd24gZmllbGQgMHglMDJ4IChwYXJ0aWFsbHkpIGluaGliaXRlZCAoMHglMCp4KVxuIiwK PiA+ICsgICAgICAgICAgYWRkciwgbGVuICogMiwgd2JfbWFzayk7Cj4gPiArICAgICAgICBnZHBy aW50ayhYRU5MT0dfV0FSTklORywKPiA+ICsgICAgICAgICAgIklmIHRoZSBkZXZpY2UgZG9lc24n dCB3b3JrLCB0cnkgZW5hYmxpbmcgcGVybWlzc2l2ZSBtb2RlXG4iKTsKPiA+ICsgICAgICAgIGdk cHJpbnRrKFhFTkxPR19XQVJOSU5HLAo+ID4gKyAgICAgICAgICAiKHVuc2FmZSkgYW5kIGlmIGl0 IGhlbHBzIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB4ZW4tZGV2ZWxcbiIpOwo+ID4gKyAgICB9Cj4g PiArICAgIGZvciAoIGluZGV4ID0gMDsgd2JfbWFzazsgaW5kZXggKz0gbGVuICkKPiA+ICsgICAg ewo+ID4gKyAgICAgICAgLyogVW5rbm93biByZWdzIGFyZSBwYXNzZWQgdGhyb3VnaCAqLwo+ID4g KyAgICAgICAgd2hpbGUgKCAhKHdiX21hc2sgJiAweGZmKSApCj4gPiArICAgICAgICB7Cj4gPiAr ICAgICAgICAgICAgaW5kZXgrKzsKPiA+ICsgICAgICAgICAgICB3Yl9tYXNrID4+PSA4Owo+ID4g KyAgICAgICAgfQo+ID4gKyAgICAgICAgbGVuID0gMDsKPiA+ICsgICAgICAgIGRvIHsKPiA+ICsg ICAgICAgICAgICBsZW4rKzsKPiA+ICsgICAgICAgICAgICB3Yl9tYXNrID4+PSA4Owo+ID4gKyAg ICAgICAgfSB3aGlsZSAoIHdiX21hc2sgJiAweGZmICk7Cj4gPiArCj4gPiArICAgICAgICBzd2l0 Y2goIGxlbiApCj4gPiArICAgICAgICB7Cj4gPiArICAgICAgICBjYXNlIDE6Cj4gPiArICAgICAg ICB7Cj4gPiArICAgICAgICAgICAgdWludDhfdCB2YWx1ZTsKPiA+ICsgICAgICAgICAgICBtZW1j cHkoJnZhbHVlLCAodWludDhfdCAqKSZ2YWwgKyBpbmRleCwgMSk7Cj4gPiArICAgICAgICAgICAg cGNpX2NvbmZfd3JpdGU4KHNlZywgYnVzLCBzbG90LCBmdW5jLCBhZGRyICsgaW5kZXgsIHZhbHVl KTsKPiA+ICsgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgICAgIGNh c2UgMjoKPiA+ICsgICAgICAgIHsKPiA+ICsgICAgICAgICAgICB1aW50MTZfdCB2YWx1ZTsKPiA+ ICsgICAgICAgICAgICBtZW1jcHkoJnZhbHVlLCAodWludDhfdCAqKSZ2YWwgKyBpbmRleCwgMik7 Cj4gPiArICAgICAgICAgICAgcGNpX2NvbmZfd3JpdGUxNihzZWcsIGJ1cywgc2xvdCwgZnVuYywg YWRkciArIGluZGV4LCB2YWx1ZSk7Cj4gPiArICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAg ICB9Cj4gPiArICAgICAgICBjYXNlIDQ6Cj4gPiArICAgICAgICB7Cj4gPiArICAgICAgICAgICAg dWludDMyX3QgdmFsdWU7Cj4gPiArICAgICAgICAgICAgbWVtY3B5KCZ2YWx1ZSwgKHVpbnQ4X3Qg KikmdmFsICsgaW5kZXgsIDQpOwo+ID4gKyAgICAgICAgICAgIHBjaV9jb25mX3dyaXRlMzIoc2Vn LCBidXMsIHNsb3QsIGZ1bmMsIGFkZHIgKyBpbmRleCwgdmFsdWUpOwo+ID4gKyAgICAgICAgICAg IGJyZWFrOwo+ID4gKyAgICAgICAgfQo+ID4gKyAgICAgICAgZGVmYXVsdDoKPiA+ICsgICAgICAg ICAgICBCVUcoKTsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgfQo+ID4gKyAgICByZXR1cm4gWDg2 RU1VTF9PS0FZOwo+ID4gK30KPiA+ICsKPiA+ICBzdGF0aWMgaW50IGh3X2RwY2lfcG9ydGlvX3Jl YWQoY29uc3Qgc3RydWN0IGh2bV9pb19oYW5kbGVyICpoYW5kbGVyLAo+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50NjRfdCBhZGRyLAo+ID4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50MzJfdCBzaXplLAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50NjRfdCAqZGF0YSkKPiA+ICB7Cj4gPiAgICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3Vy cmVudC0+ZG9tYWluOwo+ID4gKyAgICBzdHJ1Y3QgaHZtX3B0X2RldmljZSAqZGV2Owo+ID4gKyAg ICB1aW50MzJfdCBkYXRhMzI7Cj4gPiArICAgIHVpbnQ4X3QgcmVnOwo+ID4gKyAgICBpbnQgcmM7 Cj4gPiAKPiA+ICAgICAgaWYgKCBhZGRyID09IDB4Y2Y4ICkKPiA+ICAgICAgewo+ID4gQEAgLTI3 Niw2ICs2NzEsMjIgQEAgc3RhdGljIGludCBod19kcGNpX3BvcnRpb19yZWFkKGNvbnN0IHN0cnVj dAo+ID4gaHZtX2lvX2hhbmRsZXIgKmhhbmRsZXIsCj4gPiAgICAgIHNpemUgPSBtaW4oc2l6ZSwg NCAtICgodWludDMyX3QpYWRkciAmIDMpKTsKPiA+ICAgICAgaWYgKCBzaXplID09IDMgKQo+ID4g ICAgICAgICAgc2l6ZSA9IDI7Cj4gPiArCj4gPiArICAgIHJlYWRfbG9jaygmY3VycmQtPmFyY2gu aHZtX2RvbWFpbi5wdF9sb2NrKTsKPiA+ICsgICAgZGV2ID0gaHdfZHBjaV9nZXRfZGV2aWNlKGN1 cnJkKTsKPiA+ICsgICAgaWYgKCBkZXYgIT0gTlVMTCApCj4gPiArICAgIHsKPiA+ICsgICAgICAg IHJlZyA9IChjdXJyZC0+YXJjaC5wY2lfY2Y4ICYgMHhmYykgfCAoYWRkciAmIDB4Myk7Cj4gPiAr ICAgICAgICByYyA9IGh2bV9wdF9wY2lfcmVhZF9jb25maWcoZGV2LCByZWcsICZkYXRhMzIsIHNp emUpOwo+ID4gKyAgICAgICAgaWYgKCByYyA9PSBYODZFTVVMX09LQVkgKQo+ID4gKyAgICAgICAg ewo+ID4gKyAgICAgICAgICAgIHJlYWRfdW5sb2NrKCZjdXJyZC0+YXJjaC5odm1fZG9tYWluLnB0 X2xvY2spOwo+ID4gKyAgICAgICAgICAgICpkYXRhID0gZGF0YTMyOwo+ID4gKyAgICAgICAgICAg IHJldHVybiByYzsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgfQo+ID4gKyAgICByZWFkX3VubG9j aygmY3VycmQtPmFyY2guaHZtX2RvbWFpbi5wdF9sb2NrKTsKPiA+ICsKPiA+ICAgICAgaWYgKCBw Y2lfY2ZnX29rKGN1cnJkLCBhZGRyICYgMywgc2l6ZSwgTlVMTCkgKQo+ID4gICAgICAgICAgKmRh dGEgPSBwY2lfY29uZl9yZWFkKGN1cnJkLT5hcmNoLnBjaV9jZjgsIGFkZHIgJiAzLCBzaXplKTsK PiA+IAo+ID4gQEAgLTI4OCw3ICs2OTksMTAgQEAgc3RhdGljIGludCBod19kcGNpX3BvcnRpb193 cml0ZShjb25zdCBzdHJ1Y3QKPiA+IGh2bV9pb19oYW5kbGVyICpoYW5kbGVyLAo+ID4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZGF0YSkKPiA+ICB7Cj4gPiAgICAg IHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3VycmVudC0+ZG9tYWluOwo+ID4gKyAgICBzdHJ1Y3Qg aHZtX3B0X2RldmljZSAqZGV2Owo+ID4gICAgICB1aW50MzJfdCBkYXRhMzI7Cj4gPiArICAgIHVp bnQ4X3QgcmVnOwo+ID4gKyAgICBpbnQgcmM7Cj4gPiAKPiA+ICAgICAgaWYgKCBhZGRyID09IDB4 Y2Y4ICkKPiA+ICAgICAgewo+ID4gQEAgLTMwMiwxMiArNzE2LDIxOSBAQCBzdGF0aWMgaW50IGh3 X2RwY2lfcG9ydGlvX3dyaXRlKGNvbnN0IHN0cnVjdAo+ID4gaHZtX2lvX2hhbmRsZXIgKmhhbmRs ZXIsCj4gPiAgICAgIGlmICggc2l6ZSA9PSAzICkKPiA+ICAgICAgICAgIHNpemUgPSAyOwo+ID4g ICAgICBkYXRhMzIgPSBkYXRhOwo+ID4gKwo+ID4gKyAgICByZWFkX2xvY2soJmN1cnJkLT5hcmNo Lmh2bV9kb21haW4ucHRfbG9jayk7Cj4gPiArICAgIGRldiA9IGh3X2RwY2lfZ2V0X2RldmljZShj dXJyZCk7Cj4gPiArICAgIGlmICggZGV2ICE9IE5VTEwgKQo+ID4gKyAgICB7Cj4gPiArICAgICAg ICByZWcgPSAoY3VycmQtPmFyY2gucGNpX2NmOCAmIDB4ZmMpIHwgKGFkZHIgJiAweDMpOwo+ID4g KyAgICAgICAgcmMgPSBodm1fcHRfcGNpX3dyaXRlX2NvbmZpZyhkZXYsIHJlZywgZGF0YTMyLCBz aXplKTsKPiA+ICsgICAgICAgIGlmICggcmMgPT0gWDg2RU1VTF9PS0FZICkKPiA+ICsgICAgICAg IHsKPiA+ICsgICAgICAgICAgICByZWFkX3VubG9jaygmY3VycmQtPmFyY2guaHZtX2RvbWFpbi5w dF9sb2NrKTsKPiA+ICsgICAgICAgICAgICByZXR1cm4gcmM7Cj4gPiArICAgICAgICB9Cj4gPiAr ICAgIH0KPiA+ICsgICAgcmVhZF91bmxvY2soJmN1cnJkLT5hcmNoLmh2bV9kb21haW4ucHRfbG9j ayk7Cj4gPiArCj4gCj4gSSBtdXN0IGJlIG1pc3Npbmcgc29tZXRoaW5nIGhlcmUuIFdoeSBhcmUg eW91IGFkZGluZyBwYXNzdGhyb3VnaCBjb2RlIHRvIHRoZSBoYXJkd2FyZSBkb21haW4ncyBoYW5k bGVycz8gU3VyZWx5IGl0IHNlZXMgYWxsIGRldmljZXMgYW55d2F5PwoKWWVzLCBidXQgaXQgY2Fu bm90IGFjY2VzcyBzb21lIG9mIHRoZSByZWdpc3RlcnMgZGlyZWN0bHksIGZvciBleGFtcGxlIERv bTAgCmNhbm5vdCBjb25maWd1cmUgdGhlIE1TSSByZWdpc3RlcnMsIG9yIGVsc2UgWGVuIHdvdWxk IHN0YXJ0IHJlY2VpdmluZyAKaW50ZXJydXB0cyBmcm9tIHVuc2V0IHZlY3RvcnMuCgpBbGwgdGhp cyBpcyBkb25lIHNvIHRoYXQgWGVuIGNhbiBkZXRlY3QgYWNjZXNzZXMgdG8gc2Vuc2libGUgcmVn aXN0ZXJzIGFuZCAKcGVyZm9ybSBhcHByb3ByaWF0ZSBhY3Rpb25zLiBGb3IgZXhhbXBsZSwgZm9s bG93aW5nIHRoZSBNU0kgY2FzZSwgWGVuIHdpbGwgCmRldGVjdHMgdGhpcyBhY2Nlc3NlcyBhbmQg c2V0dXAgYW5kIGJpbmQgcHJvcGVyIFBJUlFzIGZvciB0aGUgZ3Vlc3QuCgo+ID4gICAgICBpZiAo IHBjaV9jZmdfb2soY3VycmQsIGFkZHIgJiAzLCBzaXplLCAmZGF0YTMyKSApCj4gPiAgICAgICAg ICBwY2lfY29uZl93cml0ZShjdXJyZC0+YXJjaC5wY2lfY2Y4LCBhZGRyICYgMywgc2l6ZSwgZGF0 YSk7Cj4gPiAKPiA+ICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKPiA+ICB9Cj4gPiAKPiA+ICtz dGF0aWMgdm9pZCBodm1fcHRfZnJlZV9kZXZpY2Uoc3RydWN0IGh2bV9wdF9kZXZpY2UgKmRldikK PiA+ICt7Cj4gPiArICAgIHN0cnVjdCBodm1fcHRfcmVnX2dyb3VwICpncm91cCwgKmc7Cj4gPiAr Cj4gPiArICAgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSggZ3JvdXAsIGcsICZkZXYtPnJlZ2lz dGVyX2dyb3VwcywgZW50cmllcyApCj4gPiArICAgIHsKPiA+ICsgICAgICAgIHN0cnVjdCBodm1f cHRfcmVnICpyZWcsICpyOwo+ID4gKwo+ID4gKyAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKCByZWcsIHIsICZncm91cC0+cmVnaXN0ZXJzLCBlbnRyaWVzICkKPiA+ICsgICAgICAgIHsK PiA+ICsgICAgICAgICAgICBsaXN0X2RlbCgmcmVnLT5lbnRyaWVzKTsKPiA+ICsgICAgICAgICAg ICB4ZnJlZShyZWcpOwo+ID4gKyAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgbGlzdF9kZWwo Jmdyb3VwLT5lbnRyaWVzKTsKPiA+ICsgICAgICAgIHhmcmVlKGdyb3VwKTsKPiA+ICsgICAgfQo+ ID4gKwo+ID4gKyAgICB4ZnJlZShkZXYpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IGh2 bV9wdF9hZGRfcmVnaXN0ZXIoc3RydWN0IGh2bV9wdF9kZXZpY2UgKmRldiwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGh2bV9wdF9yZWdfZ3JvdXAgKmdyb3VwLAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaHZtX3B0X3JlZ19oYW5k bGVyICpoYW5kbGVyKQo+ID4gK3sKPiA+ICsgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXYt PnBkZXY7Cj4gPiArICAgIHN0cnVjdCBodm1fcHRfcmVnICpyZWc7Cj4gPiArCj4gPiArICAgIHJl ZyA9IHhtYWxsb2Moc3RydWN0IGh2bV9wdF9yZWcpOwo+ID4gKyAgICBpZiAoIHJlZyA9PSBOVUxM ICkKPiA+ICsgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ID4gKwo+ID4gKyAgICBtZW1zZXQocmVn LCAwLCBzaXplb2YoKnJlZykpOwo+IAo+IHh6YWxsb2MoKT8KClRoYW5rcy4KCj4gPiArICAgIHJl Zy0+aGFuZGxlciA9IGhhbmRsZXI7Cj4gPiArICAgIGlmICggaGFuZGxlci0+aW5pdCAhPSBOVUxM ICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAgdWludDMyX3QgaG9zdF9tYXNrLCBzaXplX21hc2ss IGRhdGEgPSAwOwo+ID4gKyAgICAgICAgdWludDhfdCBzZWcsIGJ1cywgc2xvdCwgZnVuYzsKPiA+ ICsgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7Cj4gPiArICAgICAgICB1aW50MzJfdCB2YWw7 Cj4gPiArICAgICAgICBpbnQgcmM7Cj4gPiArCj4gPiArICAgICAgICAvKiBJbml0aWFsaXplIGVt dWxhdGUgcmVnaXN0ZXIgKi8KPiA+ICsgICAgICAgIHJjID0gaGFuZGxlci0+aW5pdChkZXYsIHJl Zy0+aGFuZGxlciwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cC0+YmFzZV9v ZmZzZXQgKyByZWctPmhhbmRsZXItPm9mZnNldCwgJmRhdGEpOwo+ID4gKyAgICAgICAgaWYgKCBy YyA8IDAgKQo+ID4gKyAgICAgICAgICAgIHJldHVybiByYzsKPiA+ICsKPiA+ICsgICAgICAgIGlm ICggZGF0YSA9PSBIVk1fUFRfSU5WQUxJRF9SRUcgKQo+ID4gKyAgICAgICAgewo+ID4gKyAgICAg ICAgICAgIHhmcmVlKHJlZyk7Cj4gPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPiArICAgICAg ICB9Cj4gPiArCj4gPiArICAgICAgICAvKiBTeW5jIHVwIHRoZSBkYXRhIHRvIHZhbCAqLwo+ID4g KyAgICAgICAgb2Zmc2V0ID0gZ3JvdXAtPmJhc2Vfb2Zmc2V0ICsgcmVnLT5oYW5kbGVyLT5vZmZz ZXQ7Cj4gPiArICAgICAgICBzaXplX21hc2sgPSAweEZGRkZGRkZGID4+ICgoNCAtIHJlZy0+aGFu ZGxlci0+c2l6ZSkgPDwgMyk7Cj4gPiArCj4gPiArICAgICAgICBzZWcgPSBwZGV2LT5zZWc7Cj4g PiArICAgICAgICBidXMgPSBwZGV2LT5idXM7Cj4gPiArICAgICAgICBzbG90ID0gUENJX1NMT1Qo cGRldi0+ZGV2Zm4pOwo+ID4gKyAgICAgICAgZnVuYyA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsK PiA+ICsKPiA+ICsgICAgICAgIHN3aXRjaCAoIHJlZy0+aGFuZGxlci0+c2l6ZSApCj4gPiArICAg ICAgICB7Cj4gPiArICAgICAgICBjYXNlIDE6Cj4gPiArICAgICAgICAgICAgdmFsID0gcGNpX2Nv bmZfcmVhZDgoc2VnLCBidXMsIHNsb3QsIGZ1bmMsIG9mZnNldCk7Cj4gPiArICAgICAgICAgICAg YnJlYWs7Cj4gPiArICAgICAgICBjYXNlIDI6Cj4gPiArICAgICAgICAgICAgdmFsID0gcGNpX2Nv bmZfcmVhZDE2KHNlZywgYnVzLCBzbG90LCBmdW5jLCBvZmZzZXQpOwo+ID4gKyAgICAgICAgICAg IGJyZWFrOwo+ID4gKyAgICAgICAgY2FzZSA0Ogo+ID4gKyAgICAgICAgICAgIHZhbCA9IHBjaV9j b25mX3JlYWQzMihzZWcsIGJ1cywgc2xvdCwgZnVuYywgb2Zmc2V0KTsKPiA+ICsgICAgICAgICAg ICBicmVhazsKPiA+ICsgICAgICAgIGRlZmF1bHQ6Cj4gPiArICAgICAgICAgICAgQlVHKCk7Cj4g PiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAvKgo+ID4gKyAgICAgICAgICogU2V0IGJp dHMgaW4gZW11X21hc2sgYXJlIHRoZSBvbmVzIHdlIGVtdWxhdGUuIFRoZSByZWcgc2hhbGwKPiA+ ICsgICAgICAgICAqIGNvbnRhaW4gdGhlIGVtdWxhdGVkIHZpZXcgb2YgdGhlIGd1ZXN0IC0gdGhl cmVmb3JlIHdlIGZsaXAKPiA+ICsgICAgICAgICAqIHRoZSBtYXNrIHRvIG1hc2sgb3V0IHRoZSBo b3N0IHZhbHVlcyAod2hpY2ggcmVnIGluaXRpYWxseQo+ID4gKyAgICAgICAgICogaGFzKS4KPiA+ ICsgICAgICAgICAqLwo+ID4gKyAgICAgICAgaG9zdF9tYXNrID0gc2l6ZV9tYXNrICYgfnJlZy0+ aGFuZGxlci0+ZW11X21hc2s7Cj4gPiArCj4gPiArICAgICAgICBpZiAoIChkYXRhICYgaG9zdF9t YXNrKSAhPSAodmFsICYgaG9zdF9tYXNrKSApCj4gPiArICAgICAgICB7Cj4gPiArICAgICAgICAg ICAgdWludDMyX3QgbmV3X3ZhbDsKPiA+ICsKPiA+ICsgICAgICAgICAgICAvKiBNYXNrIG91dCBo b3N0IChpbmNsdWRpbmcgcGFzdCBzaXplKS4gKi8KPiA+ICsgICAgICAgICAgICBuZXdfdmFsID0g dmFsICYgaG9zdF9tYXNrOwo+ID4gKyAgICAgICAgICAgIC8qIE1lcmdlIGVtdWxhdGVkIG9uZXMg KGV4Y2x1ZGluZyB0aGUgbm9uLWVtdWxhdGVkIG9uZXMpLiAqLwo+ID4gKyAgICAgICAgICAgIG5l d192YWwgfD0gZGF0YSAmIGhvc3RfbWFzazsKPiA+ICsgICAgICAgICAgICAvKgo+ID4gKyAgICAg ICAgICAgICAqIExlYXZlIGludGFjdCBob3N0IGFuZCBlbXVsYXRlZCB2YWx1ZXMgcGFzdCB0aGUg c2l6ZSAtCj4gPiArICAgICAgICAgICAgICogZXZlbiB0aG91Z2ggd2UgZG8gbm90IGNhcmUgYXMg d2Ugd3JpdGUgcGVyIHJlZy0+c2l6ZQo+ID4gKyAgICAgICAgICAgICAqIGdyYW51bGFyaXR5LCBi dXQgZm9yIHRoZSBsb2dnaW5nIGJlbG93IGxldHMgaGF2ZSB0aGUKPiA+ICsgICAgICAgICAgICAg KiBwcm9wZXIgdmFsdWUuCj4gPiArICAgICAgICAgICAgICovCj4gPiArICAgICAgICAgICAgbmV3 X3ZhbCB8PSAoKHZhbCB8IGRhdGEpKSAmIH5zaXplX21hc2s7Cj4gPiArICAgICAgICAgICAgcHJp bnRrX3BkZXYocGRldiwgWEVOTE9HX0VSUiwKPiA+ICsib2Zmc2V0IDB4JTA0eCBtaXNtYXRjaCEg RW11bGF0ZWQ9MHglMDR4LCBob3N0PTB4JTA0eCwgc3luY2luZyB0bwo+ID4gMHglMDR4LlxuIiwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIGRhdGEsIHZhbCwgbmV3X3ZhbCk7 Cj4gPiArICAgICAgICAgICAgdmFsID0gbmV3X3ZhbDsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAg ICAgIGVsc2UKPiA+ICsgICAgICAgICAgICB2YWwgPSBkYXRhOwo+ID4gKwo+ID4gKyAgICAgICAg aWYgKCB2YWwgJiB+c2l6ZV9tYXNrICkKPiA+ICsgICAgICAgIHsKPiA+ICsgICAgICAgICAgICBw cmludGtfcGRldihwZGV2LCBYRU5MT0dfRVJSLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgIk9m ZnNldCAweCUwNHg6MHglMDR4IGV4cGFuZHMgcGFzdCByZWdpc3RlciBzaXplKCVkKSFcbiIsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCB2YWwsIHJlZy0+aGFuZGxlci0+c2l6 ZSk7Cj4gPiArICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArICAgICAgICB9Cj4gPiAr Cj4gPiArICAgICAgICByZWctPnZhbC5kd29yZCA9IHZhbDsKPiA+ICsgICAgfQo+ID4gKyAgICBs aXN0X2FkZF90YWlsKCZyZWctPmVudHJpZXMsICZncm91cC0+cmVnaXN0ZXJzKTsKPiA+ICsKPiA+ ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgaHZtX3B0X2hh bmRsZXJfaW5pdCAqaHdkb21fcHRfaGFuZGxlcnNbXSA9IHsKPiA+ICt9Owo+ID4gKwo+ID4gK2lu dCBod2RvbV9hZGRfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQo+ID4gK3sKPiA+ICsgICAg c3RydWN0IGRvbWFpbiAqZCA9IHBkZXYtPmRvbWFpbjsKPiA+ICsgICAgc3RydWN0IGh2bV9wdF9k ZXZpY2UgKmRldjsKPiA+ICsgICAgaW50IGosIGksIHJjOwo+ID4gKwo+ID4gKyAgICBBU1NFUlQo IGlzX2hhcmR3YXJlX2RvbWFpbihkKSApOwo+ID4gKyAgICBBU1NFUlQoIHBjaWRldnNfbG9ja2Vk KCkgKTsKPiA+ICsKPiA+ICsgICAgZGV2ID0geG1hbGxvYyhzdHJ1Y3QgaHZtX3B0X2RldmljZSk7 Cj4gPiArICAgIGlmICggZGV2ID09IE5VTEwgKQo+ID4gKyAgICAgICAgcmV0dXJuIC1FTk9NRU07 Cj4gPiArCj4gPiArICAgIG1lbXNldChkZXYsIDAgLCBzaXplb2YoKmRldikpOwo+IAo+IHh6YWxs b2MoKT8KCkZpeGVkLgogCj4gPiArCj4gPiArICAgIGRldi0+cGRldiA9IHBkZXY7Cj4gPiArICAg IElOSVRfTElTVF9IRUFEKCZkZXYtPnJlZ2lzdGVyX2dyb3Vwcyk7Cj4gPiArCj4gPiArICAgIGRl di0+cGVybWlzc2l2ZSA9IG9wdF9kb20wcGVybWlzc2l2ZTsKPiA+ICsKPiA+ICsgICAgZm9yICgg aiA9IDA7IGogPCBBUlJBWV9TSVpFKGh3ZG9tX3B0X2hhbmRsZXJzKTsgaisrICkKPiA+ICsgICAg ewo+ID4gKyAgICAgICAgc3RydWN0IGh2bV9wdF9oYW5kbGVyX2luaXQgKmhhbmRsZXJfaW5pdCA9 IGh3ZG9tX3B0X2hhbmRsZXJzW2pdOwo+ID4gKyAgICAgICAgc3RydWN0IGh2bV9wdF9yZWdfZ3Jv dXAgKmdyb3VwOwo+ID4gKwo+ID4gKyAgICAgICAgZ3JvdXAgPSB4bWFsbG9jKHN0cnVjdCBodm1f cHRfcmVnX2dyb3VwKTsKPiA+ICsgICAgICAgIGlmICggZ3JvdXAgPT0gTlVMTCApCj4gPiArICAg ICAgICB7Cj4gPiArICAgICAgICAgICAgeGZyZWUoZGV2KTsKPiA+ICsgICAgICAgICAgICByZXR1 cm4gLUVOT01FTTsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgICAgIElOSVRfTElTVF9IRUFEKCZn cm91cC0+cmVnaXN0ZXJzKTsKPiA+ICsKPiA+ICsgICAgICAgIHJjID0gaGFuZGxlcl9pbml0LT5p bml0KGRldiwgZ3JvdXApOwo+ID4gKyAgICAgICAgaWYgKCByYyA9PSAwICkKPiA+ICsgICAgICAg IHsKPiA+ICsgICAgICAgICAgICBmb3IgKCBpID0gMDsgaGFuZGxlcl9pbml0LT5oYW5kbGVyc1tp XS5zaXplICE9IDA7IGkrKyApCj4gPiArICAgICAgICAgICAgewo+ID4gKyAgICAgICAgICAgICAg ICBpbnQgcmM7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgIHJjID0gaHZtX3B0X2FkZF9yZWdp c3RlcihkZXYsIGdyb3VwLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmhhbmRsZXJfaW5pdC0+aGFuZGxlcnNbaV0pOwo+ID4gKyAgICAgICAgICAgICAgICBp ZiAoIHJjICkKPiA+ICsgICAgICAgICAgICAgICAgewo+ID4gKyAgICAgICAgICAgICAgICAgICAg cHJpbnRrX3BkZXYocGRldiwgWEVOTE9HX0VSUiwgImVycm9yIGFkZGluZyByZWdpc3RlcjogJWRc biIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyk7Cj4gPiArICAgICAg ICAgICAgICAgICAgICBodm1fcHRfZnJlZV9kZXZpY2UoZGV2KTsKPiA+ICsgICAgICAgICAgICAg ICAgICAgIHJldHVybiByYzsKPiA+ICsgICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAg IH0KPiA+ICsKPiA+ICsgICAgICAgICAgICBsaXN0X2FkZF90YWlsKCZncm91cC0+ZW50cmllcywg JmRldi0+cmVnaXN0ZXJfZ3JvdXBzKTsKPiA+ICsgICAgICAgIH0KPiA+ICsgICAgICAgIGVsc2UK PiA+ICsgICAgICAgICAgICB4ZnJlZShncm91cCk7Cj4gPiArICAgIH0KPiA+ICsKPiA+ICsgICAg d3JpdGVfbG9jaygmZC0+YXJjaC5odm1fZG9tYWluLnB0X2xvY2spOwo+ID4gKyAgICBsaXN0X2Fk ZF90YWlsKCZkZXYtPmVudHJpZXMsICZkLT5hcmNoLmh2bV9kb21haW4ucHRfZGV2aWNlcyk7Cj4g PiArICAgIHdyaXRlX3VubG9jaygmZC0+YXJjaC5odm1fZG9tYWluLnB0X2xvY2spOwo+ID4gKyAg ICBwcmludGtfcGRldihwZGV2LCBYRU5MT0dfREVCVUcsICJhZGRlZCBmb3IgcGFzcy10aHJvdWdo XG4iKTsKPiA+ICsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gIHN0YXRpYyBj b25zdCBzdHJ1Y3QgaHZtX2lvX29wcyBkcGNpX3BvcnRpb19vcHMgPSB7Cj4gPiAgICAgIC5hY2Nl cHQgPSBkcGNpX3BvcnRpb19hY2NlcHQsCj4gPiAgICAgIC5yZWFkID0gZHBjaV9wb3J0aW9fcmVh ZCwKPiA+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9kb21haW4uaCBiL3hl bi9pbmNsdWRlL2FzbS0KPiA+IHg4Ni9odm0vZG9tYWluLmgKPiA+IGluZGV4IGYzNGQ3ODQuLjFi MWE1MmYgMTAwNjQ0Cj4gPiAtLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9kb21haW4uaAo+ ID4gKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vZG9tYWluLmgKPiA+IEBAIC0xNTIsNiAr MTUyLDEwIEBAIHN0cnVjdCBodm1fZG9tYWluIHsKPiA+ICAgICAgICAgIHN0cnVjdCB2bXhfZG9t YWluIHZteDsKPiA+ICAgICAgICAgIHN0cnVjdCBzdm1fZG9tYWluIHN2bTsKPiA+ICAgICAgfTsK PiA+ICsKPiA+ICsgICAgLyogTGlzdCBvZiBwYXNzZWQtdGhyb3VnaCBkZXZpY2VzIChodyBkb21h aW4gb25seSkuICovCj4gPiArICAgIHN0cnVjdCBsaXN0X2hlYWQgcHRfZGV2aWNlczsKPiA+ICsg ICAgcndsb2NrX3QgcHRfbG9jazsKPiA+ICB9Owo+ID4gCj4gPiAgI2RlZmluZSBoYXBfZW5hYmxl ZChkKSAgKChkKS0+YXJjaC5odm1fZG9tYWluLmhhcF9lbmFibGVkKQo+ID4gZGlmZiAtLWdpdCBh L3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2lvLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9p by5oCj4gPiBpbmRleCBlOWIzZjgzLi44MGY4MzBkIDEwMDY0NAo+ID4gLS0tIGEveGVuL2luY2x1 ZGUvYXNtLXg4Ni9odm0vaW8uaAo+ID4gKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW8u aAo+ID4gQEAgLTE1Myw2ICsxNTMsMTgyIEBAIGV4dGVybiB2b2lkIGh2bV9kcGNpX21zaV9lb2ko c3RydWN0IGRvbWFpbiAqZCwKPiA+IGludCB2ZWN0b3IpOwo+ID4gCj4gPiAgdm9pZCByZWdpc3Rl cl9kcGNpX3BvcnRpb19oYW5kbGVyKHN0cnVjdCBkb21haW4gKmQpOwo+ID4gCj4gPiArLyogU3Ry dWN0dXJlcyBmb3IgcGNpLXBhc3N0aHJvdWdoIHN0YXRlIGFuZCBoYW5kbGVycy4gKi8KPiA+ICtz dHJ1Y3QgaHZtX3B0X2RldmljZTsKPiA+ICtzdHJ1Y3QgaHZtX3B0X3JlZ19oYW5kbGVyOwo+ID4g K3N0cnVjdCBodm1fcHRfcmVnOwo+ID4gK3N0cnVjdCBodm1fcHRfcmVnX2dyb3VwOwo+ID4gKwo+ ID4gKy8qIFJldHVybiBjb2RlIHdoZW4gcmVnaXN0ZXIgc2hvdWxkIGJlIGlnbm9yZWQuICovCj4g PiArI2RlZmluZSBIVk1fUFRfSU5WQUxJRF9SRUcgMHhGRkZGRkZGRgo+ID4gKwo+ID4gKy8qIGZ1 bmN0aW9uIHR5cGUgZm9yIGNvbmZpZyByZWcgKi8KPiA+ICt0eXBlZGVmIGludCAoKmh2bV9wdF9j b25mX3JlZ19pbml0KQo+ID4gKyAgICAoc3RydWN0IGh2bV9wdF9kZXZpY2UgKiwgc3RydWN0IGh2 bV9wdF9yZWdfaGFuZGxlciAqLCB1aW50MzJfdAo+ID4gcmVhbF9vZmZzZXQsCj4gPiArICAgICB1 aW50MzJfdCAqZGF0YSk7Cj4gPiArCj4gPiArdHlwZWRlZiBpbnQgKCpodm1fcHRfY29uZl9kd29y ZF93cml0ZSkKPiA+ICsgICAgKHN0cnVjdCBodm1fcHRfZGV2aWNlICosIHN0cnVjdCBodm1fcHRf cmVnICpjZmdfZW50cnksCj4gPiArICAgICB1aW50MzJfdCAqdmFsLCB1aW50MzJfdCBkZXZfdmFs dWUsIHVpbnQzMl90IHZhbGlkX21hc2spOwo+ID4gK3R5cGVkZWYgaW50ICgqaHZtX3B0X2NvbmZf d29yZF93cml0ZSkKPiA+ICsgICAgKHN0cnVjdCBodm1fcHRfZGV2aWNlICosIHN0cnVjdCBodm1f cHRfcmVnICpjZmdfZW50cnksCj4gPiArICAgICB1aW50MTZfdCAqdmFsLCB1aW50MTZfdCBkZXZf dmFsdWUsIHVpbnQxNl90IHZhbGlkX21hc2spOwo+ID4gK3R5cGVkZWYgaW50ICgqaHZtX3B0X2Nv bmZfYnl0ZV93cml0ZSkKPiA+ICsgICAgKHN0cnVjdCBodm1fcHRfZGV2aWNlICosIHN0cnVjdCBo dm1fcHRfcmVnICpjZmdfZW50cnksCj4gPiArICAgICB1aW50OF90ICp2YWwsIHVpbnQ4X3QgZGV2 X3ZhbHVlLCB1aW50OF90IHZhbGlkX21hc2spOwo+ID4gK3R5cGVkZWYgaW50ICgqaHZtX3B0X2Nv bmZfZHdvcmRfcmVhZCkKPiA+ICsgICAgKHN0cnVjdCBodm1fcHRfZGV2aWNlICosIHN0cnVjdCBo dm1fcHRfcmVnICpjZmdfZW50cnksCj4gPiArICAgICB1aW50MzJfdCAqdmFsLCB1aW50MzJfdCB2 YWxpZF9tYXNrKTsKPiA+ICt0eXBlZGVmIGludCAoKmh2bV9wdF9jb25mX3dvcmRfcmVhZCkKPiA+ ICsgICAgKHN0cnVjdCBodm1fcHRfZGV2aWNlICosIHN0cnVjdCBodm1fcHRfcmVnICpjZmdfZW50 cnksCj4gPiArICAgICB1aW50MTZfdCAqdmFsLCB1aW50MTZfdCB2YWxpZF9tYXNrKTsKPiA+ICt0 eXBlZGVmIGludCAoKmh2bV9wdF9jb25mX2J5dGVfcmVhZCkKPiA+ICsgICAgKHN0cnVjdCBodm1f cHRfZGV2aWNlICosIHN0cnVjdCBodm1fcHRfcmVnICpjZmdfZW50cnksCj4gPiArICAgICB1aW50 OF90ICp2YWwsIHVpbnQ4X3QgdmFsaWRfbWFzayk7Cj4gPiArCj4gPiArdHlwZWRlZiBpbnQgKCpo dm1fcHRfZ3JvdXBfaW5pdCkKPiA+ICsgICAgKHN0cnVjdCBodm1fcHRfZGV2aWNlICosIHN0cnVj dCBodm1fcHRfcmVnX2dyb3VwICopOwo+ID4gKwo+ID4gKy8qCj4gPiArICogRW11bGF0ZWQgcmVn aXN0ZXIgaW5mb3JtYXRpb24uCj4gPiArICoKPiA+ICsgKiBUaGlzIHNob3VsZCBiZSBzaGFyZWQg YmV0d2VlbiBhbGwgdGhlIGNvbnN1bWVycyB0aGF0IHRyYXAgb24gYWNjZXNzZXMKPiA+ICsgKiB0 byBjZXJ0YWluIFBDSSByZWdpc3RlcnMuCj4gPiArICovCj4gPiArc3RydWN0IGh2bV9wdF9yZWdf aGFuZGxlciB7Cj4gPiArICAgIHVpbnQzMl90IG9mZnNldDsKPiA+ICsgICAgdWludDMyX3Qgc2l6 ZTsKPiA+ICsgICAgdWludDMyX3QgaW5pdF92YWw7Cj4gPiArICAgIC8qIHJlZyByZXNlcnZlZCBm aWVsZCBtYXNrIChPTjpyZXNlcnZlZCwgT0ZGOmRlZmluZWQpICovCj4gPiArICAgIHVpbnQzMl90 IHJlc19tYXNrOwo+ID4gKyAgICAvKiByZWcgcmVhZCBvbmx5IGZpZWxkIG1hc2sgKE9OOlJPL1JP UywgT0ZGOm90aGVyKSAqLwo+ID4gKyAgICB1aW50MzJfdCByb19tYXNrOwo+ID4gKyAgICAvKiBy ZWcgcmVhZC93cml0ZS0xLWNsZWFyIGZpZWxkIG1hc2sgKE9OOlJXMUMvUlcxQ1MsIE9GRjpvdGhl cikgKi8KPiA+ICsgICAgdWludDMyX3QgcncxY19tYXNrOwo+ID4gKyAgICAvKiByZWcgZW11bGF0 ZSBmaWVsZCBtYXNrIChPTjplbXUsIE9GRjpwYXNzdGhyb3VnaCkgKi8KPiA+ICsgICAgdWludDMy X3QgZW11X21hc2s7Cj4gPiArICAgIGh2bV9wdF9jb25mX3JlZ19pbml0IGluaXQ7Cj4gPiArICAg IC8qIHJlYWQvd3JpdGUgZnVuY3Rpb24gcG9pbnRlcgo+ID4gKyAgICAgKiBmb3IgZG91YmxlX3dv cmQvd29yZC9ieXRlIHNpemUgKi8KPiA+ICsgICAgdW5pb24gewo+ID4gKyAgICAgICAgc3RydWN0 IHsKPiA+ICsgICAgICAgICAgICBodm1fcHRfY29uZl9kd29yZF93cml0ZSB3cml0ZTsKPiA+ICsg ICAgICAgICAgICBodm1fcHRfY29uZl9kd29yZF9yZWFkIHJlYWQ7Cj4gPiArICAgICAgICB9IGR3 Owo+ID4gKyAgICAgICAgc3RydWN0IHsKPiA+ICsgICAgICAgICAgICBodm1fcHRfY29uZl93b3Jk X3dyaXRlIHdyaXRlOwo+ID4gKyAgICAgICAgICAgIGh2bV9wdF9jb25mX3dvcmRfcmVhZCByZWFk Owo+ID4gKyAgICAgICAgfSB3Owo+ID4gKyAgICAgICAgc3RydWN0IHsKPiA+ICsgICAgICAgICAg ICBodm1fcHRfY29uZl9ieXRlX3dyaXRlIHdyaXRlOwo+ID4gKyAgICAgICAgICAgIGh2bV9wdF9j b25mX2J5dGVfcmVhZCByZWFkOwo+ID4gKyAgICAgICAgfSBiOwo+ID4gKyAgICB9IHU7Cj4gPiAr fTsKPiA+ICsKPiA+ICtzdHJ1Y3QgaHZtX3B0X2hhbmRsZXJfaW5pdCB7Cj4gPiArICAgIHN0cnVj dCBodm1fcHRfcmVnX2hhbmRsZXIgKmhhbmRsZXJzOwo+ID4gKyAgICBodm1fcHRfZ3JvdXBfaW5p dCBpbml0Owo+ID4gK307Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBFbXVsYXRlZCByZWdpc3RlciB2 YWx1ZS4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGVhY2gg c3BlY2lmaWMgZW11bGF0ZWQgcmVnaXN0ZXIuCj4gPiArICovCj4gPiArc3RydWN0IGh2bV9wdF9y ZWcgewo+ID4gKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIGVudHJpZXM7Cj4gPiArICAgIHN0cnVjdCBo dm1fcHRfcmVnX2hhbmRsZXIgKmhhbmRsZXI7Cj4gPiArICAgIHVuaW9uIHsKPiA+ICsgICAgICAg IHVpbnQ4X3QgICBieXRlOwo+ID4gKyAgICAgICAgdWludDE2X3QgIHdvcmQ7Cj4gPiArICAgICAg ICB1aW50MzJfdCAgZHdvcmQ7Cj4gPiArICAgIH0gdmFsOwo+ID4gK307Cj4gPiArCj4gPiArLyoK PiA+ICsgKiBFbXVsYXRlZCByZWdpc3RlciBncm91cC4KPiA+ICsgKgo+ID4gKyAqIEluIG9yZGVy IHRvIHNwZWVkIHVwIChhbmQgbG9naWNhbGx5IGdyb3VwKSBlbXVsYXRlZCByZWdpc3RlcnMgc2Vh cmNoLAo+ID4gKyAqIGdyb3VwcyBhcmUgdXNlZCB0aGF0IHJlcHJlc2VudCBzcGVjaWZpYyBlbXVs YXRlZCBmZWF0dXJlcywgbGlrZSBNU0kuCj4gPiArICovCj4gPiArc3RydWN0IGh2bV9wdF9yZWdf Z3JvdXAgewo+ID4gKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIGVudHJpZXM7Cj4gPiArICAgIHVpbnQz Ml90IGJhc2Vfb2Zmc2V0Owo+ID4gKyAgICB1aW50OF90IHNpemU7Cj4gPiArICAgIHN0cnVjdCBs aXN0X2hlYWQgcmVnaXN0ZXJzOwo+ID4gK307Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBHdWVzdCBN U0kgaW5mb3JtYXRpb24uCj4gPiArICoKPiA+ICsgKiBNU0kgdmFsdWVzIHNldCBieSB0aGUgZ3Vl c3QuCj4gPiArICovCj4gPiArc3RydWN0IGh2bV9wdF9tc2kgewo+ID4gKyAgICB1aW50MTZfdCBm bGFnczsKPiA+ICsgICAgdWludDMyX3QgYWRkcl9sbzsgIC8qIGd1ZXN0IG1lc3NhZ2UgYWRkcmVz cyAqLwo+ID4gKyAgICB1aW50MzJfdCBhZGRyX2hpOyAgLyogZ3Vlc3QgbWVzc2FnZSB1cHBlciBh ZGRyZXNzICovCj4gPiArICAgIHVpbnQxNl90IGRhdGE7ICAgICAvKiBndWVzdCBtZXNzYWdlIGRh dGEgKi8KPiA+ICsgICAgdWludDMyX3QgY3RybF9vZmZzZXQ7IC8qIHNhdmVkIGNvbnRyb2wgb2Zm c2V0ICovCj4gPiArICAgIGludCBwaXJxOyAgICAgICAgICAvKiBndWVzdCBwaXJxIGNvcnJlc3Bv bmRpbmcgKi8KPiA+ICsgICAgYm9vbF90IGluaXRpYWxpemVkOyAgLyogd2hlbiBndWVzdCBNU0kg aXMgaW5pdGlhbGl6ZWQgKi8KPiA+ICsgICAgYm9vbF90IG1hcHBlZDsgICAgICAgLyogd2hlbiBw aXJxIGlzIG1hcHBlZCAqLwo+ID4gK307Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBHdWVzdCBwYXNz ZWQtdGhyb3VnaCBQQ0kgZGV2aWNlLgo+ID4gKyAqLwo+ID4gK3N0cnVjdCBodm1fcHRfZGV2aWNl IHsKPiA+ICsgICAgc3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOwo+ID4gKwo+ID4gKyAgICBzdHJ1 Y3QgcGNpX2RldiAqcGRldjsKPiA+ICsKPiA+ICsgICAgYm9vbF90IHBlcm1pc3NpdmU7Cj4gPiAr ICAgIGJvb2xfdCBwZXJtaXNzaXZlX3dhcm5lZDsKPiA+ICsKPiA+ICsgICAgLyogTVNJIHN0YXR1 cy4gKi8KPiA+ICsgICAgc3RydWN0IGh2bV9wdF9tc2kgbXNpOwo+ID4gKwo+ID4gKyAgICBzdHJ1 Y3QgbGlzdF9oZWFkIHJlZ2lzdGVyX2dyb3VwczsKPiA+ICt9Owo+ID4gKwo+ID4gKy8qCj4gPiAr ICogVGhlIGhpZXJhcmNoeSBvZiB0aGUgYWJvdmUgc3RydWN0dXJlcyBpcyB0aGUgZm9sbG93aW5n Ogo+ID4gKyAqCj4gPiArICogKy0tLS0tLS0tLS0tLS0tLSsgICAgICAgICArLS0tLS0tLS0tLS0t LS0tKwo+ID4gKyAqIHwgICAgICAgICAgICAgICB8IGVudHJpZXMgfCAgICAgICAgICAgICAgIHwg Li4uCj4gPiArICogfCBodm1fcHRfZGV2aWNlICstLS0tLS0tLS0rIGh2bV9wdF9kZXZpY2UgKy0t LS0rCj4gPiArICogfCAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgfAo+ ID4gKyAqICstKy0tLS0tLS0tLS0tLS0rICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSsKPiA+ICsg KiAgIHwKPiA+ICsgKiAgIHwgcmVnaXN0ZXJfZ3JvdXBzCj4gPiArICogICB8Cj4gPiArICogKy12 LS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLSsKPiA+ICsgKiB8 ICAgICAgICAgICAgICAgICAgfCBlbnRyaWVzICB8ICAgICAgICAgICAgICAgICAgfCAuLi4KPiA+ ICsgKiB8IGh2bV9wdF9yZWdfZ3JvdXAgKy0tLS0tLS0tLS0rIGh2bV9wdF9yZWdfZ3JvdXAgKy0t LS0rCj4gPiArICogfCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAg ICAgIHwKPiA+ICsgKiArLSstLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICArLS0tLS0tLS0tLS0t LS0tLS0tKwo+ID4gKyAqICAgfAo+ID4gKyAqICAgfCByZWdpc3RlcnMKPiA+ICsgKiAgIHwKPiA+ ICsgKiArLXYtLS0tLS0tLS0tKyAgICAgICAgICAgICstLS0tLS0tLS0tLS0rCj4gPiArICogfCAg ICAgICAgICAgIHwgZW50cmllcyAgICB8ICAgICAgICAgICAgfCAuLi4KPiA+ICsgKiB8IGh2bV9w dF9yZWcgKy0tLS0tLS0tLS0tLSsgaHZtX3B0X3JlZyArLS0tLSsKPiA+ICsgKiB8ICAgICAgICAg ICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICB8Cj4gPiArICogKy0rLS0tLS0tLS0tLSsgICAg ICAgICAgICArLSstLS0tLS0tLS0tKwo+ID4gKyAqICAgfCAgICAgICAgICAgICAgICAgICAgICAg ICB8Cj4gPiArICogICB8IGhhbmRsZXIgICAgICAgICAgICAgICAgIHwgaGFuZGxlcgo+ID4gKyAq ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4gPiArICogKy12LS0tLS0tLS0tLS0tLS0t LS0tKyAgICArLXYtLS0tLS0tLS0tLS0tLS0tLS0rCj4gPiArICogfCAgICAgICAgICAgICAgICAg ICAgfCAgICB8ICAgICAgICAgICAgICAgICAgICB8Cj4gPiArICogfCBodm1fcHRfcmVnX2hhbmRs ZXIgfCAgICB8IGh2bV9wdF9yZWdfaGFuZGxlciB8Cj4gPiArICogfCAgICAgICAgICAgICAgICAg ICAgfCAgICB8ICAgICAgICAgICAgICAgICAgICB8Cj4gPiArICogKy0tLS0tLS0tLS0tLS0tLS0t LS0tKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gPiArICovCj4gPiArCj4gPiArLyogSGVs cGVyIHRvIGFkZCBwYXNzZWQtdGhyb3VnaCBkZXZpY2VzIHRvIHRoZSBoYXJkd2FyZSBkb21haW4u ICovCj4gPiAraW50IGh3ZG9tX2FkZF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwo+ID4g Kwo+ID4gICNlbmRpZiAvKiBfX0FTTV9YODZfSFZNX0lPX0hfXyAqLwo+ID4gCj4gPiAKPiA+IGRp ZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vcGNpLmggYi94ZW4vaW5jbHVkZS94ZW4vcGNpLmgK PiA+IGluZGV4IGYxOTE3NzMuLmIyMWE4OTEgMTAwNjQ0Cj4gPiAtLS0gYS94ZW4vaW5jbHVkZS94 ZW4vcGNpLmgKPiA+ICsrKyBiL3hlbi9pbmNsdWRlL3hlbi9wY2kuaAo+ID4gQEAgLTkwLDYgKzkw LDExIEBAIHN0cnVjdCBwY2lfZGV2IHsKPiA+ICAgICAgdTY0IHZmX3JsZW5bNl07Cj4gPiAgfTsK PiA+IAo+ID4gKy8qIEhlbHBlciBmb3IgcHJpbnRpbmcgcGNpX2RldiByZWxhdGVkIG1lc3NhZ2Vz LiAqLwo+ID4gKyNkZWZpbmUgcHJpbnRrX3BkZXYocGRldiwgbHZsLCBmbXQsIC4uLikgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gKyAgICBwcmludGsobHZsICJQQ0kgJTA0 eDolMDJ4OiUwMnguJXU6ICIgZm10LCBwZGV2LT5zZWcsIHBkZXYtPmJ1cywgICAgICBcCj4gPiAr ICAgICAgICAgICBQQ0lfU0xPVChwZGV2LT5kZXZmbiksIFBDSV9GVU5DKHBkZXYtPmRldmZuKSwg IyNfX1ZBX0FSR1NfXykKPiA+ICsKPiA+ICAjZGVmaW5lIGZvcl9lYWNoX3BkZXYoZG9tYWluLCBw ZGV2KSBcCj4gPiAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkocGRldiwgJihkb21haW4tPmFyY2gu cGRldl9saXN0KSwgZG9tYWluX2xpc3QpCj4gPiAKPiA+IC0tCj4gPiAyLjcuNCAoQXBwbGUgR2l0 LTY2KQo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K WGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xp c3RzLnhlbi5vcmcveGVuLWRldmVsCg==