From mboxrd@z Thu Jan 1 00:00:00 1970 From: chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org Subject: Re: [DPU PATCH 2/3] drm/msm/dp: add displayPort driver support Date: Thu, 14 Feb 2019 04:28:33 -0800 Message-ID: <03cce7603e8e65a88d08d9f3558019ac@codeaurora.org> References: <1539191759-14836-1-git-send-email-chandanu@codeaurora.org> <1539191759-14836-3-git-send-email-chandanu@codeaurora.org> <20181023162821.GE154160@art_vandelay> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181023162821.GE154160@art_vandelay> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Sean Paul Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org T24gMjAxOC0xMC0yMyAwOToyOCwgU2VhbiBQYXVsIHdyb3RlOgo+IE9uIFdlZCwgT2N0IDEwLCAy MDE4IGF0IDEwOjE1OjU4QU0gLTA3MDAsIENoYW5kYW4gVWRkYXJhanUgd3JvdGU6Cj4+IEFkZCB0 aGUgbmVlZGVkIGRpc3BsYXlQb3J0IGZpbGVzIHRvIGVuYWJsZSBEUCBkcml2ZXIKPj4gb24gbXNt IHRhcmdldC4KPj4gCj4+ICJkcF9kaXNwbGF5IiBtb2R1bGUgaXMgdGhlIG1haW4gbW9kdWxlIHRo YXQgY2FsbHMgaW50bwo+PiBvdGhlciBzdWItbW9kdWxlcy4gImRwX2RybSIgZmlsZSByZXByZXNl bnRzIHRoZSBpbnRlcmZhY2UKPj4gYmV0d2VlbiBEUk0gZnJhbWV3b3JrIGFuZCBEUCBkcml2ZXIu Cj4+IAo+IAoKSGVsbG8gU2VhbiwKSSBoYXZlIHJlc3BvbmRlZCB0byBhbGwgb2YgeW91ciBjb21t ZW50cyBhbmQgcXVlcmllcy4gSSBoYXZlIHNwZWNpZmllZCAKdGhlIGNvbW1lbnRzIGFkZHJlc3Nl ZAppbiBWMiBwYXRjaCBzZXJpZXMgYW5kIHdoYXQgSSBoYXZlIG1pc3NlZCB0aGF0IHdpbGwgYmUg Zml4ZWQgaW4gVjMuCgoKPiBIaSBDaGFuZGFuLAo+IEEgZmV3IHRoZW1lcyB3aGljaCBJJ3ZlIHBv aW50ZWQgb3V0IGJlbG93LCBidXQgd2FudCB0byBjYWxsIG91dCBhdCB0aGUgCj4gdG9wIHNvCj4g aXQncyBvYnZpb3VzLgo+IAo+IC0gUGxlYXNlIHJlbW92ZSBhbGwgc3VwZXJmbHVvdXMgTlVMTCBj aGVja3MgYXQgdGhlIGJlZ2lubmluZyBvZiAKPiBmdW5jdGlvbnMuCj4gICBJbmNsdWRlZCBpbiB0 aGlzIGlzIHJlZmxvd2luZyBpbml0aWFsaXphdGlvbiBvZiB2YXJpYWJsZXMgYW5kIAo+IGNoZWNr aW5nIHRoYXQKPiAgIHJldHVybiB0eXBlcyBzdGlsbCBtYWtlIHNlbnNlIChpZTogaWYgYSBmdW5j dGlvbidzIG9ubHkgZXJyb3IgcGF0aCBpcyAKPiB0aGUgTlVMTAo+ICAgY2hlY2ssIG1ha2UgaXQg dm9pZCkuCj4gLSBQbGVhc2UgcmVtb3ZlIGFsbCBvZiB0aGUgbmV3IGNhbGxiYWNrcyBhbmQganVz dCBjYWxsIGZ1bmN0aW9ucyAKPiBkaXJlY3RseS4gVGhpcwo+ICAgc2hvdWxkIGFsc28gZ2V0IHJp ZCBvZiB0aGUgX2dldC9fcHV0IGZ1bmN0aW9ucyB0aGF0IGFsbG9jYXRlL3NldCB0aGVtIAo+IHVw Cj4gLSBQbGVhc2UgY29uc29saWRhdGUgc3RhdGUgc3RydWN0cyBpbnRvIG9uZSBzdHJ1Y3Qgd2l0 aCBhIGZldyAKPiBzdWJzdHJ1Y3RzLAo+ICAgdGhlcmUncyB0b28gbXVjaCBzdGF0ZSByaWdodCBu b3cuCj4gLSBQbGVhc2UgI2RlZmluZSBoYXJkY29kZWQgdmFsdWVzCj4gLSBJbnN0ZWFkIG9mIHNw cmlua2xpbmcgd21iKCkgZXZlcnl3aGVyZSwgdXNlIHJlYWRsL3dyaXRlbCBpbnN0ZWFkIG9mIAo+ ICpfcmVsYXhlZAo+IC0gVGhlcmUgYXJlIGEgYnVuY2ggb2YgcmFjZXMgdGhhdCBJIGZvdW5kLCBw bGVhc2UgYXVkaXQgdGhlIGNvZGUgYW5kIAo+IHJlbW92ZQo+ICAgcmFjZXMgd2l0aCBsb2NrcyBh cyBuZWNlc3NhcnkKPiAtIEkgdHJpZWQgdG8gY2F0Y2ggYXMgbXVjaCBkZWFkIGNvZGUgYXMgcG9z c2libGUsIHBsZWFzZSBhdWRpdCB0aGUgcmVzdCAKPiBmb3IKPiAgIHVudXNlZCBzdHJ1Y3RzL3Zh cmlhYmxlcy9mdW5jdGlvbnMvZXRjCj4gLSBVc2UgZHJtIGRwIGhlbHBlciBzdHJ1Y3RzIGZvciBs aW5rIHBhcmFtZXRlciBzdG9yYWdlCj4gCj4gCj4+IFNpZ25lZC1vZmYtYnk6IENoYW5kYW4gVWRk YXJhanUgPGNoYW5kYW51QGNvZGVhdXJvcmEub3JnPgo+PiAtLS0KPj4gIGRyaXZlcnMvZ3B1L2Ry bS9tc20vS2NvbmZpZyAgICAgICAgICAgICAgICAgfCAgICA5ICsKPj4gIGRyaXZlcnMvZ3B1L2Ry bS9tc20vTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDE1ICstCj4+ICBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5jIHwgIDIwNiArKysrCj4+ICBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5oIHwgICA0NCArCj4+ICBkcml2ZXJzL2dw dS9kcm0vbXNtL2RwL2RwX2F1eC5jICAgICAgICAgICAgIHwgIDU3MCArKysrKysrKysrCj4+ICBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2F1eC5oICAgICAgICAgICAgIHwgICA0NCArCj4+ICBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFsb2cuYyAgICAgICAgIHwgMTE4OCAKPj4gKysr KysrKysrKysrKysrKysrKysKPj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5o ICAgICAgICAgfCAgMTQ0ICsrKwo+PiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmMg ICAgICAgICAgICB8IDE0NzUgCj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysKPj4gIGRyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5oICAgICAgICAgICAgfCAgIDUwICsKPj4gIGRyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuYyAgICAgICAgICAgfCAgNTA3ICsrKysrKysrKwo+ PiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kZWJ1Zy5oICAgICAgICAgICB8ICAgODEgKysK Pj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jICAgICAgICAgfCAgOTc3ICsr KysrKysrKysrKysrKysrCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuaCAg ICAgICAgIHwgICA1NSArCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RybS5jICAgICAg ICAgICAgIHwgIDU0MiArKysrKysrKysrCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Ry bS5oICAgICAgICAgICAgIHwgICA1MiArCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4 dGNvbi5jICAgICAgICAgIHwgIDQwMCArKysrKysrCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX2V4dGNvbi5oICAgICAgICAgIHwgIDExMSArKwo+PiAgZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9saW5rLmMgICAgICAgICAgICB8IDE1NDkgCj4+ICsrKysrKysrKysrKysrKysrKysrKysr KysrKwo+PiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmggICAgICAgICAgICB8ICAx ODQgKysrKwo+PiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jICAgICAgICAgICB8 ICA2MjQgKysrKysrKysrKysKPj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaCAg ICAgICAgICAgfCAgMTIxICsrKwo+PiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIu YyAgICAgICAgICB8ICA2NzkgKysrKysrKysrKysrCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX3BhcnNlci5oICAgICAgICAgIHwgIDIwNSArKysrCj4+ICBkcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX3Bvd2VyLmMgICAgICAgICAgIHwgIDU5OSArKysrKysrKysrKwo+PiAgZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9wb3dlci5oICAgICAgICAgICB8ICAgNTcgKwo+PiAgZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9yZWcuaCAgICAgICAgICAgICB8ICAzNTcgKysrKysrCj4+ICBkcml2 ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuYyAgICAgICAgICAgICAgIHwgICAgMiArCj4+ICBkcml2 ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCAgICAgICAgICAgICAgIHwgICAyMiArCj4+ICBpbmNs dWRlL2RybS9kcm1fZHBfaGVscGVyLmggICAgICAgICAgICAgICAgIHwgICAxOSArCj4+ICAzMCBm aWxlcyBjaGFuZ2VkLCAxMDg4NyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguYwo+PiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4LmgKPj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFsb2cuYwo+PiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5oCj4+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9jdHJsLmMKPj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuaAo+PiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuYwo+PiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuaAo+PiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jCj4+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmgKPj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RybS5jCj4+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0uaAo+PiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmMKPj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2V4dGNvbi5oCj4+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmMKPj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuaAo+PiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuYwo+PiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaAo+PiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmMKPj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5oCj4+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5jCj4+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5oCj4+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9yZWcuaAo+PiAKPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vS2NvbmZpZwo+PiBpbmRleCA4NDNhOWQ0Li5jMzYzZjI0IDEwMDY0NAo+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9LY29u ZmlnCj4+IEBAIC00OSw2ICs0OSwxNSBAQCBjb25maWcgRFJNX01TTV9IRE1JX0hEQ1AKPj4gIAlo ZWxwCj4+ICAJICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gZW5hYmxlIEhEQ1Agc3RhdGUgbWFjaGlu ZQo+PiAKPj4gK2NvbmZpZyBEUk1fTVNNX0RQCj4+ICsJYm9vbCAiRW5hYmxlIERQIHN1cHBvcnQg aW4gTVNNIERSTSBkcml2ZXIiCj4+ICsJZGVwZW5kcyBvbiBEUk1fTVNNCj4+ICsJZGVmYXVsdCBu Cj4+ICsJaGVscAo+PiArCSAgQ29tcGlsZSBpbiBzdXBwb3J0IGZvciBEUCBkcml2ZXIgaW4gbXNt IGRybQo+PiArCSAgZHJpdmVyLiBEUCBleHRlcm5hbCBkaXNwbGF5IHN1cHBvcnQgaXMgZW5hYmxl ZAo+PiArCSAgdGhyb3VnaCB0aGlzIGNvbmZpZyBvcHRpb24uIEl0IGNhbiBiZSBwcmltYXJ5IG9y Cj4+ICsJICBzZWNvbmRhcnkgZGlzcGxheSBvbiBkZXZpY2UuCj4gCj4gV2h5IGFyZSB0aGVzZSBs aW5lIGxlbmd0aHMgc28gc2hvcnQ/IFlvdSBjYW4gZ28gdG8gODAgY29sdW1ucy4gUGxlYXNlIAo+ IGFsc28gYWRkCj4gYW4gZW1wdHkgbGluZSBoZXJlLgpGaXhlZCB0aGlzIGluIFYyLgoKPiAKPj4g IGNvbmZpZyBEUk1fTVNNX0RTSQo+PiAgCWJvb2wgIkVuYWJsZSBEU0kgc3VwcG9ydCBpbiBNU00g RFJNIGRyaXZlciIKPj4gIAlkZXBlbmRzIG9uIERSTV9NU00KPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgCj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmls ZQo+PiBpbmRleCAxOWFiNTIxLi43NjVhOGQ4IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL01ha2VmaWxlCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKPj4g QEAgLTIsNiArMiw3IEBACj4+ICBjY2ZsYWdzLXkgOj0gLUlkcml2ZXJzL2dwdS9kcm0vbXNtCj4+ ICBjY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MQo+PiAgY2NmbGFn cy0kKENPTkZJR19EUk1fTVNNX0RTSSkgKz0gLUlkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaQo+PiAr Y2NmbGFncy0kKENPTkZJR19EUk1fTVNNX0RQKSArPSAtSWRyaXZlcnMvZ3B1L2RybS9tc20vZHAK Pj4gCj4+ICBtc20teSA6PSBcCj4+ICAJYWRyZW5vL2FkcmVub19kZXZpY2UubyBcCj4+IEBAIC05 Myw3ICs5NCwxOSBAQCBtc20teSA6PSBcCj4+ICAJbXNtX3N1Ym1pdHF1ZXVlLm8KPj4gCj4+ICBt c20tJChDT05GSUdfREVCVUdfRlMpICs9IGFkcmVuby9hNXh4X2RlYnVnZnMubyBcCj4+IC0JCQkg IGRpc3AvZHB1MS9kcHVfZGJnLm8KPj4gKwkJCSAgZGlzcC9kcHUxL2RwdV9kYmcubyBcCj4+ICsJ CQkgIGRwL2RwX2RlYnVnLm8KPiAKPiBEb2VzIHRoaXMgY29tcGlsZSBpZiBDT05GSUdfREVCVUdf RlMgaXMgc2VsZWN0ZWQsIGJ1dCBub3QgCj4gQ09ORklHX0RSTV9NU01fRFA/Cj4gCkZpeGVkIHRo aXMgaW4gVjIuIERFQlVHIGZpbGUgaXMgcmVtb3ZlZCBpbiBWMi4KCj4+ICsKPj4gK21zbS0kKENP TkZJR19EUk1fTVNNX0RQKSs9IGRwL2RwX2V4dGNvbi5vIFwKPj4gKwlkcC9kcF9wYXJzZXIubyBc Cj4+ICsJZHAvZHBfcG93ZXIubyBcCj4+ICsJZHAvZHBfY2F0YWxvZy5vIFwKPj4gKwlkcC9kcF9h dXgubyBcCj4+ICsJZHAvZHBfcGFuZWwubyBcCj4+ICsJZHAvZHBfbGluay5vIFwKPj4gKwlkcC9k cF9jdHJsLm8gXAo+PiArCWRwL2RwX2Rpc3BsYXkubyBcCj4+ICsJZHAvZHBfZHJtLm8KPiAKPiBU aGUgcmVzdCBvZiB0aGUgZmlsZSBoYXMgZmlsZXMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLCB0aGlz IHNob3VsZCB0b28uCj4gCkZpeGVkIHRoaXMgaW4gVjIuCgo+PiAKPj4gIG1zbS0kKENPTkZJR19E Uk1fRkJERVZfRU1VTEFUSU9OKSArPSBtc21fZmJkZXYubwo+PiAgbXNtLSQoQ09ORklHX0NPTU1P Tl9DTEspICs9IGRpc3AvbWRwNC9tZHA0X2x2ZHNfcGxsLm8KPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGlsLmMgCj4+IGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2lvX3V0aWwuYwo+PiBpbmRleCA3OTBkMzlmLi4wZjUzYTE1 IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRp bC5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGlsLmMK Pj4gQEAgLTE0LDEwICsxNCwyMTYgQEAKPj4gICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPj4gICNp bmNsdWRlIDxsaW51eC9jbGsvY2xrLWNvbmYuaD4KPj4gICNpbmNsdWRlIDxsaW51eC9lcnIuaD4K Pj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9j b25zdW1lci5oPgo+PiAgI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4+IAo+PiAgI2luY2x1ZGUg ImRwdV9pb191dGlsLmgiCj4+IAo+PiArc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqbXNtX2Rzc19n ZXRfcmVzX2J5bmFtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIAo+PiAqcGRldiwKPj4gKwkJCQkJ ICAgICAgIHVuc2lnbmVkIGludCB0eXBlLAo+PiArCQkJCQkgICAgICAgY29uc3QgY2hhciAqbmFt ZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7Cj4+ICsKPj4gKwlyZXMg PSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIHR5cGUsIG5hbWUpOwo+PiArCWlm ICghcmVzKQo+PiArCQlERVZfRVJSKCIlczogJyVzJyByZXNvdXJjZSBub3QgZm91bmRcbiIsIF9f ZnVuY19fLCBuYW1lKTsKPj4gKwo+PiArCXJldHVybiByZXM7Cj4+ICt9IC8qIG1zbV9kc3NfZ2V0 X3Jlc19ieW5hbWUgKi8KPiAKPiBXaHkgZG9uJ3QgeW91IGp1c3QgY2FsbCBwbGF0Zm9ybV9nZXRf cmVzb3VyY2VfYnluYW1lIGRpcmVjdGx5Pwo+IApGaXhlZCB0aGlzIGluIFYyLgoKPj4gKwo+PiAr aW50IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwK Pj4gKwkJCSAgIHN0cnVjdCBkc3NfaW9fZGF0YSAqaW9fZGF0YSwgY29uc3QgY2hhciAqbmFtZSkK Pj4gK3sKPj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7Cj4+ICsKPj4gKwlpZiAoIXBk ZXYgfHwgIWlvX2RhdGEpIHsKPiAKPiBHaXZlbiB0aGF0IHdlJ3ZlIGJlZW4gYWdncmVzc2l2ZWx5 IHRyeWluZyB0byBnZXQgcmlkIG9mIHRoZXNlIAo+IHN1cGVyZmx1b3VzCj4gY2hlY2tzLCBJJ20g bm90IHRocmlsbGVkIHRoYXQgdGhleSdyZSBiZWluZyByZS1pbnRyb2R1Y2VkLiBDYW4geW91IAo+ IHBsZWFzZSBnbwo+IHRocm91Z2ggdGhlIHBhdGNoIGFuZCByZW1vdmUgYWxsIG9mIHRoZSB1bm5l Y2Vzc2FyeSBjaGVja3M/Cj4gCk1vc3Qgb2YgdGhlbSBoYXZlIGJlZW4gcmVtb3ZlZCBpbiBWMiBw YXRjaC4gT25seSBrZXB0IHRoZSBjaGVja3Mgd2hlcmUgCm5lY2Vzc2FyeS4KV2lsbCBnbyB0aHJv dWdoIHRoZSBmaWxlcyBhZ2FpbiBhbmQgc2VlIGlmIEkgaGF2ZSBtaXNzZWQgYW55dGhpbmcuIChG b3IgClYzKQoKPj4gKwkJREVWX0VSUigiJXBTLT4lczogaW52YWxpZCBpbnB1dFxuIiwKPj4gKwkJ CV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18pOwo+PiArCQlyZXR1cm4gLUVJ TlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlyZXMgPSBtc21fZHNzX2dldF9yZXNfYnluYW1lKHBkZXYs IElPUkVTT1VSQ0VfTUVNLCBuYW1lKTsKPj4gKwlpZiAoIXJlcykgewo+PiArCQlERVZfRVJSKCIl cFMtPiVzOiAnJXMnIG1zbV9kc3NfZ2V0X3Jlc19ieW5hbWUgZmFpbGVkXG4iLAo+PiArCQkJX19i dWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBfX2Z1bmNfXywgbmFtZSk7Cj4gCj4gWWV0IGFub3Ro ZXIgZXJyb3IgZm9ybWF0IDopIENvdWxkIHdlIHBsZWFzZSBzdGljayB3aXRoIG9uZSBvZiAKPiBE UFVfRVJST1IsCj4gRFJNX0VSUk9SLCBvciBEUk1fREVWX0VSUk9SPwo+IApBbGwgb2YgdGhlIGVy cm9yIGZvcm1hdHMgaGFzIGJlZW4gbW92ZSB0byBEUk1fRVJST1IgaW4gdjIuCgo+PiArCQlyZXR1 cm4gLUVOT0RFVjsKPj4gKwl9Cj4+ICsKPj4gKwlpb19kYXRhLT5sZW4gPSAodTMyKXJlc291cmNl X3NpemUocmVzKTsKPj4gKwlpb19kYXRhLT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBpb19k YXRhLT5sZW4pOwo+PiArCWlmICghaW9fZGF0YS0+YmFzZSkgewo+PiArCQlERVZfRVJSKCIlcFMt PiVzOiAnJXMnIGlvcmVtYXAgZmFpbGVkXG4iLAo+PiArCQkJX19idWlsdGluX3JldHVybl9hZGRy ZXNzKDApLCBfX2Z1bmNfXywgbmFtZSk7Cj4+ICsJCXJldHVybiAtRUlPOwo+PiArCX0KPj4gKwo+ PiArCXJldHVybiAwOwo+PiArfSAvKiBtc21fZHNzX2lvcmVtYXBfYnluYW1lICovCj4+ICsKPj4g K3ZvaWQgbXNtX2Rzc19pb3VubWFwKHN0cnVjdCBkc3NfaW9fZGF0YSAqaW9fZGF0YSkKPj4gK3sK Pj4gKwlpZiAoIWlvX2RhdGEpIHsKPj4gKwkJREVWX0VSUigiJXBTLT4lczogaW52YWxpZCBpbnB1 dFxuIiwKPj4gKwkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18pOwo+PiAr CQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJaWYgKGlvX2RhdGEtPmJhc2UpIHsKPj4gKwkJaW91 bm1hcChpb19kYXRhLT5iYXNlKTsKPj4gKwkJaW9fZGF0YS0+YmFzZSA9IE5VTEw7Cj4+ICsJfQo+ PiArCWlvX2RhdGEtPmxlbiA9IDA7Cj4+ICt9IC8qIG1zbV9kc3NfaW91bm1hcCAqLwo+IAo+IFRo ZXNlIHR3byBmdW5jdGlvbnMgYXJlIG9ubHkgdXNlZCBpbiBkcF9wYXJzZXIuYywgd2h5IG5vdCBq dXN0IG1ha2UgCj4gdGhlbSBzdGF0aWMKPiBmdW5jdGlvbnMgdGhlcmU/Cj4gClRoZXNlIHR3byBm dW5jdGlvbnMgYXJlIG1vdmVkIHRvIGRwX3BhcnNlci5jIGluIFYyLgoKCj4+ICsKPj4gK2ludCBt c21fZHNzX2NvbmZpZ192cmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRzc192cmVnICpp bl92cmVnLAo+PiArCQkJaW50IG51bV92cmVnLCBpbnQgY29uZmlnKQo+IAo+IFRoaXMgc2hvdWxk IGJlIDIgZnVuY3Rpb25zLCBvbmUgZm9yIGluaXRpYWxpemF0aW9uIGFuZCBvbmUgZm9yIAo+IGRl aW5pdGlhbGl6aW5nLAo+IHRoZSAyIHBhdGhzIGRvbid0IHNoYXJlIGFueSBjb2RlLCBzbyB0aGVy ZSdzIG5vIG5lZWQgdG8gY29tYmluZSB0aGVtLgo+IApBZGRlZCAyIGZ1bmN0aW9ucyBpbiBWMiBw YXRjaC4gKFRoZSBmdW5jdGlvbnMgYXJlIG1vdmVkIHRvIGRwX3Bvd2VyLmMgCmZpbGUpCj4+ICt7 Cj4+ICsJaW50IGkgPSAwLCByYyA9IDA7Cj4+ICsJc3RydWN0IGRzc192cmVnICpjdXJyX3ZyZWcg PSBOVUxMOwo+PiArCWVudW0gZHNzX3ZyZWdfdHlwZSB0eXBlOwo+PiArCj4+ICsJaWYgKCFpbl92 cmVnIHx8ICFudW1fdnJlZykKPj4gKwkJcmV0dXJuIHJjOwo+PiArCj4+ICsJaWYgKGNvbmZpZykg ewo+PiArCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3ZyZWc7IGkrKykgewo+PiArCQkJY3Vycl92cmVn ID0gJmluX3ZyZWdbaV07Cj4+ICsJCQljdXJyX3ZyZWctPnZyZWcgPSByZWd1bGF0b3JfZ2V0KGRl diwKPiAKPiBVc2UgZGV2bV8qIHBsZWFzZQoKRml4ZWQgaW4gVjIuCgo+IAo+PiArCQkJCWN1cnJf dnJlZy0+dnJlZ19uYW1lKTsKPj4gKwkJCXJjID0gUFRSX1JFVChjdXJyX3ZyZWctPnZyZWcpOwo+ IAo+IFBUUl9SRVQgaXMgZGVwcmVjYXRlZC4gVGhlIHBhdHRlcm4gZm9yIHRoaXMgaXMgdXN1YWxs eToKPiAKPiAgICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSBzb21lX2Z1bmMoKTsKPiAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoSVNfRVJSX09SX05VTEwocHRyKSkgewo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLi4uCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByYyA9IFBUUl9FUlIocHRyKTsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8gZmFpbF9sYWJlbDoKPiAgICAgICAgICAgICAgICAgICAgICAgICB9Cj4gCkRpZG4ndCBh ZGRyZXNzIHRoaXMgY29tbWVudC4gV2lsbCBmaXggdGhpcyBpbiBWMyBwYXRjaC4KCgoKPj4gKwkJ CWlmIChyYykgewo+PiArCQkJCURFVl9FUlIoIiVwUy0+JXM6ICVzIGdldCBmYWlsZWQuIHJjPSVk XG4iLAo+PiArCQkJCQkgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBfX2Z1bmNfXywKPj4g KwkJCQkJIGN1cnJfdnJlZy0+dnJlZ19uYW1lLCByYyk7Cj4+ICsJCQkJY3Vycl92cmVnLT52cmVn ID0gTlVMTDsKPj4gKwkJCQlnb3RvIHZyZWdfZ2V0X2ZhaWw7Cj4+ICsJCQl9Cj4+ICsJCQl0eXBl ID0gKHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcyhjdXJyX3ZyZWctPnZyZWcpID4gMCkKPj4gKwkJ CQkJPyBEU1NfUkVHX0xETyA6IERTU19SRUdfVlM7Cj4+ICsJCQlpZiAodHlwZSA9PSBEU1NfUkVH X0xETykgewo+PiArCQkJCXJjID0gcmVndWxhdG9yX3NldF92b2x0YWdlKAo+PiArCQkJCQljdXJy X3ZyZWctPnZyZWcsCj4+ICsJCQkJCWN1cnJfdnJlZy0+bWluX3ZvbHRhZ2UsCj4+ICsJCQkJCWN1 cnJfdnJlZy0+bWF4X3ZvbHRhZ2UpOwo+PiArCQkJCWlmIChyYyA8IDApIHsKPj4gKwkJCQkJREVW X0VSUigiJXBTLT4lczogJXMgc2V0IHZsdGcgZmFpbFxuIiwKPj4gKwkJCQkJCV9fYnVpbHRpbl9y ZXR1cm5fYWRkcmVzcygwKSwKPj4gKwkJCQkJCV9fZnVuY19fLAo+PiArCQkJCQkJY3Vycl92cmVn LT52cmVnX25hbWUpOwo+PiArCQkJCQlnb3RvIHZyZWdfc2V0X3ZvbHRhZ2VfZmFpbDsKPj4gKwkJ CQl9Cj4+ICsJCQl9Cj4+ICsJCX0KPj4gKwl9IGVsc2Ugewo+PiArCQlmb3IgKGkgPSBudW1fdnJl Zy0xOyBpID49IDA7IGktLSkgewo+PiArCQkJY3Vycl92cmVnID0gJmluX3ZyZWdbaV07Cj4+ICsJ CQlpZiAoY3Vycl92cmVnLT52cmVnKSB7Cj4+ICsJCQkJdHlwZSA9IChyZWd1bGF0b3JfY291bnRf dm9sdGFnZXMoCj4+ICsJCQkJCWN1cnJfdnJlZy0+dnJlZykgPiAwKQo+PiArCQkJCQk/IERTU19S RUdfTERPIDogRFNTX1JFR19WUzsKPj4gKwkJCQlpZiAodHlwZSA9PSBEU1NfUkVHX0xETykgewo+ PiArCQkJCQlyZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UoY3Vycl92cmVnLT52cmVnLAo+PiArCQkJCQkJ MCwgY3Vycl92cmVnLT5tYXhfdm9sdGFnZSk7Cj4+ICsJCQkJfQo+PiArCQkJCXJlZ3VsYXRvcl9w dXQoY3Vycl92cmVnLT52cmVnKTsKPj4gKwkJCQljdXJyX3ZyZWctPnZyZWcgPSBOVUxMOwo+PiAr CQkJfQo+PiArCQl9Cj4+ICsJfQo+PiArCXJldHVybiAwOwo+PiArCj4+ICt2cmVnX3VuY29uZmln Ogo+PiAraWYgKHR5cGUgPT0gRFNTX1JFR19MRE8pCj4+ICsJcmVndWxhdG9yX3NldF9sb2FkKGN1 cnJfdnJlZy0+dnJlZywgMCk7Cj4+ICsKPj4gK3ZyZWdfc2V0X3ZvbHRhZ2VfZmFpbDoKPj4gKwly ZWd1bGF0b3JfcHV0KGN1cnJfdnJlZy0+dnJlZyk7Cj4+ICsJY3Vycl92cmVnLT52cmVnID0gTlVM TDsKPj4gKwo+PiArdnJlZ19nZXRfZmFpbDoKPj4gKwlmb3IgKGktLTsgaSA+PSAwOyBpLS0pIHsK Pj4gKwkJY3Vycl92cmVnID0gJmluX3ZyZWdbaV07Cj4+ICsJCXR5cGUgPSAocmVndWxhdG9yX2Nv dW50X3ZvbHRhZ2VzKGN1cnJfdnJlZy0+dnJlZykgPiAwKQo+PiArCQkJPyBEU1NfUkVHX0xETyA6 IERTU19SRUdfVlM7Cj4+ICsJCWdvdG8gdnJlZ191bmNvbmZpZzsKPj4gKwl9Cj4+ICsJcmV0dXJu IHJjOwo+PiArfSAvKiBtc21fZHNzX2NvbmZpZ192cmVnICovCj4+ICsKPj4gK2ludCBtc21fZHNz X2VuYWJsZV92cmVnKHN0cnVjdCBkc3NfdnJlZyAqaW5fdnJlZywgaW50IG51bV92cmVnLCBpbnQg Cj4+IGVuYWJsZSkKPj4gK3sKPj4gKwlpbnQgaSA9IDAsIHJjID0gMDsKPj4gKwlib29sIG5lZWRf c2xlZXA7Cj4+ICsKPj4gKwlpZiAoZW5hYmxlKSB7Cj4+ICsJCWZvciAoaSA9IDA7IGkgPCBudW1f dnJlZzsgaSsrKSB7Cj4+ICsJCQlyYyA9IFBUUl9SRVQoaW5fdnJlZ1tpXS52cmVnKTsKPj4gKwkJ CWlmIChyYykgewo+PiArCQkJCURFVl9FUlIoIiVwUy0+JXM6ICVzIHJlZ3VsYXRvciBlcnJvci4g cmM9JWRcbiIsCj4+ICsJCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgX19mdW5jX18s Cj4+ICsJCQkJCWluX3ZyZWdbaV0udnJlZ19uYW1lLCByYyk7Cj4+ICsJCQkJZ290byB2cmVnX3Nl dF9vcHRfbW9kZV9mYWlsOwo+PiArCQkJfQo+PiArCQkJbmVlZF9zbGVlcCA9ICFyZWd1bGF0b3Jf aXNfZW5hYmxlZChpbl92cmVnW2ldLnZyZWcpOwo+PiArCQkJaWYgKGluX3ZyZWdbaV0ucHJlX29u X3NsZWVwICYmIG5lZWRfc2xlZXApCj4+ICsJCQkJdXNsZWVwX3JhbmdlKGluX3ZyZWdbaV0ucHJl X29uX3NsZWVwICogMTAwMCwKPj4gKwkJCQkJaW5fdnJlZ1tpXS5wcmVfb25fc2xlZXAgKiAxMDAw KTsKPj4gKwkJCXJjID0gcmVndWxhdG9yX3NldF9sb2FkKGluX3ZyZWdbaV0udnJlZywKPj4gKwkJ CQlpbl92cmVnW2ldLmVuYWJsZV9sb2FkKTsKPj4gKwkJCWlmIChyYyA8IDApIHsKPj4gKwkJCQlE RVZfRVJSKCIlcFMtPiVzOiAlcyBzZXQgb3B0IG0gZmFpbFxuIiwKPj4gKwkJCQkJX19idWlsdGlu X3JldHVybl9hZGRyZXNzKDApLCBfX2Z1bmNfXywKPj4gKwkJCQkJaW5fdnJlZ1tpXS52cmVnX25h bWUpOwo+PiArCQkJCWdvdG8gdnJlZ19zZXRfb3B0X21vZGVfZmFpbDsKPj4gKwkJCX0KPj4gKwkJ CXJjID0gcmVndWxhdG9yX2VuYWJsZShpbl92cmVnW2ldLnZyZWcpOwo+PiArCQkJaWYgKGluX3Zy ZWdbaV0ucG9zdF9vbl9zbGVlcCAmJiBuZWVkX3NsZWVwKQo+PiArCQkJCXVzbGVlcF9yYW5nZShp bl92cmVnW2ldLnBvc3Rfb25fc2xlZXAgKiAxMDAwLAo+PiArCQkJCQlpbl92cmVnW2ldLnBvc3Rf b25fc2xlZXAgKiAxMDAwKTsKPj4gKwkJCWlmIChyYyA8IDApIHsKPj4gKwkJCQlERVZfRVJSKCIl cFMtPiVzOiAlcyBlbmFibGUgZmFpbGVkXG4iLAo+PiArCQkJCQlfX2J1aWx0aW5fcmV0dXJuX2Fk ZHJlc3MoMCksIF9fZnVuY19fLAo+PiArCQkJCQlpbl92cmVnW2ldLnZyZWdfbmFtZSk7Cj4+ICsJ CQkJZ290byBkaXNhYmxlX3ZyZWc7Cj4+ICsJCQl9Cj4+ICsJCX0KPj4gKwl9IGVsc2Ugewo+PiAr CQlmb3IgKGkgPSBudW1fdnJlZy0xOyBpID49IDA7IGktLSkgewo+PiArCQkJaWYgKGluX3ZyZWdb aV0ucHJlX29mZl9zbGVlcCkKPj4gKwkJCQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wcmVfb2Zm X3NsZWVwICogMTAwMCwKPj4gKwkJCQkJaW5fdnJlZ1tpXS5wcmVfb2ZmX3NsZWVwICogMTAwMCk7 Cj4+ICsJCQlyZWd1bGF0b3Jfc2V0X2xvYWQoaW5fdnJlZ1tpXS52cmVnLAo+PiArCQkJCWluX3Zy ZWdbaV0uZGlzYWJsZV9sb2FkKTsKPj4gKwkJCXJlZ3VsYXRvcl9kaXNhYmxlKGluX3ZyZWdbaV0u dnJlZyk7Cj4+ICsJCQlpZiAoaW5fdnJlZ1tpXS5wb3N0X29mZl9zbGVlcCkKPj4gKwkJCQl1c2xl ZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wb3N0X29mZl9zbGVlcCAqIDEwMDAsCj4+ICsJCQkJCWluX3Zy ZWdbaV0ucG9zdF9vZmZfc2xlZXAgKiAxMDAwKTsKPj4gKwkJfQo+PiArCX0KPj4gKwlyZXR1cm4g cmM7Cj4+ICsKPj4gK2Rpc2FibGVfdnJlZzoKPj4gKwlyZWd1bGF0b3Jfc2V0X2xvYWQoaW5fdnJl Z1tpXS52cmVnLCBpbl92cmVnW2ldLmRpc2FibGVfbG9hZCk7Cj4+ICsKPj4gK3ZyZWdfc2V0X29w dF9tb2RlX2ZhaWw6Cj4+ICsJZm9yIChpLS07IGkgPj0gMDsgaS0tKSB7Cj4+ICsJCWlmIChpbl92 cmVnW2ldLnByZV9vZmZfc2xlZXApCj4+ICsJCQl1c2xlZXBfcmFuZ2UoaW5fdnJlZ1tpXS5wcmVf b2ZmX3NsZWVwICogMTAwMCwKPj4gKwkJCQlpbl92cmVnW2ldLnByZV9vZmZfc2xlZXAgKiAxMDAw KTsKPj4gKwkJcmVndWxhdG9yX3NldF9sb2FkKGluX3ZyZWdbaV0udnJlZywKPj4gKwkJCWluX3Zy ZWdbaV0uZGlzYWJsZV9sb2FkKTsKPj4gKwkJcmVndWxhdG9yX2Rpc2FibGUoaW5fdnJlZ1tpXS52 cmVnKTsKPj4gKwkJaWYgKGluX3ZyZWdbaV0ucG9zdF9vZmZfc2xlZXApCj4+ICsJCQl1c2xlZXBf cmFuZ2UoaW5fdnJlZ1tpXS5wb3N0X29mZl9zbGVlcCAqIDEwMDAsCj4+ICsJCQkJaW5fdnJlZ1tp XS5wb3N0X29mZl9zbGVlcCAqIDEwMDApOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiByYzsKPj4g K30gLyogbXNtX2Rzc19lbmFibGVfdnJlZyAqLwo+PiArCj4gCj4gU2FtZSBxdWVzdGlvbiBoZXJl LCBidXQgd2l0aCBkcF9wb3dlci4KPiAKCkZpeGVkIHRoaXMgaW4gVjIuCgoKPj4gKwo+PiAgdm9p ZCBtc21fZHNzX3B1dF9jbGsoc3RydWN0IGRzc19jbGsgKmNsa19hcnJ5LCBpbnQgbnVtX2NsaykK Pj4gIHsKPj4gIAlpbnQgaTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9pb191dGlsLmggCj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2lvX3V0aWwuaAo+PiBpbmRleCBiYzA3MzgxLi41MjRiMzk0IDEwMDY0NAo+PiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaW9fdXRpbC5oCj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pb191dGlsLmgKPj4gQEAgLTE1LDYgKzE1LDcg QEAKPj4gCj4+ICAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgo+PiAgI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5o Pgo+PiAgI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4+IAo+PiAgI2RlZmluZSBERVZfREJHKGZt dCwgYXJncy4uLikgICBwcl9kZWJ1ZyhmbXQsICMjYXJncykKPj4gQEAgLTIyLDYgKzIzLDM5IEBA Cj4+ICAjZGVmaW5lIERFVl9XQVJOKGZtdCwgYXJncy4uLikgIHByX3dhcm4oZm10LCAjI2FyZ3Mp Cj4+ICAjZGVmaW5lIERFVl9FUlIoZm10LCBhcmdzLi4uKSAgIHByX2VycihmbXQsICMjYXJncykK Pj4gCj4+ICtzdHJ1Y3QgZHNzX2lvX2RhdGEgewo+PiArCXUzMiBsZW47Cj4+ICsJdm9pZCBfX2lv bWVtICpiYXNlOwo+PiArfTsKPiAKPiBsZW4gaXNuJ3QgdXNlZCBhbnl3aGVyZSwgc28gdGhpcyBz dHJ1Y3QgY2FuIGdvIGF3YXkuIElmIHRoZSBzdHJ1Y3QgZ29lcyAKPiBhd2F5LAo+IHlvdSBjYW4g cmVhbGx5IHNpbXBsaWZ5IChvciBlbGltaW5hdGUgbXNtX2Rzc19pb3JlbWFwX2J5bmFtZSgpKQo+ IAoKV2Ugd2FudCB0byBrZWVwIHRoaXMgc2luY2Ugd2UgdXNlIGxlbiBmb3Igb3VyIGludGVybmFs IHVuaXQgbGV2ZWwgCnRlc3RpbmcgYW5kIGluIHNpbXVsYXRpb24gbW9kZS4KCgo+PiArCj4+ICsv Kgo+PiArdm9pZCBkc3NfcmVnX3coc3RydWN0IGRzc19pb19kYXRhICppbywgdTMyIG9mZnNldCwg dTMyIHZhbHVlLCB1MzIgCj4+IGRlYnVnKTsKPj4gK3UzMiBkc3NfcmVnX3Ioc3RydWN0IGRzc19p b19kYXRhICppbywgdTMyIG9mZnNldCwgdTMyIGRlYnVnKTsKPj4gK3ZvaWQgZHNzX3JlZ19kdW1w KHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIGxlbiwgY29uc3QgY2hhciAqcHJlZml4LCAKPj4gdTMy IGRlYnVnKTsKPj4gKwo+PiArI2RlZmluZSBEU1NfUkVHX1dfTkQoaW8sIG9mZnNldCwgdmFsKSAg ZHNzX3JlZ193KGlvLCBvZmZzZXQsIHZhbCwgCj4+IGZhbHNlKQo+PiArI2RlZmluZSBEU1NfUkVH X1coaW8sIG9mZnNldCwgdmFsKSAgICAgZHNzX3JlZ193KGlvLCBvZmZzZXQsIHZhbCwgCj4+IHRy dWUpCj4+ICsjZGVmaW5lIERTU19SRUdfUl9ORChpbywgb2Zmc2V0KSAgICAgICBkc3NfcmVnX3Io aW8sIG9mZnNldCwgZmFsc2UpCj4+ICsjZGVmaW5lIERTU19SRUdfUihpbywgb2Zmc2V0KSAgICAg ICAgICBkc3NfcmVnX3IoaW8sIG9mZnNldCwgdHJ1ZSkKPj4gKyovCj4gCj4gTm9uZSBvZiB0aGUg ZHNzX3JlZ18qL0RTU19SRUdfKiBmdW5jdGlvbnMvbWFjcm9zIGFyZSB1c2VkLiBQbGVhc2UgCj4g cmVtb3ZlLgo+IAoKUmVtb3ZlZCB0aGlzIGluIFYyLgoKPiAKPj4gK2VudW0gZHNzX3ZyZWdfdHlw ZSB7Cj4+ICsJRFNTX1JFR19MRE8sCj4+ICsJRFNTX1JFR19WUywKPj4gK307Cj4gCj4gVGhlc2Ug YXJlIG9ubHkgdXNlZCBpbiBtc21fZHNzX2NvbmZpZ192cmVnKCkuIFBsZWFzZSByZW1vdmUuCj4g CldpbGwgZml4IHRoaXMgaW4gVjMuCgo+PiArCj4+ICtzdHJ1Y3QgZHNzX3ZyZWcgewo+PiArCXN0 cnVjdCByZWd1bGF0b3IgKnZyZWc7IC8qIHZyZWcgaGFuZGxlICovCj4+ICsJY2hhciB2cmVnX25h bWVbMzJdOwo+PiArCWludCBtaW5fdm9sdGFnZTsKPj4gKwlpbnQgbWF4X3ZvbHRhZ2U7Cj4gCj4g Q2FuJ3Qgd2UgZGVkdWNlIHRoZXNlIGZyb20gdGhlIHJlZ3VsYXRvciBzdWJzeXN0ZW0gd2l0aAo+ IHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2UoKT8KPiAKPj4gKwlpbnQgZW5hYmxlX2xvYWQ7Cj4+ICsJ aW50IGRpc2FibGVfbG9hZDsKPiAKPiBUaGVzZSBhcmUgcmVhbGx5IGEgZnVuY3Rpb24gb2YgdGhl IGRwIGRldmljZSB0aGFuIHRoZSByZWd1bGF0b3IuCj4gCj4+ICsJaW50IHByZV9vbl9zbGVlcDsK Pj4gKwlpbnQgcG9zdF9vbl9zbGVlcDsKPj4gKwlpbnQgcHJlX29mZl9zbGVlcDsKPj4gKwlpbnQg cG9zdF9vZmZfc2xlZXA7Cj4gCj4gTm9uZSBvZiB0aGVzZSBzbGVlcCB2YWx1ZXMgYXJlIHNldD8g QWxzbywgc2hvdWxkbid0IHRoZXNlIGNvbnN0cmFpbnRzIAo+IHVzdWFsbHkKPiBleHByZXNzZWQv YWN0ZWQgdXBvbiBpbiB0aGUgcmVndWxhdG9yIGRyaXZlcj8KPiAKPj4gK307CgpXaWxsIHJlbW92 ZSB0aGVtIGluIFYzLiBUaGVzZSB3ZXJlIGFkZGVkIGFzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlv biBmb3IgCmlvX3V0aWxzLiBTaW5jZSB3ZQphcmUgbm90IGdvaW5nIHRvIHVzZSB0aGVtLCB3aWxs IHJlbW92ZSB0aGVtIGZvciBub3cuCgo+IAo+IFNvIGlmIHdlIGNhbiByZW1vdmUgYWxsIG9mIHRo ZSBleHRyYSBnb29wIGFyb3VuZCB0aGUgcmVndWxhdG9yLCB0aGVuIHdlIAo+IGNhbiBnZXQKPiBy aWQgb2YgZHNzX3ZyZWcuCj4gCldpbGwgZm9sbG93IHVwIG9uIHZyZWcgQVBJcyBhbmQgZml4IHRo ZW0gaW4gVjMuCgo+PiArCj4+ICBzdHJ1Y3QgZHNzX2dwaW8gewo+PiAgCXVuc2lnbmVkIGludCBn cGlvOwo+PiAgCXVuc2lnbmVkIGludCB2YWx1ZTsKPj4gQEAgLTQyLDEyICs3NiwyMiBAQCBzdHJ1 Y3QgZHNzX2NsayB7Cj4+ICB9Owo+PiAKPj4gIHN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyIHsKPj4g Kwl1bnNpZ25lZCBpbnQgbnVtX3ZyZWc7Cj4+ICsJc3RydWN0IGRzc192cmVnICp2cmVnX2NvbmZp ZzsKPj4gIAl1bnNpZ25lZCBpbnQgbnVtX2dwaW87Cj4+ICAJc3RydWN0IGRzc19ncGlvICpncGlv X2NvbmZpZzsKPj4gIAl1bnNpZ25lZCBpbnQgbnVtX2NsazsKPj4gIAlzdHJ1Y3QgZHNzX2NsayAq Y2xrX2NvbmZpZzsKPj4gIH07Cj4+IAo+PiAraW50IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPj4gKwkJCSAgIHN0cnVjdCBkc3NfaW9fZGF0YSAq aW9fZGF0YSwgY29uc3QgY2hhciAqbmFtZSk7Cj4+ICt2b2lkIG1zbV9kc3NfaW91bm1hcChzdHJ1 Y3QgZHNzX2lvX2RhdGEgKmlvX2RhdGEpOwo+PiArCj4+ICtpbnQgbXNtX2Rzc19jb25maWdfdnJl ZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkc3NfdnJlZyAqaW5fdnJlZywKPj4gKwkJCWlu dCBudW1fdnJlZywgaW50IGNvbmZpZyk7Cj4+ICtpbnQgbXNtX2Rzc19lbmFibGVfdnJlZyhzdHJ1 Y3QgZHNzX3ZyZWcgKmluX3ZyZWcsIGludCBudW1fdnJlZywJaW50IAo+PiBlbmFibGUpOwo+PiAr Cj4+ICBpbnQgbXNtX2Rzc19nZXRfY2xrKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRzc19j bGsgKmNsa19hcnJ5LCBpbnQgCj4+IG51bV9jbGspOwo+PiAgdm9pZCBtc21fZHNzX3B1dF9jbGso c3RydWN0IGRzc19jbGsgKmNsa19hcnJ5LCBpbnQgbnVtX2Nsayk7Cj4gCj4gCj4gV2h5IGFyZSB0 aGVzZSBtc21fZHNzKiBmdW5jdGlvbnMgaW4gZHB1X2lvX3V0aWwuaD8KClRoZXNlIGZ1bmN0aW9u cyBhcmUgbW92ZWQgdG8gc3BlY2lmaWMgZmlsZXMgaW4gVjIuCgo+IAo+PiAgaW50IG1zbV9kc3Nf Y2xrX3NldF9yYXRlKHN0cnVjdCBkc3NfY2xrICpjbGtfYXJyeSwgaW50IG51bV9jbGspOwo+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdXguYyAKPj4gYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX2F1eC5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4 IDAwMDAwMDAuLjAwYjgyYzIKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2RwL2RwX2F1eC5jCj4+IEBAIC0wLDAgKzEsNTcwIEBACj4gCj4gL3NuaXAKPiAKPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXV4LmggCj4+IGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9hdXguaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRl eCAwMDAwMDAwLi4wYzMwMGVkCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9hdXguaAo+IAo+IC9zbmlwCj4gCj4gSSBkaWRuJ3QgcmVhbGx5IHJldmll dyB0aGUgZHBfYXV4LiogZmlsZXMgYXMtaXMuIFBsZWFzZSBjb252ZXJ0IHRvIAo+IHVzaW5nCj4g ZHJtX2RwX2F1eCBhbmQgSSdsbCB0YWtlIGFub3RoZXIgbG9vay4KPiAKCk1vc3Qgb2YgdGhlIGF1 eCBpbnRlcmZhY2UgYWxyZWFkeSB1c2VzIGRybV9kcF9hdXguIFdlIHJlZ2lzdGVyIHdpdGggZHJt IApmcmFtZXdvcmsgZm9yIGF1eCB0cmFmZmljIGFuZAp0cmFuc2Zlci0+Y2FsbCBiYWNrIGdldHMg Y2FsbGVkLgoKSSBzZWUgdGhhdCBJIGhhdmUgbWlzc2VkIGZpeGluZyB0aGUgaGFyZCBjb2RlZCB2 YWx1ZXMgZm9yIHJlZ2lzdGVyIApvcGVyYXRpb25zIGZvciBhdXggdHJhbnNmZXJzLiBXaWxsIGZp eCB0aGF0IGluIFYzLgoKPiAKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfY2F0YWxvZy5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY2F0YWxvZy5jCj4+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjU4MTg2MTIKPj4gLS0tIC9k ZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFsb2cuYwo+PiBA QCAtMCwwICsxLDExODggQEAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwg VGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgCj4+IHJlc2VydmVkLgo+PiArICoKPj4g KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgCj4+IG1vZGlmeQo+PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4+ICsgKiBvbmx5IHZlcnNpb24g MiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPj4gKyAqCj4+ ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ICsgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqLwo+PiArCj4+ICsj ZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19fCj4+ICsKPj4g KyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVy Lmg+Cj4+ICsKPj4gKyNpbmNsdWRlICJkcF9jYXRhbG9nLmgiCj4+ICsjaW5jbHVkZSAiZHBfcmVn LmgiCj4+ICsKPj4gKyNkZWZpbmUgRFBfR0VUX01TQih4KQkoeCA+PiA4KQo+PiArI2RlZmluZSBE UF9HRVRfTFNCKHgpCSh4ICYgMHhmZikKPiAKPiBUaGVzZSBhcmVuJ3QgdXNlZCBhbnl3aGVyZQo+ IApGaXhlZCBpbiBWMi4KCj4+ICsKPj4gKyNkZWZpbmUgZHBfcmVhZChvZmZzZXQpIHJlYWRsX3Jl bGF4ZWQoKG9mZnNldCkpCj4+ICsjZGVmaW5lIGRwX3dyaXRlKG9mZnNldCwgZGF0YSkgd3JpdGVs X3JlbGF4ZWQoKGRhdGEpLCAob2Zmc2V0KSkKPiAKPiBUaGVzZSBtYWNyb3MgYXJlbid0IHVzZWZ1 bC4gSSB0aGluayB5b3UnZCBiZSBtdWNoIGJldHRlciBoYXZpbmcgYSAKPiByZWFkXy93cml0ZV8K PiBmb3IgdGhlIGRpZmZlcmVudCBpbyB0eXBlcywgaWU6Cj4gCj4gc3RhdGljIGlubGluZSB1MzIg ZHBfcmVhZF9hdWRpbyhzdHJ1Y3QgZHBfY2F0YWxvZyAqY2F0YWxvZywgdTMyIG9mZnNldCkKPiB7 Cj4gICAgICAgICByZXR1cm4gcmVhZGxfcmVsYXhlZChjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNl ICsgb2Zmc2V0KTsKPiB9Cj4gCj4gVGhlbiB5b3UgY2FuIHJlbW92ZSBhIHRvbiBvZiBib2lsZXJw bGF0ZSBjb2RlIGJlbG93IGdldHRpbmcgYmFzZTsKCkZpeGVkIGluIFYyLgoKPiAKPj4gKwo+PiAr I2RlZmluZSBkcF9jYXRhbG9nX2dldF9wcml2KHgpIHsgXAo+IAo+IHN0YXRpYyBpbmxpbmUgc3Ry dWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqZHBfY2F0YWxvZ19nZXRfcHJpdiguLi4pCj4gewo+ICAg ICAgICAgLi4uCj4gfQo+IApGb3IgaW5saW5lLCB3ZSBoYXZlIHRvIHVzZSAzIGRpZmZlcmVudCBm dW5jdGlvbnMgKG9uZSBlYWNoIGZvciBhdXgsIGN0cmwgCmFuZCBwYW5lbCkuCkxvb2tpbmcgYXQg InR5cGUtY2hlY2tpbmciIHcuci50IG1hY3JvLCBjb250YWluZXJfb2Ygd2lsbCB0aHJvdWdoIGFu IAplcnJvciBpZiBpdHMgbm90IHZhbGlkIHBvaW50ZXIuClBsZWFzZSBsZXQgbWUga25vdyBpZiB5 b3Ugc3RpbGwgd2FudCB0byBjaGFuZ2UgdGhpcyBtYWNybyB0byBpbmxpbmUgCmZ1bmMuCgo+PiAr CXN0cnVjdCBkcF9jYXRhbG9nICpkcF9jYXRhbG9nOyBcCj4+ICsJZHBfY2F0YWxvZyA9IGNvbnRh aW5lcl9vZih4LCBzdHJ1Y3QgZHBfY2F0YWxvZywgeCk7IFwKPj4gKwljYXRhbG9nID0gY29udGFp bmVyX29mKGRwX2NhdGFsb2csIHN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUsIFwKPj4gKwkJCQlk cF9jYXRhbG9nKTsgXAo+PiArfQo+PiArCj4+ICsjZGVmaW5lIERQX0lOVEVSUlVQVF9TVEFUVVMx IFwKPj4gKwkoRFBfSU5UUl9BVVhfSTJDX0RPTkV8IFwKPj4gKwlEUF9JTlRSX1dST05HX0FERFIg fCBEUF9JTlRSX1RJTUVPVVQgfCBcCj4+ICsJRFBfSU5UUl9OQUNLX0RFRkVSIHwgRFBfSU5UUl9X Uk9OR19EQVRBX0NOVCB8IFwKPj4gKwlEUF9JTlRSX0kyQ19OQUNLIHwgRFBfSU5UUl9JMkNfREVG RVIgfCBcCj4+ICsJRFBfSU5UUl9QTExfVU5MT0NLRUQgfCBEUF9JTlRSX0FVWF9FUlJPUikKPj4g Kwo+PiArI2RlZmluZSBEUF9JTlRSX01BU0sxCQkoRFBfSU5URVJSVVBUX1NUQVRVUzEgPDwgMikK Pj4gKwo+PiArI2RlZmluZSBEUF9JTlRFUlJVUFRfU1RBVFVTMiBcCj4+ICsJKERQX0lOVFJfUkVB RFlfRk9SX1ZJREVPIHwgRFBfSU5UUl9JRExFX1BBVFRFUk5fU0VOVCB8IFwKPj4gKwlEUF9JTlRS X0ZSQU1FX0VORCB8IERQX0lOVFJfQ1JDX1VQREFURUQpCj4+ICsKPj4gKyNkZWZpbmUgRFBfSU5U Ul9NQVNLMgkJKERQX0lOVEVSUlVQVF9TVEFUVVMyIDw8IDIpCj4gCj4gQ2FuIHlvdSBwbGVhc2Ug cmVuYW1lIHRoZXNlIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBlYWNoIG90aGVyPwo+IERQX0lOVEVS UlVQVF9TVEFUVVMyX01BU0sgcGVyaGFwcz8KCkZpeGVkIGluIFYyLgoKPiAKPj4gKwo+PiArc3Rh dGljIHU4IGNvbnN0IHZtX3ByZV9lbXBoYXNpc1s0XVs0XSA9IHsKPj4gKwl7MHgwMCwgMHgwQiwg MHgxMiwgMHhGRn0sICAgICAgIC8qIHBlMCwgMCBkYiAqLwo+PiArCXsweDAwLCAweDBBLCAweDEy LCAweEZGfSwgICAgICAgLyogcGUxLCAzLjUgZGIgKi8KPj4gKwl7MHgwMCwgMHgwQywgMHhGRiwg MHhGRn0sICAgICAgIC8qIHBlMiwgNi4wIGRiICovCj4+ICsJezB4RkYsIDB4RkYsIDB4RkYsIDB4 RkZ9ICAgICAgICAvKiBwZTMsIDkuNSBkYiAqLwo+PiArfTsKPj4gKwo+PiArLyogdm9sdGFnZSBz d2luZywgMC4ydiBhbmQgMS4wdiBhcmUgbm90IHN1cHBvcnQgKi8KPj4gK3N0YXRpYyB1OCBjb25z dCB2bV92b2x0YWdlX3N3aW5nWzRdWzRdID0gewo+PiArCXsweDA3LCAweDBGLCAweDE0LCAweEZG fSwgLyogc3cwLCAwLjR2ICAqLwo+PiArCXsweDExLCAweDFELCAweDFGLCAweEZGfSwgLyogc3cx LCAwLjYgdiAqLwo+PiArCXsweDE4LCAweDFGLCAweEZGLCAweEZGfSwgLyogc3cxLCAwLjggdiAq Lwo+PiArCXsweEZGLCAweEZGLCAweEZGLCAweEZGfSAgLyogc3cxLCAxLjIgdiwgb3B0aW9uYWwg Ki8KPj4gK307Cj4+ICsKPj4gKy8qIGF1ZGlvIHJlbGF0ZWQgY2F0YWxvZyBmdW5jdGlvbnMgKi8K Pj4gK3N0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgewo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsK Pj4gKwlzdHJ1Y3QgZHBfaW8gKmlvOwo+PiArCj4+ICsJdTMyICgqYXVkaW9fbWFwKVtEUF9BVURJ T19TRFBfSEVBREVSX01BWF07Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2cgZHBfY2F0YWxvZzsKPj4g K307Cj4+ICsKPj4gKy8qIGF1eCByZWxhdGVkIGNhdGFsb2cgZnVuY3Rpb25zICovCj4+ICtzdGF0 aWMgdTMyIGRwX2NhdGFsb2dfYXV4X3JlYWRfZGF0YShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1 eCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+PiArCXZv aWQgX19pb21lbSAqYmFzZTsKPj4gKwo+PiArCWlmICghYXV4KSB7Cj4+ICsJCXByX2VycigiaW52 YWxpZCBpbnB1dFxuIik7Cj4gCj4gQW5kIGFub3RoZXIgbG9nZ2luZyB0eXBlLCBwbGVhc2UgcmVt b3ZlIHByXyogYW5kIHVzZSBhIAo+IERQVV8vRFJNXy9EUk1fREVWXwo+IHZhcmlhbnQuCj4gCkZp eGVkIGluIFYyLgoKPj4gKwkJZ290byBlbmQ7Cj4+ICsJfQo+PiArCj4+ICsJZHBfY2F0YWxvZ19n ZXRfcHJpdihhdXgpOwo+PiArCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfYXV4LmJhc2U7Cj4+ICsK Pj4gKwlyZXR1cm4gZHBfcmVhZChiYXNlICsgRFBfQVVYX0RBVEEpOwo+PiArZW5kOgo+PiArCXJl dHVybiAwOwo+IAo+IC4uLiBvciB5b3UgY291bGQganVzdCByZXR1cm4gZGlyZWN0bHkgaW4gdGhl IGlmIGFib3ZlIGFuZCByZW1vdmUgdGhlIAo+IGxhYmVsIDopCj4gU2FtZSBjb21tZW50IGFwcGxp ZXMgYmVsb3cuCj4gCj4gQWxzbywgcHJvYmFibHkgc2hvdWxkbid0IHJldHVybiAwIGluIGFuIGVy cm9yIGNhc2UuCgpGb3Jnb3QgdG8gZml4IHRoaXMuIFdpbGwgZml4IGluIFYzLgo+IAo+IFRoZW4g YWdhaW4sIEknbSBndWVzc2luZyBoaXR0aW5nIHRoZSBOVUxMIGNhc2UgaXMgbGlrZWx5IGltcG9z c2libGUsIHNvIAo+IHlvdSBjYW4KPiBwcm9iYWJseSByZW1vdmUgYWxsIG9mIHRoZSBtYWNoaW5l cnkgYXJvdW5kIGNoZWNraW5nICFhdXguCj4gCgpSZW1vdmVkIG1vc3Qgb2YgdGhlIGFyZyBudWxs IGNoZWNrcyBleGNlcHQgZmV3IEFQSXMgd2hlcmUgCnVuaXQtdGVzdGluZy9zaW11bGF0b3ItbW9k ZSBpcyB1c2VkLgoKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9jYXRhbG9nX2F1eF93cml0 ZV9kYXRhKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4KQo+PiArewo+PiArCWludCByYyA9IDA7 Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2b2lkIF9faW9t ZW0gKmJhc2U7Cj4+ICsKPj4gKwlpZiAoIWF1eCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5w dXRcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+ PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXV4KTsKPj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRw X2F1eC5iYXNlOwo+PiArCj4+ICsJZHBfd3JpdGUoYmFzZSArIERQX0FVWF9EQVRBLCBhdXgtPmRh dGEpOwo+PiArZW5kOgo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBk cF9jYXRhbG9nX2F1eF93cml0ZV90cmFucyhzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCkKPj4g K3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFs b2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+PiArCj4+ICsJaWYgKCFhdXgpIHsKPj4gKwkJ cHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3Rv IGVuZDsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1eCk7Cj4+ICsJYmFz ZSA9IGNhdGFsb2ctPmlvLT5kcF9hdXguYmFzZTsKPj4gKwo+PiArCWRwX3dyaXRlKGJhc2UgKyBE UF9BVVhfVFJBTlNfQ1RSTCwgYXV4LT5kYXRhKTsKPj4gK2VuZDoKPj4gKwlyZXR1cm4gcmM7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfY2F0YWxvZ19hdXhfY2xlYXJfdHJhbnMoc3RydWN0 IGRwX2NhdGFsb2dfYXV4ICphdXgsIAo+PiBib29sIHJlYWQpCj4+ICt7Cj4+ICsJaW50IHJjID0g MDsKPj4gKwl1MzIgZGF0YSA9IDA7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0 YWxvZzsKPj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4+ICsKPj4gKwlpZiAoIWF1eCkgewo+PiAr CQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdv dG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXV4KTsKPj4gKwli YXNlID0gY2F0YWxvZy0+aW8tPmRwX2F1eC5iYXNlOwo+PiArCj4+ICsJaWYgKHJlYWQpIHsKPj4g KwkJZGF0YSA9IGRwX3JlYWQoYmFzZSArIERQX0FVWF9UUkFOU19DVFJMKTsKPj4gKwkJZGF0YSAm PSB+QklUKDkpOwo+PiArCQlkcF93cml0ZShiYXNlICsgRFBfQVVYX1RSQU5TX0NUUkwsIGRhdGEp Owo+PiArCX0gZWxzZSB7Cj4+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9BVVhfVFJBTlNfQ1RSTCwg MCk7Cj4+ICsJfQo+PiArZW5kOgo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGlj IHZvaWQgZHBfY2F0YWxvZ19hdXhfcmVzZXQoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpCj4+ ICt7Cj4+ICsJdTMyIGF1eF9jdHJsOwo+PiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNh dGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+PiArCj4+ICsJaWYgKCFhdXgpIHsKPj4g KwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+ PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXV4KTsKPj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRw X2F1eC5iYXNlOwo+PiArCj4+ICsJYXV4X2N0cmwgPSBkcF9yZWFkKGJhc2UgKyBEUF9BVVhfQ1RS TCk7Cj4+ICsKPj4gKwlhdXhfY3RybCB8PSBCSVQoMSk7Cj4gCj4gV2hhdCdzIEJJVCgxKT8gQ2Fu IHlvdSBwbGVhc2UgI2RlZmluZSBpdD8KPiAKRml4ZWQgaW4gVjIuIE1vc3Qgb2YgdGhlIGhhcmRj b2RlZCB2YWx1ZXMgYXJlIGZpeGVkIGluIFYyLgoKPj4gKwlkcF93cml0ZShiYXNlICsgRFBfQVVY X0NUUkwsIGF1eF9jdHJsKTsKPj4gKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAxMCk7IC8qIGgvdyBy ZWNvbW1lbmRlZCBkZWxheSAqLwo+IAo+IDEwdXMgZGlmZiBpcyByaWdodCBvbiB0aGUgbGluZSBv ZiBlbm91Z2ggZGVsYXkgdG8gbWFrZSB1c2xlZXBfcmFuZ2UgCj4gd29ydGggaXQuCj4gSSdkIHJl Y29tbWVuZCBpbmNyZWFzaW5nIHRvIDEwMHVzIHRvIGluY3JlYXNlIHRoZSBjaGFuY2Ugb2YgdGhl IAo+IHNjaGVkdWxlciBiZWluZwo+IGFibGUgdG8gYmF0Y2ggdGhpcyB3YWtldXAgd2l0aCBhbm90 aGVyLgo+IApGaXhlZCBpbiBWMi4KCj4+ICsKPj4gKwlhdXhfY3RybCAmPSB+QklUKDEpOwo+PiAr CWRwX3dyaXRlKGJhc2UgKyBEUF9BVVhfQ1RSTCwgYXV4X2N0cmwpOwo+PiArCXdtYigpOwo+IAo+ IENhbiB5b3UganVzdCB1c2Ugd3JpdGVsIGZvciB0aGVzZSBjYXNlcyBpbnN0ZWFkIG9mIHVzaW5n IF9yZWxheGVkIGFuZCAKPiB0aGVuCj4gd21iKCk/IFRoaXMgYXBwbGllcyBlbHNld2hlcmUgdG9v Lgo+IApGaXhlZCBpbiBWMi4KCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2df YXV4X2VuYWJsZShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9vbCAKPj4gZW5hYmxlKQo+ PiArewo+PiArCXUzMiBhdXhfY3RybDsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpj YXRhbG9nOwo+PiArCXZvaWQgX19pb21lbSAqYmFzZTsKPj4gKwo+PiArCWlmICghYXV4KSB7Cj4+ ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsK Pj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1eCk7Cj4+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5k cF9hdXguYmFzZTsKPj4gKwo+PiArCWF1eF9jdHJsID0gZHBfcmVhZChiYXNlICsgRFBfQVVYX0NU UkwpOwo+PiArCj4+ICsJaWYgKGVuYWJsZSkgewo+PiArCQlkcF93cml0ZShiYXNlICsgRFBfVElN RU9VVF9DT1VOVCwgMHhmZmZmKTsKPj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX0FVWF9MSU1JVFMs IDB4ZmZmZik7Cj4+ICsJCWF1eF9jdHJsIHw9IEJJVCgwKTsKPiAKPiBQbGVhc2UgI2RlZmluZSBC SVQoMCkKCkZpeGVkIGluIFYyLgoKPiAKPj4gKwl9IGVsc2Ugewo+PiArCQlhdXhfY3RybCAmPSB+ QklUKDApOwo+PiArCX0KPj4gKwo+PiArCWRwX3dyaXRlKGJhc2UgKyBEUF9BVVhfQ1RSTCwgYXV4 X2N0cmwpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2F1eF91cGRhdGVf Y2ZnKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4LAo+PiArCQlzdHJ1Y3QgZHBfYXV4X2NmZyAq Y2ZnLCBlbnVtIGRwX3BoeV9hdXhfY29uZmlnX3R5cGUgdHlwZSkKPj4gK3sKPj4gKwlzdHJ1Y3Qg ZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+PiArCXUzMiBuZXdfaW5kZXggPSAwLCBjdXJy ZW50X2luZGV4ID0gMDsKPj4gKwo+PiArCWlmICghYXV4IHx8ICFjZmcgfHwgKHR5cGUgPj0gUEhZ X0FVWF9DRkdfTUFYKSkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQly ZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihhdXgpOwo+PiArCj4+ ICsJY3VycmVudF9pbmRleCA9IGNmZ1t0eXBlXS5jdXJyZW50X2luZGV4Owo+PiArCW5ld19pbmRl eCA9IChjdXJyZW50X2luZGV4ICsgMSkgJSBjZmdbdHlwZV0uY2ZnX2NudDsKPj4gKwlwcl9kZWJ1 ZygiVXBkYXRpbmcgJXMgZnJvbSAweCUwOHggdG8gMHglMDh4XG4iLAo+PiArCQlkcF9waHlfYXV4 X2NvbmZpZ190eXBlX3RvX3N0cmluZyh0eXBlKSwKPj4gKwljZmdbdHlwZV0ubHV0W2N1cnJlbnRf aW5kZXhdLCBjZmdbdHlwZV0ubHV0W25ld19pbmRleF0pOwo+PiArCj4+ICsJZHBfd3JpdGUoY2F0 YWxvZy0+aW8tPnBoeV9pby5iYXNlICsgY2ZnW3R5cGVdLm9mZnNldCwKPj4gKwkJCWNmZ1t0eXBl XS5sdXRbbmV3X2luZGV4XSk7Cj4+ICsJY2ZnW3R5cGVdLmN1cnJlbnRfaW5kZXggPSBuZXdfaW5k ZXg7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfYXV4X3NldHVwKHN0cnVj dCBkcF9jYXRhbG9nX2F1eCAqYXV4LAo+PiArCQlzdHJ1Y3QgZHBfYXV4X2NmZyAqY2ZnKQo+PiAr ewo+PiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJaW50IGkgPSAw Owo+PiArCj4+ICsJaWYgKCFhdXggfHwgIWNmZykgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5w dXRcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRfcHJp dihhdXgpOwo+PiArCj4+ICsJZHBfd3JpdGUoY2F0YWxvZy0+aW8tPnBoeV9pby5iYXNlICsgRFBf UEhZX1BEX0NUTCwgMHg2NSk7Cj4gCj4gV2hhdCdzIDB4NjU/IFBsZWFzZSAjZGVmaW5lCj4gCkZp eGVkIGluIFYyLgoKPj4gKwl3bWIoKTsgLyogbWFrZSBzdXJlIFBEIHByb2dyYW1taW5nIGhhcHBl bmVkICovCj4+ICsKPj4gKwkvKiBUdXJuIG9uIEJJQVMgY3VycmVudCBmb3IgUEhZL1BMTCAqLwo+ PiArCWRwX3dyaXRlKGNhdGFsb2ctPmlvLT5kcF9wbGxfaW8uYmFzZSArCj4+ICsJCVFTRVJERVNf Q09NX0JJQVNfRU5fQ0xLQlVGTFJfRU4sIDB4MWIpOwo+IAo+IFNhbWUgaGVyZSBmb3IgMHgxYi4g SSdtIGdvaW5nIHRvIHN0b3AgbWVudGlvbmluZyB0aGlzLCBwbGVhc2UgYXVkaXQgdGhlIAo+IGRy aXZlcgo+IGZvciBvdGhlciBpbnN0YW5jZXMgb2YgaGFyZGNvZGVkIHZhbHVlcyAobGlrZSB0aGlz IGFuZCB0aGUgb25lIGF0IHRoZSAKPiBlbmQgb2YKPiB0aGlzIGZ1bmN0aW9uKSBhbmQgYnJlYWsg dGhlbSBvdXQgaW50byBtZWFuaW5nZnVsICNkZWZpbmVzLgo+IApGaXhlZCBpbiBWMi4KCj4+ICsK Pj4gKwkvKiBEUCBBVVggQ0ZHIHJlZ2lzdGVyIHByb2dyYW1taW5nICovCj4+ICsJZm9yIChpID0g MDsgaSA8IFBIWV9BVVhfQ0ZHX01BWDsgaSsrKSB7Cj4+ICsJCXByX2RlYnVnKCIlczogb2Zmc2V0 PTB4JTA4eCwgdmFsdWU9MHglMDh4XG4iLAo+PiArCQkJZHBfcGh5X2F1eF9jb25maWdfdHlwZV90 b19zdHJpbmcoaSksCj4+ICsJCQljZmdbaV0ub2Zmc2V0LCBjZmdbaV0ubHV0W2NmZ1tpXS5jdXJy ZW50X2luZGV4XSk7Cj4+ICsJCWRwX3dyaXRlKGNhdGFsb2ctPmlvLT5waHlfaW8uYmFzZSArIGNm Z1tpXS5vZmZzZXQsCj4+ICsJCQljZmdbaV0ubHV0W2NmZ1tpXS5jdXJyZW50X2luZGV4XSk7Cj4+ ICsJfQo+PiArCj4+ICsJZHBfd3JpdGUoY2F0YWxvZy0+aW8tPnBoeV9pby5iYXNlICsgRFBfUEhZ X0FVWF9JTlRFUlJVUFRfTUFTSywgCj4+IDB4MUYpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9p ZCBkcF9jYXRhbG9nX2F1eF9nZXRfaXJxKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4LCBib29s IAo+PiBjbWRfYnVzeSkKPj4gK3sKPj4gKwl1MzIgYWNrOwo+PiArCXN0cnVjdCBkcF9jYXRhbG9n X3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICphaGJfYmFzZTsKPj4gKwo+PiAr CWlmICghYXV4KSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVy bjsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1eCk7Cj4+ICsJYWhiX2Jh c2UgPSBjYXRhbG9nLT5pby0+ZHBfYWhiLmJhc2U7Cj4+ICsKPj4gKwlhdXgtPmlzciA9IGRwX3Jl YWQoYWhiX2Jhc2UgKyBEUF9JTlRSX1NUQVRVUyk7Cj4+ICsJYXV4LT5pc3IgJj0gfkRQX0lOVFJf TUFTSzE7Cj4+ICsJYWNrID0gYXV4LT5pc3IgJiBEUF9JTlRFUlJVUFRfU1RBVFVTMTsKPj4gKwlh Y2sgPDw9IDE7Cj4+ICsJYWNrIHw9IERQX0lOVFJfTUFTSzE7Cj4+ICsJZHBfd3JpdGUoYWhiX2Jh c2UgKyBEUF9JTlRSX1NUQVRVUywgYWNrKTsKPj4gK30KPj4gKwo+PiArLyogY29udHJvbGxlciBy ZWxhdGVkIGNhdGFsb2cgZnVuY3Rpb25zICovCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0 cmxfdXBkYXRlX3RyYW5zZmVyX3VuaXQoc3RydWN0IAo+PiBkcF9jYXRhbG9nX2N0cmwgKmN0cmwp Cj4+ICt7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2b2lk IF9faW9tZW0gKmJhc2U7Cj4+ICsKPj4gKwlpZiAoIWN0cmwpIHsKPj4gKwkJcHJfZXJyKCJpbnZh bGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWRwX2NhdGFsb2df Z2V0X3ByaXYoY3RybCk7Cj4+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7Cj4+ ICsKPj4gKwlkcF93cml0ZShiYXNlICsgRFBfVkFMSURfQk9VTkRBUlksIGN0cmwtPnZhbGlkX2Jv dW5kYXJ5KTsKPj4gKwlkcF93cml0ZShiYXNlICsgRFBfVFUsIGN0cmwtPmRwX3R1KTsKPj4gKwlk cF93cml0ZShiYXNlICsgRFBfVkFMSURfQk9VTkRBUllfMiwgY3RybC0+dmFsaWRfYm91bmRhcnky KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX3N0YXRlX2N0cmwo c3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgCj4+IHUzMiBzdGF0ZSkKPj4gK3sKPj4gKwlz dHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+PiArCXZvaWQgX19pb21lbSAqYmFz ZTsKPj4gKwo+PiArCWlmICghY3RybCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIp Owo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihjdHJs KTsKPj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPj4gKwo+PiArCWRwX3dy aXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCBzdGF0ZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2 b2lkIGRwX2NhdGFsb2dfY3RybF9jb25maWdfY3RybChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpj dHJsLCAKPj4gdTMyIGNmZykKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpj YXRhbG9nOwo+PiArCXZvaWQgX19pb21lbSAqbGlua19iYXNlOwo+PiArCj4+ICsJaWYgKCFjdHJs KSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9 Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+PiArCWxpbmtfYmFzZSA9IGNh dGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiRFBfQ09ORklHVVJB VElPTl9DVFJMPTB4JXhcbiIsIGNmZyk7Cj4+ICsKPj4gKwlkcF93cml0ZShsaW5rX2Jhc2UgKyBE UF9DT05GSUdVUkFUSU9OX0NUUkwsIGNmZyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRw X2NhdGFsb2dfY3RybF9sYW5lX21hcHBpbmcoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAKPj4gKmN0 cmwpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2 b2lkIF9faW9tZW0gKmJhc2U7Cj4+ICsKPj4gKwlpZiAoIWN0cmwpIHsKPj4gKwkJcHJfZXJyKCJp bnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWRwX2NhdGFs b2dfZ2V0X3ByaXYoY3RybCk7Cj4+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7 Cj4+ICsKPj4gKwlkcF93cml0ZShiYXNlICsgRFBfTE9HSUNBTDJQSFlTSUNBTF9MQU5FX01BUFBJ TkcsIDB4ZTQpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0cmxfbWFp bmxpbmtfY3RybChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsIAo+PiAqY3RybCwKPj4gKwkJCQkJCWJv b2wgZW5hYmxlKQo+PiArewo+PiArCXUzMiBtYWlubGlua19jdHJsOwo+PiArCXN0cnVjdCBkcF9j YXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+PiArCj4+ ICsJaWYgKCFjdHJsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJl dHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+PiArCWJh c2UgPSBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOwo+PiArCj4+ICsJaWYgKGVuYWJsZSkgewo+ PiArCQlkcF93cml0ZShiYXNlICsgRFBfTUFJTkxJTktfQ1RSTCwgMHgwMjAwMDAwMCk7Cj4+ICsJ CXdtYigpOyAvKiBtYWtlIHN1cmUgbWFpbmxpbmsgaXMgdHVybmVkIG9mZiBiZWZvcmUgcmVzZXQg Ki8KPj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX01BSU5MSU5LX0NUUkwsIDB4MDIwMDAwMDIpOwo+ PiArCQl3bWIoKTsgLyogbWFrZSBzdXJlIG1haW5saW5rIGVudGVyZWQgcmVzZXQgKi8KPj4gKwkJ ZHBfd3JpdGUoYmFzZSArIERQX01BSU5MSU5LX0NUUkwsIDB4MDIwMDAwMDApOwo+PiArCQl3bWIo KTsgLyogbWFrZSBzdXJlIG1haW5saW5rIHJlc2V0IGRvbmUgKi8KPj4gKwkJZHBfd3JpdGUoYmFz ZSArIERQX01BSU5MSU5LX0NUUkwsIDB4MDIwMDAwMDEpOwo+PiArCQl3bWIoKTsgLyogbWFrZSBz dXJlIG1haW5saW5rIHR1cm5lZCBvbiAqLwo+IAo+IFNhbWUgY29tbWVudHMgaGVyZSByZTogcmVh ZGwgdnMgcmVhZGxfcmVsYXhlZCArIHdtYgo+IAo+IFBsZWFzZSAjZGVmaW5lIHRoZSBiaXRzIHlv dSdyZSBzZXR0aW5nLgo+IAoKRml4ZWQgaW4gVjIuCgo+IAo+PiArCX0gZWxzZSB7Cj4+ICsJCW1h aW5saW5rX2N0cmwgPSBkcF9yZWFkKGJhc2UgKyBEUF9NQUlOTElOS19DVFJMKTsKPj4gKwkJbWFp bmxpbmtfY3RybCAmPSB+QklUKDApOwo+PiArCQlkcF93cml0ZShiYXNlICsgRFBfTUFJTkxJTktf Q1RSTCwgbWFpbmxpbmtfY3RybCk7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBk cF9jYXRhbG9nX2N0cmxfY29uZmlnX21pc2Moc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwK Pj4gKwkJCQkJdTMyIGNjLCB1MzIgdGIpCj4+ICt7Cj4+ICsJdTMyIG1pc2NfdmFsOwo+PiArCXN0 cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNl Owo+PiArCj4+ICsJaWYgKCFjdHJsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7 Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwp Owo+PiArCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOwo+PiArCj4+ICsJbWlzY192 YWwgPSBkcF9yZWFkKGJhc2UgKyBEUF9NSVNDMV9NSVNDMCk7Cj4+ICsJbWlzY192YWwgfD0gY2M7 Cj4gCj4gU2hvdWxkIHlvdSBtYXNrIHRoaXMgc28gaXQgZG9lc24ndCBzdG9tcCBhcmVhcyBpdCBz aG91bGRuJ3Q/Cj4gCj4+ICsJbWlzY192YWwgfD0gKHRiIDw8IDUpOwo+IAo+IFBhcmVudGhlc2Vz IGFyZSB1bm5lY2Vzc2FyeQo+IAoKRml4ZWQgaW4gVjIuCgoKPj4gKwltaXNjX3ZhbCB8PSBCSVQo MCk7IC8qIENvbmZpZ3VyZSBjbG9jayB0byBzeW5jaHJvbm91cyBtb2RlICovCj4+ICsKPj4gKwlw cl9kZWJ1ZygibWlzYyBzZXR0aW5ncyA9IDB4JXhcbiIsIG1pc2NfdmFsKTsKPj4gKwlkcF93cml0 ZShiYXNlICsgRFBfTUlTQzFfTUlTQzAsIG1pc2NfdmFsKTsKPj4gK30KPj4gKwo+PiArc3RhdGlj IHZvaWQgZHBfY2F0YWxvZ19jdHJsX2NvbmZpZ19tc2Eoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAq Y3RybCwKPj4gKwkJCQkJdTMyIHJhdGUsIHUzMiBzdHJlYW1fcmF0ZV9raHosCj4+ICsJCQkJCWJv b2wgZml4ZWRfbnZpZCkKPj4gK3sKPj4gKwl1MzIgcGl4ZWxfbSwgcGl4ZWxfbjsKPj4gKwl1MzIg bXZpZCwgbnZpZDsKPj4gKwl1NjQgbXZpZF9jYWxjOwo+PiArCXUzMiBjb25zdCBudmlkX2ZpeGVk ID0gMHg4MDAwOwo+IAo+IFlvdSBzaG91bGQgcHVsbCB0aGlzIG91dCBpbnRvIGEgI2RlZmluZSBp biBkcm1fZHBfaGVscGVyLmggYW5kIHVzZSB0aGUgCj4gbmV3Cj4gZGVmaW5lIGluIHRoZSBpOTE1 IGRyaXZlciAoaW4gYSBzZXBhcmF0ZSBwYXRjaCkgYXMgd2VsbCBhcyBoZXJlLgo+IAo+PiArCXUz MiBjb25zdCBsaW5rX3JhdGVfaGJyMiA9IDU0MDAwMDsKPj4gKwl1MzIgY29uc3QgbGlua19yYXRl X2hicjMgPSA4MTAwMDA7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsK Pj4gKwl2b2lkIF9faW9tZW0gKmJhc2VfY2MsICpiYXNlX2N0cmw7Cj4+ICsKPj4gKwlpZiAoIWN0 cmwpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+PiAr CX0KPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4+ICsJaWYgKGZpeGVkX252 aWQpIHsKPj4gKwkJcHJfZGVidWcoInVzZSBmaXhlZCBOVklEPTB4JXhcbiIsIG52aWRfZml4ZWQp Owo+PiArCQludmlkID0gbnZpZF9maXhlZDsKPj4gKwo+PiArCQlwcl9kZWJ1ZygibGluayByYXRl PSVka2Jwcywgc3RyZWFtX3JhdGVfa2h6PSV1S2h6IiwKPj4gKwkJCXJhdGUsIHN0cmVhbV9yYXRl X2toeik7Cj4+ICsKPj4gKwkJLyoKPj4gKwkJICogRm9yIGludGVybWVkaWF0ZSByZXN1bHRzLCB1 c2UgNjQgYml0IGFyaXRobWV0aWMgdG8gYXZvaWQKPj4gKwkJICogbG9zcyBvZiBwcmVjaXNpb24u Cj4+ICsJCSAqLwo+PiArCQltdmlkX2NhbGMgPSAodTY0KSBzdHJlYW1fcmF0ZV9raHogKiBudmlk Owo+PiArCQltdmlkX2NhbGMgPSBkaXZfdTY0KG12aWRfY2FsYywgcmF0ZSk7Cj4+ICsKPj4gKwkJ LyoKPj4gKwkJICogdHJ1bmNhdGUgYmFjayB0byAzMiBiaXRzIGFzIHRoaXMgZmluYWwgZGl2aWRl ZCB2YWx1ZSB3aWxsCj4+ICsJCSAqIGFsd2F5cyBiZSB3aXRoaW4gdGhlIHJhbmdlIG9mIGEgMzIg Yml0IHVuc2lnbmVkIGludC4KPj4gKwkJICovCj4+ICsJCW12aWQgPSAodTMyKSBtdmlkX2NhbGM7 Cj4+ICsJfSBlbHNlIHsKPj4gKwkJYmFzZV9jYyA9IGNhdGFsb2ctPmlvLT5kcF9jY19pby5iYXNl Owo+PiArCj4+ICsJCXBpeGVsX20gPSBkcF9yZWFkKGJhc2VfY2MgKyBNTVNTX0RQX1BJWEVMX00p Owo+PiArCQlwaXhlbF9uID0gZHBfcmVhZChiYXNlX2NjICsgTU1TU19EUF9QSVhFTF9OKTsKPj4g KwkJcHJfZGVidWcoInBpeGVsX209MHgleCwgcGl4ZWxfbj0weCV4XG4iLCBwaXhlbF9tLCBwaXhl bF9uKTsKPj4gKwo+PiArCQltdmlkID0gKHBpeGVsX20gJiAweEZGRkYpICogNTsKPj4gKwkJbnZp ZCA9ICgweEZGRkYgJiAofnBpeGVsX24pKSArIChwaXhlbF9tICYgMHhGRkZGKTsKPj4gKwo+PiAr CQlwcl9kZWJ1ZygicmF0ZSA9ICVkXG4iLCByYXRlKTsKPj4gKwo+PiArCQlpZiAobGlua19yYXRl X2hicjIgPT0gcmF0ZSkKPj4gKwkJCW52aWQgKj0gMjsKPj4gKwo+PiArCQlpZiAobGlua19yYXRl X2hicjMgPT0gcmF0ZSkKPj4gKwkJCW52aWQgKj0gMzsKPiAKPiAgICAgICAgICAgICAgICAgc3dp dGNoIChkcm1fZHBfYndfY29kZV90b19saW5rX3JhdGUocmF0ZSkpIHsKPiAgICAgICAgICAgICAg ICAgY2FzZSBEUF9MSU5LX0JXXzVfNDoKPiAgICAgICAgICAgICAgICAgICAgICAgICBudmlkICo9 IDI7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gICAgICAgICAgICAgICAgIGNh c2UgRFBfTElOS19CV184XzE6Cj4gICAgICAgICAgICAgICAgICAgICAgICAgbnZpZCAqPSAzOwo+ ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ICAgICAgICAgICAgICAgICBkZWZhdWx0 Ogo+ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ICAgICAgICAgICAgICAgICB9Cj4g Cj4gQW5kIHJlbW92ZSBsaW5rX3JhdGVfaGJyKiBhYm92ZS4KPiAKClNvbWVob3cgbWlzc2VkIHRo aXMgZnVuY3Rpb24uIFdpbGwgZml4IHRoaXMgZnVuY3Rpb24gaW4gVjMuCj4gCj4+ICsJfQo+PiAr Cj4+ICsJYmFzZV9jdHJsID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPj4gKwlwcl9kZWJ1 ZygibXZpZD0weCV4LCBudmlkPTB4JXhcbiIsIG12aWQsIG52aWQpOwo+PiArCWRwX3dyaXRlKGJh c2VfY3RybCArIERQX1NPRlRXQVJFX01WSUQsIG12aWQpOwo+PiArCWRwX3dyaXRlKGJhc2VfY3Ry bCArIERQX1NPRlRXQVJFX05WSUQsIG52aWQpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBk cF9jYXRhbG9nX2N0cmxfc2V0X3BhdHRlcm4oc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwK Pj4gKwkJCQkJdTMyIHBhdHRlcm4pCj4+ICt7Cj4+ICsJaW50IGJpdCwgY250ID0gMTA7Cj4+ICsJ dTMyIGRhdGE7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2 b2lkIF9faW9tZW0gKmJhc2U7Cj4+ICsKPj4gKwlpZiAoIWN0cmwpIHsKPj4gKwkJcHJfZXJyKCJp bnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWRwX2NhdGFs b2dfZ2V0X3ByaXYoY3RybCk7Cj4+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7 Cj4+ICsKPj4gKwliaXQgPSAxOwo+PiArCWJpdCA8PD0gKHBhdHRlcm4gLSAxKTsKPiAKPiAgICAg ICAgIGJpdCA9IEJJVChwYXR0ZXJuIC0gMSk7Cj4gCj4+ICsJcHJfZGVidWcoImh3OiBiaXQ9JWQg dHJhaW49JWRcbiIsIGJpdCwgcGF0dGVybik7Cj4+ICsJZHBfd3JpdGUoYmFzZSArIERQX1NUQVRF X0NUUkwsIGJpdCk7Cj4+ICsKPj4gKwliaXQgPSA4Owo+PiArCWJpdCA8PD0gKHBhdHRlcm4gLSAx KTsKPiAKPiAgICAgICAgIGJpdCA9IEJJVChwYXR0ZXJuIC0gMSkgPDwgMzsKCkZpeGVkIGluIFYy LgoKPj4gKwo+PiArCXdoaWxlIChjbnQtLSkgewo+PiArCQlkYXRhID0gZHBfcmVhZChiYXNlICsg RFBfTUFJTkxJTktfUkVBRFkpOwo+PiArCQlpZiAoZGF0YSAmIGJpdCkKPj4gKwkJCWJyZWFrOwo+ IAo+IFNob3VsZCB0aGVyZSBiZSBhIHNsZWVwIGluIGhlcmU/IEFsc28sIGNvbnNpZGVyIHVzaW5n IAo+IHJlYWR4X3BvbGxfdGltZW91dCBpbnN0ZWFkCj4gb2Ygcm9sbGluZyB5b3VyIG93biBwb2xs aW5nLgo+IApGaXhlZCBpbiBWMi4KCj4+ICsJfQo+PiArCj4+ICsJaWYgKGNudCA9PSAwKQo+PiAr CQlwcl9lcnIoInNldCBsaW5rX3RyYWluPSVkIGZhaWxlZFxuIiwgcGF0dGVybik7Cj4gCj4gVGhp cyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGFuIGludCBhbmQgcmVwb3J0IHRoaXMgZmFpbHVyZSBp bnN0ZWFkIG9mIAo+IGlnbm9yaW5nCj4gaXQuCj4gCkZpeGVkIGluIFYyLgoKPj4gK30KPj4gKwo+ PiArc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX3VzYl9yZXNldChzdHJ1Y3QgZHBfY2F0YWxv Z19jdHJsICpjdHJsLCAKPj4gYm9vbCBmbGlwKQo+PiArewo+PiArCXN0cnVjdCBkcF9jYXRhbG9n X3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+PiArCj4+ICsJaWYg KCFjdHJsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybjsK Pj4gKwl9Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwpOwo+PiArCj4+ICsJYmFz ZSA9IGNhdGFsb2ctPmlvLT51c2IzX2RwX2NvbS5iYXNlOwo+PiArCj4+ICsJZHBfd3JpdGUoYmFz ZSArIFVTQjNfRFBfQ09NX1JFU0VUX09WUkRfQ1RSTCwgMHgwYSk7Cj4gCj4gQWdhaW4sIGFsbCBv ZiB0aGVzZSBtYWdpYyB2YWx1ZXMgbmVlZCB0byBiZSBwdWxsZWQgb3V0IGludG8gI2RlZmluZXMg c28gCj4gd2Uga25vdwo+IHdoYXQgdGhlIHZhbHVlcyBtZWFuLgo+IApGaXhlZCBpbiBWMi4KPj4g KwlkcF93cml0ZShiYXNlICsgVVNCM19EUF9DT01fUEhZX01PREVfQ1RSTCwgMHgwMik7Cj4+ICsJ ZHBfd3JpdGUoYmFzZSArIFVTQjNfRFBfQ09NX1NXX1JFU0VULCAweDAxKTsKPj4gKwkvKiBtYWtl IHN1cmUgdXNiMyBjb20gcGh5IHNvZnR3YXJlIHJlc2V0IGlzIGRvbmUgKi8KPj4gKwl3bWIoKTsK PiAKPiBTYW1lIGNvbW1lbnRzIGhlcmUgd3J0IHdtYigpCj4gCkZpeGVkIGluIFYyLgoKPj4gKwo+ PiArCWlmICghZmxpcCkgLyogQ0MxICovCj4+ICsJCWRwX3dyaXRlKGJhc2UgKyBVU0IzX0RQX0NP TV9UWVBFQ19DVFJMLCAweDAyKTsKPj4gKwllbHNlIC8qIENDMiAqLwo+PiArCQlkcF93cml0ZShi YXNlICsgVVNCM19EUF9DT01fVFlQRUNfQ1RSTCwgMHgwMyk7Cj4gCj4gCj4gICAgICAgICB1MzIg dmFsOwo+ICAgICAgICAgLi4uCj4gICAgICAgICB2YWwgPSBTT01FX0RFRklORV9USEFUX01BS0VT X1NFTlNFOwo+ICAgICAgICAgaWYgKGZsaXApCj4gICAgICAgICAgICAgICAgIHZhbCB8PSBBTk9U SEVSX0RFRklORV9USEFUX01FQU5TX0ZMSVA7Cj4gCj4gICAgICAgICBkcF9pb193cml0ZShVU0Iz X0RQX0NPTV9UWVBFQ19DVFJMLCB2YWwpOwo+IApGb3Jnb3QgdG8gZml4IHRoZSBpZi9lbHNlIGNh c2UuIFdpbGwgZml4IGl0IGluIFYzLgoKPj4gKwo+PiArCWRwX3dyaXRlKGJhc2UgKyBVU0IzX0RQ X0NPTV9TV0lfQ1RSTCwgMHgwMCk7Cj4+ICsJZHBfd3JpdGUoYmFzZSArIFVTQjNfRFBfQ09NX1NX X1JFU0VULCAweDAwKTsKPj4gKwkvKiBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIHJlc2V0IGlzIGRv bmUgKi8KPj4gKwl3bWIoKTsKPj4gKwo+PiArCWRwX3dyaXRlKGJhc2UgKyBVU0IzX0RQX0NPTV9Q T1dFUl9ET1dOX0NUUkwsIDB4MDEpOwo+PiArCWRwX3dyaXRlKGJhc2UgKyBVU0IzX0RQX0NPTV9S RVNFVF9PVlJEX0NUUkwsIDB4MDApOwo+PiArCS8qIG1ha2Ugc3VyZSBwaHkgaXMgYnJvdWdodCBv dXQgb2YgcmVzZXQgKi8KPj4gKwl3bWIoKTsKPj4gKwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9p ZCBkcF9jYXRhbG9nX3BhbmVsX3RwZ19jZmcoc3RydWN0IGRwX2NhdGFsb2dfcGFuZWwgKnBhbmVs LAo+PiArCWJvb2wgZW5hYmxlKQo+PiArewo+PiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUg KmNhdGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+PiArCj4+ICsJaWYgKCFwYW5lbCkg ewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+ PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihwYW5lbCk7Cj4+ICsJYmFzZSA9IGNhdGFsb2ct PmlvLT5kcF9wMC5iYXNlOwo+PiArCj4+ICsJaWYgKCFlbmFibGUpIHsKPj4gKwkJZHBfd3JpdGUo YmFzZSArIE1NU1NfRFBfVFBHX01BSU5fQ09OVFJPTCwgMHgwKTsKPj4gKwkJZHBfd3JpdGUoYmFz ZSArIE1NU1NfRFBfQklTVF9FTkFCTEUsIDB4MCk7Cj4+ICsJCWRwX3dyaXRlKGJhc2UgKyBNTVNT X0RQX1RJTUlOR19FTkdJTkVfRU4sIDB4MCk7Cj4+ICsJCXdtYigpOyAvKiBlbnN1cmUgVGltaW5n IGdlbmVyYXRvciBpcyB0dXJuZWQgb2ZmICovCj4+ICsJCXJldHVybjsKPj4gKwl9Cj4gCj4gVGhl cmUncyByZWFsbHkgbm8gcmVhc29uIHRvIGhhdmUgYm90aCB0aGUgZW5hYmxlICsgZGlzYWJsZSBw YXRoIGluIHRoZSAKPiBzYW1lCj4gZnVuY3Rpb24sIHRoZXkgZG9uJ3Qgc2hhcmUgYW55IGNvZGUg KGFzaWRlIGZyb20gd3JpdGluZyBhIGZldyBkaWZmZXJlbnQgCj4gdmFsdWVzCj4gdG8gdGhlIHNh bWUgcmVnaXN0ZXJzKS4gQ291bGQgeW91IHBsZWFzZSBzcGxpdCB0aGlzIGZ1bmN0aW9uIGludG8g YQo+IHRpbWluZ19nZW5lcmF0b3JfZGlzYWJsZSBhbmQgdGltaW5nX2dlbmVyYXRvcl9lbmFibGU/ Cj4gCkZpeGVkIGluIFYyLgoKPj4gKwo+PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0lOVEZf Q09ORklHLCAweDApOwo+PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0lOVEZfSFNZTkNfQ1RM LCBwYW5lbC0+aHN5bmNfY3RsKTsKPj4gKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX1ZT WU5DX1BFUklPRF9GMCwgcGFuZWwtPnZzeW5jX3BlcmlvZCAqCj4+ICsJCQlwYW5lbC0+aHN5bmNf cGVyaW9kKTsKPj4gKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX1ZTWU5DX1BVTFNFX1dJ RFRIX0YwLCAKPj4gcGFuZWwtPnZfc3luY193aWR0aCAqCj4+ICsJCQlwYW5lbC0+aHN5bmNfcGVy aW9kKTsKPj4gKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX1ZTWU5DX1BFUklPRF9GMSwg MCk7Cj4+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfSU5URl9WU1lOQ19QVUxTRV9XSURUSF9G MSwgMCk7Cj4+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfSU5URl9ESVNQTEFZX0hDVEwsIHBh bmVsLT5kaXNwbGF5X2hjdGwpOwo+PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0lOVEZfQUNU SVZFX0hDVEwsIDApOwo+PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0lOVEZfRElTUExBWV9WX1NU QVJUX0YwLCAKPj4gcGFuZWwtPmRpc3BsYXlfdl9zdGFydCk7Cj4+ICsJZHBfd3JpdGUoYmFzZSAr IE1NU1NfRFBfSU5URl9ESVNQTEFZX1ZfRU5EX0YwLCAKPj4gcGFuZWwtPmRpc3BsYXlfdl9lbmQp Owo+PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0lOVEZfRElTUExBWV9WX1NUQVJUX0YxLCAwKTsK Pj4gKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX0RJU1BMQVlfVl9FTkRfRjEsIDApOwo+ PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0lOVEZfQUNUSVZFX1ZfU1RBUlRfRjAsIDApOwo+ PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNTX0RQX0lOVEZfQUNUSVZFX1ZfRU5EX0YwLCAwKTsKPj4g KwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX0FDVElWRV9WX1NUQVJUX0YxLCAwKTsKPj4g KwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9JTlRGX0FDVElWRV9WX0VORF9GMSwgMCk7Cj4+ICsJ ZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfSU5URl9QT0xBUklUWV9DVEwsIDApOwo+PiArCXdtYigp OyAvKiBlbnN1cmUgVFBHIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZCAqLwo+PiArCj4+ICsJZHBf d3JpdGUoYmFzZSArIE1NU1NfRFBfVFBHX01BSU5fQ09OVFJPTCwgMHgxMDApOwo+PiArCWRwX3dy aXRlKGJhc2UgKyBNTVNTX0RQX1RQR19WSURFT19DT05GSUcsIDB4NSk7Cj4+ICsJd21iKCk7IC8q IGVuc3VyZSBUUEcgY29uZmlnIGlzIHByb2dyYW1tZWQgKi8KPj4gKwlkcF93cml0ZShiYXNlICsg TU1TU19EUF9CSVNUX0VOQUJMRSwgMHgxKTsKPj4gKwlkcF93cml0ZShiYXNlICsgTU1TU19EUF9U SU1JTkdfRU5HSU5FX0VOLCAweDEpOwo+PiArCXdtYigpOyAvKiBlbnN1cmUgVGltaW5nIGdlbmVy YXRvciBpcyB0dXJuZWQgb24gKi8KPj4gKwlwcl9kZWJ1ZygiJXM6IGVuYWJsZWQgdHBnXG4iLCBf X2Z1bmNfXyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9yZXNl dChzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKQo+PiArewo+PiArCXUzMiBzd19yZXNldDsK Pj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+PiArCXZvaWQgX19pb21l bSAqYmFzZTsKPj4gKwo+PiArCWlmICghY3RybCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5w dXRcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRfcHJp dihjdHJsKTsKPj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2FoYi5iYXNlOwo+PiArCj4+ICsJ c3dfcmVzZXQgPSBkcF9yZWFkKGJhc2UgKyBEUF9TV19SRVNFVCk7Cj4+ICsKPj4gKwlzd19yZXNl dCB8PSBCSVQoMCk7Cj4gCj4gU2hvdWxkIGJlIGEgI2RlZmluZQo+IAo+PiArCWRwX3dyaXRlKGJh c2UgKyBEUF9TV19SRVNFVCwgc3dfcmVzZXQpOwo+PiArCXVzbGVlcF9yYW5nZSgxMDAwLCAxMDEw KTsgLyogaC93IHJlY29tbWVuZGVkIGRlbGF5ICovCj4gCj4gU2FtZSBjb21tZW50IGhlcmUgcmVn YXJkaW5nIHRoZSAxMHVzIHJhbmdlCj4gCkFkZHJlc3NlZCBib3RoIHRoZSBhYm92ZSBjb21tZW50 cyBpbiBWMi4KCj4+ICsKPj4gKwlzd19yZXNldCAmPSB+QklUKDApOwo+PiArCWRwX3dyaXRlKGJh c2UgKyBEUF9TV19SRVNFVCwgc3dfcmVzZXQpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgYm9vbCBk cF9jYXRhbG9nX2N0cmxfbWFpbmxpbmtfcmVhZHkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAKPj4g KmN0cmwpCj4+ICt7Cj4+ICsJdTMyIGRhdGE7Cj4+ICsJaW50IGNudCA9IDEwOwo+PiArCXN0cnVj dCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ PiArCj4+ICsJaWYgKCFjdHJsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7 Cj4+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7Cj4+ICsKPj4gKwl3aGlsZSAo LS1jbnQpIHsKPj4gKwkJLyogRFBfTUFJTkxJTktfUkVBRFkgKi8KPj4gKwkJZGF0YSA9IGRwX3Jl YWQoYmFzZSArIERQX01BSU5MSU5LX1JFQURZKTsKPj4gKwkJaWYgKGRhdGEgJiBCSVQoMCkpCj4+ ICsJCQlyZXR1cm4gdHJ1ZTsKPj4gKwo+PiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAxMCk7IC8q IDFtcyB3YWl0IGJlZm9yZSBuZXh0IHJlZyByZWFkICovCj4gCj4gU2FtZSBjb21tZW50IGhlcmUg cmVnYXJkaW5nIHVzaW5nIHJlYWR4X3BvbGxfdGltZW91dCB3cmFwcGVkIGluIGEgCj4gaGVscGVy LCBhbHNvCj4gMTB1cyBjb21tZW50Lgo+IApGaXhlZCBpbiBWMi4KCj4+ICsJfQo+PiArCXByX2Vy cigibWFpbmxpbmsgbm90IHJlYWR5XG4iKTsKPj4gK2VuZDoKPj4gKwlyZXR1cm4gZmFsc2U7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9lbmFibGVfaXJxKHN0cnVj dCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsCj4+ICsJCQkJCQlib29sIGVuYWJsZSkKPj4gK3sKPj4g KwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+PiArCXZvaWQgX19pb21lbSAq YmFzZTsKPj4gKwo+PiArCWlmICghY3RybCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRc biIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihj dHJsKTsKPj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2FoYi5iYXNlOwo+PiArCj4+ICsJaWYg KGVuYWJsZSkgewo+PiArCQlkcF93cml0ZShiYXNlICsgRFBfSU5UUl9TVEFUVVMsIERQX0lOVFJf TUFTSzEpOwo+PiArCQlkcF93cml0ZShiYXNlICsgRFBfSU5UUl9TVEFUVVMyLCBEUF9JTlRSX01B U0syKTsKPj4gKwl9IGVsc2Ugewo+PiArCQlkcF93cml0ZShiYXNlICsgRFBfSU5UUl9TVEFUVVMs IDB4MDApOwo+PiArCQlkcF93cml0ZShiYXNlICsgRFBfSU5UUl9TVEFUVVMyLCAweDAwKTsKPj4g Kwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2NhdGFsb2dfY3RybF9ocGRfY29uZmln KHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIAo+PiBib29sIGVuKQo+PiArewo+PiArCXN0 cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNl Owo+PiArCj4+ICsJaWYgKCFjdHJsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7 Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGN0cmwp Owo+PiArCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfYXV4LmJhc2U7Cj4+ICsKPj4gKwlpZiAoZW4p IHsKPj4gKwkJdTMyIHJlZnRpbWVyID0gZHBfcmVhZChiYXNlICsgRFBfRFBfSFBEX1JFRlRJTUVS KTsKPj4gKwo+PiArCQlkcF93cml0ZShiYXNlICsgRFBfRFBfSFBEX0lOVF9BQ0ssIDB4Rik7Cj4+ ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9EUF9IUERfSU5UX01BU0ssIDB4Rik7Cj4+ICsKPj4gKwkJ LyogRW5hYmxpbmcgUkVGVElNRVIgKi8KPj4gKwkJcmVmdGltZXIgfD0gQklUKDE2KTsKPiAKPiBZ b3UgZG9uJ3QgdXNlIHRoaXMgYW55d2hlcmU/CgpSZW1vdmVkIGluIFYyLgo+IAo+PiArCQlkcF93 cml0ZShiYXNlICsgRFBfRFBfSFBEX1JFRlRJTUVSLCAweEYpOwo+PiArCQkvKiBFbmFibGUgSFBE ICovCj4+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9EUF9IUERfQ1RSTCwgMHgxKTsKPj4gKwl9IGVs c2Ugewo+PiArCQkvKkRpc2FibGUgSFBEICovCj4gCj4gU3BhY2UgYWZ0ZXIgKgo+IApGaXhlZCBp biB2Mi4KPj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX0RQX0hQRF9DVFJMLCAweDApOwo+PiArCX0K Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19jdHJsX2dldF9pbnRlcnJ1cHQo c3RydWN0IGRwX2NhdGFsb2dfY3RybCAKPj4gKmN0cmwpCj4+ICt7Cj4+ICsJdTMyIGFjayA9IDA7 Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2b2lkIF9faW9t ZW0gKmJhc2U7Cj4+ICsKPj4gKwlpZiAoIWN0cmwpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlu cHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0X3By aXYoY3RybCk7Cj4+ICsJYmFzZSA9IGNhdGFsb2ctPmlvLT5kcF9haGIuYmFzZTsKPj4gKwo+PiAr CWN0cmwtPmlzciA9IGRwX3JlYWQoYmFzZSArIERQX0lOVFJfU1RBVFVTMik7Cj4gCj4gVGhpcyB2 YWx1ZSBzaG91bGQganVzdCBnZXQgcmV0dXJuZWQgaW5zdGVhZCBvZiBiZWluZyBzdG9yZWQuCj4g Cj4+ICsJY3RybC0+aXNyICY9IH5EUF9JTlRSX01BU0syOwo+IAo+IFVubWFza2luZyB0aGUgaW50 ZXJydXB0cyBzaG91bGQgbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbiwgaXQgCj4g c2hvdWxkCj4gYmUgcGFydCBvZiB0aGUgYWNrIGJlbG93Lgo+IAo+PiArCWFjayA9IGN0cmwtPmlz ciAmIERQX0lOVEVSUlVQVF9TVEFUVVMyOwo+IAo+IEFuZCB0aGlzIGRvZXMgdGhlIGFib3ZlIHVu bWFzayBhbHJlYWR5LCBzbyB5b3UgY2FuIGp1c3QgdHVyZiBpdC4KPiAKPj4gKwlhY2sgPDw9IDE7 Cj4+ICsJYWNrIHw9IERQX0lOVFJfTUFTSzI7Cj4gCj4gSW5zdGVhZCBvZiByb2xsaW5nIHRoZSBh Y2sgY29kZSB5b3Vyc2VsZiwgSSdkIHByZWZlciB3aGF0IHlvdSBkaWQgd2l0aCAKPiBfTUFTSywK PiB3aGVyZSB5b3UgZGVmaW5lIERQX0lOVEVSUlVQVF9TVEFUVVMyX0FDSyBhYm92ZSBhbmQganVz dCBkbyBhIAo+IGJpdHdpc2UtT1IgdG8gYWRkCj4gdGhlIGFja3MgaGVyZS4gV2l0aG91dCB0aGUg cmVnaXN0ZXIgbWFwIGluIGZyb250IG9mIG1lLCBpdCB3b3VsZCB0YWtlIGEgCj4gd2hpbGUKPiB0 byBmaWd1cmUgb3V0IHdoYXQgeW91J3JlIHRyeWluZyB0byBhY2NvbXBsaXNoLgo+IApEaWRuJ3Qg YWRkcmVzcyB5b3VyIGNvbW1lbnRzIGluIGdldF9pbnRlcnJ1cHQgZnVuY3Rpb24uIFdpbGwgZml4 IHRoaXMgaW4gClYzLgoKPj4gKwlkcF93cml0ZShiYXNlICsgRFBfSU5UUl9TVEFUVVMyLCBhY2sp Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0cmxfcGh5X3Jlc2V0KHN0 cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2df cHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4+ICsKPj4gKwlpZiAo IWN0cmwpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+ PiArCX0KPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4+ICsJYmFzZSA9IGNh dGFsb2ctPmlvLT5kcF9haGIuYmFzZTsKPj4gKwo+PiArCWRwX3dyaXRlKGJhc2UgKyBEUF9QSFlf Q1RSTCwgMHg1KTsgLyogYml0IDAgJiAyICovCj4gCj4gVGhlIGNvbW1lbnQgZG9lc24ndCBoZWxw IGhlcmUsIHBsZWFzZSAjZGVmaW5lIHRoZXNlIGJpdHMKPiAKPj4gKwl1c2xlZXBfcmFuZ2UoMTAw MCwgMTAxMCk7IC8qIGgvdyByZWNvbW1lbmRlZCBkZWxheSAqLwo+IAo+IFNhbWUgY29tbWVudCBy ZTogZGVsYXkgcmFuZ2UKPiAKRml4ZWQgaW4gVjIuCgo+PiArCWRwX3dyaXRlKGJhc2UgKyBEUF9Q SFlfQ1RSTCwgMHgwKTsKPj4gKwl3bWIoKTsgLyogbWFrZSBzdXJlIFBIWSByZXNldCBkb25lICov Cj4gCj4gU2FtZSBjb21tZW50IHJlOiB3bWIKPiAKRml4ZWQgaW4gVjIuCgo+PiArfQo+PiArCj4+ ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0cmxfcGh5X2xhbmVfY2ZnKHN0cnVjdCBkcF9jYXRh bG9nX2N0cmwgCj4+ICpjdHJsLAo+PiArCQlib29sIGZsaXBwZWQsIHU4IGxuX2NudCkKPj4gK3sK Pj4gKwl1MzIgaW5mbyA9IDB4MDsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRh bG9nOwo+PiArCXU4IG9yaWVudGF0aW9uID0gQklUKCEhZmxpcHBlZCk7Cj4+ICsKPj4gKwlpZiAo IWN0cmwpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+ PiArCX0KPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4+ICsKPj4gKwlpbmZv IHw9IChsbl9jbnQgJiAweDBGKTsKPiAKPiBSZW1vdmUgdGhlIHwgYW5kIGp1c3QgbWFrZSB0aGlz IGFuIGFzc2lnbm1lbnQgKGFuZCB5b3UgY2FuIHJlbW92ZSB0aGUKPiBpbml0aWFsaXphdGlvbiB0 byAwIGFib3ZlKQo+IApXaWxsIHJlbW92ZSB0aGUgaW5pdGlhbGl6YXRpb24gdG8gemVybyBpbiBW My4gVGhlIG90aGVyIGNvbW1lbnRzIGFyZSAKYWRkcmVzc2VkLgoKPj4gKwlpbmZvIHw9ICgob3Jp ZW50YXRpb24gJiAweDBGKSA8PCA0KTsKPj4gKwlwcl9kZWJ1ZygiU2hhcmVkIEluZm8gPSAweCV4 XG4iLCBpbmZvKTsKPj4gKwo+PiArCWRwX3dyaXRlKGNhdGFsb2ctPmlvLT5waHlfaW8uYmFzZSAr IERQX1BIWV9TUEFSRTAsIGluZm8pOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRh bG9nX2N0cmxfdXBkYXRlX3Z4X3B4KHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgCj4+ICpjdHJsLAo+ PiArCQl1OCB2X2xldmVsLCB1OCBwX2xldmVsKQo+PiArewo+PiArCXN0cnVjdCBkcF9jYXRhbG9n X3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlMCwgKmJhc2UxOwo+PiAr CXU4IHZhbHVlMCwgdmFsdWUxOwo+IAo+IENhbiB3ZSBwbGVhc2UgcGljayBiZXR0ZXIgbmFtZXMg Zm9yIHRoZXNlPyEKPiAKPj4gKwo+PiArCWlmICghY3RybCkgewo+PiArCQlwcl9lcnIoImludmFs aWQgaW5wdXRcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJZHBfY2F0YWxvZ19n ZXRfcHJpdihjdHJsKTsKPj4gKwliYXNlMCA9IGNhdGFsb2ctPmlvLT5sbl90eDBfaW8uYmFzZTsK Pj4gKwliYXNlMSA9IGNhdGFsb2ctPmlvLT5sbl90eDFfaW8uYmFzZTsKPj4gKwo+PiArCXByX2Rl YnVnKCJodzogdj0lZCBwPSVkXG4iLCB2X2xldmVsLCBwX2xldmVsKTsKPj4gKwo+PiArCXZhbHVl MCA9IHZtX3ZvbHRhZ2Vfc3dpbmdbdl9sZXZlbF1bcF9sZXZlbF07Cj4+ICsJdmFsdWUxID0gdm1f cHJlX2VtcGhhc2lzW3ZfbGV2ZWxdW3BfbGV2ZWxdOwo+PiArCj4+ICsJLyogcHJvZ3JhbSBkZWZh dWx0IHNldHRpbmcgZmlyc3QgKi8KPiAKPiBXaHkgZG8geW91IG5lZWQgdG8gZG8gdGhpcz8KPiAK Pj4gKwlkcF93cml0ZShiYXNlMCArIFRYbl9UWF9EUlZfTFZMLCAweDJBKTsKPj4gKwlkcF93cml0 ZShiYXNlMSArIFRYbl9UWF9EUlZfTFZMLCAweDJBKTsKPj4gKwlkcF93cml0ZShiYXNlMCArIFRY bl9UWF9FTVBfUE9TVDFfTFZMLCAweDIwKTsKPj4gKwlkcF93cml0ZShiYXNlMSArIFRYbl9UWF9F TVBfUE9TVDFfTFZMLCAweDIwKTsKPiAKPiAjZGVmaW5lIHRoZXNlIG1hZ2ljIHZhbHVlcwo+IAo+ PiArCj4+ICsJLyogRW5hYmxlIE1VWCB0byB1c2UgQ3Vyc29yIHZhbHVlcyBmcm9tIHRoZXNlIHJl Z2lzdGVycyAqLwo+PiArCXZhbHVlMCB8PSBCSVQoNSk7Cj4+ICsJdmFsdWUxIHw9IEJJVCg1KTsK PiAKPiAjZGVmaW5lIHRoZXNlIGJpdHMgcGxlYXNlCj4gCj4+ICsKPj4gKwkvKiBDb25maWd1cmUg aG9zdCBhbmQgcGFuZWwgb25seSBpZiBib3RoIHZhbHVlcyBhcmUgYWxsb3dlZCAqLwo+PiArCWlm ICh2YWx1ZTAgIT0gMHhGRiAmJiB2YWx1ZTEgIT0gMHhGRikgewo+IAo+IFlvdSBjYW4gY2hlY2sg dGhpcyBhIGxvdCBlYXJsaWVyIGluIHRoZSBmdW5jdGlvbi4KPiAKPj4gKwkJZHBfd3JpdGUoYmFz ZTAgKyBUWG5fVFhfRFJWX0xWTCwgdmFsdWUwKTsKPj4gKwkJZHBfd3JpdGUoYmFzZTEgKyBUWG5f VFhfRFJWX0xWTCwgdmFsdWUwKTsKPj4gKwkJZHBfd3JpdGUoYmFzZTAgKyBUWG5fVFhfRU1QX1BP U1QxX0xWTCwgdmFsdWUxKTsKPj4gKwkJZHBfd3JpdGUoYmFzZTEgKyBUWG5fVFhfRU1QX1BPU1Qx X0xWTCwgdmFsdWUxKTsKPj4gKwo+PiArCQlwcl9kZWJ1ZygiaHc6IHZ4X3ZhbHVlPTB4JXggcHhf dmFsdWU9MHgleFxuIiwKPj4gKwkJCXZhbHVlMCwgdmFsdWUxKTsKPj4gKwl9IGVsc2Ugewo+PiAr CQlwcl9lcnIoImludmFsaWQgdnggKDB4JXg9MHgleCksIHB4ICgweCV4PTB4JXhcbiIsCj4+ICsJ CQl2X2xldmVsLCB2YWx1ZTAsIHBfbGV2ZWwsIHZhbHVlMSk7Cj4gCj4gU2VlbXMgbGlrZSByZXR1 cm5pbmcgYW4gZXJyb3IgaW4gdGhpcyBjYXNlIHdvdWxkIGJlIHVzZWZ1bAo+IAo+PiArCX0KPj4g K30KCldpbGwgYWRkcmVzcyBjb21tZW50cyBpbiAqdXBkYXRlX3Z4X3B4KCkgZnVuY3Rpb24gaW4g VjMuCgo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9nX2N0cmxfc2VuZF9waHlfcGF0dGVy bihzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsIAo+PiAqY3RybCwKPj4gKwkJCXUzMiBwYXR0ZXJuKQo+ PiArewo+PiArCXN0cnVjdCBkcF9jYXRhbG9nX3ByaXZhdGUgKmNhdGFsb2c7Cj4+ICsJdTMyIHZh bHVlID0gMHgwOwo+PiArCXZvaWQgX19pb21lbSAqYmFzZSA9IE5VTEw7Cj4+ICsKPj4gKwlpZiAo IWN0cmwpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+ PiArCX0KPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4+ICsKPj4gKwliYXNl ID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPj4gKwo+PiArCWRwX3dyaXRlKGJhc2UgKyBE UF9TVEFURV9DVFJMLCAweDApOwo+IAo+IERvIHlvdSByZWFsbHkgbmVlZCB0byBkbyB0aGlzPwo+ IApZZXMsIHRvIG1ha2Ugc3VyZSBubyBvdGhlciBwYXR0ZXJuIGlzIHNldC9lbmFibGVkIGluIGhh cmR3YXJlIGJlZm9yZSBhbnkgCm5ldyBwYXR0ZXJuIGlzIGNvbmZpZ3VyZWQuCgo+PiArCj4+ICsJ c3dpdGNoIChwYXR0ZXJuKSB7Cj4+ICsJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX0QxMF8yX05P X1NDUkFNQkxJTkc6Cj4+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCAweDEpOwo+ PiArCQlicmVhazsKPj4gKwljYXNlIERQX1RFU1RfUEhZX1BBVFRFUk5fU1lNQk9MX0VSUl9NRUFT VVJFTUVOVF9DTlQ6Cj4+ICsJCXZhbHVlICY9IH4oMSA8PCAxNik7Cj4+ICsJCWRwX3dyaXRlKGJh c2UgKyBEUF9IQlIyX0NPTVBMSUFOQ0VfU0NSQU1CTEVSX1JFU0VULCB2YWx1ZSk7Cj4+ICsJCXZh bHVlIHw9IDB4RkM7Cj4+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9IQlIyX0NPTVBMSUFOQ0VfU0NS QU1CTEVSX1JFU0VULCB2YWx1ZSk7Cj4+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9NQUlOTElOS19M RVZFTFMsIDB4Mik7Cj4+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCAweDEwKTsK Pj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX1BSQlM3Ogo+PiArCQlk cF93cml0ZShiYXNlICsgRFBfU1RBVEVfQ1RSTCwgMHgyMCk7Cj4+ICsJCWJyZWFrOwo+PiArCWNh c2UgRFBfVEVTVF9QSFlfUEFUVEVSTl84MF9CSVRfQ1VTVE9NX1BBVFRFUk46Cj4+ICsJCWRwX3dy aXRlKGJhc2UgKyBEUF9TVEFURV9DVFJMLCAweDQwKTsKPj4gKwkJLyogMDAxMTExMTAwMDAwMTEx MTEwMDAwMDExMTExMDAwMDAgKi8KPj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX1RFU1RfODBCSVRf Q1VTVE9NX1BBVFRFUk5fUkVHMCwgMHgzRTBGODNFMCk7Cj4+ICsJCS8qIDAwMDAxMTExMTAwMDAw MTExMTEwMDAwMDExMTExMDAwICovCj4+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9URVNUXzgwQklU X0NVU1RPTV9QQVRURVJOX1JFRzEsIDB4MEY4M0UwRjgpOwo+PiArCQkvKiAxMTExMTAwMDAwMTEx MTEwICovCj4+ICsJCWRwX3dyaXRlKGJhc2UgKyBEUF9URVNUXzgwQklUX0NVU1RPTV9QQVRURVJO X1JFRzIsIDB4MDAwMEY4M0UpOwo+PiArCQlicmVhazsKPj4gKwljYXNlIERQX1RFU1RfUEhZX1BB VFRFUk5fSEJSMl9DVFNfRVlFX1BBVFRFUk46Cj4+ICsJCXZhbHVlID0gQklUKDE2KTsKPj4gKwkJ ZHBfd3JpdGUoYmFzZSArIERQX0hCUjJfQ09NUExJQU5DRV9TQ1JBTUJMRVJfUkVTRVQsIHZhbHVl KTsKPj4gKwkJdmFsdWUgfD0gMHhGQzsKPj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX0hCUjJfQ09N UExJQU5DRV9TQ1JBTUJMRVJfUkVTRVQsIHZhbHVlKTsKPj4gKwkJZHBfd3JpdGUoYmFzZSArIERQ X01BSU5MSU5LX0xFVkVMUywgMHgyKTsKPj4gKwkJZHBfd3JpdGUoYmFzZSArIERQX1NUQVRFX0NU UkwsIDB4MTApOwo+IAo+IFRoaXMgY29kZSBpcyB0aGUgZXhhY3Qgc2FtZSBhcyB0aGUgY2FzZSBm b3IKPiBEUF9URVNUX1BIWV9QQVRURVJOX1NZTUJPTF9FUlJfTUVBU1VSRU1FTlRfQ05ULCBhc2lk ZSBmcm9tIEJJVCgxNikgdnMKPiB+QklUKDE2KS4gQ2FuIHlvdSBwbGVhc2UgY29tYmluZSB0aGVz ZSBjYXNlcwo+IGFuZCBzaGFyZSBjb2RlPwoKV2lsbCBmaXggdGhpcyBpbiBWMy4KCj4gCj4+ICsJ CWJyZWFrOwo+PiArCWRlZmF1bHQ6Cj4+ICsJCXByX2RlYnVnKCJObyB2YWxpZCB0ZXN0IHBhdHRl cm4gcmVxdWVzdGVkOiAweCV4XG4iLCBwYXR0ZXJuKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPiAK PiBBbGwgb2YgdGhlIERQX1NUQVRFX0NUUkwgdmFsdWVzIHNob3VsZCBiZSAjZGVmaW5lZCwgYW5k IHlvdSBjYW4gbW92ZSAKPiB0aGUgd3JpdGUKPiBkb3duIGhlcmUgaW5zdGVhZCBvZiBkdXBsaWNh dGluZyBpdCBldmVyeXdoZXJlICh3aXRoCj4gRFBfVEVTVF9QSFlfUEFUVEVSTl84MF9CSVRfQ1VT VE9NX1BBVFRFUk4gd3JpdGluZyBhIDApLgo+IApBbGwgdGhlIERQX1NUQVRFX0NUUkwgdmFsdWVz IGFyZSBkZWZpbmVzIGluIFYyLgoKSSBhbSBub3QgY2xlYXIgb24gbW92aW5nIHRoZSB3cml0ZSBv cGVyYXRpb25zIGFmdGVyIHRoZSBzd2l0Y2ggY2FzZXMuIApDYW4geW91IHBsZWFzZSBwcm92aWRl CnNvbWUgbW9yZSBkZXRhaWxzPwoKPj4gKwo+PiArCS8qIE1ha2Ugc3VyZSB0aGUgdGVzdCBwYXR0 ZXJuIGlzIHByb2dyYW1tZWQgaW4gdGhlIGhhcmR3YXJlICovCj4+ICsJd21iKCk7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB1MzIgZHBfY2F0YWxvZ19jdHJsX3JlYWRfcGh5X3BhdHRlcm4oc3RydWN0 IGRwX2NhdGFsb2dfY3RybCAKPj4gKmN0cmwpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2df cHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBOVUxMOwo+PiArCj4+ ICsJaWYgKCFjdHJsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJl dHVybiAwOwo+PiArCX0KPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoY3RybCk7Cj4+ICsK Pj4gKwliYXNlID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPj4gKwo+PiArCXJldHVybiBk cF9yZWFkKGJhc2UgKyBEUF9NQUlOTElOS19SRUFEWSk7Cj4+ICt9Cj4+ICsKPj4gKy8qIHBhbmVs IHJlbGF0ZWQgY2F0YWxvZyBmdW5jdGlvbnMgKi8KPj4gK3N0YXRpYyBpbnQgZHBfY2F0YWxvZ19w YW5lbF90aW1pbmdfY2ZnKHN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsIAo+PiAqcGFuZWwpCj4+ICt7 Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl2b2lkIF9faW9t ZW0gKmJhc2U7Cj4+ICsKPj4gKwlpZiAoIXBhbmVsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBp bnB1dFxuIik7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0 X3ByaXYocGFuZWwpOwo+PiArCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBfbGluay5iYXNlOwo+PiAr Cj4+ICsJZHBfd3JpdGUoYmFzZSArIERQX1RPVEFMX0hPUl9WRVIsIHBhbmVsLT50b3RhbCk7Cj4+ ICsJZHBfd3JpdGUoYmFzZSArIERQX1NUQVJUX0hPUl9WRVJfRlJPTV9TWU5DLCBwYW5lbC0+c3lu Y19zdGFydCk7Cj4+ICsJZHBfd3JpdGUoYmFzZSArIERQX0hTWU5DX1ZTWU5DX1dJRFRIX1BPTEFS SVRZLCAKPj4gcGFuZWwtPndpZHRoX2JsYW5raW5nKTsKPj4gKwlkcF93cml0ZShiYXNlICsgRFBf QUNUSVZFX0hPUl9WRVIsIHBhbmVsLT5kcF9hY3RpdmUpOwo+PiArZW5kOgo+IAo+IHVzZWxlc3Mg bGFiZWwsIGJ1dCBpdCdsbCBwcm9iYWJseSBnbyBhd2F5IHdoZW4geW91IHN0cmlwIG91dCBhbGwg b2YgdGhlCj4gdW5uZWNlc3NhcnkgTlVMTCBjaGVja3MgZnJvbSB0aGUgZHJpdmVyLgo+IApGaXhl ZCBpbiBWMi4KCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2Nh dGFsb2dfYXVkaW9faW5pdChzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyAqYXVkaW8pCj4+ICt7Cj4+ ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwlzdGF0aWMgdTMyIHNk cF9tYXBbXVtEUF9BVURJT19TRFBfSEVBREVSX01BWF0gPSB7Cj4+ICsJCXsKPj4gKwkJCU1NU1Nf RFBfQVVESU9fU1RSRUFNXzAsCj4+ICsJCQlNTVNTX0RQX0FVRElPX1NUUkVBTV8xLAo+PiArCQkJ TU1TU19EUF9BVURJT19TVFJFQU1fMSwKPj4gKwkJfSwKPj4gKwkJewo+PiArCQkJTU1TU19EUF9B VURJT19USU1FU1RBTVBfMCwKPj4gKwkJCU1NU1NfRFBfQVVESU9fVElNRVNUQU1QXzEsCj4+ICsJ CQlNTVNTX0RQX0FVRElPX1RJTUVTVEFNUF8xLAo+PiArCQl9LAo+PiArCQl7Cj4+ICsJCQlNTVNT X0RQX0FVRElPX0lORk9GUkFNRV8wLAo+PiArCQkJTU1TU19EUF9BVURJT19JTkZPRlJBTUVfMSwK Pj4gKwkJCU1NU1NfRFBfQVVESU9fSU5GT0ZSQU1FXzEsCj4+ICsJCX0sCj4+ICsJCXsKPj4gKwkJ CU1NU1NfRFBfQVVESU9fQ09QWU1BTkFHRU1FTlRfMCwKPj4gKwkJCU1NU1NfRFBfQVVESU9fQ09Q WU1BTkFHRU1FTlRfMSwKPj4gKwkJCU1NU1NfRFBfQVVESU9fQ09QWU1BTkFHRU1FTlRfMSwKPj4g KwkJfSwKPj4gKwkJewo+PiArCQkJTU1TU19EUF9BVURJT19JU1JDXzAsCj4+ICsJCQlNTVNTX0RQ X0FVRElPX0lTUkNfMSwKPj4gKwkJCU1NU1NfRFBfQVVESU9fSVNSQ18xLAo+PiArCQl9LAo+PiAr CX07Cj4+ICsKPj4gKwlpZiAoIWF1ZGlvKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlkcF9jYXRh bG9nX2dldF9wcml2KGF1ZGlvKTsKPj4gKwo+PiArCWNhdGFsb2ctPmF1ZGlvX21hcCA9IHNkcF9t YXA7Cj4gCj4gSG1tLCB0aGlzIGlzIGEgYml0IHNwb29reSwgd2UncmUgc3RvcmluZyBhIChub24t Y29uc3QpIHBvaW50ZXIgdG8gYSAKPiBzdGF0aWMKPiBzdGFjayB2YXJpYWJsZS4gRm9ydHVuYXRl bHkgdGhpcyBsb29rcyBsaWtlIGl0J2xsIGJlIGVhc3kgdG8gZml4IHNpbmNlIAo+IHRoaXMKPiBk YXRhIGlzIG9ubHkgYWNjZXNzZWQgaW4gdGhpcyBmaWxlLiBTbyBtb3ZlIHRoZSBtYXAgaW50byBh IHN0YXRpYyBjb25zdCAKPiBnbG9iYWwKPiBhbmQgcmVmZXJlbmNlIGl0IGRpcmVjdGx5IHdoZW4g bmVlZGVkIChhbmQgZHJvcCBhdWRpb19tYXApLgo+IApBbGwgdGhlIEF1ZGlvIHJlbGF0ZWQgY29u Zmlncy9BUElzIGFyZSByZW1vdmVkIGluIHRoaXMgcGF0Y2guIFdpbGwgYmUgCmFkZGluZyB0aGVz ZSBjaGFuZ2VzIGluCmEgc2VwYXJhdGUgcGF0Y2guCgo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9p ZCBkcF9jYXRhbG9nX2F1ZGlvX2NvbmZpZ19zZHAoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gCj4+ ICphdWRpbykKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+ PiArCXZvaWQgX19pb21lbSAqYmFzZTsKPj4gKwl1MzIgc2RwX2NmZyA9IDA7Cj4+ICsJdTMyIHNk cF9jZmcyID0gMDsKPj4gKwo+PiArCWlmICghYXVkaW8pCj4+ICsJCXJldHVybjsKPj4gKwo+PiAr CWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVkaW8pOwo+PiArCWJhc2UgPSBjYXRhbG9nLT5pby0+ZHBf bGluay5iYXNlOwo+PiArCj4+ICsJc2RwX2NmZyA9IGRwX3JlYWQoYmFzZSArIE1NU1NfRFBfU0RQ X0NGRyk7Cj4+ICsKPj4gKwkvKiBBVURJT19USU1FU1RBTVBfU0RQX0VOICovCj4+ICsJc2RwX2Nm ZyB8PSBCSVQoMSk7Cj4+ICsJLyogQVVESU9fU1RSRUFNX1NEUF9FTiAqLwo+PiArCXNkcF9jZmcg fD0gQklUKDIpOwo+PiArCS8qIEFVRElPX0NPUFlfTUFOQUdFTUVOVF9TRFBfRU4gKi8KPj4gKwlz ZHBfY2ZnIHw9IEJJVCg1KTsKPj4gKwkvKiBBVURJT19JU1JDX1NEUF9FTiAgKi8KPj4gKwlzZHBf Y2ZnIHw9IEJJVCg2KTsKPj4gKwkvKiBBVURJT19JTkZPRlJBTUVfU0RQX0VOICAqLwo+PiArCXNk cF9jZmcgfD0gQklUKDIwKTsKPiAKPiAjZGVmaW5lIHRoZSB2YWx1ZXMgYW5kIGNvbWJpbmUgdGhl IGFzc2lnbm1lbnQKPiAKPj4gKwo+PiArCXByX2RlYnVnKCJzZHBfY2ZnID0gMHgleFxuIiwgc2Rw X2NmZyk7Cj4+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfU0RQX0NGRywgc2RwX2NmZyk7Cj4+ ICsKPj4gKwlzZHBfY2ZnMiA9IGRwX3JlYWQoYmFzZSArIE1NU1NfRFBfU0RQX0NGRzIpOwo+PiAr CS8qIElGUk1fUkVHU1JDIC0+IERvIG5vdCB1c2UgcmVnIHZhbHVlcyAqLwo+PiArCXNkcF9jZmcy ICY9IH5CSVQoMCk7Cj4+ICsJLyogQVVESU9fU1RSRUFNX0hCM19SRUdTUkMtPiBEbyBub3QgdXNl IHJlZyB2YWx1ZXMgKi8KPj4gKwlzZHBfY2ZnMiAmPSB+QklUKDEpOwo+IAo+IFRoZSByZXNldCB2 YWx1ZSBvZiB0aGlzIHJlZ2lzdGVyIGlzIDB4NCwgc28gaG93IGNhbiB0aGUgYml0cyBpbiAKPiBw b3NpdGlvbiAwLzEKPiBnZXQgZmxpcHBlZD8gV2Ugc2hvdWxkbid0IG5lZWQgdGhpcyBjb2RlLCBh ZmFpY3QuCj4gCj4gSWYgd2UgZG8sIHRoZSBzYW1lIGNvbW1lbnRzIHJlZ2FyZGluZyAjZGVmaW5l IGFuZCBjb21iaW5hdGlvbiBhcyBhYm92ZS4KPiAKQWxsIHRoZSBhdWRpbyBmdW5jdGlvbnMgYXJl IHJlbW92ZWQgaW4gVjIuCj4+ICsKPj4gKwlwcl9kZWJ1Zygic2RwX2NmZzIgPSAweCV4XG4iLCBz ZHBfY2ZnMik7Cj4+ICsJZHBfd3JpdGUoYmFzZSArIE1NU1NfRFBfU0RQX0NGRzIsIHNkcF9jZmcy KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19hdWRpb19nZXRfaGVhZGVy KHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvIAo+PiAqYXVkaW8pCj4+ICt7Cj4+ICsJc3RydWN0IGRw X2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwl1MzIgKCpzZHBfbWFwKVtEUF9BVURJT19T RFBfSEVBREVSX01BWF07Cj4+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+PiArCWVudW0gZHBfY2F0 YWxvZ19hdWRpb19zZHBfdHlwZSBzZHA7Cj4+ICsJZW51bSBkcF9jYXRhbG9nX2F1ZGlvX2hlYWRl cl90eXBlIGhlYWRlcjsKPj4gKwo+PiArCWlmICghYXVkaW8pCj4+ICsJCXJldHVybjsKPj4gKwo+ PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVkaW8pOwo+PiArCj4+ICsJYmFzZSAgICA9IGNhdGFs b2ctPmlvLT5kcF9saW5rLmJhc2U7Cj4+ICsJc2RwX21hcCA9IGNhdGFsb2ctPmF1ZGlvX21hcDsK Pj4gKwlzZHAgICAgID0gYXVkaW8tPnNkcF90eXBlOwo+PiArCWhlYWRlciAgPSBhdWRpby0+c2Rw X2hlYWRlcjsKPj4gKwo+PiArCWF1ZGlvLT5kYXRhID0gZHBfcmVhZChiYXNlICsgc2RwX21hcFtz ZHBdW2hlYWRlcl0pOwo+PiArfQo+IAo+IFRoaXMgZnVuY3Rpb24gaXMgdW51c2VkLCBwbGVhc2Ug cmVtb3ZlLgo+IApSZW1vdmVkIGluIFYyLgo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jYXRhbG9n X2F1ZGlvX3NldF9oZWFkZXIoc3RydWN0IGRwX2NhdGFsb2dfYXVkaW8gCj4+ICphdWRpbykKPj4g K3sKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+PiArCXUzMiAoKnNk cF9tYXApW0RQX0FVRElPX1NEUF9IRUFERVJfTUFYXTsKPj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7 Cj4+ICsJZW51bSBkcF9jYXRhbG9nX2F1ZGlvX3NkcF90eXBlIHNkcDsKPj4gKwllbnVtIGRwX2Nh dGFsb2dfYXVkaW9faGVhZGVyX3R5cGUgaGVhZGVyOwo+PiArCXUzMiBkYXRhOwo+PiArCj4+ICsJ aWYgKCFhdWRpbykKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJZHBfY2F0YWxvZ19nZXRfcHJpdihh dWRpbyk7Cj4+ICsKPj4gKwliYXNlICAgID0gY2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPj4g KwlzZHBfbWFwID0gY2F0YWxvZy0+YXVkaW9fbWFwOwo+PiArCXNkcCAgICAgPSBhdWRpby0+c2Rw X3R5cGU7Cj4+ICsJaGVhZGVyICA9IGF1ZGlvLT5zZHBfaGVhZGVyOwo+PiArCWRhdGEgICAgPSBh dWRpby0+ZGF0YTsKPj4gKwo+PiArCWRwX3dyaXRlKGJhc2UgKyBzZHBfbWFwW3NkcF1baGVhZGVy XSwgZGF0YSk7Cj4+ICt9Cj4gCj4gVGhpcyBmdW5jdGlvbiBpcyB1bnVzZWQsIHBsZWFzZSByZW1v dmUuCj4gCkFsbCB0aGUgYXVkaW8gZnVuY3Rpb25zIGFyZSByZW1vdmVkIGluIFYyLgoKPj4gKwo+ PiArc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19hdWRpb19jb25maWdfYWNyKHN0cnVjdCBkcF9jYXRh bG9nX2F1ZGlvIAo+PiAqYXVkaW8pCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0 ZSAqY2F0YWxvZzsKPj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4+ICsJdTMyIGFjcl9jdHJsLCBz ZWxlY3Q7Cj4+ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1ZGlvKTsKPj4gKwo+PiArCXNl bGVjdCA9IGF1ZGlvLT5kYXRhOwo+PiArCWJhc2UgICA9IGNhdGFsb2ctPmlvLT5kcF9saW5rLmJh c2U7Cj4+ICsKPj4gKwlhY3JfY3RybCA9IHNlbGVjdCA8PCA0IHwgQklUKDMxKSB8IEJJVCg4KSB8 IEJJVCgxNCk7Cj4+ICsKPj4gKwlwcl9kZWJ1Zygic2VsZWN0ID0gMHgleCwgYWNyX2N0cmwgPSAw eCV4XG4iLCBzZWxlY3QsIGFjcl9jdHJsKTsKPj4gKwo+PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNT X0RQX0FVRElPX0FDUl9DVFJMLCBhY3JfY3RybCk7Cj4+ICt9Cj4gCj4gVGhpcyBmdW5jdGlvbiBp cyB1bnVzZWQsIHBsZWFzZSByZW1vdmUuCj4gCkFsbCB0aGUgYXVkaW8gZnVuY3Rpb25zIGFyZSBy ZW1vdmVkIGluIFYyLgoKPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY2F0YWxvZ19hdWRpb19zYWZl X3RvX2V4aXRfbGV2ZWwoc3RydWN0IAo+PiBkcF9jYXRhbG9nX2F1ZGlvICphdWRpbykKPj4gK3sK Pj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+PiArCXZvaWQgX19pb21l bSAqYmFzZTsKPj4gKwl1MzIgbWFpbmxpbmtfbGV2ZWxzLCBzYWZlX3RvX2V4aXRfbGV2ZWw7Cj4+ ICsKPj4gKwlkcF9jYXRhbG9nX2dldF9wcml2KGF1ZGlvKTsKPj4gKwo+PiArCWJhc2UgICA9IGNh dGFsb2ctPmlvLT5kcF9saW5rLmJhc2U7Cj4+ICsJc2FmZV90b19leGl0X2xldmVsID0gYXVkaW8t PmRhdGE7Cj4+ICsKPj4gKwltYWlubGlua19sZXZlbHMgPSBkcF9yZWFkKGJhc2UgKyBEUF9NQUlO TElOS19MRVZFTFMpOwo+PiArCW1haW5saW5rX2xldmVscyAmPSAweEZFMDsKPj4gKwltYWlubGlu a19sZXZlbHMgfD0gc2FmZV90b19leGl0X2xldmVsOwo+PiArCj4+ICsJcHJfZGVidWcoIm1haW5s aW5rX2xldmVsID0gMHgleCwgc2FmZV90b19leGl0X2xldmVsID0gMHgleFxuIiwKPj4gKwkJCW1h aW5saW5rX2xldmVscywgc2FmZV90b19leGl0X2xldmVsKTsKPj4gKwo+PiArCWRwX3dyaXRlKGJh c2UgKyBEUF9NQUlOTElOS19MRVZFTFMsIG1haW5saW5rX2xldmVscyk7Cj4+ICt9Cj4gCj4gVGhp cyBmdW5jdGlvbiBpcyB1bnVzZWQsIHBsZWFzZSByZW1vdmUuCj4gCj4+ICsKPj4gK3N0YXRpYyB2 b2lkIGRwX2NhdGFsb2dfYXVkaW9fZW5hYmxlKHN0cnVjdCBkcF9jYXRhbG9nX2F1ZGlvICphdWRp bykKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wcml2YXRlICpjYXRhbG9nOwo+PiArCXZv aWQgX19pb21lbSAqYmFzZTsKPj4gKwlib29sIGVuYWJsZTsKPj4gKwl1MzIgYXVkaW9fY3RybDsK Pj4gKwo+PiArCWRwX2NhdGFsb2dfZ2V0X3ByaXYoYXVkaW8pOwo+PiArCj4+ICsJYmFzZSAgID0g Y2F0YWxvZy0+aW8tPmRwX2xpbmsuYmFzZTsKPj4gKwllbmFibGUgPSAhIWF1ZGlvLT5kYXRhOwo+ PiArCj4+ICsJYXVkaW9fY3RybCA9IGRwX3JlYWQoYmFzZSArIE1NU1NfRFBfQVVESU9fQ0ZHKTsK Pj4gKwo+PiArCWlmIChlbmFibGUpCj4+ICsJCWF1ZGlvX2N0cmwgfD0gQklUKDApOwo+PiArCWVs c2UKPj4gKwkJYXVkaW9fY3RybCAmPSB+QklUKDApOwo+PiArCj4+ICsJcHJfZGVidWcoImRwX2F1 ZGlvX2NmZyA9IDB4JXhcbiIsIGF1ZGlvX2N0cmwpOwo+PiArCWRwX3dyaXRlKGJhc2UgKyBNTVNT X0RQX0FVRElPX0NGRywgYXVkaW9fY3RybCk7Cj4+ICsKPj4gKwkvKiBtYWtlIHN1cmUgYXVkaW8g ZW5naW5lIGlzIGRpc2FibGVkICovCj4+ICsJd21iKCk7Cj4+ICt9Cj4gCj4gVGhpcyBmdW5jdGlv biBpcyB1bnVzZWQsIHBsZWFzZSByZW1vdmUuCj4gCj4+ICsKPj4gK3N0cnVjdCBkcF9jYXRhbG9n ICpkcF9jYXRhbG9nX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkcF9pbyAKPj4gKmlv KQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2cgKmRwX2NhdGFs b2c7Cj4+ICsJc3RydWN0IGRwX2NhdGFsb2dfcHJpdmF0ZSAqY2F0YWxvZzsKPj4gKwlzdHJ1Y3Qg ZHBfY2F0YWxvZ19hdXggYXV4ID0gewo+PiArCQkucmVhZF9kYXRhICAgICA9IGRwX2NhdGFsb2df YXV4X3JlYWRfZGF0YSwKPj4gKwkJLndyaXRlX2RhdGEgICAgPSBkcF9jYXRhbG9nX2F1eF93cml0 ZV9kYXRhLAo+PiArCQkud3JpdGVfdHJhbnMgICA9IGRwX2NhdGFsb2dfYXV4X3dyaXRlX3RyYW5z LAo+PiArCQkuY2xlYXJfdHJhbnMgICA9IGRwX2NhdGFsb2dfYXV4X2NsZWFyX3RyYW5zLAo+PiAr CQkucmVzZXQgICAgICAgICA9IGRwX2NhdGFsb2dfYXV4X3Jlc2V0LAo+PiArCQkudXBkYXRlX2F1 eF9jZmcgPSBkcF9jYXRhbG9nX2F1eF91cGRhdGVfY2ZnLAo+PiArCQkuZW5hYmxlICAgICAgICA9 IGRwX2NhdGFsb2dfYXV4X2VuYWJsZSwKPj4gKwkJLnNldHVwICAgICAgICAgPSBkcF9jYXRhbG9n X2F1eF9zZXR1cCwKPj4gKwkJLmdldF9pcnEgICAgICAgPSBkcF9jYXRhbG9nX2F1eF9nZXRfaXJx LAo+IAo+IE91dCBvZiB0aGVzZSwgaXQgc2VlbXMgbGlrZSB3cml0ZV90cmFucywgY2xlYXJfdHJh bnMsIHVwZGF0ZV9hdXhfY2ZnLCAKPiBzZXR1cCBhbmQKPiBnZXRfaXJxIGFyZSBhbGwgdW51c2Vk LiBQbGVhc2UgcmVtb3ZlIHRoZW0uCj4gCj4gUGxlYXNlIGFsc28gY2hlY2sgdGhlIG90aGVyIGZ1 bmN0aW9ucyB0byBlbnN1cmUgdGhleSdyZSB1c2VkLgo+IApGaXhlZCBpbiBWMi4KCj4+ICsJfTsK Pj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsIGN0cmwgPSB7Cj4+ICsJCS5zdGF0ZV9jdHJsICAg ICA9IGRwX2NhdGFsb2dfY3RybF9zdGF0ZV9jdHJsLAo+PiArCQkuY29uZmlnX2N0cmwgICAgPSBk cF9jYXRhbG9nX2N0cmxfY29uZmlnX2N0cmwsCj4+ICsJCS5sYW5lX21hcHBpbmcgICA9IGRwX2Nh dGFsb2dfY3RybF9sYW5lX21hcHBpbmcsCj4+ICsJCS5tYWlubGlua19jdHJsICA9IGRwX2NhdGFs b2dfY3RybF9tYWlubGlua19jdHJsLAo+PiArCQkuY29uZmlnX21pc2MgICAgPSBkcF9jYXRhbG9n X2N0cmxfY29uZmlnX21pc2MsCj4+ICsJCS5jb25maWdfbXNhICAgICA9IGRwX2NhdGFsb2dfY3Ry bF9jb25maWdfbXNhLAo+PiArCQkuc2V0X3BhdHRlcm4gICAgPSBkcF9jYXRhbG9nX2N0cmxfc2V0 X3BhdHRlcm4sCj4+ICsJCS5yZXNldCAgICAgICAgICA9IGRwX2NhdGFsb2dfY3RybF9yZXNldCwK Pj4gKwkJLnVzYl9yZXNldCAgICAgID0gZHBfY2F0YWxvZ19jdHJsX3VzYl9yZXNldCwKPj4gKwkJ Lm1haW5saW5rX3JlYWR5ID0gZHBfY2F0YWxvZ19jdHJsX21haW5saW5rX3JlYWR5LAo+PiArCQku ZW5hYmxlX2lycSAgICAgPSBkcF9jYXRhbG9nX2N0cmxfZW5hYmxlX2lycSwKPj4gKwkJLmhwZF9j b25maWcgICAgID0gZHBfY2F0YWxvZ19jdHJsX2hwZF9jb25maWcsCj4+ICsJCS5waHlfcmVzZXQg ICAgICA9IGRwX2NhdGFsb2dfY3RybF9waHlfcmVzZXQsCj4+ICsJCS5waHlfbGFuZV9jZmcgICA9 IGRwX2NhdGFsb2dfY3RybF9waHlfbGFuZV9jZmcsCj4+ICsJCS51cGRhdGVfdnhfcHggICA9IGRw X2NhdGFsb2dfY3RybF91cGRhdGVfdnhfcHgsCj4+ICsJCS5nZXRfaW50ZXJydXB0ICA9IGRwX2Nh dGFsb2dfY3RybF9nZXRfaW50ZXJydXB0LAo+PiArCQkudXBkYXRlX3RyYW5zZmVyX3VuaXQgPSBk cF9jYXRhbG9nX2N0cmxfdXBkYXRlX3RyYW5zZmVyX3VuaXQsCj4+ICsJCS5zZW5kX3BoeV9wYXR0 ZXJuICAgID0gZHBfY2F0YWxvZ19jdHJsX3NlbmRfcGh5X3BhdHRlcm4sCj4+ICsJCS5yZWFkX3Bo eV9wYXR0ZXJuID0gZHBfY2F0YWxvZ19jdHJsX3JlYWRfcGh5X3BhdHRlcm4sCj4gCj4gU28sIHdo YXQncyB0aGUgYmVuZWZpdCBvZiBhZGRpbmcgdGhlIGNhdGFsb2cgYWJzdHJhY3Rpb25zPyBEbyB5 b3UgZXZlciAKPiBoYXZlCj4gbXVsdGlwbGUvYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9ucyBvZiBh IGNhdGFsb2c/IEl0IGRvZXNuJ3Qgc2VlbSBsaWtlIAo+IGl0LiBZb3UKPiBzaG91bGQganVzdCBy ZW1vdmUgYWxsIG9mIHRoZSBjYXRhbG9nIG92ZXJoZWFkIGFuZCBjYWxsIHRoZSBmdW5jdGlvbnMg Cj4gZGlyZWN0bHkuCj4gCkZpeGVkIGluIFYyLgoKPj4gKwl9Owo+PiArCXN0cnVjdCBkcF9jYXRh bG9nX2F1ZGlvIGF1ZGlvID0gewo+PiArCQkuaW5pdCAgICAgICA9IGRwX2NhdGFsb2dfYXVkaW9f aW5pdCwKPj4gKwkJLmNvbmZpZ19hY3IgPSBkcF9jYXRhbG9nX2F1ZGlvX2NvbmZpZ19hY3IsCj4+ ICsJCS5lbmFibGUgICAgID0gZHBfY2F0YWxvZ19hdWRpb19lbmFibGUsCj4+ICsJCS5jb25maWdf c2RwID0gZHBfY2F0YWxvZ19hdWRpb19jb25maWdfc2RwLAo+PiArCQkuc2V0X2hlYWRlciA9IGRw X2NhdGFsb2dfYXVkaW9fc2V0X2hlYWRlciwKPj4gKwkJLmdldF9oZWFkZXIgPSBkcF9jYXRhbG9n X2F1ZGlvX2dldF9oZWFkZXIsCj4+ICsJCS5zYWZlX3RvX2V4aXRfbGV2ZWwgPSBkcF9jYXRhbG9n X2F1ZGlvX3NhZmVfdG9fZXhpdF9sZXZlbCwKPj4gKwl9Owo+PiArCXN0cnVjdCBkcF9jYXRhbG9n X3BhbmVsIHBhbmVsID0gewo+PiArCQkudGltaW5nX2NmZyA9IGRwX2NhdGFsb2dfcGFuZWxfdGlt aW5nX2NmZywKPj4gKwkJLnRwZ19jb25maWcgPSBkcF9jYXRhbG9nX3BhbmVsX3RwZ19jZmcsCj4+ ICsJfTsKPj4gKwo+PiArCWlmICghaW8pIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4i KTsKPj4gKwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGVycm9yOwo+PiArCX0KPj4gKwo+PiAr CWNhdGFsb2cgID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjYXRhbG9nKSwgR0ZQX0tFUk5F TCk7Cj4+ICsJaWYgKCFjYXRhbG9nKSB7Cj4+ICsJCXJjID0gLUVOT01FTTsKPj4gKwkJZ290byBl cnJvcjsKPj4gKwl9Cj4+ICsKPj4gKwljYXRhbG9nLT5kZXYgPSBkZXY7Cj4+ICsJY2F0YWxvZy0+ aW8gPSBpbzsKPj4gKwo+PiArCWRwX2NhdGFsb2cgPSAmY2F0YWxvZy0+ZHBfY2F0YWxvZzsKPj4g Kwo+PiArCWRwX2NhdGFsb2ctPmF1eCAgID0gYXV4Owo+PiArCWRwX2NhdGFsb2ctPmN0cmwgID0g Y3RybDsKPj4gKwlkcF9jYXRhbG9nLT5hdWRpbyA9IGF1ZGlvOwo+PiArCWRwX2NhdGFsb2ctPnBh bmVsID0gcGFuZWw7Cj4+ICsKPj4gKwlyZXR1cm4gZHBfY2F0YWxvZzsKPj4gK2Vycm9yOgo+PiAr CXJldHVybiBFUlJfUFRSKHJjKTsKPj4gK30KPj4gKwo+PiArdm9pZCBkcF9jYXRhbG9nX3B1dChz dHJ1Y3QgZHBfY2F0YWxvZyAqZHBfY2F0YWxvZykKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxv Z19wcml2YXRlICpjYXRhbG9nOwo+PiArCj4+ICsJaWYgKCFkcF9jYXRhbG9nKQo+PiArCQlyZXR1 cm47Cj4+ICsKPj4gKwljYXRhbG9nID0gY29udGFpbmVyX29mKGRwX2NhdGFsb2csIHN0cnVjdCBk cF9jYXRhbG9nX3ByaXZhdGUsCj4+ICsJCQkJZHBfY2F0YWxvZyk7Cj4+ICsKPj4gKwlkZXZtX2tm cmVlKGNhdGFsb2ctPmRldiwgY2F0YWxvZyk7Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX2NhdGFsb2cuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX2NhdGFsb2cuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi41 ODk1MWRmCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9jYXRhbG9nLmgKPj4gQEAgLTAsMCArMSwxNDQgQEAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQg KGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgCj4+IHJlc2Vy dmVkLgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCj4+IG1vZGlmeQo+PiArICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4+ICsg KiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ICsg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4g KyAqLwo+PiArCj4+ICsjaWZuZGVmIF9EUF9DQVRBTE9HX0hfCj4+ICsjZGVmaW5lIF9EUF9DQVRB TE9HX0hfCj4+ICsKPj4gKyNpbmNsdWRlICJkcF9wYXJzZXIuaCIKPj4gKwo+PiArLyogaW50ZXJy dXB0cyAqLwo+PiArI2RlZmluZSBEUF9JTlRSX0hQRAkJQklUKDApCj4+ICsjZGVmaW5lIERQX0lO VFJfQVVYX0kyQ19ET05FCUJJVCgzKQo+PiArI2RlZmluZSBEUF9JTlRSX1dST05HX0FERFIJQklU KDYpCj4+ICsjZGVmaW5lIERQX0lOVFJfVElNRU9VVAkJQklUKDkpCj4+ICsjZGVmaW5lIERQX0lO VFJfTkFDS19ERUZFUglCSVQoMTIpCj4+ICsjZGVmaW5lIERQX0lOVFJfV1JPTkdfREFUQV9DTlQJ QklUKDE1KQo+PiArI2RlZmluZSBEUF9JTlRSX0kyQ19OQUNLCUJJVCgxOCkKPj4gKyNkZWZpbmUg RFBfSU5UUl9JMkNfREVGRVIJQklUKDIxKQo+PiArI2RlZmluZSBEUF9JTlRSX1BMTF9VTkxPQ0tF RAlCSVQoMjQpCj4+ICsjZGVmaW5lIERQX0lOVFJfQVVYX0VSUk9SCUJJVCgyNykKPj4gKwo+PiAr I2RlZmluZSBEUF9JTlRSX1JFQURZX0ZPUl9WSURFTwkJQklUKDApCj4+ICsjZGVmaW5lIERQX0lO VFJfSURMRV9QQVRURVJOX1NFTlQJQklUKDMpCj4+ICsjZGVmaW5lIERQX0lOVFJfRlJBTUVfRU5E CQlCSVQoNikKPj4gKyNkZWZpbmUgRFBfSU5UUl9DUkNfVVBEQVRFRAkJQklUKDkpCj4+ICsKPj4g K3N0cnVjdCBkcF9jYXRhbG9nX2F1eCB7Cj4+ICsJdTMyIGRhdGE7Cj4+ICsJdTMyIGlzcjsKPj4g Kwo+PiArCXUzMiAoKnJlYWRfZGF0YSkoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpOwo+PiAr CWludCAoKndyaXRlX2RhdGEpKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4KTsKPj4gKwlpbnQg KCp3cml0ZV90cmFucykoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgpOwo+PiArCWludCAoKmNs ZWFyX3RyYW5zKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9vbCByZWFkKTsKPj4gKwl2 b2lkICgqcmVzZXQpKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4KTsKPj4gKwl2b2lkICgqZW5h YmxlKShzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggKmF1eCwgYm9vbCBlbmFibGUpOwo+PiArCXZvaWQg KCp1cGRhdGVfYXV4X2NmZykoc3RydWN0IGRwX2NhdGFsb2dfYXV4ICphdXgsCj4+ICsJCXN0cnVj dCBkcF9hdXhfY2ZnICpjZmcsIGVudW0gZHBfcGh5X2F1eF9jb25maWdfdHlwZSB0eXBlKTsKPj4g Kwl2b2lkICgqc2V0dXApKHN0cnVjdCBkcF9jYXRhbG9nX2F1eCAqYXV4LAo+PiArCQkJc3RydWN0 IGRwX2F1eF9jZmcgKmF1eF9jZmcpOwo+PiArCXZvaWQgKCpnZXRfaXJxKShzdHJ1Y3QgZHBfY2F0 YWxvZ19hdXggKmF1eCwgYm9vbCBjbWRfYnVzeSk7Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZHBf Y2F0YWxvZ19jdHJsIHsKPj4gKwl1MzIgZHBfdHU7Cj4+ICsJdTMyIHZhbGlkX2JvdW5kYXJ5Owo+ PiArCXUzMiB2YWxpZF9ib3VuZGFyeTI7Cj4+ICsJdTMyIGlzcjsKPj4gKwo+PiArCXZvaWQgKCpz dGF0ZV9jdHJsKShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1MzIgc3RhdGUpOwo+PiAr CXZvaWQgKCpjb25maWdfY3RybCkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgdTMyIGNv bmZpZyk7Cj4+ICsJdm9pZCAoKmxhbmVfbWFwcGluZykoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAq Y3RybCk7Cj4+ICsJdm9pZCAoKm1haW5saW5rX2N0cmwpKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwg KmN0cmwsIGJvb2wgZW5hYmxlKTsKPj4gKwl2b2lkICgqY29uZmlnX21pc2MpKHN0cnVjdCBkcF9j YXRhbG9nX2N0cmwgKmN0cmwsIHUzMiBjYywgdTMyIHRiKTsKPj4gKwl2b2lkICgqY29uZmlnX21z YSkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgdTMyIHJhdGUsCj4+ICsJCQkJdTMyIHN0 cmVhbV9yYXRlX2toeiwgYm9vbCBmaXhlZF9udmlkKTsKPj4gKwl2b2lkICgqc2V0X3BhdHRlcm4p KHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIHUzMiBwYXR0ZXJuKTsKPj4gKwl2b2lkICgq cmVzZXQpKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpOwo+PiArCXZvaWQgKCp1c2JfcmVz ZXQpKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwsIGJvb2wgZmxpcCk7Cj4+ICsJYm9vbCAo Km1haW5saW5rX3JlYWR5KShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsKTsKPj4gKwl2b2lk ICgqZW5hYmxlX2lycSkoc3RydWN0IGRwX2NhdGFsb2dfY3RybCAqY3RybCwgYm9vbCBlbmFibGUp Owo+PiArCXZvaWQgKCpocGRfY29uZmlnKShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCBi b29sIGVuYWJsZSk7Cj4+ICsJdm9pZCAoKnBoeV9yZXNldCkoc3RydWN0IGRwX2NhdGFsb2dfY3Ry bCAqY3RybCk7Cj4+ICsJdm9pZCAoKnBoeV9sYW5lX2NmZykoc3RydWN0IGRwX2NhdGFsb2dfY3Ry bCAqY3RybCwgYm9vbCBmbGlwcGVkLAo+PiArCQkJCXU4IGxhbmVfY250KTsKPj4gKwl2b2lkICgq dXBkYXRlX3Z4X3B4KShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLCB1OCB2X2xldmVsLAo+ PiArCQkJCXU4IHBfbGV2ZWwpOwo+PiArCXZvaWQgKCpnZXRfaW50ZXJydXB0KShzdHJ1Y3QgZHBf Y2F0YWxvZ19jdHJsICpjdHJsKTsKPj4gKwl2b2lkICgqdXBkYXRlX3RyYW5zZmVyX3VuaXQpKHN0 cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpOwo+PiArCXZvaWQgKCpzZW5kX3BoeV9wYXR0ZXJu KShzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjdHJsLAo+PiArCQkJdTMyIHBhdHRlcm4pOwo+PiAr CXUzMiAoKnJlYWRfcGh5X3BhdHRlcm4pKHN0cnVjdCBkcF9jYXRhbG9nX2N0cmwgKmN0cmwpOwo+ PiArfTsKPj4gKwo+PiArZW51bSBkcF9jYXRhbG9nX2F1ZGlvX3NkcF90eXBlIHsKPj4gKwlEUF9B VURJT19TRFBfU1RSRUFNLAo+PiArCURQX0FVRElPX1NEUF9USU1FU1RBTVAsCj4+ICsJRFBfQVVE SU9fU0RQX0lORk9GUkFNRSwKPj4gKwlEUF9BVURJT19TRFBfQ09QWU1BTkFHRU1FTlQsCj4+ICsJ RFBfQVVESU9fU0RQX0lTUkMsCj4+ICsJRFBfQVVESU9fU0RQX01BWCwKPj4gK307Cj4+ICsKPj4g K2VudW0gZHBfY2F0YWxvZ19hdWRpb19oZWFkZXJfdHlwZSB7Cj4+ICsJRFBfQVVESU9fU0RQX0hF QURFUl8xLAo+PiArCURQX0FVRElPX1NEUF9IRUFERVJfMiwKPj4gKwlEUF9BVURJT19TRFBfSEVB REVSXzMsCj4+ICsJRFBfQVVESU9fU0RQX0hFQURFUl9NQVgsCj4+ICt9Owo+PiArCj4+ICtzdHJ1 Y3QgZHBfY2F0YWxvZ19hdWRpbyB7Cj4+ICsJZW51bSBkcF9jYXRhbG9nX2F1ZGlvX3NkcF90eXBl IHNkcF90eXBlOwo+PiArCWVudW0gZHBfY2F0YWxvZ19hdWRpb19oZWFkZXJfdHlwZSBzZHBfaGVh ZGVyOwo+PiArCXUzMiBkYXRhOwo+PiArCj4+ICsJdm9pZCAoKmluaXQpKHN0cnVjdCBkcF9jYXRh bG9nX2F1ZGlvICphdWRpbyk7Cj4+ICsJdm9pZCAoKmVuYWJsZSkoc3RydWN0IGRwX2NhdGFsb2df YXVkaW8gKmF1ZGlvKTsKPj4gKwl2b2lkICgqY29uZmlnX2Fjcikoc3RydWN0IGRwX2NhdGFsb2df YXVkaW8gKmF1ZGlvKTsKPj4gKwl2b2lkICgqY29uZmlnX3NkcCkoc3RydWN0IGRwX2NhdGFsb2df YXVkaW8gKmF1ZGlvKTsKPj4gKwl2b2lkICgqc2V0X2hlYWRlcikoc3RydWN0IGRwX2NhdGFsb2df YXVkaW8gKmF1ZGlvKTsKPj4gKwl2b2lkICgqZ2V0X2hlYWRlcikoc3RydWN0IGRwX2NhdGFsb2df YXVkaW8gKmF1ZGlvKTsKPj4gKwl2b2lkICgqc2FmZV90b19leGl0X2xldmVsKShzdHJ1Y3QgZHBf Y2F0YWxvZ19hdWRpbyAqYXVkaW8pOwo+IAo+IE5vbmUgb2YgdGhlc2UgYXJlIGNhbGxlZD8gU28g Z2V0IHJpZCBvZiB0aGlzIGVudGlyZSBzdHJ1Y3R1cmUsIHRoZSAKPiBmdW5jdGlvbnMKPiB0aGF0 IGFyZW4ndCBjYWxsZWQsIGFuZCB0aGUgYXVkaW8gZW51bXMgYWJvdmUuCj4gClJlbW92ZWQgYWxs IHRoZSBBdWRpbyByZWxhdGVkIEFQSXMgaW4gVjIuCgo+PiArfTsKPj4gKwo+PiArc3RydWN0IGRw X2NhdGFsb2dfcGFuZWwgewo+PiArCXUzMiB0b3RhbDsKPj4gKwl1MzIgc3luY19zdGFydDsKPj4g Kwl1MzIgd2lkdGhfYmxhbmtpbmc7Cj4+ICsJdTMyIGRwX2FjdGl2ZTsKPj4gKwo+PiArCS8qIFRQ RyAqLwo+PiArCXUzMiBoc3luY19wZXJpb2Q7Cj4+ICsJdTMyIHZzeW5jX3BlcmlvZDsKPj4gKwl1 MzIgZGlzcGxheV92X3N0YXJ0Owo+PiArCXUzMiBkaXNwbGF5X3ZfZW5kOwo+PiArCXUzMiB2X3N5 bmNfd2lkdGg7Cj4+ICsJdTMyIGhzeW5jX2N0bDsKPj4gKwl1MzIgZGlzcGxheV9oY3RsOwo+IAo+ IEFsbCBvZiB0aGlzIGluZm9ybWF0aW9uIGlzIGFscmVhZHkgYXZhaWxhYmxlIGZyb20gZHJtIGNv cmUsIHNvIGl0IGNhbiAKPiBnby4KCldpbGwgYWRkcmVzcyB0aGlzIGluIFYzLgoKPiAKPj4gKwo+ PiArCWludCAoKnRpbWluZ19jZmcpKHN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsICpwYW5lbCk7Cj4+ ICsJdm9pZCAoKnRwZ19jb25maWcpKHN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsICpwYW5lbCwgYm9v bCBlbmFibGUpOwo+IAo+IEFzIHN1Z2dlc3RlZCBlbHNld2hlcmUsIHRoZXNlIGZ1bmN0aW9ucyBz aG91bGQganVzdCBiZSBjYWxsZWQgZGlyZWN0bHkgCj4gd2hlcmV2ZXIKPiBhcHBsaWNhYmxlLiBT byB3ZSBjYW4gZ2V0IHJpZCBvZiB0aGlzIHN0cnVjdC4KPiAKPj4gK307Cj4+ICsKPj4gK3N0cnVj dCBkcF9jYXRhbG9nIHsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19hdXggYXV4Owo+PiArCXN0cnVj dCBkcF9jYXRhbG9nX2N0cmwgY3RybDsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19hdWRpbyBhdWRp bzsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wYW5lbCBwYW5lbDsKPj4gK307Cj4+ICsKPj4gK3N0 cnVjdCBkcF9jYXRhbG9nICpkcF9jYXRhbG9nX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBkcF9pbyAKPj4gKmlvKTsKPj4gK3ZvaWQgZHBfY2F0YWxvZ19wdXQoc3RydWN0IGRwX2NhdGFs b2cgKmNhdGFsb2cpOwo+IAo+IEFzIG1lbnRpb25lZCBhYm92ZSwgYWxsIG9mIHRoaXMgc2hvdWxk IGJlIHJlbW92ZWQuIFdlIGNhbiBqdXN0IGNhbGwgdGhlCj4gZnVuY3Rpb25zIGRpcmVjdGx5Lgo+ IApSZW1vdmVkIHRoZSBmdW5jIHB0cnMgaW4gVjIuCgo+PiArCj4+ICsjZW5kaWYgLyogX0RQX0NB VEFMT0dfSF8gKi8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3Ry bC5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5jCj4+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjA4YTUyZjUKPj4gLS0tIC9kZXYvbnVsbAo+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuYwo+PiBAQCAtMCwwICsxLDE0NzUg QEAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOCwgVGhlIExpbnV4IEZvdW5k YXRpb24uIEFsbCByaWdodHMgCj4+IHJlc2VydmVkLgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCj4+IG1v ZGlmeQo+PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4+ICsgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4g KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqLwo+PiArCj4+ICsjZGVmaW5lIHByX2ZtdChm bXQpCSJbZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19fCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KPj4gKyNpbmNsdWRl IDxsaW51eC9kZWxheS5oPgo+PiArCj4+ICsjaW5jbHVkZSAiZHBfY3RybC5oIgo+PiArCj4+ICsj ZGVmaW5lIERQX0tIWl9UT19IWiAxMDAwCj4+ICsKPj4gKyNkZWZpbmUgRFBfQ1RSTF9JTlRSX1JF QURZX0ZPUl9WSURFTyAgICAgQklUKDApCj4+ICsjZGVmaW5lIERQX0NUUkxfSU5UUl9JRExFX1BB VFRFUk5fU0VOVCAgQklUKDMpCj4+ICsKPj4gKy8qIGRwIHN0YXRlIGN0cmwgKi8KPj4gKyNkZWZp bmUgU1RfVFJBSU5fUEFUVEVSTl8xCQlCSVQoMCkKPj4gKyNkZWZpbmUgU1RfVFJBSU5fUEFUVEVS Tl8yCQlCSVQoMSkKPj4gKyNkZWZpbmUgU1RfVFJBSU5fUEFUVEVSTl8zCQlCSVQoMikKPj4gKyNk ZWZpbmUgU1RfVFJBSU5fUEFUVEVSTl80CQlCSVQoMykKPj4gKyNkZWZpbmUgU1RfU1lNQk9MX0VS Ul9SQVRFX01FQVNVUkVNRU5UCUJJVCg0KQo+PiArI2RlZmluZSBTVF9QUkJTNwkJCUJJVCg1KQo+ PiArI2RlZmluZSBTVF9DVVNUT01fODBfQklUX1BBVFRFUk4JQklUKDYpCj4+ICsjZGVmaW5lIFNU X1NFTkRfVklERU8JCQlCSVQoNykKPj4gKyNkZWZpbmUgU1RfUFVTSF9JRExFCQkJQklUKDgpCj4g Cj4gSSdkIGxpa2UgdG8gc2VlIHRoZXNlIGRlZmluZWQgd2l0aCBEUF9TVEFURV9DVFJMIChhbmQg Cj4gcy9TVC9EUF9TVEFURV9DVFJMLykuCj4gCkZpeGVkIGluIFYyLgoKPj4gKwo+PiArI2RlZmlu ZSBNUl9MSU5LX1RSQUlOSU5HMSAgMHg4Cj4+ICsjZGVmaW5lIE1SX0xJTktfU1lNQk9MX0VSTSAw eDgwCj4+ICsjZGVmaW5lIE1SX0xJTktfUFJCUzcgMHgxMDAKPj4gKyNkZWZpbmUgTVJfTElOS19D VVNUT004MCAweDIwMAo+PiArCj4+ICtzdHJ1Y3QgZHBfdmNfdHVfbWFwcGluZ190YWJsZSB7Cj4+ ICsJdTMyIHZpYzsKPj4gKwl1OCBsYW5lczsKPj4gKwl1OCBscmF0ZTsgLyogRFBfTElOS19SQVRF IC0+IDE2Mig2KSwgMjcwKDEwKSwgNTQwKDIwKSwgODEwICgzMCkgKi8KPj4gKwl1OCBicHA7Cj4+ ICsJdTggdmFsaWRfYm91bmRhcnlfbGluazsKPj4gKwl1MTYgZGVsYXlfc3RhcnRfbGluazsKPj4g Kwlib29sIGJvdW5kYXJ5X21vZGVyYXRpb25fZW47Cj4+ICsJdTggdmFsaWRfbG93ZXJfYm91bmRh cnlfbGluazsKPj4gKwl1OCB1cHBlcl9ib3VuZGFyeV9jb3VudDsKPj4gKwl1OCBsb3dlcl9ib3Vu ZGFyeV9jb3VudDsKPj4gKwl1OCB0dV9zaXplX21pbnVzMTsKPiAKPiBQbGVhc2UgY2hlY2sgdGhp cyBzdHJ1Y3QgZm9yIHVudXNlZCBtZW1iZXJzLCB0aGVyZSBhcmUgYXQgbGVhc3QgYSAKPiBjb3Vw bGUuCgpVcGRhdGVkIHRoZSBUVSBjYWxjdWxhdG9yIGluIFYyLgo+IAo+PiArfTsKPj4gKwo+PiAr c3RydWN0IGRwX2N0cmxfcHJpdmF0ZSB7Cj4+ICsJc3RydWN0IGRwX2N0cmwgZHBfY3RybDsKPj4g Kwo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwlzdHJ1Y3QgZHBfYXV4ICphdXg7Cj4+ICsJ c3RydWN0IGRwX3BhbmVsICpwYW5lbDsKPj4gKwlzdHJ1Y3QgZHBfbGluayAqbGluazsKPj4gKwlz dHJ1Y3QgZHBfcG93ZXIgKnBvd2VyOwo+PiArCXN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcjsKPj4g KwlzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjYXRhbG9nOwo+IAo+IE9uY2UgeW91IHJlbW92ZSBz dHJ1Y3QgZHBfY3RybCBhbmQgY2FsbCB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5LCBJIAo+IHN1c3Bl Y3QgeW91Cj4gY2FuIGdldCByaWQgb2YgYWxsIG9mIHRoZXNlLgo+IApFdmVuIHRob3VnaCB3ZSBj YWxsIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHksIHdlIHN0aWxsIG5lZWQgdmFyaWFibGVzIApwcmVz ZW50IGluIGVhY2ggbW9kdWxlLgpGb3IgZXhhbXBsZSwgd2UgbmVlZCB0byBhY2Nlc3MgbGluayBw YXJhbWV0ZXJzLCBwYW5lbCBwYXJhbWV0ZXJzIGV0YwoKVW5uZWNlc3Nhcnkgc3R1ZmYgaXMgcmVt b3ZlZCBidXQgd2Ugc3RpbGwgbmVlZCBvdGhlciB2YXJpYWJsZXMgaW4gdGhlIApzdHJ1Y3R1cmUu IEFsbCBoYXZlIGJlZW4KdXBkYXRlZCBpbiBWMi4KPj4gKwo+PiArCXN0cnVjdCBjb21wbGV0aW9u IGlkbGVfY29tcDsKPj4gKwlzdHJ1Y3QgY29tcGxldGlvbiB2aWRlb19jb21wOwo+PiArCj4+ICsJ Ym9vbCBvcmllbnRhdGlvbjsKPj4gKwlhdG9taWNfdCBhYm9ydGVkOwo+PiArCj4+ICsJdTMyIHBp eGVsX3JhdGU7Cj4+ICsJdTMyIHZpYzsKPiAKPiAndTMyIHZpYycgc2hvd3MgdXAgaW4gMyBwbGFj ZXMgaW4gdGhpcyBkcml2ZXIsIGJ1dCB0aGVyZSBpcyBub3Qgb25lIHVzZSAKPiBvZiBhbnkKPiB2 aWMgOikgUGxlYXNlIHJlbW92ZSBmcm9tIGhlcmUgYW5kIGVsc2V3aGVyZS4KRml4ZWQgaW4gVjIu Cgo+IAo+PiArfTsKPj4gKwo+PiArZW51bSBub3RpZmljYXRpb25fc3RhdHVzIHsKPj4gKwlOT1RJ RllfVU5LTk9XTiwKPj4gKwlOT1RJRllfQ09OTkVDVCwKPj4gKwlOT1RJRllfRElTQ09OTkVDVCwK Pj4gKwlOT1RJRllfQ09OTkVDVF9JUlFfSFBELAo+PiArCU5PVElGWV9ESVNDT05ORUNUX0lSUV9I UEQsCj4+ICt9Owo+IAo+IFVudXNlZCwgcGxlYXNlIHJlbW92ZS4KPiAKRml4ZWQgaW4gVjIuCgo+ PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jdHJsX2lkbGVfcGF0dGVybnNfc2VudChzdHJ1Y3QgZHBf Y3RybF9wcml2YXRlICpjdHJsKQo+PiArewo+PiArCXByX2RlYnVnKCJpZGxlX3BhdHRlcm5zX3Nl bnRcbiIpOwo+PiArCWNvbXBsZXRlKCZjdHJsLT5pZGxlX2NvbXApOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgdm9pZCBkcF9jdHJsX3ZpZGVvX3JlYWR5KHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0 cmwpCj4+ICt7Cj4+ICsJcHJfZGVidWcoImRwX3ZpZGVvX3JlYWR5XG4iKTsKPj4gKwljb21wbGV0 ZSgmY3RybC0+dmlkZW9fY29tcCk7Cj4+ICt9Cj4gCj4gVGhlc2UgZnVuY3Rpb25zIGRvbid0IHBy b3ZpZGUgdmFsdWUsIHBsZWFzZSByZW1vdmUgYW5kIGp1c3QgY2FsbCAKPiBjb21wbGV0ZSgpCj4g ZGlyZWN0bHkuCj4gCkZpeGVkIGluIFYyLgoKPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY3RybF9h Ym9ydChzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfY3RybF9w cml2YXRlICpjdHJsOwo+PiArCj4+ICsJaWYgKCFkcF9jdHJsKSB7Cj4+ICsJCXByX2VycigiSW52 YWxpZCBpbnB1dCBkYXRhXG4iKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWN0cmwg PSBjb250YWluZXJfb2YoZHBfY3RybCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7 Cj4gCj4gSkZZSSwgdGhpcyBpcyBzcHJpbmtsZWQgZXZlcnl3aGVyZSwgd291bGQgYmUgYSBnb29k IGNhbmRpZGF0ZSBmb3IgYW4gCj4gaW5saW5lCj4gZnVuY3Rpb24uIFNpbmNlIGRwX2N0cmwgY2Fu IGJlIHJlbW92ZWQsIGl0J3Mga2luZCBvZiBhIG1vb3QgcG9pbnQgbm93Lgo+IApJIGRpZG4ndCBz ZWUgYW55IG1ham9yIGFkdmFudGFnZSB3aXRoIG1vdmluZyB0byBpbmxpbmUuIFNvLCBrZXB0IGl0 IGFzIAppcy4KV2Ugc3RpbGwgd2FudCB0byBoYXZlIHByaXZhdGUgYW5kIHB1YmxpYyAoZHBfY3Ry bF9wcml2YXRlIGFuZCBkcF9jdHJsKSAKc3RydWN0dXJlcwpmb3IgZWFjaCBtb2R1bGUgKEN0cmws IGxpbmssIGV0Yykgc28gdGhhdCB3ZSBkb24ndCBleHBvc2UgdW5uZWNlc3NhcnkgCmluZm8gdG8g b3RoZXIgbW9kdWxlcy4KCj4+ICsKPj4gKwlhdG9taWNfc2V0KCZjdHJsLT5hYm9ydGVkLCAxKTsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY3RybF9zdGF0ZV9jdHJsKHN0cnVjdCBkcF9j dHJsX3ByaXZhdGUgKmN0cmwsIHUzMiAKPj4gc3RhdGUpCj4+ICt7Cj4+ICsJY3RybC0+Y2F0YWxv Zy0+c3RhdGVfY3RybChjdHJsLT5jYXRhbG9nLCBzdGF0ZSk7Cj4gCj4gTm8gbmVlZCB0byB3cmFw IHRoaXMgaW4gYSBmdW5jdGlvbgoKRml4ZWQgaW4gVjIuCgo+IAo+PiArfQo+PiArCj4+ICtzdGF0 aWMgdm9pZCBkcF9jdHJsX3B1c2hfaWRsZShzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCkKPj4gK3sK Pj4gKwlpbnQgY29uc3QgaWRsZV9wYXR0ZXJuX2NvbXBsZXRpb25fdGltZW91dF9tcyA9IDMgKiBI WiAvIDEwMDsKPiAKPiBUaGlzIHNob3VsZCBiZSAjZGVmaW5lJ2Qgb3V0c2lkZSBvZiB0aGUgZnVu Y3Rpb25pbnN0ZWFkLiBBbHNvLCB3aHkgdGhlIAo+ICdfbXNfJwo+IHN1ZmZpeD8gVGhlIHVuaXRz IGFyZSBpbiBqaWZmaWVzLgo+IAo+IEkgdGhpbmsgc29tZXRoaW5nIGxpa2UKPiAKPiAjZGVmaW5l IElETEVfUEFUVEVSTl9DT01QTEVUSU9OX1RJTUVPVVRfSklGRklFUyAoMzAgKiBIWiAvIDEwMDAp IC8qIDMwIAo+IG1zICovCj4gCj4gd291bGQgYmUgY2xlYXJlci4KPiAKRml4ZWQgaW4gVjIuCgo+ PiArCXN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmw7Cj4+ICsKPj4gKwlpZiAoIWRwX2N0cmwp IHsKPj4gKwkJcHJfZXJyKCJJbnZhbGlkIGlucHV0IGRhdGFcbiIpOwo+PiArCQlyZXR1cm47Cj4+ ICsJfQo+PiArCj4+ICsJY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1Y3QgZHBfY3Ry bF9wcml2YXRlLCBkcF9jdHJsKTsKPj4gKwo+PiArCXJlaW5pdF9jb21wbGV0aW9uKCZjdHJsLT5p ZGxlX2NvbXApOwo+IAo+IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYSBidW5jaCBvZiBw bGFjZXMsIGFuZCBpZGxlX2NvbXAgaXMgYWxzbyAKPiB1c2VkIGluIGEKPiBidW5jaCBvZiBwbGFj ZXMuIEFyZSB5b3UgY2VydGFpbiB0aGlzIGlzIHRocmVhZC1zYWZlIGlmIHlvdSBoYXZlIAo+IGNv bmN1cnJlbnQKPiBjYWxsZXJzIG9yIHVzZXJzIG9mIGlkbGVfY29tcD8KPiAKSSBkb24ndCB0aGlu ayB3ZSBuZWVkIGFueSBzeW5jaHJvbml6YXRpb24gbG9naWMgZm9yIGlkbGVfY29tcCBzaW5jZSBp dCAKaXMgcmVpbml0aWFsaXplZCBvbmx5CndoZW4gdGhlIGNvbXBsZXRlIGNvcmUgaXMgcmVzZXQu IE9ubHkgcGxhY2Ugd2hlcmUgaXQgaXMgbmVlZGVkIGlzIGluIApwdXNoX2lkbGUgd2hpY2ggYWxy ZWFkeSBoYXMKYSBtdXRleC4KCj4+ICsJZHBfY3RybF9zdGF0ZV9jdHJsKGN0cmwsIFNUX1BVU0hf SURMRSk7Cj4+ICsKPj4gKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY3RybC0+ aWRsZV9jb21wLAo+PiArCQkJaWRsZV9wYXR0ZXJuX2NvbXBsZXRpb25fdGltZW91dF9tcykpCj4+ ICsJCXByX3dhcm4oIlBVU0hfSURMRSBwYXR0ZXJuIHRpbWVkb3V0XG4iKTsKPiAKPiBSZXR1cm4g YW4gZXJyb3I/Cj4gCkl0cyBub3QgZmF0YWwgZXJyb3Igc2luY2Ugd2UgYXJlIGdvaW5nIHRvIHJl c2V0IHRoZSBjb250cm9sbGVyIGFuZCB3ZSAKYXJlIGdvaW5nIHRvIHJlY292ZXIgZnJvbQp0aGlz IHRpbWVvdXQuCgo+PiArCj4+ICsJcHJfZGVidWcoIm1haW5saW5rIG9mZiBkb25lXG4iKTsKPj4g K30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY3RybF9jb25maWdfY3RybChzdHJ1Y3QgZHBfY3Ry bF9wcml2YXRlICpjdHJsKQo+PiArewo+PiArCXUzMiBjb25maWcgPSAwLCB0YmQ7Cj4+ICsJdTgg KmRwY2QgPSBjdHJsLT5wYW5lbC0+ZHBjZDsKPj4gKwo+PiArCWNvbmZpZyB8PSAoMiA8PCAxMyk7 IC8qIERlZmF1bHQtPiBMU0NMSyBESVY6IDEvNCBMQ0xLICAqLwo+IAo+ICNkZWZpbmUgdmFsdWUK PiAKRml4ZWQgaW4gVjIuCgo+PiArCWNvbmZpZyB8PSAoMCA8PCAxMSk7IC8qIFJHQiAqLwo+IAo+ IFRoaXMgaXMgYSBuby1vcCwgY2FuIGJlIHJlbW92ZWQKPiAKRml4ZWQgaW4gVjIuCgo+PiArCj4+ ICsJLyogU2NyYW1ibGVyIHJlc2V0IGVuYWJsZSAqLwo+PiArCWlmIChkcGNkW0RQX0VEUF9DT05G SUdVUkFUSU9OX0NBUF0gJiAKPj4gRFBfQUxURVJOQVRFX1NDUkFNQkxFUl9SRVNFVF9DQVApCj4+ ICsJCWNvbmZpZyB8PSAoMSA8PCAxMCk7Cj4+ICsKPj4gKwl0YmQgPSBjdHJsLT5saW5rLT5nZXRf dGVzdF9iaXRzX2RlcHRoKGN0cmwtPmxpbmssCj4+ICsJCQljdHJsLT5wYW5lbC0+cGluZm8uYnBw KTsKPj4gKwo+PiArCWlmICh0YmQgPT0gRFBfVEVTVF9CSVRfREVQVEhfVU5LTk9XTikKPiAKPiBT aG91bGQgd2UgcHJpbnQgYSBkZWJ1ZyBtZXNzYWdlIGhlcmU/Cj4gCkZpeGVkIGluIFYyLgoKPj4g KwkJdGJkID0gRFBfVEVTVF9CSVRfREVQVEhfODsKPj4gKwo+PiArCWNvbmZpZyB8PSB0YmQgPDwg ODsKPj4gKwo+PiArCS8qIE51bSBvZiBMYW5lcyAqLwo+PiArCWNvbmZpZyB8PSAoKGN0cmwtPmxp bmstPmxpbmtfcGFyYW1zLmxhbmVfY291bnQgLSAxKSA8PCA0KTsKPiAKPiBUaGVzZSBzaGlmdCB2 YWx1ZXMgc2hvdWxkIGJlICNkZWZpbmVkCj4gCkZpeGVkIGluIFYyLgoKPj4gKwo+PiArCWlmIChk cm1fZHBfZW5oYW5jZWRfZnJhbWVfY2FwKGRwY2QpKQo+PiArCQljb25maWcgfD0gMHg0MDsKPiAK PiAjZGVmaW5lIDB4NDAKPiAKRml4ZWQgaW4gVjIuCj4+ICsKPj4gKwljb25maWcgfD0gMHgwNDsg LyogcHJvZ3Jlc3NpdmUgdmlkZW8gKi8KPj4gKwo+PiArCWNvbmZpZyB8PSAweDAzOwkvKiBzeWNu IGNsb2NrICYgc3RhdGljIE12aWQgKi8KPiAKPiBBbmQgdGhlc2UsIHBsdXMgcy9zeWNuL3N5bmMv Cj4gCkZpeGVkIGluIFYyLgoKPj4gKwo+PiArCWN0cmwtPmNhdGFsb2ctPmNvbmZpZ19jdHJsKGN0 cmwtPmNhdGFsb2csIGNvbmZpZyk7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogZHBfY3RybF9j b25maWd1cmVfc291cmNlX3BhcmFtcygpIC0gY29uZmlndXJlcyBEUCB0cmFuc21pdHRlciAKPj4g c291cmNlIHBhcmFtcwo+PiArICogQGN0cmw6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0YQo+PiAr ICoKPj4gKyAqIENvbmZpZ3VyZXMgdGhlIERQIHRyYW5zbWl0dGVyIHNvdXJjZSBwYXJhbXMgaW5j bHVkaW5nIGRldGFpbHMgc3VjaCAKPj4gYXMgbGFuZQo+PiArICogY29uZmlndXJhdGlvbiwgb3V0 cHV0IGZvcm1hdCBhbmQgc2luay9wYW5lbCB0aW1pbmcgaW5mb3JtYXRpb24uCj4+ICsgKi8KPj4g K3N0YXRpYyB2b2lkIGRwX2N0cmxfY29uZmlndXJlX3NvdXJjZV9wYXJhbXMoc3RydWN0IGRwX2N0 cmxfcHJpdmF0ZSAKPj4gKmN0cmwpCj4+ICt7Cj4+ICsJdTMyIGNjLCB0YjsKPj4gKwo+PiArCWN0 cmwtPmNhdGFsb2ctPmxhbmVfbWFwcGluZyhjdHJsLT5jYXRhbG9nKTsKPj4gKwljdHJsLT5jYXRh bG9nLT5tYWlubGlua19jdHJsKGN0cmwtPmNhdGFsb2csIHRydWUpOwo+IAo+IFdlIGdvIHRocm91 Z2ggY3RybC0+Y2F0YWxvZy0+Y2FsbGJhY2tfaG9vayB0byBjYWxsIGEgZnVuY3Rpb24gdGhhdCBp cyAKPiBzcGVjaWZpYwo+IHRvIGN0cmwgYW5kIG9ubHkgY2FsbGVkIGluIHRoaXMgZmlsZS4gSXQg Y291bGQgZWFzaWx5IGp1c3QgYmUgYSBzdGF0aWMgCj4gZnVuY3Rpb24KPiB3aXRob3V0IGhhdmlu ZyB0byBnbyB0aHJvdWdoIDIgc3RydWN0cyBhbmQgYSBjYWxsYmFjayBob29rLgo+IApSZW1vdmVk IHRoZSBmdW5jdGlvbiBwdHIuIFdlIGFyZSBjYWxsaW5nIHRoZSBjYXRhbG9nIEFQSXMgZGlyZWN0 bHkgaW4gClYyLgoKPj4gKwo+PiArCWRwX2N0cmxfY29uZmlnX2N0cmwoY3RybCk7Cj4+ICsKPj4g Kwl0YiA9IGN0cmwtPmxpbmstPmdldF90ZXN0X2JpdHNfZGVwdGgoY3RybC0+bGluaywKPj4gKwkJ Y3RybC0+cGFuZWwtPnBpbmZvLmJwcCk7Cj4+ICsJY2MgPSBjdHJsLT5saW5rLT5nZXRfY29sb3Jp bWV0cnlfY29uZmlnKGN0cmwtPmxpbmspOwo+PiArCWN0cmwtPmNhdGFsb2ctPmNvbmZpZ19taXNj KGN0cmwtPmNhdGFsb2csIGNjLCB0Yik7Cj4gCj4gU2FtZSBjb21tZW50cyB3aXRoIHRoZXNlIGhv b2tzLCB0aGV5J3JlIG9ubHkgY2FsbGVkIGZyb20gdGhpcyBmaWxlLiAKPiBJJ2xsIHN0b3AKPiBo YXJwaW5nIG9uIHRoaXMsIGJ1dCBjb3VsZCB3ZSBwbGVhc2UgcmVtb3ZlIHRoZSBsYXllcnMgb2Yg aW5kaXJlY3Rpb24gCj4gYW5kIGp1c3QKPiBlbWJlZCBhbmQgY2FsbCBmdW5jdGlvbnMgYXMgYXBw cm9wcmlhdGU/Cj4gCkZpeGVkIGluIFYyLgoKPj4gKwljdHJsLT5wYW5lbC0+dGltaW5nX2NmZyhj dHJsLT5wYW5lbCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2N0cmxfZ2V0X2V4dHJh X3JlcV9ieXRlcyh1NjQgcmVzdWx0X3ZhbGlkLAo+PiArCQkJCQlpbnQgdmFsaWRfYmRhcnlfbGlu aywKPj4gKwkJCQkJdTY0IHZhbHVlMSwgdTY0IHZhbHVlMiwKPj4gKwkJCQkJYm9vbCAqbmVnYXRp dmUsIHU2NCAqcmVzdWx0LAo+PiArCQkJCQl1NjQgY29tcGFyZSkKPj4gK3sKPj4gKwkqbmVnYXRp dmUgPSBmYWxzZTsKPj4gKwlpZiAocmVzdWx0X3ZhbGlkID49IGNvbXBhcmUpIHsKPj4gKwkJaWYg KHZhbGlkX2JkYXJ5X2xpbmsKPj4gKwkJCQk+PSBjb21wYXJlKQo+PiArCQkJKnJlc3VsdCA9IHZh bHVlMSArIHZhbHVlMjsKPj4gKwkJZWxzZSB7Cj4+ICsJCQlpZiAodmFsdWUxIDwgdmFsdWUyKQo+ PiArCQkJCSpuZWdhdGl2ZSA9IHRydWU7Cj4+ICsJCQkqcmVzdWx0ID0gKHZhbHVlMSA+PSB2YWx1 ZTIpID8KPj4gKwkJCQkodmFsdWUxIC0gdmFsdWUyKSA6ICh2YWx1ZTIgLSB2YWx1ZTEpOwo+PiAr CQl9Cj4+ICsJfSBlbHNlIHsKPj4gKwkJaWYgKHZhbGlkX2JkYXJ5X2xpbmsKPj4gKwkJCQk+PSBj b21wYXJlKSB7Cj4+ICsJCQlpZiAodmFsdWUxID49IHZhbHVlMikKPj4gKwkJCQkqbmVnYXRpdmUg PSB0cnVlOwo+PiArCQkJKnJlc3VsdCA9ICh2YWx1ZTEgPj0gdmFsdWUyKSA/Cj4+ICsJCQkJKHZh bHVlMSAtIHZhbHVlMikgOiAodmFsdWUyIC0gdmFsdWUxKTsKPj4gKwkJfSBlbHNlIHsKPj4gKwkJ CSpyZXN1bHQgPSB2YWx1ZTEgKyB2YWx1ZTI7Cj4+ICsJCQkqbmVnYXRpdmUgPSB0cnVlOwo+PiAr CQl9Cj4+ICsJfQo+IAo+IEkgdGhpbmsgdGhpcyBjYW4gYmUgc2ltcGxpZmllZCB0byB0aGUgZm9s bG93aW5nLCBpdCdzIHN0aWxsIHN1cGVyIGhhcmQgCj4gdG8KPiBmb2xsb3csIGJ1dCBJJ20gbm90 IHN1cmUgaWYgdGhhdCBjYW4gYmUgaGVscGVkLgo+IAo+ICAgICAgICAgYm9vbCByZXN1bHRfYmln Z2VyID0gcmVzdWx0X3ZhbGlkID49IGNvbXBhcmU7Cj4gICAgICAgICBib29sIHZhbGlkX2JkYXJ5 X2JpZ2dlciA9IHZhbGlkX2JkYXJ5X2xpbmsgPj0gY29tcGFyZTsKPiAKPiAJaWYgKHJlc3VsdF9i aWdnZXIgJiYgdmFsaWRfYmRhcnlfYmlnZ2VyIHx8Cj4gICAgICAgICAgICAgIXJlc3VsdF9iaWdn ZXIgJiYgIXZhbGlkX2JkYXJ5X2JpZ2dlcikgewo+ICAgICAgICAgICAgICAgICAqbmVnYXRpdmUg PSAhdmFsaWRfYmRhcnlfYmlnZ2VyOwo+ICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUxICsg dmFsdWUyOwo+ICAgICAgICAgfQo+IAo+ICAgICAgICAgKm5lZ2F0aXZlID0gKHJlc3VsdF9iaWdn ZXIgJiYgIXZhbGlkX2JkYXJ5X2JpZ2dlciAmJiB2YWx1ZTEgPCAKPiB2YWx1ZTIpIHx8Cj4gICAg ICAgICAgICAgICAgICAgICAoIXJlc3VsdF9iaWdnZXIgJiYgdmFsaWRfYmRhcnlfYmlnZ2VyICYm IHZhbHVlMSA+PSAKPiB2YWx1ZTIpOwo+ICAgICAgICAgcmV0dXJuIG1heCh2YWx1ZTEsIHZhbHVl MikgLSBtaW4odmFsdWUxLCB2YWx1ZTIpOwo+IAo+IEkgZG9uJ3Qga25vdy4gVGhlIG1vcmUgSSBz dGFyZSBhdCB0aGlzIHRoZSBsZXNzIGNvbnZpbmNlZCBJIGJlY29tZSB0aGF0IAo+IGl0J3MKPiBi ZXR0ZXIuIFNvIHRha2UgaXQgb3IgbGVhdmUgaXQuIEF0IHRoZSB2ZXJ5IGxlYXN0IHlvdSBjYW4g Y29sbGFwc2UgdGhlCj4gCj4gaWYgKGNvbmQpCj4gICAgICAgICAqbmVnYXRpdmUgPSB0cnVlOwo+ IAo+IHRvCj4gCj4gKm5lZ2F0aXZlID0gY29uZDsKPiAKPiBhbmQgZG8gdGhlIG1heCh2LHYpIC0g bWluKHYsdikgdHJpY2sgdG8gc2hhdmUgb2ZmIHNvbWUgb2YgdGhlIAo+IGNvbmRpdGlvbmFscyBp bgo+IHRoZSBvcmlnaW5hbC4KPiAKPiAKCk1vc3Qgb2YgdGhlIGNvZGUgcmVsYXRlZCB0byB0dV9j YWxjdWxhdG9yIGhhcyBiZWVuIHVwZGF0ZWQgaW4gVjIuCgo+PiArfQo+PiArCj4+ICtzdGF0aWMg dTY0IHJvdW5kdXBfdTY0KHU2NCB4LCB1NjQgeSkKPj4gK3sKPj4gKwl4ICs9ICh5IC0gMSk7Cj4+ ICsJcmV0dXJuIChkaXY2NF91bCh4LCB5KSAqIHkpOwo+PiArfQo+IAo+IFBsZWFzZSByZXBsYWNl IGFsbCB1c2FnZSB3aXRoIERJVl9ST1VORF9VUF9VTEwKPiAKPj4gKwo+PiArc3RhdGljIHU2NCBy b3VuZGRvd25fdTY0KHU2NCB4LCB1NjQgeSkKPj4gK3sKPj4gKwl1NjQgcmVtOwo+PiArCj4+ICsJ ZGl2NjRfdTY0X3JlbSh4LCB5LCAmcmVtKTsKPj4gKwlyZXR1cm4gKHggLSByZW0pOwo+PiArfQo+ IAo+IFBsZWFzZSByZXBsYWNlIGFsbCB1c2FnZSB3aXRoIERJVl9ST1VORF9ET1dOX1VMTAo+IAo+ PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jdHJsX2NhbGNfdHVfcGFyYW1ldGVycyhzdHJ1Y3QgZHBf Y3RybF9wcml2YXRlICpjdHJsLAo+PiArCQkJCSAgICAgICBzdHJ1Y3QgZHBfdmNfdHVfbWFwcGlu Z190YWJsZSAqdHVfdGFibGUpCj4+ICt7Cj4+ICsJdTMyIG11bHRpcGxpZXIgPSAxMDAwMDAwOwo+ PiArCXU2NCBwY2xrLCBsY2xrOwo+PiArCXU4IGJwcCwgbG5fY250Owo+PiArCWludCBydW5faWR4 ID0gMDsKPj4gKwl1MzIgbHdpZHRoLCBoX2JsYW5rOwo+PiArCXUzMiBmaWZvX2VtcHR5ID0gMDsK Pj4gKwl1MzIgcmF0aW9fc2NhbGUgPSAxMDAxOwo+PiArCXU2NCB0ZW1wLCByYXRpbywgb3JpZ2lu YWxfcmF0aW87Cj4+ICsJdTY0IHRlbXAyLCByZW1pbmRlcjsKPj4gKwl1NjQgdGVtcDMsIHRlbXA0 LCByZXN1bHQgPSAwOwo+PiArCj4+ICsJdTY0IGVyciA9IG11bHRpcGxpZXI7Cj4+ICsJdTY0IG5f ZXJyID0gMCwgbl9uX2VyciA9IDA7Cj4+ICsJYm9vbCBuX2Vycl9uZWcsIG5uX2Vycl9uZWc7Cj4+ ICsJdTggaGJsYW5rX21hcmdpbiA9IDE2Owo+PiArCj4+ICsJdTggdHVfc2l6ZSwgdHVfc2l6ZV9k ZXNpcmVkID0gMCwgdHVfc2l6ZV9taW51czE7Cj4+ICsJaW50IHZhbGlkX2JvdW5kYXJ5X2xpbms7 Cj4+ICsJdTY0IHJlc3VsdGluZ192YWxpZDsKPj4gKwl1NjQgdG90YWxfdmFsaWQ7Cj4+ICsJdTY0 IGVmZmVjdGl2ZV92YWxpZDsKPj4gKwl1NjQgZWZmZWN0aXZlX3ZhbGlkX3JlY29yZGVkOwo+PiAr CWludCBuX3R1czsKPj4gKwlpbnQgbl90dXNfcGVyX2xhbmU7Cj4+ICsJaW50IHBhaXJlZF90dXM7 Cj4+ICsJaW50IHJlbWFpbmRlcl90dXM7Cj4+ICsJaW50IHJlbWFpbmRlcl90dXNfdXBwZXIsIHJl bWFpbmRlcl90dXNfbG93ZXI7Cj4+ICsJaW50IGV4dHJhX2J5dGVzOwo+PiArCWludCBmaWxsZXJf c2l6ZTsKPj4gKwlpbnQgZGVsYXlfc3RhcnRfbGluazsKPj4gKwlpbnQgYm91bmRhcnlfbW9kZXJh dGlvbl9lbiA9IDA7Cj4+ICsJaW50IHVwcGVyX2JkcnlfY250ID0gMDsKPj4gKwlpbnQgbG93ZXJf YmRyeV9jbnQgPSAwOwo+PiArCWludCBpX3VwcGVyX2JkcnlfY250ID0gMDsKPj4gKwlpbnQgaV9s b3dlcl9iZHJ5X2NudCA9IDA7Cj4+ICsJaW50IHZhbGlkX2xvd2VyX2JvdW5kYXJ5X2xpbmsgPSAw Owo+PiArCWludCBldmVuX2Rpc3RyaWJ1dGlvbl9iZiA9IDA7Cj4+ICsJaW50IGV2ZW5fZGlzdHJp YnV0aW9uX2xlZ2FjeSA9IDA7Cj4+ICsJaW50IGV2ZW5fZGlzdHJpYnV0aW9uID0gMDsKPj4gKwlp bnQgbWluX2hibGFuayA9IDA7Cj4+ICsJaW50IGV4dHJhX3BjbGtfY3ljbGVzOwo+PiArCXU4IGV4 dHJhX3BjbGtfY3ljbGVfZGVsYXkgPSA0Owo+PiArCWludCBleHRyYV9wY2xrX2N5Y2xlc19pbl9s aW5rX2NsazsKPj4gKwl1NjQgcmF0aW9fYnlfdHU7Cj4+ICsJdTY0IGF2ZXJhZ2VfdmFsaWQyOwo+ PiArCXU2NCBleHRyYV9idWZmZXJfbWFyZ2luOwo+PiArCWludCBuZXdfdmFsaWRfYm91bmRhcnlf bGluazsKPj4gKwo+PiArCXU2NCByZXN1bHRpbmdfdmFsaWRfdG1wOwo+PiArCXU2NCByYXRpb19i eV90dV90bXA7Cj4+ICsJaW50IG5fdHVzX3RtcDsKPj4gKwlpbnQgZXh0cmFfcGNsa19jeWNsZXNf dG1wOwo+PiArCWludCBleHRyYV9wY2xrX2N5Y2xlc19pbl9sY2xrX3RtcDsKPj4gKwlpbnQgZXh0 cmFfcmVxX2J5dGVzX25ld190bXA7Cj4+ICsJaW50IGZpbGxlcl9zaXplX3RtcDsKPj4gKwlpbnQg bG93ZXJfZmlsbGVyX3NpemVfdG1wOwo+PiArCWludCBkZWxheV9zdGFydF9saW5rX3RtcDsKPj4g KwlpbnQgbWluX2hibGFua190bXAgPSAwOwo+PiArCWJvb2wgZXh0cmFfcmVxX2J5dGVzX2lzX25l ZyA9IGZhbHNlOwo+PiArCXN0cnVjdCBkcF9wYW5lbF9pbmZvICpwaW5mbyA9ICZjdHJsLT5wYW5l bC0+cGluZm87Cj4+ICsKPj4gKwl1OCBkcF9icnV0ZV9mb3JjZSA9IDE7Cj4+ICsJdTY0IGJydXRl X2ZvcmNlX3RocmVzaG9sZCA9IDEwOwo+PiArCXU2NCBkaWZmX2FiczsKPiAKPiAKPiA3NiBzdGFj ayB2YXJzIGFuZCB+NDUwIGxpbmVzIG11c3QgYmUgYSBuZXcgcmVjb3JkIHNvbWV3aGVyZSA6KQo+ IAo+IEknbSBnb2luZyB0byBza2lwIHJldmlld2luZyB0aGlzIGZ1bmN0aW9uIGFuZCBsZXQgeW91 IAo+IHNwbGl0L3NpbXBsaWZ5L3JlZHVjZSBpdC4KPiBQbGVhc2UganVzdCBtYWtlIGl0IG1vcmUg cmVhZGFibGUgKGNvbW1lbnRzLCBkb2NzLCBoZWxwZXIgZnVuY3Rpb25zLCAKPiBldGMpLgo+IApN b3N0IG9mIHRoZSBjb2RlIHJlbGF0ZWQgdG8gdHVfY2FsY3VsYXRvciBoYXMgYmVlbiB1cGRhdGVk IGluIFYyLiBBcyBwZXIgCm91ciBkaXNjdXNzaW9uLCB3ZSB3b24ndApiZSBhYmxlIHRvIG1vZGlm eSBtdWNoIG9mIHRoZSBmdW5jdGlvbiBzaW5jZSBpdHMgaGFyZHdhcmUvSVAgc3BlY2lmaWMuCgo+ PiArCj4+ICsJbG5fY250ID0gIGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmxhbmVfY291bnQ7Cj4+ ICsKPj4gKwlicHAgPSBwaW5mby0+YnBwOwo+PiArCWx3aWR0aCA9IHBpbmZvLT5oX2FjdGl2ZTsK Pj4gKwloX2JsYW5rID0gcGluZm8tPmhfYmFja19wb3JjaCArIHBpbmZvLT5oX2Zyb250X3BvcmNo ICsKPj4gKwkJCQlwaW5mby0+aF9zeW5jX3dpZHRoOwo+PiArCXBjbGsgPSBwaW5mby0+cGl4ZWxf Y2xrX2toeiAqIDEwMDA7Cj4+ICsKPj4gKwlib3VuZGFyeV9tb2RlcmF0aW9uX2VuID0gMDsKPj4g Kwl1cHBlcl9iZHJ5X2NudCA9IDA7Cj4+ICsJbG93ZXJfYmRyeV9jbnQgPSAwOwo+PiArCWlfdXBw ZXJfYmRyeV9jbnQgPSAwOwo+PiArCWlfbG93ZXJfYmRyeV9jbnQgPSAwOwo+PiArCXZhbGlkX2xv d2VyX2JvdW5kYXJ5X2xpbmsgPSAwOwo+PiArCWV2ZW5fZGlzdHJpYnV0aW9uX2JmID0gMDsKPj4g KwlldmVuX2Rpc3RyaWJ1dGlvbl9sZWdhY3kgPSAwOwo+PiArCWV2ZW5fZGlzdHJpYnV0aW9uID0g MDsKPj4gKwltaW5faGJsYW5rID0gMDsKPj4gKwo+PiArCWxjbGsgPSBkcm1fZHBfYndfY29kZV90 b19saW5rX3JhdGUoCj4+ICsJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUpICogRFBf S0haX1RPX0haOwo+PiArCj4+ICsJcHJfZGVidWcoInBjbGs9JWxsZCwgYWN0aXZlX3dpZHRoPSVk LCBoX2JsYW5rPSVkXG4iLAo+PiArCQkJCQkJcGNsaywgbHdpZHRoLCBoX2JsYW5rKTsKPj4gKwlw cl9kZWJ1ZygibGNsayA9ICVsbGQsIGxuX2NudCA9ICVkXG4iLCBsY2xrLCBsbl9jbnQpOwo+PiAr CXJhdGlvID0gZGl2NjRfdTY0X3JlbShwY2xrICogYnBwICogbXVsdGlwbGllciwKPj4gKwkJCQk4 ICogbG5fY250ICogbGNsaywgJnJlbWluZGVyKTsKPj4gKwlyYXRpbyA9IGRpdjY0X3U2NCgocGNs ayAqIGJwcCAqIG11bHRpcGxpZXIpLCAoOCAqIGxuX2NudCAqIGxjbGspKTsKPj4gKwlvcmlnaW5h bF9yYXRpbyA9IHJhdGlvOwo+PiArCj4+ICsJZXh0cmFfYnVmZmVyX21hcmdpbiA9IHJvdW5kdXBf dTY0KGRpdjY0X3U2NChleHRyYV9wY2xrX2N5Y2xlX2RlbGF5Cj4+ICsJCQkJKiBsY2xrICogbXVs dGlwbGllciwgcGNsayksIG11bHRpcGxpZXIpOwo+PiArCWV4dHJhX2J1ZmZlcl9tYXJnaW4gPSBk aXY2NF91NjQoZXh0cmFfYnVmZmVyX21hcmdpbiwgbXVsdGlwbGllcik7Cj4+ICsKPj4gKwkvKiBU byBkZWFsIHdpdGggY2FzZXMgd2hlcmUgbGluZXMgYXJlIG5vdCBkaXN0cmlidXRhYmxlICovCj4+ ICsJaWYgKCgobHdpZHRoICUgbG5fY250KSAhPSAwKSAmJiByYXRpbyA8IG11bHRpcGxpZXIpIHsK Pj4gKwkJcmF0aW8gPSByYXRpbyAqIHJhdGlvX3NjYWxlOwo+PiArCQlyYXRpbyA9IHJhdGlvIDwg KDEwMDAgKiBtdWx0aXBsaWVyKQo+PiArCQkJCT8gcmF0aW8gOiAoMTAwMCAqIG11bHRpcGxpZXIp Owo+PiArCX0KPj4gKwlwcl9kZWJ1ZygicmF0aW8gPSAlbGxkXG4iLCByYXRpbyk7Cj4+ICsKPj4g Kwlmb3IgKHR1X3NpemUgPSAzMjsgdHVfc2l6ZSA8PSA2NDsgdHVfc2l6ZSsrKSB7Cj4+ICsJCXRl bXAgPSByYXRpbyAqIHR1X3NpemU7Cj4+ICsJCXRlbXAyID0gKCh0ZW1wIC8gbXVsdGlwbGllcikg KyAxKSAqIG11bHRpcGxpZXI7Cj4+ICsJCW5fZXJyID0gcm91bmR1cF91NjQodGVtcCwgbXVsdGlw bGllcikgLSB0ZW1wOwo+PiArCj4+ICsJCWlmIChuX2VyciA8IGVycikgewo+PiArCQkJZXJyID0g bl9lcnI7Cj4+ICsJCQl0dV9zaXplX2Rlc2lyZWQgPSB0dV9zaXplOwo+PiArCQl9Cj4+ICsJfQo+ PiArCXByX2RlYnVnKCJJbmZvOiB0dV9zaXplX2Rlc2lyZWQgPSAlZFxuIiwgdHVfc2l6ZV9kZXNp cmVkKTsKPj4gKwo+PiArCXR1X3NpemVfbWludXMxID0gdHVfc2l6ZV9kZXNpcmVkIC0gMTsKPj4g Kwo+PiArCXZhbGlkX2JvdW5kYXJ5X2xpbmsgPSByb3VuZHVwX3U2NChyYXRpbyAqIHR1X3NpemVf ZGVzaXJlZCwgCj4+IG11bHRpcGxpZXIpOwo+PiArCXZhbGlkX2JvdW5kYXJ5X2xpbmsgLz0gbXVs dGlwbGllcjsKPj4gKwluX3R1cyA9IHJvdW5kZG93bigobHdpZHRoICogYnBwICogbXVsdGlwbGll cikKPj4gKwkJCS8gKDggKiB2YWxpZF9ib3VuZGFyeV9saW5rKSwgbXVsdGlwbGllcikgLyBtdWx0 aXBsaWVyOwo+PiArCWV2ZW5fZGlzdHJpYnV0aW9uX2xlZ2FjeSA9IG5fdHVzICUgbG5fY250ID09 IDAgPyAxIDogMDsKPj4gKwlwcl9kZWJ1ZygiSW5mbzogbl9zeW1ib2xfcGVyX3R1PSVkLCBudW1i ZXJfb2ZfdHVzPSVkXG4iLAo+PiArCQkJCQl2YWxpZF9ib3VuZGFyeV9saW5rLCBuX3R1cyk7Cj4+ ICsKPj4gKwlleHRyYV9ieXRlcyA9IHJvdW5kdXBfdTY0KChuX3R1cyArIDEpCj4+ICsJCQkqICgo dmFsaWRfYm91bmRhcnlfbGluayAqIG11bHRpcGxpZXIpCj4+ICsJCQktIChvcmlnaW5hbF9yYXRp byAqIHR1X3NpemVfZGVzaXJlZCkpLCBtdWx0aXBsaWVyKTsKPj4gKwlleHRyYV9ieXRlcyAvPSBt dWx0aXBsaWVyOwo+PiArCWV4dHJhX3BjbGtfY3ljbGVzID0gcm91bmR1cChleHRyYV9ieXRlcyAq IDggKiBtdWx0aXBsaWVyIC8gYnBwLAo+PiArCQkJbXVsdGlwbGllcik7Cj4+ICsJZXh0cmFfcGNs a19jeWNsZXMgLz0gbXVsdGlwbGllcjsKPj4gKwlleHRyYV9wY2xrX2N5Y2xlc19pbl9saW5rX2Ns ayA9IAo+PiByb3VuZHVwX3U2NChkaXY2NF91NjQoZXh0cmFfcGNsa19jeWNsZXMKPj4gKwkJCQkq IGxjbGsgKiBtdWx0aXBsaWVyLCBwY2xrKSwgbXVsdGlwbGllcik7Cj4+ICsJZXh0cmFfcGNsa19j eWNsZXNfaW5fbGlua19jbGsgLz0gbXVsdGlwbGllcjsKPj4gKwlmaWxsZXJfc2l6ZSA9IHJvdW5k dXBfdTY0KCh0dV9zaXplX2Rlc2lyZWQgLSB2YWxpZF9ib3VuZGFyeV9saW5rKQo+PiArCQkJCQkJ KiBtdWx0aXBsaWVyLCBtdWx0aXBsaWVyKTsKPj4gKwlmaWxsZXJfc2l6ZSAvPSBtdWx0aXBsaWVy Owo+PiArCXJhdGlvX2J5X3R1ID0gZGl2NjRfdTY0KHJhdGlvICogdHVfc2l6ZV9kZXNpcmVkLCBt dWx0aXBsaWVyKTsKPj4gKwo+PiArCXByX2RlYnVnKCJleHRyYV9wY2xrX2N5Y2xlc19pbl9saW5r X2Nsaz0lZCwgZXh0cmFfYnl0ZXM9JWRcbiIsCj4+ICsJCQkJZXh0cmFfcGNsa19jeWNsZXNfaW5f bGlua19jbGssIGV4dHJhX2J5dGVzKTsKPj4gKwlwcl9kZWJ1ZygiZXh0cmFfcGNsa19jeWNsZXNf aW5fbGlua19jbGs9JWRcbiIsCj4+ICsJCQkJZXh0cmFfcGNsa19jeWNsZXNfaW5fbGlua19jbGsp Owo+PiArCXByX2RlYnVnKCJmaWxsZXJfc2l6ZT0lZCwgZXh0cmFfYnVmZmVyX21hcmdpbj0lbGxk XG4iLAo+PiArCQkJCWZpbGxlcl9zaXplLCBleHRyYV9idWZmZXJfbWFyZ2luKTsKPj4gKwo+PiAr CWRlbGF5X3N0YXJ0X2xpbmsgPSAoKGV4dHJhX2J5dGVzID4gZXh0cmFfcGNsa19jeWNsZXNfaW5f bGlua19jbGspCj4+ICsJCQk/IGV4dHJhX2J5dGVzCj4+ICsJCQk6IGV4dHJhX3BjbGtfY3ljbGVz X2luX2xpbmtfY2xrKQo+PiArCQkJCSsgZmlsbGVyX3NpemUgKyBleHRyYV9idWZmZXJfbWFyZ2lu Owo+PiArCXJlc3VsdGluZ192YWxpZCA9IHZhbGlkX2JvdW5kYXJ5X2xpbms7Cj4+ICsJcHJfZGVi dWcoIkluZm86IGRlbGF5X3N0YXJ0X2xpbms9JWQsIGZpbGxlcl9zaXplPSVkXG4iLAo+PiArCQkJ CWRlbGF5X3N0YXJ0X2xpbmssIGZpbGxlcl9zaXplKTsKPj4gKwlwcl9kZWJ1ZygidmFsaWRfYm91 bmRhcnlfbGluaz0lZCByYXRpb19ieV90dT0lbGxkXG4iLAo+PiArCQkJCXZhbGlkX2JvdW5kYXJ5 X2xpbmssIHJhdGlvX2J5X3R1KTsKPj4gKwo+PiArCWRpZmZfYWJzID0gKHJlc3VsdGluZ192YWxp ZCA+PSByYXRpb19ieV90dSkKPj4gKwkJCQk/IChyZXN1bHRpbmdfdmFsaWQgLSByYXRpb19ieV90 dSkKPj4gKwkJCQk6IChyYXRpb19ieV90dSAtIHJlc3VsdGluZ192YWxpZCk7Cj4+ICsKPj4gKwlp ZiAoZXJyICE9IDAgJiYgKChkaWZmX2FicyA+IGJydXRlX2ZvcmNlX3RocmVzaG9sZCkKPj4gKwkJ CXx8IChldmVuX2Rpc3RyaWJ1dGlvbl9sZWdhY3kgPT0gMCkKPj4gKwkJCXx8IChkcF9icnV0ZV9m b3JjZSA9PSAxKSkpIHsKPj4gKwkJZXJyID0gbXVsdGlwbGllcjsKPj4gKwkJZm9yICh0dV9zaXpl ID0gMzI7IHR1X3NpemUgPD0gNjQ7IHR1X3NpemUrKykgewo+PiArCQkJZm9yIChpX3VwcGVyX2Jk cnlfY250ID0gMTsgaV91cHBlcl9iZHJ5X2NudCA8PSAxNTsKPj4gKwkJCQkJCWlfdXBwZXJfYmRy eV9jbnQrKykgewo+PiArCQkJCWZvciAoaV9sb3dlcl9iZHJ5X2NudCA9IDE7Cj4+ICsJCQkJCWlf bG93ZXJfYmRyeV9jbnQgPD0gMTU7Cj4+ICsJCQkJCWlfbG93ZXJfYmRyeV9jbnQrKykgewo+PiAr CQkJCQluZXdfdmFsaWRfYm91bmRhcnlfbGluayA9Cj4+ICsJCQkJCQlyb3VuZHVwX3U2NChyYXRp bwo+PiArCQkJCQkJKiB0dV9zaXplLCBtdWx0aXBsaWVyKTsKPj4gKwkJCQkJYXZlcmFnZV92YWxp ZDIgPSAoaV91cHBlcl9iZHJ5X2NudAo+PiArCQkJCQkJKiBuZXdfdmFsaWRfYm91bmRhcnlfbGlu awo+PiArCQkJCQkJKyBpX2xvd2VyX2JkcnlfY250Cj4+ICsJCQkJCQkqIChuZXdfdmFsaWRfYm91 bmRhcnlfbGluawo+PiArCQkJCQkJCS0gbXVsdGlwbGllcikpCj4+ICsJCQkJCQkvIChpX3VwcGVy X2JkcnlfY250Cj4+ICsJCQkJCQkJKyBpX2xvd2VyX2JkcnlfY250KTsKPj4gKwkJCQkJbl90dXMg PSByb3VuZGRvd25fdTY0KGRpdjY0X3U2NChsd2lkdGgKPj4gKwkJCQkJCSogbXVsdGlwbGllciAq IG11bHRpcGxpZXIKPj4gKwkJCQkJCSogKGJwcCAvIDgpLCBhdmVyYWdlX3ZhbGlkMiksCj4+ICsJ CQkJCQkJbXVsdGlwbGllcik7Cj4+ICsJCQkJCW5fdHVzIC89IG11bHRpcGxpZXI7Cj4+ICsJCQkJ CW5fdHVzX3Blcl9sYW5lCj4+ICsJCQkJCQk9IHJvdW5kZG93bihuX3R1cwo+PiArCQkJCQkJCSog bXVsdGlwbGllcgo+PiArCQkJCQkJCS8gbG5fY250LCBtdWx0aXBsaWVyKTsKPj4gKwkJCQkJbl90 dXNfcGVyX2xhbmUgLz0gbXVsdGlwbGllcjsKPj4gKwkJCQkJcGFpcmVkX3R1cyA9Cj4+ICsJCQkJ CQlyb3VuZGRvd24oKG5fdHVzX3Blcl9sYW5lKQo+PiArCQkJCQkJCSogbXVsdGlwbGllcgo+PiAr CQkJCQkJCS8gKGlfdXBwZXJfYmRyeV9jbnQKPj4gKwkJCQkJCQkrIGlfbG93ZXJfYmRyeV9jbnQp LAo+PiArCQkJCQkJCW11bHRpcGxpZXIpOwo+PiArCQkJCQlwYWlyZWRfdHVzIC89IG11bHRpcGxp ZXI7Cj4+ICsJCQkJCXJlbWFpbmRlcl90dXMgPSBuX3R1c19wZXJfbGFuZQo+PiArCQkJCQkJCS0g cGFpcmVkX3R1cwo+PiArCQkJCQkJKiAoaV91cHBlcl9iZHJ5X2NudAo+PiArCQkJCQkJCSsgaV9s b3dlcl9iZHJ5X2NudCk7Cj4+ICsJCQkJCWlmICgocmVtYWluZGVyX3R1cwo+PiArCQkJCQkJLSBp X3VwcGVyX2JkcnlfY250KSA+IDApIHsKPj4gKwkJCQkJCXJlbWFpbmRlcl90dXNfdXBwZXIKPj4g KwkJCQkJCQk9IGlfdXBwZXJfYmRyeV9jbnQ7Cj4+ICsJCQkJCQlyZW1haW5kZXJfdHVzX2xvd2Vy ID0KPj4gKwkJCQkJCQlyZW1haW5kZXJfdHVzCj4+ICsJCQkJCQkJLSBpX3VwcGVyX2JkcnlfY250 Owo+PiArCQkJCQl9IGVsc2Ugewo+PiArCQkJCQkJcmVtYWluZGVyX3R1c191cHBlcgo+PiArCQkJ CQkJCT0gcmVtYWluZGVyX3R1czsKPj4gKwkJCQkJCXJlbWFpbmRlcl90dXNfbG93ZXIgPSAwOwo+ PiArCQkJCQl9Cj4+ICsJCQkJCXRvdGFsX3ZhbGlkID0gcGFpcmVkX3R1cwo+PiArCQkJCQkJKiAo aV91cHBlcl9iZHJ5X2NudAo+PiArCQkJCQkJKiBuZXdfdmFsaWRfYm91bmRhcnlfbGluawo+PiAr CQkJCQkJCSsgaV9sb3dlcl9iZHJ5X2NudAo+PiArCQkJCQkJKiAobmV3X3ZhbGlkX2JvdW5kYXJ5 X2xpbmsKPj4gKwkJCQkJCQktIG11bHRpcGxpZXIpKQo+PiArCQkJCQkJKyAocmVtYWluZGVyX3R1 c191cHBlcgo+PiArCQkJCQkJKiBuZXdfdmFsaWRfYm91bmRhcnlfbGluaykKPj4gKwkJCQkJCSsg KHJlbWFpbmRlcl90dXNfbG93ZXIKPj4gKwkJCQkJCSogKG5ld192YWxpZF9ib3VuZGFyeV9saW5r Cj4+ICsJCQkJCQkJLSBtdWx0aXBsaWVyKSk7Cj4+ICsJCQkJCW5fZXJyX25lZyA9IG5uX2Vycl9u ZWcgPSBmYWxzZTsKPj4gKwkJCQkJZWZmZWN0aXZlX3ZhbGlkCj4+ICsJCQkJCQk9IGRpdl91NjQo dG90YWxfdmFsaWQsCj4+ICsJCQkJCQkJbl90dXNfcGVyX2xhbmUpOwo+PiArCQkJCQluX25fZXJy ID0gKGVmZmVjdGl2ZV92YWxpZAo+PiArCQkJCQkJCT49IChyYXRpbyAqIHR1X3NpemUpKQo+PiAr CQkJCQkJPyAoZWZmZWN0aXZlX3ZhbGlkCj4+ICsJCQkJCQkJLSAocmF0aW8gKiB0dV9zaXplKSkK Pj4gKwkJCQkJCTogKChyYXRpbyAqIHR1X3NpemUpCj4+ICsJCQkJCQkJLSBlZmZlY3RpdmVfdmFs aWQpOwo+PiArCQkJCQlpZiAoZWZmZWN0aXZlX3ZhbGlkIDwgKHJhdGlvICogdHVfc2l6ZSkpCj4+ ICsJCQkJCQlubl9lcnJfbmVnID0gdHJ1ZTsKPj4gKwkJCQkJbl9lcnIgPSAoYXZlcmFnZV92YWxp ZDIKPj4gKwkJCQkJCT49IChyYXRpbyAqIHR1X3NpemUpKQo+PiArCQkJCQkJPyAoYXZlcmFnZV92 YWxpZDIKPj4gKwkJCQkJCQktIChyYXRpbyAqIHR1X3NpemUpKQo+PiArCQkJCQkJOiAoKHJhdGlv ICogdHVfc2l6ZSkKPj4gKwkJCQkJCQktIGF2ZXJhZ2VfdmFsaWQyKTsKPj4gKwkJCQkJaWYgKGF2 ZXJhZ2VfdmFsaWQyIDwgKHJhdGlvICogdHVfc2l6ZSkpCj4+ICsJCQkJCQluX2Vycl9uZWcgPSB0 cnVlOwo+PiArCQkJCQlldmVuX2Rpc3RyaWJ1dGlvbiA9Cj4+ICsJCQkJCQluX3R1cyAlIGxuX2Nu dCA9PSAwID8gMSA6IDA7Cj4+ICsJCQkJCWRpZmZfYWJzID0KPj4gKwkJCQkJCXJlc3VsdGluZ192 YWxpZCA+PSByYXRpb19ieV90dQo+PiArCQkJCQkJPyAocmVzdWx0aW5nX3ZhbGlkCj4+ICsJCQkJ CQkJLSByYXRpb19ieV90dSkKPj4gKwkJCQkJCTogKHJhdGlvX2J5X3R1Cj4+ICsJCQkJCQkJLSBy ZXN1bHRpbmdfdmFsaWQpOwo+PiArCj4+ICsJCQkJCXJlc3VsdGluZ192YWxpZF90bXAgPSBkaXY2 NF91NjQoCj4+ICsJCQkJCQkoaV91cHBlcl9iZHJ5X2NudAo+PiArCQkJCQkJKiBuZXdfdmFsaWRf Ym91bmRhcnlfbGluawo+PiArCQkJCQkJKyBpX2xvd2VyX2JkcnlfY250Cj4+ICsJCQkJCQkqIChu ZXdfdmFsaWRfYm91bmRhcnlfbGluawo+PiArCQkJCQkJCS0gbXVsdGlwbGllcikpLAo+PiArCQkJ CQkJKGlfdXBwZXJfYmRyeV9jbnQKPj4gKwkJCQkJCQkrIGlfbG93ZXJfYmRyeV9jbnQpKTsKPj4g KwkJCQkJcmF0aW9fYnlfdHVfdG1wID0KPj4gKwkJCQkJCW9yaWdpbmFsX3JhdGlvICogdHVfc2l6 ZTsKPj4gKwkJCQkJcmF0aW9fYnlfdHVfdG1wIC89IG11bHRpcGxpZXI7Cj4+ICsJCQkJCW5fdHVz X3RtcCA9IHJvdW5kZG93bl91NjQoCj4+ICsJCQkJCQlkaXY2NF91NjQobHdpZHRoCj4+ICsJCQkJ CQkqIG11bHRpcGxpZXIgKiBtdWx0aXBsaWVyCj4+ICsJCQkJCQkqIGJwcCAvIDgsCj4+ICsJCQkJ CQlyZXN1bHRpbmdfdmFsaWRfdG1wKSwKPj4gKwkJCQkJCW11bHRpcGxpZXIpOwo+PiArCQkJCQlu X3R1c190bXAgLz0gbXVsdGlwbGllcjsKPj4gKwo+PiArCQkJCQl0ZW1wMyA9IChyZXN1bHRpbmdf dmFsaWRfdG1wCj4+ICsJCQkJCQk+PSAob3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplKSkKPj4gKwkJ CQkJCT8gKHJlc3VsdGluZ192YWxpZF90bXAKPj4gKwkJCQkJCS0gb3JpZ2luYWxfcmF0aW8gKiB0 dV9zaXplKQo+PiArCQkJCQkJOiAob3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplKQo+PiArCQkJCQkJ LSByZXN1bHRpbmdfdmFsaWRfdG1wOwo+PiArCQkJCQl0ZW1wMyA9IChuX3R1c190bXAgKyAxKSAq IHRlbXAzOwo+PiArCQkJCQl0ZW1wNCA9IChuZXdfdmFsaWRfYm91bmRhcnlfbGluawo+PiArCQkJ CQkJPj0gKG9yaWdpbmFsX3JhdGlvICogdHVfc2l6ZSkpCj4+ICsJCQkJCQk/IChuZXdfdmFsaWRf Ym91bmRhcnlfbGluawo+PiArCQkJCQkJCS0gb3JpZ2luYWxfcmF0aW8KPj4gKwkJCQkJCQkqIHR1 X3NpemUpCj4+ICsJCQkJCQk6IChvcmlnaW5hbF9yYXRpbyAqIHR1X3NpemUpCj4+ICsJCQkJCQkt IG5ld192YWxpZF9ib3VuZGFyeV9saW5rOwo+PiArCQkJCQl0ZW1wNCA9IChpX3VwcGVyX2Jkcnlf Y250Cj4+ICsJCQkJCQkJKiBsbl9jbnQgKiB0ZW1wNCk7Cj4+ICsKPj4gKwkJCQkJdGVtcDMgPSBy b3VuZHVwX3U2NCh0ZW1wMywgbXVsdGlwbGllcik7Cj4+ICsJCQkJCXRlbXA0ID0gcm91bmR1cF91 NjQodGVtcDQsIG11bHRpcGxpZXIpOwo+PiArCQkJCQlkcF9jdHJsX2dldF9leHRyYV9yZXFfYnl0 ZXMKPj4gKwkJCQkJCShyZXN1bHRpbmdfdmFsaWRfdG1wLAo+PiArCQkJCQkJbmV3X3ZhbGlkX2Jv dW5kYXJ5X2xpbmssCj4+ICsJCQkJCQl0ZW1wMywgdGVtcDQsCj4+ICsJCQkJCQkmZXh0cmFfcmVx X2J5dGVzX2lzX25lZywKPj4gKwkJCQkJCSZyZXN1bHQsCj4+ICsJCQkJCQkob3JpZ2luYWxfcmF0 aW8gKiB0dV9zaXplKSk7Cj4+ICsJCQkJCWV4dHJhX3JlcV9ieXRlc19uZXdfdG1wCj4+ICsJCQkJ CQk9IGRpdjY0X3VsKHJlc3VsdCwgbXVsdGlwbGllcik7Cj4+ICsJCQkJCWlmICgoZXh0cmFfcmVx X2J5dGVzX2lzX25lZykKPj4gKwkJCQkJCSYmIChleHRyYV9yZXFfYnl0ZXNfbmV3X3RtcAo+PiAr CQkJCQkJCT4gMSkpCj4+ICsJCQkJCQlleHRyYV9yZXFfYnl0ZXNfbmV3X3RtcAo+PiArCQkJCQkJ PSBleHRyYV9yZXFfYnl0ZXNfbmV3X3RtcCAtIDE7Cj4+ICsJCQkJCWlmIChleHRyYV9yZXFfYnl0 ZXNfbmV3X3RtcCA9PSAwKQo+PiArCQkJCQkJZXh0cmFfcmVxX2J5dGVzX25ld190bXAgPSAxOwo+ PiArCQkJCQlleHRyYV9wY2xrX2N5Y2xlc190bXAgPQo+PiArCQkJCQkJKHU2NCkoZXh0cmFfcmVx X2J5dGVzX25ld190bXAKPj4gKwkJCQkJCSAgICAgICogOCAqIG11bHRpcGxpZXIpIC8gYnBwOwo+ PiArCQkJCQlleHRyYV9wY2xrX2N5Y2xlc190bXAgLz0gbXVsdGlwbGllcjsKPj4gKwo+PiArCQkJ CQlpZiAoZXh0cmFfcGNsa19jeWNsZXNfdG1wIDw9IDApCj4+ICsJCQkJCQlleHRyYV9wY2xrX2N5 Y2xlc190bXAgPSAxOwo+PiArCQkJCQlleHRyYV9wY2xrX2N5Y2xlc19pbl9sY2xrX3RtcCA9Cj4+ ICsJCQkJCQlyb3VuZHVwX3U2NChkaXY2NF91NjQoCj4+ICsJCQkJCQkJZXh0cmFfcGNsa19jeWNs ZXNfdG1wCj4+ICsJCQkJCQkJKiBsY2xrICogbXVsdGlwbGllciwKPj4gKwkJCQkJCQlwY2xrKSwg bXVsdGlwbGllcik7Cj4+ICsJCQkJCWV4dHJhX3BjbGtfY3ljbGVzX2luX2xjbGtfdG1wCj4+ICsJ CQkJCQkvPSBtdWx0aXBsaWVyOwo+PiArCQkJCQlmaWxsZXJfc2l6ZV90bXAgPSByb3VuZHVwX3U2 NCgKPj4gKwkJCQkJCSh0dV9zaXplICogbXVsdGlwbGllciAqCj4+ICsJCQkJCQluZXdfdmFsaWRf Ym91bmRhcnlfbGluayksCj4+ICsJCQkJCQltdWx0aXBsaWVyKTsKPj4gKwkJCQkJZmlsbGVyX3Np emVfdG1wIC89IG11bHRpcGxpZXI7Cj4+ICsJCQkJCWxvd2VyX2ZpbGxlcl9zaXplX3RtcCA9Cj4+ ICsJCQkJCQlmaWxsZXJfc2l6ZV90bXAgKyAxOwo+PiArCQkJCQlpZiAoZXh0cmFfcmVxX2J5dGVz X2lzX25lZykKPj4gKwkJCQkJCXRlbXAzID0gKGV4dHJhX3JlcV9ieXRlc19uZXdfdG1wCj4+ICsJ CQkJCQk+IGV4dHJhX3BjbGtfY3ljbGVzX2luX2xjbGtfdG1wCj4+ICsJCQkJCQk/IGV4dHJhX3Bj bGtfY3ljbGVzX2luX2xjbGtfdG1wCj4+ICsJCQkJCQk6IGV4dHJhX3JlcV9ieXRlc19uZXdfdG1w KTsKPj4gKwkJCQkJZWxzZQo+PiArCQkJCQkJdGVtcDMgPSAoZXh0cmFfcmVxX2J5dGVzX25ld190 bXAKPj4gKwkJCQkJCT4gZXh0cmFfcGNsa19jeWNsZXNfaW5fbGNsa190bXAKPj4gKwkJCQkJCT8g ZXh0cmFfcmVxX2J5dGVzX25ld190bXAgOgo+PiArCQkJCQkJZXh0cmFfcGNsa19jeWNsZXNfaW5f bGNsa190bXApOwo+PiArCj4+ICsJCQkJCXRlbXA0ID0gbG93ZXJfZmlsbGVyX3NpemVfdG1wCj4+ ICsJCQkJCQkrIGV4dHJhX2J1ZmZlcl9tYXJnaW47Cj4+ICsJCQkJCWlmIChleHRyYV9yZXFfYnl0 ZXNfaXNfbmVnKQo+PiArCQkJCQkJZGVsYXlfc3RhcnRfbGlua190bXAKPj4gKwkJCQkJCQk9ICh0 ZW1wMyA+PSB0ZW1wNCkKPj4gKwkJCQkJCQk/ICh0ZW1wMyAtIHRlbXA0KQo+PiArCQkJCQkJCTog KHRlbXA0IC0gdGVtcDMpOwo+PiArCQkJCQllbHNlCj4+ICsJCQkJCQlkZWxheV9zdGFydF9saW5r X3RtcAo+PiArCQkJCQkJCT0gdGVtcDMgKyB0ZW1wNDsKPj4gKwo+PiArCQkJCQltaW5faGJsYW5r X3RtcCA9IChpbnQpZGl2NjRfdTY0KAo+PiArCQkJCQkJcm91bmR1cF91NjQoCj4+ICsJCQkJCQlk aXY2NF91NjQoZGVsYXlfc3RhcnRfbGlua190bXAKPj4gKwkJCQkJCSogcGNsayAqIG11bHRpcGxp ZXIsIGxjbGspLAo+PiArCQkJCQkJbXVsdGlwbGllciksIG11bHRpcGxpZXIpCj4+ICsJCQkJCQkr IGhibGFua19tYXJnaW47Cj4+ICsKPj4gKwkJCQkJaWYgKCgoZXZlbl9kaXN0cmlidXRpb24gPT0g MSkKPj4gKwkJCQkJCXx8ICgoZXZlbl9kaXN0cmlidXRpb25fYmYgPT0gMCkKPj4gKwkJCQkJCSYm IChldmVuX2Rpc3RyaWJ1dGlvbl9sZWdhY3kKPj4gKwkJCQkJCQkJPT0gMCkpKQo+PiArCQkJCQkJ JiYgIW5fZXJyX25lZyAmJiAhbm5fZXJyX25lZwo+PiArCQkJCQkJJiYgbl9uX2VyciA8IGVycgo+ PiArCQkJCQkJJiYgKG5fbl9lcnIgPCBkaWZmX2Ficwo+PiArCQkJCQkJfHwgKGRwX2JydXRlX2Zv cmNlID09IDEpKQo+PiArCQkJCQkJJiYgKG5ld192YWxpZF9ib3VuZGFyeV9saW5rCj4+ICsJCQkJ CQkJCQktIDEpID4gMAo+PiArCQkJCQkJJiYgKGhfYmxhbmsgPj0KPj4gKwkJCQkJCQkodTMyKW1p bl9oYmxhbmtfdG1wKSkgewo+PiArCQkJCQkJdXBwZXJfYmRyeV9jbnQgPQo+PiArCQkJCQkJCWlf dXBwZXJfYmRyeV9jbnQ7Cj4+ICsJCQkJCQlsb3dlcl9iZHJ5X2NudCA9Cj4+ICsJCQkJCQkJaV9s b3dlcl9iZHJ5X2NudDsKPj4gKwkJCQkJCWVyciA9IG5fbl9lcnI7Cj4+ICsJCQkJCQlib3VuZGFy eV9tb2RlcmF0aW9uX2VuID0gMTsKPj4gKwkJCQkJCXR1X3NpemVfZGVzaXJlZCA9IHR1X3NpemU7 Cj4+ICsJCQkJCQl2YWxpZF9ib3VuZGFyeV9saW5rID0KPj4gKwkJCQkJCQluZXdfdmFsaWRfYm91 bmRhcnlfbGluazsKPj4gKwkJCQkJCWVmZmVjdGl2ZV92YWxpZF9yZWNvcmRlZAo+PiArCQkJCQkJ CT0gZWZmZWN0aXZlX3ZhbGlkOwo+PiArCQkJCQkJZGVsYXlfc3RhcnRfbGluawo+PiArCQkJCQkJ CT0gZGVsYXlfc3RhcnRfbGlua190bXA7Cj4+ICsJCQkJCQlmaWxsZXJfc2l6ZSA9IGZpbGxlcl9z aXplX3RtcDsKPj4gKwkJCQkJCW1pbl9oYmxhbmsgPSBtaW5faGJsYW5rX3RtcDsKPj4gKwkJCQkJ CW5fdHVzID0gbl90dXNfdG1wOwo+PiArCQkJCQkJZXZlbl9kaXN0cmlidXRpb25fYmYgPSAxOwo+ PiArCj4+ICsJCQkJCQlwcl9kZWJ1ZygidXBwZXJfYmRyeV9jbnQ9JWQsIGxvd2VyX2JvdW5kYXJ5 X2NudD0lZCwgZXJyPSVsbGQsIAo+PiB0dV9zaXplX2Rlc2lyZWQ9JWQsIHZhbGlkX2JvdW5kYXJ5 X2xpbms9JWQsIGVmZmVjdGl2ZV92YWxpZD0lbGxkXG4iLAo+PiArCQkJCQkJCXVwcGVyX2Jkcnlf Y250LAo+PiArCQkJCQkJCWxvd2VyX2JkcnlfY250LCBlcnIsCj4+ICsJCQkJCQkJdHVfc2l6ZV9k ZXNpcmVkLAo+PiArCQkJCQkJCXZhbGlkX2JvdW5kYXJ5X2xpbmssCj4+ICsJCQkJCQkJZWZmZWN0 aXZlX3ZhbGlkKTsKPj4gKwkJCQkJfQo+PiArCQkJCX0KPj4gKwkJCX0KPj4gKwkJfQo+PiArCj4+ ICsJCWlmIChib3VuZGFyeV9tb2RlcmF0aW9uX2VuID09IDEpIHsKPj4gKwkJCXJlc3VsdGluZ192 YWxpZCA9ICh1NjQpKHVwcGVyX2JkcnlfY250Cj4+ICsJCQkJCSp2YWxpZF9ib3VuZGFyeV9saW5r ICsgbG93ZXJfYmRyeV9jbnQKPj4gKwkJCQkJKiAodmFsaWRfYm91bmRhcnlfbGluayAtIDEpKQo+ PiArCQkJCQkvICh1cHBlcl9iZHJ5X2NudCArIGxvd2VyX2JkcnlfY250KTsKPj4gKwkJCXJhdGlv X2J5X3R1ID0gb3JpZ2luYWxfcmF0aW8gKiB0dV9zaXplX2Rlc2lyZWQ7Cj4+ICsJCQl2YWxpZF9s b3dlcl9ib3VuZGFyeV9saW5rID0KPj4gKwkJCQkodmFsaWRfYm91bmRhcnlfbGluayAvIG11bHRp cGxpZXIpIC0gMTsKPj4gKwo+PiArCQkJdHVfc2l6ZV9taW51czEgPSB0dV9zaXplX2Rlc2lyZWQg LSAxOwo+PiArCQkJZXZlbl9kaXN0cmlidXRpb25fYmYgPSAxOwo+PiArCQkJdmFsaWRfYm91bmRh cnlfbGluayAvPSBtdWx0aXBsaWVyOwo+PiArCQkJcHJfZGVidWcoIkluZm86IEJvdW5kYXJ5X21v ZGVyYXRpb24gZW5hYmxlZFxuIik7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwltaW5faGJsYW5r ID0gKChpbnQpIHJvdW5kdXBfdTY0KGRpdjY0X3U2NChkZWxheV9zdGFydF9saW5rICogcGNsawo+ PiArCQkJKiBtdWx0aXBsaWVyLCBsY2xrKSwgbXVsdGlwbGllcikpCj4+ICsJCQkvIG11bHRpcGxp ZXIgKyBoYmxhbmtfbWFyZ2luOwo+PiArCWlmIChoX2JsYW5rIDwgKHUzMiltaW5faGJsYW5rKSB7 Cj4+ICsJCXByX2RlYnVnKCIgV0FSTklORzogcnVuX2lkeD0lZCBQcm9ncmFtbWVkIGhfYmxhbmsg JWQgaXMgc21hbGxlciAKPj4gdGhhbiB0aGUgbWluX2hibGFuayAlZCBzdXBwb3J0ZWQuXG4iLAo+ PiArCQkJCQlydW5faWR4LCBoX2JsYW5rLCBtaW5faGJsYW5rKTsKPj4gKwl9Cj4+ICsKPj4gKwlp ZiAoZmlmb19lbXB0eSkJewo+PiArCQl0dV9zaXplX21pbnVzMSA9IDMxOwo+PiArCQl2YWxpZF9i b3VuZGFyeV9saW5rID0gMzI7Cj4+ICsJCWRlbGF5X3N0YXJ0X2xpbmsgPSAwOwo+PiArCQlib3Vu ZGFyeV9tb2RlcmF0aW9uX2VuID0gMDsKPj4gKwl9Cj4+ICsKPj4gKwlwcl9kZWJ1ZygidHVfc2l6 ZV9taW51czE9JWQgdmFsaWRfYm91bmRhcnlfbGluaz0lZCAKPj4gZGVsYXlfc3RhcnRfbGluaz0l ZCBib3VuZGFyeV9tb2RlcmF0aW9uX2VuPSVkXG4gdXBwZXJfYm91bmRhcnlfY250PSVkIAo+PiBs b3dlcl9ib3VuZGFyeV9jbnQ9JWQgdmFsaWRfbG93ZXJfYm91bmRhcnlfbGluaz0lZCBtaW5faGJs YW5rPSVkXG4iLAo+PiArCQl0dV9zaXplX21pbnVzMSwgdmFsaWRfYm91bmRhcnlfbGluaywgZGVs YXlfc3RhcnRfbGluaywKPj4gKwkJYm91bmRhcnlfbW9kZXJhdGlvbl9lbiwgdXBwZXJfYmRyeV9j bnQsIGxvd2VyX2JkcnlfY250LAo+PiArCQl2YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5rLCBtaW5f aGJsYW5rKTsKPj4gKwo+PiArCXR1X3RhYmxlLT52YWxpZF9ib3VuZGFyeV9saW5rID0gdmFsaWRf Ym91bmRhcnlfbGluazsKPj4gKwl0dV90YWJsZS0+ZGVsYXlfc3RhcnRfbGluayA9IGRlbGF5X3N0 YXJ0X2xpbms7Cj4+ICsJdHVfdGFibGUtPmJvdW5kYXJ5X21vZGVyYXRpb25fZW4gPSBib3VuZGFy eV9tb2RlcmF0aW9uX2VuOwo+PiArCXR1X3RhYmxlLT52YWxpZF9sb3dlcl9ib3VuZGFyeV9saW5r ID0gdmFsaWRfbG93ZXJfYm91bmRhcnlfbGluazsKPj4gKwl0dV90YWJsZS0+dXBwZXJfYm91bmRh cnlfY291bnQgPSB1cHBlcl9iZHJ5X2NudDsKPj4gKwl0dV90YWJsZS0+bG93ZXJfYm91bmRhcnlf Y291bnQgPSBsb3dlcl9iZHJ5X2NudDsKPj4gKwl0dV90YWJsZS0+dHVfc2l6ZV9taW51czEgPSB0 dV9zaXplX21pbnVzMTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY3RybF9zZXR1cF90 cl91bml0KHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwpCj4+ICt7Cj4+ICsJdTMyIGRwX3R1 ID0gMHgwOwo+PiArCXUzMiB2YWxpZF9ib3VuZGFyeSA9IDB4MDsKPj4gKwl1MzIgdmFsaWRfYm91 bmRhcnkyID0gMHgwOwo+PiArCXN0cnVjdCBkcF92Y190dV9tYXBwaW5nX3RhYmxlIHR1X2NhbGNf dGFibGU7Cj4+ICsKPj4gKwlkcF9jdHJsX2NhbGNfdHVfcGFyYW1ldGVycyhjdHJsLCAmdHVfY2Fs Y190YWJsZSk7Cj4+ICsKPj4gKwlkcF90dSB8PSB0dV9jYWxjX3RhYmxlLnR1X3NpemVfbWludXMx Owo+PiArCXZhbGlkX2JvdW5kYXJ5IHw9IHR1X2NhbGNfdGFibGUudmFsaWRfYm91bmRhcnlfbGlu azsKPj4gKwl2YWxpZF9ib3VuZGFyeSB8PSAodHVfY2FsY190YWJsZS5kZWxheV9zdGFydF9saW5r IDw8IDE2KTsKPj4gKwo+PiArCXZhbGlkX2JvdW5kYXJ5MiB8PSAodHVfY2FsY190YWJsZS52YWxp ZF9sb3dlcl9ib3VuZGFyeV9saW5rIDw8IDEpOwo+PiArCXZhbGlkX2JvdW5kYXJ5MiB8PSAodHVf Y2FsY190YWJsZS51cHBlcl9ib3VuZGFyeV9jb3VudCA8PCAxNik7Cj4+ICsJdmFsaWRfYm91bmRh cnkyIHw9ICh0dV9jYWxjX3RhYmxlLmxvd2VyX2JvdW5kYXJ5X2NvdW50IDw8IDIwKTsKPj4gKwo+ PiArCWlmICh0dV9jYWxjX3RhYmxlLmJvdW5kYXJ5X21vZGVyYXRpb25fZW4pCj4+ICsJCXZhbGlk X2JvdW5kYXJ5MiB8PSBCSVQoMCk7Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiZHBfdHU9MHgleCwgdmFs aWRfYm91bmRhcnk9MHgleCwgdmFsaWRfYm91bmRhcnkyPTB4JXhcbiIsCj4+ICsJCQlkcF90dSwg dmFsaWRfYm91bmRhcnksIHZhbGlkX2JvdW5kYXJ5Mik7Cj4+ICsKPj4gKwljdHJsLT5jYXRhbG9n LT5kcF90dSA9IGRwX3R1Owo+PiArCWN0cmwtPmNhdGFsb2ctPnZhbGlkX2JvdW5kYXJ5ID0gdmFs aWRfYm91bmRhcnk7Cj4+ICsJY3RybC0+Y2F0YWxvZy0+dmFsaWRfYm91bmRhcnkyID0gdmFsaWRf Ym91bmRhcnkyOwo+PiArCj4+ICsJY3RybC0+Y2F0YWxvZy0+dXBkYXRlX3RyYW5zZmVyX3VuaXQo Y3RybC0+Y2F0YWxvZyk7Cj4gCj4gQWdhaW4gaGVyZSwgaWYgeW91IGp1c3QgY2FsbCB0aGUgZnVu Y3Rpb24gZGlyZWN0bHksIHlvdSBjYW4gYXZvaWQgdGhlIAo+IGNhbGxiYWNrLgo+IElmIHlvdSBh ZGQgZnVuY3Rpb24gYXJndW1lbnRzLCB5b3UgY2FuIGF2b2lkIGhhdmluZyB0byBzdG9yZQo+IGRw X3R1L3ZhbGlkX2JvdW5kYXJ5Lwo+IHZhbGlkX2JvdW5kYXJ5MiBlbnRpcmVseS4KPiAKV2lsbCBy ZW1vdmUgdGhlIGRwX3R1L3ZhbGlkX2JvdW5kYXJ5L3ZhbGlkX2JvdW5kYXJ5MiBpbiBWMy4KPj4g K30KPj4gKwo+PiArc3RhdGljIGludCBkcF9jdHJsX3dhaXQ0dmlkZW9fcmVhZHkoc3RydWN0IGRw X2N0cmxfcHJpdmF0ZSAqY3RybCkKPj4gK3sKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwo+PiArCXJl dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY3RybC0+dmlkZW9fY29tcCwgSFogLyAy KTsKPiAKPiBCcmVhayBvdXQgdGhlIHRpbWVvdXQgaW50byBhICNkZWZpbmUKCkZpeGVkIGluIFYy LgoKPiAKPj4gKwlpZiAocmV0IDw9IDApIHsKPj4gKwkJcHJfZXJyKCJMaW5rIFRyYWluIHRpbWVk b3V0XG4iKTsKPj4gKwkJcmV0ID0gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gcmV0 Owo+IAo+IFlvdSdyZSBub3QgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZSBhdCB0aGUgY2FsbHNp dGUuCj4gCkZpeGVkIGluIFYyLgoKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9jdHJsX3Vw ZGF0ZV9zaW5rX3Z4X3B4KHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwsCj4+ICsJCQkJICAg ICB1MzIgdm9sdGFnZV9sZXZlbCwgdTMyIHByZV9lbXBoYXNpc19sZXZlbCkKPiAKPiBJIGRvbid0 IHRoaW5rIHRoaXMgbmVlZHMgdG8gYmUgYSBmdW5jdGlvbiwganVzdCBtb3ZlIGl0IGFsbCBpbnRv Cj4gZHBfY3RybF91cGRhdGVfdnhfcHguCj4gCkZpeGVkIGluIFYyLgoKPj4gK3sKPj4gKwlpbnQg aTsKPj4gKwl1OCBidWZbNF07Cj4+ICsJdTMyIG1heF9sZXZlbF9yZWFjaGVkID0gMDsKPj4gKwo+ PiArCWlmICh2b2x0YWdlX2xldmVsID09IERQX0xJTktfVk9MVEFHRV9NQVgpIHsKPj4gKwkJcHJf ZGVidWcoIm1heC4gdm9sdGFnZSBzd2luZyBsZXZlbCByZWFjaGVkICVkXG4iLAo+PiArCQkJCXZv bHRhZ2VfbGV2ZWwpOwo+PiArCQltYXhfbGV2ZWxfcmVhY2hlZCB8PSBCSVQoMik7Cj4gCj4gICAg ICAgICBEUF9UUkFJTl9NQVhfU1dJTkdfUkVBQ0hFRAo+IAo+PiArCX0KPj4gKwo+PiArCWlmIChw cmVfZW1waGFzaXNfbGV2ZWwgPT0gRFBfTElOS19QUkVfRU1QSEFTSVNfTUFYKSB7Cj4+ICsJCXBy X2RlYnVnKCJtYXguIHByZS1lbXBoYXNpcyBsZXZlbCByZWFjaGVkICVkXG4iLAo+PiArCQkJCXBy ZV9lbXBoYXNpc19sZXZlbCk7Cj4+ICsJCW1heF9sZXZlbF9yZWFjaGVkICB8PSBCSVQoNSk7Cj4g Cj4gICAgICAgICBEUF9UUkFJTl9NQVhfUFJFX0VNUEhBU0lTX1JFQUNIRUQKPiAKPj4gKwl9Cj4+ ICsKPj4gKwlwcmVfZW1waGFzaXNfbGV2ZWwgPDw9IDM7Cj4gCj4gVGhpcyBpcyBEUF9UUkFJTl9Q UkVfRU1QSEFTSVNfU0hJRlQsIGJ1dCBJJ20gZ3Vlc3NpbmcgeW91IGFyZW4ndCB1c2luZyAKPiB0 aGUKPiBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8qIHZhbHVlcyB3aGVuIHlvdSBzZXQgcF9sZXZl bC4gU28gdGhlIHJpZ2h0IHdheSAKPiB0byBmaXgKPiB0aGlzIGlzIHRvIHVzZSB0aG9zZSAjZGVm aW5lcyBhbmQgZ2V0IHJpZCBvZiB0aGlzIHNoaWZ0Lgo+IAo+PiArCj4+ICsJZm9yIChpID0gMDsg aSA8IDQ7IGkrKykKPiAKPiBZb3Ugc2hvdWxkbid0IGFzc3VtZSA0IGxhbmVzIGhlcmUsIHVzZSBk cm1fZHBfbGluay0+bnVtX2xhbmVzCj4gCj4+ICsJCWJ1ZltpXSA9IHZvbHRhZ2VfbGV2ZWwgfCBw cmVfZW1waGFzaXNfbGV2ZWwgfCBtYXhfbGV2ZWxfcmVhY2hlZDsKPj4gKwo+PiArCXByX2RlYnVn KCJzaW5rOiBwfHY9MHgleFxuIiwgdm9sdGFnZV9sZXZlbCB8IHByZV9lbXBoYXNpc19sZXZlbCk7 Cj4+ICsJcmV0dXJuIGRybV9kcF9kcGNkX3dyaXRlKGN0cmwtPmF1eC0+ZHJtX2F1eCwgMHgxMDMs IGJ1ZiwgNCk7Cj4gCj4gcy8weDEwMy9EUF9UUkFJTklOR19MQU5FMF9TRVQvIGFuZCBzLzQvZHJt X2RwX2xpbmstPm51bV9sYW5lcy8KPiAKRm9yZ290IHRvIGZpeCBzLzQvZHJtX2RwX2xpbmstPm51 bV9sYW5lcy8uIFdpbGwgZml4IHRoaXMgaW4gVjMuCgo+IEFsc28sIHRoaXMgd2lsbCByZXR1cm4g bnVtYmVyIG9mIGJ5dGVzIHRyYW5zbWl0dGVkLCBub3QgKDAgfHwgLWVycm5vKS4KPiAKPiAKPj4g K30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfY3RybF91cGRhdGVfdnhfcHgoc3RydWN0IGRwX2N0 cmxfcHJpdmF0ZSAqY3RybCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfbGluayAqbGluayA9IGN0cmwt Pmxpbms7Cj4+ICsKPj4gKwljdHJsLT5jYXRhbG9nLT51cGRhdGVfdnhfcHgoY3RybC0+Y2F0YWxv ZywKPj4gKwkJbGluay0+cGh5X3BhcmFtcy52X2xldmVsLCBsaW5rLT5waHlfcGFyYW1zLnBfbGV2 ZWwpOwo+PiArCj4+ICsJZHBfY3RybF91cGRhdGVfc2lua192eF9weChjdHJsLCBsaW5rLT5waHlf cGFyYW1zLnZfbGV2ZWwsCj4+ICsJCWxpbmstPnBoeV9wYXJhbXMucF9sZXZlbCk7Cj4gCj4gRm9y dHVuYXRlbHkgKG9yIHVuZm9ydHVuYXRlbHkpLCB0aGUgcmV0dXJuIHZhbHVlIGlzbid0IGNoZWNr ZWQuIFNvIAo+IHBsZWFzZSBjaGVjawo+IHRoZSByZXR1cm4gdmFsdWUuCj4gCkZpeGVkIGluIFYy Lgo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jdHJsX3RyYWluX3BhdHRlcm5fc2V0KHN0 cnVjdCBkcF9jdHJsX3ByaXZhdGUgKmN0cmwsCj4+ICsJCXU4IHBhdHRlcm4pCj4+ICt7Cj4+ICsJ dTggYnVmWzRdOwo+IAo+IFdoeSA0Pwo+IApXaWxsIGZpeCB0aGlzIGluIFYzLgoKPj4gKwo+PiAr CXByX2RlYnVnKCJzaW5rOiBwYXR0ZXJuPSV4XG4iLCBwYXR0ZXJuKTsKPj4gKwo+PiArCWJ1Zlsw XSA9IHBhdHRlcm47Cj4+ICsJZHJtX2RwX2RwY2Rfd3JpdGUoY3RybC0+YXV4LT5kcm1fYXV4LCBE UF9UUkFJTklOR19QQVRURVJOX1NFVCwgYnVmLCAKPj4gMSk7Cj4gCj4gQ2hlY2sgdGhlIHJldHVy biB2YWx1ZSBvZiB0aGlzIGFuZCBhbGxsIGRybV9kcF9kcGNkXyhyZWFkfHdyaXRlKSBjYWxscy4K PiAKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9jdHJsX3JlYWRfbGlua19zdGF0dXMoc3Ry dWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCwKPj4gKwkJCQkgICAgdTggKmxpbmtfc3RhdHVzKQo+ PiArewo+PiArCWludCByZXQgPSAwLCBsZW47Cj4+ICsJdTMyIGNvbnN0IG9mZnNldCA9IERQX0xB TkVfQUxJR05fU1RBVFVTX1VQREFURUQgLSBEUF9MQU5FMF8xX1NUQVRVUzsKPj4gKwl1MzIgbGlu a19zdGF0dXNfcmVhZF9tYXhfcmV0cmllcyA9IDEwMDsKPj4gKwo+PiArCXdoaWxlICgtLWxpbmtf c3RhdHVzX3JlYWRfbWF4X3JldHJpZXMpIHsKPj4gKwkJbGVuID0gZHJtX2RwX2RwY2RfcmVhZF9s aW5rX3N0YXR1cyhjdHJsLT5hdXgtPmRybV9hdXgsCj4+ICsJCQlsaW5rX3N0YXR1cyk7Cj4+ICsJ CWlmIChsZW4gIT0gRFBfTElOS19TVEFUVVNfU0laRSkgewo+PiArCQkJcHJfZXJyKCJEUCBsaW5r IHN0YXR1cyByZWFkIGZhaWxlZCwgZXJyOiAlZFxuIiwgbGVuKTsKPj4gKwkJCXJldCA9IGxlbjsK Pj4gKwkJCWJyZWFrOwo+IAo+IEp1c3QgcmV0dXJuIGRpcmVjdGx5IGhlcmUuIFlvdSBjYW4gYWxz byBqdXN0IGRyb3AgbGVuIGFuZCB1c2UgcmV0IChvciAKPiBkcm9wIHJldAo+IGFuZCB1c2UgbGVu KS4KPiAKPj4gKwkJfQo+PiArCj4+ICsJCWlmICghKGxpbmtfc3RhdHVzW29mZnNldF0gJiBEUF9M SU5LX1NUQVRVU19VUERBVEVEKSkKPj4gKwkJCWJyZWFrOwo+IAo+IEFuZCByZXR1cm4gMCBkaXJl Y3RseSBoZXJlCj4gCkZpeGVkIGluIFYyLgoKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+ IAo+IEhlcmUgeW91J3JlIHJldHVybmluZyBzdWNjZXNzZnVsIGluIHRoZSB0aW1lb3V0IGNhc2Ug OiggT25jZSB5b3UKPiBjb252ZXJ0IHRoZSBhYm92ZQo+IHRvIGRpcmVjdCByZXR1cm5zLCB0aGlz IGNhbiBiZWNvbWUgcmV0dXJuIC1FVElNRURPVVQ7Cj4gCkZpeGVkIGluIFYyLgo+IEkgdGhpbmsg eW91IHNob3VsZCBhbHNvIGRyb3AgdGhlIG51bWJlciBvZiByZXRyaWVzIGRyYXN0aWNhbGx5Lgo+ IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2N0cmxfbGlua190cmFpbl8xKHN0cnVjdCBk cF9jdHJsX3ByaXZhdGUgKmN0cmwpCj4+ICt7Cj4+ICsJaW50IHRyaWVzLCBvbGRfdl9sZXZlbCwg cmV0ID0gMDsKPj4gKwl1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsKPj4gKwlp bnQgY29uc3QgbWF4aW11bV9yZXRyaWVzID0gNTsKPj4gKwo+PiArCWRwX2N0cmxfc3RhdGVfY3Ry bChjdHJsLCAwKTsKPj4gKwkvKiBNYWtlIHN1cmUgdG8gY2xlYXIgdGhlIGN1cnJlbnQgcGF0dGVy biBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgb25lIAo+PiAqLwo+PiArCXdtYigpOwo+PiArCj4+ICsJ Y3RybC0+Y2F0YWxvZy0+c2V0X3BhdHRlcm4oY3RybC0+Y2F0YWxvZywgMHgwMSk7Cj4gCj4gI2Rl ZmluZSB0aGF0IGJpdCBwbGVhc2UKPiAKRml4ZWQgaW4gVjIuCgo+PiArCWRwX2N0cmxfdHJhaW5f cGF0dGVybl9zZXQoY3RybCwgRFBfVFJBSU5JTkdfUEFUVEVSTl8xIHwKPj4gKwkJRFBfTElOS19T Q1JBTUJMSU5HX0RJU0FCTEUpOyAvKiB0cmFpbl8xICovCj4gCj4gdGhlIHRyYWluXzEgY29tbWVu dCBpc24ndCBuZWVkZWQuCj4gCkZpeGVkIGluIFYyLgoKPj4gKwlkcF9jdHJsX3VwZGF0ZV92eF9w eChjdHJsKTsKPj4gKwo+PiArCXRyaWVzID0gMDsKPj4gKwlvbGRfdl9sZXZlbCA9IGN0cmwtPmxp bmstPnBoeV9wYXJhbXMudl9sZXZlbDsKPj4gKwl3aGlsZSAoMSkgewo+IAo+IEluc3RlYWQgb2Yg dW5ib3VuZGVkLCB0aGlzIHNob3VsZCBiZToKPiAgICAgICAgIGZvciAodHJpZXMgPSAwOyB0cmll cyA8IG1heGltdW1fcmV0cmllczsgdHJpZXMrKykgewo+IApGaXhlZCBpbiB2Mi4KCj4gWW91J2xs IG5lZWQgdG8gcy9icmVhay9yZXR1cm4gcmV0LyBpbiB0aGUgcmVzdCBvZiB0aGUgbG9vcCBhbmQg bW92ZSB0aGUgCj4gdGltZW91dAo+IGVycm9yIHRvIHRoZSBib3R0b20gb2YgdGhlIGZ1bmN0aW9u Cj4gCj4+ICsJCWRybV9kcF9saW5rX3RyYWluX2Nsb2NrX3JlY292ZXJ5X2RlbGF5KGN0cmwtPnBh bmVsLT5kcGNkKTsKPj4gKwo+PiArCQlyZXQgPSBkcF9jdHJsX3JlYWRfbGlua19zdGF0dXMoY3Ry bCwgbGlua19zdGF0dXMpOwo+PiArCQlpZiAocmV0KQo+PiArCQkJYnJlYWs7Cj4+ICsKPj4gKwkJ aWYgKGRybV9kcF9jbG9ja19yZWNvdmVyeV9vayhsaW5rX3N0YXR1cywKPj4gKwkJCWN0cmwtPmxp bmstPmxpbmtfcGFyYW1zLmxhbmVfY291bnQpKSB7Cj4+ICsJCQlicmVhazsKPj4gKwkJfQo+PiAr Cj4+ICsJCWlmIChjdHJsLT5saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwgPT0gRFBfTElOS19WT0xU QUdFX01BWCkgewo+IAo+IFNpbmNlIERQX0xJTktfVk9MVEFHRV9NQVggPT0gRFBfTElOS19WT0xU QUdFX0xFVkVMXzIsIHlvdSdsbCBlbmQgdXAgbm90IAo+IHJldHJ5aW5nCj4gTEVWRUxfMiBhdCBh bGwuCj4gCldpbGwgZm9sbG93IHVwIG9uIHRoaXMgYW5kIGZpeCBpdCBpbiBWMy4KCj4+ICsJCQlw cl9lcnJfcmF0ZWxpbWl0ZWQoIm1heCB2X2xldmVsIHJlYWNoZWRcbiIpOwo+PiArCQkJcmV0ID0g LUVBR0FJTjsKPj4gKwkJCWJyZWFrOwo+PiArCQl9Cj4+ICsKPj4gKwkJaWYgKG9sZF92X2xldmVs ID09IGN0cmwtPmxpbmstPnBoeV9wYXJhbXMudl9sZXZlbCkgewo+PiArCQkJdHJpZXMrKzsKPj4g KwkJCWlmICh0cmllcyA+PSBtYXhpbXVtX3JldHJpZXMpIHsKPj4gKwkJCQlwcl9lcnIoIm1heCB0 cmllcyByZWFjaGVkXG4iKTsKPj4gKwkJCQlyZXQgPSAtRVRJTUVET1VUOwo+PiArCQkJCWJyZWFr Owo+PiArCQkJfQo+PiArCQl9IGVsc2Ugewo+PiArCQkJdHJpZXMgPSAwOwo+PiArCQkJb2xkX3Zf bGV2ZWwgPSBjdHJsLT5saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWw7Cj4+ICsJCX0KPj4gKwo+PiAr CQlwcl9kZWJ1ZygiY2xvY2sgcmVjb3Zlcnkgbm90IGRvbmUsIGFkanVzdGluZyB2eCBweFxuIik7 Cj4+ICsKPj4gKwkJY3RybC0+bGluay0+YWRqdXN0X2xldmVscyhjdHJsLT5saW5rLCBsaW5rX3N0 YXR1cyk7Cj4+ICsJCWRwX2N0cmxfdXBkYXRlX3Z4X3B4KGN0cmwpOwo+PiArCX0KPj4gKwo+PiAr CXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfY3RybF9saW5rX3JhdGVf ZG93bl9zaGlmdChzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQo+PiArewo+PiArCWludCBy ZXQgPSAwOwo+PiArCj4+ICsJaWYgKCFjdHJsKQo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+ PiArCXN3aXRjaCAoY3RybC0+bGluay0+bGlua19wYXJhbXMuYndfY29kZSkgewo+PiArCWNhc2Ug RFBfTElOS19CV184XzE6Cj4+ICsJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUgPSBE UF9MSU5LX0JXXzVfNDsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBEUF9MSU5LX0JXXzVfNDoKPj4g KwkJY3RybC0+bGluay0+bGlua19wYXJhbXMuYndfY29kZSA9IERQX0xJTktfQldfMl83Owo+PiAr CQlicmVhazsKPj4gKwljYXNlIERQX0xJTktfQldfMl83Ogo+PiArCWNhc2UgRFBfTElOS19CV18x XzYyOgo+PiArCWRlZmF1bHQ6Cj4+ICsJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUg PSBEUF9MSU5LX0JXXzFfNjI7Cj4+ICsJCWJyZWFrOwo+PiArCX07Cj4+ICsKPj4gKwlwcl9kZWJ1 ZygibmV3IGJ3IGNvZGU9MHgleFxuIiwgY3RybC0+bGluay0+bGlua19wYXJhbXMuYndfY29kZSk7 Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jdHJs X2NsZWFyX3RyYWluaW5nX3BhdHRlcm4oc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAKPj4gKmN0cmwp Cj4+ICt7Cj4+ICsJZHBfY3RybF90cmFpbl9wYXR0ZXJuX3NldChjdHJsLCAwKTsKPiAKPiAKPiBE UF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUKPiAKPiAKRml4ZWQgaW4gVjIuCgo+PiArCWRybV9k cF9saW5rX3RyYWluX2NoYW5uZWxfZXFfZGVsYXkoY3RybC0+cGFuZWwtPmRwY2QpOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IGRwX2N0cmxfbGlua190cmFpbmluZ18yKHN0cnVjdCBkcF9jdHJs X3ByaXZhdGUgKmN0cmwpCj4+ICt7Cj4+ICsJaW50IHRyaWVzID0gMCwgcmV0ID0gMDsKPj4gKwlj aGFyIHBhdHRlcm47Cj4+ICsJaW50IGNvbnN0IG1heGltdW1fcmV0cmllcyA9IDU7Cj4+ICsJdTgg bGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV07Cj4+ICsKPj4gKwlkcF9jdHJsX3N0YXRl X2N0cmwoY3RybCwgMCk7Cj4+ICsJLyogTWFrZSBzdXJlIHRvIGNsZWFyIHRoZSBjdXJyZW50IHBh dHRlcm4gYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IG9uZSAKPj4gKi8KPj4gKwl3bWIoKTsKPj4gKwo+ PiArCWlmIChkcm1fZHBfdHBzM19zdXBwb3J0ZWQoY3RybC0+cGFuZWwtPmRwY2QpKQo+PiArCQlw YXR0ZXJuID0gRFBfVFJBSU5JTkdfUEFUVEVSTl8zOwo+PiArCWVsc2UKPj4gKwkJcGF0dGVybiA9 IERQX1RSQUlOSU5HX1BBVFRFUk5fMjsKPj4gKwo+PiArCWRwX2N0cmxfdXBkYXRlX3Z4X3B4KGN0 cmwpOwo+PiArCWN0cmwtPmNhdGFsb2ctPnNldF9wYXR0ZXJuKGN0cmwtPmNhdGFsb2csIHBhdHRl cm4pOwo+PiArCWRwX2N0cmxfdHJhaW5fcGF0dGVybl9zZXQoY3RybCwgcGF0dGVybiB8IAo+PiBE UF9SRUNPVkVSRURfQ0xPQ0tfT1VUX0VOKTsKPj4gKwo+PiArCWRvICB7Cj4gCj4gICAgICAgICBm b3IgKHRyaWVzID0gMDsgdHJpZXMgPCBtYXhpbXVtX3JldHJpZXM7IHRyaWVzKyspCj4gCkZpeGVk IGluIFYyLgoKPj4gKwkJZHJtX2RwX2xpbmtfdHJhaW5fY2hhbm5lbF9lcV9kZWxheShjdHJsLT5w YW5lbC0+ZHBjZCk7Cj4+ICsKPj4gKwkJcmV0ID0gZHBfY3RybF9yZWFkX2xpbmtfc3RhdHVzKGN0 cmwsIGxpbmtfc3RhdHVzKTsKPj4gKwkJaWYgKHJldCkKPj4gKwkJCWJyZWFrOwo+PiArCj4+ICsJ CWlmIChkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywKPj4gKwkJCWN0cmwtPmxpbmst PmxpbmtfcGFyYW1zLmxhbmVfY291bnQpKQo+PiArCQkJYnJlYWs7Cj4+ICsKPj4gKwkJaWYgKHRy aWVzID4gbWF4aW11bV9yZXRyaWVzKSB7Cj4+ICsJCQlyZXQgPSAtRVRJTUVET1VUOwo+PiArCQkJ YnJlYWs7Cj4+ICsJCX0KPj4gKwkJdHJpZXMrKzsKPj4gKwo+PiArCQljdHJsLT5saW5rLT5hZGp1 c3RfbGV2ZWxzKGN0cmwtPmxpbmssIGxpbmtfc3RhdHVzKTsKPj4gKwkJZHBfY3RybF91cGRhdGVf dnhfcHgoY3RybCk7Cj4+ICsJfSB3aGlsZSAoMSk7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2N0cmxfbGlua190cmFpbihzdHJ1Y3QgZHBfY3RybF9w cml2YXRlICpjdHJsKQo+PiArewo+PiArCWludCByZXQgPSAwOwo+PiArCXU4IGVuY29kaW5nID0g MHgxOwo+IAo+IERQX1NFVF9BTlNJXzhCMTBCCj4gCkZpeGVkIGluIFYyLgoKPj4gKwlzdHJ1Y3Qg ZHJtX2RwX2xpbmsgbGlua19pbmZvID0gezB9Owo+PiArCj4+ICsJY3RybC0+bGluay0+cGh5X3Bh cmFtcy5wX2xldmVsID0gMDsKPj4gKwljdHJsLT5saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwgPSAw Owo+PiArCj4+ICsJZHBfY3RybF9jb25maWdfY3RybChjdHJsKTsKPj4gKwo+PiArCWxpbmtfaW5m by5udW1fbGFuZXMgPSBjdHJsLT5saW5rLT5saW5rX3BhcmFtcy5sYW5lX2NvdW50Owo+PiArCWxp bmtfaW5mby5yYXRlID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKAo+PiArCQljdHJsLT5s aW5rLT5saW5rX3BhcmFtcy5id19jb2RlKTsKPj4gKwlsaW5rX2luZm8uY2FwYWJpbGl0aWVzID0g Y3RybC0+cGFuZWwtPmxpbmtfaW5mby5jYXBhYmlsaXRpZXM7Cj4gCj4gRHJvcCB0aGUgaGFuZC1y b2xsZWQgY3RybC0+cGFuZWwtPmxpbmtfaW5mbyBhbmQgdXNlIGRybV9kcF9saW5rX3Byb2JlIAo+ IHRvIGZpbGwgaW4KPiBkcm1fZHBfbGluay4KPiAKRml4ZWQgaW4gVjIuCgo+PiArCj4+ICsJZHJt X2RwX2xpbmtfY29uZmlndXJlKGN0cmwtPmF1eC0+ZHJtX2F1eCwgJmxpbmtfaW5mbyk7Cj4+ICsJ ZHJtX2RwX2RwY2Rfd3JpdGUoY3RybC0+YXV4LT5kcm1fYXV4LCAKPj4gRFBfTUFJTl9MSU5LX0NI QU5ORUxfQ09ESU5HX1NFVCwKPj4gKwkJCQkmZW5jb2RpbmcsIDEpOwo+PiArCj4+ICsJcmV0ID0g ZHBfY3RybF9saW5rX3RyYWluXzEoY3RybCk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlwcl9lcnIo ImxpbmsgdHJhaW5pbmcgIzEgZmFpbGVkXG4iKTsKPiAKPiBwcmludCByZXQKPiAKRml4ZWQgaW4g VjIuCgo+PiArCQlnb3RvIGVuZDsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBwcmludCBzdWNjZXNzIGlu Zm8gYXMgdGhpcyBpcyBhIHJlc3VsdCBvZiB1c2VyIGluaXRpYXRlZCBhY3Rpb24gCj4+ICovCj4+ ICsJcHJfaW5mbygibGluayB0cmFpbmluZyAjMSBzdWNjZXNzZnVsXG4iKTsKPiAKPiB0aGlzIHNo b3VsZCBiZSBkZWJ1ZyBsb2dsZXZlbAo+IApGaXhlZCBpbiBWMi4KCj4+ICsKPj4gKwlyZXQgPSBk cF9jdHJsX2xpbmtfdHJhaW5pbmdfMihjdHJsKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCXByX2Vy cigibGluayB0cmFpbmluZyAjMiBmYWlsZWRcbiIpOwo+IAo+IHByaW50IHJldAo+IApGaXhlZCBp biB2Mi4KCj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCS8qIHByaW50IHN1Y2Nlc3Mg aW5mbyBhcyB0aGlzIGlzIGEgcmVzdWx0IG9mIHVzZXIgaW5pdGlhdGVkIGFjdGlvbiAKPj4gKi8K Pj4gKwlwcl9pbmZvKCJsaW5rIHRyYWluaW5nICMyIHN1Y2Nlc3NmdWxcbiIpOwo+IAo+IGRlYnVn IGxvZ2xldmVsCj4gCkZpeGVkIGluIFYyLgoKPj4gKwo+PiArZW5kOgo+PiArCWRwX2N0cmxfc3Rh dGVfY3RybChjdHJsLCAwKTsKPj4gKwkvKiBNYWtlIHN1cmUgdG8gY2xlYXIgdGhlIGN1cnJlbnQg cGF0dGVybiBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgb25lIAo+PiAqLwo+PiArCXdtYigpOwo+IAo+ IFNhbWUgY29tbWVudHMgcmU6IHdtYgo+IApGaXhlZCBpbiBWMi4KCj4+ICsKPj4gKwlkcF9jdHJs X2NsZWFyX3RyYWluaW5nX3BhdHRlcm4oY3RybCk7Cj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4g Kwo+PiArc3RhdGljIGludCBkcF9jdHJsX3NldHVwX21haW5fbGluayhzdHJ1Y3QgZHBfY3RybF9w cml2YXRlICpjdHJsLCBib29sIAo+PiB0cmFpbikKPj4gK3sKPj4gKwlib29sIG1haW5saW5rX3Jl YWR5ID0gZmFsc2U7Cj4+ICsJaW50IHJldCA9IDA7Cj4+ICsKPj4gKwljdHJsLT5jYXRhbG9nLT5t YWlubGlua19jdHJsKGN0cmwtPmNhdGFsb2csIHRydWUpOwo+PiArCj4+ICsJcmV0ID0gY3RybC0+ bGluay0+cHNtX2NvbmZpZyhjdHJsLT5saW5rLAo+PiArCQkmY3RybC0+cGFuZWwtPmxpbmtfaW5m bywgZmFsc2UpOwo+IAo+IFRoaXMgY2FuIGZpdCBvbiBvbmUgbGluZQo+IApGaXhlZCBpbiBWMi4K Cj4+ICsJaWYgKHJldCkKPj4gKwkJZ290byBlbmQ7Cj4gCj4gQWxsIG9mIHRoZSAiZ290byBlbmQi J3MgY2FuIGJlIHJlcGxhY2VkIHdpdGggInJldHVybiByZXQiLCB0aGVuIGRlbGV0ZSAKPiB0aGUg ZW5kCj4gbGFiZWwuCj4gCkZpeGVkIGluIFYyLgo+PiArCj4+ICsJaWYgKGN0cmwtPmxpbmstPnNp bmtfcmVxdWVzdCAmIERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOKQo+IAo+IFlvdSBzaG91 bGQgcmVhbGx5IHByb3RlY3Qgc2lua19yZXF1ZXN0IHdpdGggYSBsb2NrLCBpdCdzIHJhY3kuIEkn bSAKPiB0cnlpbmcKPiB0byBjYXRjaCB0aGUgcmFjZSBjb25kaXRpb25zIHdoaWxlIEkgcmV2aWV3 LCBidXQgSSdkIHVyZ2UgeW91IHRvIGF1ZGl0IAo+IHRoZQo+IGRyaXZlciBmb3Igb3RoZXIgcGxh Y2VzIHRoYXQgbmVlZCBsb2NraW5nLgo+IApzaW5rX3JlcXVlc3Qgd2lsbCBiZSBydW5uaW5nIGlu IGEgc2luZ2xlLXRocmVhZGVkIHdvcmsgcXVldWUuIAooImRybV9kcF9leHRjb24iIHdvcmsgcXVl dWUpLgpXZSBtaWdodCBub3QgbmVlZCBsb2NraW5nIGZvciBzaW5rX3JlcXVlc3QuCgo+PiArCQln b3RvIGVuZDsKPj4gKwo+PiArCWlmICghdHJhaW4pCj4+ICsJCWdvdG8gc2VuZF92aWRlbzsKPiAK PiBJbnN0ZWFkIG9mIGFkZGluZyB0aGUgbGFiZWwsIGp1c3Qgd3JhcCB0aGUgcmVzZXQgYW5kIHRy YWluIGNhbGxzIGluIGFuCj4gaWYgKHRyYWluKSB7fSBibG9jay4KPiAKV2lsbCBmaXggdGhpcyBp biBWMy4KCj4gCj4+ICsKPj4gKwkvKgo+PiArCSAqIEFzIHBhcnQgb2YgcHJldmlvdXMgY2FsbHMs IERQIGNvbnRyb2xsZXIgc3RhdGUgbWlnaHQgaGF2ZQo+PiArCSAqIHRyYW5zaXRpb25lZCB0byBQ VVNIX0lETEUuIEluIG9yZGVyIHRvIHN0YXJ0IHRyYW5zbWl0dGluZyBhIGxpbmsKPj4gKwkgKiB0 cmFpbmluZyBwYXR0ZXJuLCB3ZSBoYXZlIHRvIGZpcnN0IHRvIGEgRFAgc29mdHdhcmUgcmVzZXQu Cj4gCj4gIndlIGhhdmUgdG8gZmlyc3QgX2RvXyBhLi4uIgo+IApGaXhlZCBpbiBWMi4KCj4+ICsJ ICovCj4+ICsJY3RybC0+Y2F0YWxvZy0+cmVzZXQoY3RybC0+Y2F0YWxvZyk7Cj4+ICsKPj4gKwly ZXQgPSBkcF9jdHJsX2xpbmtfdHJhaW4oY3RybCk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJZ290byBl bmQ7Cj4+ICsKPj4gK3NlbmRfdmlkZW86Cj4+ICsJLyoKPj4gKwkgKiBTZXQgdXAgdHJhbnNmZXIg dW5pdCB2YWx1ZXMgYW5kIHNldCBjb250cm9sbGVyIHN0YXRlIHRvIHNlbmQKPj4gKwkgKiB2aWRl by4KPj4gKwkgKi8KPj4gKwlkcF9jdHJsX3NldHVwX3RyX3VuaXQoY3RybCk7Cj4+ICsJY3RybC0+ Y2F0YWxvZy0+c3RhdGVfY3RybChjdHJsLT5jYXRhbG9nLCBTVF9TRU5EX1ZJREVPKTsKPj4gKwo+ PiArCWRwX2N0cmxfd2FpdDR2aWRlb19yZWFkeShjdHJsKTsKPiAKPiBDaGVjayByZXR1cm4gdmFs dWUgcGxlYXNlCj4gCkZpeGVkIGluIHYyLgoKPj4gKwltYWlubGlua19yZWFkeSA9IGN0cmwtPmNh dGFsb2ctPm1haW5saW5rX3JlYWR5KGN0cmwtPmNhdGFsb2cpOwo+PiArCXByX2RlYnVnKCJtYWlu bGluayAlc1xuIiwgbWFpbmxpbmtfcmVhZHkgPyAiUkVBRFkiIDogIk5PVCBSRUFEWSIpOwo+PiAr ZW5kOgo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2N0cmxf c2V0X2Nsb2NrX3JhdGUoc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybCwKPj4gKwkJCQkgICBj aGFyICpuYW1lLCB1MzIgcmF0ZSkKPj4gK3sKPj4gKwl1MzIgbnVtID0gY3RybC0+cGFyc2VyLT5t cFtEUF9DVFJMX1BNXS5udW1fY2xrOwo+PiArCXN0cnVjdCBkc3NfY2xrICpjZmcgPSBjdHJsLT5w YXJzZXItPm1wW0RQX0NUUkxfUE1dLmNsa19jb25maWc7Cj4+ICsKPj4gKwl3aGlsZSAobnVtICYm IHN0cmNtcChjZmctPmNsa19uYW1lLCBuYW1lKSkgewo+PiArCQludW0tLTsKPj4gKwkJY2ZnKys7 Cj4+ICsJfQo+PiArCj4+ICsJcHJfZGVidWcoInNldHRpbmcgcmF0ZT0lZCBvbiBjbGs9JXNcbiIs IHJhdGUsIG5hbWUpOwo+PiArCj4+ICsJaWYgKG51bSkKPj4gKwkJY2ZnLT5yYXRlID0gcmF0ZTsK Pj4gKwllbHNlCj4+ICsJCXByX2VycigiJXMgY2xvY2sgY291bGQgbm90IGJlIHNldCB3aXRoIHJh dGUgJWRcbiIsIG5hbWUsIHJhdGUpOwo+PiArfQo+IAo+IEluc3RlYWQgb2YgZG9pbmcgYWxsIG9m IHRoaXMgd29yaywganVzdCBzdG9yZSBwb2ludGVycyB0byB0aGUgbGluayBhbmQgCj4gcGl4ZWwK PiBjbG9jayB3aGVuIHlvdSBwYXJzZSB0aGUgZHQuIFRoYXQgd2F5IHlvdSBjYW4ganVzdCBhY2Nl c3MgdGhlbSBkaXJlY3RseSAKPiBpbgo+IGRwX2N0cmxfZW5hYmxlX21haW5saW5rX2Nsb2Nrcy4K PiAKVGhlc2UgYXJlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIERQX0NPUkUgYW5kIERQX0NU UkwgY2xvY2tzLiBUaGlzIAp3aWxsIGhlbHAKZm9yIGFueSBmdXR1cmUgdXBncmFkZXMgd2hlcmUg dGhlIG9ubHkgY2hhbmdlIHdpbGwgYmUgZG9uZSBkdHNpIGFuZCAKbWF5YmUgbWlub3IKY2hhbmdl cyBpbiBEcml2ZXIgd2hlbiB3ZSBhZGQvcmVtb3ZlIGFueSBjbG9ja3MuCgo+PiArCj4+ICtzdGF0 aWMgaW50IGRwX2N0cmxfZW5hYmxlX21haW5saW5rX2Nsb2NrcyhzdHJ1Y3QgZHBfY3RybF9wcml2 YXRlIAo+PiAqY3RybCkKPj4gK3sKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwo+PiArCWN0cmwtPnBv d2VyLT5zZXRfcGl4ZWxfY2xrX3BhcmVudChjdHJsLT5wb3dlcik7Cj4+ICsKPj4gKwlkcF9jdHJs X3NldF9jbG9ja19yYXRlKGN0cmwsICJjdHJsX2xpbmtfY2xrIiwKPj4gKwkJZHJtX2RwX2J3X2Nv ZGVfdG9fbGlua19yYXRlKGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUpKTsKPj4gKwo+ PiArCWRwX2N0cmxfc2V0X2Nsb2NrX3JhdGUoY3RybCwgImN0cmxfcGl4ZWxfY2xrIiwgY3RybC0+ cGl4ZWxfcmF0ZSk7Cj4+ICsKPj4gKwlyZXQgPSBjdHJsLT5wb3dlci0+Y2xrX2VuYWJsZShjdHJs LT5wb3dlciwgRFBfQ1RSTF9QTSwgdHJ1ZSk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlwcl9lcnIo IlVuYWJsZWQgdG8gc3RhcnQgbGluayBjbG9ja3NcbiIpOwo+PiArCQlyZXQgPSAtRUlOVkFMOwo+ PiArCX0KPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBf Y3RybF9kaXNhYmxlX21haW5saW5rX2Nsb2NrcyhzdHJ1Y3QgZHBfY3RybF9wcml2YXRlIAo+PiAq Y3RybCkKPj4gK3sKPj4gKwlyZXR1cm4gY3RybC0+cG93ZXItPmNsa19lbmFibGUoY3RybC0+cG93 ZXIsIERQX0NUUkxfUE0sIGZhbHNlKTsKPj4gK30KPiAKPiBUaGlzIGZ1bmN0aW9uIGlzbid0IG5l Y2VzYXJ5IChldmVuIGxlc3Mgc28gd2hlbiBhbGwgb2YgdGhlIGNhdGFsb2cgCj4gYWJzdHJhY3Rp b25zCj4gYXJlIGdvbmUpLgo+IApGaXhlZCBpbiBWMi4KCj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBf Y3RybF9ob3N0X2luaXQoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwsIGJvb2wgZmxpcCkKPj4gK3sK Pj4gKwlzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsOwo+PiArCXN0cnVjdCBkcF9jYXRhbG9n X2N0cmwgKmNhdGFsb2c7Cj4+ICsKPj4gKwlpZiAoIWRwX2N0cmwpIHsKPj4gKwkJcHJfZXJyKCJJ bnZhbGlkIGlucHV0IGRhdGFcbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsK Pj4gKwljdHJsID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUs IGRwX2N0cmwpOwo+PiArCj4+ICsJY3RybC0+b3JpZW50YXRpb24gPSBmbGlwOwo+PiArCWNhdGFs b2cgPSBjdHJsLT5jYXRhbG9nOwo+PiArCj4+ICsJY2F0YWxvZy0+dXNiX3Jlc2V0KGN0cmwtPmNh dGFsb2csIGZsaXApOwo+PiArCWNhdGFsb2ctPnBoeV9yZXNldChjdHJsLT5jYXRhbG9nKTsKPj4g KwljYXRhbG9nLT5lbmFibGVfaXJxKGN0cmwtPmNhdGFsb2csIHRydWUpOwo+PiArCj4+ICsJcmV0 dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogZHBfY3RybF9ob3N0X2RlaW5pdCgpIC0g VW5pbml0aWFsaXplIERQIGNvbnRyb2xsZXIKPj4gKyAqIEBjdHJsOiBEaXNwbGF5IFBvcnQgRHJp dmVyIGRhdGEKPj4gKyAqCj4+ICsgKiBQZXJmb3JtIHJlcXVpcmVkIHN0ZXBzIHRvIHVuaW5pdGlh bGl6ZSBEUCBjb250cm9sbGVyCj4+ICsgKiBhbmQgaXRzIHJlc291cmNlcy4KPj4gKyAqLwo+PiAr c3RhdGljIHZvaWQgZHBfY3RybF9ob3N0X2RlaW5pdChzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCkK Pj4gK3sKPj4gKwlzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsOwo+PiArCj4+ICsJaWYgKCFk cF9jdHJsKSB7Cj4+ICsJCXByX2VycigiSW52YWxpZCBpbnB1dCBkYXRhXG4iKTsKPj4gKwkJcmV0 dXJuOwo+PiArCX0KPj4gKwo+PiArCWN0cmwgPSBjb250YWluZXJfb2YoZHBfY3RybCwgc3RydWN0 IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7Cj4+ICsKPj4gKwljdHJsLT5jYXRhbG9nLT5lbmFi bGVfaXJxKGN0cmwtPmNhdGFsb2csIGZhbHNlKTsKPj4gKwo+PiArCXByX2RlYnVnKCJIb3N0IGRl aW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGJvb2wg ZHBfY3RybF91c2VfZml4ZWRfbnZpZChzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsKQo+PiAr ewo+PiArCXU4ICpkcGNkID0gY3RybC0+cGFuZWwtPmRwY2Q7Cj4+ICsKPj4gKwkvKgo+PiArCSAq IEZvciBiZXR0ZXIgaW50ZXJvcCBleHBlcmllbmNlLCB1c2VkIGEgZml4ZWQgTlZJRD0weDgwMDAK Pj4gKwkgKiB3aGVuZXZlciBjb25uZWN0ZWQgdG8gYSBWR0EgZG9uZ2xlIGRvd25zdHJlYW0uCj4+ ICsJICovCj4+ICsJaWYgKGRwY2RbRFBfRE9XTlNUUkVBTVBPUlRfUFJFU0VOVF0gJiBEUF9EV05f U1RSTV9QT1JUX1BSRVNFTlQpIHsKPj4gKwkJdTggdHlwZSA9IGRwY2RbRFBfRE9XTlNUUkVBTVBP UlRfUFJFU0VOVF0gJgo+PiArCQkJRFBfRFdOX1NUUk1fUE9SVF9UWVBFX01BU0s7Cj4+ICsJCWlm ICh0eXBlID09IERQX0RXTl9TVFJNX1BPUlRfVFlQRV9BTkFMT0cpCj4+ICsJCQlyZXR1cm4gdHJ1 ZTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gZmFsc2U7Cj4+ICt9Cj4gCj4gRm9yIHRoaXMsIHlv dSBzaG91bGQgdXNlIHRoZSBEUF9EUENEX1FVSVJLX0NPTlNUQU5UX04gcXVpcmsgYW5kCj4gZHJt X2RwX2hhc19xdWlyaygpIGluc3RlYWQuCj4gCj4gCldpbGwgZm9sbG93IHVwIG9uIHRoaXMgaW4g VjMuCgo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2N0cmxfbGlua19tYWludGVuYW5jZShzdHJ1Y3Qg ZHBfY3RybF9wcml2YXRlICpjdHJsKQo+PiArewo+PiArCWludCByZXQgPSAwOwo+PiArCj4+ICsJ Y3RybC0+ZHBfY3RybC5wdXNoX2lkbGUoJmN0cmwtPmRwX2N0cmwpOwo+PiArCWN0cmwtPmRwX2N0 cmwucmVzZXQoJmN0cmwtPmRwX2N0cmwpOwo+PiArCj4+ICsJY3RybC0+cGl4ZWxfcmF0ZSA9IGN0 cmwtPnBhbmVsLT5waW5mby5waXhlbF9jbGtfa2h6Owo+PiArCj4+ICsJZG8gewo+PiArCQlpZiAo cmV0ID09IC1FQUdBSU4pIHsKPj4gKwkJCS8qIHRyeSB3aXRoIGxvd2VyIGxpbmsgcmF0ZSAqLwo+ PiArCQkJZHBfY3RybF9saW5rX3JhdGVfZG93bl9zaGlmdChjdHJsKTsKPj4gKwo+PiArCQkJY3Ry bC0+Y2F0YWxvZy0+bWFpbmxpbmtfY3RybChjdHJsLT5jYXRhbG9nLCBmYWxzZSk7Cj4+ICsJCX0K Pj4gKwo+PiArCQljdHJsLT5jYXRhbG9nLT5waHlfbGFuZV9jZmcoY3RybC0+Y2F0YWxvZywKPj4g KwkJCWN0cmwtPm9yaWVudGF0aW9uLCBjdHJsLT5saW5rLT5saW5rX3BhcmFtcy5sYW5lX2NvdW50 KTsKPj4gKwo+PiArCQkvKgo+PiArCQkgKiBEaXNhYmxlIGFuZCByZS1lbmFibGUgdGhlIG1haW5s aW5rIGNsb2NrIHNpbmNlIHRoZQo+PiArCQkgKiBsaW5rIGNsb2NrIG1pZ2h0IGhhdmUgYmVlbiBh ZGp1c3RlZCBhcyBwYXJ0IG9mIHRoZQo+PiArCQkgKiBsaW5rIG1haW50ZW5hbmNlLgo+PiArCQkg Ki8KPj4gKwkJZHBfY3RybF9kaXNhYmxlX21haW5saW5rX2Nsb2NrcyhjdHJsKTsKPiAKPiBSZXR1 cm4gdmFsdWUgc2hvdWxkIGJlIGNoZWNrZWQKPiAKPiAKRml4ZWQgaW4gVjIuCgo+IEJlbG93IHlv dSBoYXZlOgo+IAo+ICsJCS8qIGh3IHJlY29tbWVuZGVkIGRlbGF5IGJlZm9yZSByZS1lbmFibGlu ZyBjbG9ja3MgKi8KPiArCQltc2xlZXAoMjApOwo+IAo+IEJldHdlZW4gdGhlIGRpc2FibGUgYW5k IGVuYWJsZSwgc28geW91IHNob3VsZCBwcm9iYWJseSBoYXZlIHRoYXQgaGVyZSAKPiB0b28/Cj4g Cj4+ICsKPj4gKwkJcmV0ID0gZHBfY3RybF9lbmFibGVfbWFpbmxpbmtfY2xvY2tzKGN0cmwpOwo+ PiArCQlpZiAocmV0KQo+PiArCQkJY29udGludWU7Cj4gCj4gRG8geW91IHJlYWxseSB3YW50IHRv IGNvbnRpbnVlIGhlcmU/IFNlZW1zIGxpa2UgeW91IGNvdWxkIGdldCBpbnRvIGFuIAo+IGluZmlu aXRlCj4gbG9vcCBwcmV0dHkgZWFzaWx5IGluIHRoZSAtRUlOVkFMIGNhc2UuCj4gCj4+ICsKPj4g KwkJZHBfY3RybF9jb25maWd1cmVfc291cmNlX3BhcmFtcyhjdHJsKTsKPj4gKwo+PiArCQljdHJs LT5jYXRhbG9nLT5jb25maWdfbXNhKGN0cmwtPmNhdGFsb2csCj4+ICsJCQlkcm1fZHBfYndfY29k ZV90b19saW5rX3JhdGUoCj4+ICsJCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5id19jb2RlKSwK Pj4gKwkJCWN0cmwtPnBpeGVsX3JhdGUsIGRwX2N0cmxfdXNlX2ZpeGVkX252aWQoY3RybCkpOwo+ PiArCj4+ICsJCXJlaW5pdF9jb21wbGV0aW9uKCZjdHJsLT5pZGxlX2NvbXApOwo+IAo+IEFyZSB5 b3UgZ3VhcmFudGVlZCB0aGF0IHRoaXMgZG9lc24ndCByYWNlIHdpdGggb3RoZXIgaWRsZV9jb21w IHVzZXM/Cj4gCj4+ICsKPj4gKwkJcmV0ID0gZHBfY3RybF9zZXR1cF9tYWluX2xpbmsoY3RybCwg dHJ1ZSk7Cj4+ICsJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4pOwo+IAo+IFRoZSBkby93aGlsZSBp cyBhIGJpdCBhd2t3YXJkLCBlc3BlY2lhbGx5IHNpbmNlIGl0IHN0YXJ0cyB3aXRoIGEgCj4gY29u ZGl0aW9uYWwKPiBibG9jayB0aGF0IGNhbid0IHBvc3NpYmx5IGJlIHRydWUgb24gdGhlIGZpcnN0 IGl0ZXJhdGlvbi4gSG93IGFib3V0Ogo+IAo+IAlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCBtYXhf dHJpZXM7IHRyaWVzKyspIHsKPiAJCWN0cmwtPmNhdGFsb2ctPnBoeV9sYW5lX2NmZyhjdHJsLT5j YXRhbG9nLAo+IAkJCWN0cmwtPm9yaWVudGF0aW9uLCBjdHJsLT5saW5rLT5saW5rX3BhcmFtcy5s YW5lX2NvdW50KTsKPiAKPiAJCS8qCj4gCQkgKiBEaXNhYmxlIGFuZCByZS1lbmFibGUgdGhlIG1h aW5saW5rIGNsb2NrIHNpbmNlIHRoZQo+IAkJICogbGluayBjbG9jayBtaWdodCBoYXZlIGJlZW4g YWRqdXN0ZWQgYXMgcGFydCBvZiB0aGUKPiAJCSAqIGxpbmsgbWFpbnRlbmFuY2UuCj4gCQkgKi8K PiAJCXJldCA9IGRwX2N0cmxfZGlzYWJsZV9tYWlubGlua19jbG9ja3MoY3RybCk7Cj4gICAgICAg ICAgICAgICAgIGlmIChyZXQpCj4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsK PiAKPiAJCXJldCA9IGRwX2N0cmxfZW5hYmxlX21haW5saW5rX2Nsb2NrcyhjdHJsKTsKPiAJCWlm IChyZXQpCj4gCQkJcmV0dXJuIHJldDsKPiAKPiAJCWRwX2N0cmxfY29uZmlndXJlX3NvdXJjZV9w YXJhbXMoY3RybCk7Cj4gCj4gCQljdHJsLT5jYXRhbG9nLT5jb25maWdfbXNhKGN0cmwtPmNhdGFs b2csCj4gCQkJZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKAo+IAkJCWN0cmwtPmxpbmstPmxp bmtfcGFyYW1zLmJ3X2NvZGUpLAo+IAkJCWN0cmwtPnBpeGVsX3JhdGUsIGRwX2N0cmxfdXNlX2Zp eGVkX252aWQoY3RybCkpOwo+IAo+IAkJcmVpbml0X2NvbXBsZXRpb24oJmN0cmwtPmlkbGVfY29t cCk7Cj4gCj4gCQlyZXQgPSBkcF9jdHJsX3NldHVwX21haW5fbGluayhjdHJsLCB0cnVlKTsKPiAJ CWlmIChyZXQgIT0gLUVBR0FJTikKPiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0 Owo+IAo+ICAgICAgICAgICAgICAgICAvKiB0cnkgd2l0aCBsb3dlciBsaW5rIHJhdGUgKi8KPiAg ICAgICAgICAgICAgICAgZHBfY3RybF9saW5rX3JhdGVfZG93bl9zaGlmdChjdHJsKTsKPiAKPiAg ICAgICAgICAgICAgICAgY3RybC0+Y2F0YWxvZy0+bWFpbmxpbmtfY3RybChjdHJsLT5jYXRhbG9n LCBmYWxzZSk7Cj4gCX0KPiAKPiAgICAgICAgIHJldHVybiAtRVRJTUVET1VUOwo+IApJbXBsZW1l bnRlZCB0aGUgYWJvdmUgZnVuY3Rpb25hbGl0eSBpbiBWMi4KCj4gCj4gVGhlcmUncyBhIGxvdCBv ZiBzaW1pbGFyaXR5IGJldHdlZW4gdGhpcyBjb2RlIGFuZCBkcF9jdHJsX29uLiBJZiB0aGUgCj4g Y29kZSB3ZXJlCj4gc2hhcmVkLCB3ZSB3b3VsZG4ndCBoYXZlIHRoZSBtaXNzaW5nIDIwbXMgZGVs YXkgYWJvdmUuIFNvIGNhbiB5b3UgCj4gcGxlYXNlIHB1bGwKPiB0aGUgY29tbW9uIGJpdHMgd2hp Y2ggW3JlLV1pbml0aWFsaXplIHRoZSBsaW5rIGludG8gYSBoZWxwZXIgZnVuY3Rpb24gCj4gdGhh dCB5b3UKPiBjYWxsIGZyb20gYm90aCBmdW5jdGlvbnM/Cj4gCldpbGwgZm9sbG93IHVwIGFuZCBz ZWUgaWYgd2UgY2FuIGhhdmUgY29tbW9uIGhlbHBlciBmdW5jdGlvbi4gV2lsbCAKdXBkYXRlIGlu IFYzLgo+PiArCj4+ICsJcmV0dXJuIHJldDsKPiAKPiBJdCdzIG5pY2UgdGhhdCB3ZSByZXR1cm4g YSB2YWx1ZSBoZXJlLCBidXQgaXQncyBuZXZlciBjaGVja2VkIGJ5IG91ciAKPiBjYWxsZXJzIDoo Cj4gCldpbGwgZml4IHRoaXMgaW4gVjMuCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2N0 cmxfcHJvY2Vzc19waHlfdGVzdF9yZXF1ZXN0KHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUgCj4+ICpj dHJsKQo+PiArewo+PiArCWludCByZXQgPSAwOwo+PiArCj4+ICsJaWYgKCFjdHJsLT5saW5rLT5w aHlfcGFyYW1zLnBoeV90ZXN0X3BhdHRlcm5fc2VsKSB7Cj4+ICsJCXByX2RlYnVnKCJubyB0ZXN0 IHBhdHRlcm4gc2VsZWN0ZWQgYnkgc2lua1xuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsK Pj4gKwlwcl9kZWJ1Zygic3RhcnRcbiIpOwo+IAo+IFRoaXMgYW5kIHRoZSAiZW5kIiBkZWJ1ZyBz dGF0ZW1lbnRzIHNob3VsZCBiZSByZW1vdmVkCj4gCkZpeGVkIGluIHYyLgoKPj4gKwo+PiArCWN0 cmwtPmRwX2N0cmwucHVzaF9pZGxlKCZjdHJsLT5kcF9jdHJsKTsKPj4gKwkvKgo+PiArCSAqIFRo ZSBnbG9iYWwgcmVzZXQgd2lsbCBuZWVkIERQIGxpbmsgcmFsYXRlZCBjbG9ja3MgdG8gYmUKPiAK PiBzL3JlbGF0ZWQvcmFsYXRlZC8KPiAKPj4gKwkgKiBydW5uaW5nLiBBZGQgdGhlIGdsb2JhbCBy ZXNldCBqdXN0IGJlZm9yZSBkaXNhYmxpbmcgdGhlCj4+ICsJICogbGluayBjbG9ja3MgYW5kIGNv cmUgY2xvY2tzLgo+PiArCSAqLwo+PiArCWN0cmwtPmRwX2N0cmwucmVzZXQoJmN0cmwtPmRwX2N0 cmwpOwo+PiArCWN0cmwtPmRwX2N0cmwub2ZmKCZjdHJsLT5kcF9jdHJsKTsKPj4gKwo+PiArCXJl dCA9IGN0cmwtPmRwX2N0cmwub24oJmN0cmwtPmRwX2N0cmwpOwo+PiArCWlmIChyZXQpCj4+ICsJ CXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBEUCBjb250cm9sbGVyXG4iKTsKPiAKPiBQbGVhc2Ug cHJvcGFnYXRlIGVycm9ycyBpbnN0ZWFkIG9mIHN3YWxsb3dpbmcgdGhlbS4KPiAKV2lsbCBmaXgg dGhpcyBpbiBWMy4KCj4+ICsKPj4gKwlwcl9kZWJ1ZygiZW5kXG4iKTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIHZvaWQgZHBfY3RybF9zZW5kX3BoeV90ZXN0X3BhdHRlcm4oc3RydWN0IGRwX2N0cmxf cHJpdmF0ZSAKPj4gKmN0cmwpCj4+ICt7Cj4+ICsJYm9vbCBzdWNjZXNzID0gZmFsc2U7Cj4+ICsJ dTMyIHBhdHRlcm5fc2VudCA9IDB4MDsKPj4gKwl1MzIgcGF0dGVybl9yZXF1ZXN0ZWQgPSBjdHJs LT5saW5rLT5waHlfcGFyYW1zLnBoeV90ZXN0X3BhdHRlcm5fc2VsOwo+PiArCj4+ICsJcHJfZGVi dWcoInJlcXVlc3Q6ICVzXG4iLAo+PiArCQkJZHBfbGlua19nZXRfcGh5X3Rlc3RfcGF0dGVybihw YXR0ZXJuX3JlcXVlc3RlZCkpOwo+PiArCj4+ICsJY3RybC0+Y2F0YWxvZy0+dXBkYXRlX3Z4X3B4 KGN0cmwtPmNhdGFsb2csCj4+ICsJCQljdHJsLT5saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwsCj4+ ICsJCQljdHJsLT5saW5rLT5waHlfcGFyYW1zLnBfbGV2ZWwpOwo+PiArCWN0cmwtPmNhdGFsb2ct PnNlbmRfcGh5X3BhdHRlcm4oY3RybC0+Y2F0YWxvZywgcGF0dGVybl9yZXF1ZXN0ZWQpOwo+PiAr CWN0cmwtPmxpbmstPnNlbmRfdGVzdF9yZXNwb25zZShjdHJsLT5saW5rKTsKPj4gKwo+PiArCXBh dHRlcm5fc2VudCA9IGN0cmwtPmNhdGFsb2ctPnJlYWRfcGh5X3BhdHRlcm4oY3RybC0+Y2F0YWxv Zyk7Cj4+ICsKPj4gKwlzd2l0Y2ggKHBhdHRlcm5fc2VudCkgewo+PiArCWNhc2UgTVJfTElOS19U UkFJTklORzE6Cj4+ICsJCWlmIChwYXR0ZXJuX3JlcXVlc3RlZCA9PQo+PiArCQkJCURQX1RFU1Rf UEhZX1BBVFRFUk5fRDEwXzJfTk9fU0NSQU1CTElORykKPj4gKwkJCXN1Y2Nlc3MgPSB0cnVlOwo+ IAo+IAo+IHN1Y2Nlc3MgPSBwYXR0ZXJuX3JlcXVlc3RlZCA9PSBEUF9MSU5LX1FVQUxfUEFUVEVS Tl8xMV9EMTBfMjsKPiAKPiBTYW1lIGNhbiBiZSBkb25lIGJlbG93Lgo+IAo+IApGaXhlZCBpbiB2 Mi4KCj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgTVJfTElOS19TWU1CT0xfRVJNOgo+PiArCQlpZiAo KHBhdHRlcm5fcmVxdWVzdGVkID09Cj4+ICsJCQkJRFBfVEVTVF9QSFlfUEFUVEVSTl9TWU1CT0xf RVJSX01FQVNVUkVNRU5UX0NOVCkKPj4gKwkJCXx8IChwYXR0ZXJuX3JlcXVlc3RlZCA9PQo+PiAr CQkJCURQX1RFU1RfUEhZX1BBVFRFUk5fSEJSMl9DVFNfRVlFX1BBVFRFUk4pKQo+PiArCQkJc3Vj Y2VzcyA9IHRydWU7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgTVJfTElOS19QUkJTNzoKPj4gKwkJ aWYgKHBhdHRlcm5fcmVxdWVzdGVkID09IERQX1RFU1RfUEhZX1BBVFRFUk5fUFJCUzcpCj4+ICsJ CQlzdWNjZXNzID0gdHJ1ZTsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBNUl9MSU5LX0NVU1RPTTgw Ogo+PiArCQlpZiAocGF0dGVybl9yZXF1ZXN0ZWQgPT0KPj4gKwkJCQlEUF9URVNUX1BIWV9QQVRU RVJOXzgwX0JJVF9DVVNUT01fUEFUVEVSTikKPj4gKwkJCXN1Y2Nlc3MgPSB0cnVlOwo+PiArCQli cmVhazsKPj4gKwlkZWZhdWx0Ogo+PiArCQlzdWNjZXNzID0gZmFsc2U7Cj4+ICsJCXJldHVybjsK Pj4gKwl9Cj4gCj4gSSBmZWVsIGxpa2UgeW91IHNob3VsZCByZXR1cm4gc3VjY2VzcyAob3IgYSBy ZXQpLiBBcyBpdCBpcywgdGhpcwo+IGRvZXNuJ3QgZG8gbXVjaC4KPiAKRml4ZWQgaW4gVjIuCgo+ PiArCj4+ICsJcHJfZGVidWcoIiVzOiAlc1xuIiwgc3VjY2VzcyA/ICJzdWNjZXNzIiA6ICJmYWls ZWQiLAo+PiArCQkJZHBfbGlua19nZXRfcGh5X3Rlc3RfcGF0dGVybihwYXR0ZXJuX3JlcXVlc3Rl ZCkpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jdHJsX2hhbmRsZV9zaW5rX3JlcXVl c3Qoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2N0cmxfcHJp dmF0ZSAqY3RybDsKPj4gKwl1MzIgc2lua19yZXF1ZXN0ID0gMHgwOwo+PiArCj4+ICsJaWYgKCFk cF9jdHJsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybjsK Pj4gKwl9Cj4+ICsKPj4gKwljdHJsID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9j dHJsX3ByaXZhdGUsIGRwX2N0cmwpOwo+PiArCXNpbmtfcmVxdWVzdCA9IGN0cmwtPmxpbmstPnNp bmtfcmVxdWVzdDsKPj4gKwo+PiArCWlmIChzaW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJTktfUEhZ X1RFU1RfUEFUVEVSTikgewo+PiArCQlwcl9pbmZvKCJQSFlfVEVTVF9QQVRURVJOIHJlcXVlc3Rc biIpOwo+IAo+IERvd25ncmFkZSB0byBERUJVRyBsZXZlbCBwbGVhc2UKPiAKRml4ZWQgaW4gdjIu Cgo+PiArCQlkcF9jdHJsX3Byb2Nlc3NfcGh5X3Rlc3RfcmVxdWVzdChjdHJsKTsKPj4gKwl9Cj4+ ICsKPj4gKwlpZiAoc2lua19yZXF1ZXN0ICYgRFBfTElOS19TVEFUVVNfVVBEQVRFRCkKPj4gKwkJ ZHBfY3RybF9saW5rX21haW50ZW5hbmNlKGN0cmwpOwo+IAo+IENoZWNrIHJldHVybiB2YWx1ZQo+ IAo+PiArCj4+ICsJaWYgKHNpbmtfcmVxdWVzdCAmIERQX1RFU1RfTElOS19UUkFJTklORykgewo+ PiArCQljdHJsLT5saW5rLT5zZW5kX3Rlc3RfcmVzcG9uc2UoY3RybC0+bGluayk7Cj4+ICsJCWRw X2N0cmxfbGlua19tYWludGVuYW5jZShjdHJsKTsKPiAKPiBDaGVjayByZXR1cm4gdmFsdWUKPiAK Pj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2N0cmxfcmVzZXQoc3RydWN0IGRw X2N0cmwgKmRwX2N0cmwpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsK Pj4gKwo+PiArCWlmICghZHBfY3RybCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4i KTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWN0cmwgPSBjb250YWluZXJfb2YoZHBf Y3RybCwgc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSwgZHBfY3RybCk7Cj4+ICsJY3RybC0+Y2F0YWxv Zy0+cmVzZXQoY3RybC0+Y2F0YWxvZyk7Cj4+ICt9Cj4gCj4gSSB0aGluayB0aGlzIGZ1bmN0aW9u IGdvZXMgYXdheSB3aXRoIGFsbCBvZiB0aGUgY2F0YWxvZyBzdHVmZiByZW1vdmVkLgo+IApXaWxs IGZpeCB0aGlzIGluIFYzLgoKPj4gKwo+PiArc3RhdGljIGludCBkcF9jdHJsX29uKHN0cnVjdCBk cF9jdHJsICpkcF9jdHJsKQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX2N0 cmxfcHJpdmF0ZSAqY3RybDsKPj4gKwl1MzIgcmF0ZSA9IDA7Cj4+ICsJdTMyIGxpbmtfdHJhaW5f bWF4X3JldHJpZXMgPSAxMDA7Cj4gCj4gVGhpcyBhbW91bnQgaXMgZXhjZXNzaXZlLCA1IHRpbWVz IHNob3VsZCBzdWZmaWNlICh1bmxlc3MgeW91IGhhdmUgZGF0YSAKPiB0aGF0Cj4gc3VnZ2VzdHMg b3RoZXJ3aXNlKS4KPiAKPj4gKwl1MzIgY29uc3QgcGh5X2N0c19waXhlbF9jbGtfa2h6ID0gMTQ4 NTAwOwo+IAo+IFNob3VsZCB0aGlzIGJlIGEgI2RlZmluZSBpbiBkcm1fZHBfaGVscGVyPwo+IAo+ PiArCj4+ICsJaWYgKCFkcF9jdHJsKSB7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBl bmQ7Cj4+ICsJfQo+PiArCj4+ICsJY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1Y3Qg ZHBfY3RybF9wcml2YXRlLCBkcF9jdHJsKTsKPj4gKwo+PiArCWF0b21pY19zZXQoJmN0cmwtPmFi b3J0ZWQsIDApOwo+IAo+IFdoeSBpcyB0aGlzIG5lZWRlZCBvdmVyIGlzX2Nvbm5lY3RlZD8gSXQg c2VlbXMgbGlrZSBpZiB5b3UgaGFkIHByb3BlciAKPiBsb2NraW5nCj4gYXJvdW5kIGlzX2Nvbm5l Y3RlZCAod2hpY2ggSSB0aGluayBpcyBuZWNlc3NhcnkpLCB5b3UgY291bGQganVzdAo+IGFjcXVp cmUgdGhlIGxvY2sKPiBhbmQgdHJ5IHRoZSB0cmFpbmluZy4gSWYgaXQgZmFpbHMgYi9jIHNvbWVv bmUgdW5wbHVnZ2VkIHRoZSBjYWJsZSwgCj4gdGhhdCdzIHF1aXRlCj4gT2suCj4gCj4+ICsJcmF0 ZSA9IGN0cmwtPnBhbmVsLT5saW5rX2luZm8ucmF0ZTsKPj4gKwo+PiArCWN0cmwtPnBvd2VyLT5j bGtfZW5hYmxlKGN0cmwtPnBvd2VyLCBEUF9DT1JFX1BNLCB0cnVlKTsKPj4gKwljdHJsLT5jYXRh bG9nLT5ocGRfY29uZmlnKGN0cmwtPmNhdGFsb2csIHRydWUpOwo+PiArCj4+ICsJaWYgKGN0cmwt PmxpbmstPnNpbmtfcmVxdWVzdCAmIERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOKSB7Cj4+ ICsJCXByX2RlYnVnKCJ1c2luZyBwaHkgdGVzdCBsaW5rIHBhcmFtZXRlcnNcbiIpOwo+PiArCQlp ZiAoIWN0cmwtPnBhbmVsLT5waW5mby5waXhlbF9jbGtfa2h6KQo+PiArCQkJY3RybC0+cGl4ZWxf cmF0ZSA9IHBoeV9jdHNfcGl4ZWxfY2xrX2toejsKPj4gKwl9IGVsc2Ugewo+PiArCQljdHJsLT5s aW5rLT5saW5rX3BhcmFtcy5id19jb2RlID0KPj4gKwkJCWRybV9kcF9saW5rX3JhdGVfdG9fYndf Y29kZShyYXRlKTsKPj4gKwkJY3RybC0+bGluay0+bGlua19wYXJhbXMubGFuZV9jb3VudCA9Cj4+ ICsJCQljdHJsLT5wYW5lbC0+bGlua19pbmZvLm51bV9sYW5lczsKPj4gKwkJY3RybC0+cGl4ZWxf cmF0ZSA9IGN0cmwtPnBhbmVsLT5waW5mby5waXhlbF9jbGtfa2h6Owo+PiArCX0KPj4gKwo+PiAr CXByX2RlYnVnKCJid19jb2RlPSVkLCBsYW5lX2NvdW50PSVkLCBwaXhlbF9yYXRlPSVkXG4iLAo+ PiArCQljdHJsLT5saW5rLT5saW5rX3BhcmFtcy5id19jb2RlLAo+PiArCQljdHJsLT5saW5rLT5s aW5rX3BhcmFtcy5sYW5lX2NvdW50LCBjdHJsLT5waXhlbF9yYXRlKTsKPj4gKwo+PiArCWN0cmwt PmNhdGFsb2ctPnBoeV9sYW5lX2NmZyhjdHJsLT5jYXRhbG9nLAo+PiArCQkJY3RybC0+b3JpZW50 YXRpb24sIGN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmxhbmVfY291bnQpOwo+PiArCj4+ICsJcmMg PSBkcF9jdHJsX2VuYWJsZV9tYWlubGlua19jbG9ja3MoY3RybCk7Cj4+ICsJaWYgKHJjKQo+PiAr CQlnb3RvIGVuZDsKPj4gKwo+PiArCXJlaW5pdF9jb21wbGV0aW9uKCZjdHJsLT5pZGxlX2NvbXAp Owo+IAo+IEFyZSB5b3UgZ3VhcmFudGVlZCB0aGF0IHRoaXMgZG9lc24ndCByYWNlIHdpdGggb3Ro ZXIgaWRsZV9jb21wIHVzZXMgKG9yIAo+IG90aGVyCj4gZHBfY3RybF9vbiBjYWxsZXJzKT8KPiAK SSBkb24ndCB0aGluayB3ZSBuZWVkIHRvIGxvY2sgZm9yIGlkbGVfY29tcC4gTWVudGlvbmVkIG1v cmUgZGV0YWlscyBpbiAKZHBfY3RybF9wdXNoX2lkbGUoKS4KCj4+ICsKPj4gKwlkcF9jdHJsX2Nv bmZpZ3VyZV9zb3VyY2VfcGFyYW1zKGN0cmwpOwo+PiArCj4+ICsJd2hpbGUgKC0tbGlua190cmFp bl9tYXhfcmV0cmllcyAmJiAhYXRvbWljX3JlYWQoJmN0cmwtPmFib3J0ZWQpKSB7Cj4+ICsJCWN0 cmwtPmNhdGFsb2ctPmNvbmZpZ19tc2EoY3RybC0+Y2F0YWxvZywKPj4gKwkJCWRybV9kcF9id19j b2RlX3RvX2xpbmtfcmF0ZSgKPj4gKwkJCWN0cmwtPmxpbmstPmxpbmtfcGFyYW1zLmJ3X2NvZGUp LAo+PiArCQkJY3RybC0+cGl4ZWxfcmF0ZSwgZHBfY3RybF91c2VfZml4ZWRfbnZpZChjdHJsKSk7 Cj4+ICsKPj4gKwkJcmMgPSBkcF9jdHJsX3NldHVwX21haW5fbGluayhjdHJsLCB0cnVlKTsKPj4g KwkJaWYgKCFyYykKPj4gKwkJCWJyZWFrOwo+PiArCj4+ICsJCS8qIHRyeSB3aXRoIGxvd2VyIGxp bmsgcmF0ZSAqLwo+PiArCQlkcF9jdHJsX2xpbmtfcmF0ZV9kb3duX3NoaWZ0KGN0cmwpOwo+PiAr Cj4+ICsJCWN0cmwtPmNhdGFsb2ctPm1haW5saW5rX2N0cmwoY3RybC0+Y2F0YWxvZywgZmFsc2Up Owo+PiArCj4+ICsJCWRwX2N0cmxfZGlzYWJsZV9tYWlubGlua19jbG9ja3MoY3RybCk7Cj4gCj4g Q2hlY2sgcmV0dXJuIGNvZGUKPiAKPj4gKwkJLyogaHcgcmVjb21tZW5kZWQgZGVsYXkgYmVmb3Jl IHJlLWVuYWJsaW5nIGNsb2NrcyAqLwo+PiArCQltc2xlZXAoMjApOwo+PiArCj4+ICsJCWRwX2N0 cmxfZW5hYmxlX21haW5saW5rX2Nsb2NrcyhjdHJsKTsKPiAKPiBDaGVjayByZXR1cm4gY29kZQo+ IApXaWxsIGZpeCB0aGlzIGluIFYzLgoKPj4gKwl9Cj4gCj4gU2FtZSBjb21tZW50IGhlcmUgYXMg aW4gZHBfY3RybF9saW5rX21haW50ZW5hbmNlKCksIHdlIHNob3VsZCBwdWxsIG91dCAKPiB0aGUK PiBjb21tb24gY29kZSBhbmQgcHV0IGl0IGluIGEgaGVscGVyLgo+IAo+PiArCj4+ICsJaWYgKGN0 cmwtPmxpbmstPnNpbmtfcmVxdWVzdCAmIERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOKQo+ IAo+IFRoaXMgaXMgcmFjeSwgc2lua19yZXF1ZXN0IGNvdWxkIGNoYW5nZSBiZXR3ZWVuIHRoZSBj aGVjayBhYm92ZSBhbmQgCj4gaGVyZS4KPiAKU2lua19yZXF1ZXN0IGlzIGFjY2Vzc2VkIGluIHNp bmdsZSB0aHJlYWQgY29udGV4dC4KCj4+ICsJCWRwX2N0cmxfc2VuZF9waHlfdGVzdF9wYXR0ZXJu KGN0cmwpOwo+PiArCj4+ICsJcHJfZGVidWcoIkVuZC1cbiIpOwo+IAo+IFBsZWFzZSByZW1vdmUK PiAKRml4ZWQgaW4gVjIuCgo+PiArCj4+ICtlbmQ6Cj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgdm9pZCBkcF9jdHJsX29mZihzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCkKPj4g K3sKPj4gKwlzdHJ1Y3QgZHBfY3RybF9wcml2YXRlICpjdHJsOwo+PiArCj4+ICsJaWYgKCFkcF9j dHJsKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwljdHJsID0gY29udGFpbmVyX29mKGRwX2N0cmws IHN0cnVjdCBkcF9jdHJsX3ByaXZhdGUsIGRwX2N0cmwpOwo+PiArCj4+ICsJY3RybC0+Y2F0YWxv Zy0+bWFpbmxpbmtfY3RybChjdHJsLT5jYXRhbG9nLCBmYWxzZSk7Cj4+ICsJY3RybC0+Y2F0YWxv Zy0+cmVzZXQoY3RybC0+Y2F0YWxvZyk7Cj4+ICsKPj4gKwkvKiBNYWtlIHN1cmUgRFAgaXMgZGlz YWJsZWQgYmVmb3JlIGNsayBkaXNhYmxlICovCj4+ICsJd21iKCk7Cj4gCj4gcmVhZGwvd21iIG5p dAo+IApGaXhlZCBpbiBWMi4KCj4+ICsKPj4gKwlkcF9jdHJsX2Rpc2FibGVfbWFpbmxpbmtfY2xv Y2tzKGN0cmwpOwo+IAo+IENoZWNrIGFuZCBwcm9wYWdhdGUgcmV0dXJuIHZhbHVlCj4gCj4+ICsK Pj4gKwlwcl9kZWJ1ZygiRFAgb2ZmIGRvbmVcbiIpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9p ZCBkcF9jdHJsX2lzcihzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCkKPj4gK3sKPj4gKwlzdHJ1Y3Qg ZHBfY3RybF9wcml2YXRlICpjdHJsOwo+PiArCj4+ICsJaWYgKCFkcF9jdHJsKQo+PiArCQlyZXR1 cm47Cj4+ICsKPj4gKwljdHJsID0gY29udGFpbmVyX29mKGRwX2N0cmwsIHN0cnVjdCBkcF9jdHJs X3ByaXZhdGUsIGRwX2N0cmwpOwo+PiArCj4+ICsJY3RybC0+Y2F0YWxvZy0+Z2V0X2ludGVycnVw dChjdHJsLT5jYXRhbG9nKTsKPiAKPiBUaGlzIHNob3VsZCByZXR1cm4gdGhlIGlzciBpbnN0ZWFk IG9mIHN0b3JlIGl0IGluIGN0cmwtPmNhdGFsb2ctPmlzciwgCj4gc2luY2UgdGhhdAo+IGNvdWxk IHBvdGVudGlhbGx5IGJlIG92ZXJ3cml0dGVuIGFmdGVyIHRoaXMgZnVuY3Rpb24gYWNrcyB0aGUg Y3VycmVudAo+IGludGVycnVwdHMuCj4gCldpbGwgZml4IHRoaXMgaW4gVjMuCgo+IChBbHNvLCBp dCdzIG9ubHkgdXNlZCBpbiB0aGlzIGZ1bmN0aW9uLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gc3Rv cmUgCj4gaXQpLiBPbmUgeW91Cj4gcmVtb3ZlIHRoZSBjYXRhbG9nIGluZGlyZWN0aW9uLCBob3Bl ZnVsbHkgdGhlcmUgd2lsbCBiZSBhIGJ1bmNoIG9mIAo+IHRoZXNlIGNhc2VzCj4gdGhhdCBiZWNv bWUgY2xlYXIuCj4gCj4gCj4+ICsKPj4gKwlpZiAoY3RybC0+Y2F0YWxvZy0+aXNyICYgRFBfQ1RS TF9JTlRSX1JFQURZX0ZPUl9WSURFTykKPj4gKwkJZHBfY3RybF92aWRlb19yZWFkeShjdHJsKTsK Pj4gKwo+PiArCWlmIChjdHJsLT5jYXRhbG9nLT5pc3IgJiBEUF9DVFJMX0lOVFJfSURMRV9QQVRU RVJOX1NFTlQpCj4+ICsJCWRwX2N0cmxfaWRsZV9wYXR0ZXJuc19zZW50KGN0cmwpOwo+IAo+IEFz IG1lbnRpb25lZCBhYm92ZSwganVzdCBjYWxsIHRoZSBjb21wbGV0aW9ucyBkaXJlY3RseS4KPiAK Rml4ZWQgaW4gdjIuCgo+PiArfQo+PiArCj4+ICtzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybF9nZXQo c3RydWN0IGRwX2N0cmxfaW4gKmluKQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0 IGRwX2N0cmxfcHJpdmF0ZSAqY3RybDsKPj4gKwlzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybDsKPj4g Kwo+PiArCWlmICghaW4tPmRldiB8fCAhaW4tPnBhbmVsIHx8ICFpbi0+YXV4IHx8Cj4+ICsJICAg ICFpbi0+bGluayB8fCAhaW4tPmNhdGFsb2cpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0 XG4iKTsKPj4gKwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGVycm9yOwo+PiArCX0KPj4gKwo+ PiArCWN0cmwgPSBkZXZtX2t6YWxsb2MoaW4tPmRldiwgc2l6ZW9mKCpjdHJsKSwgR0ZQX0tFUk5F TCk7Cj4+ICsJaWYgKCFjdHJsKSB7Cj4+ICsJCXJjID0gLUVOT01FTTsKPj4gKwkJZ290byBlcnJv cjsKPj4gKwl9Cj4+ICsKPj4gKwlpbml0X2NvbXBsZXRpb24oJmN0cmwtPmlkbGVfY29tcCk7Cj4+ ICsJaW5pdF9jb21wbGV0aW9uKCZjdHJsLT52aWRlb19jb21wKTsKPj4gKwo+PiArCS8qIGluIHBh cmFtZXRlcnMgKi8KPj4gKwljdHJsLT5wYXJzZXIgICA9IGluLT5wYXJzZXI7Cj4+ICsJY3RybC0+ cGFuZWwgICAgPSBpbi0+cGFuZWw7Cj4+ICsJY3RybC0+cG93ZXIgICAgPSBpbi0+cG93ZXI7Cj4+ ICsJY3RybC0+YXV4ICAgICAgPSBpbi0+YXV4Owo+PiArCWN0cmwtPmxpbmsgICAgID0gaW4tPmxp bms7Cj4+ICsJY3RybC0+Y2F0YWxvZyAgPSBpbi0+Y2F0YWxvZzsKPj4gKwljdHJsLT5kZXYgICAg ICA9IGluLT5kZXY7Cj4+ICsKPj4gKwlkcF9jdHJsID0gJmN0cmwtPmRwX2N0cmw7Cj4+ICsKPj4g KwkvKiBvdXQgcGFyYW1ldGVycyAqLwo+PiArCWRwX2N0cmwtPmluaXQgICAgICA9IGRwX2N0cmxf aG9zdF9pbml0Owo+PiArCWRwX2N0cmwtPmRlaW5pdCAgICA9IGRwX2N0cmxfaG9zdF9kZWluaXQ7 Cj4+ICsJZHBfY3RybC0+b24gICAgICAgID0gZHBfY3RybF9vbjsKPj4gKwlkcF9jdHJsLT5vZmYg ICAgICAgPSBkcF9jdHJsX29mZjsKPj4gKwlkcF9jdHJsLT5wdXNoX2lkbGUgPSBkcF9jdHJsX3B1 c2hfaWRsZTsKPj4gKwlkcF9jdHJsLT5hYm9ydCAgICAgPSBkcF9jdHJsX2Fib3J0Owo+PiArCWRw X2N0cmwtPmlzciAgICAgICA9IGRwX2N0cmxfaXNyOwo+PiArCWRwX2N0cmwtPnJlc2V0CSAgID0g ZHBfY3RybF9yZXNldDsKPj4gKwlkcF9jdHJsLT5oYW5kbGVfc2lua19yZXF1ZXN0ID0gZHBfY3Ry bF9oYW5kbGVfc2lua19yZXF1ZXN0Owo+PiArCj4+ICsJcmV0dXJuIGRwX2N0cmw7Cj4+ICtlcnJv cjoKPj4gKwlyZXR1cm4gRVJSX1BUUihyYyk7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgZHBfY3RybF9w dXQoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2N0cmxfcHJp dmF0ZSAqY3RybDsKPj4gKwo+PiArCWlmICghZHBfY3RybCkKPj4gKwkJcmV0dXJuOwo+PiArCj4+ ICsJY3RybCA9IGNvbnRhaW5lcl9vZihkcF9jdHJsLCBzdHJ1Y3QgZHBfY3RybF9wcml2YXRlLCBk cF9jdHJsKTsKPj4gKwo+PiArCWRldm1fa2ZyZWUoY3RybC0+ZGV2LCBjdHJsKTsKPj4gK30KPiAK PiBPbmNlIGFnYWluLCB0aGVzZSBmdW5jdGlvbnMgY2FuIGJlIGRlbGV0ZWQuIEp1c3Qgc3RvcmUg dGhlIF9uZWNlc3NhcnlfIAo+IGRhdGEgaW4gYQo+IGNlbnRyYWwgc3RydWN0ICh3aXRoIHN1YnN0 cnVjdHMgYXMgbmVjZXNzYXJ5KSBhbmQgY2FsbCBmdW5jdGlvbnMgCj4gZGlyZWN0bHkuCj4gClJl bW92ZWQgYWxsIHRoZSBmdW5jdGlvbnMvZnVuY19wdHJzIGluIFYyIGFuZCBjYWxsaW5nIHRoZSBm dW5jdGlvbnMgCmRpcmVjdGx5LgoKPiAKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfY3RybC5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5oCj4+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjZhYjIyMWEKPj4gLS0tIC9k ZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuaAo+PiBAQCAt MCwwICsxLDUwIEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRoZSBM aW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIAo+PiByZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIAo+PiBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+PiArICogb25seSB2ZXJzaW9uIDIgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+ICsgKgo+PiArICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCj4+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+PiArICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKi8KPj4gKwo+PiArI2lmbmRl ZiBfRFBfQ1RSTF9IXwo+PiArI2RlZmluZSBfRFBfQ1RSTF9IXwo+PiArCj4+ICsjaW5jbHVkZSAi ZHBfYXV4LmgiCj4+ICsjaW5jbHVkZSAiZHBfcGFuZWwuaCIKPj4gKyNpbmNsdWRlICJkcF9saW5r LmgiCj4+ICsjaW5jbHVkZSAiZHBfcGFyc2VyLmgiCj4+ICsjaW5jbHVkZSAiZHBfcG93ZXIuaCIK Pj4gKyNpbmNsdWRlICJkcF9jYXRhbG9nLmgiCj4+ICsKPj4gK3N0cnVjdCBkcF9jdHJsIHsKPj4g KwlpbnQgKCppbml0KShzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCwgYm9vbCBmbGlwKTsKPj4gKwl2 b2lkICgqZGVpbml0KShzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCk7Cj4+ICsJaW50ICgqb24pKHN0 cnVjdCBkcF9jdHJsICpkcF9jdHJsKTsKPj4gKwl2b2lkICgqb2ZmKShzdHJ1Y3QgZHBfY3RybCAq ZHBfY3RybCk7Cj4+ICsJdm9pZCAoKnJlc2V0KShzdHJ1Y3QgZHBfY3RybCAqZHBfY3RybCk7Cj4+ ICsJdm9pZCAoKnB1c2hfaWRsZSkoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpOwo+PiArCXZvaWQg KCphYm9ydCkoc3RydWN0IGRwX2N0cmwgKmRwX2N0cmwpOwo+PiArCXZvaWQgKCppc3IpKHN0cnVj dCBkcF9jdHJsICpkcF9jdHJsKTsKPj4gKwl2b2lkICgqaGFuZGxlX3NpbmtfcmVxdWVzdCkoc3Ry dWN0IGRwX2N0cmwgKmRwX2N0cmwpOwo+PiArfTsKPiAKPiBTYW1lIGNvbW1lbnQgYXMgY2F0YWxv ZywgdGhlc2Ugc2hvdWxkIGp1c3QgYmUgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCAKPiBkaXJlY3Rs eS4KPiAKUmVtb3ZlZCB0aGVzZSBmdW5jdGlvbiBwdHJzIGluIFYyLgoKPj4gKwo+PiArc3RydWN0 IGRwX2N0cmxfaW4gewo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwlzdHJ1Y3QgZHBfcGFu ZWwgKnBhbmVsOwo+PiArCXN0cnVjdCBkcF9hdXggKmF1eDsKPj4gKwlzdHJ1Y3QgZHBfbGluayAq bGluazsKPj4gKwlzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXI7Cj4+ICsJc3RydWN0IGRwX3Bvd2Vy ICpwb3dlcjsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19jdHJsICpjYXRhbG9nOwo+PiArfTsKPiAK PiBUaGlzIHN0cnVjdCBpcyBub3QgbmVlZGVkLCBmdW5jdGlvbiBhcmd1bWVudHMgd29yayBqdXN0 IGFzIHdlbGwuCj4gCnJlbW92ZWQgaW4gVjIuCgo+PiArCj4+ICtzdHJ1Y3QgZHBfY3RybCAqZHBf Y3RybF9nZXQoc3RydWN0IGRwX2N0cmxfaW4gKmluKTsKPj4gK3ZvaWQgZHBfY3RybF9wdXQoc3Ry dWN0IGRwX2N0cmwgKmRwX2N0cmwpOwo+PiArCj4+ICsjZW5kaWYgLyogX0RQX0NUUkxfSF8gKi8K Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuYyAKPj4gYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2RlYnVnLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK Pj4gaW5kZXggMDAwMDAwMC4uNWMwYThjZQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfZGVidWcuYwo+PiBAQCAtMCwwICsxLDUwNyBAQAoKL3NuaXAK Cj4gCj4gZWRpZCwgaHBkLCBhbmQgY29ubmVjdGVkIGNhbiBhbGwgYmUgZGVsZXRlZC4gVGhleSdy ZSBwcm92aWRlZCBieSBjb3JlLgo+IAo+IEFGQUlDVCwgeW91IGNhbiBhbHNvIGluZmVyIHRoZSBp bmZvcm1hdGlvbiBmcm9tIGRwX2RlYnVnLCBzbyBJIHRoaW5rIAo+IHlvdSBjYW4KPiBqdXN0IGRy b3AgdGhpcyBlbnRpcmUgZmlsZS4KPiAKUmVtb3ZlZCBkcF9kZWJ1Zy5bY2hdIGluIFYyLgoKL3Nu aXAKCj4gCj4gRHJvcCB0aGlzIHRvbwo+IAo+PiArCj4+ICsjZW5kaWYgLyogX0RQX0RFQlVHX0hf ICovCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuYyAK Pj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuYwo+PiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi44Yzk4Mzk5Cj4+IC0tLSAvZGV2L251bGwKPj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMKPj4gQEAgLTAsMCArMSw5Nzcg QEAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5k YXRpb24uIEFsbCByaWdodHMgCj4+IHJlc2VydmVkLgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCj4+IG1v ZGlmeQo+PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4+ICsgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4g KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqLwo+PiArCj4+ICsjZGVmaW5lIHByX2ZtdChm bXQpCSJbZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19fCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4+ICsjaW5jbHVkZSA8bGlu dXgvdWFjY2Vzcy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KPj4gKyNpbmNsdWRl IDxsaW51eC9jb21wb25lbnQuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KPj4gKwo+ PiArI2luY2x1ZGUgIm1zbV9kcnYuaCIKPj4gKyNpbmNsdWRlICJkcF9leHRjb24uaCIKPj4gKyNp bmNsdWRlICJkcF9wYXJzZXIuaCIKPj4gKyNpbmNsdWRlICJkcF9wb3dlci5oIgo+PiArI2luY2x1 ZGUgImRwX2NhdGFsb2cuaCIKPj4gKyNpbmNsdWRlICJkcF9hdXguaCIKPj4gKyNpbmNsdWRlICJk cF9saW5rLmgiCj4+ICsjaW5jbHVkZSAiZHBfcGFuZWwuaCIKPj4gKyNpbmNsdWRlICJkcF9jdHJs LmgiCj4+ICsjaW5jbHVkZSAiZHBfZGlzcGxheS5oIgo+PiArI2luY2x1ZGUgImRwX2RybS5oIgo+ PiArI2luY2x1ZGUgImRwX2RlYnVnLmgiCj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgbXNtX2RwICpn X2RwX2Rpc3BsYXk7Cj4+ICsjZGVmaW5lIEhQRF9TVFJJTkdfU0laRSAzMAo+PiArCj4+ICtzdHJ1 Y3QgZHBfZGlzcGxheV9wcml2YXRlIHsKPj4gKwljaGFyICpuYW1lOwo+PiArCWludCBpcnE7Cj4+ ICsKPj4gKwkvKiBzdGF0ZSB2YXJpYWJsZXMgKi8KPj4gKwlib29sIGNvcmVfaW5pdGlhbGl6ZWQ7 Cj4+ICsJYm9vbCBwb3dlcl9vbjsKPj4gKwlib29sIGhwZF9pcnFfb247Cj4+ICsJYm9vbCBhdWRp b19zdXBwb3J0ZWQ7Cj4+ICsKPj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owo+PiAr CXN0cnVjdCBkZW50cnkgKnJvb3Q7Cj4+ICsJc3RydWN0IGNvbXBsZXRpb24gbm90aWZpY2F0aW9u X2NvbXA7Cj4+ICsKPj4gKwlzdHJ1Y3QgZHBfdXNicGQgICAqdXNicGQ7Cj4+ICsJc3RydWN0IGRw X3BhcnNlciAgKnBhcnNlcjsKPj4gKwlzdHJ1Y3QgZHBfcG93ZXIgICAqcG93ZXI7Cj4+ICsJc3Ry dWN0IGRwX2NhdGFsb2cgKmNhdGFsb2c7Cj4+ICsJc3RydWN0IGRwX2F1eCAgICAgKmF1eDsKPj4g KwlzdHJ1Y3QgZHBfbGluayAgICAqbGluazsKPj4gKwlzdHJ1Y3QgZHBfcGFuZWwgICAqcGFuZWw7 Cj4+ICsJc3RydWN0IGRwX2N0cmwgICAgKmN0cmw7Cj4+ICsJc3RydWN0IGRwX2RlYnVnICAgKmRl YnVnOwo+PiArCj4+ICsJc3RydWN0IGRwX3VzYnBkX2NiIHVzYnBkX2NiOwo+PiArCXN0cnVjdCBk cF9kaXNwbGF5X21vZGUgbW9kZTsKPj4gKwlzdHJ1Y3QgbXNtX2RwIGRwX2Rpc3BsYXk7Cj4+ICsK Pj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGRwX2R0X21h dGNoW10gPSB7Cj4+ICsJey5jb21wYXRpYmxlID0gInFjb20sZHAtZGlzcGxheSJ9LAo+PiArCXt9 Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaXJxcmV0dXJuX3QgZHBfZGlzcGxheV9pcnEoaW50IGly cSwgdm9pZCAqZGV2X2lkKQo+PiArewo+PiArCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRw ID0gZGV2X2lkOwo+PiArCj4+ICsJaWYgKCFkcCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgZGF0 YVxuIik7Cj4+ICsJCXJldHVybiBJUlFfTk9ORTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBEUCBjb250 cm9sbGVyIGlzciAqLwo+PiArCWRwLT5jdHJsLT5pc3IoZHAtPmN0cmwpOwo+PiArCj4+ICsJLyog RFAgYXV4IGlzciAqLwo+PiArCWRwLT5hdXgtPmlzcihkcC0+YXV4KTsKPj4gKwo+PiArCXJldHVy biBJUlFfSEFORExFRDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9kaXNwbGF5X2JpbmQo c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCj4+ICsJCQkgICB2b2lk ICpkYXRhKQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJp dmF0ZSAqZHA7Cj4+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKPj4gKwlzdHJ1Y3QgbXNtX2Ry bV9wcml2YXRlICpwcml2Owo+PiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19w bGF0Zm9ybV9kZXZpY2UoZGV2KTsKPj4gKwo+PiArCWlmICghZGV2IHx8ICFwZGV2IHx8ICFtYXN0 ZXIpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtKHMpLCBkZXYgJXBLLCBwZGV2ICVwSywg bWFzdGVyICVwS1xuIiwKPj4gKwkJCQlkZXYsIHBkZXYsIG1hc3Rlcik7Cj4+ICsJCXJjID0gLUVJ TlZBTDsKPj4gKwkJZ290byBlbmQ7Cj4+ICsJfQo+PiArCj4+ICsJZHJtID0gZGV2X2dldF9kcnZk YXRhKG1hc3Rlcik7Cj4+ICsJZHAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPj4gKwlp ZiAoIWRybSB8fCAhZHApIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtKHMpLCBkcm0gJXBL LCBkcCAlcEtcbiIsCj4+ICsJCQkJZHJtLCBkcCk7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJ Z290byBlbmQ7Cj4+ICsJfQo+PiArCj4+ICsJZHAtPmRwX2Rpc3BsYXkuZHJtX2RldiA9IGRybTsK Pj4gKwlwcml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPj4gKwlwcml2LT5kcCA9ICYoZHAtPmRwX2Rp c3BsYXkpOwo+PiArCj4+ICsJcmMgPSBkcC0+cGFyc2VyLT5wYXJzZShkcC0+cGFyc2VyKTsKPj4g KwlpZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJkZXZpY2UgdHJlZSBwYXJzaW5nIGZhaWxlZFxuIik7 Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCXJjID0gZHAtPmF1eC0+ZHJtX2F1eF9y ZWdpc3RlcihkcC0+YXV4KTsKPj4gKwlpZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJEUk0gRFAgQVVY IHJlZ2lzdGVyIGZhaWxlZFxuIik7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCXJj ID0gZHAtPnBvd2VyLT5wb3dlcl9jbGllbnRfaW5pdChkcC0+cG93ZXIpOwo+PiArCWlmIChyYykg ewo+PiArCQlwcl9lcnIoIlBvd2VyIGNsaWVudCBjcmVhdGUgZmFpbGVkXG4iKTsKPj4gKwkJZ290 byBlbmQ7Cj4+ICsJfQo+PiArCj4+ICtlbmQ6Cj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgdm9pZCBkcF9kaXNwbGF5X3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBkZXZpY2UgCj4+ICptYXN0ZXIsCj4+ICsJCQkgICAgICB2b2lkICpkYXRhKQo+PiArewo+PiAr CXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwOwo+PiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKPj4gKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKG1hc3Rlcik7Cj4+ICsJc3RydWN0IG1zbV9kcm1fcHJp dmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4+ICsKPj4gKwlpZiAoIWRldiB8fCAhcGRl dikgewo+PiArCQlwcl9lcnIoImludmFsaWQgcGFyYW0ocylcbiIpOwo+PiArCQlyZXR1cm47Cj4+ ICsJfQo+PiArCj4+ICsJZHAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPj4gKwlpZiAo IWRwKSB7Cj4+ICsJCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwo+PiArCQlyZXR1cm47Cj4+ ICsJfQo+PiArCj4+ICsJKHZvaWQpZHAtPnBvd2VyLT5wb3dlcl9jbGllbnRfZGVpbml0KGRwLT5w b3dlcik7Cj4+ICsJKHZvaWQpZHAtPmF1eC0+ZHJtX2F1eF9kZXJlZ2lzdGVyKGRwLT5hdXgpOwo+ PiArCXByaXYtPmRwID0gTlVMTDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBj b21wb25lbnRfb3BzIGRwX2Rpc3BsYXlfY29tcF9vcHMgPSB7Cj4+ICsJLmJpbmQgPSBkcF9kaXNw bGF5X2JpbmQsCj4+ICsJLnVuYmluZCA9IGRwX2Rpc3BsYXlfdW5iaW5kLAo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGJvb2wgZHBfZGlzcGxheV9pc19kc19icmlkZ2Uoc3RydWN0IGRwX3BhbmVsICpw YW5lbCkKPj4gK3sKPj4gKwlyZXR1cm4gKHBhbmVsLT5kcGNkW0RQX0RPV05TVFJFQU1QT1JUX1BS RVNFTlRdICYKPj4gKwkJRFBfRFdOX1NUUk1fUE9SVF9QUkVTRU5UKTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGJvb2wgZHBfZGlzcGxheV9pc19zaW5rX2NvdW50X3plcm8oc3RydWN0IGRwX2Rpc3Bs YXlfcHJpdmF0ZSAKPj4gKmRwKQo+PiArewo+PiArCXJldHVybiBkcF9kaXNwbGF5X2lzX2RzX2Jy aWRnZShkcC0+cGFuZWwpICYmCj4+ICsJCShkcC0+bGluay0+c2lua19jb3VudC5jb3VudCA9PSAw KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfZGlzcGxheV9zZW5kX2hwZF9ldmVudChz dHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KQo+PiArewo+PiArCXN0cnVjdCBkcF9kaXNwbGF5X3By aXZhdGUgKmRwOwo+PiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4+ICsKPj4g KwlpZiAoIWRwX2Rpc3BsYXkpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4g KwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWRwID0gY29udGFpbmVyX29mKGRwX2Rpc3BsYXks IHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIAo+PiBkcF9kaXNwbGF5KTsKPj4gKwlpZiAoIWRw KSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJ fQo+PiArCj4+ICsJY29ubmVjdG9yID0gZHAtPmRwX2Rpc3BsYXkuY29ubmVjdG9yOwo+PiArCWRy bV9oZWxwZXJfaHBkX2lycV9ldmVudChjb25uZWN0b3ItPmRldik7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgZHBfZGlzcGxheV9zZW5kX2hwZF9ub3RpZmljYXRpb24oc3RydWN0IGRwX2Rpc3Bs YXlfcHJpdmF0ZSAKPj4gKmRwLAo+PiArCQkJCQkgICAgYm9vbCBocGQpCj4gCj4gVGhpcyBmdW5j dGlvbiBpcyBjYWxsZWQgZnJvbSBhIGZldyBkaWZmZXJlbnQgdGhyZWFkcyB3aXRoIG5vIGxvY2tp bmcuIAo+IEl0IHNlZW1zCj4gbGlrZSB0aGVyZSdzIGdvb2Qgb3Bwb3J0dW5pdHkgZm9yIGlzX2Nv bm5lY3RlZCBhbmQgbm90aWZpY2F0aW9uX2NvbXAgdG8gCj4gZ2V0IG91dAo+IG9mIHN5bmMuCj4g Cj4gQWRkaXRpb25hbGx5LCBpc19jb25uZWN0ZWQgaXMgc2V0IHRvIHRydWUgYmVmb3JlIHRoZSBm dW5jdGlvbiByZXR1cm5zIAo+IChhbmQKPiBlbmFibGUgaGFzIGJlZW4gY29tcGxldGVkKS4gU28g aXMgdGhhdCBnb2luZyB0byBjYXVzZSBwcm9ibGVtcyB3aGVuIHdlIAo+IGNhbGwKPiBkZXRlY3Qv Z2V0X21vZGVzIHdoZXJlIGlzX2Nvbm5lY3RlZCA9PSB0cnVlIGFuZCB0aGUgaHcgaXMgbm90IHVw Pwo+IApXaWxsIGZpeCB0aGlzIGluIFYzLgoKCj4gUGVyaGFwcyBJJ20gbWlzcmVhZGluZyB0aGlz IGZ1bmN0aW9uLCBidXQgaXQgc2VlbXMgbGlrZSB0aGUgcGxhbiBpcyB0byAKPiBibG9jawo+IHVu dGlsIHVzZXJzcGFjZSBoYXMgYmVlbiBub3RpZmllZCBhbmQgZG9lcyBhIGZ1bGwgbW9kZXNldCAo aWU6IGVuYWJsZSk/IAo+IElmIHRoYXQKPiBpcyB0aGUgY2FzZSwgd2UgdXN1YWxseSBkb24ndCB3 YW50IHRvIGhhdmUgdGhlIGhhcmR3YXJlIGxpdCB1cCB1bnRpbCAKPiBpdCdzCj4gYWN0dWFsbHkg Z29pbmcgdG8gYmUgdXNlZC4gSW4gdGhlc2UgY2FzZXMsIHdlJ2xsIHdyYXAgZ2V0X21vZGVzIGlu Cj4gZW5hYmxlL2Rpc2FibGUgKHdpdGggcHJvcGVyIGxvY2tpbmcpLCBhbmQgd2FpdCBmb3IgbW9k ZXNldCB0byBsZWF2ZSBpdCAKPiBvbi4KPiAKV2hlbiBIUEQgZ29lcyBoaWdoLCB3ZSBkbyBkcGNk IHJlYWRzIHRvIGdldCB0aGUgc2luayBjYXBhYmlsaXRpZXMgYW5kIAp0aGVuIGluZm9ybSB0aGUg ZnJhbWV3b3JrIHNvIHRoYXQgImVuYWJsZSIKZ2V0cyBjYWxsZWQgYnkgZHJtIGZyYW1ld29yay4K Cj4+ICt7Cj4+ICsJaWYgKChocGQgJiYgZHAtPmRwX2Rpc3BsYXkuaXNfY29ubmVjdGVkKSB8fAo+ PiArCQkJKCFocGQgJiYgIWRwLT5kcF9kaXNwbGF5LmlzX2Nvbm5lY3RlZCkpIHsKPj4gKwkJcHJf aW5mbygiSFBEIGFscmVhZHkgJXNcbiIsIChocGQgPyAib24iIDogIm9mZiIpKTsKPj4gKwkJcmV0 dXJuIDA7Cj4+ICsJfQo+PiArCj4+ICsJLyogcmVzZXQgdmlkZW8gcGF0dGVybiBmbGFnIG9uIGRp c2Nvbm5lY3QgKi8KPj4gKwlpZiAoIWhwZCkKPj4gKwkJZHAtPnBhbmVsLT52aWRlb190ZXN0ID0g ZmFsc2U7Cj4+ICsKPj4gKwlkcC0+ZHBfZGlzcGxheS5pc19jb25uZWN0ZWQgPSBocGQ7Cj4+ICsJ cmVpbml0X2NvbXBsZXRpb24oJmRwLT5ub3RpZmljYXRpb25fY29tcCk7Cj4+ICsJZHBfZGlzcGxh eV9zZW5kX2hwZF9ldmVudCgmZHAtPmRwX2Rpc3BsYXkpOwo+PiArCj4+ICsJaWYgKCF3YWl0X2Zv cl9jb21wbGV0aW9uX3RpbWVvdXQoJmRwLT5ub3RpZmljYXRpb25fY29tcCwgSFogKiAyKSkgewo+ PiArCQlwcl93YXJuKCIlcyB0aW1lb3V0XG4iLCBocGQgPyAiY29ubmVjdCIgOiAiZGlzY29ubmVj dCIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4g K30KPj4gKwo+PiArc3RhdGljIGludCBkcF9kaXNwbGF5X3Byb2Nlc3NfaHBkX2hpZ2goc3RydWN0 IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1 Y3QgZWRpZCAqZWRpZDsKPj4gKwo+PiArCWRwLT5hdXgtPmluaXQoZHAtPmF1eCwgZHAtPnBhcnNl ci0+YXV4X2NmZyk7Cj4+ICsKPj4gKwlpZiAoZHAtPmxpbmstPnBzbV9lbmFibGVkKQo+PiArCQln b3RvIG5vdGlmeTsKPj4gKwo+PiArCXJjID0gZHAtPnBhbmVsLT5yZWFkX3NpbmtfY2FwcyhkcC0+ cGFuZWwsIGRwLT5kcF9kaXNwbGF5LmNvbm5lY3Rvcik7Cj4+ICsJaWYgKHJjKQo+PiArCQlnb3Rv IG5vdGlmeTsKPj4gKwo+PiArCWRwLT5saW5rLT5wcm9jZXNzX3JlcXVlc3QoZHAtPmxpbmspOwo+ PiArCj4+ICsJaWYgKGRwX2Rpc3BsYXlfaXNfc2lua19jb3VudF96ZXJvKGRwKSkgewo+PiArCQlw cl9kZWJ1Zygibm8gZG93bnN0cmVhbSBkZXZpY2VzIGNvbm5lY3RlZFxuIik7Cj4+ICsJCXJjID0g LUVJTlZBTDsKPj4gKwkJZ290byBlbmQ7Cj4+ICsJfQo+PiArCj4+ICsJZWRpZCA9IGRwLT5wYW5l bC0+ZWRpZDsKPj4gKwo+PiArCWRwLT5hdWRpb19zdXBwb3J0ZWQgPSBkcm1fZGV0ZWN0X21vbml0 b3JfYXVkaW8oZWRpZCk7Cj4+ICsKPj4gKwlkcC0+cGFuZWwtPmhhbmRsZV9zaW5rX3JlcXVlc3Qo ZHAtPnBhbmVsKTsKPj4gKwo+PiArCWRwLT5kcF9kaXNwbGF5Lm1heF9wY2xrX2toeiA9IGRwLT5w YXJzZXItPm1heF9wY2xrX2toejsKPj4gK25vdGlmeToKPj4gKwlkcF9kaXNwbGF5X3NlbmRfaHBk X25vdGlmaWNhdGlvbihkcCwgdHJ1ZSk7Cj4+ICsKPj4gK2VuZDoKPj4gKwlyZXR1cm4gcmM7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2Rpc3BsYXlfaG9zdF9pbml0KHN0cnVjdCBkcF9k aXNwbGF5X3ByaXZhdGUgKmRwKQo+PiArewo+PiArCWJvb2wgZmxpcCA9IGZhbHNlOwo+PiArCj4+ ICsJaWYgKGRwLT5jb3JlX2luaXRpYWxpemVkKSB7Cj4+ICsJCXByX2RlYnVnKCJEUCBjb3JlIGFs cmVhZHkgaW5pdGlhbGl6ZWRcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJaWYg KGRwLT51c2JwZC0+b3JpZW50YXRpb24gPT0gT1JJRU5UQVRJT05fQ0MyKQo+PiArCQlmbGlwID0g dHJ1ZTsKPj4gKwo+PiArCWRwLT5wb3dlci0+aW5pdChkcC0+cG93ZXIsIGZsaXApOwo+PiArCWRw LT5jdHJsLT5pbml0KGRwLT5jdHJsLCBmbGlwKTsKPj4gKwllbmFibGVfaXJxKGRwLT5pcnEpOwo+ PiArCWRwLT5jb3JlX2luaXRpYWxpemVkID0gdHJ1ZTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgZHBfZGlzcGxheV9ob3N0X2RlaW5pdChzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcCkK Pj4gK3sKPj4gKwlpZiAoIWRwLT5jb3JlX2luaXRpYWxpemVkKSB7Cj4+ICsJCXByX2RlYnVnKCJE UCBjb3JlIGFscmVhZHkgb2ZmXG4iKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWRw LT5jdHJsLT5kZWluaXQoZHAtPmN0cmwpOwo+PiArCWRwLT5wb3dlci0+ZGVpbml0KGRwLT5wb3dl cik7Cj4+ICsJZGlzYWJsZV9pcnEoZHAtPmlycSk7Cj4+ICsJZHAtPmNvcmVfaW5pdGlhbGl6ZWQg PSBmYWxzZTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfZGlzcGxheV9wcm9jZXNzX2hw ZF9sb3coc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCj4+ICt7Cj4+ICsJLyogY2FuY2Vs IGFueSBwZW5kaW5nIHJlcXVlc3QgKi8KPj4gKwlkcC0+Y3RybC0+YWJvcnQoZHAtPmN0cmwpOwo+ PiArCj4+ICsJZHBfZGlzcGxheV9zZW5kX2hwZF9ub3RpZmljYXRpb24oZHAsIGZhbHNlKTsKPj4g Kwo+PiArCWRwLT5hdXgtPmRlaW5pdChkcC0+YXV4KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlu dCBkcF9kaXNwbGF5X3VzYnBkX2NvbmZpZ3VyZV9jYihzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ICt7 Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsKPj4g Kwo+PiArCWlmICghZGV2KSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBkZXZcbiIpOwo+PiArCQly YyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCWRwID0gZGV2X2dl dF9kcnZkYXRhKGRldik7Cj4+ICsJaWYgKCFkcCkgewo+PiArCQlwcl9lcnIoIm5vIGRyaXZlciBk YXRhIGZvdW5kXG4iKTsKPj4gKwkJcmMgPSAtRU5PREVWOwo+PiArCQlnb3RvIGVuZDsKPj4gKwl9 Cj4+ICsKPj4gKwlkcF9kaXNwbGF5X2hvc3RfaW5pdChkcCk7Cj4+ICsKPj4gKwlpZiAoZHAtPnVz YnBkLT5ocGRfaGlnaCkKPj4gKwkJZHBfZGlzcGxheV9wcm9jZXNzX2hwZF9oaWdoKGRwKTsKPj4g K2VuZDoKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2Rpc3Bs YXlfY2xlYW4oc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCj4+ICt7Cj4+ICsJZHAtPmN0 cmwtPnB1c2hfaWRsZShkcC0+Y3RybCk7Cj4+ICsJZHAtPmN0cmwtPm9mZihkcC0+Y3RybCk7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxheV91c2JwZF9kaXNjb25uZWN0X2NiKHN0 cnVjdCBkZXZpY2UgKmRldikKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVjdCBkcF9k aXNwbGF5X3ByaXZhdGUgKmRwOwo+PiArCj4+ICsJaWYgKCFkZXYpIHsKPj4gKwkJcHJfZXJyKCJp bnZhbGlkIGRldlxuIik7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBlbmQ7Cj4+ICsJ fQo+PiArCj4+ICsJZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPj4gKwlpZiAoIWRwKSB7Cj4+ ICsJCXByX2Vycigibm8gZHJpdmVyIGRhdGEgZm91bmRcbiIpOwo+PiArCQlyYyA9IC1FTk9ERVY7 Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCS8qIGNhbmNlbCBhbnkgcGVuZGluZyBy ZXF1ZXN0ICovCj4+ICsJZHAtPmN0cmwtPmFib3J0KGRwLT5jdHJsKTsKPj4gKwo+PiArCXJjID0g ZHBfZGlzcGxheV9zZW5kX2hwZF9ub3RpZmljYXRpb24oZHAsIGZhbHNlKTsKPj4gKwo+PiArCS8q IGlmIGNhYmxlIGlzIGRpc2Nvbm5lY3RlZCwgcmVzZXQgcHNtX2VuYWJsZWQgZmxhZyAqLwo+PiAr CWlmICghZHAtPnVzYnBkLT5hbHRfbW9kZV9jZmdfZG9uZSkKPj4gKwkJZHAtPmxpbmstPnBzbV9l bmFibGVkID0gZmFsc2U7Cj4+ICsKPj4gKwlpZiAoKHJjIDwgMCkgJiYgZHAtPnBvd2VyX29uKQo+ PiArCQlkcF9kaXNwbGF5X2NsZWFuKGRwKTsKPj4gKwo+PiArCWRwX2Rpc3BsYXlfaG9zdF9kZWlu aXQoZHApOwo+PiArZW5kOgo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgZHBfZGlzcGxheV9oYW5kbGVfdmlkZW9fcmVxdWVzdChzdHJ1Y3QgZHBfZGlzcGxheV9wcml2 YXRlIAo+PiAqZHApCj4+ICt7Cj4+ICsJaWYgKGRwLT5saW5rLT5zaW5rX3JlcXVlc3QgJiBEUF9U RVNUX0xJTktfVklERU9fUEFUVEVSTikgewo+PiArCQkvKiBmb3JjZSBkaXNjb25uZWN0IGZvbGxv d2VkIGJ5IGNvbm5lY3QgKi8KPj4gKwkJZHAtPnVzYnBkLT5jb25uZWN0KGRwLT51c2JwZCwgZmFs c2UpOwo+PiArCQlkcC0+cGFuZWwtPnZpZGVvX3Rlc3QgPSB0cnVlOwo+PiArCQlkcC0+dXNicGQt PmNvbm5lY3QoZHAtPnVzYnBkLCB0cnVlKTsKPj4gKwkJZHAtPmxpbmstPnNlbmRfdGVzdF9yZXNw b25zZShkcC0+bGluayk7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2Rpc3Bs YXlfaGFuZGxlX2hwZF9pcnEoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHApCj4+ICt7Cj4+ ICsJaWYgKGRwLT5saW5rLT5zaW5rX3JlcXVlc3QgJiBEU19QT1JUX1NUQVRVU19DSEFOR0VEKSB7 Cj4+ICsJCWRwX2Rpc3BsYXlfc2VuZF9ocGRfbm90aWZpY2F0aW9uKGRwLCBmYWxzZSk7Cj4+ICsK Pj4gKwkJaWYgKGRwX2Rpc3BsYXlfaXNfc2lua19jb3VudF96ZXJvKGRwKSkgewo+PiArCQkJcHJf ZGVidWcoInNpbmsgY291bnQgaXMgemVybywgbm90aGluZyB0byBkb1xuIik7Cj4+ICsJCQlyZXR1 cm4gMDsKPj4gKwkJfQo+PiArCj4+ICsJCXJldHVybiBkcF9kaXNwbGF5X3Byb2Nlc3NfaHBkX2hp Z2goZHApOwo+PiArCX0KPj4gKwo+PiArCWRwLT5jdHJsLT5oYW5kbGVfc2lua19yZXF1ZXN0KGRw LT5jdHJsKTsKPj4gKwo+PiArCWRwX2Rpc3BsYXlfaGFuZGxlX3ZpZGVvX3JlcXVlc3QoZHApOwo+ PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxheV91 c2JwZF9hdHRlbnRpb25fY2Ioc3RydWN0IGRldmljZSAqZGV2KQo+PiArewo+PiArCWludCByYyA9 IDA7Cj4+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7Cj4+ICsKPj4gKwlpZiAoIWRl dikgewo+PiArCQlwcl9lcnIoImludmFsaWQgZGV2XG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4+ICsJfQo+PiArCj4+ICsJZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPj4gKwlpZiAoIWRw KSB7Cj4+ICsJCXByX2Vycigibm8gZHJpdmVyIGRhdGEgZm91bmRcbiIpOwo+PiArCQlyZXR1cm4g LUVOT0RFVjsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAoZHAtPnVzYnBkLT5ocGRfaXJxKSB7Cj4+ICsJ CWRwLT5ocGRfaXJxX29uID0gdHJ1ZTsKPj4gKwo+PiArCQlyYyA9IGRwLT5saW5rLT5wcm9jZXNz X3JlcXVlc3QoZHAtPmxpbmspOwo+PiArCQkvKiBjaGVjayBmb3IgYW55IHRlc3QgcmVxdWVzdCBp c3N1ZWQgYnkgc2luayAqLwo+PiArCQlpZiAoIXJjKQo+PiArCQkJZHBfZGlzcGxheV9oYW5kbGVf aHBkX2lycShkcCk7Cj4+ICsKPj4gKwkJZHAtPmhwZF9pcnFfb24gPSBmYWxzZTsKPj4gKwkJZ290 byBlbmQ7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKCFkcC0+dXNicGQtPmhwZF9oaWdoKSB7Cj4+ICsJ CWRwX2Rpc3BsYXlfcHJvY2Vzc19ocGRfbG93KGRwKTsKPj4gKwkJZ290byBlbmQ7Cj4+ICsJfQo+ PiArCj4+ICsJaWYgKGRwLT51c2JwZC0+YWx0X21vZGVfY2ZnX2RvbmUpCj4+ICsJCWRwX2Rpc3Bs YXlfcHJvY2Vzc19ocGRfaGlnaChkcCk7Cj4+ICtlbmQ6Cj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9kaXNwbGF5X2RlaW5pdF9zdWJfbW9kdWxlcyhzdHJ1Y3Qg ZHBfZGlzcGxheV9wcml2YXRlIAo+PiAqZHApCj4+ICt7Cj4+ICsJZHBfY3RybF9wdXQoZHAtPmN0 cmwpOwo+PiArCWRwX2xpbmtfcHV0KGRwLT5saW5rKTsKPj4gKwlkcF9wYW5lbF9wdXQoZHAtPnBh bmVsKTsKPj4gKwlkcF9hdXhfcHV0KGRwLT5hdXgpOwo+PiArCWRwX3Bvd2VyX3B1dChkcC0+cG93 ZXIpOwo+PiArCWRwX2NhdGFsb2dfcHV0KGRwLT5jYXRhbG9nKTsKPj4gKwlkcF9wYXJzZXJfcHV0 KGRwLT5wYXJzZXIpOwo+PiArCWRwX2RlYnVnX3B1dChkcC0+ZGVidWcpOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgaW50IGRwX2luaXRfc3ViX21vZHVsZXMoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0 ZSAqZHApCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm ZHAtPnBkZXYtPmRldjsKPj4gKwlzdHJ1Y3QgZHBfdXNicGRfY2IgKmNiID0gJmRwLT51c2JwZF9j YjsKPj4gKwlzdHJ1Y3QgZHBfY3RybF9pbiBjdHJsX2luID0gewo+PiArCQkuZGV2ID0gZGV2LAo+ PiArCX07Cj4+ICsJc3RydWN0IGRwX3BhbmVsX2luIHBhbmVsX2luID0gewo+PiArCQkuZGV2ID0g ZGV2LAo+PiArCX07Cj4+ICsKPj4gKwkvKiBDYWxsYmFjayBBUElzIHVzZWQgZm9yIGNhYmxlIHN0 YXR1cyBjaGFuZ2UgZXZlbnQgKi8KPj4gKwljYi0+Y29uZmlndXJlICA9IGRwX2Rpc3BsYXlfdXNi cGRfY29uZmlndXJlX2NiOwo+PiArCWNiLT5kaXNjb25uZWN0ID0gZHBfZGlzcGxheV91c2JwZF9k aXNjb25uZWN0X2NiOwo+PiArCWNiLT5hdHRlbnRpb24gID0gZHBfZGlzcGxheV91c2JwZF9hdHRl bnRpb25fY2I7Cj4+ICsKPj4gKwlkcC0+cGFyc2VyID0gZHBfcGFyc2VyX2dldChkcC0+cGRldik7 Cj4+ICsJaWYgKElTX0VSUihkcC0+cGFyc2VyKSkgewo+PiArCQlyYyA9IFBUUl9FUlIoZHAtPnBh cnNlcik7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRvIGluaXRpYWxpemUgcGFyc2VyLCByYyA9ICVk XG4iLCByYyk7Cj4+ICsJCWRwLT5wYXJzZXIgPSBOVUxMOwo+PiArCQlnb3RvIGVycm9yX3BhcnNl cjsKPj4gKwl9Cj4+ICsKPj4gKwlkcC0+Y2F0YWxvZyA9IGRwX2NhdGFsb2dfZ2V0KGRldiwgJmRw LT5wYXJzZXItPmlvKTsKPj4gKwlpZiAoSVNfRVJSKGRwLT5jYXRhbG9nKSkgewo+PiArCQlyYyA9 IFBUUl9FUlIoZHAtPmNhdGFsb2cpOwo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXpl IGNhdGFsb2csIHJjID0gJWRcbiIsIHJjKTsKPj4gKwkJZHAtPmNhdGFsb2cgPSBOVUxMOwo+PiAr CQlnb3RvIGVycm9yX2NhdGFsb2c7Cj4+ICsJfQo+PiArCj4+ICsJZHAtPnBvd2VyID0gZHBfcG93 ZXJfZ2V0KGRwLT5wYXJzZXIpOwo+PiArCWlmIChJU19FUlIoZHAtPnBvd2VyKSkgewo+PiArCQly YyA9IFBUUl9FUlIoZHAtPnBvd2VyKTsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6 ZSBwb3dlciwgcmMgPSAlZFxuIiwgcmMpOwo+PiArCQlkcC0+cG93ZXIgPSBOVUxMOwo+PiArCQln b3RvIGVycm9yX3Bvd2VyOwo+PiArCX0KPj4gKwo+PiArCWRwLT5hdXggPSBkcF9hdXhfZ2V0KGRl diwgJmRwLT5jYXRhbG9nLT5hdXgsIGRwLT5wYXJzZXItPmF1eF9jZmcpOwo+PiArCWlmIChJU19F UlIoZHAtPmF1eCkpIHsKPj4gKwkJcmMgPSBQVFJfRVJSKGRwLT5hdXgpOwo+PiArCQlwcl9lcnIo ImZhaWxlZCB0byBpbml0aWFsaXplIGF1eCwgcmMgPSAlZFxuIiwgcmMpOwo+PiArCQlkcC0+YXV4 ID0gTlVMTDsKPj4gKwkJZ290byBlcnJvcl9hdXg7Cj4+ICsJfQo+PiArCj4+ICsJZHAtPmxpbmsg PSBkcF9saW5rX2dldChkZXYsIGRwLT5hdXgpOwo+PiArCWlmIChJU19FUlIoZHAtPmxpbmspKSB7 Cj4+ICsJCXJjID0gUFRSX0VSUihkcC0+bGluayk7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRvIGlu aXRpYWxpemUgbGluaywgcmMgPSAlZFxuIiwgcmMpOwo+PiArCQlkcC0+bGluayA9IE5VTEw7Cj4+ ICsJCWdvdG8gZXJyb3JfbGluazsKPj4gKwl9Cj4+ICsKPj4gKwlwYW5lbF9pbi5hdXggPSBkcC0+ YXV4Owo+PiArCXBhbmVsX2luLmNhdGFsb2cgPSAmZHAtPmNhdGFsb2ctPnBhbmVsOwo+PiArCXBh bmVsX2luLmxpbmsgPSBkcC0+bGluazsKPj4gKwo+PiArCWRwLT5wYW5lbCA9IGRwX3BhbmVsX2dl dCgmcGFuZWxfaW4pOwo+PiArCWlmIChJU19FUlIoZHAtPnBhbmVsKSkgewo+PiArCQlyYyA9IFBU Ul9FUlIoZHAtPnBhbmVsKTsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYW5l bCwgcmMgPSAlZFxuIiwgcmMpOwo+PiArCQlkcC0+cGFuZWwgPSBOVUxMOwo+PiArCQlnb3RvIGVy cm9yX3BhbmVsOwo+PiArCX0KPj4gKwo+PiArCWN0cmxfaW4ubGluayA9IGRwLT5saW5rOwo+PiAr CWN0cmxfaW4ucGFuZWwgPSBkcC0+cGFuZWw7Cj4+ICsJY3RybF9pbi5hdXggPSBkcC0+YXV4Owo+ PiArCWN0cmxfaW4ucG93ZXIgPSBkcC0+cG93ZXI7Cj4+ICsJY3RybF9pbi5jYXRhbG9nID0gJmRw LT5jYXRhbG9nLT5jdHJsOwo+PiArCWN0cmxfaW4ucGFyc2VyID0gZHAtPnBhcnNlcjsKPj4gKwo+ PiArCWRwLT5jdHJsID0gZHBfY3RybF9nZXQoJmN0cmxfaW4pOwo+PiArCWlmIChJU19FUlIoZHAt PmN0cmwpKSB7Cj4+ICsJCXJjID0gUFRSX0VSUihkcC0+Y3RybCk7Cj4+ICsJCXByX2VycigiZmFp bGVkIHRvIGluaXRpYWxpemUgY3RybCwgcmMgPSAlZFxuIiwgcmMpOwo+PiArCQlkcC0+Y3RybCA9 IE5VTEw7Cj4+ICsJCWdvdG8gZXJyb3JfY3RybDsKPj4gKwl9Cj4+ICsKPj4gKwlkcC0+ZGVidWcg PSBkcF9kZWJ1Z19nZXQoZGV2LCBkcC0+cGFuZWwsIGRwLT51c2JwZCwKPj4gKwkJCQlkcC0+bGlu aywgJmRwLT5kcF9kaXNwbGF5LmNvbm5lY3Rvcik7Cj4+ICsJaWYgKElTX0VSUihkcC0+ZGVidWcp KSB7Cj4+ICsJCXJjID0gUFRSX0VSUihkcC0+ZGVidWcpOwo+PiArCQlwcl9lcnIoImZhaWxlZCB0 byBpbml0aWFsaXplIGRlYnVnLCByYyA9ICVkXG4iLCByYyk7Cj4+ICsJCWRwLT5kZWJ1ZyA9IE5V TEw7Cj4+ICsJCWdvdG8gZXJyb3JfZGVidWc7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIHJjOwo+ PiArZXJyb3JfZGVidWc6Cj4+ICsJZHBfY3RybF9wdXQoZHAtPmN0cmwpOwo+PiArZXJyb3JfY3Ry bDoKPj4gKwlkcF9wYW5lbF9wdXQoZHAtPnBhbmVsKTsKPj4gK2Vycm9yX3BhbmVsOgo+PiArCWRw X2xpbmtfcHV0KGRwLT5saW5rKTsKPj4gK2Vycm9yX2xpbms6Cj4+ICsJZHBfYXV4X3B1dChkcC0+ YXV4KTsKPj4gK2Vycm9yX2F1eDoKPj4gKwlkcF9wb3dlcl9wdXQoZHAtPnBvd2VyKTsKPj4gK2Vy cm9yX3Bvd2VyOgo+PiArCWRwX2NhdGFsb2dfcHV0KGRwLT5jYXRhbG9nKTsKPj4gK2Vycm9yX2Nh dGFsb2c6Cj4+ICsJZHBfcGFyc2VyX3B1dChkcC0+cGFyc2VyKTsKPj4gK2Vycm9yX3BhcnNlcjoK Pj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxheV9zZXRf bW9kZShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5LAo+PiArCQkJICAgICAgIHN0cnVjdCBkcF9k aXNwbGF5X21vZGUgKm1vZGUpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3QgZHBf ZGlzcGxheV9wcml2YXRlICpkcDsKPj4gKwo+PiArCWlmICghZHBfZGlzcGxheSkgewo+PiArCQlw cl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8g ZXJyb3I7Cj4+ICsJfQo+PiArCWRwID0gY29udGFpbmVyX29mKGRwX2Rpc3BsYXksIHN0cnVjdCBk cF9kaXNwbGF5X3ByaXZhdGUsIAo+PiBkcF9kaXNwbGF5KTsKPj4gKwo+PiArCWRwLT5wYW5lbC0+ cGluZm8gPSBtb2RlLT50aW1pbmc7Cj4+ICsJZHAtPnBhbmVsLT5pbml0X2luZm8oZHAtPnBhbmVs KTsKPj4gK2Vycm9yOgo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBk cF9kaXNwbGF5X3ByZXBhcmUoc3RydWN0IG1zbV9kcCAqZHApCj4+ICt7Cj4+ICsJcmV0dXJuIDA7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxheV9lbmFibGUoc3RydWN0IG1zbV9k cCAqZHBfZGlzcGxheSkKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVjdCBkcF9kaXNw bGF5X3ByaXZhdGUgKmRwOwo+PiArCj4+ICsJaWYgKCFkcF9kaXNwbGF5KSB7Cj4+ICsJCXByX2Vy cigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBlcnJv cjsKPj4gKwl9Cj4+ICsKPj4gKwlkcCA9IGNvbnRhaW5lcl9vZihkcF9kaXNwbGF5LCBzdHJ1Y3Qg ZHBfZGlzcGxheV9wcml2YXRlLCAKPj4gZHBfZGlzcGxheSk7Cj4+ICsKPj4gKwlpZiAoZHAtPnBv d2VyX29uKSB7Cj4+ICsJCXByX2RlYnVnKCJMaW5rIGFscmVhZHkgc2V0dXAsIHJldHVyblxuIik7 Cj4+ICsJCXJldHVybiAwOwo+PiArCX0KPj4gKwo+PiArCWRwLT5hdXgtPmluaXQoZHAtPmF1eCwg ZHAtPnBhcnNlci0+YXV4X2NmZyk7Cj4+ICsKPj4gKwlyYyA9IGRwLT5jdHJsLT5vbihkcC0+Y3Ry bCk7Cj4+ICsJaWYgKCFyYykKPj4gKwkJZHAtPnBvd2VyX29uID0gdHJ1ZTsKPj4gK2Vycm9yOgo+ PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9kaXNwbGF5X3Bvc3Rf ZW5hYmxlKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsK Pj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsKPj4gKwo+PiArCWlmICghZHBfZGlz cGxheSkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyYyA9IC1FSU5W QUw7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCWRwID0gY29udGFpbmVyX29mKGRw X2Rpc3BsYXksIHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUsIAo+PiBkcF9kaXNwbGF5KTsKPj4g Kwo+PiArCWNvbXBsZXRlX2FsbCgmZHAtPm5vdGlmaWNhdGlvbl9jb21wKTsKPj4gKwo+PiArZW5k Ogo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9kaXNwbGF5X3By ZV9kaXNhYmxlKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpCj4+ICt7Cj4+ICsJaW50IHJjID0g MDsKPj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsKPj4gKwo+PiArCWlmICghZHBf ZGlzcGxheSkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyYyA9IC1F SU5WQUw7Cj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsJfQo+PiArCj4+ICsJZHAgPSBjb250YWluZXJf b2YoZHBfZGlzcGxheSwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgCj4+IGRwX2Rpc3BsYXkp Owo+PiArCj4+ICsJaWYgKGRwLT51c2JwZC0+YWx0X21vZGVfY2ZnX2RvbmUgJiYgKGRwLT51c2Jw ZC0+aHBkX2hpZ2ggfHwKPj4gKwkJZHAtPnVzYnBkLT5mb3JjZWRfZGlzY29ubmVjdCkpCj4+ICsJ CWRwLT5saW5rLT5wc21fY29uZmlnKGRwLT5saW5rLCAmZHAtPnBhbmVsLT5saW5rX2luZm8sIHRy dWUpOwo+PiArCj4+ICsJZHAtPmN0cmwtPnB1c2hfaWRsZShkcC0+Y3RybCk7Cj4+ICtlcnJvcjoK Pj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxheV9kaXNh YmxlKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4g KwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcDsKPj4gKwo+PiArCWlmICghZHBfZGlzcGxh eSkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7 Cj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsJfQo+PiArCj4+ICsJZHAgPSBjb250YWluZXJfb2YoZHBf ZGlzcGxheSwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgCj4+IGRwX2Rpc3BsYXkpOwo+PiAr Cj4+ICsJaWYgKCFkcC0+cG93ZXJfb24gfHwgIWRwLT5jb3JlX2luaXRpYWxpemVkKQo+PiArCQln b3RvIGVycm9yOwo+PiArCj4+ICsJZHAtPmN0cmwtPm9mZihkcC0+Y3RybCk7Cj4+ICsKPj4gKwlk cC0+cG93ZXJfb24gPSBmYWxzZTsKPj4gKwo+PiArCWNvbXBsZXRlX2FsbCgmZHAtPm5vdGlmaWNh dGlvbl9jb21wKTsKPj4gK2Vycm9yOgo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGludCBkcF9yZXF1ZXN0X2lycShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KQo+PiArewo+ PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7Cj4+ICsK Pj4gKwlpZiAoIWRwX2Rpc3BsYXkpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsK Pj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJZHAgPSBjb250YWluZXJfb2Yo ZHBfZGlzcGxheSwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgCj4+IGRwX2Rpc3BsYXkpOwo+ PiArCj4+ICsJZHAtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRwLT5wZGV2LT5kZXYub2Zf bm9kZSwgMCk7Cj4+ICsJaWYgKGRwLT5pcnEgPCAwKSB7Cj4+ICsJCXJjID0gZHAtPmlycTsKPj4g KwkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IGlycTogJWRcbiIsIHJjKTsKPj4gKwkJcmV0dXJuIHJj Owo+PiArCX0KPj4gKwo+PiArCXJjID0gZGV2bV9yZXF1ZXN0X2lycSgmZHAtPnBkZXYtPmRldiwg ZHAtPmlycSwgZHBfZGlzcGxheV9pcnEsCj4+ICsJCUlSUUZfVFJJR0dFUl9ISUdILCAiZHBfZGlz cGxheV9pc3IiLCBkcCk7Cj4+ICsJaWYgKHJjIDwgMCkgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0 byByZXF1ZXN0IElSUSV1OiAlZFxuIiwKPj4gKwkJCQlkcC0+aXJxLCByYyk7Cj4+ICsJCXJldHVy biByYzsKPj4gKwl9Cj4+ICsJZGlzYWJsZV9pcnEoZHAtPmlycSk7Cj4+ICsKPj4gKwlyZXR1cm4g MDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHN0cnVjdCBkcF9kZWJ1ZyAqZHBfZ2V0X2RlYnVnKHN0 cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJp dmF0ZSAqZHA7Cj4+ICsKPj4gKwlpZiAoIWRwX2Rpc3BsYXkpIHsKPj4gKwkJcHJfZXJyKCJpbnZh bGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4+ICsJfQo+PiAr Cj4+ICsJZHAgPSBjb250YWluZXJfb2YoZHBfZGlzcGxheSwgc3RydWN0IGRwX2Rpc3BsYXlfcHJp dmF0ZSwgCj4+IGRwX2Rpc3BsYXkpOwo+PiArCj4+ICsJcmV0dXJuIGRwLT5kZWJ1ZzsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGludCBkcF9kaXNwbGF5X3VucHJlcGFyZShzdHJ1Y3QgbXNtX2RwICpk cCkKPj4gK3sKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9kaXNw bGF5X3ZhbGlkYXRlX21vZGUoc3RydWN0IG1zbV9kcCAqZHAsIHUzMiAKPj4gbW9kZV9wY2xrX2to eikKPj4gK3sKPj4gKwljb25zdCB1MzIgbnVtX2NvbXBvbmVudHMgPSAzLCBkZWZhdWx0X2JwcCA9 IDI0Owo+PiArCXN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwX2Rpc3BsYXk7Cj4+ICsJc3Ry dWN0IGRybV9kcF9saW5rICpsaW5rX2luZm87Cj4+ICsJdTMyIG1vZGVfcmF0ZV9raHogPSAwLCBz dXBwb3J0ZWRfcmF0ZV9raHogPSAwLCBtb2RlX2JwcCA9IDA7Cj4+ICsKPj4gKwlpZiAoIWRwIHx8 ICFtb2RlX3BjbGtfa2h6IHx8ICFkcC0+Y29ubmVjdG9yKSB7Cj4+ICsJCXByX2VycigiaW52YWxp ZCBwYXJhbXNcbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9k aXNwbGF5ID0gY29udGFpbmVyX29mKGRwLCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlLCAKPj4g ZHBfZGlzcGxheSk7Cj4+ICsJbGlua19pbmZvID0gJmRwX2Rpc3BsYXktPnBhbmVsLT5saW5rX2lu Zm87Cj4+ICsKPj4gKwltb2RlX2JwcCA9IGRwLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5mby5icGMg KiBudW1fY29tcG9uZW50czsKPj4gKwlpZiAoIW1vZGVfYnBwKQo+PiArCQltb2RlX2JwcCA9IGRl ZmF1bHRfYnBwOwo+PiArCj4+ICsJbW9kZV9icHAgPSBkcF9kaXNwbGF5LT5wYW5lbC0+Z2V0X21v ZGVfYnBwKGRwX2Rpc3BsYXktPnBhbmVsLAo+PiArCQkJbW9kZV9icHAsIG1vZGVfcGNsa19raHop Owo+PiArCj4+ICsJbW9kZV9yYXRlX2toeiA9IG1vZGVfcGNsa19raHogKiBtb2RlX2JwcDsKPj4g KwlzdXBwb3J0ZWRfcmF0ZV9raHogPSBsaW5rX2luZm8tPm51bV9sYW5lcyAqIGxpbmtfaW5mby0+ cmF0ZSAqIDg7Cj4+ICsKPj4gKwlpZiAobW9kZV9yYXRlX2toeiA+IHN1cHBvcnRlZF9yYXRlX2to eikKPj4gKwkJcmV0dXJuIE1PREVfQkFEOwo+PiArCj4+ICsJcmV0dXJuIE1PREVfT0s7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfZGlzcGxheV9nZXRfbW9kZXMoc3RydWN0IG1zbV9kcCAq ZHAsCj4+ICsJCQkJc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSAqZHBfbW9kZSkKPj4gK3sKPj4gKwlz dHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpkcF9kaXNwbGF5Owo+PiArCWludCByZXQgPSAwOwo+ PiArCj4+ICsJaWYgKCFkcCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKPj4g KwkJcmV0dXJuIDA7Cj4+ICsJfQo+PiArCj4+ICsJZHBfZGlzcGxheSA9IGNvbnRhaW5lcl9vZihk cCwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgCj4+IGRwX2Rpc3BsYXkpOwo+PiArCj4+ICsJ cmV0ID0gZHBfZGlzcGxheS0+cGFuZWwtPmdldF9tb2RlcyhkcF9kaXNwbGF5LT5wYW5lbCwKPj4g KwkJZHAtPmNvbm5lY3RvciwgZHBfbW9kZSk7Cj4+ICsJaWYgKGRwX21vZGUtPnRpbWluZy5waXhl bF9jbGtfa2h6KQo+PiArCQlkcC0+bWF4X3BjbGtfa2h6ID0gZHBfbW9kZS0+dGltaW5nLnBpeGVs X2Nsa19raHo7Cj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGJvb2wgZHBf ZGlzcGxheV9jaGVja192aWRlb190ZXN0KHN0cnVjdCBtc21fZHAgKmRwKQo+PiArewo+PiArCXN0 cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwX2Rpc3BsYXk7Cj4+ICsKPj4gKwlpZiAoIWRwKSB7 Cj4+ICsJCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwo+PiArCQlyZXR1cm4gZmFsc2U7Cj4+ ICsJfQo+PiArCj4+ICsJZHBfZGlzcGxheSA9IGNvbnRhaW5lcl9vZihkcCwgc3RydWN0IGRwX2Rp c3BsYXlfcHJpdmF0ZSwgCj4+IGRwX2Rpc3BsYXkpOwo+PiArCj4+ICsJaWYgKGRwX2Rpc3BsYXkt PnBhbmVsLT52aWRlb190ZXN0KQo+PiArCQlyZXR1cm4gdHJ1ZTsKPj4gKwo+PiArCXJldHVybiBm YWxzZTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9kaXNwbGF5X2dldF90ZXN0X2JwcChz dHJ1Y3QgbXNtX2RwICpkcCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlICpk cF9kaXNwbGF5Owo+PiArCj4+ICsJaWYgKCFkcCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgcGFy YW1zXG4iKTsKPj4gKwkJcmV0dXJuIDA7Cj4+ICsJfQo+PiArCj4+ICsJZHBfZGlzcGxheSA9IGNv bnRhaW5lcl9vZihkcCwgc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSwgCj4+IGRwX2Rpc3BsYXkp Owo+PiArCj4+ICsJcmV0dXJuIGRwX2xpbmtfYml0X2RlcHRoX3RvX2JwcCgKPj4gKwkJZHBfZGlz cGxheS0+bGluay0+dGVzdF92aWRlby50ZXN0X2JpdF9kZXB0aCk7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgZHBfZGlzcGxheV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHA7 Cj4+ICsKPj4gKwlpZiAoIXBkZXYgfHwgIXBkZXYtPmRldi5vZl9ub2RlKSB7Cj4+ICsJCXByX2Vy cigicGRldiBub3QgZm91bmRcbiIpOwo+PiArCQlyZXR1cm4gLUVOT0RFVjsKPj4gKwl9Cj4+ICsK Pj4gKwlkcCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRwKSwgR0ZQX0tFUk5F TCk7Cj4+ICsJaWYgKCFkcCkKPj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gKwlpbml0X2Nv bXBsZXRpb24oJmRwLT5ub3RpZmljYXRpb25fY29tcCk7Cj4+ICsKPj4gKwlkcC0+cGRldiA9IHBk ZXY7Cj4+ICsJZHAtPm5hbWUgPSAiZHJtX2RwIjsKPj4gKwo+PiArCXJjID0gZHBfaW5pdF9zdWJf bW9kdWxlcyhkcCk7Cj4+ICsJaWYgKHJjKSB7Cj4+ICsJCXByX2VycigiaW5pdCBzdWIgbW9kdWxl IGZhaWxlZFxuIik7Cj4+ICsJCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgZHApOwo+PiArCQlyZXR1 cm4gLUVQUk9CRV9ERUZFUjsKPj4gKwl9Cj4+ICsKPj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShw ZGV2LCBkcCk7Cj4+ICsKPj4gKwlnX2RwX2Rpc3BsYXkgPSAmZHAtPmRwX2Rpc3BsYXk7Cj4+ICsK Pj4gKwlnX2RwX2Rpc3BsYXktPmVuYWJsZSAgICAgICAgPSBkcF9kaXNwbGF5X2VuYWJsZTsKPj4g KwlnX2RwX2Rpc3BsYXktPnBvc3RfZW5hYmxlICAgPSBkcF9kaXNwbGF5X3Bvc3RfZW5hYmxlOwo+ PiArCWdfZHBfZGlzcGxheS0+cHJlX2Rpc2FibGUgICA9IGRwX2Rpc3BsYXlfcHJlX2Rpc2FibGU7 Cj4+ICsJZ19kcF9kaXNwbGF5LT5kaXNhYmxlICAgICAgID0gZHBfZGlzcGxheV9kaXNhYmxlOwo+ PiArCWdfZHBfZGlzcGxheS0+c2V0X21vZGUgICAgICA9IGRwX2Rpc3BsYXlfc2V0X21vZGU7Cj4+ ICsJZ19kcF9kaXNwbGF5LT52YWxpZGF0ZV9tb2RlID0gZHBfZGlzcGxheV92YWxpZGF0ZV9tb2Rl Owo+PiArCWdfZHBfZGlzcGxheS0+Z2V0X21vZGVzICAgICA9IGRwX2Rpc3BsYXlfZ2V0X21vZGVz Owo+PiArCWdfZHBfZGlzcGxheS0+cHJlcGFyZSAgICAgICA9IGRwX2Rpc3BsYXlfcHJlcGFyZTsK Pj4gKwlnX2RwX2Rpc3BsYXktPnVucHJlcGFyZSAgICAgPSBkcF9kaXNwbGF5X3VucHJlcGFyZTsK Pj4gKwlnX2RwX2Rpc3BsYXktPnJlcXVlc3RfaXJxICAgPSBkcF9yZXF1ZXN0X2lycTsKPj4gKwln X2RwX2Rpc3BsYXktPmdldF9kZWJ1ZyAgICAgPSBkcF9nZXRfZGVidWc7Cj4+ICsJZ19kcF9kaXNw bGF5LT5zZW5kX2hwZF9ldmVudCAgICA9IGRwX2Rpc3BsYXlfc2VuZF9ocGRfZXZlbnQ7Cj4+ICsJ Z19kcF9kaXNwbGF5LT5pc192aWRlb190ZXN0ID0gZHBfZGlzcGxheV9jaGVja192aWRlb190ZXN0 Owo+PiArCWdfZHBfZGlzcGxheS0+Z2V0X3Rlc3RfYnBwID0gZHBfZGlzcGxheV9nZXRfdGVzdF9i cHA7Cj4+ICsKPj4gKwlyYyA9IGNvbXBvbmVudF9hZGQoJnBkZXYtPmRldiwgJmRwX2Rpc3BsYXlf Y29tcF9vcHMpOwo+PiArCWlmIChyYykgewo+PiArCQlwcl9lcnIoImNvbXBvbmVudCBhZGQgZmFp bGVkLCByYz0lZFxuIiwgcmMpOwo+PiArCQlkcF9kaXNwbGF5X2RlaW5pdF9zdWJfbW9kdWxlcyhk cCk7Cj4+ICsJCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgZHApOwo+PiArCX0KPj4gKwo+PiArCXJl dHVybiByYzsKPj4gK30KPj4gKwo+PiAraW50IGRwX2Rpc3BsYXlfZ2V0X2Rpc3BsYXlzKHZvaWQg KipkaXNwbGF5cywgaW50IGNvdW50KQo+PiArewo+PiArCWlmICghZGlzcGxheXMpIHsKPj4gKwkJ cHJfZXJyKCJpbnZhbGlkIGRhdGFcbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ ICsKPj4gKwlpZiAoY291bnQgIT0gMSkgewo+PiArCQlwcl9lcnIoImludmFsaWQgbnVtYmVyIG9m IGRpc3BsYXlzXG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJZGlz cGxheXNbMF0gPSBnX2RwX2Rpc3BsYXk7Cj4+ICsJcmV0dXJuIGNvdW50Owo+PiArfQo+PiArCj4+ ICtpbnQgZHBfZGlzcGxheV9nZXRfbnVtX29mX2Rpc3BsYXlzKHZvaWQpCj4+ICt7Cj4+ICsJcmV0 dXJuIDE7Cj4+ICt9Cj4gCj4gVGhlc2UgMiBmdW5jdGlvbnMgYXJlIG5ldmVyIHVzZWQsIGFuZCBh cyBzdWNoIGdfZHBfZGlzcGxheSBpcyBuZXZlciAKPiB1c2VkLgo+IEFGQUlDVCwgdGhlIGNhbGxi YWNrIGhvb2tzIGxpbmtlZCBmcm9tIGdfZHBfZGlzcGxheSBhbHNvIGFyZW4ndCBjYWxsZWQgCj4g ZnJvbQo+IGFueXdoZXJlIGVsc2UuIFNvIGNhbiB5b3UganVzdCBkdW1wIHRoZXNlIGZ1bmN0aW9u cywgdGhlIHN0cnVjdCwgYW5kIAo+IGFsbCBvZiB0aGUKPiB1bnVzZWQgY2FsbGJhY2sgaG9va3M/ Cj4gCkZpeGVkIGluIFYyLgoKPj4gKwo+PiArc3RhdGljIGludCBkcF9kaXNwbGF5X3JlbW92ZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+PiArewo+PiArCXN0cnVjdCBkcF9kaXNwbGF5 X3ByaXZhdGUgKmRwOwo+PiArCj4+ICsJaWYgKCFwZGV2KQo+PiArCQlyZXR1cm4gLUVJTlZBTDsK Pj4gKwo+PiArCWRwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4+ICsKPj4gKwlkcF9k aXNwbGF5X2RlaW5pdF9zdWJfbW9kdWxlcyhkcCk7Cj4+ICsKPj4gKwlwbGF0Zm9ybV9zZXRfZHJ2 ZGF0YShwZGV2LCBOVUxMKTsKPj4gKwlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGRwKTsKPj4gKwo+ PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBkcF9kaXNwbGF5X2RyaXZlciA9IHsKPj4gKwkucHJvYmUgID0gZHBfZGlzcGxheV9wcm9iZSwK Pj4gKwkucmVtb3ZlID0gZHBfZGlzcGxheV9yZW1vdmUsCj4+ICsJLmRyaXZlciA9IHsKPj4gKwkJ Lm5hbWUgPSAibXNtLWRwLWRpc3BsYXkiLAo+PiArCQkub2ZfbWF0Y2hfdGFibGUgPSBkcF9kdF9t YXRjaCwKPj4gKwl9LAo+PiArfTsKPj4gKwo+PiAraW50IF9faW5pdCBtc21fZHBfcmVnaXN0ZXIo dm9pZCkKPj4gK3sKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJcmV0ID0gcGxhdGZvcm1fZHJpdmVy X3JlZ2lzdGVyKCZkcF9kaXNwbGF5X2RyaXZlcik7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlwcl9l cnIoImRyaXZlciByZWdpc3RlciBmYWlsZWQiKTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICt2b2lkIF9fZXhpdCBtc21fZHBfdW5y ZWdpc3Rlcih2b2lkKQo+PiArewo+PiArCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkcF9k aXNwbGF5X2RyaXZlcik7Cj4+ICt9Cj4+ICsKPj4gK2ludCBtc21fZHBfbW9kZXNldF9pbml0KHN0 cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXksIHN0cnVjdCBkcm1fZGV2aWNlIAo+PiAqZGV2LAo+PiAr CQkJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQo+IAo+IFdoZXJlIGlzIHRoaXMgY2FsbGVk Pwo+IAp0aGlzIGlzIGNhbGxlZCBmcm9tIGRwdV9rbXMuYy4KaHR0cHM6Ly9wYXRjaHdvcmsua2Vy bmVsLm9yZy9wYXRjaC8xMDY4NjkwNS8KV2lsbCBiZSBhZGRpbmcgdGhlIERQVSBzcGVjaWZpYyBj aGFuZ2UgaW4gdGhpcyBWMyBwYXRjaCBzZXJpZXMuCgo+PiArewo+PiArCXN0cnVjdCBtc21fZHJt X3ByaXZhdGUgKnByaXY7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCWlmIChXQVJOX09OKCFlbmNv ZGVyKSB8fCBXQVJOX09OKCFkcF9kaXNwbGF5KSB8fCBXQVJOX09OKCFkZXYpKQo+PiArCQlyZXR1 cm4gLUVJTlZBTDsKPj4gKwo+PiArCXByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+PiArCWRwX2Rp c3BsYXktPmRybV9kZXYgPSBkZXY7Cj4+ICsKPj4gKwlyZXQgPSBkcF9kcm1fYnJpZGdlX2luaXQo ZHBfZGlzcGxheSwgZW5jb2Rlcik7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlkZXZfZXJyKGRldi0+ ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBkcCBicmlkZ2U6ICVkXG4iLCByZXQpOwo+PiArCQlkcF9k aXNwbGF5LT5icmlkZ2UgPSBOVUxMOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwlkcF9k aXNwbGF5LT5lbmNvZGVyID0gZW5jb2RlcjsKPj4gKwo+PiArCWRwX2Rpc3BsYXktPmNvbm5lY3Rv ciA9IGRwX2RybV9jb25uZWN0b3JfaW5pdChkcF9kaXNwbGF5KTsKPj4gKwlpZiAoSVNfRVJSKGRw X2Rpc3BsYXktPmNvbm5lY3RvcikpIHsKPj4gKwkJcmV0ID0gUFRSX0VSUihkcF9kaXNwbGF5LT5j b25uZWN0b3IpOwo+PiArCQlkZXZfZXJyKGRldi0+ZGV2LAo+PiArCQkJImZhaWxlZCB0byBjcmVh dGUgZHAgY29ubmVjdG9yOiAlZFxuIiwgcmV0KTsKPj4gKwkJZHBfZGlzcGxheS0+Y29ubmVjdG9y ID0gTlVMTDsKPj4gKwkJZ290byBjb25uX2ZhaWw7Cj4+ICsJfQo+PiArCj4+ICsJcHJpdi0+YnJp ZGdlc1twcml2LT5udW1fYnJpZGdlcysrXSA9IGRwX2Rpc3BsYXktPmJyaWRnZTsKPj4gKwlwcml2 LT5jb25uZWN0b3JzW3ByaXYtPm51bV9jb25uZWN0b3JzKytdID0gZHBfZGlzcGxheS0+Y29ubmVj dG9yOwo+PiArCXJldHVybiAwOwo+PiArCj4+ICtjb25uX2ZhaWw6Cj4+ICsJaWYgKGRwX2Rpc3Bs YXktPmJyaWRnZSkgewo+PiArCQlkcF9kcm1fYnJpZGdlX2RlaW5pdChkcF9kaXNwbGF5KTsKPj4g KwkJZHBfZGlzcGxheS0+YnJpZGdlID0gTlVMTDsKPj4gKwl9Cj4+ICsJcmV0dXJuIHJldDsKPj4g K30KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5oIAo+ PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5oCj4+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLmNhNWVhZTUKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuaAo+PiBAQCAtMCwwICsxLDU1IEBA Cj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0 aW9uLiBBbGwgcmlnaHRzIAo+PiByZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAo+PiBtb2Rp ZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFuZAo+PiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+ICsgKgo+PiArICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ICsg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQo+PiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBfRFBfRElTUExB WV9IXwo+PiArI2RlZmluZSBfRFBfRElTUExBWV9IXwo+PiArCj4+ICsjaW5jbHVkZSA8ZHJtL2Ry bVAuaD4KPj4gKwo+PiArI2luY2x1ZGUgImRwX3BhbmVsLmgiCj4+ICsKPj4gK3N0cnVjdCBtc21f ZHAgewo+PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2Owo+PiArCXN0cnVjdCBkcF9icmlk Z2UgKmRwX2JyaWRnZTsKPj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+PiAr CXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7Cj4+ICsKPj4gKwkvKiB0aGUgZW5jb2RlciB3ZSBh cmUgaG9va2VkIHRvIChvdXRzaWRlIG9mIGRzaSBibG9jaykgKi8KPj4gKwlzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXI7Cj4+ICsJYm9vbCBpc19jb25uZWN0ZWQ7Cj4+ICsJdTMyIG1heF9wY2xr X2toejsKPj4gKwo+PiArCWludCAoKmVuYWJsZSkoc3RydWN0IG1zbV9kcCAqZHBfZGlzcGxheSk7 Cj4+ICsJaW50ICgqcG9zdF9lbmFibGUpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpOwo+PiAr Cj4+ICsJaW50ICgqcHJlX2Rpc2FibGUpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpOwo+PiAr CWludCAoKmRpc2FibGUpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpOwo+PiArCj4+ICsJaW50 ICgqc2V0X21vZGUpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXksCj4+ICsJCQlzdHJ1Y3QgZHBf ZGlzcGxheV9tb2RlICptb2RlKTsKPj4gKwlpbnQgKCp2YWxpZGF0ZV9tb2RlKShzdHJ1Y3QgbXNt X2RwICpkcF9kaXNwbGF5LCB1MzIgbW9kZV9wY2xrX2toeik7Cj4+ICsJaW50ICgqZ2V0X21vZGVz KShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5LAo+PiArCQlzdHJ1Y3QgZHBfZGlzcGxheV9tb2Rl ICpkcF9tb2RlKTsKPj4gKwlpbnQgKCpwcmVwYXJlKShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5 KTsKPj4gKwlpbnQgKCp1bnByZXBhcmUpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpOwo+PiAr CWludCAoKnJlcXVlc3RfaXJxKShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KTsKPj4gKwlzdHJ1 Y3QgZHBfZGVidWcgKigqZ2V0X2RlYnVnKShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KTsKPj4g Kwl2b2lkICgqc2VuZF9ocGRfZXZlbnQpKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpOwo+PiAr CWJvb2wgKCppc192aWRlb190ZXN0KShzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KTsKPj4gKwlp bnQgKCpnZXRfdGVzdF9icHApKHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkpOwo+PiArfTsKPj4g Kwo+PiAraW50IGRwX2Rpc3BsYXlfZ2V0X251bV9vZl9kaXNwbGF5cyh2b2lkKTsKPj4gK2ludCBk cF9kaXNwbGF5X2dldF9kaXNwbGF5cyh2b2lkICoqZGlzcGxheXMsIGludCBjb3VudCk7Cj4+ICsj ZW5kaWYgLyogX0RQX0RJU1BMQVlfSF8gKi8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvZHBfZHJtLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0uYwo+ PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi42NGQ2NDQ5Cj4+IC0tLSAv ZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kcm0uYwo+PiBAQCAt MCwwICsxLDU0MiBAQAo+PiArLyoKPj4gKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUg TGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyAKPj4gcmVzZXJ2ZWQuCj4+ICsgKgo+PiArICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciAKPj4gbW9kaWZ5Cj4+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPj4gKyAqIG9ubHkgdmVyc2lvbiAyIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+PiArICoKPj4gKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKPj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPj4gKyAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiArICovCj4+ICsKPj4gKyNkZWZp bmUgcHJfZm10KGZtdCkJIltkcm0tZHBdOiAlczogIiBmbXQsIF9fZnVuY19fCj4+ICsKPj4gKyNp bmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0 b21pYy5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+PiArCj4+ICsjaW5jbHVkZSAi bXNtX2Rydi5oIgo+PiArI2luY2x1ZGUgIm1zbV9rbXMuaCIKPj4gKy8vI2luY2x1ZGUgImRwdV9j b25uZWN0b3IuaCIKPj4gKyNpbmNsdWRlICJkcF9kcm0uaCIKPj4gKyNpbmNsdWRlICJkcF9kZWJ1 Zy5oIgo+PiArCj4+ICtzdHJ1Y3QgZHBfY29ubmVjdG9yIHsKPj4gKwlzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciBiYXNlOwo+PiArCXN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXk7Cj4+ICt9Owo+PiArI2Rl ZmluZSB0b19kcF9jb25uZWN0b3IoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBkcF9jb25uZWN0 b3IsIGJhc2UpCj4+ICsjZGVmaW5lIHRvX2RwX2JyaWRnZSh4KSAgICAgY29udGFpbmVyX29mKCh4 KSwgc3RydWN0IGRwX2JyaWRnZSwgYmFzZSkKPj4gKwo+PiArc3RhdGljIHZvaWQgY29udmVydF90 b19kcF9tb2RlKGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIAo+PiAqZHJtX21vZGUsCj4+ ICsJCQlzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlICpkcF9tb2RlLCBzdHJ1Y3QgbXNtX2RwICpkcCkK Pj4gK3sKPj4gKwljb25zdCB1MzIgbnVtX2NvbXBvbmVudHMgPSAzOwo+PiArCj4+ICsJbWVtc2V0 KGRwX21vZGUsIDAsIHNpemVvZigqZHBfbW9kZSkpOwo+PiArCj4+ICsJZHBfbW9kZS0+dGltaW5n LmhfYWN0aXZlID0gZHJtX21vZGUtPmhkaXNwbGF5Owo+PiArCWRwX21vZGUtPnRpbWluZy5oX2Jh Y2tfcG9yY2ggPSBkcm1fbW9kZS0+aHRvdGFsIC0gCj4+IGRybV9tb2RlLT5oc3luY19lbmQ7Cj4+ ICsJZHBfbW9kZS0+dGltaW5nLmhfc3luY193aWR0aCA9IGRybV9tb2RlLT5odG90YWwgLQo+PiAr CQkJKGRybV9tb2RlLT5oc3luY19zdGFydCArIGRwX21vZGUtPnRpbWluZy5oX2JhY2tfcG9yY2gp Owo+PiArCWRwX21vZGUtPnRpbWluZy5oX2Zyb250X3BvcmNoID0gZHJtX21vZGUtPmhzeW5jX3N0 YXJ0IC0KPj4gKwkJCQkJIGRybV9tb2RlLT5oZGlzcGxheTsKPj4gKwlkcF9tb2RlLT50aW1pbmcu aF9za2V3ID0gZHJtX21vZGUtPmhza2V3Owo+PiArCj4+ICsJZHBfbW9kZS0+dGltaW5nLnZfYWN0 aXZlID0gZHJtX21vZGUtPnZkaXNwbGF5Owo+PiArCWRwX21vZGUtPnRpbWluZy52X2JhY2tfcG9y Y2ggPSBkcm1fbW9kZS0+dnRvdGFsIC0gCj4+IGRybV9tb2RlLT52c3luY19lbmQ7Cj4+ICsJZHBf bW9kZS0+dGltaW5nLnZfc3luY193aWR0aCA9IGRybV9tb2RlLT52dG90YWwgLQo+PiArCQkoZHJt X21vZGUtPnZzeW5jX3N0YXJ0ICsgZHBfbW9kZS0+dGltaW5nLnZfYmFja19wb3JjaCk7Cj4+ICsK Pj4gKwlkcF9tb2RlLT50aW1pbmcudl9mcm9udF9wb3JjaCA9IGRybV9tb2RlLT52c3luY19zdGFy dCAtCj4+ICsJCQkJCSBkcm1fbW9kZS0+dmRpc3BsYXk7Cj4+ICsKPj4gKwlpZiAoZHAtPmlzX3Zp ZGVvX3Rlc3QoZHApKQo+PiArCQlkcF9tb2RlLT50aW1pbmcuYnBwID0gZHAtPmdldF90ZXN0X2Jw cChkcCk7Cj4+ICsJZWxzZQo+PiArCQlkcF9tb2RlLT50aW1pbmcuYnBwID0gZHAtPmNvbm5lY3Rv ci0+ZGlzcGxheV9pbmZvLmJwYyAqCj4+ICsJCW51bV9jb21wb25lbnRzOwo+PiArCj4+ICsJaWYg KCFkcF9tb2RlLT50aW1pbmcuYnBwKQo+PiArCQlkcF9tb2RlLT50aW1pbmcuYnBwID0gMjQ7Cj4+ ICsKPj4gKwlkcF9tb2RlLT50aW1pbmcucmVmcmVzaF9yYXRlID0gZHJtX21vZGUtPnZyZWZyZXNo Owo+PiArCj4+ICsJZHBfbW9kZS0+dGltaW5nLnBpeGVsX2Nsa19raHogPSBkcm1fbW9kZS0+Y2xv Y2s7Cj4+ICsKPj4gKwlkcF9tb2RlLT50aW1pbmcudl9hY3RpdmVfbG93ID0KPj4gKwkJISEoZHJt X21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpOwo+PiArCj4+ICsJZHBfbW9kZS0+ dGltaW5nLmhfYWN0aXZlX2xvdyA9Cj4+ICsJCSEhKGRybV9tb2RlLT5mbGFncyAmIERSTV9NT0RF X0ZMQUdfTkhTWU5DKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgY29udmVydF90b19kcm1f bW9kZShjb25zdCBzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlIAo+PiAqZHBfbW9kZSwKPj4gKwkJCQlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGUpCj4+ICt7Cj4+ICsJdTMyIGZsYWdzID0g MDsKPj4gKwo+PiArCW1lbXNldChkcm1fbW9kZSwgMCwgc2l6ZW9mKCpkcm1fbW9kZSkpOwo+PiAr Cj4+ICsJZHJtX21vZGUtPmhkaXNwbGF5ID0gZHBfbW9kZS0+dGltaW5nLmhfYWN0aXZlOwo+PiAr CWRybV9tb2RlLT5oc3luY19zdGFydCA9IGRybV9tb2RlLT5oZGlzcGxheSArCj4+ICsJCQkJZHBf bW9kZS0+dGltaW5nLmhfZnJvbnRfcG9yY2g7Cj4+ICsJZHJtX21vZGUtPmhzeW5jX2VuZCA9IGRy bV9tb2RlLT5oc3luY19zdGFydCArCj4+ICsJCQkgICAgICBkcF9tb2RlLT50aW1pbmcuaF9zeW5j X3dpZHRoOwo+PiArCWRybV9tb2RlLT5odG90YWwgPSBkcm1fbW9kZS0+aHN5bmNfZW5kICsgCj4+ IGRwX21vZGUtPnRpbWluZy5oX2JhY2tfcG9yY2g7Cj4+ICsJZHJtX21vZGUtPmhza2V3ID0gZHBf bW9kZS0+dGltaW5nLmhfc2tldzsKPj4gKwo+PiArCWRybV9tb2RlLT52ZGlzcGxheSA9IGRwX21v ZGUtPnRpbWluZy52X2FjdGl2ZTsKPj4gKwlkcm1fbW9kZS0+dnN5bmNfc3RhcnQgPSBkcm1fbW9k ZS0+dmRpc3BsYXkgKwo+PiArCQkJCWRwX21vZGUtPnRpbWluZy52X2Zyb250X3BvcmNoOwo+PiAr CWRybV9tb2RlLT52c3luY19lbmQgPSBkcm1fbW9kZS0+dnN5bmNfc3RhcnQgKwo+PiArCQkJICAg ICAgZHBfbW9kZS0+dGltaW5nLnZfc3luY193aWR0aDsKPj4gKwlkcm1fbW9kZS0+dnRvdGFsID0g ZHJtX21vZGUtPnZzeW5jX2VuZCArIAo+PiBkcF9tb2RlLT50aW1pbmcudl9iYWNrX3BvcmNoOwo+ PiArCj4+ICsJZHJtX21vZGUtPnZyZWZyZXNoID0gZHBfbW9kZS0+dGltaW5nLnJlZnJlc2hfcmF0 ZTsKPj4gKwlkcm1fbW9kZS0+Y2xvY2sgPSBkcF9tb2RlLT50aW1pbmcucGl4ZWxfY2xrX2toejsK Pj4gKwo+PiArCWlmIChkcF9tb2RlLT50aW1pbmcuaF9hY3RpdmVfbG93KQo+PiArCQlmbGFncyB8 PSBEUk1fTU9ERV9GTEFHX05IU1lOQzsKPj4gKwllbHNlCj4+ICsJCWZsYWdzIHw9IERSTV9NT0RF X0ZMQUdfUEhTWU5DOwo+PiArCj4+ICsJaWYgKGRwX21vZGUtPnRpbWluZy52X2FjdGl2ZV9sb3cp Cj4+ICsJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTlZTWU5DOwo+PiArCWVsc2UKPj4gKwkJZmxh Z3MgfD0gRFJNX01PREVfRkxBR19QVlNZTkM7Cj4+ICsKPj4gKwlkcm1fbW9kZS0+ZmxhZ3MgPSBm bGFnczsKPj4gKwo+PiArCWRybV9tb2RlLT50eXBlID0gMHg0ODsKPj4gKwlkcm1fbW9kZV9zZXRf bmFtZShkcm1fbW9kZSk7Cj4+ICt9Cj4gCj4gSnVzdCB1c2UgdGhlIGRybSBtb2RlcyBkaXJlY3Rs eSBhbmQgZGVsZXRlIHRoZXNlIGZ1bmN0aW9ucy4KPiAKRml4ZWQgaW4gVjIuCgo+PiArCj4+ICtz dGF0aWMgdm9pZCBkcF9icmlkZ2VfcHJlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqZHJtX2Jy aWRnZSkKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVjdCBkcF9icmlkZ2UgKmJyaWRn ZTsKPj4gKwlzdHJ1Y3QgbXNtX2RwICpkcDsKPj4gKwo+PiArCWlmICghZHJtX2JyaWRnZSkgewo+ PiArCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4g Kwo+PiArCWJyaWRnZSA9IHRvX2RwX2JyaWRnZShkcm1fYnJpZGdlKTsKPj4gKwlkcCA9IGJyaWRn ZS0+ZGlzcGxheTsKPj4gKwo+PiArCS8qIEJ5IHRoaXMgcG9pbnQgbW9kZSBzaG91bGQgaGF2ZSBi ZWVuIHZhbGlkYXRlZCB0aHJvdWdoIG1vZGVfZml4dXAgCj4+ICovCj4+ICsJcmMgPSBkcC0+c2V0 X21vZGUoZHAsICZicmlkZ2UtPmRwX21vZGUpOwo+PiArCWlmIChyYykgewo+PiArCQlwcl9lcnIo IlslZF0gZmFpbGVkIHRvIHBlcmZvcm0gYSBtb2RlIHNldCwgcmM9JWRcbiIsCj4+ICsJCSAgICAg ICBicmlkZ2UtPmlkLCByYyk7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlyYyA9IGRw LT5wcmVwYXJlKGRwKTsKPj4gKwlpZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJbJWRdIERQIGRpc3Bs YXkgcHJlcGFyZSBmYWlsZWQsIHJjPSVkXG4iLAo+PiArCQkgICAgICAgYnJpZGdlLT5pZCwgcmMp Owo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJcmMgPSBkcC0+ZW5hYmxlKGRwKTsKPj4g KwlpZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJbJWRdIERQIGRpc3BsYXkgZW5hYmxlIGZhaWxlZCwg cmM9JWRcbiIsCj4+ICsJCSAgICAgICBicmlkZ2UtPmlkLCByYyk7Cj4+ICsJCWRwLT51bnByZXBh cmUoZHApOwo+PiArCX0KPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfYnJpZGdlX2VuYWJs ZShzdHJ1Y3QgZHJtX2JyaWRnZSAqZHJtX2JyaWRnZSkKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+ PiArCXN0cnVjdCBkcF9icmlkZ2UgKmJyaWRnZTsKPj4gKwlzdHJ1Y3QgbXNtX2RwICpkcDsKPj4g Kwo+PiArCWlmICghZHJtX2JyaWRnZSkgewo+PiArCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4i KTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWJyaWRnZSA9IHRvX2RwX2JyaWRnZShk cm1fYnJpZGdlKTsKPj4gKwlkcCA9IGJyaWRnZS0+ZGlzcGxheTsKPj4gKwo+PiArCXJjID0gZHAt PnBvc3RfZW5hYmxlKGRwKTsKPj4gKwlpZiAocmMpCj4+ICsJCXByX2VycigiWyVkXSBEUCBkaXNw bGF5IHBvc3QgZW5hYmxlIGZhaWxlZCwgcmM9JWRcbiIsCj4+ICsJCSAgICAgICBicmlkZ2UtPmlk LCByYyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX2JyaWRnZV9kaXNhYmxlKHN0cnVj dCBkcm1fYnJpZGdlICpkcm1fYnJpZGdlKQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3Ry dWN0IGRwX2JyaWRnZSAqYnJpZGdlOwo+PiArCXN0cnVjdCBtc21fZHAgKmRwOwo+PiArCj4+ICsJ aWYgKCFkcm1fYnJpZGdlKSB7Cj4+ICsJCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwo+PiAr CQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJYnJpZGdlID0gdG9fZHBfYnJpZGdlKGRybV9icmlk Z2UpOwo+PiArCWRwID0gYnJpZGdlLT5kaXNwbGF5Owo+PiArCj4+ICsJcmMgPSBkcC0+cHJlX2Rp c2FibGUoZHApOwo+PiArCWlmIChyYykgewo+PiArCQlwcl9lcnIoIlslZF0gRFAgZGlzcGxheSBw cmUgZGlzYWJsZSBmYWlsZWQsIHJjPSVkXG4iLAo+PiArCQkgICAgICAgYnJpZGdlLT5pZCwgcmMp Owo+PiArCX0KPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfYnJpZGdlX3Bvc3RfZGlzYWJs ZShzdHJ1Y3QgZHJtX2JyaWRnZSAqZHJtX2JyaWRnZSkKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+ PiArCXN0cnVjdCBkcF9icmlkZ2UgKmJyaWRnZTsKPj4gKwlzdHJ1Y3QgbXNtX2RwICpkcDsKPj4g Kwo+PiArCWlmICghZHJtX2JyaWRnZSkgewo+PiArCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4i KTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWJyaWRnZSA9IHRvX2RwX2JyaWRnZShk cm1fYnJpZGdlKTsKPj4gKwlkcCA9IGJyaWRnZS0+ZGlzcGxheTsKPj4gKwo+PiArCXJjID0gZHAt PmRpc2FibGUoZHApOwo+PiArCWlmIChyYykgewo+PiArCQlwcl9lcnIoIlslZF0gRFAgZGlzcGxh eSBkaXNhYmxlIGZhaWxlZCwgcmM9JWRcbiIsCj4+ICsJCSAgICAgICBicmlkZ2UtPmlkLCByYyk7 Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlyYyA9IGRwLT51bnByZXBhcmUoZHApOwo+ PiArCWlmIChyYykgewo+PiArCQlwcl9lcnIoIlslZF0gRFAgZGlzcGxheSB1bnByZXBhcmUgZmFp bGVkLCByYz0lZFxuIiwKPj4gKwkJICAgICAgIGJyaWRnZS0+aWQsIHJjKTsKPj4gKwkJcmV0dXJu Owo+PiArCX0KPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfYnJpZGdlX21vZGVfc2V0KHN0 cnVjdCBkcm1fYnJpZGdlICpkcm1fYnJpZGdlLAo+PiArCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlLAo+PiArCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2Rl KQo+PiArewo+PiArCXN0cnVjdCBkcF9icmlkZ2UgKmJyaWRnZTsKPj4gKwlzdHJ1Y3QgbXNtX2Rw ICpkcDsKPj4gKwo+PiArCWlmICghZHJtX2JyaWRnZSB8fCAhbW9kZSB8fCAhYWRqdXN0ZWRfbW9k ZSkgewo+PiArCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKPj4gKwkJcmV0dXJuOwo+PiAr CX0KPj4gKwo+PiArCWJyaWRnZSA9IHRvX2RwX2JyaWRnZShkcm1fYnJpZGdlKTsKPj4gKwlkcCA9 IGJyaWRnZS0+ZGlzcGxheTsKPj4gKwo+PiArCW1lbXNldCgmYnJpZGdlLT5kcF9tb2RlLCAweDAs IHNpemVvZihzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlKSk7Cj4+ICsJY29udmVydF90b19kcF9tb2Rl KGFkanVzdGVkX21vZGUsICZicmlkZ2UtPmRwX21vZGUsIGRwKTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGJvb2wgZHBfYnJpZGdlX21vZGVfZml4dXAoc3RydWN0IGRybV9icmlkZ2UgKmRybV9icmlk Z2UsCj4+ICsJCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPj4gKwkJ CQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQo+PiArewo+PiArCWJv b2wgcmV0ID0gdHJ1ZTsKPj4gKwlzdHJ1Y3QgZHBfZGlzcGxheV9tb2RlIGRwX21vZGU7Cj4+ICsJ c3RydWN0IGRwX2JyaWRnZSAqYnJpZGdlOwo+PiArCXN0cnVjdCBtc21fZHAgKmRwOwo+PiArCj4+ ICsJaWYgKCFkcm1fYnJpZGdlIHx8ICFtb2RlIHx8ICFhZGp1c3RlZF9tb2RlKSB7Cj4+ICsJCXBy X2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwo+PiArCQlyZXQgPSBmYWxzZTsKPj4gKwkJZ290byBl bmQ7Cj4+ICsJfQo+PiArCj4+ICsJYnJpZGdlID0gdG9fZHBfYnJpZGdlKGRybV9icmlkZ2UpOwo+ PiArCWRwID0gYnJpZGdlLT5kaXNwbGF5Owo+PiArCj4+ICsJY29udmVydF90b19kcF9tb2RlKG1v ZGUsICZkcF9tb2RlLCBkcCk7Cj4+ICsJY29udmVydF90b19kcm1fbW9kZSgmZHBfbW9kZSwgYWRq dXN0ZWRfbW9kZSk7Cj4+ICtlbmQ6Cj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIGRwX2JyaWRnZV9vcHMgPSB7Cj4+ICsJ Lm1vZGVfZml4dXAgICA9IGRwX2JyaWRnZV9tb2RlX2ZpeHVwLAo+PiArCS5wcmVfZW5hYmxlICAg PSBkcF9icmlkZ2VfcHJlX2VuYWJsZSwKPj4gKwkuZW5hYmxlICAgICAgID0gZHBfYnJpZGdlX2Vu YWJsZSwKPj4gKwkuZGlzYWJsZSAgICAgID0gZHBfYnJpZGdlX2Rpc2FibGUsCj4+ICsJLnBvc3Rf ZGlzYWJsZSA9IGRwX2JyaWRnZV9wb3N0X2Rpc2FibGUsCj4+ICsJLm1vZGVfc2V0ICAgICA9IGRw X2JyaWRnZV9tb2RlX3NldCwKPj4gK307Cj4gCj4gSSdtIG5vdCBjb252aW5jZWQgeW91IG5lZWQg YW55IG9mIHRoaXMuIFRoZSBvbmx5IGFkdmFudGFnZSBhIGJyaWRnZSAKPiBnZXRzIHlvdSBpcwo+ IHRvIGJlIGludm9sdmVkIGluIG1vZGVzZXQuIEhvd2V2ZXIgdGhlIG9ubHkgdGhpbmcgeW91IGRv IGluIG1vZGVzZXQgaXMgCj4gc2F2ZSB0aGUKPiBtb2RlICh3aGljaCBpcyBvbmx5IHVzZWQgaW4g ZW5hYmxlKS4gU28gd2h5IG5vdCBqdXN0IHVzZSB0aGUgbW9kZSBmcm9tIAo+IHRoZQo+IGNydGMn cyBzdGF0ZSB3aGVuIGVuY29kZXItPmVuYWJsZSBpcyBjYWxsZWQ/Cj4gCj4gVGhhdCBhbGxvd3Mg eW91IHRvIGRlbGV0ZSBhbGwgb2YgdGhlIGJyaWRnZSBzdHVmZiBoZXJlLgo+IApGaXhlZCBpbiBW Mi4KCj4+ICsKPj4gK2ludCBkcF9jb25uZWN0b3JfcG9zdF9pbml0KHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IsIHZvaWQgCj4+ICpkaXNwbGF5KQo+PiArewo+PiArCXN0cnVjdCBtc21f ZHAgKmRwX2Rpc3BsYXkgPSBkaXNwbGF5Owo+PiArCj4+ICsJaWYgKCFkcF9kaXNwbGF5KQo+PiAr CQlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArCWRwX2Rpc3BsYXktPmNvbm5lY3RvciA9IGNvbm5l Y3RvcjsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPiAKPiBUaGlzIGlzbid0IGNhbGxlZCBmcm9tIGFu eXRoaW5nPwo+IApGaXhlZCBpbiBWMi4KCj4+ICsKPj4gKy8qKgo+PiArICogZHBfY29ubmVjdG9y X2RldGVjdCAtIGNhbGxiYWNrIHRvIGRldGVybWluZSBpZiBjb25uZWN0b3IgaXMgCj4+IGNvbm5l Y3RlZAo+PiArICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVy ZQo+PiArICogQGZvcmNlOiBGb3JjZSBkZXRlY3Qgc2V0dGluZyBmcm9tIGRybSBmcmFtZXdvcmsK Pj4gKyAqIFJldHVybnM6IENvbm5lY3RvciAnaXMgY29ubmVjdGVkJyBzdGF0dXMKPj4gKyAqLwo+ PiArc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgZHBfY29ubmVjdG9yX2RldGVjdChz dHJ1Y3QgCj4+IGRybV9jb25uZWN0b3IgKmNvbm4sCj4+ICsJCWJvb2wgZm9yY2UpCj4+ICt7Cj4+ ICsJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVzX3Vu a25vd247Cj4+ICsJc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgY3VycmVudF9zdGF0 dXMgPSAKPj4gY29ubmVjdG9yX3N0YXR1c191bmtub3duOwo+PiArCXN0cnVjdCBtc21fZHAgKmRw Owo+PiArCXN0cnVjdCBkcF9jb25uZWN0b3IgKmRwX2Nvbm47Cj4+ICsJc3RydWN0IG1zbV9kcm1f cHJpdmF0ZSAqcHJpdiA9IGNvbm4tPmRldi0+ZGV2X3ByaXZhdGU7Cj4+ICsJc3RydWN0IG1zbV9r bXMgKmttcyA9IHByaXYtPmttczsKPj4gKwo+PiArCWRwX2Nvbm4gPSB0b19kcF9jb25uZWN0b3Io Y29ubik7Cj4+ICsJZHAgPSBkcF9jb25uLT5kcF9kaXNwbGF5Owo+IAo+IG5vIG5lZWQgZm9yIGRw X2Nvbm4sIGp1c3QgZG8KPiAKPiAgICAgICAgIGRwID0gdG9fZHBfY29ubmVjdG9yKGNvbm4pLT5k cF9kaXNwbGF5Owo+IApXaWxsIGZpeCB0aGlzIGluIFYzLgoKPj4gKwo+PiArCXByX2VycigiaXNf Y29ubmVjdGVkID0gJXNcbiIsCj4+ICsJCShkcC0+aXNfY29ubmVjdGVkKSA/ICJ0cnVlIiA6ICJm YWxzZSIpOwo+PiArCj4+ICsJc3RhdHVzID0gKGRwLT5pc19jb25uZWN0ZWQpID8gY29ubmVjdG9y X3N0YXR1c19jb25uZWN0ZWQgOgo+PiArCQkJCQljb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3Rl ZDsKPj4gKwo+PiArCWlmIChkcC0+aXNfY29ubmVjdGVkICYmIGRwLT5icmlkZ2UtPmVuY29kZXIK Pj4gKwkJCQkmJiAoY3VycmVudF9zdGF0dXMgIT0gc3RhdHVzKQo+IAo+IFRoaXMgaXMgYWx3YXlz IHRydWUuCj4gCnJlbW92ZWQgdGhlIGJyaWRnZS0+ZW5jb2RlciBjaGVjayBpbiBWMi4KCj4+ICsJ CQkJJiYga21zLT5mdW5jcy0+c2V0X2VuY29kZXJfbW9kZSkgewo+PiArCQlrbXMtPmZ1bmNzLT5z ZXRfZW5jb2Rlcl9tb2RlKGttcywKPj4gKwkJCQlkcC0+YnJpZGdlLT5lbmNvZGVyLCBmYWxzZSk7 Cj4+ICsJCXByX2VycigiY2FsbCBzZXRfZW5jb2Rlcl9tb2RlXG4iKTsKPiAKPiBkZXRlY3QoKSBz aG91bGQgbmV2ZXIgZG8gd29yaywgcGxlYXNlIHJlbW92ZS4KPiAKSGFkIHRoaXMgZml4ZWQgbG9j YWxseSBidXQgc29tZSBob3cgbWlzc2VkIHRoZXNlIGZpeGVzIGluIFYyLiBXaWxsIGFkZCAKdGhl IG1pc3NpbmcgZml4ZXMKaW4gVjMuIFNhbWUgdGhpbmsgd2l0aCBjdXJyZW50X3N0YXR1cy4KCj4+ ICsJfQo+PiArCWN1cnJlbnRfc3RhdHVzID0gc3RhdHVzOwo+IAo+IFdoeT8KPiAKPj4gKwlyZXR1 cm4gc3RhdHVzOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9jb25uZWN0b3JfZGVzdHJv eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+PiArewo+PiArCXN0cnVjdCBkcF9j b25uZWN0b3IgKmRwX2Nvbm4gPSB0b19kcF9jb25uZWN0b3IoY29ubmVjdG9yKTsKPj4gKwo+PiAr CURCRygiIik7Cj4+ICsKPj4gKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKPj4g Kwo+PiArCWtmcmVlKGRwX2Nvbm4pOwo+IAo+IE9uY2UgZHBfY29ubiBpcyBkZXZtIG1hbmFnZWQs IHlvdSBjYW4ganVzdCByZW1vdmUgdGhpcyBmdW5jdGlvbiBhbmQgc2V0IAo+IC5kZXN0cm95Cj4g dG8gZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwCj4gCkZpeGVkIGluIFYyLgoKPj4gK30KPj4gKwo+PiAr dm9pZCBkcF9jb25uZWN0b3Jfc2VuZF9ocGRfZXZlbnQodm9pZCAqZGlzcGxheSkKPiAKPiBXaGVy ZSBpcyB0aGlzIGNhbGxlZD8KPiAKRml4ZWQgaW4gVjIuCgo+PiArewo+PiArCXN0cnVjdCBtc21f ZHAgKmRwOwo+PiArCj4+ICsJaWYgKCFkaXNwbGF5KSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBp bnB1dFxuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlkcCA9IGRpc3BsYXk7Cj4+ ICsKPj4gKwlpZiAoZHAtPnNlbmRfaHBkX2V2ZW50KQo+PiArCQlkcC0+c2VuZF9ocGRfZXZlbnQo ZHApOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGRwX2Nvbm5lY3Rvcl9nZXRfbW9kZXMgLSBj YWxsYmFjayB0byBhZGQgZHJtIG1vZGVzIHZpYSAKPj4gZHJtX21vZGVfcHJvYmVkX2FkZCgpCj4+ ICsgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCj4+ICsg KiBSZXR1cm5zOiBOdW1iZXIgb2YgbW9kZXMgYWRkZWQKPj4gKyAqLwo+PiArc3RhdGljIGludCBk cF9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4+ ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3QgbXNtX2RwICpkcDsKPj4gKwlzdHJ1Y3Qg ZHBfZGlzcGxheV9tb2RlICpkcF9tb2RlID0gTlVMTDsKPj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbSwgZHJtX21vZGU7Cj4+ICsJc3RydWN0IGRwX2Nvbm5lY3RvciAqZHBfY29ubjsKPj4g Kwo+PiArCWlmICghY29ubmVjdG9yKQo+PiArCQlyZXR1cm4gMDsKPj4gKwo+PiArCWRwX2Nvbm4g PSB0b19kcF9jb25uZWN0b3IoY29ubmVjdG9yKTsKPj4gKwlkcCA9IGRwX2Nvbm4tPmRwX2Rpc3Bs YXk7Cj4+ICsKPj4gKwlkcF9tb2RlID0ga3phbGxvYyhzaXplb2YoKmRwX21vZGUpLCAgR0ZQX0tF Uk5FTCk7Cj4+ICsJaWYgKCFkcF9tb2RlKQo+PiArCQlyZXR1cm4gMDsKPiAKPiBXaGVuIHlvdSBn ZXQgcmlkIG9mIGRwX2Rpc3BsYXlfbW9kZSwgcGxlYXNlIHVzZSB0aGUgc3RhY2sgZm9yIHRoZSBu ZXcKPiBkcm1fZGlzcGxheV9tb2RlCj4gCkZpeGVkIGluIFYyLgoKPj4gKwo+PiArCS8qIHBsdWdn YWJsZSBjYXNlIGFzc3VtZXMgRURJRCBpcyByZWFkIHdoZW4gSFBEICovCj4+ICsJaWYgKGRwLT5p c19jb25uZWN0ZWQpIHsKPj4gKwkJcmMgPSBkcC0+Z2V0X21vZGVzKGRwLCBkcF9tb2RlKTsKPiAK PiBXaHkgaXMgb25seSBvbmUgbW9kZSByZXR1cm5lZD8KPiAKVGhlIGdldF9tb2RlcygpIGZ1bmN0 aW9uIG1pZ2h0IHJldHVybiBvbmUgbW9kZSB0aGF0IGlzIHN0b3JlZAppbiBkcF9tb2RlIHdoZW4g Y29tcGxpYW5jZSB0ZXN0IGlzIGluIHByb2dyZXNzLiBJZiBub3QsIHRoZQpyZXR1cm4gdmFsdWUg aXMgZXF1YWwgdG8gdGhlIHRvdGFsIG51bWJlciBvZiBtb2RlcyBzdXBwb3J0ZWQKYnkgdGhlIHNp bmsKCj4+ICsJCWlmICghcmMpCj4gCj4gVGhpcyBjYW4gYWxzbyByZXR1cm4gLWVycm5vLCB5b3Ug c2hvdWxkIGNoZWNrIGZvciB0aGF0IHRvby4KPiAKRml4ZWQgaW4gVjIuCgo+PiArCQkJcHJfZXJy KCJmYWlsZWQgdG8gZ2V0IERQIHNpbmsgbW9kZXMsIHJjPSVkXG4iLCByYyk7Cj4gCj4gV2h5IGNv bnRpbnVlIGlmIHlvdSBrbm93IHlvdSBmYWlsZWQ/Cj4gCj4+ICsKPj4gKwkJaWYgKGRwX21vZGUt PnRpbWluZy5waXhlbF9jbGtfa2h6KSB7IC8qIHZhbGlkIERQIG1vZGUgKi8KPj4gKwkJCW1lbXNl dCgmZHJtX21vZGUsIDB4MCwgc2l6ZW9mKGRybV9tb2RlKSk7Cj4+ICsJCQljb252ZXJ0X3RvX2Ry bV9tb2RlKGRwX21vZGUsICZkcm1fbW9kZSk7Cj4+ICsJCQltID0gZHJtX21vZGVfZHVwbGljYXRl KGNvbm5lY3Rvci0+ZGV2LCAmZHJtX21vZGUpOwo+PiArCQkJaWYgKCFtKSB7Cj4+ICsJCQkJcHJf ZXJyKCJmYWlsZWQgdG8gYWRkIG1vZGUgJXV4JXVcbiIsCj4+ICsJCQkJICAgICAgIGRybV9tb2Rl LmhkaXNwbGF5LAo+PiArCQkJCSAgICAgICBkcm1fbW9kZS52ZGlzcGxheSk7Cj4+ICsJCQkJa2Zy ZWUoZHBfbW9kZSk7Cj4+ICsJCQkJcmV0dXJuIDA7Cj4+ICsJCQl9Cj4+ICsJCQltLT53aWR0aF9t bSA9IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21tOwo+PiArCQkJbS0+aGVpZ2h0X21t ID0gY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0X21tOwo+IAo+IFlvdSBzaG91bGRuJ3Qg b3ZlcndyaXRlIHRoZXNlLgo+IApGaXhlZCBpbiBWMi4KCj4+ICsJCQlkcm1fbW9kZV9wcm9iZWRf YWRkKGNvbm5lY3RvciwgbSk7Cj4+ICsJCX0KPj4gKwl9IGVsc2Ugewo+PiArCQlwcl9lcnIoIk5v IHNpbmsgY29ubmVjdGVkXG4iKTsKPiAKPiBUaGlzIHNob3VsZG4ndCBiZSBhbiBlcnJvcgo+IApG aXhlZCBpbiBWMi4KCj4+ICsJfQo+PiArCWtmcmVlKGRwX21vZGUpOwo+PiArCj4+ICsJcmV0dXJu IHJjOwo+PiArfQo+PiArCj4+ICtpbnQgZHBfZHJtX2JyaWRnZV9pbml0KHZvaWQgKmRhdGEsIHN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0 cnVjdCBkcF9icmlkZ2UgKmRwX2JyaWRnZTsKPj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2Owo+ PiArCXN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXkgPSBkYXRhOwo+PiArCXN0cnVjdCBtc21fZHJt X3ByaXZhdGUgKnByaXYgPSBOVUxMOwo+PiArCj4+ICsJZHBfYnJpZGdlID0ga3phbGxvYyhzaXpl b2YoKmRwX2JyaWRnZSksIEdGUF9LRVJORUwpOwo+PiArCWlmICghZHBfYnJpZGdlKSB7Cj4+ICsJ CXJjID0gLUVOT01FTTsKPj4gKwkJZ290byBlcnJvcjsKPj4gKwl9Cj4+ICsKPj4gKwlkZXYgPSBk cF9kaXNwbGF5LT5kcm1fZGV2Owo+PiArCWRwX2JyaWRnZS0+ZGlzcGxheSA9IGRwX2Rpc3BsYXk7 Cj4+ICsJZHBfYnJpZGdlLT5iYXNlLmZ1bmNzID0gJmRwX2JyaWRnZV9vcHM7Cj4+ICsJZHBfYnJp ZGdlLT5iYXNlLmVuY29kZXIgPSBlbmNvZGVyOwo+PiArCj4+ICsJcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7Cj4+ICsKPj4gKwlyYyA9IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXIsICZkcF9icmlk Z2UtPmJhc2UsIE5VTEwpOwo+PiArCWlmIChyYykgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBh dHRhY2ggYnJpZGdlLCByYz0lZFxuIiwgcmMpOwo+PiArCQlnb3RvIGVycm9yX2ZyZWVfYnJpZGdl Owo+PiArCX0KPj4gKwo+PiArCXJjID0gZHBfZGlzcGxheS0+cmVxdWVzdF9pcnEoZHBfZGlzcGxh eSk7Cj4+ICsJaWYgKHJjKSB7Cj4+ICsJCXByX2VycigicmVxdWVzdF9pcnEgZmFpbGVkLCByYz0l ZFxuIiwgcmMpOwo+PiArCQlnb3RvIGVycm9yX2ZyZWVfYnJpZGdlOwo+PiArCX0KPj4gKwo+PiAr CWVuY29kZXItPmJyaWRnZSA9ICZkcF9icmlkZ2UtPmJhc2U7Cj4+ICsJZHBfZGlzcGxheS0+ZHBf YnJpZGdlID0gZHBfYnJpZGdlOwo+PiArCWRwX2Rpc3BsYXktPmJyaWRnZSA9ICZkcF9icmlkZ2Ut PmJhc2U7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK2Vycm9yX2ZyZWVfYnJpZGdlOgo+PiArCWtm cmVlKGRwX2JyaWRnZSk7Cj4+ICtlcnJvcjoKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4g K3ZvaWQgZHBfZHJtX2JyaWRnZV9kZWluaXQodm9pZCAqZGF0YSkKPj4gK3sKPj4gKwlzdHJ1Y3Qg bXNtX2RwICpkaXNwbGF5ID0gZGF0YTsKPj4gKwlzdHJ1Y3QgZHBfYnJpZGdlICpicmlkZ2UgPSBk aXNwbGF5LT5kcF9icmlkZ2U7Cj4+ICsKPj4gKwlpZiAoYnJpZGdlICYmIGJyaWRnZS0+YmFzZS5l bmNvZGVyKQo+PiArCQlicmlkZ2UtPmJhc2UuZW5jb2Rlci0+YnJpZGdlID0gTlVMTDsKPj4gKwo+ PiArCWtmcmVlKGJyaWRnZSk7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogZHBfY29ubmVjdG9y X21vZGVfdmFsaWQgLSBjYWxsYmFjayB0byBkZXRlcm1pbmUgaWYgc3BlY2lmaWVkIG1vZGUgCj4+ IGlzIHZhbGlkCj4+ICsgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3Ry dWN0dXJlCj4+ICsgKiBAbW9kZTogUG9pbnRlciB0byBkcm0gbW9kZSBzdHJ1Y3R1cmUKPj4gKyAq IFJldHVybnM6IFZhbGlkaXR5IHN0YXR1cyBmb3Igc3BlY2lmaWVkIG1vZGUKPj4gKyAqLwo+PiAr c3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzIGRwX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVj dCAKPj4gZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+PiArCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwOwo+PiArCXN0cnVj dCBkcF9kZWJ1ZyAqZGVidWc7Cj4+ICsJc3RydWN0IGRwX2Nvbm5lY3RvciAqZHBfY29ubjsKPj4g Kwo+PiArCWlmICghbW9kZSB8fCAhY29ubmVjdG9yKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBw YXJhbXNcbiIpOwo+PiArCQlyZXR1cm4gTU9ERV9FUlJPUjsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9j b25uID0gdG9fZHBfY29ubmVjdG9yKGNvbm5lY3Rvcik7Cj4+ICsJZHBfZGlzcCA9IGRwX2Nvbm4t PmRwX2Rpc3BsYXk7Cj4+ICsJZGVidWcgPSBkcF9kaXNwLT5nZXRfZGVidWcoZHBfZGlzcCk7Cj4+ ICsKPj4gKwltb2RlLT52cmVmcmVzaCA9IGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpOwo+PiArCj4+ ICsJaWYgKG1vZGUtPmNsb2NrID4gZHBfZGlzcC0+bWF4X3BjbGtfa2h6KQo+IAo+IEkgdGhpbmsg dGhlIHZhbHVlIG9mIG1heF9wY2xrX2toeiBpcyByYWN5LCB5b3UnbGwgcHJvYmFibHkgd2FudCB0 byAKPiBhdWRpdCBpdHMKPiB1c2UuCj4gCj4gCkZpeGVkIGluIFYyLgo+PiArCQlyZXR1cm4gTU9E RV9CQUQ7Cj4+ICsKPj4gKwlpZiAoZGVidWctPmRlYnVnX2VuICYmIChtb2RlLT5oZGlzcGxheSAh PSBkZWJ1Zy0+aGRpc3BsYXkgfHwKPj4gKwkJCW1vZGUtPnZkaXNwbGF5ICE9IGRlYnVnLT52ZGlz cGxheSB8fAo+PiArCQkJbW9kZS0+dnJlZnJlc2ggIT0gZGVidWctPnZyZWZyZXNoIHx8Cj4+ICsJ CQltb2RlLT5waWN0dXJlX2FzcGVjdF9yYXRpbyAhPSBkZWJ1Zy0+YXNwZWN0X3JhdGlvKSkKPj4g KwkJcmV0dXJuIE1PREVfQkFEOwo+IAo+IFBsZWFzZSBkcm9wIHRoaXMuCj4gCkZpeGVkIGluIHYy Lgo+PiArCj4+ICsJcmV0dXJuIGRwX2Rpc3AtPnZhbGlkYXRlX21vZGUoZHBfZGlzcCwgbW9kZS0+ Y2xvY2spOwo+IAo+IFNvIEkgZ3Vlc3MgSSB3YXMgd3Jvbmcgd2hlbiBJIHNhaWQgbm9uZSBvZiB0 aGUgZ19kcF9kaXNwbGF5IGZ1bmN0aW9ucyAKPiBhcmUgYmVpbmcKPiB1c2VkLiBJJ20gc3RpbGwg dW5zdXJlIHdoZXJlIHRoZXkncmUgc2V0LCBwZXJoYXBzIHRoZXJlJ3Mgc29tZSBtaXNzaW5nIAo+ IGNvZGUuIEF0Cj4gYW55IHJhdGUsIHdoYXQncyB0aGUgYmVuZWZpdCBvZiBzdGlja2luZyBhbGwg b2YgdGhhdCB3b3JrIGludG8gYW4gCj4gYWJzdHJhY3QKPiBjYWxsYmFjayBob29rIHdoZW4gaXQg b25seSBoYXMgb25lIGltcGxlbWVudGF0aW9uIGFuZCBvbmUgY2FsbHNpdGUuCj4gCmdfZHBfZGlz cGxheSBpcyBpbml0aWFsaXplZCBpbiBkcF9kaXNwbGF5LmMKV2UgYXJlIGNhbGxpbmcgdGhlIEFQ SXMgZGlyZWN0bHkgaW4gVjIuCgo+IEFsbCBvZiB0aGF0IGNvZGUgY2FuIG1vdmUgaW4gaGVyZSAo YW5kIHRoZSBzYW1lIGdvZXMgZm9yIHRoZSBvdGhlciAKPiBjYWxsYmFja3MKPiAobW92ZSB0aGUg Y29kZSB3aGVyZSBpdCdzIHVzZWQpLgo+IAo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9jb25uZWN0b3JfZnVuY3MgZHBfY29ubmVjdG9yX2Z1bmNzID0gewo+PiArCS5kZXRl Y3QgPSBkcF9jb25uZWN0b3JfZGV0ZWN0LAo+PiArCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9w cm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAo+PiArCS5kZXN0cm95ID0gZHBfY29ubmVjdG9y X2Rlc3Ryb3ksCj4+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0 LAo+PiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gCj4+IGRybV9hdG9taWNfaGVscGVyX2Nv bm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCj4+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJt X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCj4+ICt9Owo+PiArCj4+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIAo+PiBkcF9jb25u ZWN0b3JfaGVscGVyX2Z1bmNzID0gewo+PiArCS5nZXRfbW9kZXMgPSBkcF9jb25uZWN0b3JfZ2V0 X21vZGVzLAo+PiArCS5tb2RlX3ZhbGlkID0gZHBfY29ubmVjdG9yX21vZGVfdmFsaWQsCj4+ICt9 Owo+PiArCj4+ICsvKiBjb25uZWN0b3IgaW5pdGlhbGl6YXRpb24gKi8KPj4gK3N0cnVjdCBkcm1f Y29ubmVjdG9yICpkcF9kcm1fY29ubmVjdG9yX2luaXQoc3RydWN0IG1zbV9kcCAKPj4gKmRwX2Rp c3BsYXkpCj4+ICt7Cj4+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IE5VTEw7 Cj4+ICsJc3RydWN0IGRwX2Nvbm5lY3RvciAqZHBfY29ubmVjdG9yOwo+PiArCWludCByZXQ7Cj4+ ICsKPj4gKwlkcF9jb25uZWN0b3IgPSBremFsbG9jKHNpemVvZigqZHBfY29ubmVjdG9yKSwgR0ZQ X0tFUk5FTCk7Cj4gCj4gVXNlIGRldm1fa3phbGxvYyAoeW91J3ZlIGFscmVhZHkgZ290IGEgbWVt b3J5IGxlYWsgaWYgCj4gZHJtX2Nvbm5lY3Rvcl9pbml0IGZhaWxzCj4gYmVsb3cpLgo+IApGaXhl ZCBpbiBWMi4KCj4+ICsJaWYgKCFkcF9jb25uZWN0b3IpCj4+ICsJCXJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOwo+PiArCj4+ICsJZHBfY29ubmVjdG9yLT5kcF9kaXNwbGF5ID0gZHBfZGlzcGxheTsK Pj4gKwo+PiArCWNvbm5lY3RvciA9ICZkcF9jb25uZWN0b3ItPmJhc2U7Cj4+ICsKPj4gKwlyZXQg PSBkcm1fY29ubmVjdG9yX2luaXQoZHBfZGlzcGxheS0+ZHJtX2RldiwgY29ubmVjdG9yLCAKPj4g JmRwX2Nvbm5lY3Rvcl9mdW5jcywKPj4gKwkJCURSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9y dCk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4gKwo+PiArCWRy bV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZkcF9jb25uZWN0b3JfaGVscGVyX2Z1 bmNzKTsKPj4gKwo+PiArCS8qCj4+ICsJICogRW5hYmxlIEhQRCB0byBsZXQgaHBkIGV2ZW50IGlz IGhhbmRsZWQKPj4gKwkgKiB3aGVuIGNhYmxlIGlzIGF0dGFjaGVkIHRvIHRoZSBob3N0Lgo+IAo+ IFRoZXNlIGxpbmVzIGRvbid0IGV4dGVuZCB0byA4MCBjaGFycwo+IAo+PiArCSAqLwo+PiArCWNv bm5lY3Rvci0+cG9sbGVkID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0hQRDsKPj4gKwo+PiArCS8qIERp c3BsYXkgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBpbnRlcmxhY2Ugbm93LiAqLwo+PiArCWNvbm5l Y3Rvci0+aW50ZXJsYWNlX2FsbG93ZWQgPSBmYWxzZTsKPj4gKwljb25uZWN0b3ItPmRvdWJsZXNj YW5fYWxsb3dlZCA9IGZhbHNlOwo+IAo+IFRoZXNlIGFyZSBhbHJlYWR5IGZhbHNlIGJ5IHZpcnR1 ZSBvZiBremFsbG9jCj4gCkZpeGVkIGluIFYyLgoKPj4gKwo+PiArCWRybV9jb25uZWN0b3JfYXR0 YWNoX2VuY29kZXIoY29ubmVjdG9yLCBkcF9kaXNwbGF5LT5lbmNvZGVyKTsKPj4gKwo+PiArCXJl dHVybiBjb25uZWN0b3I7Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX2RybS5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZHJtLmgKPj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uZWZiYzFiZQo+PiAtLS0gL2Rldi9u dWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZHJtLmgKPj4gQEAgLTAsMCAr MSw1MiBAQAo+PiArLyoKPj4gKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXgg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyAKPj4gcmVzZXJ2ZWQuCj4+ICsgKgo+PiArICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAK Pj4gbW9kaWZ5Cj4+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPj4gKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+PiArICoKPj4gKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKPj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiArICovCj4+ICsKPj4gKyNpZm5kZWYgX0RQ X0RSTV9IXwo+PiArI2RlZmluZSBfRFBfRFJNX0hfCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9j cnRjLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+PiArCj4+ICsjaW5j bHVkZSAibXNtX2Rydi5oIgo+PiArI2luY2x1ZGUgImRwX2Rpc3BsYXkuaCIKPj4gKwo+PiArc3Ry dWN0IGRwX2JyaWRnZSB7Cj4+ICsJc3RydWN0IGRybV9icmlkZ2UgYmFzZTsKPj4gKwl1MzIgaWQ7 Cj4+ICsKPj4gKwlzdHJ1Y3QgbXNtX2RwICpkaXNwbGF5Owo+PiArCXN0cnVjdCBkcF9kaXNwbGF5 X21vZGUgZHBfbW9kZTsKPj4gK307Cj4+ICsKPj4gKy8qKgo+PiArICogZHBfY29ubmVjdG9yX3Bv c3RfaW5pdCAtIGNhbGxiYWNrIHRvIHBlcmZvcm0gYWRkaXRpb25hbCAKPj4gaW5pdGlhbGl6YXRp b24gc3RlcHMKPj4gKyAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1 Y3R1cmUKPj4gKyAqIEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBoYW5kbGUK Pj4gKyAqIFJldHVybnM6IFplcm8gb24gc3VjY2Vzcwo+PiArICovCj4+ICtpbnQgZHBfY29ubmVj dG9yX3Bvc3RfaW5pdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCB2b2lkIAo+PiAq ZGlzcGxheSk7Cj4+ICsKPj4gK3ZvaWQgZHBfY29ubmVjdG9yX3NlbmRfaHBkX2V2ZW50KHZvaWQg KmRpc3BsYXkpOwo+PiArCj4+ICtpbnQgZHBfZHJtX2JyaWRnZV9pbml0KHZvaWQgKmRpc3BsYXks Cj4+ICsJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKPj4gKwo+PiArdm9pZCBkcF9kcm1f YnJpZGdlX2RlaW5pdCh2b2lkICpkaXNwbGF5KTsKPj4gKwo+PiArc3RydWN0IGRybV9jb25uZWN0 b3IgKmRwX2RybV9jb25uZWN0b3JfaW5pdChzdHJ1Y3QgbXNtX2RwIAo+PiAqZHBfZGlzcGxheSk7 Cj4+ICsKPj4gKyNlbmRpZiAvKiBfRFBfRFJNX0hfICovCj4+ICsKPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9leHRjb24uYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAw Li42MzVjMTNiCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9leHRjb24uYwo+PiBAQCAtMCwwICsxLDQwMCBAQAo+PiArLyoKPj4gKyAqIENvcHlyaWdo dCAoYykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyAKPj4gcmVz ZXJ2ZWQuCj4+ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKPj4gbW9kaWZ5Cj4+ICsgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPj4g KyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4gKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPj4g KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+ PiArICovCj4+ICsKPj4gKyNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm0tZHBdICVzOiAiIGZtdCwg X19mdW5jX18KPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPj4gKyNpbmNsdWRlIDxs aW51eC9kZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9leHRjb24uaD4KPj4gKwo+PiArI2lu Y2x1ZGUgImRwX2V4dGNvbi5oIgo+PiArCj4+ICsvKiBEUCBzcGVjaWZpYyBWRE0gY29tbWFuZHMg Ki8KPj4gKyNkZWZpbmUgRFBfVVNCUERfVkRNX1NUQVRVUwkweDEwCj4+ICsjZGVmaW5lIERQX1VT QlBEX1ZETV9DT05GSUdVUkUJMHgxMQo+PiArCj4+ICsvKiBVU0JQRC1UeXBlQyBzcGVjaWZpYyBN YWNyb3MgKi8KPj4gKyNkZWZpbmUgVkRNX1ZFUlNJT04JCTB4MAo+PiArI2RlZmluZSBVU0JfQ19E UF9TSUQJCTB4RkYwMQo+PiArCj4+ICtlbnVtIGRwX3VzYnBkX3Bpbl9hc3NpZ25tZW50IHsKPj4g KwlEUF9VU0JQRF9QSU5fQSwKPj4gKwlEUF9VU0JQRF9QSU5fQiwKPj4gKwlEUF9VU0JQRF9QSU5f QywKPj4gKwlEUF9VU0JQRF9QSU5fRCwKPj4gKwlEUF9VU0JQRF9QSU5fRSwKPj4gKwlEUF9VU0JQ RF9QSU5fRiwKPj4gKwlEUF9VU0JQRF9QSU5fTUFYLAo+PiArfTsKPj4gKwo+PiArc3RydWN0IGRw X3VzYnBkX2NhcGFiaWxpdGllcyB7Cj4+ICsJZW51bSBkcF91c2JwZF9wb3J0IHBvcnQ7Cj4+ICsJ Ym9vbCByZWNlcHRhY2xlX3N0YXRlOwo+PiArCXU4IHVsaW5rX3Bpbl9jb25maWc7Cj4+ICsJdTgg ZGxpbmtfcGluX2NvbmZpZzsKPj4gK307Cj4gCj4gV2hlcmUgaXMgdGhpcyB1c2VkPwo+IApGaXhl ZCBpbiBWMi4KPj4gKwo+PiArc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlIHsKPj4gKwl1MzIgdmRv Owo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZXh0 Y29uX25iOwo+PiArCXN0cnVjdCBleHRjb25fZGV2ICpleHRjb247Cj4+ICsJc3RydWN0IHdvcmtx dWV1ZV9zdHJ1Y3QgKmV4dGNvbl93cTsKPj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXZlbnRfd29y azsKPj4gKwlzdHJ1Y3QgdXNicGQgKnBkOwo+PiArCXN0cnVjdCBkcF91c2JwZF9jYiAqZHBfY2I7 Cj4+ICsJc3RydWN0IGRwX3VzYnBkX2NhcGFiaWxpdGllcyBjYXA7Cj4+ICsJc3RydWN0IGRwX3Vz YnBkIGRwX3VzYnBkOwo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IGNoYXIgKmRwX3VzYnBk X3Bpbl9uYW1lKHU4IHBpbikKPj4gK3sKPj4gKwlzd2l0Y2ggKHBpbikgewo+PiArCWNhc2UgRFBf VVNCUERfUElOX0E6IHJldHVybiAiRFBfVVNCUERfUElOX0FTU0lHTk1FTlRfQSI7Cj4+ICsJY2Fz ZSBEUF9VU0JQRF9QSU5fQjogcmV0dXJuICJEUF9VU0JQRF9QSU5fQVNTSUdOTUVOVF9CIjsKPj4g KwljYXNlIERQX1VTQlBEX1BJTl9DOiByZXR1cm4gIkRQX1VTQlBEX1BJTl9BU1NJR05NRU5UX0Mi Owo+PiArCWNhc2UgRFBfVVNCUERfUElOX0Q6IHJldHVybiAiRFBfVVNCUERfUElOX0FTU0lHTk1F TlRfRCI7Cj4+ICsJY2FzZSBEUF9VU0JQRF9QSU5fRTogcmV0dXJuICJEUF9VU0JQRF9QSU5fQVNT SUdOTUVOVF9FIjsKPj4gKwljYXNlIERQX1VTQlBEX1BJTl9GOiByZXR1cm4gIkRQX1VTQlBEX1BJ Tl9BU1NJR05NRU5UX0YiOwo+PiArCWRlZmF1bHQ6IHJldHVybiAiVU5LTk9XTiI7Cj4+ICsJfQo+ PiArfQo+IAo+IE5vIG5lZWQgdG8gaGF2ZSB0aGlzIGp1c3QgZm9yIG9uZSBkZWJ1ZyBzdGF0ZW1l bnQsIGp1c3QgcHJpbnQgdGhlIGVudW0gCj4gdmFsdWUKPiB3aXRoICVkIGJlbG93Lgo+IApSZW1v dmVkIHRoZW0gaW4gVjIuCj4+ICsKPj4gK3N0YXRpYyBjb25zdCBjaGFyICpkcF91c2JwZF9wb3J0 X25hbWUoZW51bSBkcF91c2JwZF9wb3J0IHBvcnQpCj4+ICt7Cj4+ICsJc3dpdGNoIChwb3J0KSB7 Cj4+ICsJY2FzZSBEUF9VU0JQRF9QT1JUX05PTkU6IHJldHVybiAiRFBfVVNCUERfUE9SVF9OT05F IjsKPj4gKwljYXNlIERQX1VTQlBEX1BPUlRfVUZQX0Q6IHJldHVybiAiRFBfVVNCUERfUE9SVF9V RlBfRCI7Cj4+ICsJY2FzZSBEUF9VU0JQRF9QT1JUX0RGUF9EOiByZXR1cm4gIkRQX1VTQlBEX1BP UlRfREZQX0QiOwo+PiArCWNhc2UgRFBfVVNCUERfUE9SVF9EX1VGUF9EOiByZXR1cm4gIkRQX1VT QlBEX1BPUlRfRF9VRlBfRCI7Cj4+ICsJZGVmYXVsdDogcmV0dXJuICJEUF9VU0JQRF9QT1JUX05P TkUiOwo+PiArCX0KPj4gK30KPiAKPiBTYW1lIGhlcmUuCj4gCk1vc3Qgb2YgdGhlc2Ugc3RhdGlj IGZ1bmN0aW9ucyAodXNicGQpaGF2ZSBiZWVuIHJlbW92ZWQgaW4gVjIuCgo+PiArCj4+ICtzdGF0 aWMgdm9pZCBkcF91c2JwZF9pbml0X3BvcnQoZW51bSBkcF91c2JwZF9wb3J0ICpwb3J0LCB1MzIg aW5fcG9ydCkKPj4gK3sKPj4gKwlzd2l0Y2ggKGluX3BvcnQpIHsKPj4gKwljYXNlIDA6Cj4+ICsJ CSpwb3J0ID0gRFBfVVNCUERfUE9SVF9OT05FOwo+PiArCQlicmVhazsKPj4gKwljYXNlIDE6Cj4+ ICsJCSpwb3J0ID0gRFBfVVNCUERfUE9SVF9VRlBfRDsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSAy Ogo+PiArCQkqcG9ydCA9IERQX1VTQlBEX1BPUlRfREZQX0Q7Cj4+ICsJCWJyZWFrOwo+PiArCWNh c2UgMzoKPj4gKwkJKnBvcnQgPSBEUF9VU0JQRF9QT1JUX0RfVUZQX0Q7Cj4+ICsJCWJyZWFrOwo+ PiArCWRlZmF1bHQ6Cj4+ICsJCSpwb3J0ID0gRFBfVVNCUERfUE9SVF9OT05FOwo+PiArCX0KPj4g Kwlwcl9kZWJ1ZygicG9ydDolc1xuIiwgZHBfdXNicGRfcG9ydF9uYW1lKCpwb3J0KSk7Cj4+ICt9 Cj4+ICsKPj4gK3ZvaWQgZHBfdXNicGRfZ2V0X2NhcGFiaWxpdGllcyhzdHJ1Y3QgZHBfZXh0Y29u X3ByaXZhdGUgKnBkKQo+IAo+IFdoZXJlIGlzIHRoaXMgY2FsbGVkIGZyb20/Cj4gClJlbW92ZWQg aW4gVjIuCgo+PiArewo+PiArCXN0cnVjdCBkcF91c2JwZF9jYXBhYmlsaXRpZXMgKmNhcCA9ICZw ZC0+Y2FwOwo+PiArCXUzMiBidWYgPSBwZC0+dmRvOwo+PiArCWludCBwb3J0ID0gYnVmICYgMHgz Owo+PiArCj4+ICsJY2FwLT5yZWNlcHRhY2xlX3N0YXRlID0gKGJ1ZiAmIEJJVCg2KSkgPyB0cnVl IDogZmFsc2U7Cj4+ICsJY2FwLT5kbGlua19waW5fY29uZmlnID0gKGJ1ZiA+PiA4KSAmIDB4ZmY7 Cj4+ICsJY2FwLT51bGlua19waW5fY29uZmlnID0gKGJ1ZiA+PiAxNikgJiAweGZmOwo+IAo+IFBs ZWFzZSAjZGVmaW5lIGhhcmRjb2RlZCB2YWx1ZXMKPiAKPj4gKwo+PiArCWRwX3VzYnBkX2luaXRf cG9ydCgmY2FwLT5wb3J0LCBwb3J0KTsKPiAKPiBBbGwgb2YgdGhlIHZhbHVlcyBpbiBjYXAtPnBv cnQgc2VlbSB0byBiZSBoYXJkY29kZWQsIHNvIHdoeSBub3QganVzdCAKPiB1c2UgdGhlCj4gI2Rl ZmluZSdzIGRpcmVjdGx5IHdoZXJlIGFwcGxpY2FibGU/Cj4gCj4+ICt9Cj4+ICsKPj4gK3ZvaWQg ZHBfdXNicGRfZ2V0X3N0YXR1cyhzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUgKnBkKQo+IAo+IFdo ZXJlIGlzIHRoaXMgY2FsbGVkPwo+IApSZW1vdmVkIGluIHYyLgo+PiArewo+PiArCXN0cnVjdCBk cF91c2JwZCAqc3RhdHVzID0gJnBkLT5kcF91c2JwZDsKPj4gKwl1MzIgYnVmID0gcGQtPnZkbzsK Pj4gKwlpbnQgcG9ydCA9IGJ1ZiAmIDB4MzsKPj4gKwo+PiArCXN0YXR1cy0+bG93X3Bvd19zdCAg ICAgPSAoYnVmICYgQklUKDIpKSA/IHRydWUgOiBmYWxzZTsKPj4gKwlzdGF0dXMtPmFkYXB0b3Jf ZHBfZW4gID0gKGJ1ZiAmIEJJVCgzKSkgPyB0cnVlIDogZmFsc2U7Cj4+ICsJc3RhdHVzLT5tdWx0 aV9mdW5jICAgICA9IChidWYgJiBCSVQoNCkpID8gdHJ1ZSA6IGZhbHNlOwo+PiArCXN0YXR1cy0+ dXNiX2NvbmZpZ19yZXEgPSAoYnVmICYgQklUKDUpKSA/IHRydWUgOiBmYWxzZTsKPj4gKwlzdGF0 dXMtPmV4aXRfZHBfbW9kZSAgID0gKGJ1ZiAmIEJJVCg2KSkgPyB0cnVlIDogZmFsc2U7Cj4+ICsJ c3RhdHVzLT5ocGRfaGlnaCAgICAgICA9IChidWYgJiBCSVQoNykpID8gdHJ1ZSA6IGZhbHNlOwo+ PiArCXN0YXR1cy0+aHBkX2lycSAgICAgICAgPSAoYnVmICYgQklUKDgpKSA/IHRydWUgOiBmYWxz ZTsKPj4gKwo+PiArCXByX2RlYnVnKCJsb3dfcG93X3N0ID0gJWQsIGFkYXB0b3JfZHBfZW4gPSAl ZCwgbXVsdGlfZnVuYyA9ICVkXG4iLAo+PiArCQkJc3RhdHVzLT5sb3dfcG93X3N0LCBzdGF0dXMt PmFkYXB0b3JfZHBfZW4sCj4+ICsJCQlzdGF0dXMtPm11bHRpX2Z1bmMpOwo+PiArCXByX2RlYnVn KCJ1c2JfY29uZmlnX3JlcSA9ICVkLCBleGl0X2RwX21vZGUgPSAlZCwgaHBkX2hpZ2ggPSVkXG4i LAo+PiArCQkJc3RhdHVzLT51c2JfY29uZmlnX3JlcSwKPj4gKwkJCXN0YXR1cy0+ZXhpdF9kcF9t b2RlLCBzdGF0dXMtPmhwZF9oaWdoKTsKPj4gKwlwcl9kZWJ1ZygiaHBkX2lycSA9ICVkXG4iLCBz dGF0dXMtPmhwZF9pcnEpOwo+PiArCj4+ICsJZHBfdXNicGRfaW5pdF9wb3J0KCZzdGF0dXMtPnBv cnQsIHBvcnQpOwo+IAo+IE9ubHkgbXVsdGlfZnVuYywgaHBkX2hpZ2gsIGFuZCBocGRfaXJxIGFy ZSB1c2VkIG91dCBvZiB0aGlzIHN0cnVjdC4gQ2FuIAo+IHlvdSBjdWxsCj4gdGhlIHZhbHVlcyBk b3duPyBocGRfaXJxIGlzIGFsc28gb25seSBzZXQgdG8gaXRzIGhhcmRjb2RlZCB2YWx1ZSwgc28g Cj4ganVzdCB1c2UKPiB0aGF0IHZhbHVlIGRpcmVjdGx5IHdoZXJlIGFwcGxpY2FibGUuCj4gCj4g Cj4+ICt9Cj4+ICsKPj4gK3UzMiBkcF91c2JwZF9nZW5fY29uZmlnX3BrdChzdHJ1Y3QgZHBfZXh0 Y29uX3ByaXZhdGUgKnBkKQo+IAo+IFRoaXMgZnVuY3Rpb24gaXMgYWxzbyB1bnVzZWQKPiAKUmVt b3ZlZCBpbiBWMi4KPj4gK3sKPj4gKwl1OCBwaW5fY2ZnLCBwaW47Cj4+ICsJdTMyIGNvbmZpZyA9 IDA7Cj4+ICsJY29uc3QgdTMyIHVmcF9kX2NvbmZpZyA9IDB4MiwgZHBfdmVyID0gMHgxOwo+PiAr Cj4+ICsJaWYgKHBkLT5jYXAucmVjZXB0YWNsZV9zdGF0ZSkKPj4gKwkJcGluX2NmZyA9IHBkLT5j YXAudWxpbmtfcGluX2NvbmZpZzsKPj4gKwllbHNlCj4+ICsJCXBpbl9jZmcgPSBwZC0+Y2FwLmRs aW5rX3Bpbl9jb25maWc7Cj4+ICsKPj4gKwlmb3IgKHBpbiA9IERQX1VTQlBEX1BJTl9BOyBwaW4g PCBEUF9VU0JQRF9QSU5fTUFYOyBwaW4rKykgewo+PiArCQlpZiAocGluX2NmZyAmIEJJVChwaW4p KSB7Cj4+ICsJCQlpZiAocGQtPmRwX3VzYnBkLm11bHRpX2Z1bmMpIHsKPj4gKwkJCQlpZiAocGlu ID09IERQX1VTQlBEX1BJTl9EKQo+PiArCQkJCQlicmVhazsKPj4gKwkJCX0gZWxzZSB7Cj4+ICsJ CQkJYnJlYWs7Cj4+ICsJCQl9Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlpZiAocGluID09IERQ X1VTQlBEX1BJTl9NQVgpCj4+ICsJCXBpbiA9IERQX1VTQlBEX1BJTl9DOwo+PiArCj4+ICsJcHJf ZGVidWcoInBpbiBhc3NpZ25tZW50OiAlc1xuIiwgZHBfdXNicGRfcGluX25hbWUocGluKSk7Cj4+ ICsKPj4gKwljb25maWcgfD0gQklUKHBpbikgPDwgODsKPj4gKwo+PiArCWNvbmZpZyB8PSAoZHBf dmVyIDw8IDIpOwo+PiArCWNvbmZpZyB8PSB1ZnBfZF9jb25maWc7Cj4+ICsKPj4gKwlwcl9kZWJ1 ZygiY29uZmlnID0gMHgleFxuIiwgY29uZmlnKTsKPj4gKwlyZXR1cm4gY29uZmlnOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IGRwX2V4dGNvbl9jb25uZWN0KHN0cnVjdCBkcF91c2JwZCAqZHBf dXNicGQsIGJvb2wgaHBkKQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX2V4 dGNvbl9wcml2YXRlICpleHRjb247Cj4+ICsKPj4gKwlpZiAoIWRwX3VzYnBkKSB7Cj4+ICsJCXBy X2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBl cnJvcjsKPiAKPiBKdXN0IHJldHVybiAtRUlOVkFMIGFuZCBnZXQgcmlkIG9mIHRoZSBlcnJvciBs YWJlbCBhbmQgcmMuCj4gCmZpeGVkIGluIFYyLgoKPj4gKwl9Cj4+ICsKPj4gKwlleHRjb24gPSBj b250YWluZXJfb2YoZHBfdXNicGQsIHN0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSwgZHBfdXNicGQp Owo+PiArCj4+ICsJZHBfdXNicGQtPmhwZF9oaWdoID0gaHBkOwo+PiArCWRwX3VzYnBkLT5mb3Jj ZWRfZGlzY29ubmVjdCA9ICFocGQ7Cj4gCj4gSWYgZm9yY2VkX2Rpc2Nvbm5lY3QgaXMgYWx3YXlz ICFkcF91c2JwZC0+aHBkX2hpZ2gsIHdoeSBub3QganVzdCB1c2UKPiAhZHBfdXNicGQtPmhwZF9o aWdoIGRpcmVjdGx5Pwo+IApXaWxsIGZpeCB0aGlzIGluIFYzLgo+PiArCj4+ICsJaWYgKGhwZCkK Pj4gKwkJZXh0Y29uLT5kcF9jYi0+Y29uZmlndXJlKGV4dGNvbi0+ZGV2KTsKPj4gKwllbHNlCj4+ ICsJCWV4dGNvbi0+ZHBfY2ItPmRpc2Nvbm5lY3QoZXh0Y29uLT5kZXYpOwo+IAo+IERvIHlvdSBu ZWVkIGxvY2tpbmcgaW4gdGhpcyBmdW5jdGlvbi9maWxlPwo+IApJIGRvbid0IHRoaW5rIHNvLCBU aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBzaW5nbGUgdGhyZWFkZWQgd29yayBxdWV1ZS4KPj4g Kwo+PiArZXJyb3I6Cj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRw X2V4dGNvbl9nZXRfbGFuZXMoc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpleHRjb25fcHJpdikK Pj4gK3sKPj4gKwl1bmlvbiBleHRjb25fcHJvcGVydHlfdmFsdWUgcHJvcGVydHk7Cj4+ICsJdTgg bGFuZXM7Cj4+ICsKPj4gKwlpZiAoIWV4dGNvbl9wcml2IHx8ICFleHRjb25fcHJpdi0+ZXh0Y29u KSB7Cj4+ICsJCXByX2VycigiSW52YWxpZCBpbnB1dCBhcmd1bWVudHNcbiIpOwo+PiArCQlyZXR1 cm4gMDsKPj4gKwl9Cj4+ICsKPj4gKwlleHRjb25fZ2V0X3Byb3BlcnR5KGV4dGNvbl9wcml2LT5l eHRjb24sCj4+ICsJCQkJCUVYVENPTl9ESVNQX0RQLAo+PiArCQkJCQlFWFRDT05fUFJPUF9VU0Jf U1MsCj4+ICsJCQkJCSZwcm9wZXJ0eSk7Cj4+ICsJbGFuZXMgPSAoKTsKPj4gKwo+PiArCXJldHVy biBsYW5lczsKPiAKPiAgICAgICAgIHJldHVybiAocHJvcGVydHkuaW50dmFsKSA/IDIgOiA0Owo+ IAo+IGFuZCBkZWxldGUgbGFuZXMKPiAKPiAKRml4ZWQgaW4gVjIuCgo+PiArfQo+PiArCj4+ICsK Pj4gK3N0YXRpYyB2b2lkIGRwX2V4dGNvbl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAq d29yaykKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUgKmV4dGNvbl9wcml2Owo+ PiArCWludCBkcF9zdGF0ZSwgcmV0Owo+PiArCWludCBsYW5lczsKPj4gKwl1bmlvbiBleHRjb25f cHJvcGVydHlfdmFsdWUgcHJvcGVydHk7Cj4+ICsKPj4gKwlleHRjb25fcHJpdiA9IGNvbnRhaW5l cl9vZih3b3JrLAo+PiArCQkJc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlLCBldmVudF93b3JrKTsK Pj4gKwo+PiArCWlmICghZXh0Y29uX3ByaXYgfHwgIWV4dGNvbl9wcml2LT5leHRjb24pIHsKPj4g KwkJcHJfZXJyKCJJbnZhbGlkIGV4dGNvbiBkZXZpY2UgaGFuZGxlclxuIik7Cj4+ICsJCXJldHVy bjsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9zdGF0ZSA9IGV4dGNvbl9nZXRfc3RhdGUoZXh0Y29uX3By aXYtPmV4dGNvbiwKPj4gKwkJCQkJCUVYVENPTl9ESVNQX0RQKTsKPiAKPiBDYW4gZml0IG9uIDEg bGluZQo+IApGaXhlZCBpbiBWMi4KCj4+ICsKPj4gKwlpZiAoZHBfc3RhdGUgPiAwKSB7Cj4+ICsJ CXJldCA9IGV4dGNvbl9nZXRfcHJvcGVydHkoZXh0Y29uX3ByaXYtPmV4dGNvbiwKPj4gKwkJCQkJ RVhUQ09OX0RJU1BfRFAsCj4+ICsJCQkJCUVYVENPTl9QUk9QX1VTQl9UWVBFQ19QT0xBUklUWSwK Pj4gKwkJCQkJJnByb3BlcnR5KTsKPj4gKwkJaWYgKHJldCkgewo+PiArCQkJcHJfZXJyKCJHZXQg UG9sYXJpdHkgcHJvcGVydHkgZmFpbGVkXG4iKTsKPj4gKwkJCXJldHVybjsKPj4gKwkJfQo+PiAr CQlleHRjb25fcHJpdi0+ZHBfdXNicGQub3JpZW50YXRpb24gPQo+PiArCQkJKChwcm9wZXJ0eS5p bnR2YWwpID8KPiAKPiBDYW4gZml0IG9uIDEgbGluZSwgcGx1cyByZW1vdmUgYWxsICgpIGZyb20g dGhpcywgdGhleSdyZSBub3QgbmVlZGVkLgo+IApGaXhlZCBpbiBWMi4KCj4+ICsJCQkJT1JJRU5U QVRJT05fQ0MyIDogT1JJRU5UQVRJT05fQ0MxKTsKPj4gKwo+PiArCQlsYW5lcyA9IGRwX2V4dGNv bl9nZXRfbGFuZXMoZXh0Y29uX3ByaXYpOwo+PiArCQlpZiAoIWxhbmVzKQo+PiArCQkJcmV0dXJu Owo+PiArCQlleHRjb25fcHJpdi0+ZHBfdXNicGQubXVsdGlfZnVuYyA9Cj4+ICsJCQkJCSgobGFu ZXMgPT0gMikgPyBmYWxzZSA6IHRydWUpOwo+IAo+IFRoaXMgcGFydCBpcyBhIGJpdCBjb25mdXNp bmcsIHlvdSBhZGQgYSBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSAKPiBsYW5lcywgYW5kCj4g aW50ZXJwcmV0IHRoZSBVU0JfU1MgcHJvcGVydHkgdG8gcmV0dXJuIDIgdnMuIDQsIGJ1dCB0aGVu IGltbWVkaWF0ZWx5IAo+IGNvbnZlcnQKPiB0aGF0IGJhY2sgaW50byB3aGF0IHRoZSBVU0JfU1Mg cHJvcGVydHkgcmV0dXJucy4gSW5zdGVhZCwgcmVtb3ZlIHRoZSAKPiBoZWxwZXIKPiBmdW5jdGlv biBhbmQgcmVhZCBVU0JfU1MgZGlyZWN0bHkgaGVyZS4KPiAKV2lsbCBpbXBsZW1lbnQgdGhpcyBp biBWMy4KCgo+PiArCj4+ICsJCWlmIChleHRjb25fcHJpdi0+ZHBfY2IgJiYgZXh0Y29uX3ByaXYt PmRwX2NiLT5jb25maWd1cmUpCj4gCj4gSSBmZWVsIGxpa2UgdGhpcyBjYW4gbmV2ZXIgYmUgZmFs c2UgYW55d2F5cywgYnV0IHlvdSdyZSBub3QgdXNpbmcgCj4gZWl0aGVyIG9mCj4gdGhlc2UgbWVt YmVycyBpbiB0aGUgY29uZGl0aW9uYWwgYmxvY2suIFNvIHdoeSBub3QganVzdCBjYWxsIAo+IGRw X2V4dGNvbl9jb25uZWN0Cj4gdW5jb25kaXRpb25hbGx5Pwo+IApXaWxsIGltcGxlbWVudCB0aGlz IGluIFYzLgoKPj4gKwkJCWRwX2V4dGNvbl9jb25uZWN0KCZleHRjb25fcHJpdi0+ZHBfdXNicGQs IHRydWUpOwo+IAo+IENoZWNrIHJldHVybiB2YWx1ZQo+IApGaXhlZCBpbiB2Mi4KPj4gKwl9IGVs c2Ugewo+PiArCQlpZiAoZXh0Y29uX3ByaXYtPmRwX2NiICYmIGV4dGNvbl9wcml2LT5kcF9jYi0+ ZGlzY29ubmVjdCkKPiAKPiBTYW1lIGhlcmUuCj4gCj4+ICsJCQlkcF9leHRjb25fY29ubmVjdCgm ZXh0Y29uX3ByaXYtPmRwX3VzYnBkLCBmYWxzZSk7Cj4gCj4gQ2hlY2sgcmV0dXJuIHZhbHVlCj4g CkZpeGVkIGluIFYyLgoKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfZXh0Y29u X2NyZWF0ZV93b3JrcXVldWUoc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlIAo+PiAqZXh0Y29uX3By aXYpCj4+ICt7Cj4+ICsJZXh0Y29uX3ByaXYtPmV4dGNvbl93cSA9IAo+PiBjcmVhdGVfc2luZ2xl dGhyZWFkX3dvcmtxdWV1ZSgiZHJtX2RwX2V4dGNvbiIpOwo+IAo+IFdoYXQncyB0aGUgYmVuZWZp dCBvZiB1c2luZyBhIGRlZGljYXRlZCB3b3JrcXVldWUgaW5zdGVhZCBvZiB0aGUgc3lzdGVtIAo+ IHdxPwo+IApXZSB3YW50ZWQgdG8gaGF2ZSBhIHNpbmdsZS10aHJlYWRlZCB3b3JrcXVldWUgdG8g YXZvaWQgYW55IApzeW5jaHJvbml6YXRpb24gaXNzdWVzLgpBbHNvLCBmb2xsb3dpbmcgdGhlIGV4 aXN0aW5nIGltcGxlbWVudGF0aW9uIGluIHVwc3RyZWFtIGRyaXZlcnMgZm9yIApleHRjb24gZXZl bnRzLgoKPj4gKwlpZiAoSVNfRVJSX09SX05VTEwoZXh0Y29uX3ByaXYtPmV4dGNvbl93cSkpIHsK Pj4gKwkJcHJfZXJyKCJFcnJvciBjcmVhdGluZyBleHRjb24gd3FcbiIpOwo+PiArCQlyZXR1cm4g LUVQRVJNOwo+PiArCX0KPj4gKwo+PiArCUlOSVRfV09SSygmZXh0Y29uX3ByaXYtPmV2ZW50X3dv cmssIGRwX2V4dGNvbl9ldmVudF93b3JrKTsKPj4gKwo+PiArCXJldHVybiAwOwo+IAo+IFRoaXMg ZnVuY3Rpb24gY2FuJ3QgZmFpbCwgc28gaXQgc2hvdWxkIHJldHVybiB2b2lkLiBJbiBmYWN0LCB0 aGlzIAo+IHJlYWxseSBkb2Vzbid0Cj4gbmVlZCB0byBiZSBhIHNlcGFyYXRlIGZ1bmN0aW9uLCBy b2xsIGl0IGludG8gZHBfZXh0Y29uX3JlZ2lzdGVyKCkuCj4gCkZpeGVkIGluIFYyLgoKPj4gK30K Pj4gKwo+PiArc3RhdGljIGludCBkcF9leHRjb25fZXZlbnRfbm90aWZ5KHN0cnVjdCBub3RpZmll cl9ibG9jayAqbmIsCj4+ICsJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwcml2KQo+ PiArewo+PiArCXN0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSAqZXh0Y29uX3ByaXY7Cj4+ICsKPj4g KwlleHRjb25fcHJpdiA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IGRwX2V4dGNvbl9wcml2YXRl LAo+PiArCQkJCQkJZXh0Y29uX25iKTsKPj4gKwo+PiArCXF1ZXVlX3dvcmsoZXh0Y29uX3ByaXYt PmV4dGNvbl93cSwgJmV4dGNvbl9wcml2LT5ldmVudF93b3JrKTsKPj4gKwlyZXR1cm4gTk9USUZZ X0RPTkU7Cj4+ICt9Cj4+ICsKPj4gK2ludCBkcF9leHRjb25fcmVnaXN0ZXIoc3RydWN0IGRwX3Vz YnBkICpkcF91c2JwZCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUgKmV4dGNv bl9wcml2Owo+PiArCWludCByZXQgPSAwOwo+PiArCj4+ICsJaWYgKCFkcF91c2JwZCkKPj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwlwcl9lcnIoIlN0YXJ0KysrKyIpOwo+IAo+IFlpa2Vz LCB0aGlzIGRvZXNuJ3QgbG9vayBsaWtlIGFuIGVycm9yIQo+IApGaXhlZCBpbiBWMi4KCj4+ICsJ ZXh0Y29uX3ByaXYgPSBjb250YWluZXJfb2YoZHBfdXNicGQsIHN0cnVjdCBkcF9leHRjb25fcHJp dmF0ZSwgCj4+IGRwX3VzYnBkKTsKPj4gKwo+PiArCWV4dGNvbl9wcml2LT5leHRjb25fbmIubm90 aWZpZXJfY2FsbCA9IGRwX2V4dGNvbl9ldmVudF9ub3RpZnk7Cj4+ICsJcmV0ID0gZGV2bV9leHRj b25fcmVnaXN0ZXJfbm90aWZpZXIoZXh0Y29uX3ByaXYtPmRldiwgCj4+IGV4dGNvbl9wcml2LT5l eHRjb24sCj4+ICsJCQkJCSAgICBFWFRDT05fRElTUF9EUCwKPj4gKwkJCQkJICAgICZleHRjb25f cHJpdi0+ZXh0Y29uX25iKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCWRldl9lcnIoZXh0Y29uX3By aXYtPmRldiwKPj4gKwkJCSJyZWdpc3RlciBFWFRDT05fRElTUF9EUCBub3RpZmllciBlcnJcbiIp Owo+PiArCQlyZXQgPSAtRUlOVkFMOwo+IAo+IFdoeSBrZWVwIGdvaW5nIGFuZCBjcmVhdGUgdGhl IHdvcmtxdWV1ZSBpZiB3ZSBoYXZlIG5vIG5vdGlmaWVyPyBUaGlzIAo+IHNob3VsZAo+IHByb2Jh Ymx5IGJlIGEgcmV0dXJuLgo+IApGaXhlZCBpbiBWMi4KCj4+ICsJfQo+PiArCj4+ICsJcmV0ID0g ZHBfZXh0Y29uX2NyZWF0ZV93b3JrcXVldWUoZXh0Y29uX3ByaXYpOwo+PiArCWlmIChyZXQpIHsK Pj4gKwkJcHJfZXJyKCJGYWlsZWQgdG8gY3JlYXRlIHdvcmtxdWV1ZVxuIik7Cj4+ICsJCWRwX2V4 dGNvbl91bnJlZ2lzdGVyKGRwX3VzYnBkKTsKPiAKPiByZXR1cm4gcmV0Pwo+IApGaXhlZCBpbiBW Mi4KPj4gKwl9Cj4+ICsKPj4gKwlwcl9lcnIoIkVuZC0tLS0iKTsKPiAKPiBTYW1lIGhlcmUKPiAK Rml4ZWQgaW4gVjIuCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArdm9pZCBkcF9leHRj b25fdW5yZWdpc3RlcihzdHJ1Y3QgZHBfdXNicGQgKmRwX3VzYnBkKQo+PiArewo+PiArCXN0cnVj dCBkcF9leHRjb25fcHJpdmF0ZSAqZXh0Y29uX3ByaXY7Cj4+ICsKPj4gKwlpZiAoIWRwX3VzYnBk KSB7Cj4+ICsJCXByX2VycigiSW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9 Cj4+ICsKPj4gKwlwcl9lcnIoIlN0YXJ0KysrKyIpOwo+IAo+IHJlbW92ZS4KPiAKRml4ZWQgaW4g VjIuCgo+PiArCWV4dGNvbl9wcml2ID0gY29udGFpbmVyX29mKGRwX3VzYnBkLCBzdHJ1Y3QgZHBf ZXh0Y29uX3ByaXZhdGUsIAo+PiBkcF91c2JwZCk7Cj4+ICsKPj4gKwlkZXZtX2V4dGNvbl91bnJl Z2lzdGVyX25vdGlmaWVyKGV4dGNvbl9wcml2LT5kZXYsIAo+PiBleHRjb25fcHJpdi0+ZXh0Y29u LAo+PiArCQkJCQkgICAgRVhUQ09OX0RJU1BfRFAsCj4+ICsJCQkJCSAgICAmZXh0Y29uX3ByaXYt PmV4dGNvbl9uYik7Cj4+ICsKPj4gKwlpZiAoZXh0Y29uX3ByaXYtPmV4dGNvbl93cSkKPj4gKwkJ ZGVzdHJveV93b3JrcXVldWUoZXh0Y29uX3ByaXYtPmV4dGNvbl93cSk7Cj4+ICsKPj4gKwlwcl9l cnIoIkVuZC0tLS0iKTsKPiAKPiByZW1vdmUuCj4gCkZpeGVkIGluIFYyLgoKPj4gKwlyZXR1cm47 Cj4+ICt9Cj4+ICsKPj4gK3N0cnVjdCBkcF91c2JwZCAqZHBfZXh0Y29uX2dldChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHN0cnVjdCBkcF91c2JwZF9jYiAKPj4gKmNiKQo+PiArewo+PiArCWludCByYyA9 IDA7Cj4+ICsJc3RydWN0IGRwX2V4dGNvbl9wcml2YXRlICpkcF9leHRjb247Cj4+ICsJc3RydWN0 IGRwX3VzYnBkICpkcF91c2JwZDsKPj4gKwo+PiArCWlmICghY2IpIHsKPj4gKwkJcHJfZXJyKCJp bnZhbGlkIGNiIGRhdGFcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXJyb3I7 Cj4+ICsJfQo+PiArCj4+ICsJcHJfZXJyKCIlczogU3RhcnQiLCBfX2Z1bmNfXyk7Cj4gCj4gcmVt b3ZlLgo+IApBbGwgdGhlIHVubmVjZXNzYXJ5IHByaW50ZWQgYWRkZWQgZm9yIGRlYnVnZ2luZyBh cmUgcmVtb3ZlZCBpbiBWMi4KCj4+ICsJZHBfZXh0Y29uID0gZGV2bV9remFsbG9jKGRldiwgc2l6 ZW9mKCpkcF9leHRjb24pLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIWRwX2V4dGNvbikgewo+PiAr CQlyYyA9IC1FTk9NRU07Cj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsJfQo+PiArCj4+ICsJZHBfZXh0 Y29uLT5leHRjb24gPSBleHRjb25fZ2V0X2VkZXZfYnlfcGhhbmRsZShkZXYsIDApOwo+PiArCWlm ICghZHBfZXh0Y29uLT5leHRjb24pIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGV4dGNvbiBkYXRh XG4iKTsKPj4gKwkJcmMgPSAtRUlOVkFMOwo+PiArCQlkZXZtX2tmcmVlKGRldiwgZHBfZXh0Y29u KTsKPj4gKwkJZ290byBlcnJvcjsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsJZHBfZXh0Y29uLT5k ZXYgPSBkZXY7Cj4+ICsJZHBfZXh0Y29uLT5kcF9jYiA9IGNiOwo+PiArCj4+ICsJZHBfZXh0Y29u LT5kcF91c2JwZC5jb25uZWN0ID0gZHBfZXh0Y29uX2Nvbm5lY3Q7Cj4+ICsJZHBfdXNicGQgPSAm ZHBfZXh0Y29uLT5kcF91c2JwZDsKPj4gKwo+PiArCXByX2VycigiJXM6IGVuZCIsIF9fZnVuY19f KTsKPiAKPiByZW1vdmUuCj4gCj4+ICsJcmV0dXJuIGRwX3VzYnBkOwo+PiArZXJyb3I6Cj4gCj4g VGhpcyBsYWJlbCBpc24ndCB1c2VmdWwsIHJldHVybiBkaXJlY3RseSB3aGVyZSBhcHBsaWNhYmxl Lgo+IApSZW1vdmVkIGluIFYyLgoKPj4gKwlyZXR1cm4gRVJSX1BUUihyYyk7Cj4+ICt9Cj4+ICsK Pj4gK3ZvaWQgZHBfZXh0Y29uX3B1dChzdHJ1Y3QgZHBfdXNicGQgKmRwX3VzYnBkKQo+PiArewo+ PiArCXN0cnVjdCBkcF9leHRjb25fcHJpdmF0ZSAqZXh0Y29uOwo+PiArCj4+ICsJaWYgKCFkcF91 c2JwZCkKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJZXh0Y29uID0gY29udGFpbmVyX29mKGRwX3Vz YnBkLCBzdHJ1Y3QgZHBfZXh0Y29uX3ByaXZhdGUsIGRwX3VzYnBkKTsKPj4gKwo+PiArCWRldm1f a2ZyZWUoZXh0Y29uLT5kZXYsIGV4dGNvbik7Cj4+ICsKPj4gKwlwcl9lcnIoIiVzOiBlbmQiLCBf X2Z1bmNfXyk7Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2Rw X2V4dGNvbi5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmgKPj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uMWY4M2ExOAo+PiAtLS0gL2Rldi9u dWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZXh0Y29uLmgKPj4gQEAgLTAs MCArMSwxMTEgQEAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOCwgVGhlIExp bnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgCj4+IHJlc2VydmVkLgo+PiArICoKPj4gKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgCj4+IG1vZGlmeQo+PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4+ICsgKiBvbmx5IHZlcnNpb24gMiBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPj4gKyAqCj4+ICsgKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKPj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqLwo+PiArCj4+ICsjaWZuZGVm IF9EUF9FWFRDT05fSF8KPj4gKyNkZWZpbmUgX0RQX0VYVENPTl9IXwo+PiArCj4+ICsvLyNpbmNs dWRlIDxsaW51eC91c2IvdXNicGQuaD4KPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ Cj4+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4+ICsKPj4gKy8qKgo+PiArICogZW51bSBk cF91c2JwZF9wb3J0IC0gdXNiL2RwIHBvcnQgdHlwZQo+PiArICogQERQX1VTQlBEX1BPUlRfTk9O RTogcG9ydCBub3QgY29uZmlndXJlZAo+PiArICogQERQX1VTQlBEX1BPUlRfVUZQX0Q6IFVwc3Ry ZWFtIEZhY2luZyBQb3J0IC0gRGlzcGxheVBvcnQKPj4gKyAqIEBEUF9VU0JQRF9QT1JUX0RGUF9E OiBEb3duc3RyZWFtIEZhY2luZyBQb3J0IC0gRGlzcGxheVBvcnQKPj4gKyAqIEBEUF9VU0JQRF9Q T1JUX0RfVUZQX0Q6IEJvdGggVUZQICYgREZQIC0gRGlzcGxheVBvcnQKPj4gKyAqLwo+PiArCj4+ ICtlbnVtIGRwX3VzYnBkX3BvcnQgewo+PiArCURQX1VTQlBEX1BPUlRfTk9ORSwKPj4gKwlEUF9V U0JQRF9QT1JUX1VGUF9ELAo+PiArCURQX1VTQlBEX1BPUlRfREZQX0QsCj4+ICsJRFBfVVNCUERf UE9SVF9EX1VGUF9ELAo+PiArfTsKPj4gKwo+PiArZW51bSBwbHVnX29yaWVudGF0aW9uIHsKPj4g KwlPUklFTlRBVElPTl9OT05FLAo+PiArCU9SSUVOVEFUSU9OX0NDMSwKPj4gKwlPUklFTlRBVElP Tl9DQzIsCj4+ICt9Owo+PiArCj4+ICsvKioKPj4gKyAqIHN0cnVjdCBkcF91c2JwZCAtIERpc3Bs YXlQb3J0IHN0YXR1cwo+PiArICoKPj4gKyAqIEBwb3J0OiBwb3J0IGNvbmZpZ3VyZWQKPj4gKyAq IG9yaWVudGF0aW9uOiBwbHVnIG9yaWVudGF0aW9uIGNvbmZpZ3VyYXRpb24KPj4gKyAqIEBsb3df cG93X3N0OiBsb3cgcG93ZXIgc3RhdGUKPj4gKyAqIEBhZGFwdG9yX2RwX2VuOiBhZGFwdG9yIGZ1 bmN0aW9uYWxpdHkgZW5hYmxlZAo+PiArICogQG11bHRpX2Z1bmM6IG11bHRpLWZ1bmN0aW9uIHBy ZWZlcnJlZAo+PiArICogQHVzYl9jb25maWdfcmVxOiByZXF1ZXN0IHRvIHN3aXRjaCB0byB1c2IK Pj4gKyAqIEBleGl0X2RwX21vZGU6IHJlcXVlc3QgZXhpdCBmcm9tIGRpc3BsYXlwb3J0IG1vZGUK Pj4gKyAqIEBocGRfaGlnaDogSG90IFBsdWcgRGV0ZWN0IHNpZ25hbCBpcyBoaWdoLgo+PiArICog QGhwZF9pcnE6IENoYW5nZSBpbiB0aGUgc3RhdHVzIHNpbmNlIGxhc3QgbWVzc2FnZQo+PiArICog QGFsdF9tb2RlX2NmZ19kb25lOiBib29sIHRvIHNwZWNpZnkgYWx0IG1vZGUgc3RhdHVzCj4+ICsg KiBAZGVidWdfZW46IGJvb2wgdG8gc3BlY2lmeSBkZWJ1ZyBtb2RlCj4+ICsgKiBAY29ubmVjdDog c2ltdWxhdGUgZGlzY29ubmVjdCBvciBjb25uZWN0IGZvciBkZWJ1ZyBtb2RlCj4+ICsgKi8KPj4g K3N0cnVjdCBkcF91c2JwZCB7Cj4+ICsJZW51bSBkcF91c2JwZF9wb3J0IHBvcnQ7Cj4+ICsJZW51 bSBwbHVnX29yaWVudGF0aW9uIG9yaWVudGF0aW9uOwo+PiArCWJvb2wgbG93X3Bvd19zdDsKPj4g Kwlib29sIGFkYXB0b3JfZHBfZW47Cj4+ICsJYm9vbCBtdWx0aV9mdW5jOwo+PiArCWJvb2wgdXNi X2NvbmZpZ19yZXE7Cj4+ICsJYm9vbCBleGl0X2RwX21vZGU7Cj4+ICsJYm9vbCBocGRfaGlnaDsK Pj4gKwlib29sIGhwZF9pcnE7Cj4+ICsJYm9vbCBhbHRfbW9kZV9jZmdfZG9uZTsKPj4gKwlib29s IGRlYnVnX2VuOwo+PiArCWJvb2wgZm9yY2VkX2Rpc2Nvbm5lY3Q7Cj4+ICsKPj4gKwlpbnQgKCpj b25uZWN0KShzdHJ1Y3QgZHBfdXNicGQgKmRwX3VzYnBkLCBib29sIGhwZCk7Cj4+ICt9Owo+PiAr Cj4+ICsvKioKPj4gKyAqIHN0cnVjdCBkcF91c2JwZF9jYiAtIGNhbGxiYWNrIGZ1bmN0aW9ucyBw cm92aWRlZCBieSB0aGUgY2xpZW50Cj4+ICsgKgo+PiArICogQGNvbmZpZ3VyZTogY2FsbGVkIGJ5 IHVzYnBkIG1vZHVsZSB3aGVuIFBEIGNvbW11bmljYXRpb24gaGFzCj4+ICsgKiBiZWVuIGNvbXBs ZXRlZCBhbmQgdGhlIHVzYiBwZXJpcGhlcmFsIGhhcyBiZWVuIGNvbmZpZ3VyZWQgb24KPj4gKyAq IGRwIG1vZGUuCj4+ICsgKiBAZGlzY29ubmVjdDogbm90aWZ5IHRoZSBjYWJsZSBkaXNjb25uZWN0 IGlzc3VlZCBieSB1c2IuCj4+ICsgKiBAYXR0ZW50aW9uOiBub3RpZnkgYW55IGF0dGVudGlvbiBt ZXNzYWdlIGlzc3VlZCBieSB1c2IuCj4+ICsgKi8KPj4gK3N0cnVjdCBkcF91c2JwZF9jYiB7Cj4+ ICsJaW50ICgqY29uZmlndXJlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+PiArCWludCAoKmRpc2Nv bm5lY3QpKHN0cnVjdCBkZXZpY2UgKmRldik7Cj4+ICsJaW50ICgqYXR0ZW50aW9uKShzdHJ1Y3Qg ZGV2aWNlICpkZXYpOwo+PiArfTsKPj4gKwo+PiArLyoqCj4+ICsgKiBkcF9leHRjb25fZ2V0KCkg LSBzZXR1cCB1c2JwZCBtb2R1bGUKPj4gKyAqCj4+ICsgKiBAZGV2OiBkZXZpY2UgaW5zdGFuY2Ug b2YgdGhlIGNhbGxlcgo+PiArICogQGNiOiBzdHJ1Y3QgY29udGFpbmluZyBjYWxsYmFjayBmdW5j dGlvbiBwb2ludGVycy4KPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0aGUgY2xp ZW50IHRvIGluaXRpYWxpemUgdGhlIHVzYnBkCj4+ICsgKiBtb2R1bGUuIFRoZSBtb2R1bGUgd2ls bCBjb21tdW5pY2F0ZSB3aXRoIHVzYiBkcml2ZXIgYW5kCj4+ICsgKiBoYW5kbGVzIHRoZSBwb3dl ciBkZWxpdmVyeSAoUEQpIGNvbW11bmljYXRpb24gd2l0aCB0aGUKPj4gKyAqIHNpbmsvdXNiIGRl dmljZS4gVGhpcyBtb2R1bGUgd2lsbCBub3RpZnkgdGhlIGNsaWVudCB1c2luZwo+PiArICogdGhl IGNhbGxiYWNrIGZ1bmN0aW9ucyBhYm91dCB0aGUgY29ubmVjdGlvbiBhbmQgc3RhdHVzLgo+PiAr ICovCj4+ICtzdHJ1Y3QgZHBfdXNicGQgKmRwX2V4dGNvbl9nZXQoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgZHBfdXNicGRfY2IgCj4+ICpjYik7Cj4+ICsKPj4gK3ZvaWQgZHBfZXh0Y29uX3B1 dChzdHJ1Y3QgZHBfdXNicGQgKnBkKTsKPj4gKwo+PiAraW50IGRwX2V4dGNvbl9yZWdpc3Rlcihz dHJ1Y3QgZHBfdXNicGQgKmRwX3VzYnBkKTsKPj4gK3ZvaWQgZHBfZXh0Y29uX3VucmVnaXN0ZXIo c3RydWN0IGRwX3VzYnBkICpkcF91c2JwZCk7Cj4+ICsKPj4gKyNlbmRpZiAvKiBfRFBfRVhUQ09O X0hfICovCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuYyAK Pj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2xpbmsuYwo+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+PiBpbmRleCAwMDAwMDAwLi41YWIxZWZjCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmMKPj4gQEAgLTAsMCArMSwxNTQ5IEBACj4+ ICsvKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9u LiBBbGwgcmlnaHRzIAo+PiByZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAo+PiBtb2RpZnkK Pj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFuZAo+PiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ICsgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQo+PiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKi8KPj4gKwo+PiArI2RlZmluZSBwcl9mbXQoZm10KQki W2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXwo+PiArCj4+ICsjaW5jbHVkZSAiZHBfbGluay5o Igo+PiArI2luY2x1ZGUgImRwX3BhbmVsLmgiCj4+ICsKPj4gK2VudW0gZHluYW1pY19yYW5nZSB7 Cj4+ICsJRFBfRFlOQU1JQ19SQU5HRV9SR0JfVkVTQSA9IDB4MDAsCj4+ICsJRFBfRFlOQU1JQ19S QU5HRV9SR0JfQ0VBID0gMHgwMSwKPj4gKwlEUF9EWU5BTUlDX1JBTkdFX1VOS05PV04gPSAweEZG RkZGRkZGLAo+PiArfTsKPiAKPiBUaGVzZSBzaG91bGQgYmUgaW4gZHJtX2RwX2hlbHBlci5oCj4g CkZpeGVkIGluIFYyLgoKPj4gKwo+PiArZW51bSBhdWRpb19zYW1wbGVfcmF0ZSB7Cj4+ICsJQVVE SU9fU0FNUExFX1JBVEVfMzJfS0haCT0gMHgwMCwKPj4gKwlBVURJT19TQU1QTEVfUkFURV80NF8x X0tIWgk9IDB4MDEsCj4+ICsJQVVESU9fU0FNUExFX1JBVEVfNDhfS0haCT0gMHgwMiwKPj4gKwlB VURJT19TQU1QTEVfUkFURV84OF8yX0tIWgk9IDB4MDMsCj4+ICsJQVVESU9fU0FNUExFX1JBVEVf OTZfS0haCT0gMHgwNCwKPj4gKwlBVURJT19TQU1QTEVfUkFURV8xNzZfNF9LSFoJPSAweDA1LAo+ PiArCUFVRElPX1NBTVBMRV9SQVRFXzE5Ml9LSFoJPSAweDA2LAo+PiArfTsKPj4gKwo+PiArZW51 bSBhdWRpb19wYXR0ZXJuX3R5cGUgewo+PiArCUFVRElPX1RFU1RfUEFUVEVSTl9PUEVSQVRPUl9E RUZJTkVECT0gMHgwMCwKPj4gKwlBVURJT19URVNUX1BBVFRFUk5fU0FXVE9PVEgJCT0gMHgwMSwK Pj4gK307Cj4+ICsKPj4gK3N0cnVjdCBkcF9saW5rX3JlcXVlc3Qgewo+PiArCXUzMiB0ZXN0X3Jl cXVlc3RlZDsKPj4gKwl1MzIgdGVzdF9saW5rX3JhdGU7Cj4+ICsJdTMyIHRlc3RfbGFuZV9jb3Vu dDsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBkcF9saW5rX3ByaXZhdGUgewo+PiArCXUzMiBwcmV2 X3NpbmtfY291bnQ7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+PiArCXN0cnVjdCBkcF9hdXgg KmF1eDsKPj4gKwlzdHJ1Y3QgZHBfbGluayBkcF9saW5rOwo+PiArCj4+ICsJc3RydWN0IGRwX2xp bmtfcmVxdWVzdCByZXF1ZXN0Owo+PiArCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJ WkVdOwo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNoYXIgKmRwX2xpbmtfZ2V0X2F1ZGlvX3Rlc3Rf cGF0dGVybih1MzIgcGF0dGVybikKPj4gK3sKPj4gKwlzd2l0Y2ggKHBhdHRlcm4pIHsKPj4gKwlj YXNlIEFVRElPX1RFU1RfUEFUVEVSTl9PUEVSQVRPUl9ERUZJTkVEOgo+PiArCQlyZXR1cm4gRFBf TElOS19FTlVNX1NUUihBVURJT19URVNUX1BBVFRFUk5fT1BFUkFUT1JfREVGSU5FRCk7Cj4+ICsJ Y2FzZSBBVURJT19URVNUX1BBVFRFUk5fU0FXVE9PVEg6Cj4+ICsJCXJldHVybiBEUF9MSU5LX0VO VU1fU1RSKEFVRElPX1RFU1RfUEFUVEVSTl9TQVdUT09USCk7Cj4+ICsJZGVmYXVsdDoKPj4gKwkJ cmV0dXJuICJ1bmtub3duIjsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjaGFyICpkcF9s aW5rX2dldF9hdWRpb19zYW1wbGVfcmF0ZSh1MzIgcmF0ZSkKPj4gK3sKPj4gKwlzd2l0Y2ggKHJh dGUpIHsKPj4gKwljYXNlIEFVRElPX1NBTVBMRV9SQVRFXzMyX0tIWjoKPj4gKwkJcmV0dXJuIERQ X0xJTktfRU5VTV9TVFIoQVVESU9fU0FNUExFX1JBVEVfMzJfS0haKTsKPj4gKwljYXNlIEFVRElP X1NBTVBMRV9SQVRFXzQ0XzFfS0haOgo+PiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihBVURJ T19TQU1QTEVfUkFURV80NF8xX0tIWik7Cj4+ICsJY2FzZSBBVURJT19TQU1QTEVfUkFURV80OF9L SFo6Cj4+ICsJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKEFVRElPX1NBTVBMRV9SQVRFXzQ4X0tI Wik7Cj4+ICsJY2FzZSBBVURJT19TQU1QTEVfUkFURV84OF8yX0tIWjoKPj4gKwkJcmV0dXJuIERQ X0xJTktfRU5VTV9TVFIoQVVESU9fU0FNUExFX1JBVEVfODhfMl9LSFopOwo+PiArCWNhc2UgQVVE SU9fU0FNUExFX1JBVEVfOTZfS0haOgo+PiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihBVURJ T19TQU1QTEVfUkFURV85Nl9LSFopOwo+PiArCWNhc2UgQVVESU9fU0FNUExFX1JBVEVfMTc2XzRf S0haOgo+PiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihBVURJT19TQU1QTEVfUkFURV8xNzZf NF9LSFopOwo+PiArCWNhc2UgQVVESU9fU0FNUExFX1JBVEVfMTkyX0tIWjoKPj4gKwkJcmV0dXJu IERQX0xJTktfRU5VTV9TVFIoQVVESU9fU0FNUExFX1JBVEVfMTkyX0tIWik7Cj4+ICsJZGVmYXVs dDoKPj4gKwkJcmV0dXJuICJ1bmtub3duIjsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgZHBfbGlua19nZXRfcGVyaW9kKHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmssIGludCBj b25zdCAKPj4gYWRkcikKPj4gK3sKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwl1OCBicDsKPj4gKwl1 OCBkYXRhOwo+PiArCXUzMiBjb25zdCBwYXJhbV9sZW4gPSAweDE7Cj4+ICsJdTMyIGNvbnN0IG1h eF9hdWRpb19wZXJpb2QgPSAweEE7Cj4+ICsKPj4gKwkvKiBURVNUX0FVRElPX1BFUklPRF9DSF9Y WCAqLwo+PiArCWlmIChkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgYWRkciwg JmJwLAo+PiArCQlwYXJhbV9sZW4pIDwgcGFyYW1fbGVuKSB7Cj4+ICsJCXByX2VycigiZmFpbGVk IHRvIHJlYWQgdGVzdF9hdWRpb19wZXJpb2QgKDB4JXgpXG4iLCBhZGRyKTsKPj4gKwkJcmV0ID0g LUVJTlZBTDsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwo+PiArCWRhdGEgPSBicDsKPj4g Kwo+PiArCS8qIFBlcmlvZCAtIEJpdHMgMzowICovCj4+ICsJZGF0YSA9IGRhdGEgJiAweEY7Cj4+ ICsJaWYgKChpbnQpZGF0YSA+IG1heF9hdWRpb19wZXJpb2QpIHsKPj4gKwkJcHJfZXJyKCJpbnZh bGlkIHRlc3RfYXVkaW9fcGVyaW9kX2NoXzEgPSAweCV4XG4iLCBkYXRhKTsKPj4gKwkJcmV0ID0g LUVJTlZBTDsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwo+PiArCXJldCA9IGRhdGE7Cj4+ ICtleGl0Ogo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfbGlu a19wYXJzZV9hdWRpb19jaGFubmVsX3BlcmlvZChzdHJ1Y3QgZHBfbGlua19wcml2YXRlIAo+PiAq bGluaykKPj4gK3sKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwlzdHJ1Y3QgZHBfbGlua190ZXN0X2F1 ZGlvICpyZXEgPSAmbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvOwo+PiArCj4+ICsJcmV0ID0gZHBf bGlua19nZXRfcGVyaW9kKGxpbmssIERQX1RFU1RfQVVESU9fUEVSSU9EX0NIMSk7Cj4+ICsJaWYg KHJldCA9PSAtRUlOVkFMKQo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsKPj4gKwlyZXEtPnRlc3RfYXVk aW9fcGVyaW9kX2NoXzEgPSByZXQ7Cj4+ICsJcHJfZGVidWcoInRlc3RfYXVkaW9fcGVyaW9kX2No XzEgPSAweCV4XG4iLCByZXQpOwo+PiArCj4+ICsJcmV0ID0gZHBfbGlua19nZXRfcGVyaW9kKGxp bmssIERQX1RFU1RfQVVESU9fUEVSSU9EX0NIMik7Cj4+ICsJaWYgKHJldCA9PSAtRUlOVkFMKQo+ PiArCQlnb3RvIGV4aXQ7Cj4+ICsKPj4gKwlyZXEtPnRlc3RfYXVkaW9fcGVyaW9kX2NoXzIgPSBy ZXQ7Cj4+ICsJcHJfZGVidWcoInRlc3RfYXVkaW9fcGVyaW9kX2NoXzIgPSAweCV4XG4iLCByZXQp Owo+PiArCj4+ICsJLyogVEVTVF9BVURJT19QRVJJT0RfQ0hfMyAoQnl0ZSAweDI3NSkgKi8KPj4g KwlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0gz KTsKPj4gKwlpZiAocmV0ID09IC1FSU5WQUwpCj4+ICsJCWdvdG8gZXhpdDsKPj4gKwo+PiArCXJl cS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfMyA9IHJldDsKPj4gKwlwcl9kZWJ1ZygidGVzdF9hdWRp b19wZXJpb2RfY2hfMyA9IDB4JXhcbiIsIHJldCk7Cj4+ICsKPj4gKwlyZXQgPSBkcF9saW5rX2dl dF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g0KTsKPj4gKwlpZiAocmV0ID09 IC1FSU5WQUwpCj4+ICsJCWdvdG8gZXhpdDsKPj4gKwo+PiArCXJlcS0+dGVzdF9hdWRpb19wZXJp b2RfY2hfNCA9IHJldDsKPj4gKwlwcl9kZWJ1ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfNCA9IDB4 JXhcbiIsIHJldCk7Cj4+ICsKPj4gKwlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywgRFBf VEVTVF9BVURJT19QRVJJT0RfQ0g1KTsKPj4gKwlpZiAocmV0ID09IC1FSU5WQUwpCj4+ICsJCWdv dG8gZXhpdDsKPj4gKwo+PiArCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfNSA9IHJldDsKPj4g Kwlwcl9kZWJ1ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfNSA9IDB4JXhcbiIsIHJldCk7Cj4+ICsK Pj4gKwlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0Rf Q0g2KTsKPj4gKwlpZiAocmV0ID09IC1FSU5WQUwpCj4+ICsJCWdvdG8gZXhpdDsKPj4gKwo+PiAr CXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfNiA9IHJldDsKPj4gKwlwcl9kZWJ1ZygidGVzdF9h dWRpb19wZXJpb2RfY2hfNiA9IDB4JXhcbiIsIHJldCk7Cj4+ICsKPj4gKwlyZXQgPSBkcF9saW5r X2dldF9wZXJpb2QobGluaywgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g3KTsKPj4gKwlpZiAocmV0 ID09IC1FSU5WQUwpCj4+ICsJCWdvdG8gZXhpdDsKPj4gKwo+PiArCXJlcS0+dGVzdF9hdWRpb19w ZXJpb2RfY2hfNyA9IHJldDsKPj4gKwlwcl9kZWJ1ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfNyA9 IDB4JXhcbiIsIHJldCk7Cj4+ICsKPj4gKwlyZXQgPSBkcF9saW5rX2dldF9wZXJpb2QobGluaywg RFBfVEVTVF9BVURJT19QRVJJT0RfQ0g4KTsKPj4gKwlpZiAocmV0ID09IC1FSU5WQUwpCj4+ICsJ CWdvdG8gZXhpdDsKPj4gKwo+PiArCXJlcS0+dGVzdF9hdWRpb19wZXJpb2RfY2hfOCA9IHJldDsK Pj4gKwlwcl9kZWJ1ZygidGVzdF9hdWRpb19wZXJpb2RfY2hfOCA9IDB4JXhcbiIsIHJldCk7Cj4+ ICtleGl0Ogo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfbGlu a19wYXJzZV9hdWRpb19wYXR0ZXJuX3R5cGUoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAKPj4gKmxp bmspCj4+ICt7Cj4+ICsJaW50IHJldCA9IDA7Cj4+ICsJdTggYnA7Cj4+ICsJdTggZGF0YTsKPj4g KwlpbnQgcmxlbjsKPj4gKwlpbnQgY29uc3QgcGFyYW1fbGVuID0gMHgxOwo+PiArCWludCBjb25z dCBtYXhfYXVkaW9fcGF0dGVybl90eXBlID0gMHgxOwo+PiArCj4+ICsJcmxlbiA9IGRybV9kcF9k cGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LAo+PiArCQlEUF9URVNUX0FVRElPX1BBVFRFUk5f VFlQRSwgJmJwLCBwYXJhbV9sZW4pOwo+PiArCWlmIChybGVuIDwgcGFyYW1fbGVuKSB7Cj4+ICsJ CXByX2VycigiZmFpbGVkIHRvIHJlYWQgbGluayBhdWRpbyBtb2RlIGRhdGFcbiIpOwo+PiArCQly ZXQgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCWRhdGEgPSBicDsKPj4g Kwo+PiArCS8qIEF1ZGlvIFBhdHRlcm4gVHlwZSAtIEJpdHMgNzowICovCj4+ICsJaWYgKChpbnQp ZGF0YSA+IG1heF9hdWRpb19wYXR0ZXJuX3R5cGUpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGF1 ZGlvIHBhdHRlcm4gdHlwZSA9IDB4JXhcbiIsIGRhdGEpOwo+PiArCQlyZXQgPSAtRUlOVkFMOwo+ PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCj4+ICsJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlv LnRlc3RfYXVkaW9fcGF0dGVybl90eXBlID0gZGF0YTsKPj4gKwlwcl9kZWJ1ZygiYXVkaW8gcGF0 dGVybiB0eXBlID0gJXNcbiIsCj4+ICsJCQlkcF9saW5rX2dldF9hdWRpb190ZXN0X3BhdHRlcm4o ZGF0YSkpOwo+PiArZXhpdDoKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGRwX2xpbmtfcGFyc2VfYXVkaW9fbW9kZShzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5r KQo+PiArewo+PiArCWludCByZXQgPSAwOwo+PiArCXU4IGJwOwo+PiArCXU4IGRhdGE7Cj4+ICsJ aW50IHJsZW47Cj4+ICsJaW50IGNvbnN0IHBhcmFtX2xlbiA9IDB4MTsKPj4gKwlpbnQgY29uc3Qg bWF4X2F1ZGlvX3NhbXBsaW5nX3JhdGUgPSAweDY7Cj4+ICsJaW50IGNvbnN0IG1heF9hdWRpb19j aGFubmVsX2NvdW50ID0gMHg4Owo+PiArCWludCBzYW1wbGluZ19yYXRlID0gMHgwOwo+PiArCWlu dCBjaGFubmVsX2NvdW50ID0gMHgwOwo+PiArCj4+ICsJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWQo bGluay0+YXV4LT5kcm1fYXV4LCBEUF9URVNUX0FVRElPX01PREUsCj4+ICsJCQkmYnAsIHBhcmFt X2xlbik7Cj4+ICsJaWYgKHJsZW4gPCBwYXJhbV9sZW4pIHsKPj4gKwkJcHJfZXJyKCJmYWlsZWQg dG8gcmVhZCBsaW5rIGF1ZGlvIG1vZGUgZGF0YVxuIik7Cj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+ ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsJZGF0YSA9IGJwOwo+PiArCj4+ICsJLyogU2FtcGxp bmcgUmF0ZSAtIEJpdHMgMzowICovCj4+ICsJc2FtcGxpbmdfcmF0ZSA9IGRhdGEgJiAweEY7Cj4+ ICsJaWYgKHNhbXBsaW5nX3JhdGUgPiBtYXhfYXVkaW9fc2FtcGxpbmdfcmF0ZSkgewo+PiArCQlw cl9lcnIoInNhbXBsaW5nIHJhdGUgKDB4JXgpIGdyZWF0ZXIgdGhhbiBtYXggKDB4JXgpXG4iLAo+ PiArCQkJCXNhbXBsaW5nX3JhdGUsIG1heF9hdWRpb19zYW1wbGluZ19yYXRlKTsKPj4gKwkJcmV0 ID0gLUVJTlZBTDsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwo+PiArCS8qIENoYW5uZWwg Q291bnQgLSBCaXRzIDc6NCAqLwo+PiArCWNoYW5uZWxfY291bnQgPSAoKGRhdGEgJiAweEYwKSA+ PiA0KSArIDE7Cj4+ICsJaWYgKGNoYW5uZWxfY291bnQgPiBtYXhfYXVkaW9fY2hhbm5lbF9jb3Vu dCkgewo+PiArCQlwcl9lcnIoImNoYW5uZWxfY291bnQgKDB4JXgpIGdyZWF0ZXIgdGhhbiBtYXgg KDB4JXgpXG4iLAo+PiArCQkJCWNoYW5uZWxfY291bnQsIG1heF9hdWRpb19jaGFubmVsX2NvdW50 KTsKPj4gKwkJcmV0ID0gLUVJTlZBTDsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwo+PiAr CWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1ZGlvX3NhbXBsaW5nX3JhdGUgPSBzYW1w bGluZ19yYXRlOwo+PiArCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50ZXN0X2F1ZGlvX2NoYW5u ZWxfY291bnQgPSBjaGFubmVsX2NvdW50Owo+PiArCXByX2RlYnVnKCJzYW1wbGluZ19yYXRlID0g JXMsIGNoYW5uZWxfY291bnQgPSAweCV4XG4iLAo+PiArCQlkcF9saW5rX2dldF9hdWRpb19zYW1w bGVfcmF0ZShzYW1wbGluZ19yYXRlKSwgY2hhbm5lbF9jb3VudCk7Cj4+ICtleGl0Ogo+PiArCXJl dHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogZHBfcGFyc2VfYXVkaW9fcGF0dGVy bl9wYXJhbXMoKSAtIHBhcnNlcyBhdWRpbyBwYXR0ZXJuIHBhcmFtZXRlcnMgCj4+IGZyb20gRFBD RAo+PiArICogQGxpbms6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0YQo+PiArICoKPj4gKyAqIFJl dHVybnMgMCBpZiBpdCBzdWNjZXNzZnVsbHkgcGFyc2VzIHRoZSBhdWRpbyBsaW5rIHBhdHRlcm4g Cj4+IHBhcmFtZXRlcnMuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV9hdWRp b19wYXR0ZXJuX3BhcmFtcyhzdHJ1Y3QgZHBfbGlua19wcml2YXRlIAo+PiAqbGluaykKPj4gK3sK Pj4gKwlpbnQgcmV0ID0gMDsKPj4gKwo+PiArCXJldCA9IGRwX2xpbmtfcGFyc2VfYXVkaW9fbW9k ZShsaW5rKTsKPj4gKwlpZiAocmV0KQo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsKPj4gKwlyZXQgPSBk cF9saW5rX3BhcnNlX2F1ZGlvX3BhdHRlcm5fdHlwZShsaW5rKTsKPj4gKwlpZiAocmV0KQo+PiAr CQlnb3RvIGV4aXQ7Cj4+ICsKPj4gKwlyZXQgPSBkcF9saW5rX3BhcnNlX2F1ZGlvX2NoYW5uZWxf cGVyaW9kKGxpbmspOwo+PiArCj4+ICtleGl0Ogo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsK Pj4gKy8qKgo+PiArICogZHBfbGlua19pc192aWRlb19wYXR0ZXJuX3ZhbGlkKCkgLSB2YWxpZGF0 ZXMgdGhlIHZpZGVvIHBhdHRlcm4KPj4gKyAqIEBwYXR0ZXJuOiB2aWRlbyBwYXR0ZXJuIHJlcXVl c3RlZCBieSB0aGUgc2luawo+PiArICoKPj4gKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVz dGVkIHZpZGVvIHBhdHRlcm4gaXMgc3VwcG9ydGVkLgo+PiArICovCj4+ICtzdGF0aWMgYm9vbCBk cF9saW5rX2lzX3ZpZGVvX3BhdHRlcm5fdmFsaWQodTMyIHBhdHRlcm4pCj4+ICt7Cj4+ICsJc3dp dGNoIChwYXR0ZXJuKSB7Cj4+ICsJY2FzZSBEUF9OT19URVNUX1BBVFRFUk46Cj4+ICsJY2FzZSBE UF9DT0xPUl9SQU1QOgo+PiArCWNhc2UgRFBfQkxBQ0tfQU5EX1dISVRFX1ZFUlRJQ0FMX0xJTkVT Ogo+PiArCWNhc2UgRFBfQ09MT1JfU1FVQVJFOgo+PiArCQlyZXR1cm4gdHJ1ZTsKPj4gKwlkZWZh dWx0Ogo+PiArCQlyZXR1cm4gZmFsc2U7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgY2hh ciAqZHBfbGlua192aWRlb19wYXR0ZXJuX3RvX3N0cmluZyh1MzIgdGVzdF92aWRlb19wYXR0ZXJu KQo+PiArewo+PiArCXN3aXRjaCAodGVzdF92aWRlb19wYXR0ZXJuKSB7Cj4+ICsJY2FzZSBEUF9O T19URVNUX1BBVFRFUk46Cj4+ICsJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKERQX05PX1RFU1Rf UEFUVEVSTik7Cj4+ICsJY2FzZSBEUF9DT0xPUl9SQU1QOgo+PiArCQlyZXR1cm4gRFBfTElOS19F TlVNX1NUUihEUF9DT0xPUl9SQU1QKTsKPj4gKwljYXNlIERQX0JMQUNLX0FORF9XSElURV9WRVJU SUNBTF9MSU5FUzoKPj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfQkxBQ0tfQU5EX1dI SVRFX1ZFUlRJQ0FMX0xJTkVTKTsKPj4gKwljYXNlIERQX0NPTE9SX1NRVUFSRToKPj4gKwkJcmV0 dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfQ09MT1JfU1FVQVJFKTsKPj4gKwlkZWZhdWx0Ogo+PiAr CQlyZXR1cm4gInVua25vd24iOwo+PiArCX0KPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBkcF9s aW5rX2lzX2R5bmFtaWNfcmFuZ2VfdmFsaWQoKSAtIHZhbGlkYXRlcyB0aGUgZHluYW1pYyByYW5n ZQo+PiArICogQGJpdF9kZXB0aDogdGhlIGR5bmFtaWMgcmFuZ2UgdmFsdWUgdG8gYmUgY2hlY2tl ZAo+PiArICoKPj4gKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZHluYW1pYyByYW5nZSB2YWx1ZSBp cyBzdXBwb3J0ZWQuCj4+ICsgKi8KPj4gK3N0YXRpYyBib29sIGRwX2xpbmtfaXNfZHluYW1pY19y YW5nZV92YWxpZCh1MzIgZHIpCj4+ICt7Cj4+ICsJc3dpdGNoIChkcikgewo+PiArCWNhc2UgRFBf RFlOQU1JQ19SQU5HRV9SR0JfVkVTQToKPj4gKwljYXNlIERQX0RZTkFNSUNfUkFOR0VfUkdCX0NF QToKPj4gKwkJcmV0dXJuIHRydWU7Cj4+ICsJZGVmYXVsdDoKPj4gKwkJcmV0dXJuIGZhbHNlOwo+ PiArCX0KPj4gK30KPj4gKwo+PiArc3RhdGljIGNoYXIgKmRwX2xpbmtfZHluYW1pY19yYW5nZV90 b19zdHJpbmcodTMyIGRyKQo+PiArewo+PiArCXN3aXRjaCAoZHIpIHsKPj4gKwljYXNlIERQX0RZ TkFNSUNfUkFOR0VfUkdCX1ZFU0E6Cj4+ICsJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKERQX0RZ TkFNSUNfUkFOR0VfUkdCX1ZFU0EpOwo+PiArCWNhc2UgRFBfRFlOQU1JQ19SQU5HRV9SR0JfQ0VB Ogo+PiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUihEUF9EWU5BTUlDX1JBTkdFX1JHQl9DRUEp Owo+PiArCWNhc2UgRFBfRFlOQU1JQ19SQU5HRV9VTktOT1dOOgo+PiArCWRlZmF1bHQ6Cj4+ICsJ CXJldHVybiAidW5rbm93biI7Cj4+ICsJfQo+PiArfQo+IAo+IE5vIG5lZWQgZm9yIHRoaXMsIGp1 c3QgcHJpbnQgdGhlIHZhbHVlIGluIHRoZSBkZWJ1ZyBzdGF0ZW1lbnQuCj4gClJlbW92ZWQgaW4g VjIuCgo+PiArCj4+ICsvKioKPj4gKyAqIGRwX2xpbmtfaXNfYml0X2RlcHRoX3ZhbGlkKCkgLSB2 YWxpZGF0ZXMgdGhlIGJpdCBkZXB0aCByZXF1ZXN0ZWQKPj4gKyAqIEBiaXRfZGVwdGg6IGJpdCBk ZXB0aCByZXF1ZXN0ZWQgYnkgdGhlIHNpbmsKPj4gKyAqCj4+ICsgKiBSZXR1cm5zIHRydWUgaWYg dGhlIHJlcXVlc3RlZCBiaXQgZGVwdGggaXMgc3VwcG9ydGVkLgo+PiArICovCj4+ICtzdGF0aWMg Ym9vbCBkcF9saW5rX2lzX2JpdF9kZXB0aF92YWxpZCh1MzIgdGJkKQo+PiArewo+PiArCS8qIERQ X1RFU1RfVklERU9fUEFUVEVSTl9OT05FIGlzIHRyZWF0ZWQgYXMgaW52YWxpZCAqLwo+PiArCXN3 aXRjaCAodGJkKSB7Cj4+ICsJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF82Ogo+PiArCWNhc2UgRFBf VEVTVF9CSVRfREVQVEhfODoKPj4gKwljYXNlIERQX1RFU1RfQklUX0RFUFRIXzEwOgo+PiArCQly ZXR1cm4gdHJ1ZTsKPj4gKwlkZWZhdWx0Ogo+PiArCQlyZXR1cm4gZmFsc2U7Cj4+ICsJfQo+PiAr fQo+PiArCj4+ICtzdGF0aWMgY2hhciAqZHBfbGlua19iaXRfZGVwdGhfdG9fc3RyaW5nKHUzMiB0 YmQpCj4+ICt7Cj4+ICsJc3dpdGNoICh0YmQpIHsKPj4gKwljYXNlIERQX1RFU1RfQklUX0RFUFRI XzY6Cj4+ICsJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKERQX1RFU1RfQklUX0RFUFRIXzYpOwo+ PiArCWNhc2UgRFBfVEVTVF9CSVRfREVQVEhfODoKPj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9T VFIoRFBfVEVTVF9CSVRfREVQVEhfOCk7Cj4+ICsJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF8xMDoK Pj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfVEVTVF9CSVRfREVQVEhfMTApOwo+PiAr CWNhc2UgRFBfVEVTVF9CSVRfREVQVEhfVU5LTk9XTjoKPj4gKwlkZWZhdWx0Ogo+PiArCQlyZXR1 cm4gInVua25vd24iOwo+PiArCX0KPj4gK30KPiAKPiBTYW1lIHRoaW5nIGhlcmUsIGp1c3QgcmVt b3ZlIHRoaXMgYW5kIHByaW50IHRoZSBlbnVtIHZhbHVlLgo+IApSZW1vdmVkIGluIFYyLgoKPj4g Kwo+PiArc3RhdGljIGludCBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMxKHN0cnVjdCBkcF9s aW5rX3ByaXZhdGUgKmxpbmssCj4+ICsJCQkJCWludCBjb25zdCBhZGRyLCBpbnQgY29uc3QgbGVu LCB1MzIgKnZhbCkKPiAKPiBwYXNzLWJ5LXZhbHVlIGRvZXNuJ3QgbmVlZCBjb25zdCBzYW1lIGNv bW1lbnQgYXBwbGllcyBlbHNld2hlcmUsIHBsZWFzZSAKPiBzd2VlcAo+IHRoZSBjb2RlIGZvciBv dGhlciBpbnN0YW5jZXMuCj4gCj4+ICt7Cj4+ICsJdTggYnBbMl07Cj4+ICsJaW50IHJsZW47Cj4+ ICsKPj4gKwlpZiAobGVuIDwgMikKPiAKPiBJZiB5b3UncmUgZ29pbmcgdG8gY2hlY2sgbGVuIDwg MiwgeW91IHNob3VsZCBwcm9iYWJseSBhbHNvIGNoZWNrIGxlbiA+IAo+IDIgdG8KPiBwcmV2ZW50 IG92ZXJmbG93LiBBdCB0aGlzIHBvaW50LCBsZW4gY2FuIHJlYWxseSBvbmx5IGJlIDIsIHNvIHlv dSBjYW4KPiBqdXN0IHJlbW92ZQo+IGl0IGVudGlyZWx5IGFzIGFuIGFyZ3VtZW50Lgo+IApGaXhl ZCBpbiB2Mi4gKGNoZWNraW5nIGZvciBsZW4gIT0gMikKCj4+ICsJCXJldHVybiAtRUlOVkFMOwo+ PiArCj4+ICsJLyogUmVhZCB0aGUgcmVxdWVzdGVkIHZpZGVvIGxpbmsgcGF0dGVybiAoQnl0ZSAw eDIyMSkuICovCj4+ICsJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4 LCBhZGRyLCBicCwgbGVuKTsKPj4gKwlpZiAocmxlbiA8IGxlbikgewo+PiArCQlwcl9lcnIoImZh aWxlZCB0byByZWFkIDB4JXhcbiIsIGFkZHIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9 Cj4+ICsKPj4gKwkqdmFsID0gYnBbMV0gfCAoYnBbMF0gPDwgOCk7Cj4+ICsKPj4gKwlyZXR1cm4g MDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMy KHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmssCj4+ICsJCQkJCWludCBjb25zdCBhZGRyLCBp bnQgY29uc3QgbGVuLAo+PiArCQkJCQl1MzIgKnZhbDEsIHUzMiAqdmFsMikKPj4gK3sKPj4gKwl1 OCBicFsyXTsKPj4gKwlpbnQgcmxlbjsKPj4gKwo+PiArCWlmIChsZW4gPCAyKQo+IAo+IFNhbWUg Y29tbWVudCBoZXJlIHJ0IGJvdW5kcyBjaGVja2luZwo+IApGaXhlZCBpbiBWMi4KCj4+ICsJCXJl dHVybiAtRUlOVkFMOwo+PiArCj4+ICsJLyogUmVhZCB0aGUgcmVxdWVzdGVkIHZpZGVvIGxpbmsg cGF0dGVybiAoQnl0ZSAweDIyMSkuICovCj4+ICsJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWQobGlu ay0+YXV4LT5kcm1fYXV4LCBhZGRyLCBicCwgbGVuKTsKPj4gKwlpZiAocmxlbiA8IGxlbikgewo+ PiArCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIDB4JXhcbiIsIGFkZHIpOwo+PiArCQlyZXR1cm4g LUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwkqdmFsMSA9IChicFswXSAmIEJJVCg3KSkgPj4gNzsK Pj4gKwkqdmFsMiA9IGJwWzFdIHwgKChicFswXSAmIDB4N0YpIDw8IDgpOwo+PiArCj4+ICsJcmV0 dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV90aW1pbmdfcGFy YW1zMyhzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rLAo+PiArCQkJCQlpbnQgY29uc3QgYWRk ciwgdTMyICp2YWwpCj4+ICt7Cj4+ICsJdTggYnA7Cj4+ICsJdTMyIGxlbiA9IDE7Cj4+ICsJaW50 IHJsZW47Cj4+ICsKPj4gKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9h dXgsIGFkZHIsICZicCwgbGVuKTsKPj4gKwlpZiAocmxlbiA8IDEpIHsKPj4gKwkJcHJfZXJyKCJm YWlsZWQgdG8gcmVhZCAweCV4XG4iLCBhZGRyKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJ fQo+PiArCSp2YWwgPSBicDsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+IAo+IFB1dHRpbmcg YXNpZGUgdGhlIHVuaW5mb3JtYXRpdmUgbmFtZXMsIHRoZXNlIAo+IGRwX2xpbmtfcGFyc2VfdGlt aW5nX3BhcmFtcyoKPiBjYW4gYmUgY29tYmluZWQgaW50byBvbmUgcHJldHR5IGVhc2lseSwgbGlr ZToKPiAKPiBzdGF0aWMgaW50IGRwX2xpbmtfcmVhZF91MzIoc3RydWN0IGRwX2xpbmtfcHJpdmF0 ZSAqbGluaywgdW5zaWduZWQgaW50IAo+IG9mZnNldCwKPiAJCSAgICAgICAgICAgIHUzMiAqdmFs LCBpbnQgbnVtX2J5dGVzKQo+IHsKPiAgICAgICAgIGludCBpOwo+ICAgICAgICAgc3NpemVfdCBy ZXQ7Cj4gICAgICAgICBfX2JlMzIgdG1wX3ZhbDsKPiAKPiAgICAgICAgIGZvciAoaSA9IDA7IG51 bV9ieXRlcyA+IDA7IGkgKz0gc2l6ZW9mKCp2YWwpKSB7Cj4gICAgICAgICAgICAgICAgIGludCB0 b19yZWFkID0gbWluKHNpemVvZih0bXBfdmFsKSwgbnVtX2J5dGVzKTsKPiAKPiAgICAgICAgICAg ICAgICAgdG1wX3ZhbCA9IDA7Cj4gICAgICAgICAgICAgICAgIHJldCA9IGRybV9kcF9kcGNkX3Jl YWQobGluay0+YXV4LT5kcm1fYXV4LCBvZmZzZXQgKyBpLCAKPiAmdG1wX3ZhbCwKPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b19yZWFkKTsKPiAgICAgICAgICAgICAg ICAgaWYgKHJsZW4gPCAwKSB7Cj4gICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJpbnQgZXJy b3IgbWVzc2FnZSBoZXJlICovCj4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJsZW47 Cj4gICAgICAgICAgICAgICAgIH0KPiAgICAgICAgICAgICAgICAgdmFsW2ldID0gYmUzMl90b19j cHUodG1wX3ZhbCk7Cj4gICAgICAgICAgICAgICAgIG51bV9ieXRlcyAtPSB0b19yZWFkOwo+ICAg ICAgICAgfQo+ICAgICAgICAgcmV0dXJuIDA7Cj4gfQo+IAo+IElmIHlvdSBuZWVkIHRvIHN0cmlw IG9mZiB0aGUgZmlyc3QgYml0LCBkbyBpdCBmcm9tIHRoZSBjYWxsZXIuCj4gCj4gSSBkaWRuJ3Qg Y29tcGlsZSBvciB0ZXN0IHRoaXMsIHNvIGl0IG1pZ2h0IG5lZWQgdHdlYWtpbmcsIGJ1dCB5b3Ug Z2V0IAo+IHRoZSBpZGVhLgo+IAo+IApXaWxsIGZvbGxvdyB1cCBvbiB0aGlzIGltcGxlbWVudGF0 aW9uIGFuZCBmaXggdGhlIHBhcmFtcyogQVBJcyBpbiBWMy4KPj4gKwo+PiArLyoqCj4+ICsgKiBk cF9wYXJzZV92aWRlb19wYXR0ZXJuX3BhcmFtcygpIC0gcGFyc2VzIHZpZGVvIHBhdHRlcm4gcGFy YW1ldGVycyAKPj4gZnJvbSBEUENECj4+ICsgKiBAbGluazogRGlzcGxheSBQb3J0IERyaXZlciBk YXRhCj4+ICsgKgo+PiArICogUmV0dXJucyAwIGlmIGl0IHN1Y2Nlc3NmdWxseSBwYXJzZXMgdGhl IHZpZGVvIGxpbmsgcGF0dGVybiBhbmQgdGhlIAo+PiBsaW5rCj4+ICsgKiBiaXQgZGVwdGggcmVx dWVzdGVkIGJ5IHRoZSBzaW5rIGFuZCwgYW5kIGlmIHRoZSB2YWx1ZXMgcGFyc2VkIGFyZSAKPj4g dmFsaWQuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgZHBfbGlua19wYXJzZV92aWRlb19wYXR0ZXJu X3BhcmFtcyhzdHJ1Y3QgZHBfbGlua19wcml2YXRlIAo+PiAqbGluaykKPj4gK3sKPj4gKwlpbnQg cmV0ID0gMDsKPj4gKwlpbnQgcmxlbjsKPiAKPiBzc2l6ZV90Cj4gCkFsbCB0aGUgcmxlbiBpbiBl YWNoIGZ1bmN0aW9uIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIHNzaXplX3QgVjIuCgo+PiArCXU4IGJw Owo+PiArCXU4IGRhdGE7Cj4gCj4gV2h5IGRvIHlvdSBuZWVkIGRhdGEgYW5kIGJwPyBJIHRoaW5r IHlvdSBvbmx5IG5lZWQgb25lLgo+IApGaXhlZCBpbiBWMi4KCj4+ICsJdTMyIGR5bl9yYW5nZTsK Pj4gKwlpbnQgY29uc3QgcGFyYW1fbGVuID0gMHgxOwo+PiArCj4+ICsJcmxlbiA9IGRybV9kcF9k cGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LCBEUF9URVNUX1BBVFRFUk4sCj4+ICsJCQkmYnAs IHBhcmFtX2xlbik7Cj4+ICsJaWYgKHJsZW4gPCBwYXJhbV9sZW4pIHsKPj4gKwkJcHJfZXJyKCJm YWlsZWQgdG8gcmVhZCBsaW5rIHZpZGVvIHBhdHRlcm5cbiIpOwo+PiArCQlyZXQgPSAtRUlOVkFM Owo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCWRhdGEgPSBicDsKPj4gKwo+PiArCWlmICgh ZHBfbGlua19pc192aWRlb19wYXR0ZXJuX3ZhbGlkKGRhdGEpKSB7Cj4+ICsJCXByX2VycigiaW52 YWxpZCBsaW5rIHZpZGVvIHBhdHRlcm4gPSAweCV4XG4iLCBkYXRhKTsKPj4gKwkJcmV0ID0gLUVJ TlZBTDsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwo+PiArCWxpbmstPmRwX2xpbmsudGVz dF92aWRlby50ZXN0X3ZpZGVvX3BhdHRlcm4gPSBkYXRhOwo+PiArCXByX2RlYnVnKCJsaW5rIHZp ZGVvIHBhdHRlcm4gPSAweCV4ICglcylcbiIsCj4+ICsJCWxpbmstPmRwX2xpbmsudGVzdF92aWRl by50ZXN0X3ZpZGVvX3BhdHRlcm4sCj4+ICsJCWRwX2xpbmtfdmlkZW9fcGF0dGVybl90b19zdHJp bmcoCj4+ICsJCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92aWRlb19wYXR0ZXJuKSk7 Cj4+ICsKPj4gKwkvKiBSZWFkIHRoZSByZXF1ZXN0ZWQgY29sb3IgYml0IGRlcHRoIGFuZCBkeW5h bWljIHJhbmdlIChCeXRlIDB4MjMyKSAKPj4gKi8KPj4gKwlybGVuID0gZHJtX2RwX2RwY2RfcmVh ZChsaW5rLT5hdXgtPmRybV9hdXgsIERQX1RFU1RfTUlTQzAsCj4+ICsJCQkmYnAsIHBhcmFtX2xl bik7Cj4+ICsJaWYgKHJsZW4gPCBwYXJhbV9sZW4pIHsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8g cmVhZCBsaW5rIGJpdCBkZXB0aFxuIik7Cj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8g ZXhpdDsKPj4gKwl9Cj4+ICsJZGF0YSA9IGJwOwo+PiArCj4+ICsJLyogRHluYW1pYyBSYW5nZSAq Lwo+PiArCWR5bl9yYW5nZSA9IChkYXRhICYgRFBfVEVTVF9EWU5BTUlDX1JBTkdFX0NFQSkgPj4g MzsKPiAKPiBUaGlzIG1hc2sgaXNvbGF0ZXMgb25lIGJpdCBmcm9tIGRhdGEKPiAKPj4gKwlpZiAo IWRwX2xpbmtfaXNfZHluYW1pY19yYW5nZV92YWxpZChkeW5fcmFuZ2UpKSB7Cj4gCj4gYW5kIHRo aXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCBpcyAwIHx8IDEKPiAKPiBTbyBy ZW1vdmUgdGhpcyBjb2RlLCBhbmQgcmVtb3ZlIGRwX2xpbmtfaXNfZHluYW1pY19yYW5nZV92YWxp ZC4KPiAKRml4ZWQgaW4gVjIuCgo+PiArCQlwcl9lcnIoImludmFsaWQgbGluayBkeW5hbWljIHJh bmdlID0gMHgleCIsIGR5bl9yYW5nZSk7Cj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8g ZXhpdDsKPj4gKwl9Cj4+ICsJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfZHluX3Jhbmdl ID0gZHluX3JhbmdlOwo+IAo+IEFuZCBub3cgeW91IGNhbiBqdXN0IGFzc2lnbiB0aGlzIGRpcmVj dGx5LiBZb3Ugc2hvdWxkIHByb2JhYmx5IHN0YXkgCj4gY29uc2lzdGVudAo+IGFuZCBzdG9yZSB0 aGUgdmFsdWUgc2hpZnRlZCBsaWtlIHRoZSBvdGhlciB2YWx1ZXMgeW91J3JlIHN0b3JpbmcuCj4g CkZpeGVkIGluIFYyLgoKPj4gKwlwcl9kZWJ1ZygibGluayBkeW5hbWljIHJhbmdlID0gMHgleCAo JXMpXG4iLAo+PiArCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9keW5fcmFuZ2UsCj4+ ICsJCWRwX2xpbmtfZHluYW1pY19yYW5nZV90b19zdHJpbmcoCj4+ICsJCQlsaW5rLT5kcF9saW5r LnRlc3RfdmlkZW8udGVzdF9keW5fcmFuZ2UpKTsKPj4gKwo+PiArCS8qIENvbG9yIGJpdCBkZXB0 aCAqLwo+PiArCWRhdGEgJj0gRFBfVEVTVF9CSVRfREVQVEhfTUFTSzsKPj4gKwlpZiAoIWRwX2xp bmtfaXNfYml0X2RlcHRoX3ZhbGlkKGRhdGEpKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBsaW5r IGJpdCBkZXB0aCA9IDB4JXhcbiIsIGRhdGEpOwo+PiArCQlyZXQgPSAtRUlOVkFMOwo+PiArCQln b3RvIGV4aXQ7Cj4+ICsJfQo+PiArCj4+ICsJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rf Yml0X2RlcHRoID0gZGF0YTsKPj4gKwlwcl9kZWJ1ZygibGluayBiaXQgZGVwdGggPSAweCV4ICgl cylcbiIsCj4+ICsJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2JpdF9kZXB0aCwKPj4g KwkJZHBfbGlua19iaXRfZGVwdGhfdG9fc3RyaW5nKAo+PiArCQlsaW5rLT5kcF9saW5rLnRlc3Rf dmlkZW8udGVzdF9iaXRfZGVwdGgpKTsKPj4gKwo+PiArCS8qIHJlc29sdXRpb24gdGltaW5nIHBh cmFtcyAqLwo+PiArCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczEobGluaywgRFBf VEVTVF9IX1RPVEFMX0hJLCAyLAo+PiArCQkJJmxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0 X2hfdG90YWwpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2Ug dGVzdF9oX3RvdGFsIChEUF9URVNUX0hfVE9UQUxfSEkpXG4iKTsKPj4gKwkJZ290byBleGl0Owo+ PiArCX0KPj4gKwlwcl9kZWJ1ZygiVEVTVF9IX1RPVEFMID0gJWRcbiIsIAo+PiBsaW5rLT5kcF9s aW5rLnRlc3RfdmlkZW8udGVzdF9oX3RvdGFsKTsKPj4gKwo+PiArCXJldCA9IGRwX2xpbmtfcGFy c2VfdGltaW5nX3BhcmFtczEobGluaywgRFBfVEVTVF9WX1RPVEFMX0hJLCAyLAo+PiArCQkJJmxp bmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3ZfdG90YWwpOwo+PiArCWlmIChyZXQpIHsKPj4g KwkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgdGVzdF92X3RvdGFsIChEUF9URVNUX1ZfVE9UQUxf SEkpXG4iKTsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwlwcl9kZWJ1ZygiVEVTVF9WX1RP VEFMID0gJWRcbiIsIAo+PiBsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92X3RvdGFsKTsK Pj4gKwo+PiArCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczEobGluaywgRFBfVEVT VF9IX1NUQVJUX0hJLCAyLAo+PiArCQkJJmxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hf c3RhcnQpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgdGVz dF9oX3N0YXJ0IChEUF9URVNUX0hfU1RBUlRfSEkpXG4iKTsKPj4gKwkJZ290byBleGl0Owo+PiAr CX0KPj4gKwlwcl9kZWJ1ZygiVEVTVF9IX1NUQVJUID0gJWRcbiIsIAo+PiBsaW5rLT5kcF9saW5r LnRlc3RfdmlkZW8udGVzdF9oX3N0YXJ0KTsKPj4gKwo+PiArCXJldCA9IGRwX2xpbmtfcGFyc2Vf dGltaW5nX3BhcmFtczEobGluaywgRFBfVEVTVF9WX1NUQVJUX0hJLCAyLAo+PiArCQkJJmxpbmst PmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3Zfc3RhcnQpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJ cHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgdGVzdF92X3N0YXJ0IChEUF9URVNUX1ZfU1RBUlRfSEkp XG4iKTsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwlwcl9kZWJ1ZygiVEVTVF9WX1NUQVJU ID0gJWRcbiIsIAo+PiBsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92X3N0YXJ0KTsKPj4g Kwo+PiArCXJldCA9IGRwX2xpbmtfcGFyc2VfdGltaW5nX3BhcmFtczIobGluaywgRFBfVEVTVF9I U1lOQ19ISSwgMiwKPj4gKwkJCSZsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oc3luY19w b2wsCj4+ICsJCQkmbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfaHN5bmNfd2lkdGgpOwo+ PiArCWlmIChyZXQpIHsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgKERQX1RFU1RfSFNZ TkNfSEkpXG4iKTsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwlwcl9kZWJ1ZygiVEVTVF9I U1lOQ19QT0wgPSAlZFxuIiwKPj4gKwkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfaHN5 bmNfcG9sKTsKPj4gKwlwcl9kZWJ1ZygiVEVTVF9IU1lOQ19XSURUSCA9ICVkXG4iLAo+PiArCQls aW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9oc3luY193aWR0aCk7Cj4+ICsKPj4gKwlyZXQg PSBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMyKGxpbmssIERQX1RFU1RfVlNZTkNfSEksIDIs Cj4+ICsJCQkmbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfdnN5bmNfcG9sLAo+PiArCQkJ JmxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3ZzeW5jX3dpZHRoKTsKPj4gKwlpZiAocmV0 KSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIChEUF9URVNUX1ZTWU5DX0hJKVxuIik7 Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsJcHJfZGVidWcoIlRFU1RfVlNZTkNfUE9MID0g JWRcbiIsCj4+ICsJCWxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X3ZzeW5jX3BvbCk7Cj4+ ICsJcHJfZGVidWcoIlRFU1RfVlNZTkNfV0lEVEggPSAlZFxuIiwKPj4gKwkJbGluay0+ZHBfbGlu ay50ZXN0X3ZpZGVvLnRlc3RfdnN5bmNfd2lkdGgpOwo+PiArCj4+ICsJcmV0ID0gZHBfbGlua19w YXJzZV90aW1pbmdfcGFyYW1zMShsaW5rLCBEUF9URVNUX0hfV0lEVEhfSEksIDIsCj4+ICsJCQkm bGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3RfaF93aWR0aCk7Cj4+ICsJaWYgKHJldCkgewo+ PiArCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSB0ZXN0X2hfd2lkdGggKERQX1RFU1RfSF9XSURU SF9ISSlcbiIpOwo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCXByX2RlYnVnKCJURVNUX0hf V0lEVEggPSAlZFxuIiwgCj4+IGxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2hfd2lkdGgp Owo+PiArCj4+ICsJcmV0ID0gZHBfbGlua19wYXJzZV90aW1pbmdfcGFyYW1zMShsaW5rLCBEUF9U RVNUX1ZfSEVJR0hUX0hJLCAyLAo+PiArCQkJJmxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0 X3ZfaGVpZ2h0KTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRvIHBhcnNl IHRlc3Rfdl9oZWlnaHQgKERQX1RFU1RfVl9IRUlHSFRfSEkpXG4iKTsKPj4gKwkJZ290byBleGl0 Owo+PiArCX0KPj4gKwlwcl9kZWJ1ZygiVEVTVF9WX0hFSUdIVCA9ICVkXG4iLAo+PiArCQlsaW5r LT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92X2hlaWdodCk7Cj4+ICsKPj4gKwlyZXQgPSBkcF9s aW5rX3BhcnNlX3RpbWluZ19wYXJhbXMzKGxpbmssIERQX1RFU1RfTUlTQzEsCj4+ICsJCSZsaW5r LT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF9ycl9kKTsKPj4gKwlsaW5rLT5kcF9saW5rLnRlc3Rf dmlkZW8udGVzdF9ycl9kICY9IERQX1RFU1RfUkVGUkVTSF9ERU5PTUlOQVRPUjsKPj4gKwlpZiAo cmV0KSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHRlc3RfcnJfZCAoRFBfVEVTVF9N SVNDMSlcbiIpOwo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCXByX2RlYnVnKCJURVNUX1JF RlJFU0hfREVOT01JTkFUT1IgPSAlZFxuIiwKPj4gKwkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVv LnRlc3RfcnJfZCk7Cj4+ICsKPj4gKwlyZXQgPSBkcF9saW5rX3BhcnNlX3RpbWluZ19wYXJhbXMz KGxpbmssIAo+PiBEUF9URVNUX1JFRlJFU0hfUkFURV9OVU1FUkFUT1IsCj4+ICsJCSZsaW5rLT5k cF9saW5rLnRlc3RfdmlkZW8udGVzdF9ycl9uKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCXByX2Vy cigiZmFpbGVkIHRvIHBhcnNlIHRlc3RfcnJfbiAKPj4gKERQX1RFU1RfUkVGUkVTSF9SQVRFX05V TUVSQVRPUilcbiIpOwo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCXByX2RlYnVnKCJURVNU X1JFRlJFU0hfTlVNRVJBVE9SID0gJWRcbiIsCj4+ICsJCWxpbmstPmRwX2xpbmsudGVzdF92aWRl by50ZXN0X3JyX24pOwo+IAo+IEluc3RlYWQgb2Ygc3ByaW5rbGluZyBhbGwgb2YgdGhlc2UgcHJf ZGVidWcgbWVzc2FnZXMgYXJvdW5kLCBqdXN0IGhhdmUgCj4gb25lIGJpZwo+IGRlYnVnIGF0IHRo ZSBlbmQgdG8gcHJpbnQgZXZlcnl0aGluZy4KPiAKRml4ZWQgaW4gVjIuCgo+PiArZXhpdDoKPiAK PiBUaGlzIGxhYmVsIGlzbid0IHVzZWZ1bCwganVzdCByZXR1cm4gZGlyZWN0bHkgYWJvdmUKPiAK Rml4ZWQgaW4gVjIuCgo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICog ZHBfbGlua19wYXJzZV9saW5rX3RyYWluaW5nX3BhcmFtcygpIC0gcGFyc2VzIGxpbmsgdHJhaW5p bmcgCj4+IHBhcmFtZXRlcnMgZnJvbQo+PiArICogRFBDRAo+PiArICogQGxpbms6IERpc3BsYXkg UG9ydCBEcml2ZXIgZGF0YQo+PiArICoKPj4gKyAqIFJldHVybnMgMCBpZiBpdCBzdWNjZXNzZnVs bHkgcGFyc2VzIHRoZSBsaW5rIHJhdGUgKEJ5dGUgMHgyMTkpIGFuZCAKPj4gbGFuZQo+PiArICog Y291bnQgKEJ5dGUgMHgyMjApLCBhbmQgaWYgdGhlc2UgdmFsdWVzIHBhcnNlIGFyZSB2YWxpZC4K Pj4gKyAqLwo+PiArc3RhdGljIGludCBkcF9saW5rX3BhcnNlX2xpbmtfdHJhaW5pbmdfcGFyYW1z KHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgCj4+ICpsaW5rKQo+PiArewo+PiArCXU4IGJwOwo+PiAr CXU4IGRhdGE7Cj4gCj4gWW91IGRvbid0IG5lZWQgYm90aCBicCBhbmQgZGF0YQo+IApGaXhlZCBp biB2Mi4KCj4+ICsJaW50IHJldCA9IDA7Cj4+ICsJaW50IHJsZW47Cj4gCj4gc3NpemVfdAo+IAo+ PiArCWludCBjb25zdCBwYXJhbV9sZW4gPSAweDE7Cj4gCj4gSnVzdCB1c2UgMSBkaXJlY3RseSBi ZWxvdy4KPiAKQWxsIHRoZSBvbmUgYnl0ZSByZWFkcyBoYXZlIGJlZW4gY2hhbmdlZCB0byBkcm1f ZHBfZHBjZF9yZWFkYiBpbiBWMi4KCj4+ICsKPj4gKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZChs aW5rLT5hdXgtPmRybV9hdXgsIERQX1RFU1RfTElOS19SQVRFLAo+PiArCQkJJmJwLCBwYXJhbV9s ZW4pOwo+PiArCWlmIChybGVuIDwgcGFyYW1fbGVuKSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRv IHJlYWQgbGluayByYXRlXG4iKTsKPj4gKwkJcmV0ID0gLUVJTlZBTDsKPj4gKwkJZ290byBleGl0 Owo+PiArCX0KPj4gKwlkYXRhID0gYnA7Cj4+ICsKPj4gKwlpZiAoIWlzX2xpbmtfcmF0ZV92YWxp ZChkYXRhKSkgewo+PiArCQlwcl9lcnIoImludmFsaWQgbGluayByYXRlID0gMHgleFxuIiwgZGF0 YSk7Cj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsKPj4g KwlsaW5rLT5yZXF1ZXN0LnRlc3RfbGlua19yYXRlID0gZGF0YTsKPj4gKwlwcl9kZWJ1ZygibGlu ayByYXRlID0gMHgleFxuIiwgbGluay0+cmVxdWVzdC50ZXN0X2xpbmtfcmF0ZSk7Cj4+ICsKPj4g KwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIERQX1RFU1RfTEFO RV9DT1VOVCwKPj4gKwkJCSZicCwgcGFyYW1fbGVuKTsKPj4gKwlpZiAocmxlbiA8IHBhcmFtX2xl bikgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIGxhbmUgY291bnRcbiIpOwo+PiArCQly ZXQgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCWRhdGEgPSBicDsKPj4g KwlkYXRhICY9IDB4MUY7Cj4gCj4gRFBfTUFYX0xBTkVfQ09VTlRfTUFTSwo+IApGaXhlZCBpbiBW Mi4KPj4gKwo+PiArCWlmICghaXNfbGFuZV9jb3VudF92YWxpZChkYXRhKSkgewo+IAo+IFlvdSBt aWdodCBhbHNvIHdhbnQgdG8gZGF0YSBhZ2FpbnN0IG1heCBsYW5lcwo+IAo+PiArCQlwcl9lcnIo ImludmFsaWQgbGFuZSBjb3VudCA9IDB4JXhcbiIsIGRhdGEpOwo+PiArCQlyZXQgPSAtRUlOVkFM Owo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiArCj4+ICsJbGluay0+cmVxdWVzdC50ZXN0X2xh bmVfY291bnQgPSBkYXRhOwo+PiArCXByX2RlYnVnKCJsYW5lIGNvdW50ID0gMHgleFxuIiwgbGlu ay0+cmVxdWVzdC50ZXN0X2xhbmVfY291bnQpOwo+PiArZXhpdDoKPj4gKwlyZXR1cm4gcmV0Owo+ IAo+IHJldHVybiBkaXJlY3RseSBhYm92ZSBhbmQgcmVtb3ZlIGV4aXQgKyByZXQ7Cj4gCj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBib29sIGRwX2xpbmtfaXNfcGh5X3Rlc3RfcGF0dGVybl9zdXBwb3J0 ZWQodTMyIAo+PiBwaHlfdGVzdF9wYXR0ZXJuX3NlbCkKPj4gK3sKPj4gKwlzd2l0Y2ggKHBoeV90 ZXN0X3BhdHRlcm5fc2VsKSB7Cj4+ICsJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX05PTkU6Cj4+ ICsJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX0QxMF8yX05PX1NDUkFNQkxJTkc6Cj4+ICsJY2Fz ZSBEUF9URVNUX1BIWV9QQVRURVJOX1NZTUJPTF9FUlJfTUVBU1VSRU1FTlRfQ05UOgo+PiArCWNh c2UgRFBfVEVTVF9QSFlfUEFUVEVSTl9QUkJTNzoKPj4gKwljYXNlIERQX1RFU1RfUEhZX1BBVFRF Uk5fODBfQklUX0NVU1RPTV9QQVRURVJOOgo+PiArCWNhc2UgRFBfVEVTVF9QSFlfUEFUVEVSTl9I QlIyX0NUU19FWUVfUEFUVEVSTjoKPj4gKwkJcmV0dXJuIHRydWU7Cj4+ICsJZGVmYXVsdDoKPj4g KwkJcmV0dXJuIGZhbHNlOwo+PiArCX0KPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBkcF9wYXJz ZV9waHlfdGVzdF9wYXJhbXMoKSAtIHBhcnNlcyB0aGUgcGh5IGxpbmsgcGFyYW1ldGVycwo+PiAr ICogQGxpbms6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0YQo+PiArICoKPj4gKyAqIFBhcnNlcyB0 aGUgRFBDRCAoQnl0ZSAweDI0OCkgZm9yIHRoZSBEUCBQSFkgbGluayBwYXR0ZXJuIHRoYXQgaXMg Cj4+IGJlaW5nCj4+ICsgKiByZXF1ZXN0ZWQuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgZHBfbGlu a19wYXJzZV9waHlfdGVzdF9wYXJhbXMoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAKPj4gKmxpbmsp Cj4+ICt7Cj4+ICsJdTggYnA7Cj4+ICsJdTggZGF0YTsKPiAKPiBPbmx5IG5lZWQgb25lIG9mIHRo ZXNlLgo+IAo+PiArCWludCBybGVuOwo+IAo+IHNzaXplX3QKPiAKPj4gKwlpbnQgY29uc3QgcGFy YW1fbGVuID0gMHgxOwo+IAo+IEp1c3QgdXNlIDEgYmVsb3cKPiAKQWxsIHRoZSBhYm92ZSBjb21t ZW50cyBpbiB0aGlzIGZ1bmN0aW9uIGFyZSBmaXhlZCBpbiBWMi4KPj4gKwlpbnQgcmV0ID0gMDsK Pj4gKwo+PiArCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBf VEVTVF9QSFlfUEFUVEVSTiwKPj4gKwkJCSZicCwgcGFyYW1fbGVuKTsKPj4gKwlpZiAocmxlbiA8 IHBhcmFtX2xlbikgewo+IAo+IEZXSVcsIGRybV9kcF9kcGNkX3JlYWQgd2lsbCByZXR1cm4gZWl0 aGVyIGxlbiBvciBhbiAtZXJybm8uIFBhcnRpYWwgCj4gcmVhZHMgcmV0dXJuCj4gLUVQUk9UTy4g U28gaW5zdGVhZCBvZiBjaGVja2luZyB0aGF0IHJsZW4gPCBwYXJhbV9sZW4sIHlvdSBjYW4ganVz dCBkbyAKPiBybGVuIDwgMC4KCkZpeGVkIGluIFYyLgoKPiAKPiBQbGVhc2UgYWxzbyBjaGFuZ2Ug YWxsIG9mIHRoZSAxLWJ5dGUgcmVhZHMgb3ZlciB0byB1c2luZyAKPiBkcm1fZHBfZHBjZF9yZWFk YigpLgo+IAoKRml4ZWQgaW4gVjIuCj4gCj4+ICsJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgcGh5 IGxpbmsgcGF0dGVyblxuIik7Cj4gCj4gcHJpbnQgYW5kIHJldHVybiBybGVuLgo+IApGaXhlZCBp biBWMi4KPj4gKwkJcmV0ID0gLUVJTlZBTDsKPj4gKwkJZ290byBlbmQ7Cj4+ICsJfQo+PiArCj4+ ICsJZGF0YSA9IGJwOwo+PiArCj4+ICsJbGluay0+ZHBfbGluay5waHlfcGFyYW1zLnBoeV90ZXN0 X3BhdHRlcm5fc2VsID0gZGF0YTsKPj4gKwo+PiArCXByX2RlYnVnKCJwaHlfdGVzdF9wYXR0ZXJu X3NlbCA9ICVzXG4iLAo+PiArCQkJZHBfbGlua19nZXRfcGh5X3Rlc3RfcGF0dGVybihkYXRhKSk7 Cj4+ICsKPj4gKwlpZiAoIWRwX2xpbmtfaXNfcGh5X3Rlc3RfcGF0dGVybl9zdXBwb3J0ZWQoZGF0 YSkpCj4gCj4gSnVzdCBlbWJlZCB0aGF0IGNvZGUgaGVyZS4KPiAKV2lsbCBmaXggdGhpcyBpbiBW My4KCj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+ICtlbmQ6Cj4gCj4gUmVtb3ZlIGxhYmVsL3JldCBh bmQgcmV0dXJuIGRpcmVjdGx5Cj4gCkZpeGVkIGluIHYyLgoKPj4gKwlyZXR1cm4gcmV0Owo+PiAr fQo+PiArCj4+ICtzdGF0aWMgY2hhciAqZHBfbGlua19nZXRfdGVzdF9uYW1lKHUzMiB0ZXN0X3Jl cXVlc3RlZCkKPj4gK3sKPj4gKwlzd2l0Y2ggKHRlc3RfcmVxdWVzdGVkKSB7Cj4+ICsJY2FzZSBE UF9URVNUX0xJTktfVFJBSU5JTkc6Cj4+ICsJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKERQX1RF U1RfTElOS19UUkFJTklORyk7Cj4+ICsJY2FzZSBEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTjoK Pj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfVEVTVF9MSU5LX1ZJREVPX1BBVFRFUk4p Owo+PiArCWNhc2UgRFBfVEVTVF9MSU5LX0VESURfUkVBRDoKPj4gKwkJcmV0dXJuIERQX0xJTktf RU5VTV9TVFIoRFBfVEVTVF9MSU5LX0VESURfUkVBRCk7Cj4+ICsJY2FzZSBEUF9URVNUX0xJTktf UEhZX1RFU1RfUEFUVEVSTjoKPj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfVEVTVF9M SU5LX1BIWV9URVNUX1BBVFRFUk4pOwo+PiArCWNhc2UgRFBfVEVTVF9MSU5LX0FVRElPX1BBVFRF Uk46Cj4+ICsJCXJldHVybiBEUF9MSU5LX0VOVU1fU1RSKERQX1RFU1RfTElOS19BVURJT19QQVRU RVJOKTsKPj4gKwlkZWZhdWx0Ogo+PiArCQlyZXR1cm4gInVua25vd24iOwo+PiArCX0KPj4gK30K PiAKPiBSZW1vdmUgdGhpcyBhbmQganVzdCBwcmludCB0aGUgZW51bS4KPiAKRml4ZWQgaW4gVjIu Cgo+PiArCj4+ICsvKioKPj4gKyAqIGRwX2xpbmtfaXNfdmlkZW9fYXVkaW9fdGVzdF9yZXF1ZXN0 ZWQoKSAtIGNoZWNrcyBmb3IgYXVkaW8vdmlkZW8gCj4+IGxpbmsgcmVxdWVzdAo+PiArICogQGxp bms6IGxpbmsgcmVxdWVzdGVkIGJ5IHRoZSBzaW5rCj4+ICsgKgo+PiArICogUmV0dXJucyB0cnVl IGlmIHRoZSByZXF1ZXN0ZWQgbGluayBpcyBhIHBlcm1pdHRlZCBhdWRpby92aWRlbyAKPj4gbGlu ay4KPj4gKyAqLwo+PiArc3RhdGljIGJvb2wgZHBfbGlua19pc192aWRlb19hdWRpb190ZXN0X3Jl cXVlc3RlZCh1MzIgbGluaykKPj4gK3sKPiAKPiBTaG91bGQgeW91IGJlIG1hc2tpbmcgbGluayB0 byBpc29sYXRlIHRoZXNlIGJpdHM/Cj4gCj4+ICsJcmV0dXJuIChsaW5rID09IERQX1RFU1RfTElO S19WSURFT19QQVRURVJOKSB8fAo+PiArCQkobGluayA9PSAoRFBfVEVTVF9MSU5LX0FVRElPX1BB VFRFUk4gfAo+PiArCQlEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTikpIHx8Cj4+ICsJCShsaW5r ID09IERQX1RFU1RfTElOS19BVURJT19QQVRURVJOKSB8fAo+PiArCQkobGluayA9PSAoRFBfVEVT VF9MSU5LX0FVRElPX1BBVFRFUk4gfAo+PiArCQlEUF9URVNUX0xJTktfQVVESU9fRElTQUJMRURf VklERU8pKTsKPiAKPiBBbmQgb25jZSB5b3UgbWFzayB0aGUgdmFsdWUsIGp1c3QgY2hlY2sgaWYg YW55IG9mIHRoZSBiaXRzIGFyZSBzZXQgCj4gaW5zdGVhZCBvZgo+IGVudW1lcmF0aW5nIGFsbCBw b3NzaWJsZSB2YWx1ZXMuCj4gCj4gClVwZGF0ZWQgdGhlIGZ1bmN0aW9uIGluIFYyLgo+PiArfQo+ PiArCj4+ICsvKioKPj4gKyAqIGRwX2xpbmtfc3VwcG9ydGVkKCkgLSBjaGVja3MgaWYgbGluayBy ZXF1ZXN0ZWQgYnkgc2luayBpcyAKPj4gc3VwcG9ydGVkCj4+ICsgKiBAdGVzdF9yZXF1ZXN0ZWQ6 IGxpbmsgcmVxdWVzdGVkIGJ5IHRoZSBzaW5rCj4+ICsgKgo+PiArICogUmV0dXJucyB0cnVlIGlm IHRoZSByZXF1ZXN0ZWQgbGluayBpcyBzdXBwb3J0ZWQuCj4+ICsgKi8KPj4gK3N0YXRpYyBib29s IGRwX2xpbmtfaXNfdGVzdF9zdXBwb3J0ZWQodTMyIHRlc3RfcmVxdWVzdGVkKQo+PiArewo+PiAr CXJldHVybiAodGVzdF9yZXF1ZXN0ZWQgPT0gRFBfVEVTVF9MSU5LX1RSQUlOSU5HKSB8fAo+PiAr CQkodGVzdF9yZXF1ZXN0ZWQgPT0gRFBfVEVTVF9MSU5LX0VESURfUkVBRCkgfHwKPj4gKwkJKHRl c3RfcmVxdWVzdGVkID09IERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOKSB8fAo+PiArCQlk cF9saW5rX2lzX3ZpZGVvX2F1ZGlvX3Rlc3RfcmVxdWVzdGVkKHRlc3RfcmVxdWVzdGVkKTsKPiAK PiBJIHRoaW5rIHRoaXMgYWxsIGVxdWF0ZXMgdG86Cj4gCj4gCXJldHVybiB0ZXN0X3JlcXVlc3Rl ZCAhPSBEUF9URVNUX0xJTktfRkFVWF9QQVRURVJOOwo+IAo+IGFuZCBpbiB0aGF0IGNhc2UsIHlv dSBjYW4ganVzdCByZW1vdmUgdGhpcyBmdW5jdGlvbiBhbmQgaW5zZXJ0IHRoYXQgCj4gY29uZGl0 aW9uIGluCj4gdGhlIGlmIHN0YXRlbWVudCBiZWxvdy4KPiAKUmVtb3ZlZCB0aGlzIGZ1bmN0aW9u IGFuZCBpbXBsZW1lbnRlZCBhdCB0aGUgY2FsbGVyIGluIFYyIHBhdGNoLgoKPj4gK30KPj4gKwo+ PiArc3RhdGljIGJvb2wgZHBfbGlua19pc190ZXN0X2VkaWRfcmVhZChzdHJ1Y3QgZHBfbGlua19w cml2YXRlICpsaW5rKQo+PiArewo+PiArCXJldHVybiAobGluay0+cmVxdWVzdC50ZXN0X3JlcXVl c3RlZCA9PSBEUF9URVNUX0xJTktfRURJRF9SRUFEKTsKPj4gK30KPiAKPiBUaGlzIGRvZXNuJ3Qg d2FycmFudCBpdHMgb3duIGZ1bmN0aW9uLiBBbHNvLCBzaG91bGQgdGhpcyBiZSAmIGluc3RlYWQg Cj4gb2YgPT0/Cj4gCkZpeGVkIGluIFYyLgo+PiArCj4+ICsvKioKPj4gKyAqIGRwX3NpbmtfcGFy c2VfdGVzdF9yZXF1ZXN0KCkgLSBwYXJzZXMgbGluayByZXF1ZXN0IHBhcmFtZXRlcnMgZnJvbSAK Pj4gc2luawo+PiArICogQGxpbms6IERpc3BsYXkgUG9ydCBEcml2ZXIgZGF0YQo+PiArICoKPj4g KyAqIFBhcnNlcyB0aGUgRFBDRCB0byBjaGVjayBpZiBhbiBhdXRvbWF0ZWQgbGluayBpcyByZXF1 ZXN0ZWQgKEJ5dGUgCj4+IDB4MjAxKSwKPj4gKyAqIGFuZCB3aGF0IHR5cGUgb2YgbGluayBhdXRv bWF0aW9uIGlzIGJlaW5nIHJlcXVlc3RlZCAoQnl0ZSAweDIxOCkuCj4+ICsgKi8KPj4gK3N0YXRp YyBpbnQgZHBfbGlua19wYXJzZV9yZXF1ZXN0KHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmsp Cj4+ICt7Cj4+ICsJaW50IHJldCA9IDA7Cj4+ICsJdTggYnA7Cj4+ICsJdTggZGF0YTsKPiAKPiBP bmx5IG5lZWQgMSBvZiBicC9kYXRhCj4gCj4+ICsJaW50IHJsZW47Cj4gCj4gc3NpemVfdAo+IAo+ PiArCXUzMiBjb25zdCBwYXJhbV9sZW4gPSAweDE7Cj4gCj4gTm90IG5lZWRlZCwgdXNlIGRybV9k cF9kcGNkX3JlYWRiKCkKPiAKPj4gKwo+PiArCS8qKgo+PiArCSAqIFJlYWQgdGhlIGRldmljZSBz ZXJ2aWNlIElSUSB2ZWN0b3IgKEJ5dGUgMHgyMDEpIHRvIGRldGVybWluZQo+PiArCSAqIHdoZXRo ZXIgYW4gYXV0b21hdGVkIGxpbmsgaGFzIGJlZW4gcmVxdWVzdGVkIGJ5IHRoZSBzaW5rLgo+PiAr CSAqLwo+PiArCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwKPj4g KwkJRFBfREVWSUNFX1NFUlZJQ0VfSVJRX1ZFQ1RPUiwgJmJwLCBwYXJhbV9sZW4pOwo+PiArCWlm IChybGVuIDwgcGFyYW1fbGVuKSB7Cj4+ICsJCXByX2VycigiYXV4IHJlYWQgZmFpbGVkXG4iKTsK PiAKPiBQcmludCBlcnJvci4gVGhpcyBnb2VzIGZvciBvdGhlciBmYWlsdXJlIG1lc3NhZ2VzIGlu IHRoaXMgZmlsZS4KPiAKQWRkcmVzc2VkIGFsbCB0aGUgY29tbWVudHMgYWJvdmUgaW4gdGhpcyBm dW5jdGlvbiBpbiBWMi4KCj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZW5kOwo+PiAr CX0KPj4gKwo+PiArCWRhdGEgPSBicDsKPj4gKwo+PiArCXByX2RlYnVnKCJkZXZpY2Ugc2Vydmlj ZSBpcnEgdmVjdG9yID0gMHgleFxuIiwgZGF0YSk7Cj4+ICsKPj4gKwlpZiAoIShkYXRhICYgRFBf QVVUT01BVEVEX1RFU1RfUkVRVUVTVCkpIHsKPj4gKwkJcHJfZGVidWcoIm5vIHRlc3QgcmVxdWVz dGVkXG4iKTsKPj4gKwkJcmV0dXJuIDA7Cj4+ICsJfQo+PiArCj4+ICsJLyoqCj4+ICsJICogUmVh ZCB0aGUgbGluayByZXF1ZXN0IGJ5dGUgKEJ5dGUgMHgyMTgpIHRvIGRldGVybWluZSB3aGF0IHR5 cGUKPj4gKwkgKiBvZiBhdXRvbWF0ZWQgbGluayBoYXMgYmVlbiByZXF1ZXN0ZWQgYnkgdGhlIHNp bmsuCj4+ICsJICovCj4+ICsJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1f YXV4LCBEUF9URVNUX1JFUVVFU1QsCj4+ICsJCQkmYnAsIHBhcmFtX2xlbik7Cj4+ICsJaWYgKHJs ZW4gPCBwYXJhbV9sZW4pIHsKPj4gKwkJcHJfZXJyKCJhdXggcmVhZCBmYWlsZWRcbiIpOwo+PiAr CQlyZXQgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGVuZDsKPj4gKwl9Cj4+ICsKPj4gKwlkYXRhID0g YnA7Cj4+ICsKPj4gKwlpZiAoIWRwX2xpbmtfaXNfdGVzdF9zdXBwb3J0ZWQoZGF0YSkpIHsKPj4g KwkJcHJfZGVidWcoImxpbmsgMHgleCBub3Qgc3VwcG9ydGVkXG4iLCBkYXRhKTsKPj4gKwkJZ290 byBlbmQ7Cj4+ICsJfQo+PiArCj4+ICsJcHJfZGVidWcoIiVzICgweCV4KSByZXF1ZXN0ZWRcbiIs IGRwX2xpbmtfZ2V0X3Rlc3RfbmFtZShkYXRhKSwgCj4+IGRhdGEpOwo+PiArCWxpbmstPnJlcXVl c3QudGVzdF9yZXF1ZXN0ZWQgPSBkYXRhOwo+IAo+IElmIHRlc3RfcmVxdWVzdGVkIGlzIG9ubHkg dXNlZCBpbiB0aGUgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbiwganVzdCB1c2UgCj4gYSBsb2NhbAo+ IGFuZCBwYXNzIGl0IGFyb3VuZC4gSWYgdGVzdF9yZXF1ZXN0ZWQgaXMgdXNlZCBvdXRzaWRlIHRo ZSBzY29wZSBvZiB0aGlzCj4gZnVuY3Rpb24sIHlvdSBuZWVkIGxvY2tpbmcuCgp0ZXN0X3JlcXVl c3RlZCBpbiBvbmx5IHVzZWQgaW4gZHBfbGluay5jLiBCdXQgd2UgdXNlIHRoaXMgaW4gZHBfZGVi dWcgCmZvciBkZWJ1Z2dpbmcuIFdlIGFsc28KdXNlIHRoaXMgaW4gdW5pdCB0ZXN0aW5nLiBUaGlz IGlzIG9uZSBvZiBtYWluIHJlYXNvbiB3ZSBoYXZlIGl0IGluIApkcF9saW5rIHN0cnVjdHVyZS4K Cj4gCj4+ICsKPj4gKwlpZiAobGluay0+cmVxdWVzdC50ZXN0X3JlcXVlc3RlZCA9PSBEUF9URVNU X0xJTktfUEhZX1RFU1RfUEFUVEVSTikgewo+PiArCQlyZXQgPSBkcF9saW5rX3BhcnNlX3BoeV90 ZXN0X3BhcmFtcyhsaW5rKTsKPj4gKwkJaWYgKHJldCkKPj4gKwkJCWdvdG8gZW5kOwo+PiArCQly ZXQgPSBkcF9saW5rX3BhcnNlX2xpbmtfdHJhaW5pbmdfcGFyYW1zKGxpbmspOwo+IAo+IENoZWNr IHRoZSByZXR1cm4gaGVyZSBvciBpdCBjb3VsZCBnZXQgc3RvbXBlZAo+IAo+PiArCX0KPj4gKwo+ PiArCWlmIChsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVzdGVkID09IERQX1RFU1RfTElOS19UUkFJ TklORykKPj4gKwkJcmV0ID0gZHBfbGlua19wYXJzZV9saW5rX3RyYWluaW5nX3BhcmFtcyhsaW5r KTsKPiAKPiBDaGVjayB0aGUgcmV0dXJuIGhlcmUgb3IgaXQgY291bGQgZ2V0IHN0b21wZWQKPiAK QWRkZWQgY2hlY2tzIGZvciByZXR1cm4gdmFsdWUgaW4gVjIgcGF0Y2guCj4+ICsKPj4gKwlpZiAo ZHBfbGlua19pc192aWRlb19hdWRpb190ZXN0X3JlcXVlc3RlZCgKPj4gKwkJCWxpbmstPnJlcXVl c3QudGVzdF9yZXF1ZXN0ZWQpKSB7Cj4gCj4gU2hvdWxkIGZpdCBvbiAxIGxpbmUsIEkgdGhpbmsK PiAKSXQgZ29lcyBiZXlvbmQgODAgQ2hhcnMuLgoKCj4+ICsJCXJldCA9IGRwX2xpbmtfcGFyc2Vf dmlkZW9fcGF0dGVybl9wYXJhbXMobGluayk7Cj4+ICsJCWlmIChyZXQpCj4+ICsJCQlnb3RvIGVu ZDsKPj4gKwo+PiArCQlyZXQgPSBkcF9saW5rX3BhcnNlX2F1ZGlvX3BhdHRlcm5fcGFyYW1zKGxp bmspOwo+IAo+IENoZWNrIHRoZSByZXR1cm4gaGVyZSBvciBpdCBjb3VsZCBnZXQgc3RvbXBlZAo+ IApGaXhlZCBpbiBWMi4KPj4gKwl9Cj4+ICtlbmQ6Cj4+ICsJLyoqCj4gCj4gLyoKPiAKTXVsdGkt bGluZSBjb21tZW50cywgd2UgdXNlICIvKioiCgo+PiArCSAqIFNlbmQgYSBEUF9URVNUX0FDSyBp ZiBhbGwgbGluayBwYXJhbWV0ZXJzIGFyZSB2YWxpZCwgb3RoZXJ3aXNlIAo+PiBzZW5kCj4+ICsJ ICogYSBEUF9URVNUX05BSy4KPj4gKwkgKi8KPj4gKwlpZiAocmV0KSB7Cj4+ICsJCWxpbmstPmRw X2xpbmsudGVzdF9yZXNwb25zZSA9IERQX1RFU1RfTkFLOwo+PiArCX0gZWxzZSB7Cj4+ICsJCWlm ICghZHBfbGlua19pc190ZXN0X2VkaWRfcmVhZChsaW5rKSkKPj4gKwkJCWxpbmstPmRwX2xpbmsu dGVzdF9yZXNwb25zZSA9IERQX1RFU1RfQUNLOwo+PiArCQllbHNlCj4+ICsJCQlsaW5rLT5kcF9s aW5rLnRlc3RfcmVzcG9uc2UgPQo+PiArCQkJCURQX1RFU1RfRURJRF9DSEVDS1NVTV9XUklURTsK Pj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGRw X2xpbmtfcGFyc2Vfc2lua19jb3VudCgpIC0gcGFyc2VzIHRoZSBzaW5rIGNvdW50Cj4+ICsgKgo+ PiArICogUGFyc2VzIHRoZSBEUENEIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIHVwZGF0ZSB0byB0 aGUgc2luayBjb3VudAo+PiArICogKEJ5dGUgMHgyMDApLCBhbmQgd2hldGhlciBhbGwgdGhlIHNp bmsgZGV2aWNlcyBjb25uZWN0ZWQgaGF2ZSAKPj4gQ29udGVudAo+PiArICogUHJvdGVjdGlvbiBl bmFibGVkLgo+PiArICovCj4+ICtzdGF0aWMgaW50IGRwX2xpbmtfcGFyc2Vfc2lua19jb3VudChz dHJ1Y3QgZHBfbGluayAqZHBfbGluaykKPj4gK3sKPj4gKwlpbnQgcmxlbjsKPj4gKwlpbnQgY29u c3QgcGFyYW1fbGVuID0gMHgxOwo+IAo+IGRybV9kcF9kcGNkX3JlYWRiCj4gCkZpeGVkIGluIFYy LgoKPj4gKwlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rID0gY29udGFpbmVyX29mKGRwX2xp bmssCj4+ICsJCQlzdHJ1Y3QgZHBfbGlua19wcml2YXRlLCBkcF9saW5rKTsKPj4gKwo+PiArCXJs ZW4gPSBkcm1fZHBfZHBjZF9yZWFkKGxpbmstPmF1eC0+ZHJtX2F1eCwgRFBfU0lOS19DT1VOVCwK Pj4gKwkJCSZsaW5rLT5kcF9saW5rLnNpbmtfY291bnQuY291bnQsIHBhcmFtX2xlbik7Cj4+ICsJ aWYgKHJsZW4gPCBwYXJhbV9sZW4pIHsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVhZCBzaW5r IGNvdW50XG4iKTsKPiAKPiBwcmludCByZXQKPiAKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gCj4g cmV0dXJuIHJldAo+IApGaXhlZCBpbiBWMi4KCj4+ICsJfQo+PiArCj4+ICsJbGluay0+ZHBfbGlu ay5zaW5rX2NvdW50LmNwX3JlYWR5ID0KPj4gKwkJbGluay0+ZHBfbGluay5zaW5rX2NvdW50LmNv dW50ICYgRFBfU0lOS19DUF9SRUFEWTsKPiAKPiBjcF9yZWFkeSBpcyBvbmx5IHVzZWQgaW4gdGhp cyBmdW5jdGlvbiwgcGxlYXNlIGRvbid0IHN0b3JlIHN0dWZmIGxpa2UgCj4gdGhpcwo+IGJleW9u ZCBpdHMgc2NvcGUuCj4gCkZpeGVkIGluIFYyLgoKPj4gKwkvKiBCSVQgNywgQklUIDU6MCAqLwo+ IAo+IERvbid0IG5lZWQgdGhpcyBjb21tZW50Cj4gCkZpeGVkIGluIFYyLgoKPj4gKwlsaW5rLT5k cF9saW5rLnNpbmtfY291bnQuY291bnQgPQo+PiArCQlEUF9HRVRfU0lOS19DT1VOVChsaW5rLT5k cF9saW5rLnNpbmtfY291bnQuY291bnQpOwo+PiArCj4+ICsJcHJfZGVidWcoInNpbmtfY291bnQg PSAweCV4LCBjcF9yZWFkeSA9IDB4JXhcbiIsCj4+ICsJCWxpbmstPmRwX2xpbmsuc2lua19jb3Vu dC5jb3VudCwKPj4gKwkJbGluay0+ZHBfbGluay5zaW5rX2NvdW50LmNwX3JlYWR5KTsKPj4gKwly ZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfbGlua19wYXJzZV9zaW5rX3N0 YXR1c19maWVsZChzdHJ1Y3QgZHBfbGlua19wcml2YXRlIAo+PiAqbGluaykKPj4gK3sKPj4gKwlp bnQgbGVuID0gMDsKPj4gKwo+PiArCWxpbmstPnByZXZfc2lua19jb3VudCA9IGxpbmstPmRwX2xp bmsuc2lua19jb3VudC5jb3VudDsKPj4gKwlkcF9saW5rX3BhcnNlX3NpbmtfY291bnQoJmxpbmst PmRwX2xpbmspOwo+PiArCj4+ICsJbGVuID0gZHJtX2RwX2RwY2RfcmVhZF9saW5rX3N0YXR1cyhs aW5rLT5hdXgtPmRybV9hdXgsCj4+ICsJCWxpbmstPmxpbmtfc3RhdHVzKTsKPj4gKwlpZiAobGVu IDwgRFBfTElOS19TVEFUVVNfU0laRSkKPj4gKwkJcHJfZXJyKCJEUCBsaW5rIHN0YXR1cyByZWFk IGZhaWxlZFxuIik7Cj4+ICsJZHBfbGlua19wYXJzZV9yZXF1ZXN0KGxpbmspOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgYm9vbCBkcF9saW5rX2lzX2xpbmtfdHJhaW5pbmdfcmVxdWVzdGVkKHN0cnVj dCBkcF9saW5rX3ByaXZhdGUgCj4+ICpsaW5rKQo+PiArewo+PiArCXJldHVybiAobGluay0+cmVx dWVzdC50ZXN0X3JlcXVlc3RlZCA9PSBEUF9URVNUX0xJTktfVFJBSU5JTkcpOwo+PiArfQo+IAo+ IE5vIG5lZWQgZm9yIGRlZGljYXRlZCBmdW5jdGlvbgo+IApBZGRyZXNzZWQgaW4gVjIuCgo+PiAr Cj4+ICsvKioKPj4gKyAqIGRwX2xpbmtfcHJvY2Vzc19saW5rX3RyYWluaW5nX3JlcXVlc3QoKSAt IHByb2Nlc3NlcyBuZXcgdHJhaW5pbmcgCj4+IHJlcXVlc3RzCj4+ICsgKiBAbGluazogRGlzcGxh eSBQb3J0IGxpbmsgZGF0YQo+PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBoYW5kbGUg bmV3IGxpbmsgdHJhaW5pbmcgcmVxdWVzdHMgdGhhdCBhcmUgCj4+IGluaXRpYXRlZCBieQo+PiAr ICogdGhlIHNpbmsuIEluIHBhcnRpY3VsYXIsIGl0IHdpbGwgdXBkYXRlIHRoZSByZXF1ZXN0ZWQg bGFuZSBjb3VudCAKPj4gYW5kIGxpbmsKPj4gKyAqIGxpbmsgcmF0ZSwgYW5kIHRoZW4gdHJpZ2dl ciB0aGUgbGluayByZXRyYWluaW5nIHByb2NlZHVyZS4KPj4gKyAqCj4+ICsgKiBUaGUgZnVuY3Rp b24gd2lsbCByZXR1cm4gMCBpZiBhIGxpbmsgdHJhaW5pbmcgcmVxdWVzdCBoYXMgYmVlbiAKPj4g cHJvY2Vzc2VkLAo+PiArICogb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIC1FSU5WQUwuCj4+ICsg Ki8KPj4gK3N0YXRpYyBpbnQgZHBfbGlua19wcm9jZXNzX2xpbmtfdHJhaW5pbmdfcmVxdWVzdChz dHJ1Y3QgCj4+IGRwX2xpbmtfcHJpdmF0ZSAqbGluaykKPj4gK3sKPj4gKwlpZiAoIWRwX2xpbmtf aXNfbGlua190cmFpbmluZ19yZXF1ZXN0ZWQobGluaykpCj4+ICsJCXJldHVybiAtRUlOVkFMOwo+ PiArCj4+ICsJcHJfZGVidWcoIiVzIGxpbmsgcmF0ZSA9IDB4JXgsIGxhbmUgY291bnQgPSAweCV4 XG4iLAo+PiArCQkJZHBfbGlua19nZXRfdGVzdF9uYW1lKERQX1RFU1RfTElOS19UUkFJTklORyks Cj4+ICsJCQlsaW5rLT5yZXF1ZXN0LnRlc3RfbGlua19yYXRlLAo+PiArCQkJbGluay0+cmVxdWVz dC50ZXN0X2xhbmVfY291bnQpOwo+PiArCj4+ICsJbGluay0+ZHBfbGluay5saW5rX3BhcmFtcy5s YW5lX2NvdW50ID0gCj4+IGxpbmstPnJlcXVlc3QudGVzdF9sYW5lX2NvdW50Owo+PiArCWxpbmst PmRwX2xpbmsubGlua19wYXJhbXMuYndfY29kZSA9IGxpbmstPnJlcXVlc3QudGVzdF9saW5rX3Jh dGU7Cj4gCj4gU2hvdWxkIGJlIHVzaW5nIGRwIGhlbHBlciBzdHJ1Y3RzIGZvciB0aGlzIHN0dWZm Cj4gCkZpeGVkIGluIFYyLgoKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgdm9pZCBkcF9saW5rX3NlbmRfdGVzdF9yZXNwb25zZShzdHJ1Y3QgZHBfbGluayAqZHBfbGlu aykKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rID0gTlVMTDsKPj4gKwl1 MzIgY29uc3QgcmVzcG9uc2VfbGVuID0gMHgxOwo+PiArCj4+ICsJaWYgKCFkcF9saW5rKSB7Cj4+ ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsK Pj4gKwlsaW5rID0gY29udGFpbmVyX29mKGRwX2xpbmssIHN0cnVjdCBkcF9saW5rX3ByaXZhdGUs IGRwX2xpbmspOwo+PiArCj4+ICsJZHJtX2RwX2RwY2Rfd3JpdGUobGluay0+YXV4LT5kcm1fYXV4 LCBEUF9URVNUX1JFU1BPTlNFLAo+PiArCQkJJmRwX2xpbmstPnRlc3RfcmVzcG9uc2UsIHJlc3Bv bnNlX2xlbik7Cj4gCj4gSSBzdHJvbmdseSBzdXNwZWN0IHlvdSBzaG91bGQgaGF2ZSBsb2NraW5n IHByb3RlY3RpbmcgdGVzdF9yZXNwb25zZS4KPiAKV2lsbCBjcm9zcy1jaGVjayB3aGV0aGVyIHdl IG5lZWQgbG9ja2luZyBhbmQgZml4IGl0IGluIFYzLiBKdXN0IGN1cmlvdXMsIApkbyB5b3Ugc3Rp bGwgdGhpbmsKd2UgbmVlZCBsb2NraW5nIGV2ZW4gdGhvdWdoIHdlIGhhbmRsZSB0aGlzIGluIGEg c2luZ2xlIHRocmVhZD8KPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9saW5rX3BzbV9jb25m aWcoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmssCj4+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX2xp bmsgKmxpbmtfaW5mbywgYm9vbCBlbmFibGUpCj4gCj4gVGhpcyBpcyBhbm90aGVyIHJhY3kgZnVu Y3Rpb24gd2hlcmUgeW91IGNvdWxkIGJlIHNpbXVsdGFuZW91c2x5IAo+IHBvd2VyaW5nIHVwIGFu ZAo+IHBvd2VyaW5nIGRvd24gdGhlIGxpbmsuIFNvIHlvdSBtaWdodCB3YW50IHNvbWUgbG9ja2lu Zy4KPiAKU2FtZSByZXNwb25zZSBhcyBhYm92ZS4KVGhpcyBtaWdodCBuZWVkIGxvY2tpbmcgc2lu Y2UgaXQgaXMgY2FsbGVkIGZyb20gbXVsdGlwbGUgbW9kdWxlcy4KPj4gK3sKPj4gKwlzdHJ1Y3Qg ZHBfbGlua19wcml2YXRlICpsaW5rID0gTlVMTDsKPj4gKwlpbnQgcmV0ID0gMDsKPj4gKwo+PiAr CWlmICghZHBfbGluaykgewo+PiArCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKPj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJbGluayA9IGNvbnRhaW5lcl9vZihkcF9s aW5rLCBzdHJ1Y3QgZHBfbGlua19wcml2YXRlLCBkcF9saW5rKTsKPj4gKwo+PiArCWlmIChlbmFi bGUpCj4+ICsJCXJldCA9IGRybV9kcF9saW5rX3Bvd2VyX2Rvd24obGluay0+YXV4LT5kcm1fYXV4 LCBsaW5rX2luZm8pOwo+PiArCWVsc2UKPj4gKwkJcmV0ID0gZHJtX2RwX2xpbmtfcG93ZXJfdXAo bGluay0+YXV4LT5kcm1fYXV4LCBsaW5rX2luZm8pOwo+PiArCj4+ICsJaWYgKHJldCkKPj4gKwkJ cHJfZXJyKCJGYWlsZWQgdG8gJXMgbG93IHBvd2VyIG1vZGVcbiIsCj4+ICsJCQkoZW5hYmxlID8g ImVudGVyIiA6ICJleGl0IikpOwo+IAo+IHVubmVlZGVkICgpLiBZb3UgY291bGQgcHJvYmFibHkg cmV3b3JkIHRvIGZpdCBvbiBvbmUgbGluZSB0b28KPiAKRml4ZWQgaW4gdjIuCgo+PiArCWVsc2UK Pj4gKwkJZHBfbGluay0+cHNtX2VuYWJsZWQgPSBlbmFibGU7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0 Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9saW5rX3NlbmRfZWRpZF9jaGVja3N1bShz dHJ1Y3QgZHBfbGluayAqZHBfbGluaywgdTggCj4+IGNoZWNrc3VtKQo+PiArewo+PiArCXN0cnVj dCBkcF9saW5rX3ByaXZhdGUgKmxpbmsgPSBOVUxMOwo+PiArCXUzMiBjb25zdCByZXNwb25zZV9s ZW4gPSAweDE7Cj4gCj4gZHJtX2RwX2RwY2RfcmVhZGIuIEknbGwgc3RvcCBjb21tZW50aW5nIG9u IHRoZXNlLCBqdXN0IHBsZWFzZSBnbyAKPiB0aHJvdWdoIGFuZAo+IGNvbnZlcnQgYWxsIDEtYnl0 ZSByZWFkcy93cml0ZXMKPiAKQWRkcmVzc2VkIGFsbCBvZiB0aGVtIGluIFYyLgo+PiArCj4+ICsJ aWYgKCFkcF9saW5rKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJl dHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlsaW5rID0gY29udGFpbmVyX29mKGRwX2xpbmssIHN0cnVj dCBkcF9saW5rX3ByaXZhdGUsIGRwX2xpbmspOwo+PiArCj4+ICsJZHJtX2RwX2RwY2Rfd3JpdGUo bGluay0+YXV4LT5kcm1fYXV4LCBEUF9URVNUX0VESURfQ0hFQ0tTVU0sCj4+ICsJCQkmY2hlY2tz dW0sIHJlc3BvbnNlX2xlbik7Cj4gCj4gQ2hlY2sgYW5kIHJldHVybiB0aGUgcmVzdWx0Cj4gCkZp eGVkIGluIFYyLgoKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9saW5rX3BhcnNlX3Z4X3B4 KHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbmspCj4+ICt7Cj4+ICsJdTggYnA7Cj4+ICsJdTgg ZGF0YTsKPiAKPiBPbmx5IG5lZWQgb25lIG9mIHRoZXNlCj4gCj4+ICsJaW50IGNvbnN0IHBhcmFt X2xlbiA9IDB4MTsKPiAKPiBkcm1fZHBfZHBjZF9yZWFkYgo+IAo+PiArCWludCByZXQgPSAwOwo+ PiArCXUzMiB2MCwgcDAsIHYxLCBwMSwgdjIsIHAyLCB2MywgcDM7Cj4+ICsJaW50IHJsZW47Cj4g Cj4gc3NpemVfdAo+IAo+PiArCj4+ICsJcHJfZGVidWcoIlxuIik7Cj4gCj4gcmVtb3ZlCj4gCkFk ZHJlc3NlZCBhbGwgdGhlIGNvbW1lbnRzIGFib3ZlIGluIFYyIHBhdGNoIHNlcmllcy4KCj4+ICsK Pj4gKwlybGVuID0gZHJtX2RwX2RwY2RfcmVhZChsaW5rLT5hdXgtPmRybV9hdXgsIAo+PiBEUF9B REpVU1RfUkVRVUVTVF9MQU5FMF8xLAo+PiArCQkJJmJwLCBwYXJhbV9sZW4pOwo+PiArCWlmIChy bGVuIDwgcGFyYW1fbGVuKSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHJlYWRpbmcgbGFuZXMgMC8x XG4iKTsKPiAKPiBwcmludCBlcnJvcgo+IAo+PiArCQlyZXQgPSAtRUlOVkFMOwo+PiArCQlnb3Rv IGVuZDsKPj4gKwl9Cj4+ICsKPj4gKwlkYXRhID0gYnA7Cj4+ICsKPj4gKwlwcl9kZWJ1ZygibGFu ZXMgMC8xIChCeXRlIDB4MjA2KTogMHgleFxuIiwgZGF0YSk7Cj4+ICsKPj4gKwl2MCA9IGRhdGEg JiAweDM7Cj4+ICsJZGF0YSA9IGRhdGEgPj4gMjsKPj4gKwlwMCA9IGRhdGEgJiAweDM7Cj4+ICsJ ZGF0YSA9IGRhdGEgPj4gMjsKPj4gKwo+PiArCXYxID0gZGF0YSAmIDB4MzsKPj4gKwlkYXRhID0g ZGF0YSA+PiAyOwo+PiArCXAxID0gZGF0YSAmIDB4MzsKPj4gKwlkYXRhID0gZGF0YSA+PiAyOwo+ PiArCj4+ICsJcmxlbiA9IGRybV9kcF9kcGNkX3JlYWQobGluay0+YXV4LT5kcm1fYXV4LCAKPj4g RFBfQURKVVNUX1JFUVVFU1RfTEFORTJfMywKPj4gKwkJCSZicCwgcGFyYW1fbGVuKTsKPj4gKwlp ZiAocmxlbiA8IHBhcmFtX2xlbikgewo+PiArCQlwcl9lcnIoImZhaWxlZCByZWFkaW5nIGxhbmVz IDIvM1xuIik7Cj4+ICsJCXJldCA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4g Kwo+PiArCWRhdGEgPSBicDsKPj4gKwo+PiArCXByX2RlYnVnKCJsYW5lcyAyLzMgKEJ5dGUgMHgy MDcpOiAweCV4XG4iLCBkYXRhKTsKPj4gKwo+PiArCXYyID0gZGF0YSAmIDB4MzsKPj4gKwlkYXRh ID0gZGF0YSA+PiAyOwo+PiArCXAyID0gZGF0YSAmIDB4MzsKPj4gKwlkYXRhID0gZGF0YSA+PiAy Owo+PiArCj4+ICsJdjMgPSBkYXRhICYgMHgzOwo+PiArCWRhdGEgPSBkYXRhID4+IDI7Cj4+ICsJ cDMgPSBkYXRhICYgMHgzOwo+PiArCWRhdGEgPSBkYXRhID4+IDI7Cj4gCj4gSSB0aGluayB5b3Ug Y2FuIHVzZSBkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ZvbHRhZ2UoKSBmb3IgYWxsIG9mIAo+ IHRoaXMuCj4gCldpbGwgZml4IHRoaXMgaW4gVjMuCgoKPj4gKwo+PiArCXByX2RlYnVnKCJ2eDog MD0lZCwgMT0lZCwgMj0lZCwgMz0lZFxuIiwgdjAsIHYxLCB2MiwgdjMpOwo+PiArCXByX2RlYnVn KCJweDogMD0lZCwgMT0lZCwgMj0lZCwgMz0lZFxuIiwgcDAsIHAxLCBwMiwgcDMpOwo+PiArCj4+ ICsJLyoqCj4+ICsJICogVXBkYXRlIHRoZSB2b2x0YWdlIGFuZCBwcmUtZW1waGFzaXMgbGV2ZWxz IGFzIHBlciBEUENEIHJlcXVlc3QKPj4gKwkgKiB2ZWN0b3IuCj4+ICsJICovCj4+ICsJcHJfZGVi dWcoIkN1cnJlbnQ6IHZfbGV2ZWwgPSAweCV4LCBwX2xldmVsID0gMHgleFxuIiwKPj4gKwkJCWxp bmstPmRwX2xpbmsucGh5X3BhcmFtcy52X2xldmVsLAo+PiArCQkJbGluay0+ZHBfbGluay5waHlf cGFyYW1zLnBfbGV2ZWwpOwo+PiArCXByX2RlYnVnKCJSZXF1ZXN0ZWQ6IHZfbGV2ZWwgPSAweCV4 LCBwX2xldmVsID0gMHgleFxuIiwgdjAsIHAwKTsKPj4gKwlsaW5rLT5kcF9saW5rLnBoeV9wYXJh bXMudl9sZXZlbCA9IHYwOwo+PiArCWxpbmstPmRwX2xpbmsucGh5X3BhcmFtcy5wX2xldmVsID0g cDA7Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiU3VjY2Vzc1xuIik7Cj4gCj4gUmVtb3ZlCj4gCkZpeGVk IGluIFYyLgoKPj4gK2VuZDoKPiAKPiByZXR1cm4gZGlyZWN0bHkgZXZlcnl3aGVyZSBhbmQgcmVt b3ZlIGVuZCAmIHJldAo+IAo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiAr ICogZHBfbGlua19wcm9jZXNzX3BoeV90ZXN0X3BhdHRlcm5fcmVxdWVzdCgpIC0gcHJvY2VzcyBu ZXcgcGh5IGxpbmsgCj4+IHJlcXVlc3RzCj4+ICsgKiBAbGluazogRGlzcGxheSBQb3J0IERyaXZl ciBkYXRhCj4+ICsgKgo+PiArICogVGhpcyBmdW5jdGlvbiB3aWxsIGhhbmRsZSBuZXcgcGh5IGxp bmsgcGF0dGVybiByZXF1ZXN0cyB0aGF0IGFyZSAKPj4gaW5pdGlhdGVkCj4+ICsgKiBieSB0aGUg c2luay4gVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgaWYgYSBwaHkgbGluayBwYXR0ZXJuIGhh cyAKPj4gYmVlbgo+PiArICogcHJvY2Vzc2VkLCBvdGhlcndpc2UgaXQgd2lsbCByZXR1cm4gLUVJ TlZBTC4KPj4gKyAqLwo+PiArc3RhdGljIGludCBkcF9saW5rX3Byb2Nlc3NfcGh5X3Rlc3RfcGF0 dGVybl9yZXF1ZXN0KAo+PiArCQlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rKQo+PiArewo+ PiArCXUzMiB0ZXN0X2xpbmtfcmF0ZSA9IDAsIHRlc3RfbGFuZV9jb3VudCA9IDA7Cj4+ICsKPj4g KwlpZiAoIShsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVzdGVkICYgRFBfVEVTVF9MSU5LX1BIWV9U RVNUX1BBVFRFUk4pKSAKPj4gewo+IAo+IElzIHRlc3RfcmVxdWVzdGVkIGFsd2F5cyBleHBlY3Rl ZCB0byBoYXZlIHRoaXMgdmFsdWUgcG9wdWxhdGVkIHdoZW4KPiBkcF9saW5rX3Byb2Nlc3NfcmVx dWVzdCgpPwo+IApZZXMsIHRlc3RfcmVxdWVzdGVkIGlzIHVwZGF0ZWQgaW4gZHBfbGlua19wYXJz ZV9zaW5rX3N0YXR1c19maWVsZCgpIAp3aGljaCBpcyBjYWxsZWQgYmVmb3JlCnRoaXMgZnVuY3Rp b24gaXMgY2FsbGVkLgoKPj4gKwkJcHJfZGVidWcoIm5vIHBoeSB0ZXN0XG4iKTsKPj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJdGVzdF9saW5rX3JhdGUgPSBsaW5rLT5yZXF1 ZXN0LnRlc3RfbGlua19yYXRlOwo+PiArCXRlc3RfbGFuZV9jb3VudCA9IGxpbmstPnJlcXVlc3Qu dGVzdF9sYW5lX2NvdW50Owo+IAo+IEp1c3QgdXNlIHRoZXNlIHZhbHVlcyBkaXJlY3RseSBpbnN0 ZWFkIG9mIGFkZGluZyBtb3JlIGxvY2Fscy4KPiAKRml4ZWQgaW4gVjIuCgo+PiArCj4+ICsJaWYg KCFpc19saW5rX3JhdGVfdmFsaWQodGVzdF9saW5rX3JhdGUpIHx8Cj4+ICsJCSFpc19sYW5lX2Nv dW50X3ZhbGlkKHRlc3RfbGFuZV9jb3VudCkpIHsKPj4gKwkJcHJfZXJyKCJJbnZhbGlkIHBhcmFt czogbGluayByYXRlID0gMHgleCwgbGFuZSBjb3VudCA9IDB4JXhcbiIsCj4+ICsJCQkJdGVzdF9s aW5rX3JhdGUsIHRlc3RfbGFuZV9jb3VudCk7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0K Pj4gKwo+PiArCXByX2RlYnVnKCJzdGFydFxuIik7Cj4gCj4gUmVtb3ZlCj4gCkZpeGVkIGluIFYy Lgo+PiArCj4+ICsJcHJfaW5mbygiQ3VycmVudDogYndfY29kZSA9IDB4JXgsIGxhbmUgY291bnQg PSAweCV4XG4iLAo+PiArCQkJbGluay0+ZHBfbGluay5saW5rX3BhcmFtcy5id19jb2RlLAo+PiAr CQkJbGluay0+ZHBfbGluay5saW5rX3BhcmFtcy5sYW5lX2NvdW50KTsKPj4gKwo+PiArCXByX2lu Zm8oIlJlcXVlc3RlZDogYndfY29kZSA9IDB4JXgsIGxhbmUgY291bnQgPSAweCV4XG4iLAo+PiAr CQkJdGVzdF9saW5rX3JhdGUsIHRlc3RfbGFuZV9jb3VudCk7Cj4gCj4gVGhlc2Ugc2hvdWxkIGJl IGRlYnVnIGxldmVsIHByaW50cwo+IApGaXhlZCBpbiBWMi4KCj4+ICsKPj4gKwlsaW5rLT5kcF9s aW5rLmxpbmtfcGFyYW1zLmxhbmVfY291bnQgPSAKPj4gbGluay0+cmVxdWVzdC50ZXN0X2xhbmVf Y291bnQ7Cj4+ICsJbGluay0+ZHBfbGluay5saW5rX3BhcmFtcy5id19jb2RlID0gbGluay0+cmVx dWVzdC50ZXN0X2xpbmtfcmF0ZTsKPj4gKwo+PiArCWRwX2xpbmtfcGFyc2VfdnhfcHgobGluayk7 Cj4gCj4gQ2hlY2sgcmV0dXJuIHZhbHVlIGFuZCBwcm9wYWdhdGUgaXQuCj4gCj4+ICsKPj4gKwlw cl9kZWJ1ZygiZW5kXG4iKTsKPiAKPiBSZW1vdmUKPiAKZml4ZWQgaW4gVjIuCgo+PiArCj4+ICsJ cmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1OCBnZXRfbGlua19zdGF0dXMoY29uc3Qg dTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0sIAo+PiBpbnQgcikKPj4gK3sKPj4g KwlyZXR1cm4gbGlua19zdGF0dXNbciAtIERQX0xBTkUwXzFfU1RBVFVTXTsKPiAKPiBJIGRvbid0 IHRoaW5rIHlvdSdyZSByZWFsbHkgc3VwcG9zZWQgdG8gcmVhY2ggaW50byB0aGUgbGlua19zdGF0 dXMgbGlrZSAKPiB0aGlzLgo+IEhvdyBhYm91dCBhZGRpbmcgYSBuZXcgaGVscGVyIHRvIGNoZWNr IGZvciBEUF9MSU5LX1NUQVRVU19VUERBVEVEIGFuZCAKPiBvbmUgZm9yCj4gRFBfRE9XTlNUUkVB TV9QT1JUX1NUQVRVU19DSEFOR0VEPwo+IApUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gZnVu Y3Rpb24gaW4gdXBzdHJlYW0gZHJtX2RwX2hlbHBlci5jIGZpbGUuCmh0dHBzOi8vY2hyb21pdW0u Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bW9zL3RoaXJkX3BhcnR5L2tlcm5lbC8rL2Nocm9tZW9z LTMuMTgvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYyMyNTkKCj4+ICt9Cj4+ICsKPj4g Ky8qKgo+PiArICogZHBfbGlua19wcm9jZXNzX2xpbmtfc3RhdHVzX3VwZGF0ZSgpIC0gcHJvY2Vz c2VzIGxpbmsgc3RhdHVzIAo+PiB1cGRhdGVzCj4+ICsgKiBAbGluazogRGlzcGxheSBQb3J0IGxp bmsgbW9kdWxlIGRhdGEKPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgZm9y IGNoYW5nZXMgaW4gdGhlIGxpbmsgc3RhdHVzLCBlLmcuIAo+PiBjbG9jawo+PiArICogcmVjb3Zl cnkgZG9uZSBvbiBhbGwgbGFuZXMsIGFuZCB0cmlnZ2VyIGxpbmsgdHJhaW5pbmcgaWYgdGhlcmUg aXMgCj4+IGEKPj4gKyAqIGZhaWx1cmUvZXJyb3Igb24gdGhlIGxpbmsuCj4+ICsgKgo+PiArICog VGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgaWYgdGhlIGEgbGluayBzdGF0dXMgdXBkYXRlIGhh cyBiZWVuIAo+PiBwcm9jZXNzZWQsCj4+ICsgKiBvdGhlcndpc2UgaXQgd2lsbCByZXR1cm4gLUVJ TlZBTC4KPj4gKyAqLwo+PiArc3RhdGljIGludCBkcF9saW5rX3Byb2Nlc3NfbGlua19zdGF0dXNf dXBkYXRlKHN0cnVjdCBkcF9saW5rX3ByaXZhdGUgCj4+ICpsaW5rKQo+PiArewo+PiArCWlmICgh KGdldF9saW5rX3N0YXR1cyhsaW5rLT5saW5rX3N0YXR1cywgCj4+IERQX0xBTkVfQUxJR05fU1RB VFVTX1VQREFURUQpICYKPj4gKwkJRFBfTElOS19TVEFUVVNfVVBEQVRFRCkgfHwgLyogbGluayBz dGF0dXMgdXBkYXRlZCAqLwo+PiArCQkoZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmstPmxp bmtfc3RhdHVzLAo+PiArCQkJbGluay0+ZHBfbGluay5saW5rX3BhcmFtcy5sYW5lX2NvdW50KSAm Jgo+PiArCSAgICAgZHJtX2RwX2NoYW5uZWxfZXFfb2sobGluay0+bGlua19zdGF0dXMsCj4+ICsJ CQlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLmxhbmVfY291bnQpKSkKPiAKPiBDYW4geW91IHBs ZWFzZSBmaXggdGhlIGFsaWdubWVudCBoZXJlLCBpdCdzIHRvdWdoIHRvIHJlYWQuCj4gCkZpeGVk IGluIFYyLgoKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiY2hhbm5l bF9lcV9kb25lID0gJWQsIGNsb2NrX3JlY292ZXJ5X2RvbmUgPSAlZFxuIiwKPj4gKwkJCWRybV9k cF9jbG9ja19yZWNvdmVyeV9vayhsaW5rLT5saW5rX3N0YXR1cywKPj4gKwkJCWxpbmstPmRwX2xp bmsubGlua19wYXJhbXMubGFuZV9jb3VudCksCj4+ICsJCQlkcm1fZHBfY2xvY2tfcmVjb3Zlcnlf b2sobGluay0+bGlua19zdGF0dXMsCj4+ICsJCQlsaW5rLT5kcF9saW5rLmxpbmtfcGFyYW1zLmxh bmVfY291bnQpKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgYm9v bCBkcF9saW5rX2lzX2RzX3BvcnRfc3RhdHVzX2NoYW5nZWQoc3RydWN0IGRwX2xpbmtfcHJpdmF0 ZSAKPj4gKmxpbmspCj4+ICt7Cj4+ICsJaWYgKGdldF9saW5rX3N0YXR1cyhsaW5rLT5saW5rX3N0 YXR1cywgRFBfTEFORV9BTElHTl9TVEFUVVNfVVBEQVRFRCkgCj4+ICYKPj4gKwkJRFBfRE9XTlNU UkVBTV9QT1JUX1NUQVRVU19DSEFOR0VEKSAvKiBwb3J0IHN0YXR1cyBjaGFuZ2VkICovCj4+ICsJ CXJldHVybiB0cnVlOwo+PiArCj4+ICsJaWYgKGxpbmstPnByZXZfc2lua19jb3VudCAhPSBsaW5r LT5kcF9saW5rLnNpbmtfY291bnQuY291bnQpCj4gCj4gSXQgc2VlbXMgbGlrZSB0aGlzIGlzIHJ1 bm5pbmcgaW4gYSBzZXBhcmF0ZSB0aHJlYWQgZnJvbSB3aGVyZSAKPiBwcmV2X3NpbmtfY291bnQg aXMKPiBzZXQsIHBvdGVudGlhbCByYWNlIGhlcmU/Cj4gCkkgZG9uJ3QgdGhpbmsgd2UgbWlnaHQg bmVlZCBsb2NraW5nIGhlcmUuIEFsbCB0aGUgdXBkYXRlcy9jaGVja3MgcmVsYXRlZCAKdG8gcHJl dl9zaW5rX2NvdW50IGFyZSBkb25lCmluIGRwX2xpbmtfcHJvY2Vzc19yZXF1ZXN0KCkgd2hpY2gg d2lsbCBydW4gaW4gc2luZ2xlIHRocmVhZGVkIHdvcmsgCnF1ZXVlLgoKPj4gKwkJcmV0dXJuIHRy dWU7Cj4+ICsKPj4gKwlyZXR1cm4gZmFsc2U7Cj4gCj4gCXJldHVybiBsaW5rLT5wcmV2X3Npbmtf Y291bnQgIT0gbGluay0+ZHBfbGluay5zaW5rX2NvdW50LmNvdW50Owo+IApUaGlzIGZ1bmN0aW9u IHJlbW92ZWQgYW5kIGVtYmVkIGluIHBvcnRfc3RhdHVzX2NoYW5nZS4KCj4+ICt9Cj4+ICsKPj4g Ky8qKgo+PiArICogZHBfbGlua19wcm9jZXNzX2Rvd25zdHJlYW1fcG9ydF9zdGF0dXNfY2hhbmdl KCkgLSBwcm9jZXNzIHBvcnQgCj4+IHN0YXR1cyBjaGFuZ2VzCj4+ICsgKiBAbGluazogRGlzcGxh eSBQb3J0IERyaXZlciBkYXRhCj4+ICsgKgo+PiArICogVGhpcyBmdW5jdGlvbiB3aWxsIGhhbmRs ZSBkb3duc3RyZWFtIHBvcnQgdXBkYXRlcyB0aGF0IGFyZSAKPj4gaW5pdGlhdGVkIGJ5Cj4+ICsg KiB0aGUgc2luay4gSWYgdGhlIGRvd25zdHJlYW0gcG9ydCBzdGF0dXMgaGFzIGNoYW5nZWQsIHRo ZSBFRElEIGlzIAo+PiByZWFkIHZpYQo+PiArICogQVVYLgo+PiArICoKPj4gKyAqIFRoZSBmdW5j dGlvbiB3aWxsIHJldHVybiAwIGlmIGEgZG93bnN0cmVhbSBwb3J0IHVwZGF0ZSBoYXMgYmVlbgo+ PiArICogcHJvY2Vzc2VkLCBvdGhlcndpc2UgaXQgd2lsbCByZXR1cm4gLUVJTlZBTC4KPj4gKyAq Lwo+PiArc3RhdGljIGludCBkcF9saW5rX3Byb2Nlc3NfZHNfcG9ydF9zdGF0dXNfY2hhbmdlKHN0 cnVjdCAKPj4gZHBfbGlua19wcml2YXRlICpsaW5rKQo+PiArewo+PiArCWlmICghZHBfbGlua19p c19kc19wb3J0X3N0YXR1c19jaGFuZ2VkKGxpbmspKQo+IAo+IEp1c3QgZW1iZWQgdGhlIGNvbnRl bnRzIG9mIGlzX2RzX3BvcnRfc3RhdHVzX2NoYW5nZWQgaGVyZSwgbm8gbmVlZCBmb3IgCj4gMiBm dW5jcwo+IApGaXhlZCBpbiB2Mi4KCj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsJLyog cmVzZXQgcHJldl9zaW5rX2NvdW50ICovCj4+ICsJbGluay0+cHJldl9zaW5rX2NvdW50ID0gbGlu ay0+ZHBfbGluay5zaW5rX2NvdW50LmNvdW50Owo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBib29sIGRwX2xpbmtfaXNfdmlkZW9fcGF0dGVybl9yZXF1ZXN0ZWQoc3Ry dWN0IGRwX2xpbmtfcHJpdmF0ZSAKPj4gKmxpbmspCj4+ICt7Cj4+ICsJcmV0dXJuIChsaW5rLT5y ZXF1ZXN0LnRlc3RfcmVxdWVzdGVkICYgRFBfVEVTVF9MSU5LX1ZJREVPX1BBVFRFUk4pCj4+ICsJ CSYmICEobGluay0+cmVxdWVzdC50ZXN0X3JlcXVlc3RlZCAmCj4+ICsJCURQX1RFU1RfTElOS19B VURJT19ESVNBQkxFRF9WSURFTyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBib29sIGRwX2xpbmtf aXNfYXVkaW9fcGF0dGVybl9yZXF1ZXN0ZWQoc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSAKPj4gKmxp bmspCj4+ICt7Cj4+ICsJcmV0dXJuIChsaW5rLT5yZXF1ZXN0LnRlc3RfcmVxdWVzdGVkICYgRFBf VEVTVF9MSU5LX0FVRElPX1BBVFRFUk4pOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGRwX2xp bmtfcHJvY2Vzc192aWRlb19wYXR0ZXJuX3JlcXVlc3QoKSAtIHByb2Nlc3MgbmV3IHZpZGVvIAo+ PiBwYXR0ZXJuIHJlcXVlc3QKPj4gKyAqIEBsaW5rOiBEaXNwbGF5IFBvcnQgbGluayBtb2R1bGUn cyBkYXRhCj4+ICsgKgo+PiArICogVGhpcyBmdW5jdGlvbiB3aWxsIGhhbmRsZSBhIG5ldyB2aWRl byBwYXR0ZXJuIHJlcXVlc3QgdGhhdCBhcmUgCj4+IGluaXRpYXRlZCBieQo+PiArICogdGhlIHNp bmsuIFRoaXMgaXMgYWNoZWlldmVkIGJ5IGZpcnN0IHNlbmRpbmcgYSBkaXNjb25uZWN0IAo+PiBu b3RpZmljYXRpb24gdG8KPj4gKyAqIHRoZSBzaW5rIGZvbGxvd2VkIGJ5IGEgc3Vic2VxdWVudCBj b25uZWN0IG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlciAKPj4gbW9kdWxlcywKPj4gKyAqIHdoZXJl IGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIHVzZXIgbW9kdWxlcyB3b3VsZCBkcmF3IHRoZSByZXF1 aXJlZCAKPj4gbGluawo+PiArICogcGF0dGVybi4KPj4gKyAqLwo+PiArc3RhdGljIGludCBkcF9s aW5rX3Byb2Nlc3NfdmlkZW9fcGF0dGVybl9yZXF1ZXN0KHN0cnVjdCAKPj4gZHBfbGlua19wcml2 YXRlICpsaW5rKQo+PiArewo+PiArCWlmICghZHBfbGlua19pc192aWRlb19wYXR0ZXJuX3JlcXVl c3RlZChsaW5rKSkKPiAKPiBKdXN0IGRvIHRoaXMgZGlyZWN0bHkgaW4gZHBfbGlua19wcm9jZXNz X3JlcXVlc3QgYW5kIGdldCByaWQgb2YgdGhpcyAKPiBmdW5jdGlvbgo+IApVcGRhdGVkIGluIFYy Lgo+PiArCQlnb3RvIGVuZDsKPj4gKwo+PiArCXByX2RlYnVnKCIlczogYml0IGRlcHRoPSVkKCVk IGJwcCkgcGF0dGVybj0lc1xuIiwKPj4gKwkJZHBfbGlua19nZXRfdGVzdF9uYW1lKERQX1RFU1Rf TElOS19WSURFT19QQVRURVJOKSwKPj4gKwkJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvLnRlc3Rf Yml0X2RlcHRoLAo+PiArCQlkcF9saW5rX2JpdF9kZXB0aF90b19icHAoCj4+ICsJCWxpbmstPmRw X2xpbmsudGVzdF92aWRlby50ZXN0X2JpdF9kZXB0aCksCj4+ICsJCWRwX2xpbmtfdmlkZW9fcGF0 dGVybl90b19zdHJpbmcoCj4+ICsJCQlsaW5rLT5kcF9saW5rLnRlc3RfdmlkZW8udGVzdF92aWRl b19wYXR0ZXJuKSk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK2VuZDoKPj4gKwlyZXR1cm4gLUVJ TlZBTDsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBkcF9saW5rX3Byb2Nlc3NfYXVkaW9fcGF0 dGVybl9yZXF1ZXN0KCkgLSBwcm9jZXNzIG5ldyBhdWRpbyAKPj4gcGF0dGVybiByZXF1ZXN0Cj4+ ICsgKiBAbGluazogRGlzcGxheSBQb3J0IGxpbmsgbW9kdWxlIGRhdGEKPj4gKyAqCj4+ICsgKiBU aGlzIGZ1bmN0aW9uIHdpbGwgaGFuZGxlIGEgbmV3IGF1ZGlvIHBhdHRlcm4gcmVxdWVzdCB0aGF0 IGlzIAo+PiBpbml0aWF0ZWQgYnkKPj4gKyAqIHRoZSBzaW5rLiBUaGlzIGlzIGFjaGVpZXZlZCBi eSBzZW5kaW5nIHRoZSBuZWNlc3Nhcnkgc2Vjb25kYXJ5IAo+PiBkYXRhIHBhY2tldHMKPj4gKyAq IHRvIHRoZSBzaW5rLiBJdCBpcyBleHBlY3RlZCB0aGF0IGFueSBzaW11bGF0ZW5vdXMgcmVxdWVz dHMgZm9yIAo+PiB2aWRlbwo+PiArICogcGF0dGVybnMgd2lsbCBiZSBoYW5kbGVkIGJlZm9yZSB0 aGUgYXVkaW8gcGF0dGVybiBpcyBzZW50IHRvIHRoZSAKPj4gc2luay4KPj4gKyAqLwo+PiArc3Rh dGljIGludCBkcF9saW5rX3Byb2Nlc3NfYXVkaW9fcGF0dGVybl9yZXF1ZXN0KHN0cnVjdCAKPj4g ZHBfbGlua19wcml2YXRlICpsaW5rKQo+PiArewo+PiArCWlmICghZHBfbGlua19pc19hdWRpb19w YXR0ZXJuX3JlcXVlc3RlZChsaW5rKSkKPiAKPiBTYW1lIGhlcmUKPiAKVXBkYXRlZCBpbiBWMi4K Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsJcHJfZGVidWcoInNhbXBsaW5nX3JhdGU9 JXMsIGNoYW5uZWxfY291bnQ9JWQsIHBhdHRlcm5fdHlwZT0lc1xuIiwKPj4gKwkJZHBfbGlua19n ZXRfYXVkaW9fc2FtcGxlX3JhdGUoCj4+ICsJCQlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVz dF9hdWRpb19zYW1wbGluZ19yYXRlKSwKPj4gKwkJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRl c3RfYXVkaW9fY2hhbm5lbF9jb3VudCwKPj4gKwkJZHBfbGlua19nZXRfYXVkaW9fdGVzdF9wYXR0 ZXJuKAo+PiArCQkJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3RfYXVkaW9fcGF0dGVybl90 eXBlKSk7Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiYXVkaW9fcGVyaW9kOiBjaDE9MHgleCwgY2gyPTB4 JXgsIGNoMz0weCV4LCBjaDQ9MHgleFxuIiwKPj4gKwkJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlv LnRlc3RfYXVkaW9fcGVyaW9kX2NoXzEsCj4+ICsJCWxpbmstPmRwX2xpbmsudGVzdF9hdWRpby50 ZXN0X2F1ZGlvX3BlcmlvZF9jaF8yLAo+PiArCQlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8udGVz dF9hdWRpb19wZXJpb2RfY2hfMywKPj4gKwkJbGluay0+ZHBfbGluay50ZXN0X2F1ZGlvLnRlc3Rf YXVkaW9fcGVyaW9kX2NoXzQpOwo+PiArCj4+ICsJcHJfZGVidWcoImF1ZGlvX3BlcmlvZDogY2g1 PTB4JXgsIGNoNj0weCV4LCBjaDc9MHgleCwgY2g4PTB4JXhcbiIsCj4+ICsJCWxpbmstPmRwX2xp bmsudGVzdF9hdWRpby50ZXN0X2F1ZGlvX3BlcmlvZF9jaF81LAo+PiArCQlsaW5rLT5kcF9saW5r LnRlc3RfYXVkaW8udGVzdF9hdWRpb19wZXJpb2RfY2hfNiwKPj4gKwkJbGluay0+ZHBfbGluay50 ZXN0X2F1ZGlvLnRlc3RfYXVkaW9fcGVyaW9kX2NoXzcsCj4+ICsJCWxpbmstPmRwX2xpbmsudGVz dF9hdWRpby50ZXN0X2F1ZGlvX3BlcmlvZF9jaF84KTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9saW5rX3Jlc2V0X2RhdGEoc3RydWN0IGRwX2xpbmtf cHJpdmF0ZSAqbGluaykKPj4gK3sKPj4gKwlsaW5rLT5yZXF1ZXN0ID0gKGNvbnN0IHN0cnVjdCBk cF9saW5rX3JlcXVlc3QpeyAwIH07Cj4+ICsJbGluay0+ZHBfbGluay50ZXN0X3ZpZGVvID0gKGNv bnN0IHN0cnVjdCBkcF9saW5rX3Rlc3RfdmlkZW8peyAwIH07Cj4+ICsJbGluay0+ZHBfbGluay50 ZXN0X3ZpZGVvLnRlc3RfYml0X2RlcHRoID0gRFBfVEVTVF9CSVRfREVQVEhfVU5LTk9XTjsKPj4g KwlsaW5rLT5kcF9saW5rLnRlc3RfYXVkaW8gPSAoY29uc3Qgc3RydWN0IGRwX2xpbmtfdGVzdF9h dWRpbyl7IDAgfTsKPj4gKwlsaW5rLT5kcF9saW5rLnBoeV9wYXJhbXMucGh5X3Rlc3RfcGF0dGVy bl9zZWwgPSAwOwo+PiArCWxpbmstPmRwX2xpbmsuc2lua19yZXF1ZXN0ID0gMDsKPj4gKwlsaW5r LT5kcF9saW5rLnRlc3RfcmVzcG9uc2UgPSAwOwo+IAo+IAltZW1zZXQ/Cj4gCgpXZSBhcmUgcmVz ZXR0aW5nIG9ubHkgdGhlIHRlc3QgcGFyYW1ldGVycy4gV2Ugd2lsbCByZXRhaW4gYWxsIG90aGVy IGluZm8gCmluIGRwX2xpbmsgc3RydWN0dXJlLgoKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBk cF9saW5rX3Byb2Nlc3NfcmVxdWVzdCgpIC0gaGFuZGxlIEhQRCBJUlEgdHJhbnNpdGlvbiB0byBI SUdICj4+ICsgKiBAbGluazogcG9pbnRlciB0byBsaW5rIG1vZHVsZSBkYXRhCj4+ICsgKgo+PiAr ICogVGhpcyBmdW5jdGlvbiB3aWxsIGhhbmRsZSB0aGUgSFBEIElSUSBzdGF0ZSB0cmFuc2l0aW9u cyBmcm9tIExPVyAKPj4gdG8gSElHSAo+PiArICogKGluY2x1ZGluZyBjYXNlcyB3aGVuIHRoZXJl IGFyZSBiYWNrIHRvIGJhY2sgSFBEIElSUSBISUdIKSAKPj4gaW5kaWNhdGluZwo+PiArICogdGhl IHN0YXJ0IG9mIGEgbmV3IGxpbmsgdHJhaW5pbmcgcmVxdWVzdCBvciBzaW5rIHN0YXR1cyB1cGRh dGUuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgZHBfbGlua19wcm9jZXNzX3JlcXVlc3Qoc3RydWN0 IGRwX2xpbmsgKmRwX2xpbmspCj4+ICt7Cj4+ICsJaW50IHJldCA9IDA7Cj4+ICsJc3RydWN0IGRw X2xpbmtfcHJpdmF0ZSAqbGluazsKPj4gKwo+PiArCWlmICghZHBfbGluaykgewo+PiArCQlwcl9l cnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsK Pj4gKwlsaW5rID0gY29udGFpbmVyX29mKGRwX2xpbmssIHN0cnVjdCBkcF9saW5rX3ByaXZhdGUs IGRwX2xpbmspOwo+PiArCj4+ICsJcHJfZGVidWcoInN0YXJ0XG4iKTsKPj4gKwo+PiArCWRwX2xp bmtfcmVzZXRfZGF0YShsaW5rKTsKPj4gKwo+PiArCWRwX2xpbmtfcGFyc2Vfc2lua19zdGF0dXNf ZmllbGQobGluayk7Cj4+ICsKPj4gKwlpZiAoZHBfbGlua19pc190ZXN0X2VkaWRfcmVhZChsaW5r KSkgewo+PiArCQlkcF9saW5rLT5zaW5rX3JlcXVlc3QgfD0gRFBfVEVTVF9MSU5LX0VESURfUkVB RDsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwo+PiArCXJldCA9IGRwX2xpbmtfcHJvY2Vz c19kc19wb3J0X3N0YXR1c19jaGFuZ2UobGluayk7Cj4+ICsJaWYgKCFyZXQpIHsKPj4gKwkJZHBf bGluay0+c2lua19yZXF1ZXN0IHw9IERTX1BPUlRfU1RBVFVTX0NIQU5HRUQ7Cj4+ICsJCWdvdG8g ZXhpdDsKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSBkcF9saW5rX3Byb2Nlc3NfbGlua190cmFpbmlu Z19yZXF1ZXN0KGxpbmspOwo+PiArCWlmICghcmV0KSB7Cj4+ICsJCWRwX2xpbmstPnNpbmtfcmVx dWVzdCB8PSBEUF9URVNUX0xJTktfVFJBSU5JTkc7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ ICsKPj4gKwlyZXQgPSBkcF9saW5rX3Byb2Nlc3NfcGh5X3Rlc3RfcGF0dGVybl9yZXF1ZXN0KGxp bmspOwo+PiArCWlmICghcmV0KSB7Cj4+ICsJCWRwX2xpbmstPnNpbmtfcmVxdWVzdCB8PSBEUF9U RVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTjsKPj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwo+ PiArCXJldCA9IGRwX2xpbmtfcHJvY2Vzc19saW5rX3N0YXR1c191cGRhdGUobGluayk7Cj4+ICsJ aWYgKCFyZXQpIHsKPj4gKwkJZHBfbGluay0+c2lua19yZXF1ZXN0IHw9IERQX0xJTktfU1RBVFVT X1VQREFURUQ7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSBkcF9saW5r X3Byb2Nlc3NfdmlkZW9fcGF0dGVybl9yZXF1ZXN0KGxpbmspOwo+PiArCWlmICghcmV0KSB7Cj4+ ICsJCWRwX2xpbmstPnNpbmtfcmVxdWVzdCB8PSBEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTjsK Pj4gKwkJZ290byBleGl0Owo+PiArCX0KPj4gKwo+PiArCXJldCA9IGRwX2xpbmtfcHJvY2Vzc19h dWRpb19wYXR0ZXJuX3JlcXVlc3QobGluayk7Cj4+ICsJaWYgKCFyZXQpIHsKPj4gKwkJZHBfbGlu ay0+c2lua19yZXF1ZXN0IHw9IERQX1RFU1RfTElOS19BVURJT19QQVRURVJOOwo+PiArCQlnb3Rv IGV4aXQ7Cj4+ICsJfQo+PiArCj4+ICsJcHJfZGVidWcoImRvbmVcbiIpOwo+PiArZXhpdDoKPiAK PiByZW1vdmUgZXhpdCAmIHJldCwganVzdCByZXR1cm4gdmFsdWVzIGRpcmVjdGx5Cj4gCkZpeGVk IGluIFYyLgoKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRwX2xp bmtfZ2V0X2NvbG9yaW1ldHJ5X2NvbmZpZyhzdHJ1Y3QgZHBfbGluayAqZHBfbGluaykKPj4gK3sK Pj4gKwl1MzIgY2M7Cj4+ICsJZW51bSBkeW5hbWljX3JhbmdlIGRyOwo+PiArCXN0cnVjdCBkcF9s aW5rX3ByaXZhdGUgKmxpbms7Cj4+ICsKPj4gKwlpZiAoIWRwX2xpbmspIHsKPj4gKwkJcHJfZXJy KCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ ICsJbGluayA9IGNvbnRhaW5lcl9vZihkcF9saW5rLCBzdHJ1Y3QgZHBfbGlua19wcml2YXRlLCBk cF9saW5rKTsKPj4gKwo+PiArCS8qIHVubGVzcyBhIHZpZGVvIHBhdHRlcm4gQ1RTIHRlc3QgaXMg b25nb2luZywgdXNlIENFQV9WRVNBICovCj4gCj4gcy9DRUFfVkVTQS9SR0JfVkVTQT8KPiAKRml4 ZWQgaW4gVjIuCgo+PiArCWlmIChkcF9saW5rX2lzX3ZpZGVvX3BhdHRlcm5fcmVxdWVzdGVkKGxp bmspKQo+PiArCQlkciA9IGxpbmstPmRwX2xpbmsudGVzdF92aWRlby50ZXN0X2R5bl9yYW5nZTsK Pj4gKwllbHNlCj4+ICsJCWRyID0gRFBfRFlOQU1JQ19SQU5HRV9SR0JfVkVTQTsKPj4gKwo+PiAr CS8qIE9ubHkgUkdCX1ZFU0EgbmQgUkdCX0NFQSBzdXBwb3J0ZWQgZm9yIG5vdyAqLwo+IAo+IHMv bmQvYW5kLwo+IApGaXhlZCBpbiB2Mi4KCj4+ICsJc3dpdGNoIChkcikgewo+PiArCWNhc2UgRFBf RFlOQU1JQ19SQU5HRV9SR0JfQ0VBOgo+PiArCQljYyA9IEJJVCgzKTsKPj4gKwkJYnJlYWs7Cj4+ ICsJY2FzZSBEUF9EWU5BTUlDX1JBTkdFX1JHQl9WRVNBOgo+PiArCWRlZmF1bHQ6Cj4+ICsJCWNj ID0gMDsKPj4gKwl9Cj4gCj4gSWYgeW91IHN0b3JlIHRoZSB2YWx1ZSBzaGlmdGVkIGxpa2UgSSBz dWdnZXN0ZWQsIHlvdSBkb24ndCBoYXZlIHRvIGRvIAo+IHRoaXMKPiBzd2l0Y2ggKHdoaWNoIHJl YWxseSBzaG91bGQgYmUgYW4gaWYgYW55d2F5cyBzaW5jZSB0aGUgcmFuZ2UgaXMgMDoxKS4KPiAK QWRkcmVzc2VkIGluIHYyLgoKPj4gKwo+PiArCXJldHVybiBjYzsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGludCBkcF9saW5rX2FkanVzdF9sZXZlbHMoc3RydWN0IGRwX2xpbmsgKmRwX2xpbmssIHU4 IAo+PiAqbGlua19zdGF0dXMpCj4+ICt7Cj4+ICsJaW50IGk7Cj4+ICsJaW50IG1heCA9IDA7Cj4+ ICsJdTggZGF0YTsKPj4gKwlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rOwo+PiArCj4+ICsJ aWYgKCFkcF9saW5rKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJl dHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCWxpbmsgPSBjb250YWluZXJfb2YoZHBfbGlu aywgc3RydWN0IGRwX2xpbmtfcHJpdmF0ZSwgZHBfbGluayk7Cj4+ICsKPj4gKwkvKiB1c2UgdGhl IG1heCBsZXZlbCBhY3Jvc3MgbGFuZXMgKi8KPj4gKwlmb3IgKGkgPSAwOyBpIDwgZHBfbGluay0+ bGlua19wYXJhbXMubGFuZV9jb3VudDsgaSsrKSB7Cj4+ICsJCWRhdGEgPSBkcm1fZHBfZ2V0X2Fk anVzdF9yZXF1ZXN0X3ZvbHRhZ2UobGlua19zdGF0dXMsIGkpOwo+PiArCQlwcl9kZWJ1ZygibGFu ZT0lZCByZXFfdm9sdGFnZV9zd2luZz0lZFxuIiwgaSwgZGF0YSk7Cj4+ICsJCWlmIChtYXggPCBk YXRhKQo+PiArCQkJbWF4ID0gZGF0YTsKPj4gKwl9Cj4+ICsKPj4gKwlkcF9saW5rLT5waHlfcGFy YW1zLnZfbGV2ZWwgPSBtYXggPj4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19TSElGVDsKPj4gKwo+ PiArCS8qIHVzZSB0aGUgbWF4IGxldmVsIGFjcm9zcyBsYW5lcyAqLwo+PiArCW1heCA9IDA7Cj4+ ICsJZm9yIChpID0gMDsgaSA8IGRwX2xpbmstPmxpbmtfcGFyYW1zLmxhbmVfY291bnQ7IGkrKykg ewo+PiArCQlkYXRhID0gZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF9wcmVfZW1waGFzaXMobGlu a19zdGF0dXMsIGkpOwo+PiArCQlwcl9kZWJ1ZygibGFuZT0lZCByZXFfcHJlX2VtcGhhc2lzPSVk XG4iLCBpLCBkYXRhKTsKPj4gKwkJaWYgKG1heCA8IGRhdGEpCj4+ICsJCQltYXggPSBkYXRhOwo+ PiArCX0KPiAKPiBZb3UgY2FuIGNvbWJpbmUgdGhlc2UgbG9vcHMgYW5kIGRvIHRoZSB3b3JrIGF0 IG9uY2UgKGNoZWNrIG91dAo+IGludGVsX2dldF9hZGp1c3RfdHJhaW4pCj4gCldpbGwgZm9sbG93 IHVwIGluIFYzLgo+PiArCj4+ICsJZHBfbGluay0+cGh5X3BhcmFtcy5wX2xldmVsID0gbWF4ID4+ IERQX1RSQUlOX1BSRV9FTVBIQVNJU19TSElGVDsKPj4gKwo+PiArCS8qKgo+PiArCSAqIEFkanVz dCB0aGUgdm9sdGFnZSBzd2luZyBhbmQgcHJlLWVtcGhhc2lzIGxldmVsIGNvbWJpbmF0aW9uIHRv IAo+PiB3aXRoaW4KPj4gKwkgKiB0aGUgYWxsb3dhYmxlIHJhbmdlLgo+PiArCSAqLwo+PiArCWlm IChkcF9saW5rLT5waHlfcGFyYW1zLnZfbGV2ZWwgPiBEUF9MSU5LX1ZPTFRBR0VfTUFYKSB7Cj4+ ICsJCXByX2RlYnVnKCJSZXF1ZXN0ZWQgdlN3aW5nTGV2ZWw9JWQsIGNoYW5nZSB0byAlZFxuIiwK Pj4gKwkJCWRwX2xpbmstPnBoeV9wYXJhbXMudl9sZXZlbCwgRFBfTElOS19WT0xUQUdFX01BWCk7 Cj4+ICsJCWRwX2xpbmstPnBoeV9wYXJhbXMudl9sZXZlbCA9IERQX0xJTktfVk9MVEFHRV9NQVg7 Cj4+ICsJfQo+PiArCj4+ICsJaWYgKGRwX2xpbmstPnBoeV9wYXJhbXMucF9sZXZlbCA+IERQX0xJ TktfUFJFX0VNUEhBU0lTX01BWCkgewo+PiArCQlwcl9kZWJ1ZygiUmVxdWVzdGVkIHByZUVtcGhh c2lzTGV2ZWw9JWQsIGNoYW5nZSB0byAlZFxuIiwKPj4gKwkJCWRwX2xpbmstPnBoeV9wYXJhbXMu cF9sZXZlbCwgRFBfTElOS19QUkVfRU1QSEFTSVNfTUFYKTsKPj4gKwkJZHBfbGluay0+cGh5X3Bh cmFtcy5wX2xldmVsID0gRFBfTElOS19QUkVfRU1QSEFTSVNfTUFYOwo+PiArCX0KPj4gKwo+PiAr CWlmICgoZHBfbGluay0+cGh5X3BhcmFtcy5wX2xldmVsID4gRFBfTElOS19QUkVfRU1QSEFTSVNf TEVWRUxfMSkKPj4gKwkJJiYgKGRwX2xpbmstPnBoeV9wYXJhbXMudl9sZXZlbCA9PSBEUF9MSU5L X1ZPTFRBR0VfTEVWRUxfMikpIHsKPj4gKwkJcHJfZGVidWcoIlJlcXVlc3RlZCBwcmVFbXBoYXNp c0xldmVsPSVkLCBjaGFuZ2UgdG8gJWRcbiIsCj4+ICsJCQlkcF9saW5rLT5waHlfcGFyYW1zLnBf bGV2ZWwsCj4+ICsJCQlEUF9MSU5LX1BSRV9FTVBIQVNJU19MRVZFTF8xKTsKPj4gKwkJZHBfbGlu ay0+cGh5X3BhcmFtcy5wX2xldmVsID0gRFBfTElOS19QUkVfRU1QSEFTSVNfTEVWRUxfMTsKPj4g Kwl9Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiYWRqdXN0ZWQ6IHZfbGV2ZWw9JWQsIHBfbGV2ZWw9JWRc biIsCj4+ICsJCWRwX2xpbmstPnBoeV9wYXJhbXMudl9sZXZlbCwgZHBfbGluay0+cGh5X3BhcmFt cy5wX2xldmVsKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGRwX2xpbmtfc2VuZF9wc21fcmVxdWVzdChzdHJ1Y3QgZHBfbGluayAqZHBfbGluaywgYm9vbCAK Pj4gcmVxKQo+PiArewo+PiArCXN0cnVjdCBkcF9saW5rX3ByaXZhdGUgKmxpbms7Cj4+ICsKPj4g KwlpZiAoIWRwX2xpbmspIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJbGluayA9IGNvbnRhaW5lcl9vZihkcF9s aW5rLCBzdHJ1Y3QgZHBfbGlua19wcml2YXRlLCBkcF9saW5rKTsKPiAKPiBUaGlzIGlzIGEgc3R1 Yiwgd2h5IGRvIHRoaXM/Cj4gCj4+ICsKPj4gKwlyZXR1cm4gMDsKPiAKPiBGdXJ0aGVyLCB3aHkg aGF2ZSBhIHN0dWIgYXQgYWxsPyBUaGUgaG9vayBpcyBuZXZlciBjYWxsZWQsIHNvIGRlbGV0ZSBp dCAKPiBhbGwKPiBwbGVhc2UuCj4gClJlbW92ZWQgdGhpcyBmdW5jdGlvbiBpbiBWMi4KPj4gK30K Pj4gKwo+PiArc3RhdGljIHUzMiBkcF9saW5rX2dldF90ZXN0X2JpdHNfZGVwdGgoc3RydWN0IGRw X2xpbmsgKmRwX2xpbmssIHUzMiAKPj4gYnBwKQo+PiArewo+PiArCXUzMiB0YmQ7Cj4+ICsKPj4g KwkvKgo+PiArCSAqIEZldyBzaW1wbGlzdGljIHJ1bGVzIGFuZCBhc3N1bXB0aW9ucyBtYWRlIGhl cmU6Cj4+ICsJICogICAgMS4gVGVzdCBiaXQgZGVwdGggaXMgYml0IGRlcHRoIHBlciBjb2xvciBj b21wb25lbnQKPj4gKwkgKiAgICAyLiBBc3N1bWUgMyBjb2xvciBjb21wb25lbnRzCj4+ICsJICov Cj4+ICsJc3dpdGNoIChicHApIHsKPj4gKwljYXNlIDE4Ogo+PiArCQl0YmQgPSBEUF9URVNUX0JJ VF9ERVBUSF82Owo+PiArCQlicmVhazsKPj4gKwljYXNlIDI0Ogo+PiArCQl0YmQgPSBEUF9URVNU X0JJVF9ERVBUSF84Owo+PiArCQlicmVhazsKPj4gKwljYXNlIDMwOgo+PiArCQl0YmQgPSBEUF9U RVNUX0JJVF9ERVBUSF8xMDsKPj4gKwkJYnJlYWs7Cj4+ICsJZGVmYXVsdDoKPj4gKwkJdGJkID0g RFBfVEVTVF9CSVRfREVQVEhfVU5LTk9XTjsKPj4gKwkJYnJlYWs7Cj4+ICsJfQo+PiArCj4+ICsJ aWYgKHRiZCAhPSBEUF9URVNUX0JJVF9ERVBUSF9VTktOT1dOKQo+PiArCQl0YmQgPSAodGJkID4+ IERQX1RFU1RfQklUX0RFUFRIX1NISUZUKTsKPiAKPiBBRkFJQ1QgdGJkIGNvcnJlc3BvbmRzIHRv IGEgU29DIHJlZ2lzdGVyIHZhbHVlLCBhcyBvcHBvc2VkIHRvIHRoZSBEUENEIAo+IHZhbHVlLgo+ IEl0J3MgYSBoYXBweSBjb2luY2lkZW5jZSB0aGF0IHRoZXkncmUgdGhlIHNhbWUsIGhvd2V2ZXIg SSB0aGluayB5b3UgCj4gc2hvdWxkIHVzZSBhCj4gc2VwYXJhdGUgbXNtLXNwZWNpZmljICNkZWZp bmUgaW5zdGVhZCBvZiB0aGUgZHJtX2RwX2hlbHBlciB2YWx1ZXMuCj4gClRoZXNlIGFyZSBzdGFu ZGFyZCBicHAgdmFsdWVzIGFuZCB3aWxsIG1hdGNoIHRvIHRoZSBEUENEIHZhbHVlcy4gRm9yIHRo ZSAKc2FtZSByZWFzb24Kd2UgYXJlIHVzaW5nIGV4aXN0aW5nIHN0YW5kYXJkIG1hY3Jvcy4KCj4+ ICsKPj4gKwlyZXR1cm4gdGJkOwo+PiArfQo+PiArCj4+ICtzdHJ1Y3QgZHBfbGluayAqZHBfbGlu a19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHBfYXV4ICphdXgpCj4+ICt7Cj4+ICsJ aW50IHJjID0gMDsKPj4gKwlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICpsaW5rOwo+PiArCXN0cnVj dCBkcF9saW5rICpkcF9saW5rOwo+PiArCj4+ICsJaWYgKCFkZXYgfHwgIWF1eCkgewo+PiArCQlw cl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8g ZXJyb3I7Cj4+ICsJfQo+PiArCj4+ICsJbGluayA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq bGluayksIEdGUF9LRVJORUwpOwo+PiArCWlmICghbGluaykgewo+PiArCQlyYyA9IC1FSU5WQUw7 Cj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsJfQo+PiArCj4+ICsJbGluay0+ZGV2ICAgPSBkZXY7Cj4+ ICsJbGluay0+YXV4ICAgPSBhdXg7Cj4+ICsKPj4gKwlkcF9saW5rID0gJmxpbmstPmRwX2xpbms7 Cj4+ICsKPj4gKwlkcF9saW5rLT5wcm9jZXNzX3JlcXVlc3QgICAgICAgID0gZHBfbGlua19wcm9j ZXNzX3JlcXVlc3Q7Cj4+ICsJZHBfbGluay0+Z2V0X3Rlc3RfYml0c19kZXB0aCAgICA9IGRwX2xp bmtfZ2V0X3Rlc3RfYml0c19kZXB0aDsKPj4gKwlkcF9saW5rLT5nZXRfY29sb3JpbWV0cnlfY29u ZmlnID0gZHBfbGlua19nZXRfY29sb3JpbWV0cnlfY29uZmlnOwo+PiArCWRwX2xpbmstPmFkanVz dF9sZXZlbHMgICAgICAgICAgPSBkcF9saW5rX2FkanVzdF9sZXZlbHM7Cj4+ICsJZHBfbGluay0+ c2VuZF9wc21fcmVxdWVzdCAgICAgICA9IGRwX2xpbmtfc2VuZF9wc21fcmVxdWVzdDsKPj4gKwlk cF9saW5rLT5zZW5kX3Rlc3RfcmVzcG9uc2UgICAgID0gZHBfbGlua19zZW5kX3Rlc3RfcmVzcG9u c2U7Cj4+ICsJZHBfbGluay0+cHNtX2NvbmZpZyAgICAgICAgICAgICA9IGRwX2xpbmtfcHNtX2Nv bmZpZzsKPj4gKwlkcF9saW5rLT5zZW5kX2VkaWRfY2hlY2tzdW0gICAgID0gZHBfbGlua19zZW5k X2VkaWRfY2hlY2tzdW07Cj4+ICsKPj4gKwlyZXR1cm4gZHBfbGluazsKPj4gK2Vycm9yOgo+PiAr CXJldHVybiBFUlJfUFRSKHJjKTsKPj4gK30KPj4gKwo+PiArdm9pZCBkcF9saW5rX3B1dChzdHJ1 Y3QgZHBfbGluayAqZHBfbGluaykKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfbGlua19wcml2YXRlICps aW5rOwo+PiArCj4+ICsJaWYgKCFkcF9saW5rKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlsaW5r ID0gY29udGFpbmVyX29mKGRwX2xpbmssIHN0cnVjdCBkcF9saW5rX3ByaXZhdGUsIGRwX2xpbmsp Owo+PiArCj4+ICsJZGV2bV9rZnJlZShsaW5rLT5kZXYsIGxpbmspOwo+PiArfQo+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9saW5rLmggCj4+IGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9saW5rLmgKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAw MDAwMC4uNmQ2ZWY0Mwo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfbGluay5oCj4+IEBAIC0wLDAgKzEsMTg0IEBACj4+ICsvKgo+PiArICogQ29weXJp Z2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIAo+PiBy ZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAo+PiBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+ PiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCj4+ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiArICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ PiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gKyAq Cj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBfRFBfTElOS19IXwo+PiArI2RlZmluZSBfRFBfTElO S19IXwo+PiArCj4+ICsjaW5jbHVkZSAiZHBfYXV4LmgiCj4+ICsKPj4gKyNkZWZpbmUgRFNfUE9S VF9TVEFUVVNfQ0hBTkdFRCAweDIwMAo+PiArI2RlZmluZSBEUF9URVNUX0JJVF9ERVBUSF9VTktO T1dOIDB4RkZGRkZGRkYKPj4gKyNkZWZpbmUgRFBfTElOS19FTlVNX1NUUih4KQkJI3gKPj4gKwo+ PiArZW51bSBkcF9saW5rX3ZvbHRhZ2VfbGV2ZWwgewo+PiArCURQX0xJTktfVk9MVEFHRV9MRVZF TF8wCT0gMCwKPj4gKwlEUF9MSU5LX1ZPTFRBR0VfTEVWRUxfMQk9IDEsCj4+ICsJRFBfTElOS19W T0xUQUdFX0xFVkVMXzIJPSAyLAo+PiArCURQX0xJTktfVk9MVEFHRV9NQVgJPSBEUF9MSU5LX1ZP TFRBR0VfTEVWRUxfMiwKPj4gK307Cj4gCj4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR18qCj4gCkZp eGVkIGluIFYyLgo+PiArCj4+ICtlbnVtIGRwX2xpbmtfcHJlZW1hcGhhc2lzX2xldmVsIHsKPj4g KwlEUF9MSU5LX1BSRV9FTVBIQVNJU19MRVZFTF8wCT0gMCwKPj4gKwlEUF9MSU5LX1BSRV9FTVBI QVNJU19MRVZFTF8xCT0gMSwKPj4gKwlEUF9MSU5LX1BSRV9FTVBIQVNJU19MRVZFTF8yCT0gMiwK Pj4gKwlEUF9MSU5LX1BSRV9FTVBIQVNJU19NQVgJPSBEUF9MSU5LX1BSRV9FTVBIQVNJU19MRVZF TF8yLAo+PiArfTsKPiAKPiBEUF9UUkFJTl9QUkVfRU1QSCoKPiAKRml4ZWQgaW4gVjIuCgo+PiAr Cj4+ICtzdHJ1Y3QgZHBfbGlua19zaW5rX2NvdW50IHsKPj4gKwl1MzIgY291bnQ7Cj4+ICsJYm9v bCBjcF9yZWFkeTsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBkcF9saW5rX3Rlc3RfdmlkZW8gewo+ PiArCXUzMiB0ZXN0X3ZpZGVvX3BhdHRlcm47Cj4+ICsJdTMyIHRlc3RfYml0X2RlcHRoOwo+PiAr CXUzMiB0ZXN0X2R5bl9yYW5nZTsKPj4gKwl1MzIgdGVzdF9oX3RvdGFsOwo+PiArCXUzMiB0ZXN0 X3ZfdG90YWw7Cj4+ICsJdTMyIHRlc3RfaF9zdGFydDsKPj4gKwl1MzIgdGVzdF92X3N0YXJ0Owo+ PiArCXUzMiB0ZXN0X2hzeW5jX3BvbDsKPj4gKwl1MzIgdGVzdF9oc3luY193aWR0aDsKPj4gKwl1 MzIgdGVzdF92c3luY19wb2w7Cj4+ICsJdTMyIHRlc3RfdnN5bmNfd2lkdGg7Cj4+ICsJdTMyIHRl c3RfaF93aWR0aDsKPj4gKwl1MzIgdGVzdF92X2hlaWdodDsKPj4gKwl1MzIgdGVzdF9ycl9kOwo+ PiArCXUzMiB0ZXN0X3JyX247Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZHBfbGlua190ZXN0X2F1 ZGlvIHsKPj4gKwl1MzIgdGVzdF9hdWRpb19zYW1wbGluZ19yYXRlOwo+PiArCXUzMiB0ZXN0X2F1 ZGlvX2NoYW5uZWxfY291bnQ7Cj4+ICsJdTMyIHRlc3RfYXVkaW9fcGF0dGVybl90eXBlOwo+PiAr CXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF8xOwo+PiArCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9j aF8yOwo+PiArCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF8zOwo+PiArCXUzMiB0ZXN0X2F1ZGlv X3BlcmlvZF9jaF80Owo+PiArCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF81Owo+PiArCXUzMiB0 ZXN0X2F1ZGlvX3BlcmlvZF9jaF82Owo+PiArCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF83Owo+ PiArCXUzMiB0ZXN0X2F1ZGlvX3BlcmlvZF9jaF84Owo+PiArfTsKPj4gKwo+PiArc3RydWN0IGRw X2xpbmtfcGh5X3BhcmFtcyB7Cj4+ICsJdTMyIHBoeV90ZXN0X3BhdHRlcm5fc2VsOwo+PiArCXU4 IHZfbGV2ZWw7Cj4+ICsJdTggcF9sZXZlbDsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBkcF9saW5r X3BhcmFtcyB7Cj4+ICsJdTMyIGxhbmVfY291bnQ7Cj4+ICsJdTMyIGJ3X2NvZGU7Cj4+ICt9Owo+ IAo+IFVzZSBkcm1fZHBfbGluawo+IApGaXhlZCBpbiBWMi4KCj4+ICsKPj4gK3N0cnVjdCBkcF9s aW5rIHsKPj4gKwl1MzIgc2lua19yZXF1ZXN0Owo+PiArCXUzMiB0ZXN0X3Jlc3BvbnNlOwo+PiAr CWJvb2wgcHNtX2VuYWJsZWQ7Cj4+ICsKPj4gKwlzdHJ1Y3QgZHBfbGlua19zaW5rX2NvdW50IHNp bmtfY291bnQ7Cj4+ICsJc3RydWN0IGRwX2xpbmtfdGVzdF92aWRlbyB0ZXN0X3ZpZGVvOwo+PiAr CXN0cnVjdCBkcF9saW5rX3Rlc3RfYXVkaW8gdGVzdF9hdWRpbzsKPj4gKwlzdHJ1Y3QgZHBfbGlu a19waHlfcGFyYW1zIHBoeV9wYXJhbXM7Cj4+ICsJc3RydWN0IGRwX2xpbmtfcGFyYW1zIGxpbmtf cGFyYW1zOwo+PiArCj4+ICsJdTMyICgqZ2V0X3Rlc3RfYml0c19kZXB0aCkoc3RydWN0IGRwX2xp bmsgKmRwX2xpbmssIHUzMiBicHApOwo+PiArCWludCAoKnByb2Nlc3NfcmVxdWVzdCkoc3RydWN0 IGRwX2xpbmsgKmRwX2xpbmspOwo+PiArCWludCAoKmdldF9jb2xvcmltZXRyeV9jb25maWcpKHN0 cnVjdCBkcF9saW5rICpkcF9saW5rKTsKPj4gKwlpbnQgKCphZGp1c3RfbGV2ZWxzKShzdHJ1Y3Qg ZHBfbGluayAqZHBfbGluaywgdTggKmxpbmtfc3RhdHVzKTsKPj4gKwlpbnQgKCpzZW5kX3BzbV9y ZXF1ZXN0KShzdHJ1Y3QgZHBfbGluayAqZHBfbGluaywgYm9vbCByZXEpOwo+PiArCXZvaWQgKCpz ZW5kX3Rlc3RfcmVzcG9uc2UpKHN0cnVjdCBkcF9saW5rICpkcF9saW5rKTsKPj4gKwlpbnQgKCpw c21fY29uZmlnKShzdHJ1Y3QgZHBfbGluayAqZHBfbGluaywKPj4gKwkJc3RydWN0IGRybV9kcF9s aW5rICpsaW5rX2luZm8sIGJvb2wgZW5hYmxlKTsKPj4gKwl2b2lkICgqc2VuZF9lZGlkX2NoZWNr c3VtKShzdHJ1Y3QgZHBfbGluayAqZHBfbGluaywgdTggY2hlY2tzdW0pOwo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGlubGluZSBjaGFyICpkcF9saW5rX2dldF9waHlfdGVzdF9wYXR0ZXJuKHUzMiAK Pj4gcGh5X3Rlc3RfcGF0dGVybl9zZWwpCj4+ICt7Cj4+ICsJc3dpdGNoIChwaHlfdGVzdF9wYXR0 ZXJuX3NlbCkgewo+PiArCWNhc2UgRFBfVEVTVF9QSFlfUEFUVEVSTl9OT05FOgo+PiArCQlyZXR1 cm4gRFBfTElOS19FTlVNX1NUUihEUF9URVNUX1BIWV9QQVRURVJOX05PTkUpOwo+PiArCWNhc2Ug RFBfVEVTVF9QSFlfUEFUVEVSTl9EMTBfMl9OT19TQ1JBTUJMSU5HOgo+PiArCQlyZXR1cm4gRFBf TElOS19FTlVNX1NUUigKPj4gKwkJCURQX1RFU1RfUEhZX1BBVFRFUk5fRDEwXzJfTk9fU0NSQU1C TElORyk7Cj4+ICsJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOX1NZTUJPTF9FUlJfTUVBU1VSRU1F TlRfQ05UOgo+PiArCQlyZXR1cm4gRFBfTElOS19FTlVNX1NUUigKPj4gKwkJCURQX1RFU1RfUEhZ X1BBVFRFUk5fU1lNQk9MX0VSUl9NRUFTVVJFTUVOVF9DTlQpOwo+PiArCWNhc2UgRFBfVEVTVF9Q SFlfUEFUVEVSTl9QUkJTNzoKPj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoRFBfVEVTVF9Q SFlfUEFUVEVSTl9QUkJTNyk7Cj4+ICsJY2FzZSBEUF9URVNUX1BIWV9QQVRURVJOXzgwX0JJVF9D VVNUT01fUEFUVEVSTjoKPj4gKwkJcmV0dXJuIERQX0xJTktfRU5VTV9TVFIoCj4+ICsJCQlEUF9U RVNUX1BIWV9QQVRURVJOXzgwX0JJVF9DVVNUT01fUEFUVEVSTik7Cj4+ICsJY2FzZSBEUF9URVNU X1BIWV9QQVRURVJOX0hCUjJfQ1RTX0VZRV9QQVRURVJOOgo+PiArCQlyZXR1cm4gRFBfTElOS19F TlVNX1NUUigKPj4gKwkJCURQX1RFU1RfUEhZX1BBVFRFUk5fSEJSMl9DVFNfRVlFX1BBVFRFUk4p Owo+PiArCWRlZmF1bHQ6Cj4+ICsJCXJldHVybiAidW5rbm93biI7Cj4+ICsJfQo+PiArfQo+IAo+ IFRoaXMgaXMgb25seSB1c2VkIGZvciBkZWJ1ZyBzdGF0ZW1lbnRzLCBqdXN0IHJlbW92ZSBpdCBh bmQgcHJpbnQgdGhlIAo+IGVudW0gYXMgYW4KPiBpbnQuIFRoaXMgd2lsbCBsZXQgeW91IHJlbW92 ZSBEUF9MSU5LX0VOVU1fU1RSIGFzIHdlbGwuCj4gCkZpeGVkIGluIFYyLgoKPj4gKwo+PiArLyoq Cj4+ICsgKiBtZHNzX2RwX3Rlc3RfYml0X2RlcHRoX3RvX2JwcCgpIC0gY29udmVydCB0ZXN0IGJp dCBkZXB0aCB0byBicHAKPj4gKyAqIEB0YmQ6IHRlc3QgYml0IGRlcHRoCj4+ICsgKgo+PiArICog UmV0dXJucyB0aGUgYml0cyBwZXIgcGl4ZWwgKGJwcCkgdG8gYmUgdXNlZCBjb3JyZXNwb25kaW5n IHRvIHRoZQo+PiArICogZ2l0IGJpdCBkZXB0aCB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBhc3N1bWVz IHRoYXQgYml0IGRlcHRoIGhhcwo+PiArICogYWxyZWFkeSBiZWVuIHZhbGlkYXRlZC4KPj4gKyAq Lwo+PiArc3RhdGljIGlubGluZSB1MzIgZHBfbGlua19iaXRfZGVwdGhfdG9fYnBwKHUzMiB0YmQp Cj4+ICt7Cj4+ICsJdTMyIGJwcDsKPj4gKwo+PiArCS8qCj4+ICsJICogRmV3IHNpbXBsaXN0aWMg cnVsZXMgYW5kIGFzc3VtcHRpb25zIG1hZGUgaGVyZToKPj4gKwkgKiAgICAxLiBCaXQgZGVwdGgg aXMgcGVyIGNvbG9yIGNvbXBvbmVudAo+PiArCSAqICAgIDIuIElmIGJpdCBkZXB0aCBpcyB1bmtu b3duIHJldHVybiAwCj4+ICsJICogICAgMy4gQXNzdW1lIDMgY29sb3IgY29tcG9uZW50cwo+PiAr CSAqLwo+PiArCXN3aXRjaCAodGJkKSB7Cj4+ICsJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF82Ogo+ PiArCQlicHAgPSAxODsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBEUF9URVNUX0JJVF9ERVBUSF84 Ogo+PiArCQlicHAgPSAyNDsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBEUF9URVNUX0JJVF9ERVBU SF8xMDoKPj4gKwkJYnBwID0gMzA7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRFBfVEVTVF9CSVRf REVQVEhfVU5LTk9XTjoKPj4gKwlkZWZhdWx0Ogo+PiArCQlicHAgPSAwOwo+PiArCX0KPj4gKwo+ PiArCXJldHVybiBicHA7Cj4gCj4gSnVzdCByZXR1cm4gZGlyZWN0bHkgZnJvbSBlYWNoIGNhc2Uu Cj4gCkZpeGVkIGluIFYyLgoKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBkcF9saW5rX2dldCgp IC0gZ2V0IHRoZSBmdW5jdGlvbmFsaXRpZXMgb2YgZHAgdGVzdCBtb2R1bGUKPj4gKyAqCj4+ICsg Kgo+PiArICogcmV0dXJuOiBhIHBvaW50ZXIgdG8gZHBfbGluayBzdHJ1Y3QKPj4gKyAqLwo+PiAr c3RydWN0IGRwX2xpbmsgKmRwX2xpbmtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRw X2F1eCAqYXV4KTsKPj4gKwo+PiArLyoqCj4+ICsgKiBkcF9saW5rX3B1dCgpIC0gcmVsZWFzZXMg dGhlIGRwIHRlc3QgbW9kdWxlJ3MgcmVzb3VyY2VzCj4+ICsgKgo+PiArICogQGRwX2xpbms6IGFu IGluc3RhbmNlIG9mIGRwX2xpbmsgbW9kdWxlCj4+ICsgKgo+PiArICovCj4+ICt2b2lkIGRwX2xp bmtfcHV0KHN0cnVjdCBkcF9saW5rICpkcF9saW5rKTsKPj4gKwo+PiArI2VuZGlmIC8qIF9EUF9M SU5LX0hfICovCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVs LmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jCj4+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLmU0OTdiNDQKPj4gLS0tIC9kZXYvbnVsbAo+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmMKPj4gQEAgLTAsMCArMSw2MjQg QEAKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxOCwgVGhlIExpbnV4IEZvdW5k YXRpb24uIEFsbCByaWdodHMgCj4+IHJlc2VydmVkLgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCj4+IG1v ZGlmeQo+PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4+ICsgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4g KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCj4+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqLwo+PiArCj4+ICsjZGVmaW5lIHByX2ZtdChm bXQpCSJbZHJtLWRwXSAlczogIiBmbXQsIF9fZnVuY19fCj4+ICsKPj4gKyNpbmNsdWRlICJkcF9w YW5lbC5oIgo+PiArCj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KPj4gKyNpbmNs dWRlIDxkcm0vZHJtX2VkaWQuaD4KPj4gKwo+PiArI2RlZmluZSBEUF9QQU5FTF9ERUZBVUxUX0JQ UCAyNAo+IAo+IHVudXNlZAo+IApSZW1vdmVkIGluIFYyLgoKPj4gKyNkZWZpbmUgRFBfTUFYX0RT X1BPUlRfQ09VTlQgMQo+PiArCj4+ICtlbnVtIHsKPj4gKwlEUF9MSU5LX1JBVEVfTVVMVElQTElF UiA9IDI3MDAwMDAwLAo+PiArfTsKPiAKPiB1bnVzZWQKPiAKUmVtb3ZlZCBpbiBWMi4KCj4+ICsK Pj4gK3N0cnVjdCBkcF9wYW5lbF9wcml2YXRlIHsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ ICsJc3RydWN0IGRwX3BhbmVsIGRwX3BhbmVsOwo+PiArCXN0cnVjdCBkcF9hdXggKmF1eDsKPj4g KwlzdHJ1Y3QgZHBfbGluayAqbGluazsKPj4gKwlzdHJ1Y3QgZHBfY2F0YWxvZ19wYW5lbCAqY2F0 YWxvZzsKPj4gKwlib29sIHBhbmVsX29uOwo+PiArCWJvb2wgYXV4X2NmZ191cGRhdGVfZG9uZTsK Pj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBfcGFuZWxfaW5mbyBmYWlsX3Nh ZmUgPSB7Cj4+ICsJLmhfYWN0aXZlID0gNjQwLAo+PiArCS52X2FjdGl2ZSA9IDQ4MCwKPj4gKwku aF9iYWNrX3BvcmNoID0gNDgsCj4+ICsJLmhfZnJvbnRfcG9yY2ggPSAxNiwKPj4gKwkuaF9zeW5j X3dpZHRoID0gOTYsCj4+ICsJLmhfYWN0aXZlX2xvdyA9IDAsCj4+ICsJLnZfYmFja19wb3JjaCA9 IDMzLAo+PiArCS52X2Zyb250X3BvcmNoID0gMTAsCj4+ICsJLnZfc3luY193aWR0aCA9IDIsCj4+ ICsJLnZfYWN0aXZlX2xvdyA9IDAsCj4+ICsJLmhfc2tldyA9IDAsCj4+ICsJLnJlZnJlc2hfcmF0 ZSA9IDYwLAo+PiArCS5waXhlbF9jbGtfa2h6ID0gMjUyMDAsCj4+ICsJLmJwcCA9IDI0LAo+PiAr fTsKPiAKPiBEcm9wIHRoaXMsIHVzZXJzcGFjZSBjYW4gYWRkIGEgbW9kZSBpZiBhcHByb3ByaWF0 ZQo+IApSZW1vdmVkIGZhaWxfc2FmZSBsb2dpYyBjb21wbGV0ZWx5IGluIFYyLgoKPj4gKwo+PiAr c3RhdGljIGludCBkcF9wYW5lbF9yZWFkX2RwY2Qoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCkK Pj4gK3sKPj4gKwlpbnQgcmxlbiwgcmMgPSAwOwo+PiArCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRl ICpwYW5lbDsKPj4gKwlzdHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmtfaW5mbzsKPj4gKwl1OCAqZHBj ZCwgbWFqb3IgPSAwLCBtaW5vciA9IDA7Cj4+ICsJdTMyIGRmcF9jb3VudCA9IDA7Cj4+ICsJdW5z aWduZWQgbG9uZyBjYXBzID0gRFBfTElOS19DQVBfRU5IQU5DRURfRlJBTUlORzsKPj4gKwo+PiAr CWlmICghZHBfcGFuZWwpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJ cmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGVuZDsKPj4gKwl9Cj4+ICsKPj4gKwlkcGNkID0gZHBf cGFuZWwtPmRwY2Q7Cj4+ICsKPj4gKwlwYW5lbCA9IGNvbnRhaW5lcl9vZihkcF9wYW5lbCwgc3Ry dWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKPj4gKwlsaW5rX2luZm8gPSAmZHBfcGFu ZWwtPmxpbmtfaW5mbzsKPj4gKwo+PiArCXJsZW4gPSBkcm1fZHBfZHBjZF9yZWFkKHBhbmVsLT5h dXgtPmRybV9hdXgsIERQX0RQQ0RfUkVWLAo+PiArCQlkcGNkLCAoRFBfUkVDRUlWRVJfQ0FQX1NJ WkUgKyAxKSk7Cj4+ICsJaWYgKHJsZW4gPCAoRFBfUkVDRUlWRVJfQ0FQX1NJWkUgKyAxKSkgewo+ PiArCQlwcl9lcnIoImRwY2QgcmVhZCBmYWlsZWQsIHJsZW49JWRcbiIsIHJsZW4pOwo+PiArCQly YyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZW5kOwo+PiArCX0KPj4gKwo+PiArCWxpbmtfaW5mby0+ cmV2aXNpb24gPSBkcF9wYW5lbC0+ZHBjZFtEUF9EUENEX1JFVl07Cj4+ICsKPj4gKwltYWpvciA9 IChsaW5rX2luZm8tPnJldmlzaW9uID4+IDQpICYgMHgwZjsKPj4gKwltaW5vciA9IGxpbmtfaW5m by0+cmV2aXNpb24gJiAweDBmOwo+PiArCXByX2RlYnVnKCJ2ZXJzaW9uOiAlZC4lZFxuIiwgbWFq b3IsIG1pbm9yKTsKPj4gKwo+PiArCWxpbmtfaW5mby0+cmF0ZSA9Cj4+ICsJCWRybV9kcF9id19j b2RlX3RvX2xpbmtfcmF0ZShkcF9wYW5lbC0+ZHBjZFtEUF9NQVhfTElOS19SQVRFXSk7Cj4+ICsJ cHJfZGVidWcoImxpbmtfcmF0ZT0lZFxuIiwgbGlua19pbmZvLT5yYXRlKTsKPj4gKwo+PiArCWxp bmtfaW5mby0+bnVtX2xhbmVzID0gZHBfcGFuZWwtPmRwY2RbRFBfTUFYX0xBTkVfQ09VTlRdICYK Pj4gKwkJCQlEUF9NQVhfTEFORV9DT1VOVF9NQVNLOwo+PiArCj4+ICsJcHJfZGVidWcoImxhbmVf Y291bnQ9JWRcbiIsIGxpbmtfaW5mby0+bnVtX2xhbmVzKTsKPj4gKwo+PiArCWlmIChkcm1fZHBf ZW5oYW5jZWRfZnJhbWVfY2FwKGRwY2QpKQo+PiArCQlsaW5rX2luZm8tPmNhcGFiaWxpdGllcyB8 PSBjYXBzOwo+IAo+IEFsbCBvZiB0aGUgbGlua19pbmZvIGluaXRpYWxpemF0aW9uIHNob3VsZCBi ZSBkb25lIGJ5IAo+IGRybV9kcF9saW5rX3Byb2JlKCkuCj4gCldpbGwgYWRkcmVzcyB0aGlzIGlu IFYzLgoKCj4+ICsKPj4gKwlkZnBfY291bnQgPSBkcGNkW0RQX0RPV05fU1RSRUFNX1BPUlRfQ09V TlRdICYKPj4gKwkJCQkJCURQX0RPV05fU1RSRUFNX1BPUlRfQ09VTlQ7Cj4gCj4gTW92ZSB0aGlz IGRvd24gdG8gd2hlcmUgaXQncyB1c2VkCj4gCkZpeGVkIGluIFYyLgoKPj4gKwo+PiArCWlmICgo ZHBjZFtEUF9ET1dOU1RSRUFNUE9SVF9QUkVTRU5UXSAmIERQX0RXTl9TVFJNX1BPUlRfUFJFU0VO VCkKPj4gKwkJJiYgKGRwY2RbRFBfRFBDRF9SRVZdID4gMHgxMCkpIHsKPj4gKwkJcmxlbiA9IGRy bV9kcF9kcGNkX3JlYWQocGFuZWwtPmF1eC0+ZHJtX2F1eCwKPj4gKwkJCURQX0RPV05TVFJFQU1f UE9SVF8wLCBkcF9wYW5lbC0+ZHNfcG9ydHMsCj4+ICsJCQlEUF9NQVhfRE9XTlNUUkVBTV9QT1JU Uyk7Cj4+ICsJCWlmIChybGVuIDwgRFBfTUFYX0RPV05TVFJFQU1fUE9SVFMpIHsKPj4gKwkJCXBy X2VycigiZHMgcG9ydCBzdGF0dXMgZmFpbGVkLCBybGVuPSVkXG4iLCBybGVuKTsKPj4gKwkJCXJj ID0gLUVJTlZBTDsKPj4gKwkJCWdvdG8gZW5kOwo+PiArCQl9Cj4+ICsJfQo+IAo+IFlvdSBkb24n dCB1c2UgZHNfcG9ydHMgYW55d2hlcmUsIHNvIHJlbW92ZSB0aGlzIGFuZCByZW1vdmUgZHNfcG9y dHMKPiAKRml4ZWQgaW4gVjIuCj4+ICsKPj4gKwlpZiAoZGZwX2NvdW50ID4gRFBfTUFYX0RTX1BP UlRfQ09VTlQpCj4+ICsJCXByX2RlYnVnKCJEUyBwb3J0IGNvdW50ICVkIGdyZWF0ZXIgdGhhdCBt YXggKCVkKSBzdXBwb3J0ZWRcbiIsCj4+ICsJCQlkZnBfY291bnQsIERQX01BWF9EU19QT1JUX0NP VU5UKTsKPiAKPiBTaG91bGQgdGhpcyBiZSBhbiBlcnJvcj8KPiAKPj4gKwo+PiArZW5kOgo+PiAr CXJldHVybiByYzsKPiAKPiBTYW1lIGRyaWxsIGFzIGJlZm9yZQo+IApGaXhlZCBpbiBWMi4KPj4g K30KPj4gKwo+PiArc3RhdGljIGludCBkcF9wYW5lbF9zZXRfZGVmYXVsdF9saW5rX3BhcmFtcyhz dHJ1Y3QgZHBfcGFuZWwgCj4+ICpkcF9wYW5lbCkKPj4gK3sKPiAKPiBMZXQncyBqdXN0IGZhaWwg aW5zdGVhZCBvZiBkb2luZyB0aGlzLgo+IApSZW1vdmVkIHRoaXMgZnVuYyBpbiBWMi4KCj4+ICsJ c3RydWN0IGRybV9kcF9saW5rICpsaW5rX2luZm87Cj4+ICsJY29uc3QgaW50IGRlZmF1bHRfYndf Y29kZSA9IDE2MjAwMDsKPj4gKwljb25zdCBpbnQgZGVmYXVsdF9udW1fbGFuZXMgPSAxOwo+PiAr Cj4+ICsJaWYgKCFkcF9wYW5lbCkgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+ PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsJbGlua19pbmZvID0gJmRwX3BhbmVsLT5s aW5rX2luZm87Cj4+ICsJbGlua19pbmZvLT5yYXRlID0gZGVmYXVsdF9id19jb2RlOwo+PiArCWxp bmtfaW5mby0+bnVtX2xhbmVzID0gZGVmYXVsdF9udW1fbGFuZXM7Cj4+ICsJcHJfZGVidWcoImxp bmtfcmF0ZT0lZCBudW1fbGFuZXM9JWRcbiIsCj4+ICsJCWxpbmtfaW5mby0+cmF0ZSwgbGlua19p bmZvLT5udW1fbGFuZXMpOwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGRwX3BhbmVsX3JlYWRfZWRpZChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAo+PiArCXN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4+ICt7Cj4+ICsJaW50IHJldHJ5X2NudCA9IDA7 Cj4+ICsJY29uc3QgaW50IG1heF9yZXRyeSA9IDEwOwo+PiArCXN0cnVjdCBkcF9wYW5lbF9wcml2 YXRlICpwYW5lbDsKPj4gKwo+PiArCWlmICghZHBfcGFuZWwpIHsKPj4gKwkJcHJfZXJyKCJpbnZh bGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJcGFu ZWwgPSBjb250YWluZXJfb2YoZHBfcGFuZWwsIHN0cnVjdCBkcF9wYW5lbF9wcml2YXRlLCBkcF9w YW5lbCk7Cj4+ICsKPj4gKwlkbyB7Cj4+ICsJCWtmcmVlKGRwX3BhbmVsLT5lZGlkKTsKPj4gKwkJ ZHBfcGFuZWwtPmVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLAo+PiArCQkJCQkgICAgICAm cGFuZWwtPmF1eC0+ZHJtX2F1eC0+ZGRjKTsKPj4gKwkJaWYgKCFkcF9wYW5lbC0+ZWRpZCkgewo+ PiArCQkJcHJfZXJyKCJFRElEIHJlYWQgZmFpbGVkXG4iKTsKPj4gKwkJCXJldHJ5X2NudCsrOwo+ PiArCQkJcGFuZWwtPmF1eC0+cmVjb25maWcocGFuZWwtPmF1eCk7Cj4+ICsJCQlwYW5lbC0+YXV4 X2NmZ191cGRhdGVfZG9uZSA9IHRydWU7Cj4+ICsJCX0gZWxzZSB7Cj4+ICsJCQlyZXR1cm4gMDsK Pj4gKwkJfQo+PiArCX0gd2hpbGUgKHJldHJ5X2NudCA8IG1heF9yZXRyeSk7Cj4gCj4gVGhlIGNv cmUgd2lsbCBkbyByZXRyeXMgd2hlbiBhdXggcmVhZHMgZmFpbCwgc28geW91IGRvbid0IG5lZWQg dG8uIFdpdGggCj4gdGhhdCwKPiB5b3UgY2FuIGp1c3QgcmVtb3ZlIHRoaXMgZnVuY3Rpb24gYW5k IGNhbGwgZHJtX2dldF9lZGlkIGluIAo+IHJlYWRfc2lua19jYXBzCj4gCldpbGwgYWRkcmVzcyB0 aGlzIGluIFYzLgoKPj4gKwo+PiArCXJldHVybiAtRUlOVkFMOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgaW50IGRwX3BhbmVsX3JlYWRfc2lua19jYXBzKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWws Cj4+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPj4gK3sKPj4gKwlpbnQgcmMg PSAwOwo+PiArCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbDsKPj4gKwo+PiArCWlmICgh ZHBfcGFuZWwgfHwgIWNvbm5lY3Rvcikgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIp Owo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlwYW5lbCA9IGNvbnRhaW5l cl9vZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKPj4gKwo+ PiArCXJjID0gZHBfcGFuZWxfcmVhZF9kcGNkKGRwX3BhbmVsKTsKPj4gKwlpZiAocmMgfHwgIWlz X2xpbmtfcmF0ZV92YWxpZChkcm1fZHBfbGlua19yYXRlX3RvX2J3X2NvZGUoCj4+ICsJCWRwX3Bh bmVsLT5saW5rX2luZm8ucmF0ZSkpIHx8ICFpc19sYW5lX2NvdW50X3ZhbGlkKAo+PiArCQlkcF9w YW5lbC0+bGlua19pbmZvLm51bV9sYW5lcykgfHwKPj4gKwkJKChkcm1fZHBfbGlua19yYXRlX3Rv X2J3X2NvZGUoZHBfcGFuZWwtPmxpbmtfaW5mby5yYXRlKSkgPgo+PiArCQlkcF9wYW5lbC0+bWF4 X2J3X2NvZGUpKSB7Cj4+ICsJCWlmICgocmMgPT0gLUVUSU1FRE9VVCkgfHwgKHJjID09IC1FTk9E RVYpKSB7Cj4+ICsJCQlwcl9lcnIoIkRQQ0QgcmVhZCBmYWlsZWQsIHJldHVybiBlYXJseVxuIik7 Cj4+ICsJCQlyZXR1cm4gcmM7Cj4+ICsJCX0KPj4gKwkJcHJfZXJyKCJwYW5lbCBkcGNkIHJlYWQg ZmFpbGVkL2luY29ycmVjdCwgc2V0IGRlZmF1bHQgcGFyYW1zXG4iKTsKPj4gKwkJZHBfcGFuZWxf c2V0X2RlZmF1bHRfbGlua19wYXJhbXMoZHBfcGFuZWwpOwo+PiArCX0KPiAKPiBTaW5jZSB0aGUg ZGVmYXVsdHMgYXJlIGdvaW5nIGF3YXksIHRoaXMgZ2V0cyBzaW1wbGVyIChhbmQgZXZlbiBzaW1w bGVyIAo+IGlmIHlvdQo+IHN0YXNoIGJ3X2NvZGUpOgo+IAo+IAlid19jb2RlID0gZHJtX2RwX2xp bmtfcmF0ZV90b19id19jb2RlKGRwX3BhbmVsLT5saW5rX2luZm8ucmF0ZSk7Cj4gCWlmIChyYyB8 fCAhaXNfbGlua19yYXRlX3ZhbGlkKGJ3X2NvZGUpIHx8Cj4gICAgICAgICAgICAgIWlzX2xhbmVf Y291bnRfdmFsaWQoZHBfcGFuZWwtPmxpbmtfaW5mby5udW1fbGFuZXMpIHx8Cj4gCSAgICBid19j b2RlID4gZHBfcGFuZWwtPm1heF9id19jb2RlKSB7Cj4gCQlwcl9lcnIoInJlYWRfZHBjZCBmYWls ZWQgJWRcbiIsIHJjKTsKPiAJCXJldHVybiByYzsKPiAJfQo+IApVcGRhdGVkIGluIFYyLgoKPj4g Kwo+PiArCXJjID0gZHBfcGFuZWxfcmVhZF9lZGlkKGRwX3BhbmVsLCBjb25uZWN0b3IpOwo+IAo+ IFdoeSByZWFkIHRoZSBlZGlkIHNvIGVhcmx5PyBDYW4ndCB5b3Ugd2FpdCB1bnRpbCBnZXRfbW9k ZXMgaXMgY2FsbGVkIAo+ICh5b3UnbGwKPiBoYXZlIHRvIHJlLXJlYWQgYW55d2F5cykuCj4gCldl IHdvbid0IGRvIHJlLXJlYWQgYWdhaW4gd2hlbiBnZXRfbW9kZXMgaXMgY2FsbGVkLgoKPj4gKwlp ZiAocmMpIHsKPj4gKwkJcHJfZXJyKCJwYW5lbCBlZGlkIHJlYWQgZmFpbGVkLCBzZXQgZmFpbHNh ZmUgbW9kZVxuIik7Cj4+ICsJCXJldHVybiByYzsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAocGFuZWwt PmF1eF9jZmdfdXBkYXRlX2RvbmUpIHsKPj4gKwkJcHJfZGVidWcoInJlYWQgRFBDRCB3aXRoIHVw ZGF0ZWQgQVVYIGNvbmZpZ1xuIik7Cj4+ICsJCWRwX3BhbmVsX3JlYWRfZHBjZChkcF9wYW5lbCk7 Cj4gCj4gQ2hlY2sgcmV0dXJuIHZhbHVlLiBTaG91bGQgeW91IGFsc28gY2hlY2sgdGhlIHJhdGUv bGFuZV9jb3VudCB2YWxpZGl0eQo+IGFnYWluIHRvbz8KPiAKRml4ZWQgaW4gVjIuCgo+PiArCQlw YW5lbC0+YXV4X2NmZ191cGRhdGVfZG9uZSA9IGZhbHNlOwo+IAo+IFNob3VsZCB5b3UgaGF2ZSBs b2NraW5nIGZvciBhdXhfY2ZnX3VwZGF0ZV9kb25lPwo+IApwYW5lbF9yZWFkX2VkaWQoKSBhbmQg YXV4X2NmZ191cGRhdGVfZG9uZSA9IGZhbHNlIGlzIGRvbmUgb25lIGFmdGVyIHRoZSAKb3RoZXIg aW4gdGhpcyBmdW5jdGlvbi4gSSBkb24ndCB0aGluawp3ZSBsb2NraW5nIGZvciB0aGlzLgoKPj4g Kwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHUzMiBkcF9wYW5l bF9nZXRfc3VwcG9ydGVkX2JwcChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAo+PiArCQl1MzIg bW9kZV9lZGlkX2JwcCwgdTMyIG1vZGVfcGNsa19raHopCj4+ICt7Cj4+ICsJc3RydWN0IGRybV9k cF9saW5rICpsaW5rX2luZm87Cj4+ICsJY29uc3QgdTMyIG1heF9zdXBwb3J0ZWRfYnBwID0gMzAs IG1pbl9zdXBwb3J0ZWRfYnBwID0gMTg7Cj4+ICsJdTMyIGJwcCA9IDAsIGRhdGFfcmF0ZV9raHog PSAwOwo+PiArCj4+ICsJYnBwID0gbWluX3QodTMyLCBtb2RlX2VkaWRfYnBwLCBtYXhfc3VwcG9y dGVkX2JwcCk7Cj4+ICsKPj4gKwlsaW5rX2luZm8gPSAmZHBfcGFuZWwtPmxpbmtfaW5mbzsKPj4g KwlkYXRhX3JhdGVfa2h6ID0gbGlua19pbmZvLT5udW1fbGFuZXMgKiBsaW5rX2luZm8tPnJhdGUg KiA4Owo+PiArCj4+ICsJd2hpbGUgKGJwcCA+IG1pbl9zdXBwb3J0ZWRfYnBwKSB7Cj4+ICsJCWlm IChtb2RlX3BjbGtfa2h6ICogYnBwIDw9IGRhdGFfcmF0ZV9raHopCj4+ICsJCQlicmVhazsKPj4g KwkJYnBwIC09IDY7Cj4gCj4gV2F0Y2ggb3V0IGZvciB1bmRlcmZsb3cgaGVyZS4KPiAKV2lsbCBh ZGQgY2hlY2sgaW4gVjMgcGF0Y2ggc2VyaWVzLgoKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gYnBw Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdTMyIGRwX3BhbmVsX2dldF9tb2RlX2JwcChzdHJ1Y3Qg ZHBfcGFuZWwgKmRwX3BhbmVsLAo+PiArCQl1MzIgbW9kZV9lZGlkX2JwcCwgdTMyIG1vZGVfcGNs a19raHopCj4+ICt7Cj4+ICsJc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOwo+PiArCXUz MiBicHAgPSBtb2RlX2VkaWRfYnBwOwo+PiArCj4+ICsJaWYgKCFkcF9wYW5lbCB8fCAhbW9kZV9l ZGlkX2JwcCB8fCAhbW9kZV9wY2xrX2toeikgewo+PiArCQlwcl9lcnIoImludmFsaWQgaW5wdXRc biIpOwo+PiArCQlyZXR1cm4gMDsKPj4gKwl9Cj4+ICsKPj4gKwlwYW5lbCA9IGNvbnRhaW5lcl9v ZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKPj4gKwo+PiAr CWlmIChkcF9wYW5lbC0+dmlkZW9fdGVzdCkKPj4gKwkJYnBwID0gZHBfbGlua19iaXRfZGVwdGhf dG9fYnBwKAo+PiArCQkJCXBhbmVsLT5saW5rLT50ZXN0X3ZpZGVvLnRlc3RfYml0X2RlcHRoKTsK Pj4gKwllbHNlCj4+ICsJCWJwcCA9IGRwX3BhbmVsX2dldF9zdXBwb3J0ZWRfYnBwKGRwX3BhbmVs LCBtb2RlX2VkaWRfYnBwLAo+PiArCQkJCW1vZGVfcGNsa19raHopOwo+PiArCj4+ICsJcmV0dXJu IGJwcDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfcGFuZWxfc2V0X3Rlc3RfbW9kZShz dHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWwsCj4+ICsJCXN0cnVjdCBkcF9kaXNwbGF5X21v ZGUgKm1vZGUpCj4+ICt7Cj4+ICsJc3RydWN0IGRwX3BhbmVsX2luZm8gKnBpbmZvID0gTlVMTDsK PiAKPiAKPiBBcyBtZW50aW9uZWQgZWFybGllciwgbm8gbmVlZCB0byBkdXBsaWNhdGUgZHJtX2Rp c3BsYXlfbW9kZSBpbnRvCj4gZHBfZGlzcGxheV9tb2RlLCBzYW1lIGdvZXMgZm9yIGRwX3BhbmVs X2luZm8sIHBsZWFzZSBqdXN0IHVzZSAKPiBkcm1fZGlzcGxheV9tb2RlLgo+IApGaXhlZCBpbiBW Mi4KCj4+ICsJc3RydWN0IGRwX2xpbmtfdGVzdF92aWRlbyAqdGVzdF9pbmZvID0gTlVMTDsKPj4g Kwo+PiArCWlmICghcGFuZWwpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Cj4+ ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlwaW5mbyA9ICZtb2RlLT50aW1pbmc7Cj4+ICsJ dGVzdF9pbmZvID0gJnBhbmVsLT5saW5rLT50ZXN0X3ZpZGVvOwo+PiArCj4+ICsJcGluZm8tPmhf YWN0aXZlID0gdGVzdF9pbmZvLT50ZXN0X2hfd2lkdGg7Cj4+ICsJcGluZm8tPmhfc3luY193aWR0 aCA9IHRlc3RfaW5mby0+dGVzdF9oc3luY193aWR0aDsKPj4gKwlwaW5mby0+aF9iYWNrX3BvcmNo ID0gdGVzdF9pbmZvLT50ZXN0X2hfc3RhcnQgLQo+PiArCQl0ZXN0X2luZm8tPnRlc3RfaHN5bmNf d2lkdGg7Cj4+ICsJcGluZm8tPmhfZnJvbnRfcG9yY2ggPSB0ZXN0X2luZm8tPnRlc3RfaF90b3Rh bCAtCj4+ICsJCSh0ZXN0X2luZm8tPnRlc3RfaF9zdGFydCArIHRlc3RfaW5mby0+dGVzdF9oX3dp ZHRoKTsKPj4gKwo+PiArCXBpbmZvLT52X2FjdGl2ZSA9IHRlc3RfaW5mby0+dGVzdF92X2hlaWdo dDsKPj4gKwlwaW5mby0+dl9zeW5jX3dpZHRoID0gdGVzdF9pbmZvLT50ZXN0X3ZzeW5jX3dpZHRo Owo+PiArCXBpbmZvLT52X2JhY2tfcG9yY2ggPSB0ZXN0X2luZm8tPnRlc3Rfdl9zdGFydCAtCj4+ ICsJCXRlc3RfaW5mby0+dGVzdF92c3luY193aWR0aDsKPj4gKwlwaW5mby0+dl9mcm9udF9wb3Jj aCA9IHRlc3RfaW5mby0+dGVzdF92X3RvdGFsIC0KPj4gKwkJKHRlc3RfaW5mby0+dGVzdF92X3N0 YXJ0ICsgdGVzdF9pbmZvLT50ZXN0X3ZfaGVpZ2h0KTsKPj4gKwo+PiArCXBpbmZvLT5icHAgPSBk cF9saW5rX2JpdF9kZXB0aF90b19icHAodGVzdF9pbmZvLT50ZXN0X2JpdF9kZXB0aCk7Cj4+ICsJ cGluZm8tPmhfYWN0aXZlX2xvdyA9IHRlc3RfaW5mby0+dGVzdF9oc3luY19wb2w7Cj4+ICsJcGlu Zm8tPnZfYWN0aXZlX2xvdyA9IHRlc3RfaW5mby0+dGVzdF92c3luY19wb2w7Cj4+ICsKPj4gKwlw aW5mby0+cmVmcmVzaF9yYXRlID0gdGVzdF9pbmZvLT50ZXN0X3JyX247Cj4+ICsJcGluZm8tPnBp eGVsX2Nsa19raHogPSB0ZXN0X2luZm8tPnRlc3RfaF90b3RhbCAqCj4+ICsJCXRlc3RfaW5mby0+ dGVzdF92X3RvdGFsICogcGluZm8tPnJlZnJlc2hfcmF0ZTsKPj4gKwo+PiArCWlmICh0ZXN0X2lu Zm8tPnRlc3RfcnJfZCA9PSAwKQo+PiArCQlwaW5mby0+cGl4ZWxfY2xrX2toeiAvPSAxMDAwOwo+ PiArCWVsc2UKPj4gKwkJcGluZm8tPnBpeGVsX2Nsa19raHogLz0gMTAwMTsKPj4gKwo+PiArCWlm ICh0ZXN0X2luZm8tPnRlc3RfaF93aWR0aCA9PSA2NDApCj4+ICsJCXBpbmZvLT5waXhlbF9jbGtf a2h6ID0gMjUxNzA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcGFuZWxfdXBkYXRlX21v ZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4+ICsJc3RydWN0IGVkaWQgKmVk aWQpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwo+PiArCXByX2RlYnVnKCIlcyArIiwgX19m dW5jX18pOwo+IAo+IHJlbW92ZQo+IApGaXhlZCBpbiBWMi4KCj4gT2ssIHNvIHRoaXMgaXMgd2hl cmUgeW91IHNob3VsZCBiZSByZWFkaW5nIGVkaWQuCj4gCj4+ICsJaWYgKGVkaWQpIHsKPj4gKwkJ ZHJtX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsCj4+ICsJCQllZGlk KTsKPiAKPiBKb2luIG9uIG9uZSBsaW5lIGFuZCBjaGVjayByZXR1cm4gdmFsdWUKPiAKRml4ZWQg aW4gdjIuCgo+PiArCQlyYyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwo+ PiArCQlwcl9kZWJ1ZygiJXMgLSIsIF9fZnVuY19fKTsKPj4gKwkJcmV0dXJuIHJjOwo+PiArCX0K Pj4gKwo+PiArCWRybV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBO VUxMKTsKPiAKPiBDaGVjayByZXR1cm4gdmFsdWUKPiAKRml4ZWQgaW4gVjIuCgo+PiArCXByX2Rl YnVnKCIlcyBudWxsIGVkaWQgLSIsIF9fZnVuY19fKTsKPj4gKwlyZXR1cm4gcmM7Cj4gCj4gVGhp cyBpcyBhbHdheXMgMAo+IApGaXhlZCBpdCBpbiBWMi4KCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgZHBfcGFuZWxfZ2V0X21vZGVzKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsCj4+ICsJc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRwX2Rpc3BsYXlfbW9kZSAqbW9k ZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7Cj4+ICsKPj4gKwlp ZiAoIWRwX3BhbmVsKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJl dHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3Bh bmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOwo+PiArCj4+ICsJaWYgKGRw X3BhbmVsLT52aWRlb190ZXN0KSB7Cj4+ICsJCWRwX3BhbmVsX3NldF90ZXN0X21vZGUocGFuZWws IG1vZGUpOwo+PiArCQlyZXR1cm4gMTsKPj4gKwl9IGVsc2UgaWYgKGRwX3BhbmVsLT5lZGlkKSB7 Cj4+ICsJICByZXR1cm4gZHBfcGFuZWxfdXBkYXRlX21vZGVzKGNvbm5lY3RvciwgZHBfcGFuZWwt PmVkaWQpOwo+IAo+IEluZGVudGF0aW9uIGlzIHdyb25nCj4gCkZpeGVkIGluIHYyLgoKPj4gKwl9 Cj4+ICsKPj4gKwkvKiBmYWlsLXNhZmUgbW9kZSAqLwo+PiArCW1lbWNweSgmbW9kZS0+dGltaW5n LCAmZmFpbF9zYWZlLAo+PiArCQlzaXplb2YoZmFpbF9zYWZlKSk7Cj4+ICsJcmV0dXJuIDE7Cj4g Cj4gRGVsZXRlIGZhaWwgc2FmZSBhbmQgcmV0dXJuIDA7Cj4gClJlbW92ZWQgZmFpbF9zYWZlIGlu IFYyLgoKPj4gK30KPj4gKwo+PiArc3RhdGljIHU4IGRwX3BhbmVsX2dldF9lZGlkX2NoZWNrc3Vt KHN0cnVjdCBlZGlkICplZGlkKQo+PiArewo+PiArCXN0cnVjdCBlZGlkICpsYXN0X2Jsb2NrID0g TlVMTDsKPj4gKwl1OCAqcmF3X2VkaWQgPSBOVUxMOwo+IAo+IE5vIG5lZWQgdG8gaW5pdGlhbGl6 ZSB0aGVzZS4KPiAKRml4ZWQgaW4gVjIuCgo+PiArCj4+ICsJaWYgKCFlZGlkKSB7Cj4+ICsJCXBy X2VycigiaW52YWxpZCBlZGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuIDA7Cj4+ICsJfQo+PiAr Cj4+ICsJcmF3X2VkaWQgPSAodTggKillZGlkOwo+PiArCXJhd19lZGlkICs9IChlZGlkLT5leHRl bnNpb25zICogRURJRF9MRU5HVEgpOwo+PiArCWxhc3RfYmxvY2sgPSAoc3RydWN0IGVkaWQgKily YXdfZWRpZDsKPj4gKwo+PiArCWlmIChsYXN0X2Jsb2NrKQo+IAo+IEkgZG91YnQgbGFzdF9ibG9j ayB3aWxsIGV2ZXIgYmUgTlVMTCwgc28gdGhpcyBjaGVjayBpcyBraW5kIG9mIAo+IHBvaW50bGVz cy4KPiBQZXJoYXBzIGNhbGwgZHJtX2VkaWRfYmxvY2tfdmFsaWQoKSBpbnN0ZWFkLgo+IApBZGRy ZXNzZWQgaW4gVjIuCgo+PiArCQlyZXR1cm4gbGFzdF9ibG9jay0+Y2hlY2tzdW07Cj4+ICsKPj4g Kwlwcl9lcnIoIkludmFsaWQgYmxvY2ssIG5vIGNoZWNrc3VtXG4iKTsKPj4gKwlyZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfcGFuZWxfaGFuZGxlX3NpbmtfcmVxdWVzdChz dHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKQo+PiArewo+PiArCXN0cnVjdCBkcF9wYW5lbF9wcml2 YXRlICpwYW5lbDsKPj4gKwo+PiArCWlmICghZHBfcGFuZWwpIHsKPj4gKwkJcHJfZXJyKCJpbnZh bGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCXBhbmVsID0gY29u dGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOwo+ PiArCj4+ICsJaWYgKHBhbmVsLT5saW5rLT5zaW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJTktfRURJ RF9SRUFEKSB7Cj4+ICsJCXU4IGNoZWNrc3VtID0gZHBfcGFuZWxfZ2V0X2VkaWRfY2hlY2tzdW0o ZHBfcGFuZWwtPmVkaWQpOwo+PiArCj4+ICsJCXBhbmVsLT5saW5rLT5zZW5kX2VkaWRfY2hlY2tz dW0ocGFuZWwtPmxpbmssIGNoZWNrc3VtKTsKPj4gKwkJcGFuZWwtPmxpbmstPnNlbmRfdGVzdF9y ZXNwb25zZShwYW5lbC0+bGluayk7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBk cF9wYW5lbF90cGdfY29uZmlnKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsIGJvb2wgCj4+IGVu YWJsZSkKPj4gK3sKPj4gKwl1MzIgaHN5bmNfc3RhcnRfeCwgaHN5bmNfZW5kX3g7Cj4+ICsJc3Ry dWN0IGRwX2NhdGFsb2dfcGFuZWwgKmNhdGFsb2c7Cj4+ICsJc3RydWN0IGRwX3BhbmVsX3ByaXZh dGUgKnBhbmVsOwo+PiArCXN0cnVjdCBkcF9wYW5lbF9pbmZvICpwaW5mbzsKPj4gKwo+PiArCWlm ICghZHBfcGFuZWwpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmV0 dXJuOwo+PiArCX0KPj4gKwo+PiArCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1 Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOwo+PiArCWNhdGFsb2cgPSBwYW5lbC0+Y2F0 YWxvZzsKPj4gKwlwaW5mbyA9ICZwYW5lbC0+ZHBfcGFuZWwucGluZm87Cj4+ICsKPj4gKwlpZiAo IXBhbmVsLT5wYW5lbF9vbikgewo+PiArCQlwcl9kZWJ1ZygiRFAgcGFuZWwgbm90IGVuYWJsZWQs IGhhbmRsZSBUUEcgb24gbmV4dCBwYW5lbCBvblxuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ ICsKPj4gKwlpZiAoIWVuYWJsZSkgewo+PiArCQlwYW5lbC0+Y2F0YWxvZy0+dHBnX2NvbmZpZyhj YXRhbG9nLCBmYWxzZSk7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBUUEcgY29u ZmlnICovCj4+ICsJY2F0YWxvZy0+aHN5bmNfcGVyaW9kID0gcGluZm8tPmhfc3luY193aWR0aCAr IHBpbmZvLT5oX2JhY2tfcG9yY2ggKwo+PiArCQkJcGluZm8tPmhfYWN0aXZlICsgcGluZm8tPmhf ZnJvbnRfcG9yY2g7Cj4+ICsJY2F0YWxvZy0+dnN5bmNfcGVyaW9kID0gcGluZm8tPnZfc3luY193 aWR0aCArIHBpbmZvLT52X2JhY2tfcG9yY2ggKwo+PiArCQkJcGluZm8tPnZfYWN0aXZlICsgcGlu Zm8tPnZfZnJvbnRfcG9yY2g7Cj4+ICsKPj4gKwljYXRhbG9nLT5kaXNwbGF5X3Zfc3RhcnQgPSAo KHBpbmZvLT52X3N5bmNfd2lkdGggKwo+PiArCQkJcGluZm8tPnZfYmFja19wb3JjaCkgKiBjYXRh bG9nLT5oc3luY19wZXJpb2QpOwo+PiArCWNhdGFsb2ctPmRpc3BsYXlfdl9lbmQgPSAoKGNhdGFs b2ctPnZzeW5jX3BlcmlvZCAtCj4+ICsJCQlwaW5mby0+dl9mcm9udF9wb3JjaCkgKiBjYXRhbG9n LT5oc3luY19wZXJpb2QpIC0gMTsKPj4gKwo+PiArCWNhdGFsb2ctPmRpc3BsYXlfdl9zdGFydCAr PSBwaW5mby0+aF9zeW5jX3dpZHRoICsgCj4+IHBpbmZvLT5oX2JhY2tfcG9yY2g7Cj4+ICsJY2F0 YWxvZy0+ZGlzcGxheV92X2VuZCAtPSBwaW5mby0+aF9mcm9udF9wb3JjaDsKPj4gKwo+PiArCWhz eW5jX3N0YXJ0X3ggPSBwaW5mby0+aF9iYWNrX3BvcmNoICsgcGluZm8tPmhfc3luY193aWR0aDsK Pj4gKwloc3luY19lbmRfeCA9IGNhdGFsb2ctPmhzeW5jX3BlcmlvZCAtIHBpbmZvLT5oX2Zyb250 X3BvcmNoIC0gMTsKPj4gKwo+PiArCWNhdGFsb2ctPnZfc3luY193aWR0aCA9IHBpbmZvLT52X3N5 bmNfd2lkdGg7Cj4+ICsKPj4gKwljYXRhbG9nLT5oc3luY19jdGwgPSAoY2F0YWxvZy0+aHN5bmNf cGVyaW9kIDw8IDE2KSB8Cj4+ICsJCQlwaW5mby0+aF9zeW5jX3dpZHRoOwo+PiArCWNhdGFsb2ct PmRpc3BsYXlfaGN0bCA9IChoc3luY19lbmRfeCA8PCAxNikgfCBoc3luY19zdGFydF94Owo+IAo+ IE1vcmUgbW9kZSB0aW1pbmcgcGFyYW1ldGVycyB0byBkZWxldGUhCj4gCkZpeGVkIGluIFYyLgoK Pj4gKwo+PiArCXByX2VycigiJXM6IGNhbGxpbmcgY2F0YWxvZyB0cGdfY29uZmlnXG4iLCBfX2Z1 bmNfXyk7Cj4+ICsJcGFuZWwtPmNhdGFsb2ctPnRwZ19jb25maWcoY2F0YWxvZywgdHJ1ZSk7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcGFuZWxfdGltaW5nX2NmZyhzdHJ1Y3QgZHBfcGFu ZWwgKmRwX3BhbmVsKQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJdTMyIGRhdGEsIHRvdGFs X3ZlciwgdG90YWxfaG9yOwo+PiArCXN0cnVjdCBkcF9jYXRhbG9nX3BhbmVsICpjYXRhbG9nOwo+ PiArCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbDsKPj4gKwlzdHJ1Y3QgZHBfcGFuZWxf aW5mbyAqcGluZm87Cj4+ICsKPj4gKwlpZiAoIWRwX3BhbmVsKSB7Cj4+ICsJCXByX2VycigiaW52 YWxpZCBpbnB1dFxuIik7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBlbmQ7Cj4+ICsJ fQo+PiArCj4gVGhpcyBpcyBjYWxsZWQgZnJvbSAyIGRpZmZlcmVudCBwbGFjZXMsIGRvIHlvdSBu ZWVkIGxvY2tpbmc/Cj4gClRoaXMgaXMgY2FsbGVkIG9ubHkgZnJvbSBkcF9jdHJsLmMgZmlsZSAo Q2FsbGVkIGZyb20gb25lIHBsYWNlIG9ubHkpCgo+PiArCXBhbmVsID0gY29udGFpbmVyX29mKGRw X3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSwgZHBfcGFuZWwpOwo+PiArCWNhdGFsb2cg PSBwYW5lbC0+Y2F0YWxvZzsKPj4gKwlwaW5mbyA9ICZwYW5lbC0+ZHBfcGFuZWwucGluZm87Cj4+ ICsKPj4gKwlwcl9kZWJ1Zygid2lkdGg9JWQgaHBvcmNoPSAlZCAlZCAlZFxuIiwKPj4gKwkJcGlu Zm8tPmhfYWN0aXZlLCBwaW5mby0+aF9iYWNrX3BvcmNoLAo+PiArCQlwaW5mby0+aF9mcm9udF9w b3JjaCwgcGluZm8tPmhfc3luY193aWR0aCk7Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiaGVpZ2h0PSVk IHZwb3JjaD0gJWQgJWQgJWRcbiIsCj4+ICsJCXBpbmZvLT52X2FjdGl2ZSwgcGluZm8tPnZfYmFj a19wb3JjaCwKPj4gKwkJcGluZm8tPnZfZnJvbnRfcG9yY2gsIHBpbmZvLT52X3N5bmNfd2lkdGgp Owo+PiArCj4+ICsJdG90YWxfaG9yID0gcGluZm8tPmhfYWN0aXZlICsgcGluZm8tPmhfYmFja19w b3JjaCArCj4+ICsJCXBpbmZvLT5oX2Zyb250X3BvcmNoICsgcGluZm8tPmhfc3luY193aWR0aDsK Pj4gKwo+PiArCXRvdGFsX3ZlciA9IHBpbmZvLT52X2FjdGl2ZSArIHBpbmZvLT52X2JhY2tfcG9y Y2ggKwo+PiArCQkJcGluZm8tPnZfZnJvbnRfcG9yY2ggKyBwaW5mby0+dl9zeW5jX3dpZHRoOwo+ PiArCj4+ICsJZGF0YSA9IHRvdGFsX3ZlcjsKPj4gKwlkYXRhIDw8PSAxNjsKPj4gKwlkYXRhIHw9 IHRvdGFsX2hvcjsKPj4gKwo+PiArCWNhdGFsb2ctPnRvdGFsID0gZGF0YTsKPj4gKwo+PiArCWRh dGEgPSAocGluZm8tPnZfYmFja19wb3JjaCArIHBpbmZvLT52X3N5bmNfd2lkdGgpOwo+PiArCWRh dGEgPDw9IDE2Owo+PiArCWRhdGEgfD0gKHBpbmZvLT5oX2JhY2tfcG9yY2ggKyBwaW5mby0+aF9z eW5jX3dpZHRoKTsKPj4gKwo+PiArCWNhdGFsb2ctPnN5bmNfc3RhcnQgPSBkYXRhOwo+PiArCj4+ ICsJZGF0YSA9IHBpbmZvLT52X3N5bmNfd2lkdGg7Cj4+ICsJZGF0YSA8PD0gMTY7Cj4+ICsJZGF0 YSB8PSAocGluZm8tPnZfYWN0aXZlX2xvdyA8PCAzMSk7Cj4+ICsJZGF0YSB8PSBwaW5mby0+aF9z eW5jX3dpZHRoOwo+PiArCWRhdGEgfD0gKHBpbmZvLT5oX2FjdGl2ZV9sb3cgPDwgMTUpOwo+PiAr Cj4+ICsJY2F0YWxvZy0+d2lkdGhfYmxhbmtpbmcgPSBkYXRhOwo+PiArCj4+ICsJZGF0YSA9IHBp bmZvLT52X2FjdGl2ZTsKPj4gKwlkYXRhIDw8PSAxNjsKPj4gKwlkYXRhIHw9IHBpbmZvLT5oX2Fj dGl2ZTsKPj4gKwo+PiArCWNhdGFsb2ctPmRwX2FjdGl2ZSA9IGRhdGE7Cj4+ICsKPj4gKwlwYW5l bC0+Y2F0YWxvZy0+dGltaW5nX2NmZyhjYXRhbG9nKTsKPj4gKwlwYW5lbC0+cGFuZWxfb24gPSB0 cnVlOwo+IAo+IEFnYWluLCBhbGwgb2YgdGhpcyBzaG91bGQgYmUgZGVyaXZlZCBmcm9tIGEgZHJt X2Rpc3BsYXlfbW9kZSBhdCB0aGUgCj4gcG9pbnQgd2hlcmUKPiBpdCBpcyBjb21taXR0ZWQgdG8g aGFyZHdhcmUuIE5vIG5lZWQgdG8gc3RvcmUgaXQgaW4gYW5vdGhlciBmb3JtIGluIHRoZSAKPiBp bnRlcmltCj4gCkZpeGVkIGluIHYyLgoKPiAKPj4gK2VuZDoKPj4gKwlyZXR1cm4gcmM7Cj4gCj4g UmVtb3ZlIGVuZC9yYyBhbmQgcmV0dXJuIGRpcmVjdGx5Cj4gCkZpeGVkIGluIFYyLgoKPj4gK30K Pj4gKwo+PiArc3RhdGljIGludCBkcF9wYW5lbF9pbml0X3BhbmVsX2luZm8oc3RydWN0IGRwX3Bh bmVsICpkcF9wYW5lbCkKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVjdCBkcF9wYW5l bF9pbmZvICpwaW5mbzsKPj4gKwo+PiArCWlmICghZHBfcGFuZWwpIHsKPj4gKwkJcHJfZXJyKCJp bnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGVuZDsKPj4g Kwl9Cj4+ICsKPj4gKwlwaW5mbyA9ICZkcF9wYW5lbC0+cGluZm87Cj4+ICsKPj4gKwkvKgo+PiAr CSAqIHByaW50IHJlc29sdXRpb24gaW5mbyBhcyB0aGlzIGlzIGEgcmVzdWx0Cj4+ICsJICogb2Yg dXNlciBpbml0aWF0ZWQgYWN0aW9uIG9mIGNhYmxlIGNvbm5lY3Rpb24KPj4gKwkgKi8KPj4gKwlw cl9pbmZvKCJTRVQgTkVXIFJFU09MVVRJT046XG4iKTsKPj4gKwlwcl9pbmZvKCIlZHglZEAlZGZw c1xuIiwgcGluZm8tPmhfYWN0aXZlLAo+PiArCQlwaW5mby0+dl9hY3RpdmUsIHBpbmZvLT5yZWZy ZXNoX3JhdGUpOwo+PiArCXByX2luZm8oImhfcG9yY2hlcyhiYWNrfGZyb250fHdpZHRoKSA9ICgl ZHwlZHwlZClcbiIsCj4+ICsJCQlwaW5mby0+aF9iYWNrX3BvcmNoLAo+PiArCQkJcGluZm8tPmhf ZnJvbnRfcG9yY2gsCj4+ICsJCQlwaW5mby0+aF9zeW5jX3dpZHRoKTsKPj4gKwlwcl9pbmZvKCJ2 X3BvcmNoZXMoYmFja3xmcm9udHx3aWR0aCkgPSAoJWR8JWR8JWQpXG4iLAo+PiArCQkJcGluZm8t PnZfYmFja19wb3JjaCwKPj4gKwkJCXBpbmZvLT52X2Zyb250X3BvcmNoLAo+PiArCQkJcGluZm8t PnZfc3luY193aWR0aCk7Cj4+ICsJcHJfaW5mbygicGl4ZWwgY2xvY2sgKEtIeik9KCVkKVxuIiwg cGluZm8tPnBpeGVsX2Nsa19raHopOwo+PiArCXByX2luZm8oImJwcCA9ICVkXG4iLCBwaW5mby0+ YnBwKTsKPj4gKwlwcl9pbmZvKCJhY3RpdmUgbG93IChofHYpPSglZHwlZClcbiIsIHBpbmZvLT5o X2FjdGl2ZV9sb3csCj4+ICsJCXBpbmZvLT52X2FjdGl2ZV9sb3cpOwo+PiArCj4+ICsJcGluZm8t PmJwcCA9IG1heF90KHUzMiwgMTgsIG1pbl90KHUzMiwgcGluZm8tPmJwcCwgMzApKTsKPj4gKwlw cl9pbmZvKCJ1cGRhdGVkIGJwcCA9ICVkXG4iLCBwaW5mby0+YnBwKTsKPiAKPiAKPiBObyBpbmZv IGxldmVsIGxvZ3MsIHBsZWFzZS4KPiAKQ2hhbmdlZCB0aGVtIHRvIERSTV9ERUJVR19EUCBpbiBW Mi4KCj4+ICtlbmQ6Cj4+ICsJcmV0dXJuIHJjOwo+IAo+IFJlbW92ZSBlbmQvcmMgYW5kIHJldHVy biBkaXJlY3RseQo+IApGaXhlZCBpbiBWMi4KCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1MzIgZHBf cGFuZWxfZ2V0X21pbl9yZXFfbGlua19yYXRlKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCj4+ ICt7Cj4+ICsJY29uc3QgdTMyIGVuY29kaW5nX2ZhY3R4MTAgPSA4Owo+PiArCXUzMiBtaW5fbGlu a19yYXRlX2toeiA9IDAsIGxhbmVfY250Owo+PiArCXN0cnVjdCBkcF9wYW5lbF9pbmZvICpwaW5m bzsKPj4gKwo+PiArCWlmICghZHBfcGFuZWwpIHsKPiAKPiBUaGUgb25seSB3YXkgdG8gY2FsbCB0 aGlzIGZ1bmN0aW9uIGlzIHRocm91Z2ggYSBkcF9wYW5lbCBjYWxsYmFjaywgYW5kIAo+IHlldCB3 ZQo+IGNoZWNrIGlmIGRwX3BhbmVsIGlzIE5VTEwgOikKPiAKPiBUaGUgc2FtZSBpcyB0cnVlIGZv ciBtb3N0IGZ1bmN0aW9ucyBpbiB0aGlzIHBhdGNoLiBUaGluZ3Mgd2lsbCBiZSBhIGxvdCAKPiBz aW1wbGVyCj4gd2hlbiBhbGwgb2YgdGhlc2UgYXJlIHJlbW92ZWQuIFRoaXMgZnVuY3Rpb24gd2ls bCBubyBsb25nZXIgaGF2ZSBhbiAKPiBlcnJvciBwYXRoCj4gYW5kIGxhbmVfY250L3BpbmZvIGNh biBiZSBpbml0aWFsaXplZCBkaXJlY3RseSBhYm92ZS4KPiAKPiAKRml4ZWQgaW4gdjIuCgo+PiAr CQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlnb3RvIGVuZDsKPj4gKwl9Cj4+ICsK Pj4gKwlsYW5lX2NudCA9IGRwX3BhbmVsLT5saW5rX2luZm8ubnVtX2xhbmVzOwo+PiArCXBpbmZv ID0gJmRwX3BhbmVsLT5waW5mbzsKPj4gKwo+PiArCS8qIG51bV9sYW5lcyAqIGxhbmVfY291bnQg KiA4ID49IHBjbGsgKiBicHAgKiAxMCAqLwo+PiArCW1pbl9saW5rX3JhdGVfa2h6ID0gcGluZm8t PnBpeGVsX2Nsa19raHogLwo+PiArCQkJCShsYW5lX2NudCAqIGVuY29kaW5nX2ZhY3R4MTApOwo+ PiArCW1pbl9saW5rX3JhdGVfa2h6ICo9IHBpbmZvLT5icHA7Cj4+ICsKPj4gKwlwcl9kZWJ1Zygi bWluIGxjbGsgcmVxPSVkIGtoeiBmb3IgcGNsaz0lZCBraHosIGxhbmVzPSVkLCBicHA9JWRcbiIs Cj4+ICsJCW1pbl9saW5rX3JhdGVfa2h6LCBwaW5mby0+cGl4ZWxfY2xrX2toeiwgbGFuZV9jbnQs Cj4+ICsJCXBpbmZvLT5icHApOwo+PiArZW5kOgo+PiArCXJldHVybiBtaW5fbGlua19yYXRlX2to ejsKPiAKPiBSZW1vdmUgZW5kIGFuZCByZXR1cm4gZGlyZWN0bHkgYWJvdmUKPiAKPj4gK30KPj4g Kwo+PiArc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbF9nZXQoc3RydWN0IGRwX3BhbmVsX2luICpp bikKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpw YW5lbDsKPj4gKwlzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsOwo+PiArCj4+ICsJaWYgKCFpbi0+ ZGV2IHx8ICFpbi0+Y2F0YWxvZyB8fCAhaW4tPmF1eCB8fCAhaW4tPmxpbmspIHsKPj4gKwkJcHJf ZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gKwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGVy cm9yOwo+PiArCX0KPj4gKwo+PiArCXBhbmVsID0gZGV2bV9remFsbG9jKGluLT5kZXYsIHNpemVv ZigqcGFuZWwpLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIXBhbmVsKSB7Cj4+ICsJCXJjID0gLUVO T01FTTsKPj4gKwkJZ290byBlcnJvcjsKPj4gKwl9Cj4+ICsKPj4gKwlwYW5lbC0+ZGV2ID0gaW4t PmRldjsKPj4gKwlwYW5lbC0+YXV4ID0gaW4tPmF1eDsKPj4gKwlwYW5lbC0+Y2F0YWxvZyA9IGlu LT5jYXRhbG9nOwo+PiArCXBhbmVsLT5saW5rID0gaW4tPmxpbms7Cj4+ICsKPj4gKwlkcF9wYW5l bCA9ICZwYW5lbC0+ZHBfcGFuZWw7Cj4+ICsJZHBfcGFuZWwtPm1heF9id19jb2RlID0gRFBfTElO S19CV184XzE7Cj4+ICsJcGFuZWwtPmF1eF9jZmdfdXBkYXRlX2RvbmUgPSBmYWxzZTsKPj4gKwo+ PiArCWRwX3BhbmVsLT5pbml0X2luZm8gPSBkcF9wYW5lbF9pbml0X3BhbmVsX2luZm87Cj4+ICsJ ZHBfcGFuZWwtPnRpbWluZ19jZmcgPSBkcF9wYW5lbF90aW1pbmdfY2ZnOwo+PiArCWRwX3BhbmVs LT5yZWFkX3NpbmtfY2FwcyA9IGRwX3BhbmVsX3JlYWRfc2lua19jYXBzOwo+PiArCWRwX3BhbmVs LT5nZXRfbWluX3JlcV9saW5rX3JhdGUgPSBkcF9wYW5lbF9nZXRfbWluX3JlcV9saW5rX3JhdGU7 Cj4+ICsJZHBfcGFuZWwtPmdldF9tb2RlX2JwcCA9IGRwX3BhbmVsX2dldF9tb2RlX2JwcDsKPj4g KwlkcF9wYW5lbC0+Z2V0X21vZGVzID0gZHBfcGFuZWxfZ2V0X21vZGVzOwo+PiArCWRwX3BhbmVs LT5oYW5kbGVfc2lua19yZXF1ZXN0ID0gZHBfcGFuZWxfaGFuZGxlX3NpbmtfcmVxdWVzdDsKPj4g KwlkcF9wYW5lbC0+dHBnX2NvbmZpZyA9IGRwX3BhbmVsX3RwZ19jb25maWc7Cj4+ICsKPj4gKwly ZXR1cm4gZHBfcGFuZWw7Cj4+ICtlcnJvcjoKPj4gKwlyZXR1cm4gRVJSX1BUUihyYyk7Cj4+ICt9 Cj4+ICsKPj4gK3ZvaWQgZHBfcGFuZWxfcHV0KHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCj4+ ICt7Cj4+ICsJc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUgKnBhbmVsOwo+PiArCj4+ICsJaWYgKCFk cF9wYW5lbCkKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJcGFuZWwgPSBjb250YWluZXJfb2YoZHBf cGFuZWwsIHN0cnVjdCBkcF9wYW5lbF9wcml2YXRlLCBkcF9wYW5lbCk7Cj4+ICsKPj4gKwlrZnJl ZShkcF9wYW5lbC0+ZWRpZCk7Cj4+ICsJZHBfcGFuZWwtPmVkaWQgPSBOVUxMOwo+PiArCWRldm1f a2ZyZWUocGFuZWwtPmRldiwgcGFuZWwpOwo+PiArfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9wYW5lbC5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf cGFuZWwuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi5iZjgwMmRm Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5l bC5oCj4+IEBAIC0wLDAgKzEsMTIxIEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDEy LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIAo+PiByZXNlcnZlZC4KPj4g KyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIAo+PiBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+PiArICogb25seSB2 ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+ ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCj4+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+PiArICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKi8KPj4g Kwo+PiArI2lmbmRlZiBfRFBfUEFORUxfSF8KPj4gKyNkZWZpbmUgX0RQX1BBTkVMX0hfCj4+ICsK Pj4gKyNpbmNsdWRlIDxkcm0vbXNtX2RybS5oPgo+PiArCj4+ICsjaW5jbHVkZSAiZHBfYXV4Lmgi Cj4+ICsjaW5jbHVkZSAiZHBfbGluay5oIgo+PiArI2luY2x1ZGUgImRwX2V4dGNvbi5oIgo+PiAr Cj4+ICtzdHJ1Y3QgZWRpZDsKPj4gKwo+PiArZW51bSBkcF9sYW5lX2NvdW50IHsKPj4gKwlEUF9M QU5FX0NPVU5UXzEJPSAxLAo+PiArCURQX0xBTkVfQ09VTlRfMgk9IDIsCj4+ICsJRFBfTEFORV9D T1VOVF80CT0gNCwKPj4gK307Cj4gCj4gWW91IGRvbid0IG5lZWQgYW4gZW51bSBmb3IgdGhpcywg dGhlIHZhbHVlIGNvbWluZyBmcm9tIGRwY2QgaXMganVzdCBhbgo+IGludGVnZXIgYW5kCj4gY2Fu IGJlIHVzZWQgYXMgc3VjaC4KPiAKUmVtb3ZlZCBpbiB2Mi4KCj4+ICsKPj4gKyNkZWZpbmUgRFBf TUFYX0RPV05TVFJFQU1fUE9SVFMgMHgxMAo+PiArCj4+ICtzdHJ1Y3QgZHBfcGFuZWxfaW5mbyB7 Cj4+ICsJdTMyIGhfYWN0aXZlOwo+PiArCXUzMiB2X2FjdGl2ZTsKPj4gKwl1MzIgaF9iYWNrX3Bv cmNoOwo+PiArCXUzMiBoX2Zyb250X3BvcmNoOwo+PiArCXUzMiBoX3N5bmNfd2lkdGg7Cj4+ICsJ dTMyIGhfYWN0aXZlX2xvdzsKPj4gKwl1MzIgdl9iYWNrX3BvcmNoOwo+PiArCXUzMiB2X2Zyb250 X3BvcmNoOwo+PiArCXUzMiB2X3N5bmNfd2lkdGg7Cj4+ICsJdTMyIHZfYWN0aXZlX2xvdzsKPj4g Kwl1MzIgaF9za2V3Owo+PiArCXUzMiByZWZyZXNoX3JhdGU7Cj4+ICsJdTMyIHBpeGVsX2Nsa19r aHo7Cj4+ICsJdTMyIGJwcDsKPj4gK307Cj4gCj4gRHJvcCB0aGlzIHN0cnVjdCBhbmQgdXNlIGRy bV9kaXNwbGF5X21vZGUKPiAKPiAKRml4ZWQgaW4gVjIuIHJlbW92ZWQgdGhpcyBzdHJ1Y3R1cmUu Cj4+ICsKPj4gK3N0cnVjdCBkcF9kaXNwbGF5X21vZGUgewo+PiArCXN0cnVjdCBkcF9wYW5lbF9p bmZvIHRpbWluZzsKPj4gKwl1MzIgY2FwYWJpbGl0aWVzOwo+PiArfTsKPj4gKwo+PiArc3RydWN0 IGRwX3BhbmVsX2luIHsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ICsJc3RydWN0IGRwX2F1 eCAqYXV4Owo+PiArCXN0cnVjdCBkcF9saW5rICpsaW5rOwo+PiArCXN0cnVjdCBkcF9jYXRhbG9n X3BhbmVsICpjYXRhbG9nOwo+PiArfTsKPj4gKwo+PiArc3RydWN0IGRwX3BhbmVsIHsKPj4gKwkv KiBkcGNkIHJhdyBkYXRhICovCj4+ICsJdTggZHBjZFtEUF9SRUNFSVZFUl9DQVBfU0laRSArIDFd Owo+IAo+IFdoeSArIDE/Cj4gCldpbGwgZm9sbG93IHVwIG9uIHRoaXMgaW4gVjMuCgo+PiArCXU4 IGRzX3BvcnRzW0RQX01BWF9ET1dOU1RSRUFNX1BPUlRTXTsKPj4gKwo+PiArCXN0cnVjdCBkcm1f ZHBfbGluayBsaW5rX2luZm87Cj4+ICsJc3RydWN0IGVkaWQgKmVkaWQ7Cj4+ICsJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPj4gKwlzdHJ1Y3QgZHBfcGFuZWxfaW5mbyBwaW5mbzsK Pj4gKwlib29sIHZpZGVvX3Rlc3Q7Cj4+ICsKPj4gKwl1MzIgdmljOwo+PiArCXUzMiBtYXhfcGNs a19raHo7Cj4+ICsKPj4gKwl1MzIgbWF4X2J3X2NvZGU7Cj4+ICsJaW50ICgqaW5pdF9pbmZvKShz dHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKTsKPj4gKwlpbnQgKCpkZWluaXQpKHN0cnVjdCBkcF9w YW5lbCAqZHBfcGFuZWwpOwo+PiArCWludCAoKnRpbWluZ19jZmcpKHN0cnVjdCBkcF9wYW5lbCAq ZHBfcGFuZWwpOwo+PiArCWludCAoKnJlYWRfc2lua19jYXBzKShzdHJ1Y3QgZHBfcGFuZWwgKmRw X3BhbmVsLAo+PiArCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPj4gKwl1MzIg KCpnZXRfbWluX3JlcV9saW5rX3JhdGUpKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpOwo+IAo+ IFRoaXMgZnVuY3Rpb24gaXNuJ3QgY2FsbGVkIGFueXdoZXJlCj4gClJlbW92ZWQgaW4gVjIuCgo+ PiArCXUzMiAoKmdldF9tb2RlX2JwcCkoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCwgdTMyIG1v ZGVfbWF4X2JwcCwKPj4gKwkJCXUzMiBtb2RlX3BjbGtfa2h6KTsKPj4gKwlpbnQgKCpnZXRfbW9k ZXMpKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsCj4+ICsJCXN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsIHN0cnVjdCBkcF9kaXNwbGF5X21vZGUgKm1vZGUpOwo+PiArCXZvaWQgKCpo YW5kbGVfc2lua19yZXF1ZXN0KShzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKTsKPj4gKwl2b2lk ICgqdHBnX2NvbmZpZykoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCwgYm9vbCBlbmFibGUpOwo+ PiArfTsKPj4gKwo+PiArLyoqCj4+ICsgKiBpc19saW5rX3JhdGVfdmFsaWQoKSAtIHZhbGlkYXRl cyB0aGUgbGluayByYXRlCj4+ICsgKiBAbGFuZV9yYXRlOiBsaW5rIHJhdGUgcmVxdWVzdGVkIGJ5 IHRoZSBzaW5rCj4+ICsgKgo+PiArICogUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgbGlu ayByYXRlIGlzIHN1cHBvcnRlZC4KPj4gKyAqLwo+PiArc3RhdGljIGlubGluZSBib29sIGlzX2xp bmtfcmF0ZV92YWxpZCh1MzIgYndfY29kZSkKPj4gK3sKPj4gKwlyZXR1cm4gKChid19jb2RlID09 IERQX0xJTktfQldfMV82MikgfHwKPj4gKwkJKGJ3X2NvZGUgPT0gRFBfTElOS19CV18yXzcpIHx8 Cj4+ICsJCShid19jb2RlID09IERQX0xJTktfQldfNV80KSB8fAo+PiArCQkoYndfY29kZSA9PSBE UF9MSU5LX0JXXzhfMSkpOwo+IAo+IEVhY2ggb2YgdGhlc2UgY29uZGl0aW9ucyBoYXMgdW5uZWVk ZWQgKCkKPiAKRml4ZWQgaW4gVjIuCgo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGRwX2xpbmtf aXNfbGFuZV9jb3VudF92YWxpZCgpIC0gdmFsaWRhdGVzIHRoZSBsYW5lIGNvdW50Cj4+ICsgKiBA bGFuZV9jb3VudDogbGFuZSBjb3VudCByZXF1ZXN0ZWQgYnkgdGhlIHNpbmsKPj4gKyAqCj4+ICsg KiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVlc3RlZCBsYW5lIGNvdW50IGlzIHN1cHBvcnRlZC4K Pj4gKyAqLwo+PiArc3RhdGljIGlubGluZSBib29sIGlzX2xhbmVfY291bnRfdmFsaWQodTMyIGxh bmVfY291bnQpCj4+ICt7Cj4+ICsJcmV0dXJuIChsYW5lX2NvdW50ID09IERQX0xBTkVfQ09VTlRf MSkgfHwKPj4gKwkJKGxhbmVfY291bnQgPT0gRFBfTEFORV9DT1VOVF8yKSB8fAo+PiArCQkobGFu ZV9jb3VudCA9PSBEUF9MQU5FX0NPVU5UXzQpOwo+PiArfQo+PiArCj4+ICtzdHJ1Y3QgZHBfcGFu ZWwgKmRwX3BhbmVsX2dldChzdHJ1Y3QgZHBfcGFuZWxfaW4gKmluKTsKPj4gK3ZvaWQgZHBfcGFu ZWxfcHV0KHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpOwo+PiArI2VuZGlmIC8qIF9EUF9QQU5F TF9IXyAqLwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIu YyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5jCj4+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLmEzNjZkYzUKPj4gLS0tIC9kZXYvbnVsbAo+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5jCj4+IEBAIC0wLDAgKzEsNjc5 IEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3Vu ZGF0aW9uLiBBbGwgcmlnaHRzIAo+PiByZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAo+PiBt b2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+PiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+ICsgKgo+PiArICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+PiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKi8KPj4gKwo+PiArI2RlZmluZSBwcl9mbXQo Zm10KQkiW2RybS1kcF0gJXM6ICIgZm10LCBfX2Z1bmNfXwo+PiArCj4+ICsjaW5jbHVkZSA8bGlu dXgvb2ZfZ3Bpby5oPgo+PiArCj4+ICsjaW5jbHVkZSAiZHBfcGFyc2VyLmgiCj4+ICsKPj4gK3N0 YXRpYyB2b2lkIGRwX3BhcnNlcl91bm1hcF9pb19yZXNvdXJjZXMoc3RydWN0IGRwX3BhcnNlciAq cGFyc2VyKQo+PiArewo+PiArCXN0cnVjdCBkcF9pbyAqaW8gPSAmcGFyc2VyLT5pbzsKPj4gKwo+ PiArCW1zbV9kc3NfaW91bm1hcCgmaW8tPmRwX2FoYik7Cj4+ICsJbXNtX2Rzc19pb3VubWFwKCZp by0+ZHBfYXV4KTsKPj4gKwltc21fZHNzX2lvdW5tYXAoJmlvLT5kcF9saW5rKTsKPj4gKwltc21f ZHNzX2lvdW5tYXAoJmlvLT5kcF9wMCk7Cj4+ICsJbXNtX2Rzc19pb3VubWFwKCZpby0+cGh5X2lv KTsKPj4gKwltc21fZHNzX2lvdW5tYXAoJmlvLT5sbl90eDBfaW8pOwo+PiArCW1zbV9kc3NfaW91 bm1hcCgmaW8tPmxuX3R4MF9pbyk7Cj4+ICsJbXNtX2Rzc19pb3VubWFwKCZpby0+ZHBfcGxsX2lv KTsKPj4gKwltc21fZHNzX2lvdW5tYXAoJmlvLT5kcF9jY19pbyk7Cj4+ICsJbXNtX2Rzc19pb3Vu bWFwKCZpby0+dXNiM19kcF9jb20pOwo+PiArCW1zbV9kc3NfaW91bm1hcCgmaW8tPnFmcHJvbV9p byk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcGFyc2VyX2N0cmxfcmVzKHN0cnVjdCBk cF9wYXJzZXIgKnBhcnNlcikKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXUzMiBpbmRleDsK Pj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcGFyc2VyLT5wZGV2Owo+PiArCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSA9IHBhcnNlci0+cGRldi0+ZGV2Lm9mX25vZGU7Cj4+ ICsJc3RydWN0IGRwX2lvICppbyA9ICZwYXJzZXItPmlvOwo+PiArCj4+ICsJcmMgPSBvZl9wcm9w ZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAiY2VsbC1pbmRleCIsICZpbmRleCk7Cj4+ICsJaWYgKHJj KSB7Cj4+ICsJCXByX2VycigiY2VsbC1pbmRleCBub3Qgc3BlY2lmaWVkLCByYz0lZFxuIiwgcmMp Owo+PiArCQlnb3RvIGVycjsKPiAKPiBUaGlzIGNhbiBiZSBhIGRpcmVjdCByZXR1cm4gb2YgcmMu Cj4gCj4+ICsJfQo+PiArCj4+ICsJcmMgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZp by0+ZHBfYWhiLCAiZHBfYWhiIik7Cj4+ICsJaWYgKHJjKSB7Cj4+ICsJCXByX2VycigidW5hYmxl IHRvIHJlbWFwIGRwIGlvIHJlc291cmNlc1xuIik7Cj4gCj4gUHJpbnQgcmMgaGVyZSBhbmQgYmVs b3cuCj4gCldpbGwgYWRkcmVzcyB0aGUgY29tbWVudHMgaW4gdGhpcyBmdW5jdGlvbiBpbiBWMy4K Cj4+ICsJCWdvdG8gZXJyOwo+PiArCX0KPj4gKwo+PiArCXJjID0gbXNtX2Rzc19pb3JlbWFwX2J5 bmFtZShwZGV2LCAmaW8tPmRwX2F1eCwgImRwX2F1eCIpOwo+PiArCWlmIChyYykgewo+PiArCQlw cl9lcnIoInVuYWJsZSB0byByZW1hcCBkcCBpbyByZXNvdXJjZXNcbiIpOwo+PiArCQlnb3RvIGVy cjsKPj4gKwl9Cj4+ICsKPj4gKwlyYyA9IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlv LT5kcF9saW5rLCAiZHBfbGluayIpOwo+PiArCWlmIChyYykgewo+PiArCQlwcl9lcnIoInVuYWJs ZSB0byByZW1hcCBkcCBpbyByZXNvdXJjZXNcbiIpOwo+PiArCQlnb3RvIGVycjsKPj4gKwl9Cj4+ ICsKPj4gKwlyYyA9IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT5kcF9wMCwgImRw X3AwIik7Cj4+ICsJaWYgKHJjKSB7Cj4+ICsJCXByX2VycigidW5hYmxlIHRvIHJlbWFwIGRwIGlv IHJlc291cmNlc1xuIik7Cj4+ICsJCWdvdG8gZXJyOwo+PiArCX0KPj4gKwo+PiArCXJjID0gbXNt X2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2LCAmaW8tPnBoeV9pbywgImRwX3BoeSIpOwo+PiArCWlm IChyYykgewo+PiArCQlwcl9lcnIoInVuYWJsZSB0byByZW1hcCBkcCBQSFkgcmVzb3VyY2VzXG4i KTsKPj4gKwkJZ290byBlcnI7Cj4+ICsJfQo+PiArCj4+ICsJcmMgPSBtc21fZHNzX2lvcmVtYXBf YnluYW1lKHBkZXYsICZpby0+bG5fdHgwX2lvLCAiZHBfbG5fdHgwIik7Cj4+ICsJaWYgKHJjKSB7 Cj4+ICsJCXByX2VycigidW5hYmxlIHRvIHJlbWFwIGRwIFRYMCByZXNvdXJjZXNcbiIpOwo+PiAr CQlnb3RvIGVycjsKPj4gKwl9Cj4+ICsKPj4gKwlyYyA9IG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUo cGRldiwgJmlvLT5sbl90eDFfaW8sICJkcF9sbl90eDEiKTsKPj4gKwlpZiAocmMpIHsKPj4gKwkJ cHJfZXJyKCJ1bmFibGUgdG8gcmVtYXAgZHAgVFgxIHJlc291cmNlc1xuIik7Cj4+ICsJCWdvdG8g ZXJyOwo+PiArCX0KPj4gKwo+PiArCXJjID0gbXNtX2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2LCAm aW8tPmRwX3BsbF9pbywgImRwX3BsbCIpOwo+PiArCWlmIChyYykgewo+PiArCQlwcl9lcnIoInVu YWJsZSB0byByZW1hcCBEUCBQTEwgcmVzb3VyY2VzXG4iKTsKPj4gKwkJZ290byBlcnI7Cj4+ICsJ fQo+PiArCj4+ICsJcmMgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBkZXYsICZpby0+dXNiM19k cF9jb20sICJ1c2IzX2RwX2NvbSIpOwo+PiArCWlmIChyYykgewo+PiArCQlwcl9lcnIoInVuYWJs ZSB0byByZW1hcCBVU0IzIERQIGNvbSByZXNvdXJjZXNcbiIpOwo+PiArCQlnb3RvIGVycjsKPj4g Kwl9Cj4+ICsKPj4gKwlpZiAobXNtX2Rzc19pb3JlbWFwX2J5bmFtZShwZGV2LCAmaW8tPmRwX2Nj X2lvLCAiZHBfbW1zc19jYyIpKSB7Cj4+ICsJCXByX2VycigidW5hYmxlIHRvIHJlbWFwIGRwIE1N U1NfQ0MgcmVzb3VyY2VzXG4iKTsKPj4gKwkJZ290byBlcnI7Cj4+ICsJfQo+PiArCj4+ICsJaWYg KG1zbV9kc3NfaW9yZW1hcF9ieW5hbWUocGRldiwgJmlvLT5xZnByb21faW8sICJxZnByb21fcGh5 c2ljYWwiKSkKPj4gKwkJcHJfd2FybigidW5hYmxlIHRvIHJlbWFwIGRwIHFmcHJvbSByZXNvdXJj ZXNcbiIpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICtlcnI6Cj4+ICsJZHBfcGFyc2VyX3VubWFw X2lvX3Jlc291cmNlcyhwYXJzZXIpOwo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGNvbnN0IGNoYXIgKmRwX2dldF9waHlfYXV4X2NvbmZpZ19wcm9wZXJ0eSh1MzIgY2ZnX3R5 cGUpCj4+ICt7Cj4+ICsJc3dpdGNoIChjZmdfdHlwZSkgewo+PiArCWNhc2UgUEhZX0FVWF9DRkcw Ogo+PiArCQlyZXR1cm4gInFjb20sYXV4LWNmZzAtc2V0dGluZ3MiOwo+PiArCWNhc2UgUEhZX0FV WF9DRkcxOgo+PiArCQlyZXR1cm4gInFjb20sYXV4LWNmZzEtc2V0dGluZ3MiOwo+PiArCWNhc2Ug UEhZX0FVWF9DRkcyOgo+PiArCQlyZXR1cm4gInFjb20sYXV4LWNmZzItc2V0dGluZ3MiOwo+PiAr CWNhc2UgUEhZX0FVWF9DRkczOgo+PiArCQlyZXR1cm4gInFjb20sYXV4LWNmZzMtc2V0dGluZ3Mi Owo+PiArCWNhc2UgUEhZX0FVWF9DRkc0Ogo+PiArCQlyZXR1cm4gInFjb20sYXV4LWNmZzQtc2V0 dGluZ3MiOwo+PiArCWNhc2UgUEhZX0FVWF9DRkc1Ogo+PiArCQlyZXR1cm4gInFjb20sYXV4LWNm ZzUtc2V0dGluZ3MiOwo+PiArCWNhc2UgUEhZX0FVWF9DRkc2Ogo+PiArCQlyZXR1cm4gInFjb20s YXV4LWNmZzYtc2V0dGluZ3MiOwo+PiArCWNhc2UgUEhZX0FVWF9DRkc3Ogo+PiArCQlyZXR1cm4g InFjb20sYXV4LWNmZzctc2V0dGluZ3MiOwo+PiArCWNhc2UgUEhZX0FVWF9DRkc4Ogo+PiArCQly ZXR1cm4gInFjb20sYXV4LWNmZzgtc2V0dGluZ3MiOwo+PiArCWNhc2UgUEhZX0FVWF9DRkc5Ogo+ PiArCQlyZXR1cm4gInFjb20sYXV4LWNmZzktc2V0dGluZ3MiOwo+PiArCWRlZmF1bHQ6Cj4+ICsJ CXJldHVybiAidW5rbm93biI7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9w YXJzZXJfcGh5X2F1eF9jZmdfcmVzZXQoc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKQo+PiArewo+ PiArCWludCBpID0gMDsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBQSFlfQVVYX0NGR19NQVg7 IGkrKykKPj4gKwkJcGFyc2VyLT5hdXhfY2ZnW2ldID0gKGNvbnN0IHN0cnVjdCBkcF9hdXhfY2Zn KXsgMCB9Owo+PiArfQo+IAo+IE5vIG5lZWQgZm9yIGEgc2VwYXJhdGUgZnVuY3Rpb24sIGp1c3Qg cHV0IHRoZSBsb29wIGluIHRoZSBlcnJvciBsYWJlbCAKPiBiZWxvdy4KPiAKRml4ZWQgaW4gVjIu Cgo+PiArCj4+ICtzdGF0aWMgaW50IGRwX3BhcnNlcl9hdXgoc3RydWN0IGRwX3BhcnNlciAqcGFy c2VyKQo+PiArewo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSA9IHBhcnNlci0+cGRl di0+ZGV2Lm9mX25vZGU7Cj4+ICsJaW50IGxlbiA9IDAsIGkgPSAwLCBqID0gMCwgY29uZmlnX2Nv dW50ID0gMDsKPj4gKwljb25zdCBjaGFyICpkYXRhOwo+PiArCWludCBjb25zdCBtaW5pbXVtX2Nv bmZpZ19jb3VudCA9IDE7Cj4gCj4gSnVzdCB1c2UgMSBkaXJlY3RseQo+IApSZW1vdmVkIGluIFYy LgoKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBQSFlfQVVYX0NGR19NQVg7IGkrKykgewo+PiAr CQljb25zdCBjaGFyICpwcm9wZXJ0eSA9IGRwX2dldF9waHlfYXV4X2NvbmZpZ19wcm9wZXJ0eShp KTsKPj4gKwo+PiArCQlkYXRhID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX25vZGUsIHByb3BlcnR5LCAm bGVuKTsKPj4gKwkJaWYgKCFkYXRhKSB7Cj4gCj4gWW91IHNob3VsZCB1c2Ugb2ZfcHJvcGVydHlf cmVhZF91MzIoKSBpbnN0ZWFkIG9mIHJlYWRpbmcgYXMgYSBzdHJpbmcKPiAKVXNpbmcgdGhlIHN0 cmluZyBmb3IgZGVidWcgbG9ncy4KCj4+ICsJCQlwcl9lcnIoIlVuYWJsZSB0byByZWFkICVzXG4i LCBwcm9wZXJ0eSk7Cj4+ICsJCQlnb3RvIGVycm9yOwo+PiArCQl9Cj4+ICsKPj4gKwkJY29uZmln X2NvdW50ID0gbGVuIC0gMTsKPj4gKwkJaWYgKChjb25maWdfY291bnQgPCBtaW5pbXVtX2NvbmZp Z19jb3VudCkgfHwKPj4gKwkJCShjb25maWdfY291bnQgPiBEUF9BVVhfQ0ZHX01BWF9WQUxVRV9D TlQpKSB7Cj4gCj4gUmVtb3ZlIGV4dHJhICgpCj4gCkFkZHJlc3MgaW4gVjIuCgo+PiArCQkJcHJf ZXJyKCJJbnZhbGlkIGNvbmZpZyBjb3VudCAoJWQpIGNvbmZpZ3MgZm9yICVzXG4iLAo+PiArCQkJ CQljb25maWdfY291bnQsIHByb3BlcnR5KTsKPj4gKwkJCWdvdG8gZXJyb3I7Cj4+ICsJCX0KPj4g Kwo+PiArCQlwYXJzZXItPmF1eF9jZmdbaV0ub2Zmc2V0ID0gZGF0YVswXTsKPj4gKwkJcGFyc2Vy LT5hdXhfY2ZnW2ldLmNmZ19jbnQgPSBjb25maWdfY291bnQ7Cj4+ICsJCXByX2RlYnVnKCIlcyBv ZmZzZXQ9MHgleCwgY2ZnX2NudD0lZFxuIiwKPj4gKwkJCQlwcm9wZXJ0eSwKPj4gKwkJCQlwYXJz ZXItPmF1eF9jZmdbaV0ub2Zmc2V0LAo+PiArCQkJCXBhcnNlci0+YXV4X2NmZ1tpXS5jZmdfY250 KTsKPj4gKwkJZm9yIChqID0gMTsgaiA8IGxlbjsgaisrKSB7Cj4+ICsJCQlwYXJzZXItPmF1eF9j ZmdbaV0ubHV0W2ogLSAxXSA9IGRhdGFbal07Cj4gCj4gQW5kIHRoaXMgY291bGQgdXNlIG9mX3By b3BlcnR5X3JlYWRfdTMyX2FycmF5KCkKPiAKPj4gKwkJCXByX2RlYnVnKCIlcyBsdXRbJWRdPTB4 JXhcbiIsCj4+ICsJCQkJCXByb3BlcnR5LAo+PiArCQkJCQlpLAo+PiArCQkJCQlwYXJzZXItPmF1 eF9jZmdbaV0ubHV0W2ogLSAxXSk7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsJCXJldHVybiAwOwo+PiAr Cj4+ICtlcnJvcjoKPj4gKwlkcF9wYXJzZXJfcGh5X2F1eF9jZmdfcmVzZXQocGFyc2VyKTsKPj4g KwlyZXR1cm4gLUVJTlZBTDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9wYXJzZXJfbWlz YyhzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlz dHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUgPSBwYXJzZXItPnBkZXYtPmRldi5vZl9ub2RlOwo+ PiArCj4+ICsJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLAo+PiArCQkicWNvbSxt YXgtcGNsay1mcmVxdWVuY3kta2h6IiwgJnBhcnNlci0+bWF4X3BjbGtfa2h6KTsKPj4gKwlpZiAo cmMpCj4+ICsJCXBhcnNlci0+bWF4X3BjbGtfa2h6ID0gRFBfTUFYX1BJWEVMX0NMS19LSFo7Cj4+ ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9wYXJzZXJfcGlu Y3RybChzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4g KwlzdHJ1Y3QgZHBfcGluY3RybCAqcGluY3RybCA9ICZwYXJzZXItPnBpbmN0cmw7Cj4+ICsKPj4g KwlwaW5jdHJsLT5waW4gPSBkZXZtX3BpbmN0cmxfZ2V0KCZwYXJzZXItPnBkZXYtPmRldik7Cj4+ ICsKPj4gKwlpZiAoSVNfRVJSX09SX05VTEwocGluY3RybC0+cGluKSkgewo+PiArCQlyYyA9IFBU Ul9FUlIocGluY3RybC0+cGluKTsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHBpbmN0cmws IHJjPSVkXG4iLCByYyk7Cj4+ICsJCWdvdG8gZXJyb3I7Cj4+ICsJfQo+PiArCj4+ICsJcGluY3Ry bC0+c3RhdGVfYWN0aXZlID0gcGluY3RybF9sb29rdXBfc3RhdGUocGluY3RybC0+cGluLAo+PiAr CQkJCQkibWRzc19kcF9hY3RpdmUiKTsKPj4gKwlpZiAoSVNfRVJSX09SX05VTEwocGluY3RybC0+ c3RhdGVfYWN0aXZlKSkgewo+PiArCQlyYyA9IFBUUl9FUlIocGluY3RybC0+c3RhdGVfYWN0aXZl KTsKPiAKPiBXaGF0IGlmIGl0J3MgTlVMTD8KPiAKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0 IHBpbmN0cmwgYWN0aXZlIHN0YXRlLCByYz0lZFxuIiwgcmMpOwo+PiArCQlnb3RvIGVycm9yOwo+ PiArCX0KPj4gKwo+PiArCXBpbmN0cmwtPnN0YXRlX3N1c3BlbmQgPSBwaW5jdHJsX2xvb2t1cF9z dGF0ZShwaW5jdHJsLT5waW4sCj4+ICsJCQkJCSJtZHNzX2RwX3NsZWVwIik7Cj4+ICsJaWYgKElT X0VSUl9PUl9OVUxMKHBpbmN0cmwtPnN0YXRlX3N1c3BlbmQpKSB7Cj4+ICsJCXJjID0gUFRSX0VS UihwaW5jdHJsLT5zdGF0ZV9zdXNwZW5kKTsKPiAKPiBXaGF0IGlmIGl0J3MgTlVMTD8KPiAKV2ls bCBmb2xsb3cgdXAgYW5kIGZpeCB0aGVtIGluIHYzLgoKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8g Z2V0IHBpbmN0cmwgc3VzcGVuZCBzdGF0ZSwgcmM9JWRcbiIsIHJjKTsKPj4gKwkJZ290byBlcnJv cjsKPj4gKwl9Cj4+ICtlcnJvcjoKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBpbnQgZHBfcGFyc2VyX2dwaW8oc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKQo+PiArewo+PiAr CWludCBpID0gMDsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGFyc2VyLT5wZGV2LT5kZXY7 Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlID0gZGV2LT5vZl9ub2RlOwo+PiArCXN0 cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcCA9ICZwYXJzZXItPm1wW0RQX0NPUkVfUE1dOwo+PiAr CXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZHBfZ3Bpb3NbXSA9IHsKPj4gKwkJInFjb20sYXV4 LWVuLWdwaW8iLAo+PiArCQkicWNvbSxhdXgtc2VsLWdwaW8iLAo+PiArCQkicWNvbSx1c2JwbHVn LWNjLWdwaW8iLAo+PiArCX07Cj4+ICsKPj4gKwltcC0+Z3Bpb19jb25maWcgPSBkZXZtX2t6YWxs b2MoZGV2LAo+PiArCQlzaXplb2Yoc3RydWN0IGRzc19ncGlvKSAqIEFSUkFZX1NJWkUoZHBfZ3Bp b3MpLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIW1wLT5ncGlvX2NvbmZpZykKPj4gKwkJcmV0dXJu IC1FTk9NRU07Cj4+ICsKPj4gKwltcC0+bnVtX2dwaW8gPSBBUlJBWV9TSVpFKGRwX2dwaW9zKTsK PiAKPiBJZiB5b3UgZG8gdGhpcyBmaXJzdCwgeW91IGNhbiBzL0FSUkFZX1NJWkUoZHBfZ3Bpb3Mp L21wLT5udW1fZ3Bpby8gaW4gCj4gdGhlIHJlc3QKPiBvZiB0aGUgZnVuY3Rpb24uCj4gCkZpeGVk IGluIFYyLgoKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRwX2dwaW9zKTsg aSsrKSB7Cj4+ICsJCW1wLT5ncGlvX2NvbmZpZ1tpXS5ncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8o b2Zfbm9kZSwKPj4gKwkJCWRwX2dwaW9zW2ldLCAwKTsKPj4gKwo+PiArCQlpZiAoIWdwaW9faXNf dmFsaWQobXAtPmdwaW9fY29uZmlnW2ldLmdwaW8pKSB7Cj4+ICsJCQlwcl9lcnIoIiVzIGdwaW8g bm90IHNwZWNpZmllZFxuIiwgZHBfZ3Bpb3NbaV0pOwo+PiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4+ ICsJCX0KPj4gKwo+PiArCQlzdHJsY3B5KG1wLT5ncGlvX2NvbmZpZ1tpXS5ncGlvX25hbWUsIGRw X2dwaW9zW2ldLAo+PiArCQkJc2l6ZW9mKG1wLT5ncGlvX2NvbmZpZ1tpXS5ncGlvX25hbWUpKTsK PiAKPiBBcyBtZW50aW9uZWQgZWFybGllciwgcGxlYXNlIGRvbid0IGltcGxlbWVudCB5b3VyIG93 biBzdHJpbmcgCj4gc3RvcmUvbG9va3VwLCBqdXN0Cj4gcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGdw aW9zIGluIGEgbW9yZSBkaXJlY3QgbWFubmVyIChwb2ludGVyIG9yIAo+IGZ1bmN0aW9uKS4KPiAK V2lsbCBmaXggdGhpcyBpbiBWMy4KPj4gKwo+PiArCQltcC0+Z3Bpb19jb25maWdbaV0udmFsdWUg PSAwOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29u c3QgY2hhciAqZHBfcGFyc2VyX3N1cHBseV9ub2RlX25hbWUoZW51bSBkcF9wbV90eXBlIG1vZHVs ZSkKPj4gK3sKPj4gKwlzd2l0Y2ggKG1vZHVsZSkgewo+PiArCWNhc2UgRFBfQ09SRV9QTToJcmV0 dXJuICJxY29tLGNvcmUtc3VwcGx5LWVudHJpZXMiOwo+PiArCWNhc2UgRFBfQ1RSTF9QTToJcmV0 dXJuICJxY29tLGN0cmwtc3VwcGx5LWVudHJpZXMiOwo+PiArCWNhc2UgRFBfUEhZX1BNOgkJcmV0 dXJuICJxY29tLHBoeS1zdXBwbHktZW50cmllcyI7Cj4+ICsJZGVmYXVsdDoJCXJldHVybiAiPz8/ IjsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcGFyc2VyX2dldF92cmVnKHN0 cnVjdCBkcF9wYXJzZXIgKnBhcnNlciwKPj4gKwkJZW51bSBkcF9wbV90eXBlIG1vZHVsZSkKPj4g K3sKPj4gKwlpbnQgaSA9IDAsIHJjID0gMDsKPj4gKwl1MzIgdG1wID0gMDsKPj4gKwljb25zdCBj aGFyICpwbV9zdXBwbHlfbmFtZSA9IE5VTEw7Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpzdXBw bHlfbm9kZSA9IE5VTEw7Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlID0gcGFyc2Vy LT5wZGV2LT5kZXYub2Zfbm9kZTsKPj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnN1cHBseV9yb290 X25vZGUgPSBOVUxMOwo+PiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcCA9ICZwYXJzZXIt Pm1wW21vZHVsZV07Cj4+ICsKPj4gKwltcC0+bnVtX3ZyZWcgPSAwOwo+PiArCXBtX3N1cHBseV9u YW1lID0gZHBfcGFyc2VyX3N1cHBseV9ub2RlX25hbWUobW9kdWxlKTsKPj4gKwlzdXBwbHlfcm9v dF9ub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUob2Zfbm9kZSwgcG1fc3VwcGx5X25hbWUpOwo+ PiArCWlmICghc3VwcGx5X3Jvb3Rfbm9kZSkgewo+PiArCQlwcl9lcnIoIm5vIHN1cHBseSBlbnRy eSBwcmVzZW50OiAlc1xuIiwgcG1fc3VwcGx5X25hbWUpOwo+PiArCQlnb3RvIG5vdnJlZzsKPj4g Kwl9Cj4+ICsKPj4gKwltcC0+bnVtX3ZyZWcgPSBvZl9nZXRfYXZhaWxhYmxlX2NoaWxkX2NvdW50 KHN1cHBseV9yb290X25vZGUpOwo+PiArCj4+ICsJaWYgKG1wLT5udW1fdnJlZyA9PSAwKSB7Cj4+ ICsJCXByX2RlYnVnKCJubyB2cmVnXG4iKTsKPj4gKwkJZ290byBub3ZyZWc7Cj4+ICsJfSBlbHNl IHsKPj4gKwkJcHJfZGVidWcoInZyZWcgZm91bmQuIGNvdW50PSVkXG4iLCBtcC0+bnVtX3ZyZWcp Owo+IAo+IFRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIHdyYXBwZWQgaW4gYW4gZWxzZQo+IApGaXhl ZCBpbiBWMi4KCj4+ICsJfQo+PiArCj4+ICsJbXAtPnZyZWdfY29uZmlnID0gZGV2bV9remFsbG9j KCZwYXJzZXItPnBkZXYtPmRldiwKPj4gKwkJc2l6ZW9mKHN0cnVjdCBkc3NfdnJlZykgKiBtcC0+ bnVtX3ZyZWcsIEdGUF9LRVJORUwpOwo+PiArCWlmICghbXAtPnZyZWdfY29uZmlnKSB7Cj4+ICsJ CXJjID0gLUVOT01FTTsKPj4gKwkJZ290byBlcnJvcjsKPj4gKwl9Cj4+ICsKPj4gKwlmb3JfZWFj aF9jaGlsZF9vZl9ub2RlKHN1cHBseV9yb290X25vZGUsIHN1cHBseV9ub2RlKSB7Cj4+ICsJCWNv bnN0IGNoYXIgKnN0ID0gTlVMTDsKPj4gKwkJLyogdnJlZy1uYW1lICovCj4+ICsJCXJjID0gb2Zf cHJvcGVydHlfcmVhZF9zdHJpbmcoc3VwcGx5X25vZGUsCj4+ICsJCQkicWNvbSxzdXBwbHktbmFt ZSIsICZzdCk7Cj4+ICsJCWlmIChyYykgewo+PiArCQkJcHJfZXJyKCJlcnJvciByZWFkaW5nIG5h bWUuIHJjPSVkXG4iLAo+PiArCQkJCSByYyk7Cj4+ICsJCQlnb3RvIGVycm9yOwo+PiArCQl9Cj4+ ICsJCXNucHJpbnRmKG1wLT52cmVnX2NvbmZpZ1tpXS52cmVnX25hbWUsCj4+ICsJCQlBUlJBWV9T SVpFKChtcC0+dnJlZ19jb25maWdbaV0udnJlZ19uYW1lKSksICIlcyIsIHN0KTsKPiAKPiBJbnN0 ZWFkIG9mIHN0b3JpbmcgdGhlIG5hbWUganVzdCB0byBnZXQgYSByZWd1bGF0b3IgcmVmZXJlbmNl IGxhdGVyLCAKPiB3aHkgZG9uJ3QKPiB5b3UganVzdCBncmFiIHRoZSByZWZlcmVuY2Ugbm93IGFu ZCBhdm9pZCB0aGUgc3RyaW5nIG9wcz8KPiAKVnJlZyBrZWVwIGNoYW5naW5nIGZvciBlYWNoIGNo aXAuIFRoaXMgaXMgbW9yZSBnZW5lcmljIGltcGxlbWVudGF0aW9uIAp0aGF0IGF2b2lkcyBkb2lu ZyBjaGFuZ2VzIHRvIHRoZSBjb2RlLgpVcGRhdGluZyB0aGUgZHRzaS1wbGF0Zm9ybSBzcGVjaWZp YyBjaGFuZ2VzIHdpbGwgaGF2ZSBhY2Nlc3MgdG8gdGhlIAp2cmVncy4KPj4gKwkJLyogdnJlZy1t aW4tdm9sdGFnZSAqLwo+PiArCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHN1cHBseV9ub2Rl LAo+PiArCQkJInFjb20sc3VwcGx5LW1pbi12b2x0YWdlIiwgJnRtcCk7Cj4+ICsJCWlmIChyYykg ewo+PiArCQkJcHJfZXJyKCJlcnJvciByZWFkaW5nIG1pbiB2b2x0LiByYz0lZFxuIiwKPj4gKwkJ CQlyYyk7Cj4+ICsJCQlnb3RvIGVycm9yOwo+PiArCQl9Cj4+ICsJCW1wLT52cmVnX2NvbmZpZ1tp XS5taW5fdm9sdGFnZSA9IHRtcDsKPj4gKwo+PiArCQkvKiB2cmVnLW1heC12b2x0YWdlICovCj4+ ICsJCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoc3VwcGx5X25vZGUsCj4+ICsJCQkicWNvbSxz dXBwbHktbWF4LXZvbHRhZ2UiLCAmdG1wKTsKPj4gKwkJaWYgKHJjKSB7Cj4+ICsJCQlwcl9lcnIo ImVycm9yIHJlYWRpbmcgbWF4IHZvbHQuIHJjPSVkXG4iLAo+PiArCQkJCXJjKTsKPj4gKwkJCWdv dG8gZXJyb3I7Cj4+ICsJCX0KPj4gKwkJbXAtPnZyZWdfY29uZmlnW2ldLm1heF92b2x0YWdlID0g dG1wOwo+PiArCj4+ICsJCS8qIGVuYWJsZS1sb2FkICovCj4+ICsJCXJjID0gb2ZfcHJvcGVydHlf cmVhZF91MzIoc3VwcGx5X25vZGUsCj4+ICsJCQkicWNvbSxzdXBwbHktZW5hYmxlLWxvYWQiLCAm dG1wKTsKPj4gKwkJaWYgKHJjKSB7Cj4+ICsJCQlwcl9lcnIoImVycm9yIHJlYWRpbmcgZW5hYmxl IGxvYWQuIHJjPSVkXG4iLAo+PiArCQkJCXJjKTsKPj4gKwkJCWdvdG8gZXJyb3I7Cj4+ICsJCX0K Pj4gKwkJbXAtPnZyZWdfY29uZmlnW2ldLmVuYWJsZV9sb2FkID0gdG1wOwo+PiArCj4+ICsJCS8q IGRpc2FibGUtbG9hZCAqLwo+PiArCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHN1cHBseV9u b2RlLAo+PiArCQkJInFjb20sc3VwcGx5LWRpc2FibGUtbG9hZCIsICZ0bXApOwo+PiArCQlpZiAo cmMpIHsKPj4gKwkJCXByX2VycigiZXJyb3IgcmVhZGluZyBkaXNhYmxlIGxvYWQuIHJjPSVkXG4i LAo+PiArCQkJCXJjKTsKPj4gKwkJCWdvdG8gZXJyb3I7Cj4+ICsJCX0KPj4gKwkJbXAtPnZyZWdf Y29uZmlnW2ldLmRpc2FibGVfbG9hZCA9IHRtcDsKPj4gKwo+PiArCQlwcl9kZWJ1ZygiJXMgbWlu PSVkLCBtYXg9JWQsIGVuYWJsZT0lZCwgZGlzYWJsZT0lZFxuIiwKPj4gKwkJCW1wLT52cmVnX2Nv bmZpZ1tpXS52cmVnX25hbWUsCj4+ICsJCQltcC0+dnJlZ19jb25maWdbaV0ubWluX3ZvbHRhZ2Us Cj4+ICsJCQltcC0+dnJlZ19jb25maWdbaV0ubWF4X3ZvbHRhZ2UsCj4+ICsJCQltcC0+dnJlZ19j b25maWdbaV0uZW5hYmxlX2xvYWQsCj4+ICsJCQltcC0+dnJlZ19jb25maWdbaV0uZGlzYWJsZV9s b2FkCj4+ICsJCQkpOwo+PiArCQkrK2k7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIHJjOwo+PiAr Cj4+ICtlcnJvcjoKPj4gKwlpZiAobXAtPnZyZWdfY29uZmlnKSB7Cj4+ICsJCWRldm1fa2ZyZWUo JnBhcnNlci0+cGRldi0+ZGV2LCBtcC0+dnJlZ19jb25maWcpOwo+PiArCQltcC0+dnJlZ19jb25m aWcgPSBOVUxMOwo+PiArCX0KPiAKPiBUaGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnksIHRoYXQn cyB0aGUgbmljZSB0aGluZyBhYm91dCBkZXZpY2UgbWFuYWdlZAo+IHJlc291cmNlcy4KPiAKQWRk cmVzc2VkIGluIFYyLgoKPj4gK25vdnJlZzoKPj4gKwltcC0+bnVtX3ZyZWcgPSAwOwo+PiArCj4+ ICsJcmV0dXJuIHJjOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9wYXJzZXJfcHV0X3Zy ZWdfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+ICsJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIg Km1wKQo+PiArewo+PiArCWlmICghbXApIHsKPj4gKwkJREVWX0VSUigiaW52YWxpZCBpbnB1dFxu Iik7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAobXAtPnZyZWdfY29uZmlnKSB7 Cj4+ICsJCWRldm1fa2ZyZWUoZGV2LCBtcC0+dnJlZ19jb25maWcpOwo+PiArCQltcC0+dnJlZ19j b25maWcgPSBOVUxMOwo+PiArCX0KPiAKPiBTYW1lIGhlcmUsIHRoaXMgZnVuY3Rpb24gY2FuIGdv IGF3YXkgb25jZSB5b3UgdGFrZSBvdXQgdGhlIGRwX3BhcnNlcgo+IGFic3RyYWN0aW9uIGxheWVy Lgo+IApGaXhlZCBpbiBWMi4KCj4+ICsJbXAtPm51bV92cmVnID0gMDsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGludCBkcF9wYXJzZXJfcmVndWxhdG9yKHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcikK Pj4gK3sKPj4gKwlpbnQgaSwgcmMgPSAwOwo+PiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYgPSBwYXJzZXItPnBkZXY7Cj4+ICsKPj4gKwkvKiBQYXJzZSB0aGUgcmVndWxhdG9yIGluZm9y bWF0aW9uICovCj4+ICsJZm9yIChpID0gRFBfQ09SRV9QTTsgaSA8IERQX01BWF9QTTsgaSsrKSB7 Cj4+ICsJCXJjID0gZHBfcGFyc2VyX2dldF92cmVnKHBhcnNlciwgaSk7Cj4+ICsJCWlmIChyYykg ewo+PiArCQkJcHJfZXJyKCJnZXRfZHRfdnJlZ19kYXRhIGZhaWxlZCBmb3IgJXMuIHJjPSVkXG4i LAo+PiArCQkJCWRwX3BhcnNlcl9wbV9uYW1lKGkpLCByYyk7Cj4+ICsJCQlpLS07Cj4+ICsJCQlm b3IgKDsgaSA+PSBEUF9DT1JFX1BNOyBpLS0pCj4+ICsJCQkJZHBfcGFyc2VyX3B1dF92cmVnX2Rh dGEoJnBkZXYtPmRldiwKPj4gKwkJCQkJJnBhcnNlci0+bXBbaV0pOwo+PiArCQkJYnJlYWs7Cj4g Cj4gQW5kIGhlcmUgeW91IGNhbiBqdXN0IHJldHVybiB0aGUgZXJyb3IgZGlyZWN0bHkgYW5kIHRo ZSByZXNvdXJjZXMgd2lsbCAKPiBiZSBmcmVlZAo+IG1hZ2ljYWxseS4KPiAKRml4ZWQgaW4gVjIu Cgo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIHJjOwo+IAo+IEFuZCB0aGlzIGJlY29t ZXMgcmV0dXJuIDA7Cj4gCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBib29sIGRwX3BhcnNlcl9jaGVj a19wcmVmaXgoY29uc3QgY2hhciAqY2xrX3ByZWZpeCwgY29uc3QgY2hhciAKPj4gKmNsa19uYW1l KQo+PiArewo+PiArCXJldHVybiAhIXN0cm5zdHIoY2xrX25hbWUsIGNsa19wcmVmaXgsIHN0cmxl bihjbGtfbmFtZSkpOwo+IAo+IFRoaXMgaXMgbGlrZWx5IG5vdCB3aGF0IHlvdSB3YW50IHNpbmNl IHRoaXMgd2lsbCBsb29rIGZvciBwcmVmaXggCj4gX2FueXdoZXJlXyBpbgo+IGNsayBuYW1lLiBB biBleGFtcGxlIG9mIGhvdyB0aGlzIGNvdWxkIGdvIHNpZGV3YXlzOgo+IAo+IAlkcF9wYXJzZXJf Y2hlY2tfcHJlZml4KCJjb3JlIiwgImNvcmUtZHAtcG93ZXItY3RybCIpOwo+IAlkcF9wYXJzZXJf Y2hlY2tfcHJlZml4KCJjdHJsIiwgImNvcmUtZHAtcG93ZXItY3RybCIpOwo+IAo+IEJvdGggcmV0 dXJuIHRydWUuCj4gCj4gQW55d2F5cywgc3RybmNtcCBpcyBhIGJldHRlciBjaG9pY2UgaGVyZSAo aWYgd2UgbXVzdCBkbyBzdHJpbmcgCj4gb3BlcmF0aW9ucykuCj4gClVwZGF0ZWQgaW4gVjIuIFVz ZWQgc3RybmNtcC4KCgo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9wYXJzZXJfcHV0X2Ns a19kYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwKPj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAq bXApCj4+ICt7Cj4+ICsJaWYgKCFtcCkgewo+PiArCQlERVZfRVJSKCIlczogaW52YWxpZCBpbnB1 dFxuIiwgX19mdW5jX18pOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJaWYgKG1wLT5j bGtfY29uZmlnKSB7Cj4+ICsJCWRldm1fa2ZyZWUoZGV2LCBtcC0+Y2xrX2NvbmZpZyk7Cj4+ICsJ CW1wLT5jbGtfY29uZmlnID0gTlVMTDsKPj4gKwl9Cj4+ICsKPj4gKwltcC0+bnVtX2NsayA9IDA7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRwX3BhcnNlcl9wdXRfZ3Bpb19kYXRhKHN0cnVj dCBkZXZpY2UgKmRldiwKPj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXApCj4+ICt7Cj4+ ICsJaWYgKCFtcCkgewo+PiArCQlERVZfRVJSKCIlczogaW52YWxpZCBpbnB1dFxuIiwgX19mdW5j X18pOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJaWYgKG1wLT5ncGlvX2NvbmZpZykg ewo+PiArCQlkZXZtX2tmcmVlKGRldiwgbXAtPmdwaW9fY29uZmlnKTsKPj4gKwkJbXAtPmdwaW9f Y29uZmlnID0gTlVMTDsKPj4gKwl9Cj4+ICsKPj4gKwltcC0+bnVtX2dwaW8gPSAwOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IGRwX3BhcnNlcl9pbml0X2Nsa19kYXRhKHN0cnVjdCBkcF9wYXJz ZXIgKnBhcnNlcikKPj4gK3sKPj4gKwlpbnQgbnVtX2NsayA9IDAsIGkgPSAwLCByYyA9IDA7Cj4+ ICsJaW50IGNvcmVfY2xrX2NvdW50ID0gMCwgY3RybF9jbGtfY291bnQgPSAwOwo+PiArCWNvbnN0 IGNoYXIgKmNvcmVfY2xrID0gImNvcmUiOwo+PiArCWNvbnN0IGNoYXIgKmN0cmxfY2xrID0gImN0 cmwiOwo+PiArCWNvbnN0IGNoYXIgKmNsa19uYW1lOwo+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZwYXJzZXItPnBkZXYtPmRldjsKPj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqY29yZV9w b3dlciA9ICZwYXJzZXItPm1wW0RQX0NPUkVfUE1dOwo+PiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bv d2VyICpjdHJsX3Bvd2VyID0gJnBhcnNlci0+bXBbRFBfQ1RSTF9QTV07Cj4+ICsKPj4gKwludW1f Y2xrID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhkZXYtPm9mX25vZGUsICJjbG9jay1uYW1l cyIpOwo+PiArCWlmIChudW1fY2xrIDw9IDApIHsKPj4gKwkJcHJfZXJyKCJubyBjbG9ja3MgYXJl IGRlZmluZWRcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9 Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NsazsgaSsrKSB7Cj4+ICsJCW9mX3Byb3Bl cnR5X3JlYWRfc3RyaW5nX2luZGV4KGRldi0+b2Zfbm9kZSwKPj4gKwkJCQkiY2xvY2stbmFtZXMi LCBpLCAmY2xrX25hbWUpOwo+IAo+IENoZWNrIHJldHVybiB2YWx1ZQo+IApGaXhlZCBpbiBWMi4K Cj4+ICsKPj4gKwkJaWYgKGRwX3BhcnNlcl9jaGVja19wcmVmaXgoY29yZV9jbGssIGNsa19uYW1l KSkKPj4gKwkJCWNvcmVfY2xrX2NvdW50Kys7Cj4+ICsKPj4gKwkJaWYgKGRwX3BhcnNlcl9jaGVj a19wcmVmaXgoY3RybF9jbGssIGNsa19uYW1lKSkKPj4gKwkJCWN0cmxfY2xrX2NvdW50Kys7Cj4g Cj4gSnVzdCB1c2UgImNvcmUiLyJjdHJsIiBkaXJlY3RseSBoZXJlLgo+IAo+IEhhdmUgeW91IGNv bnNpZGVyZWQganVzdCBoYXZpbmcgMiBjbG9jayBsaXN0cz8gVGhhdCB3b3VsZCBhdm9pZCBoYXZp bmcgCj4gdG8gZG8KPiB0aGlzLgo+IApJIGRpZG4ndCBnZXQgd2hhdCB5b3UgbWVhbnQgYnkgdHdv IGNsb2NrIGxpc3RzLiBXZSBjdXJyZW50bHkgaGF2ZSB0d28gCmNsb2NrIGxpc3QgdG8gc3RvcmUg dGhlbSBsb2NhbGx5LgpZb3UgbWVhbiBoYXZpbmcgdHdvIGNsb2NrIGxpc3RzIGluIGR0c2k/Cgo+ PiArCX0KPj4gKwo+PiArCS8qIEluaXRpYWxpemUgdGhlIENPUkUgcG93ZXIgbW9kdWxlICovCj4+ ICsJaWYgKGNvcmVfY2xrX2NvdW50IDw9IDApIHsKPiAKPiBIb3cgZG9lcyB0aGlzIGdldCBiZWxv dyAwPwo+IApXaWxsIGZpeCB0aGVtIGluIFYzLgoKCj4+ICsJCXByX2Vycigibm8gY29yZSBjbG9j a3MgYXJlIGRlZmluZWRcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXhpdDsK Pj4gKwl9Cj4+ICsKPj4gKwljb3JlX3Bvd2VyLT5udW1fY2xrID0gY29yZV9jbGtfY291bnQ7Cj4+ ICsJY29yZV9wb3dlci0+Y2xrX2NvbmZpZyA9IGRldm1fa3phbGxvYyhkZXYsCj4+ICsJCQlzaXpl b2Yoc3RydWN0IGRzc19jbGspICogY29yZV9wb3dlci0+bnVtX2NsaywKPj4gKwkJCUdGUF9LRVJO RUwpOwo+PiArCWlmICghY29yZV9wb3dlci0+Y2xrX2NvbmZpZykgewo+PiArCQlyYyA9IC1FSU5W QUw7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBJbml0aWFsaXplIHRoZSBD VFJMIHBvd2VyIG1vZHVsZSAqLwo+PiArCWlmIChjdHJsX2Nsa19jb3VudCA8PSAwKSB7Cj4gCj4g SG93IGRvZXMgdGhpcyBnZXQgYmVsb3cgMD8KPiAKPj4gKwkJcHJfZXJyKCJubyBjdHJsIGNsb2Nr cyBhcmUgZGVmaW5lZFxuIik7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBjdHJsX2Ns b2NrX2Vycm9yOwo+PiArCX0KPj4gKwo+PiArCWN0cmxfcG93ZXItPm51bV9jbGsgPSBjdHJsX2Ns a19jb3VudDsKPj4gKwljdHJsX3Bvd2VyLT5jbGtfY29uZmlnID0gZGV2bV9remFsbG9jKGRldiwK Pj4gKwkJCXNpemVvZihzdHJ1Y3QgZHNzX2NsaykgKiBjdHJsX3Bvd2VyLT5udW1fY2xrLAo+PiAr CQkJR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFjdHJsX3Bvd2VyLT5jbGtfY29uZmlnKSB7Cj4+ICsJ CWN0cmxfcG93ZXItPm51bV9jbGsgPSAwOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8g Y3RybF9jbG9ja19lcnJvcjsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gcmM7Cj4+ICsKPj4gK2N0 cmxfY2xvY2tfZXJyb3I6Cj4+ICsJZHBfcGFyc2VyX3B1dF9jbGtfZGF0YShkZXYsIGNvcmVfcG93 ZXIpOwo+PiArZXhpdDoKPj4gKwlyZXR1cm4gcmM7Cj4gCj4gSnVzdCByZXR1cm4gZGlyZWN0bHkg YW5kIGRlbGV0ZSBleGl0Cj4gCkZpeGVkIGluIHYyLgoKPj4gK30KPj4gKwo+PiArc3RhdGljIGlu dCBkcF9wYXJzZXJfY2xvY2soc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKQo+PiArewo+PiArCWlu dCByYyA9IDAsIGkgPSAwOwo+PiArCWludCBudW1fY2xrID0gMDsKPj4gKwlpbnQgY29yZV9jbGtf aW5kZXggPSAwLCBjdHJsX2Nsa19pbmRleCA9IDA7Cj4+ICsJaW50IGNvcmVfY2xrX2NvdW50ID0g MCwgY3RybF9jbGtfY291bnQgPSAwOwo+PiArCWNvbnN0IGNoYXIgKmNsa19uYW1lOwo+PiArCWNv bnN0IGNoYXIgKmNvcmVfY2xrID0gImNvcmUiOwo+PiArCWNvbnN0IGNoYXIgKmN0cmxfY2xrID0g ImN0cmwiOwo+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwYXJzZXItPnBkZXYtPmRldjsKPiAK PiAtLS0tIFNUQVJUIGhtbW1tCj4gCj4+ICsJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKmNvcmVf cG93ZXIgPSAmcGFyc2VyLT5tcFtEUF9DT1JFX1BNXTsKPj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9w b3dlciAqY3RybF9wb3dlciA9ICZwYXJzZXItPm1wW0RQX0NUUkxfUE1dOwo+PiArCj4+ICsJY29y ZV9wb3dlciA9ICZwYXJzZXItPm1wW0RQX0NPUkVfUE1dOwo+PiArCWN0cmxfcG93ZXIgPSAmcGFy c2VyLT5tcFtEUF9DVFJMX1BNXTsKPiAKPiAtLS0tIEVORCBobW1tbQo+IApGaXhlZCBpbiBWMi4K Cj4+ICsKPj4gKwlyYyA9ICBkcF9wYXJzZXJfaW5pdF9jbGtfZGF0YShwYXJzZXIpOwo+PiArCWlm IChyYykgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXplIHBvd2VyIGRhdGFcbiIp Owo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsKPj4gKwlj b3JlX2Nsa19jb3VudCA9IGNvcmVfcG93ZXItPm51bV9jbGs7Cj4+ICsJY3RybF9jbGtfY291bnQg PSBjdHJsX3Bvd2VyLT5udW1fY2xrOwo+PiArCj4+ICsJbnVtX2NsayA9IGNvcmVfY2xrX2NvdW50 ICsgY3RybF9jbGtfY291bnQ7Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NsazsgaSsr KSB7Cj4+ICsJCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KGRldi0+b2Zfbm9kZSwgImNs b2NrLW5hbWVzIiwKPj4gKwkJCQlpLCAmY2xrX25hbWUpOwo+IAo+IENoZWNrIHJldHVybiB2YWx1 ZQo+IApGaXhlZCBpbiB2Mi4KCj4+ICsKPj4gKwkJaWYgKGRwX3BhcnNlcl9jaGVja19wcmVmaXgo Y29yZV9jbGssIGNsa19uYW1lKSAmJgo+PiArCQkJCWNvcmVfY2xrX2luZGV4IDwgY29yZV9jbGtf Y291bnQpIHsKPj4gKwkJCXN0cnVjdCBkc3NfY2xrICpjbGsgPQo+PiArCQkJCSZjb3JlX3Bvd2Vy LT5jbGtfY29uZmlnW2NvcmVfY2xrX2luZGV4XTsKPj4gKwkJCXN0cmxjcHkoY2xrLT5jbGtfbmFt ZSwgY2xrX25hbWUsIHNpemVvZihjbGstPmNsa19uYW1lKSk7Cj4+ICsJCQljbGstPnR5cGUgPSBE U1NfQ0xLX0FIQjsKPj4gKwkJCWNvcmVfY2xrX2luZGV4Kys7Cj4+ICsJCX0gZWxzZSBpZiAoZHBf cGFyc2VyX2NoZWNrX3ByZWZpeChjdHJsX2NsaywgY2xrX25hbWUpICYmCj4+ICsJCQkgICBjdHJs X2Nsa19pbmRleCA8IGN0cmxfY2xrX2NvdW50KSB7Cj4+ICsJCQlzdHJ1Y3QgZHNzX2NsayAqY2xr ID0KPj4gKwkJCQkmY3RybF9wb3dlci0+Y2xrX2NvbmZpZ1tjdHJsX2Nsa19pbmRleF07Cj4+ICsJ CQlzdHJsY3B5KGNsay0+Y2xrX25hbWUsIGNsa19uYW1lLCBzaXplb2YoY2xrLT5jbGtfbmFtZSkp Owo+PiArCQkJY3RybF9jbGtfaW5kZXgrKzsKPj4gKwo+PiArCQkJaWYgKCFzdHJjbXAoY2xrX25h bWUsICJjdHJsX2xpbmtfY2xrIikgfHwKPj4gKwkJCSAgICAhc3RyY21wKGNsa19uYW1lLCAiY3Ry bF9waXhlbF9jbGsiKSkKPiAKPiBzdHJuY21wCj4gCkZpeGVkIGluIFYyLgoKPj4gKwkJCQljbGst PnR5cGUgPSBEU1NfQ0xLX1BDTEs7Cj4+ICsJCQllbHNlCj4+ICsJCQkJY2xrLT50eXBlID0gRFNT X0NMS19BSEI7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiY2xvY2sgcGFyc2lu ZyBzdWNjZXNzZnVsXG4iKTsKPj4gKwo+PiArZXhpdDoKPiAKPiBEZWxldGUgdGhlIGxhYmVsIGFu ZCByZXR1cm4gZGlyZWN0bHkKPiAKRml4ZWQgaW4gdjIuCgo+PiArCXJldHVybiByYzsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGludCBkcF9wYXJzZXJfcGFyc2Uoc3RydWN0IGRwX3BhcnNlciAqcGFy c2VyKQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsKPj4gKwlpZiAoIXBhcnNlcikgewo+PiAr CQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdv dG8gZXJyOwo+PiArCX0KPj4gKwo+PiArCXJjID0gZHBfcGFyc2VyX2N0cmxfcmVzKHBhcnNlcik7 Cj4+ICsJaWYgKHJjKQo+PiArCQlnb3RvIGVycjsKPj4gKwo+PiArCXJjID0gZHBfcGFyc2VyX2F1 eChwYXJzZXIpOwo+PiArCWlmIChyYykKPj4gKwkJZ290byBlcnI7Cj4+ICsKPj4gKwlyYyA9IGRw X3BhcnNlcl9taXNjKHBhcnNlcik7Cj4+ICsJaWYgKHJjKQo+PiArCQlnb3RvIGVycjsKPj4gKwo+ PiArCXJjID0gZHBfcGFyc2VyX2Nsb2NrKHBhcnNlcik7Cj4+ICsJaWYgKHJjKQo+PiArCQlnb3Rv IGVycjsKPj4gKwo+PiArCXJjID0gZHBfcGFyc2VyX3JlZ3VsYXRvcihwYXJzZXIpOwo+PiArCWlm IChyYykKPj4gKwkJZ290byBlcnI7Cj4+ICsKPj4gKwlyYyA9IGRwX3BhcnNlcl9ncGlvKHBhcnNl cik7Cj4+ICsJaWYgKHJjKQo+PiArCQlnb3RvIGVycjsKPj4gKwo+PiArCXJjID0gZHBfcGFyc2Vy X3BpbmN0cmwocGFyc2VyKTsKPj4gK2VycjoKPiAKPiBEZWxldGUgdGhlIGxhYmVsIGFuZCByZXR1 cm4gZGlyZWN0bHkKPiAKRml4ZWQgaW4gVjIuCgo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+ PiArc3RydWN0IGRwX3BhcnNlciAqZHBfcGFyc2VyX2dldChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQo+PiArewo+PiArCXN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcjsKPj4gKwo+PiArCXBh cnNlciA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnBhcnNlciksIEdGUF9LRVJO RUwpOwo+PiArCWlmICghcGFyc2VyKQo+PiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPj4g Kwo+PiArCXBhcnNlci0+cGFyc2UgPSBkcF9wYXJzZXJfcGFyc2U7Cj4+ICsJcGFyc2VyLT5wZGV2 ID0gcGRldjsKPj4gKwo+PiArCXJldHVybiBwYXJzZXI7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgZHBf cGFyc2VyX3B1dChzdHJ1Y3QgZHBfcGFyc2VyICpwYXJzZXIpCj4+ICt7Cj4+ICsJaW50IGkgPSAw Owo+PiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICpwb3dlciA9IE5VTEw7Cj4+ICsKPj4gKwlp ZiAoIXBhcnNlcikgewo+PiArCQlwcl9lcnIoImludmFsaWQgcGFyc2VyIG1vZHVsZVxuIik7Cj4+ ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsKPj4gKwlwb3dlciA9IHBhcnNlci0+bXA7Cj4+ICsKPj4g Kwlmb3IgKGkgPSAwOyBpIDwgRFBfTUFYX1BNOyBpKyspIHsKPj4gKwkJZHBfcGFyc2VyX3B1dF9j bGtfZGF0YSgmcGFyc2VyLT5wZGV2LT5kZXYsICZwb3dlcltpXSk7Cj4+ICsJCWRwX3BhcnNlcl9w dXRfdnJlZ19kYXRhKCZwYXJzZXItPnBkZXYtPmRldiwgJnBvd2VyW2ldKTsKPj4gKwkJZHBfcGFy c2VyX3B1dF9ncGlvX2RhdGEoJnBhcnNlci0+cGRldi0+ZGV2LCAmcG93ZXJbaV0pOwo+PiArCX0K Pj4gKwo+PiArCWRldm1fa2ZyZWUoJnBhcnNlci0+cGRldi0+ZGV2LCBwYXJzZXIpOwo+PiArfQo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYXJzZXIuaCAKPj4gYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5oCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4+IGluZGV4IDAwMDAwMDAuLmIzOWVhMDIKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhcnNlci5oCj4+IEBAIC0wLDAgKzEsMjA1IEBACj4+ICsv Kgo+PiArICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBB bGwgcmlnaHRzIAo+PiByZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAo+PiBtb2RpZnkKPj4g KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFuZAo+PiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4+ICsgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zgo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQo+PiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KPj4gKyAqCj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBfRFBfUEFSU0VSX0hfCj4+ ICsjZGVmaW5lIF9EUF9QQVJTRVJfSF8KPj4gKwo+PiArI2luY2x1ZGUgImRwdV9pb191dGlsLmgi Cj4+ICsKPj4gKyNkZWZpbmUgRFBfTEFCRUwgIk1EU1MgRFAgRElTUExBWSIKPj4gKyNkZWZpbmUg QVVYX0NGR19MRU4JMTAKPj4gKyNkZWZpbmUgRFBfTUFYX1BJWEVMX0NMS19LSFoJNjc1MDAwCj4+ ICsKPj4gK2VudW0gZHBfcG1fdHlwZSB7Cj4+ICsJRFBfQ09SRV9QTSwKPj4gKwlEUF9DVFJMX1BN LAo+PiArCURQX1BIWV9QTSwKPj4gKwlEUF9NQVhfUE0KPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBp bmxpbmUgY29uc3QgY2hhciAqZHBfcGFyc2VyX3BtX25hbWUoZW51bSBkcF9wbV90eXBlIG1vZHVs ZSkKPj4gK3sKPj4gKwlzd2l0Y2ggKG1vZHVsZSkgewo+PiArCWNhc2UgRFBfQ09SRV9QTToJcmV0 dXJuICJEUF9DT1JFX1BNIjsKPj4gKwljYXNlIERQX0NUUkxfUE06CXJldHVybiAiRFBfQ1RSTF9Q TSI7Cj4+ICsJY2FzZSBEUF9QSFlfUE06CQlyZXR1cm4gIkRQX1BIWV9QTSI7Cj4+ICsJZGVmYXVs dDoJCXJldHVybiAiPz8/IjsKPj4gKwl9Cj4+ICt9Cj4gCj4gRGVsZXRlIHRoZSBmdW5jdGlvbiBh bmQganVzdCBwcmludCB0aGUgZW51bSB2YWx1ZQo+IAo+PiArCj4+ICsvKioKPj4gKyAqIHN0cnVj dCBkcF9kaXNwbGF5X2RhdGEgIC0gZGlzcGxheSByZWxhdGVkIGRldmljZSB0cmVlIGRhdGEuCj4+ ICsgKgo+PiArICogQGN0cmxfbm9kZTogcmVmZXJlY2UgdG8gY29udHJvbGxlciBkZXZpY2UKPj4g KyAqIEBwaHlfbm9kZTogIHJlZmVyZW5jZSB0byBwaHkgZGV2aWNlCj4+ICsgKiBAaXNfYWN0aXZl OiBpcyB0aGUgY29udHJvbGxlciBjdXJyZW50bHkgYWN0aXZlCj4+ICsgKiBAbmFtZTogbmFtZSBv ZiB0aGUgZGlzcGxheQo+PiArICogQGRpc3BsYXlfdHlwZTogdHlwZSBvZiB0aGUgZGlzcGxheQo+ PiArICovCj4+ICtzdHJ1Y3QgZHBfZGlzcGxheV9kYXRhIHsKPj4gKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKmN0cmxfbm9kZTsKPj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeV9ub2RlOwo+PiArCWJv b2wgaXNfYWN0aXZlOwo+PiArCWNvbnN0IGNoYXIgKm5hbWU7Cj4+ICsJY29uc3QgY2hhciAqZGlz cGxheV90eXBlOwo+PiArfTsKPj4gKwo+PiArLyoqCj4+ICsgKiBzdHJ1Y3QgZHBfY3RybF9yZXNv dXJjZSAtIGNvbnRyb2xsZXIncyBJTyByZWxhdGVkIGRhdGEKPj4gKyAqCj4+ICsgKiBAZHBfYWhi OiBjb250cm9sbGVyJ3MgYWhiIG1hcHBlZCBtZW1vcnkgYWRkcmVzcwo+PiArICogQGRwX2F1eDog Y29udHJvbGxlcidzIGF1eCBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKPj4gKyAqIEBkcF9saW5rOiBj b250cm9sbGVyJ3MgbGluayBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKPj4gKyAqIEBkcF9wMDogY29u dHJvbGxlcidzIHAwIG1hcHBlZCBtZW1vcnkgYWRkcmVzcwo+PiArICogQHBoeV9pbzogcGh5J3Mg bWFwcGVkIG1lbW9yeSBhZGRyZXNzCj4+ICsgKiBAbG5fdHgwX2lvOiBVU0ItRFAgbGFuZSBUWDAn cyBtYXBwZWQgbWVtb3J5IGFkZHJlc3MKPj4gKyAqIEBsbl90eDFfaW86IFVTQi1EUCBsYW5lIFRY MSdzIG1hcHBlZCBtZW1vcnkgYWRkcmVzcwo+PiArICogQGRwX2NjX2lvOiBEUCBjYydzIG1hcHBl ZCBtZW1vcnkgYWRkcmVzcwo+PiArICogQHFmcHJvbV9pbzogcWZwcm9tJ3MgbWFwcGVkIG1lbW9y eSBhZGRyZXNzCj4+ICsgKiBAZHBfcGxsX2lvOiBEUCBQTEwgbWFwcGVkIG1lbW9yeSBhZGRyZXNz Cj4+ICsgKiBAdXNiM19kcF9jb206IFVTQjMgRFAgUEhZIGNvbWJvIG1hcHBlZCBtZW1vcnkgYWRk cmVzcwo+PiArICovCj4+ICtzdHJ1Y3QgZHBfaW8gewo+PiArCXN0cnVjdCBkc3NfaW9fZGF0YSBj dHJsX2lvOwo+PiArCXN0cnVjdCBkc3NfaW9fZGF0YSBkcF9haGI7Cj4+ICsJc3RydWN0IGRzc19p b19kYXRhIGRwX2F1eDsKPj4gKwlzdHJ1Y3QgZHNzX2lvX2RhdGEgZHBfbGluazsKPj4gKwlzdHJ1 Y3QgZHNzX2lvX2RhdGEgZHBfcDA7Cj4+ICsJc3RydWN0IGRzc19pb19kYXRhIHBoeV9pbzsKPj4g KwlzdHJ1Y3QgZHNzX2lvX2RhdGEgbG5fdHgwX2lvOwo+PiArCXN0cnVjdCBkc3NfaW9fZGF0YSBs bl90eDFfaW87Cj4+ICsJc3RydWN0IGRzc19pb19kYXRhIGRwX2NjX2lvOwo+PiArCXN0cnVjdCBk c3NfaW9fZGF0YSBxZnByb21faW87Cj4+ICsJc3RydWN0IGRzc19pb19kYXRhIGRwX3BsbF9pbzsK Pj4gKwlzdHJ1Y3QgZHNzX2lvX2RhdGEgdXNiM19kcF9jb207Cj4+ICt9Owo+PiArCj4+ICsvKioK Pj4gKyAqIHN0cnVjdCBkcF9waW5jdHJsIC0gRFAncyBwaW4gY29udHJvbAo+PiArICoKPj4gKyAq IEBwaW46IHBpbi1jb250cm9sbGVyJ3MgaW5zdGFuY2UKPj4gKyAqIEBzdGF0ZV9hY3RpdmU6IGFj dGl2ZSBzdGF0ZSBwaW4gY29udHJvbAo+PiArICogQHN0YXRlX2hwZF9hY3RpdmU6IGhwZCBhY3Rp dmUgc3RhdGUgcGluIGNvbnRyb2wKPj4gKyAqIEBzdGF0ZV9zdXNwZW5kOiBzdXNwZW5kIHN0YXRl IHBpbiBjb250cm9sCj4+ICsgKi8KPj4gK3N0cnVjdCBkcF9waW5jdHJsIHsKPj4gKwlzdHJ1Y3Qg cGluY3RybCAqcGluOwo+PiArCXN0cnVjdCBwaW5jdHJsX3N0YXRlICpzdGF0ZV9hY3RpdmU7Cj4+ ICsJc3RydWN0IHBpbmN0cmxfc3RhdGUgKnN0YXRlX2hwZF9hY3RpdmU7Cj4+ICsJc3RydWN0IHBp bmN0cmxfc3RhdGUgKnN0YXRlX3N1c3BlbmQ7Cj4+ICt9Owo+PiArCj4+ICsjZGVmaW5lIERQX0VO VU1fU1RSKHgpCSN4Cj4gCj4gT25jZSB5b3UgZ2V0IHJpZCBvZiBhbGwgb2YgdGhlIGVudW0tPnN0 cmluZyBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBmb3IKPiBkZWJ1Z2dpbmcsIHlvdSBjYW4gZGVs ZXRlIHRoaXMuCj4gCj4+ICsjZGVmaW5lIERQX0FVWF9DRkdfTUFYX1ZBTFVFX0NOVCAzCj4+ICsv KioKPj4gKyAqIHN0cnVjdCBkcF9hdXhfY2ZnIC0gRFAncyBBVVggY29uZmlndXJhdGlvbiBzZXR0 aW5ncwo+PiArICoKPj4gKyAqIEBjZmdfY250OiBjb3VudCBvZiB0aGUgY29uZmlndXJhYmxlIHNl dHRpbmdzIGZvciB0aGUgQVVYIHJlZ2lzdGVyCj4+ICsgKiBAY3VycmVudF9pbmRleDogY3VycmVu dCBpbmRleCBvZiB0aGUgQVVYIGNvbmZpZyBsdXQKPj4gKyAqIEBvZmZzZXQ6IHJlZ2lzdGVyIG9m ZnNldCBvZiB0aGUgQVVYIGNvbmZpZyByZWdpc3Rlcgo+PiArICogQGx1dDogbG9vayB1cCB0YWJs ZSBmb3IgdGhlIEFVWCBjb25maWcgdmFsdWVzIGZvciB0aGlzIHJlZ2lzdGVyCj4+ICsgKi8KPj4g K3N0cnVjdCBkcF9hdXhfY2ZnIHsKPj4gKwl1MzIgY2ZnX2NudDsKPj4gKwl1MzIgY3VycmVudF9p bmRleDsKPj4gKwl1MzIgb2Zmc2V0Owo+PiArCXUzMiBsdXRbRFBfQVVYX0NGR19NQVhfVkFMVUVf Q05UXTsKPj4gK307Cj4+ICsKPj4gKy8qIFBIWSBBVVggY29uZmlnIHJlZ2lzdGVycyAqLwo+PiAr ZW51bSBkcF9waHlfYXV4X2NvbmZpZ190eXBlIHsKPj4gKwlQSFlfQVVYX0NGRzAsCj4+ICsJUEhZ X0FVWF9DRkcxLAo+PiArCVBIWV9BVVhfQ0ZHMiwKPj4gKwlQSFlfQVVYX0NGRzMsCj4+ICsJUEhZ X0FVWF9DRkc0LAo+PiArCVBIWV9BVVhfQ0ZHNSwKPj4gKwlQSFlfQVVYX0NGRzYsCj4+ICsJUEhZ X0FVWF9DRkc3LAo+PiArCVBIWV9BVVhfQ0ZHOCwKPj4gKwlQSFlfQVVYX0NGRzksCj4+ICsJUEhZ X0FVWF9DRkdfTUFYLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGlubGluZSBjaGFyICpkcF9waHlf YXV4X2NvbmZpZ190eXBlX3RvX3N0cmluZyh1MzIgY2ZnX3R5cGUpCj4+ICt7Cj4+ICsJc3dpdGNo IChjZmdfdHlwZSkgewo+PiArCWNhc2UgUEhZX0FVWF9DRkcwOgo+PiArCQlyZXR1cm4gRFBfRU5V TV9TVFIoUEhZX0FVWF9DRkcwKTsKPj4gKwljYXNlIFBIWV9BVVhfQ0ZHMToKPj4gKwkJcmV0dXJu IERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHMSk7Cj4+ICsJY2FzZSBQSFlfQVVYX0NGRzI6Cj4+ICsJ CXJldHVybiBEUF9FTlVNX1NUUihQSFlfQVVYX0NGRzIpOwo+PiArCWNhc2UgUEhZX0FVWF9DRkcz Ogo+PiArCQlyZXR1cm4gRFBfRU5VTV9TVFIoUEhZX0FVWF9DRkczKTsKPj4gKwljYXNlIFBIWV9B VVhfQ0ZHNDoKPj4gKwkJcmV0dXJuIERQX0VOVU1fU1RSKFBIWV9BVVhfQ0ZHNCk7Cj4+ICsJY2Fz ZSBQSFlfQVVYX0NGRzU6Cj4+ICsJCXJldHVybiBEUF9FTlVNX1NUUihQSFlfQVVYX0NGRzUpOwo+ PiArCWNhc2UgUEhZX0FVWF9DRkc2Ogo+PiArCQlyZXR1cm4gRFBfRU5VTV9TVFIoUEhZX0FVWF9D Rkc2KTsKPj4gKwljYXNlIFBIWV9BVVhfQ0ZHNzoKPj4gKwkJcmV0dXJuIERQX0VOVU1fU1RSKFBI WV9BVVhfQ0ZHNyk7Cj4+ICsJY2FzZSBQSFlfQVVYX0NGRzg6Cj4+ICsJCXJldHVybiBEUF9FTlVN X1NUUihQSFlfQVVYX0NGRzgpOwo+PiArCWNhc2UgUEhZX0FVWF9DRkc5Ogo+PiArCQlyZXR1cm4g RFBfRU5VTV9TVFIoUEhZX0FVWF9DRkc5KTsKPj4gKwlkZWZhdWx0Ogo+PiArCQlyZXR1cm4gInVu a25vd24iOwo+PiArCX0KPj4gK30KPiAKPiBTYW1lIGRlYWwgYXMgdGhlIG90aGVycywgcmVtb3Zl IGFuZCBwcmludCB0aGUgZW51bSB2YWx1ZSBpbnN0ZWFkLgo+IApGaXhlZCBpbiBWMi4KCj4+ICsK Pj4gKy8qKgo+PiArICogc3RydWN0IGRwX3BhcnNlciAtIERQIHBhcnNlcidzIGRhdGEgZXhwb3Nl ZCB0byBjbGllbnRzCj4+ICsgKgo+PiArICogQHBkZXY6IHBsYXRmb3JtIGRhdGEgb2YgdGhlIGNs aWVudAo+PiArICogQG1wOiBncGlvLCByZWd1bGF0b3IgYW5kIGNsb2NrIHJlbGF0ZWQgZGF0YQo+ PiArICogQHBpbmN0cmw6IHBpbi1jb250cm9sIHJlbGF0ZWQgZGF0YQo+PiArICogQGRpc3BfZGF0 YTogY29udHJvbGxlcidzIGRpc3BsYXkgcmVsYXRlZCBkYXRhCj4+ICsgKiBAcGFyc2U6IGZ1bmN0 aW9uIHRvIGJlIGNhbGxlZCBieSBjbGllbnQgdG8gcGFyc2UgZGV2aWNlIHRyZWUuCj4+ICsgKi8K Pj4gK3N0cnVjdCBkcF9wYXJzZXIgewo+PiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7 Cj4+ICsJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgbXBbRFBfTUFYX1BNXTsKPj4gKwlzdHJ1Y3Qg ZHBfcGluY3RybCBwaW5jdHJsOwo+PiArCXN0cnVjdCBkcF9pbyBpbzsKPj4gKwlzdHJ1Y3QgZHBf ZGlzcGxheV9kYXRhIGRpc3BfZGF0YTsKPj4gKwo+PiArCXU4IGxfbWFwWzRdOwo+PiArCXN0cnVj dCBkcF9hdXhfY2ZnIGF1eF9jZmdbQVVYX0NGR19MRU5dOwo+PiArCXUzMiBtYXhfcGNsa19raHo7 Cj4+ICsKPj4gKwlpbnQgKCpwYXJzZSkoc3RydWN0IGRwX3BhcnNlciAqcGFyc2VyKTsKPj4gK307 Cj4+ICsKPj4gKy8qKgo+PiArICogZHBfcGFyc2VyX2dldCgpIC0gZ2V0IHRoZSBEUCdzIGRldmlj ZSB0cmVlIHBhcnNlciBtb2R1bGUKPj4gKyAqCj4+ICsgKiBAcGRldjogcGxhdGZvcm0gZGF0YSBv ZiB0aGUgY2xpZW50Cj4+ICsgKiByZXR1cm46IHBvaW50ZXIgdG8gZHBfcGFyc2VyIHN0cnVjdHVy ZS4KPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGNsaWVudCBjYXBhYmlsaXR5 IHRvIHBhcnNlIHRoZQo+PiArICogZGV2aWNlIHRyZWUgYW5kIHBvcHVsYXRlIHRoZSBkYXRhIHN0 cnVjdHVyZXMuIFRoZSBkYXRhCj4+ICsgKiByZWxhdGVkIHRvIGNsb2NrLCByZWd1bGF0b3JzLCBw aW4tY29udHJvbCBhbmQgb3RoZXIKPj4gKyAqIGNhbiBiZSBwYXJzZWQgdXNpbmcgdGhpcyBtb2R1 bGUuCj4+ICsgKi8KPj4gK3N0cnVjdCBkcF9wYXJzZXIgKmRwX3BhcnNlcl9nZXQoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldik7Cj4+ICsKPj4gKy8qKgo+PiArICogZHBfcGFyc2VyX3B1dCgp IC0gY2xlYW5zIHRoZSBkcF9wYXJzZXIgbW9kdWxlCj4+ICsgKgo+PiArICogQHBhcnNlcjogcG9p bnRlciB0byB0aGUgcGFyc2VyJ3MgZGF0YS4KPj4gKyAqLwo+PiArdm9pZCBkcF9wYXJzZXJfcHV0 KHN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcik7Cj4+ICsjZW5kaWYKPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcG93ZXIuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX3Bvd2VyLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4u MWQ1ODQ4MAo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfcG93ZXIuYwo+PiBAQCAtMCwwICsxLDU5OSBAQAo+PiArLyoKPj4gKyAqIENvcHlyaWdodCAo YykgMjAxMi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyAKPj4gcmVzZXJ2 ZWQuCj4+ICsgKgo+PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciAKPj4gbW9kaWZ5Cj4+ICsgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPj4gKyAq IG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPj4gKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPj4gKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiAr ICovCj4+ICsKPj4gKyNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm0tZHBdICVzOiAiIGZtdCwgX19m dW5jX18KPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+PiArI2luY2x1ZGUgImRwX3Bv d2VyLmgiCj4+ICsKPj4gKyNkZWZpbmUgRFBfQ0xJRU5UX05BTUVfU0laRQkyMAo+IAo+IFVudXNl ZAo+IApXaWxsIGZpeCB0aGlzIGluIFYzLgoKPj4gKwo+PiArc3RydWN0IGRwX3Bvd2VyX3ByaXZh dGUgewo+PiArCXN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcjsKPj4gKwlzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2Owo+PiArCXN0cnVjdCBjbGsgKnBpeGVsX2Nsa19yY2c7Cj4+ICsJc3RydWN0 IGNsayAqcGl4ZWxfcGFyZW50Owo+PiArCj4+ICsJc3RydWN0IGRwX3Bvd2VyIGRwX3Bvd2VyOwo+ PiArCj4+ICsJYm9vbCBjb3JlX2Nsa3Nfb247Cj4+ICsJYm9vbCBsaW5rX2Nsa3Nfb247Cj4+ICt9 Owo+PiArCj4+ICtzdGF0aWMgaW50IGRwX3Bvd2VyX3JlZ3VsYXRvcl9pbml0KHN0cnVjdCBkcF9w b3dlcl9wcml2YXRlICpwb3dlcikKPj4gK3sKPj4gKwlpbnQgcmMgPSAwLCBpID0gMCwgaiA9IDA7 Cj4+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKPj4gKwlzdHJ1Y3QgZHBfcGFyc2Vy ICpwYXJzZXI7Cj4+ICsKPj4gKwlwYXJzZXIgPSBwb3dlci0+cGFyc2VyOwo+PiArCXBkZXYgPSBw b3dlci0+cGRldjsKPiAKPiBNb3ZlIHRoZXNlIGluaXRpYWxpemF0aW9ucyB1cCB0byB0aGUgZGVj bGFyYXRpb24uIFBsZWFzZSBhcHBseSB0aGlzIHRvIAo+IHRoZSByZXN0Cj4gb2YgdGhlIGNvZGUg YXMgd2VsbC4KPiAKV2lsbCBmaXggdGhpcyBpbiBWMy4KCj4gCj4+ICsKPj4gKwlmb3IgKGkgPSBE UF9DT1JFX1BNOyAhcmMgJiYgKGkgPCBEUF9NQVhfUE0pOyBpKyspIHsKPiAKPiBObyBuZWVkIHRv IGNoZWNrIHJjIHdoZW4gdGhlIG9ubHkgcGxhY2UgaXQgY2FuIGdvIG5vbi16ZXJvIGlzIHRoZSBw bGFjZSAKPiB0aGF0Cj4gaGFzIGEgYnJlYWs7Cj4gCj4+ICsJCXJjID0gbXNtX2Rzc19jb25maWdf dnJlZygmcGRldi0+ZGV2LAo+PiArCQkJcGFyc2VyLT5tcFtpXS52cmVnX2NvbmZpZywKPj4gKwkJ CXBhcnNlci0+bXBbaV0ubnVtX3ZyZWcsIDEpOwo+PiArCQlpZiAocmMpIHsKPj4gKwkJCXByX2Vy cigiZmFpbGVkIHRvIGluaXQgdnJlZ3MgZm9yICVzXG4iLAo+PiArCQkJCWRwX3BhcnNlcl9wbV9u YW1lKGkpKTsKPj4gKwkJCWZvciAoaiA9IGkgLSAxOyBqID49IERQX0NPUkVfUE07IGotLSkgewo+ PiArCQkJCW1zbV9kc3NfY29uZmlnX3ZyZWcoJnBkZXYtPmRldiwKPj4gKwkJCQlwYXJzZXItPm1w W2pdLnZyZWdfY29uZmlnLAo+PiArCQkJCXBhcnNlci0+bXBbal0ubnVtX3ZyZWcsIDApOwo+PiAr CQkJfQo+IAo+IFB1dCB0aGlzIGxvb3AgaW4gdGhlIGVycm9yIGxhYmVsIGFuZCByZXR1cm4gMCBh Ym92ZSBpdC4gQmV0dGVyIHlldCwgCj4ganVzdCBjYWxsCj4gdGhlIGRwX3Bvd2VyX3JlZ3VsYXRv cl9kZWluaXQgaW4gZXJyb3IuCj4gCldpbGwgZml4IHRoaXMgZnVuY3Rpb24gaW4gVjMuCgo+PiAr Cj4+ICsJCQlnb3RvIGVycm9yOwo+PiArCQl9Cj4+ICsJfQo+PiArZXJyb3I6Cj4+ICsJcmV0dXJu IHJjOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkcF9wb3dlcl9yZWd1bGF0b3JfZGVpbml0 KHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcikKPj4gK3sKPj4gKwlpbnQgcmMgPSAwLCBp ID0gMDsKPj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owo+PiArCXN0cnVjdCBkcF9w YXJzZXIgKnBhcnNlcjsKPj4gKwo+PiArCXBhcnNlciA9IHBvd2VyLT5wYXJzZXI7Cj4+ICsJcGRl diA9IHBvd2VyLT5wZGV2Owo+PiArCj4+ICsJZm9yIChpID0gRFBfQ09SRV9QTTsgKGkgPCBEUF9N QVhfUE0pOyBpKyspIHsKPiAKPiBVbm5lY2Vzc2FyeSAoKSwgYXBwbGllcyBlbHNld2hlcmUgdG9v LCBwbGVhc2UgbWFrZSBhIHBhc3MKPiAKV2lsbCBmaXggdGhpcyBpbiBWMy4KCj4+ICsJCXJjID0g bXNtX2Rzc19jb25maWdfdnJlZygmcGRldi0+ZGV2LAo+PiArCQkJcGFyc2VyLT5tcFtpXS52cmVn X2NvbmZpZywKPj4gKwkJCXBhcnNlci0+bXBbaV0ubnVtX3ZyZWcsIDApOwo+PiArCQlpZiAocmMp Cj4+ICsJCQlwcl9lcnIoImZhaWxlZCB0byBkZWluaXQgdnJlZ3MgZm9yICVzXG4iLAo+PiArCQkJ CWRwX3BhcnNlcl9wbV9uYW1lKGkpKTsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQg ZHBfcG93ZXJfcmVndWxhdG9yX2N0cmwoc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyLCAK Pj4gYm9vbCBlbmFibGUpCj4+ICt7Cj4+ICsJaW50IHJjID0gMCwgaSA9IDAsIGogPSAwOwo+PiAr CXN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcjsKPj4gKwo+PiArCXBhcnNlciA9IHBvd2VyLT5wYXJz ZXI7Cj4+ICsKPj4gKwlmb3IgKGkgPSBEUF9DT1JFX1BNOyBpIDwgRFBfTUFYX1BNOyBpKyspIHsK Pj4gKwkJcmMgPSBtc21fZHNzX2VuYWJsZV92cmVnKAo+PiArCQkJcGFyc2VyLT5tcFtpXS52cmVn X2NvbmZpZywKPj4gKwkJCXBhcnNlci0+bXBbaV0ubnVtX3ZyZWcsIGVuYWJsZSk7Cj4+ICsJCWlm IChyYykgewo+PiArCQkJcHJfZXJyKCJmYWlsZWQgdG8gJyVzJyB2cmVncyBmb3IgJXNcbiIsCj4+ ICsJCQkJCWVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiLAo+PiArCQkJCQlkcF9wYXJzZXJf cG1fbmFtZShpKSk7Cj4+ICsJCQlpZiAoZW5hYmxlKSB7Cj4+ICsJCQkJZm9yIChqID0gaS0xOyBq ID49IERQX0NPUkVfUE07IGotLSkgewo+PiArCQkJCQltc21fZHNzX2VuYWJsZV92cmVnKAo+PiAr CQkJCQlwYXJzZXItPm1wW2pdLnZyZWdfY29uZmlnLAo+PiArCQkJCQlwYXJzZXItPm1wW2pdLm51 bV92cmVnLCAwKTsKPj4gKwkJCQl9Cj4+ICsJCQl9Cj4+ICsJCQlnb3RvIGVycm9yOwo+PiArCQl9 Cj4+ICsJfQo+PiArZXJyb3I6Cj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+IAo+IFRoaXMgZnVuY3Rp b24gaXMgYmFzaWNhbGx5IGlkZW50aWNhbCB0byBkcF9wb3dlcl9yZWd1bGF0b3JfaW5pdCgpLCAK PiBwbGVhc2UKPiBkZWxldGUgdGhpcyBmdW5jdGlvbiBhbmQgdXNlIGRwX3Bvd2VyX3JlZ3VsYXRv cl9pbml0KCkuCj4gClRob3VnaCBpdHMgaWRlbnRpY2FsLCB3ZSBkb24ndCB3YW50IHRvIGNvbWJp bmUgdGhlbSBzaW5jZSB3ZSBoYXZlIHRvIApoYXZlIGluZGl2aWR1YWwgZm9yIGxvb3BzIGZvciBp bml0IGFuZCBlbmFibGUvZGlzYWJsZS4KCj4gCj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcG93ZXJf cGluY3RybF9zZXQoc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyLCBib29sIAo+PiBhY3Rp dmUpCj4+ICt7Cj4+ICsJaW50IHJjID0gLUVGQVVMVDsKPj4gKwlzdHJ1Y3QgcGluY3RybF9zdGF0 ZSAqcGluX3N0YXRlOwo+PiArCXN0cnVjdCBkcF9wYXJzZXIgKnBhcnNlcjsKPj4gKwo+PiArCXBh cnNlciA9IHBvd2VyLT5wYXJzZXI7Cj4+ICsKPj4gKwlpZiAoSVNfRVJSX09SX05VTEwocGFyc2Vy LT5waW5jdHJsLnBpbikpCj4+ICsJCXJldHVybiBQVFJfRVJSKHBhcnNlci0+cGluY3RybC5waW4p Owo+PiArCj4+ICsJcGluX3N0YXRlID0gYWN0aXZlID8gcGFyc2VyLT5waW5jdHJsLnN0YXRlX2Fj dGl2ZQo+PiArCQkJCTogcGFyc2VyLT5waW5jdHJsLnN0YXRlX3N1c3BlbmQ7Cj4+ICsJaWYgKCFJ U19FUlJfT1JfTlVMTChwaW5fc3RhdGUpKSB7Cj4gCj4gSG93IGlzIHRoaXMgbm90IHBvc3NpYmxl PyBZb3UgY2hlY2sgdGhlc2Ugb24gaW5pdGlhbGl6YXRpb24uCj4gCldpbGwgcmVtb3ZlIHRoaXMg aW4gVjMuCj4+ICsJCXJjID0gcGluY3RybF9zZWxlY3Rfc3RhdGUocGFyc2VyLT5waW5jdHJsLnBp biwKPj4gKwkJCQlwaW5fc3RhdGUpOwo+IAo+IENvbWJpbmUgb24gMSBsaW5lCj4gCkZpeGVkIGlu IFYyLgoKPj4gKwkJaWYgKHJjKQo+PiArCQkJcHJfZXJyKCJjYW4gbm90IHNldCAlcyBwaW5zXG4i LAo+PiArCQkJICAgICAgIGFjdGl2ZSA/ICJkcF9hY3RpdmUiCj4+ICsJCQkgICAgICAgOiAiZHBf c2xlZXAiKTsKPiAKPiAKPiBDb21iaW5lIG9uIG9uZSBsaW5lLiBBbHNvIHJldHVybiBpbW1lZGlh dGVseSBpZiB0aGlzIGlzIHRoZSBjYXNlLgo+IApGaXhlZCBpbiBWMi4KCj4+ICsJfSBlbHNlIHsK Pj4gKwkJcHJfZXJyKCJpbnZhbGlkICclcycgcGluc3RhdGVcbiIsCj4+ICsJCSAgICAgICBhY3Rp dmUgPyAiZHBfYWN0aXZlIgo+PiArCQkgICAgICAgOiAiZHBfc2xlZXAiKTsKPj4gKwl9Cj4+ICsK Pj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcG93ZXJfY2xrX2lu aXQoc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyLCBib29sIAo+PiBlbmFibGUpCj4gCj4g U3BsaXQgdGhpcyBpbnRvIGluaXQvZGVpbml0LCB0aGUgcGF0aHMgZG9uJ3Qgc2hhcmUgY29kZS4K PiAKRml4ZWQgaW4gVjIuCgo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRzc19t b2R1bGVfcG93ZXIgKmNvcmUsICpjdHJsOwo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwo+ PiArCWNvcmUgPSAmcG93ZXItPnBhcnNlci0+bXBbRFBfQ09SRV9QTV07Cj4+ICsJY3RybCA9ICZw b3dlci0+cGFyc2VyLT5tcFtEUF9DVFJMX1BNXTsKPj4gKwo+PiArCWRldiA9ICZwb3dlci0+cGRl di0+ZGV2Owo+PiArCj4+ICsJaWYgKCFjb3JlIHx8ICFjdHJsKSB7Cj4+ICsJCXByX2VycigiaW52 YWxpZCBwb3dlcl9kYXRhXG4iKTsKPj4gKwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGV4aXQ7 Cj4+ICsJfQo+PiArCj4+ICsJaWYgKGVuYWJsZSkgewo+PiArCQlyYyA9IG1zbV9kc3NfZ2V0X2Ns ayhkZXYsIGNvcmUtPmNsa19jb25maWcsIGNvcmUtPm51bV9jbGspOwo+PiArCQlpZiAocmMpIHsK Pj4gKwkJCXByX2VycigiZmFpbGVkIHRvIGdldCAlcyBjbGsuIGVycj0lZFxuIiwKPj4gKwkJCQlk cF9wYXJzZXJfcG1fbmFtZShEUF9DT1JFX1BNKSwgcmMpOwo+PiArCQkJZ290byBleGl0Owo+PiAr CQl9Cj4+ICsKPj4gKwkJcmMgPSBtc21fZHNzX2dldF9jbGsoZGV2LCBjdHJsLT5jbGtfY29uZmln LCBjdHJsLT5udW1fY2xrKTsKPj4gKwkJaWYgKHJjKSB7Cj4+ICsJCQlwcl9lcnIoImZhaWxlZCB0 byBnZXQgJXMgY2xrLiBlcnI9JWRcbiIsCj4+ICsJCQkJZHBfcGFyc2VyX3BtX25hbWUoRFBfQ1RS TF9QTSksIHJjKTsKPj4gKwkJCWdvdG8gY3RybF9nZXRfZXJyb3I7Cj4+ICsJCX0KPj4gKwo+PiAr CQlwb3dlci0+cGl4ZWxfY2xrX3JjZyA9IGRldm1fY2xrX2dldChkZXYsICJwaXhlbF9jbGtfcmNn Iik7Cj4+ICsJCWlmIChJU19FUlIocG93ZXItPnBpeGVsX2Nsa19yY2cpKSB7Cj4+ICsJCQlwcl9k ZWJ1ZygiVW5hYmxlIHRvIGdldCBEUCBwaXhlbCBjbGsgUkNHXG4iKTsKPj4gKwkJCXBvd2VyLT5w aXhlbF9jbGtfcmNnID0gTlVMTDsKPj4gKwkJfQo+PiArCj4+ICsJCXBvd2VyLT5waXhlbF9wYXJl bnQgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGl4ZWxfcGFyZW50Iik7Cj4+ICsJCWlmIChJU19FUlIo cG93ZXItPnBpeGVsX3BhcmVudCkpIHsKPj4gKwkJCXByX2RlYnVnKCJVbmFibGUgdG8gZ2V0IERQ IHBpeGVsIFJDRyBwYXJlbnRcbiIpOwo+PiArCQkJcG93ZXItPnBpeGVsX3BhcmVudCA9IE5VTEw7 Cj4+ICsJCX0KPj4gKwl9IGVsc2Ugewo+PiArCQlpZiAocG93ZXItPnBpeGVsX3BhcmVudCkKPj4g KwkJCWRldm1fY2xrX3B1dChkZXYsIHBvd2VyLT5waXhlbF9wYXJlbnQpOwo+PiArCj4+ICsJCWlm IChwb3dlci0+cGl4ZWxfY2xrX3JjZykKPj4gKwkJCWRldm1fY2xrX3B1dChkZXYsIHBvd2VyLT5w aXhlbF9jbGtfcmNnKTsKPiAKPiBkZXZpY2UgbWFuYWdlZCByZXNvdXJjZXMgZG9uJ3QgbmVlZCB0 byBiZSBmcmVlZAo+IApGaXhlZCBpbiB2Mi4KCj4+ICsKPj4gKwkJbXNtX2Rzc19wdXRfY2xrKGN0 cmwtPmNsa19jb25maWcsIGN0cmwtPm51bV9jbGspOwo+PiArCQltc21fZHNzX3B1dF9jbGsoY29y ZS0+Y2xrX2NvbmZpZywgY29yZS0+bnVtX2Nsayk7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIHJj Owo+PiArCj4+ICtjdHJsX2dldF9lcnJvcjoKPj4gKwltc21fZHNzX3B1dF9jbGsoY29yZS0+Y2xr X2NvbmZpZywgY29yZS0+bnVtX2Nsayk7Cj4gCj4gU2luY2UgdGhpcyBpcyBvbmx5IHVzZWQgaW4g b25lIHBsYWNlLCBqdXN0IGRvIGl0IGFib3ZlIGFuZCByZXR1cm4gCj4gZGlyZWN0bHkuCj4gCj4+ ICtleGl0Ogo+IAo+IERlbGV0ZSBleGl0IGxhYmVsIGFuZCByZXR1cm4gZGlyZWN0bHkKPiAKRml4 ZWQgaW4gVjIuCgo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9w b3dlcl9jbGtfc2V0X3JhdGUoc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyLAo+PiArCQll bnVtIGRwX3BtX3R5cGUgbW9kdWxlLCBib29sIGVuYWJsZSkKPj4gK3sKPj4gKwlpbnQgcmMgPSAw Owo+PiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcDsKPj4gKwo+PiArCWlmICghcG93ZXIp IHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIHBvd2VyIGRhdGFcbiIpOwo+PiArCQlyYyA9IC1FSU5W QUw7Cj4+ICsJCWdvdG8gZXhpdDsKPj4gKwl9Cj4+ICsKPj4gKwltcCA9ICZwb3dlci0+cGFyc2Vy LT5tcFttb2R1bGVdOwo+PiArCj4+ICsJaWYgKGVuYWJsZSkgewo+PiArCQlyYyA9IG1zbV9kc3Nf Y2xrX3NldF9yYXRlKG1wLT5jbGtfY29uZmlnLCBtcC0+bnVtX2Nsayk7Cj4+ICsJCWlmIChyYykg ewo+PiArCQkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IGNsa3MgcmF0ZS5cbiIpOwo+PiArCQkJZ290 byBleGl0Owo+PiArCQl9Cj4+ICsKPj4gKwkJcmMgPSBtc21fZHNzX2VuYWJsZV9jbGsobXAtPmNs a19jb25maWcsIG1wLT5udW1fY2xrLCAxKTsKPj4gKwkJaWYgKHJjKSB7Cj4+ICsJCQlwcl9lcnIo ImZhaWxlZCB0byBlbmFibGUgY2xrc1xuIik7Cj4+ICsJCQlnb3RvIGV4aXQ7Cj4+ICsJCX0KPj4g Kwl9IGVsc2Ugewo+PiArCQlyYyA9IG1zbV9kc3NfZW5hYmxlX2NsayhtcC0+Y2xrX2NvbmZpZywg bXAtPm51bV9jbGssIDApOwo+PiArCQlpZiAocmMpIHsKPj4gKwkJCXByX2VycigiZmFpbGVkIHRv IGRpc2FibGUgY2xrc1xuIik7Cj4+ICsJCQkJZ290byBleGl0Owo+PiArCQl9Cj4gCj4gVGhpcyBm dW5jdGlvbiBhY3R1YWxseSBjYW4gc2hhcmUgY29kZSwgYnV0IGl0IGRvZXNuJ3QgOiggUGxlYXNl IHB1bGwgCj4gdGhpcyBvdXQKPiBmb3IgYm90aCBwYXRocwo+IApVcGRhdGVkIGluIFYyLgoKPj4g Kwl9Cj4+ICtleGl0Ogo+IAo+IERlbGV0ZSBleGl0IGxhYmVsIGFuZCByZXR1cm4gZGlyZWN0bHkK PiAKRml4ZWQgaW4gVjIuCj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGRwX3Bvd2VyX2Nsa19lbmFibGUoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlciwKPj4gKwkJZW51 bSBkcF9wbV90eXBlIHBtX3R5cGUsIGJvb2wgZW5hYmxlKQo+PiArewo+PiArCWludCByYyA9IDA7 Cj4+ICsJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wOwo+PiArCXN0cnVjdCBkcF9wb3dlcl9w cml2YXRlICpwb3dlcjsKPj4gKwo+PiArCWlmICghZHBfcG93ZXIpIHsKPj4gKwkJcHJfZXJyKCJp bnZhbGlkIHBvd2VyIGRhdGFcbiIpOwo+PiArCQlyYyA9IC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXJy b3I7Cj4+ICsJfQo+PiArCj4+ICsJcG93ZXIgPSBjb250YWluZXJfb2YoZHBfcG93ZXIsIHN0cnVj dCBkcF9wb3dlcl9wcml2YXRlLCBkcF9wb3dlcik7Cj4+ICsKPj4gKwltcCA9ICZwb3dlci0+cGFy c2VyLT5tcFtwbV90eXBlXTsKPj4gKwo+PiArCWlmICgocG1fdHlwZSAhPSBEUF9DT1JFX1BNKSAm JiAocG1fdHlwZSAhPSBEUF9DVFJMX1BNKSkgewo+IAo+IFN0cmlwIG91dCB1bm5lY2Vzc2FyeSAo KQo+IEZpeGVkIGluIFYyLgoKPj4gKwkJcHJfZXJyKCJ1bnN1cHBvcnRlZCBwb3dlciBtb2R1bGU6 ICVzXG4iLAo+PiArCQkJCWRwX3BhcnNlcl9wbV9uYW1lKHBtX3R5cGUpKTsKPj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKGVuYWJsZSkgewo+PiArCQlpZiAoKHBtX3R5 cGUgPT0gRFBfQ09SRV9QTSkKPj4gKwkJCSYmIChwb3dlci0+Y29yZV9jbGtzX29uKSkgewo+IAo+ IEhlcmUgdG9vCj4gCj4gQ29tYmluZSBvbiBvbmUgbGluZSBhcyB3ZWxsCj4gCkZpeGVkIGluIHYy LgoKPj4gKwkJCXByX2RlYnVnKCJjb3JlIGNsa3MgYWxyZWFkeSBlbmFibGVkXG4iKTsKPj4gKwkJ CXJldHVybiAwOwo+PiArCQl9Cj4+ICsKPj4gKwkJaWYgKChwbV90eXBlID09IERQX0NUUkxfUE0p Cj4+ICsJCQkmJiAocG93ZXItPmxpbmtfY2xrc19vbikpIHsKPiAKPiBhbmQgaGVyZQo+IAo+PiAr CQkJcHJfZGVidWcoImxpbmtzIGNsa3MgYWxyZWFkeSBlbmFibGVkXG4iKTsKPj4gKwkJCXJldHVy biAwOwo+PiArCQl9Cj4+ICsKPj4gKwkJaWYgKChwbV90eXBlID09IERQX0NUUkxfUE0pICYmICgh cG93ZXItPmNvcmVfY2xrc19vbikpIHsKPiAKPiBhbmQgaGVyZQo+IE1pc3NlZCBvbmUgY29ycmVj dC4gQWxsIG90aGVycyBhcmUgZml4ZWQgaW4gVjIuIFdpbGwgZml4IHRoZSBtaXNzaW5nIGluIAo+ IFYzLgoKPj4gKwkJCXByX2RlYnVnKCJOZWVkIHRvIGVuYWJsZSBjb3JlIGNsa3MgYmVmb3JlIGxp bmsgY2xrc1xuIik7Cj4+ICsKPj4gKwkJCXJjID0gZHBfcG93ZXJfY2xrX3NldF9yYXRlKHBvd2Vy LCBEUF9DT1JFX1BNLCBlbmFibGUpOwo+PiArCQkJaWYgKHJjKSB7Cj4+ICsJCQkJcHJfZXJyKCJm YWlsZWQgdG8gZW5hYmxlIGNsa3M6ICVzLiBlcnI9JWRcbiIsCj4+ICsJCQkJCWRwX3BhcnNlcl9w bV9uYW1lKERQX0NPUkVfUE0pLCByYyk7Cj4+ICsJCQkJZ290byBlcnJvcjsKPj4gKwkJCX0gZWxz ZSB7Cj4+ICsJCQkJcG93ZXItPmNvcmVfY2xrc19vbiA9IHRydWU7Cj4gCj4gVGhpcyBkb2Vzbid0 IG5lZWQgdG8gYmUgd3JhcHBlZCBpbiB0aGUgZWxzZQo+IApGaXhlZCBpbiBWMi4KPj4gKwkJCX0K Pj4gKwkJfQo+PiArCX0KPj4gKwo+PiArCXJjID0gZHBfcG93ZXJfY2xrX3NldF9yYXRlKHBvd2Vy LCBwbV90eXBlLCBlbmFibGUpOwo+PiArCWlmIChyYykgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0 byAnJXMnIGNsa3MgZm9yOiAlcy4gZXJyPSVkXG4iLAo+PiArCQkJZW5hYmxlID8gImVuYWJsZSIg OiAiZGlzYWJsZSIsCj4+ICsJCQlkcF9wYXJzZXJfcG1fbmFtZShwbV90eXBlKSwgcmMpOwo+PiAr CQkJZ290byBlcnJvcjsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAocG1fdHlwZSA9PSBEUF9DT1JFX1BN KQo+PiArCQlwb3dlci0+Y29yZV9jbGtzX29uID0gZW5hYmxlOwo+PiArCWVsc2UKPj4gKwkJcG93 ZXItPmxpbmtfY2xrc19vbiA9IGVuYWJsZTsKPj4gKwo+PiArCXByX2RlYnVnKCIlcyBjbG9ja3Mg Zm9yICVzXG4iLAo+PiArCQkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIsCj4+ICsJCQlk cF9wYXJzZXJfcG1fbmFtZShwbV90eXBlKSk7Cj4+ICsJcHJfZGVidWcoImxpbmtfY2xrczolcyBj b3JlX2Nsa3M6JXNcbiIsCj4+ICsJCXBvd2VyLT5saW5rX2Nsa3Nfb24gPyAib24iIDogIm9mZiIs Cj4+ICsJCXBvd2VyLT5jb3JlX2Nsa3Nfb24gPyAib24iIDogIm9mZiIpOwo+PiArZXJyb3I6Cj4g Cj4gRGVsZXRlIGVycm9yIGxhYmVsIGFuZCByZXR1cm4gZGlyZWN0bHkKPiAKRml4ZWQgaW4gVjIu Cgo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkcF9wb3dlcl9yZXF1 ZXN0X2dwaW9zKHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcikKPj4gK3sKPj4gKwlpbnQg cmMgPSAwLCBpOwo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwlzdHJ1Y3QgZHNzX21vZHVs ZV9wb3dlciAqbXA7Cj4+ICsJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBncGlvX25hbWVzW10g PSB7Cj4+ICsJCSJhdXhfZW5hYmxlIiwgImF1eF9zZWwiLCAidXNicGx1Z19jYyIsCj4+ICsJfTsK Pj4gKwo+PiArCWlmICghcG93ZXIpIHsKPj4gKwkJcHJfZXJyKCJpbnZhbGlkIHBvd2VyIGRhdGFc biIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlkZXYgPSAmcG93ZXIt PnBkZXYtPmRldjsKPj4gKwltcCA9ICZwb3dlci0+cGFyc2VyLT5tcFtEUF9DT1JFX1BNXTsKPj4g Kwo+PiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGdwaW9fbmFtZXMpOyBpKyspIHsKPj4g KwkJdW5zaWduZWQgaW50IGdwaW8gPSBtcC0+Z3Bpb19jb25maWdbaV0uZ3BpbzsKPj4gKwo+PiAr CQlpZiAoZ3Bpb19pc192YWxpZChncGlvKSkgewo+IAo+IGlmICghZ3Bpb19pc192YWxpZChncGlv KSkKPiAJY29udGludWU7Cj4gClVwZGF0ZWQgaW4gVjIuCgo+IGFuZCBzYXZlIHlvdXJzZWxmIHNv bWUgaW5kZW50IHNwYWNlCj4gCj4+ICsJCQlyYyA9IGRldm1fZ3Bpb19yZXF1ZXN0KGRldiwgZ3Bp bywgZ3Bpb19uYW1lc1tpXSk7Cj4+ICsJCQlpZiAocmMpIHsKPj4gKwkJCQlwcl9lcnIoInJlcXVl c3QgJXMgZ3BpbyBmYWlsZWQsIHJjPSVkXG4iLAo+PiArCQkJCQkgICAgICAgZ3Bpb19uYW1lc1tp XSwgcmMpOwo+PiArCQkJCWdvdG8gZXJyb3I7Cj4+ICsJCQl9Cj4+ICsJCX0KPj4gKwl9Cj4+ICsJ cmV0dXJuIDA7Cj4+ICtlcnJvcjoKPj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShncGlv X25hbWVzKTsgaSsrKSB7Cj4+ICsJCXVuc2lnbmVkIGludCBncGlvID0gbXAtPmdwaW9fY29uZmln W2ldLmdwaW87Cj4+ICsKPj4gKwkJaWYgKGdwaW9faXNfdmFsaWQoZ3BpbykpCj4+ICsJCQlncGlv X2ZyZWUoZ3Bpbyk7Cj4+ICsJfQo+IAo+IGdwaW9zIGFyZSBkZXZpY2UgbWFuYWdlZCwgc28geW91 IHNob3VsZG4ndCBuZWVkIHRoaXMuCj4gCj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgYm9vbCBkcF9wb3dlcl9maW5kX2dwaW8oY29uc3QgY2hhciAqZ3BpbzEsIGNvbnN0IGNo YXIgKmdwaW8yKQo+PiArewo+PiArCXJldHVybiAhIXN0cm5zdHIoZ3BpbzEsIGdwaW8yLCBzdHJs ZW4oZ3BpbzEpKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfcG93ZXJfc2V0X2dwaW8o c3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyLCBib29sIAo+PiBmbGlwKQo+PiArewo+PiAr CWludCBpOwo+PiArCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcCA9ICZwb3dlci0+cGFyc2Vy LT5tcFtEUF9DT1JFX1BNXTsKPj4gKwlzdHJ1Y3QgZHNzX2dwaW8gKmNvbmZpZyA9IG1wLT5ncGlv X2NvbmZpZzsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBtcC0+bnVtX2dwaW87IGkrKykgewo+ PiArCQlpZiAoZHBfcG93ZXJfZmluZF9ncGlvKGNvbmZpZy0+Z3Bpb19uYW1lLCAiYXV4LXNlbCIp KQo+PiArCQkJY29uZmlnLT52YWx1ZSA9IGZsaXA7Cj4+ICsKPj4gKwkJaWYgKGdwaW9faXNfdmFs aWQoY29uZmlnLT5ncGlvKSkgewo+PiArCQkJcHJfZGVidWcoImdwaW8gJXMsIHZhbHVlICVkXG4i LCBjb25maWctPmdwaW9fbmFtZSwKPj4gKwkJCQljb25maWctPnZhbHVlKTsKPj4gKwo+PiArCQkJ aWYgKGRwX3Bvd2VyX2ZpbmRfZ3Bpbyhjb25maWctPmdwaW9fbmFtZSwgImF1eC1lbiIpIHx8Cj4+ ICsJCQkgICAgZHBfcG93ZXJfZmluZF9ncGlvKGNvbmZpZy0+Z3Bpb19uYW1lLCAiYXV4LXNlbCIp KQo+PiArCQkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChjb25maWctPmdwaW8sCj4+ICsJCQkJCWNv bmZpZy0+dmFsdWUpOwo+PiArCQkJZWxzZQo+PiArCQkJCWdwaW9fc2V0X3ZhbHVlKGNvbmZpZy0+ Z3BpbywgY29uZmlnLT52YWx1ZSk7Cj4+ICsKPj4gKwkJfQo+PiArCQljb25maWcrKzsKPj4gKwl9 Cj4gCj4gSW5zdGVhZCBvZiBhbGwgb2YgdGhlc2Ugc3RyaW5nIG9wcywgcGxlYXNlIGp1c3QgbWFr ZSBwb2ludGVycyAKPiBhY2Nlc3NpYmxlIHNvIHlvdQo+IGNhbiBnZXQgYXQgdGhlIGdwaW8gZGly ZWN0bHkuCj4gCldpbGwgZm9sbG93IHVwIG9uIHRoaXMgaW4gVjMuCj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgZHBfcG93ZXJfY29uZmlnX2dwaW9zKHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpw b3dlciwgYm9vbCAKPj4gZmxpcCwKPj4gKwkJCQkJYm9vbCBlbmFibGUpCj4gCj4gU3BsaXQgaW50 byAyIGZ1bmN0aW9ucwo+IApXaWxsIGZpeCB0aGlzIGluIFYzLgo+PiArewo+PiArCWludCByYyA9 IDAsIGk7Cj4+ICsJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wOwo+PiArCXN0cnVjdCBkc3Nf Z3BpbyAqY29uZmlnOwo+PiArCj4+ICsJbXAgPSAmcG93ZXItPnBhcnNlci0+bXBbRFBfQ09SRV9Q TV07Cj4+ICsJY29uZmlnID0gbXAtPmdwaW9fY29uZmlnOwo+PiArCj4+ICsJaWYgKGVuYWJsZSkg ewo+PiArCQlyYyA9IGRwX3Bvd2VyX3JlcXVlc3RfZ3Bpb3MocG93ZXIpOwo+PiArCQlpZiAocmMp IHsKPj4gKwkJCXByX2VycigiZ3BpbyByZXF1ZXN0IGZhaWxlZFxuIik7Cj4+ICsJCQlyZXR1cm4g cmM7Cj4+ICsJCX0KPj4gKwo+PiArCQlkcF9wb3dlcl9zZXRfZ3Bpbyhwb3dlciwgZmxpcCk7Cj4+ ICsJfSBlbHNlIHsKPj4gKwkJZm9yIChpID0gMDsgaSA8IG1wLT5udW1fZ3BpbzsgaSsrKSB7Cj4+ ICsJCQlncGlvX3NldF92YWx1ZShjb25maWdbaV0uZ3BpbywgMCk7Cj4+ICsJCQlncGlvX2ZyZWUo Y29uZmlnW2ldLmdwaW8pOwo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHBfcG93ZXJfY2xpZW50X2luaXQoc3RydWN0IGRwX3Bvd2Vy ICpkcF9wb3dlcikKPj4gK3sKPj4gKwlpbnQgcmMgPSAwOwo+PiArCXN0cnVjdCBkcF9wb3dlcl9w cml2YXRlICpwb3dlcjsKPj4gKwo+PiArCWlmICghZHBfcG93ZXIpIHsKPj4gKwkJcHJfZXJyKCJp bnZhbGlkIHBvd2VyIGRhdGFcbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsK Pj4gKwlwb3dlciA9IGNvbnRhaW5lcl9vZihkcF9wb3dlciwgc3RydWN0IGRwX3Bvd2VyX3ByaXZh dGUsIGRwX3Bvd2VyKTsKPj4gKwo+PiArCXBtX3J1bnRpbWVfZW5hYmxlKCZwb3dlci0+cGRldi0+ ZGV2KTsKPj4gKwo+PiArCXJjID0gZHBfcG93ZXJfcmVndWxhdG9yX2luaXQocG93ZXIpOwo+PiAr CWlmIChyYykgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBpbml0IHJlZ3VsYXRvcnNcbiIpOwo+ IAo+IFByaW50IHJjCj4gCj4+ICsJCWdvdG8gZXJyb3JfcG93ZXI7Cj4+ICsJfQo+PiArCj4+ICsJ cmMgPSBkcF9wb3dlcl9jbGtfaW5pdChwb3dlciwgdHJ1ZSk7Cj4+ICsJaWYgKHJjKSB7Cj4+ICsJ CXByX2VycigiZmFpbGVkIHRvIGluaXQgY2xvY2tzXG4iKTsKPiAKPiBQcmludCByYwo+IApmaXhl ZCBpbiBWMi4KPj4gKwkJZ290byBlcnJvcl9jbGs7Cj4+ICsJfQo+PiArCXJldHVybiAwOwo+PiAr Cj4+ICtlcnJvcl9jbGs6Cj4+ICsJZHBfcG93ZXJfcmVndWxhdG9yX2RlaW5pdChwb3dlcik7Cj4+ ICtlcnJvcl9wb3dlcjoKPj4gKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBvd2VyLT5wZGV2LT5kZXYp Owo+PiArCXJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHBfcG93ZXJfY2xp ZW50X2RlaW5pdChzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2VyKQo+PiArewo+PiArCXN0cnVjdCBk cF9wb3dlcl9wcml2YXRlICpwb3dlcjsKPj4gKwo+PiArCWlmICghZHBfcG93ZXIpIHsKPj4gKwkJ cHJfZXJyKCJpbnZhbGlkIHBvd2VyIGRhdGFcbiIpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiAr Cj4+ICsJcG93ZXIgPSBjb250YWluZXJfb2YoZHBfcG93ZXIsIHN0cnVjdCBkcF9wb3dlcl9wcml2 YXRlLCBkcF9wb3dlcik7Cj4+ICsKPj4gKwlkcF9wb3dlcl9jbGtfaW5pdChwb3dlciwgZmFsc2Up Owo+PiArCWRwX3Bvd2VyX3JlZ3VsYXRvcl9kZWluaXQocG93ZXIpOwo+PiArCXBtX3J1bnRpbWVf ZGlzYWJsZSgmcG93ZXItPnBkZXYtPmRldik7Cj4+ICsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlu dCBkcF9wb3dlcl9zZXRfcGl4ZWxfY2xrX3BhcmVudChzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2Vy KQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBv d2VyOwo+PiArCj4+ICsJaWYgKCFkcF9wb3dlcikgewo+PiArCQlwcl9lcnIoImludmFsaWQgcG93 ZXIgZGF0YVxuIik7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBleGl0Owo+PiArCX0K Pj4gKwo+PiArCXBvd2VyID0gY29udGFpbmVyX29mKGRwX3Bvd2VyLCBzdHJ1Y3QgZHBfcG93ZXJf cHJpdmF0ZSwgZHBfcG93ZXIpOwo+PiArCj4+ICsJaWYgKHBvd2VyLT5waXhlbF9jbGtfcmNnICYm IHBvd2VyLT5waXhlbF9wYXJlbnQpCj4+ICsJCWNsa19zZXRfcGFyZW50KHBvd2VyLT5waXhlbF9j bGtfcmNnLCBwb3dlci0+cGl4ZWxfcGFyZW50KTsKPiAKPiBDaGVjayByZXR1cm4gdmFsdWUKPiAK Rml4ZWQgaW4gVjIuCj4+ICtleGl0Ogo+IAo+IERlbGV0ZSBsYWJlbC9yYywgcmV0dXJuIGltbWVk aWF0ZWx5Lgo+IApGaXhlZCBpbiBWMi4KCj4+ICsJcmV0dXJuIHJjOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IGRwX3Bvd2VyX2luaXQoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlciwgYm9vbCBm bGlwKQo+PiArewo+PiArCWludCByYyA9IDA7Cj4+ICsJc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUg KnBvd2VyOwo+PiArCj4+ICsJaWYgKCFkcF9wb3dlcikgewo+PiArCQlwcl9lcnIoImludmFsaWQg cG93ZXIgZGF0YVxuIik7Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBleGl0Owo+PiAr CX0KPj4gKwo+PiArCXBvd2VyID0gY29udGFpbmVyX29mKGRwX3Bvd2VyLCBzdHJ1Y3QgZHBfcG93 ZXJfcHJpdmF0ZSwgZHBfcG93ZXIpOwo+PiArCj4+ICsJcG1fcnVudGltZV9nZXRfc3luYygmcG93 ZXItPnBkZXYtPmRldik7Cj4+ICsJcmMgPSBkcF9wb3dlcl9yZWd1bGF0b3JfY3RybChwb3dlciwg dHJ1ZSk7Cj4+ICsJaWYgKHJjKSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSByZWd1 bGF0b3JzXG4iKTsKPiAKPiBQcmludCByYwo+IAo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJfQo+PiAr Cj4+ICsJcmMgPSBkcF9wb3dlcl9waW5jdHJsX3NldChwb3dlciwgdHJ1ZSk7Cj4+ICsJaWYgKHJj KSB7Cj4gCj4gUHJpbnQgcmMKPiAKRml4ZWQgaW4gVjIuCgo+PiArCQlwcl9lcnIoImZhaWxlZCB0 byBzZXQgcGluY3RybCBzdGF0ZVxuIik7Cj4+ICsJCWdvdG8gZXJyX3BpbmN0cmw7Cj4+ICsJfQo+ PiArCj4+ICsJcmMgPSBkcF9wb3dlcl9jb25maWdfZ3Bpb3MocG93ZXIsIGZsaXAsIHRydWUpOwo+ PiArCWlmIChyYykgewo+IAo+IFByaW50IHJjCj4gCkZpeGVkIGluIFYyLgoKPj4gKwkJcHJfZXJy KCJmYWlsZWQgdG8gZW5hYmxlIGdwaW9zXG4iKTsKPj4gKwkJZ290byBlcnJfZ3BpbzsKPj4gKwl9 Cj4+ICsKPj4gKwlyYyA9IGRwX3Bvd2VyX2Nsa19lbmFibGUoZHBfcG93ZXIsIERQX0NPUkVfUE0s IHRydWUpOwo+PiArCWlmIChyYykgewo+IAo+IFByaW50IHJjCj4gCj4+ICsJCXByX2VycigiZmFp bGVkIHRvIGVuYWJsZSBEUCBjb3JlIGNsb2Nrc1xuIik7Cj4+ICsJCWdvdG8gZXJyX2NsazsKPj4g Kwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gKwo+PiArZXJyX2NsazoKPj4gKwlkcF9wb3dlcl9j b25maWdfZ3Bpb3MocG93ZXIsIGZsaXAsIGZhbHNlKTsKPj4gK2Vycl9ncGlvOgo+PiArCWRwX3Bv d2VyX3BpbmN0cmxfc2V0KHBvd2VyLCBmYWxzZSk7Cj4+ICtlcnJfcGluY3RybDoKPj4gKwlkcF9w b3dlcl9yZWd1bGF0b3JfY3RybChwb3dlciwgZmFsc2UpOwo+PiArZXhpdDoKPj4gKwlwbV9ydW50 aW1lX3B1dF9zeW5jKCZwb3dlci0+cGRldi0+ZGV2KTsKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBpbnQgZHBfcG93ZXJfZGVpbml0KHN0cnVjdCBkcF9wb3dlciAqZHBfcG93 ZXIpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAq cG93ZXI7Cj4+ICsKPj4gKwlpZiAoIWRwX3Bvd2VyKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBw b3dlciBkYXRhXG4iKTsKPj4gKwkJcmMgPSAtRUlOVkFMOwo+PiArCQlnb3RvIGV4aXQ7Cj4+ICsJ fQo+PiArCj4+ICsJcG93ZXIgPSBjb250YWluZXJfb2YoZHBfcG93ZXIsIHN0cnVjdCBkcF9wb3dl cl9wcml2YXRlLCBkcF9wb3dlcik7Cj4+ICsKPj4gKwlkcF9wb3dlcl9jbGtfZW5hYmxlKGRwX3Bv d2VyLCBEUF9DT1JFX1BNLCBmYWxzZSk7Cj4+ICsJZHBfcG93ZXJfY29uZmlnX2dwaW9zKHBvd2Vy LCBmYWxzZSwgZmFsc2UpOwo+PiArCWRwX3Bvd2VyX3BpbmN0cmxfc2V0KHBvd2VyLCBmYWxzZSk7 Cj4+ICsJZHBfcG93ZXJfcmVndWxhdG9yX2N0cmwocG93ZXIsIGZhbHNlKTsKPj4gKwlwbV9ydW50 aW1lX3B1dF9zeW5jKCZwb3dlci0+cGRldi0+ZGV2KTsKPj4gK2V4aXQ6Cj4gCj4gRGVsZXRlIGV4 aXQgbGFiZWwvcmMgYW5kIHJldHVybiBkaXJlY3RseQo+IApGaXhlZCBpbiBWMi4KCj4+ICsJcmV0 dXJuIHJjOwo+PiArfQo+PiArCj4+ICtzdHJ1Y3QgZHBfcG93ZXIgKmRwX3Bvd2VyX2dldChzdHJ1 Y3QgZHBfcGFyc2VyICpwYXJzZXIpCj4+ICt7Cj4+ICsJaW50IHJjID0gMDsKPj4gKwlzdHJ1Y3Qg ZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXI7Cj4+ICsJc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlcjsK Pj4gKwo+PiArCWlmICghcGFyc2VyKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBpbnB1dFxuIik7 Cj4+ICsJCXJjID0gLUVJTlZBTDsKPj4gKwkJZ290byBlcnJvcjsKPj4gKwl9Cj4+ICsKPj4gKwlw b3dlciA9IGRldm1fa3phbGxvYygmcGFyc2VyLT5wZGV2LT5kZXYsIHNpemVvZigqcG93ZXIpLCAK Pj4gR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFwb3dlcikgewo+PiArCQlyYyA9IC1FTk9NRU07Cj4+ ICsJCWdvdG8gZXJyb3I7Cj4+ICsJfQo+PiArCj4+ICsJcG93ZXItPnBhcnNlciA9IHBhcnNlcjsK Pj4gKwlwb3dlci0+cGRldiA9IHBhcnNlci0+cGRldjsKPj4gKwo+PiArCWRwX3Bvd2VyID0gJnBv d2VyLT5kcF9wb3dlcjsKPj4gKwo+PiArCWRwX3Bvd2VyLT5pbml0ID0gZHBfcG93ZXJfaW5pdDsK Pj4gKwlkcF9wb3dlci0+ZGVpbml0ID0gZHBfcG93ZXJfZGVpbml0Owo+PiArCWRwX3Bvd2VyLT5j bGtfZW5hYmxlID0gZHBfcG93ZXJfY2xrX2VuYWJsZTsKPj4gKwlkcF9wb3dlci0+c2V0X3BpeGVs X2Nsa19wYXJlbnQgPSBkcF9wb3dlcl9zZXRfcGl4ZWxfY2xrX3BhcmVudDsKPj4gKwlkcF9wb3dl ci0+cG93ZXJfY2xpZW50X2luaXQgPSBkcF9wb3dlcl9jbGllbnRfaW5pdDsKPj4gKwlkcF9wb3dl ci0+cG93ZXJfY2xpZW50X2RlaW5pdCA9IGRwX3Bvd2VyX2NsaWVudF9kZWluaXQ7Cj4+ICsKPj4g KwlyZXR1cm4gZHBfcG93ZXI7Cj4+ICtlcnJvcjoKPj4gKwlyZXR1cm4gRVJSX1BUUihyYyk7Cj4+ ICt9Cj4+ICsKPj4gK3ZvaWQgZHBfcG93ZXJfcHV0KHN0cnVjdCBkcF9wb3dlciAqZHBfcG93ZXIp Cj4+ICt7Cj4+ICsJc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgKnBvd2VyID0gTlVMTDsKPj4gKwo+ PiArCWlmICghZHBfcG93ZXIpCj4+ICsJCXJldHVybjsKPj4gKwo+PiArCXBvd2VyID0gY29udGFp bmVyX29mKGRwX3Bvd2VyLCBzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSwgZHBfcG93ZXIpOwo+PiAr Cj4+ICsJZGV2bV9rZnJlZSgmcG93ZXItPnBkZXYtPmRldiwgcG93ZXIpOwo+PiArfQo+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5oIAo+PiBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfcG93ZXIuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRl eCAwMDAwMDAwLi5kMWFkYWFmCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9wb3dlci5oCj4+IEBAIC0wLDAgKzEsNTcgQEAKPj4gKy8qCj4+ICsgKiBD b3B5cmlnaHQgKGMpIDIwMTItMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMg Cj4+IHJlc2VydmVkLgoKCi9zbmlwCgoKPj4gKwo+PiArLyogVVNCMyBEUCBDT00gcmVnaXN0ZXJz ICovCj4+ICsjZGVmaW5lIFVTQjNfRFBfQ09NX1JFU0VUX09WUkRfQ1RSTCAoMHgxQykKPj4gKyNk ZWZpbmUgVVNCM19EUF9DT01fUEhZX01PREVfQ1RSTCAgICgweDAwKQo+PiArI2RlZmluZSBVU0Iz X0RQX0NPTV9TV19SRVNFVCAgICAgICAgKDB4MDQpCj4+ICsjZGVmaW5lIFVTQjNfRFBfQ09NX1RZ UEVDX0NUUkwgICAgICAoMHgxMCkKPj4gKyNkZWZpbmUgVVNCM19EUF9DT01fU1dJX0NUUkwgICAg ICAgICgweDBjKQo+PiArI2RlZmluZSBVU0IzX0RQX0NPTV9QT1dFUl9ET1dOX0NUUkwgKDB4MDgp Cj4+ICsKPj4gKwo+PiArCj4+ICsjZW5kaWYgLyogX0RQX1JFR19IXyAqLwo+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL21z bS9tc21fZHJ2LmMKPj4gaW5kZXggZjVjZDdmNi4uYmU4MDFiZSAxMDA2NDQKPj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZHJ2LmMKPj4gQEAgLTEzNjcsNiArMTM2Nyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG1zbV9k cm1fcmVnaXN0ZXIodm9pZCkKPj4gIAltc21fZHNpX3JlZ2lzdGVyKCk7Cj4+ICAJbXNtX2VkcF9y ZWdpc3RlcigpOwo+PiAgCW1zbV9oZG1pX3JlZ2lzdGVyKCk7Cj4+ICsJbXNtX2RwX3JlZ2lzdGVy KCk7Cj4+ICAJYWRyZW5vX3JlZ2lzdGVyKCk7Cj4+ICAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9y ZWdpc3RlcigmbXNtX3BsYXRmb3JtX2RyaXZlcik7Cj4+ICB9Cj4+IEBAIC0xMzc1LDYgKzEzNzYs NyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgbXNtX2RybV91bnJlZ2lzdGVyKHZvaWQpCj4+ICB7Cj4+ ICAJREJHKCJmaW5pIik7Cj4+ICAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1zbV9wbGF0 Zm9ybV9kcml2ZXIpOwo+PiArCW1zbV9kcF91bnJlZ2lzdGVyKCk7Cj4+ICAJbXNtX2hkbWlfdW5y ZWdpc3RlcigpOwo+PiAgCWFkcmVub191bnJlZ2lzdGVyKCk7Cj4+ICAJbXNtX2VkcF91bnJlZ2lz dGVyKCk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCAKPj4g Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaAo+PiBpbmRleCA5ZDExZjMyLi5mYjFlNmY0 IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaAo+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaAo+PiBAQCAtMTc2LDYgKzE3Niw3IEBAIHN0cnVj dCBtc21fZHJtX3ByaXZhdGUgewo+PiAgCS8qIERTSSBpcyBzaGFyZWQgYnkgbWRwNCBhbmQgbWRw NSAqLwo+PiAgCXN0cnVjdCBtc21fZHNpICpkc2lbMl07Cj4+IAo+PiArCXN0cnVjdCBtc21fZHAg KmRwOwo+IAo+IENhbiB5b3UgcGxlYXNlIGFkZCBhbiBleHRyYSBsaW5lIGhlcmU/Cj4gCldpbGwg Zml4IHRoaXMgaW4gVjMuCj4+ICAJLyogd2hlbiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgJ21zbV9n cHUnIHRoZXNlIG5lZWQgdG8gYmUgYW4gYXJyYXk6IAo+PiAqLwo+PiAgCXN0cnVjdCBtc21fZ3B1 ICpncHU7Cj4+ICAJc3RydWN0IG1zbV9maWxlX3ByaXZhdGUgKmxhc3RjdHg7Cj4+IEBAIC0zNjQs NiArMzY1LDI3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1zbV9kc2lfbW9kZXNldF9pbml0KHN0cnVj dCAKPj4gbXNtX2RzaSAqbXNtX2RzaSwKPj4gIH0KPj4gICNlbmRpZgo+PiAKPj4gKyNpZmRlZiBD T05GSUdfRFJNX01TTV9EUAo+PiAraW50IF9faW5pdCBtc21fZHBfcmVnaXN0ZXIodm9pZCk7Cj4+ ICt2b2lkIF9fZXhpdCBtc21fZHBfdW5yZWdpc3Rlcih2b2lkKTsKPj4gK2ludCBtc21fZHBfbW9k ZXNldF9pbml0KHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXksIHN0cnVjdCBkcm1fZGV2aWNlIAo+ PiAqZGV2LAo+PiArCQkJIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7Cj4+ICsjZWxzZQo+ PiArc3RhdGljIGlubGluZSBpbnQgX19pbml0IG1zbV9kcF9yZWdpc3Rlcih2b2lkKQo+PiArewo+ PiArCXJldHVybiAtRUlOVkFMOwo+PiArfQo+PiArc3RhdGljIGlubGluZSB2b2lkIF9fZXhpdCBt c21fZHBfdW5yZWdpc3Rlcih2b2lkKQo+PiArewo+PiArfQo+PiArc3RhdGljIGlubGluZSBpbnQg bXNtX2RwX21vZGVzZXRfaW5pdChzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5LAo+PiArCQkJCSAg ICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+PiArCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIpCj4+ICt7Cj4+ICsJcmV0dXJuIC1FSU5WQUw7Cj4+ICt9Cj4+ICsjZW5k aWYKPj4gKwo+PiAgdm9pZCBfX2luaXQgbXNtX21kcF9yZWdpc3Rlcih2b2lkKTsKPj4gIHZvaWQg X19leGl0IG1zbV9tZHBfdW5yZWdpc3Rlcih2b2lkKTsKPj4gIHZvaWQgX19pbml0IG1zbV9kcHVf cmVnaXN0ZXIodm9pZCk7Cj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfaGVscGVy LmggYi9pbmNsdWRlL2RybS9kcm1fZHBfaGVscGVyLmgKPj4gaW5kZXggMmEzODQzZi4uYjA4MTZm NSAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2RwX2hlbHBlci5oCj4+ICsrKyBiL2lu Y2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaAo+IAo+IFNwbGl0IHRoZXNlIGNoYW5nZXMgb3V0IGlu dG8gYSBzZXBhcmF0ZSBwYXRjaCwgcGxlYXNlCj4gClRoaXMgaXMgYWxyZWFkeSBoYW5kbGVkIGFz IGEgc2VwYXJhdGUgcGF0Y2ggYW5kIGlzIHJlYWR5IHRvIG1lcmdlLgoKPj4gQEAgLTU1MSw2ICs1 NTEsOCBAQAo+PiAgIyBkZWZpbmUgRFBfVEVTVF9MSU5LX0VESURfUkVBRAkJICAgICgxIDw8IDIp Cj4+ICAjIGRlZmluZSBEUF9URVNUX0xJTktfUEhZX1RFU1RfUEFUVEVSTgkgICAgKDEgPDwgMykg LyogRFBDRCA+PSAxLjEgKi8KPj4gICMgZGVmaW5lIERQX1RFU1RfTElOS19GQVVYX1BBVFRFUk4J ICAgICgxIDw8IDQpIC8qIERQQ0QgPj0gMS4yICovCj4+ICsjIGRlZmluZSBEUF9URVNUX0xJTktf QVVESU9fUEFUVEVSTiAgICAgKDEgPDwgNSkKPj4gKyMgZGVmaW5lIERQX1RFU1RfTElOS19BVURJ T19ESVNBQkxFRF9WSURFTyAoMSA8PCA2KQo+IAo+IEFkZCBEUENEIHZlcnNpb24gaW4gY29tbWVu dHMgZm9yIHRoZXNlIGxpa2UgYWJvdmUuCj4gCj4+IAo+PiAgI2RlZmluZSBEUF9URVNUX0xJTktf UkFURQkJICAgIDB4MjE5Cj4+ICAjIGRlZmluZSBEUF9MSU5LX1JBVEVfMTYyCQkgICAgKDB4NikK Pj4gQEAgLTYzOSw2ICs2NDEsMTMgQEAKPj4gICNkZWZpbmUJRFBfVEVTVF84MEJJVF9DVVNUT01f UEFUVEVSTl83MV82NCAgMHgyNTgKPj4gICNkZWZpbmUJRFBfVEVTVF84MEJJVF9DVVNUT01fUEFU VEVSTl83OV83MiAgMHgyNTkKPj4gCj4+ICsjZGVmaW5lIERQX1RFU1RfUEhZX1BBVFRFUk5fTk9O RQkJCTB4MAo+PiArI2RlZmluZSBEUF9URVNUX1BIWV9QQVRURVJOX0QxMF8yX05PX1NDUkFNQkxJ TkcJMHgxCj4+ICsjZGVmaW5lIERQX1RFU1RfUEhZX1BBVFRFUk5fU1lNQk9MX0VSUl9NRUFTVVJF TUVOVF9DTlQgMHgyCj4+ICsjZGVmaW5lIERQX1RFU1RfUEhZX1BBVFRFUk5fUFJCUzcJCQkweDMK Pj4gKyNkZWZpbmUgRFBfVEVTVF9QSFlfUEFUVEVSTl84MF9CSVRfQ1VTVE9NX1BBVFRFUk4JMHg0 Cj4+ICsjZGVmaW5lIERQX1RFU1RfUEhZX1BBVFRFUk5fSEJSMl9DVFNfRVlFX1BBVFRFUk4JMHg1 Cj4gCj4gVGhlc2UgYXJlIGFscmVhZHkgaW4gZHJtX2RwX2hlbHBlciB1bmRlciBEUF9MSU5LX1FV QUxfUEFUVEVSTl8qCj4gCj4+ICsKPj4gICNkZWZpbmUgRFBfVEVTVF9SRVNQT05TRQkJICAgIDB4 MjYwCj4+ICAjIGRlZmluZSBEUF9URVNUX0FDSwkJCSAgICAoMSA8PCAwKQo+PiAgIyBkZWZpbmUg RFBfVEVTVF9OQUsJCQkgICAgKDEgPDwgMSkKPj4gQEAgLTY0OCw2ICs2NTcsMTYgQEAKPj4gCj4+ ICAjZGVmaW5lIERQX1RFU1RfU0lOSwkJCSAgICAweDI3MAo+PiAgIyBkZWZpbmUgRFBfVEVTVF9T SU5LX1NUQVJUCQkgICAgKDEgPDwgMCkKPj4gKyNkZWZpbmUgRFBfVEVTVF9BVURJT19NT0RFCQkg ICAgMHgyNzEKPj4gKyNkZWZpbmUgRFBfVEVTVF9BVURJT19QQVRURVJOX1RZUEUJICAgIDB4Mjcy Cj4+ICsjZGVmaW5lIERQX1RFU1RfQVVESU9fUEVSSU9EX0NIMQkgICAgMHgyNzMKPj4gKyNkZWZp bmUgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0gyCSAgICAweDI3NAo+PiArI2RlZmluZSBEUF9URVNU X0FVRElPX1BFUklPRF9DSDMJICAgIDB4Mjc1Cj4+ICsjZGVmaW5lIERQX1RFU1RfQVVESU9fUEVS SU9EX0NINAkgICAgMHgyNzYKPj4gKyNkZWZpbmUgRFBfVEVTVF9BVURJT19QRVJJT0RfQ0g1CSAg ICAweDI3Nwo+PiArI2RlZmluZSBEUF9URVNUX0FVRElPX1BFUklPRF9DSDYJICAgIDB4Mjc4Cj4+ ICsjZGVmaW5lIERQX1RFU1RfQVVESU9fUEVSSU9EX0NINwkgICAgMHgyNzkKPj4gKyNkZWZpbmUg RFBfVEVTVF9BVURJT19QRVJJT0RfQ0g4CSAgICAweDI3QQo+PiAKPj4gICNkZWZpbmUgRFBfRkVD X1NUQVRVUwkJCSAgICAweDI4MCAgICAvKiAxLjQgKi8KPj4gICMgZGVmaW5lIERQX0ZFQ19ERUNP REVfRU5fREVURUNURUQJICAgICgxIDw8IDApCj4+IC0tCj4+IFRoZSBRdWFsY29tbSBJbm5vdmF0 aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgCj4+IEZvcnVt LAo+PiBhIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0Cj4+IAo+PiBfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBGcmVlZHJlbm8g bWFpbGluZyBsaXN0Cj4+IEZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4gaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8KX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxp bmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5v