From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eunchul Kim Subject: Re: [RFC 2/4] drm/exynos: add fimc ipp driver Date: Thu, 22 Nov 2012 13:27:51 +0900 Message-ID: <50ADA9C7.5040602@samsung.com> References: <1351516246-25853-1-git-send-email-chulspro.kim@samsung.com> <1351516246-25853-3-git-send-email-chulspro.kim@samsung.com> <50AD8E5C.8060707@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) by gabe.freedesktop.org (Postfix) with ESMTP id D6A2DE5C3E for ; Wed, 21 Nov 2012 20:26:37 -0800 (PST) Received: from epcpsbgm2.samsung.com (epcpsbgm2 [203.254.230.27]) by mailout2.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MDV00BMPGC0U7A0@mailout2.samsung.com> for dri-devel@lists.freedesktop.org; Thu, 22 Nov 2012 13:26:35 +0900 (KST) Received: from [10.90.54.32] by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0MDV00K77GC0YY90@mmp1.samsung.com> for dri-devel@lists.freedesktop.org; Thu, 22 Nov 2012 13:26:34 +0900 (KST) In-reply-to: <50AD8E5C.8060707@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: sw0312.kim@samsung.com Cc: jy0.jeon@samsung.com, =?UTF-8?B?7ISc7J6s7KSA?= , kyungmin.park@samsung.com, dri-devel@lists.freedesktop.org, =?UTF-8?B?7J207ZWZ6rWs?= , jmock.shin@samsung.com List-Id: dri-devel@lists.freedesktop.org RGVhciBTZXVuZy1Xb28gS2ltCgpUaGFuaydzIGZvciB5b3VyIGNvbW1lbnQuIGFuZCB5b3UgZ2F2 ZSB0aGUgZmlyc3QgY29tbWVudC4gOikKCkkgYWxzbyBjb25zaWRlcmVkIGFib3V0IG1lcmdlaW5n IHNldF9mbXQsIHNldF9mbXRfb3JkZXIuCmJ1dCBJZiB3ZSBtZXJnZSB0aGlzIGZ1bmN0aW9uLCB3 ZSBuZWVkIHRvIHNlcGVyYXRlIGFsbCAic3dpdGNoIGNhc2UiIApyb3V0aW5lLgpzbywgY29tcGxl eGl0eSBoYXMgaW5jcmVhc2VkIGFmdGVyIG1lcmdlaW5nLgoKYW5kIEkgZGVzaWduZWQgdGhpcyBz ZXRfZm10IGZ1bmN0aW9uIHdpdGggdHdvIHBhdGguCmZpcnN0KQotIHNldCB1cCB0aGUgZm9ybWF0 IGluZm9ybWF0aW9uIHVzaW5nIHJlbGF0aXZlIHJlZ2lzdGVyCnNlY29uZCkKLSBzZXQgdXAgdGhl IGZvcm1hdCBvcmRlcmluZyB1c2luZyByZWxhdGl2ZSByZWdpc3Rlci4KCm9uZSBtb3JlIHRoaW5r IGFib3V0IHRoaXMgZGVzaWduIGNvbmNlcHQuCmFuZCBJZiB5b3UgbmVlZCB0byBtZXJnZSB0aGlz IGZ1bmN0aW9uLCBwbGVhc2UgZ2l2ZSBvbmUgbW9yZSBjb21tZW50cy4KSSB3aWxsIGNoYW5nZSBh bmQgcmVzZW50IGl0LgoKYW5kIEkgY29tbWVudGVkIGFib3V0IHlvdXIgY29tbWVudC4KVGhhbmsn cwoKT24gMTEvMjIvMjAxMiAxMTozMCBBTSwg6rmA7Iq57JqwIHdyb3RlOgo+IEhpIEV1bmNodWws Cj4KPiBJTUhPLCBlYWNoIGZ1bmN0aW9uIGZvciBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGhhcyBx dWl0ZSBzaW1pbGFyIHJvdXRpbmUKPiBhbmQgaXQgc2VlbXMgdGhhdCB0aGVyZSBhcmUgc29tZSBy ZWR1bmRhbnQgY29kZS4gSSdtIG5vdCBzdXJlIHRoZXNlCj4gZHVwbGljYXRlZCBjb2RlIGNhbiBi ZSByZW1vdmVkIHdpdGggbWVyZ2Vpbmcgc2ltaWxhciBwYXJ0Lgo+Cj4gU29tZSBjb21tZW50cyBh cmUgYmVsb3cuCj4KPiBPbiAyMDEy64WEIDEw7JuUIDI57J28IDIyOjEwLCBFdW5jaHVsIEtpbSB3 cm90ZToKPj4gRklNQyBpcyBzdGFuZCBmb3IgRnVsbHkgSW50ZXJmYWN0aXZlIE1vYmlsZSBDYW1l cmEgYW5kCj4+IHN1cHBvcnRzIGltYWdlIHNjYWxlci9yb3RhdG9yL2Nyb3AvZmxpcC9jc2MgYW5k IGlucHV0L291dHB1dCBETUEgb3BlcmF0aW9ucy4KPj4gaW5wdXQgRE1BIHJlYWRzIGltYWdlIGRh dGEgZnJvbSB0aGUgbWVtb3J5Lgo+PiBvdXRwdXQgRE1BIHdyaXRlcyBpbWFnZSBkYXRhIHRvIG1l bW9yeS4KPj4gRklNQyBzdXBwb3J0cyBpbWFnZSByb3RhdGlvbiBhbmQgaW1hZ2UgZWZmZWN0IGZ1 bmN0aW9ucy4KPj4gYWxzbyBzdXBwb3J0cyB3cml0ZWJhY2sgYW5kIGRpc3BsYXkgb3V0cHV0IG9w ZXJhdGlvbnMuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IEV1bmNodWwgS2ltIDxjaHVsc3Byby5raW1A c2Ftc3VuZy5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IEppbnlvdW5nIEplb24gPGp5MC5qZW9uQHNh bXN1bmcuY29tPgo+PiAtLS0KPj4gICBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL0tjb25maWcgICAg ICAgICAgIHwgICAgNiArCj4+ICAgZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9NYWtlZmlsZSAgICAg ICAgICB8ICAgIDEgKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcnYu YyAgfCAgIDE1ICsKPj4gICBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2Lmgg IHwgICAgMSArCj4+ICAgZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2ZpbWMuYyB8 IDIwNDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ICAgZHJpdmVycy9ncHUvZHJt L2V4eW5vcy9leHlub3NfZHJtX2ZpbWMuaCB8ICAgMzUgKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9l eHlub3MvcmVncy1maW1jLmggICAgICAgfCAgNjY5ICsrKysrKysrKysKPj4gICBpbmNsdWRlL2Ry bS9leHlub3NfZHJtLmggICAgICAgICAgICAgICAgIHwgICAzMyArCj4+ICAgOCBmaWxlcyBjaGFu Z2VkLCAyODAxIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCj4+ICAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9maW1jLmMKPj4gICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2ZpbWMuaAo+ PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL3JlZ3MtZmltYy5o Cj4KPiA8c25pcD4KPgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlu b3NfZHJtX2ZpbWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9maW1jLmMK Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uM2FkYjQ1Mgo+PiAtLS0g L2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9maW1j LmMKPj4gQEAgLTAsMCArMSwyMDQxIEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChDKSAyMDEy IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uTHRkCj4+ICsgKiBBdXRob3JzOgo+PiArICoJRXVuY2h1 bCBLaW0gPGNodWxzcHJvLmtpbUBzYW1zdW5nLmNvbT4KPj4gKyAqCUppbnlvdW5nIEplb24gPGp5 MC5qZW9uQHNhbXN1bmcuY29tPgo+PiArICoJU2FuZ21pbiBMZWUgPGxzbWluLmxlZUBzYW1zdW5n LmNvbT4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKPj4gKyAqIHVuZGVyICB0aGUgdGVy bXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZQo+PiArICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0 aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCj4+ICsgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u Lgo+PiArICoKPj4gKyAqLwo+PiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+PiArI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5o Pgo+PiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRp bWUuaD4KPj4gKyNpbmNsdWRlIDxwbGF0L21hcC1iYXNlLmg+Cj4+ICsKPj4gKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgo+PiArI2luY2x1ZGUgPGRybS9leHlub3NfZHJtLmg+Cj4+ICsjaW5jbHVkZSAi cmVncy1maW1jLmgiCj4+ICsjaW5jbHVkZSAiZXh5bm9zX2RybV9kcnYuaCIKPj4gKyNpbmNsdWRl ICJleHlub3NfZHJtX2dlbS5oIgo+PiArI2luY2x1ZGUgImV4eW5vc19kcm1faXBwLmgiCj4+ICsj aW5jbHVkZSAiZXh5bm9zX2RybV9maW1jLmgiCj4+ICsKPj4gKy8qCj4+ICsgKiBGSU1DIGlzIHN0 YW5kIGZvciBGdWxseSBJbnRlcmFjdGl2ZSBNb2JpbGUgQ2FtZXJhIGFuZAo+PiArICogc3VwcG9y dHMgaW1hZ2Ugc2NhbGVyL3JvdGF0b3IgYW5kIGlucHV0L291dHB1dCBETUEgb3BlcmF0aW9ucy4K Pj4gKyAqIGlucHV0IERNQSByZWFkcyBpbWFnZSBkYXRhIGZyb20gdGhlIG1lbW9yeS4KPj4gKyAq IG91dHB1dCBETUEgd3JpdGVzIGltYWdlIGRhdGEgdG8gbWVtb3J5Lgo+PiArICogRklNQyBzdXBw b3J0cyBpbWFnZSByb3RhdGlvbiBhbmQgaW1hZ2UgZWZmZWN0IGZ1bmN0aW9ucy4KPj4gKyAqLwo+ PiArCj4+ICsjZGVmaW5lIEZJTUNfTUFYX0RFVlMJNAo+PiArI2RlZmluZSBGSU1DX01BWF9TUkMJ Mgo+PiArI2RlZmluZSBGSU1DX01BWF9EU1QJMzIKPj4gKyNkZWZpbmUgRklNQ19DTEtfUkFURQkJ MTY2NzUwMDAwCj4+ICsjZGVmaW5lIEZJTUNfQ0xLX1JBVEVfUjIJCTE4MDAwMDAwMAo+PiArI2Rl ZmluZSBGSU1DX0JVRl9TVE9QCTEKPj4gKyNkZWZpbmUgRklNQ19CVUZfU1RBUlQJMgo+PiArI2Rl ZmluZSBGSU1DX1JFR19TWgkJMzIKPj4gKyNkZWZpbmUgRklNQ19XSURUSF9JVFVfNzA5CTEyODAK Pj4gKwo+PiArI2RlZmluZSBnZXRfZmltY19jb250ZXh0KGRldikJcGxhdGZvcm1fZ2V0X2RydmRh dGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpCj4+ICsjZGVmaW5lIGdldF9jdHhfZnJvbV9pcHBk cnYoaXBwZHJ2KQljb250YWluZXJfb2YoaXBwZHJ2LFwKPj4gKwkJCQkJc3RydWN0IGZpbWNfY29u dGV4dCwgaXBwZHJ2KTsKPj4gKyNkZWZpbmUgZmltY19yZWFkKG9mZnNldCkJCXJlYWRsKGN0eC0+ cmVncyArIChvZmZzZXQpKTsKPj4gKyNkZWZpbmUgZmltY193cml0ZShjZmcsIG9mZnNldCkJd3Jp dGVsKGNmZywgY3R4LT5yZWdzICsgKG9mZnNldCkpOwo+PiArCj4+ICtlbnVtIGZpbWNfd2Igewo+ PiArCUZJTUNfV0JfTk9ORSwKPj4gKwlGSU1DX1dCX0EsCj4+ICsJRklNQ19XQl9CLAo+PiArfTsK Pj4gKwo+PiArLyoKPj4gKyAqIEEgc3RydWN0dXJlIG9mIHNjYWxlci4KPj4gKyAqCj4+ICsgKiBA cmFuZ2U6IG5hcnJvdywgd2lkZS4KPj4gKyAqIEBieXBhc3M6IHVudXNlZCBzY2FsZXIgcGF0aC4K Pj4gKyAqIEB1cF9oOiBob3Jpem9udGFsIHNjYWxlIHVwLgo+PiArICogQHVwX3Y6IHZlcnRpY2Fs IHNjYWxlIHVwLgo+PiArICogQGhyYXRpbzogaG9yaXpvbnRhbCByYXRpby4KPj4gKyAqIEB2cmF0 aW86IHZlcnRpY2FsIHJhdGlvLgo+PiArICovCj4+ICtzdHJ1Y3QgZmltY19zY2FsZXIgewo+PiAr CWJvb2wJcmFuZ2U7Cj4+ICsJYm9vbCBieXBhc3M7Cj4+ICsJYm9vbCB1cF9oOwo+PiArCWJvb2wg dXBfdjsKPj4gKwl1MzIgaHJhdGlvOwo+PiArCXUzMiB2cmF0aW87Cj4+ICt9Owo+PiArCj4+ICsv Kgo+PiArICogQSBzdHJ1Y3R1cmUgb2Ygc2NhbGVyIGNhcGFiaWxpdHkuCj4+ICsgKgo+PiArICog ZmluZCB1c2VyIG1hbnVhbCB0YWJsZSA0My0xLgo+PiArICogQGluX2hvcmk6IHNjYWxlciBpbnB1 dCBob3Jpem9udGFsIHNpemUuCj4+ICsgKiBAYnlwYXNzOiBzY2FsZXIgYnlwYXNzIG1vZGUuCj4+ ICsgKiBAZHN0X2hfd29fcm90OiB0YXJnZXQgaG9yaXpvbnRhbCBzaXplIHdpdGhvdXQgb3V0cHV0 IHJvdGF0aW9uLgo+PiArICogQGRzdF9oX3JvdDogdGFyZ2V0IGhvcml6b250YWwgc2l6ZSB3aXRo IG91dHB1dCByb3RhdGlvbi4KPj4gKyAqIEBybF93X3dvX3JvdDogcmVhbCB3aWR0aCB3aXRob3V0 IGlucHV0IHJvdGF0aW9uLgo+PiArICogQHJsX2hfcm90OiByZWFsIGhlaWdodCB3aXRob3V0IG91 dHB1dCByb3RhdGlvbi4KPj4gKyAqLwo+PiArc3RydWN0IGZpbWNfY2FwYWJpbGl0eSB7Cj4+ICsJ Lyogc2NhbGVyICovCj4+ICsJdTMyCWluX2hvcmk7Cj4+ICsJdTMyCWJ5cGFzczsKPj4gKwkvKiBv dXRwdXQgcm90YXRvciAqLwo+PiArCXUzMglkc3RfaF93b19yb3Q7Cj4+ICsJdTMyCWRzdF9oX3Jv dDsKPj4gKwkvKiBpbnB1dCByb3RhdG9yICovCj4+ICsJdTMyCXJsX3dfd29fcm90Owo+PiArCXUz MglybF9oX3JvdDsKPj4gK307Cj4+ICsKPj4gKy8qCj4+ICsgKiBBIHN0cnVjdHVyZSBvZiBmaW1j IGNvbnRleHQuCj4+ICsgKgo+PiArICogQGlwcGRydjogcHJlcGFyZSBpbml0aWFsaXphdGlvbiB1 c2luZyBpcHBkcnYuCj4+ICsgKiBAcmVnc19yZXM6IHJlZ2lzdGVyIHJlc291cmNlcy4KPj4gKyAq IEByZWdzOiBtZW1vcnkgbWFwcGVkIGlvIHJlZ2lzdGVycy4KPj4gKyAqIEBsb2NrOiBsb2NraW5n IG9mIG9wZXJhdGlvbnMuCj4+ICsgKiBAc2Nsa19maW1jX2NsazogZmltYyBzb3VyY2UgY2xvY2su Cj4+ICsgKiBAZmltY19jbGs6IGZpbWMgY2xvY2suCj4+ICsgKiBAd2JfY2xrOiB3cml0ZWJhY2sg YSBjbG9jay4KPj4gKyAqIEB3Yl9iX2Nsazogd3JpdGViYWNrIGIgY2xvY2suCj4+ICsgKiBAc2M6 IHNjYWxlciBpbmZvbWF0aW9ucy4KPj4gKyAqIEBjYXBhOiBzY2FsZXIgY2FwYWJpbGl0eS4KPj4g KyAqIEBvZHI6IG9yZGVyaW5nIG9mIFlVVi4KPj4gKyAqIEB2ZXI6IGZpbWMgdmVyc2lvbi4KPj4g KyAqIEBwb2w6IHBvcmFyaXR5IG9mIHdyaXRlYmFjay4KPj4gKyAqIEBpZDogZmltYyBpZC4KPj4g KyAqIEBpcnE6IGlycSBudW1iZXIuCj4+ICsgKiBAc3VzcGVuZGVkOiBxb3Mgb3BlcmF0aW9ucy4K Pj4gKyAqLwo+PiArc3RydWN0IGZpbWNfY29udGV4dCB7Cj4+ICsJc3RydWN0IGV4eW5vc19kcm1f aXBwZHJ2CWlwcGRydjsKPj4gKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlZ3NfcmVzOwo+PiArCXZvaWQg X19pb21lbQkqcmVnczsKPj4gKwlzcGlubG9ja190CWxvY2s7Cj4+ICsJc3RydWN0IGNsawkqc2Ns a19maW1jX2NsazsKPj4gKwlzdHJ1Y3QgY2xrCSpmaW1jX2NsazsKPj4gKwlzdHJ1Y3QgY2xrCSp3 Yl9jbGs7Cj4+ICsJc3RydWN0IGNsawkqd2JfYl9jbGs7Cj4+ICsJc3RydWN0IGZpbWNfc2NhbGVy CXNjOwo+PiArCXN0cnVjdCBmaW1jX2NhcGFiaWxpdHkJKmNhcGE7Cj4+ICsJZW51bSBleHlub3Nf ZHJtX2ZpbWNfdmVyCXZlcjsKPj4gKwlzdHJ1Y3QgZXh5bm9zX2RybV9maW1jX3BvbAlwb2w7Cj4+ ICsJaW50CWlkOwo+PiArCWludAlpcnE7Cj4+ICsJYm9vbAlzdXNwZW5kZWQ7Cj4+ICt9Owo+PiAr Cj4+ICtzdHJ1Y3QgZmltY19jYXBhYmlsaXR5IGZpbWM1MV9jYXBhW0ZJTUNfTUFYX0RFVlNdID0g ewo+PiArCXsKPj4gKwkJLmluX2hvcmkgPSA0MjI0LAo+PiArCQkuYnlwYXNzID0gODE5MiwKPj4g KwkJLmRzdF9oX3dvX3JvdCA9IDQyMjQsCj4+ICsJCS5kc3RfaF9yb3QgPSAxOTIwLAo+PiArCQku cmxfd193b19yb3QgPSA4MTkyLAo+PiArCQkucmxfaF9yb3QgPSAxOTIwLAo+PiArCX0sIHsKPj4g KwkJLmluX2hvcmkgPSA0MjI0LAo+PiArCQkuYnlwYXNzID0gODE5MiwKPj4gKwkJLmRzdF9oX3dv X3JvdCA9IDQyMjQsCj4+ICsJCS5kc3RfaF9yb3QgPSAxOTIwLAo+PiArCQkucmxfd193b19yb3Qg PSA4MTkyLAo+PiArCQkucmxfaF9yb3QgPSAxOTIwLAo+PiArCX0sIHsKPj4gKwkJLmluX2hvcmkg PSA0MjI0LAo+PiArCQkuYnlwYXNzID0gODE5MiwKPj4gKwkJLmRzdF9oX3dvX3JvdCA9IDQyMjQs Cj4+ICsJCS5kc3RfaF9yb3QgPSAxOTIwLAo+PiArCQkucmxfd193b19yb3QgPSA4MTkyLAo+PiAr CQkucmxfaF9yb3QgPSAxOTIwLAo+PiArCX0sIHsKPj4gKwkJLmluX2hvcmkgPSAxOTIwLAo+PiAr CQkuYnlwYXNzID0gODE5MiwKPj4gKwkJLmRzdF9oX3dvX3JvdCA9IDE5MjAsCj4+ICsJCS5kc3Rf aF9yb3QgPSAxMzY2LAo+PiArCQkucmxfd193b19yb3QgPSA4MTkyLAo+PiArCQkucmxfaF9yb3Qg PSAxMzY2LAo+PiArCX0sCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgdm9pZCBmaW1jX3N3X3Jlc2V0 KHN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCwgYm9vbCBwYXR0ZXJuKQo+PiArewo+PiArCXUzMiBj Zmc7Cj4+ICsKPj4gKwlEUk1fREVCVUdfS01TKCIlczpwYXR0ZXJuWyVkXVxuIiwgX19mdW5jX18s IHBhdHRlcm4pOwo+PiArCj4+ICsJY2ZnID0gZmltY19yZWFkKEVYWU5PU19DSVNSQ0ZNVCk7Cj4+ ICsJY2ZnIHw9IEVYWU5PU19DSVNSQ0ZNVF9JVFU2MDFfOEJJVDsKPj4gKwlpZiAocGF0dGVybikK Pj4gKwkJY2ZnIHw9IEVYWU5PU19DSUdDVFJMX1RFU1RQQVRURVJOX0NPTE9SX0JBUjsKPj4gKwo+ PiArCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lTUkNGTVQpOwo+PiArCj4+ICsJLyogcy93IHJl c2V0ICovCj4+ICsJY2ZnID0gZmltY19yZWFkKEVYWU5PU19DSUdDVFJMKTsKPj4gKwljZmcgfD0g KEVYWU5PU19DSUdDVFJMX1NXUlNUKTsKPj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJR0NU UkwpOwo+PiArCj4+ICsJLyogcy93IHJlc2V0IGNvbXBsZXRlICovCj4+ICsJY2ZnID0gZmltY19y ZWFkKEVYWU5PU19DSUdDVFJMKTsKPj4gKwljZmcgJj0gfkVYWU5PU19DSUdDVFJMX1NXUlNUOwo+ PiArCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lHQ1RSTCk7Cj4+ICsKPj4gKwkvKiByZXNldCBz ZXF1ZW5jZSAqLwo+PiArCWZpbWNfd3JpdGUoMHgwLCBFWFlOT1NfQ0lGQ05UU0VRKTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIHZvaWQgZmltY19zZXRfY2FtYmxrX2ZpbWQwX3diKHN0cnVjdCBmaW1j X2NvbnRleHQgKmN0eCkKPj4gK3sKPj4gKwl1MzIgY2FtYmxrX2NmZzsKPj4gKwo+PiArCURSTV9E RUJVR19LTVMoIiVzXG4iLCBfX2Z1bmNfXyk7Cj4+ICsKPj4gKwljYW1ibGtfY2ZnID0gcmVhZGwo U1lTUkVHX0NBTUVSQV9CTEspOwo+PiArCWNhbWJsa19jZmcgJj0gfihTWVNSRUdfRklNRDBXQl9E RVNUX01BU0spOwo+PiArCWNhbWJsa19jZmcgfD0gY3R4LT5pZCA8PCAoU1lTUkVHX0ZJTUQwV0Jf REVTVF9TSElGVCk7Cj4+ICsKPj4gKwl3cml0ZWwoY2FtYmxrX2NmZywgU1lTUkVHX0NBTUVSQV9C TEspOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBmaW1jX3NldF90eXBlX2N0cmwoc3RydWN0 IGZpbWNfY29udGV4dCAqY3R4LCBlbnVtIGZpbWNfd2Igd2IpCj4+ICt7Cj4+ICsJdTMyIGNmZzsK Pj4gKwo+PiArCURSTV9ERUJVR19LTVMoIiVzOndiWyVkXVxuIiwgX19mdW5jX18sIHdiKTsKPj4g Kwo+PiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lHQ1RSTCk7Cj4+ICsJY2ZnICY9IH4oRVhZ Tk9TX0NJR0NUUkxfVEVTVFBBVFRFUk5fTUFTSyB8Cj4+ICsJCUVYWU5PU19DSUdDVFJMX1NFTENB TV9JVFVfTUFTSyB8Cj4+ICsJCUVYWU5PU19DSUdDVFJMX1NFTENBTV9NSVBJX01BU0sgfAo+PiAr CQlFWFlOT1NfQ0lHQ1RSTF9TRUxDQU1fRklNQ19NQVNLIHwKPj4gKwkJRVhZTk9TX0NJR0NUUkxf U0VMV0JfQ0FNSUZfTUFTSyB8Cj4+ICsJCUVYWU5PU19DSUdDVFJMX1NFTFdSSVRFQkFDS19NQVNL KTsKPj4gKwo+PiArCXN3aXRjaCAod2IpIHsKPj4gKwljYXNlIEZJTUNfV0JfQToKPj4gKwkJY2Zn IHw9IChFWFlOT1NfQ0lHQ1RSTF9TRUxXUklURUJBQ0tfQSB8Cj4+ICsJCQlFWFlOT1NfQ0lHQ1RS TF9TRUxXQl9DQU1JRl9XUklURUJBQ0spOwo+PiArCQlicmVhazsKPj4gKwljYXNlIEZJTUNfV0Jf QjoKPj4gKwkJY2ZnIHw9IChFWFlOT1NfQ0lHQ1RSTF9TRUxXUklURUJBQ0tfQiB8Cj4+ICsJCQlF WFlOT1NfQ0lHQ1RSTF9TRUxXQl9DQU1JRl9XUklURUJBQ0spOwo+PiArCQlicmVhazsKPj4gKwlj YXNlIEZJTUNfV0JfTk9ORToKPj4gKwlkZWZhdWx0Ogo+PiArCQljZmcgfD0gKEVYWU5PU19DSUdD VFJMX1NFTENBTV9JVFVfQSB8Cj4+ICsJCQlFWFlOT1NfQ0lHQ1RSTF9TRUxXUklURUJBQ0tfQSB8 Cj4+ICsJCQlFWFlOT1NfQ0lHQ1RSTF9TRUxDQU1fTUlQSV9BIHwKPj4gKwkJCUVYWU5PU19DSUdD VFJMX1NFTENBTV9GSU1DX0lUVSk7Cj4+ICsJCWJyZWFrOwo+PiArCX0KPj4gKwo+PiArCWZpbWNf d3JpdGUoY2ZnLCBFWFlOT1NfQ0lHQ1RSTCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGZp bWNfc2V0X3BvbGFyaXR5KHN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCwKPj4gKwlzdHJ1Y3QgZXh5 bm9zX2RybV9maW1jX3BvbCAqcG9sKQo+PiArewo+PiArCXUzMiBjZmc7Cj4+ICsKPj4gKwlEUk1f REVCVUdfS01TKCIlczppbnZfcGNsa1slZF1pbnZfdnN5bmNbJWRdXG4iLAo+PiArCQlfX2Z1bmNf XywgcG9sLT5pbnZfcGNsaywgcG9sLT5pbnZfdnN5bmMpOwo+PiArCURSTV9ERUJVR19LTVMoIiVz Omludl9ocmVmWyVkXWludl9oc3luY1slZF1cbiIsCj4+ICsJCV9fZnVuY19fLCBwb2wtPmludl9o cmVmLCBwb2wtPmludl9oc3luYyk7Cj4+ICsKPj4gKwljZmcgPSBmaW1jX3JlYWQoRVhZTk9TX0NJ R0NUUkwpOwo+PiArCWNmZyAmPSB+KEVYWU5PU19DSUdDVFJMX0lOVlBPTFBDTEsgfCBFWFlOT1Nf Q0lHQ1RSTF9JTlZQT0xWU1lOQyB8Cj4+ICsJCSBFWFlOT1NfQ0lHQ1RSTF9JTlZQT0xIUkVGIHwg RVhZTk9TX0NJR0NUUkxfSU5WUE9MSFNZTkMpOwo+PiArCj4+ICsJaWYgKHBvbC0+aW52X3BjbGsp Cj4+ICsJCWNmZyB8PSBFWFlOT1NfQ0lHQ1RSTF9JTlZQT0xQQ0xLOwo+PiArCWlmIChwb2wtPmlu dl92c3luYykKPj4gKwkJY2ZnIHw9IEVYWU5PU19DSUdDVFJMX0lOVlBPTFZTWU5DOwo+PiArCWlm IChwb2wtPmludl9ocmVmKQo+PiArCQljZmcgfD0gRVhZTk9TX0NJR0NUUkxfSU5WUE9MSFJFRjsK Pj4gKwlpZiAocG9sLT5pbnZfaHN5bmMpCj4+ICsJCWNmZyB8PSBFWFlOT1NfQ0lHQ1RSTF9JTlZQ T0xIU1lOQzsKPj4gKwo+PiArCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lHQ1RSTCk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGZpbWNfaGFuZGxlX2pwZWcoc3RydWN0IGZpbWNfY29udGV4 dCAqY3R4LCBib29sIGVuYWJsZSkKPj4gK3sKPj4gKwl1MzIgY2ZnOwo+PiArCj4+ICsJRFJNX0RF QlVHX0tNUygiJXM6ZW5hYmxlWyVkXVxuIiwgX19mdW5jX18sIGVuYWJsZSk7Cj4+ICsKPj4gKwlj ZmcgPSBmaW1jX3JlYWQoRVhZTk9TX0NJR0NUUkwpOwo+PiArCWlmIChlbmFibGUpCj4+ICsJCWNm ZyB8PSBFWFlOT1NfQ0lHQ1RSTF9DQU1fSlBFRzsKPj4gKwllbHNlCj4+ICsJCWNmZyAmPSB+RVhZ Tk9TX0NJR0NUUkxfQ0FNX0pQRUc7Cj4+ICsKPj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJ R0NUUkwpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBmaW1jX2hhbmRsZV9pcnEoc3RydWN0 IGZpbWNfY29udGV4dCAqY3R4LCBib29sIGVuYWJsZSwKPj4gKwlib29sIG92ZXJmbG93LCBib29s IGxldmVsKQo+PiArewo+PiArCXUzMiBjZmc7Cj4+ICsKPj4gKwlEUk1fREVCVUdfS01TKCIlczpl bmFibGVbJWRdb3ZlcmZsb3dbJWRdbGV2ZWxbJWRdXG4iLCBfX2Z1bmNfXywKPj4gKwkJCWVuYWJs ZSwgb3ZlcmZsb3csIGxldmVsKTsKPj4gKwo+PiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lH Q1RSTCk7Cj4+ICsJaWYgKGVuYWJsZSkgewo+PiArCQljZmcgJj0gfihFWFlOT1NfQ0lHQ1RSTF9J UlFfT1ZGRU4gfCBFWFlOT1NfQ0lHQ1RSTF9JUlFfTEVWRUwpOwo+PiArCQljZmcgfD0gRVhZTk9T X0NJR0NUUkxfSVJRX0VOQUJMRTsKPj4gKwkJaWYgKG92ZXJmbG93KQo+PiArCQkJY2ZnIHw9IEVY WU5PU19DSUdDVFJMX0lSUV9PVkZFTjsKPj4gKwkJaWYgKGxldmVsKQo+PiArCQkJY2ZnIHw9IEVY WU5PU19DSUdDVFJMX0lSUV9MRVZFTDsKPj4gKwl9IGVsc2UKPj4gKwkJY2ZnICY9IH4oRVhZTk9T X0NJR0NUUkxfSVJRX09WRkVOIHwgRVhZTk9TX0NJR0NUUkxfSVJRX0VOQUJMRSk7Cj4+ICsKPj4g KwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJR0NUUkwpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg dm9pZCBmaW1jX2NsZWFyX2lycShzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHgpCj4+ICt7Cj4+ICsJ dTMyIGNmZzsKPj4gKwo+PiArCURSTV9ERUJVR19LTVMoIiVzXG4iLCBfX2Z1bmNfXyk7Cj4+ICsK Pj4gKwljZmcgPSBmaW1jX3JlYWQoRVhZTk9TX0NJR0NUUkwpOwo+PiArCWNmZyB8PSBFWFlOT1Nf Q0lHQ1RSTF9JUlFfQ0xSOwo+PiArCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lHQ1RSTCk7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBib29sIGZpbWNfY2hlY2tfb3ZmKHN0cnVjdCBmaW1jX2NvbnRl eHQgKmN0eCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZXh5bm9zX2RybV9pcHBkcnYgKmlwcGRydiA9ICZj dHgtPmlwcGRydjsKPj4gKwl1MzIgY2ZnLCBzdGF0dXMsIGZsYWc7Cj4+ICsKPj4gKwlzdGF0dXMg PSBmaW1jX3JlYWQoRVhZTk9TX0NJU1RBVFVTKTsKPj4gKwlmbGFnID0gRVhZTk9TX0NJU1RBVFVT X09WRklZIHwgRVhZTk9TX0NJU1RBVFVTX09WRklDQiB8Cj4+ICsJCUVYWU5PU19DSVNUQVRVU19P VkZJQ1I7Cj4+ICsKPj4gKwlEUk1fREVCVUdfS01TKCIlczpmbGFnWzB4JXhdXG4iLCBfX2Z1bmNf XywgZmxhZyk7Cj4+ICsKPj4gKwlpZiAoc3RhdHVzICYgZmxhZykgewo+PiArCQljZmcgPSBmaW1j X3JlYWQoRVhZTk9TX0NJV0RPRlNUKTsKPj4gKwkJY2ZnIHw9IChFWFlOT1NfQ0lXRE9GU1RfQ0xS T1ZGSVkgfCBFWFlOT1NfQ0lXRE9GU1RfQ0xST1ZGSUNCIHwKPj4gKwkJCUVYWU5PU19DSVdET0ZT VF9DTFJPVkZJQ1IpOwo+PiArCj4+ICsJCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lXRE9GU1Qp Owo+PiArCj4+ICsJCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lXRE9GU1QpOwo+PiArCQljZmcg Jj0gfihFWFlOT1NfQ0lXRE9GU1RfQ0xST1ZGSVkgfCBFWFlOT1NfQ0lXRE9GU1RfQ0xST1ZGSUNC IHwKPj4gKwkJCUVYWU5PU19DSVdET0ZTVF9DTFJPVkZJQ1IpOwo+PiArCj4+ICsJCWZpbWNfd3Jp dGUoY2ZnLCBFWFlOT1NfQ0lXRE9GU1QpOwo+PiArCj4+ICsJCWRldl9lcnIoaXBwZHJ2LT5kZXYs ICJvY2N1cmVkIG92ZXJmbG93IGF0ICVkLCBzdGF0dXMgMHgleC5cbiIsCj4+ICsJCQljdHgtPmlk LCBzdGF0dXMpOwo+PiArCQlyZXR1cm4gdHJ1ZTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gZmFs c2U7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBib29sIGZpbWNfY2hlY2tfZnJhbWVfZW5kKHN0cnVj dCBmaW1jX2NvbnRleHQgKmN0eCkKPj4gK3sKPj4gKwl1MzIgY2ZnOwo+PiArCj4+ICsJY2ZnID0g ZmltY19yZWFkKEVYWU5PU19DSVNUQVRVUyk7Cj4+ICsKPj4gKwlEUk1fREVCVUdfS01TKCIlczpj ZmdbMHgleF1cbiIsIF9fZnVuY19fLCBjZmcpOwo+PiArCj4+ICsJaWYgKCEoY2ZnICYgRVhZTk9T X0NJU1RBVFVTX0ZSQU1FRU5EKSkKPj4gKwkJcmV0dXJuIGZhbHNlOwo+PiArCj4+ICsJY2ZnICY9 IH4oRVhZTk9TX0NJU1RBVFVTX0ZSQU1FRU5EKTsKPj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9T X0NJU1RBVFVTKTsKPj4gKwo+PiArCXJldHVybiB0cnVlOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGZpbWNfZ2V0X2J1Zl9pZChzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHgpCj4+ICt7Cj4+ICsJ dTMyIGNmZzsKPj4gKwlpbnQgZnJhbWVfY250LCBidWZfaWQ7Cj4+ICsKPj4gKwlEUk1fREVCVUdf S01TKCIlc1xuIiwgX19mdW5jX18pOwo+PiArCj4+ICsJY2ZnID0gZmltY19yZWFkKEVYWU5PU19D SVNUQVRVUzIpOwo+PiArCWZyYW1lX2NudCA9IEVYWU5PU19DSVNUQVRVUzJfR0VUX0ZSQU1FQ09V TlRfQkVGT1JFKGNmZyk7Cj4+ICsKPj4gKwlpZiAoZnJhbWVfY250ID09IDApCj4+ICsJCWZyYW1l X2NudCA9IEVYWU5PU19DSVNUQVRVUzJfR0VUX0ZSQU1FQ09VTlRfUFJFU0VOVChjZmcpOwo+PiAr Cj4+ICsJRFJNX0RFQlVHX0tNUygiJXM6cHJlc2VudFslZF1iZWZvcmVbJWRdXG4iLCBfX2Z1bmNf XywKPj4gKwkJRVhZTk9TX0NJU1RBVFVTMl9HRVRfRlJBTUVDT1VOVF9QUkVTRU5UKGNmZyksCj4+ ICsJCUVYWU5PU19DSVNUQVRVUzJfR0VUX0ZSQU1FQ09VTlRfQkVGT1JFKGNmZykpOwo+PiArCj4+ ICsJaWYgKGZyYW1lX2NudCA9PSAwKSB7Cj4+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBm cmFtZSBjb3VudC5cbiIpOwo+PiArCQlyZXR1cm4gLUVJTzsKPj4gKwl9Cj4+ICsKPj4gKwlidWZf aWQgPSBmcmFtZV9jbnQgLSAxOwo+PiArCURSTV9ERUJVR19LTVMoIiVzOmJ1Zl9pZFslZF1cbiIs IF9fZnVuY19fLCBidWZfaWQpOwo+PiArCj4+ICsJcmV0dXJuIGJ1Zl9pZDsKPj4gK30KPj4gKwo+ PiArc3RhdGljIHZvaWQgZmltY19oYW5kbGVfbGFzdGVuZChzdHJ1Y3QgZmltY19jb250ZXh0ICpj dHgsIGJvb2wgZW5hYmxlKQo+PiArewo+PiArCXUzMiBjZmc7Cj4+ICsKPj4gKwlEUk1fREVCVUdf S01TKCIlczplbmFibGVbJWRdXG4iLCBfX2Z1bmNfXywgZW5hYmxlKTsKPj4gKwo+PiArCWNmZyA9 IGZpbWNfcmVhZChFWFlOT1NfQ0lPQ1RSTCk7Cj4+ICsJaWYgKGVuYWJsZSkKPj4gKwkJY2ZnIHw9 IEVYWU5PU19DSU9DVFJMX0xBU1RFTkRFTjsKPj4gKwllbHNlCj4+ICsJCWNmZyAmPSB+RVhZTk9T X0NJT0NUUkxfTEFTVEVOREVOOwo+PiArCj4+ICsJZmltY193cml0ZShjZmcsIEVYWU5PU19DSU9D VFJMKTsKPj4gK30KPj4gKwo+PiArCj4+ICtzdGF0aWMgaW50IGZpbWNfc3JjX3NldF9mbXRfb3Jk ZXIoc3RydWN0IGZpbWNfY29udGV4dCAqY3R4LCB1MzIgZm10KQo+PiArewo+PiArCXN0cnVjdCBl eHlub3NfZHJtX2lwcGRydiAqaXBwZHJ2ID0gJmN0eC0+aXBwZHJ2Owo+PiArCXUzMiBjZmc7Cj4+ ICsKPj4gKwlEUk1fREVCVUdfS01TKCIlczpmbXRbMHgleF1cbiIsIF9fZnVuY19fLCBmbXQpOwo+ PiArCj4+ICsJLyogUkdCICovCj4+ICsJY2ZnID0gZmltY19yZWFkKEVYWU5PU19DSVNDQ1RSTCk7 Cj4+ICsJY2ZnICY9IH5FWFlOT1NfQ0lTQ0NUUkxfSU5SR0JfRk1UX1JHQl9NQVNLOwo+PiArCj4+ ICsJc3dpdGNoIChmbXQpIHsKPj4gKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+PiArCQljZmcg fD0gRVhZTk9TX0NJU0NDVFJMX0lOUkdCX0ZNVF9SR0I1NjU7Cj4+ICsJCWZpbWNfd3JpdGUoY2Zn LCBFWFlOT1NfQ0lTQ0NUUkwpOwo+PiArCQlyZXR1cm4gMDsKPj4gKwljYXNlIERSTV9GT1JNQVRf UkdCODg4Ogo+PiArCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPj4gKwkJY2ZnIHw9IEVYWU5P U19DSVNDQ1RSTF9JTlJHQl9GTVRfUkdCODg4Owo+PiArCQlmaW1jX3dyaXRlKGNmZywgRVhZTk9T X0NJU0NDVFJMKTsKPj4gKwkJcmV0dXJuIDA7Cj4+ICsJZGVmYXVsdDoKPj4gKwkJLyogYnlwYXNz ICovCj4+ICsJCWJyZWFrOwo+PiArCX0KPj4gKwo+PiArCS8qIFlVViAqLwo+PiArCWNmZyA9IGZp bWNfcmVhZChFWFlOT1NfTVNDVFJMKTsKPj4gKwljZmcgJj0gfihFWFlOT1NfTVNDVFJMX09SREVS MlBfU0hJRlRfTUFTSyB8Cj4+ICsJCUVYWU5PU19NU0NUUkxfQ19JTlRfSU5fMlBMQU5FIHwKPj4g KwkJRVhZTk9TX01TQ1RSTF9PUkRFUjQyMl9ZQ0JZQ1IpOwo+PiArCj4+ICsJc3dpdGNoIChmbXQp IHsKPj4gKwljYXNlIERSTV9GT1JNQVRfWVVZVjoKPj4gKwkJY2ZnIHw9IEVYWU5PU19NU0NUUkxf T1JERVI0MjJfWUNCWUNSOwo+PiArCQlicmVhazsKPj4gKwljYXNlIERSTV9GT1JNQVRfWVZZVToK Pj4gKwkJY2ZnIHw9IEVYWU5PU19NU0NUUkxfT1JERVI0MjJfWUNSWUNCOwo+PiArCQlicmVhazsK Pj4gKwljYXNlIERSTV9GT1JNQVRfVVlWWToKPj4gKwkJY2ZnIHw9IEVYWU5PU19NU0NUUkxfT1JE RVI0MjJfQ0JZQ1JZOwo+PiArCQlicmVhazsKPj4gKwljYXNlIERSTV9GT1JNQVRfVllVWToKPj4g KwljYXNlIERSTV9GT1JNQVRfWVVWNDQ0Ogo+PiArCQljZmcgfD0gRVhZTk9TX01TQ1RSTF9PUkRF UjQyMl9DUllDQlk7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRFJNX0ZPUk1BVF9OVjIxOgo+PiAr CWNhc2UgRFJNX0ZPUk1BVF9OVjYxOgo+PiArCQljZmcgfD0gKEVYWU5PU19NU0NUUkxfT1JERVIy UF9MU0JfQ1JDQiB8Cj4+ICsJCQlFWFlOT1NfTVNDVFJMX0NfSU5UX0lOXzJQTEFORSk7Cj4+ICsJ CWJyZWFrOwo+PiArCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjI6Cj4+ICsJY2FzZSBEUk1fRk9STUFU X1lVVjQyMDoKPj4gKwljYXNlIERSTV9GT1JNQVRfWVZVNDIwOgo+PiArCQljZmcgfD0gRVhZTk9T X01TQ1RSTF9DX0lOVF9JTl8zUExBTkU7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRFJNX0ZPUk1B VF9OVjEyOgo+PiArCWNhc2UgRFJNX0ZPUk1BVF9OVjEyTVQ6Cj4+ICsJY2FzZSBEUk1fRk9STUFU X05WMTY6Cj4+ICsJCWNmZyB8PSAoRVhZTk9TX01TQ1RSTF9PUkRFUjJQX0xTQl9DQkNSIHwKPj4g KwkJCUVYWU5PU19NU0NUUkxfQ19JTlRfSU5fMlBMQU5FKTsKPj4gKwkJYnJlYWs7Cj4+ICsJZGVm YXVsdDoKPj4gKwkJZGV2X2VycihpcHBkcnYtPmRldiwgImluYXZsaWQgc291cmNlIHl1diBvcmRl ciAweCV4LlxuIiwgZm10KTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJ ZmltY193cml0ZShjZmcsIEVYWU5PU19NU0NUUkwpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9 Cj4KPiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGJ5IGZpbWNfc3JjX3NldF9mbXQoKSBh bmQgYm90aCBmdW5jdGlvbnMKPiBoYXZlIHJvdXRpbmUgdG8gY2hlY2sgZm9ybWF0LiBUaGVyZSBh cmUgYWxzbyBhY2Nlc3NpbmcgRVhZTk9TX01TQ1RSTC4gU28KPiBkb25lIHRob3NlIHJvdXRpbmUg YXQgb25lIG1lcmdlZCBmdW5jdGlvbiBjYW4gYmUgaGVscGZ1bC4KCllvdSBhcmUgcmlnaHQuIHRo aXMgZnVuY3Rpb24gY29udHJvbCBzYW1lIHJlZ2lzdGVyLiBidXQgZm9ybWF0IGFuZCAKb3JkZXJp bmcgd2VyZSBzZXBhcmF0ZWQuCmJ1dCByZWxhdGl2ZSByZWdpc3RlciB3YXMgc2FtZSBpbiBzb3Vy Y2UgZm9ybWF0LiBidXQgZGVzdGluYXRpb24gZm9ybWF0IAp3YXMgZGlmZmVyZW50LgoKPgo+PiAr Cj4+ICtzdGF0aWMgaW50IGZpbWNfc3JjX3NldF9mbXQoc3RydWN0IGRldmljZSAqZGV2LCB1MzIg Zm10KQo+PiArewo+PiArCXN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCA9IGdldF9maW1jX2NvbnRl eHQoZGV2KTsKPj4gKwlzdHJ1Y3QgZXh5bm9zX2RybV9pcHBkcnYgKmlwcGRydiA9ICZjdHgtPmlw cGRydjsKPj4gKwl1MzIgY2ZnOwo+PiArCj4+ICsJRFJNX0RFQlVHX0tNUygiJXM6Zm10WzB4JXhd XG4iLCBfX2Z1bmNfXywgZm10KTsKPj4gKwo+PiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfTVND VFJMKTsKPj4gKwljZmcgJj0gfkVYWU5PU19NU0NUUkxfSU5GT1JNQVRfUkdCOwo+PiArCj4+ICsJ c3dpdGNoIChmbXQpIHsKPj4gKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+PiArCWNhc2UgRFJN X0ZPUk1BVF9SR0I4ODg6Cj4+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4Ogo+PiArCQljZmcg fD0gRVhZTk9TX01TQ1RSTF9JTkZPUk1BVF9SR0I7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRFJN X0ZPUk1BVF9ZVVY0NDQ6Cj4+ICsJCWNmZyB8PSBFWFlOT1NfTVNDVFJMX0lORk9STUFUX1lDQkNS NDIwOwo+PiArCQlicmVhazsKPj4gKwljYXNlIERSTV9GT1JNQVRfWVVZVjoKPj4gKwljYXNlIERS TV9GT1JNQVRfWVZZVToKPj4gKwljYXNlIERSTV9GT1JNQVRfVVlWWToKPj4gKwljYXNlIERSTV9G T1JNQVRfVllVWToKPj4gKwkJY2ZnIHw9IEVYWU5PU19NU0NUUkxfSU5GT1JNQVRfWUNCQ1I0MjJf MVBMQU5FOwo+PiArCQlicmVhazsKPj4gKwljYXNlIERSTV9GT1JNQVRfTlYxNjoKPj4gKwljYXNl IERSTV9GT1JNQVRfTlY2MToKPj4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDIyOgo+PiArCQljZmcg fD0gRVhZTk9TX01TQ1RSTF9JTkZPUk1BVF9ZQ0JDUjQyMjsKPj4gKwkJYnJlYWs7Cj4+ICsJY2Fz ZSBEUk1fRk9STUFUX1lVVjQyMDoKPj4gKwljYXNlIERSTV9GT1JNQVRfWVZVNDIwOgo+PiArCWNh c2UgRFJNX0ZPUk1BVF9OVjEyOgo+PiArCWNhc2UgRFJNX0ZPUk1BVF9OVjIxOgo+PiArCWNhc2Ug RFJNX0ZPUk1BVF9OVjEyTVQ6Cj4+ICsJCWNmZyB8PSBFWFlOT1NfTVNDVFJMX0lORk9STUFUX1lD QkNSNDIwOwo+PiArCQlicmVhazsKPj4gKwlkZWZhdWx0Ogo+PiArCQlkZXZfZXJyKGlwcGRydi0+ ZGV2LCAiaW5hdmxpZCBzb3VyY2UgZm9ybWF0IDB4JXguXG4iLCBmbXQpOwo+PiArCQlyZXR1cm4g LUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX01TQ1RSTCk7 Cj4+ICsKPj4gKwljZmcgPSBmaW1jX3JlYWQoRVhZTk9TX0NJRE1BUEFSQU0pOwo+PiArCWNmZyAm PSB+RVhZTk9TX0NJRE1BUEFSQU1fUl9NT0RFX01BU0s7Cj4+ICsKPj4gKwlpZiAoZm10ID09IERS TV9GT1JNQVRfTlYxMk1UKQo+PiArCQljZmcgfD0gRVhZTk9TX0NJRE1BUEFSQU1fUl9NT0RFXzY0 WDMyOwo+PiArCWVsc2UKPj4gKwkJY2ZnIHw9IEVYWU5PU19DSURNQVBBUkFNX1JfTU9ERV9MSU5F QVI7Cj4+ICsKPj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJRE1BUEFSQU0pOwo+PiArCj4+ ICsJcmV0dXJuIGZpbWNfc3JjX3NldF9mbXRfb3JkZXIoY3R4LCBmbXQpOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgaW50IGZpbWNfc3JjX3NldF90cmFuc2Yoc3RydWN0IGRldmljZSAqZGV2LAo+PiAr CQllbnVtIGRybV9leHlub3NfZGVncmVlIGRlZ3JlZSwKPj4gKwkJZW51bSBkcm1fZXh5bm9zX2Zs aXAgZmxpcCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHggPSBnZXRfZmltY19j b250ZXh0KGRldik7Cj4+ICsJc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnYgPSAmY3R4 LT5pcHBkcnY7Cj4+ICsJdTMyIGNmZzEsIGNmZzI7Cj4+ICsKPj4gKwlEUk1fREVCVUdfS01TKCIl czpkZWdyZWVbJWRdZmxpcFsweCV4XVxuIiwgX19mdW5jX18sCj4+ICsJCWRlZ3JlZSwgZmxpcCk7 Cj4+ICsKPj4gKwljZmcxID0gZmltY19yZWFkKEVYWU5PU19NU0NUUkwpOwo+PiArCWNmZzEgJj0g fihFWFlOT1NfTVNDVFJMX0ZMSVBfWF9NSVJST1IgfAo+PiArCQlFWFlOT1NfTVNDVFJMX0ZMSVBf WV9NSVJST1IpOwo+PiArCj4+ICsJY2ZnMiA9IGZpbWNfcmVhZChFWFlOT1NfQ0lUUkdGTVQpOwo+ PiArCWNmZzIgJj0gfkVYWU5PU19DSVRSR0ZNVF9JTlJPVDkwX0NMT0NLV0lTRTsKPj4gKwo+PiAr CXN3aXRjaCAoZGVncmVlKSB7Cj4+ICsJY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV8wOgo+PiArCQlp ZiAoZmxpcCAmIEVYWU5PU19EUk1fRkxJUF9IT1JJWk9OVEFMKQo+PiArCQkJY2ZnMSB8PSBFWFlO T1NfTVNDVFJMX0ZMSVBfWF9NSVJST1I7Cj4+ICsJCWlmIChmbGlwICYgRVhZTk9TX0RSTV9GTElQ X1ZFUlRJQ0FMKQo+PiArCQkJY2ZnMSB8PSBFWFlOT1NfTVNDVFJMX0ZMSVBfWV9NSVJST1I7Cj4+ ICsJCWJyZWFrOwo+PiArCWNhc2UgRVhZTk9TX0RSTV9ERUdSRUVfOTA6Cj4+ICsJCWNmZzIgfD0g RVhZTk9TX0NJVFJHRk1UX0lOUk9UOTBfQ0xPQ0tXSVNFOwo+PiArCQlpZiAoZmxpcCAmIEVYWU5P U19EUk1fRkxJUF9IT1JJWk9OVEFMKQo+PiArCQkJY2ZnMSB8PSBFWFlOT1NfTVNDVFJMX0ZMSVBf WF9NSVJST1I7Cj4+ICsJCWlmIChmbGlwICYgRVhZTk9TX0RSTV9GTElQX1ZFUlRJQ0FMKQo+PiAr CQkJY2ZnMSB8PSBFWFlOT1NfTVNDVFJMX0ZMSVBfWV9NSVJST1I7Cj4+ICsJCWJyZWFrOwo+PiAr CWNhc2UgRVhZTk9TX0RSTV9ERUdSRUVfMTgwOgo+PiArCQljZmcxIHw9IChFWFlOT1NfTVNDVFJM X0ZMSVBfWF9NSVJST1IgfAo+PiArCQkJRVhZTk9TX01TQ1RSTF9GTElQX1lfTUlSUk9SKTsKPj4g KwkJaWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZMSVBfSE9SSVpPTlRBTCkKPj4gKwkJCWNmZzEgJj0g fkVYWU5PU19NU0NUUkxfRkxJUF9YX01JUlJPUjsKPj4gKwkJaWYgKGZsaXAgJiBFWFlOT1NfRFJN X0ZMSVBfVkVSVElDQUwpCj4+ICsJCQljZmcxICY9IH5FWFlOT1NfTVNDVFJMX0ZMSVBfWV9NSVJS T1I7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRVhZTk9TX0RSTV9ERUdSRUVfMjcwOgo+PiArCQlj ZmcxIHw9IChFWFlOT1NfTVNDVFJMX0ZMSVBfWF9NSVJST1IgfAo+PiArCQkJRVhZTk9TX01TQ1RS TF9GTElQX1lfTUlSUk9SKTsKPj4gKwkJY2ZnMiB8PSBFWFlOT1NfQ0lUUkdGTVRfSU5ST1Q5MF9D TE9DS1dJU0U7Cj4+ICsJCWlmIChmbGlwICYgRVhZTk9TX0RSTV9GTElQX0hPUklaT05UQUwpCj4+ ICsJCQljZmcxICY9IH5FWFlOT1NfTVNDVFJMX0ZMSVBfWF9NSVJST1I7Cj4+ICsJCWlmIChmbGlw ICYgRVhZTk9TX0RSTV9GTElQX1ZFUlRJQ0FMKQo+PiArCQkJY2ZnMSAmPSB+RVhZTk9TX01TQ1RS TF9GTElQX1lfTUlSUk9SOwo+PiArCQlicmVhazsKPj4gKwlkZWZhdWx0Ogo+PiArCQlkZXZfZXJy KGlwcGRydi0+ZGV2LCAiaW5hdmxpZCBkZWdyZWUgdmFsdWUgJWQuXG4iLCBkZWdyZWUpOwo+PiAr CQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlmaW1jX3dyaXRlKGNmZzEsIEVYWU5P U19NU0NUUkwpOwo+PiArCWZpbWNfd3JpdGUoY2ZnMiwgRVhZTk9TX0NJVFJHRk1UKTsKPj4gKwo+ PiArCXJldHVybiAoY2ZnMiAmIEVYWU5PU19DSVRSR0ZNVF9JTlJPVDkwX0NMT0NLV0lTRSkgPyAx IDogMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBmaW1jX3NldF93aW5kb3coc3RydWN0IGZp bWNfY29udGV4dCAqY3R4LAo+PiArCXN0cnVjdCBkcm1fZXh5bm9zX3BvcyAqcG9zLCBzdHJ1Y3Qg ZHJtX2V4eW5vc19zeiAqc3opCj4+ICt7Cj4+ICsJdTMyIGNmZywgaDEsIGgyLCB2MSwgdjI7Cj4+ ICsKPj4gKwkvKiBjcm9wcGVkIGltYWdlICovCj4+ICsJaDEgPSBwb3MtPng7Cj4+ICsJaDIgPSBz ei0+aHNpemUgLSBwb3MtPncgLSBwb3MtPng7Cj4+ICsJdjEgPSBwb3MtPnk7Cj4+ICsJdjIgPSBz ei0+dnNpemUgLSBwb3MtPmggLSBwb3MtPnk7Cj4+ICsKPj4gKwlEUk1fREVCVUdfS01TKCIlczp4 WyVkXXlbJWRdd1slZF1oWyVkXWhzaXplWyVkXXZzaXplWyVkXVxuIiwKPj4gKwlfX2Z1bmNfXywg cG9zLT54LCBwb3MtPnksIHBvcy0+dywgcG9zLT5oLCBzei0+aHNpemUsIHN6LT52c2l6ZSk7Cj4+ ICsJRFJNX0RFQlVHX0tNUygiJXM6aDFbJWRdaDJbJWRddjFbJWRddjJbJWRdXG4iLCBfX2Z1bmNf XywKPj4gKwkJaDEsIGgyLCB2MSwgdjIpOwo+PiArCj4+ICsJLyoKPj4gKwkgKiBzZXQgd2luZG93 IG9mZnNldCAxLCAyIHNpemUKPj4gKwkgKiBjaGVjayBmaWd1cmUgNDMtMjEgaW4gdXNlciBtYW51 YWwKPj4gKwkgKi8KPj4gKwljZmcgPSBmaW1jX3JlYWQoRVhZTk9TX0NJV0RPRlNUKTsKPj4gKwlj ZmcgJj0gfihFWFlOT1NfQ0lXRE9GU1RfV0lOSE9ST0ZTVF9NQVNLIHwKPj4gKwkJRVhZTk9TX0NJ V0RPRlNUX1dJTlZFUk9GU1RfTUFTSyk7Cj4+ICsJY2ZnIHw9IChFWFlOT1NfQ0lXRE9GU1RfV0lO SE9ST0ZTVChoMSkgfAo+PiArCQlFWFlOT1NfQ0lXRE9GU1RfV0lOVkVST0ZTVCh2MSkpOwo+PiAr CWNmZyB8PSBFWFlOT1NfQ0lXRE9GU1RfV0lOT0ZTRU47Cj4+ICsJZmltY193cml0ZShjZmcsIEVY WU5PU19DSVdET0ZTVCk7Cj4+ICsKPj4gKwljZmcgPSAoRVhZTk9TX0NJV0RPRlNUMl9XSU5IT1JP RlNUMihoMikgfAo+PiArCQlFWFlOT1NfQ0lXRE9GU1QyX1dJTlZFUk9GU1QyKHYyKSk7Cj4+ICsJ ZmltY193cml0ZShjZmcsIEVYWU5PU19DSVdET0ZTVDIpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZmltY19zcmNfc2V0X3NpemUoc3RydWN0IGRldmljZSAq ZGV2LCBpbnQgc3dhcCwKPj4gKwlzdHJ1Y3QgZHJtX2V4eW5vc19wb3MgKnBvcywgc3RydWN0IGRy bV9leHlub3Nfc3ogKnN6KQo+PiArewo+PiArCXN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCA9IGdl dF9maW1jX2NvbnRleHQoZGV2KTsKPj4gKwlzdHJ1Y3QgZHJtX2V4eW5vc19wb3MgaW1nX3BvcyA9 ICpwb3M7Cj4+ICsJc3RydWN0IGRybV9leHlub3Nfc3ogaW1nX3N6ID0gKnN6Owo+PiArCXUzMiBj Zmc7Cj4+ICsKPj4gKwkvKiBUb0RvOiBjaGVjayB3aWR0aCBhbmQgaGVpZ2h0ICovCj4+ICsKPj4g KwlEUk1fREVCVUdfS01TKCIlczpzd2FwWyVkXWhzaXplWyVkXXZzaXplWyVkXVxuIiwKPj4gKwkJ X19mdW5jX18sIHN3YXAsIHN6LT5oc2l6ZSwgc3otPnZzaXplKTsKPj4gKwo+PiArCS8qIG9yaWdp bmFsIHNpemUgKi8KPj4gKwljZmcgPSAoRVhZTk9TX09SR0lTSVpFX0hPUklaT05UQUwoaW1nX3N6 LmhzaXplKSB8Cj4+ICsJCUVYWU5PU19PUkdJU0laRV9WRVJUSUNBTChpbWdfc3oudnNpemUpKTsK Pj4gKwo+PiArCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfT1JHSVNJWkUpOwo+PiArCj4+ICsJRFJN X0RFQlVHX0tNUygiJXM6eFslZF15WyVkXXdbJWRdaFslZF1cbiIsIF9fZnVuY19fLAo+PiArCQlw b3MtPngsIHBvcy0+eSwgcG9zLT53LCBwb3MtPmgpOwo+PiArCj4+ICsJaWYgKHN3YXApIHsKPj4g KwkJaW1nX3Bvcy53ID0gcG9zLT5oOwo+PiArCQlpbWdfcG9zLmggPSBwb3MtPnc7Cj4+ICsJCWlt Z19zei5oc2l6ZSA9IHN6LT52c2l6ZTsKPj4gKwkJaW1nX3N6LnZzaXplID0gc3otPmhzaXplOwo+ PiArCX0KPj4gKwo+PiArCS8qIHNldCBpbnB1dCBETUEgaW1hZ2Ugc2l6ZSAqLwo+PiArCWNmZyA9 IGZpbWNfcmVhZChFWFlOT1NfQ0lSRUFMX0lTSVpFKTsKPj4gKwljZmcgJj0gfihFWFlOT1NfQ0lS RUFMX0lTSVpFX0hFSUdIVF9NQVNLIHwKPj4gKwkJRVhZTk9TX0NJUkVBTF9JU0laRV9XSURUSF9N QVNLKTsKPj4gKwljZmcgfD0gKEVYWU5PU19DSVJFQUxfSVNJWkVfV0lEVEgoaW1nX3Bvcy53KSB8 Cj4+ICsJCUVYWU5PU19DSVJFQUxfSVNJWkVfSEVJR0hUKGltZ19wb3MuaCkpOwo+PiArCWZpbWNf d3JpdGUoY2ZnLCBFWFlOT1NfQ0lSRUFMX0lTSVpFKTsKPj4gKwo+PiArCS8qCj4+ICsJICogc2V0 IGlucHV0IEZJRk8gaW1hZ2Ugc2l6ZQo+PiArCSAqIGZvciBub3csIHdlIHN1cHBvcnQgb25seSBJ VFU2MDEgOCBiaXQgbW9kZQo+PiArCSAqLwo+PiArCWNmZyA9IChFWFlOT1NfQ0lTUkNGTVRfSVRV NjAxXzhCSVQgfAo+PiArCQlFWFlOT1NfQ0lTUkNGTVRfU09VUkNFSFNJWkUoaW1nX3N6LmhzaXpl KSB8Cj4+ICsJCUVYWU5PU19DSVNSQ0ZNVF9TT1VSQ0VWU0laRShpbWdfc3oudnNpemUpKTsKPj4g KwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJU1JDRk1UKTsKPj4gKwo+PiArCS8qIG9mZnNldCBZ KFJHQiksIENiLCBDciAqLwo+PiArCWNmZyA9IChFWFlOT1NfQ0lJWU9GRl9IT1JJWk9OVEFMKGlt Z19wb3MueCkgfAo+PiArCQlFWFlOT1NfQ0lJWU9GRl9WRVJUSUNBTChpbWdfcG9zLnkpKTsKPj4g KwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJSVlPRkYpOwo+PiArCWNmZyA9IChFWFlOT1NfQ0lJ Q0JPRkZfSE9SSVpPTlRBTChpbWdfcG9zLngpIHwKPj4gKwkJRVhZTk9TX0NJSUNCT0ZGX1ZFUlRJ Q0FMKGltZ19wb3MueSkpOwo+PiArCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lJQ0JPRkYpOwo+ PiArCWNmZyA9IChFWFlOT1NfQ0lJQ1JPRkZfSE9SSVpPTlRBTChpbWdfcG9zLngpIHwKPj4gKwkJ RVhZTk9TX0NJSUNST0ZGX1ZFUlRJQ0FMKGltZ19wb3MueSkpOwo+PiArCWZpbWNfd3JpdGUoY2Zn LCBFWFlOT1NfQ0lJQ1JPRkYpOwo+PiArCj4+ICsJcmV0dXJuIGZpbWNfc2V0X3dpbmRvdyhjdHgs ICZpbWdfcG9zLCAmaW1nX3N6KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBmaW1jX3NyY19z ZXRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+ICsJCQlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBf YnVmX2luZm8gKmJ1Zl9pbmZvLCB1MzIgYnVmX2lkLAo+PiArCQkJZW51bSBkcm1fZXh5bm9zX2lw cF9idWZfdHlwZSBidWZfdHlwZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHgg PSBnZXRfZmltY19jb250ZXh0KGRldik7Cj4+ICsJc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICpp cHBkcnYgPSAmY3R4LT5pcHBkcnY7Cj4+ICsJc3RydWN0IGRybV9leHlub3NfaXBwX2NtZF9ub2Rl ICpjX25vZGUgPSBpcHBkcnYtPmNtZDsKPj4gKwlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfcHJvcGVy dHkgKnByb3BlcnR5Owo+PiArCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9jb25maWcgKmNvbmZpZzsK Pj4gKwo+PiArCWlmICghY19ub2RlKSB7Cj4+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBj X25vZGUuXG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJcHJvcGVy dHkgPSAmY19ub2RlLT5wcm9wZXJ0eTsKPj4gKwlpZiAoIXByb3BlcnR5KSB7Cj4+ICsJCURSTV9F UlJPUigiZmFpbGVkIHRvIGdldCBwcm9wZXJ0eS5cbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsK Pj4gKwl9Cj4+ICsKPj4gKwlEUk1fREVCVUdfS01TKCIlczpwcm9wX2lkWyVkXWJ1Zl9pZFslZF1i dWZfdHlwZVslZF1cbiIsIF9fZnVuY19fLAo+PiArCQlwcm9wZXJ0eS0+cHJvcF9pZCwgYnVmX2lk LCBidWZfdHlwZSk7Cj4+ICsKPj4gKwlpZiAoYnVmX2lkID4gRklNQ19NQVhfU1JDKSB7Cj4+ICsJ CWRldl9pbmZvKGlwcGRydi0+ZGV2LCAiaW5hdmxpZCBidWZfaWQgJWQuXG4iLCBidWZfaWQpOwo+ PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBhZGRyZXNzIHJlZ2lzdGVy IHNldCAqLwo+PiArCXN3aXRjaCAoYnVmX3R5cGUpIHsKPj4gKwljYXNlIElQUF9CVUZfRU5RVUVV RToKPj4gKwkJY29uZmlnID0gJnByb3BlcnR5LT5jb25maWdbRVhZTk9TX0RSTV9PUFNfU1JDXTsK Pj4gKwkJZmltY193cml0ZShidWZfaW5mby0+YmFzZVtFWFlOT1NfRFJNX1BMQU5BUl9ZXSwKPj4g KwkJCUVYWU5PU19DSUlZU0EoYnVmX2lkKSk7Cj4+ICsKPj4gKwkJaWYgKGNvbmZpZy0+Zm10ID09 IERSTV9GT1JNQVRfWVZVNDIwKSB7Cj4+ICsJCQlmaW1jX3dyaXRlKGJ1Zl9pbmZvLT5iYXNlW0VY WU5PU19EUk1fUExBTkFSX0NSXSwKPj4gKwkJCQlFWFlOT1NfQ0lJQ0JTQShidWZfaWQpKTsKPj4g KwkJCWZpbWNfd3JpdGUoYnVmX2luZm8tPmJhc2VbRVhZTk9TX0RSTV9QTEFOQVJfQ0JdLAo+PiAr CQkJCUVYWU5PU19DSUlDUlNBKGJ1Zl9pZCkpOwo+PiArCQl9IGVsc2Ugewo+PiArCQkJZmltY193 cml0ZShidWZfaW5mby0+YmFzZVtFWFlOT1NfRFJNX1BMQU5BUl9DQl0sCj4+ICsJCQkJRVhZTk9T X0NJSUNCU0EoYnVmX2lkKSk7Cj4+ICsJCQlmaW1jX3dyaXRlKGJ1Zl9pbmZvLT5iYXNlW0VYWU5P U19EUk1fUExBTkFSX0NSXSwKPj4gKwkJCQlFWFlOT1NfQ0lJQ1JTQShidWZfaWQpKTsKPj4gKwkJ fQo+PiArCQlicmVhazsKPj4gKwljYXNlIElQUF9CVUZfREVRVUVVRToKPj4gKwkJZmltY193cml0 ZSgweDAsIEVYWU5PU19DSUlZU0EoYnVmX2lkKSk7Cj4+ICsJCWZpbWNfd3JpdGUoMHgwLCBFWFlO T1NfQ0lJQ0JTQShidWZfaWQpKTsKPj4gKwkJZmltY193cml0ZSgweDAsIEVYWU5PU19DSUlDUlNB KGJ1Zl9pZCkpOwo+PiArCQlicmVhazsKPj4gKwlkZWZhdWx0Ogo+PiArCQkvKiBieXBhc3MgKi8K Pj4gKwkJYnJlYWs7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBzdHJ1Y3QgZXh5bm9zX2RybV9pcHBfb3BzIGZpbWNfc3JjX29wcyA9IHsKPj4gKwkuc2V0 X2ZtdCA9IGZpbWNfc3JjX3NldF9mbXQsCj4+ICsJLnNldF90cmFuc2YgPSBmaW1jX3NyY19zZXRf dHJhbnNmLAo+PiArCS5zZXRfc2l6ZSA9IGZpbWNfc3JjX3NldF9zaXplLAo+PiArCS5zZXRfYWRk ciA9IGZpbWNfc3JjX3NldF9hZGRyLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGludCBmaW1jX2Rz dF9zZXRfZm10X29yZGVyKHN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCwgdTMyIGZtdCkKPj4gK3sK Pj4gKwlzdHJ1Y3QgZXh5bm9zX2RybV9pcHBkcnYgKmlwcGRydiA9ICZjdHgtPmlwcGRydjsKPj4g Kwl1MzIgY2ZnOwo+PiArCj4+ICsJRFJNX0RFQlVHX0tNUygiJXM6Zm10WzB4JXhdXG4iLCBfX2Z1 bmNfXywgZm10KTsKPj4gKwo+PiArCS8qIFJHQiAqLwo+PiArCWNmZyA9IGZpbWNfcmVhZChFWFlO T1NfQ0lTQ0NUUkwpOwo+PiArCWNmZyAmPSB+RVhZTk9TX0NJU0NDVFJMX09VVFJHQl9GTVRfUkdC X01BU0s7Cj4+ICsKPj4gKwlzd2l0Y2ggKGZtdCkgewo+PiArCWNhc2UgRFJNX0ZPUk1BVF9SR0I1 NjU6Cj4+ICsJCWNmZyB8PSBFWFlOT1NfQ0lTQ0NUUkxfT1VUUkdCX0ZNVF9SR0I1NjU7Cj4+ICsJ CWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lTQ0NUUkwpOwo+PiArCQlyZXR1cm4gMDsKPj4gKwlj YXNlIERSTV9GT1JNQVRfUkdCODg4Ogo+PiArCQljZmcgfD0gRVhZTk9TX0NJU0NDVFJMX09VVFJH Ql9GTVRfUkdCODg4Owo+PiArCQlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJU0NDVFJMKTsKPj4g KwkJcmV0dXJuIDA7Cj4+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4Ogo+PiArCQljZmcgfD0g KEVYWU5PU19DSVNDQ1RSTF9PVVRSR0JfRk1UX1JHQjg4OCB8Cj4+ICsJCQlFWFlOT1NfQ0lTQ0NU UkxfRVhUUkdCX0VYVEVOU0lPTik7Cj4+ICsJCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lTQ0NU UkwpOwo+PiArCQlicmVhazsKPj4gKwlkZWZhdWx0Ogo+PiArCQkvKiBieXBhc3MgKi8KPj4gKwkJ YnJlYWs7Cj4+ICsJfQo+PiArCj4+ICsJLyogWVVWICovCj4+ICsJY2ZnID0gZmltY19yZWFkKEVY WU5PU19DSU9DVFJMKTsKPj4gKwljZmcgJj0gfihFWFlOT1NfQ0lPQ1RSTF9PUkRFUjJQX01BU0sg fAo+PiArCQlFWFlOT1NfQ0lPQ1RSTF9PUkRFUjQyMl9NQVNLIHwKPj4gKwkJRVhZTk9TX0NJT0NU UkxfWUNCQ1JfUExBTkVfTUFTSyk7Cj4+ICsKPj4gKwlzd2l0Y2ggKGZtdCkgewo+PiArCWNhc2Ug RFJNX0ZPUk1BVF9YUkdCODg4ODoKPj4gKwkJY2ZnIHw9IEVYWU5PU19DSU9DVFJMX0FMUEhBX09V VDsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBEUk1fRk9STUFUX1lVWVY6Cj4+ICsJCWNmZyB8PSBF WFlOT1NfQ0lPQ1RSTF9PUkRFUjQyMl9ZQ0JZQ1I7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRFJN X0ZPUk1BVF9ZVllVOgo+PiArCQljZmcgfD0gRVhZTk9TX0NJT0NUUkxfT1JERVI0MjJfWUNSWUNC Owo+PiArCQlicmVhazsKPj4gKwljYXNlIERSTV9GT1JNQVRfVVlWWToKPj4gKwkJY2ZnIHw9IEVY WU5PU19DSU9DVFJMX09SREVSNDIyX0NCWUNSWTsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBEUk1f Rk9STUFUX1ZZVVk6Cj4+ICsJCWNmZyB8PSBFWFlOT1NfQ0lPQ1RSTF9PUkRFUjQyMl9DUllDQlk7 Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRFJNX0ZPUk1BVF9OVjIxOgo+PiArCWNhc2UgRFJNX0ZP Uk1BVF9OVjYxOgo+PiArCQljZmcgfD0gRVhZTk9TX0NJT0NUUkxfT1JERVIyUF9MU0JfQ1JDQjsK Pj4gKwkJY2ZnIHw9IEVYWU5PU19DSU9DVFJMX1lDQkNSXzJQTEFORTsKPj4gKwkJYnJlYWs7Cj4+ ICsJY2FzZSBEUk1fRk9STUFUX1lVVjQyMjoKPj4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDIwOgo+ PiArCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjA6Cj4+ICsJCWNmZyB8PSBFWFlOT1NfQ0lPQ1RSTF9Z Q0JDUl8zUExBTkU7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgo+PiAr CWNhc2UgRFJNX0ZPUk1BVF9OVjEyTVQ6Cj4+ICsJY2FzZSBEUk1fRk9STUFUX05WMTY6Cj4+ICsJ CWNmZyB8PSBFWFlOT1NfQ0lPQ1RSTF9PUkRFUjJQX0xTQl9DQkNSOwo+PiArCQljZmcgfD0gRVhZ Tk9TX0NJT0NUUkxfWUNCQ1JfMlBMQU5FOwo+PiArCQlicmVhazsKPj4gKwlkZWZhdWx0Ogo+PiAr CQlkZXZfZXJyKGlwcGRydi0+ZGV2LCAiaW5hdmxpZCB0YXJnZXQgeXV2IG9yZGVyIDB4JXguXG4i LCBmbXQpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlmaW1jX3dyaXRl KGNmZywgRVhZTk9TX0NJT0NUUkwpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4KPiBUaGlz IGZ1bmN0aW9uIGlzIGFsc28gb25seSBjYWxsZWQgYnkgZmltY19kc3Rfc2V0X2ZtdCBhbmQgYm90 aCBmdW5jdGlvbnMKPiBoYXZlIGZvcm1hdCBjaGVjay4gU28gdGhlciBjYW4gYmUgbWVyZ2VkIGlu dG8gb25lIGZ1bmN0aW9uLgoKVGhpcyBmdW5jdGlvbiBjb250cm9sZWQgZGlmZmVyZW5jZSByZWdp c3Rlci4gc28sIEkgdGhpbmsgdGhpcyBjYXNlIGlzIG5vIApwcm9ibGVtLgpJZiB3ZSBtZXJnZSB0 aGlzIHJvdXRpbmUuIHRoYW4gd2UgZ290IHRoZSBhbGwgc2VwZXJhdGVkICJzd2l0Y2ggY2FzZSIg CnJvdXRpbmUuCmNvbXBsZXhpdHkgaGFzIGluY3JlYXNlZCwgYW5kIGZ1bmN0aW9uIGxpbmUgY291 bnQgdmVyeSBpbmNyZWFzZWQuIDopCgo+Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZmltY19kc3Rfc2V0 X2ZtdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBmbXQpCj4+ICt7Cj4+ICsJc3RydWN0IGZpbWNf Y29udGV4dCAqY3R4ID0gZ2V0X2ZpbWNfY29udGV4dChkZXYpOwo+PiArCXN0cnVjdCBleHlub3Nf ZHJtX2lwcGRydiAqaXBwZHJ2ID0gJmN0eC0+aXBwZHJ2Owo+PiArCXUzMiBjZmc7Cj4+ICsKPj4g KwlEUk1fREVCVUdfS01TKCIlczpmbXRbMHgleF1cbiIsIF9fZnVuY19fLCBmbXQpOwo+PiArCj4+ ICsJY2ZnID0gZmltY19yZWFkKEVYWU5PU19DSUVYVEVOKTsKPj4gKwo+PiArCWlmIChmbXQgPT0g RFJNX0ZPUk1BVF9BWVVWKSB7Cj4+ICsJCWNmZyB8PSBFWFlOT1NfQ0lFWFRFTl9ZVVY0NDRfT1VU Owo+PiArCQlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJRVhURU4pOwo+PiArCX0gZWxzZSB7Cj4+ ICsJCWNmZyAmPSB+RVhZTk9TX0NJRVhURU5fWVVWNDQ0X09VVDsKPj4gKwkJZmltY193cml0ZShj ZmcsIEVYWU5PU19DSUVYVEVOKTsKPj4gKwo+PiArCQljZmcgPSBmaW1jX3JlYWQoRVhZTk9TX0NJ VFJHRk1UKTsKPj4gKwkJY2ZnICY9IH5FWFlOT1NfQ0lUUkdGTVRfT1VURk9STUFUX01BU0s7Cj4+ ICsKPj4gKwkJc3dpdGNoIChmbXQpIHsKPj4gKwkJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKPj4g KwkJY2FzZSBEUk1fRk9STUFUX1JHQjg4ODoKPj4gKwkJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4 Ogo+PiArCQkJY2ZnIHw9IEVYWU5PU19DSVRSR0ZNVF9PVVRGT1JNQVRfUkdCOwo+PiArCQkJYnJl YWs7Cj4+ICsJCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgo+PiArCQljYXNlIERSTV9GT1JNQVRfWVZZ VToKPj4gKwkJY2FzZSBEUk1fRk9STUFUX1VZVlk6Cj4+ICsJCWNhc2UgRFJNX0ZPUk1BVF9WWVVZ Ogo+PiArCQkJY2ZnIHw9IEVYWU5PU19DSVRSR0ZNVF9PVVRGT1JNQVRfWUNCQ1I0MjJfMVBMQU5F Owo+PiArCQkJYnJlYWs7Cj4+ICsJCWNhc2UgRFJNX0ZPUk1BVF9OVjE2Ogo+PiArCQljYXNlIERS TV9GT1JNQVRfTlY2MToKPj4gKwkJY2FzZSBEUk1fRk9STUFUX1lVVjQyMjoKPj4gKwkJCWNmZyB8 PSBFWFlOT1NfQ0lUUkdGTVRfT1VURk9STUFUX1lDQkNSNDIyOwo+PiArCQkJYnJlYWs7Cj4+ICsJ CWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6Cj4+ICsJCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjA6Cj4+ ICsJCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgo+PiArCQljYXNlIERSTV9GT1JNQVRfTlYxMk1UOgo+ PiArCQljYXNlIERSTV9GT1JNQVRfTlYyMToKPj4gKwkJCWNmZyB8PSBFWFlOT1NfQ0lUUkdGTVRf T1VURk9STUFUX1lDQkNSNDIwOwo+PiArCQkJYnJlYWs7Cj4+ICsJCWRlZmF1bHQ6Cj4+ICsJCQlk ZXZfZXJyKGlwcGRydi0+ZGV2LCAiaW5hdmxpZCB0YXJnZXQgZm9ybWF0IDB4JXguXG4iLAo+PiAr CQkJCWZtdCk7Cj4+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwkJfQo+PiArCj4+ICsJCWZpbWNf d3JpdGUoY2ZnLCBFWFlOT1NfQ0lUUkdGTVQpOwo+PiArCX0KPj4gKwo+PiArCWNmZyA9IGZpbWNf cmVhZChFWFlOT1NfQ0lETUFQQVJBTSk7Cj4+ICsJY2ZnICY9IH5FWFlOT1NfQ0lETUFQQVJBTV9X X01PREVfTUFTSzsKPj4gKwo+PiArCWlmIChmbXQgPT0gRFJNX0ZPUk1BVF9OVjEyTVQpCj4+ICsJ CWNmZyB8PSBFWFlOT1NfQ0lETUFQQVJBTV9XX01PREVfNjRYMzI7Cj4+ICsJZWxzZQo+PiArCQlj ZmcgfD0gRVhZTk9TX0NJRE1BUEFSQU1fV19NT0RFX0xJTkVBUjsKPj4gKwo+PiArCWZpbWNfd3Jp dGUoY2ZnLCBFWFlOT1NfQ0lETUFQQVJBTSk7Cj4+ICsKPj4gKwlyZXR1cm4gZmltY19kc3Rfc2V0 X2ZtdF9vcmRlcihjdHgsIGZtdCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZmltY19kc3Rf c2V0X3RyYW5zZihzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+ICsJCWVudW0gZHJtX2V4eW5vc19kZWdy ZWUgZGVncmVlLAo+PiArCQllbnVtIGRybV9leHlub3NfZmxpcCBmbGlwKQo+PiArewo+PiArCXN0 cnVjdCBmaW1jX2NvbnRleHQgKmN0eCA9IGdldF9maW1jX2NvbnRleHQoZGV2KTsKPj4gKwlzdHJ1 Y3QgZXh5bm9zX2RybV9pcHBkcnYgKmlwcGRydiA9ICZjdHgtPmlwcGRydjsKPj4gKwl1MzIgY2Zn Owo+PiArCj4+ICsJRFJNX0RFQlVHX0tNUygiJXM6ZGVncmVlWyVkXWZsaXBbMHgleF1cbiIsIF9f ZnVuY19fLAo+PiArCQlkZWdyZWUsIGZsaXApOwo+PiArCj4+ICsJY2ZnID0gZmltY19yZWFkKEVY WU5PU19DSVRSR0ZNVCk7Cj4+ICsJY2ZnICY9IH5FWFlOT1NfQ0lUUkdGTVRfRkxJUF9NQVNLOwo+ PiArCWNmZyAmPSB+RVhZTk9TX0NJVFJHRk1UX09VVFJPVDkwX0NMT0NLV0lTRTsKPj4gKwo+PiAr CXN3aXRjaCAoZGVncmVlKSB7Cj4+ICsJY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV8wOgo+PiArCQlp ZiAoZmxpcCAmIEVYWU5PU19EUk1fRkxJUF9IT1JJWk9OVEFMKQo+PiArCQkJY2ZnIHw9IEVYWU5P U19DSVRSR0ZNVF9GTElQX1hfTUlSUk9SOwo+PiArCQlpZiAoZmxpcCAmIEVYWU5PU19EUk1fRkxJ UF9WRVJUSUNBTCkKPj4gKwkJCWNmZyB8PSBFWFlOT1NfQ0lUUkdGTVRfRkxJUF9ZX01JUlJPUjsK Pj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV85MDoKPj4gKwkJY2ZnIHw9 IEVYWU5PU19DSVRSR0ZNVF9PVVRST1Q5MF9DTE9DS1dJU0U7Cj4+ICsJCWlmIChmbGlwICYgRVhZ Tk9TX0RSTV9GTElQX0hPUklaT05UQUwpCj4+ICsJCQljZmcgfD0gRVhZTk9TX0NJVFJHRk1UX0ZM SVBfWF9NSVJST1I7Cj4+ICsJCWlmIChmbGlwICYgRVhZTk9TX0RSTV9GTElQX1ZFUlRJQ0FMKQo+ PiArCQkJY2ZnIHw9IEVYWU5PU19DSVRSR0ZNVF9GTElQX1lfTUlSUk9SOwo+PiArCQlicmVhazsK Pj4gKwljYXNlIEVYWU5PU19EUk1fREVHUkVFXzE4MDoKPj4gKwkJY2ZnIHw9IChFWFlOT1NfQ0lU UkdGTVRfRkxJUF9YX01JUlJPUiB8Cj4+ICsJCQlFWFlOT1NfQ0lUUkdGTVRfRkxJUF9ZX01JUlJP Uik7Cj4+ICsJCWlmIChmbGlwICYgRVhZTk9TX0RSTV9GTElQX0hPUklaT05UQUwpCj4+ICsJCQlj ZmcgJj0gfkVYWU5PU19DSVRSR0ZNVF9GTElQX1hfTUlSUk9SOwo+PiArCQlpZiAoZmxpcCAmIEVY WU5PU19EUk1fRkxJUF9WRVJUSUNBTCkKPj4gKwkJCWNmZyAmPSB+RVhZTk9TX0NJVFJHRk1UX0ZM SVBfWV9NSVJST1I7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRVhZTk9TX0RSTV9ERUdSRUVfMjcw Ogo+PiArCQljZmcgfD0gKEVYWU5PU19DSVRSR0ZNVF9PVVRST1Q5MF9DTE9DS1dJU0UgfAo+PiAr CQkJRVhZTk9TX0NJVFJHRk1UX0ZMSVBfWF9NSVJST1IgfAo+PiArCQkJRVhZTk9TX0NJVFJHRk1U X0ZMSVBfWV9NSVJST1IpOwo+PiArCQlpZiAoZmxpcCAmIEVYWU5PU19EUk1fRkxJUF9IT1JJWk9O VEFMKQo+PiArCQkJY2ZnICY9IH5FWFlOT1NfQ0lUUkdGTVRfRkxJUF9YX01JUlJPUjsKPj4gKwkJ aWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZMSVBfVkVSVElDQUwpCj4+ICsJCQljZmcgJj0gfkVYWU5P U19DSVRSR0ZNVF9GTElQX1lfTUlSUk9SOwo+PiArCQlicmVhazsKPj4gKwlkZWZhdWx0Ogo+PiAr CQlkZXZfZXJyKGlwcGRydi0+ZGV2LCAiaW5hdmxpZCBkZWdyZWUgdmFsdWUgJWQuXG4iLCBkZWdy ZWUpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwlmaW1jX3dyaXRlKGNm ZywgRVhZTk9TX0NJVFJHRk1UKTsKPj4gKwo+PiArCXJldHVybiAoY2ZnICYgRVhZTk9TX0NJVFJH Rk1UX09VVFJPVDkwX0NMT0NLV0lTRSkgPyAxIDogMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlu dCBmaW1jX2dldF9yYXRpb19zaGlmdCh1MzIgc3JjLCB1MzIgZHN0LCB1MzIgKnJhdGlvLCB1MzIg KnNoaWZ0KQo+PiArewo+PiArCURSTV9ERUJVR19LTVMoIiVzOnNyY1slZF1kc3RbJWRdXG4iLCBf X2Z1bmNfXywgc3JjLCBkc3QpOwo+PiArCj4+ICsJaWYgKHNyYyA+PSBkc3QgKiA2NCkgewo+PiAr CQlEUk1fRVJST1IoImZhaWxlZCB0byBtYWtlIHJhdGlvIGFuZCBzaGlmdC5cbiIpOwo+PiArCQly ZXR1cm4gLUVJTlZBTDsKPj4gKwl9IGVsc2UgaWYgKHNyYyA+PSBkc3QgKiAzMikgewo+PiArCQkq cmF0aW8gPSAzMjsKPj4gKwkJKnNoaWZ0ID0gNTsKPj4gKwl9IGVsc2UgaWYgKHNyYyA+PSBkc3Qg KiAxNikgewo+PiArCQkqcmF0aW8gPSAxNjsKPj4gKwkJKnNoaWZ0ID0gNDsKPj4gKwl9IGVsc2Ug aWYgKHNyYyA+PSBkc3QgKiA4KSB7Cj4+ICsJCSpyYXRpbyA9IDg7Cj4+ICsJCSpzaGlmdCA9IDM7 Cj4+ICsJfSBlbHNlIGlmIChzcmMgPj0gZHN0ICogNCkgewo+PiArCQkqcmF0aW8gPSA0Owo+PiAr CQkqc2hpZnQgPSAyOwo+PiArCX0gZWxzZSBpZiAoc3JjID49IGRzdCAqIDIpIHsKPj4gKwkJKnJh dGlvID0gMjsKPj4gKwkJKnNoaWZ0ID0gMTsKPj4gKwl9IGVsc2Ugewo+PiArCQkqcmF0aW8gPSAx Owo+PiArCQkqc2hpZnQgPSAwOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IGZpbWNfc2V0X3ByZXNjYWxlcihzdHJ1Y3QgZmltY19jb250ZXh0ICpj dHgsIHN0cnVjdCBmaW1jX3NjYWxlciAqc2MsCj4+ICsJCXN0cnVjdCBkcm1fZXh5bm9zX3BvcyAq c3JjLCBzdHJ1Y3QgZHJtX2V4eW5vc19wb3MgKmRzdCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZXh5bm9z X2RybV9pcHBkcnYgKmlwcGRydiA9ICZjdHgtPmlwcGRydjsKPj4gKwl1MzIgY2ZnLCBjZmdfZXh0 LCBzaGZhY3RvcjsKPj4gKwl1MzIgcHJlX2RzdF93aWR0aCwgcHJlX2RzdF9oZWlnaHQ7Cj4+ICsJ dTMyIHByZV9ocmF0aW8sIGhmYWN0b3IsIHByZV92cmF0aW8sIHZmYWN0b3I7Cj4+ICsJaW50IHJl dCA9IDA7Cj4+ICsJdTMyIHNyY193LCBzcmNfaCwgZHN0X3csIGRzdF9oOwo+PiArCj4+ICsJY2Zn X2V4dCA9IGZpbWNfcmVhZChFWFlOT1NfQ0lUUkdGTVQpOwo+PiArCWlmIChjZmdfZXh0ICYgRVhZ Tk9TX0NJVFJHRk1UX0lOUk9UOTBfQ0xPQ0tXSVNFKSB7Cj4+ICsJCXNyY193ID0gc3JjLT5oOwo+ PiArCQlzcmNfaCA9IHNyYy0+dzsKPj4gKwl9IGVsc2Ugewo+PiArCQlzcmNfdyA9IHNyYy0+dzsK Pj4gKwkJc3JjX2ggPSBzcmMtPmg7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKGNmZ19leHQgJiBFWFlO T1NfQ0lUUkdGTVRfT1VUUk9UOTBfQ0xPQ0tXSVNFKSB7Cj4+ICsJCWRzdF93ID0gZHN0LT5oOwo+ PiArCQlkc3RfaCA9IGRzdC0+dzsKPj4gKwl9IGVsc2Ugewo+PiArCQlkc3RfdyA9IGRzdC0+dzsK Pj4gKwkJZHN0X2ggPSBkc3QtPmg7Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0gZmltY19nZXRfcmF0 aW9fc2hpZnQoc3JjX3csIGRzdF93LCAmcHJlX2hyYXRpbywgJmhmYWN0b3IpOwo+PiArCWlmIChy ZXQpIHsKPj4gKwkJZGV2X2VycihpcHBkcnYtPmRldiwgImZhaWxlZCB0byBnZXQgcmF0aW8gaG9y aXpvbnRhbC5cbiIpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCXJldCA9IGZp bWNfZ2V0X3JhdGlvX3NoaWZ0KHNyY19oLCBkc3RfaCwgJnByZV92cmF0aW8sICZ2ZmFjdG9yKTsK Pj4gKwlpZiAocmV0KSB7Cj4+ICsJCWRldl9lcnIoaXBwZHJ2LT5kZXYsICJmYWlsZWQgdG8gZ2V0 IHJhdGlvIHZlcnRpY2FsLlxuIik7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJ cHJlX2RzdF93aWR0aCA9IHNyY193IC8gcHJlX2hyYXRpbzsKPj4gKwlwcmVfZHN0X2hlaWdodCA9 IHNyY19oIC8gcHJlX3ZyYXRpbzsKPj4gKwlEUk1fREVCVUdfS01TKCIlczpwcmVfZHN0X3dpZHRo WyVkXXByZV9kc3RfaGVpZ2h0WyVkXVxuIiwgX19mdW5jX18sCj4+ICsJCXByZV9kc3Rfd2lkdGgs IHByZV9kc3RfaGVpZ2h0KTsKPj4gKwlEUk1fREVCVUdfS01TKCIlczpwcmVfaHJhdGlvWyVkXWhm YWN0b3JbJWRdcHJlX3ZyYXRpb1slZF12ZmFjdG9yWyVkXVxuIiwKPj4gKwkJX19mdW5jX18sIHBy ZV9ocmF0aW8sIGhmYWN0b3IsIHByZV92cmF0aW8sIHZmYWN0b3IpOwo+PiArCj4+ICsJc2MtPmhy YXRpbyA9IChzcmNfdyA8PCAxNCkgLyAoZHN0X3cgPDwgaGZhY3Rvcik7Cj4+ICsJc2MtPnZyYXRp byA9IChzcmNfaCA8PCAxNCkgLyAoZHN0X2ggPDwgdmZhY3Rvcik7Cj4+ICsJc2MtPnVwX2ggPSAo ZHN0X3cgPj0gc3JjX3cpID8gdHJ1ZSA6IGZhbHNlOwo+PiArCXNjLT51cF92ID0gKGRzdF9oID49 IHNyY19oKSA/IHRydWUgOiBmYWxzZTsKPj4gKwlEUk1fREVCVUdfS01TKCIlczpocmF0aW9bJWRd dnJhdGlvWyVkXXVwX2hbJWRddXBfdlslZF1cbiIsCj4+ICsJX19mdW5jX18sIHNjLT5ocmF0aW8s IHNjLT52cmF0aW8sIHNjLT51cF9oLCBzYy0+dXBfdik7Cj4+ICsKPj4gKwlzaGZhY3RvciA9IDEw IC0gKGhmYWN0b3IgKyB2ZmFjdG9yKTsKPj4gKwlEUk1fREVCVUdfS01TKCIlczpzaGZhY3Rvclsl ZF1cbiIsIF9fZnVuY19fLCBzaGZhY3Rvcik7Cj4+ICsKPj4gKwljZmcgPSAoRVhZTk9TX0NJU0NQ UkVSQVRJT19TSEZBQ1RPUihzaGZhY3RvcikgfAo+PiArCQlFWFlOT1NfQ0lTQ1BSRVJBVElPX1BS RUhPUlJBVElPKHByZV9ocmF0aW8pIHwKPj4gKwkJRVhZTk9TX0NJU0NQUkVSQVRJT19QUkVWRVJS QVRJTyhwcmVfdnJhdGlvKSk7Cj4+ICsJZmltY193cml0ZShjZmcsIEVYWU5PU19DSVNDUFJFUkFU SU8pOwo+PiArCj4+ICsJY2ZnID0gKEVYWU5PU19DSVNDUFJFRFNUX1BSRURTVFdJRFRIKHByZV9k c3Rfd2lkdGgpIHwKPj4gKwkJRVhZTk9TX0NJU0NQUkVEU1RfUFJFRFNUSEVJR0hUKHByZV9kc3Rf aGVpZ2h0KSk7Cj4+ICsJZmltY193cml0ZShjZmcsIEVYWU5PU19DSVNDUFJFRFNUKTsKPj4gKwo+ PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGZpbWNfc2V0X3NjYWxl cihzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHgsIHN0cnVjdCBmaW1jX3NjYWxlciAqc2MpCj4+ICt7 Cj4+ICsJdTMyIGNmZywgY2ZnX2V4dDsKPj4gKwo+PiArCURSTV9ERUJVR19LTVMoIiVzOnJhbmdl WyVkXWJ5cGFzc1slZF11cF9oWyVkXXVwX3ZbJWRdXG4iLAo+PiArCQlfX2Z1bmNfXywgc2MtPnJh bmdlLCBzYy0+YnlwYXNzLCBzYy0+dXBfaCwgc2MtPnVwX3YpOwo+PiArCURSTV9ERUJVR19LTVMo IiVzOmhyYXRpb1slZF12cmF0aW9bJWRdXG4iLAo+PiArCQlfX2Z1bmNfXywgc2MtPmhyYXRpbywg c2MtPnZyYXRpbyk7Cj4+ICsKPj4gKwljZmcgPSBmaW1jX3JlYWQoRVhZTk9TX0NJU0NDVFJMKTsK Pj4gKwljZmcgJj0gfihFWFlOT1NfQ0lTQ0NUUkxfU0NBTEVSQllQQVNTIHwKPj4gKwkJRVhZTk9T X0NJU0NDVFJMX1NDQUxFVVBfSCB8IEVYWU5PU19DSVNDQ1RSTF9TQ0FMRVVQX1YgfAo+PiArCQlF WFlOT1NfQ0lTQ0NUUkxfTUFJTl9WX1JBVElPX01BU0sgfAo+PiArCQlFWFlOT1NfQ0lTQ0NUUkxf TUFJTl9IX1JBVElPX01BU0sgfAo+PiArCQlFWFlOT1NfQ0lTQ0NUUkxfQ1NDUjJZX1dJREUgfAo+ PiArCQlFWFlOT1NfQ0lTQ0NUUkxfQ1NDWTJSX1dJREUpOwo+PiArCj4+ICsJaWYgKHNjLT5yYW5n ZSkKPj4gKwkJY2ZnIHw9IChFWFlOT1NfQ0lTQ0NUUkxfQ1NDUjJZX1dJREUgfAo+PiArCQkJRVhZ Tk9TX0NJU0NDVFJMX0NTQ1kyUl9XSURFKTsKPj4gKwlpZiAoc2MtPmJ5cGFzcykKPj4gKwkJY2Zn IHw9IEVYWU5PU19DSVNDQ1RSTF9TQ0FMRVJCWVBBU1M7Cj4+ICsJaWYgKHNjLT51cF9oKQo+PiAr CQljZmcgfD0gRVhZTk9TX0NJU0NDVFJMX1NDQUxFVVBfSDsKPj4gKwlpZiAoc2MtPnVwX3YpCj4+ ICsJCWNmZyB8PSBFWFlOT1NfQ0lTQ0NUUkxfU0NBTEVVUF9WOwo+PiArCj4+ICsJY2ZnIHw9IChF WFlOT1NfQ0lTQ0NUUkxfTUFJTkhPUlJBVElPKChzYy0+aHJhdGlvID4+IDYpKSB8Cj4+ICsJCUVY WU5PU19DSVNDQ1RSTF9NQUlOVkVSUkFUSU8oKHNjLT52cmF0aW8gPj4gNikpKTsKPj4gKwlmaW1j X3dyaXRlKGNmZywgRVhZTk9TX0NJU0NDVFJMKTsKPj4gKwo+PiArCWNmZ19leHQgPSBmaW1jX3Jl YWQoRVhZTk9TX0NJRVhURU4pOwo+PiArCWNmZ19leHQgJj0gfkVYWU5PU19DSUVYVEVOX01BSU5I T1JSQVRJT19FWFRfTUFTSzsKPj4gKwljZmdfZXh0ICY9IH5FWFlOT1NfQ0lFWFRFTl9NQUlOVkVS UkFUSU9fRVhUX01BU0s7Cj4+ICsJY2ZnX2V4dCB8PSAoRVhZTk9TX0NJRVhURU5fTUFJTkhPUlJB VElPX0VYVChzYy0+aHJhdGlvKSB8Cj4+ICsJCUVYWU5PU19DSUVYVEVOX01BSU5WRVJSQVRJT19F WFQoc2MtPnZyYXRpbykpOwo+PiArCWZpbWNfd3JpdGUoY2ZnX2V4dCwgRVhZTk9TX0NJRVhURU4p Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGZpbWNfZHN0X3NldF9zaXplKHN0cnVjdCBkZXZp Y2UgKmRldiwgaW50IHN3YXAsCj4+ICsJc3RydWN0IGRybV9leHlub3NfcG9zICpwb3MsIHN0cnVj dCBkcm1fZXh5bm9zX3N6ICpzeikKPj4gK3sKPj4gKwlzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHgg PSBnZXRfZmltY19jb250ZXh0KGRldik7Cj4+ICsJc3RydWN0IGRybV9leHlub3NfcG9zIGltZ19w b3MgPSAqcG9zOwo+PiArCXN0cnVjdCBkcm1fZXh5bm9zX3N6IGltZ19zeiA9ICpzejsKPj4gKwl1 MzIgY2ZnOwo+PiArCj4+ICsJRFJNX0RFQlVHX0tNUygiJXM6c3dhcFslZF1oc2l6ZVslZF12c2l6 ZVslZF1cbiIsCj4+ICsJCV9fZnVuY19fLCBzd2FwLCBzei0+aHNpemUsIHN6LT52c2l6ZSk7Cj4+ ICsKPj4gKwkvKiBvcmlnaW5hbCBzaXplICovCj4+ICsJY2ZnID0gKEVYWU5PU19PUkdPU0laRV9I T1JJWk9OVEFMKGltZ19zei5oc2l6ZSkgfAo+PiArCQlFWFlOT1NfT1JHT1NJWkVfVkVSVElDQUwo aW1nX3N6LnZzaXplKSk7Cj4+ICsKPj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX09SR09TSVpF KTsKPj4gKwo+PiArCURSTV9ERUJVR19LTVMoIiVzOnhbJWRdeVslZF13WyVkXWhbJWRdXG4iLAo+ PiArCQlfX2Z1bmNfXywgcG9zLT54LCBwb3MtPnksIHBvcy0+dywgcG9zLT5oKTsKPj4gKwo+PiAr CS8qIENTQyBJVFUgKi8KPj4gKwljZmcgPSBmaW1jX3JlYWQoRVhZTk9TX0NJR0NUUkwpOwo+PiAr CWNmZyAmPSB+RVhZTk9TX0NJR0NUUkxfQ1NDX01BU0s7Cj4+ICsKPj4gKwlpZiAoc3otPmhzaXpl ID49IEZJTUNfV0lEVEhfSVRVXzcwOSkKPj4gKwkJY2ZnIHw9IEVYWU5PU19DSUdDVFJMX0NTQ19J VFU3MDk7Cj4+ICsJZWxzZQo+PiArCQljZmcgfD0gRVhZTk9TX0NJR0NUUkxfQ1NDX0lUVTYwMTsK Pj4gKwo+PiArCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lHQ1RSTCk7Cj4+ICsKPj4gKwlpZiAo c3dhcCkgewo+PiArCQlpbWdfcG9zLncgPSBwb3MtPmg7Cj4+ICsJCWltZ19wb3MuaCA9IHBvcy0+ dzsKPj4gKwkJaW1nX3N6LmhzaXplID0gc3otPnZzaXplOwo+PiArCQlpbWdfc3oudnNpemUgPSBz ei0+aHNpemU7Cj4+ICsJfQo+PiArCj4+ICsJLyogdGFyZ2V0IGltYWdlIHNpemUgKi8KPj4gKwlj ZmcgPSBmaW1jX3JlYWQoRVhZTk9TX0NJVFJHRk1UKTsKPj4gKwljZmcgJj0gfihFWFlOT1NfQ0lU UkdGTVRfVEFSR0VUSF9NQVNLIHwKPj4gKwkJRVhZTk9TX0NJVFJHRk1UX1RBUkdFVFZfTUFTSyk7 Cj4+ICsJY2ZnIHw9IChFWFlOT1NfQ0lUUkdGTVRfVEFSR0VUSFNJWkUoaW1nX3Bvcy53KSB8Cj4+ ICsJCUVYWU5PU19DSVRSR0ZNVF9UQVJHRVRWU0laRShpbWdfcG9zLmgpKTsKPj4gKwlmaW1jX3dy aXRlKGNmZywgRVhZTk9TX0NJVFJHRk1UKTsKPj4gKwo+PiArCS8qIHRhcmdldCBhcmVhICovCj4+ ICsJY2ZnID0gRVhZTk9TX0NJVEFSRUFfVEFSR0VUX0FSRUEoaW1nX3Bvcy53ICogaW1nX3Bvcy5o KTsKPj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJVEFSRUEpOwo+PiArCj4+ICsJLyogVG9E bzogTW92ZSBTY2FsZXIgaW4gdGhpcyBsaW5lIGFuZCBZVVYgKi8KPj4gKwo+PiArCS8qIG9mZnNl dCBZKFJHQiksIENiLCBDciAqLwo+PiArCWNmZyA9IChFWFlOT1NfQ0lPWU9GRl9IT1JJWk9OVEFM KGltZ19wb3MueCkgfAo+PiArCQlFWFlOT1NfQ0lPWU9GRl9WRVJUSUNBTChpbWdfcG9zLnkpKTsK Pj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJT1lPRkYpOwo+PiArCWNmZyA9IChFWFlOT1Nf Q0lPQ0JPRkZfSE9SSVpPTlRBTChpbWdfcG9zLngpIHwKPj4gKwkJRVhZTk9TX0NJT0NCT0ZGX1ZF UlRJQ0FMKGltZ19wb3MueSkpOwo+PiArCWZpbWNfd3JpdGUoY2ZnLCBFWFlOT1NfQ0lPQ0JPRkYp Owo+PiArCWNmZyA9IChFWFlOT1NfQ0lPQ1JPRkZfSE9SSVpPTlRBTChpbWdfcG9zLngpIHwKPj4g KwkJRVhZTk9TX0NJT0NST0ZGX1ZFUlRJQ0FMKGltZ19wb3MueSkpOwo+PiArCWZpbWNfd3JpdGUo Y2ZnLCBFWFlOT1NfQ0lPQ1JPRkYpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgZmltY19kc3RfZ2V0X2J1Zl9zZXEoc3RydWN0IGZpbWNfY29udGV4dCAqY3R4 KQo+PiArewo+PiArCXUzMiBjZmcsIGksIGJ1Zl9udW0gPSAwOwo+PiArCXUzMiBtYXNrID0gMHgw MDAwMDAwMTsKPj4gKwo+PiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lGQ05UU0VRKTsKPj4g Kwo+PiArCWZvciAoaSA9IDA7IGkgPCBGSU1DX1JFR19TWjsgaSsrKQo+PiArCQlpZiAoY2ZnICYg KG1hc2sgPDwgaSkpCj4+ICsJCQlidWZfbnVtKys7Cj4+ICsKPj4gKwlEUk1fREVCVUdfS01TKCIl czpidWZfbnVtWyVkXVxuIiwgX19mdW5jX18sIGJ1Zl9udW0pOwo+PiArCj4+ICsJcmV0dXJuIGJ1 Zl9udW07Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZmltY19kc3Rfc2V0X2J1Zl9zZXEoc3Ry dWN0IGZpbWNfY29udGV4dCAqY3R4LCB1MzIgYnVmX2lkLAo+PiArCWVudW0gZHJtX2V4eW5vc19p cHBfYnVmX3R5cGUgYnVmX3R5cGUpCj4+ICt7Cj4+ICsJc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2 ICppcHBkcnYgPSAmY3R4LT5pcHBkcnY7Cj4+ICsJYm9vbCBlbmFibGU7Cj4+ICsJdTMyIGNmZzsK Pj4gKwl1MzIgbWFzayA9IDB4MDAwMDAwMDEgPDwgYnVmX2lkOwo+PiArCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7Cj4+ICsJaW50IHJldCA9IDA7Cj4+ICsKPj4gKwlEUk1fREVCVUdfS01TKCIlczpidWZf aWRbJWRdYnVmX3R5cGVbJWRdXG4iLCBfX2Z1bmNfXywKPj4gKwkJYnVmX2lkLCBidWZfdHlwZSk7 Cj4+ICsKPj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5sb2NrLCBmbGFncyk7Cj4+ICsKPj4g KwkvKiBtYXNrIHJlZ2lzdGVyIHNldCAqLwo+PiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lG Q05UU0VRKTsKPj4gKwo+PiArCXN3aXRjaCAoYnVmX3R5cGUpIHsKPj4gKwljYXNlIElQUF9CVUZf RU5RVUVVRToKPj4gKwkJZW5hYmxlID0gdHJ1ZTsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBJUFBf QlVGX0RFUVVFVUU6Cj4+ICsJCWVuYWJsZSA9IGZhbHNlOwo+PiArCQlicmVhazsKPj4gKwlkZWZh dWx0Ogo+PiArCQlkZXZfZXJyKGlwcGRydi0+ZGV2LCAiaW52YWxpZCBidWYgY3RybCBwYXJhbWV0 ZXIuXG4iKTsKPj4gKwkJcmV0ID0gIC1FSU5WQUw7Cj4+ICsJCWdvdG8gZXJyX3VubG9jazsKPj4g Kwl9Cj4+ICsKPj4gKwkvKiBzZXF1ZW5jZSBpZCAqLwo+PiArCWNmZyAmPSAofm1hc2spOwo+PiAr CWNmZyB8PSAoZW5hYmxlIDw8IGJ1Zl9pZCk7Cj4+ICsJZmltY193cml0ZShjZmcsIEVYWU5PU19D SUZDTlRTRVEpOwo+PiArCj4+ICsJLyogaW50ZXJydXB0IGVuYWJsZSAqLwo+PiArCWlmIChidWZf dHlwZSA9PSBJUFBfQlVGX0VOUVVFVUUgJiYKPj4gKwkgICAgZmltY19kc3RfZ2V0X2J1Zl9zZXEo Y3R4KSA+PSBGSU1DX0JVRl9TVEFSVCkKPj4gKwkJZmltY19oYW5kbGVfaXJxKGN0eCwgdHJ1ZSwg ZmFsc2UsIHRydWUpOwo+PiArCj4+ICsJLyogaW50ZXJydXB0IGRpc2FibGUgKi8KPj4gKwlpZiAo YnVmX3R5cGUgPT0gSVBQX0JVRl9ERVFVRVVFICYmCj4+ICsJICAgIGZpbWNfZHN0X2dldF9idWZf c2VxKGN0eCkgPD0gRklNQ19CVUZfU1RPUCkKPj4gKwkJZmltY19oYW5kbGVfaXJxKGN0eCwgZmFs c2UsIGZhbHNlLCB0cnVlKTsKPj4gKwo+PiArZXJyX3VubG9jazoKPj4gKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IGZpbWNfZHN0X3NldF9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwKPj4g KwkJCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9idWZfaW5mbyAqYnVmX2luZm8sIHUzMiBidWZfaWQs Cj4+ICsJCQllbnVtIGRybV9leHlub3NfaXBwX2J1Zl90eXBlIGJ1Zl90eXBlKQo+PiArewo+PiAr CXN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCA9IGdldF9maW1jX2NvbnRleHQoZGV2KTsKPj4gKwlz dHJ1Y3QgZXh5bm9zX2RybV9pcHBkcnYgKmlwcGRydiA9ICZjdHgtPmlwcGRydjsKPj4gKwlzdHJ1 Y3QgZHJtX2V4eW5vc19pcHBfY21kX25vZGUgKmNfbm9kZSA9IGlwcGRydi0+Y21kOwo+PiArCXN0 cnVjdCBkcm1fZXh5bm9zX2lwcF9wcm9wZXJ0eSAqcHJvcGVydHk7Cj4+ICsJc3RydWN0IGRybV9l eHlub3NfaXBwX2NvbmZpZyAqY29uZmlnOwo+PiArCj4+ICsJaWYgKCFjX25vZGUpIHsKPj4gKwkJ RFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGNfbm9kZS5cbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZB TDsKPj4gKwl9Cj4+ICsKPj4gKwlwcm9wZXJ0eSA9ICZjX25vZGUtPnByb3BlcnR5Owo+PiArCWlm ICghcHJvcGVydHkpIHsKPj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IHByb3BlcnR5Llxu Iik7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCURSTV9ERUJVR19LTVMo IiVzOnByb3BfaWRbJWRdYnVmX2lkWyVkXWJ1Zl90eXBlWyVkXVxuIiwgX19mdW5jX18sCj4+ICsJ CXByb3BlcnR5LT5wcm9wX2lkLCBidWZfaWQsIGJ1Zl90eXBlKTsKPj4gKwo+PiArCWlmIChidWZf aWQgPiBGSU1DX01BWF9EU1QpIHsKPj4gKwkJZGV2X2luZm8oaXBwZHJ2LT5kZXYsICJpbmF2bGlk IGJ1Zl9pZCAlZC5cbiIsIGJ1Zl9pZCk7Cj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCX0KPj4g Kwo+PiArCS8qIGFkZHJlc3MgcmVnaXN0ZXIgc2V0ICovCj4+ICsJc3dpdGNoIChidWZfdHlwZSkg ewo+PiArCWNhc2UgSVBQX0JVRl9FTlFVRVVFOgo+PiArCQljb25maWcgPSAmcHJvcGVydHktPmNv bmZpZ1tFWFlOT1NfRFJNX09QU19EU1RdOwo+PiArCj4+ICsJCWZpbWNfd3JpdGUoYnVmX2luZm8t PmJhc2VbRVhZTk9TX0RSTV9QTEFOQVJfWV0sCj4+ICsJCQlFWFlOT1NfQ0lPWVNBKGJ1Zl9pZCkp Owo+PiArCj4+ICsJCWlmIChjb25maWctPmZtdCA9PSBEUk1fRk9STUFUX1lWVTQyMCkgewo+PiAr CQkJZmltY193cml0ZShidWZfaW5mby0+YmFzZVtFWFlOT1NfRFJNX1BMQU5BUl9DUl0sCj4+ICsJ CQkJRVhZTk9TX0NJT0NCU0EoYnVmX2lkKSk7Cj4+ICsJCQlmaW1jX3dyaXRlKGJ1Zl9pbmZvLT5i YXNlW0VYWU5PU19EUk1fUExBTkFSX0NCXSwKPj4gKwkJCQlFWFlOT1NfQ0lPQ1JTQShidWZfaWQp KTsKPj4gKwkJfSBlbHNlIHsKPj4gKwkJCWZpbWNfd3JpdGUoYnVmX2luZm8tPmJhc2VbRVhZTk9T X0RSTV9QTEFOQVJfQ0JdLAo+PiArCQkJCUVYWU5PU19DSU9DQlNBKGJ1Zl9pZCkpOwo+PiArCQkJ ZmltY193cml0ZShidWZfaW5mby0+YmFzZVtFWFlOT1NfRFJNX1BMQU5BUl9DUl0sCj4+ICsJCQkJ RVhZTk9TX0NJT0NSU0EoYnVmX2lkKSk7Cj4+ICsJCX0KPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBJ UFBfQlVGX0RFUVVFVUU6Cj4+ICsJCWZpbWNfd3JpdGUoMHgwLCBFWFlOT1NfQ0lPWVNBKGJ1Zl9p ZCkpOwo+PiArCQlmaW1jX3dyaXRlKDB4MCwgRVhZTk9TX0NJT0NCU0EoYnVmX2lkKSk7Cj4+ICsJ CWZpbWNfd3JpdGUoMHgwLCBFWFlOT1NfQ0lPQ1JTQShidWZfaWQpKTsKPj4gKwkJYnJlYWs7Cj4+ ICsJZGVmYXVsdDoKPj4gKwkJLyogYnlwYXNzICovCj4+ICsJCWJyZWFrOwo+PiArCX0KPj4gKwo+ PiArCXJldHVybiBmaW1jX2RzdF9zZXRfYnVmX3NlcShjdHgsIGJ1Zl9pZCwgYnVmX3R5cGUpOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGV4eW5vc19kcm1faXBwX29wcyBmaW1jX2RzdF9v cHMgPSB7Cj4+ICsJLnNldF9mbXQgPSBmaW1jX2RzdF9zZXRfZm10LAo+PiArCS5zZXRfdHJhbnNm ID0gZmltY19kc3Rfc2V0X3RyYW5zZiwKPj4gKwkuc2V0X3NpemUgPSBmaW1jX2RzdF9zZXRfc2l6 ZSwKPj4gKwkuc2V0X2FkZHIgPSBmaW1jX2RzdF9zZXRfYWRkciwKPj4gK307Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgZmltY19wb3dlcl9vbihzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHgsIGJvb2wgZW5h YmxlKQo+PiArewo+PiArCXN0cnVjdCBleHlub3NfZHJtX2lwcGRydiAqaXBwZHJ2ID0gJmN0eC0+ aXBwZHJ2Owo+PiArCj4+ICsJRFJNX0RFQlVHX0tNUygiJXM6ZW5hYmxlWyVkXVxuIiwgX19mdW5j X18sIGVuYWJsZSk7Cj4+ICsKPj4gKwlpZiAoZW5hYmxlKSB7Cj4+ICsJCWlmIChjdHgtPnZlciA9 PSBGSU1DX0VYWU5PU180MjEwKSB7Cj4+ICsJCQljdHgtPnNjbGtfZmltY19jbGsgPSBjbGtfZ2V0 KGlwcGRydi0+ZGV2LCAic2Nsa19maW1jIik7Cj4+ICsJCQlpZiAoSVNfRVJSKGN0eC0+c2Nsa19m aW1jX2NsaykpIHsKPj4gKwkJCQlkZXZfZXJyKGlwcGRydi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBz cmMgZmltYyBjbG9jay5cbiIpOwo+PiArCQkJCXJldHVybiAtRUlOVkFMOwo+PiArCQkJfQo+PiAr CQkJY2xrX2VuYWJsZShjdHgtPnNjbGtfZmltY19jbGspOwo+PiArCQl9IGVsc2UKPj4gKwkJCWNs a19lbmFibGUoY3R4LT5zY2xrX2ZpbWNfY2xrKTsKPj4gKwo+PiArCQljbGtfZW5hYmxlKGN0eC0+ ZmltY19jbGspOwo+PiArCQljbGtfZW5hYmxlKGN0eC0+d2JfY2xrKTsKPj4gKwkJLyogVG9EbyA6 IHdiX2JfY2xrICovCj4+ICsJCWN0eC0+c3VzcGVuZGVkID0gZmFsc2U7Cj4+ICsJfSBlbHNlIHsK Pj4gKwkJY2xrX2Rpc2FibGUoY3R4LT5zY2xrX2ZpbWNfY2xrKTsKPj4gKwkJY2xrX2Rpc2FibGUo Y3R4LT5maW1jX2Nsayk7Cj4+ICsJCWNsa19kaXNhYmxlKGN0eC0+d2JfY2xrKTsKPj4gKwkJLyog VG9EbyA6IHdiX2JfY2xrICovCj4+ICsJCWN0eC0+c3VzcGVuZGVkID0gdHJ1ZTsKPj4gKwl9Cj4+ ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlycXJldHVybl90IGZpbWNf aXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQo+PiArewo+PiArCXN0cnVjdCBmaW1j X2NvbnRleHQgKmN0eCA9IGRldl9pZDsKPj4gKwlzdHJ1Y3QgZXh5bm9zX2RybV9pcHBkcnYgKmlw cGRydiA9ICZjdHgtPmlwcGRydjsKPj4gKwlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfY21kX25vZGUg KmNfbm9kZSA9IGlwcGRydi0+Y21kOwo+PiArCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9ldmVudF93 b3JrICpldmVudF93b3JrID0KPj4gKwkJY19ub2RlLT5ldmVudF93b3JrOwo+PiArCWludCBidWZf aWQ7Cj4+ICsKPj4gKwlEUk1fREVCVUdfS01TKCIlczpmaW1jIGlkWyVkXVxuIiwgX19mdW5jX18s IGN0eC0+aWQpOwo+PiArCj4+ICsJZmltY19jbGVhcl9pcnEoY3R4KTsKPj4gKwlpZiAoZmltY19j aGVja19vdmYoY3R4KSkKPj4gKwkJcmV0dXJuIElSUV9OT05FOwo+PiArCj4+ICsJaWYgKCFmaW1j X2NoZWNrX2ZyYW1lX2VuZChjdHgpKQo+PiArCQlyZXR1cm4gSVJRX05PTkU7Cj4+ICsKPj4gKwli dWZfaWQgPSBmaW1jX2dldF9idWZfaWQoY3R4KTsKPj4gKwlpZiAoYnVmX2lkIDwgMCkKPj4gKwkJ cmV0dXJuIElSUV9IQU5ETEVEOwo+PiArCj4+ICsJRFJNX0RFQlVHX0tNUygiJXM6YnVmX2lkWyVk XVxuIiwgX19mdW5jX18sIGJ1Zl9pZCk7Cj4+ICsKPj4gKwlpZiAoZmltY19kc3Rfc2V0X2J1Zl9z ZXEoY3R4LCBidWZfaWQsIElQUF9CVUZfREVRVUVVRSkgPCAwKSB7Cj4+ICsJCURSTV9FUlJPUigi ZmFpbGVkIHRvIGRlcXVldWUuXG4iKTsKPj4gKwkJcmV0dXJuIElSUV9IQU5ETEVEOwo+PiArCX0K Pj4gKwo+PiArCWV2ZW50X3dvcmstPmlwcGRydiA9IGlwcGRydjsKPj4gKwlldmVudF93b3JrLT5i dWZfaWRbRVhZTk9TX0RSTV9PUFNfRFNUXSA9IGJ1Zl9pZDsKPj4gKwlxdWV1ZV93b3JrKGlwcGRy di0+ZXZlbnRfd29ya3EsIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKilldmVudF93b3JrKTsKPj4gKwo+ PiArCXJldHVybiBJUlFfSEFORExFRDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBmaW1jX2lu aXRfcHJvcF9saXN0KHN0cnVjdCBkcm1fZXh5bm9zX2lwcF9wcm9wX2xpc3QgKipwcm9wX2xpc3Qp Cj4+ICt7Cj4+ICsJRFJNX0RFQlVHX0tNUygiJXNcbiIsIF9fZnVuY19fKTsKPj4gKwo+PiArCWlm ICghcHJvcF9saXN0KSB7Cj4+ICsJCURSTV9FUlJPUigiZW1wdHkgcHJvcF9saXN0XG4iKTsKPj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJKnByb3BfbGlzdCA9IGt6YWxsb2Mo c2l6ZW9mKCoqcHJvcF9saXN0KSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCEqcHJvcF9saXN0KSB7 Cj4+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jIHByb3BlcnR5IGxpc3QuXG4iKTsKPj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4+ICsJfQo+PiArCS8qVG9EbyA6IGZpeCBzdXBwb3J0ZWQgZnVu Y3Rpb24gbGlzdCovCj4+ICsJKCpwcm9wX2xpc3QpLT52ZXJzaW9uID0gMTsKPj4gKwkoKnByb3Bf bGlzdCktPndyaXRlYmFjayA9IDE7Cj4+ICsJKCpwcm9wX2xpc3QpLT5yZWZyZXNoX21pbiA9IDEy Owo+PiArCSgqcHJvcF9saXN0KS0+cmVmcmVzaF9tYXggPSA2MDsKPj4gKwkoKnByb3BfbGlzdCkt PmZsaXAgPSAoMSA8PCBFWFlOT1NfRFJNX0ZMSVBfTk9ORSkgfAo+PiArCQkJCSgxIDw8IEVYWU5P U19EUk1fRkxJUF9WRVJUSUNBTCkgfAo+PiArCQkJCSgxIDw8IEVYWU5PU19EUk1fRkxJUF9IT1JJ Wk9OVEFMKTsKPj4gKwkoKnByb3BfbGlzdCktPmRlZ3JlZSA9ICgxIDw8IEVYWU5PU19EUk1fREVH UkVFXzApIHwKPj4gKwkJCQkoMSA8PCBFWFlOT1NfRFJNX0RFR1JFRV85MCkgfAo+PiArCQkJCSgx IDw8IEVYWU5PU19EUk1fREVHUkVFXzE4MCkgfAo+PiArCQkJCSgxIDw8IEVYWU5PU19EUk1fREVH UkVFXzI3MCk7Cj4+ICsJKCpwcm9wX2xpc3QpLT5jc2MgPSAxOwo+PiArCSgqcHJvcF9saXN0KS0+ Y3JvcCA9IDE7Cj4+ICsJKCpwcm9wX2xpc3QpLT5jcm9wX21heC5oc2l6ZSA9IDgxOTI7Cj4+ICsJ KCpwcm9wX2xpc3QpLT5jcm9wX21heC52c2l6ZSA9IDgxOTI7Cj4+ICsJKCpwcm9wX2xpc3QpLT5j cm9wX21pbi5oc2l6ZSA9IDMyOwo+PiArCSgqcHJvcF9saXN0KS0+Y3JvcF9taW4udnNpemUgPSAz MjsKPj4gKwkoKnByb3BfbGlzdCktPnNjYWxlID0gMTsKPj4gKwkoKnByb3BfbGlzdCktPnNjYWxl X21heC5oc2l6ZSA9IDQyMjQ7Cj4+ICsJKCpwcm9wX2xpc3QpLT5zY2FsZV9tYXgudnNpemUgPSA0 MjI0Owo+PiArCSgqcHJvcF9saXN0KS0+c2NhbGVfbWluLmhzaXplID0gMzI7Cj4+ICsJKCpwcm9w X2xpc3QpLT5zY2FsZV9taW4udnNpemUgPSAzMjsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IGZpbWNfaXBwZHJ2X2NoZWNrX3Byb3BlcnR5KHN0cnVjdCBkZXZp Y2UgKmRldiwKPj4gKwkJCQlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfcHJvcGVydHkgKnByb3BlcnR5 KQo+PiArewo+PiArCXN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCA9IGdldF9maW1jX2NvbnRleHQo ZGV2KTsKPj4gKwlzdHJ1Y3QgZXh5bm9zX2RybV9pcHBkcnYgKmlwcGRydiA9ICZjdHgtPmlwcGRy djsKPj4gKwlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfcHJvcF9saXN0ICpwcCA9IGlwcGRydi0+cHJv cF9saXN0Owo+PiArCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9jb25maWcgKmNvbmZpZzsKPj4gKwlz dHJ1Y3QgZHJtX2V4eW5vc19wb3MgKnBvczsKPj4gKwlzdHJ1Y3QgZHJtX2V4eW5vc19zeiAqc3o7 Cj4+ICsJYm9vbCBzd2FwOwo+PiArCWludCBpOwo+PiArCj4+ICsJRFJNX0RFQlVHX0tNUygiJXNc biIsIF9fZnVuY19fKTsKPj4gKwo+PiArCWZvcl9lYWNoX2lwcF9vcHMoaSkgewo+PiArCQlpZiAo KGkgPT0gRVhZTk9TX0RSTV9PUFNfU1JDKSAmJgo+PiArCQkJKHByb3BlcnR5LT5jbWQgPT0gSVBQ X0NNRF9XQikpCj4+ICsJCQljb250aW51ZTsKPj4gKwo+PiArCQljb25maWcgPSAmcHJvcGVydHkt PmNvbmZpZ1tpXTsKPj4gKwkJcG9zID0gJmNvbmZpZy0+cG9zOwo+PiArCQlzeiA9ICZjb25maWct PnN6Owo+PiArCj4+ICsJCS8qIGNoZWNrIGZvciBmbGlwICovCj4+ICsJCXN3aXRjaCAoY29uZmln LT5mbGlwKSB7Cj4+ICsJCWNhc2UgRVhZTk9TX0RSTV9GTElQX05PTkU6Cj4+ICsJCWNhc2UgRVhZ Tk9TX0RSTV9GTElQX1ZFUlRJQ0FMOgo+PiArCQljYXNlIEVYWU5PU19EUk1fRkxJUF9IT1JJWk9O VEFMOgo+PiArCQkJLyogTm8gcHJvYmxlbSAqLwo+PiArCQkJYnJlYWs7Cj4+ICsJCWRlZmF1bHQ6 Cj4+ICsJCQlEUk1fRVJST1IoImludmFsaWQgZmxpcC5cbiIpOwo+PiArCQkJZ290byBlcnJfcHJv cGVydHk7Cj4+ICsJCX0KPj4gKwo+PiArCQkvKiBjaGVjayBmb3IgZGVncmVlICovCj4+ICsJCXN3 aXRjaCAoY29uZmlnLT5kZWdyZWUpIHsKPj4gKwkJY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV85MDoK Pj4gKwkJY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV8yNzA6Cj4+ICsJCQlzd2FwID0gdHJ1ZTsKPj4g KwkJCWJyZWFrOwo+PiArCQljYXNlIEVYWU5PU19EUk1fREVHUkVFXzA6Cj4+ICsJCWNhc2UgRVhZ Tk9TX0RSTV9ERUdSRUVfMTgwOgo+PiArCQkJc3dhcCA9IGZhbHNlOwo+PiArCQkJYnJlYWs7Cj4+ ICsJCWRlZmF1bHQ6Cj4+ICsJCQlEUk1fRVJST1IoImludmFsaWQgZGVncmVlLlxuIik7Cj4+ICsJ CQlnb3RvIGVycl9wcm9wZXJ0eTsKPj4gKwkJfQo+PiArCj4+ICsJCS8qIGNoZWNrIGZvciBidWZm ZXIgYm91bmQgKi8KPj4gKwkJaWYgKChwb3MtPnggKyBwb3MtPncgPiBzei0+aHNpemUpIHx8Cj4+ ICsJCQkocG9zLT55ICsgcG9zLT5oID4gc3otPnZzaXplKSkgewo+PiArCQkJRFJNX0VSUk9SKCJv dXQgb2YgYnVmIGJvdW5kLlxuIik7Cj4+ICsJCQlnb3RvIGVycl9wcm9wZXJ0eTsKPj4gKwkJfQo+ PiArCj4+ICsJCS8qIGNoZWNrIGZvciBjcm9wICovCj4+ICsJCWlmICgoaSA9PSBFWFlOT1NfRFJN X09QU19TUkMpICYmIChwcC0+Y3JvcCkpIHsKPj4gKwkJCWlmIChzd2FwKSB7Cj4+ICsJCQkJaWYg KChwb3MtPmggPCBwcC0+Y3JvcF9taW4uaHNpemUpIHx8Cj4+ICsJCQkJCShzei0+dnNpemUgPiBw cC0+Y3JvcF9tYXguaHNpemUpIHx8Cj4+ICsJCQkJCShwb3MtPncgPCBwcC0+Y3JvcF9taW4udnNp emUpIHx8Cj4+ICsJCQkJCShzei0+aHNpemUgPiBwcC0+Y3JvcF9tYXgudnNpemUpKSB7Cj4+ICsJ CQkJCURSTV9FUlJPUigib3V0IG9mIGNyb3Agc2l6ZS5cbiIpOwo+PiArCQkJCQlnb3RvIGVycl9w cm9wZXJ0eTsKPj4gKwkJCQl9Cj4+ICsJCQl9IGVsc2Ugewo+PiArCQkJCWlmICgocG9zLT53IDwg cHAtPmNyb3BfbWluLmhzaXplKSB8fAo+PiArCQkJCQkoc3otPmhzaXplID4gcHAtPmNyb3BfbWF4 LmhzaXplKSB8fAo+PiArCQkJCQkocG9zLT5oIDwgcHAtPmNyb3BfbWluLnZzaXplKSB8fAo+PiAr CQkJCQkoc3otPnZzaXplID4gcHAtPmNyb3BfbWF4LnZzaXplKSkgewo+PiArCQkJCQlEUk1fRVJS T1IoIm91dCBvZiBjcm9wIHNpemUuXG4iKTsKPj4gKwkJCQkJZ290byBlcnJfcHJvcGVydHk7Cj4+ ICsJCQkJfQo+PiArCQkJfQo+PiArCQl9Cj4+ICsKPj4gKwkJLyogY2hlY2sgZm9yIHNjYWxlICov Cj4+ICsJCWlmICgoaSA9PSBFWFlOT1NfRFJNX09QU19EU1QpICYmIChwcC0+c2NhbGUpKSB7Cj4+ ICsJCQlpZiAoc3dhcCkgewo+PiArCQkJCWlmICgocG9zLT5oIDwgcHAtPnNjYWxlX21pbi5oc2l6 ZSkgfHwKPj4gKwkJCQkJKHN6LT52c2l6ZSA+IHBwLT5zY2FsZV9tYXguaHNpemUpIHx8Cj4+ICsJ CQkJCShwb3MtPncgPCBwcC0+c2NhbGVfbWluLnZzaXplKSB8fAo+PiArCQkJCQkoc3otPmhzaXpl ID4gcHAtPnNjYWxlX21heC52c2l6ZSkpIHsKPj4gKwkJCQkJRFJNX0VSUk9SKCJvdXQgb2Ygc2Nh bGUgc2l6ZS5cbiIpOwo+PiArCQkJCQlnb3RvIGVycl9wcm9wZXJ0eTsKPj4gKwkJCQl9Cj4+ICsJ CQl9IGVsc2Ugewo+PiArCQkJCWlmICgocG9zLT53IDwgcHAtPnNjYWxlX21pbi5oc2l6ZSkgfHwK Pj4gKwkJCQkJKHN6LT5oc2l6ZSA+IHBwLT5zY2FsZV9tYXguaHNpemUpIHx8Cj4+ICsJCQkJCShw b3MtPmggPCBwcC0+c2NhbGVfbWluLnZzaXplKSB8fAo+PiArCQkJCQkoc3otPnZzaXplID4gcHAt PnNjYWxlX21heC52c2l6ZSkpIHsKPj4gKwkJCQkJRFJNX0VSUk9SKCJvdXQgb2Ygc2NhbGUgc2l6 ZS5cbiIpOwo+PiArCQkJCQlnb3RvIGVycl9wcm9wZXJ0eTsKPj4gKwkJCQl9Cj4+ICsJCQl9Cj4+ ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gKwo+PiArZXJyX3Byb3BlcnR5Ogo+ PiArCWZvcl9lYWNoX2lwcF9vcHMoaSkgewo+PiArCQlpZiAoKGkgPT0gRVhZTk9TX0RSTV9PUFNf U1JDKSAmJgo+PiArCQkJKHByb3BlcnR5LT5jbWQgPT0gSVBQX0NNRF9XQikpCj4+ICsJCQljb250 aW51ZTsKPj4gKwo+PiArCQljb25maWcgPSAmcHJvcGVydHktPmNvbmZpZ1tpXTsKPj4gKwkJcG9z ID0gJmNvbmZpZy0+cG9zOwo+PiArCQlzeiA9ICZjb25maWctPnN6Owo+PiArCj4+ICsJCURSTV9F UlJPUigiWyVzXWZbJWRdclslZF1wb3NbJWQgJWQgJWQgJWRdc3pbJWQgJWRdXG4iLAo+PiArCQkJ aSA/ICJkc3QiIDogInNyYyIsIGNvbmZpZy0+ZmxpcCwgY29uZmlnLT5kZWdyZWUsCj4+ICsJCQlw b3MtPngsIHBvcy0+eSwgcG9zLT53LCBwb3MtPmgsCj4+ICsJCQlzei0+aHNpemUsIHN6LT52c2l6 ZSk7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIC1FSU5WQUw7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBpbnQgZmltY19pcHBkcnZfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2KQo+PiArewo+PiArCXN0 cnVjdCBmaW1jX2NvbnRleHQgKmN0eCA9IGdldF9maW1jX2NvbnRleHQoZGV2KTsKPj4gKwo+PiAr CURSTV9ERUJVR19LTVMoIiVzXG4iLCBfX2Z1bmNfXyk7Cj4+ICsKPj4gKwkvKiByZXNldCBoL3cg YmxvY2sgKi8KPj4gKwlmaW1jX3N3X3Jlc2V0KGN0eCwgZmFsc2UpOwo+PiArCj4+ICsJLyogcmVz ZXQgc2NhbGVyIGNhcGFiaWxpdHkgKi8KPj4gKwltZW1zZXQoJmN0eC0+c2MsIDB4MCwgc2l6ZW9m KGN0eC0+c2MpKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGZpbWNfY2hlY2tfcHJlcGFyZShzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHgpCj4+ICt7Cj4+ICsJ LyogVG9EbzogY2hlY2sgcHJlcGFyZSB1c2luZyByZWFkIHJlZ2lzdGVyICovCj4+ICsJRFJNX0RF QlVHX0tNUygiJXNcbiIsIF9fZnVuY19fKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IGZpbWNfaXBwZHJ2X3N0YXJ0KHN0cnVjdCBkZXZpY2UgKmRldiwgZW51 bSBkcm1fZXh5bm9zX2lwcF9jbWQgY21kKQo+PiArewo+PiArCXN0cnVjdCBmaW1jX2NvbnRleHQg KmN0eCA9IGdldF9maW1jX2NvbnRleHQoZGV2KTsKPj4gKwlzdHJ1Y3QgZXh5bm9zX2RybV9pcHBk cnYgKmlwcGRydiA9ICZjdHgtPmlwcGRydjsKPj4gKwlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfY21k X25vZGUgKmNfbm9kZSA9IGlwcGRydi0+Y21kOwo+PiArCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9w cm9wZXJ0eSAqcHJvcGVydHk7Cj4+ICsJc3RydWN0IGRybV9leHlub3NfaXBwX2NvbmZpZyAqY29u ZmlnOwo+PiArCXN0cnVjdCBkcm1fZXh5bm9zX3BvcwlpbWdfcG9zW0VYWU5PU19EUk1fT1BTX01B WF07Cj4+ICsJc3RydWN0IGRybV9leHlub3NfaXBwX3NldF93YiBzZXRfd2I7Cj4+ICsJaW50IHJl dCwgaTsKPj4gKwl1MzIgY2ZnMCwgY2ZnMTsKPj4gKwo+PiArCURSTV9ERUJVR19LTVMoIiVzOmNt ZFslZF1cbiIsIF9fZnVuY19fLCBjbWQpOwo+PiArCj4+ICsJaWYgKCFjX25vZGUpIHsKPj4gKwkJ RFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGNfbm9kZS5cbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZB TDsKPj4gKwl9Cj4+ICsKPj4gKwlwcm9wZXJ0eSA9ICZjX25vZGUtPnByb3BlcnR5Owo+PiArCWlm ICghcHJvcGVydHkpIHsKPj4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IHByb3BlcnR5Llxu Iik7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCXJldCA9IGZpbWNfY2hl Y2tfcHJlcGFyZShjdHgpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gY2hlY2sgcHJlcGFyZS5cbiIpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+ PiArCWZpbWNfaGFuZGxlX2lycShjdHgsIHRydWUsIGZhbHNlLCB0cnVlKTsKPj4gKwo+PiArCS8q IFRvRG86IHdpbmRvdyBzaXplLCBwcmVzY2FsZXIgY29uZmlnICovCj4+ICsJZm9yX2VhY2hfaXBw X29wcyhpKSB7Cj4+ICsJCWNvbmZpZyA9ICZwcm9wZXJ0eS0+Y29uZmlnW2ldOwo+PiArCQlpbWdf cG9zW2ldID0gY29uZmlnLT5wb3M7Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0gZmltY19zZXRfcHJl c2NhbGVyKGN0eCwgJmN0eC0+c2MsCj4+ICsJCSZpbWdfcG9zW0VYWU5PU19EUk1fT1BTX1NSQ10s Cj4+ICsJCSZpbWdfcG9zW0VYWU5PU19EUk1fT1BTX0RTVF0pOwo+PiArCWlmIChyZXQpIHsKPj4g KwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gc2V0IHByZWNhbHNlci5cbiIpOwo+PiArCQlyZXR1 cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCS8qIElmIHNldCB0dXJlLCB3ZSBjYW4gc2F2ZSBqcGVn IGFib3V0IHNjcmVlbiAqLwo+PiArCWZpbWNfaGFuZGxlX2pwZWcoY3R4LCBmYWxzZSk7Cj4+ICsJ ZmltY19zZXRfc2NhbGVyKGN0eCwgJmN0eC0+c2MpOwo+PiArCWZpbWNfc2V0X3BvbGFyaXR5KGN0 eCwgJmN0eC0+cG9sKTsKPj4gKwo+PiArCXN3aXRjaCAoY21kKSB7Cj4+ICsJY2FzZSBJUFBfQ01E X00yTToKPj4gKwkJZmltY19zZXRfdHlwZV9jdHJsKGN0eCwgRklNQ19XQl9OT05FKTsKPj4gKwkJ ZmltY19oYW5kbGVfbGFzdGVuZChjdHgsIGZhbHNlKTsKPj4gKwo+PiArCQkvKiBzZXR1cCBkbWEg Ki8KPj4gKwkJY2ZnMCA9IGZpbWNfcmVhZChFWFlOT1NfTVNDVFJMKTsKPj4gKwkJY2ZnMCAmPSB+ RVhZTk9TX01TQ1RSTF9JTlBVVF9NQVNLOwo+PiArCQljZmcwIHw9IEVYWU5PU19NU0NUUkxfSU5Q VVRfTUVNT1JZOwo+PiArCQlmaW1jX3dyaXRlKGNmZzAsIEVYWU5PU19NU0NUUkwpOwo+PiArCQli cmVhazsKPj4gKwljYXNlIElQUF9DTURfV0I6Cj4+ICsJCWZpbWNfc2V0X3R5cGVfY3RybChjdHgs IEZJTUNfV0JfQSk7Cj4+ICsJCWZpbWNfaGFuZGxlX2xhc3RlbmQoY3R4LCB0cnVlKTsKPj4gKwo+ PiArCQkvKiBzZXR1cCBGSU1EICovCj4+ICsJCWZpbWNfc2V0X2NhbWJsa19maW1kMF93YihjdHgp Owo+PiArCj4+ICsJCS8qIFRvRG86IG5lZWQgdG8gcmVwbGFjZSB0aGUgcHJvcGVydHkgc3RydWN0 dXJlLiAqLwo+PiArCQlzZXRfd2IuZW5hYmxlID0gMTsKPj4gKwkJc2V0X3diLnJlZnJlc2ggPSBw cm9wZXJ0eS0+cmVzZXJ2ZWQ7Cj4+ICsJCWV4eW5vc19kcm1faXBwbmJfc2VuZF9ldmVudChJUFBf U0VUX1dSSVRFQkFDSywgKHZvaWQgKikmc2V0X3diKTsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBJ UFBfQ01EX09VVFBVVDoKPj4gKwlkZWZhdWx0Ogo+PiArCQlyZXQgPSAtRUlOVkFMOwo+PiArCQlk ZXZfZXJyKGRldiwgImludmFsaWQgb3BlcmF0aW9ucy5cbiIpOwo+PiArCQlyZXR1cm4gcmV0Owo+ PiArCX0KPj4gKwo+PiArCS8qIFJlc2V0IHN0YXR1cyAqLwo+PiArCWZpbWNfd3JpdGUoMHgwLCBF WFlOT1NfQ0lTVEFUVVMpOwo+PiArCj4+ICsJY2ZnMCA9IGZpbWNfcmVhZChFWFlOT1NfQ0lJTUdD UFQpOwo+PiArCWNmZzAgJj0gfkVYWU5PU19DSUlNR0NQVF9JTUdDUFRFTl9TQzsKPj4gKwljZmcw IHw9IEVYWU5PU19DSUlNR0NQVF9JTUdDUFRFTl9TQzsKPj4gKwo+PiArCS8qIFNjYWxlciAqLwo+ PiArCWNmZzEgPSBmaW1jX3JlYWQoRVhZTk9TX0NJU0NDVFJMKTsKPj4gKwljZmcxICY9IH5FWFlO T1NfQ0lTQ0NUUkxfU0NBTl9NQVNLOwo+PiArCWNmZzEgfD0gKEVYWU5PU19DSVNDQ1RSTF9QUk9H UkVTU0lWRSB8Cj4+ICsJCUVYWU5PU19DSVNDQ1RSTF9TQ0FMRVJTVEFSVCk7Cj4+ICsKPj4gKwlm aW1jX3dyaXRlKGNmZzEsIEVYWU5PU19DSVNDQ1RSTCk7Cj4+ICsKPj4gKwkvKiBFbmFibGUgaW1h Z2UgY2FwdHVyZSovCj4+ICsJY2ZnMCB8PSBFWFlOT1NfQ0lJTUdDUFRfSU1HQ1BURU47Cj4+ICsJ ZmltY193cml0ZShjZmcwLCBFWFlOT1NfQ0lJTUdDUFQpOwo+PiArCj4+ICsJLyogRGlzYWJsZSBm cmFtZSBlbmQgaXJxICovCj4+ICsJY2ZnMCA9IGZpbWNfcmVhZChFWFlOT1NfQ0lHQ1RSTCk7Cj4+ ICsJY2ZnMCAmPSB+RVhZTk9TX0NJR0NUUkxfSVJRX0VORF9ESVNBQkxFOwo+PiArCWZpbWNfd3Jp dGUoY2ZnMCwgRVhZTk9TX0NJR0NUUkwpOwo+PiArCj4+ICsJY2ZnMCA9IGZpbWNfcmVhZChFWFlO T1NfQ0lPQ1RSTCk7Cj4+ICsJY2ZnMCAmPSB+RVhZTk9TX0NJT0NUUkxfV0VBVkVfTUFTSzsKPj4g KwlmaW1jX3dyaXRlKGNmZzAsIEVYWU5PU19DSU9DVFJMKTsKPj4gKwo+PiArCS8qIFRvRG86IG0y bSBzdGFydCBlcnJhdGEgLSByZWZlciBmaW1kICovCj4+ICsJaWYgKGNtZCA9PSBJUFBfQ01EX00y TSkgewo+PiArCQljZmcwID0gZmltY19yZWFkKEVYWU5PU19NU0NUUkwpOwo+PiArCQljZmcwIHw9 IEVYWU5PU19NU0NUUkxfRU5WSUQ7Cj4+ICsJCWZpbWNfd3JpdGUoY2ZnMCwgRVhZTk9TX01TQ1RS TCk7Cj4+ICsKPj4gKwkJY2ZnMCA9IGZpbWNfcmVhZChFWFlOT1NfTVNDVFJMKTsKPj4gKwkJY2Zn MCB8PSBFWFlOT1NfTVNDVFJMX0VOVklEOwo+PiArCQlmaW1jX3dyaXRlKGNmZzAsIEVYWU5PU19N U0NUUkwpOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg dm9pZCBmaW1jX2lwcGRydl9zdG9wKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBkcm1fZXh5bm9z X2lwcF9jbWQgY21kKQo+PiArewo+PiArCXN0cnVjdCBmaW1jX2NvbnRleHQgKmN0eCA9IGdldF9m aW1jX2NvbnRleHQoZGV2KTsKPj4gKwlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfc2V0X3diIHNldF93 YiA9IHswLCAwfTsKPj4gKwl1MzIgY2ZnOwo+PiArCj4+ICsJRFJNX0RFQlVHX0tNUygiJXM6Y21k WyVkXVxuIiwgX19mdW5jX18sIGNtZCk7Cj4+ICsKPj4gKwlzd2l0Y2ggKGNtZCkgewo+PiArCWNh c2UgSVBQX0NNRF9NMk06Cj4+ICsJCS8qIFNvdXJjZSBjbGVhciAqLwo+PiArCQljZmcgPSBmaW1j X3JlYWQoRVhZTk9TX01TQ1RSTCk7Cj4+ICsJCWNmZyAmPSB+RVhZTk9TX01TQ1RSTF9JTlBVVF9N QVNLOwo+PiArCQljZmcgJj0gfkVYWU5PU19NU0NUUkxfRU5WSUQ7Cj4+ICsJCWZpbWNfd3JpdGUo Y2ZnLCBFWFlOT1NfTVNDVFJMKTsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBJUFBfQ01EX1dCOgo+ PiArCQlleHlub3NfZHJtX2lwcG5iX3NlbmRfZXZlbnQoSVBQX1NFVF9XUklURUJBQ0ssICh2b2lk ICopJnNldF93Yik7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgSVBQX0NNRF9PVVRQVVQ6Cj4+ICsJ ZGVmYXVsdDoKPj4gKwkJZGV2X2VycihkZXYsICJpbnZhbGlkIG9wZXJhdGlvbnMuXG4iKTsKPj4g KwkJYnJlYWs7Cj4+ICsJfQo+PiArCj4+ICsJZmltY19oYW5kbGVfaXJxKGN0eCwgZmFsc2UsIGZh bHNlLCB0cnVlKTsKPj4gKwo+PiArCS8qIHJlc2V0IHNlcXVlbmNlICovCj4+ICsJZmltY193cml0 ZSgweDAsIEVYWU5PU19DSUZDTlRTRVEpOwo+PiArCj4+ICsJLyogU2NhbGVyIGRpc2FibGUgKi8K Pj4gKwljZmcgPSBmaW1jX3JlYWQoRVhZTk9TX0NJU0NDVFJMKTsKPj4gKwljZmcgJj0gfkVYWU5P U19DSVNDQ1RSTF9TQ0FMRVJTVEFSVDsKPj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJU0ND VFJMKTsKPj4gKwo+PiArCS8qIERpc2FibGUgaW1hZ2UgY2FwdHVyZSAqLwo+PiArCWNmZyA9IGZp bWNfcmVhZChFWFlOT1NfQ0lJTUdDUFQpOwo+PiArCWNmZyAmPSB+KEVYWU5PU19DSUlNR0NQVF9J TUdDUFRFTl9TQyB8IEVYWU5PU19DSUlNR0NQVF9JTUdDUFRFTik7Cj4+ICsJZmltY193cml0ZShj ZmcsIEVYWU5PU19DSUlNR0NQVCk7Cj4+ICsKPj4gKwkvKiBFbmFibGUgZnJhbWUgZW5kIGlycSAq Lwo+PiArCWNmZyA9IGZpbWNfcmVhZChFWFlOT1NfQ0lHQ1RSTCk7Cj4+ICsJY2ZnIHw9IEVYWU5P U19DSUdDVFJMX0lSUV9FTkRfRElTQUJMRTsKPj4gKwlmaW1jX3dyaXRlKGNmZywgRVhZTk9TX0NJ R0NUUkwpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGZpbWNfY2FwYWJpbGl0eSAqZmlt Y19nZXRfY2FwYWJpbGl0eSgKPj4gKwllbnVtIGV4eW5vc19kcm1fZmltY192ZXIgdmVyKQo+PiAr ewo+PiArCXN0cnVjdCBmaW1jX2NhcGFiaWxpdHkgKmNhcGE7Cj4+ICsKPj4gKwlEUk1fREVCVUdf S01TKCIlczp2ZXJbMHgleF1cbiIsIF9fZnVuY19fLCB2ZXIpOwo+PiArCj4+ICsJLyogVG9Ebzog dmVyc2lvbiBjaGVjayAqLwo+PiArCXN3aXRjaCAodmVyKSB7Cj4+ICsJY2FzZSBGSU1DX0VYWU5P U180NDEyOgo+PiArCWNhc2UgRklNQ19FWFlOT1NfNDQxMl9SMjoKPj4gKwlkZWZhdWx0Ogo+PiAr CQljYXBhID0gZmltYzUxX2NhcGE7Cj4+ICsJCWJyZWFrOwo+PiArCX0KPj4gKwo+PiArCXJldHVy biBjYXBhOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGZpbWNfZ2V0X2Nsa19yYXRlKGVudW0g ZXh5bm9zX2RybV9maW1jX3ZlciB2ZXIpCj4+ICt7Cj4+ICsJaW50IGNsa19yYXRlOwo+PiArCj4+ ICsJRFJNX0RFQlVHX0tNUygiJXM6dmVyWzB4JXhdXG4iLCBfX2Z1bmNfXywgdmVyKTsKPj4gKwo+ PiArCXN3aXRjaCAodmVyKSB7Cj4+ICsJY2FzZSBGSU1DX0VYWU5PU180NDEyX1IyOgo+PiArCQlj bGtfcmF0ZSA9IEZJTUNfQ0xLX1JBVEVfUjI7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRklNQ19F WFlOT1NfNDQxMjoKPj4gKwlkZWZhdWx0Ogo+PiArCQljbGtfcmF0ZSA9IEZJTUNfQ0xLX1JBVEU7 Cj4+ICsJCWJyZWFrOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiBjbGtfcmF0ZTsKPj4gK30KPj4g Kwo+PiArc3RhdGljIGludCBfX2RldmluaXQgZmltY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQo+PiArewo+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4+ ICsJc3RydWN0IGZpbWNfY29udGV4dCAqY3R4Owo+PiArCXN0cnVjdCBjbGsJKnBhcmVudF9jbGs7 Cj4+ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4+ICsJc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2 ICppcHBkcnY7Cj4+ICsJc3RydWN0IGV4eW5vc19kcm1fZmltY19wZGF0YSAqcGRhdGE7Cj4+ICsJ aW50IHJldCA9IC1FSU5WQUw7Cj4+ICsKPj4gKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9k YXRhOwo+PiArCWlmICghcGRhdGEpIHsKPj4gKwkJZGV2X2VycihkZXYsICJubyBwbGF0Zm9ybSBk YXRhIHNwZWNpZmllZC5cbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4g KwljdHggPSBremFsbG9jKHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFjdHgp Cj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJLyogY2xvY2sgY29udHJvbCAqLwo+PiAr CWN0eC0+c2Nsa19maW1jX2NsayA9IGNsa19nZXQoZGV2LCAic2Nsa19maW1jIik7Cj4+ICsJaWYg KElTX0VSUihjdHgtPnNjbGtfZmltY19jbGspKSB7Cj4+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIGdldCBzcmMgZmltYyBjbG9jay5cbiIpOwo+PiArCQlyZXQgPSBQVFJfRVJSKGN0eC0+c2Ns a19maW1jX2Nsayk7Cj4+ICsJCWdvdG8gZXJyX2N0eDsKPj4gKwl9Cj4+ICsJY2xrX2VuYWJsZShj dHgtPnNjbGtfZmltY19jbGspOwo+PiArCj4+ICsJY3R4LT5maW1jX2NsayA9IGNsa19nZXQoZGV2 LCAiZmltYyIpOwo+PiArCWlmIChJU19FUlIoY3R4LT5maW1jX2NsaykpIHsKPj4gKwkJZGV2X2Vy cihkZXYsICJmYWlsZWQgdG8gZ2V0IGZpbWMgY2xvY2suXG4iKTsKPj4gKwkJcmV0ID0gUFRSX0VS UihjdHgtPmZpbWNfY2xrKTsKPj4gKwkJY2xrX3B1dChjdHgtPnNjbGtfZmltY19jbGspOwo+PiAr CQlnb3RvIGVycl9jdHg7Cj4+ICsJfQo+PiArCj4+ICsJY3R4LT53Yl9jbGsgPSBjbGtfZ2V0KGRl diwgInB4bF9hc3luYzAiKTsKPj4gKwlpZiAoSVNfRVJSKGN0eC0+d2JfY2xrKSkgewo+PiArCQlk ZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgd3JpdGViYWNrIGEgY2xvY2suXG4iKTsKPj4gKwkJ cmV0ID0gUFRSX0VSUihjdHgtPndiX2Nsayk7Cj4+ICsJCWNsa19wdXQoY3R4LT5zY2xrX2ZpbWNf Y2xrKTsKPj4gKwkJY2xrX3B1dChjdHgtPmZpbWNfY2xrKTsKPj4gKwkJZ290byBlcnJfY3R4Owo+ PiArCX0KPj4gKwo+PiArCWN0eC0+d2JfYl9jbGsgPSBjbGtfZ2V0KGRldiwgInB4bF9hc3luYzEi KTsKPj4gKwlpZiAoSVNfRVJSKGN0eC0+d2JfYl9jbGspKSB7Cj4+ICsJCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIGdldCB3cml0ZWJhY2sgYiBjbG9jay5cbiIpOwo+PiArCQlyZXQgPSBQVFJfRVJS KGN0eC0+d2JfYl9jbGspOwo+PiArCQljbGtfcHV0KGN0eC0+c2Nsa19maW1jX2Nsayk7Cj4+ICsJ CWNsa19wdXQoY3R4LT5maW1jX2Nsayk7Cj4+ICsJCWNsa19wdXQoY3R4LT53Yl9jbGspOwo+PiAr CQlnb3RvIGVycl9jdHg7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKHBkYXRhLT52ZXIgPT0gRklNQ19F WFlOT1NfNDIxMCkKPj4gKwkJcGFyZW50X2NsayA9IGNsa19nZXQoZGV2LCAibW91dF9tcGxsIik7 Cj4+ICsJZWxzZQo+PiArCQlwYXJlbnRfY2xrID0gY2xrX2dldChkZXYsICJtb3V0X21wbGxfdXNl ciIpOwo+PiArCj4+ICsJaWYgKElTX0VSUihwYXJlbnRfY2xrKSkgewo+PiArCQlkZXZfZXJyKGRl diwgImZhaWxlZCB0byBnZXQgcGFyZW50IGNsb2NrLlxuIik7Cj4+ICsJCXJldCA9IFBUUl9FUlIo cGFyZW50X2Nsayk7Cj4+ICsJCWNsa19wdXQoY3R4LT5zY2xrX2ZpbWNfY2xrKTsKPj4gKwkJY2xr X3B1dChjdHgtPmZpbWNfY2xrKTsKPj4gKwkJY2xrX3B1dChjdHgtPndiX2Nsayk7Cj4+ICsJCWNs a19wdXQoY3R4LT53Yl9iX2Nsayk7Cj4+ICsJCWdvdG8gZXJyX2N0eDsKPj4gKwl9Cj4+ICsKPj4g KwlpZiAoY2xrX3NldF9wYXJlbnQoY3R4LT5zY2xrX2ZpbWNfY2xrLCBwYXJlbnRfY2xrKSkgewo+ PiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzZXQgcGFyZW50LlxuIik7Cj4+ICsJCWNsa19w dXQocGFyZW50X2Nsayk7Cj4+ICsJCWNsa19wdXQoY3R4LT5zY2xrX2ZpbWNfY2xrKTsKPj4gKwkJ Y2xrX3B1dChjdHgtPmZpbWNfY2xrKTsKPj4gKwkJY2xrX3B1dChjdHgtPndiX2Nsayk7Cj4+ICsJ CWNsa19wdXQoY3R4LT53Yl9iX2Nsayk7Cj4+ICsJCWdvdG8gZXJyX2N0eDsKPj4gKwl9Cj4+ICsJ Y2xrX3B1dChwYXJlbnRfY2xrKTsKPj4gKwljbGtfc2V0X3JhdGUoY3R4LT5zY2xrX2ZpbWNfY2xr LCBmaW1jX2dldF9jbGtfcmF0ZShwZGF0YS0+dmVyKSk7Cj4+ICsJaWYgKHBkYXRhLT52ZXIgPT0g RklNQ19FWFlOT1NfNDIxMCkKPj4gKwkJY2xrX3B1dChjdHgtPnNjbGtfZmltY19jbGspOwo+PiAr CWVsc2UKPj4gKwkJY2xrX2Rpc2FibGUoY3R4LT5zY2xrX2ZpbWNfY2xrKTsKPj4gKwo+PiArCS8q IHJlc291cmNlIG1lbW9yeSAqLwo+PiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2 LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4+ICsJaWYgKCFyZXMpIHsKPj4gKwkJZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gZmluZCByZWdpc3RlcnMuXG4iKTsKPj4gKwkJcmV0ID0gLUVOT0VOVDsKPj4g KwkJZ290byBlcnJfY2xrOwo+PiArCX0KPj4gKwo+PiArCWN0eC0+cmVnc19yZXMgPSByZXF1ZXN0 X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAo+PiArCQkJCQkgICBk ZXZfbmFtZShkZXYpKTsKPj4gKwlpZiAoIWN0eC0+cmVnc19yZXMpIHsKPj4gKwkJZGV2X2Vycihk ZXYsICJmYWlsZWQgdG8gY2xhaW0gcmVnaXN0ZXIgcmVnaW9uLlxuIik7Cj4+ICsJCXJldCA9IC1F Tk9FTlQ7Cj4+ICsJCWdvdG8gZXJyX2NsazsKPj4gKwl9Cj4+ICsKPj4gKwljdHgtPnJlZ3MgPSBp b3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Cj4+ICsJaWYgKCFjdHgtPnJl Z3MpIHsKPj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gbWFwIHJlZ2lzdGVycy5cbiIpOwo+ PiArCQlyZXQgPSAtRU5YSU87Cj4+ICsJCWdvdG8gZXJyX3JlcV9yZWdpb247Cj4+ICsJfQo+PiAr Cj4+ICsJLyogcmVzb3VyY2UgaXJxICovCj4+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNl KHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKPj4gKwlpZiAoIXJlcykgewo+PiArCQlkZXZfZXJy KGRldiwgImZhaWxlZCB0byByZXF1ZXN0IGlycSByZXNvdXJjZS5cbiIpOwo+PiArCQlnb3RvIGVy cl9nZXRfcmVnczsKPj4gKwl9Cj4+ICsKPj4gKwljdHgtPmlycSA9IHJlcy0+c3RhcnQ7Cj4+ICsJ cmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoY3R4LT5pcnEsIE5VTEwsIGZpbWNfaXJxX2hhbmRs ZXIsCj4+ICsJCUlSUUZfT05FU0hPVCwgImRybV9maW1jIiwgY3R4KTsKPj4gKwlpZiAocmV0IDwg MCkgewo+PiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXF1ZXN0IGlycS5cbiIpOwo+PiAr CQlnb3RvIGVycl9nZXRfcmVnczsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBjb250ZXh0IGluaXRhaWxp emF0aW9uICovCj4+ICsJY3R4LT52ZXIgPSBwZGF0YS0+dmVyOwo+PiArCWN0eC0+aWQgPSBwZGV2 LT5pZDsKPj4gKwljdHgtPmNhcGEgPSBmaW1jX2dldF9jYXBhYmlsaXR5KGN0eC0+dmVyKTsKPj4g KwlpZiAoIWN0eC0+Y2FwYSkgewo+PiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgY2Fw YWJpbGl0eS5cbiIpOwo+PiArCQlnb3RvIGVycl9nZXRfaXJxOwo+PiArCX0KPj4gKwljdHgtPnBv bCA9IHBkYXRhLT5wb2w7Cj4+ICsKPj4gKwlpcHBkcnYgPSAmY3R4LT5pcHBkcnY7Cj4+ICsJaXBw ZHJ2LT5kZXYgPSBkZXY7Cj4+ICsJaXBwZHJ2LT5vcHNbRVhZTk9TX0RSTV9PUFNfU1JDXSA9ICZm aW1jX3NyY19vcHM7Cj4+ICsJaXBwZHJ2LT5vcHNbRVhZTk9TX0RSTV9PUFNfRFNUXSA9ICZmaW1j X2RzdF9vcHM7Cj4+ICsJaXBwZHJ2LT5jaGVja19wcm9wZXJ0eSA9IGZpbWNfaXBwZHJ2X2NoZWNr X3Byb3BlcnR5Owo+PiArCWlwcGRydi0+cmVzZXQgPSBmaW1jX2lwcGRydl9yZXNldDsKPj4gKwlp cHBkcnYtPnN0YXJ0ID0gZmltY19pcHBkcnZfc3RhcnQ7Cj4+ICsJaXBwZHJ2LT5zdG9wID0gZmlt Y19pcHBkcnZfc3RvcDsKPj4gKwlyZXQgPSBmaW1jX2luaXRfcHJvcF9saXN0KCZpcHBkcnYtPnBy b3BfbGlzdCk7Cj4+ICsJaWYgKHJldCA8IDApIHsKPj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQg dG8gaW5pdCBwcm9wZXJ0eSBsaXN0LlxuIik7Cj4+ICsJCWdvdG8gZXJyX2dldF9pcnE7Cj4+ICsJ fQo+PiArCj4+ICsJRFJNX0RFQlVHX0tNUygiJXM6aWRbJWRdaXBwZHJ2WzB4JXhdXG4iLCBfX2Z1 bmNfXywgY3R4LT5pZCwKPj4gKwkJKGludClpcHBkcnYpOwo+PiArCj4+ICsJc3Bpbl9sb2NrX2lu aXQoJmN0eC0+bG9jayk7Cj4+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY3R4KTsKPj4g Kwo+PiArCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOwo+PiArCXBtX3J1bnRpbWVfZW5hYmxl KGRldik7Cj4+ICsKPj4gKwlyZXQgPSBleHlub3NfZHJtX2lwcGRydl9yZWdpc3RlcihpcHBkcnYp Owo+PiArCWlmIChyZXQgPCAwKSB7Cj4+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lz dGVyIGRybSBmaW1jIGRldmljZS5cbiIpOwo+PiArCQlnb3RvIGVycl9pcHBkcnZfcmVnaXN0ZXI7 Cj4+ICsJfQo+PiArCj4+ICsJZGV2X2luZm8oJnBkZXYtPmRldiwgImRybSBmaW1jIHJlZ2lzdGVy ZWQgc3VjY2Vzc2Z1bGx5LlxuIik7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gKwo+PiArZXJyX2lw cGRydl9yZWdpc3RlcjoKPj4gKwlrZnJlZShpcHBkcnYtPnByb3BfbGlzdCk7Cj4+ICsJcG1fcnVu dGltZV9kaXNhYmxlKGRldik7Cj4+ICsJZnJlZV9pcnEoY3R4LT5pcnEsIGN0eCk7Cj4+ICtlcnJf Z2V0X2lycToKPj4gKwlmcmVlX2lycShjdHgtPmlycSwgY3R4KTsKPj4gK2Vycl9nZXRfcmVnczoK Pj4gKwlpb3VubWFwKGN0eC0+cmVncyk7Cj4+ICtlcnJfcmVxX3JlZ2lvbjoKPj4gKwlyZWxlYXNl X3Jlc291cmNlKGN0eC0+cmVnc19yZXMpOwo+PiArCWtmcmVlKGN0eC0+cmVnc19yZXMpOwo+PiAr ZXJyX2NsazoKPj4gKwljbGtfcHV0KGN0eC0+c2Nsa19maW1jX2Nsayk7Cj4+ICsJY2xrX3B1dChj dHgtPmZpbWNfY2xrKTsKPj4gKwljbGtfcHV0KGN0eC0+d2JfY2xrKTsKPj4gKwljbGtfcHV0KGN0 eC0+d2JfYl9jbGspOwo+PiArZXJyX2N0eDoKPj4gKwlrZnJlZShjdHgpOwo+PiArCXJldHVybiBy ZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgX19kZXZleGl0IGZpbWNfcmVtb3ZlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICt7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsKPj4gKwlzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHggPSBnZXRfZmltY19jb250 ZXh0KGRldik7Cj4+ICsJc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnYgPSAmY3R4LT5p cHBkcnY7Cj4+ICsKPj4gKwlrZnJlZShpcHBkcnYtPnByb3BfbGlzdCk7Cj4+ICsJZXh5bm9zX2Ry bV9pcHBkcnZfdW5yZWdpc3RlcihpcHBkcnYpOwo+PiArCj4+ICsJcG1fcnVudGltZV9zZXRfc3Vz cGVuZGVkKGRldik7Cj4+ICsJcG1fcnVudGltZV9kaXNhYmxlKGRldik7Cj4+ICsKPj4gKwlmcmVl X2lycShjdHgtPmlycSwgY3R4KTsKPj4gKwlpb3VubWFwKGN0eC0+cmVncyk7Cj4+ICsJcmVsZWFz ZV9yZXNvdXJjZShjdHgtPnJlZ3NfcmVzKTsKPj4gKwlrZnJlZShjdHgtPnJlZ3NfcmVzKTsKPj4g Kwo+PiArCWNsa19wdXQoY3R4LT5zY2xrX2ZpbWNfY2xrKTsKPj4gKwljbGtfcHV0KGN0eC0+Zmlt Y19jbGspOwo+PiArCWNsa19wdXQoY3R4LT53Yl9jbGspOwo+PiArCWNsa19wdXQoY3R4LT53Yl9i X2Nsayk7Cj4+ICsKPj4gKwlrZnJlZShjdHgpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ ICsKPj4gKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKPj4gK3N0YXRpYyBpbnQgZmltY19zdXNwZW5k KHN0cnVjdCBkZXZpY2UgKmRldikKPj4gK3sKPj4gKwlzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHgg PSBnZXRfZmltY19jb250ZXh0KGRldik7Cj4+ICsKPj4gKwlEUk1fREVCVUdfS01TKCIlczppZFsl ZF1cbiIsIF9fZnVuY19fLCBjdHgtPmlkKTsKPj4gKwlpZiAocG1fcnVudGltZV9zdXNwZW5kZWQo ZGV2KSkKPj4gKwkJcmV0dXJuIDA7Cj4+ICsJLyogVG9EbyAqLwo+PiArCXJldHVybiBmaW1jX3Bv d2VyX29uKGN0eCwgZmFsc2UpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGZpbWNfcmVzdW1l KHN0cnVjdCBkZXZpY2UgKmRldikKPj4gK3sKPj4gKwlzdHJ1Y3QgZmltY19jb250ZXh0ICpjdHgg PSBnZXRfZmltY19jb250ZXh0KGRldik7Cj4+ICsKPj4gKwlEUk1fREVCVUdfS01TKCIlczppZFsl ZF1cbiIsIF9fZnVuY19fLCBjdHgtPmlkKTsKPj4gKwlpZiAoIXBtX3J1bnRpbWVfc3VzcGVuZGVk KGRldikpCj4+ICsJCXJldHVybiBmaW1jX3Bvd2VyX29uKGN0eCwgdHJ1ZSk7Cj4+ICsJLyogVG9E byAqLwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArI2VuZGlmCj4+ICsKPj4gKyNpZmRlZiBDT05G SUdfUE1fUlVOVElNRQo+PiArc3RhdGljIGludCBmaW1jX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3Qg ZGV2aWNlICpkZXYpCj4+ICt7Cj4+ICsJc3RydWN0IGZpbWNfY29udGV4dCAqY3R4ID0gZ2V0X2Zp bWNfY29udGV4dChkZXYpOwo+PiArCj4+ICsJRFJNX0RFQlVHX0tNUygiJXM6aWRbJWRdXG4iLCBf X2Z1bmNfXywgY3R4LT5pZCk7Cj4+ICsJLyogVG9EbyAqLwo+PiArCXJldHVybiAgZmltY19wb3dl cl9vbihjdHgsIGZhbHNlKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBmaW1jX3J1bnRpbWVf cmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPj4gK3sKPj4gKwlzdHJ1Y3QgZmltY19jb250ZXh0 ICpjdHggPSBnZXRfZmltY19jb250ZXh0KGRldik7Cj4+ICsKPj4gKwlEUk1fREVCVUdfS01TKCIl czppZFslZF1cbiIsIF9fZnVuY19fLCBjdHgtPmlkKTsKPj4gKwkvKiBUb0RvICovCj4+ICsJcmV0 dXJuICBmaW1jX3Bvd2VyX29uKGN0eCwgdHJ1ZSk7Cj4+ICt9Cj4+ICsjZW5kaWYKPj4gKwo+PiAr c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGZpbWNfcG1fb3BzID0gewo+PiArCVNFVF9T WVNURU1fU0xFRVBfUE1fT1BTKGZpbWNfc3VzcGVuZCwgZmltY19yZXN1bWUpCj4+ICsJU0VUX1JV TlRJTUVfUE1fT1BTKGZpbWNfcnVudGltZV9zdXNwZW5kLCBmaW1jX3J1bnRpbWVfcmVzdW1lLCBO VUxMKQo+PiArfTsKPj4gKwo+PiArLyogVG9EbzogbmVlZCB0byBjaGVjayB1c2UgY2FzZSBwbGF0 Zm9ybV9kZXZpY2VfaWQgKi8KPj4gK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZmltY19kcml2ZXIg PSB7Cj4+ICsJLnByb2JlCQk9IGZpbWNfcHJvYmUsCj4+ICsJLnJlbW92ZQkJPSBfX2RldmV4aXRf cChmaW1jX3JlbW92ZSksCj4+ICsJLmRyaXZlcgkJPSB7Cj4+ICsJCS5uYW1lCT0gImV4eW5vcy1k cm0tZmltYyIsCj4+ICsJCS5vd25lcgk9IFRISVNfTU9EVUxFLAo+PiArCQkucG0JPSAmZmltY19w bV9vcHMsCj4+ICsJfSwKPj4gK307Cj4+ICsKPgo+IDxzbmlwPgo+Cj4gQmVzdCBSZWdhcmRzLAo+ IC0gU2V1bmctV29vIEtpbQo+CgpCUgpFdW5jaHVsIEtpbS4KCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==