From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liam Girdwood Subject: Re: [PATCH v2] NUC900/audio: add nuc900 audio driver support Date: Wed, 19 May 2010 11:55:24 +0100 Message-ID: <1274266524.3240.106.camel@odin> References: <4BF2289A.9030609@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wy0-f179.google.com (mail-wy0-f179.google.com [74.125.82.179]) by alsa0.perex.cz (Postfix) with ESMTP id ECABC24614 for ; Wed, 19 May 2010 12:55:30 +0200 (CEST) Received: by wyb32 with SMTP id 32so761624wyb.38 for ; Wed, 19 May 2010 03:55:30 -0700 (PDT) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: alsa-devel-bounces@alsa-project.org Errors-To: alsa-devel-bounces@alsa-project.org To: Wan ZongShun Cc: alsa-devel , Mark Brown , linux-arm-kernel , zswan@marvell.com List-Id: alsa-devel@alsa-project.org T24gV2VkLCAyMDEwLTA1LTE5IGF0IDE2OjA3ICswODAwLCBXYW4gWm9uZ1NodW4gd3JvdGU6Cj4g SGkgTWFyaywKPiAKPiBIb3cgYWJvdXQgdGhpcyBwYXRjaD8KPiBDb3VsZCBpdCBiZSBtZXJnZWQg aW50byBtYWlubGluZT8KClNvbWUgbWlub3IgY29tbWVudHMgaW5saW5lLgoKPiAKPiBUaGFua3Mh Cj4gCj4g5ZyoIDIwMTDlubQ15pyIMTjml6Ug5LiL5Y2IMTo0Me+8jFdhbiBab25nU2h1biA8bWN1 b3MuY29tQGdtYWlsLmNvbT4g5YaZ6YGT77yaCj4gPiBEZWFyIE1hcmssCj4gPgo+ID4gSSBoYXZl IG1vZGlmaWVkIHNvbWUgY29kZXMgYWNjb3JkaW5nIHRvIHlvdXIgY29tbWVudHMsCj4gPiBub3cg SSBzdWJtaXQgdGhlIHBhdGNoIGFzIHYyIGFnYWluLgo+ID4KPiA+IFRoYW5rcyBhIGxvdCBmb3Ig eW91ciBoZWxwLgo+ID4KPiA+IFNpZ25lZC1vZmYtYnk6IFdhbiBab25nU2h1bjxtY3Vvcy5jb21A Z21haWwuY29tPgo+ID4gLS0tCj4gPiAgc291bmQvc29jL0tjb25maWcgICAgICAgICAgICAgICB8 ICAgIDEgKwo+ID4gIHNvdW5kL3NvYy9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgICAxICsKPiA+ ICBzb3VuZC9zb2MvbnVjOTAwL0tjb25maWcgICAgICAgIHwgICAyNyArKysKPiA+ICBzb3VuZC9z b2MvbnVjOTAwL01ha2VmaWxlICAgICAgIHwgICAxMSArCj4gPiAgc291bmQvc29jL251YzkwMC9u dWM5MDAtYWM5Ny5jICB8ICA0NDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gPiAgc291bmQvc29jL251YzkwMC9udWM5MDAtYXVkaW8uYyB8ICAgODEgKysrKysrKwo+ ID4gIHNvdW5kL3NvYy9udWM5MDAvbnVjOTAwLWF1aWRvLmggfCAgMTIxICsrKysrKysrKysrCj4g PiAgc291bmQvc29jL251YzkwMC9udWM5MDAtcGNtLmMgICB8ICAzNTIgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ID4gIDggZmlsZXMgY2hhbmdlZCwgMTAzNyBpbnNlcnRpb25zKCsp LCAwIGRlbGV0aW9ucygtKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2MvbnVjOTAw L0tjb25maWcKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgc291bmQvc29jL251YzkwMC9NYWtlZmls ZQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2MvbnVjOTAwL251YzkwMC1hYzk3LmMK PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgc291bmQvc29jL251YzkwMC9udWM5MDAtYXVkaW8uYwo+ ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3VuZC9zb2MvbnVjOTAwL251YzkwMC1hdWlkby5oCj4g PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHNvdW5kL3NvYy9udWM5MDAvbnVjOTAwLXBjbS5jCj4gPgo+ ID4gZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9LY29uZmlnIGIvc291bmQvc29jL0tjb25maWcKPiA+ IGluZGV4IGIxNzQ5YmMuLjZlMDRmYzIgMTAwNjQ0Cj4gPiAtLS0gYS9zb3VuZC9zb2MvS2NvbmZp Zwo+ID4gKysrIGIvc291bmQvc29jL0tjb25maWcKPiA+IEBAIC0zMCw2ICszMCw3IEBAIHNvdXJj ZSAic291bmQvc29jL2JsYWNrZmluL0tjb25maWciCj4gPiAgc291cmNlICJzb3VuZC9zb2MvZGF2 aW5jaS9LY29uZmlnIgo+ID4gIHNvdXJjZSAic291bmQvc29jL2ZzbC9LY29uZmlnIgo+ID4gIHNv dXJjZSAic291bmQvc29jL2lteC9LY29uZmlnIgo+ID4gK3NvdXJjZSAic291bmQvc29jL251Yzkw MC9LY29uZmlnIgo+ID4gIHNvdXJjZSAic291bmQvc29jL29tYXAvS2NvbmZpZyIKPiA+ICBzb3Vy Y2UgInNvdW5kL3NvYy9weGEvS2NvbmZpZyIKPiA+ICBzb3VyY2UgInNvdW5kL3NvYy9zM2MyNHh4 L0tjb25maWciCj4gPiBkaWZmIC0tZ2l0IGEvc291bmQvc29jL01ha2VmaWxlIGIvc291bmQvc29j L01ha2VmaWxlCj4gPiBpbmRleCAxNDcwMTQxLi5jY2VjMjQxIDEwMDY0NAo+ID4gLS0tIGEvc291 bmQvc29jL01ha2VmaWxlCj4gPiArKysgYi9zb3VuZC9zb2MvTWFrZWZpbGUKPiA+IEBAIC04LDYg KzgsNyBAQCBvYmotJChDT05GSUdfU05EX1NPQykgICArPSBibGFja2Zpbi8KPiA+ICBvYmotJChD T05GSUdfU05EX1NPQykgICs9IGRhdmluY2kvCj4gPiAgb2JqLSQoQ09ORklHX1NORF9TT0MpICAr PSBmc2wvCj4gPiAgb2JqLSQoQ09ORklHX1NORF9TT0MpICAgKz0gaW14Lwo+ID4gK29iai0kKENP TkZJR19TTkRfU09DKSAgKz0gbnVjOTAwLwo+ID4gIG9iai0kKENPTkZJR19TTkRfU09DKSAgKz0g b21hcC8KPiA+ICBvYmotJChDT05GSUdfU05EX1NPQykgICs9IHB4YS8KPiA+ICBvYmotJChDT05G SUdfU05EX1NPQykgICs9IHMzYzI0eHgvCj4gPiBkaWZmIC0tZ2l0IGEvc291bmQvc29jL251Yzkw MC9LY29uZmlnIGIvc291bmQvc29jL251YzkwMC9LY29uZmlnCj4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uYTBlZDFjNgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysr IGIvc291bmQvc29jL251YzkwMC9LY29uZmlnCj4gPiBAQCAtMCwwICsxLDI3IEBACj4gPiArIyMK PiA+ICsjIyBOVUM5MDAgc2VyaWVzIEFDOTcgQVBJCj4gPiArIyMKPiA+ICtjb25maWcgU05EX1NP Q19OVUM5MDAKPiA+ICsgICAgICAgdHJpc3RhdGUgIlNvQyBBdWRpbyBmb3IgTlVDOTAwIHNlcmll cyIKPiA+ICsgICAgICAgZGVwZW5kcyBvbiBBUkNIX1c5MFg5MDAKPiA+ICsgICAgICAgaGVscAo+ ID4gKyAgICAgICAgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgQUM5NyBtb2RlIG9u IHRoZSBOVUM5MDAgU29DLgo+ID4gKwo+ID4gK2NvbmZpZyBTTkRfU09DX05VQzkwMF9BQzk3Cj4g PiArICAgICAgIHRyaXN0YXRlCj4gPiArICAgICAgIHNlbGVjdCBBQzk3X0JVUwo+ID4gKyAgICAg ICBzZWxlY3QgU05EX0FDOTdfQ09ERUMKPiA+ICsgICAgICAgc2VsZWN0IFNORF9TT0NfQUM5N19C VVMKPiA+ICsKPiA+ICsKPiA+ICsjIwo+ID4gKyMjIEJvYXJkcwo+ID4gKyMjCj4gPiArY29uZmln IFNORF9TT0NfTlVDOTAwRVZCCj4gPiArICAgICAgIHRyaXN0YXRlICJOVUM5MDAgQUM5NyBzdXBw b3J0IGZvciBkZW1vIGJvYXJkIgo+ID4gKyAgICAgICBkZXBlbmRzIG9uIFNORF9TT0NfTlVDOTAw Cj4gPiArICAgICAgIHNlbGVjdCBTTkRfU09DX05VQzkwMF9BQzk3Cj4gPiArICAgICAgIHNlbGVj dCBTTkRfU09DX0FDOTdfQ09ERUMKPiA+ICsgICAgICAgaGVscAo+ID4gKyAgICAgICAgIFNlbGVj dCB0aGlzIG9wdGlvbiB0byBlbmFibGUgYXVkaW8gKEFDOTcpIG9uIHRoZQo+ID4gKyAgICAgICAg IE5VQzkwMCBkZW1vYm9hcmQuCj4gPiBkaWZmIC0tZ2l0IGEvc291bmQvc29jL251YzkwMC9NYWtl ZmlsZSBiL3NvdW5kL3NvYy9udWM5MDAvTWFrZWZpbGUKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gPiBpbmRleCAwMDAwMDAwLi43ZTQ2YzcxCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9z b3VuZC9zb2MvbnVjOTAwL01ha2VmaWxlCj4gPiBAQCAtMCwwICsxLDExIEBACj4gPiArIyBOVUM5 MDAgc2VyaWVzIGF1ZGlvCj4gPiArc25kLXNvYy1udWM5MDAtcGNtLW9ianMgOj0gbnVjOTAwLXBj bS5vCj4gPiArc25kLXNvYy1udWM5MDAtYWM5Ny1vYmpzIDo9IG51YzkwMC1hYzk3Lm8KPiA+ICsK PiA+ICtvYmotJChDT05GSUdfU05EX1NPQ19OVUM5MDApICs9IHNuZC1zb2MtbnVjOTAwLXBjbS5v Cj4gPiArb2JqLSQoQ09ORklHX1NORF9TT0NfTlVDOTAwX0FDOTcpICs9IHNuZC1zb2MtbnVjOTAw LWFjOTcubwo+ID4gKwo+ID4gKyMgQm9hcmRzCj4gPiArc25kLXNvYy1udWM5MDAtYXVkaW8tb2Jq cyA6PSBudWM5MDAtYXVkaW8ubwo+ID4gKwo+ID4gK29iai0kKENPTkZJR19TTkRfU09DX05VQzkw MEVWQikgKz0gc25kLXNvYy1udWM5MDAtYXVkaW8ubwo+ID4gZGlmZiAtLWdpdCBhL3NvdW5kL3Nv Yy9udWM5MDAvbnVjOTAwLWFjOTcuYyBiL3NvdW5kL3NvYy9udWM5MDAvbnVjOTAwLWFjOTcuYwo+ ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLjJjMzQ1ZTIKPiA+IC0t LSAvZGV2L251bGwKPiA+ICsrKyBiL3NvdW5kL3NvYy9udWM5MDAvbnVjOTAwLWFjOTcuYwo+ID4g QEAgLTAsMCArMSw0NDMgQEAKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEw IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KPiA+ICsgKgo+ID4gKyAqIFdhbiBab25n U2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4g PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKPiA+ICsgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3Zl cnNpb24gMiBvZiB0aGUgTGljZW5zZS4KPiA+ICsgKgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNs dWRlIDxsaW51eC9pbml0Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gKyNp bmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ID4g KyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ ID4gKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+Cj4gPiArI2luY2x1ZGUgPHNvdW5kL2NvcmUu aD4KPiA+ICsjaW5jbHVkZSA8c291bmQvcGNtLmg+Cj4gPiArI2luY2x1ZGUgPHNvdW5kL2luaXR2 YWwuaD4KPiA+ICsjaW5jbHVkZSA8c291bmQvc29jLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2Rl dmljZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSA8 bWFjaC9tZnAuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSAibnVjOTAwLWF1aWRvLmgiCj4gPiArCj4g PiArc3RhdGljIERFRklORV9NVVRFWChhYzk3X211dGV4KTsKPiA+ICtzdHJ1Y3QgbnVjOTAwX2F1 ZGlvICpudWM5MDBfYWM5N19kYXRhOwo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbnVjOTAwX2NoZWNr cmVhZHkodm9pZCkKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBudWM5MDBfYXVkaW8gKm51Yzkw MF9hdWRpbyA9IG51YzkwMF9hYzk3X2RhdGE7Cj4gPiArCj4gPiArICAgICAgIGlmICghKEFVRElP X1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9BQ0lTMCkgJiBDT0RFQ19SRUFEWSkpCj4g PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FUEVSTTsKPiA+ICsKPiA+ICsgICAgICAgcmV0dXJu IDA7Cj4gPiArfQo+ID4gKwo+ID4gKy8qIEFDOTcgY29udHJvbGxlciByZWFkcyBjb2RlYyByZWdp c3RlciAqLwo+ID4gK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBudWM5MDBfYWM5N19yZWFkKHN0cnVj dCBzbmRfYWM5NyAqYWM5NywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBzaG9ydCByZWcpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbnVjOTAw X2F1ZGlvICpudWM5MDBfYXVkaW8gPSBudWM5MDBfYWM5N19kYXRhOwo+ID4gKyAgICAgICB1bnNp Z25lZCBsb25nIHRpbWVvdXQgPSAweDEwMDAwLCB2YWw7Cj4gPiArCj4gPiArICAgICAgIG11dGV4 X2xvY2soJmFjOTdfbXV0ZXgpOwo+ID4gKwo+ID4gKyAgICAgICB2YWwgPSBudWM5MDBfY2hlY2ty ZWFkeSgpOwo+ID4gKyAgICAgICBpZiAoISF2YWwpIHsKPiA+ICsgICAgICAgICAgICAgICBkZXZf ZXJyKG51YzkwMF9hdWRpby0+ZGV2LCAiQUM5NyBjb2RlYyBpcyBub3QgcmVhZHlcbiIpOwo+ID4g KyAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAg IC8qIHNldCB0aGUgUl9XQiBiaXQgYW5kIHdyaXRlIHJlZ2lzdGVyIGluZGV4ICovCj4gPiArICAg ICAgIEFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQUNPUzEsIFJfV0IgfCBy ZWcpOwo+ID4gKwo+ID4gKyAgICAgICAvKiBzZXQgdGhlIHZhbGlkIGZyYW1lIGJpdCBhbmQgdmFs aWQgc2xvdHMgKi8KPiA+ICsgICAgICAgdmFsID0gQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1t aW8gKyBBQ1RMX0FDT1MwKTsKPiA+ICsgICAgICAgdmFsIHw9IChWQUxJRF9GUkFNRSB8IFNMT1Qx X1ZBTElEKTsKPiA+ICsgICAgICAgQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNU TF9BQ09TMCwgdmFsKTsKPiA+ICsKPiA+ICsgICAgICAgdWRlbGF5KDEwMCk7Cj4gPiArCj4gPiAr ICAgICAgIC8qIHBvbGxpbmcgdGhlIEFDX1JfRklOSVNIICovCj4gPiArICAgICAgIHZhbCA9IEFV RElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9BQ0NPTik7Cj4gPiArICAgICAgIHZh bCAmPSBBQ19SX0ZJTklTSDsKPiA+ICsgICAgICAgd2hpbGUgKCF2YWwgJiYgdGltZW91dC0tKQo+ ID4gKyAgICAgICAgICAgICAgIG1kZWxheSgxKTsKPiA+ICsKPiA+ICsgICAgICAgaWYgKCF0aW1l b3V0KSB7Cj4gPiArICAgICAgICAgICAgICAgZGV2X2VycihudWM5MDBfYXVkaW8tPmRldiwgIkFD OTcgcmVhZCByZWdpc3RlciB0aW1lIG91dCAhXG4iKTsKPiA+ICsgICAgICAgICAgICAgICB2YWwg PSAtRVBFUk07Cj4gPiArICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAgICAgIH0KPiA+ ICsKPiA+ICsgICAgICAgdmFsID0gQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RM X0FDT1MwKSA7Cj4gPiArICAgICAgIHZhbCAmPSB+U0xPVDFfVkFMSUQ7Cj4gPiArICAgICAgIEFV RElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQUNPUzAsIHZhbCk7Cj4gPiArCj4g PiArICAgICAgIGlmIChBVURJT19SRUFEKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQUNJUzEp ID4+IDIgIT0gcmVnKSB7Cj4gPiArICAgICAgICAgICAgICAgZGV2X2VycihudWM5MDBfYXVkaW8t PmRldiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJfSU5ERVggb2YgUkVH X0FDVExfQUNJUzEgbm90IG1hdGNoIVxuIik7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAg ICAgdWRlbGF5KDEwMCk7Cj4gPiArICAgICAgIHZhbCA9IChBVURJT19SRUFEKG51YzkwMF9hdWRp by0+bW1pbyArIEFDVExfQUNJUzIpICYgMHhGRkZGKTsKPiA+ICsKPiA+ICtvdXQ6Cj4gPiArICAg ICAgIG11dGV4X3VubG9jaygmYWM5N19tdXRleCk7Cj4gPiArICAgICAgIHJldHVybiB2YWw7Cj4g PiArfQo+ID4gKwo+ID4gKy8qIEFDOTcgY29udHJvbGxlciB3cml0ZXMgdG8gY29kZWMgcmVnaXN0 ZXIgKi8KPiA+ICtzdGF0aWMgdm9pZCBudWM5MDBfYWM5N193cml0ZShzdHJ1Y3Qgc25kX2FjOTcg KmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgc2hvcnQgdmFsKQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IG51Yzkw MF9hdWRpbyAqbnVjOTAwX2F1ZGlvID0gbnVjOTAwX2FjOTdfZGF0YTsKPiA+ICsgICAgICAgdW5z aWduZWQgbG9uZyB0bXAsIHRpbWVvdXQgPSAweDEwMDAwOwo+ID4gKwo+ID4gKyAgICAgICBtdXRl eF9sb2NrKCZhYzk3X211dGV4KTsKPiA+ICsKPiA+ICsgICAgICAgdG1wID0gbnVjOTAwX2NoZWNr cmVhZHkoKTsKPiA+ICsgICAgICAgaWYgKCEhdG1wKQo+ID4gKyAgICAgICAgICAgICAgIGRldl9l cnIobnVjOTAwX2F1ZGlvLT5kZXYsICJBQzk3IGNvZGVjIGlzIG5vdCByZWFkeVxuIik7Cj4gPiAr Cj4gPiArICAgICAgIC8qIGNsZWFyIHRoZSBSX1dCIGJpdCBhbmQgd3JpdGUgcmVnaXN0ZXIgaW5k ZXggKi8KPiA+ICsgICAgICAgQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9B Q09TMSwgcmVnKTsKPiA+ICsKPiA+ICsgICAgICAgLyogd3JpdGUgcmVnaXN0ZXIgdmFsdWUgKi8K PiA+ICsgICAgICAgQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9BQ09TMiwg dmFsKTsKPiA+ICsKPiA+ICsgICAgICAgLyogc2V0IHRoZSB2YWxpZCBmcmFtZSBiaXQgYW5kIHZh bGlkIHNsb3RzICovCj4gPiArICAgICAgIHRtcCA9IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5t bWlvICsgQUNUTF9BQ09TMCk7Cj4gPiArICAgICAgIHRtcCB8PSBTTE9UMV9WQUxJRCB8IFNMT1Qy X1ZBTElEIHwgVkFMSURfRlJBTUU7Cj4gPiArICAgICAgIEFVRElPX1dSSVRFKG51YzkwMF9hdWRp by0+bW1pbyArIEFDVExfQUNPUzAsIHRtcCk7Cj4gPiArCj4gPiArICAgICAgIHVkZWxheSgxMDAp Owo+ID4gKwo+ID4gKyAgICAgICAvKiBwb2xsaW5nIHRoZSBBQ19XX0ZJTklTSCAqLwo+ID4gKyAg ICAgICB0bXAgPSBBVURJT19SRUFEKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQUNDT04pOwo+ ID4gKyAgICAgICB0bXAgJj0gQUNfV19GSU5JU0g7Cj4gPiArICAgICAgIHdoaWxlICh0bXAgJiYg dGltZW91dC0tKQo+ID4gKyAgICAgICAgICAgICAgIG1kZWxheSgxKTsKPiA+ICsKPiA+ICsgICAg ICAgaWYgKCF0aW1lb3V0KQo+ID4gKyAgICAgICAgICAgICAgIGRldl9lcnIobnVjOTAwX2F1ZGlv LT5kZXYsICJBQzk3IHdyaXRlIHJlZ2lzdGVyIHRpbWUgb3V0ICFcbiIpOwo+ID4gKwo+ID4gKyAg ICAgICB0bXAgPSBBVURJT19SRUFEKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQUNPUzApOwo+ ID4gKyAgICAgICB0bXAgJj0gfihTTE9UMV9WQUxJRCB8IFNMT1QyX1ZBTElEKTsKPiA+ICsgICAg ICAgQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9BQ09TMCwgdG1wKTsKPiA+ ICsKPiA+ICsgICAgICAgbXV0ZXhfdW5sb2NrKCZhYzk3X211dGV4KTsKPiA+ICsKPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHZvaWQgbnVjOTAwX2FjOTdfd2FybV9yZXNldChzdHJ1Y3Qgc25kX2Fj OTcgKmFjOTcpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbnVjOTAwX2F1ZGlvICpudWM5MDBf YXVkaW8gPSBudWM5MDBfYWM5N19kYXRhOwo+ID4gKyAgICAgICB1bnNpZ25lZCBsb25nIHZhbDsK PiA+ICsKPiA+ICsgICAgICAgbXV0ZXhfbG9jaygmYWM5N19tdXRleCk7Cj4gPiArCj4gPiArICAg ICAgIC8qIHdhcm0gcmVzZXQgQUMgOTcgKi8KPiA+ICsgICAgICAgdmFsID0gQVVESU9fUkVBRChu dWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0FDQ09OKTsKPiA+ICsgICAgICAgdmFsIHw9IEFDX1df UkVTOwo+ID4gKyAgICAgICBBVURJT19XUklURShudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0FD Q09OLCB2YWwpOwo+ID4gKwo+ID4gKyAgICAgICB1ZGVsYXkoMTAwMCk7Cj4gPiArCj4gPiArICAg ICAgIHZhbCA9IG51YzkwMF9jaGVja3JlYWR5KCk7Cj4gPiArICAgICAgIGlmICghIXZhbCkKPiA+ ICsgICAgICAgICAgICAgICBkZXZfZXJyKG51YzkwMF9hdWRpby0+ZGV2LCAiQUM5NyBjb2RlYyBp cyBub3QgcmVhZHlcbiIpOwo+ID4gKwo+ID4gKyAgICAgICBtdXRleF91bmxvY2soJmFjOTdfbXV0 ZXgpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBudWM5MDBfYWM5N19jb2xkX3Jlc2V0 KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBudWM5MDBf YXVkaW8gKm51YzkwMF9hdWRpbyA9IG51YzkwMF9hYzk3X2RhdGE7Cj4gPiArICAgICAgIHVuc2ln bmVkIGxvbmcgdmFsOwo+ID4gKwo+ID4gKyAgICAgICBtdXRleF9sb2NrKCZhYzk3X211dGV4KTsK PiA+ICsKPiA+ICsgICAgICAgLyogcmVzZXQgQXVkaW8gQ29udHJvbGxlciAqLwo+ID4gKyAgICAg ICB2YWwgPSBBVURJT19SRUFEKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUkVTRVQpOwo+ID4g KyAgICAgICB2YWwgfD0gQUNUTF9SRVNFVF9CSVQ7Cj4gPiArICAgICAgIEFVRElPX1dSSVRFKG51 YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUkVTRVQsIHZhbCk7Cj4gPiArCj4gPiArICAgICAgIHVk ZWxheSgxMDAwKTsKPiA+ICsKPiA+ICsgICAgICAgdmFsID0gQVVESU9fUkVBRChudWM5MDBfYXVk aW8tPm1taW8gKyBBQ1RMX1JFU0VUKTsKPiA+ICsgICAgICAgdmFsICY9ICh+QUNUTF9SRVNFVF9C SVQpOwo+ID4gKyAgICAgICBBVURJT19XUklURShudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1JF U0VULCB2YWwpOwo+ID4gKwo+ID4gKyAgICAgICB1ZGVsYXkoMTAwMCk7Cj4gPiArCj4gPiArICAg ICAgIC8qIHJlc2V0IEFDLWxpbmsgaW50ZXJmYWNlICovCj4gPiArCj4gPiArICAgICAgIHZhbCA9 IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9SRVNFVCk7Cj4gPiArICAgICAg IHZhbCB8PSBBQ19SRVNFVDsKPiA+ICsgICAgICAgQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5t bWlvICsgQUNUTF9SRVNFVCwgdmFsKTsKPiA+ICsKPiA+ICsgICAgICAgdWRlbGF5KDEwMDApOwo+ ID4gKwo+ID4gKyAgICAgICB2YWwgPSBBVURJT19SRUFEKG51YzkwMF9hdWRpby0+bW1pbyArIEFD VExfUkVTRVQpOwo+ID4gKyAgICAgICB2YWwgJj0gfkFDX1JFU0VUOwo+ID4gKyAgICAgICBBVURJ T19XUklURShudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1JFU0VULCB2YWwpOwo+ID4gKwo+ID4g KyAgICAgICB1ZGVsYXkoMTAwMCk7Cj4gPiArCj4gPiArICAgICAgIC8qIGNvbGQgcmVzZXQgQUMg OTcgKi8KPiA+ICsgICAgICAgdmFsID0gQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1taW8gKyBB Q1RMX0FDQ09OKTsKPiA+ICsgICAgICAgdmFsIHw9IEFDX0NfUkVTOwo+ID4gKyAgICAgICBBVURJ T19XUklURShudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0FDQ09OLCB2YWwpOwo+ID4gKwo+ID4g KyAgICAgICB1ZGVsYXkoMTAwMCk7Cj4gPiArCj4gPiArICAgICAgIHZhbCA9IEFVRElPX1JFQUQo bnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9BQ0NPTik7Cj4gPiArICAgICAgIHZhbCAmPSAofkFD X0NfUkVTKTsKPiA+ICsgICAgICAgQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNU TF9BQ0NPTiwgdmFsKTsKPiA+ICsKPiA+ICsgICAgICAgdWRlbGF5KDEwMDApOwo+ID4gKwoKSnVz dCBjdXJpb3VzLCB0aGVzZSAxMDAwIG1pY3JvIHNlY29uZHMgZGVsYXlzIGFsbCBzZWVtIG92ZXIg c3BlYyBmb3IgdGhlCkFDOTcgaW50ZXJmYWNlLgoKPiA+ICsgICAgICAgbXV0ZXhfdW5sb2NrKCZh Yzk3X211dGV4KTsKPiA+ICsKPiA+ICt9Cj4gPiArCj4gPiArLyogQUM5NyBjb250cm9sbGVyIG9w ZXJhdGlvbnMgKi8KPiA+ICtzdHJ1Y3Qgc25kX2FjOTdfYnVzX29wcyBzb2NfYWM5N19vcHMgPSB7 Cj4gPiArICAgICAgIC5yZWFkICAgICAgICAgICA9IG51YzkwMF9hYzk3X3JlYWQsCj4gPiArICAg ICAgIC53cml0ZSAgICAgICAgICA9IG51YzkwMF9hYzk3X3dyaXRlLAo+ID4gKyAgICAgICAucmVz ZXQgICAgICAgICAgPSBudWM5MDBfYWM5N19jb2xkX3Jlc2V0LAo+ID4gKyAgICAgICAud2FybV9y ZXNldCAgICAgPSBudWM5MDBfYWM5N193YXJtX3Jlc2V0LAo+ID4gK30KPiA+ICtFWFBPUlRfU1lN Qk9MX0dQTChzb2NfYWM5N19vcHMpOwo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbnVjOTAwX2FjOTdf dHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNtZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkp Cj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbnVjOTAwX2F1ZGlvICpudWM5MDBfYXVkaW8gPSBu dWM5MDBfYWM5N19kYXRhOwo+ID4gKyAgICAgICBpbnQgcmV0LCBzdHlwZSA9IFNVQlNUUkVBTV9U WVBFKHN1YnN0cmVhbSk7Cj4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB0bXA7Cj4gPiAr Cj4gPiArICAgICAgIHJldCA9IDA7Cj4gPiArCj4gPiArICAgICAgIHN3aXRjaCAoY21kKSB7Cj4g PiArICAgICAgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6Cj4gPiArICAgICAgIGNhc2Ug U05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgo+ID4gKyAgICAgICAgICAgICAgIHZhbCA9IEFVRElP X1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9SRVNFVCk7Cj4gPiArICAgICAgICAgICAg ICAgaWYgKFBDTV9UWCA9PSBzdHlwZSkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdG1w ID0gQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0FDT1MwKTsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIHRtcCB8PSAoU0xPVDNfVkFMSUQgfCBTTE9UNF9WQUxJRCB8IFZB TElEX0ZSQU1FKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIEFVRElPX1dSSVRFKG51Yzkw MF9hdWRpby0+bW1pbyArIEFDVExfQUNPUzAsIHRtcCk7Cj4gPiArCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICB0bXAgPSBBVURJT19SRUFEKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUFNS KTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHRtcCB8PSAoUF9ETUFfRU5EX0lSUSB8IFBf RE1BX01JRERMRV9JUlEpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgQVVESU9fV1JJVEUo bnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9QU1IsIHRtcCk7Cj4gPiArICAgICAgICAgICAgICAg ICAgICAgICB2YWwgfD0gQUNfUExBWTsKPiA+ICsgICAgICAgICAgICAgICB9IGVsc2Ugewo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1t aW8gKyBBQ1RMX1JTUik7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICB0bXAgfD0gKFJfRE1B X0VORF9JUlEgfCBSX0RNQV9NSURETEVfSVJRKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIEFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUlNSLCB0bXApOwo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdmFsIHw9IEFDX1JFQ09SRDsKPiA+ICsgICAgICAg ICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgQVVESU9fV1JJVEUobnVjOTAwX2F1 ZGlvLT5tbWlvICsgQUNUTF9SRVNFVCwgdmFsKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBi cmVhazsKPiA+ICsgICAgICAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgo+ID4gKyAgICAg ICBjYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6Cj4gPiArICAgICAgICAgICAgICAgdmFs ID0gQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1JFU0VUKTsKPiA+ICsgICAg ICAgICAgICAgICBpZiAoUENNX1RYID09IHN0eXBlKSB7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICB0bXAgPSBBVURJT19SRUFEKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQUNPUzApOwo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdG1wICY9IH4oU0xPVDNfVkFMSUQgfCBTTE9UNF9W QUxJRCk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBBVURJT19XUklURShudWM5MDBfYXVk aW8tPm1taW8gKyBBQ1RMX0FDT1MwLCB0bXApOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9QU1IsIFJFU0VUX1BS U1IpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdmFsICY9IH5BQ19QTEFZOwo+ID4gKyAg ICAgICAgICAgICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBBVURJT19X UklURShudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1JTUiwgUkVTRVRfUFJTUik7Cj4gPiArICAg ICAgICAgICAgICAgICAgICAgICB2YWwgJj0gfkFDX1JFQ09SRDsKPiA+ICsgICAgICAgICAgICAg ICB9Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5t bWlvICsgQUNUTF9SRVNFVCwgdmFsKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBicmVhazsK PiA+ICsgICAgICAgZGVmYXVsdDoKPiA+ICsgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwo+ ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyBpbnQgbnVjOTAwX2FjOTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg c25kX3NvY19kYWkgKmRhaSkKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBudWM5MDBfYXVkaW8g Km51YzkwMF9hdWRpbyA9IG51YzkwMF9hYzk3X2RhdGE7Cj4gPiArICAgICAgIHVuc2lnbmVkIGxv bmcgdmFsOwo+ID4gKwo+ID4gKyAgICAgICBtdXRleF9sb2NrKCZhYzk3X211dGV4KTsKPiA+ICsK PiA+ICsgICAgICAgLyogZW5hYmxlIHVuaXQgY2xvY2sgKi8KPiA+ICsgICAgICAgY2xrX2VuYWJs ZShudWM5MDBfYXVkaW8tPmNsayk7Cj4gPiArCj4gPiArICAgICAgIC8qIGVuYWJsZSBhdWRpbyBj b250cm9sbGVyIGFuZCBBQy1saW5rIGludGVyZmFjZSAqLwo+ID4gKyAgICAgICB2YWwgPSBBVURJ T19SRUFEKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQ09OKTsKPiA+ICsgICAgICAgdmFsIHw9 IChJSVNfQUNfUElOX1NFTCB8IEFDTElOS19FTik7Cj4gPiArICAgICAgIEFVRElPX1dSSVRFKG51 YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQ09OLCB2YWwpOwo+ID4gKwo+ID4gKyAgICAgICBtdXRl eF91bmxvY2soJmFjOTdfbXV0ZXgpOwo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbnVjOTAwX2FjOTdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKPiA+ICt7Cj4gPiArICAgICAgIHN0 cnVjdCBudWM5MDBfYXVkaW8gKm51YzkwMF9hdWRpbyA9IG51YzkwMF9hYzk3X2RhdGE7Cj4gPiAr Cj4gPiArICAgICAgIGNsa19kaXNhYmxlKG51YzkwMF9hdWRpby0+Y2xrKTsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgbnVjOTAwX2FjOTdfZGFpX29wcyA9 IHsKPiA+ICsgICAgICAgLnRyaWdnZXIgICAgICAgID0gbnVjOTAwX2FjOTdfdHJpZ2dlciwKPiA+ ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBzbmRfc29jX2RhaSBudWM5MDBfYWM5N19kYWkgPSB7Cj4g PiArICAgICAgIC5uYW1lICAgICAgICAgICAgICAgICAgID0gIm51YzkwMC1hYzk3IiwKPiA+ICsg ICAgICAgLnByb2JlICAgICAgICAgICAgICAgICAgPSBudWM5MDBfYWM5N19wcm9iZSwKPiA+ICsg ICAgICAgLnJlbW92ZSAgICAgICAgICAgICAgICAgPSBudWM5MDBfYWM5N19yZW1vdmUsCj4gPiAr ICAgICAgIC5hYzk3X2NvbnRyb2wgICAgICAgICAgID0gMSwKPiA+ICsgICAgICAgLnBsYXliYWNr ID0gewo+ID4gKyAgICAgICAgICAgICAgIC5yYXRlcyAgICAgICAgICA9IFNORFJWX1BDTV9SQVRF XzgwMDBfNDgwMDAsCj4gPiArICAgICAgICAgICAgICAgLmZvcm1hdHMgICAgICAgID0gU05EUlZf UENNX0ZNVEJJVF9TMTZfTEUsCj4gPiArICAgICAgICAgICAgICAgLmNoYW5uZWxzX21pbiAgID0g MSwKPiA+ICsgICAgICAgICAgICAgICAuY2hhbm5lbHNfbWF4ICAgPSAyLAo+ID4gKyAgICAgICB9 LAo+ID4gKyAgICAgICAuY2FwdHVyZSA9IHsKPiA+ICsgICAgICAgICAgICAgICAucmF0ZXMgICAg ICAgICAgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAo+ID4gKyAgICAgICAgICAgICAgIC5m b3JtYXRzICAgICAgICA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAo+ID4gKyAgICAgICAgICAg ICAgIC5jaGFubmVsc19taW4gICA9IDEsCj4gPiArICAgICAgICAgICAgICAgLmNoYW5uZWxzX21h eCAgID0gMiwKPiA+ICsgICAgICAgfSwKPiA+ICsgICAgICAgLm9wcyA9ICZudWM5MDBfYWM5N19k YWlfb3BzLAo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChudWM5MDBfYWM5N19kYWkpOwo+ ID4gKwo+ID4gK3N0YXRpYyBpbnQgX19kZXZpbml0IG51YzkwMF9hYzk3X2RydnByb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgbnVjOTAw X2F1ZGlvICpudWM5MDBfYXVkaW87Cj4gPiArICAgICAgIGludCByZXQ7Cj4gPiArCj4gPiArICAg ICAgIGlmIChudWM5MDBfYWM5N19kYXRhKQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUJV U1k7Cj4gPiArCj4gPiArICAgICAgIG51YzkwMF9hdWRpbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVj dCBudWM5MDBfYXVkaW8pLCBHRlBfS0VSTkVMKTsKPiA+ICsgICAgICAgaWYgKCFudWM5MDBfYXVk aW8pCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArICAgICAg IHNwaW5fbG9ja19pbml0KCZudWM5MDBfYXVkaW8tPmxvY2spOwo+ID4gKwo+ID4gKyAgICAgICBu dWM5MDBfYXVkaW8tPnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNF X01FTSwgMCk7Cj4gPiArICAgICAgIGlmICghbnVjOTAwX2F1ZGlvLT5yZXMpIHsKPiA+ICsgICAg ICAgICAgICAgICByZXQgPSAtRU5PREVWOwo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0MDsK PiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICBpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihu dWM5MDBfYXVkaW8tPnJlcy0+c3RhcnQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXNv dXJjZV9zaXplKG51YzkwMF9hdWRpby0+cmVzKSwgcGRldi0+bmFtZSkpIHsKPiA+ICsgICAgICAg ICAgICAgICByZXQgPSAtRUJVU1k7Cj4gPiArICAgICAgICAgICAgICAgZ290byBvdXQwOwo+ID4g KyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIG51YzkwMF9hdWRpby0+bW1pbyA9IGlvcmVtYXAo bnVjOTAwX2F1ZGlvLT5yZXMtPnN0YXJ0LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlc291cmNlX3NpemUobnVjOTAwX2F1ZGlvLT5yZXMpKTsKPiA+ICsgICAg ICAgaWYgKCFudWM5MDBfYXVkaW8tPm1taW8pIHsKPiA+ICsgICAgICAgICAgICAgICByZXQgPSAt RU5PTUVNOwo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0MTsKPiA+ICsgICAgICAgfQo+ID4g Kwo+ID4gKyAgICAgICBudWM5MDBfYXVkaW8tPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVM TCk7Cj4gPiArICAgICAgIGlmIChJU19FUlIobnVjOTAwX2F1ZGlvLT5jbGspKSB7Cj4gPiArICAg ICAgICAgICAgICAgcmV0ID0gUFRSX0VSUihudWM5MDBfYXVkaW8tPmNsayk7Cj4gPiArICAgICAg ICAgICAgICAgZ290byBvdXQyOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIG51Yzkw MF9hdWRpby0+aXJxX251bSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Cj4gPiArICAgICAg IGlmICghbnVjOTAwX2F1ZGlvLT5pcnFfbnVtKSB7Cj4gPiArICAgICAgICAgICAgICAgcmV0ID0g LUVCVVNZOwo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0MjsKPiA+ICsgICAgICAgfQo+ID4g Kwo+ID4gKyAgICAgICBudWM5MDBfYWM5N19kYXRhID0gbnVjOTAwX2F1ZGlvOwo+ID4gKwo+ID4g KyAgICAgICBudWM5MDBfYXVkaW8tPmRldiA9IG51YzkwMF9hYzk3X2RhaS5kZXYgPSAgJnBkZXYt PmRldjsKPiA+ICsKPiA+ICsgICAgICAgcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJm51Yzkw MF9hYzk3X2RhaSk7Cj4gPiArICAgICAgIGlmIChyZXQpCj4gPiArICAgICAgICAgICAgICAgZ290 byBvdXQzOwo+ID4gKwo+ID4gKyAgICAgICBtZnBfc2V0X2dyb3VwZyhudWM5MDBfYXVkaW8tPmRl dik7IC8qIGVuYmFsZSBhYzk3IG11bHRpZnVuY3Rpb24gcGluKi8KPiA+ICsKPiA+ICsgICAgICAg cmV0dXJuIDA7Cj4gPiArCj4gPiArb3V0MzoKPiA+ICsgICAgICAgY2xrX3B1dChudWM5MDBfYXVk aW8tPmNsayk7Cj4gPiArb3V0MjoKPiA+ICsgICAgICAgaW91bm1hcChudWM5MDBfYXVkaW8tPm1t aW8pOwo+ID4gK291dDE6Cj4gPiArICAgICAgIHJlbGVhc2VfbWVtX3JlZ2lvbihudWM5MDBfYXVk aW8tPnJlcy0+c3RhcnQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVzb3VyY2Vfc2l6ZShudWM5MDBfYXVkaW8tPnJlcykpOwo+ID4gK291dDA6Cj4gPiArICAg ICAgIGtmcmVlKG51YzkwMF9hdWRpbyk7Cj4gPiArICAgICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyBpbnQgX19kZXZleGl0IG51YzkwMF9hYzk3X2RydnJlbW92ZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKPiA+ICsKPiA+ICsgICAgICAgc25kX3Nv Y191bnJlZ2lzdGVyX2RhaSgmbnVjOTAwX2FjOTdfZGFpKTsKPiA+ICsKPiA+ICsgICAgICAgY2xr X3B1dChudWM5MDBfYWM5N19kYXRhLT5jbGspOwo+ID4gKyAgICAgICBpb3VubWFwKG51YzkwMF9h Yzk3X2RhdGEtPm1taW8pOwo+ID4gKyAgICAgICByZWxlYXNlX21lbV9yZWdpb24obnVjOTAwX2Fj OTdfZGF0YS0+cmVzLT5zdGFydCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVzb3VyY2Vfc2l6ZShudWM5MDBfYWM5N19kYXRhLT5yZXMpKTsKPiA+ICsKPiA+ICsgICAgICAg bnVjOTAwX2FjOTdfZGF0YSA9IE5VTEw7Cj4gPiArCj4gPiArICAgICAgIHJldHVybiAwOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBudWM5MDBfYWM5N19k cml2ZXIgPSB7Cj4gPiArICAgICAgIC5kcml2ZXIgPSB7Cj4gPiArICAgICAgICAgICAgICAgLm5h bWUgICA9ICJudWM5MDAtYXVkaW8iLAo+ID4gKyAgICAgICAgICAgICAgIC5vd25lciAgPSBUSElT X01PRFVMRSwKPiA+ICsgICAgICAgfSwKPiA+ICsgICAgICAgLnByb2JlICAgICAgICAgID0gbnVj OTAwX2FjOTdfZHJ2cHJvYmUsCj4gPiArICAgICAgIC5yZW1vdmUgICAgICAgICA9IF9fZGV2ZXhp dF9wKG51YzkwMF9hYzk3X2RydnJlbW92ZSksCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50 IF9faW5pdCBudWM5MDBfYWM5N19pbml0KHZvaWQpCj4gPiArewo+ID4gKyAgICAgICByZXR1cm4g cGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZudWM5MDBfYWM5N19kcml2ZXIpOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgdm9pZCBfX2V4aXQgbnVjOTAwX2FjOTdfZXhpdCh2b2lkKQo+ID4gK3sK PiA+ICsgICAgICAgcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm51YzkwMF9hYzk3X2RyaXZl cik7Cj4gPiArfQo+ID4gKwo+ID4gK21vZHVsZV9pbml0KG51YzkwMF9hYzk3X2luaXQpOwo+ID4g K21vZHVsZV9leGl0KG51YzkwMF9hYzk3X2V4aXQpOwo+ID4gKwo+ID4gK01PRFVMRV9BVVRIT1Io IldhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4iKTsKPiA+ICtNT0RVTEVfREVTQ1JJ UFRJT04oIk5VQzkwMCBBQzk3IFNvQyBkcml2ZXIhIik7Cj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQ TCIpOwo+ID4gK01PRFVMRV9BTElBUygicGxhdGZvcm06bnVjOTAwLWFjOTciKTsKPiA+ICsKPiA+ IGRpZmYgLS1naXQgYS9zb3VuZC9zb2MvbnVjOTAwL251YzkwMC1hdWRpby5jIGIvc291bmQvc29j L251YzkwMC9udWM5MDAtYXVkaW8uYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4 IDAwMDAwMDAuLmIzM2Q1YjgKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL3NvdW5kL3NvYy9u dWM5MDAvbnVjOTAwLWF1ZGlvLmMKPiA+IEBAIC0wLDAgKzEsODEgQEAKPiA+ICsvKgo+ID4gKyAq IENvcHlyaWdodCAoYykgMjAxMCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCj4gPiAr ICoKPiA+ICsgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+Cj4gPiArICoKPiA+ ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQo+ID4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gPiArICogdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCj4gPiArICoKPiA+ICsg Ki8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gPiArI2luY2x1ZGUgPGxp bnV4L21vZHVsZXBhcmFtLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Cj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSA8c291bmQvY29yZS5oPgo+ID4gKyNpbmNsdWRl IDxzb3VuZC9wY20uaD4KPiA+ICsjaW5jbHVkZSA8c291bmQvc29jLmg+Cj4gPiArI2luY2x1ZGUg PHNvdW5kL3NvYy1kYXBtLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgIi4uL2NvZGVjcy9hYzk3Lmgi Cj4gPiArI2luY2x1ZGUgIm51YzkwMC1hdWlkby5oIgo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3Qg c25kX3NvY19kYWlfbGluayBudWM5MDBldmJfYWM5N19kYWkgPSB7Cj4gPiArICAgICAgIC5uYW1l ICAgICAgICAgICA9ICJBQzk3IiwKPiA+ICsgICAgICAgLnN0cmVhbV9uYW1lICAgID0gIkFDOTcg SGlGaSIsCj4gPiArICAgICAgIC5jcHVfZGFpICAgICAgICA9ICZudWM5MDBfYWM5N19kYWksCj4g PiArICAgICAgIC5jb2RlY19kYWkgICAgICA9ICZhYzk3X2RhaSwKPiA+ICt9Owo+ID4gKwo+ID4g K3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIG51YzkwMGV2Yl9hdWRpb19tYWNoaW5lID0gewo+ ID4gKyAgICAgICAubmFtZSAgICAgICAgICAgPSAiTlVDOTAwRVZCX0FDOTciLAo+ID4gKyAgICAg ICAuZGFpX2xpbmsgICAgICAgPSAmbnVjOTAwZXZiX2FjOTdfZGFpLAo+ID4gKyAgICAgICAubnVt X2xpbmtzICAgICAgPSAxLAo+ID4gKyAgICAgICAucGxhdGZvcm0gICAgICAgPSAmbnVjOTAwX3Nv Y19wbGF0Zm9ybSwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZp Y2UgbnVjOTAwZXZiX2FjOTdfZGV2ZGF0YSA9IHsKPiA+ICsgICAgICAgLmNhcmQgICAgICAgICAg ID0gJm51YzkwMGV2Yl9hdWRpb19tYWNoaW5lLAo+ID4gKyAgICAgICAuY29kZWNfZGV2ICAgICAg PSAmc29jX2NvZGVjX2Rldl9hYzk3LAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKm51YzkwMGV2Yl9hc29jX2RldjsKPiA+ICsKPiA+ICtzdGF0aWMgaW50 IF9faW5pdCBudWM5MDBldmJfYXVkaW9faW5pdCh2b2lkKQo+ID4gK3sKPiA+ICsgICAgICAgaW50 IHJldDsKPiA+ICsKPiA+ICsgICAgICAgcmV0ID0gLUVOT01FTTsKPiA+ICsgICAgICAgbnVjOTAw ZXZiX2Fzb2NfZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7Cj4g PiArICAgICAgIGlmICghbnVjOTAwZXZiX2Fzb2NfZGV2KQo+ID4gKyAgICAgICAgICAgICAgIGdv dG8gb3V0Owo+ID4gKwo+ID4gKyAgICAgICAvKiBudWM5MDAgYm9hcmQgYXVkaW8gZGV2aWNlICov Cj4gPiArICAgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKG51YzkwMGV2Yl9hc29jX2RldiwgJm51 YzkwMGV2Yl9hYzk3X2RldmRhdGEpOwo+ID4gKwo+ID4gKyAgICAgICBudWM5MDBldmJfYWM5N19k ZXZkYXRhLmRldiA9ICZudWM5MDBldmJfYXNvY19kZXYtPmRldjsKPiA+ICsgICAgICAgcmV0ID0g cGxhdGZvcm1fZGV2aWNlX2FkZChudWM5MDBldmJfYXNvY19kZXYpOwo+ID4gKwo+ID4gKyAgICAg ICBpZiAocmV0KSB7Cj4gPiArICAgICAgICAgICAgICAgcGxhdGZvcm1fZGV2aWNlX3B1dChudWM5 MDBldmJfYXNvY19kZXYpOwo+ID4gKyAgICAgICAgICAgICAgIG51YzkwMGV2Yl9hc29jX2RldiA9 IE5VTEw7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICtvdXQ6Cj4gPiArICAgICAgIHJldHVybiBy ZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIF9fZXhpdCBudWM5MDBldmJfYXVkaW9f ZXhpdCh2b2lkKQo+ID4gK3sKPiA+ICsgICAgICAgcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIo bnVjOTAwZXZiX2Fzb2NfZGV2KTsKPiA+ICt9Cj4gPiArCj4gPiArbW9kdWxlX2luaXQobnVjOTAw ZXZiX2F1ZGlvX2luaXQpOwo+ID4gK21vZHVsZV9leGl0KG51YzkwMGV2Yl9hdWRpb19leGl0KTsK PiA+ICsKPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gPiArTU9EVUxFX0RFU0NSSVBUSU9O KCJOVUM5MDAgU2VyaWVzIEFTb0MgYXVkaW8gc3VwcG9ydCIpOwo+ID4gK01PRFVMRV9BVVRIT1Io IldhbiBab25nU2h1biIpOwo+ID4gZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9udWM5MDAvbnVjOTAw LWF1aWRvLmggYi9zb3VuZC9zb2MvbnVjOTAwL251YzkwMC1hdWlkby5oCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uOTVhYzRlZgo+ID4gLS0tIC9kZXYvbnVsbAo+ ID4gKysrIGIvc291bmQvc29jL251YzkwMC9udWM5MDAtYXVpZG8uaAo+ID4gQEAgLTAsMCArMSwx MjEgQEAKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAxMCBOdXZvdG9uIHRlY2hub2xv Z3kgY29ycG9yYXRpb24uCj4gPiArICoKPiA+ICsgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBn bWFpbC5jb20+Cj4gPiArICoKPiA+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ID4gKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 Cj4gPiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExp Y2Vuc2UuCj4gPiArICoKPiA+ICsgKi8KPiA+ICsKPiA+ICsjaWZuZGVmIF9OVUM5MDBfQVVESU9f SAo+ID4gKyNkZWZpbmUgX05VQzkwMF9BVURJT19ICj4gPiArCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2lvLmg+Cj4gPiArCj4gPiArLyogQXVkaW8gQ29udHJvbCBSZWdpc3RlcnMgKi8KPiA+ICsjZGVm aW5lIEFDVExfQ09OICAgICAgICAgICAgICAgMHgwMAo+ID4gKyNkZWZpbmUgQUNUTF9SRVNFVCAg ICAgICAgICAgICAweDA0Cj4gPiArI2RlZmluZSBBQ1RMX1JEU1RCICAgICAgICAgICAgIDB4MDgK PiA+ICsjZGVmaW5lIEFDVExfUkRTVF9MRU5HVEggICAgICAgMHgwQwo+ID4gKyNkZWZpbmUgQUNU TF9SRFNUQyAgICAgICAgICAgICAweDEwCj4gPiArI2RlZmluZSBBQ1RMX1JTUiAgICAgICAgICAg ICAgIDB4MTQKPiA+ICsjZGVmaW5lIEFDVExfUERTVEIgICAgICAgICAgICAgMHgxOAo+ID4gKyNk ZWZpbmUgQUNUTF9QRFNUX0xFTkdUSCAgICAgICAweDFDCj4gPiArI2RlZmluZSBBQ1RMX1BEU1RD ICAgICAgICAgICAgIDB4MjAKPiA+ICsjZGVmaW5lIEFDVExfUFNSICAgICAgICAgICAgICAgMHgy NAo+ID4gKyNkZWZpbmUgQUNUTF9JSVNDT04gICAgICAgICAgICAweDI4Cj4gPiArI2RlZmluZSBB Q1RMX0FDQ09OICAgICAgICAgICAgIDB4MkMKPiA+ICsjZGVmaW5lIEFDVExfQUNPUzAgICAgICAg ICAgICAgMHgzMAo+ID4gKyNkZWZpbmUgQUNUTF9BQ09TMSAgICAgICAgICAgICAweDM0Cj4gPiAr I2RlZmluZSBBQ1RMX0FDT1MyICAgICAgICAgICAgIDB4MzgKPiA+ICsjZGVmaW5lIEFDVExfQUNJ UzAgICAgICAgICAgICAgMHgzQwo+ID4gKyNkZWZpbmUgQUNUTF9BQ0lTMSAgICAgICAgICAgICAw eDQwCj4gPiArI2RlZmluZSBBQ1RMX0FDSVMyICAgICAgICAgICAgIDB4NDQKPiA+ICsjZGVmaW5l IEFDVExfQ09VTlRFUiAgICAgICAgICAgMHg0OAo+ID4gKwo+ID4gKy8qIGJpdCBkZWZpbml0aW9u IG9mIFJFR19BQ1RMX0NPTiByZWdpc3RlciAqLwo+ID4gKyNkZWZpbmUgUl9ETUFfSVJRICAgICAg ICAgICAgICAweDEwMDAKPiA+ICsjZGVmaW5lIFRfRE1BX0lSUSAgICAgICAgICAgICAgMHgwODAw Cj4gPiArI2RlZmluZSBJSVNfQUNfUElOX1NFTCAgICAgICAgIDB4MDEwMAo+ID4gKyNkZWZpbmUg RklGT19USCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MAo+ID4gKyNkZWZpbmUgQURDX0VO ICAgICAgICAgICAgICAgICAweDAwMTAKPiA+ICsjZGVmaW5lIE04MF9FTiAgICAgICAgICAgICAg ICAgMHgwMDA4Cj4gPiArI2RlZmluZSBBQ0xJTktfRU4gICAgICAgICAgICAgIDB4MDAwNAo+ID4g KyNkZWZpbmUgSUlTX0VOICAgICAgICAgICAgICAgICAweDAwMDIKPiA+ICsKPiA+ICsvKiBiaXQg ZGVmaW5pdGlvbiBvZiBSRUdfQUNUTF9SRVNFVCByZWdpc3RlciAqLwo+ID4gKyNkZWZpbmUgVzU2 OTFfUExBWSAgICAgICAgICAgICAweDIwMDAwCj4gPiArI2RlZmluZSBBQ1RMX1JFU0VUX0JJVCAg ICAgICAgIDB4MTAwMDAKPiA+ICsjZGVmaW5lIFJFQ09SRF9SSUdIVF9DSE5ORUwgICAgMHgwODAw MAo+ID4gKyNkZWZpbmUgUkVDT1JEX0xFRlRfQ0hOTkVMICAgICAweDA0MDAwCj4gPiArI2RlZmlu ZSBQTEFZX1JJR0hUX0NITk5FTCAgICAgIDB4MDIwMDAKPiA+ICsjZGVmaW5lIFBMQVlfTEVGVF9D SE5ORUwgICAgICAgMHgwMTAwMAo+ID4gKyNkZWZpbmUgREFDX1BMQVkgICAgICAgICAgICAgICAw eDAwODAwCj4gPiArI2RlZmluZSBBRENfUkVDT1JEICAgICAgICAgICAgIDB4MDA0MDAKPiA+ICsj ZGVmaW5lIE04MF9QTEFZICAgICAgICAgICAgICAgMHgwMDIwMAo+ID4gKyNkZWZpbmUgQUNfUkVD T1JEICAgICAgICAgICAgICAweDAwMTAwCj4gPiArI2RlZmluZSBBQ19QTEFZICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMDA4MAo+ID4gKyNkZWZpbmUgSUlTX1JFQ09SRCAgICAgICAgICAgICAw eDAwMDQwCj4gPiArI2RlZmluZSBJSVNfUExBWSAgICAgICAgICAgICAgIDB4MDAwMjAKPiA+ICsj ZGVmaW5lIERBQ19SRVNFVCAgICAgICAgICAgICAgMHgwMDAxMAo+ID4gKyNkZWZpbmUgQURDX1JF U0VUICAgICAgICAgICAgICAweDAwMDA4Cj4gPiArI2RlZmluZSBNODBfUkVTRVQgICAgICAgICAg ICAgIDB4MDAwMDQKPiA+ICsjZGVmaW5lIEFDX1JFU0VUICAgICAgICAgICAgICAgMHgwMDAwMgo+ ID4gKyNkZWZpbmUgSUlTX1JFU0VUICAgICAgICAgICAgICAweDAwMDAxCj4gPiArCj4gPiArLyog Yml0IGRlZmluaXRpb24gb2YgUkVHX0FDVExfQUNDT04gcmVnaXN0ZXIgKi8KPiA+ICsjZGVmaW5l IEFDX0JDTEtfUFVfRU4gICAgICAgICAgMHgyMAo+ID4gKyNkZWZpbmUgQUNfUl9GSU5JU0ggICAg ICAgICAgICAweDEwCj4gPiArI2RlZmluZSBBQ19XX0ZJTklTSCAgICAgICAgICAgIDB4MDgKPiA+ ICsjZGVmaW5lIEFDX1dfUkVTICAgICAgICAgICAgICAgMHgwNAo+ID4gKyNkZWZpbmUgQUNfQ19S RVMgICAgICAgICAgICAgICAweDAyCj4gPiArCj4gPiArLyogYml0IGRlZmluaXRpb24gb2YgQUNU TF9SU1IgcmVnaXN0ZXIgKi8KPiA+ICsjZGVmaW5lIFJfRklGT19FTVBUWSAgICAgICAgICAgMHgw NAo+ID4gKyNkZWZpbmUgUl9ETUFfRU5EX0lSUSAgICAgICAgICAweDAyCj4gPiArI2RlZmluZSBS X0RNQV9NSURETEVfSVJRICAgICAgIDB4MDEKPiA+ICsKPiA+ICsvKiBiaXQgZGVmaW5pdGlvbiBv ZiBBQ1RMX1BTUiByZWdpc3RlciAqLwo+ID4gKyNkZWZpbmUgUF9GSUZPX0VNUFRZICAgICAgICAg ICAweDA0Cj4gPiArI2RlZmluZSBQX0RNQV9FTkRfSVJRICAgICAgICAgIDB4MDIKPiA+ICsjZGVm aW5lIFBfRE1BX01JRERMRV9JUlEgICAgICAgMHgwMQo+ID4gKwo+ID4gKy8qIGJpdCBkZWZpbml0 aW9uIG9mIEFDVExfQUNPUzAgcmVnaXN0ZXIgKi8KPiA+ICsjZGVmaW5lIFNMT1QxX1ZBTElEICAg ICAgICAgICAgMHgwMQo+ID4gKyNkZWZpbmUgU0xPVDJfVkFMSUQgICAgICAgICAgICAweDAyCj4g PiArI2RlZmluZSBTTE9UM19WQUxJRCAgICAgICAgICAgIDB4MDQKPiA+ICsjZGVmaW5lIFNMT1Q0 X1ZBTElEICAgICAgICAgICAgMHgwOAo+ID4gKyNkZWZpbmUgVkFMSURfRlJBTUUgICAgICAgICAg ICAweDEwCj4gPiArCj4gPiArLyogYml0IGRlZmluaXRpb24gb2YgQUNUTF9BQ09TMSByZWdpc3Rl ciAqLwo+ID4gKyNkZWZpbmUgUl9XQiAgICAgICAgICAgICAgICAgICAweDgwCj4gPiArCj4gPiAr I2RlZmluZSBDT0RFQ19SRUFEWSAgICAgICAgICAgIDB4MTAKPiA+ICsjZGVmaW5lIFJFU0VUX1BS U1IgICAgICAgICAgICAgMHgwMAo+ID4gKyNkZWZpbmUgQVVESU9fV1JJVEUoYWRkciwgdmFsKSBf X3Jhd193cml0ZWwodmFsLCBhZGRyKQo+ID4gKyNkZWZpbmUgQVVESU9fUkVBRChhZGRyKSAgICAg ICBfX3Jhd19yZWFkbChhZGRyKQo+ID4gKyNkZWZpbmUgUENNX1RYICAgICAgICAgICAgICAgICAw Cj4gPiArI2RlZmluZSBQQ01fUlggICAgICAgICAgICAgICAgIDEKPiA+ICsjZGVmaW5lIFNVQlNU UkVBTV9UWVBFKHN1YnN0cmVhbSkgXAo+ID4gKyAgICAgICAoKHN1YnN0cmVhbSktPnN0cmVhbSA9 PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLID8gUENNX1RYIDogUENNX1JYKQoKCldoeSBhcmUg eW91IHJlZGVmaW5pbmcgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyBhcyBQQ01fVFguIEl0IG1h a2VzIHRoZQpjb2RlIG1vcmUgZGlmZmljdWx0IHRvIHJlYWQuCgo+ID4gKwo+ID4gK3N0cnVjdCBu dWM5MDBfYXVkaW8gewo+ID4gKyAgICAgICB2b2lkIF9faW9tZW0gKm1taW87Cj4gPiArICAgICAg IHNwaW5sb2NrX3QgbG9jazsKPiA+ICsgICAgICAgZG1hX2FkZHJfdCBkbWFfYWRkclsyXTsKPiA+ ICsgICAgICAgdW5zaWduZWQgbG9uZyBidWZmZXJzaXplWzJdOwo+ID4gKyAgICAgICB1bnNpZ25l ZCBsb25nIGlycV9udW07Cj4gPiArICAgICAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vi c3RyZWFtOwo+ID4gKyAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiA+ICsgICAgICAgc3Ry dWN0IGNsayAqY2xrOwo+ID4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gPiArCj4gPiAr fTsKPiA+ICsKPiA+ICtleHRlcm4gc3RydWN0IG51YzkwMF9hdWRpbyAqbnVjOTAwX2FjOTdfZGF0 YTsKPiA+ICtleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIG51YzkwMF9hYzk3X2RhaTsKPiA+ICtl eHRlcm4gc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gbnVjOTAwX3NvY19wbGF0Zm9ybTsKPiA+ICsK PiA+ICsjZW5kaWYgLyplbmQgX05VQzkwMF9BVURJT19IICovCj4gPiBkaWZmIC0tZ2l0IGEvc291 bmQvc29jL251YzkwMC9udWM5MDAtcGNtLmMgYi9zb3VuZC9zb2MvbnVjOTAwL251YzkwMC1wY20u Ywo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLjMyYTUwM2MKPiA+ IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL3NvdW5kL3NvYy9udWM5MDAvbnVjOTAwLXBjbS5jCj4g PiBAQCAtMCwwICsxLDM1MiBAQAo+ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDEwIE51 dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KPiA+ICsgKgo+ID4gKyAqIFdhbiBab25nU2h1 biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gPiAr ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKPiA+ICsgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNp b24gMiBvZiB0aGUgTGljZW5zZS4KPiA+ICsgKgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9pby5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4K PiA+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFw cGluZy5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Cj4gPiArI2luY2x1ZGUg PHNvdW5kL3BjbS5oPgo+ID4gKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+Cj4gPiArI2lu Y2x1ZGUgPHNvdW5kL3NvYy5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+ Cj4gPiArCj4gPiArI2luY2x1ZGUgIm51YzkwMC1hdWlkby5oIgo+ID4gKwo+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBudWM5MDBfcGNtX2hhcmR3YXJlID0gewo+ID4g KyAgICAgICAuaW5mbyAgICAgICAgICAgICAgICAgICA9IFNORFJWX1BDTV9JTkZPX0lOVEVSTEVB VkVEIHwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTkRSVl9Q Q01fSU5GT19CTE9DS19UUkFOU0ZFUiB8Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU05EUlZfUENNX0lORk9fTU1BUCB8Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8Cj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fUEFVU0Ug fAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9J TkZPX1JFU1VNRSwKPiA+ICsgICAgICAgLmZvcm1hdHMgICAgICAgICAgICAgICAgPSBTTkRSVl9Q Q01fRk1UQklUX1MxNl9MRSwKPiA+ICsgICAgICAgLmNoYW5uZWxzX21pbiAgICAgICAgICAgPSAx LAo+ID4gKyAgICAgICAuY2hhbm5lbHNfbWF4ICAgICAgICAgICA9IDIsCj4gPiArICAgICAgIC5i dWZmZXJfYnl0ZXNfbWF4ICAgICAgID0gNCoxMDI0LAo+ID4gKyAgICAgICAucGVyaW9kX2J5dGVz X21pbiAgICAgICA9IDEqMTAyNCwKPiA+ICsgICAgICAgLnBlcmlvZF9ieXRlc19tYXggICAgICAg PSA0KjEwMjQsCj4gPiArICAgICAgIC5wZXJpb2RzX21pbiAgICAgICAgICAgID0gMSwKPiA+ICsg ICAgICAgLnBlcmlvZHNfbWF4ICAgICAgICAgICAgPSAxMDI0LAo+ID4gK307Cj4gPiArCj4gPiAr c3RhdGljIGludCBudWM5MDBfZG1hX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0g KnN1YnN0cmVhbSwKPiA+ICsgICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMp Cj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vi c3RyZWFtLT5ydW50aW1lOwo+ID4gKyAgICAgICBzdHJ1Y3QgbnVjOTAwX2F1ZGlvICpudWM5MDBf YXVkaW8gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Cj4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcg ZmxhZ3MsIHN0eXBlID0gU1VCU1RSRUFNX1RZUEUoc3Vic3RyZWFtKTsKPiA+ICsgICAgICAgaW50 IHJldCA9IDA7Cj4gPiArCj4gPiArICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZudWM5MDBfYXVk aW8tPmxvY2ssIGZsYWdzKTsKPiA+ICsKPiA+ICsgICAgICAgcmV0ID0gc25kX3BjbV9saWJfbWFs bG9jX3BhZ2VzKHN1YnN0cmVhbSwgcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpKTsKPiA+ICsg ICAgICAgaWYgKHJldCA8IDApCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsK PiA+ICsgICAgICAgbnVjOTAwX2F1ZGlvLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07Cj4gPiArICAg ICAgIG51YzkwMF9hdWRpby0+ZG1hX2FkZHJbc3R5cGVdID0gcnVudGltZS0+ZG1hX2FkZHI7Cj4g PiArICAgICAgIG51YzkwMF9hdWRpby0+YnVmZmVyc2l6ZVtzdHlwZV0gPSBwYXJhbXNfYnVmZmVy X2J5dGVzKHBhcmFtcyk7Cj4gPiArCj4gPiArICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUo Jm51YzkwMF9hdWRpby0+bG9jaywgZmxhZ3MpOwo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gcmV0 Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBudWM5MDBfdXBkYXRlX2RtYV9yZWdpc3Rl cihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IGNvdW50KQo+ID4g K3sKPiA+ICsgICAgICAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVh bS0+cnVudGltZTsKPiA+ICsgICAgICAgc3RydWN0IG51YzkwMF9hdWRpbyAqbnVjOTAwX2F1ZGlv ID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwo+ID4gKyAgICAgICB2b2lkIF9faW9tZW0gKm1taW9f YWRkciwgKm1taW9fbGVuOwo+ID4gKwo+ID4gKyAgICAgICBpZiAoU1VCU1RSRUFNX1RZUEUoc3Vi c3RyZWFtKSA9PSBQQ01fVFgpIHsKPiA+ICsgICAgICAgICAgICAgICBtbWlvX2FkZHIgPSBudWM5 MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1BEU1RCOwo+ID4gKyAgICAgICAgICAgICAgIG1taW9fbGVu ID0gbnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9QRFNUX0xFTkdUSDsKPiA+ICsgICAgICAgfSBl bHNlIHsKPiA+ICsgICAgICAgICAgICAgICBtbWlvX2FkZHIgPSBudWM5MDBfYXVkaW8tPm1taW8g KyBBQ1RMX1JEU1RCOwo+ID4gKyAgICAgICAgICAgICAgIG1taW9fbGVuID0gbnVjOTAwX2F1ZGlv LT5tbWlvICsgQUNUTF9SRFNUX0xFTkdUSDsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAg ICBBVURJT19XUklURShtbWlvX2FkZHIsIGRtYV9hZGRyKTsKPiA+ICsgICAgICAgQVVESU9fV1JJ VEUobW1pb19sZW4sIGNvdW50KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbnVjOTAw X2RtYV9zdGFydChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKPiA+ICt7Cj4g PiArICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1 bnRpbWU7Cj4gPiArICAgICAgIHN0cnVjdCBudWM5MDBfYXVkaW8gKm51YzkwMF9hdWRpbyA9IHJ1 bnRpbWUtPnByaXZhdGVfZGF0YTsKPiA+ICsgICAgICAgdW5zaWduZWQgbG9uZyB2YWw7Cj4gPiAr Cj4gPiArICAgICAgIHZhbCA9IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9D T04pOwo+ID4gKyAgICAgICB2YWwgfD0gKFRfRE1BX0lSUSB8IFJfRE1BX0lSUSk7Cj4gPiArICAg ICAgIEFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQ09OLCB2YWwpOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBudWM5MDBfZG1hX3N0b3Aoc3RydWN0IHNuZF9wY21f c3Vic3RyZWFtICpzdWJzdHJlYW0pCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3Qgc25kX3BjbV9y dW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwo+ID4gKyAgICAgICBzdHJ1Y3Qg bnVjOTAwX2F1ZGlvICpudWM5MDBfYXVkaW8gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Cj4gPiAr ICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsOwo+ID4gKwo+ID4gKyAgICAgICB2YWwgPSBBVURJT19S RUFEKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQ09OKTsKPiA+ICsgICAgICAgdmFsICY9IH4o VF9ETUFfSVJRIHwgUl9ETUFfSVJRKTsKPiA+ICsgICAgICAgQVVESU9fV1JJVEUobnVjOTAwX2F1 ZGlvLT5tbWlvICsgQUNUTF9DT04sIHZhbCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpcnFy ZXR1cm5fdCBudWM5MDBfZG1hX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCj4gPiAr ewo+ID4gKyAgICAgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IGRldl9p ZDsKPiA+ICsgICAgICAgc3RydWN0IG51YzkwMF9hdWRpbyAqbnVjOTAwX2F1ZGlvID0gc3Vic3Ry ZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7Cj4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgdmFs Owo+ID4gKwo+ID4gKyAgICAgICBzcGluX2xvY2soJm51YzkwMF9hdWRpby0+bG9jayk7Cj4gPiAr Cj4gPiArICAgICAgIHZhbCA9IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9D T04pOwo+ID4gKwo+ID4gKyAgICAgICBpZiAodmFsICYgUl9ETUFfSVJRKSB7Cj4gPiArICAgICAg ICAgICAgICAgQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9DT04sIHZhbCB8 IFJfRE1BX0lSUSk7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgdmFsID0gQVVESU9fUkVBRChu dWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1JTUik7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAg aWYgKHZhbCAmIFJfRE1BX01JRERMRV9JUlEpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IHZhbCB8PSBSX0RNQV9NSURETEVfSVJROwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgQVVE SU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9SU1IsIHZhbCk7Cj4gPiArICAgICAg ICAgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgIGlmICh2YWwgJiBSX0RNQV9FTkRf SVJRKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICB2YWwgfD0gUl9ETUFfRU5EX0lSUTsK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIEFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1p byArIEFDVExfUlNSLCB2YWwpOwo+ID4gKyAgICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgfSBl bHNlIGlmICh2YWwgJiBUX0RNQV9JUlEpIHsKPiA+ICsgICAgICAgICAgICAgICBBVURJT19XUklU RShudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0NPTiwgdmFsIHwgVF9ETUFfSVJRKTsKPiA+ICsK PiA+ICsgICAgICAgICAgICAgICB2YWwgPSBBVURJT19SRUFEKG51YzkwMF9hdWRpby0+bW1pbyAr IEFDVExfUFNSKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBpZiAodmFsICYgUF9ETUFfTUlE RExFX0lSUSkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdmFsIHw9IFBfRE1BX01JRERM RV9JUlE7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBBVURJT19XUklURShudWM5MDBfYXVk aW8tPm1taW8gKyBBQ1RMX1BTUiwgdmFsKTsKPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiArCj4g PiArICAgICAgICAgICAgICAgaWYgKHZhbCAmIFBfRE1BX0VORF9JUlEpIHsKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIHZhbCB8PSBQX0RNQV9FTkRfSVJROwo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9QU1IsIHZhbCk7 Cj4gPiArICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAg ICAgICAgIGRldl9lcnIobnVjOTAwX2F1ZGlvLT5kZXYsICJXcm9uZyBETUEgaW50ZXJydXB0IHN0 YXR1cyFcbiIpOwo+ID4gKyAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZudWM5MDBfYXVkaW8t PmxvY2spOwo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKPiA+ICsgICAg ICAgfQo+ID4gKwo+ID4gKyAgICAgICBzcGluX3VubG9jaygmbnVjOTAwX2F1ZGlvLT5sb2NrKTsK PiA+ICsKPiA+ICsgICAgICAgc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOwo+ID4g Kwo+ID4gKyAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBpbnQgbnVjOTAwX2RtYV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3Ry ZWFtKQo+ID4gK3sKPiA+ICsgICAgICAgc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0p Owo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBudWM5 MDBfZG1hX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCj4gPiAr ewo+ID4gKyAgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFt LT5ydW50aW1lOwo+ID4gKyAgICAgICBzdHJ1Y3QgbnVjOTAwX2F1ZGlvICpudWM5MDBfYXVkaW8g PSBydW50aW1lLT5wcml2YXRlX2RhdGE7Cj4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3Ms IHZhbCwgc3R5cGUgPSBTVUJTVFJFQU1fVFlQRShzdWJzdHJlYW0pOzsKPiA+ICsKPiA+ICsgICAg ICAgc3Bpbl9sb2NrX2lycXNhdmUoJm51YzkwMF9hdWRpby0+bG9jaywgZmxhZ3MpOwo+ID4gKwo+ ID4gKyAgICAgICBudWM5MDBfdXBkYXRlX2RtYV9yZWdpc3RlcihzdWJzdHJlYW0sCj4gPiArICAg ICAgICAgICAgICAgbnVjOTAwX2F1ZGlvLT5kbWFfYWRkcltzdHlwZV0sIG51YzkwMF9hdWRpby0+ YnVmZmVyc2l6ZVtzdHlwZV0pOwo+ID4gKwo+ID4gKyAgICAgICB2YWwgPSBBVURJT19SRUFEKG51 YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUkVTRVQpOwo+ID4gKwo+ID4gKyAgICAgICBzd2l0Y2gg KHJ1bnRpbWUtPmNoYW5uZWxzKSB7Cj4gPiArICAgICAgIGNhc2UgMToKPiA+ICsgICAgICAgICAg ICAgICBpZiAoUENNX1RYID09IHN0eXBlKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICB2 YWwgJj0gfihQTEFZX0xFRlRfQ0hOTkVMIHwgUExBWV9SSUdIVF9DSE5ORUwpOwo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgdmFsIHw9IFBMQVlfUklHSFRfQ0hOTkVMOwo+ID4gKyAgICAgICAg ICAgICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICB2YWwgJj0gfihSRUNP UkRfTEVGVF9DSE5ORUwgfCBSRUNPUkRfUklHSFRfQ0hOTkVMKTsKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIHZhbCB8PSBSRUNPUkRfUklHSFRfQ0hOTkVMOwo+ID4gKyAgICAgICAgICAgICAg IH0KPiA+ICsgICAgICAgICAgICAgICBBVURJT19XUklURShudWM5MDBfYXVkaW8tPm1taW8gKyBB Q1RMX1JFU0VULCB2YWwpOwo+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICBj YXNlIDI6Cj4gPiArICAgICAgICAgICAgICAgaWYgKFBDTV9UWCA9PSBzdHlwZSkKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIHZhbCB8PSAoUExBWV9MRUZUX0NITk5FTCB8IFBMQVlfUklHSFRf Q0hOTkVMKTsKPiA+ICsgICAgICAgICAgICAgICBlbHNlCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICB2YWwgfD0gKFJFQ09SRF9MRUZUX0NITk5FTCB8IFJFQ09SRF9SSUdIVF9DSE5ORUwpOwo+ ID4gKyAgICAgICAgICAgICAgIEFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExf UkVTRVQsIHZhbCk7Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgIGRlZmF1 bHQ6Cj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArICAgICAgIH0KPiA+ ICsgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnVjOTAwX2F1ZGlvLT5sb2NrLCBmbGFn cyk7Cj4gPiArICAgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IG51 YzkwMF9kbWFfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50 IGNtZCkKPiA+ICt7Cj4gPiArICAgICAgIGludCByZXQgPSAwOwo+ID4gKwo+ID4gKyAgICAgICBz d2l0Y2ggKGNtZCkgewo+ID4gKyAgICAgICBjYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgo+ ID4gKyAgICAgICBjYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKPiA+ICsgICAgICAgICAg ICAgICBudWM5MDBfZG1hX3N0YXJ0KHN1YnN0cmVhbSk7Cj4gPiArICAgICAgICAgICAgICAgYnJl YWs7Cj4gPiArCj4gPiArICAgICAgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKPiA+ICsg ICAgICAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgo+ID4gKyAgICAgICAgICAgICAg IG51YzkwMF9kbWFfc3RvcChzdWJzdHJlYW0pOwo+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ ID4gKwo+ID4gKyAgICAgICBkZWZhdWx0Ogo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IC1FSU5W QUw7Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsg ICAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiAraW50IG51YzkwMF9kbWFfZ2V0cG9z aXRpb24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1hX2FkZHJfdCAqc3JjLCBkbWFfYWRkcl90 ICpkc3QpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1l ID0gc3Vic3RyZWFtLT5ydW50aW1lOwo+ID4gKyAgICAgICBzdHJ1Y3QgbnVjOTAwX2F1ZGlvICpu dWM5MDBfYXVkaW8gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7Cj4gPiArCj4gPiArICAgICAgIGlm IChzcmMgIT0gTlVMTCkKPiA+ICsgICAgICAgICAgICAgICAqc3JjID0gQVVESU9fUkVBRChudWM5 MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1BEU1RDKTsKPiA+ICsKPiA+ICsgICAgICAgaWYgKGRzdCAh PSBOVUxMKQo+ID4gKyAgICAgICAgICAgICAgICpkc3QgPSBBVURJT19SRUFEKG51YzkwMF9hdWRp by0+bW1pbyArIEFDVExfUkRTVEMpOwo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHNuZF9wY21fdWZyYW1lc190IG51YzkwMF9kbWFfcG9pbnRlcihz dHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKPiA+ICt7Cj4gPiArICAgICAgIHN0 cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Cj4gPiAr ICAgICAgIGRtYV9hZGRyX3Qgc3JjLCBkc3Q7Cj4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgcmVz Owo+ID4gKwo+ID4gKyAgICAgICBudWM5MDBfZG1hX2dldHBvc2l0aW9uKHN1YnN0cmVhbSwgJnNy YywgJmRzdCk7Cj4gPiArCj4gPiArICAgICAgIGlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRS Vl9QQ01fU1RSRUFNX0NBUFRVUkUpCj4gPiArICAgICAgICAgICAgICAgcmVzID0gZHN0IC0gcnVu dGltZS0+ZG1hX2FkZHI7Cj4gPiArICAgICAgIGVsc2UKPiA+ICsgICAgICAgICAgICAgICByZXMg PSBzcmMgLSBydW50aW1lLT5kbWFfYWRkcjsKPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIGJ5dGVz X3RvX2ZyYW1lcyhzdWJzdHJlYW0tPnJ1bnRpbWUsIHJlcyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBpbnQgbnVjOTAwX2RtYV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3Ry ZWFtKQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9 IHN1YnN0cmVhbS0+cnVudGltZTsKPiA+ICsgICAgICAgc3RydWN0IG51YzkwMF9hdWRpbyAqbnVj OTAwX2F1ZGlvOwo+ID4gKwo+ID4gKyAgICAgICBzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1z KHN1YnN0cmVhbSwgJm51YzkwMF9wY21faGFyZHdhcmUpOwo+ID4gKwo+ID4gKyAgICAgICBudWM5 MDBfYXVkaW8gPSBudWM5MDBfYWM5N19kYXRhOwo+ID4gKwo+ID4gKyAgICAgICBpZiAocmVxdWVz dF9pcnEobnVjOTAwX2F1ZGlvLT5pcnFfbnVtLCBudWM5MDBfZG1hX2ludGVycnVwdCwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIElSUUZfRElTQUJMRUQsICJudWM5MDAtZG1hIiwgc3Vic3Ry ZWFtKSkKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwo+ID4gKwo+ID4gKyAgICAg ICBydW50aW1lLT5wcml2YXRlX2RhdGEgPSBudWM5MDBfYXVkaW87Cj4gPiArCj4gPiArICAgICAg IHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IG51YzkwMF9kbWFfY2xvc2Uo c3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCj4gPiArewo+ID4gKyAgICAgICBz dHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwo+ID4g KyAgICAgICBzdHJ1Y3QgbnVjOTAwX2F1ZGlvICpudWM5MDBfYXVkaW8gPSBydW50aW1lLT5wcml2 YXRlX2RhdGE7Cj4gPiArCj4gPiArICAgICAgIGZyZWVfaXJxKG51YzkwMF9hdWRpby0+aXJxX251 bSwgc3Vic3RyZWFtKTsKPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyBpbnQgbnVjOTAwX2RtYV9tbWFwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAq c3Vic3RyZWFtLAo+ID4gKyAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiA+ICt7 Cj4gPiArICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0t PnJ1bnRpbWU7Cj4gPiArCj4gPiArICAgICAgIHJldHVybiBkbWFfbW1hcF93cml0ZWNvbWJpbmUo c3Vic3RyZWFtLT5wY20tPmNhcmQtPmRldiwgdm1hLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhLAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUtPmRtYV9hZGRyLAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUtPmRtYV9ieXRlcyk7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgbnVjOTAwX2RtYV9vcHMgPSB7 Cj4gPiArICAgICAgIC5vcGVuICAgICAgICAgICA9IG51YzkwMF9kbWFfb3BlbiwKPiA+ICsgICAg ICAgLmNsb3NlICAgICAgICAgID0gbnVjOTAwX2RtYV9jbG9zZSwKPiA+ICsgICAgICAgLmlvY3Rs ICAgICAgICAgID0gc25kX3BjbV9saWJfaW9jdGwsCj4gPiArICAgICAgIC5od19wYXJhbXMgICAg ICA9IG51YzkwMF9kbWFfaHdfcGFyYW1zLAo+ID4gKyAgICAgICAuaHdfZnJlZSAgICAgICAgPSBu dWM5MDBfZG1hX2h3X2ZyZWUsCj4gPiArICAgICAgIC5wcmVwYXJlICAgICAgICA9IG51YzkwMF9k bWFfcHJlcGFyZSwKPiA+ICsgICAgICAgLnRyaWdnZXIgICAgICAgID0gbnVjOTAwX2RtYV90cmln Z2VyLAo+ID4gKyAgICAgICAucG9pbnRlciAgICAgICAgPSBudWM5MDBfZG1hX3BvaW50ZXIsCj4g PiArICAgICAgIC5tbWFwICAgICAgICAgICA9IG51YzkwMF9kbWFfbW1hcCwKPiA+ICt9Owo+ID4g Kwo+ID4gK3N0YXRpYyB2b2lkIG51YzkwMF9kbWFfZnJlZV9kbWFfYnVmZmVycyhzdHJ1Y3Qgc25k X3BjbSAqcGNtKQo+ID4gK3sKPiA+ICsgICAgICAgc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfZnJl ZV9mb3JfYWxsKHBjbSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB1NjQgbnVjOTAwX3BjbV9k bWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKPiA+ICtzdGF0aWMgaW50IG51YzkwMF9kbWFfbmV3 KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKPiA+ICsgICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpk YWksIHN0cnVjdCBzbmRfcGNtICpwY20pCj4gPiArewo+ID4gKyAgICAgICBpZiAoIWNhcmQtPmRl di0+ZG1hX21hc2spCj4gPiArICAgICAgICAgICAgICAgY2FyZC0+ZGV2LT5kbWFfbWFzayA9ICZu dWM5MDBfcGNtX2RtYW1hc2s7Cj4gPiArICAgICAgIGlmICghY2FyZC0+ZGV2LT5jb2hlcmVudF9k bWFfbWFzaykKPiA+ICsgICAgICAgICAgICAgICBjYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNr ID0gRE1BX0JJVF9NQVNLKDMyKTsKPiA+ICsKPiA+ICsgICAgICAgc25kX3BjbV9saWJfcHJlYWxs b2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKPiA+ICsgICAgICAg ICAgICAgICBjYXJkLT5kZXYsIDQgKiAxMDI0LCAoNCAqIDEwMjQpIC0gMSk7Cj4gPiArCj4gPiAr ICAgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9y bSBudWM5MDBfc29jX3BsYXRmb3JtID0gewo+ID4gKyAgICAgICAubmFtZSAgICAgICAgICAgPSAi bnVjOTAwLWRtYSIsCj4gPiArICAgICAgIC5wY21fb3BzICAgICAgICA9ICZudWM5MDBfZG1hX29w cywKPiA+ICsgICAgICAgLnBjbV9uZXcgICAgICAgID0gbnVjOTAwX2RtYV9uZXcsCj4gPiArICAg ICAgIC5wY21fZnJlZSAgICAgICA9IG51YzkwMF9kbWFfZnJlZV9kbWFfYnVmZmVycywKPiA+ICt9 Cj4gPiArRVhQT1JUX1NZTUJPTF9HUEwobnVjOTAwX3NvY19wbGF0Zm9ybSk7Cj4gPiArCj4gPiAr c3RhdGljIGludCBfX2luaXQgbnVjOTAwX3NvY19wbGF0Zm9ybV9pbml0KHZvaWQpCj4gPiArewo+ ID4gKyAgICAgICByZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9wbGF0Zm9ybSgmbnVjOTAwX3NvY19w bGF0Zm9ybSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIF9fZXhpdCBudWM5MDBfc29j X3BsYXRmb3JtX2V4aXQodm9pZCkKPiA+ICt7Cj4gPiArICAgICAgIHNuZF9zb2NfdW5yZWdpc3Rl cl9wbGF0Zm9ybSgmbnVjOTAwX3NvY19wbGF0Zm9ybSk7Cj4gPiArfQo+ID4gKwo+ID4gK21vZHVs ZV9pbml0KG51YzkwMF9zb2NfcGxhdGZvcm1faW5pdCk7Cj4gPiArbW9kdWxlX2V4aXQobnVjOTAw X3NvY19wbGF0Zm9ybV9leGl0KTsKPiA+ICsKPiA+ICtNT0RVTEVfQVVUSE9SKCJXYW4gWm9uZ1No dW4sIDxtY3Vvcy5jb21AZ21haWwuY29tPiIpOwo+ID4gK01PRFVMRV9ERVNDUklQVElPTigibnVj OTAwIEF1ZGlvIERNQSBtb2R1bGUiKTsKPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gPiAt LQo+ID4gMS42LjMuMwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkFsc2EtZGV2ZWwgbWFpbGluZyBsaXN0CkFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9y ZwpodHRwOi8vbWFpbG1hbi5hbHNhLXByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vYWxzYS1k ZXZlbAo=