From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH v4 9/9] livepach: Add .livepatch.hooks functions and test-case Date: Tue, 6 Sep 2016 13:22:03 -0400 Message-ID: <20160906172203.GG2161@char.us.oracle.com> References: <1472005332-32207-1-git-send-email-konrad.wilk@oracle.com> <1472005332-32207-10-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bhK4e-0006qw-2o for xen-devel@lists.xenproject.org; Tue, 06 Sep 2016 17:22:16 +0000 Content-Disposition: inline In-Reply-To: <1472005332-32207-10-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, konrad@kernel.org, ross.lagerwall@citrix.com Cc: Stefano Stabellini , Wei Liu , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Jan Beulich List-Id: xen-devel@lists.xenproject.org T24gVHVlLCBBdWcgMjMsIDIwMTYgYXQgMTA6MjI6MTJQTSAtMDQwMCwgS29ucmFkIFJ6ZXN6dXRl ayBXaWxrIHdyb3RlOgo+IEZyb206IFJvc3MgTGFnZXJ3YWxsIDxyb3NzLmxhZ2Vyd2FsbEBjaXRy aXguY29tPgo+IAo+IEFkZCBob29rIGZ1bmN0aW9ucyB3aGljaCBydW4gZHVyaW5nIHBhdGNoIGFw cGx5IGFuZCBwYXRjaCByZXZlcnQuCj4gSG9vayBmdW5jdGlvbnMgYXJlIHVzZWQgYnkgbGl2ZXBh dGNoIHBheWxvYWRzIHRvIG1hbmlwdWxhdGUgZGF0YQo+IHN0cnVjdHVyZXMgZHVyaW5nIHBhdGNo aW5nLCBldGMuCj4gCj4gT25lIHVzZSBjYXNlIGlzIHRoZSBYU0E5MS4gQXMgTWFydGluIG1lbnRp b25zIGl0Ogo+ICJJZiB3ZSBoYXZlIHNoYWRvdyB2YXJpYWJsZXMsIHdlIGFsc28gbmVlZCBhbiB1 bmxvYWQgaG9vayB0byBnYXJiYWdlCj4gY29sbGVjdCBhbGwgdGhlIHZhcmlhYmxlcyBpbnRyb2R1 Y2VkIGJ5IGEgaG90cGF0Y2ggdG8gcHJldmVudCBtZW1vcnkKPiBsZWFrcy4gIFBvdGVudGlhbGx5 LCB3ZSBhbHNvIHdhbnQgdG8gcHJlLXJlc2VydmUgbWVtb3J5IGZvciBzdGF0aWMgb3IKPiBleGlz dGluZyBkeW5hbWljIG9iamVjdHMgaW4gdGhlIGxvYWQtaG9vayBpbnN0ZWFkIG9mIG9uIHRoZSBm bHkuCj4gCj4gRm9yIHRlc3RpbmcgYW5kIGRlYnVnZ2luZywgdmFyaW91cyBhcHBsaWNhdGlvbnMg YXJlIHBvc3NpYmxlLgo+IAo+IEluIGdlbmVyYWwsIHRoZSBob29rcyBwcm92aWRlIGZsZXhpYmls aXR5IHdoZW4gaGF2aW5nIHRvIGRlYWwgd2l0aAo+IHVuZm9yZXNlZW4gY2FzZXMsIGJ1dCB0aGVp ciBhcHBsaWNhdGlvbiBzaG91bGQgYmUgcmFyZWx5IHJlcXVpcmVkICg8Cj4gMTAlKS4iCj4gCj4g RnVydGhlcm1vcmUgaW5jbHVkZSBhIHRlc3QtY2FzZSBmb3IgaXQuCj4gCj4gU2lnbmVkLW9mZi1i eTogUm9zcyBMYWdlcndhbGwgPHJvc3MubGFnZXJ3YWxsQGNpdHJpeC5jb20+Cj4gU2lnbmVkLW9m Zi1ieTogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2lsa0BvcmFjbGUuY29tPgoKClNv Li4uIGFueWJvZHkgd2lsbGluZyB0byByZXZpZXcgaXQgOi0pCgo+IAo+IC0tLQo+IENjOiBBbmRy ZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgo+IENjOiBHZW9yZ2UgRHVubGFw IDxHZW9yZ2UuRHVubGFwQGV1LmNpdHJpeC5jb20+Cj4gQ2M6IElhbiBKYWNrc29uIDxpYW4uamFj a3NvbkBldS5jaXRyaXguY29tPgo+IENjOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+ Cj4gQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4KPiBDYzog VGltIERlZWdhbiA8dGltQHhlbi5vcmc+Cj4gQ2M6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5j b20+CgoKSW4gcmVnYXJkcyB0byB0aGlzIGdvaW5nIGluIHY0LjggbXkgcmVjb2xsZWN0aW9uIGlz IHRoYXQ6CgogR2VvcmdlOiAwCiBBbmRyZXc6ICsxCiBKYW46IDAgKHdpdGggYSBzbGlnaHQgbGVh bmluZyB0b3dhcmRzIC0xKT8KCkkgdGhpbmsgdGhhdCBtZWFucyBmb2xrcyBhcmUgT0sgb3IgJ2Rv bid0IGNhcmUnLgoKQW5kIHRoZSBsaXZlcGF0Y2ggbWFpbnRhaW5lcnM6CiBSb3NzOiArMSAob2J2 aW91c2x5IHNpbmNlIGhlIHdyb3RlIGl0KQogS29ucmFkOiArMQoKPiAKPiB2MC40Li52MC4xMTog RGVmZXJlZCBmb3IgdjQuOAo+IHYwLjEyOiBzL3hzcGxpY2UvbGl2ZXBhdGNoLwo+IAo+IHYzOiBD bGFyaWZ5IHRoZSBjb21tZW50cyBhYm91dCBzcGluX2RlYnVnX2VuYWJsZQo+ICAgICBSZW5hbWUg b25lIG9mIHRoZSBob29rcyB0byBsb3dlci1jYXNlIChaLT56KSB0byBndWFyYW50ZWUgaXQgYmVp bmcKPiAgICAgY2FsbGVkIGxhc3QuCj4gICAgIExlYXJuZWQgYSBsb3Qgb2YgYWJvdXQgJ2NvbnN0 Jwo+IHY0OiBEbyB0aGUgYWN0dWFsIGNvbnN0IG9mIHRoZSBob29rcy4KPiAgICAgUmVtb3ZlIHRo ZSByZXF1aXJlbWVudCBmb3IgdGhlIHRlc3RzLWNhc2UgaG9va3MgdG8gYmUgc29ydGVkCj4gICAg ICh0aGV5IG5ldmVyIHdlcmUgdG8gc3RhcnQgd2l0aCkuCj4gICAgIEZpeCB1cCB0aGUgY29tbWVu dCBhYm91dCBzcGluX2RlYnVnX2VuYWJsZSBzbyBtb3JlLgo+IC0tLQo+ICBkb2NzL21pc2MvbGl2 ZXBhdGNoLm1hcmtkb3duICAgICAgICB8IDIzICsrKysrKysrKysrKysrKysrCj4gIHhlbi9hcmNo L3g4Ni90ZXN0L3hlbl9oZWxsb193b3JsZC5jIHwgMzQgKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ICB4ZW4vY29tbW9uL2xpdmVwYXRjaC5jICAgICAgICAgICAgICB8IDUwICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0KPiAgeGVuL2luY2x1ZGUveGVuL2xpdmVwYXRjaF9w YXlsb2FkLmggfCA0OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgNCBm aWxlcyBjaGFuZ2VkLCAxNTUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUveGVuL2xpdmVwYXRjaF9wYXlsb2FkLmgKPiAKPiBkaWZm IC0tZ2l0IGEvZG9jcy9taXNjL2xpdmVwYXRjaC5tYXJrZG93biBiL2RvY3MvbWlzYy9saXZlcGF0 Y2gubWFya2Rvd24KPiBpbmRleCBhZDBkZjI2Li45ZjUyYWViIDEwMDY0NAo+IC0tLSBhL2RvY3Mv bWlzYy9saXZlcGF0Y2gubWFya2Rvd24KPiArKysgYi9kb2NzL21pc2MvbGl2ZXBhdGNoLm1hcmtk b3duCj4gQEAgLTM0Myw2ICszNDMsMTMgQEAgV2hlbiByZXZlcnRpbmcgYSBwYXRjaCwgdGhlIGh5 cGVydmlzb3IgaXRlcmF0ZXMgb3ZlciBlYWNoIGBsaXZlcGF0Y2hfZnVuY2AKPiAgYW5kIHRoZSBj b3JlIGNvZGUgY29waWVzIHRoZSBkYXRhIGZyb20gdGhlIHVuZG8gYnVmZmVyIChwcml2YXRlIGlu dGVybmFsIGNvcHkpCj4gIHRvIGBvbGRfYWRkcmAuCj4gIAo+ICtJdCBvcHRpb25hbGx5IG1heSBj b250YWluIHRoZSBhZGRyZXNzIG9mIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgcmlnaHQgYmVmb3Jl Cj4gK2JlaW5nIGFwcGxpZWQgYW5kIGFmdGVyIGJlaW5nIHJldmVydGVkOgo+ICsKPiArICogYC5s aXZlcGF0Y2guaG9va3MubG9hZGAgLSBhbiBhcnJheSBvZiBmdW5jdGlvbiBwb2ludGVycy4KPiAr ICogYC5saXZlcGF0Y2guaG9va3MudW5sb2FkYCAtIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHBvaW50 ZXJzLgo+ICsKPiArCj4gICMjIyBFeGFtcGxlIG9mIC5saXZlcGF0Y2guZnVuY3MKPiAgCj4gIEEg c2ltcGxlIGV4YW1wbGUgb2Ygd2hhdCBhIHBheWxvYWQgZmlsZSBjYW4gYmU6Cj4gQEAgLTM4MCw2 ICszODcsMjIgQEAgc3RydWN0IGxpdmVwYXRjaF9mdW5jIGxpdmVwYXRjaF9oZWxsb193b3JsZCA9 IHsKPiAgCj4gIENvZGUgbXVzdCBiZSBjb21waWxlZCB3aXRoIC1mUElDLgo+ICAKPiArIyMjIC5s aXZlcGF0Y2guaG9va3MubG9hZCBhbmQgLmxpdmVwYXRjaC5ob29rcy51bmxvYWQKPiArCj4gK1Ro aXMgc2VjdGlvbiBjb250YWlucyBhbiBhcnJheSBvZiBmdW5jdGlvbiBwb2ludGVycyB0byBiZSBl eGVjdXRlZAo+ICtiZWZvcmUgcGF5bG9hZCBpcyBiZWluZyBhcHBsaWVkICgubGl2ZXBhdGNoLmZ1 bmNzKSBvciBhZnRlciByZXZlcnRpbmcKPiArdGhlIHBheWxvYWQuIFRoaXMgaXMgdXNlZnVsIHRv IHByZXBhcmUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbmVlZCB0bwo+ICtiZSBtb2RpZmllZCBwYXRj aGluZy4KPiArCj4gK0VhY2ggZW50cnkgaW4gdGhpcyBhcnJheSBpcyBlaWdodCBieXRlcy4KPiAr Cj4gK1RoZSB0eXBlIGRlZmluaXRpb24gb2YgdGhlIGZ1bmN0aW9uIGFyZSBhcyBmb2xsb3c6Cj4g Kwo+ICs8cHJlPgo+ICt0eXBlZGVmIHZvaWQgKCpsaXZlcGF0Y2hfbG9hZGNhbGxfdCkodm9pZCk7 ICAKPiArdHlwZWRlZiB2b2lkICgqbGl2ZXBhdGNoX3VubG9hZGNhbGxfdCkodm9pZCk7ICAgCj4g KzwvcHJlPgo+ICsKPiAgIyMjIC5saXZlcGF0Y2guZGVwZW5kcyBhbmQgLm5vdGUuZ251LmJ1aWxk LWlkCj4gIAo+ICBUbyBzdXBwb3J0IGRlcGVuZGVuY2llcyBjaGVja2luZyBhbmQgc2FmZSBsb2Fk aW5nICh0byBsb2FkIHRoZQo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvdGVzdC94ZW5faGVs bG9fd29ybGQuYyBiL3hlbi9hcmNoL3g4Ni90ZXN0L3hlbl9oZWxsb193b3JsZC5jCj4gaW5kZXgg NDIyYmRmMS4uY2I1ZTI3YSAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC94ODYvdGVzdC94ZW5faGVs bG9fd29ybGQuYwo+ICsrKyBiL3hlbi9hcmNoL3g4Ni90ZXN0L3hlbl9oZWxsb193b3JsZC5jCj4g QEAgLTQsMTQgKzQsNDggQEAKPiAgICovCj4gIAo+ICAjaW5jbHVkZSAiY29uZmlnLmgiCj4gKyNp bmNsdWRlIDx4ZW4vbGliLmg+Cj4gICNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4KPiAgI2luY2x1ZGUg PHhlbi92ZXJzaW9uLmg+Cj4gICNpbmNsdWRlIDx4ZW4vbGl2ZXBhdGNoLmg+Cj4gKyNpbmNsdWRl IDx4ZW4vbGl2ZXBhdGNoX3BheWxvYWQuaD4KPiAgCj4gICNpbmNsdWRlIDxwdWJsaWMvc3lzY3Rs Lmg+Cj4gIAo+ICBzdGF0aWMgY2hhciBoZWxsb193b3JsZF9wYXRjaF90aGlzX2ZuY1tdID0gInhl bl9leHRyYV92ZXJzaW9uIjsKPiAgZXh0ZXJuIGNvbnN0IGNoYXIgKnhlbl9oZWxsb193b3JsZCh2 b2lkKTsKPiArc3RhdGljIHVuc2lnbmVkIGludCBjbnQ7Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcHBs eV9ob29rKHZvaWQpCj4gK3sKPiArICAgIHByaW50ayhLRVJOX0RFQlVHICJIb29rIGV4ZWN1dGlu Zy5cbiIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCByZXZlcnRfaG9vayh2b2lkKQo+ICt7Cj4g KyAgICBwcmludGsoS0VSTl9ERUJVRyAiSG9vayB1bmxvYWRlZC5cbiIpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCAgaGlfZnVuYyh2b2lkKQo+ICt7Cj4gKyAgICBwcmludGsoS0VSTl9ERUJVRyAi JXM6IEhpISAoY2FsbGVkICV1IHRpbWVzKVxuIiwgX19mdW5jX18sICsrY250KTsKPiArfTsKPiAr Cj4gK3N0YXRpYyB2b2lkIGNoZWNrX2ZuYyh2b2lkKQo+ICt7Cj4gKyAgICBwcmludGsoS0VSTl9E RUJVRyAiJXM6IEhpIGZ1bmMgY2FsbGVkICV1IHRpbWVzXG4iLCBfX2Z1bmNfXywgY250KTsKPiAr ICAgIEJVR19PTihjbnQgPT0gMCB8fCBjbnQgPiAyKTsKPiArfQo+ICsKPiArTElWRVBBVENIX0xP QURfSE9PSyhhcHBseV9ob29rKTsKPiArTElWRVBBVENIX1VOTE9BRF9IT09LKHJldmVydF9ob29r KTsKPiArCj4gKy8qIEltYmFsYW5jZSBoZXJlLiBUd28gbG9hZCBhbmQgdGhyZWUgdW5sb2FkLiAq Lwo+ICsKPiArTElWRVBBVENIX0xPQURfSE9PSyhoaV9mdW5jKTsKPiArTElWRVBBVENIX1VOTE9B RF9IT09LKGhpX2Z1bmMpOwo+ICsKPiArTElWRVBBVENIX1VOTE9BRF9IT09LKGNoZWNrX2ZuYyk7 Cj4gIAo+ICBzdHJ1Y3QgbGl2ZXBhdGNoX2Z1bmMgX19zZWN0aW9uKCIubGl2ZXBhdGNoLmZ1bmNz IikgbGl2ZXBhdGNoX3hlbl9oZWxsb193b3JsZCA9IHsKPiAgICAgIC52ZXJzaW9uID0gTElWRVBB VENIX1BBWUxPQURfVkVSU0lPTiwKPiBkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9saXZlcGF0Y2gu YyBiL3hlbi9jb21tb24vbGl2ZXBhdGNoLmMKPiBpbmRleCBkZDI0YTA3Li41MjhjMGM5IDEwMDY0 NAo+IC0tLSBhL3hlbi9jb21tb24vbGl2ZXBhdGNoLmMKPiArKysgYi94ZW4vY29tbW9uL2xpdmVw YXRjaC5jCj4gQEAgLTIzLDYgKzIzLDcgQEAKPiAgI2luY2x1ZGUgPHhlbi93YWl0Lmg+Cj4gICNp bmNsdWRlIDx4ZW4vbGl2ZXBhdGNoX2VsZi5oPgo+ICAjaW5jbHVkZSA8eGVuL2xpdmVwYXRjaC5o Pgo+ICsjaW5jbHVkZSA8eGVuL2xpdmVwYXRjaF9wYXlsb2FkLmg+Cj4gIAo+ICAjaW5jbHVkZSA8 YXNtL2V2ZW50Lmg+Cj4gIAo+IEBAIC03Myw3ICs3NCwxMSBAQCBzdHJ1Y3QgcGF5bG9hZCB7Cj4g ICAgICB2b2lkICoqYnNzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLmJzcydzIG9mIHRo ZSBwYXlsb2FkLiAqLwo+ICAgICAgc2l6ZV90ICpic3Nfc2l6ZTsgICAgICAgICAgICAgICAgICAg IC8qIGFuZCB0aGVpciBzaXplcy4gKi8KPiAgICAgIHNpemVfdCBuX2JzczsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTaXplIG9mIHRoZSBhcnJheS4gKi8KPiAtICAgIGNoYXIgbmFtZVtYRU5f TElWRVBBVENIX05BTUVfU0laRV07IC8qIE5hbWUgb2YgaXQuICovCj4gKyAgICBsaXZlcGF0Y2hf bG9hZGNhbGxfdCAqY29uc3QgKmxvYWRfZnVuY3M7ICAgLyogVGhlIGFycmF5IG9mIGZ1bmNzIHRv IGNhbGwgYWZ0ZXIgKi8KPiArICAgIGxpdmVwYXRjaF91bmxvYWRjYWxsX3QgKmNvbnN0ICp1bmxv YWRfZnVuY3M7LyogbG9hZCBhbmQgdW5sb2FkIG9mIHRoZSBwYXlsb2FkLiAqLwo+ICsgICAgdW5z aWduZWQgaW50IG5fbG9hZF9mdW5jczsgICAgICAgICAgIC8qIE5yIG9mIHRoZSBmdW5jcyB0byBs b2FkIGFuZCBleGVjdXRlLiAqLwo+ICsgICAgdW5zaWduZWQgaW50IG5fdW5sb2FkX2Z1bmNzOyAg ICAgICAgIC8qIE5yIG9mIGZ1bmNzIHRvIGNhbGwgZHVydW5nIHVubG9hZC4gKi8KPiArICAgIGNo YXIgbmFtZVtYRU5fTElWRVBBVENIX05BTUVfU0laRV07ICAvKiBOYW1lIG9mIGl0LiAqLwo+ICB9 Owo+ICAKPiAgLyogRGVmaW5lcyBhbiBvdXRzdGFuZGluZyBwYXRjaGluZyBhY3Rpb24uICovCj4g QEAgLTU4Myw2ICs1ODgsMjUgQEAgc3RhdGljIGludCBwcmVwYXJlX3BheWxvYWQoc3RydWN0IHBh eWxvYWQgKnBheWxvYWQsCj4gICAgICAgICAgICAgIHJldHVybiByYzsKPiAgICAgIH0KPiAgCj4g KyAgICBzZWMgPSBsaXZlcGF0Y2hfZWxmX3NlY19ieV9uYW1lKGVsZiwgIi5saXZlcGF0Y2guaG9v a3MubG9hZCIpOwo+ICsgICAgaWYgKCBzZWMgKQo+ICsgICAgewo+ICsgICAgICAgIGlmICggc2Vj LT5zZWMtPnNoX3NpemUgJSBzaXplb2YoKnBheWxvYWQtPmxvYWRfZnVuY3MpICkKPiArICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsgICAgICAgIHBheWxvYWQtPmxvYWRfZnVuY3Mg PSBzZWMtPmxvYWRfYWRkcjsKPiArICAgICAgICBwYXlsb2FkLT5uX2xvYWRfZnVuY3MgPSBzZWMt PnNlYy0+c2hfc2l6ZSAvIHNpemVvZigqcGF5bG9hZC0+bG9hZF9mdW5jcyk7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgc2VjID0gbGl2ZXBhdGNoX2VsZl9zZWNfYnlfbmFtZShlbGYsICIubGl2ZXBhdGNo Lmhvb2tzLnVubG9hZCIpOwo+ICsgICAgaWYgKCBzZWMgKQo+ICsgICAgewo+ICsgICAgICAgIGlm ICggc2VjLT5zZWMtPnNoX3NpemUgJSBzaXplb2YoKnBheWxvYWQtPnVubG9hZF9mdW5jcykgKQo+ ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiArCj4gKyAgICAgICAgcGF5bG9hZC0+dW5s b2FkX2Z1bmNzID0gc2VjLT5sb2FkX2FkZHI7Cj4gKyAgICAgICAgcGF5bG9hZC0+bl91bmxvYWRf ZnVuY3MgPSBzZWMtPnNlYy0+c2hfc2l6ZSAvIHNpemVvZigqcGF5bG9hZC0+dW5sb2FkX2Z1bmNz KTsKPiArICAgIH0KPiAgICAgIHNlYyA9IGxpdmVwYXRjaF9lbGZfc2VjX2J5X25hbWUoZWxmLCBF TEZfQlVJTERfSURfTk9URSk7Cj4gICAgICBpZiAoIHNlYyApCj4gICAgICB7Cj4gQEAgLTEwNzEs NiArMTA5NSwxOCBAQCBzdGF0aWMgaW50IGFwcGx5X3BheWxvYWQoc3RydWN0IHBheWxvYWQgKmRh dGEpCj4gIAo+ICAgICAgYXJjaF9saXZlcGF0Y2hfcXVpZXNjZSgpOwo+ICAKPiArICAgIC8qCj4g KyAgICAgKiBTaW5jZSB3ZSBhcmUgcnVubmluZyB3aXRoIElSUXMgZGlzYWJsZWQgYW5kIHRoZSBo b29rcyBtYXkgY2FsbCBjb21tb24KPiArICAgICAqIGNvZGUgLSB3aGljaCBleHBlY3RzIGNlcnRh aW4gc3BpbmxvY2tzIHRvIHJ1biB3aXRoIElSUXMgZW5hYmxlZCAtIHdlCj4gKyAgICAgKiB0ZW1w b3JhcmlseSBkaXNhYmxlIHRoZSBzcGluIGxvY2tzIElSUSBzdGF0ZSBjaGVja3MuCj4gKyAgICAg Ki8KPiArICAgIHNwaW5fZGVidWdfZGlzYWJsZSgpOwo+ICsgICAgZm9yICggaSA9IDA7IGkgPCBk YXRhLT5uX2xvYWRfZnVuY3M7IGkrKyApCj4gKyAgICAgICAgZGF0YS0+bG9hZF9mdW5jc1tpXSgp Owo+ICsgICAgc3Bpbl9kZWJ1Z19lbmFibGUoKTsKPiArCj4gKyAgICBBU1NFUlQoIWxvY2FsX2ly cV9pc19lbmFibGVkKCkpOwo+ICsKPiAgICAgIGZvciAoIGkgPSAwOyBpIDwgZGF0YS0+bmZ1bmNz OyBpKysgKQo+ICAgICAgICAgIGFyY2hfbGl2ZXBhdGNoX2FwcGx5X2ptcCgmZGF0YS0+ZnVuY3Nb aV0pOwo+ICAKPiBAQCAtMTA5Nyw2ICsxMTMzLDE4IEBAIHN0YXRpYyBpbnQgcmV2ZXJ0X3BheWxv YWQoc3RydWN0IHBheWxvYWQgKmRhdGEpCj4gICAgICBmb3IgKCBpID0gMDsgaSA8IGRhdGEtPm5m dW5jczsgaSsrICkKPiAgICAgICAgICBhcmNoX2xpdmVwYXRjaF9yZXZlcnRfam1wKCZkYXRhLT5m dW5jc1tpXSk7Cj4gIAo+ICsgICAgLyoKPiArICAgICAqIFNpbmNlIHdlIGFyZSBydW5uaW5nIHdp dGggSVJRcyBkaXNhYmxlZCBhbmQgdGhlIGhvb2tzIG1heSBjYWxsIGNvbW1vbgo+ICsgICAgICog Y29kZSAtIHdoaWNoIGV4cGVjdHMgY2VydGFpbiBzcGlubG9ja3MgdG8gcnVuIHdpdGggSVJRcyBl bmFibGVkIC0gd2UKPiArICAgICAqIHRlbXBvcmFyaWx5IGRpc2FibGUgdGhlIHNwaW4gbG9ja3Mg SVJRIHN0YXRlIGNoZWNrcy4KPiArICAgICAqLwo+ICsgICAgc3Bpbl9kZWJ1Z19kaXNhYmxlKCk7 Cj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IGRhdGEtPm5fdW5sb2FkX2Z1bmNzOyBpKysgKQo+ICsg ICAgICAgIGRhdGEtPnVubG9hZF9mdW5jc1tpXSgpOwo+ICsgICAgc3Bpbl9kZWJ1Z19lbmFibGUo KTsKPiArCj4gKyAgICBBU1NFUlQoIWxvY2FsX2lycV9pc19lbmFibGVkKCkpOwo+ICsKPiAgICAg IGFyY2hfbGl2ZXBhdGNoX3Jldml2ZSgpOwo+ICAKPiAgICAgIC8qCj4gZGlmZiAtLWdpdCBhL3hl bi9pbmNsdWRlL3hlbi9saXZlcGF0Y2hfcGF5bG9hZC5oIGIveGVuL2luY2x1ZGUveGVuL2xpdmVw YXRjaF9wYXlsb2FkLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjhm MzhjYzIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIveGVuL2luY2x1ZGUveGVuL2xpdmVwYXRjaF9w YXlsb2FkLmgKPiBAQCAtMCwwICsxLDQ5IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoQykgMjAx NiBDaXRyaXggU3lzdGVtcyBSJkQgTHRkLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19YRU5fTElW RVBBVENIX1BBWUxPQURfSF9fCj4gKyNkZWZpbmUgX19YRU5fTElWRVBBVENIX1BBWUxPQURfSF9f Cj4gKwo+ICsvKgo+ICsgKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSB0byBiZSB1c2Vk IGluIHBhdGNoZXMuIFRoZXkgYXJlIHRha2VuCj4gKyAqIGZyb20ga3BhdGNoLgo+ICsgKi8KPiAr dHlwZWRlZiB2b2lkIGxpdmVwYXRjaF9sb2FkY2FsbF90KHZvaWQpOwo+ICt0eXBlZGVmIHZvaWQg bGl2ZXBhdGNoX3VubG9hZGNhbGxfdCh2b2lkKTsKPiArCj4gKy8qCj4gKyAqIExJVkVQQVRDSF9M T0FEX0hPT0sgbWFjcm8KPiArICoKPiArICogRGVjbGFyZXMgYSBmdW5jdGlvbiBwb2ludGVyIHRv IGJlIGFsbG9jYXRlZCBpbiBhIG5ldwo+ICsgKiAubGl2ZXBhdGNoLmhvb2subG9hZCBzZWN0aW9u LiAgVGhpcyBsaXZlcGF0Y2hfbG9hZF9kYXRhIHN5bWJvbCBpcyBsYXRlcgo+ICsgKiBzdHJpcHBl ZCBieSBjcmVhdGUtZGlmZi1vYmplY3Qgc28gdGhhdCBpdCBjYW4gYmUgZGVjbGFyZWQgaW4gbXVs dGlwbGUKPiArICogb2JqZWN0cyB0aGF0IGFyZSBsYXRlciBsaW5rZWQgdG9nZXRoZXIsIGF2b2lk aW5nIGdsb2JhbCBzeW1ib2wKPiArICogY29sbGlzaW9uLiAgU2luY2UgbXVsdGlwbGUgaG9va3Mg Y2FuIGJlIHJlZ2lzdGVyZWQsIHRoZQo+ICsgKiAubGl2ZXBhdGNoLmhvb2subG9hZCBzZWN0aW9u IGlzIGEgdGFibGUgb2YgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZQo+ICsgKiBleGVjdXRlZCBpbiBz ZXJpZXMgYnkgdGhlIGxpdmVwYXRjaCBpbmZyYXN0cnVjdHVyZSBhdCBwYXRjaCBsb2FkIHRpbWUu Cj4gKyAqLwo+ICsjZGVmaW5lIExJVkVQQVRDSF9MT0FEX0hPT0soX2ZuKSBcCj4gKyAgICBsaXZl cGF0Y2hfbG9hZGNhbGxfdCAqX19hdHRyaWJ1dGVfXygod2VhaykpIFwKPiArICAgICAgICBjb25z dCBsaXZlcGF0Y2hfbG9hZF9kYXRhXyMjX2ZuIF9fc2VjdGlvbigiLmxpdmVwYXRjaC5ob29rcy5s b2FkIikgPSBfZm47Cj4gKwo+ICsvKgo+ICsgKiBMSVZFUEFUQ0hfVU5MT0FEX0hPT0sgbWFjcm8K PiArICoKPiArICogU2FtZSBhcyBMT0FEIGhvb2sgd2l0aCBzL2xvYWQvdW5sb2FkLwo+ICsgKi8K PiArI2RlZmluZSBMSVZFUEFUQ0hfVU5MT0FEX0hPT0soX2ZuKSBcCj4gKyAgICAgbGl2ZXBhdGNo X3VubG9hZGNhbGxfdCAqX19hdHRyaWJ1dGVfXygod2VhaykpIFwKPiArICAgICAgICBjb25zdCBs aXZlcGF0Y2hfdW5sb2FkX2RhdGFfIyNfZm4gX19zZWN0aW9uKCIubGl2ZXBhdGNoLmhvb2tzLnVu bG9hZCIpID0gX2ZuOwo+ICsKPiArI2VuZGlmIC8qIF9fWEVOX0xJVkVQQVRDSF9QQVlMT0FEX0hf XyAqLwo+ICsKPiArLyoKPiArICogTG9jYWwgdmFyaWFibGVzOgo+ICsgKiBtb2RlOiBDCj4gKyAq IGMtZmlsZS1zdHlsZTogIkJTRCIKPiArICogYy1iYXNpYy1vZmZzZXQ6IDQKPiArICogdGFiLXdp ZHRoOiA0Cj4gKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAo+ICsgKiBFbmQ6Cj4gKyAqLwo+IC0t IAo+IDIuNC4xMQo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRw czovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==