Return-Path: linux-nfs-owner@vger.kernel.org Received: from mx2.netapp.com ([216.240.18.37]:35746 "EHLO mx2.netapp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753941Ab2EGSL4 (ORCPT ); Mon, 7 May 2012 14:11:56 -0400 Received: from vmwexceht05-prd.hq.netapp.com (vmwexceht05-prd.hq.netapp.com [10.106.77.35]) by smtp2.corp.netapp.com (8.13.1/8.13.1/NTAP-1.6) with ESMTP id q47IBiPv019795 for ; Mon, 7 May 2012 11:11:44 -0700 (PDT) From: "Myklebust, Trond" To: "Schumaker, Bryan" CC: "linux-nfs@vger.kernel.org" Subject: Re: [PATCH 5/7] NFS: Create a common xdev_mount() function Date: Mon, 7 May 2012 18:11:43 +0000 Message-ID: <1336414303.9499.6.camel@lade.trondhjem.org> References: <1335811229-2989-1-git-send-email-bjschuma@netapp.com> <1335811229-2989-6-git-send-email-bjschuma@netapp.com> In-Reply-To: <1335811229-2989-6-git-send-email-bjschuma@netapp.com> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org List-ID: T24gTW9uLCAyMDEyLTA0LTMwIGF0IDE0OjQwIC0wNDAwLCBianNjaHVtYUBuZXRhcHAuY29tIHdy b3RlOg0KPiBGcm9tOiBCcnlhbiBTY2h1bWFrZXIgPGJqc2NodW1hQG5ldGFwcC5jb20+DQo+IA0K PiBUaGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gbmZzX3hkZXZfbW91bnQoKSBhbmQgbmZzNF94 ZGV2X21vdW50KCkgaXMgdGhlDQo+IHVuc2hhcmVkIGZsYWcsIHNvIEkgcGFzcyB0aGlzIGFzIGFu IG5mc19tb3VudF9pbmZvIHBhcmFtZXRlciBzbyB3ZSBjYW4NCj4gc2hhcmUgbW9yZSBjb2RlLg0K PiANCj4gU2lnbmVkLW9mZi1ieTogQnJ5YW4gU2NodW1ha2VyIDxianNjaHVtYUBuZXRhcHAuY29t Pg0KPiAtLS0NCj4gIGZzL25mcy9zdXBlci5jIHwgIDEyNiArKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAgMSBmaWxlIGNoYW5nZWQsIDM1 IGluc2VydGlvbnMoKyksIDkxIGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2ZzL25m cy9zdXBlci5jIGIvZnMvbmZzL3N1cGVyLmMNCj4gaW5kZXggYjllZTc5OC4uZWVmYjNlZCAxMDA2 NDQNCj4gLS0tIGEvZnMvbmZzL3N1cGVyLmMNCj4gKysrIGIvZnMvbmZzL3N1cGVyLmMNCj4gQEAg LTIxMjYsNiArMjEyNiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZnNfaW5pdGlhbGlzZV9zYihz dHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQ0KPiAgc3RydWN0IG5mc19tb3VudF9pbmZvIHsNCj4gIAl2 b2lkICgqZmlsbF9zdXBlcikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBuZnNfbW91bnRf aW5mbyAqKTsNCj4gIAlzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpwYXJzZWQ7DQo+ICsJ c3RydWN0IG5mc19jbG9uZV9tb3VudCAqY2xvbmVkOw0KPiAgCXVuc2lnbmVkIGludCB1bnNoYXJl ZDsNCj4gIH07DQo+ICANCj4gQEAgLTIxNTksOCArMjE2MCw5IEBAIHN0YXRpYyB2b2lkIG5mc19m aWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsDQo+ICAgKiBGaW5pc2ggc2V0dGluZyB1 cCBhIGNsb25lZCBORlMyLzMgc3VwZXJibG9jaw0KPiAgICovDQo+ICBzdGF0aWMgdm9pZCBuZnNf Y2xvbmVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwNCj4gLQkJCSAgICBjb25zdCBzdHJ1 Y3Qgc3VwZXJfYmxvY2sgKm9sZF9zYikNCj4gKwkJCSAgICBzdHJ1Y3QgbmZzX21vdW50X2luZm8g Km1vdW50X2luZm8pDQo+ICB7DQo+ICsJY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpvbGRfc2Ig PSBtb3VudF9pbmZvLT5jbG9uZWQtPnNiOw0KPiAgCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIg PSBORlNfU0Ioc2IpOw0KPiAgDQo+ICAJc2ItPnNfYmxvY2tzaXplX2JpdHMgPSBvbGRfc2ItPnNf YmxvY2tzaXplX2JpdHM7DQo+IEBAIC0yNDM5LDEzICsyNDQxLDEzIEBAIHN0YXRpYyB2b2lkIG5m c19raWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcykNCj4gIH0NCj4gIA0KPiAgLyoNCj4g LSAqIENsb25lIGFuIE5GUzIvMyBzZXJ2ZXIgcmVjb3JkIG9uIHhkZXYgdHJhdmVyc2FsIChGU0lE LWNoYW5nZSkNCj4gKyAqIENsb25lIGFuIE5GUzIvMy80IHNlcnZlciByZWNvcmQgb24geGRldiB0 cmF2ZXJzYWwgKEZTSUQtY2hhbmdlKQ0KPiAgICovDQo+ICBzdGF0aWMgc3RydWN0IGRlbnRyeSAq DQo+IC1uZnNfeGRldl9tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50 IGZsYWdzLA0KPiAtCQljb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqcmF3X2RhdGEpDQo+ICtu ZnNfeGRldl9tb3VudF9jb21tb24oc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsIGlu dCBmbGFncywNCj4gKwkJY29uc3QgY2hhciAqZGV2X25hbWUsIHN0cnVjdCBuZnNfbW91bnRfaW5m byAqbW91bnRfaW5mbykNCj4gIHsNCj4gLQlzdHJ1Y3QgbmZzX2Nsb25lX21vdW50ICpkYXRhID0g cmF3X2RhdGE7DQo+ICsJc3RydWN0IG5mc19jbG9uZV9tb3VudCAqZGF0YSA9IG1vdW50X2luZm8t PmNsb25lZDsNCj4gIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnM7DQo+ICAJc3RydWN0IG5mc19zZXJ2 ZXIgKnNlcnZlcjsNCj4gIAlzdHJ1Y3QgZGVudHJ5ICptbnRyb290Ow0KPiBAQCAtMjQ1NSw3ICsy NDU3LDcgQEAgbmZzX3hkZXZfbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUs IGludCBmbGFncywNCj4gIAl9Ow0KPiAgCWludCBlcnJvcjsNCj4gIA0KPiAtCWRwcmludGsoIi0t PiBuZnNfeGRldl9tb3VudCgpXG4iKTsNCj4gKwlkcHJpbnRrKCItLT4gbmZzX3hkZXZfbW91bnRf Y29tbW9uKClcbiIpOw0KPiAgDQo+ICAJLyogY3JlYXRlIGEgbmV3IHZvbHVtZSByZXByZXNlbnRh dGlvbiAqLw0KPiAgCXNlcnZlciA9IG5mc19jbG9uZV9zZXJ2ZXIoTkZTX1NCKGRhdGEtPnNiKSwg ZGF0YS0+ZmgsIGRhdGEtPmZhdHRyLCBkYXRhLT5hdXRoZmxhdm9yKTsNCj4gQEAgLTI0NjUsNyAr MjQ2Nyw3IEBAIG5mc194ZGV2X21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBl LCBpbnQgZmxhZ3MsDQo+ICAJfQ0KPiAgCXNiX21udGRhdGEuc2VydmVyID0gc2VydmVyOw0KPiAg DQo+IC0JaWYgKHNlcnZlci0+ZmxhZ3MgJiBORlNfTU9VTlRfVU5TSEFSRUQpDQo+ICsJaWYgKHNl cnZlci0+ZmxhZ3MgJiBtb3VudF9pbmZvLT51bnNoYXJlZCkNCj4gIAkJY29tcGFyZV9zdXBlciA9 IE5VTEw7DQo+ICANCj4gIAkvKiAtbyBub2FjIGltcGxpZXMgLW8gc3luYyAqLw0KPiBAQCAtMjQ5 MCw3ICsyNDkyLDcgQEAgbmZzX3hkZXZfbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZz X3R5cGUsIGludCBmbGFncywNCj4gIA0KPiAgCWlmICghcy0+c19yb290KSB7DQo+ICAJCS8qIGlu aXRpYWwgc3VwZXJibG9jay9yb290IGNyZWF0aW9uICovDQo+IC0JCW5mc19jbG9uZV9zdXBlcihz LCBkYXRhLT5zYik7DQo+ICsJCW1vdW50X2luZm8tPmZpbGxfc3VwZXIocywgbW91bnRfaW5mbyk7 DQo+ICAJCW5mc19mc2NhY2hlX2dldF9zdXBlcl9jb29raWUocywgTlVMTCwgZGF0YSk7DQo+ICAJ fQ0KPiAgDQo+IEBAIC0yNTEwLDEzICsyNTEyLDEzIEBAIG5mc194ZGV2X21vdW50KHN0cnVjdCBm aWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsDQo+ICAJLyogY2xvbmUgYW55IGxz bSBzZWN1cml0eSBvcHRpb25zIGZyb20gdGhlIHBhcmVudCB0byB0aGUgbmV3IHNiICovDQo+ICAJ c2VjdXJpdHlfc2JfY2xvbmVfbW50X29wdHMoZGF0YS0+c2IsIHMpOw0KPiAgDQo+IC0JZHByaW50 aygiPC0tIG5mc194ZGV2X21vdW50KCkgPSAwXG4iKTsNCj4gKwlkcHJpbnRrKCI8LS0gbmZzX3hk ZXZfbW91bnRfY29tbW9uKCkgPSAwXG4iKTsNCj4gIAlyZXR1cm4gbW50cm9vdDsNCj4gIA0KPiAg b3V0X2Vycl9ub3NiOg0KPiAgCW5mc19mcmVlX3NlcnZlcihzZXJ2ZXIpOw0KPiAgb3V0X2Vycl9u b3NlcnZlcjoNCj4gLQlkcHJpbnRrKCI8LS0gbmZzX3hkZXZfbW91bnQoKSA9ICVkIFtlcnJvcl1c biIsIGVycm9yKTsNCj4gKwlkcHJpbnRrKCI8LS0gbmZzX3hkZXZfbW91bnRfY29tbW9uKCkgPSAl ZCBbZXJyb3JdXG4iLCBlcnJvcik7DQo+ICAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOw0KPiAgDQo+ ICBlcnJvcl9zcGxhdF9zdXBlcjoNCj4gQEAgLTI1MjQsMTggKzI1MjYsMzQgQEAgZXJyb3Jfc3Bs YXRfc3VwZXI6DQo+ICAJCWJkaV91bnJlZ2lzdGVyKCZzZXJ2ZXItPmJhY2tpbmdfZGV2X2luZm8p Ow0KPiAgZXJyb3Jfc3BsYXRfYmRpOg0KPiAgCWRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHMpOw0K PiAtCWRwcmludGsoIjwtLSBuZnNfeGRldl9tb3VudCgpID0gJWQgW3NwbGF0XVxuIiwgZXJyb3Ip Ow0KPiArCWRwcmludGsoIjwtLSBuZnNfeGRldl9tb3VudF9jb21tb24oKSA9ICVkIFtzcGxhdF1c biIsIGVycm9yKTsNCj4gIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7DQo+ICB9DQo+ICANCj4gKy8q DQo+ICsgKiBDbG9uZSBhbiBORlMyLzMgc2VydmVyIHJlY29yZCBvbiB4ZGV2IHRyYXZlcnNhbCAo RlNJRC1jaGFuZ2UpDQo+ICsgKi8NCj4gK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICoNCj4gK25mc194 ZGV2X21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsDQo+ ICsJCWNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpyYXdfZGF0YSkNCj4gK3sNCj4gKwlzdHJ1 Y3QgbmZzX21vdW50X2luZm8gbW91bnRfaW5mbyA9IHsNCj4gKwkJLmZpbGxfc3VwZXIgPSBuZnNf Y2xvbmVfc3VwZXIsDQo+ICsJCS5jbG9uZWQgICA9IHJhd19kYXRhLA0KPiArCQkudW5zaGFyZWQg PSBORlNfTU9VTlRfVU5TSEFSRUQsDQoNCldoeSB0aGUgY2hhbmdlIGluIHNoYXJlIGJlaGF2aW91 cj8NCg0KPiArCX07DQo+ICsJcmV0dXJuIG5mc194ZGV2X21vdW50X2NvbW1vbigmbmZzX2ZzX3R5 cGUsIGZsYWdzLCBkZXZfbmFtZSwgJm1vdW50X2luZm8pOw0KPiArfQ0KPiArDQo+ICAjaWZkZWYg Q09ORklHX05GU19WNA0KPiAgDQo+ICAvKg0KPiAgICogRmluaXNoIHNldHRpbmcgdXAgYSBjbG9u ZWQgTkZTNCBzdXBlcmJsb2NrDQo+ICAgKi8NCj4gIHN0YXRpYyB2b2lkIG5mczRfY2xvbmVfc3Vw ZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwNCj4gLQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3VwZXJf YmxvY2sgKm9sZF9zYikNCj4gKwkJCSAgICAgc3RydWN0IG5mc19tb3VudF9pbmZvICptb3VudF9p bmZvKQ0KPiAgew0KPiArCWNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqb2xkX3NiID0gbW91bnRf aW5mby0+Y2xvbmVkLT5zYjsNCj4gIAlzYi0+c19ibG9ja3NpemVfYml0cyA9IG9sZF9zYi0+c19i bG9ja3NpemVfYml0czsNCj4gIAlzYi0+c19ibG9ja3NpemUgPSBvbGRfc2ItPnNfYmxvY2tzaXpl Ow0KPiAgCXNiLT5zX21heGJ5dGVzID0gb2xkX3NiLT5zX21heGJ5dGVzOw0KPiBAQCAtMjc4Nyw4 NiArMjgwNSwxMiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqDQo+ICBuZnM0X3hkZXZfbW91bnQo c3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsIGludCBmbGFncywNCj4gIAkJIGNvbnN0 IGNoYXIgKmRldl9uYW1lLCB2b2lkICpyYXdfZGF0YSkNCj4gIHsNCj4gLQlzdHJ1Y3QgbmZzX2Ns b25lX21vdW50ICpkYXRhID0gcmF3X2RhdGE7DQo+IC0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzOw0K PiAtCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXI7DQo+IC0Jc3RydWN0IGRlbnRyeSAqbW50cm9v dDsNCj4gLQlpbnQgKCpjb21wYXJlX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAq KSA9IG5mc19jb21wYXJlX3N1cGVyOw0KPiAtCXN0cnVjdCBuZnNfc2JfbW91bnRkYXRhIHNiX21u dGRhdGEgPSB7DQo+IC0JCS5tbnRmbGFncyA9IGZsYWdzLA0KPiArCXN0cnVjdCBuZnNfbW91bnRf aW5mbyBtb3VudF9pbmZvID0gew0KPiArCQkuZmlsbF9zdXBlciA9IG5mczRfY2xvbmVfc3VwZXIs DQo+ICsJCS5jbG9uZWQgPSByYXdfZGF0YSwNCj4gKwkJLnVuc2hhcmVkID0gTkZTNF9NT1VOVF9V TlNIQVJFRCwNCj4gIAl9Ow0KPiAtCWludCBlcnJvcjsNCj4gLQ0KPiAtCWRwcmludGsoIi0tPiBu ZnM0X3hkZXZfbW91bnQoKVxuIik7DQo+IC0NCj4gLQkvKiBjcmVhdGUgYSBuZXcgdm9sdW1lIHJl cHJlc2VudGF0aW9uICovDQo+IC0Jc2VydmVyID0gbmZzX2Nsb25lX3NlcnZlcihORlNfU0IoZGF0 YS0+c2IpLCBkYXRhLT5maCwgZGF0YS0+ZmF0dHIsIGRhdGEtPmF1dGhmbGF2b3IpOw0KPiAtCWlm IChJU19FUlIoc2VydmVyKSkgew0KPiAtCQllcnJvciA9IFBUUl9FUlIoc2VydmVyKTsNCj4gLQkJ Z290byBvdXRfZXJyX25vc2VydmVyOw0KPiAtCX0NCj4gLQlzYl9tbnRkYXRhLnNlcnZlciA9IHNl cnZlcjsNCj4gLQ0KPiAtCWlmIChzZXJ2ZXItPmZsYWdzICYgTkZTNF9NT1VOVF9VTlNIQVJFRCkN Cj4gLQkJY29tcGFyZV9zdXBlciA9IE5VTEw7DQo+IC0NCj4gLQkvKiAtbyBub2FjIGltcGxpZXMg LW8gc3luYyAqLw0KPiAtCWlmIChzZXJ2ZXItPmZsYWdzICYgTkZTX01PVU5UX05PQUMpDQo+IC0J CXNiX21udGRhdGEubW50ZmxhZ3MgfD0gTVNfU1lOQ0hST05PVVM7DQo+IC0NCj4gLQkvKiBHZXQg YSBzdXBlcmJsb2NrIC0gbm90ZSB0aGF0IHdlIG1heSBlbmQgdXAgc2hhcmluZyBvbmUgdGhhdCBh bHJlYWR5IGV4aXN0cyAqLw0KPiAtCXMgPSBzZ2V0KCZuZnM0X2ZzX3R5cGUsIGNvbXBhcmVfc3Vw ZXIsIG5mc19zZXRfc3VwZXIsICZzYl9tbnRkYXRhKTsNCj4gLQlpZiAoSVNfRVJSKHMpKSB7DQo+ IC0JCWVycm9yID0gUFRSX0VSUihzKTsNCj4gLQkJZ290byBvdXRfZXJyX25vc2I7DQo+IC0JfQ0K PiAtDQo+IC0JaWYgKHMtPnNfZnNfaW5mbyAhPSBzZXJ2ZXIpIHsNCj4gLQkJbmZzX2ZyZWVfc2Vy dmVyKHNlcnZlcik7DQo+IC0JCXNlcnZlciA9IE5VTEw7DQo+IC0JfSBlbHNlIHsNCj4gLQkJZXJy b3IgPSBuZnNfYmRpX3JlZ2lzdGVyKHNlcnZlcik7DQo+IC0JCWlmIChlcnJvcikNCj4gLQkJCWdv dG8gZXJyb3Jfc3BsYXRfYmRpOw0KPiAtCX0NCj4gLQ0KPiAtCWlmICghcy0+c19yb290KSB7DQo+ IC0JCS8qIGluaXRpYWwgc3VwZXJibG9jay9yb290IGNyZWF0aW9uICovDQo+IC0JCW5mczRfY2xv bmVfc3VwZXIocywgZGF0YS0+c2IpOw0KPiAtCQluZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29va2ll KHMsIE5VTEwsIGRhdGEpOw0KPiAtCX0NCj4gLQ0KPiAtCW1udHJvb3QgPSBuZnNfZ2V0X3Jvb3Qo cywgZGF0YS0+ZmgsIGRldl9uYW1lKTsNCj4gLQlpZiAoSVNfRVJSKG1udHJvb3QpKSB7DQo+IC0J CWVycm9yID0gUFRSX0VSUihtbnRyb290KTsNCj4gLQkJZ290byBlcnJvcl9zcGxhdF9zdXBlcjsN Cj4gLQl9DQo+IC0JaWYgKG1udHJvb3QtPmRfaW5vZGUtPmlfb3AgIT0gTkZTX1NCKHMpLT5uZnNf Y2xpZW50LT5ycGNfb3BzLT5kaXJfaW5vZGVfb3BzKSB7DQo+IC0JCWRwdXQobW50cm9vdCk7DQo+ IC0JCWVycm9yID0gLUVTVEFMRTsNCj4gLQkJZ290byBlcnJvcl9zcGxhdF9zdXBlcjsNCj4gLQl9 DQo+IC0NCj4gLQlzLT5zX2ZsYWdzIHw9IE1TX0FDVElWRTsNCj4gLQ0KPiAtCXNlY3VyaXR5X3Ni X2Nsb25lX21udF9vcHRzKGRhdGEtPnNiLCBzKTsNCj4gLQ0KPiAtCWRwcmludGsoIjwtLSBuZnM0 X3hkZXZfbW91bnQoKSA9IDBcbiIpOw0KPiAtCXJldHVybiBtbnRyb290Ow0KPiAtDQo+IC1vdXRf ZXJyX25vc2I6DQo+IC0JbmZzX2ZyZWVfc2VydmVyKHNlcnZlcik7DQo+IC1vdXRfZXJyX25vc2Vy dmVyOg0KPiAtCWRwcmludGsoIjwtLSBuZnM0X3hkZXZfbW91bnQoKSA9ICVkIFtlcnJvcl1cbiIs IGVycm9yKTsNCj4gLQlyZXR1cm4gRVJSX1BUUihlcnJvcik7DQo+IC0NCj4gLWVycm9yX3NwbGF0 X3N1cGVyOg0KPiAtCWlmIChzZXJ2ZXIgJiYgIXMtPnNfcm9vdCkNCj4gLQkJYmRpX3VucmVnaXN0 ZXIoJnNlcnZlci0+YmFja2luZ19kZXZfaW5mbyk7DQo+IC1lcnJvcl9zcGxhdF9iZGk6DQo+IC0J ZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocyk7DQo+IC0JZHByaW50aygiPC0tIG5mczRfeGRldl9t b3VudCgpID0gJWQgW3NwbGF0XVxuIiwgZXJyb3IpOw0KPiAtCXJldHVybiBFUlJfUFRSKGVycm9y KTsNCj4gKwlyZXR1cm4gbmZzX3hkZXZfbW91bnRfY29tbW9uKCZuZnM0X2ZzX3R5cGUsIGZsYWdz LCBkZXZfbmFtZSwgJm1vdW50X2luZm8pOw0KPiAgfQ0KPiAgDQo+ICBzdGF0aWMgc3RydWN0IGRl bnRyeSAqDQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xpZW50IG1haW50YWlu ZXINCg0KTmV0QXBwDQpUcm9uZC5NeWtsZWJ1c3RAbmV0YXBwLmNvbQ0Kd3d3Lm5ldGFwcC5jb20N Cg0K