From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: linux-nfs-owner@vger.kernel.org Received: from mx2.netapp.com ([216.240.18.37]:16465 "EHLO mx2.netapp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752713Ab2DWV1r (ORCPT ); Mon, 23 Apr 2012 17:27:47 -0400 From: "Myklebust, Trond" To: Chuck Lever CC: "linux-nfs@vger.kernel.org" Subject: Re: [PATCH 18/20] NFS: Detect NFSv4 server trunking when mounting Date: Mon, 23 Apr 2012 21:27:45 +0000 Message-ID: <1335216465.11427.34.camel@lade.trondhjem.org> References: <20120423205312.11446.67081.stgit@degas.1015granger.net> <20120423205552.11446.58714.stgit@degas.1015granger.net> In-Reply-To: <20120423205552.11446.58714.stgit@degas.1015granger.net> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org List-ID: T24gTW9uLCAyMDEyLTA0LTIzIGF0IDE2OjU1IC0wNDAwLCBDaHVjayBMZXZlciB3cm90ZToNCj4g Q3VycmVudGx5IHRoZSBMaW51eCBORlMgY2xpZW50IHdhaXRzIHRvIHBlcmZvcm0gYSBTRVRDTElF TlRJRCB1bnRpbA0KPiBqdXN0IGJlZm9yZSBhbiBhcHBsaWNhdGlvbiB3YW50cyB0byBvcGVuIGEg ZmlsZS4gIFF1aXRlIGEgYml0IG9mDQo+IGFjdGl2aXR5IGNhbiBvY2N1ciBiZWZvcmUgYW55IHN0 YXRlIGlzIG5lZWRlZC4NCj4gDQo+IElmIHRoZSBjbGllbnQgY2FyZXMgYWJvdXQgc2VydmVyIHRy dW5raW5nLCBob3dldmVyLCBubyBORlN2NA0KPiBvcGVyYXRpb25zIGNhbiBwcm9jZWVkIHVudGls IHRoZSBjbGllbnQgZGV0ZXJtaW5lcyB3aG8gaXQgaXMgdGFsa2luZw0KPiB0by4gIFRodXMgc2Vy dmVyIElQIHRydW5raW5nIGRldGVjdGlvbiBtdXN0IGJlIGRvbmUgd2hlbiB0aGUgY2xpZW50DQo+ IGZpcnN0IGVuY291bnRlcnMgYW4gdW5mYW1pbGlhciBzZXJ2ZXIgSVAgYWRkcmVzcy4NCj4gDQo+ IFRoZSBuZnNfZ2V0X2NsaWVudCgpIGZ1bmN0aW9uIHdhbGtzIHRoZSBuZnNfY2xpZW50X2xpc3Qg YW5kIG1hdGNoZXMgb24NCj4gc2VydmVyIElQIGFkZHJlc3MuICBUaGUgb3V0Y29tZSBvZiB0aGF0 IHdhbGsgdGVsbHMgdXMgaW1tZWRpYXRlbHkgaWYNCj4gd2UgaGF2ZSBhbiB1bmZhbWlsaWFyIHNl cnZlciBJUCBhZGRyZXNzLiAgSXQgaW52b2tlcyBhbiBpbml0X2NsaWVudCgpDQo+IG1ldGhvZCBp biB0aGlzIGNhc2UuDQo+IA0KPiBUaHVzLCBuZnM0X2luaXRfY2xpZW50KCkgY2FuIGVzdGFibGlz aCBhIGZyZXNoIGNsaWVudCBJRCwgYW5kIHBlcmZvcm0NCj4gdHJ1bmtpbmcgZGV0ZWN0aW9uIHdp dGggaXQuICBUaGUgZXhhY3QgcHJvY2VzcyBmb3IgZGV0ZWN0aW5nIHRydW5raW5nDQo+IGlzIGRp ZmZlcmVudCBmb3IgTkZTdjQuMCBhbmQgTkZTdjQuMSwgc28gYSBtaW5vcnZlcnNpb24tc3BlY2lm aWMNCj4gaW5pdF9jbGllbnQgY2FsbG91dCBpcyBpbnRyb2R1Y2VkLg0KPiANCj4gU2lnbmVkLW9m Zi1ieTogQ2h1Y2sgTGV2ZXIgPGNodWNrLmxldmVyQG9yYWNsZS5jb20+DQo+IC0tLQ0KPiANCj4g IGZzL25mcy9jbGllbnQuYyAgICB8ICAyMjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKw0KPiAgZnMvbmZzL2ludGVybmFsLmggIHwgICAgNiArDQo+ ICBmcy9uZnMvbmZzNF9mcy5oICAgfCAgICA3ICsrDQo+ICBmcy9uZnMvbmZzNHByb2MuYyAgfCAg ICAyIA0KPiAgZnMvbmZzL25mczRzdGF0ZS5jIHwgIDEzMSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKystDQo+ICA1IGZpbGVzIGNoYW5nZWQsIDM2NyBpbnNlcnRpb25zKCspLCAyIGRlbGV0 aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9jbGllbnQuYyBiL2ZzL25mcy9jbGll bnQuYw0KPiBpbmRleCA5MjBhYmJjLi43MzMwNjczIDEwMDY0NA0KPiAtLS0gYS9mcy9uZnMvY2xp ZW50LmMNCj4gKysrIGIvZnMvbmZzL2NsaWVudC5jDQo+IEBAIC01NjYsNyArNTY2LDggQEAgbmZz X2dldF9jbGllbnQoY29uc3Qgc3RydWN0IG5mc19jbGllbnRfaW5pdGRhdGEgKmNsX2luaXQsDQo+ ICAJCQlyZXR1cm4gbmZzX2ZvdW5kX2NsaWVudChjbF9pbml0LCBjbHApOw0KPiAgCQl9DQo+ICAJ CWlmIChuZXcpIHsNCj4gLQkJCWxpc3RfYWRkKCZuZXctPmNsX3NoYXJlX2xpbmssICZubi0+bmZz X2NsaWVudF9saXN0KTsNCj4gKwkJCWxpc3RfYWRkX3RhaWwoJm5ldy0+Y2xfc2hhcmVfbGluaywN Cj4gKwkJCQkJJm5uLT5uZnNfY2xpZW50X2xpc3QpOw0KPiAgCQkJc3Bpbl91bmxvY2soJm5uLT5u ZnNfY2xpZW50X2xvY2spOw0KPiAgCQkJbmV3LT5jbF9mbGFncyA9IGNsX2luaXQtPmluaXRfZmxh Z3M7DQo+ICAJCQlyZXR1cm4gY2xfaW5pdC0+cnBjX29wcy0+aW5pdF9jbGllbnQobmV3LA0KPiBA QCAtNTg0LDYgKzU4NSwyMTAgQEAgbmZzX2dldF9jbGllbnQoY29uc3Qgc3RydWN0IG5mc19jbGll bnRfaW5pdGRhdGEgKmNsX2luaXQsDQo+ICAJcmV0dXJuIG5ldzsNCj4gIH0NCj4gIA0KPiArI2lm ZGVmIENPTkZJR19ORlNfVjQNCj4gKy8qDQo+ICsgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNsaWVu dCBJRHMgbWF0Y2gNCj4gKyAqLw0KPiArc3RhdGljIGJvb2wNCj4gK25mczRfbWF0Y2hfY2xpZW50 aWRzKHN0cnVjdCBuZnNfY2xpZW50ICphLCBzdHJ1Y3QgbmZzX2NsaWVudCAqYikNCj4gK3sNCj4g KwlpZiAoYS0+Y2xfY2xpZW50aWQgIT0gYi0+Y2xfY2xpZW50aWQpIHsNCj4gKwkJZHByaW50aygi TkZTOiAtLT4gJXMgY2xpZW50IElEICVsbHggZG9lcyBub3QgbWF0Y2ggJWxseFxuIiwNCj4gKwkJ CV9fZnVuY19fLCBhLT5jbF9jbGllbnRpZCwgYi0+Y2xfY2xpZW50aWQpOw0KPiArCQlyZXR1cm4g ZmFsc2U7DQo+ICsJfQ0KPiArCWRwcmludGsoIk5GUzogLS0+ICVzIGNsaWVudCBJRCAlbGx4IG1h dGNoZXMgJWxseFxuIiwNCj4gKwkJX19mdW5jX18sIGEtPmNsX2NsaWVudGlkLCBiLT5jbF9jbGll bnRpZCk7DQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogbmZzNDBf d2Fsa19jbGllbnRfbGlzdCAtIEZpbmQgc2VydmVyIHRoYXQgcmVjb2duaXplcyBhIGNsaWVudCBJ RA0KPiArICoNCj4gKyAqIEBuZXc6IG5mc19jbGllbnQgd2l0aCBjbGllbnQgSUQgdG8gdGVzdA0K PiArICogQHJlc3VsdDogT1VUOiBmb3VuZCBuZnNfY2xpZW50LCBvciBuZXcNCj4gKyAqIEBjcmVk OiBjcmVkZW50aWFsIHRvIHVzZSBmb3IgdHJ1bmtpbmcgdGVzdA0KPiArICoNCj4gKyAqIFJldHVy bnMgTkZTNF9PSywgYSBuZWdhdGl2ZSBlcnJubywgb3IgYSBuZWdhdGl2ZSBORlM0RVJSIHN0YXR1 cy4NCj4gKyAqIElmIE5GUzRfT0sgaXMgcmV0dXJuZWQsIGFuIG5mc19jbGllbnQgcG9pbnRlciBp cyBwbGFudGVkIGluICJyZXN1bHQuIg0KPiArICoNCj4gKyAqIE5COiBuZnM0MF93YWxrX2NsaWVu dF9saXN0KCkgcmVsaWVzIG9uIHRoZSBuZXcgbmZzX2NsaWVudCBiZWluZw0KPiArICogICAgIHRo ZSBsYXN0IG5mc19jbGllbnQgb24gdGhlIGxpc3QuDQo+ICsgKi8NCj4gK2ludCBuZnM0MF93YWxr X2NsaWVudF9saXN0KHN0cnVjdCBuZnNfY2xpZW50ICpuZXcsDQo+ICsJCQkgICBzdHJ1Y3QgbmZz X2NsaWVudCAqKnJlc3VsdCwNCj4gKwkJCSAgIHN0cnVjdCBycGNfY3JlZCAqY3JlZCkNCj4gK3sN Cj4gKwlzdHJ1Y3QgbmZzX25ldCAqbm4gPSBuZXRfZ2VuZXJpYyhuZXctPmNsX25ldCwgbmZzX25l dF9pZCk7DQo+ICsJc3RydWN0IG5mc19jbGllbnQgKnBvcywgKnByZXYgPSBOVUxMOw0KPiArCXN0 cnVjdCBuZnM0X3NldGNsaWVudGlkX3JlcyBjbGlkID0gew0KPiArCQkuY2xpZW50aWQJPSBuZXct PmNsX2NsaWVudGlkLA0KPiArCQkuY29uZmlybQk9IG5ldy0+Y2xfY29uZmlybSwNCj4gKwl9Ow0K PiArCWludCBzdGF0dXM7DQo+ICsNCj4gKwlkcHJpbnRrKCJORlM6IC0tPiAlcyBuZnNfY2xpZW50 ID0gJXBcbiIsIF9fZnVuY19fLCBuZXcpOw0KPiArDQo+ICsJc3Bpbl9sb2NrKCZubi0+bmZzX2Ns aWVudF9sb2NrKTsNCj4gKw0KPiArCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmbm4tPm5mc19j bGllbnRfbGlzdCwgY2xfc2hhcmVfbGluaykgew0KPiArCQlpZiAocG9zLT5jbF9jb25zX3N0YXRl IDwgMCkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCWlmIChwb3MtPnJwY19vcHMgIT0gbmV3 LT5ycGNfb3BzKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJaWYgKHBvcy0+Y2xfcHJvdG8g IT0gbmV3LT5jbF9wcm90bykNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCWlmIChwb3MtPmNs X21pbm9ydmVyc2lvbiAhPSBuZXctPmNsX21pbm9ydmVyc2lvbikNCj4gKwkJCWNvbnRpbnVlOw0K PiArDQo+ICsJCWRwcmludGsoIk5GUzogLS0+ICVzIGNvbXBhcmluZyAlbGx4IGFuZCAlbGx4XG4i LCBfX2Z1bmNfXywNCj4gKwkJCW5ldy0+Y2xfY2xpZW50aWQsIHBvcy0+Y2xfY2xpZW50aWQpOw0K PiArCQlpZiAocG9zLT5jbF9jbGllbnRpZCAhPSBuZXctPmNsX2NsaWVudGlkKQ0KPiArCQkJY29u dGludWU7DQo+ICsNCj4gKwkJYXRvbWljX2luYygmcG9zLT5jbF9jb3VudCk7DQo+ICsJCWRwcmlu dGsoIiVzIG5mc19jbGllbnQgPSAlcCAoeyVkfSlcbiIsDQo+ICsJCQlfX2Z1bmNfXywgcG9zLCBh dG9taWNfcmVhZCgmcG9zLT5jbF9jb3VudCkpOw0KPiArCQlzcGluX3VubG9jaygmbm4tPm5mc19j bGllbnRfbG9jayk7DQo+ICsNCj4gKwkJZHByaW50aygiTkZTOiAtLT4gJXMgY29uZmlybWluZyAl bGx4XG4iLA0KPiArCQkJX19mdW5jX18sIG5ldy0+Y2xfY2xpZW50aWQpOw0KPiArDQo+ICsJCWlm IChwcmV2KQ0KPiArCQkJbmZzX3B1dF9jbGllbnQocHJldik7DQo+ICsNCj4gKwkJc3RhdHVzID0g bmZzNF9wcm9jX3NldGNsaWVudGlkX2NvbmZpcm0ocG9zLCAmY2xpZCwgY3JlZCk7DQoNCkhvdyBh cmUgeW91IHByb3RlY3RpbmcgYWdhaW5zdCBORlM0Q0xOVF9QVVJHRV9TVEFURT8NCg0KPiArCQlp ZiAoc3RhdHVzID09IE5GUzRfT0spIHsNCg0Kc3RhdHVzID09IDANCg0KPiArCQkJLyogVGhlIG5l dyBuZnNfY2xpZW50IGRvZXNuJ3QgbmVlZCB0aGUgZXh0cmENCj4gKwkJCSAqIGNsX2NvdW50IGJ1 bXAuICovDQo+ICsJCQluZnNfcHV0X2NsaWVudChwb3MpOw0KPiArCQkJKnJlc3VsdCA9IHBvczsN Cj4gKwkJCWRwcmludGsoIk5GUzogPC0tICVzIHVzaW5nIG5mc19jbGllbnQgPSAlcCAoeyVkfSlc biIsDQo+ICsJCQkJX19mdW5jX18sIHBvcywgYXRvbWljX3JlYWQoJnBvcy0+Y2xfY291bnQpKTsN Cj4gKwkJCXJldHVybiBORlM0X09LOw0KDQpyZXR1cm4gMA0KDQo+ICsJCX0NCj4gKwkJaWYgKHN0 YXR1cyAhPSBORlM0RVJSX1NUQUxFX0NMSUVOVElEKSB7DQoNCkFsbCBlcnJvciB2YWx1ZXMgYXJl IF9uZWdhdGl2ZV8gaW50ZWdlcnMuDQoNCj4gKwkJCW5mc19wdXRfY2xpZW50KHBvcyk7DQo+ICsJ CQlkcHJpbnRrKCJORlM6IDwtLSAlcyBzdGF0dXMgPSAlZCwgbm8gcmVzdWx0XG4iLA0KPiArCQkJ CV9fZnVuY19fLCBzdGF0dXMpOw0KPiArCQkJcmV0dXJuIHN0YXR1czsNCj4gKwkJfQ0KPiArDQo+ ICsJCXNwaW5fbG9jaygmbm4tPm5mc19jbGllbnRfbG9jayk7DQo+ICsJCXByZXYgPSBwb3M7DQo+ ICsJfQ0KPiArDQo+ICsJLyoNCj4gKwkgKiBObyBtYXRjaGluZyBuZnNfY2xpZW50IGZvdW5kLiAg VGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZSwNCj4gKwkgKiBiZWNhdXNlIHRoZSBuZXcgbmZzX2Ns aWVudCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvDQo+ICsJICogbmZzX2NsaWVudF9saXN0IGJ5 IG5mc19nZXRfY2xpZW50KCkuDQo+ICsJICoNCj4gKwkgKiBEb24ndCBCVUcoKSwgc2luY2UgdGhl IGNhbGxlciBpcyBob2xkaW5nIGEgbXV0ZXguDQo+ICsJICovDQo+ICsJc3Bpbl91bmxvY2soJm5u LT5uZnNfY2xpZW50X2xvY2spOw0KPiArCXByaW50ayhLRVJOX0VSUiAiTkZTOiAlcyBFcnJvcjog bm8gbWF0Y2hpbmcgbmZzX2NsaWVudCBmb3VuZFxuIiwNCj4gKwkJX19mdW5jX18pOw0KPiArCXJl dHVybiBORlM0RVJSX1NUQUxFX0NMSUVOVElEOw0KDQotTkZTNEVSUl9TVEFMRV9DTElFTlRJRC4u Lg0KDQo+ICt9DQo+ICsNCj4gKyNpZmRlZiBDT05GSUdfTkZTX1Y0XzENCj4gKy8qDQo+ICsgKiBS ZXR1cm5zIHRydWUgaWYgdGhlIHNlcnZlciBvd25lcnMgbWF0Y2gNCj4gKyAqLw0KPiArc3RhdGlj IGJvb2wNCj4gK25mczRfbWF0Y2hfc2VydmVyb3duZXJzKHN0cnVjdCBuZnNfY2xpZW50ICphLCBz dHJ1Y3QgbmZzX2NsaWVudCAqYikNCj4gK3sNCj4gKwlzdHJ1Y3QgbmZzNDFfc2VydmVyX293bmVy ICpvMSA9IGEtPmNsX3NlcnZlcm93bmVyOw0KPiArCXN0cnVjdCBuZnM0MV9zZXJ2ZXJfb3duZXIg Km8yID0gYi0+Y2xfc2VydmVyb3duZXI7DQo+ICsNCj4gKwlpZiAobzEtPm1pbm9yX2lkICE9IG8y LT5taW5vcl9pZCkgew0KPiArCQlkcHJpbnRrKCJORlM6IC0tPiAlcyBzZXJ2ZXIgb3duZXIgbWlu b3IgSURzIGRvIG5vdCBtYXRjaFxuIiwNCj4gKwkJCV9fZnVuY19fKTsNCj4gKwkJcmV0dXJuIGZh bHNlOw0KPiArCX0NCj4gKw0KPiArCWlmIChvMS0+bWFqb3JfaWRfc3ogIT0gbzItPm1ham9yX2lk X3N6KQ0KPiArCQlnb3RvIG91dF9tYWpvcl9taXNtYXRjaDsNCj4gKwlpZiAobWVtY21wKG8xLT5t YWpvcl9pZCwgbzItPm1ham9yX2lkLCBvMS0+bWFqb3JfaWRfc3opICE9IDApDQo+ICsJCWdvdG8g b3V0X21ham9yX21pc21hdGNoOw0KPiArDQo+ICsJZHByaW50aygiTkZTOiAtLT4gJXMgc2VydmVy IG93bmVycyBtYXRjaFxuIiwgX19mdW5jX18pOw0KPiArCXJldHVybiB0cnVlOw0KPiArDQo+ICtv dXRfbWFqb3JfbWlzbWF0Y2g6DQo+ICsJZHByaW50aygiTkZTOiAtLT4gJXMgc2VydmVyIG93bmVy IG1ham9yIElEcyBkbyBub3QgbWF0Y2hcbiIsDQo+ICsJCV9fZnVuY19fKTsNCj4gKwlyZXR1cm4g ZmFsc2U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogbmZzNDFfd2Fsa19jbGllbnRfbGlzdCAt IEZpbmQgbmZzX2NsaWVudCB0aGF0IG1hdGNoZXMgYSBjbGllbnQvc2VydmVyIG93bmVyDQo+ICsg Kg0KPiArICogQG5ldzogbmZzX2NsaWVudCB3aXRoIGNsaWVudCBJRCB0byB0ZXN0DQo+ICsgKiBA cmVzdWx0OiBPVVQ6IGZvdW5kIG5mc19jbGllbnQsIG9yIG5ldw0KPiArICogQGNyZWQ6IGNyZWRl bnRpYWwgdG8gdXNlIGZvciB0cnVua2luZyB0ZXN0DQo+ICsgKg0KPiArICogUmV0dXJucyBORlM0 X09LLCBhIG5lZ2F0aXZlIGVycm5vLCBvciBhIG5lZ2F0aXZlIE5GUzRFUlIgc3RhdHVzLg0KPiAr ICogSWYgTkZTNF9PSyBpcyByZXR1cm5lZCwgYW4gbmZzX2NsaWVudCBwb2ludGVyIGlzIHBsYW50 ZWQgaW4gInJlc3VsdC4iDQo+ICsgKg0KPiArICogTkI6IG5mczQxX3dhbGtfY2xpZW50X2xpc3Qo KSByZWxpZXMgb24gdGhlIG5ldyBuZnNfY2xpZW50IGJlaW5nDQo+ICsgKiAgICAgdGhlIGxhc3Qg bmZzX2NsaWVudCBvbiB0aGUgbGlzdC4NCj4gKyAqLw0KPiAraW50IG5mczQxX3dhbGtfY2xpZW50 X2xpc3Qoc3RydWN0IG5mc19jbGllbnQgKm5ldywNCj4gKwkJCSAgIHN0cnVjdCBuZnNfY2xpZW50 ICoqcmVzdWx0LA0KPiArCQkJICAgc3RydWN0IHJwY19jcmVkICpjcmVkKQ0KPiArew0KPiArCXN0 cnVjdCBuZnNfbmV0ICpubiA9IG5ldF9nZW5lcmljKG5ldy0+Y2xfbmV0LCBuZnNfbmV0X2lkKTsN Cj4gKwlzdHJ1Y3QgbmZzX2NsaWVudCAqcG9zOw0KPiArDQo+ICsJZHByaW50aygiTkZTOiAtLT4g JXMgbmZzX2NsaWVudCA9ICVwXG4iLCBfX2Z1bmNfXywgbmV3KTsNCj4gKw0KPiArCXNwaW5fbG9j aygmbm4tPm5mc19jbGllbnRfbG9jayk7DQo+ICsNCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBv cywgJm5uLT5uZnNfY2xpZW50X2xpc3QsIGNsX3NoYXJlX2xpbmspIHsNCj4gKwkJaWYgKHBvcy0+ Y2xfY29uc19zdGF0ZSA8IDApDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQlpZiAocG9zLT5y cGNfb3BzICE9IG5ldy0+cnBjX29wcykNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCWlmIChw b3MtPmNsX3Byb3RvICE9IG5ldy0+Y2xfcHJvdG8pDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiAr CQlpZiAocG9zLT5jbF9taW5vcnZlcnNpb24gIT0gbmV3LT5jbF9taW5vcnZlcnNpb24pDQo+ICsJ CQljb250aW51ZTsNCj4gKw0KPiArCQlpZiAoIW5mczRfbWF0Y2hfY2xpZW50aWRzKHBvcywgbmV3 KSkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCWlmICghbmZzNF9tYXRjaF9zZXJ2ZXJvd25l cnMocG9zLCBuZXcpKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJYXRvbWljX2luYygmcG9z LT5jbF9jb3VudCk7DQo+ICsJCSpyZXN1bHQgPSBwb3M7DQo+ICsJCWRwcmludGsoIk5GUzogPC0t ICVzIHVzaW5nIG5mc19jbGllbnQgPSAlcCAoeyVkfSlcbiIsDQo+ICsJCQlfX2Z1bmNfXywgcG9z LCBhdG9taWNfcmVhZCgmcG9zLT5jbF9jb3VudCkpOw0KPiArCQlyZXR1cm4gTkZTNF9PSzsNCg0K MA0KDQo+ICsJfQ0KPiArDQo+ICsJLyoNCj4gKwkgKiBObyBtYXRjaGluZyBuZnNfY2xpZW50IGZv dW5kLiAgVGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZSwNCj4gKwkgKiBiZWNhdXNlIHRoZSBuZXcg bmZzX2NsaWVudCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvDQo+ICsJICogbmZzX2NsaWVudF9s aXN0IGJ5IG5mc19nZXRfY2xpZW50KCkuDQo+ICsJICoNCj4gKwkgKiBEb24ndCBCVUcoKSwgc2lu Y2UgdGhlIGNhbGxlciBpcyBob2xkaW5nIGEgbXV0ZXguDQo+ICsJICovDQo+ICsJc3Bpbl91bmxv Y2soJm5uLT5uZnNfY2xpZW50X2xvY2spOw0KPiArCXByaW50ayhLRVJOX0VSUiAiTkZTOiAlcyBF cnJvcjogbm8gbWF0Y2hpbmcgbmZzX2NsaWVudCBmb3VuZFxuIiwNCj4gKwkJX19mdW5jX18pOw0K PiArCXJldHVybiBORlM0RVJSX1NUQUxFX0NMSUVOVElEOw0KDQotTkZTNEVSUl9TVEFMRV9DTElF TlRJRA0KDQo+ICt9DQo+ICsjZW5kaWYJLyogQ09ORklHX05GU19WNF8xICovDQo+ICsjZW5kaWYJ LyogQ09ORklHX05GU19WNCAqLw0KPiArDQo+ICAvKg0KPiAgICogTWFyayBhIHNlcnZlciBhcyBy ZWFkeSBvciBmYWlsZWQNCj4gICAqLw0KPiBAQCAtMTM1MCw2ICsxNTU1LDcgQEAgc3RydWN0IG5m c19jbGllbnQgKm5mczRfaW5pdF9jbGllbnQoc3RydWN0IG5mc19jbGllbnQgKmNscCwNCj4gIAkJ CQkgICAgcnBjX2F1dGhmbGF2b3JfdCBhdXRoZmxhdm91cikNCj4gIHsNCj4gIAljaGFyIGJ1ZltJ TkVUNl9BRERSU1RSTEVOICsgMV07DQo+ICsJc3RydWN0IG5mc19jbGllbnQgKm9sZDsNCj4gIAlp bnQgZXJyb3I7DQo+ICANCj4gIAlpZiAoY2xwLT5jbF9jb25zX3N0YXRlID09IE5GU19DU19SRUFE WSkgew0KPiBAQCAtMTM5NSw2ICsxNjAxLDIxIEBAIHN0cnVjdCBuZnNfY2xpZW50ICpuZnM0X2lu aXRfY2xpZW50KHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsDQo+ICANCj4gIAlpZiAoIW5mczRfaGFz X3Nlc3Npb24oY2xwKSkNCj4gIAkJbmZzX21hcmtfY2xpZW50X3JlYWR5KGNscCwgTkZTX0NTX1JF QURZKTsNCj4gKw0KPiArCWVycm9yID0gbmZzNF9kZXRlY3RfdHJ1bmtpbmcoY2xwLCAmb2xkKTsN Cj4gKwlpZiAoZXJyb3IgPCAwKQ0KPiArCQlnb3RvIGVycm9yOw0KPiArCWlmIChjbHAgIT0gb2xk KSB7DQo+ICsJCW5mc19tYXJrX2NsaWVudF9yZWFkeShjbHAsIE5GU19DU19SRUFEWSk7DQo+ICsJ CW5mc19wdXRfY2xpZW50KGNscCk7DQo+ICsJCWRwcmludGsoIjwtLSAlcygpIHJldHVybmluZyAl cCBpbnN0ZWFkIG9mICVwXG4iLA0KPiArCQkJX19mdW5jX18sIG9sZCwgY2xwKTsNCj4gKwkJY2xw ID0gb2xkOw0KPiArCQlhdG9taWNfaW5jKCZjbHAtPmNsX2NvdW50KTsNCj4gKwkJZHByaW50aygi TkZTOiA8LS0gJXMgdXNpbmcgbmZzX2NsaWVudCA9ICVwICh7JWR9KVxuIiwNCj4gKwkJCV9fZnVu Y19fLCBjbHAsIGF0b21pY19yZWFkKCZjbHAtPmNsX2NvdW50KSk7DQo+ICsJfQ0KPiArDQo+ICAJ cmV0dXJuIGNscDsNCj4gIA0KPiAgZXJyb3I6DQo+IGRpZmYgLS1naXQgYS9mcy9uZnMvaW50ZXJu YWwuaCBiL2ZzL25mcy9pbnRlcm5hbC5oDQo+IGluZGV4IDMxNWRjODYuLjg1ODg4ZjYgMTAwNjQ0 DQo+IC0tLSBhL2ZzL25mcy9pbnRlcm5hbC5oDQo+ICsrKyBiL2ZzL25mcy9pbnRlcm5hbC5oDQo+ IEBAIC0xNjIsNiArMTYyLDEyIEBAIGV4dGVybiBzdHJ1Y3QgbmZzX2NsaWVudCAqbmZzNF9pbml0 X2NsaWVudChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLA0KPiAgCQkJCWNvbnN0IHN0cnVjdCBycGNf dGltZW91dCAqdGltZXBhcm1zLA0KPiAgCQkJCWNvbnN0IGNoYXIgKmlwX2FkZHIsDQo+ICAJCQkJ cnBjX2F1dGhmbGF2b3JfdCBhdXRoZmxhdm91cik7DQo+ICtleHRlcm4gaW50IG5mczQwX3dhbGtf Y2xpZW50X2xpc3Qoc3RydWN0IG5mc19jbGllbnQgKmNscCwNCj4gKwkJCQlzdHJ1Y3QgbmZzX2Ns aWVudCAqKnJlc3VsdCwNCj4gKwkJCQlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpOw0KPiArZXh0ZXJu IGludCBuZnM0MV93YWxrX2NsaWVudF9saXN0KHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsDQo+ICsJ CQkJc3RydWN0IG5mc19jbGllbnQgKipyZXN1bHQsDQo+ICsJCQkJc3RydWN0IHJwY19jcmVkICpj cmVkKTsNCj4gIGV4dGVybiBzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzX2NyZWF0ZV9zZXJ2ZXIoDQo+ ICAJCQkJCWNvbnN0IHN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGEgKiwNCj4gIAkJCQkJc3Ry dWN0IG5mc19maCAqKTsNCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0X2ZzLmggYi9mcy9uZnMv bmZzNF9mcy5oDQo+IGluZGV4IDI5NTNmMmMuLmJhMTM5ODYgMTAwNjQ0DQo+IC0tLSBhL2ZzL25m cy9uZnM0X2ZzLmgNCj4gKysrIGIvZnMvbmZzL25mczRfZnMuaA0KPiBAQCAtMTkwLDYgKzE5MCw4 IEBAIHN0cnVjdCBuZnM0X3N0YXRlX3JlY292ZXJ5X29wcyB7DQo+ICAJaW50ICgqZXN0YWJsaXNo X2NsaWQpKHN0cnVjdCBuZnNfY2xpZW50ICosIHN0cnVjdCBycGNfY3JlZCAqKTsNCj4gIAlzdHJ1 Y3QgcnBjX2NyZWQgKiAoKmdldF9jbGlkX2NyZWQpKHN0cnVjdCBuZnNfY2xpZW50ICopOw0KPiAg CWludCAoKnJlY2xhaW1fY29tcGxldGUpKHN0cnVjdCBuZnNfY2xpZW50ICopOw0KPiArCWludCAo KmRldGVjdF90cnVua2luZykoc3RydWN0IG5mc19jbGllbnQgKiwgc3RydWN0IG5mc19jbGllbnQg KiosDQo+ICsJCXN0cnVjdCBycGNfY3JlZCAqKTsNCj4gIH07DQo+ICANCj4gIHN0cnVjdCBuZnM0 X3N0YXRlX21haW50ZW5hbmNlX29wcyB7DQo+IEBAIC0yOTcsOSArMjk5LDE0IEBAIGV4dGVybiB2 b2lkIG5mczRfcmVuZXdfc3RhdGUoc3RydWN0IHdvcmtfc3RydWN0ICopOw0KPiAgLyogbmZzNHN0 YXRlLmMgKi8NCj4gIHN0cnVjdCBycGNfY3JlZCAqbmZzNF9nZXRfc2V0Y2xpZW50aWRfY3JlZChz dHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsNCj4gIHN0cnVjdCBycGNfY3JlZCAqbmZzNF9nZXRfcmVu ZXdfY3JlZF9sb2NrZWQoc3RydWN0IG5mc19jbGllbnQgKmNscCk7DQo+ICtpbnQgbmZzNF9kZXRl Y3RfdHJ1bmtpbmcoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IG5mc19jbGllbnQgKiop Ow0KPiAraW50IG5mczQwX2RldGVjdF90cnVua2luZyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBz dHJ1Y3QgbmZzX2NsaWVudCAqKiwNCj4gKwkJCXN0cnVjdCBycGNfY3JlZCAqKTsNCj4gICNpZiBk ZWZpbmVkKENPTkZJR19ORlNfVjRfMSkNCj4gIHN0cnVjdCBycGNfY3JlZCAqbmZzNF9nZXRfbWFj aGluZV9jcmVkX2xvY2tlZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsNCj4gIHN0cnVjdCBycGNf Y3JlZCAqbmZzNF9nZXRfZXhjaGFuZ2VfaWRfY3JlZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsN Cj4gK2ludCBuZnM0MV9kZXRlY3RfdHJ1bmtpbmcoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3Ry dWN0IG5mc19jbGllbnQgKiosDQo+ICsJCQlzdHJ1Y3QgcnBjX2NyZWQgKik7DQo+ICBleHRlcm4g dm9pZCBuZnM0X3NjaGVkdWxlX3Nlc3Npb25fcmVjb3Zlcnkoc3RydWN0IG5mczRfc2Vzc2lvbiAq KTsNCj4gICNlbHNlDQo+ICBzdGF0aWMgaW5saW5lIHZvaWQgbmZzNF9zY2hlZHVsZV9zZXNzaW9u X3JlY292ZXJ5KHN0cnVjdCBuZnM0X3Nlc3Npb24gKnNlc3Npb24pDQo+IGRpZmYgLS1naXQgYS9m cy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jDQo+IGluZGV4IDNmZDk5NDQuLjAw YjVkMDIgMTAwNjQ0DQo+IC0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jDQo+ICsrKyBiL2ZzL25mcy9u ZnM0cHJvYy5jDQo+IEBAIC02NDUzLDYgKzY0NTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5m czRfc3RhdGVfcmVjb3Zlcnlfb3BzIG5mczQwX3JlYm9vdF9yZWNvdmVyeV9vcHMgPSB7DQo+ICAJ LnJlY292ZXJfbG9jawk9IG5mczRfbG9ja19yZWNsYWltLA0KPiAgCS5lc3RhYmxpc2hfY2xpZCA9 IG5mczRfaW5pdF9jbGllbnRpZCwNCj4gIAkuZ2V0X2NsaWRfY3JlZAk9IG5mczRfZ2V0X3NldGNs aWVudGlkX2NyZWQsDQo+ICsJLmRldGVjdF90cnVua2luZyA9IG5mczQwX2RldGVjdF90cnVua2lu ZywNCj4gIH07DQo+ICANCj4gICNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkNCj4gQEAgLTY0 NjQsNiArNjQ2NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZzNF9zdGF0ZV9yZWNvdmVyeV9v cHMgbmZzNDFfcmVib290X3JlY292ZXJ5X29wcyA9IHsNCj4gIAkuZXN0YWJsaXNoX2NsaWQgPSBu ZnM0MV9pbml0X2NsaWVudGlkLA0KPiAgCS5nZXRfY2xpZF9jcmVkCT0gbmZzNF9nZXRfZXhjaGFu Z2VfaWRfY3JlZCwNCj4gIAkucmVjbGFpbV9jb21wbGV0ZSA9IG5mczQxX3Byb2NfcmVjbGFpbV9j b21wbGV0ZSwNCj4gKwkuZGV0ZWN0X3RydW5raW5nID0gbmZzNDFfZGV0ZWN0X3RydW5raW5nLA0K PiAgfTsNCj4gICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8NCj4gIA0KPiBkaWZmIC0tZ2l0 IGEvZnMvbmZzL25mczRzdGF0ZS5jIGIvZnMvbmZzL25mczRzdGF0ZS5jDQo+IGluZGV4IDZhMWEz MDUuLmRmNTk5NTEgMTAwNjQ0DQo+IC0tLSBhL2ZzL25mcy9uZnM0c3RhdGUuYw0KPiArKysgYi9m cy9uZnMvbmZzNHN0YXRlLmMNCj4gQEAgLTU3LDEwICs1NywxMiBAQA0KPiAgI2luY2x1ZGUgImlu dGVybmFsLmgiDQo+ICAjaW5jbHVkZSAicG5mcy5oIg0KPiAgDQo+ICsjZGVmaW5lIE5GU0RCR19G QUNJTElUWQkJTkZTREJHX0NMSUVOVA0KDQpNb3N0IG9mIHRoZSBzdHVmZiBpbiBuZnM0c3RhdGUu YyBpcyBkZWFsaW5nIHdpdGggTkZTdjQtc3BlY2lmaWMgc3RhdGUuDQpJdCBkb2VzIG5vdCBtYWtl IHNlbnNlIHRvIGx1bXAgdGhhdCBpbiB3aXRoIHRoZSBuZnNfY2xpZW50IGRlYnVnZ2luZy4NCg0K PiArDQo+ICAjZGVmaW5lIE9QRU5PV05FUl9QT09MX1NJWkUJOA0KPiAgDQo+ICBjb25zdCBuZnM0 X3N0YXRlaWQgemVyb19zdGF0ZWlkOw0KPiAtDQo+ICtzdGF0aWMgREVGSU5FX01VVEVYKG5mc19j bGlkX2luaXRfbXV0ZXgpOw0KPiAgc3RhdGljIExJU1RfSEVBRChuZnM0X2NsaWVudGlkX2xpc3Qp Ow0KPiAgDQo+ICBpbnQgbmZzNF9pbml0X2NsaWVudGlkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAs IHN0cnVjdCBycGNfY3JlZCAqY3JlZCkNCj4gQEAgLTk0LDYgKzk2LDQ3IEBAIG91dDoNCj4gIAly ZXR1cm4gc3RhdHVzOw0KPiAgfQ0KPiAgDQo+ICsvKioNCj4gKyAqIG5mczQwX2RldGVjdF90cnVu a2luZyAtIERldGVjdCBzZXJ2ZXIgSVAgYWRkcmVzcyB0cnVua2luZyAobXYwKQ0KPiArICoNCj4g KyAqIEBjbHA6IG5mc19jbGllbnQgdW5kZXIgdGVzdA0KPiArICogQHJlc3VsdDogT1VUOiBmb3Vu ZCBuZnNfY2xpZW50LCBvciBjbHANCj4gKyAqIEBjcmVkOiBjcmVkZW50aWFsIHRvIHVzZSBmb3Ig dHJ1bmtpbmcgdGVzdA0KPiArICoNCj4gKyAqIFJldHVybnMgTkZTNF9PSywgYSBuZWdhdGl2ZSBl cnJubywgb3IgYSBuZWdhdGl2ZSBORlM0RVJSIHN0YXR1cy4NCj4gKyAqIElmIE5GUzRfT0sgaXMg cmV0dXJuZWQsIGFuIG5mc19jbGllbnQgcG9pbnRlciBpcyBwbGFudGVkIGluDQo+ICsgKiAicmVz dWx0Ii4NCj4gKyAqLw0KPiAraW50IG5mczQwX2RldGVjdF90cnVua2luZyhzdHJ1Y3QgbmZzX2Ns aWVudCAqY2xwLCBzdHJ1Y3QgbmZzX2NsaWVudCAqKnJlc3VsdCwNCj4gKwkJCSAgc3RydWN0IHJw Y19jcmVkICpjcmVkKQ0KPiArew0KPiArCXN0cnVjdCBuZnM0X3NldGNsaWVudGlkX3JlcyBjbGlk ID0gew0KPiArCQkuY2xpZW50aWQgPSBjbHAtPmNsX2NsaWVudGlkLA0KPiArCQkuY29uZmlybSA9 IGNscC0+Y2xfY29uZmlybSwNCj4gKwl9Ow0KPiArCXVuc2lnbmVkIHNob3J0IHBvcnQ7DQo+ICsJ aW50IHN0YXR1czsNCj4gKw0KPiArCXBvcnQgPSBuZnNfY2FsbGJhY2tfdGNwcG9ydDsNCj4gKwlp ZiAoY2xwLT5jbF9hZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikNCj4gKwkJcG9ydCA9IG5mc19j YWxsYmFja190Y3Bwb3J0NjsNCj4gKw0KPiArCXN0YXR1cyA9IG5mczRfcHJvY19zZXRjbGllbnRp ZChjbHAsIE5GUzRfQ0FMTEJBQ0ssIHBvcnQsIGNyZWQsICZjbGlkKTsNCj4gKwlpZiAoc3RhdHVz ICE9IE5GUzRfT0spDQo+ICsJCWdvdG8gb3V0Ow0KPiArCWNscC0+Y2xfY2xpZW50aWQgPSBjbGlk LmNsaWVudGlkOw0KPiArCWNscC0+Y2xfY29uZmlybSA9IGNsaWQuY29uZmlybTsNCj4gKw0KPiAr CXN0YXR1cyA9IG5mczQwX3dhbGtfY2xpZW50X2xpc3QoY2xwLCByZXN1bHQsIGNyZWQpOw0KPiAr CWlmIChzdGF0dXMgIT0gTkZTNF9PSykgew0KPiArCQlzZXRfYml0KE5GUzRDTE5UX0xFQVNFX0NP TkZJUk0sICZjbHAtPmNsX3N0YXRlKTsNCj4gKwkJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZW5ld2Fs KCpyZXN1bHQpOw0KPiArCX0NCj4gKw0KPiArb3V0Og0KPiArCXJldHVybiBzdGF0dXM7DQo+ICt9 DQo+ICsNCj4gIHN0cnVjdCBycGNfY3JlZCAqbmZzNF9nZXRfbWFjaGluZV9jcmVkX2xvY2tlZChz dHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQ0KPiAgew0KPiAgCXN0cnVjdCBycGNfY3JlZCAqY3JlZCA9 IE5VTEw7DQo+IEBAIC0yNjQsNiArMzA3LDQ0IEBAIG91dDoNCj4gIAlyZXR1cm4gc3RhdHVzOw0K PiAgfQ0KPiAgDQo+ICsvKioNCj4gKyAqIG5mczQxX2RldGVjdF90cnVua2luZyAtIERldGVjdCBz ZXJ2ZXIgSVAgYWRkcmVzcyB0cnVua2luZyAobXYxKQ0KPiArICoNCj4gKyAqIEBjbHA6IG5mc19j bGllbnQgdW5kZXIgdGVzdA0KPiArICogQHJlc3VsdDogT1VUOiBmb3VuZCBuZnNfY2xpZW50LCBv ciBjbHANCj4gKyAqIEBjcmVkOiBjcmVkZW50aWFsIHRvIHVzZSBmb3IgdHJ1bmtpbmcgdGVzdA0K PiArICoNCj4gKyAqIFJldHVybnMgTkZTNF9PSywgYSBuZWdhdGl2ZSBlcnJubywgb3IgYSBuZWdh dGl2ZSBORlM0RVJSIHN0YXR1cy4NCj4gKyAqIElmIE5GUzRfT0sgaXMgcmV0dXJuZWQsIGFuIG5m c19jbGllbnQgcG9pbnRlciBpcyBwbGFudGVkIGluDQo+ICsgKiAicmVzdWx0Ii4NCj4gKyAqLw0K PiAraW50IG5mczQxX2RldGVjdF90cnVua2luZyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1 Y3QgbmZzX2NsaWVudCAqKnJlc3VsdCwNCj4gKwkJCSAgc3RydWN0IHJwY19jcmVkICpjcmVkKQ0K PiArew0KPiArCXN0cnVjdCBuZnNfY2xpZW50ICp0cnVua2VkOw0KPiArCWludCBzdGF0dXM7DQo+ ICsNCj4gKwluZnM0X2JlZ2luX2RyYWluX3Nlc3Npb24oY2xwKTsNCj4gKwlzdGF0dXMgPSBuZnM0 X3Byb2NfZXhjaGFuZ2VfaWQoY2xwLCBjcmVkKTsNCj4gKwlpZiAoc3RhdHVzICE9IE5GUzRfT0sp DQo+ICsJCWdvdG8gb3V0Ow0KPiArDQo+ICsJc3RhdHVzID0gbmZzNDFfd2Fsa19jbGllbnRfbGlz dChjbHAsICZ0cnVua2VkLCBjcmVkKTsNCj4gKwlpZiAoc3RhdHVzICE9IE5GUzRfT0spDQo+ICsJ CWdvdG8gb3V0Ow0KPiArDQo+ICsJc2V0X2JpdChORlM0Q0xOVF9MRUFTRV9DT05GSVJNLCAmdHJ1 bmtlZC0+Y2xfc3RhdGUpOw0KPiArCXN0YXR1cyA9IG5mczRfcHJvY19jcmVhdGVfc2Vzc2lvbih0 cnVua2VkKTsNCj4gKwlpZiAoc3RhdHVzICE9IE5GUzRfT0spDQo+ICsJCWdvdG8gb3V0Ow0KPiAr CWNsZWFyX2JpdChORlM0Q0xOVF9MRUFTRV9DT05GSVJNLCAmdHJ1bmtlZC0+Y2xfc3RhdGUpOw0K PiArCW5mczQxX3NldHVwX3N0YXRlX3JlbmV3YWwodHJ1bmtlZCk7DQo+ICsJbmZzX21hcmtfY2xp ZW50X3JlYWR5KHRydW5rZWQsIE5GU19DU19SRUFEWSk7DQo+ICsJKnJlc3VsdCA9IHRydW5rZWQ7 DQo+ICtvdXQ6DQo+ICsJcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gKw0KPiAgc3RydWN0IHJwY19j cmVkICpuZnM0X2dldF9leGNoYW5nZV9pZF9jcmVkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApDQo+ ICB7DQo+ICAJc3RydWN0IHJwY19jcmVkICpjcmVkOw0KPiBAQCAtMTU3OSw2ICsxNjYwLDggQEAg c3RhdGljIGludCBuZnM0X3JlY2xhaW1fbGVhc2Uoc3RydWN0IG5mc19jbGllbnQgKmNscCkNCj4g IAlycGNfYXV0aGZsYXZvcl90IGZsYXZvcnNbTkZTX01BWF9TRUNGTEFWT1JTXTsNCj4gIAlpbnQg aSwgbGVuLCBzdGF0dXM7DQo+ICANCj4gKwltdXRleF9sb2NrKCZuZnNfY2xpZF9pbml0X211dGV4 KTsNCj4gKw0KPiAgCWkgPSAwOw0KPiAgCWxlbiA9IGdzc19tZWNoX2xpc3RfcHNldWRvZmxhdm9y cyhmbGF2b3JzKTsNCj4gIA0KPiBAQCAtMTYxMyw2ICsxNjk2LDUyIEBAIGFnYWluOg0KPiAgCQkJ YnJlYWs7DQo+ICAJCX0NCj4gIAl9DQo+ICsNCj4gKwltdXRleF91bmxvY2soJm5mc19jbGlkX2lu aXRfbXV0ZXgpOw0KPiArCXJldHVybiBzdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICog bmZzNF9kZXRlY3RfdHJ1bmtpbmcgLSBEZXRlY3Qgc2VydmVyIElQIGFkZHJlc3MgdHJ1bmtpbmcN Cj4gKyAqDQo+ICsgKiBAY2xwOiBuZnNfY2xpZW50IHVuZGVyIHRlc3QNCj4gKyAqIEByZXN1bHQ6 IE9VVDogZm91bmQgbmZzX2NsaWVudCwgb3IgY2xwDQo+ICsgKg0KPiArICogUmV0dXJucyBORlM0 X09LLCBhIG5lZ2F0aXZlIGVycm5vLCBvciBhIG5lZ2F0aXZlIE5GUzRFUlIgc3RhdHVzLg0KPiAr ICogSWYgTkZTNF9PSyBpcyByZXR1cm5lZCwgYW4gbmZzX2NsaWVudCBwb2ludGVyIGlzIHBsYW50 ZWQgaW4NCj4gKyAqICJyZXN1bHQiLg0KPiArICovDQo+ICtpbnQgbmZzNF9kZXRlY3RfdHJ1bmtp bmcoc3RydWN0IG5mc19jbGllbnQgKmNscCwNCj4gKwkJCSBzdHJ1Y3QgbmZzX2NsaWVudCAqKnJl c3VsdCkNCj4gK3sNCj4gKwljb25zdCBzdHJ1Y3QgbmZzNF9zdGF0ZV9yZWNvdmVyeV9vcHMgKm9w cyA9DQo+ICsJCQkJY2xwLT5jbF9tdm9wcy0+cmVib290X3JlY292ZXJ5X29wczsNCj4gKwlzdHJ1 Y3QgcnBjX2NyZWQgKmNyZWQ7DQo+ICsJaW50IHN0YXR1czsNCj4gKw0KPiArCWRwcmludGsoIk5G UzogPC0tICVzIG5mc19jbGllbnQgPSAlcFxuIiwgX19mdW5jX18sIGNscCk7DQo+ICsJbXV0ZXhf bG9jaygmbmZzX2NsaWRfaW5pdF9tdXRleCk7DQo+ICsNCj4gKwlzdGF0dXMgPSAtRU5PRU5UOw0K PiArCWNyZWQgPSBvcHMtPmdldF9jbGlkX2NyZWQoY2xwKTsNCj4gKwlpZiAoY3JlZCAhPSBOVUxM KSB7DQo+ICsJCXN0YXR1cyA9IG9wcy0+ZGV0ZWN0X3RydW5raW5nKGNscCwgcmVzdWx0LCBjcmVk KTsNCj4gKwkJcHV0X3JwY2NyZWQoY3JlZCk7DQo+ICsJCS8qIEhhbmRsZSBjYXNlIHdoZXJlIHRo ZSB1c2VyIGhhc24ndCBzZXQgdXAgbWFjaGluZSBjcmVkcyAqLw0KPiArCQlpZiAoc3RhdHVzID09 IC1FQUNDRVMgJiYgY3JlZCA9PSBjbHAtPmNsX21hY2hpbmVfY3JlZCkgew0KPiArCQkJbmZzNF9j bGVhcl9tYWNoaW5lX2NyZWQoY2xwKTsNCj4gKwkJCXN0YXR1cyA9IC1FQUdBSU47DQo+ICsJCX0N Cj4gKwkJaWYgKHN0YXR1cyA9PSAtTkZTNEVSUl9NSU5PUl9WRVJTX01JU01BVENIKQ0KPiArCQkJ c3RhdHVzID0gLUVQUk9UT05PU1VQUE9SVDsNCj4gKwl9DQo+ICsNCj4gKwltdXRleF91bmxvY2so Jm5mc19jbGlkX2luaXRfbXV0ZXgpOw0KPiArCWlmIChzdGF0dXMgPT0gTkZTNF9PSykgew0KPiAr CQljbGVhcl9iaXQoTkZTNENMTlRfTEVBU0VfRVhQSVJFRCwgJmNscC0+Y2xfc3RhdGUpOw0KPiAr CQlkcHJpbnRrKCJORlM6IDwtLSAlcyByZXN1bHQgPSAlcFxuIiwgX19mdW5jX18sICpyZXN1bHQp Ow0KPiArCX0gZWxzZQ0KPiArCQlkcHJpbnRrKCJORlM6IDwtLSAlcyBzdGF0dXMgPSAlZFxuIiwg X19mdW5jX18sIHN0YXR1cyk7DQo+ICAJcmV0dXJuIHN0YXR1czsNCj4gIH0NCj4gIA0KPiANCg0K LS0gDQpUcm9uZCBNeWtsZWJ1c3QNCkxpbnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lcg0KDQpOZXRB cHANClRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tDQp3d3cubmV0YXBwLmNvbQ0KDQo=