From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Subject: Re: [PATCH v3 07/15] argo: implement the register op Date: Thu, 10 Jan 2019 12:24:53 +0100 Message-ID: References: <1546846968-7372-1-git-send-email-christopher.w.clark@gmail.com> <1546846968-7372-8-git-send-email-christopher.w.clark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ghYST-0003Za-Gc for xen-devel@lists.xenproject.org; Thu, 10 Jan 2019 11:25:09 +0000 Received: by mail-oi1-x236.google.com with SMTP id j21so8972105oii.8 for ; Thu, 10 Jan 2019 03:25:06 -0800 (PST) In-Reply-To: <1546846968-7372-8-git-send-email-christopher.w.clark@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Christopher Clark Cc: Stefano Stabellini , Wei Liu , Ross Philipson , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Jason Andryuk , Ian Jackson , Julien Grall , Tim Deegan , Daniel Smith , Rich Persaud , Paul Durrant , Jan Beulich , xen-devel , James McKenzie , Eric Chanudet , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org IE9uIE1vbiwgSmFuIDcsIDIwMTkgYXQgODo0NCBBTSBDaHJpc3RvcGhlciBDbGFyawo8Y2hyaXN0 b3BoZXIudy5jbGFya0BnbWFpbC5jb20+IHdyb3RlOgo+Cj4gVGhlIHJlZ2lzdGVyIG9wIGlzIHVz ZWQgYnkgYSBkb21haW4gdG8gcmVnaXN0ZXIgYSByZWdpb24gb2YgbWVtb3J5IGZvcgo+IHJlY2Vp dmluZyBtZXNzYWdlcyBmcm9tIGVpdGhlciBhIHNwZWNpZmllZCBvdGhlciBkb21haW4sIG9yLCBp ZiBzcGVjaWZ5aW5nIGEKPiB3aWxkY2FyZCwgYW55IGRvbWFpbi4KPgo+IFRoaXMgb3BlcmF0aW9u IGNyZWF0ZXMgYSBtYXBwaW5nIHdpdGhpbiBYZW4ncyBwcml2YXRlIGFkZHJlc3Mgc3BhY2UgdGhh dAo+IHdpbGwgcmVtYWluIHJlc2lkZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHJpbmcuIElu IHN1YnNlcXVlbnQgY29tbWl0cywKPiB0aGUgaHlwZXJ2aXNvciB3aWxsIHVzZSB0aGlzIG1hcHBp bmcgdG8gY29weSBkYXRhIGZyb20gYSBzZW5kaW5nIGRvbWFpbiBpbnRvCj4gdGhpcyByZWdpc3Rl cmVkIHJpbmcsIG1ha2luZyBpdCBhY2Nlc3NpYmxlIHRvIHRoZSBkb21haW4gdGhhdCByZWdpc3Rl cmVkIHRoZQo+IHJpbmcgdG8gcmVjZWl2ZSBkYXRhLgo+Cj4gV2lsZGNhcmQgYW55LXNlbmRlciBy aW5ncyBhcmUgZGVmYXVsdCBkaXNhYmxlZCBhbmQgcmVnaXN0cmF0aW9uIHdpbGwgYmUKPiByZWZ1 c2VkIHdpdGggRVBFUk0gdW5sZXNzIHRoZXkgaGF2ZSBiZWVuIHNwZWNpZmljYWxseSBlbmFibGVk IHdpdGggdGhlCj4gYXJnby1tYWMgYm9vdCBvcHRpb24gaW50cm9kdWNlZCBoZXJlLiBUaGUgcmVh c29uIHdoeSB0aGUgZGVmYXVsdCBmb3IKPiB3aWxkY2FyZCByaW5ncyBpcyAnZGVueScgaXMgdGhh dCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gbWVhbnMgdG8gcHJvdGVjdCB0aGUKPiByaW5nIGZyb20g RG9TIGJ5IGEgbm9pc3kgZG9tYWluIHNwYW1taW5nIHRoZSByaW5nLCBhZmZlY3Rpbmcgb3RoZXIg ZG9tYWlucwo+IGFiaWxpdHkgdG8gc2VuZCB0byBpdC4gVGhpcyB3aWxsIGJlIGFkZHJlc3NlZCB3 aXRoIFhTTSBwb2xpY3kgY29udHJvbHMgaW4KPiBzdWJzZXF1ZW50IHdvcmsuCj4KPiBTaW5jZSBk ZW55aW5nIGFjY2VzcyB0byBhbnktc2VuZGVyIHJpbmdzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rp b25hbAo+IGNvbnN0cmFpbnQsIGEgbmV3IGJvb3RwYXJhbSBpcyBwcm92aWRlZCB0byBlbmFibGUg b3ZlcnJpZGluZyB0aGlzOgo+ICAiYXJnby1tYWMiIHZhcmlhYmxlIGhhcyBhbGxvd2VkIHZhbHVl czogJ3Blcm1pc3NpdmUnIGFuZCAnZW5mb3JjaW5nJy4KPiBFdmVuIHRob3VnaCB0aGlzIGlzIGEg Ym9vbGVhbiB2YXJpYWJsZSwgdXNlIHRoZXNlIGRlc2NyaXB0aXZlIHN0cmluZ3MgaW4KPiBvcmRl ciB0byBtYWtlIGl0IG9idmlvdXMgdG8gYW4gYWRtaW5pc3RyYXRvciB0aGF0IHRoaXMgaGFzIHBv dGVudGlhbAo+IHNlY3VyaXR5IGltcGFjdC4KPgo+IFRoZSBwMm0gdHlwZSBvZiB0aGUgbWVtb3J5 IHN1cHBsaWVkIGJ5IHRoZSBndWVzdCBmb3IgdGhlIHJpbmcgbXVzdCBiZQo+IHAybV9yYW1fcncg YW5kIHRoZSBtZW1vcnkgd2lsbCBiZSBwaW5uZWQgYXMgUEdUX3dyaXRhYmxlX3BhZ2Ugd2hpbGUg dGhlIHJpbmcKPiBpcyByZWdpc3RlcmVkLgo+Cj4geGVuX2FyZ29fcGFnZV9kZXNjcl90IHR5cGUg aXMgaW50cm9kdWNlZCBhcyBhIHBhZ2UgZGVzY3JpcHRvciwgdG8gY29udmV5Cj4gYm90aCB0aGUg cGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgc3RhcnQgb2YgdGhlIHBhZ2UgYW5kIGl0cyBncmFudWxh cml0eS4gVGhlCj4gc21hbGxlc3QgZ3JhbnVsYXJpdHkgcGFnZSBpcyBhc3N1bWVkIHRvIGJlIDQw OTYgYnl0ZXMgYW5kIHRoZSBsb3dlciB0d2VsdmUKPiBiaXRzIG9mIHRoZSB0eXBlIGFyZSB1c2Vk IHRvIGluZGljYXRlIHRoZSBzaXplIG9mIHBhZ2Ugb2YgbWVtb3J5IHN1cHBsaWVkLgo+IFRoZSBp bXBsZW1lbnRhdGlvbiBvZiB0aGUgaHlwZXJjYWxsIG9wIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRz IDRLIHBhZ2VzLgo+Cj4gYXJyYXlfaW5kZXhfbm9zcGVjIGlzIHVzZWQgdG8gZ3VhcmQgdGhlIHJl c3VsdCBvZiB0aGUgcmluZyBpZCBoYXNoIGZ1bmN0aW9uLgo+IFRoaXMgaXMgb3V0IG9mIGFuIGFi dW5kYW5jZSBvZiBjYXV0aW9uLCBzaW5jZSB0aGlzIGlzIGEgdmVyeSBiYXNpYyBoYXNoCj4gZnVu Y3Rpb24gYW5kIGl0IG9wZXJhdGVzIHVwb24gdmFsdWVzIHN1cHBsaWVkIGJ5IHRoZSBndWVzdCBq dXN0IGJlZm9yZQo+IGJlaW5nIHVzZWQgYXMgYW4gYXJyYXkgaW5kZXguCj4KPiBTaWduZWQtb2Zm LWJ5OiBDaHJpc3RvcGhlciBDbGFyayA8Y2hyaXN0b3BoZXIuY2xhcms2QGJhZXN5c3RlbXMuY29t Pgo+IC0tLQo+IHYyIHNlbGY6IGRpc2FsbG93IHJpbmcgcmVzaXplIHZpYSByZXJlZ2lzdGVyCj4g djIgZmVlZGJhY2sgSmFuOiBkcm9wIGNvb2tpZSwgaW1wbGVtZW50IHRlYXJkb3duCj4gdjIgZmVl ZGJhY2sgSmFuOiBkcm9wIG1lc3NhZ2UgZnJvbSBhcmdvX21lc3NhZ2Vfb3AKPiB2MiBzZWxmOiBt b3ZlIGhhc2hfaW5kZXggZnVuY3Rpb24gYmVsb3cgbG9ja2luZyBjb21tZW50Cj4gdjIgc2VsZjog T1ZFUkhBVUwKPiB2MiBzZWxmL0phbjogcmVtb3ZlIHVzZSBvZiBtYWdpYyB2ZXJpZmljYXRpb24g ZmllbGQgYW5kIHRpZHkgdXAKPiB2MiBzZWxmOiBtZXJnZSBtYXggYW5kIG1pbiByaW5nIHNpemUg Y2hlY2sgY2xhdXNlcwo+IHYyIGZlZWRiYWNrIHYxIzEzIFJvZ2VyOiB1c2UgT1Mtc3VwcGxpZWQg cm91bmR1cDsgZHJvcCBmcm9tIHB1YmxpYyBoZWFkZXIKPiB2MiBmZWVkYmFjayAjOSwgSmFuOiB1 c2UgdGhlIGFyZ28tbWFjIGJvb3RwYXJhbSBhdCBwb2ludCBvZiBpbnRyb2R1Y3Rpb24KPiB2MiBm ZWVkYmFjayAjOSwgSmFuOiByZW5hbWUgYm9vdCBvcHQgdmFyaWFibGUgdG8gY29tcGx5IHdpdGgg Y29udmVudGlvbgo+IHYyIGZlZWRiYWNrICM5LCBKYW46IHJlbmFtZSB0aGUgYXJnb19tYWMgYm9v dHBhcmFtIHRvIGFyZ28tbWFjCj4gdjIgZmVlZGJhY2sgIzkgSmFuOiBkb2N1bWVudCBhcmdvIGJv b3Qgb3B0IGluIHhlbi1jb21tYW5kLWxpbmUubWFya2Rvd24KPiB2MSwyIGZlZWRiYWNrIEphbi9S b2dlci9QYXVsOiBkcm9wIGVycm5vIHJldHVybmluZyBndWVzdCBhY2Nlc3MgZnVuY3Rpb25zCj4g djEgZmVlZGJhY2sgUm9nZXIsIEphbjogZHJvcCBhcmdvIHByZWZpeCBvbiBzdGF0aWMgZnVuY3Rp b25zCj4gdjEgZmVlZGJhY2sgUm9nZXI6IHMvcGZuL2dmbi8gYW5kIHJldGlyZSBhbHdheXMtNjQt Yml0IHR5cGUKPiB2Mi4gZmVlZGJhY2sgSmFuOiBkb2N1bWVudCB0aGUgYXJnby1tYWMgYm9vdCBv cHQKPiB2Mi4gZmVlZGJhY2sgSmFuOiBzaW1wbGlmeSByZS1yZWdpc3RlciwgZHJvcCBtYXBwaW5n cwo+IHYxICMxMyBmZWVkYmFjayBKYW46IHJldmlzZSB1c2Ugb2YgZ3Vlc3RfaGFuZGxlX29rYXkg dnMgX19jb3B5IG9wcwo+Cj4gdjEgIzEzIGZlZWRiYWNrLCBKYW46IHJlZ2lzdGVyIG9wIDogcy9F Q09OTlJFRlVTRUQvRVNSQ0gvCj4gdjEgIzUgKCMxMykgZmVlZGJhY2sgUGF1bDogcmVnaXN0ZXIg b3A6IHVzZSBjdXJyZCBpbiBkb19tZXNzYWdlX29wCj4gdjEgIzEzIGZlZWRiYWNrLCBQYXVsOiBy ZWdpc3RlciBvcDogdXNlIG1mbl9lcSBjb21wYXJhdG9yCj4gdjEgIzUgKCMxMykgZmVlZGJhY2sg UGF1bDogcmVnaXN0ZXIgb3A6IHVzZSBjdXJyZCBpbiBhcmdvX3JlZ2lzdGVyX3JpbmcKPiB2MSAj MTMgZmVlZGJhY2sgUGF1bDogcmVnaXN0ZXIgb3A6IHdoaXRlc3BhY2UsIHVuc2lnbmVkLCBib3Vu ZHMgY2hlY2sKPiB2MSAjMTMgZmVlZGJhY2sgUGF1bDogdXNlIG9mIGhleCBpbiBsaW1pdCBjb25z dGFudCBkZWZpbml0aW9uCj4gdjEgIzEzIGZlZWRiYWNrIFBhdWwsIHJlZ2lzdGVyIG9wOiBzZXQg bm1mbnMgb24gbG9vcCB0ZXJtaW5hdGlvbgo+IHYxICMxMyBmZWVkYmFjayBQYXVsOiByZWdpc3Rl ciBvcDogZG8vd2hpbGUgLT4gZ290b3MsIHJlaW5kZW50Cj4gdjEgYXJnb19yaW5nX21hcF9wYWdl OiBkcm9wIHVpbnQzMl90IGZvciB1bnNpZ25lZCBpbnQKPiB2MS4gIzEzIGZlZWRiYWNrIEp1bGll bjogdXNlIHBhZ2UgZGVzY3JpcHRvcnMgaW5zdGVhZCBvZiBncGZucy4KPiAgICAtIGFkZHMgQUJJ IHN1cHBvcnQgZm9yIHBhZ2VzIHdpdGggZGlmZmVyZW50IGdyYW51bGFyaXR5Lgo+IHYxIGZlZWRi YWNrICMxMywgUGF1bDogYWRqdXN0IGxvZyBsZXZlbCBvZiBtZXNzYWdlCj4gdjEgZmVlZGJhY2sg IzEzLCBQYXVsOiB1c2UgZ3ByaW50ayBmb3IgZ3Vlc3QtdHJpZ2dlcmVkIHdhcm5pbmcKPiB2MSBm ZWVkYmFjayAjMTMsIFBhdWw6IGdwcmludGsgYW5kIFhFTkxPR19ERUJVRyBmb3IgcmluZyByZWdp c3RyYXRpb24KPiB2MSBmZWVkYmFjayAjMTMsIFBhdWw6IHVzZSBncHJpbnRrIGZvciBlcnJzIGlu IGFyZ29fcmluZ19tYXBfcGFnZQo+IHYxIGZlZWRiYWNrICMxMywgUGF1bDogdXNlIEVOT01FTSBp ZiBnbG9iYWwgbWFwcGluZyBmYWlscwo+IHYxIGZlZWRiYWNrIFBhdWw6IG92ZXJmbG93IGNoZWNr IGJlZm9yZSBzaGlmdAo+IHYxOiBhZGQgZGVmaW5lIGZvciBjb3B5X2ZpZWxkX3RvX2d1ZXN0X2Vy cm5vCj4gdjE6IGZpeCBncHJpbnRrIHVzZSBmb3IgQVJNIGFzIGl0cyBkZWZuIGRpc2xpa2VzIHNw bGl0IGZvcm1hdCBzdHJpbmdzCj4gdjE6IHVzZSBjb3B5X2ZpZWxkX3RvX2d1ZXN0X2Vycm5vCj4g djEgZmVlZGJhY2sgIzEzLCBKYW46IGFyZ29faGFzaF9mbjogbm8gaW5saW5lLCByZW5hbWUsIGNo YW5nZSB0eXBlCj4gdjEgZmVlZGJhY2sgIzEzLCBQYXVsLCBKYW46IEVGQVVMVCAtPiBFTk9NRU0g aW4gYXJnb19yaW5nX21hcF9wYWdlCj4gdjEgZmVlZGJhY2sgIzEzLCBKYW46IHJlbmFtZSBwYWdl IHZhciBpbiBhcmdvX3JpbmdfbWFwX3BhZ2UKPiB2MSBmZWVkYmFjayAjMTMsIEphbjogc3dpdGNo IHVpbnQ4X3QqIHRvIHZvaWQqIGFuZCBkcm9wIGNhc3QKPiB2MSBmZWVkYmFjayAjMTMsIEphbjog c3dpdGNoIG1lbW9yeSBiYXJyaWVyIHRvIHNtcF93bWIKPiB2MSBmZWVkYmFjayAjMTMsIEphbjog bWFrZSAncmluZycgY29tbWVudCBjb21wbHkgd2l0aCBzaW5nbGUtbGluZSBzdHlsZQo+IHYxIGZl ZWRiYWNrICMxMywgSmFuOiB1c2UgeHphbGxvY19hcnJheSwgZHJvcCBsb29wIE5VTEwgaW5pdAo+ IHYxIGZlZWRiYWNrICMxMywgSmFuOiBpbml0IGJvb2wgd2l0aCBmYWxzZSByYXRoZXIgdGhhbiAw Cj4gdjEgZmVlZGJhY2sgIzEzIEphbjogdXNlIF9fY29weTsgZGVmaW5lIGFuZCB1c2UgX19jb3B5 X2ZpZWxkX3RvX2d1ZXN0X2Vycm5vCj4gdjEgZmVlZGJhY2sgIzEzLCBKYW46IHVzZSB4emFsbG9j LCBkcm9wIGluZGl2aWR1YWwgaW5pdCB6ZXJvZXMKPiB2MSBmZWVkYmFjayAjMTMsIEphbjogcHJl Zml4IHB1YmxpYyBuYW1lc3BhY2Ugd2l0aCB4ZW4KPiB2MSBmZWVkYmFjayAjMTMsIEphbjogYmxh bmsgbGluZSBhZnRlciBvcCBjYXNlIGluIGRvX2FyZ29fbWVzc2FnZV9vcAo+IHYxIHNlbGY6IHJl ZmxvdyBjb21tZW50IGluIGFyZ29fcmluZ19tYXBfcGFnZSB0byB3aXRoaW4gODAgY2hhciBsZW4K PiB2MSBmZWVkYmFjayAjMTMsIFJvZ2VyOiB1c2UgdHJ1ZSBub3QgMSBpbiBhc3NpZ24gdG8gdXBk YXRlX3R4X3B0ciBib29sCj4gdjEgZmVlZGJhY2sgIzIxLCBKYW46IGZvbGQgaW4gdGhlIGFycmF5 X2luZGV4X25vc3BlYyBoYXNoIGZ1bmN0aW9uIGd1YXJkcwo+IHYxIGZlZWRiYWNrICMxOCwgSmFu OiBmb2xkIHRoZSBtYXggcmluZyBjb3VudCBsaW1pdCBpbnRvIHRoZSBzZXJpZXMKPiB2MSBzZWxm OiB1c2UgdW5zaWduZWQgbG9uZyB0eXBlIGZvciBYRU5fQVJHT19SRUdJU1RFUl9GTEFHX01BU0sK PiB2MTogZmVlZGJhY2sgIzE1IEphbjogaGFuZGxlIHVwcGVyLWhhbHZlcyBvZiBoeXBlcmNhbGwg YXJncwo+IHYxLiBmZWVkYmFjayAjMTMgSmFuOiBhZGQgY29tbWVudCByZTogcGFnZSBhbGlnbm1l bnQKPiB2MS4gc2VsZjogY29uZmlybSByaW5nIG1hZ2ljIHByZXNlbmNlIGluIHN1cHBsaWVkIHBh Z2UgYXJyYXkKPiB2MS4gZmVlZGJhY2sgIzEzIEphbjogYWRkIGNvbW1lbnQgcmU6IG1pbmltdW0g cmluZyBzaXplCj4gdjEuIGZlZWRiYWNrICMxMyBSb2dlcjogdXNlIEFTU0VSVF9VTlJFQUNIQUJM RQo+IHYxLiBmZWVkYmFjayBSb2dlcjogYWRkIGNvbW1lbnQgdG8gaGFzaCBmdW5jdGlvbgo+Cj4g IGRvY3MvbWlzYy94ZW4tY29tbWFuZC1saW5lLnBhbmRvYyAgfCAgMTUgKwo+ICB4ZW4vY29tbW9u L2FyZ28uYyAgICAgICAgICAgICAgICAgIHwgNTY2ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPiAgeGVuL2luY2x1ZGUvYXNtLWFybS9ndWVzdF9hY2Nlc3MuaCB8ICAgMiAr Cj4gIHhlbi9pbmNsdWRlL2FzbS14ODYvZ3Vlc3RfYWNjZXNzLmggfCAgIDIgKwo+ICB4ZW4vaW5j bHVkZS9wdWJsaWMvYXJnby5oICAgICAgICAgIHwgIDcyICsrKysrCj4gIHhlbi9pbmNsdWRlL3hs YXQubHN0ICAgICAgICAgICAgICAgfCAgIDEgKwo+ICA2IGZpbGVzIGNoYW5nZWQsIDY1OCBpbnNl cnRpb25zKCspCj4KPiBkaWZmIC0tZ2l0IGEvZG9jcy9taXNjL3hlbi1jb21tYW5kLWxpbmUucGFu ZG9jIGIvZG9jcy9taXNjL3hlbi1jb21tYW5kLWxpbmUucGFuZG9jCj4gaW5kZXggYWVhMTNlYi4u NjhkNDQxNSAxMDA2NDQKPiAtLS0gYS9kb2NzL21pc2MveGVuLWNvbW1hbmQtbGluZS5wYW5kb2MK PiArKysgYi9kb2NzL21pc2MveGVuLWNvbW1hbmQtbGluZS5wYW5kb2MKPiBAQCAtMTkzLDYgKzE5 MywyMSBAQCBUaGlzIGFsbG93cyBkb21haW5zIGFjY2VzcyB0byB0aGUgQXJnbyBoeXBlcmNhbGws IHdoaWNoIHN1cHBvcnRzIHJlZ2lzdHJhdGlvbgo+ICBvZiBtZW1vcnkgcmluZ3Mgd2l0aCB0aGUg aHlwZXJ2aXNvciB0byByZWNlaXZlIG1lc3NhZ2VzLCBzZW5kaW5nIG1lc3NhZ2VzIHRvCj4gIG90 aGVyIGRvbWFpbnMgYnkgaHlwZXJjYWxsIGFuZCBxdWVyeWluZyB0aGUgcmluZyBzdGF0dXMgb2Yg b3RoZXIgZG9tYWlucy4KPgo+ICsjIyMgYXJnby1tYWMKPiArPiBgPSBwZXJtaXNzaXZlIHwgZW5m b3JjaW5nYAoKV2h5IG5vdCBjYWxsIHRoaXMgYXJnby1tYWMtcGVybWlzc2l2ZSBhbmQgbWFrZSBp dCBhIGJvb2xlYW4/IERlZmF1bHQKd291bGQgYmUgJ2ZhbHNlJyBhbmQgdGhhdCB3b3VsZCBpbXBs eSBlbmZvcmNpbmcuIFRoaXMgd291bGQgZ2V0IHJpZCBvZgpwYXJzZV9vcHRfYXJnb19tYWMgc2lu Y2UgeW91IGNvdWxkIHVzZSB0aGUgZGVmYXVsdCBib29sZWFuIHBhcnNlci4KCj4gKwo+ICs+IERl ZmF1bHQ6IGBlbmZvcmNpbmdgCj4gKwo+ICtDb25zdHJhaW4gdGhlIGFjY2VzcyBjb250cm9sIGFw cGxpZWQgdG8gdGhlIEFyZ28gY29tbXVuaWNhdGlvbiBtZWNoYW5pc20uCj4gKwo+ICtXaGVuIGBl bmZvcmNpbmdgLCBkb21haW5zIG1heSBub3QgcmVnaXN0ZXIgcmluZ3MgdGhhdCBoYXZlIHdpbGRj YXJkIHNwZWNpZmllZAo+ICtmb3IgdGhlIHNlbmRlciB3aGljaCB3b3VsZCBhbGxvdyBtZXNzYWdl cyB0byBiZSBzZW50IHRvIHRoZSByaW5nIGJ5IGFueSBkb21haW4uCj4gK1RoaXMgaXMgdG8gcHJv dGVjdCByaW5ncyBhbmQgdGhlIHNlcnZpY2VzIHRoYXQgdXRpbGl6ZSB0aGVtIGFnYWluc3QgRG9T IGJ5IGEKPiArbWFsaWNpb3VzIG9yIGJ1Z2d5IGRvbWFpbiBzcGFtbWluZyB0aGUgcmluZy4KPiAr Cj4gK1doZW4gdGhlIGJvb3Qgb3B0aW9uIGlzIHNldCB0byBgcGVybWlzc2l2ZWAsIHRoaXMgY29u c3RyYWludCBpcyByZWxheGVkIGFuZAo+ICt3aWxkY2FyZCBhbnktc2VuZGVyIHJpbmdzIGFyZSBh bGxvd2VkIHRvIGJlIHJlZ2lzdGVyZWQuCj4gKwo+ICAjIyMgYXNpZCAoeDg2KQo+ICA+IGA9IDxi b29sZWFuPmAKPgo+IGRpZmYgLS1naXQgYS94ZW4vY29tbW9uL2FyZ28uYyBiL3hlbi9jb21tb24v YXJnby5jCj4gaW5kZXggODYxOTVkMy4uMTE5ODhlNyAxMDA2NDQKPiAtLS0gYS94ZW4vY29tbW9u L2FyZ28uYwo+ICsrKyBiL3hlbi9jb21tb24vYXJnby5jCj4gQEAgLTIzLDE2ICsyMyw0MSBAQAo+ ICAjaW5jbHVkZSA8eGVuL2V2ZW50Lmg+Cj4gICNpbmNsdWRlIDx4ZW4vZG9tYWluX3BhZ2UuaD4K PiAgI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3MuaD4KPiArI2luY2x1ZGUgPHhlbi9saWIuaD4K PiArI2luY2x1ZGUgPHhlbi9ub3NwZWMuaD4KPiAgI2luY2x1ZGUgPHhlbi90aW1lLmg+Cj4gICNp bmNsdWRlIDxwdWJsaWMvYXJnby5oPgo+Cj4gKyNkZWZpbmUgTUFYX1JJTkdTX1BFUl9ET01BSU4g ICAgICAgICAgICAxMjhVCj4gKwo+ICsvKiBBbGwgbWVzc2FnZXMgb24gdGhlIHJpbmcgYXJlIHBh ZGRlZCB0byBhIG11bHRpcGxlIG9mIHRoZSBzbG90IHNpemUuICovCj4gKyNkZWZpbmUgUk9VTkRV UF9NRVNTQUdFKGEpIChST1VORFVQKChhKSwgWEVOX0FSR09fTVNHX1NMT1RfU0laRSkpCj4gKwo+ ICBERUZJTkVfWEVOX0dVRVNUX0hBTkRMRSh4ZW5fYXJnb19hZGRyX3QpOwo+ICtERUZJTkVfWEVO X0dVRVNUX0hBTkRMRSh4ZW5fYXJnb19wYWdlX2Rlc2NyX3QpOwo+ICtERUZJTkVfWEVOX0dVRVNU X0hBTkRMRSh4ZW5fYXJnb19yZWdpc3Rlcl9yaW5nX3QpOwo+ICBERUZJTkVfWEVOX0dVRVNUX0hB TkRMRSh4ZW5fYXJnb19yaW5nX3QpOwo+Cj4gIC8qIFhlbiBjb21tYW5kIGxpbmUgb3B0aW9uIHRv IGVuYWJsZSBhcmdvICovCj4gIHN0YXRpYyBib29sIF9fcmVhZF9tb3N0bHkgb3B0X2FyZ29fZW5h YmxlZDsKPiAgYm9vbGVhbl9wYXJhbSgiYXJnbyIsIG9wdF9hcmdvX2VuYWJsZWQpOwo+Cj4gKy8q IFhlbiBjb21tYW5kIGxpbmUgb3B0aW9uIGZvciBjb25zZXJ2YXRpdmUgb3IgcmVsYXhlZCBhY2Nl c3MgY29udHJvbCAqLwo+ICtib29sIF9fcmVhZF9tb3N0bHkgb3B0X2FyZ29fbWFjX2VuZm9yY2lu ZyA9IHRydWU7Cj4gKwo+ICtzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9vcHRfYXJnb19tYWMoY29u c3QgY2hhciAqcykKPiArewo+ICsgICAgaWYgKCAhc3RyY21wKHMsICJlbmZvcmNpbmciKSApCj4g KyAgICAgICAgb3B0X2FyZ29fbWFjX2VuZm9yY2luZyA9IHRydWU7Cj4gKyAgICBlbHNlIGlmICgg IXN0cmNtcChzLCAicGVybWlzc2l2ZSIpICkKPiArICAgICAgICBvcHRfYXJnb19tYWNfZW5mb3Jj aW5nID0gZmFsc2U7Cj4gKyAgICBlbHNlCj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArY3VzdG9tX3BhcmFtKCJhcmdvLW1hYyIsIHBhcnNlX29w dF9hcmdvX21hYyk7Cj4gKwo+ICB0eXBlZGVmIHN0cnVjdCBhcmdvX3JpbmdfaWQKPiAgewo+ICAg ICAgdWludDMyX3QgcG9ydDsKPiBAQCAtMTk4LDYgKzIyMywzMSBAQCBzdGF0aWMgREVGSU5FX1JX TE9DSyhhcmdvX2xvY2spOyAvKiBMMSAqLwo+ICAjZGVmaW5lIGFyZ29fZHByaW50ayhmb3JtYXQs IC4uLiApICgodm9pZCkwKQo+ICAjZW5kaWYKPgo+ICsvKgo+ICsgKiBUaGlzIGhhc2ggZnVuY3Rp b24gaXMgdXNlZCB0byBkaXN0cmlidXRlIHJpbmdzIHdpdGhpbiB0aGUgcGVyLWRvbWFpbgo+ICsg KiBoYXNoIHRhYmxlcyAoZC0+YXJnby0+cmluZ19oYXNoIGFuZCBkLT5hcmdvX3NlbmRfaGFzaCku IFRoZSBoYXNoIHRhYmxlCj4gKyAqIHdpbGwgcHJvdmlkZSBhIHN0cnVjdCBpZiBhIG1hdGNoIGlz IGZvdW5kIHdpdGggYSAnYXJnb19yaW5nX2lkJyBrZXk6Cj4gKyAqIGllLiB0aGUga2V5IGlzIGEg KGRvbWFpbiBpZCwgcG9ydCwgcGFydG5lciBkb21haW4gaWQpIHR1cGxlLgo+ICsgKiBTaW5jZSBw b3J0IG51bWJlciB2YXJpZXMgdGhlIG1vc3QgaW4gZXhwZWN0ZWQgdXNlLCBhbmQgdGhlIExpbnV4 IGRyaXZlcgo+ICsgKiBhbGxvY2F0ZXMgYXQgYm90aCB0aGUgaGlnaCBhbmQgbG93IGVuZHMsIGlu Y29ycG9yYXRlIGhpZ2ggYW5kIGxvdyBiaXRzIHRvCj4gKyAqIGhlbHAgd2l0aCBkaXN0cmlidXRp b24uCj4gKyAqIEFwcGx5IGFycmF5X2luZGV4X25vc3BlYyBhcyBhIGRlZmVuc2l2ZSBtZWFzdXJl IHNpbmNlIHRoaXMgb3BlcmF0ZXMKPiArICogb24gdXNlci1zdXBwbGllZCBpbnB1dCBhbmQgdGhl IGFycmF5IHNpemUgdGhhdCBpdCBpbmRleGVzIGludG8gaXMga25vd24uCj4gKyAqLwo+ICtzdGF0 aWMgdW5zaWduZWQgaW50Cj4gK2hhc2hfaW5kZXgoY29uc3Qgc3RydWN0IGFyZ29fcmluZ19pZCAq aWQpCj4gK3sKPiArICAgIHVuc2lnbmVkIGludCBoYXNoOwo+ICsKPiArICAgIGhhc2ggPSAodWlu dDE2X3QpKGlkLT5wb3J0ID4+IDE2KTsKPiArICAgIGhhc2ggXj0gKHVpbnQxNl90KWlkLT5wb3J0 Owo+ICsgICAgaGFzaCBePSBpZC0+ZG9tYWluX2lkOwo+ICsgICAgaGFzaCBePSBpZC0+cGFydG5l cl9pZDsKPiArICAgIGhhc2ggJj0gKEFSR09fSFRBQkxFX1NJWkUgLSAxKTsKPiArCj4gKyAgICBy ZXR1cm4gYXJyYXlfaW5kZXhfbm9zcGVjKGhhc2gsIEFSR09fSFRBQkxFX1NJWkUpOwo+ICt9Cj4g Kwo+ICBzdGF0aWMgdm9pZAo+ICByaW5nX3VubWFwKHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmlu Z19pbmZvKQo+ICB7Cj4gQEAgLTIxOSw2ICsyNjksNzggQEAgcmluZ191bm1hcChzdHJ1Y3QgYXJn b19yaW5nX2luZm8gKnJpbmdfaW5mbykKPiAgICAgIH0KPiAgfQo+Cj4gK3N0YXRpYyBpbnQKPiAr cmluZ19tYXBfcGFnZShzdHJ1Y3QgYXJnb19yaW5nX2luZm8gKnJpbmdfaW5mbywgdW5zaWduZWQg aW50IGksIHZvaWQgKipvdXRfcHRyKQo+ICt7Cj4gKyAgICBpZiAoIGkgPj0gcmluZ19pbmZvLT5u bWZucyApCj4gKyAgICB7Cj4gKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLAo+ICsgICAgICAg ICAgICAgICAiYXJnbzogcmluZyAodm0ldToleCB2bSVkKSAlcCBhdHRlbXB0ZWQgdG8gbWFwIHBh Z2UgICV1IG9mICV1XG4iLAo+ICsgICAgICAgICAgICAgICAgcmluZ19pbmZvLT5pZC5kb21haW5f aWQsIHJpbmdfaW5mby0+aWQucG9ydCwKPiArICAgICAgICAgICAgICAgIHJpbmdfaW5mby0+aWQu cGFydG5lcl9pZCwgcmluZ19pbmZvLCBpLCByaW5nX2luZm8tPm5tZm5zKTsKPiArICAgICAgICBy ZXR1cm4gLUVOT01FTTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoICFyaW5nX2luZm8tPm1mbnMg fHwgIXJpbmdfaW5mby0+bWZuX21hcHBpbmcpCj4gKyAgICB7Cj4gKyAgICAgICAgQVNTRVJUX1VO UkVBQ0hBQkxFKCk7Cj4gKyAgICAgICAgcmluZ19pbmZvLT5sZW4gPSAwOwo+ICsgICAgICAgIHJl dHVybiAtRU5PTUVNOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICggIXJpbmdfaW5mby0+bWZuX21h cHBpbmdbaV0gKQo+ICsgICAgewo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogVE9ETzoKPiAr ICAgICAgICAgKiBUaGUgZmlyc3QgcGFnZSBvZiB0aGUgcmluZyBjb250YWlucyB0aGUgcmluZyBp bmRpY2VzLCBzbyBib3RoIHJlYWQKPiArICAgICAgICAgKiBhbmQgd3JpdGUgYWNjZXNzIHRvIHRo ZSBwYWdlIGlzIHJlcXVpcmVkIGJ5IHRoZSBoeXBlcnZpc29yLCBidXQKPiArICAgICAgICAgKiBy ZWFkLWFjY2VzcyBpcyBub3QgbmVlZGVkIGZvciB0aGlzIG1hcHBpbmcgZm9yIHRoZSByZW1haW5k ZXIgb2YgdGhlCj4gKyAgICAgICAgICogcmluZy4KPiArICAgICAgICAgKiBTaW5jZSB0aGlzIG1h cHBpbmcgd2lsbCByZW1haW4gcmVzaWRlbnQgaW4gWGVuJ3MgYWRkcmVzcyBzcGFjZSBmb3IKPiAr ICAgICAgICAgKiB0aGUgbGlmZXRpbWUgb2YgdGhlIHJpbmcsIGFuZCBmb2xsb3dpbmcgdGhlIHBy aW5jaXBsZSBvZiBsZWFzdAo+ICsgICAgICAgICAqIHByaXZpbGVnZSwgaXQgY291bGQgYmUgcHJl ZmVyYWJsZSB0bzoKPiArICAgICAgICAgKiAgIyBhZGQgYSBYU00gY2hlY2sgdG8gZGV0ZXJtaW5l IHdoYXQgcG9saWN5IGlzIHdhbnRlZCBoZXJlCj4gKyAgICAgICAgICogICMgZGVwZW5kaW5nIG9u IHRoZSBYU00gcXVlcnksIG9wdGlvbmFsbHkgY3JlYXRlIHRoaXMgbWFwcGluZyBhcwo+ICsgICAg ICAgICAqICAgIF93cml0ZS1vbmx5XyBvbiBwbGF0Zm9ybXMgdGhhdCBjYW4gc3VwcG9ydCBpdC4K PiArICAgICAgICAgKiAgICAoZWcuIEludGVsIEVQVC9BTUQgTlBUKS4KCldoeSBkbyBJbnRlbCBF UFQgb3IgQU1EIE5QVCBtYXR0ZXIgaGVyZT8KCllvdSBhcmUgbWFwcGluZyB0aGUgcGFnZSB0byBY ZW4gYWRkcmVzcyBzcGFjZSwgd2hpY2ggZG9lc24ndCB1c2UKZWl0aGVyIEVQVCBvciBOUFQuIFdy aXRhYmxlIG9yIHJlYWQtb25seSBtYXBwaW5ncyB3b3VsZCBiZSBjcmVhdGVkIGJ5CnNldHRpbmcg dGhlIHJpZ2h0IGJpdCBpbiB0aGUgWGVuIHBhZ2UgdGFibGVzLgoKPiArICAgICAgICAgKi8KPiAr ICAgICAgICByaW5nX2luZm8tPm1mbl9tYXBwaW5nW2ldID0gbWFwX2RvbWFpbl9wYWdlX2dsb2Jh bChyaW5nX2luZm8tPm1mbnNbaV0pOwo+ICsKCk5vIG5lZWQgZm9yIHRoZSBuZXdsaW5lLgoKPiAr ICAgICAgICBpZiAoICFyaW5nX2luZm8tPm1mbl9tYXBwaW5nW2ldICkKPiArICAgICAgICB7Cj4g KyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwKPiArICAgICAgICAgICAgICAgICJhcmdv OiByaW5nICh2bSV1OiV4IHZtJWQpICVwIGF0dGVtcHRlZCB0byBtYXAgcGFnZSAldSBvZiAldVxu IiwKPiArICAgICAgICAgICAgICAgICAgICByaW5nX2luZm8tPmlkLmRvbWFpbl9pZCwgcmluZ19p bmZvLT5pZC5wb3J0LAo+ICsgICAgICAgICAgICAgICAgICAgIHJpbmdfaW5mby0+aWQucGFydG5l cl9pZCwgcmluZ19pbmZvLCBpLCByaW5nX2luZm8tPm5tZm5zKTsKPiArICAgICAgICAgICAgcmV0 dXJuIC1FTk9NRU07Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGFyZ29fZHByaW50aygibWFwcGlu ZyBwYWdlICUiUFJJX21mbiIgdG8gJXBcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgIG1mbl94 KHJpbmdfaW5mby0+bWZuc1tpXSksIHJpbmdfaW5mby0+bWZuX21hcHBpbmdbaV0pOwo+ICsgICAg fQo+ICsKPiArICAgIGlmICggb3V0X3B0ciApCj4gKyAgICAgICAgKm91dF9wdHIgPSByaW5nX2lu Zm8tPm1mbl9tYXBwaW5nW2ldOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZAo+ICt1cGRhdGVfdHhfcHRyKHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19pbmZv LCB1aW50MzJfdCB0eF9wdHIpCj4gK3sKPiArICAgIHZvaWQgKmRzdDsKPiArICAgIHVpbnQzMl90 ICpwOwo+ICsKPiArICAgIEFTU0VSVChyaW5nX2luZm8tPm1mbl9tYXBwaW5nWzBdKTsKPiArCj4g KyAgICByaW5nX2luZm8tPnR4X3B0ciA9IHR4X3B0cjsKPiArCj4gKyAgICBkc3QgPSByaW5nX2lu Zm8tPm1mbl9tYXBwaW5nWzBdOwo+ICsgICAgcCA9IGRzdCArIG9mZnNldG9mKHhlbl9hcmdvX3Jp bmdfdCwgdHhfcHRyKTsKCkhtLCB3b3VsZG4ndCBpdCBiZSBlYXNpZXIgdG8gY2FzdCBwYWdlIDAg dG8gdGhlIGxheW91dCBvZiB0aGUgcmluZyBzbwp0aGF0IHlvdSBkb24ndCBuZWVkIHRvIHVzZSBw b2ludGVyIGFyaXRobWV0aWMgdG8gZ2V0IHRoZSBmaWVsZHM/IEllOgptYWtlIGRzdCBiZSBvZiB0 eXBlIHhlbl9hcmdvX3JpbmdfdC4KCj4gKwo+ICsgICAgd3JpdGVfYXRvbWljKHAsIHR4X3B0cik7 Cj4gKyAgICBzbXBfd21iKCk7Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkCj4gIHdpbGRjYXJkX3Bl bmRpbmdfbGlzdF9yZW1vdmUoZG9taWRfdCBkb21haW5faWQsIHN0cnVjdCBwZW5kaW5nX2VudCAq ZW50KQo+ICB7Cj4gQEAgLTM3MSw2ICs0OTMsNDE4IEBAIHBhcnRuZXJfcmluZ3NfcmVtb3ZlKHN0 cnVjdCBkb21haW4gKnNyY19kKQo+ICAgICAgfQo+ICB9Cj4KPiArc3RhdGljIGludAo+ICtmaW5k X3JpbmdfbWZuKHN0cnVjdCBkb21haW4gKmQsIGdmbl90IGdmbiwgbWZuX3QgKm1mbikKPiArewo+ ICsgICAgcDJtX3R5cGVfdCBwMm10Owo+ICsgICAgaW50IHJldCA9IDA7Cj4gKwo+ICsjaWZkZWYg Q09ORklHX1g4Ngo+ICsgICAgKm1mbiA9IGdldF9nZm5fdW5zaGFyZShkLCBnZm5feChnZm4pLCAm cDJtdCk7Cj4gKyNlbHNlCj4gKyAgICAqbWZuID0gcDJtX2xvb2t1cChkLCBnZm4sICZwMm10KTsK PiArI2VuZGlmCj4gKwo+ICsgICAgaWYgKCAhbWZuX3ZhbGlkKCptZm4pICkKPiArICAgICAgICBy ZXQgPSAtRUlOVkFMOwo+ICsjaWZkZWYgQ09ORklHX1g4Ngo+ICsgICAgZWxzZSBpZiAoIHAybV9p c19wYWdpbmcocDJtdCkgfHwgKHAybXQgPT0gcDJtX3JhbV9sb2dkaXJ0eSkgKQo+ICsgICAgICAg IHJldCA9IC1FQUdBSU47Cj4gKyNlbmRpZgo+ICsgICAgZWxzZSBpZiAoIChwMm10ICE9IHAybV9y YW1fcncpIHx8Cj4gKyAgICAgICAgICAgICAgIWdldF9wYWdlX2FuZF90eXBlKG1mbl90b19wYWdl KCptZm4pLCBkLCBQR1Rfd3JpdGFibGVfcGFnZSkgKQo+ICsgICAgICAgIHJldCA9IC1FSU5WQUw7 Cj4gKwo+ICsjaWZkZWYgQ09ORklHX1g4Ngo+ICsgICAgcHV0X2dmbihkLCBnZm5feChnZm4pKTsK PiArI2VuZGlmCj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ ICtmaW5kX3JpbmdfbWZucyhzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgYXJnb19yaW5nX2luZm8g KnJpbmdfaW5mbywKPiArICAgICAgICAgICAgICAgdWludDMyX3QgbnBhZ2UsCj4gKyAgICAgICAg ICAgICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX2FyZ29fcGFnZV9kZXNjcl90KSBwZ19k ZXNjcl9obmQsCj4gKyAgICAgICAgICAgICAgIHVpbnQzMl90IGxlbikKPiArewo+ICsgICAgdW5z aWduZWQgaW50IGk7Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAgIG1mbl90ICptZm5zOwo+ICsg ICAgdWludDhfdCAqKm1mbl9tYXBwaW5nOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBmaXJzdCBi b3VuZHMgY2hlY2sgb24gbnBhZ2UgaGVyZSBhbHNvIHNlcnZlcyBhcyBhbiBvdmVyZmxvdyBjaGVj awo+ICsgICAgICogYmVmb3JlIGxlZnQgc2hpZnRpbmcgaXQKPiArICAgICAqLwo+ICsgICAgaWYg KCAodW5saWtlbHkobnBhZ2UgPiAoWEVOX0FSR09fTUFYX1JJTkdfU0laRSA+PiBQQUdFX1NISUZU KSkpIHx8Cj4gKyAgICAgICAgICgobnBhZ2UgPDwgUEFHRV9TSElGVCkgPCBsZW4pICkKPiArICAg ICAgICByZXR1cm4gLUVJTlZBTDsKPiArCj4gKyAgICBpZiAoIHJpbmdfaW5mby0+bWZucyApCj4g KyAgICB7Cj4gKyAgICAgICAgLyogUmluZyBhbHJlYWR5IGV4aXN0ZWQ6IGRyb3AgdGhlIHByZXZp b3VzIG1hcHBpbmcuICovCj4gKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfSU5GTywKPiArICAgICAg ICAgImFyZ286IHZtJXUgcmUtcmVnaXN0ZXIgZXhpc3RpbmcgcmluZyAodm0ldToleCB2bSVkKSBj bGVhcnMgbWFwcGluZ1xuIiwKPiArICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCwgcmluZ19p bmZvLT5pZC5kb21haW5faWQsCj4gKyAgICAgICAgICAgICAgICByaW5nX2luZm8tPmlkLnBvcnQs IHJpbmdfaW5mby0+aWQucGFydG5lcl9pZCk7Cj4gKwo+ICsgICAgICAgIHJpbmdfcmVtb3ZlX21m bnMoZCwgcmluZ19pbmZvKTsKPiArICAgICAgICBBU1NFUlQoIXJpbmdfaW5mby0+bWZucyk7Cj4g KyAgICB9Cj4gKwo+ICsgICAgbWZucyA9IHhtYWxsb2NfYXJyYXkobWZuX3QsIG5wYWdlKTsKPiAr ICAgIGlmICggIW1mbnMgKQo+ICsgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ICsKPiArICAgIGZv ciAoIGkgPSAwOyBpIDwgbnBhZ2U7IGkrKyApCj4gKyAgICAgICAgbWZuc1tpXSA9IElOVkFMSURf TUZOOwo+ICsKPiArICAgIG1mbl9tYXBwaW5nID0geHphbGxvY19hcnJheSh1aW50OF90ICosIG5w YWdlKTsKPiArICAgIGlmICggIW1mbl9tYXBwaW5nICkKPiArICAgIHsKPiArICAgICAgICB4ZnJl ZShtZm5zKTsKPiArICAgICAgICByZXR1cm4gLUVOT01FTTsKPiArICAgIH0KPiArCj4gKyAgICBy aW5nX2luZm8tPm5wYWdlID0gbnBhZ2U7Cj4gKyAgICByaW5nX2luZm8tPm1mbnMgPSBtZm5zOwo+ ICsgICAgcmluZ19pbmZvLT5tZm5fbWFwcGluZyA9IG1mbl9tYXBwaW5nOwo+ICsKPiArICAgIEFT U0VSVChyaW5nX2luZm8tPm5wYWdlID09IG5wYWdlKTsKPiArCj4gKyAgICBpZiAoIHJpbmdfaW5m by0+bm1mbnMgPT0gcmluZ19pbmZvLT5ucGFnZSApCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ ICsgICAgZm9yICggaSA9IHJpbmdfaW5mby0+bm1mbnM7IGkgPCByaW5nX2luZm8tPm5wYWdlOyBp KysgKQoKVGhpcyBsb29wIHNlZW1zIHRvIGFzc3VtZSB0aGF0IHRoZXJlIGNhbiBiZSBwYWdlcyBh bHJlYWR5IGFkZGVkIHRvIHRoZQpyaW5nLCBidXQgSUlSQyB5b3Ugc2FpZCB0aGF0IHJlZGltZW5z aW9uaW5nIG9mIHRoZSByaW5nIHdhcyByZW1vdmVkIGluCnRoaXMgdmVyc2lvbj8KCkkgdGhpbmsg Zm9yIGFuIGluaXRpYWwgdmVyc2lvbiBpdCB3b3VsZCBiZSBlYXNpZXIgdG8gZG9uJ3QgYWxsb3cK cmVkaW1lbnNpb25pbmcgb2YgYWN0aXZlIHJpbmdzLCBhbmQganVzdCBhbGxvdyB0ZWFyZG93biBh bmQKcmUtaW5pdGlhbGl6YXRpb24gYXMgdGhlIHdheSB0byByZWRpbWVuc2lvbiBhIHJpbmcuCgo+ ICsgICAgewo+ICsgICAgICAgIHhlbl9hcmdvX3BhZ2VfZGVzY3JfdCBwZ19kZXNjcjsKPiArICAg ICAgICBnZm5fdCBnZm47Cj4gKyAgICAgICAgbWZuX3QgbWZuOwo+ICsKPiArICAgICAgICByZXQg PSBfX2NvcHlfZnJvbV9ndWVzdF9vZmZzZXQoJnBnX2Rlc2NyLCBwZ19kZXNjcl9obmQsIGksIDEp ID8KPiArICAgICAgICAgICAgICAgIC1FRkFVTFQgOiAwOwo+ICsgICAgICAgIGlmICggcmV0ICkK PiArICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICAgIC8qIEltcGxlbWVudGF0aW9uIGN1 cnJlbnRseSBvbmx5IHN1cHBvcnRzIGhhbmRsaW5nIDRLIHBhZ2VzICovCj4gKyAgICAgICAgaWYg KCAocGdfZGVzY3IgJiBYRU5fQVJHT19QQUdFX0RFU0NSX1NJWkVfTUFTSykgIT0KPiArICAgICAg ICAgICAgICAgIFhFTl9BUkdPX1BBR0VfREVTQ1JfU0laRV80SyApCj4gKyAgICAgICAgewo+ICsg ICAgICAgICAgICByZXQgPSAtRUlOVkFMOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAg ICB9Cj4gKyAgICAgICAgZ2ZuID0gX2dmbihwZ19kZXNjciA+PiBQQUdFX1NISUZUKTsKPiArCj4g KyAgICAgICAgcmV0ID0gZmluZF9yaW5nX21mbihkLCBnZm4sICZtZm4pOwo+ICsgICAgICAgIGlm ICggcmV0ICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwK PiArICAgICAgICAgICAgICAgImFyZ286IHZtJXU6IGludmFsaWQgZ2ZuICUiUFJJX2dmbiIgcjoo dm0ldToleCB2bSVkKSAlcCAlZC8lZFxuIiwKPiArICAgICAgICAgICAgICAgICAgICBkLT5kb21h aW5faWQsIGdmbl94KGdmbiksIHJpbmdfaW5mby0+aWQuZG9tYWluX2lkLAo+ICsgICAgICAgICAg ICAgICAgICAgIHJpbmdfaW5mby0+aWQucG9ydCwgcmluZ19pbmZvLT5pZC5wYXJ0bmVyX2lkLAo+ ICsgICAgICAgICAgICAgICAgICAgIHJpbmdfaW5mbywgaSwgcmluZ19pbmZvLT5ucGFnZSk7Cj4g KyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgcmluZ19pbmZv LT5tZm5zW2ldID0gbWZuOwo+ICsKPiArICAgICAgICBhcmdvX2RwcmludGsoIiVkOiAlIlBSSV9n Zm4iIC0+ICUiUFJJX21mbiJcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgIGksIGdmbl94KGdm biksIG1mbl94KHJpbmdfaW5mby0+bWZuc1tpXSkpOwo+ICsgICAgfQo+ICsKPiArICAgIHJpbmdf aW5mby0+bm1mbnMgPSBpOwo+ICsKPiArICAgIGlmICggcmV0ICkKPiArICAgICAgICByaW5nX3Jl bW92ZV9tZm5zKGQsIHJpbmdfaW5mbyk7Cj4gKyAgICBlbHNlCj4gKyAgICB7Cj4gKyAgICAgICAg QVNTRVJUKHJpbmdfaW5mby0+bm1mbnMgPT0gcmluZ19pbmZvLT5ucGFnZSk7Cj4gKwo+ICsgICAg ICAgIGdwcmludGsoWEVOTE9HX0RFQlVHLAo+ICsgICAgICAgICJhcmdvOiB2bSV1IHJpbmcgKHZt JXU6JXggdm0lZCkgJXAgbWZuX21hcHBpbmcgJXAgbnBhZ2UgJWQgbm1mbnMgJWRcbiIsCj4gKyAg ICAgICAgICAgICAgICBkLT5kb21haW5faWQsIHJpbmdfaW5mby0+aWQuZG9tYWluX2lkLAo+ICsg ICAgICAgICAgICAgICAgcmluZ19pbmZvLT5pZC5wb3J0LCByaW5nX2luZm8tPmlkLnBhcnRuZXJf aWQsIHJpbmdfaW5mbywKPiArICAgICAgICAgICAgICAgIHJpbmdfaW5mby0+bWZuX21hcHBpbmcs IHJpbmdfaW5mby0+bnBhZ2UsIHJpbmdfaW5mby0+bm1mbnMpOwo+ICsgICAgfQo+ICsKPiArICAg IHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgYXJnb19yaW5nX2luZm8gKgo+ ICtyaW5nX2ZpbmRfaW5mbyhjb25zdCBzdHJ1Y3QgZG9tYWluICpkLCBjb25zdCBzdHJ1Y3QgYXJn b19yaW5nX2lkICppZCkKPiArewo+ICsgICAgdW5zaWduZWQgaW50IHJpbmdfaGFzaF9pbmRleDsK PiArICAgIHN0cnVjdCBobGlzdF9ub2RlICpub2RlOwo+ICsgICAgc3RydWN0IGFyZ29fcmluZ19p bmZvICpyaW5nX2luZm87Cj4gKwo+ICsgICAgQVNTRVJUKHJ3X2lzX2xvY2tlZCgmZC0+YXJnby0+ bG9jaykpOwo+ICsKPiArICAgIHJpbmdfaGFzaF9pbmRleCA9IGhhc2hfaW5kZXgoaWQpOwo+ICsK PiArICAgIGFyZ29fZHByaW50aygiZC0+YXJnbz0lcCwgZC0+YXJnby0+cmluZ19oYXNoWyV1XT0l cCBpZD0lcFxuIiwKPiArICAgICAgICAgICAgICAgICBkLT5hcmdvLCByaW5nX2hhc2hfaW5kZXgs Cj4gKyAgICAgICAgICAgICAgICAgZC0+YXJnby0+cmluZ19oYXNoW3JpbmdfaGFzaF9pbmRleF0u Zmlyc3QsIGlkKTsKPiArICAgIGFyZ29fZHByaW50aygiaWQucG9ydD0leCBpZC5kb21haW49dm0l dSBpZC5wYXJ0bmVyX2lkPXZtJWRcbiIsCj4gKyAgICAgICAgICAgICAgICAgaWQtPnBvcnQsIGlk LT5kb21haW5faWQsIGlkLT5wYXJ0bmVyX2lkKTsKPiArCj4gKyAgICBobGlzdF9mb3JfZWFjaF9l bnRyeShyaW5nX2luZm8sIG5vZGUsICZkLT5hcmdvLT5yaW5nX2hhc2hbcmluZ19oYXNoX2luZGV4 XSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUpCj4gKyAgICB7Cj4gKyAgICAgICAg c3RydWN0IGFyZ29fcmluZ19pZCAqY21waWQgPSAmcmluZ19pbmZvLT5pZDsKCmNvbnN0PwoKPiAr Cj4gKyAgICAgICAgaWYgKCBjbXBpZC0+cG9ydCA9PSBpZC0+cG9ydCAmJgo+ICsgICAgICAgICAg ICAgY21waWQtPmRvbWFpbl9pZCA9PSBpZC0+ZG9tYWluX2lkICYmCj4gKyAgICAgICAgICAgICBj bXBpZC0+cGFydG5lcl9pZCA9PSBpZC0+cGFydG5lcl9pZCApCj4gKyAgICAgICAgewo+ICsgICAg ICAgICAgICBhcmdvX2RwcmludGsoInJpbmdfaW5mbz0lcFxuIiwgcmluZ19pbmZvKTsKPiArICAg ICAgICAgICAgcmV0dXJuIHJpbmdfaW5mbzsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKyAgICBh cmdvX2RwcmludGsoIm5vIHJpbmdfaW5mbyBmb3VuZFxuIik7Cj4gKwo+ICsgICAgcmV0dXJuIE5V TEw7Cj4gK30KPiArCj4gK3N0YXRpYyBsb25nCj4gK3JlZ2lzdGVyX3Jpbmcoc3RydWN0IGRvbWFp biAqY3VycmQsCgpJZiB0aGlzIGlzIGluZGVlZCB0aGUgY3VycmVudCBkb21haW4gKGFzIHRoZSBu YW1lIHN1Z2dlc3RzKSwgd2h5IGRvCnlvdSBuZWVkIHRvIHBhc3MgaXQgYXJvdW5kPyBPciBlbHNl IGp1c3QgbmFtZSB0aGUgcGFyYW1ldGVyIGQuCgo+ICsgICAgICAgICAgICAgIFhFTl9HVUVTVF9I QU5ETEVfUEFSQU0oeGVuX2FyZ29fcmVnaXN0ZXJfcmluZ190KSByZWdfaG5kLAo+ICsgICAgICAg ICAgICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX2FyZ29fcGFnZV9kZXNjcl90KSBwZ19k ZXNjcl9obmQsCj4gKyAgICAgICAgICAgICAgdWludDMyX3QgbnBhZ2UsIGJvb2wgZmFpbF9leGlz dCkKPiArewo+ICsgICAgeGVuX2FyZ29fcmVnaXN0ZXJfcmluZ190IHJlZzsKPiArICAgIHN0cnVj dCBhcmdvX3JpbmdfaWQgcmluZ19pZDsKPiArICAgIHZvaWQgKm1hcF9yaW5ncDsKPiArICAgIHhl bl9hcmdvX3JpbmdfdCAqcmluZ3A7Cj4gKyAgICBzdHJ1Y3QgYXJnb19yaW5nX2luZm8gKnJpbmdf aW5mbzsKPiArICAgIHN0cnVjdCBhcmdvX3NlbmRfaW5mbyAqc2VuZF9pbmZvID0gTlVMTDsKPiAr ICAgIHN0cnVjdCBkb21haW4gKmRzdF9kID0gTlVMTDsKPiArICAgIGludCByZXQgPSAwOwo+ICsg ICAgdWludDMyX3QgcHJpdmF0ZV90eF9wdHI7Cj4gKwo+ICsgICAgaWYgKCBjb3B5X2Zyb21fZ3Vl c3QoJnJlZywgcmVnX2huZCwgMSkgKQo+ICsgICAgewo+ICsgICAgICAgIHJldCA9IC1FRkFVTFQ7 Cj4gKyAgICAgICAgZ290byBvdXQ7CgpJIGRvbid0IHNlZSB0aGUgcG9pbnQgb2YgdXNpbmcgYW4g b3V0IGxhYmVsLCB3aHkgbm90IGp1c3QgdXNlICdyZXR1cm4KLUVGQVVMVDsnIChoZXJlIGFuZCBi ZWxvdykuIFRoaXMgYXZvaWRzIHRoZSBicmFjZXMgYW5kIGFsc28gcmVtb3Zlcwp0aGUgbmVlZCBm b3IgdGhlIHJldCBhc3NpZ25tZW50LgoKPiArICAgIH0KPiArCj4gKyAgICAvKgo+ICsgICAgICog QSByaW5nIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIHRyYW5zbWl0IG1lc3NhZ2VzLCBzbyByZXF1 aXJlcyBzcGFjZSBmb3I6Cj4gKyAgICAgKiAqIDEgbWVzc2FnZSBoZWFkZXIsIHBsdXMKPiArICAg ICAqICogMSBwYXlsb2FkIHNsb3QgKHBheWxvYWQgaXMgYWx3YXlzIHJvdW5kZWQgdG8gYSBtdWx0 aXBsZSBvZiAxNiBieXRlcykKPiArICAgICAqICAgZm9yIHRoZSBtZXNzYWdlIHBheWxvYWQgdG8g YmUgd3JpdHRlbiBpbnRvLCBwbHVzCj4gKyAgICAgKiAqIDEgbW9yZSBzbG90LCBzbyB0aGF0IHRo ZSByaW5nIGNhbm5vdCBiZSBmaWxsZWQgdG8gY2FwYWNpdHkgd2l0aCBhCj4gKyAgICAgKiAgIHNp bmdsZSBtZXNzYWdlIC0tIHNlZSB0aGUgbG9naWMgaW4gcmluZ2J1Zl9pbnNlcnQgLS0gYWxsb3dp bmcgZm9yIHRoaXMKPiArICAgICAqICAgZW5zdXJlcyB0aGF0IHRoZXJlIGNhbiBiZSBzcGFjZSBy ZW1haW5pbmcgd2hlbiBhIG1lc3NhZ2UgaXMgcHJlc2VudC4KPiArICAgICAqIFRoZSBhYm92ZSBk ZXRlcm1pbmVzIHRoZSBtaW5pbXVtIGFjY2VwdGFibGUgcmluZyBzaXplLgo+ICsgICAgICovCj4g KyAgICBpZiAoIChyZWcubGVuIDwgKHNpemVvZihzdHJ1Y3QgeGVuX2FyZ29fcmluZ19tZXNzYWdl X2hlYWRlcikKPiArICAgICAgICAgICAgICAgICAgICAgICsgUk9VTkRVUF9NRVNTQUdFKDEpICsg Uk9VTkRVUF9NRVNTQUdFKDEpKSkgfHwKPiArICAgICAgICAgKHJlZy5sZW4gPiBYRU5fQVJHT19N QVhfUklOR19TSVpFKSB8fAo+ICsgICAgICAgICAocmVnLmxlbiAhPSBST1VORFVQX01FU1NBR0Uo cmVnLmxlbikpIHx8Cj4gKyAgICAgICAgIChyZWcucGFkICE9IDApICkKPiArICAgIHsKPiArICAg ICAgICByZXQgPSAtRUlOVkFMOwo+ICsgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgfQo+ICsKPiAr ICAgIHJpbmdfaWQucGFydG5lcl9pZCA9IHJlZy5wYXJ0bmVyX2lkOwo+ICsgICAgcmluZ19pZC5w b3J0ID0gcmVnLnBvcnQ7Cj4gKyAgICByaW5nX2lkLmRvbWFpbl9pZCA9IGN1cnJkLT5kb21haW5f aWQ7Cj4gKwo+ICsgICAgcmVhZF9sb2NrKCZhcmdvX2xvY2spOwo+ICsKPiArICAgIGlmICggIWN1 cnJkLT5hcmdvICkKPiArICAgIHsKPiArICAgICAgICByZXQgPSAtRU5PREVWOwo+ICsgICAgICAg IGdvdG8gb3V0X3VubG9jazsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoIHJlZy5wYXJ0bmVyX2lk ID09IFhFTl9BUkdPX0RPTUlEX0FOWSApCj4gKyAgICB7Cj4gKyAgICAgICAgaWYgKCBvcHRfYXJn b19tYWNfZW5mb3JjaW5nICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHJldCA9IC1FUEVS TTsKPiArICAgICAgICAgICAgZ290byBvdXRfdW5sb2NrOwo+ICsgICAgICAgIH0KPiArICAgIH0K PiArICAgIGVsc2UKPiArICAgIHsKPiArICAgICAgICBkc3RfZCA9IGdldF9kb21haW5fYnlfaWQo cmVnLnBhcnRuZXJfaWQpOwo+ICsgICAgICAgIGlmICggIWRzdF9kICkKPiArICAgICAgICB7Cj4g KyAgICAgICAgICAgIGFyZ29fZHByaW50aygiIWRzdF9kLCBFU1JDSFxuIik7Cj4gKyAgICAgICAg ICAgIHJldCA9IC1FU1JDSDsKPiArICAgICAgICAgICAgZ290byBvdXRfdW5sb2NrOwo+ICsgICAg ICAgIH0KPiArCj4gKyAgICAgICAgaWYgKCAhZHN0X2QtPmFyZ28gKQo+ICsgICAgICAgIHsKPiAr ICAgICAgICAgICAgYXJnb19kcHJpbnRrKCIhZHN0X2QtPmFyZ28sIEVDT05OUkVGVVNFRFxuIik7 Cj4gKyAgICAgICAgICAgIHJldCA9IC1FQ09OTlJFRlVTRUQ7Cj4gKyAgICAgICAgICAgIHB1dF9k b21haW4oZHN0X2QpOwo+ICsgICAgICAgICAgICBnb3RvIG91dF91bmxvY2s7Cj4gKyAgICAgICAg fQo+ICsKPiArICAgICAgICBzZW5kX2luZm8gPSB4emFsbG9jKHN0cnVjdCBhcmdvX3NlbmRfaW5m byk7Cj4gKyAgICAgICAgaWYgKCAhc2VuZF9pbmZvICkKPiArICAgICAgICB7Cj4gKyAgICAgICAg ICAgIHJldCA9IC1FTk9NRU07Cj4gKyAgICAgICAgICAgIHB1dF9kb21haW4oZHN0X2QpOwo+ICsg ICAgICAgICAgICBnb3RvIG91dF91bmxvY2s7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHNlbmRf aW5mby0+aWQgPSByaW5nX2lkOwo+ICsgICAgfQo+ICsKPiArICAgIHdyaXRlX2xvY2soJmN1cnJk LT5hcmdvLT5sb2NrKTsKPiArCj4gKyAgICBpZiAoIGN1cnJkLT5hcmdvLT5yaW5nX2NvdW50ID49 IE1BWF9SSU5HU19QRVJfRE9NQUlOICkKPiArICAgIHsKPiArICAgICAgICByZXQgPSAtRU5PU1BD Owo+ICsgICAgICAgIGdvdG8gb3V0X3VubG9jazI7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmluZ19p bmZvID0gcmluZ19maW5kX2luZm8oY3VycmQsICZyaW5nX2lkKTsKPiArICAgIGlmICggIXJpbmdf aW5mbyApCj4gKyAgICB7Cj4gKyAgICAgICAgcmluZ19pbmZvID0geHphbGxvYyhzdHJ1Y3QgYXJn b19yaW5nX2luZm8pOwo+ICsgICAgICAgIGlmICggIXJpbmdfaW5mbyApCj4gKyAgICAgICAgewo+ ICsgICAgICAgICAgICByZXQgPSAtRU5PTUVNOwo+ICsgICAgICAgICAgICBnb3RvIG91dF91bmxv Y2syOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgc3Bpbl9sb2NrX2luaXQoJnJpbmdfaW5m by0+bG9jayk7Cj4gKwo+ICsgICAgICAgIHJpbmdfaW5mby0+aWQgPSByaW5nX2lkOwo+ICsgICAg ICAgIElOSVRfSExJU1RfSEVBRCgmcmluZ19pbmZvLT5wZW5kaW5nKTsKPiArCj4gKyAgICAgICAg aGxpc3RfYWRkX2hlYWQoJnJpbmdfaW5mby0+bm9kZSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAmY3VycmQtPmFyZ28tPnJpbmdfaGFzaFtoYXNoX2luZGV4KCZyaW5nX2luZm8tPmlkKV0pOwo+ ICsKPiArICAgICAgICBncHJpbnRrKFhFTkxPR19ERUJVRywgImFyZ286IHZtJXUgcmVnaXN0ZXJp bmcgcmluZyAodm0ldToleCB2bSVkKVxuIiwKPiArICAgICAgICAgICAgICAgIGN1cnJkLT5kb21h aW5faWQsIHJpbmdfaWQuZG9tYWluX2lkLCByaW5nX2lkLnBvcnQsCj4gKyAgICAgICAgICAgICAg ICByaW5nX2lkLnBhcnRuZXJfaWQpOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ICsgICAgewo+ICsg ICAgICAgIGlmICggcmluZ19pbmZvLT5sZW4gKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAg LyoKPiArICAgICAgICAgICAgICogSWYgdGhlIGNhbGxlciBzcGVjaWZpZWQgdGhhdCB0aGUgcmlu ZyBtdXN0IG5vdCBhbHJlYWR5IGV4aXN0LAo+ICsgICAgICAgICAgICAgKiBmYWlsIGF0IGF0dGVt cHQgdG8gYWRkIGEgY29tcGxldGVkIHJpbmcgd2hpY2ggYWxyZWFkeSBleGlzdHMuCj4gKyAgICAg ICAgICAgICAqLwo+ICsgICAgICAgICAgICBpZiAoIGZhaWxfZXhpc3QgKQo+ICsgICAgICAgICAg ICB7Cj4gKyAgICAgICAgICAgICAgICBhcmdvX2RwcmludGsoImRpc2FsbG93ZWQgcmVyZWdpc3Ry YXRpb24gb2YgZXhpc3RpbmcgcmluZ1xuIik7Cj4gKyAgICAgICAgICAgICAgICByZXQgPSAtRUVY SVNUOwo+ICsgICAgICAgICAgICAgICAgZ290byBvdXRfdW5sb2NrMjsKPiArICAgICAgICAgICAg fQo+ICsKPiArICAgICAgICAgICAgaWYgKCByaW5nX2luZm8tPmxlbiAhPSByZWcubGVuICkKPiAr ICAgICAgICAgICAgewo+ICsgICAgICAgICAgICAgICAgLyoKPiArICAgICAgICAgICAgICAgICAq IENoYW5nZSBvZiByaW5nIHNpemUgY291bGQgcmVzdWx0IGluIGVudHJpZXMgb24gdGhlIHBlbmRp bmcKPiArICAgICAgICAgICAgICAgICAqIG5vdGlmaWNhdGlvbnMgbGlzdCB0aGF0IHdpbGwgbmV2 ZXIgdHJpZ2dlci4KPiArICAgICAgICAgICAgICAgICAqIFNpbXBsZSBibHVudCBzb2x1dGlvbjog ZGlzYWxsb3cgcmluZyByZXNpemUgZm9yIG5vdy4KPiArICAgICAgICAgICAgICAgICAqIFRPRE86 IGludmVzdGlnYXRlIGVuYWJsaW5nIHJpbmcgcmVzaXplLgo+ICsgICAgICAgICAgICAgICAgICov CgpJIHRoaW5rIHJpbmcgcmVzaXppbmcgd2FzIHJlbW92ZWQgb24gdGhpcyB2ZXJzaW9uPwoKPiAr ICAgICAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwKPiArICAgICAgICAgICAgICAgICAg ICAiYXJnbzogdm0ldSBhdHRlbXB0ZWQgdG8gY2hhbmdlIHJpbmcgc2l6ZSh2bSV1OiV4IHZtJWQp XG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZC0+ZG9tYWluX2lkLCByaW5nX2lk LmRvbWFpbl9pZCwgcmluZ19pZC5wb3J0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICByaW5n X2lkLnBhcnRuZXJfaWQpOwo+ICsgICAgICAgICAgICAgICAgLyoKPiArICAgICAgICAgICAgICAg ICAqIENvdWxkIHJldHVybiBFSU5WQUwgaGVyZSwgYnV0IGlmIHRoZSByaW5nIGRpZG4ndCBhbHJl YWR5Cj4gKyAgICAgICAgICAgICAgICAgKiBleGlzdCB0aGVuIHRoZSBhcmd1bWVudHMgd291bGQg aGF2ZSBiZWVuIHZhbGlkLCBzbzogRUVYSVNULgo+ICsgICAgICAgICAgICAgICAgICovCj4gKyAg ICAgICAgICAgICAgICByZXQgPSAtRUVYSVNUOwo+ICsgICAgICAgICAgICAgICAgZ290byBvdXRf dW5sb2NrMjsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgZ3ByaW50ayhYRU5M T0dfREVCVUcsCj4gKyAgICAgICAgICAgICAgICAgICAgImFyZ286IHZtJXUgcmUtcmVnaXN0ZXJp bmcgZXhpc3RpbmcgcmluZyAodm0ldToleCB2bSVkKVxuIiwKPiArICAgICAgICAgICAgICAgICAg ICBjdXJyZC0+ZG9tYWluX2lkLCByaW5nX2lkLmRvbWFpbl9pZCwgcmluZ19pZC5wb3J0LAo+ICsg ICAgICAgICAgICAgICAgICAgIHJpbmdfaWQucGFydG5lcl9pZCk7Cj4gKyAgICAgICAgfQo+ICsg ICAgfQo+ICsKPiArICAgIHJldCA9IGZpbmRfcmluZ19tZm5zKGN1cnJkLCByaW5nX2luZm8sIG5w YWdlLCBwZ19kZXNjcl9obmQsIHJlZy5sZW4pOwo+ICsgICAgaWYgKCByZXQgKQo+ICsgICAgewo+ ICsgICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwKPiArICAgICAgICAgICAgICAgICJhcmdvOiB2 bSV1IGZhaWxlZCB0byBmaW5kIHJpbmcgbWZucyAodm0ldToleCB2bSVkKVxuIiwKPiArICAgICAg ICAgICAgICAgIGN1cnJkLT5kb21haW5faWQsIHJpbmdfaWQuZG9tYWluX2lkLCByaW5nX2lkLnBv cnQsCj4gKyAgICAgICAgICAgICAgICByaW5nX2lkLnBhcnRuZXJfaWQpOwo+ICsKPiArICAgICAg ICByaW5nX3JlbW92ZV9pbmZvKGN1cnJkLCByaW5nX2luZm8pOwo+ICsgICAgICAgIGdvdG8gb3V0 X3VubG9jazI7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIFRoZSBmaXJzdCBwYWdl IG9mIHRoZSBtZW1vcnkgc3VwcGxpZWQgZm9yIHRoZSByaW5nIGhhcyB0aGUgeGVuX2FyZ29fcmlu Zwo+ICsgICAgICogc3RydWN0dXJlIGF0IGl0cyBoZWFkLCB3aGljaCBpcyB3aGVyZSB0aGUgcmlu ZyBpbmRleGVzIHJlc2lkZS4KPiArICAgICAqLwo+ICsgICAgcmV0ID0gcmluZ19tYXBfcGFnZShy aW5nX2luZm8sIDAsICZtYXBfcmluZ3ApOwo+ICsgICAgaWYgKCByZXQgKQo+ICsgICAgewo+ICsg ICAgICAgIGdwcmludGsoWEVOTE9HX0VSUiwKPiArICAgICAgICAgICAgICAgICJhcmdvOiB2bSV1 IGZhaWxlZCB0byBtYXAgcmluZyBtZm4gMCAodm0ldToleCB2bSVkKVxuIiwKPiArICAgICAgICAg ICAgICAgIGN1cnJkLT5kb21haW5faWQsIHJpbmdfaWQuZG9tYWluX2lkLCByaW5nX2lkLnBvcnQs Cj4gKyAgICAgICAgICAgICAgICByaW5nX2lkLnBhcnRuZXJfaWQpOwo+ICsKPiArICAgICAgICBy aW5nX3JlbW92ZV9pbmZvKGN1cnJkLCByaW5nX2luZm8pOwo+ICsgICAgICAgIGdvdG8gb3V0X3Vu bG9jazI7Cj4gKyAgICB9Cj4gKyAgICByaW5ncCA9IG1hcF9yaW5ncDsKPiArCj4gKyAgICBwcml2 YXRlX3R4X3B0ciA9IHJlYWRfYXRvbWljKCZyaW5ncC0+dHhfcHRyKTsKPiArCj4gKyAgICBpZiAo IChwcml2YXRlX3R4X3B0ciA+PSByZWcubGVuKSB8fAo+ICsgICAgICAgICAoUk9VTkRVUF9NRVNT QUdFKHByaXZhdGVfdHhfcHRyKSAhPSBwcml2YXRlX3R4X3B0cikgKQo+ICsgICAgewo+ICsgICAg ICAgIC8qCj4gKyAgICAgICAgICogU2luY2UgdGhlIHJpbmcgaXMgYSBtZXNzLCBhdHRlbXB0IHRv IGZsdXNoIHRoZSBjb250ZW50cyBvZiBpdAo+ICsgICAgICAgICAqIGhlcmUgYnkgc2V0dGluZyB0 aGUgdHhfcHRyIHRvIHRoZSBuZXh0IGFsaWduZWQgbWVzc2FnZSBzbG90IHBhc3QKPiArICAgICAg ICAgKiB0aGUgbGF0ZXN0IHJ4X3B0ciB3ZSBoYXZlIG9ic2VydmVkLiBIYW5kbGUgcmluZyB3cmFw IGNvcnJlY3RseS4KPiArICAgICAgICAgKi8KPiArICAgICAgICBwcml2YXRlX3R4X3B0ciA9IFJP VU5EVVBfTUVTU0FHRShyZWFkX2F0b21pYygmcmluZ3AtPnJ4X3B0cikpOwo+ICsKPiArICAgICAg ICBpZiAoIHByaXZhdGVfdHhfcHRyID49IHJlZy5sZW4gKQo+ICsgICAgICAgICAgICBwcml2YXRl X3R4X3B0ciA9IDA7Cj4gKwo+ICsgICAgICAgIHVwZGF0ZV90eF9wdHIocmluZ19pbmZvLCBwcml2 YXRlX3R4X3B0cik7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmluZ19pbmZvLT50eF9wdHIgPSBwcml2 YXRlX3R4X3B0cjsKPiArICAgIHJpbmdfaW5mby0+bGVuID0gcmVnLmxlbjsKPiArICAgIGN1cnJk LT5hcmdvLT5yaW5nX2NvdW50Kys7Cj4gKwo+ICsgICAgaWYgKCBzZW5kX2luZm8gKQo+ICsgICAg ewo+ICsgICAgICAgIHNwaW5fbG9jaygmZHN0X2QtPmFyZ28tPnNlbmRfbG9jayk7Cj4gKwo+ICsg ICAgICAgIGhsaXN0X2FkZF9oZWFkKCZzZW5kX2luZm8tPm5vZGUsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgJmRzdF9kLT5hcmdvLT5zZW5kX2hhc2hbaGFzaF9pbmRleCgmc2VuZF9pbmZvLT5p ZCldKTsKPiArCj4gKyAgICAgICAgc3Bpbl91bmxvY2soJmRzdF9kLT5hcmdvLT5zZW5kX2xvY2sp Owo+ICsgICAgfQo+ICsKPiArIG91dF91bmxvY2syOgo+ICsgICAgaWYgKCAhcmV0ICYmIHNlbmRf aW5mbyApCj4gKyAgICAgICAgeGZyZWUoc2VuZF9pbmZvKTsKClRoZXJlJ3Mgbm8gbmVlZCB0byBj aGVjayBpZiBzZW5kX2luZm8gaXMgc2V0LCB4ZnJlZShOVUxMKSBpcyBzYWZlLgoKPiArCj4gKyAg ICBpZiAoIGRzdF9kICkKPiArICAgICAgICBwdXRfZG9tYWluKGRzdF9kKTsKPiArCj4gKyAgICB3 cml0ZV91bmxvY2soJmN1cnJkLT5hcmdvLT5sb2NrKTsKPiArCj4gKyBvdXRfdW5sb2NrOgo+ICsg ICAgcmVhZF91bmxvY2soJmFyZ29fbG9jayk7Cj4gKwo+ICsgb3V0Ogo+ICsgICAgcmV0dXJuIHJl dDsKPiArfQo+ICsKPiAgbG9uZwo+ICBkb19hcmdvX29wKHVuc2lnbmVkIGludCBjbWQsIFhFTl9H VUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgYXJnMSwKPiAgICAgICAgICAgICBYRU5fR1VFU1RfSEFO RExFX1BBUkFNKHZvaWQpIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywKPiBAQCAtMzkyLDYgKzky NiwzOCBAQCBkb19hcmdvX29wKHVuc2lnbmVkIGludCBjbWQsIFhFTl9HVUVTVF9IQU5ETEVfUEFS QU0odm9pZCkgYXJnMSwKPgo+ICAgICAgc3dpdGNoIChjbWQpCj4gICAgICB7Cj4gKyAgICBjYXNl IFhFTl9BUkdPX09QX3JlZ2lzdGVyX3Jpbmc6Cj4gKyAgICB7Cj4gKyAgICAgICAgWEVOX0dVRVNU X0hBTkRMRV9QQVJBTSh4ZW5fYXJnb19yZWdpc3Rlcl9yaW5nX3QpIHJlZ19obmQgPQo+ICsgICAg ICAgICAgICBndWVzdF9oYW5kbGVfY2FzdChhcmcxLCB4ZW5fYXJnb19yZWdpc3Rlcl9yaW5nX3Qp Owo+ICsgICAgICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX2FyZ29fcGFnZV9kZXNjcl90 KSBwZ19kZXNjcl9obmQgPQo+ICsgICAgICAgICAgICBndWVzdF9oYW5kbGVfY2FzdChhcmcyLCB4 ZW5fYXJnb19wYWdlX2Rlc2NyX3QpOwo+ICsgICAgICAgIC8qIGFyZzMgaXMgbnBhZ2UgKi8KPiAr ICAgICAgICAvKiBhcmc0IGlzIGZsYWdzICovCj4gKyAgICAgICAgYm9vbCBmYWlsX2V4aXN0ID0g YXJnNCAmIFhFTl9BUkdPX1JFR0lTVEVSX0ZMQUdfRkFJTF9FWElTVDsKPiArCj4gKyAgICAgICAg aWYgKCB1bmxpa2VseShhcmczID4gKFhFTl9BUkdPX01BWF9SSU5HX1NJWkUgPj4gUEFHRV9TSElG VCkpICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKPiArICAgICAg ICAgICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogQ2hl Y2sgYWNjZXNzIHRvIHRoZSB3aG9sZSBhcnJheSBoZXJlIHNvIHdlIGNhbiB1c2UgdGhlIGZhc3Rl ciBfX2NvcHkKPiArICAgICAgICAgKiBvcGVyYXRpb25zIHRvIHJlYWQgZWFjaCBlbGVtZW50IGxh dGVyLgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIGlmICggdW5saWtlbHkoIWd1ZXN0X2hhbmRs ZV9va2F5KHBnX2Rlc2NyX2huZCwgYXJnMykpICkKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAg ICAgICAgLyogYXJnNDogcmVzZXJ2ZSBjdXJyZW50bHktdW5kZWZpbmVkIGJpdHMsIHJlcXVpcmUg emVyby4gICovCj4gKyAgICAgICAgaWYgKCB1bmxpa2VseShhcmc0ICYgflhFTl9BUkdPX1JFR0lT VEVSX0ZMQUdfTUFTSykgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgcmMgPSAtRUlOVkFM Owo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHJjID0g cmVnaXN0ZXJfcmluZyhjdXJyZCwgcmVnX2huZCwgcGdfZGVzY3JfaG5kLCBhcmczLCBmYWlsX2V4 aXN0KTsKPiArICAgICAgICBicmVhazsKPiArICAgIH0KPiArCj4gICAgICBkZWZhdWx0Ogo+ICAg ICAgICAgIHJjID0gLUVPUE5PVFNVUFA7Cj4gICAgICAgICAgYnJlYWs7Cj4gZGlmZiAtLWdpdCBh L3hlbi9pbmNsdWRlL2FzbS1hcm0vZ3Vlc3RfYWNjZXNzLmggYi94ZW4vaW5jbHVkZS9hc20tYXJt L2d1ZXN0X2FjY2Vzcy5oCj4gaW5kZXggODk5N2ExYy4uNzBlOWE3OCAxMDA2NDQKPiAtLS0gYS94 ZW4vaW5jbHVkZS9hc20tYXJtL2d1ZXN0X2FjY2Vzcy5oCj4gKysrIGIveGVuL2luY2x1ZGUvYXNt LWFybS9ndWVzdF9hY2Nlc3MuaAo+IEBAIC0yOSw2ICsyOSw4IEBAIGludCBhY2Nlc3NfZ3Vlc3Rf bWVtb3J5X2J5X2lwYShzdHJ1Y3QgZG9tYWluICpkLCBwYWRkcl90IGlwYSwgdm9pZCAqYnVmLAo+ ICAvKiBJcyB0aGUgZ3Vlc3QgaGFuZGxlIGEgTlVMTCByZWZlcmVuY2U/ICovCj4gICNkZWZpbmUg Z3Vlc3RfaGFuZGxlX2lzX251bGwoaG5kKSAgICAgICAgKChobmQpLnAgPT0gTlVMTCkKPgo+ICsj ZGVmaW5lIGd1ZXN0X2hhbmRsZV9pc19hbGlnbmVkKGhuZCwgbWFzaykgKCEoKHVpbnRwdHJfdCko aG5kKS5wICYgKG1hc2spKSkKPiArCj4gIC8qIE9mZnNldCB0aGUgZ2l2ZW4gZ3Vlc3QgaGFuZGxl IGludG8gdGhlIGFycmF5IGl0IHJlZmVycyB0by4gKi8KPiAgI2RlZmluZSBndWVzdF9oYW5kbGVf YWRkX29mZnNldChobmQsIG5yKSAoKGhuZCkucCArPSAobnIpKQo+ICAjZGVmaW5lIGd1ZXN0X2hh bmRsZV9zdWJ0cmFjdF9vZmZzZXQoaG5kLCBucikgKChobmQpLnAgLT0gKG5yKSkKPiBkaWZmIC0t Z2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9ndWVzdF9hY2Nlc3MuaCBiL3hlbi9pbmNsdWRlL2Fz bS14ODYvZ3Vlc3RfYWNjZXNzLmgKPiBpbmRleCBjYTcwMGM5Li44ZGRlNWQ1IDEwMDY0NAo+IC0t LSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvZ3Vlc3RfYWNjZXNzLmgKPiArKysgYi94ZW4vaW5jbHVk ZS9hc20teDg2L2d1ZXN0X2FjY2Vzcy5oCj4gQEAgLTQxLDYgKzQxLDggQEAKPiAgLyogSXMgdGhl IGd1ZXN0IGhhbmRsZSBhIE5VTEwgcmVmZXJlbmNlPyAqLwo+ICAjZGVmaW5lIGd1ZXN0X2hhbmRs ZV9pc19udWxsKGhuZCkgICAgICAgICgoaG5kKS5wID09IE5VTEwpCj4KPiArI2RlZmluZSBndWVz dF9oYW5kbGVfaXNfYWxpZ25lZChobmQsIG1hc2spICghKCh1aW50cHRyX3QpKGhuZCkucCAmICht YXNrKSkpCj4gKwo+ICAvKiBPZmZzZXQgdGhlIGdpdmVuIGd1ZXN0IGhhbmRsZSBpbnRvIHRoZSBh cnJheSBpdCByZWZlcnMgdG8uICovCj4gICNkZWZpbmUgZ3Vlc3RfaGFuZGxlX2FkZF9vZmZzZXQo aG5kLCBucikgKChobmQpLnAgKz0gKG5yKSkKPiAgI2RlZmluZSBndWVzdF9oYW5kbGVfc3VidHJh Y3Rfb2Zmc2V0KGhuZCwgbnIpICgoaG5kKS5wIC09IChucikpCj4gZGlmZiAtLWdpdCBhL3hlbi9p bmNsdWRlL3B1YmxpYy9hcmdvLmggYi94ZW4vaW5jbHVkZS9wdWJsaWMvYXJnby5oCj4gaW5kZXgg NDgxODY4NC4uODk0NzIzMCAxMDA2NDQKPiAtLS0gYS94ZW4vaW5jbHVkZS9wdWJsaWMvYXJnby5o Cj4gKysrIGIveGVuL2luY2x1ZGUvcHVibGljL2FyZ28uaAo+IEBAIC0zMSw2ICszMSwyNiBAQAo+ Cj4gICNpbmNsdWRlICJ4ZW4uaCIKPgo+ICsjZGVmaW5lIFhFTl9BUkdPX0RPTUlEX0FOWSAgICAg ICBET01JRF9JTlZBTElECj4gKwo+ICsvKgo+ICsgKiBUaGUgbWF4aW11bSBzaXplIG9mIGFuIEFy Z28gcmluZyBpcyBkZWZpbmVkIHRvIGJlOiAxNkdCCgpJcyBzdWNoIGEgYmlnIHNpemUgcmVhbGx5 IHJlcXVpcmVkIGFzIHRoZSBkZWZhdWx0IG1heGltdW0/IFRoZSBzaXplIG9mCnRoZSBpbnRlcm5h bCBzdHJ1Y3R1cmVzIHJlcXVpcmVkIHRvIHN1cHBvcnQgYSAxNkdCIHJpbmcgd291bGQgYmUgcXVp dGUKYmlnLCBoYXMgdGhpcyBiZWVuIHRha2VuIGludG8gYWNjb3VudD8KClRoYW5rcywgUm9nZXIu CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2 ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs