From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [WIP PATCH 13/15] drm/dp_mst: Start tracking per-port VCPI allocations Date: Fri, 14 Dec 2018 17:37:25 +0100 Message-ID: <20181214163725.GU21184@phenom.ffwll.local> References: <20181214012604.13746-1-lyude@redhat.com> <20181214012604.13746-14-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20181214012604.13746-14-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Lyude Paul Cc: Sean Paul , Maxime Ripard , nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Joonas Lahtinen , Maarten Lankhorst , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, David Airlie , Jerry Zuo , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Daniel Vetter , Harry Wentland , Jani Nikula , Rodrigo Vivi List-Id: amd-gfx.lists.freedesktop.org T24gVGh1LCBEZWMgMTMsIDIwMTggYXQgMDg6MjU6NDJQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiBUaGVyZSBoYXMgYmVlbiBhIFRPRE8gd2FpdGluZyBmb3IgcXVpdGUgYSBsb25nIHRpbWUg aW4KPiBkcm1fZHBfbXN0X3RvcG9sb2d5LmM6Cj4gCj4gCS8qIFdlIGNhbm5vdCByZWx5IG9uIHBv cnQtPnZjcGkubnVtX3Nsb3RzIHRvIHVwZGF0ZQo+IAkgKiB0b3BvbG9neV9zdGF0ZS0+YXZhaWxf c2xvdHMgYXMgdGhlIHBvcnQgbWF5IG5vdCBleGlzdCBpZiB0aGUgcGFyZW50Cj4gCSAqIGJyYW5j aCBkZXZpY2Ugd2FzIHVucGx1Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnkgdHJhY2tpbmcK PiAJICogcGVyLXBvcnQgc2xvdCBhbGxvY2F0aW9uIGluIGRybV9kcF9tc3RfdG9wb2xvZ3lfc3Rh dGUgaW5zdGVhZCBvZgo+IAkgKiBkZXBlbmRpbmcgb24gdGhlIGNhbGxlciB0byB0ZWxsIHVzIGhv dyBtYW55IHNsb3RzIHRvIHJlbGVhc2UuCj4gCSAqLwo+IAo+IFRoYXQncyBub3QgdGhlIG9ubHkg cmVhc29uIHdlIHNob3VsZCBmaXggdGhpczogZm9yY2luZyB0aGUgZHJpdmVyIHRvCj4gdHJhY2sg dGhlIFZDUEkgYWxsb2NhdGlvbnMgdGhyb3VnaG91dCBhIHN0YXRlJ3MgYXRvbWljIGNoZWNrIGlz Cj4gZXJyb3IgcHJvbmUsIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBleHRyYSBjYXJlIGhhcyB0byBi ZSB0YWtlbiB3aXRoIHRoZQo+IG9yZGVyIHRoYXQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xv dHMoKSBhbmQKPiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIGFyZSBjYWxsZWQg aW4gaW4gb3JkZXIgdG8gZW5zdXJlCj4gaWRlbXBvdGVuY3kuIEN1cnJlbnRseSB0aGUgb25seSBk cml2ZXIgYWN0dWFsbHkgdXNpbmcgdGhlc2UgaGVscGVycywKPiBpOTE1LCBkb2Vzbid0IGV2ZW4g ZG8gdGhpcyBjb3JyZWN0bHk6IG11bHRpcGxlIC0+YmVzdF9lbmNvZGVyKCkgY2hlY2tzCj4gd2l0 aCBpOTE1J3MgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBub3QgYmUgaWRlbXBvdGVudCBh bmQgd291bGQKPiBvdmVyLWFsbG9jYXRlIFZDUEkgc2xvdHMsIHNvbWV0aGluZyBJIGxlYXJuZWQg dHJ5aW5nIHRvIGltcGxlbWVudAo+IGZhbGxiYWNrIHJldHJhaW5pbmcgaW4gTVNULgo+IAo+IFNv OiBzaW1wbGlmeSB0aGlzIHdob2xlIG1lc3MsIGFuZCB0ZWFjaCBkcm1fZHBfYXRvbWljX2ZpbmRf dmNwaV9zbG90cygpCj4gYW5kIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgdG8g dHJhY2sgdGhlIFZDUEkgYWxsb2NhdGlvbnMgZm9yCj4gZWFjaCBwb3J0LiBUaGlzIGFsbG93cyB1 cyB0byBlbnN1cmUgaWRlbXBvdGVuY3kgd2l0aG91dCBoYXZpbmcgdG8gcmVseQo+IG9uIHRoZSBk cml2ZXIgYXMgbXVjaC4gQWRkaXRpb25hbGx5OiB0aGUgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0byBk byBhbnkKPiBraW5kIG9mIFZDUEkgc2xvdCB0cmFja2luZyBhbnltb3JlIGlmIGl0IGRvZXNuJ3Qg bmVlZCBpdCBmb3IgaXQncyBvd24KPiBpbnRlcm5hbCBzdGF0ZS4KPiAKPiBBZGRpdGlvbmFsbHk7 IHRoaXMgYWRkcyBhIG5ldyBkcm1fZHBfbXN0X2F0b21pY19jaGVjaygpIGhlbHBlciB3aGljaAo+ IG11c3QgYmUgdXNlZCBieSBhdG9taWMgZHJpdmVycyB0byBwZXJmb3JtIHZhbGlkaXR5IGNoZWNr cyBmb3IgdGhlIG5ldwo+IFZDUEkgYWxsb2NhdGlvbnMgaW5jdXJyZWQgYnkgYSBzdGF0ZS4KPiAK PiBBbHNvOiB1cGRhdGUgdGhlIGRvY3VtZW50YXRpb24gYW5kIG1ha2UgaXQgbW9yZSBvYnZpb3Vz IHRoYXQgdGhlc2UKPiAvbXVzdC8gYmUgY2FsbGVkIGJ5IC9hbGwvIGF0b21pYyBkcml2ZXJzIHN1 cHBvcnRpbmcgTVNULgo+IAo+IENoYW5nZXMgc2luY2UgdjY6Cj4gIC0gS2VlcCBhIGtyZWYgdG8g YWxsIG9mIHRoZSBwb3J0cyB3ZSBoYXZlIGFsbG9jYXRpb25zIG9uLiBUaGlzIHJlcXVpcmVkCj4g ICAgYSBnb29kIGJpdCBvZiBjaGFuZ2luZyB0byB3aGVuIHdlIGNhbGwgZHJtX2RwX2ZpbmRfdmNw aV9zbG90cygpLAo+ICAgIG1haW5seSB0aGF0IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ugb25s eSByZWRvIFZDUEkgYWxsb2NhdGlvbnMgb24KPiAgICBhY3R1YWwgbW9kZSBvciBDUlRDIGNoYW5n ZXMsIG5vdCBjcnRjX3N0YXRlLT5hY3RpdmUgY2hhbmdlcy4KPiAgICBBZGRpdGlvbmFsbHksIHdl IG5vIGxvbmdlciB0YWtlIHRoZSByZWdpc3RyYXRpb24gb2YgdGhlIERSTSBjb25uZWN0b3IKPiAg ICBmb3IgZWFjaCBwb3J0IGludG8gYWNjb3VudCBiZWNhdXNlIHNvIGxvbmcgYXMgd2UgaGF2ZSBh IGtyZWYgdG8gdGhlCj4gICAgcG9ydCBpbiB0aGUgbmV3IG9yIHByZXZpb3VzIGF0b21pYyBzdGF0 ZSwgdGhlIGNvbm5lY3RvciB3aWxsIHN0YXkKPiAgICByZWdpc3RlcmVkLgo+ICAtIFVzZSB0aGUg c21hbGwgY2hhbmdlcyB0byBkcm1fZHBfcHV0X3BvcnQoKSB0byBhZGQgZXZlbiBtb3JlIGVycm9y Cj4gICAgY2hlY2tpbmcgdG8gbWFrZSBtaXN1c2FnZSBvZiB0aGUgaGVscGVycyBtb3JlIG9idmlv dXMuIEkgYWRkZWQgdGhpcwo+ICAgIGFmdGVyIGhhdmluZyB0byBjaGFzZSBkb3duIHZhcmlvdXMg dXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0Cj4gICAgc3RhcnRlZCBwb3BwaW5nIHVwIGZy b20gdGhlIG5ldyBoZWxwZXJzIHNvIG5vIG9uZSBlbHNlIGhhcyB0bwo+ICAgIHRyb3VibGVzaG9v dCB0aGF0Lgo+ICAtIE1vdmUgc29tZSBhY2NpZGVudGFsIERSTV9ERUJVR19LTVMoKSBjYWxscyB0 byBEUk1fREVCVUdfQVRPTUlDKCkKPiAgLSBVcGRhdGUgZG9jdW1lbnRhdGlvbiBhZ2Fpbiwgbm90 ZSB0aGF0IGZpbmQvcmVsZWFzZSgpIHNob3VsZCBib3RoIG5vdCBiZQo+ICAgIGNhbGxlZCBvbiB0 aGUgc2FtZSBwb3J0IGluIGEgc2luZ2xlIGF0b21pYyBjaGVjayBwaGFzZSAoYnV0IG11bHRpcGxl Cj4gICAgY2FsbHMgdG8gb25lIG9yIHRoZSBvdGhlciBpcyBPSykKPiAKPiBDaGFuZ2VzIHNpbmNl IHY0Ogo+ICAtIERvbid0IHNraXAgdGhlIGF0b21pYyBjaGVja3MgZm9yIFZDUEkgYWxsb2NhdGlv bnMgaWYgbm8gbmV3IFZDUEkKPiAgICBhbGxvY2F0aW9ucyBoYXBwZW4gaW4gYSBzdGF0ZS4gVGhp cyBtYWtlcyB0aGUgbmV4dCBjaGFuZ2UgSSdtIGFib3V0Cj4gICAgdG8gbGlzdCBoZXJlIGEgbG90 IGVhc2llciB0byBpbXBsZW1lbnQuCj4gIC0gRG9uJ3QgaWdub3JlIFZDUEkgYWxsb2NhdGlvbnMg b24gZGVzdHJveWVkIHBvcnRzLCBpbnN0ZWFkIGVuc3VyZSB0aGF0Cj4gICAgd2hlbiBwb3J0cyBh cmUgZGVzdHJveWVkIGFuZCBzdGlsbCBoYXZlIFZDUEkgYWxsb2NhdGlvbnMgaW4gdGhlCj4gICAg dG9wb2xvZ3kgc3RhdGUsIHRoZSBvbmx5IHN0YXRlIGNoYW5nZXMgYWxsb3dlZCBhcmUgcmVsZWFz aW5nIHNhaWQKPiAgICBwb3J0cycgVkNQSS4gVGhpcyBwcmV2ZW50cyBhIHN0YXRlIHdpdGggYSBt aXggb2YgVkNQSSBhbGxvY2F0aW9ucwo+ICAgIGZyb20gZGVzdHJveWVkIHBvcnRzLCBhbmQgYWxs b2NhdGlvbnMgZnJvbSB2YWxpZCBwb3J0cy4KPiAKPiBDaGFuZ2VzIHNpbmNlIHYzOgo+ICAtIERv bid0IHJlbGVhc2UgVkNQSSBhbGxvY2F0aW9ucyBpbiB0aGUgdG9wb2xvZ3kgc3RhdGUgaW1tZWRp YXRlbHkgaW4KPiAgICBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpLCBpbnN0ZWFk IG1hcmsgdGhlbSBhcyAwIGFuZCBza2lwCj4gICAgb3ZlciB0aGVtIGluIGRybV9kcF9tc3RfZHVw bGljYXRlX3N0YXRlKCkuIFRoaXMgbWFrZXMgaXQgc28KPiAgICBkcm1fZHBfYXRvbWljX3JlbGVh c2VfdmNwaV9zbG90cygpIGlzIHN0aWxsIGlkZW1wb3RlbnQgd2hpbGUgYWxzbwo+ICAgIHRocm93 aW5nIHdhcm5pbmdzIGlmIHRoZSBkcml2ZXIgbWVzc2VzIHVwIGl0J3MgYm9vayBrZWVwaW5nIGFu ZCB0cmllcwo+ICAgIHRvIHJlbGVhc2UgVkNQSSBzbG90cyBvbiBhIHBvcnQgdGhhdCBkb2Vzbid0 IGhhdmUgYW55IHByZS1leGlzdGluZwo+ICAgIFZDUEkgYWxsb2NhdGlvbiAtIGRhbnZldAo+ICAt IENoYW5nZSBtc3Rfc3RhdGUvc3RhdGUgaW4gc29tZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8gIm1z dCBzdGF0ZSIKPiAKPiBDaGFuZ2VzIHNpbmNlIHYyOgo+ICAtIFVzZSBrbWVtZHVwKCkgZm9yIGR1 cGxpY2F0aW5nIE1TVCBzdGF0ZSAtIGRhbnZldAo+ICAtIE1vdmUgcG9ydCB2YWxpZGF0aW9uIG91 dCBvZiBkdXBsaWNhdGUgc3RhdGUgY2FsbGJhY2sgLSBkYW52ZXQKPiAgLSBIYW5kbGUgbG9vcGlu ZyB0aHJvdWdoIE1TVCB0b3BvbG9neSBzdGF0ZXMgaW4KPiAgICBkcm1fZHBfbXN0X2F0b21pY19j aGVjaygpIHNvIHRoZSBkcml2ZXIgZG9lc24ndCBoYXZlIHRvIGRvIGl0Cj4gIC0gRml4IGRvY3Vt ZW50YXRpb24gaW4gZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKQo+ICAtIE1vdmUgdGhl IGF0b21pYyBjaGVjayBmb3IgZWFjaCBpbmRpdmlkdWFsIHRvcG9sb2d5IHN0YXRlIGludG8gaXQn cwo+ICAgIG93biBmdW5jdGlvbiwgcmVkdWNlcyBpbmRlbnRpbmcKPiAgLSBEb24ndCBjb25zaWRl ciAic3RhbGUiIE1TVCBwb3J0cyB3aGVuIGNhbGN1bGF0aW5nIHRoZSBiYW5kd2lkdGgKPiAgICBy ZXF1aXJlbWVudHMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugb3JpZ2luYWxseSB3ZSByZWxpZWQg b24gdGhlCj4gICAgc3RhdGUgZHVwbGljYXRpb24gZnVuY3Rpb25zIHRvIHBydW5lIGFueSBzdGFs ZSBwb3J0cyBmcm9tIHRoZSBuZXcKPiAgICBzdGF0ZSwgd2hpY2ggd291bGQgcHJldmVudCB1cyBm cm9tIGluY29ycmVjdGx5IGNvbnNpZGVyaW5nIHRoZWlyCj4gICAgYmFuZHdpZHRoIHJlcXVpcmVt ZW50cyBhbG9uZ3NpZGUgbGVnaXRpbWF0ZSBuZXcgcGF5bG9hZHMuCj4gIC0gQWRkIGZ1bmN0aW9u IHJlZmVyZW5jZXMgaW4gZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSAtIGRhbnZl dAo+ICAtIEFubm90YXRlIGF0b21pYyBWQ1BJIGFuZCBhdG9taWMgY2hlY2sgZnVuY3Rpb25zIHdp dGggX19tdXN0X2NoZWNrCj4gICAgLSBkYW52ZXQKPiAKPiBDaGFuZ2VzIHNpbmNlIHYxOgo+ICAt IERvbid0IHVzZSB0aGUgbm93LXJlbW92ZWQgLT5hdG9taWNfY2hlY2soKSBmb3IgcHJpdmF0ZSBv YmplY3RzIGhvb2ssCj4gICAganVzdCBnaXZlIGRyaXZlcnMgYSBmdW5jdGlvbiB0byBjYWxsIHRo ZW1zZWx2ZXMKPiAKPiBTaWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQuY29t Pgo+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgo+IC0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jIHwgMjcxICsrKysrKysrKysrKysr KysrKysrKysrLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyAgfCAg IDQgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYyAgIHwgIDY0ICsrKy0t LQo+ICBpbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oICAgICAgIHwgIDI0ICsrLQo+ICA0 IGZpbGVzIGNoYW5nZWQsIDI5OCBpbnNlcnRpb25zKCspLCA2NSBkZWxldGlvbnMoLSkKPiAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiBpbmRleCA4ZDk0Yzg5NDNhYzcuLmI5 Mzc0Yzk4MWE1YiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3Bv bG9neS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+IEBA IC0yODk3LDIxICsyODk3LDQyIEBAIHN0YXRpYyBpbnQgZHJtX2RwX2luaXRfdmNwaShzdHJ1Y3Qg ZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiAgfQo+ICAKPiAgLyoqCj4gLSAqIGRybV9k cF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkgLSBGaW5kIGFuZCBhZGQgdmNwaSBzbG90cyB0byB0 aGUgc3RhdGUKPiArICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSAtIEZpbmQgYW5k IGFkZCBWQ1BJIHNsb3RzIHRvIHRoZSBzdGF0ZQo+ICAgKiBAc3RhdGU6IGdsb2JhbCBhdG9taWMg c3RhdGUKPiAgICogQG1ncjogTVNUIHRvcG9sb2d5IG1hbmFnZXIgZm9yIHRoZSBwb3J0Cj4gICAq IEBwb3J0OiBwb3J0IHRvIGZpbmQgdmNwaSBzbG90cyBmb3IKPiAgICogQHBibjogYmFuZHdpZHRo IHJlcXVpcmVkIGZvciB0aGUgbW9kZSBpbiBQQk4KPiAgICoKPiAtICogUkVUVVJOUzoKPiAtICog VG90YWwgc2xvdHMgaW4gdGhlIGF0b21pYyBzdGF0ZSBhc3NpZ25lZCBmb3IgdGhpcyBwb3J0IG9y IGVycm9yCj4gKyAqIEFsbG9jYXRlcyBWQ1BJIHNsb3RzIHRvIEBwb3J0LCByZXBsYWNpbmcgYW55 IHByZXZpb3VzIFZDUEkgYWxsb2NhdGlvbnMgaXQKPiArICogbWF5IGhhdmUgaGFkLiBBbnkgYXRv bWljIGRyaXZlcnMgd2hpY2ggc3VwcG9ydCBNU1QgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24KPiAr ICogaW4gdGhlaXIgJmRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2soKSBjYWxs YmFjayB0byBjaGFuZ2UgdGhlCj4gKyAqIGN1cnJlbnQgVkNQSSBhbGxvY2F0aW9uIGZvciB0aGUg bmV3IHN0YXRlLCBidXQgb25seSB3aGVuCj4gKyAqICZkcm1fY3J0Y19zdGF0ZS5tb2RlX2NoYW5n ZWQgb3IgJmRybV9jcnRjX3N0YXRlLmNvbm5lY3RvcnNfY2hhbmdlZCBpcyBzZXQKPiArICogdG8g ZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIHRoYXQgc3Rp bGwgdXNlIHRoZQo+ICsgKiBsZWdhY3kgbW9kZXNldHRpbmcgVUFQSS4KPiArICoKPiArICogQWxs b2NhdGlvbnMgc2V0IGJ5IHRoaXMgZnVuY3Rpb24gYXJlIG5vdCBjaGVja2VkIGFnYWluc3QgdGhl IGJhbmR3aWR0aAo+ICsgKiByZXN0cmFpbnRzIG9mIEBtZ3IgdW50aWwgdGhlIGRyaXZlciBjYWxs cyBkcm1fZHBfbXN0X2F0b21pY19jaGVjaygpLgo+ICsgKgo+ICsgKiBBZGRpdGlvbmFsbHksIGl0 IGlzIE9LIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZQo+ ICsgKiBAcG9ydCBhcyBuZWVkZWQuIEl0IGlzIG5vdCBPSyBob3dldmVyLCB0byBjYWxsIHRoaXMg ZnVuY3Rpb24gYW5kCj4gKyAqIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgaW4g dGhlIHNhbWUgYXRvbWljIGNoZWNrIHBoYXNlLgo+ICsgKgo+ICsgKiBTZWUgYWxzbzoKPiArICog ZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKQo+ICsgKiBkcm1fZHBfbXN0X2F0b21p Y19jaGVjaygpCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIFRvdGFsIHNsb3RzIGluIHRoZSBh dG9taWMgc3RhdGUgYXNzaWduZWQgZm9yIHRoaXMgcG9ydCwgb3IgYSBuZWdhdGl2ZSBlcnJvcgo+ ICsgKiBjb2RlIGlmIHRoZSBwb3J0IG5vIGxvbmdlciBleGlzdHMKPiAgICovCj4gIGludCBkcm1f ZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUs Cj4gIAkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICAJCQkJICBz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9zdGF0ZSAqdG9wb2xvZ3lfc3RhdGU7Cj4gLQlpbnQgcmVxX3Nsb3Rz Owo+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBvcywgKnZjcGkgPSBOVUxMOwo+ ICsJaW50IHByZXZfc2xvdHMsIHJlcV9zbG90cywgcmV0Owo+ICAKPiAgCXRvcG9sb2d5X3N0YXRl ID0gZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLCBtZ3IpOwo+ICAJaWYg KElTX0VSUih0b3BvbG9neV9zdGF0ZSkpCj4gQEAgLTI5MjAsMjAgKzI5NDEsNTYgQEAgaW50IGRy bV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwKPiAgCXBvcnQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlkYXRlZChtZ3Is IHBvcnQpOwo+ICAJaWYgKHBvcnQgPT0gTlVMTCkKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAtCXJl cV9zbG90cyA9IERJVl9ST1VORF9VUChwYm4sIG1nci0+cGJuX2Rpdik7Cj4gLQlEUk1fREVCVUdf S01TKCJ2Y3BpIHNsb3RzIHJlcT0lZCwgYXZhaWw9JWRcbiIsCj4gLQkJCXJlcV9zbG90cywgdG9w b2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKTsKPiAgCj4gLQlpZiAocmVxX3Nsb3RzID4gdG9wb2xv Z3lfc3RhdGUtPmF2YWlsX3Nsb3RzKSB7Cj4gLQkJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9y dChwb3J0KTsKPiAtCQlyZXR1cm4gLUVOT1NQQzsKPiArCXRvcG9sb2d5X3N0YXRlLT52Y3BpX2Fs bG9jYXRlZCA9IHRydWU7Cj4gKwo+ICsJLyogRmluZCB0aGUgY3VycmVudCBhbGxvY2F0aW9uIGZv ciB0aGlzIHBvcnQsIGlmIGFueSAqLwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZ0b3Bv bG9neV9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiArCQlpZiAocG9zLT5wb3J0ID09IHBvcnQpIHsK PiArCQkJdmNwaSA9IHBvczsKPiArCQkJcHJldl9zbG90cyA9IHZjcGktPnZjcGk7Cj4gKwo+ICsJ CQkvKgo+ICsJCQkgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIHVubGVzcyB0aGUgZHJpdmVy IHRyaWVzCj4gKwkJCSAqIHJlbGVhc2luZyBhbmQgYWxsb2NhdGluZyB0aGUgc2FtZSBWQ1BJIGFs bG9jYXRpb24sCj4gKwkJCSAqIHdoaWNoIGlzIGFuIGVycm9yCj4gKwkJCSAqLwo+ICsJCQlpZiAo V0FSTl9PTighcHJldl9zbG90cykpIHsKPiArCQkJCURSTV9FUlJPUigiY2Fubm90IGFsbG9jYXRl IGFuZCByZWxlYXNlIFZDUEkgb24gW01TVCBQT1JUOiVwXSBpbiB0aGUgc2FtZSBzdGF0ZVxuIiwK PiArCQkJCQkgIHBvcnQpOwo+ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJCX0KPiArCj4gKwkJ CWJyZWFrOwo+ICsJCX0KPiAgCX0KPiArCWlmICghdmNwaSkKPiArCQlwcmV2X3Nsb3RzID0gMDsK PiArCj4gKwlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJuLCBtZ3ItPnBibl9kaXYpOwo+ICsK PiArCURSTV9ERUJVR19BVE9NSUMoIltDT05ORUNUT1I6JWQ6JXNdIFtNU1QgUE9SVDolcF0gVkNQ SSAlZCAtPiAlZFxuIiwKPiArCQkJIHBvcnQtPmNvbm5lY3Rvci0+YmFzZS5pZCwgcG9ydC0+Y29u bmVjdG9yLT5uYW1lLAo+ICsJCQkgcG9ydCwgcHJldl9zbG90cywgcmVxX3Nsb3RzKTsKPiAgCj4g LQl0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMgLT0gcmVxX3Nsb3RzOwo+IC0JRFJNX0RFQlVH X0tNUygidmNwaSBzbG90cyBhdmFpbD0lZCIsIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyk7 Cj4gKwkvKiBBZGQgdGhlIG5ldyBhbGxvY2F0aW9uIHRvIHRoZSBzdGF0ZSAqLwo+ICsJaWYgKCF2 Y3BpKSB7Cj4gKwkJdmNwaSA9IGt6YWxsb2Moc2l6ZW9mKCp2Y3BpKSwgR0ZQX0tFUk5FTCk7Cj4g KwkJaWYgKCF2Y3BpKSB7Cj4gKwkJCXJldCA9IC1FTk9NRU07Cj4gKwkJCWdvdG8gb3V0Owo+ICsJ CX0KPiAgCj4gKwkJZHJtX2RwX21zdF9nZXRfcG9ydF9tYWxsb2MocG9ydCk7Cj4gKwkJdmNwaS0+ cG9ydCA9IHBvcnQ7Cj4gKwkJbGlzdF9hZGQoJnZjcGktPm5leHQsICZ0b3BvbG9neV9zdGF0ZS0+ dmNwaXMpOwo+ICsJfQo+ICsJdmNwaS0+dmNwaSA9IHJlcV9zbG90czsKPiArCj4gKwlyZXQgPSBy ZXFfc2xvdHM7Cj4gK291dDoKPiAgCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7 Cj4gLQlyZXR1cm4gcmVxX3Nsb3RzOwo+ICsJcmV0dXJuIHJldDsKPiAgfQo+ICBFWFBPUlRfU1lN Qk9MKGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKTsKPiAgCj4gQEAgLTI5NDEsMzEgKzI5 OTgsNTcgQEAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyk7Cj4g ICAqIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgLSBSZWxlYXNlIGFsbG9jYXRl ZCB2Y3BpIHNsb3RzCj4gICAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZQo+ICAgKiBAbWdy OiBNU1QgdG9wb2xvZ3kgbWFuYWdlciBmb3IgdGhlIHBvcnQKPiAtICogQHNsb3RzOiBudW1iZXIg b2YgdmNwaSBzbG90cyB0byByZWxlYXNlCj4gKyAqIEBwb3J0OiBUaGUgcG9ydCB0byByZWxlYXNl IHRoZSBWQ1BJIHNsb3RzIGZyb20KPiAgICoKPiAtICogUkVUVVJOUzoKPiAtICogMCBpZiBAc2xv dHMgd2VyZSBhZGRlZCBiYWNrIHRvICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlLT5hdmFpbF9z bG90cyBvcgo+IC0gKiBuZWdhdGl2ZSBlcnJvciBjb2RlCj4gKyAqIFJlbGVhc2VzIGFueSBWQ1BJ IHNsb3RzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCB0byBhIHBvcnQgaW4gdGhlIGF0b21pYwo+ ICsgKiBzdGF0ZS4gQW55IGF0b21pYyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2Fs bCB0aGlzIGZ1bmN0aW9uIGluCj4gKyAqIHRoZWlyICZkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5j cy5hdG9taWNfY2hlY2soKSBjYWxsYmFjayB3aGVuIHRoZQo+ICsgKiBjb25uZWN0b3Igd2lsbCBu byBsb25nZXIgaGF2ZSBWQ1BJIGFsbG9jYXRlZCAoZS5nLiBiZWNhdXNlIGl0J3MgQ1JUQyB3YXMK PiArICogcmVtb3ZlZCkgd2hlbiBpdCBoYWQgVkNQSSBhbGxvY2F0ZWQgaW4gdGhlIHByZXZpb3Vz IGF0b21pYyBzdGF0ZS4KPiArICoKPiArICogSXQgaXMgT0sgdG8gY2FsbCB0aGlzIGV2ZW4gaWYg QHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uCj4gKyAqIEFkZGl0aW9uYWxs eSwgaXQgaXMgT0sgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBz YW1lCj4gKyAqIEBwb3J0IGFzIG5lZWRlZC4gSXQgaXMgbm90IE9LIGhvd2V2ZXIsIHRvIGNhbGwg dGhpcyBmdW5jdGlvbiBhbmQKPiArICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSBv biB0aGUgc2FtZSBAcG9ydCBpbiBhIHNpbmdsZSBhdG9taWMgY2hlY2sKPiArICogcGhhc2UuCj4g KyAqCj4gKyAqIFNlZSBhbHNvOgo+ICsgKiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygp Cj4gKyAqIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkKPiArICoKPiArICogUmV0dXJuczoKPiAr ICogMCBpZiBhbGwgc2xvdHMgZm9yIHRoaXMgcG9ydCB3ZXJlIGFkZGVkIGJhY2sgdG8KPiArICog JmRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUuYXZhaWxfc2xvdHMgb3IgbmVnYXRpdmUgZXJyb3Ig Y29kZQo+ICAgKi8KPiAgaW50IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiAgCQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptZ3IsCj4gLQkJCQkgICAgIGludCBzbG90cykKPiArCQkJCSAgICAgc3Ry dWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKPiAgewo+ICAJc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfc3RhdGUgKnRvcG9sb2d5X3N0YXRlOwo+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9j YXRpb24gKnBvczsKPiArCWJvb2wgZm91bmQgPSBmYWxzZTsKPiAgCj4gIAl0b3BvbG9neV9zdGF0 ZSA9IGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSwgbWdyKTsKPiAgCWlm IChJU19FUlIodG9wb2xvZ3lfc3RhdGUpKQo+ICAJCXJldHVybiBQVFJfRVJSKHRvcG9sb2d5X3N0 YXRlKTsKPiAgCj4gLQkvKiBXZSBjYW5ub3QgcmVseSBvbiBwb3J0LT52Y3BpLm51bV9zbG90cyB0 byB1cGRhdGUKPiAtCSAqIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyBhcyB0aGUgcG9ydCBt YXkgbm90IGV4aXN0IGlmIHRoZSBwYXJlbnQKPiAtCSAqIGJyYW5jaCBkZXZpY2Ugd2FzIHVucGx1 Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnkgdHJhY2tpbmcKPiAtCSAqIHBlci1wb3J0IHNs b3QgYWxsb2NhdGlvbiBpbiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlIGluc3RlYWQgb2YKPiAt CSAqIGRlcGVuZGluZyBvbiB0aGUgY2FsbGVyIHRvIHRlbGwgdXMgaG93IG1hbnkgc2xvdHMgdG8g cmVsZWFzZS4KPiAtCSAqLwo+IC0JdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzICs9IHNsb3Rz Owo+IC0JRFJNX0RFQlVHX0tNUygidmNwaSBzbG90cyByZWxlYXNlZD0lZCwgYXZhaWw9JWRcbiIs Cj4gLQkJCXNsb3RzLCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpOwo+ICsJbGlzdF9mb3Jf ZWFjaF9lbnRyeShwb3MsICZ0b3BvbG9neV9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiArCQlpZiAo cG9zLT5wb3J0ID09IHBvcnQpIHsKPiArCQkJZm91bmQgPSB0cnVlOwo+ICsJCQlicmVhazsKPiAr CQl9Cj4gKwl9Cj4gKwlpZiAoV0FSTl9PTighZm91bmQpKSB7Cj4gKwkJRFJNX0VSUk9SKCJubyBW Q1BJIGZvciBbTVNUIFBPUlQ6JXBdIGZvdW5kIGluIG1zdCBzdGF0ZSAlcFxuIiwKPiArCQkJICBw b3J0LCAmdG9wb2xvZ3lfc3RhdGUtPmJhc2UpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ ICsKPiArCURSTV9ERUJVR19BVE9NSUMoIltNU1QgUE9SVDolcF0gVkNQSSAlZCAtPiAwXG4iLCBw b3J0LCBwb3MtPnZjcGkpOwo+ICsJaWYgKHBvcy0+dmNwaSkgewo+ICsJCWRybV9kcF9tc3RfcHV0 X3BvcnRfbWFsbG9jKHBvcnQpOwo+ICsJCXBvcy0+dmNwaSA9IDA7Cj4gKwl9Cj4gIAo+ICAJcmV0 dXJuIDA7Cj4gIH0KPiBAQCAtMzM5NSwxNSArMzQ3OCw0MiBAQCBzdGF0aWMgdm9pZCBkcm1fZHBf ZGVzdHJveV9jb25uZWN0b3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gIHN0YXRp YyBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKgo+ICBkcm1fZHBfbXN0X2R1cGxpY2F0ZV9zdGF0 ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpvYmopCj4gIHsKPiAtCXN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X3N0YXRlICpzdGF0ZTsKPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0 YXRlICpzdGF0ZSwgKm9sZF9zdGF0ZSA9Cj4gKwkJdG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKG9i ai0+c3RhdGUpOwo+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBvcywgKnZjcGk7 Cj4gIAo+IC0Jc3RhdGUgPSBrbWVtZHVwKG9iai0+c3RhdGUsIHNpemVvZigqc3RhdGUpLCBHRlBf S0VSTkVMKTsKPiArCXN0YXRlID0ga21lbWR1cChvbGRfc3RhdGUsIHNpemVvZigqc3RhdGUpLCBH RlBfS0VSTkVMKTsKPiAgCWlmICghc3RhdGUpCj4gIAkJcmV0dXJuIE5VTEw7Cj4gIAo+ICAJX19k cm1fYXRvbWljX2hlbHBlcl9wcml2YXRlX29ial9kdXBsaWNhdGVfc3RhdGUob2JqLCAmc3RhdGUt PmJhc2UpOwo+ICAKPiArCUlOSVRfTElTVF9IRUFEKCZzdGF0ZS0+dmNwaXMpOwo+ICsJc3RhdGUt PnZjcGlfYWxsb2NhdGVkID0gZmFsc2U7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3Ms ICZvbGRfc3RhdGUtPnZjcGlzLCBuZXh0KSB7Cj4gKwkJLyogUHJ1bmUgbGVmdG92ZXIgZnJlZWQg VkNQSSBhbGxvY2F0aW9ucyAqLwo+ICsJCWlmICghcG9zLT52Y3BpKQo+ICsJCQljb250aW51ZTsK PiArCj4gKwkJdmNwaSA9IGttZW1kdXAocG9zLCBzaXplb2YoKnZjcGkpLCBHRlBfS0VSTkVMKTsK PiArCQlpZiAoIXZjcGkpCj4gKwkJCWdvdG8gZmFpbDsKPiArCj4gKwkJZHJtX2RwX21zdF9nZXRf cG9ydF9tYWxsb2ModmNwaS0+cG9ydCk7Cj4gKwkJbGlzdF9hZGQoJnZjcGktPm5leHQsICZzdGF0 ZS0+dmNwaXMpOwo+ICsJfQo+ICsKPiAgCXJldHVybiAmc3RhdGUtPmJhc2U7Cj4gKwo+ICtmYWls Ogo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgdmNwaSwgJnN0YXRlLT52Y3Bpcywg bmV4dCkgewo+ICsJCWRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKHBvcy0+cG9ydCk7Cj4gKwkJ a2ZyZWUocG9zKTsKPiArCX0KPiArCWtmcmVlKHN0YXRlKTsKPiArCj4gKwlyZXR1cm4gTlVMTDsK PiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgZHJtX2RwX21zdF9kZXN0cm95X3N0YXRlKHN0cnVjdCBk cm1fcHJpdmF0ZV9vYmogKm9iaiwKPiBAQCAtMzQxMSwxMCArMzUyMSwxMDkgQEAgc3RhdGljIHZv aWQgZHJtX2RwX21zdF9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaiwK PiAgewo+ICAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSA9Cj4g IAkJdG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlKTsKPiArCXN0cnVjdCBkcm1fZHBfdmNw aV9hbGxvY2F0aW9uICpwb3MsICp0bXA7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KHBvcywgdG1wLCAmbXN0X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ICsJCS8qIFdlIG9ubHkga2Vl cCByZWZlcmVuY2VzIHRvIHBvcnRzIHdpdGggbm9uLXplcm8gVkNQSXMgKi8KPiArCQlpZiAocG9z LT52Y3BpKQo+ICsJCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhwb3MtPnBvcnQpOwo+ICsJ CWtmcmVlKHBvcyk7Cj4gKwl9Cj4gIAo+ICAJa2ZyZWUobXN0X3N0YXRlKTsKPiAgfQo+ICAKPiAr c3RhdGljIGlubGluZSBpbnQKPiArZHJtX2RwX21zdF9hdG9taWNfY2hlY2tfdG9wb2xvZ3lfc3Rh dGUoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gKwkJCQkgICAgICAgc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSkKPiArewo+ICsJc3RydWN0 IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnZjcGk7Cj4gKwlpbnQgYXZhaWxfc2xvdHMgPSA2Mywg cmV0Owo+ICsKPiArCS8qIFRoZXJlJ3Mgbm8gcG9zc2libGUgc2NlbmFyaW8gd2hlcmUgcmVsZWFz aW5nIFZDUEkgb3Iga2VlcGluZyBpdCB0aGUKPiArCSAqIHNhbWUgd291bGQgbWFrZSB0aGUgc3Rh dGUgaW52YWxpZAo+ICsJICovCj4gKwlpZiAoIW1zdF9zdGF0ZS0+dmNwaV9hbGxvY2F0ZWQpIHsK PiArCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIE1HUjolcF0gc3RhdGUgJXAgYWxsb2NhdGVzIG5v IFZDUEksIGNoZWNrIHNraXBwZWRcbiIsCj4gKwkJCQkgbWdyLCAmbXN0X3N0YXRlLT5iYXNlKTsK PiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZjcGksICZt c3Rfc3RhdGUtPnZjcGlzLCBuZXh0KSB7Cj4gKwkJLyogUmVsZWFzaW5nIFZDUEkgaXMgYWx3YXlz IE9LLWV2ZW4gaWYgdGhlIHBvcnQgaXMgZ29uZSAqLwo+ICsJCWlmICghdmNwaS0+dmNwaSkgewo+ ICsJCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIHJlbGVhc2VzIGFsbCBWQ1BJIHNs b3RzXG4iLAo+ICsJCQkJCSB2Y3BpLT5wb3J0KTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsK PiArCQlpZiAoIWRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnQodmNwaS0+cG9ydCkpIHsKCkkg dGhpbmsgdGhpcyBjb3VsZCBibG93IHVwLiBTY2VuYXJpbzoKLSAyIHBvcnRzLCBib3RoIHBsdWdn ZWQgaW4gaW4gdGhlIHNhbWUgZHAgbXN0IGNvbm5lY3RvcgotIGJvdGggZ2V0IHVucGx1Z2dlZAot IHVzZXJzcGFjZSBzaHV0cyBkb3duIHRoZSBmaXJzdCBvdXRwdXQgKGJlY2F1c2UgaXQncyBsZWdh Y3kgdXNlcnNwYWNlCiAgaXQncyBub3QgZ29pbmcgdG8gZG8gYm90aCB0b2dldGhlciwgb3IgbWF5 YmUgdGhlIGhvdHBsdWdzIGhhcHBlbmVkIGNsb3NlCiAgdG9nZXRoZXIgYnV0IG5vdCBhdCB0aGUg c2FtZSB0aW1lKQotIGZpcnN0IHBvcnQgaXMgc2h1dCBkb3duIChzbyBwYXNzZXMgaGVyZSksIGJ1 dCBzZWNvbmQgcG9ydCBzdGlsbCBoYXMgaXQncwogIHZjcGkgYWxsb2NhdGlvbiBhbmQgd291bGQg Y2F1c2UgYSAtRUlOVkFMIGhlcmUuCgpJIHRoaW5rIHdlIGNhbiByZW1vdmUgdGhpcyB0b3BvbG9n eV9nZXQgY2hlY2sgaGVyZSwgYW5kIGFzc3VtZSB0aGF0IHRoYXQKZHJtX2Nvbm5lY3Rvcl9pc191 bnJlZ2lzdGVyZWQgZWFybGllciB3aWxsIGNhdGNoIGFueXRoaW5nIGJhZC4gT3IKYWx0ZXJuYXRp dmVseSBjaGVjayB3aGV0aGVyIHRoaXMgcG9ydCBhbHJlYWR5IGhhZCB2Y3BpIGFsbG9jYXRpb24g KHRocm91Z2gKc29tZSB2cGNpX2NoYW5nZWQgYm9vbCBpbiB0aGUgdmNwaSBhbGxvY2F0aW9uIHN0 cnVjdHVyZSksIGJ1dCB0aGF0IHNlZW1zIGEKYml0IHRvbyBjb21wbGljYXRlZCB0YmguCgpCcmFp biBpcyBpbiB3L2UgbW9kZSBhbHJlYWR5LCBzbyBubyBmdWxsIGRldGFpbGVkIHJldmlldyAoYW5k IEkgdGhpbmsgd2UKbmVlZCB0byBjb252ZXJnZSBvbiB0aGUgZ2V0L3B1dCBiaWtlc2hlZCBmaXJz dCksIGJ1dCBsb29rcyBnb29kIHRvIG1lCm92ZXJhbGwuCgpDaGVlcnMsIERhbmllbAoKPiArCQkJ RFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVwXSBpcyBnb25lIGJ1dCBzdGlsbCBoYXMgVkNQ SSwgY2Fubm90IGFkZCBuZXcgVkNQSVxuIiwKPiArCQkJCQkgdmNwaS0+cG9ydCk7Cj4gKwkJCXJl dHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCj4gKwkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JU OiVwXSByZXF1aXJlcyAlZCB2Y3BpIHNsb3RzXG4iLAo+ICsJCQkJIHZjcGktPnBvcnQsIHZjcGkt PnZjcGkpOwo+ICsKPiArCQlhdmFpbF9zbG90cyAtPSB2Y3BpLT52Y3BpOwo+ICsJCWlmIChhdmFp bF9zbG90cyA8IDApIHsKPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVwXSBub3Qg ZW5vdWdoIFZDUEkgc2xvdHMgaW4gbXN0IHN0YXRlICVwIChhdmFpbD0lZClcbiIsCj4gKwkJCQkJ IHZjcGktPnBvcnQsIG1zdF9zdGF0ZSwKPiArCQkJCQkgYXZhaWxfc2xvdHMgKyB2Y3BpLT52Y3Bp KTsKPiArCQkJcmV0ID0gLUVOT1NQQzsKPiArCQkJZ290byBwb3J0X2ZhaWw7Cj4gKwkJfQo+ICsK PiArCQlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHZjcGktPnBvcnQpOwo+ICsJfQo+ICsJ RFJNX0RFQlVHX0FUT01JQygiW01TVCBNR1I6JXBdIG1zdCBzdGF0ZSAlcCBWQ1BJIGF2YWlsPSVk IHVzZWQ9JWRcbiIsCj4gKwkJCSBtZ3IsIG1zdF9zdGF0ZSwgYXZhaWxfc2xvdHMsCj4gKwkJCSA2 MyAtIGF2YWlsX3Nsb3RzKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArcG9ydF9mYWlsOgo+ICsJZHJt X2RwX21zdF90b3BvbG9neV9wdXRfcG9ydCh2Y3BpLT5wb3J0KTsKPiArCXJldHVybiByZXQ7Cj4g K30KPiArCj4gKy8qKgo+ICsgKiBkcm1fZHBfbXN0X2F0b21pY19jaGVjayAtIENoZWNrIHRoYXQg dGhlIG5ldyBzdGF0ZSBvZiBhbiBNU1QgdG9wb2xvZ3kgaW4gYW4KPiArICogYXRvbWljIHVwZGF0 ZSBpcyB2YWxpZAo+ICsgKiBAc3RhdGU6IFBvaW50ZXIgdG8gdGhlIG5ldyAmc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfc3RhdGUKPiArICoKPiArICogQ2hlY2tzIHRoZSBnaXZlbiB0b3BvbG9n eSBzdGF0ZSBmb3IgYW4gYXRvbWljIHVwZGF0ZSB0byBlbnN1cmUgdGhhdCBpdCdzCj4gKyAqIHZh bGlkLiBUaGlzIGluY2x1ZGVzIGNoZWNraW5nIHdoZXRoZXIgdGhlcmUncyBlbm91Z2ggYmFuZHdp ZHRoIHRvIHN1cHBvcnQKPiArICogdGhlIG5ldyBWQ1BJIGFsbG9jYXRpb25zIGluIHRoZSBhdG9t aWMgdXBkYXRlLgo+ICsgKgo+ICsgKiBBbnkgYXRvbWljIGRyaXZlcnMgc3VwcG9ydGluZyBEUCBN U1QgbXVzdCBtYWtlIHN1cmUgdG8gY2FsbCB0aGlzIGFmdGVyCj4gKyAqIGNoZWNraW5nIHRoZSBy ZXN0IG9mIHRoZWlyIHN0YXRlIGluIHRoZWlyCj4gKyAqICZkcm1fbW9kZV9jb25maWdfZnVuY3Mu YXRvbWljX2NoZWNrKCkgY2FsbGJhY2suCj4gKyAqCj4gKyAqIFNlZSBhbHNvOgo+ICsgKiBkcm1f ZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4gKyAqIGRybV9kcF9hdG9taWNfcmVsZWFzZV92 Y3BpX3Nsb3RzKCkKPiArICoKPiArICogUmV0dXJuczoKPiArICoKPiArICogMCBpZiB0aGUgbmV3 IHN0YXRlIGlzIHZhbGlkLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiArICovCj4g K2ludCBkcm1fZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOwo+ICsJc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZTsKPiArCWludCBpLCByZXQg PSAwOwo+ICsKPiArCWZvcl9lYWNoX25ld19tc3RfbWdyX2luX3N0YXRlKHN0YXRlLCBtZ3IsIG1z dF9zdGF0ZSwgaSkgewo+ICsJCXJldCA9IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrX3RvcG9sb2d5 X3N0YXRlKG1nciwgbXN0X3N0YXRlKTsKPiArCQlpZiAocmV0KQo+ICsJCQlicmVhazsKPiArCX0K PiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9hdG9t aWNfY2hlY2spOwo+ICsKPiAgY29uc3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzIGRy bV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGVfZnVuY3MgPSB7Cj4gIAkuYXRvbWljX2R1cGxpY2F0ZV9z dGF0ZSA9IGRybV9kcF9tc3RfZHVwbGljYXRlX3N0YXRlLAo+ICAJLmF0b21pY19kZXN0cm95X3N0 YXRlID0gZHJtX2RwX21zdF9kZXN0cm95X3N0YXRlLAo+IEBAIC0zNDk3LDkgKzM3MDYsNyBAQCBp bnQgZHJtX2RwX21zdF90b3BvbG9neV9tZ3JfaW5pdChzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9n eV9tZ3IgKm1nciwKPiAgCQlyZXR1cm4gLUVOT01FTTsKPiAgCj4gIAltc3Rfc3RhdGUtPm1nciA9 IG1ncjsKPiAtCj4gLQkvKiBtYXguIHRpbWUgc2xvdHMgLSBvbmUgc2xvdCBmb3IgTVRQIGhlYWRl ciAqLwo+IC0JbXN0X3N0YXRlLT5hdmFpbF9zbG90cyA9IDYzOwo+ICsJSU5JVF9MSVNUX0hFQUQo Jm1zdF9zdGF0ZS0+dmNwaXMpOwo+ICAKPiAgCWRybV9hdG9taWNfcHJpdmF0ZV9vYmpfaW5pdChk ZXYsICZtZ3ItPmJhc2UsCj4gIAkJCQkgICAgJm1zdF9zdGF0ZS0+YmFzZSwKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gaW5kZXggMmMzZjNmNjhkNTA2Li44NjhjYjg5N2Y2Mjkg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gQEAgLTEyNjkwLDYgKzEy NjkwLDEwIEBAIHN0YXRpYyBpbnQgaW50ZWxfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4gIAkJCQkgICAgICAgIlttb2Rlc2V0XSIgOiAiW2Zhc3RzZXRdIik7Cj4gIAl9Cj4g IAo+ICsJcmV0ID0gZHJtX2RwX21zdF9hdG9taWNfY2hlY2soc3RhdGUpOwo+ICsJaWYgKHJldCkK PiArCQlyZXR1cm4gcmV0Owo+ICsKPiAgCWlmIChhbnlfbXMpIHsKPiAgCQlyZXQgPSBpbnRlbF9t b2Rlc2V0X2NoZWNrcyhzdGF0ZSk7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcF9tc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21zdC5j Cj4gaW5kZXggNGQ2Y2VkMzRkNDY1Li42NzU0ZDc5MjJhMzQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcF9tc3QuYwo+IEBAIC00MSw4ICs0MSwxMyBAQCBzdGF0aWMgYm9vbCBpbnRlbF9k cF9tc3RfY29tcHV0ZV9jb25maWcoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gIAlz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gY29ubl9zdGF0ZS0+Y29ubmVjdG9yOwo+ ICAJdm9pZCAqcG9ydCA9IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpLT5wb3J0Owo+ICAJ c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gcGlwZV9jb25maWctPmJhc2Uuc3RhdGU7 Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBwaXBlX2NvbmZpZy0+YmFzZS5jcnRjOwo+ICsJ c3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSA9Cj4gKwkJZHJtX2F0b21pY19n ZXRfb2xkX2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOwo+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRl ICpuZXdfY3J0Y19zdGF0ZSA9ICZwaXBlX2NvbmZpZy0+YmFzZTsKPiAgCWludCBicHA7Cj4gLQlp bnQgbGFuZV9jb3VudCwgc2xvdHMgPSAwOwo+ICsJaW50IGxhbmVfY291bnQsIHNsb3RzID0KPiAr CQl0b19pbnRlbF9jcnRjX3N0YXRlKG9sZF9jcnRjX3N0YXRlKS0+ZHBfbV9uLnR1Owo+ICAJY29u c3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUgPSAmcGlwZV9jb25maWct PmJhc2UuYWRqdXN0ZWRfbW9kZTsKPiAgCWludCBtc3RfcGJuOwo+ICAJYm9vbCBjb25zdGFudF9u ID0gZHJtX2RwX2hhc19xdWlyaygmaW50ZWxfZHAtPmRlc2MsCj4gQEAgLTc3LDggKzgyLDEyIEBA IHN0YXRpYyBib29sIGludGVsX2RwX21zdF9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfZW5j b2RlciAqZW5jb2RlciwKPiAgCW1zdF9wYm4gPSBkcm1fZHBfY2FsY19wYm5fbW9kZShhZGp1c3Rl ZF9tb2RlLT5jcnRjX2Nsb2NrLCBicHApOwo+ICAJcGlwZV9jb25maWctPnBibiA9IG1zdF9wYm47 Cj4gIAo+IC0JLyogWm9tYmllIGNvbm5lY3RvcnMgY2FuJ3QgaGF2ZSBWQ1BJIHNsb3RzICovCj4g LQlpZiAoIWRybV9jb25uZWN0b3JfaXNfdW5yZWdpc3RlcmVkKGNvbm5lY3RvcikpIHsKPiArCS8q IE9ubHkgY2hhbmdlIFZDUEkgYWxsb2NhdGlvbiBvbiBhY3R1YWwgbW9kZSBjaGFuZ2VzLCB0byBw cmV2ZW50IHVzCj4gKwkgKiBmcm9tIHRyeWluZyB0byBhbGxvY2F0ZSBWQ1BJIHRvIHBvcnRzIHRo YXQgbm8gbG9uZ2VyIGV4aXN0IHdoZW4gd2UKPiArCSAqIG1heSBqdXN0IGJlIHRyeWluZyB0byBk aXNhYmxlIERQTVMgb24gdGhlbQo+ICsJICovCj4gKwlpZiAobmV3X2NydGNfc3RhdGUtPm1vZGVf Y2hhbmdlZCB8fAo+ICsJICAgIG5ld19jcnRjX3N0YXRlLT5jb25uZWN0b3JzX2NoYW5nZWQpIHsK PiAgCQlzbG90cyA9IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0YXRlLAo+ICAJCQkJ CQkgICAgICAmaW50ZWxfZHAtPm1zdF9tZ3IsCj4gIAkJCQkJCSAgICAgIHBvcnQsCj4gQEAgLTEw NywzNiArMTE2LDM5IEBAIHN0YXRpYyBib29sIGludGVsX2RwX21zdF9jb21wdXRlX2NvbmZpZyhz dHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiAgCXJldHVybiB0cnVlOwo+ICB9Cj4gIAo+ IC1zdGF0aWMgaW50IGludGVsX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKPiAtCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqbmV3X2Nvbm5f c3RhdGUpCj4gK3N0YXRpYyBpbnQKPiAraW50ZWxfZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0 YXRlICpuZXdfY29ubl9zdGF0ZSkKPiAgewo+ICsJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50 ZWxfY29ubmVjdG9yID0KPiArCQl0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKTsKPiArCXN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyID0KPiArCQkmaW50ZWxfY29ubmVjdG9y LT5tc3RfcG9ydC0+bXN0X21ncjsKPiArCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQgPSBp bnRlbF9jb25uZWN0b3ItPnBvcnQ7Cj4gIAlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUg PSBuZXdfY29ubl9zdGF0ZS0+c3RhdGU7Cj4gLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAq b2xkX2Nvbm5fc3RhdGU7Cj4gLQlzdHJ1Y3QgZHJtX2NydGMgKm9sZF9jcnRjOwo+IC0Jc3RydWN0 IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+IC0JaW50IHNsb3RzLCByZXQgPSAwOwo+ICsJ c3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlID0KPiArCQlkcm1fYXRv bWljX2dldF9vbGRfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IpOwo+ICsJc3RydWN0 IGRybV9jcnRjICpvbGRfY3J0YyA9IG9sZF9jb25uX3N0YXRlLT5jcnRjLAo+ICsJCQkqbmV3X2Ny dGMgPSBuZXdfY29ubl9zdGF0ZS0+Y3J0YzsKPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xk X2NydGNfc3RhdGUsICpuZXdfY3J0Y19zdGF0ZTsKPiAgCj4gLQlvbGRfY29ubl9zdGF0ZSA9IGRy bV9hdG9taWNfZ2V0X29sZF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5lY3Rvcik7Cj4gLQlv bGRfY3J0YyA9IG9sZF9jb25uX3N0YXRlLT5jcnRjOwo+ICAJaWYgKCFvbGRfY3J0YykKPiAtCQly ZXR1cm4gcmV0Owo+ICsJCXJldHVybiAwOwo+ICAKPiAtCWNydGNfc3RhdGUgPSBkcm1fYXRvbWlj X2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwgb2xkX2NydGMpOwo+IC0Jc2xvdHMgPSB0b19pbnRl bF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpLT5kcF9tX24udHU7Cj4gLQlpZiAoZHJtX2F0b21pY19j cnRjX25lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSkgJiYgc2xvdHMgPiAwKSB7Cj4gLQkJc3RydWN0 IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4gLQkJc3RydWN0IGRybV9lbmNvZGVyICpv bGRfZW5jb2RlcjsKPiArCW9sZF9jcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfb2xkX2NydGNf c3RhdGUoc3RhdGUsIG9sZF9jcnRjKTsKPiArCWlmICghb2xkX2NydGNfc3RhdGUgfHwKPiArCSAg ICAhdG9faW50ZWxfY3J0Y19zdGF0ZShvbGRfY3J0Y19zdGF0ZSktPmRwX21fbi50dSkKPiArCQly ZXR1cm4gMDsKPiAgCj4gLQkJb2xkX2VuY29kZXIgPSBvbGRfY29ubl9zdGF0ZS0+YmVzdF9lbmNv ZGVyOwo+IC0JCW1nciA9ICZlbmNfdG9fbXN0KG9sZF9lbmNvZGVyKS0+cHJpbWFyeS0+ZHAubXN0 X21ncjsKPiArCS8qIElmIHdlIHN3aXRjaGVkIENSVENzLCBjbGVhciB0aGUgcHJldmlvdXMgb25l J3MgYWxsb2NhdGlvbiAqLwo+ICsJbmV3X2NydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdf Y3J0Y19zdGF0ZShzdGF0ZSwgb2xkX2NydGMpOwo+ICsJaWYgKG5ld19jcnRjX3N0YXRlLT5jb25u ZWN0b3JzX2NoYW5nZWQgJiYgIW5ld19jcnRjX3N0YXRlLT5lbmFibGUpCj4gKwkJdG9faW50ZWxf Y3J0Y19zdGF0ZShuZXdfY3J0Y19zdGF0ZSktPmRwX21fbi50dSA9IDA7Cj4gIAo+IC0JCXJldCA9 IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0YXRlLCBtZ3IsIHNsb3RzKTsKPiAt CQlpZiAocmV0KQo+IC0JCQlEUk1fREVCVUdfS01TKCJmYWlsZWQgcmVsZWFzaW5nICVkIHZjcGkg c2xvdHM6JWRcbiIsIHNsb3RzLCByZXQpOwo+IC0JCWVsc2UKPiAtCQkJdG9faW50ZWxfY3J0Y19z dGF0ZShjcnRjX3N0YXRlKS0+ZHBfbV9uLnR1ID0gMDsKPiAtCX0KPiAtCXJldHVybiByZXQ7Cj4g KwlpZiAobmV3X2NydGMpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0dXJuIGRybV9kcF9hdG9t aWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0YXRlLCBtZ3IsIHBvcnQpOwo+ICB9Cj4gIAo+ICBzdGF0 aWMgdm9pZCBpbnRlbF9tc3RfZGlzYWJsZV9kcChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rl ciwKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaCBiL2luY2x1 ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKPiBpbmRleCBiOGE4ZDc1NDEwZDAuLjc5ZTNmOWM3 MzBhNSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCj4gKysr IGIvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+IEBAIC00MTIsOSArNDEyLDE2IEBA IHN0cnVjdCBkcm1fZHBfcGF5bG9hZCB7Cj4gIAo+ICAjZGVmaW5lIHRvX2RwX21zdF90b3BvbG9n eV9zdGF0ZSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3Rh dGUsIGJhc2UpCj4gIAo+ICtzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiB7Cj4gKwlzdHJ1 Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0Owo+ICsJaW50IHZjcGk7Cj4gKwlzdHJ1Y3QgbGlzdF9o ZWFkIG5leHQ7Cj4gK307Cj4gKwo+ICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSB7 Cj4gIAlzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgYmFzZTsKPiAtCWludCBhdmFpbF9zbG90czsK PiArCXN0cnVjdCBsaXN0X2hlYWQgdmNwaXM7Cj4gKwl1OCB2Y3BpX2FsbG9jYXRlZDsKPiAgCXN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOwo+ICB9Owo+ICAKPiBAQCAtNjI1LDE0 ICs2MzIsMTcgQEAgdm9pZCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9zdXNwZW5kKHN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsKPiAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyX3Jlc3VtZShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncik7Cj4gIHN0cnVj dCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lf c3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICAJCQkJCQkJCSAgICBzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncik7Cj4gLWludCBkcm1fZHBfYXRvbWljX2Zp bmRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gLQkJCQkgIHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+IC0JCQkJICBzdHJ1Y3QgZHJtX2Rw X21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKTsKPiAtaW50IGRybV9kcF9hdG9taWNfcmVsZWFzZV92 Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiAtCQkJCSAgICAgc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gLQkJCQkgICAgIGludCBzbG90cyk7 Cj4gK2ludCBfX211c3RfY2hlY2sKPiArZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1nciwKPiArCQkJICAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAq cG9ydCwgaW50IHBibik7Cj4gK2ludCBfX211c3RfY2hlY2sKPiArZHJtX2RwX2F0b21pY19yZWxl YXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICsJCQkJIHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICsJCQkJIHN0cnVjdCBkcm1fZHBf bXN0X3BvcnQgKnBvcnQpOwo+ICBpbnQgZHJtX2RwX3NlbmRfcG93ZXJfdXBkb3duX3BoeShzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiAgCQkJCSBzdHJ1Y3QgZHJtX2RwX21z dF9wb3J0ICpwb3J0LCBib29sIHBvd2VyX3VwKTsKPiAraW50IF9fbXVzdF9jaGVjayBkcm1fZHBf bXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ICAKPiAg dm9pZCBkcm1fZHBfbXN0X2dldF9wb3J0X21hbGxvYyhzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpw b3J0KTsKPiAgdm9pZCBkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhzdHJ1Y3QgZHJtX2RwX21z dF9wb3J0ICpwb3J0KTsKPiAtLSAKPiAyLjE5LjIKPiAKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3 YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOb3V2ZWF1IG1haWxp bmcgbGlzdApOb3V2ZWF1QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL25vdXZlYXUK