From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nick Edelen Subject: Re: [RFC/PATCH INTRO] rev-cache Date: Tue, 21 Jul 2009 01:48:35 +0200 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016368e21ccbc1cfd046f2bc68f Cc: Junio C Hamano , Sam Vilain , "Shawn O. Pearce" , Johannes Schindelin , Andreas Ericsson , Jeff King To: "git@vger.kernel.org" X-From: git-owner@vger.kernel.org Tue Jul 21 01:48:52 2009 Return-path: Envelope-to: gcvg-git-2@gmane.org Received: from vger.kernel.org ([209.132.176.167]) by lo.gmane.org with esmtp (Exim 4.50) id 1MT2bC-0007Oa-6m for gcvg-git-2@gmane.org; Tue, 21 Jul 2009 01:48:51 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754408AbZGTXsk (ORCPT ); Mon, 20 Jul 2009 19:48:40 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754389AbZGTXsj (ORCPT ); Mon, 20 Jul 2009 19:48:39 -0400 Received: from mail-bw0-f228.google.com ([209.85.218.228]:37466 "EHLO mail-bw0-f228.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754331AbZGTXsh (ORCPT ); Mon, 20 Jul 2009 19:48:37 -0400 Received: by bwz28 with SMTP id 28so2293055bwz.37 for ; Mon, 20 Jul 2009 16:48:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=QnqNHKHL6bh/WbL4LdnxTH+da+6odifOgy2D94QqSmY=; b=s+5dxBb8kZf1LqM4VESlRCqao1aEeqATf/X29Nfrj1SyCHUwfxxUZiqSeVANWCBkgz KRX2Dfm2qTkxYsbXANaS4g3rMgRMxKuHSTH8ZQnB3qkXEKNkXUr9md/FQdD03XJMEwdn PrXeju1xApyTf1wXU5Qsuq+Rf8cDOK8cI3RZM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=n8FTLMN18Q9vXiP1JhowGyz9crs2Gy76hcwPJ1n7x8w3ONqecSUcsVGPqQeIndO5gv H+0zWVWGCK4aP6WegMWz7iHUXRIOpIHm61tWS+ZHAUAuqjthj/WWis6O+QMwgymWm0rj 0/r6YwSn+FV4Yzx5t8h2GkaUcMdDqDQkLkFn4= Received: by 10.204.112.205 with SMTP id x13mr4796571bkp.170.1248133715335; Mon, 20 Jul 2009 16:48:35 -0700 (PDT) In-Reply-To: Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: --0016368e21ccbc1cfd046f2bc68f Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable hi all, understandably, someone dumping a load of source without much comment on you guys didn't exactly enthrall you. this project feels pretty finished, so I'm not in desperate need of feedback, but I figured you guys might like some high-level info on my part. I've modified the integration bit slightly, and performance is now reasonably satisfactory. here are some stats for the linux repo (~270MB) on my laptop: ( note that I've edited the last patch (integration) a bit, so I've attached the new patch. I've also, in a seperate patch, tweaked builtin-pack-objects to reduce a bottleneck in object checking/writing (also attached). ) git-rev-list --all --objects >/dev/null default : ~55s w/ rev-cache: ~8s git-pack-objects --revs --all --stdout >/dev/null default : 4m 48s (cold); 3m 41s (warm) w/ rev-cache : ~58s w/ rev-cache + tweak: ~36s I tested these on cygwin on a dual-core laptop with 1gb ram, with a few apps running in the background. times could vary a bit, depending on what's been run how many times with what in the background, etc., but I tried to capture the general trend. - Nick On Fri, Jul 3, 2009 at 5:13 PM, Nick Edelen wrote: > Hi everyone, > > I've been working on a revision caching system (with gsoc), and would be = curious to get some feedback on it and it's (potential) installation into g= it. =A0I believe the core mechanics of it are largely finished, but integra= tion is still rather rough. =A0I've tried to divide it into 4 self-containe= d patches -- each representing a working implemenation with incremental fea= turesets. =A0The patchset is seperated as: > =A0* basic - the simplest working revision cache implementation, with ful= l docs and relavant tests > =A0* objects - non-commit object caching + tests > =A0* misc - extra (maintenance) features and refactor of object caching (= requiring slight modification of some object structures) > =A0* integration - (proof of concept) integration of rev-cache into rev-l= ist, along with extensive tests > > I'm afraid the first patch is rather big, as the topo-data encoding schem= e is a smidgen complicated, but its effect on git's internals is very small= -- it's less of a patch and more an addition of a few files. =A0I know you= guys prefer inline patches, but in view of the patchfile size I decided it= 'd be more prudent to include that seperately as an attachment. =A0The only= other caveat I can think of is that the tests currently require python, al= though that could change in future. > > So yeah, I hope you find it interesting. =A0Apologies if I'm breaking pro= tocol... > > =A0- Nick > --0016368e21ccbc1cfd046f2bc68f Content-Type: application/octet-stream; name="patch_int.diff" Content-Disposition: attachment; filename="patch_int.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fxduiqol0 RnJvbTogTmljayBFZGVsZW4gPHNpcm5vdEBnbWFpbC5jb20+ClN1YmplY3Q6IFtQQVRDSF0gdC9y ZXZjYWNoZS9pbnRlZ3JhdGlvbgoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgdGVudGF0aXZlIHN0 ZXAgdG93YXJkcyBpbnRlZ3JhdGluZyByZXYtY2FjaGUgaW50byB0aGUgaW50ZXJuYWwgcmV2aXNp b24gd2Fsa2VyLiAgQ2FjaGUgdHJhdmVyc2FsIGlzIGFkZGVkIHRvIGJvdGggbGltaXRlZCBhbmQg dW5saW1pdGVkIHJldmlzaW9uIHdhbGtzLCBhbmQgRkFDRV9WQUxVRWQgb2JqZWN0cyBhcmUgaGFu ZGxlZCBpbiBsaXN0LW9iamVjdHMuICBGdXJ0aGVybW9yZSB0aGUgdW5pcXVlIG9iamVjdF9saXN0 IGZpZWxkIGlzIGFkZGVkIHRvIGNvbW1pdCBvYmplY3RzLCB0byBhbGxvdyBydW50aW1lIGFzc29j aWF0aW9uIHdpdGggYSBjb21taXQncyBjYWNoZWQgJ3VuaXF1ZScgb2JqZWN0IGxpc3QuCgpUaGUg dHJhdmVyc2FsIG1lY2hhbmlzbSBpbiByZXYtY2FjaGUgaXMgdXBkYXRlZCB0byByZWZsZWN0IHRo ZSBsaW1pdGluZyBtZXRob2RzIHVzZWQgaW4gcmV2LWxpc3QuICBUZXN0cyBmb3IgY29hZ3VsYXRp b24gYW5kIGluZGV4IGdlbmVyYXRpb24gYXJlIGluY2x1ZGVkLCBpbiBhZGRpdGlvbiB0byBzZXZl cmFsIHZlcmlmeWluZyB0aGUgY29ycmVjdG5lc3Mgb2YgaW50ZWdyYXRpb24uCgpTaWduZWQtb2Zm LWJ5OiBOaWNrIEVkZWxlbiA8c2lybm90QGdtYWlsLmNvbT4KCi0tLQogYnVpbHRpbi1yZXYtY2Fj aGUuYyAgICAgICB8ICAgNTAgKysrKysrKy0KIGNvbW1pdC5jICAgICAgICAgICAgICAgICAgfCAg ICAyICstCiBjb21taXQuaCAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBsaXN0LW9iamVjdHMu YyAgICAgICAgICAgIHwgICA0OSArKysrKystCiByZXYtY2FjaGUuYyAgICAgICAgICAgICAgIHwg IDMxOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIHJldmlz aW9uLmMgICAgICAgICAgICAgICAgfCAgIDg3ICsrKysrKysrKystLS0KIHJldmlzaW9uLmggICAg ICAgICAgICAgICAgfCAgIDM1ICsrKy0tLQogdC90NjAxNS1yZXYtY2FjaGUtbGlzdC5zaCB8ICAx MjAgKysrKysrKysrKysrKysrKy0tCiA4IGZpbGVzIGNoYW5nZWQsIDU2MyBpbnNlcnRpb25zKCsp LCAxMDAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1yZXYtY2FjaGUuYyBiL2J1 aWx0aW4tcmV2LWNhY2hlLmMKaW5kZXggMzgwODE4Zi4uMzhhNmM4NSAxMDA3NTUKLS0tIGEvYnVp bHRpbi1yZXYtY2FjaGUuYworKysgYi9idWlsdGluLXJldi1jYWNoZS5jCkBAIC0zLDYgKzMsNyBA QAogI2luY2x1ZGUgImNvbW1pdC5oIgogI2luY2x1ZGUgImRpZmYuaCIKICNpbmNsdWRlICJyZXZp c2lvbi5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgogCiAjZGVmaW5lIERFRkFVTFRfSUdO T1JFX1NMSUNFX1NJWkUJCTUwMDAwMDAgLyogaW4gYnl0ZXMgKi8KIApAQCAtNjksNiArNzAsNDMg QEAgc3RhdGljIGludCBoYW5kbGVfYWRkKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pIC8q IGFyZ3MgYmV5b25kIHRoaXMgY29tbWFuZAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBz aG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCit7CisJcHJpbnRm KCIlc1xuIiwgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworfQorCitzdGF0aWMg dm9pZCBzaG93X29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IHN0cnVjdCBuYW1lX3Bh dGggKnBhdGgsIGNvbnN0IGNoYXIgKmxhc3QpCit7CisJcHJpbnRmKCIlc1xuIiwgc2hhMV90b19o ZXgob2JqLT5zaGExKSk7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9yZXZfbGlzdChpbnQgYXJnYywg Y29uc3QgY2hhciAqYXJndltdKQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXVuc2lnbmVk IGludCBmbGFncyA9IDA7CisJaW50IGk7CisJCisJaW5pdF9yZXZpc2lvbnMoJnJldnMsIDApOwor CQorCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwg Ii0tbm90IikpCisJCQlmbGFncyBePSBVTklOVEVSRVNUSU5HOworCQllbHNlIGlmICghc3RyY21w KGFyZ3ZbaV0sICItLW9iamVjdHMiKSkKKwkJCXJldnMudHJlZV9vYmplY3RzID0gcmV2cy5ibG9i X29iamVjdHMgPSAxOworCQllbHNlCisJCQloYW5kbGVfcmV2aXNpb25fYXJnKGFyZ3ZbaV0sICZy ZXZzLCBmbGFncywgMSk7CisJfQorCQorCXNldHVwX3JldmlzaW9ucygwLCAwLCAmcmV2cywgMCk7 CisJcmV2cy50b3BvX29yZGVyID0gMTsKKwlyZXZzLmxpZm8gPSAxOworCXByZXBhcmVfcmV2aXNp b25fd2FsaygmcmV2cyk7CisJCisJdHJhdmVyc2VfY29tbWl0X2xpc3QoJnJldnMsIHNob3dfY29t bWl0LCBzaG93X29iamVjdCwgMCk7CisJCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaGFu ZGxlX3dhbGsoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKIHsKIAlzdHJ1Y3QgY29tbWl0 ICpjb21taXQ7CkBAIC0xMTMsMjEgKzE1MSwyMSBAQCBzdGF0aWMgaW50IGhhbmRsZV93YWxrKGlu dCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCiAJcXVldWUgPSAwOwogCXFwID0gJnF1ZXVlOwog CWNvbW1pdCA9IHBvcF9jb21taXQoJndvcmspOwotCXJldHZhbCA9IHRyYXZlcnNlX2NhY2hlX3Ns aWNlKDAsIHNoYTFwLCAmcmV2cywgY29tbWl0LCAmZGF0ZSwgJnNsb3AsICZxcCwgJndvcmspOwor CXJldHZhbCA9IHRyYXZlcnNlX2NhY2hlX3NsaWNlKCZyZXZzLCBzaGExcCwgY29tbWl0LCAmZGF0 ZSwgJnNsb3AsICZxcCwgJndvcmspOwogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFs OwogCQotCXByaW50ZigicXVldWU6XG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgInF1ZXVlOlxuIik7 CiAJd2hpbGUgKChjb21taXQgPSBwb3BfY29tbWl0KCZxdWV1ZSkpICE9IDApIHsKIAkJcHJpbnRm KCIlc1xuIiwgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOwogCX0KIAkKLQlwcmlu dGYoIndvcms6XG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIndvcms6XG4iKTsKIAl3aGlsZSAoKGNv bW1pdCA9IHBvcF9jb21taXQoJndvcmspKSAhPSAwKSB7CiAJCXByaW50ZigiJXNcbiIsIHNoYTFf dG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKIAl9CiAJCi0JcHJpbnRmKCJwZW5kaW5nOlxu Iik7CisJZnByaW50ZihzdGRlcnIsICJwZW5kaW5nOlxuIik7CiAJZm9yIChpID0gMDsgaSA8IHJl dnMucGVuZGluZy5ucjsgaSsrKSB7CiAJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHJldnMucGVuZGlu Zy5vYmplY3RzW2ldLml0ZW07CiAJCQpAQCAtMTgxLDcgKzIxOSw3IEBAIHN0YXRpYyBpbnQgaGFu ZGxlX2Z1c2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKIAogc3RhdGljIGludCBoYW5k bGVfaW5kZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKIHsKLQlyZXR1cm4gcmVnZW5l cmF0ZV9jYWNoZV9pbmRleCgpOworCXJldHVybiByZWdlbmVyYXRlX2NhY2hlX2luZGV4KDApOwog fQogCiBzdGF0aWMgaW50IGhhbmRsZV9oZWxwKHZvaWQpCkBAIC0yMzUsNiArMjczLDggQEAgaW50 IGNtZF9yZXZfY2FjaGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSwgY29uc3QgY2hhciAq cHJlZml4KQogCQlyID0gaGFuZGxlX3dhbGsoYXJnYywgYXJndik7CiAJZWxzZSBpZiAoIXN0cmNt cChhcmcsICJpbmRleCIpKQogCQlyID0gaGFuZGxlX2luZGV4KGFyZ2MsIGFyZ3YpOworCWVsc2Ug aWYgKCFzdHJjbXAoYXJnLCAidGVzdCIpKQorCQlyID0gdGVzdF9yZXZfbGlzdChhcmdjLCBhcmd2 KTsKIAllbHNlCiAJCXJldHVybiBoYW5kbGVfaGVscCgpOwogCQpkaWZmIC0tZ2l0IGEvY29tbWl0 LmMgYi9jb21taXQuYwppbmRleCBkOTc3OGJhLi45MjQ1OWJkIDEwMDY0NAotLS0gYS9jb21taXQu YworKysgYi9jb21taXQuYwpAQCAtMjU2LDcgKzI1Niw3IEBAIGludCBwYXJzZV9jb21taXRfYnVm ZmVyKHN0cnVjdCBjb21taXQgKml0ZW0sIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXpl KQogCQkJICAgICBzaGExX3RvX2hleChpdGVtLT5vYmplY3Quc2hhMSkpOwogCWl0ZW0tPnRyZWUg PSBsb29rdXBfdHJlZShwYXJlbnQpOwogCWJ1ZnB0ciArPSA0NjsgLyogInRyZWUgIiArICJoZXgg c2hhMSIgKyAiXG4iICovCi0gCXBwdHIgPSAmaXRlbS0+cGFyZW50czsKKwlwcHRyID0gJml0ZW0t PnBhcmVudHM7CiAJd2hpbGUgKHBvcF9jb21taXQocHB0cikpCiAJCTsgLyogY2xlYXIgYW55dGhp bmcgZnJvbSBjYWNoZSAqLwogCmRpZmYgLS1naXQgYS9jb21taXQuaCBiL2NvbW1pdC5oCmluZGV4 IDA1MjlmY2YuLjdjNTBhN2YgMTAwNjQ0Ci0tLSBhL2NvbW1pdC5oCisrKyBiL2NvbW1pdC5oCkBA IC0yMCw2ICsyMCw3IEBAIHN0cnVjdCBjb21taXQgewogCXN0cnVjdCB0cmVlICp0cmVlOwogCWNo YXIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIHNpemU7CisJc3RydWN0IG9iamVjdF9saXN0ICp1 bmlxdWU7CiB9OwogCiBleHRlcm4gaW50IHNhdmVfY29tbWl0X2J1ZmZlcjsKZGlmZiAtLWdpdCBh L2xpc3Qtb2JqZWN0cy5jIGIvbGlzdC1vYmplY3RzLmMKaW5kZXggODk1MzU0OC4uOTU4YzBmOCAx MDA2NDQKLS0tIGEvbGlzdC1vYmplY3RzLmMKKysrIGIvbGlzdC1vYmplY3RzLmMKQEAgLTc0LDIy ICs3NCwzMyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3RyZWUoc3RydWN0IHJldl9pbmZvICpyZXZz LAogCQlkaWUoImJhZCB0cmVlIG9iamVjdCIpOwogCWlmIChvYmotPmZsYWdzICYgKFVOSU5URVJF U1RJTkcgfCBTRUVOKSkKIAkJcmV0dXJuOwotCWlmIChwYXJzZV90cmVlKHRyZWUpIDwgMCkKLQkJ ZGllKCJiYWQgdHJlZSBvYmplY3QgJXMiLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwkKIAlv YmotPmZsYWdzIHw9IFNFRU47CiAJc2hvdyhvYmosIHBhdGgsIG5hbWUpOworCWlmIChvYmotPmZs YWdzICYgRkFDRV9WQUxVRSkKKwkJcmV0dXJuOworCQorCS8qIHRyYXZlcnNlX2NvbW1pdF9saXN0 IGlzIG9ubHkgdXNlZCBmb3IgZW51bWVyYXRpb24gcHVycG9zZXMsIAorCSAqIGllLiBub3RoaW5n IHJlbGllcyBvbiB0cmVlcyBiZWluZyBwYXJzZWQgaW4gdGhpcyByb3V0aW5lICovCisJaWYgKHBh cnNlX3RyZWUodHJlZSkgPCAwKQorCQlkaWUoImJhZCB0cmVlIG9iamVjdCAlcyIsIHNoYTFfdG9f aGV4KG9iai0+c2hhMSkpOworCiAJbWUudXAgPSBwYXRoOwogCW1lLmVsZW0gPSBuYW1lOwogCW1l LmVsZW1fbGVuID0gc3RybGVuKG5hbWUpOwotCiAJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIHRyZWUt PmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CiAKIAl3aGlsZSAodHJlZV9lbnRyeSgmZGVzYywgJmVudHJ5 KSkgewotCQlpZiAoU19JU0RJUihlbnRyeS5tb2RlKSkKKwkJaWYgKFNfSVNESVIoZW50cnkubW9k ZSkpIHsKKwkJCXN0cnVjdCB0cmVlICpzdWJ0cmVlID0gbG9va3VwX3RyZWUoZW50cnkuc2hhMSk7 CisJCQlpZiAoIXN1YnRyZWUpCisJCQkJY29udGludWU7CisJCQkKKwkJCXN1YnRyZWUtPm9iamVj dC5mbGFncyAmPSB+RkFDRV9WQUxVRTsKIAkJCXByb2Nlc3NfdHJlZShyZXZzLAotCQkJCSAgICAg bG9va3VwX3RyZWUoZW50cnkuc2hhMSksCisJCQkJICAgICBzdWJ0cmVlLAogCQkJCSAgICAgc2hv dywgJm1lLCBlbnRyeS5wYXRoKTsKLQkJZWxzZSBpZiAoU19JU0dJVExJTksoZW50cnkubW9kZSkp CisJCX0gZWxzZSBpZiAoU19JU0dJVExJTksoZW50cnkubW9kZSkpCiAJCQlwcm9jZXNzX2dpdGxp bmsocmV2cywgZW50cnkuc2hhMSwKIAkJCQkJc2hvdywgJm1lLCBlbnRyeS5wYXRoKTsKIAkJZWxz ZQpAQCAtMTM2LDYgKzE0Nyw3IEBAIHZvaWQgbWFya19lZGdlc191bmludGVyZXN0aW5nKHN0cnVj dCBjb21taXRfbGlzdCAqbGlzdCwKIAogc3RhdGljIHZvaWQgYWRkX3BlbmRpbmdfdHJlZShzdHJ1 Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCB0cmVlICp0cmVlKQogeworCXRyZWUtPm9iamVjdC5m bGFncyAmPSB+RkFDRV9WQUxVRTsKIAlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgJnRyZWUtPm9i amVjdCwgIiIpOwogfQogCkBAIC0xNDYsMTcgKzE1OCwyNyBAQCB2b2lkIHRyYXZlcnNlX2NvbW1p dF9saXN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgY29tbWl0 ICpjb21taXQ7CisJZW51bSBvYmplY3RfdHlwZSB3aGF0ID0gT0JKX1RBRzsKKwljaGFyIGZhY2Vf dmFsdWUgPSAwOwogCiAJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ocmV2cykpICE9IE5V TEwpIHsKLQkJYWRkX3BlbmRpbmdfdHJlZShyZXZzLCBjb21taXQtPnRyZWUpOworCQlpZiAoIShj b21taXQtPm9iamVjdC5mbGFncyAmIEZBQ0VfVkFMVUUpKQorCQkJYWRkX3BlbmRpbmdfdHJlZShy ZXZzLCBjb21taXQtPnRyZWUpOworCQllbHNlIAorCQkJZmFjZV92YWx1ZSA9IDE7CiAJCXNob3df Y29tbWl0KGNvbW1pdCwgZGF0YSk7CiAJfQorCQorbG9vcF9vYmplY3RzOgogCWZvciAoaSA9IDA7 IGkgPCByZXZzLT5wZW5kaW5nLm5yOyBpKyspIHsKIAkJc3RydWN0IG9iamVjdF9hcnJheV9lbnRy eSAqcGVuZGluZyA9IHJldnMtPnBlbmRpbmcub2JqZWN0cyArIGk7CiAJCXN0cnVjdCBvYmplY3Qg Km9iaiA9IHBlbmRpbmctPml0ZW07CiAJCWNvbnN0IGNoYXIgKm5hbWUgPSBwZW5kaW5nLT5uYW1l OwogCQlpZiAob2JqLT5mbGFncyAmIChVTklOVEVSRVNUSU5HIHwgU0VFTikpCiAJCQljb250aW51 ZTsKKwkJaWYgKG9iai0+dHlwZSAhPSB3aGF0ICYmIGZhY2VfdmFsdWUpCisJCQljb250aW51ZTsK KwkJCiAJCWlmIChvYmotPnR5cGUgPT0gT0JKX1RBRykgewogCQkJb2JqLT5mbGFncyB8PSBTRUVO OwogCQkJc2hvd19vYmplY3Qob2JqLCBOVUxMLCBuYW1lKTsKQEAgLTE3NSw2ICsxOTcsMTkgQEAg dm9pZCB0cmF2ZXJzZV9jb21taXRfbGlzdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCiAJCWRpZSgi dW5rbm93biBwZW5kaW5nIG9iamVjdCAlcyAoJXMpIiwKIAkJICAgIHNoYTFfdG9faGV4KG9iai0+ c2hhMSksIG5hbWUpOwogCX0KKwlpZiAoZmFjZV92YWx1ZSkgeworCQlzd2l0Y2ggKHdoYXQpIHsK KwkJY2FzZSBPQkpfVEFHIDogCisJCQl3aGF0ID0gT0JKX1RSRUU7CisJCQlnb3RvIGxvb3Bfb2Jq ZWN0czsKKwkJY2FzZSBPQkpfVFJFRSA6IAorCQkJd2hhdCA9IE9CSl9CTE9COworCQkJZ290byBs b29wX29iamVjdHM7CisJCWRlZmF1bHQgOiAKKwkJCWJyZWFrOworCQl9CisJfQorCQogCWlmIChy ZXZzLT5wZW5kaW5nLm5yKSB7CiAJCWZyZWUocmV2cy0+cGVuZGluZy5vYmplY3RzKTsKIAkJcmV2 cy0+cGVuZGluZy5uciA9IDA7CmRpZmYgLS1naXQgYS9yZXYtY2FjaGUuYyBiL3Jldi1jYWNoZS5j CmluZGV4IDYwMmNlYzYuLjlhYjJkNDQgMTAwNzU1Ci0tLSBhL3Jldi1jYWNoZS5jCisrKyBiL3Jl di1jYWNoZS5jCkBAIC04MywxMyArODMsMTkgQEAgc3RydWN0IG9iamVjdF9lbnRyeSB7CiAJLyog c2l6ZSAqLwogfTsKIAorc3RydWN0IGJhZF9zbGljZSB7CisJdW5zaWduZWQgY2hhciBzaGExWzIw XTsKKwlzdHJ1Y3QgYmFkX3NsaWNlICpuZXh0OworfTsKKwogLyogbGlzdCByZXNlbWJsZXMgcGFj ayBpbmRleCBmb3JtYXQgKi8KIHN0YXRpYyB1aW50MzJfdCBmYW5vdXRbMHhmZiArIDJdOwogCiBz dGF0aWMgdW5zaWduZWQgY2hhciAqaWR4X21hcCA9IDA7CiBzdGF0aWMgaW50IGlkeF9zaXplOwog c3RhdGljIHN0cnVjdCBpbmRleF9oZWFkZXIgaWR4X2hlYWQ7Ci1zdGF0aWMgY2hhciBub19pZHgg PSAwOworc3RhdGljIGNoYXIgbm9faWR4ID0gMCwgc2F2ZV91bmlxdWUgPSAwLCBhZGRfdG9fcGVu ZGluZyA9IDA7CitzdGF0aWMgc3RydWN0IGJhZF9zbGljZSAqYmFkX3NsaWNlczsKIAogc3RhdGlj IHN0cnVjdCBzdHJidWYgKmdfYnVmZmVyOwogCkBAIC0xMDgsMTAgKzExNCwzNiBAQCBzdGF0aWMg c3RydWN0IHN0cmJ1ZiAqZ19idWZmZXI7CiAjZGVmaW5lIEFDVFVBTF9PQkpFQ1RfRU5UUllfU0la RShlKQkJKE9FX1NJWkUgKyBQQVRIX1NJWkUoKGUpLT5tZXJnZV9uciArIChlKS0+c3BsaXRfbnIp ICsgKGUpLT5zaXplX3NpemUpCiAjZGVmaW5lIEVOVFJZX1NJWkVfT0ZGU0VUKGUpCQkJKEFDVFVB TF9PQkpFQ1RfRU5UUllfU0laRShlKSAtIChlKS0+c2l6ZV9zaXplKQogCi0jZGVmaW5lIFNMT1AJ CTUKKyNkZWZpbmUgU0xPUAkJCTUKKworI2RlZmluZSBIQVNfVU5JUVVFUwkJRkFDRV9WQUxVRQog CiAvKiBpbml0aWFsaXphdGlvbiAqLwogCitzdGF0aWMgdm9pZCBtYXJrX2JhZF9zbGljZSh1bnNp Z25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBiYWRfc2xpY2UgKmJhZDsKKwkKKwliYWQgPSB4 Y2FsbG9jKHNpemVvZihzdHJ1Y3QgYmFkX3NsaWNlKSwgMSk7CisJaGFzaGNweShiYWQtPnNoYTEs IHNoYTEpOworCQorCWJhZC0+bmV4dCA9IGJhZF9zbGljZXM7CisJYmFkX3NsaWNlcyA9IGJhZDsK K30KKworc3RhdGljIGludCBpc19iYWRfc2xpY2UodW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlz dHJ1Y3QgYmFkX3NsaWNlICpiYWQgPSBiYWRfc2xpY2VzOworCQorCXdoaWxlIChiYWQpIHsKKwkJ aWYgKCFoYXNoY21wKGJhZC0+c2hhMSwgc2hhMSkpCisJCQlyZXR1cm4gMTsKKwkJYmFkID0gYmFk LT5uZXh0OworCX0KKwkKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBnZXRfaW5kZXhfaGVh ZCh1bnNpZ25lZCBjaGFyICptYXAsIGludCBsZW4sIHN0cnVjdCBpbmRleF9oZWFkZXIgKmhlYWQs IHVpbnQzMl90ICpmYW5vdXQpCiB7CiAJc3RydWN0IGluZGV4X2hlYWRlcl9vbmRpc2sgd2hlYWQ7 CkBAIC0yMjgsNiArMjYwLDcgQEAgc3RhdGljIHN0cnVjdCBpbmRleF9lbnRyeSAqc2VhcmNoX2lu ZGV4KHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB1bnNpZ25lZCBjaGFyICpnZXRfY2FjaGVfc2xpY2Uo c3RydWN0IGNvbW1pdCAqY29tbWl0KQogewogCXN0cnVjdCBpbmRleF9lbnRyeSAqaWU7CisJdW5z aWduZWQgY2hhciAqc2hhMTsKIAkKIAlpZiAoIWlkeF9tYXApIHsKIAkJaWYgKG5vX2lkeCkKQEAg LTIzOSw4ICsyNzIsMTMgQEAgdW5zaWduZWQgY2hhciAqZ2V0X2NhY2hlX3NsaWNlKHN0cnVjdCBj b21taXQgKmNvbW1pdCkKIAkJcmV0dXJuIDA7CiAJCiAJaWUgPSBzZWFyY2hfaW5kZXgoY29tbWl0 LT5vYmplY3Quc2hhMSk7Ci0JaWYgKGllICYmIGllLT5jYWNoZV9pbmRleCA8IGlkeF9oZWFkLmNh Y2hlcykKLQkJcmV0dXJuIGlkeF9oZWFkLmNhY2hlX3NoYTFzICsgaWUtPmNhY2hlX2luZGV4ICog MjA7CisJaWYgKGllICYmIGllLT5jYWNoZV9pbmRleCA8IGlkeF9oZWFkLmNhY2hlcykgeworCQlz aGExID0gaWR4X2hlYWQuY2FjaGVfc2hhMXMgKyBpZS0+Y2FjaGVfaW5kZXggKiAyMDsKKwkJCisJ CWlmIChpc19iYWRfc2xpY2Uoc2hhMSkpCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIHNoYTE7CisJ fQogCQogCXJldHVybiAwOwogfQpAQCAtMjUwLDggKzI4OCwyOSBAQCB1bnNpZ25lZCBjaGFyICpn ZXRfY2FjaGVfc2xpY2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0KQogCiBzdGF0aWMgdW5zaWduZWQg bG9uZyBkZWNvZGVfc2l6ZSh1bnNpZ25lZCBjaGFyICpzdHIsIGludCBsZW4pOwogCisvKiBvbiBm YWlsdXJlICovCitzdGF0aWMgdm9pZCByZXN0b3JlX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21t aXQpCit7CisJaWYgKGNvbW1pdC0+dW5pcXVlKSB7CisJCWZyZWUoY29tbWl0LT51bmlxdWUpOwor CQljb21taXQtPnVuaXF1ZSA9IDA7CisJfQorCQorCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH4o QURERUQgfCBTRUVOIHwgRkFDRV9WQUxVRSk7CisJCisJaWYgKCFjb21taXQtPm9iamVjdC5wYXJz ZWQpIHsKKwkJd2hpbGUgKHBvcF9jb21taXQoJmNvbW1pdC0+cGFyZW50cykpIAorCQkJOworCQkK KwkJcGFyc2VfY29tbWl0KGNvbW1pdCk7CisJfQorCQorfQorCiBzdGF0aWMgdm9pZCBoYW5kbGVf bm9uY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0LCBz dHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSkKIHsKKwlzdGF0aWMgc3RydWN0IGNvbW1pdCAqbGFz dF9jb21taXQgPSAwOworCXN0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKipsYXN0X3VuaXF1ZSA9 IDA7CiAJc3RydWN0IGJsb2IgKmJsb2I7CiAJc3RydWN0IHRyZWUgKnRyZWU7CiAJc3RydWN0IG9i amVjdCAqb2JqOwpAQCAtMjg5LDExICszNDgsMjcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX25vbmNv bW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWMK IAkJcmV0dXJuOwogCX0KIAkKKwkvKiBhZGQgdG8gdW5pcXVlIGxpc3QgaWYgd2UncmUgbm90IGEg c3RhcnQgKi8KKwlpZiAoc2F2ZV91bmlxdWUgJiYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgRkFD RV9WQUxVRSkpIHsKKwkJaWYgKGxhc3RfY29tbWl0ICE9IGNvbW1pdCkgeworCQkJbGFzdF9jb21t aXQgPSBjb21taXQ7CisJCQlsYXN0X3VuaXF1ZSA9IDA7CisJCX0KKwkJCisJCWlmICghbGFzdF91 bmlxdWUpCisJCQlsYXN0X3VuaXF1ZSA9ICZjb21taXQtPnVuaXF1ZTsKKwkJCisJCW9iamVjdF9s aXN0X2FwcGVuZChvYmosIGxhc3RfdW5pcXVlKTsKKwkJbGFzdF91bmlxdWUgPSAmKCpsYXN0X3Vu aXF1ZSktPm5leHQ7CisJfQorCQogCW9iai0+ZmxhZ3MgfD0gRkFDRV9WQUxVRTsKLQlhZGRfcGVu ZGluZ19vYmplY3QocmV2cywgb2JqLCAiIik7CisJaWYgKGFkZF90b19wZW5kaW5nKQorCQlhZGRf cGVuZGluZ19vYmplY3QocmV2cywgb2JqLCAiIik7CiB9CiAKLXN0YXRpYyBpbnQgc2V0dXBfdHJh dmVyc2FsKHN0cnVjdCBjYWNoZV9zbGljZV9oZWFkZXIgKmhlYWQsIHVuc2lnbmVkIGNoYXIgKm1h cCwgc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKip3b3JrKQorc3Rh dGljIGludCBzZXR1cF90cmF2ZXJzYWwoc3RydWN0IGNhY2hlX3NsaWNlX2hlYWRlciAqaGVhZCwg dW5zaWduZWQgY2hhciAqbWFwLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXRf bGlzdCAqKndvcmssIAorCXN0cnVjdCBjb21taXRfbGlzdCAqKnVud29yaywgaW50ICppcGF0aF9u ciwgaW50ICp1cGF0aF9uciwgY2hhciAqaW91dHNpZGUpCiB7CiAJc3RydWN0IGluZGV4X2VudHJ5 ICppZXA7CiAJc3RydWN0IG9iamVjdF9lbnRyeSAqb2VwOwpAQCAtMzAyLDYgKzM3NywxMSBAQCBz dGF0aWMgaW50IHNldHVwX3RyYXZlcnNhbChzdHJ1Y3QgY2FjaGVfc2xpY2VfaGVhZGVyICpoZWFk LCB1bnNpZ25lZCBjaGFyICptYXAsCiAJCiAJaWVwID0gc2VhcmNoX2luZGV4KGNvbW1pdC0+b2Jq ZWN0LnNoYTEpOwogCW9lcCA9IE9FX0NBU1QobWFwICsgbnRvaGwoaWVwLT5wb3MpKTsKKwlpZiAo Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCSsrKnVwYXRoX25yOwor CQlvZXAtPnVuaW50ZXJlc3RpbmcgPSAxOworCX0gZWxzZQorCQkrKyppcGF0aF9ucjsKIAlvZXAt PmluY2x1ZGUgPSAxOwogCXJldHZhbCA9IG50b2hsKGllcC0+cG9zKTsKIAkKQEAgLTMxNiwxMCAr Mzk2LDE0IEBAIHN0YXRpYyBpbnQgc2V0dXBfdHJhdmVyc2FsKHN0cnVjdCBjYWNoZV9zbGljZV9o ZWFkZXIgKmhlYWQsIHVuc2lnbmVkIGNoYXIgKm1hcCwKIAkJCiAJCWllcCA9IHNlYXJjaF9pbmRl eChvYmotPnNoYTEpOwogCQlpZiAoIWllcCB8fCBoYXNoY21wKGlkeF9oZWFkLmNhY2hlX3NoYTFz ICsgaWVwLT5jYWNoZV9pbmRleCAqIDIwLCBoZWFkLT5zaGExKSkgeworCQkJLyogdGhlcmUgYXJl IGludGVyZXNpbmcgb2JqZWN0cyBvdXRzaWRlIHRoZSBzbGljZSAqLworCQkJaWYgKCEob2JqLT5m bGFncyAmIFVOSU5URVJFU1RJTkcpKQorCQkJCSppb3V0c2lkZSA9IDE7CisJCQkKIAkJCXByZXYg PSB3cDsKIAkJCXdwID0gd3AtPm5leHQ7CiAJCQl3cHAgPSAmd3A7Ci0gCQkJY29udGludWU7CisJ CQljb250aW51ZTsKIAkJfQogCQkKIAkJdCA9IG50b2hsKGllcC0+cG9zKTsKQEAgLTMzMCwxMSAr NDE0LDIwIEBAIHN0YXRpYyBpbnQgc2V0dXBfdHJhdmVyc2FsKHN0cnVjdCBjYWNoZV9zbGljZV9o ZWFkZXIgKmhlYWQsIHVuc2lnbmVkIGNoYXIgKm1hcCwKIAkJaWYgKHQgPCByZXR2YWwpCiAJCQly ZXR2YWwgPSB0OwogCQkKKwkJLyogY291bnQgZXZlbiBpZiBub3QgaW4gc2xpY2Ugc28gd2UgY2Fu IHN0b3AgZW51bWVyYXRpbmcgaWYgcG9zc2libGUgKi8KKwkJaWYgKG9iai0+ZmxhZ3MgJiBVTklO VEVSRVNUSU5HKQorCQkJKysqdXBhdGhfbnI7CisJCWVsc2UKKwkJCSsrKmlwYXRoX25yOworCQkK IAkJLyogcmVtb3ZlIGZyb20gd29yayBsaXN0ICovCiAJCWNvID0gcG9wX2NvbW1pdCh3cHApOwog CQl3cCA9ICp3cHA7CiAJCWlmIChwcmV2KQogCQkJcHJldi0+bmV4dCA9IHdwOworCQkKKwkJLyog Li4uYW5kIHN0b3JlIGluIHRlbXAgbGlzdCBzbyB3ZSBjYW4gcmVzdG9yZSB3b3JrIG9uIGZhaWx1 cmUgKi8KKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGNvLCB1bndvcmspOwogCX0KIAkKIAlyZXR1cm4g cmV0dmFsOwpAQCAtMzUxLDE2ICs0NDQsMjEgQEAgc3RhdGljIGludCB0cmF2ZXJzZV9jYWNoZV9z bGljZV8xKHN0cnVjdCBjYWNoZV9zbGljZV9oZWFkZXIgKmhlYWQsIHVuc2lnbmVkIGNoYXIKIAl1 bnNpZ25lZCBsb25nICpkYXRlX3NvX2ZhciwgaW50ICpzbG9wX3NvX2ZhciwgCiAJc3RydWN0IGNv bW1pdF9saXN0ICoqKnF1ZXVlLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKip3b3JrKQogewotCXN0cnVj dCBjb21taXRfbGlzdCAqaW5zZXJ0X2NhY2hlID0gMDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmlu c2VydF9jYWNoZSA9IDAsICpteXEgPSAwLCAqKm15cXAgPSAmbXlxLCAqbXl3b3JrID0gMCwgKipt eXdvcmtwID0gJm15d29yaywgKnVud29yayA9IDA7CiAJc3RydWN0IGNvbW1pdCAqKmxhc3Rfb2Jq ZWN0cywgKmNvOwotCWludCBpLCB0b3RhbF9wYXRoX25yID0gaGVhZC0+cGF0aF9uciwgcmV0dmFs ID0gLTE7Ci0JY2hhciBjb25zdW1lX2NoaWxkcmVuID0gMDsKKwl1bnNpZ25lZCBsb25nIGRhdGUg PSBkYXRlX3NvX2ZhciA/ICpkYXRlX3NvX2ZhciA6IH4wdWw7CisJaW50IGksIGlwYXRoX25yID0g MCwgdXBhdGhfbnIgPSAwLCBvcmlnX29ial9uciA9IDAsIAorCQl0b3RhbF9wYXRoX25yID0gaGVh ZC0+cGF0aF9uciwgcmV0dmFsID0gLTEsIHNsb3AgPSBzbG9wX3NvX2ZhciA/ICpzbG9wX3NvX2Zh ciA6IFNMT1A7CisJY2hhciBjb25zdW1lX2NoaWxkcmVuID0gMCwgaW91dHNpZGUgPSAwOwogCXVu c2lnbmVkIGNoYXIgKnBhdGhzOwogCQorCS8qIHRha2Ugbm90ZSBpbiBjYXNlIHdlIG5lZWQgdG8g cmVncmVzcyAqLworCW9yaWdfb2JqX25yID0gcmV2cy0+cGVuZGluZy5ucjsKKwkKIAlwYXRocyA9 IHhjYWxsb2ModG90YWxfcGF0aF9uciwgUEFUSF9XSURUSCk7CiAJbGFzdF9vYmplY3RzID0geGNh bGxvYyh0b3RhbF9wYXRoX25yLCBzaXplb2Yoc3RydWN0IGNvbW1pdCAqKSk7CiAJCi0JaSA9IHNl dHVwX3RyYXZlcnNhbChoZWFkLCBtYXAsIGNvbW1pdCwgd29yayk7CisJaSA9IHNldHVwX3RyYXZl cnNhbChoZWFkLCBtYXAsIGNvbW1pdCwgd29yaywgJnVud29yaywgJmlwYXRoX25yLCAmdXBhdGhf bnIsICZpb3V0c2lkZSk7CiAJCiAJLyogaSBhbHJlYWR5IHNldCAqLwogCXdoaWxlIChpIDwgaGVh ZC0+c2l6ZSkgewpAQCAtNDAzLDYgKzUwMSw3IEBAIHN0YXRpYyBpbnQgdHJhdmVyc2VfY2FjaGVf c2xpY2VfMShzdHJ1Y3QgY2FjaGVfc2xpY2VfaGVhZGVyICpoZWFkLCB1bnNpZ25lZCBjaGFyCiAJ CQogCQlpZiAoKHBhdGhzW3BhdGhdICYgSVBBVEgpICYmIChwYXRoc1twYXRoXSAmIFVQQVRIKSkg ewogCQkJcGF0aHNbcGF0aF0gPSBVUEFUSDsKKwkJCWlwYXRoX25yLS07CiAJCQkKIAkJCS8qIG1h cmsgZWRnZSAqLwogCQkJaWYgKGxhc3Rfb2JqZWN0c1twYXRoXSkgewpAQCAtNDEzLDYgKzUxMiw3 IEBAIHN0YXRpYyBpbnQgdHJhdmVyc2VfY2FjaGVfc2xpY2VfMShzdHJ1Y3QgY2FjaGVfc2xpY2Vf aGVhZGVyICpoZWFkLCB1bnNpZ25lZCBjaGFyCiAJCQkJbGFzdF9vYmplY3RzW3BhdGhdLT5vYmpl Y3QuZmxhZ3MgJj0gfkZBQ0VfVkFMVUU7CiAJCQkJbGFzdF9vYmplY3RzW3BhdGhdID0gMDsKIAkJ CX0KKwkJCW9iai0+ZmxhZ3MgfD0gQk9VTkRBUlk7CiAJCX0KIAkJCiAJCS8qIG5vdyB3ZSBnb3R0 YSByZS1hc3Nlc3MgdGhlIHdob2xlIGludGVyZXN0aW5nIHRoaW5nLi4uICovCkBAIC00MzYsOCAr NTM2LDEwIEBAIHN0YXRpYyBpbnQgdHJhdmVyc2VfY2FjaGVfc2xpY2VfMShzdHJ1Y3QgY2FjaGVf c2xpY2VfaGVhZGVyICpoZWFkLCB1bnNpZ25lZCBjaGFyCiAJCQkJCQlsYXN0X29iamVjdHNbcF0t Pm9iamVjdC5mbGFncyAmPSB+RkFDRV9WQUxVRTsKIAkJCQkJCWxhc3Rfb2JqZWN0c1twXSA9IDA7 CiAJCQkJCX0KLQkJCQl9IGVsc2UgaWYgKGxhc3Rfb2JqZWN0c1twXSAmJiAhbGFzdF9vYmplY3Rz W3BdLT5vYmplY3QucGFyc2VkKQorCQkJCQlvYmotPmZsYWdzIHw9IEJPVU5EQVJZOworCQkJCX0g ZWxzZSBpZiAobGFzdF9vYmplY3RzW3BdICYmICFsYXN0X29iamVjdHNbcF0tPm9iamVjdC5wYXJz ZWQpIHsKIAkJCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGNvLCAmbGFzdF9vYmplY3RzW3BdLT5wYXJl bnRzKTsKKwkJCQl9CiAJCQkJCiAJCQkJLyogY2FuJ3QgY2xvc2UgYSBtZXJnZSBwYXRoIHVudGls IGFsbCBhcmUgcGFyZW50cyBoYXZlIGJlZW4gZW5jb3VudGVyZWQgKi8KIAkJCQlpZiAoR0VUX0NP VU5UKHBhdGhzW3BdKSkgewpAQCAtNDQ3LDQ0ICs1NDksOTAgQEAgc3RhdGljIGludCB0cmF2ZXJz ZV9jYWNoZV9zbGljZV8xKHN0cnVjdCBjYWNoZV9zbGljZV9oZWFkZXIgKmhlYWQsIHVuc2lnbmVk IGNoYXIKIAkJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCQkKKwkJCQlpZiAocGF0aHNbcF0gJiBJ UEFUSCkKKwkJCQkJaXBhdGhfbnItLTsKKwkJCQllbHNlCisJCQkJCXVwYXRoX25yLS07CisJCQkJ CiAJCQkJcGF0aHNbcF0gPSAwOwogCQkJCWxhc3Rfb2JqZWN0c1twXSA9IDA7CiAJCQl9CiAJCX0K IAkJCiAJCS8qIG1ha2UgdG9wbyByZWxhdGlvbnMgKi8KLQkJaWYgKGxhc3Rfb2JqZWN0c1twYXRo XSAmJiAhbGFzdF9vYmplY3RzW3BhdGhdLT5vYmplY3QucGFyc2VkKQorCQlpZiAobGFzdF9vYmpl Y3RzW3BhdGhdICYmICFsYXN0X29iamVjdHNbcGF0aF0tPm9iamVjdC5wYXJzZWQpIHsKIAkJCWNv bW1pdF9saXN0X2luc2VydChjbywgJmxhc3Rfb2JqZWN0c1twYXRoXS0+cGFyZW50cyk7CisJCX0K KwkJCisJCS8qIHdlJ3ZlIGJlZW4gaGVyZSBhbHJlYWR5ICovCisJCWlmIChvYmotPmZsYWdzICYg QURERUQpIHsKKwkJCWlmIChlbnRyeS0+dW5pbnRlcmVzdGluZyAmJiAhKG9iai0+ZmxhZ3MgJiBV TklOVEVSRVNUSU5HKSkgeworCQkJCW9iai0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJCQlt YXJrX3BhcmVudHNfdW5pbnRlcmVzdGluZyhjbyk7CisJCQkJdXBhdGhfbnItLTsKKwkJCX0gZWxz ZSBpZiAoIWVudHJ5LT51bmludGVyZXN0aW5nKQorCQkJCWlwYXRoX25yLS07CisJCQkKKwkJCXBh dGhzW3BhdGhdID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CiAJCQogCQkvKiBpbml0aWFsaXplIGNv bW1pdCAqLwogCQlpZiAoIWVudHJ5LT5pc19zdGFydCkgewogCQkJY28tPmRhdGUgPSBudG9obChl bnRyeS0+ZGF0ZSk7Ci0gCQkJb2JqLT5mbGFncyB8PSBBRERFRCB8IEZBQ0VfVkFMVUU7CisJCQlv YmotPmZsYWdzIHw9IEFEREVEIHwgRkFDRV9WQUxVRTsKIAkJfSBlbHNlCiAJCQlwYXJzZV9jb21t aXQoY28pOwogCQkKIAkJb2JqLT5mbGFncyB8PSBTRUVOOwotIAkJCi0gCQlpZiAoZW50cnktPnVu aW50ZXJlc3RpbmcpCi0gCQkJb2JqLT5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQkKKwkJaWYg KGVudHJ5LT51bmludGVyZXN0aW5nKQorCQkJb2JqLT5mbGFncyB8PSBVTklOVEVSRVNUSU5HOwor CQllbHNlIGlmIChjby0+ZGF0ZSA8IGRhdGUpCisJCQlkYXRlID0gY28tPmRhdGU7CiAJCQogCQkv KiB3ZSBuZWVkIHRvIGtub3cgd2hhdCB0aGUgZWRnZXMgYXJlICovCiAJCWxhc3Rfb2JqZWN0c1tw YXRoXSA9IGNvOwogCQkKIAkJLyogYWRkIHRvIGxpc3QgKi8KLQkJaWYgKCEob2JqLT5mbGFncyAm IFVOSU5URVJFU1RJTkcpIHx8IHJldnMtPnNob3dfYWxsKSB7Ci0JCQlpZiAoZW50cnktPmlzX3N0 YXJ0KQotCQkJCWluc2VydF9ieV9kYXRlX2NhY2hlZChjbywgd29yaywgaW5zZXJ0X2NhY2hlLCAm aW5zZXJ0X2NhY2hlKTsKLQkJCWVsc2UKLQkJCQkqcXVldWUgPSAmY29tbWl0X2xpc3RfaW5zZXJ0 KGNvLCAqcXVldWUpLT5uZXh0OworCQlpZiAoc2xvcCAmJiAhKHJldnMtPm1pbl9hZ2UgIT0gLTEg JiYgY28tPmRhdGUgPiByZXZzLT5taW5fYWdlKSkgeworCQkJCisJCQlpZiAoIShvYmotPmZsYWdz ICYgVU5JTlRFUkVTVElORykgfHwgcmV2cy0+c2hvd19hbGwpIHsKKwkJCQlpZiAoZW50cnktPmlz X3N0YXJ0KQorCQkJCQlteXdvcmtwID0gJmNvbW1pdF9saXN0X2luc2VydChjbywgbXl3b3JrcCkt Pm5leHQ7CisJCQkJZWxzZQorCQkJCQlteXFwID0gJmNvbW1pdF9saXN0X2luc2VydChjbywgbXlx cCktPm5leHQ7CisJCQkJCisJCQkJLyogYWRkIGNoaWxkcmVuIHRvIGxpc3QgYXMgd2VsbCAqLwor CQkJCWlmIChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCQkJY29uc3VtZV9jaGlsZHJl biA9IDA7CisJCQkJZWxzZQorCQkJCQljb25zdW1lX2NoaWxkcmVuID0gMTsKKwkJCX0KIAkJCQot CQkJLyogYWRkIGNoaWxkcmVuIHRvIGxpc3QgYXMgd2VsbCAqLwotCQkJaWYgKG9iai0+ZmxhZ3Mg JiBVTklOVEVSRVNUSU5HKQotCQkJCWNvbnN1bWVfY2hpbGRyZW4gPSAwOwotCQkJZWxzZSAKLQkJ CQljb25zdW1lX2NoaWxkcmVuID0gMTsKIAkJfQogCQkKKwkJLyogc2hvdWxkIHdlIGNvbnRpbnVl PyAqLworCQlpZiAoIXNsb3ApIHsKKwkJCWlmICghdXBhdGhfbnIpIHsKKwkJCQlicmVhazsKKwkJ CX0gZWxzZSBpZiAoaW91dHNpZGUgfHwgcmV2cy0+c2hvd19hbGwpIHsKKwkJCQkvKiBwYXNzIGl0 IGJhY2sgdG8gcmV2LWxpc3QKKwkJCQkgKiB3ZSBwdXJwb3NlbHkgaWdub3JlIGV2ZXJ5dGhpbmcg b3V0c2lkZSB0aGlzIGNhY2hlLCBzbyB3ZSBkb24ndCBuZWVkbGVzc2x5IHRyYXZlcnNlIHRoZSB3 aG9sZSAKKwkJCQkgKiB0aGluZyBvbiB1bmludGVyZXN0aW5nLCBidXQgdGhhdCBkb2VzIG1lYW4g dGhhdCB3ZSBtYXkgbmVlZCB0byBib3VuY2UgYmFjayAKKwkJCQkgKiBhbmQgZm9ydGggYSBmZXcg dGltZXMgd2l0aCByZXYtbGlzdCAqLworCQkJCW15d29ya3AgPSAmY29tbWl0X2xpc3RfaW5zZXJ0 KGNvLCBteXdvcmtwKS0+bmV4dDsKKwkJCQkKKwkJCQlwYXRoc1twYXRoXSA9IDA7CisJCQkJdXBh dGhfbnItLTsKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSBpZiAoIWlw YXRoX25yICYmIGNvLT5kYXRlIDw9IGRhdGUpCisJCQlzbG9wLS07CisJCWVsc2UKKwkJCXNsb3Ag PSBTTE9QOworCQkKIAkJLyogb3BlbiBwYXJlbnRzICovCiAJCWlmIChlbnRyeS0+bWVyZ2VfbnIp IHsKIAkJCWludCBqLCBvZmYgPSBpbmRleCArIE9FX1NJWkU7CkBAIC00OTksNiArNjQ3LDExIEBA IHN0YXRpYyBpbnQgdHJhdmVyc2VfY2FjaGVfc2xpY2VfMShzdHJ1Y3QgY2FjaGVfc2xpY2VfaGVh ZGVyICpoZWFkLCB1bnNpZ25lZCBjaGFyCiAJCQkJaWYgKHBhdGhzW3BdICYgZmxhZykKIAkJCQkJ Y29udGludWU7CiAJCQkJCisJCQkJaWYgKGZsYWcgPT0gSVBBVEgpCisJCQkJCWlwYXRoX25yKys7 CisJCQkJZWxzZQorCQkJCQl1cGF0aF9ucisrOworCQkJCQogCQkJCXBhdGhzW3BdIHw9IGZsYWc7 CiAJCQl9CiAJCQkKQEAgLTUwOCwxMiArNjYxLDU1IEBAIHN0YXRpYyBpbnQgdHJhdmVyc2VfY2Fj aGVfc2xpY2VfMShzdHJ1Y3QgY2FjaGVfc2xpY2VfaGVhZGVyICpoZWFkLCB1bnNpZ25lZCBjaGFy CiAJCQogCX0KIAkKKwlpZiAoZGF0ZV9zb19mYXIpCisJCSpkYXRlX3NvX2ZhciA9IGRhdGU7CisJ aWYgKHNsb3Bfc29fZmFyKQorCQkqc2xvcF9zb19mYXIgPSBzbG9wOwogCXJldHZhbCA9IDA7CiAJ CisJLyogc3VjY2VzczogYXR0YWNoIHRvIGdpdmVuIGxpc3RzICovCisJaWYgKG15cXAgIT0gJm15 cSkgeworCQkqKnF1ZXVlID0gbXlxOworCQkqcXVldWUgPSBteXFwOworCX0KKwkKKwl3aGlsZSAo KGNvID0gcG9wX2NvbW1pdCgmbXl3b3JrKSkgIT0gMCkgeworCQlpbnNlcnRfYnlfZGF0ZV9jYWNo ZWQoY28sIHdvcmssIGluc2VydF9jYWNoZSwgJmluc2VydF9jYWNoZSk7CisJfQorCQorCS8qIGZy ZWUgYmFja3VwICovCisJd2hpbGUgKHBvcF9jb21taXQoJnVud29yaykpIAorCQk7CisJCiBlbmQ6 CiAJZnJlZShwYXRocyk7CiAJZnJlZShsYXN0X29iamVjdHMpOwogCQorCS8qIGZhaWx1cmU6IHJl c3RvcmUgd29yayB0byBwcmV2aW91cyBjb25kaXRpb24KKwkgKiAoY2FjaGUgY29ycnVwdGlvbiBz aG91bGQgKm5vdCogYmUgZmF0YWwpICovCisJaWYgKHJldHZhbCkgeworCQl3aGlsZSAoKGNvID0g cG9wX2NvbW1pdCgmdW53b3JrKSkgIT0gMCkgeworCQkJcmVzdG9yZV9jb21taXQoY28pOworCQkJ Y28tPm9iamVjdC5mbGFncyB8PSBTRUVOOworCQkJaW5zZXJ0X2J5X2RhdGUoY28sIHdvcmspOwor CQl9CisJCQorCQkvKiBmcmVlIGxpc3RzICovCisJCXdoaWxlICgoY28gPSBwb3BfY29tbWl0KCZt eXEpKSAhPSAwKQorCQkJcmVzdG9yZV9jb21taXQoY28pOworCQkKKwkJd2hpbGUgKChjbyA9IHBv cF9jb21taXQoJm15d29yaykpICE9IDApCisJCQlyZXN0b3JlX2NvbW1pdChjbyk7CisJCQorCQkv KiB0cnVuY2F0ZSBvYmplY3QgYXJyYXkgKi8KKwkJZm9yIChpID0gb3JpZ19vYmpfbnI7IGkgPCBy ZXZzLT5wZW5kaW5nLm5yOyBpKyspIHsKKwkJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHJldnMtPnBl bmRpbmcub2JqZWN0c1tpXS5pdGVtOworCQkJCisJCQlvYmotPmZsYWdzICY9IH5GQUNFX1ZBTFVF OworCQl9CisJCXJldnMtPnBlbmRpbmcubnIgPSBvcmlnX29ial9ucjsKKwl9CisJCiAJcmV0dXJu IHJldHZhbDsKIH0KIApAQCAtNTQyLDE0ICs3MzgsMTUgQEAgc3RhdGljIGludCBnZXRfY2FjaGVf c2xpY2VfaGVhZGVyKHVuc2lnbmVkIGNoYXIgKmNhY2hlX3NoYTEsIHVuc2lnbmVkIGNoYXIgKm1h cCwKIAlyZXR1cm4gMDsKIH0KIAotaW50IHRyYXZlcnNlX2NhY2hlX3NsaWNlKHN0cnVjdCByZXZf Y2FjaGVfaW5mbyAqcmNpLCB1bnNpZ25lZCBjaGFyICpjYWNoZV9zaGExLCAKLQlzdHJ1Y3QgcmV2 X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgCitpbnQgdHJhdmVyc2VfY2FjaGVf c2xpY2Uoc3RydWN0IHJldl9pbmZvICpyZXZzLCAKKwl1bnNpZ25lZCBjaGFyICpjYWNoZV9zaGEx LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIAogCXVuc2lnbmVkIGxvbmcgKmRhdGVfc29fZmFyLCBp bnQgKnNsb3Bfc29fZmFyLCAKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKioqcXVldWUsIHN0cnVjdCBj b21taXRfbGlzdCAqKndvcmspCiB7CiAJaW50IGZkID0gLTEsIHJldHZhbCA9IC0zOwogCXN0cnVj dCBzdGF0IGZpOwogCXN0cnVjdCBjYWNoZV9zbGljZV9oZWFkZXIgaGVhZDsKKwlzdHJ1Y3QgcmV2 X2NhY2hlX2luZm8gKnJjaTsKIAl1bnNpZ25lZCBjaGFyICptYXAgPSBNQVBfRkFJTEVEOwogCQog CS8qIHRoZSBpbmRleCBzaG91bGQndmUgYmVlbiBsb2FkZWQgYWxyZWFkeSB0byBmaW5kIGNhY2hl X3NoYTEsIGJ1dCBpdCdzIGdvb2QgCkBAIC01NTksNiArNzU2LDExIEBAIGludCB0cmF2ZXJzZV9j YWNoZV9zbGljZShzdHJ1Y3QgcmV2X2NhY2hlX2luZm8gKnJjaSwgdW5zaWduZWQgY2hhciAqY2Fj aGVfc2hhMSwKIAlpZiAoIWlkeF9tYXApCiAJCXJldHVybiAtMTsKIAkKKwkvKiBsb2FkIG9wdGlv bnMgKi8KKwlyY2kgPSAmcmV2cy0+cmV2X2NhY2hlX2luZm87CisJc2F2ZV91bmlxdWUgPSByY2kt PnNhdmVfdW5pcXVlOworCWFkZF90b19wZW5kaW5nID0gcmNpLT5hZGRfdG9fcGVuZGluZzsKKwkK IAltZW1zZXQoJmhlYWQsIDAsIHNpemVvZihzdHJ1Y3QgY2FjaGVfc2xpY2VfaGVhZGVyKSk7CiAJ CiAJZmQgPSBvcGVuKGdpdF9wYXRoKCJyZXYtY2FjaGUvJXMiLCBzaGExX3RvX2hleChjYWNoZV9z aGExKSksIE9fUkRPTkxZKTsKQEAgLTU4MSw2ICs3ODMsMTAgQEAgZW5kOgogCWlmIChmZCAhPSAt MSkKIAkJY2xvc2UoZmQpOwogCQorCS8qIHJlbWVtYmVyIHRoaXMhICovCisJaWYgKHJldHZhbCkK KwkJbWFya19iYWRfc2xpY2UoY2FjaGVfc2hhMSk7CisJCiAJcmV0dXJuIHJldHZhbDsKIH0KIApA QCAtNzc1LDYgKzk4MSw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9wYXRocyhzdHJ1Y3QgY29tbWl0 ICpjb21taXQsIHN0cnVjdCBvYmplY3RfZW50cnkgKm9iamVjdCwgc3RyCiAJCWlmIChwdC0+Y29t bWl0ID09IGNvbW1pdCkgewogCQkJaWYgKHBhdGhzW3B0LT5wYXRoXSAhPSBQQVRIX0lOX1VTRSkK IAkJCQlwYXRoc1twdC0+cGF0aF0tLTsKKwkJCQogCQkJcmVtb3ZlX3BhdGhfdHJhY2socHB0LCAw KTsKIAkJCXB0ID0gKnBwdDsKIAkJfSBlbHNlIHsKQEAgLTEwMzQsNiArMTI0MSwyMSBAQCBzdGF0 aWMgaW50IGFkZF91bmlxdWVfb2JqZWN0cyhzdHJ1Y3QgY29tbWl0ICpjb21taXQpCiAJaW50IGks IGosIG5leHQ7CiAJY2hhciBpc19maXJzdCA9IDE7CiAJCisJLyogYnV0IHdhaXQhICBpcyB0aGlz IGl0c2VsZiBmcm9tIGEgc2xpY2U/ICovCisJaWYgKGNvbW1pdC0+dW5pcXVlKSB7CisJCXN0cnVj dCBvYmplY3RfbGlzdCAqb2xpc3Q7CisJCQorCQlvbGlzdCA9IGNvbW1pdC0+dW5pcXVlOworCQlp ID0gMDsKKwkJd2hpbGUgKG9saXN0KSB7CisJCQlhZGRfb2JqZWN0X2VudHJ5KG9saXN0LT5pdGVt LT5zaGExLCAwLCAwLCAwKTsKKwkJCWkrKzsKKwkJCW9saXN0ID0gb2xpc3QtPm5leHQ7CisJCX0K KwkJCisJCXJldHVybiBpOworCX0KKwkKIAkvKiAuLi5ubywgY2FsY3VsYXRlIHVuaXF1ZSBvYmpl Y3RzICovCiAJc3RyYnVmX2luaXQoJm9zLCAwKTsKIAlzdHJidWZfaW5pdCgmb3N0LCAwKTsKQEAg LTEwODcsMTAgKzEzMDksMTMgQEAgc3RhdGljIGludCBhZGRfdW5pcXVlX29iamVjdHMoc3RydWN0 IGNvbW1pdCAqY29tbWl0KQogCWZvciAoaSA9IDA7IGkgPCBvcy5sZW47IGkgKz0gMjApCiAJCWFk ZF9vYmplY3RfZW50cnkoKHVuc2lnbmVkIGNoYXIgKikob3MuYnVmICsgaSksIDAsIDAsIDApOwog CQorCS8qIGxhc3QgYnV0IG5vdCBsZWFzdCwgdGhlIG1haW4gdHJlZSAqLworCWFkZF9vYmplY3Rf ZW50cnkoY29tbWl0LT50cmVlLT5vYmplY3Quc2hhMSwgMCwgMCwgMCk7CisJCiAJc3RyYnVmX3Jl bGVhc2UoJm9zdCk7CiAJc3RyYnVmX3JlbGVhc2UoJm9zKTsKIAkKLQlyZXR1cm4gaSAvIDIwOwor CXJldHVybiBpIC8gMjAgKyAxOwogfQogCiBzdGF0aWMgdm9pZCBpbml0X3JldmNhY2hlX2RpcmVj dG9yeSh2b2lkKQpAQCAtMTEyOCw3ICsxMzUzLDcgQEAgaW50IG1ha2VfY2FjaGVfc2xpY2Uoc3Ry dWN0IHJldl9jYWNoZV9pbmZvICpyY2ksCiAJc3RydWN0IHN0cmJ1ZiBtZXJnZV9wYXRocywgc3Bs aXRfcGF0aHM7CiAJaW50IG9iamVjdF9uciwgdG90YWxfc3osIGZkOwogCWNoYXIgZmlsZVtQQVRI X01BWF0sICpuZXdmaWxlOwotCXN0cnVjdCByZXZfY2FjaGVfaW5mbyBkZWZfcmNpOworCXN0cnVj dCByZXZfY2FjaGVfaW5mbyAqdHJjaSwgZGVmX3JjaTsKIAlnaXRfU0hBX0NUWCBjdHg7CiAJCiAJ aWYgKCFyY2kpIHsKQEAgLTExNzIsNiArMTM5NywxMiBAQCBpbnQgbWFrZV9jYWNoZV9zbGljZShz dHJ1Y3QgcmV2X2NhY2hlX2luZm8gKnJjaSwKIAlyZXZzLT50b3BvX29yZGVyID0gMTsKIAlyZXZz LT5saWZvID0gMTsKIAkKKwkvKiByZS11c2UgaW5mbyBmcm9tIG90aGVyIGNhY2hlcyBpZiBwb3Nz aWJsZSAqLworCXRyY2kgPSAmcmV2cy0+cmV2X2NhY2hlX2luZm87CisJaW5pdF9yY2kodHJjaSk7 CisJdHJjaS0+c2F2ZV91bmlxdWUgPSAxOworCXRyY2ktPmFkZF90b19wZW5kaW5nID0gMDsKKwkK IAlzZXR1cF9yZXZpc2lvbnMoMCwgMCwgcmV2cywgMCk7CiAJaWYgKHByZXBhcmVfcmV2aXNpb25f d2FsayhyZXZzKSkKIAkJZGllKCJkaWVkIHByZXBhcmluZyByZXZpc2lvbiB3YWxrIik7CkBAIC0x MjAzLDE0ICsxNDM0LDggQEAgaW50IG1ha2VfY2FjaGVfc2xpY2Uoc3RydWN0IHJldl9jYWNoZV9p bmZvICpyY2ksCiAJCWFkZF9vYmplY3RfZW50cnkoMCwgJm9iamVjdCwgJm1lcmdlX3BhdGhzLCAm c3BsaXRfcGF0aHMpOwogCQlvYmplY3RfbnIrKzsKIAkJCi0JCWlmIChyY2ktPm9iamVjdHMgJiYg IShjb21taXQtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSkgewotCQkJLyogYWRkIGFsbCB1bmlx dWUgY2hpbGRyZW4gZm9yIHRoaXMgY29tbWl0ICovCi0JCQlhZGRfb2JqZWN0X2VudHJ5KGNvbW1p dC0+dHJlZS0+b2JqZWN0LnNoYTEsIDAsIDAsIDApOwotCQkJb2JqZWN0X25yKys7Ci0JCQkKLQkJ CWlmICghb2JqZWN0LmlzX3N0YXJ0KQotCQkJCW9iamVjdF9uciArPSBhZGRfdW5pcXVlX29iamVj dHMoY29tbWl0KTsKLQkJfQorCQlpZiAocmNpLT5vYmplY3RzICYmICEoY29tbWl0LT5vYmplY3Qu ZmxhZ3MgJiBUUkVFU0FNRSkgJiYgIW9iamVjdC5pc19zdGFydCkKKwkJCW9iamVjdF9uciArPSBh ZGRfdW5pcXVlX29iamVjdHMoY29tbWl0KTsKIAkJCiAJCS8qIHByaW50IGV2ZXJ5IH4xTUIgb3Ig c28gKi8KIAkJaWYgKGJ1ZmZlci5sZW4gPiAxMDAwMDAwKSB7CkBAIC0xNDk3LDcgKzE3MjIsNiBA QCB2b2lkIGVuZHNfZnJvbV9zbGljZXMoc3RydWN0IHJldl9pbmZvICpyZXZzLCB1bnNpZ25lZCBp bnQgZmxhZ3MsIHVuc2lnbmVkIGNoYXIgKgogCQogfQogCi0KIC8qIHRoZSBtb3N0IHdvcmstaW50 ZW5zaXZlIGF0dHJpYnV0ZXMgaW4gdGhlIGNhY2hlIGFyZSB0aGUgdW5pcXVlIG9iamVjdHMgYW5k IHNpemUsIGJvdGggCiAgKiBvZiB3aGljaCBjYW4gYmUgcmUtdXNlZC4gIGFsdGhvdWdoIHBhdGgg c3RydWN0dXJlcyB3aWxsIGJlIGlzb21vcnBoaWMsIHBhdGggZ2VuZXJhdGlvbiBpcyAKICAqIG5v dCBwYXJ0aWN1bGFybHkgZXhwZW5zaXZlLCBhbmQgYXQgYW55IHJhdGUgd2UgbmVlZCB0byByZS1z b3J0IHRoZSBjb21taXRzICovCkBAIC0xNTQzLDcgKzE3NjcsNyBAQCBpbnQgY29hZ3VsYXRlX2Nh Y2hlX3NsaWNlcyhzdHJ1Y3QgcmV2X2NhY2hlX2luZm8gKnJjaSwgc3RydWN0IHJldl9pbmZvICpy ZXZzKQogCQkJCX0KIAkJCX0KIAkJCQotCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KGJhc2UsICZmaWxl cyk7CisJCQlzdHJpbmdfbGlzdF9pbnNlcnQoZGUtPmRfbmFtZSwgJmZpbGVzKTsKIAkJfQogCQkK IAkJY2xvc2VkaXIoZGlyaCk7CkBAIC0xNTY0LDE1ICsxNzg4LDIwIEBAIGludCBjb2FndWxhdGVf Y2FjaGVfc2xpY2VzKHN0cnVjdCByZXZfY2FjaGVfaW5mbyAqcmNpLCBzdHJ1Y3QgcmV2X2luZm8g KnJldnMpCiAJZm9yIChpID0gMDsgaSA8IGZpbGVzLm5yOyBpKyspIHsKIAkJY2hhciAqbmFtZSA9 IGZpbGVzLml0ZW1zW2ldLnN0cmluZzsKIAkJCi0JCWZwcmludGYoc3RkZXJyLCAicmVtb3Zpbmcg JXNcbiIsIG5hbWUpOwotCQl1bmxpbmtfb3Jfd2FybihuYW1lKTsKKwkJLyogaW4gdGhlIG9kZCBj YXNlIG9mIG9ubHkgaGF2aW5nIG9uZSBjYWNoZSBzbGljZSB3ZSBlZmZlY3RpdmVseSBqdXN0IHJl bWFraW5nIHRoZSBpbmRleC4uLiAqLworCQlpZiAoc3RybGVuKG5hbWUpID49IDQwICYmICFzdHJu Y21wKG5hbWUsIHNoYTFfdG9faGV4KGNhY2hlX3NoYTEpLCA0MCkpCisJCQljb250aW51ZTsKKwkJ CisJCXN0cm5jcHkoYmFzZSArIGJhc2VsZW4gKyAxLCBuYW1lLCBzaXplb2YoYmFzZSkgLSBiYXNl bGVuIC0gMSk7CisJCWZwcmludGYoc3RkZXJyLCAicmVtb3ZpbmcgJXNcbiIsIGJhc2UpOworCQl1 bmxpbmtfb3Jfd2FybihiYXNlKTsKIAl9CiAJCiAJc3RyaW5nX2xpc3RfY2xlYXIoJmZpbGVzLCAw KTsKIAkKIAlmZCA9IG9wZW4oZ2l0X3BhdGgoInJldi1jYWNoZS8lcyIsIHNoYTFfdG9faGV4KGNh Y2hlX3NoYTEpKSwgT19SRFdSKTsKIAlpZiAoZmQgPCAwIHx8IGZzdGF0KGZkLCAmZmkpKQotCQlk aWUoIndoYXQ/ICBJIGNhbid0IG9wZW4vcXVlcnkgdGhlIGNhY2hlIEkganVzdCBnZW5lcmF0ZWQi KTsKKwkJZGllKCJ3aGF0PyAgSSBjYW4ndCBvcGVuL3F1ZXJ5IHRoZSBjYWNoZSBJIGp1c3QgZ2Vu ZXJhdGVkXG4gKHNoYTE6ICVzKSIsIHNoYTFfdG9faGV4KGNhY2hlX3NoYTEpKTsKIAkKIAlpZiAo bWFrZV9jYWNoZV9pbmRleChyY2ksIGNhY2hlX3NoYTEsIGZkLCBmaS5zdF9zaXplKSA8IDApCiAJ CWRpZSgiY2FuJ3QgbWFrZSBuZXcgaW5kZXgiKTsKQEAgLTE2MjYsNCArMTg1NSw0IEBAIGludCBy ZWdlbmVyYXRlX2NhY2hlX2luZGV4KHN0cnVjdCByZXZfY2FjaGVfaW5mbyAqcmNpKQogCX0KIAkK IAlyZXR1cm4gMDsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQg YS9yZXZpc2lvbi5jIGIvcmV2aXNpb24uYwppbmRleCBkODVhYmFlLi5lZjZmNGE1IDEwMDY0NAot LS0gYS9yZXZpc2lvbi5jCisrKyBiL3JldmlzaW9uLmMKQEAgLTYzOCw2ICs2MzgsOCBAQCBzdGF0 aWMgaW50IGxpbWl0X2xpc3Qoc3RydWN0IHJldl9pbmZvICpyZXZzKQogCXN0cnVjdCBjb21taXRf bGlzdCAqbGlzdCA9IHJldnMtPmNvbW1pdHM7CiAJc3RydWN0IGNvbW1pdF9saXN0ICpuZXdsaXN0 ID0gTlVMTDsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwID0gJm5ld2xpc3Q7CisJdW5zaWduZWQg Y2hhciAqY2FjaGVfc2hhMTsKKwljaGFyIHVzZWRfY2FjaGU7CiAKIAl3aGlsZSAobGlzdCkgewog CQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmVudHJ5ID0gbGlzdDsKQEAgLTY1MCwyNCArNjUyLDM5IEBA IHN0YXRpYyBpbnQgbGltaXRfbGlzdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCiAKIAkJaWYgKHJl dnMtPm1heF9hZ2UgIT0gLTEgJiYgKGNvbW1pdC0+ZGF0ZSA8IHJldnMtPm1heF9hZ2UpKQogCQkJ b2JqLT5mbGFncyB8PSBVTklOVEVSRVNUSU5HOwotCQlpZiAoYWRkX3BhcmVudHNfdG9fbGlzdChy ZXZzLCBjb21taXQsICZsaXN0LCBOVUxMKSA8IDApCi0JCQlyZXR1cm4gLTE7Ci0JCWlmIChvYmot PmZsYWdzICYgVU5JTlRFUkVTVElORykgewotCQkJbWFya19wYXJlbnRzX3VuaW50ZXJlc3Rpbmco Y29tbWl0KTsKLQkJCWlmIChyZXZzLT5zaG93X2FsbCkKLQkJCQlwID0gJmNvbW1pdF9saXN0X2lu c2VydChjb21taXQsIHApLT5uZXh0OwotCQkJc2xvcCA9IHN0aWxsX2ludGVyZXN0aW5nKGxpc3Qs IGRhdGUsIHNsb3ApOwotCQkJaWYgKHNsb3ApCisJCQorCQkvKiByZXYtY2FjaGUgdG8gdGhlIHJl c2N1ZSEhISAqLworCQl1c2VkX2NhY2hlID0gMDsKKwkJaWYgKCFyZXZzLT5kb250X2NhY2hlX21l ICYmICEob2JqLT5mbGFncyAmIEFEREVEKSkgeworCQkJY2FjaGVfc2hhMSA9IGdldF9jYWNoZV9z bGljZShjb21taXQpOworCQkJaWYgKGNhY2hlX3NoYTEpIHsKKwkJCQlpZiAodHJhdmVyc2VfY2Fj aGVfc2xpY2UocmV2cywgY2FjaGVfc2hhMSwgY29tbWl0LCAmZGF0ZSwgJnNsb3AsICZwLCAmbGlz dCkgPCAwKQorCQkJCQl1c2VkX2NhY2hlID0gMDsKKwkJCQllbHNlCisJCQkJCXVzZWRfY2FjaGUg PSAxOworCQkJfQorCQl9CisJCQorCQlpZiAoIXVzZWRfY2FjaGUpIHsKKwkJCWlmIChhZGRfcGFy ZW50c190b19saXN0KHJldnMsIGNvbW1pdCwgJmxpc3QsIE5VTEwpIDwgMCkKKwkJCQlyZXR1cm4g LTE7CisJCQlpZiAob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKKwkJCQltYXJrX3BhcmVu dHNfdW5pbnRlcmVzdGluZyhjb21taXQpOyAvKiBNRTogd2h5PyAqLworCQkJCWlmIChyZXZzLT5z aG93X2FsbCkKKwkJCQkJcCA9ICZjb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCBwKS0+bmV4dDsK KwkJCQlzbG9wID0gc3RpbGxfaW50ZXJlc3RpbmcobGlzdCwgZGF0ZSwgc2xvcCk7CisJCQkJaWYg KHNsb3AgPiAwKQorCQkJCQljb250aW51ZTsKKwkJCQkvKiBJZiBzaG93aW5nIGFsbCwgYWRkIHRo ZSB3aG9sZSBwZW5kaW5nIGxpc3QgdG8gdGhlIGVuZCAqLworCQkJCWlmIChyZXZzLT5zaG93X2Fs bCkKKwkJCQkJKnAgPSBsaXN0OworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHJldnMtPm1pbl9h Z2UgIT0gLTEgJiYgKGNvbW1pdC0+ZGF0ZSA+IHJldnMtPm1pbl9hZ2UpKQogCQkJCWNvbnRpbnVl OwotCQkJLyogSWYgc2hvd2luZyBhbGwsIGFkZCB0aGUgd2hvbGUgcGVuZGluZyBsaXN0IHRvIHRo ZSBlbmQgKi8KLQkJCWlmIChyZXZzLT5zaG93X2FsbCkKLQkJCQkqcCA9IGxpc3Q7Ci0JCQlicmVh azsKKwkJCWRhdGUgPSBjb21taXQtPmRhdGU7CisJCQlwID0gJmNvbW1pdF9saXN0X2luc2VydChj b21taXQsIHApLT5uZXh0OwogCQl9Ci0JCWlmIChyZXZzLT5taW5fYWdlICE9IC0xICYmIChjb21t aXQtPmRhdGUgPiByZXZzLT5taW5fYWdlKSkKLQkJCWNvbnRpbnVlOwotCQlkYXRlID0gY29tbWl0 LT5kYXRlOwotCQlwID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHApLT5uZXh0OwogCiAJ CXNob3cgPSBzaG93X2Vhcmx5X291dHB1dDsKIAkJaWYgKCFzaG93KQpAQCAtODEzLDYgKzgzMCw4 IEBAIHZvaWQgaW5pdF9yZXZpc2lvbnMoc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBjaGFy ICpwcmVmaXgpCiAJCXJldnMtPmRpZmZvcHQucHJlZml4ID0gcHJlZml4OwogCQlyZXZzLT5kaWZm b3B0LnByZWZpeF9sZW5ndGggPSBzdHJsZW4ocHJlZml4KTsKIAl9CisJCisJaW5pdF9yY2koJnJl dnMtPnJldl9jYWNoZV9pbmZvKTsKIH0KIAogc3RhdGljIHZvaWQgYWRkX3BlbmRpbmdfY29tbWl0 X2xpc3Qoc3RydWN0IHJldl9pbmZvICpyZXZzLApAQCAtMTM3Miw2ICsxMzkxLDExIEBAIGludCBz ZXR1cF9yZXZpc2lvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBzdHJ1Y3QgcmV2X2lu Zm8gKnJldnMsIGNvbnN0IGNoCiAJaWYgKHJldnMtPnJlZmxvZ19pbmZvICYmIHJldnMtPmdyYXBo KQogCQlkaWUoImNhbm5vdCBjb21iaW5lIC0td2Fsay1yZWZsb2dzIHdpdGggLS1ncmFwaCIpOwog CisJLyogbGltaXRzIG9uIGNhY2hpbmcKKwkgKiB0b2RvOiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlv bmFsaXR5ICovCisJaWYgKHJldnMtPnBydW5lIHx8IHJldnMtPmRpZmYpCisJCXJldnMtPmRvbnRf Y2FjaGVfbWUgPSAxOworCiAJcmV0dXJuIGxlZnQ7CiB9CiAKQEAgLTE2NTQsNiArMTY3OCw4IEBA IHN0YXRpYyBpbnQgY29tbWl0X21hdGNoKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IHJl dl9pbmZvICpvcHQpCiB7CiAJaWYgKCFvcHQtPmdyZXBfZmlsdGVyLnBhdHRlcm5fbGlzdCkKIAkJ cmV0dXJuIDE7CisJaWYgKCFjb21taXQtPm9iamVjdC5wYXJzZWQpCisJCXBhcnNlX2NvbW1pdChj b21taXQpOwogCXJldHVybiBncmVwX2J1ZmZlcigmb3B0LT5ncmVwX2ZpbHRlciwKIAkJCSAgIE5V TEwsIC8qIHdlIHNheSBub3RoaW5nLCBub3QgZXZlbiBmaWxlbmFtZSAqLwogCQkJICAgY29tbWl0 LT5idWZmZXIsIHN0cmxlbihjb21taXQtPmJ1ZmZlcikpOwpAQCAtMTcwNiw2ICsxNzMyLDcgQEAg c3RhdGljIHN0cnVjdCBjb21taXQgKmdldF9yZXZpc2lvbl8xKHN0cnVjdCByZXZfaW5mbyAqcmV2 cykKIAlkbyB7CiAJCXN0cnVjdCBjb21taXRfbGlzdCAqZW50cnkgPSByZXZzLT5jb21taXRzOwog CQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBlbnRyeS0+aXRlbTsKKwkJc3RydWN0IG9iamVjdCAq b2JqID0gJmNvbW1pdC0+b2JqZWN0OwogCiAJCXJldnMtPmNvbW1pdHMgPSBlbnRyeS0+bmV4dDsK IAkJZnJlZShlbnRyeSk7CkBAIC0xNzIyLDExICsxNzQ5LDM5IEBAIHN0YXRpYyBzdHJ1Y3QgY29t bWl0ICpnZXRfcmV2aXNpb25fMShzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCiAJCQlpZiAocmV2cy0+ bWF4X2FnZSAhPSAtMSAmJgogCQkJICAgIChjb21taXQtPmRhdGUgPCByZXZzLT5tYXhfYWdlKSkK IAkJCQljb250aW51ZTsKKwkJCQorCQkJaWYgKCFyZXZzLT5kb250X2NhY2hlX21lKSB7CisJCQkJ c3RydWN0IGNvbW1pdF9saXN0ICpxdWV1ZSA9IDAsICoqcXVldWVwID0gJnF1ZXVlOzsKKwkJCQl1 bnNpZ25lZCBjaGFyICpjYWNoZV9zaGExOworCQkJCQorCQkJCWlmIChvYmotPmZsYWdzICYgQURE RUQpCisJCQkJCWdvdG8gc2tpcF9wYXJlbnRpbmc7CisJCQkJCisJCQkJY2FjaGVfc2hhMSA9IGdl dF9jYWNoZV9zbGljZShjb21taXQpOworCQkJCWlmIChjYWNoZV9zaGExKSB7CisJCQkJCWlmICgh dHJhdmVyc2VfY2FjaGVfc2xpY2UocmV2cywgY2FjaGVfc2hhMSwgY29tbWl0LCAwLCAwLCAmcXVl dWVwLCAmcmV2cy0+Y29tbWl0cykpIHsKKwkJCQkJCXN0cnVjdCBjb21taXRfbGlzdCAqd29yayA9 IHJldnMtPmNvbW1pdHM7CisJCQkJCQkKKwkJCQkJCS8qIGF0dGFjaCBxdWV1ZSB0byBlbmQgb2Yg LT5jb21taXRzICovCisJCQkJCQl3aGlsZSAod29yayAmJiB3b3JrLT5uZXh0KQorCQkJCQkJCXdv cmsgPSB3b3JrLT5uZXh0OworCQkJCQkJCisJCQkJCQlpZiAod29yaykKKwkJCQkJCQl3b3JrLT5u ZXh0ID0gcXVldWU7CisJCQkJCQllbHNlCisJCQkJCQkJcmV2cy0+Y29tbWl0cyA9IHF1ZXVlOwor CQkJCQkJCisJCQkJCQlnb3RvIHNraXBfcGFyZW50aW5nOworCQkJCQl9CisJCQkJfQorCQkJfQor CQkJCiAJCQlpZiAoYWRkX3BhcmVudHNfdG9fbGlzdChyZXZzLCBjb21taXQsICZyZXZzLT5jb21t aXRzLCBOVUxMKSA8IDApCiAJCQkJZGllKCJGYWlsZWQgdG8gdHJhdmVyc2UgcGFyZW50cyBvZiBj b21taXQgJXMiLAogCQkJCSAgICBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CiAJ CX0KIAorc2tpcF9wYXJlbnRpbmc6CiAJCXN3aXRjaCAoc2ltcGxpZnlfY29tbWl0KHJldnMsIGNv bW1pdCkpIHsKIAkJY2FzZSBjb21taXRfaWdub3JlOgogCQkJY29udGludWU7CmRpZmYgLS1naXQg YS9yZXZpc2lvbi5oIGIvcmV2aXNpb24uaAppbmRleCA1MjY5NjAyLi5mODU4MDA2IDEwMDY0NAot LS0gYS9yZXZpc2lvbi5oCisrKyBiL3JldmlzaW9uLmgKQEAgLTE5LDYgKzE5LDIwIEBACiBzdHJ1 Y3QgcmV2X2luZm87CiBzdHJ1Y3QgbG9nX2luZm87CiAKK3N0cnVjdCByZXZfY2FjaGVfaW5mbyB7 CisJLyogZ2VuZXJhdGlvbiBmbGFncyAqLworCXVuc2lnbmVkIG9iamVjdHMgOiAxLCAKKwkJbGVn cyA6IDEsIAorCQltYWtlX2luZGV4IDogMTsKKwkKKwkvKiB0cmF2ZXJzYWwgZmxhZ3MgKi8KKwl1 bnNpZ25lZCBzYXZlX3VuaXF1ZSA6IDEsIAorCQlhZGRfdG9fcGVuZGluZyA6IDE7CisJCisJLyog ZnVzZSBvcHRpb25zICovCisJdW5zaWduZWQgaW50IGlnbm9yZV9zaXplOworfTsKKwogc3RydWN0 IHJldl9pbmZvIHsKIAkvKiBTdGFydGluZyBsaXN0ICovCiAJc3RydWN0IGNvbW1pdF9saXN0ICpj b21taXRzOwpAQCAtMTIxLDYgKzEzNSw5IEBAIHN0cnVjdCByZXZfaW5mbyB7CiAJc3RydWN0IHJl ZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvOwogCXN0cnVjdCBkZWNvcmF0aW9uIGNoaWxkcmVu OwogCXN0cnVjdCBkZWNvcmF0aW9uIG1lcmdlX3NpbXBsaWZpY2F0aW9uOworCQorCS8qIGNhY2hp bmcgaW5mbywgdXNlZCBPTkxZIGJ5IHRyYXZlcnNlX2NhY2hlX3NsaWNlICovCisJc3RydWN0IHJl dl9jYWNoZV9pbmZvIHJldl9jYWNoZV9pbmZvOwogfTsKIAogI2RlZmluZSBSRVZfVFJFRV9TQU1F CQkwCkBAIC0xNzcsMjMgKzE5NCw5IEBAIGV4dGVybiB2b2lkIGluc2VydF9ieV9kYXRlX2NhY2hl ZChzdHJ1Y3QgY29tbWl0ICpwLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKipoZWFkLAogCiAvKiByZXYt Y2FjaGUuYyAqLwogCi1zdHJ1Y3QgcmV2X2NhY2hlX2luZm8gewotCS8qIGdlbmVyYXRpb24gZmxh Z3MgKi8KLQl1bnNpZ25lZCBvYmplY3RzIDogMSwgCi0JCWxlZ3MgOiAxLCAKLQkJbWFrZV9pbmRl eCA6IDE7Ci0JCi0JLyogdHJhdmVyc2FsIGZsYWdzICovCi0JdW5zaWduZWQgc2F2ZV91bmlxdWUg OiAxLCAKLQkJYWRkX3RvX3BlbmRpbmcgOiAxOwotCQotCS8qIGZ1c2Ugb3B0aW9ucyAqLwotCXVu c2lnbmVkIGludCBpZ25vcmVfc2l6ZTsKLX07Ci0KIGV4dGVybiB1bnNpZ25lZCBjaGFyICpnZXRf Y2FjaGVfc2xpY2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKLWV4dGVybiBpbnQgdHJhdmVyc2Vf Y2FjaGVfc2xpY2Uoc3RydWN0IHJldl9jYWNoZV9pbmZvICpyY2ksIHVuc2lnbmVkIGNoYXIgKmNh Y2hlX3NoYTEsIAotCXN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0 LCAKK2V4dGVybiBpbnQgdHJhdmVyc2VfY2FjaGVfc2xpY2Uoc3RydWN0IHJldl9pbmZvICpyZXZz LCAKKwl1bnNpZ25lZCBjaGFyICpjYWNoZV9zaGExLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIAog CXVuc2lnbmVkIGxvbmcgKmRhdGVfc29fZmFyLCBpbnQgKnNsb3Bfc29fZmFyLCAKIAlzdHJ1Y3Qg Y29tbWl0X2xpc3QgKioqcXVldWUsIHN0cnVjdCBjb21taXRfbGlzdCAqKndvcmspOwogCmRpZmYg LS1naXQgYS90L3Q2MDE1LXJldi1jYWNoZS1saXN0LnNoIGIvdC90NjAxNS1yZXYtY2FjaGUtbGlz dC5zaAppbmRleCA5Y2Q3MjJhLi5iNzAyY2U5IDEwMDc1NQotLS0gYS90L3Q2MDE1LXJldi1jYWNo ZS1saXN0LnNoCisrKyBiL3QvdDYwMTUtcmV2LWNhY2hlLWxpc3Quc2gKQEAgLTMzLDcgKzMzLDgg QEAgdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCByZXBvJyAnCiAJZWNobyBvbWcgPnNtb2tlL2Jv bmcgJiYgCiAJZ2l0IGFkZCAuICYmIAogCWdpdCBjb21taXQgLW0gIm9tZyIgJiYgCi0JCisKKwlz bGVlcCAyICYmIAogCWdpdCBicmFuY2ggYjQgJiYgCiAJZ2l0IGNoZWNrb3V0IGI0ICYmIAogCWVj aG8gc2hhemFtID5maWxlOCAmJiAKQEAgLTQyLDkgKzQzLDkgQEAgdGVzdF9leHBlY3Rfc3VjY2Vz cyAnaW5pdCByZXBvJyAnCiAJZ2l0IG1lcmdlIC1tICJtZXJnZSBiMiIgYjIgJiYgCiAJCiAJZWNo byBiYW0gPnNtb2tlL3BpcGUgJiYgCi0JZ2l0IGFkZCAuCisJZ2l0IGFkZCAuICYmIAogCWdpdCBj b21taXQgLW0gImJhbSIgJiYgCi0JCisKIAlnaXQgY2hlY2tvdXQgbWFzdGVyICYmIAogCWVjaG8g cG93ID5maWxlNyAmJiAKIAlnaXQgYWRkIC4gJiYgCkBAIC02NywxOCArNjgsMjYgQEAgdGVzdF9l eHBlY3Rfc3VjY2VzcyAnaW5pdCByZXBvJyAnCiAJZ2l0IGFkZCAuICYmIAogCWdpdCBjb21taXQg LW0gImxvbCIgJiYgCiAKKwlzbGVlcCAyICYmIAogCWdpdCBjaGVja291dCBtYXN0ZXIgJiYgCiAJ Z2l0IG1lcmdlIC1tICJ0cmlwbGUgbWVyZ2UiIGIxIGIxMSAmJiAKIAlnaXQgcm0gLXIgZDEgJiYg IAorCXNsZWVwIDIgJiYgCiAJZ2l0IGNvbW1pdCAtYSAtbSAib2ggbm9lcyIKICcKIAotZ2l0LXJl di1saXN0IEhFQUQgLS1ub3QgSEVBRH4zID5wcm9wZXJfY29tbWl0X2xpc3RfbGltaXRlZAotZ2l0 LXJldi1saXN0IEhFQUQgPnByb3Blcl9jb21taXRfbGlzdAotZ2l0LXJldi1saXN0IEhFQUQgLS1v YmplY3RzID5wcm9wZXJfb2JqZWN0X2xpc3QKK21heF9kYXRlPWBnaXQtcmV2LWxpc3QgLS10aW1l c3RhbXAgSEVBRH4xIC0tbWF4LWNvdW50PTEgfCBncmVwIC1lICJeWzAtOV0qIiAtb2AKK21pbl9k YXRlPWBnaXQtcmV2LWxpc3QgLS10aW1lc3RhbXAgYjQgLS1tYXgtY291bnQ9MSB8IGdyZXAgLWUg Il5bMC05XSoiIC1vYAorCitnaXQtcmV2LWxpc3QgLS10b3BvLW9yZGVyIEhFQUQgLS1ub3QgSEVB RH4zID5wcm9wZXJfY29tbWl0X2xpc3RfbGltaXRlZAorZ2l0LXJldi1saXN0IC0tdG9wby1vcmRl ciBIRUFEIC0tbm90IEhFQUR+MiA+cHJvcGVyX2NvbW1pdF9saXN0X2xpbWl0ZWQyCitnaXQtcmV2 LWxpc3QgLS10b3BvLW9yZGVyIEhFQUQgPnByb3Blcl9jb21taXRfbGlzdAorZ2l0LXJldi1saXN0 IC0tb2JqZWN0cyBIRUFEID5wcm9wZXJfb2JqZWN0X2xpc3QKK2dpdC1yZXYtbGlzdCBIRUFEIC0t bWF4LWFnZT0kbWluX2RhdGUgLS1taW4tYWdlPSRtYXhfZGF0ZSA+cHJvcGVyX2xpc3RfZGF0ZV9s aW1pdGVkCisKK2NhY2hlX3NoYTE9YGdpdC1yZXYtY2FjaGUgYWRkIEhFQUQgMj5vdXRwdXQuZXJy YAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIGNhY2hlIHNsaWNlJyAnCi0JZ2l0LXJldi1j YWNoZSBhZGQgSEVBRCAyPm91dHB1dC5lcnIgJiYgCiAJZ3JlcCAiZmluYWwgcmV0dXJuIHZhbHVl OiAwIiBvdXRwdXQuZXJyCiAnCiAKQEAgLTk4LDcgKzEwNyw3IEBAIHRlc3RfZXhwZWN0X3N1Y2Nl c3MgJ3Rlc3QgcmV2LWNhY2hlcyB3YWxrZXIgZGlyZWN0bHkgKHVubGltaXRlZCknICcKIAl0ZXN0 IC16IGAkc2hhMWRpZmYgbGlzdCBwcm9wZXJfY29tbWl0X2xpc3RgCiAnCiAKLXRlc3RfZXhwZWN0 X3N1Y2Nlc3MgJ3Rlc3QgcmV2LWxpc3QgcmV2LWxpc3QgdHJhdmVyc2FsIChsaW1pdGVkKScgJwor dGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCByZXYtbGlzdCB0cmF2ZXJzYWwgKGxpbWl0ZWQpJyAn CiAJZ2l0LXJldi1saXN0IEhFQUQgLS1ub3QgSEVBRH4zID5saXN0ICYmIAogCXRlc3QgLXogYCRz aGExZGlmZiBsaXN0IHByb3Blcl9jb21taXRfbGlzdF9saW1pdGVkYAogJwpAQCAtMTE0LDE1ICsx MjMsMTA2IEBAIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcmV2LWNhY2hlcyB3YWxrZXIgd2l0 aCBvYmplY3RzJyAnCiAJdGVzdCAteiBgJHNoYTFkaWZmIGxpc3QgcHJvcGVyX29iamVjdF9saXN0 YAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHJldi1saXN0IHdpdGggb2JqZWN0cyAo bGltaXRlZCknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcmV2LWxpc3Qgd2l0aCBvYmpl Y3RzICh0b3BvIG9yZGVyKScgJwogCWdpdC1yZXYtbGlzdCAtLXRvcG8tb3JkZXIgLS1vYmplY3Rz IEhFQUQgPmxpc3QgJiYgCiAJdGVzdCAteiBgJHNoYTFkaWZmIGxpc3QgcHJvcGVyX29iamVjdF9s aXN0YAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHJldi1saXN0IHdpdGggb2JqZWN0 cyAodW5saW1pdGVkKScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCByZXYtbGlzdCB3aXRo IG9iamVjdHMgKG5vIG9yZGVyKScgJwogCWdpdC1yZXYtbGlzdCAtLW9iamVjdHMgSEVBRCA+bGlz dCAmJiAKIAl0ZXN0IC16IGAkc2hhMWRpZmYgbGlzdCBwcm9wZXJfb2JqZWN0X2xpc3RgCiAnCiAK KyN2ZXJpZnkgYWdlIGxpbWl0aW5nCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHJldi1saXN0 IGRhdGUgbGltaXRpbmcgKHRvcG8gb3JkZXIpJyAnCisJZ2l0LXJldi1saXN0IC0tdG9wby1vcmRl ciAtLW1heC1hZ2U9JG1pbl9kYXRlIC0tbWluLWFnZT0kbWF4X2RhdGUgSEVBRCA+bGlzdCAmJiAK Kwl0ZXN0IC16IGAkc2hhMWRpZmYgbGlzdCBwcm9wZXJfbGlzdF9kYXRlX2xpbWl0ZWRgCisnCisK K3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcmV2LWxpc3QgZGF0ZSBsaW1pdGluZyAobm8gb3Jk ZXIpJyAnCisJZ2l0LXJldi1saXN0IC0tbWF4LWFnZT0kbWluX2RhdGUgLS1taW4tYWdlPSRtYXhf ZGF0ZSBIRUFEID5saXN0ICYmIAorCXRlc3QgLXogYHNoYTFkaWZmIGxpc3QgcHJvcGVyX2xpc3Rf ZGF0ZV9saW1pdGVkYAorJworCisjY2hlY2sgcGFydGlhbCBjYWNoZSBzbGljZQordGVzdF9leHBl Y3Rfc3VjY2VzcyAnc2F2aW5nIG9sZCBjYWNoZSBhbmQgZ2VuZXJhdGluZyBwYXJ0aWFsIHNsaWNl JyAnCisJY3AgIi5naXQvcmV2LWNhY2hlLyRjYWNoZV9zaGExIiAuZ2l0L3Jldi1jYWNoZS8ub2xk ICYmIAorCXJtICIuZ2l0L3Jldi1jYWNoZS8kY2FjaGVfc2hhMSIgLmdpdC9yZXYtY2FjaGUvaW5k ZXggJiYgCisKKwlnaXQtcmV2LWNhY2hlIGFkZCBIRUFEfjIgMj5vdXRwdXQuZXJyICYmIAorCWdy ZXAgImZpbmFsIHJldHVybiB2YWx1ZTogMCIgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9z dWNjZXNzICdyZXYtbGlzdCB3aXRoIHdob2xseSBpbnRlcmVzdGluZyBwYXJ0aWFsIHNsaWNlJyAn CisJZ2l0LXJldi1saXN0IC0tdG9wby1vcmRlciBIRUFEID5saXN0ICYmCisJdGVzdF9jbXAgbGlz dCBwcm9wZXJfY29tbWl0X2xpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qg d2l0aCBwYXJ0bHkgdW5pbnRlcmVzdGluZyBwYXJ0aWFsIHNsaWNlJyAnCisJZ2l0LXJldi1saXN0 IC0tdG9wby1vcmRlciBIRUFEIC0tbm90IEhFQUR+MyA+bGlzdCAmJiAKKwl0ZXN0X2NtcCBsaXN0 IHByb3Blcl9jb21taXRfbGlzdF9saW1pdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jl di1saXN0IHdpdGggd2hvbGx5IHVuaW50ZXJlc3RpbmcgcGFydGlhbCBzbGljZScgJworCWdpdC1y ZXYtbGlzdCAtLXRvcG8tb3JkZXIgSEVBRCAtLW5vdCBIRUFEfjIgPmxpc3QgJiYgCisJdGVzdF9j bXAgbGlzdCBwcm9wZXJfY29tbWl0X2xpc3RfbGltaXRlZDIKKycKKworI3RyeSBvdXQgaW5kZXgg Z2VuZXJhdGlvbiBhbmQgZnVzZSAobm90ZSB0aGF0IC0tYWxsID09IEhFQUQgaW4gdGhpcyBjYXNl KQorI3Byb2JhYmx5IHNob3VsZCBtYWtlIGEgdGVzdCBmb3IgdGhhdCB0b28uLi4KK3Rlc3RfZXhw ZWN0X3N1Y2Nlc3MgJ21ha2UgZnJlc2ggc2xpY2UnICcKKwlnaXQtcmV2LWNhY2hlIGFkZCAtLWFs bCAtLWZyZXNoIDI+b3V0cHV0LmVyciAmJiAKKwlncmVwICJmaW5hbCByZXR1cm4gdmFsdWU6IDAi IG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZHVhbCBzbGljZXMn ICcKKwlnaXQtcmV2LWxpc3QgLS10b3BvLW9yZGVyIEhFQUR+MiBIRUFEID5saXN0ICYmIAorCXRl c3RfY21wIGxpc3QgcHJvcGVyX2NvbW1pdF9saXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mg J3JlZ2VuZXJhdGUgaW5kZXgnICcKKwlybSAuZ2l0L3Jldi1jYWNoZS9pbmRleCAmJiAKKwlnaXQt cmV2LWNhY2hlIGluZGV4IDI+b3V0cHV0LmVyciAmJiAKKwlncmVwICJmaW5hbCByZXR1cm4gdmFs dWU6IDAiIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnVzZSBzbGljZXMn ICcKKwl0ZXN0IC1lIC5naXQvcmV2LWNhY2hlLy5vbGQgJiYgCisJZ2l0LXJldi1jYWNoZSBmdXNl IDI+b3V0cHV0LmVyciAmJiAKKwlncmVwICJmaW5hbCByZXR1cm4gdmFsdWU6IDAiIG91dHB1dC5l cnIgJiYgCisJdGVzdF9jbXAgLmdpdC9yZXYtY2FjaGUvJGNhY2hlX3NoYTEgLmdpdC9yZXYtY2Fj aGUvLm9sZAorJworCisjbWFrZSBzdXJlIHdlIGNhbiBzbW9vdGhseSBoYW5kbGUgY29ycnVwdGVk IGNhY2hlcwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycnVwdCBzbGljZScgJworCWVjaG8gYmxh ID4uZ2l0L3Jldi1jYWNoZS8kY2FjaGVfc2hhMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0 ZXN0IHJldi1saXN0IHRyYXZlcnNhbCAobGltaXRlZCkgKGNvcnJ1cHQgc2xpY2UpJyAnCisJZ2l0 LXJldi1saXN0IEhFQUQgLS1ub3QgSEVBRH4zID5saXN0ICYmIAorCXRlc3QgLXogYCRzaGExZGlm ZiBsaXN0IHByb3Blcl9jb21taXRfbGlzdF9saW1pdGVkYAorJworCit0ZXN0X2V4cGVjdF9zdWNj ZXNzICd0ZXN0IHJldi1saXN0IHRyYXZlcnNhbCAodW5saW1pdGVkKSAoY29ycnVwdCBzbGljZSkn ICcKKwlnaXQtcmV2LWxpc3QgSEVBRCA+bGlzdCAmJiAKKwl0ZXN0IC16IGAkc2hhMWRpZmYgbGlz dCBwcm9wZXJfY29tbWl0X2xpc3RgCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJ1cHQg aW5kZXgnICcKKwllY2hvIGJsdSA+LmdpdC9yZXYtY2FjaGUvaW5kZXgKKycKKwordGVzdF9leHBl Y3Rfc3VjY2VzcyAndGVzdCByZXYtbGlzdCB0cmF2ZXJzYWwgKGxpbWl0ZWQpIChjb3JydXB0IGlu ZGV4KScgJworCWdpdC1yZXYtbGlzdCBIRUFEIC0tbm90IEhFQUR+MyA+bGlzdCAmJiAKKwl0ZXN0 IC16IGAkc2hhMWRpZmYgbGlzdCBwcm9wZXJfY29tbWl0X2xpc3RfbGltaXRlZGAKKycKKwordGVz dF9leHBlY3Rfc3VjY2VzcyAndGVzdCByZXYtbGlzdCB0cmF2ZXJzYWwgKHVubGltaXRlZCkgKGNv cnJ1cHQgaW5kZXgpJyAnCisJZ2l0LXJldi1saXN0IEhFQUQgPmxpc3QgJiYgCisJdGVzdCAteiBg JHNoYTFkaWZmIGxpc3QgcHJvcGVyX2NvbW1pdF9saXN0YAorJworCisjdG9kbzogdGVzdCAtLWln bm9yZS1zaXplIGluIGZ1c2UKKwogdGVzdF9kb25lCiAKLS0gCnRnOiAoZGU5YTQ2Ni4uKSB0L3Jl dmNhY2hlL2ludGVncmF0aW9uIChkZXBlbmRzIG9uOiB0L3JldmNhY2hlL21pc2MpCg== --0016368e21ccbc1cfd046f2bc68f Content-Type: application/octet-stream; name="patch_tweak.diff" Content-Disposition: attachment; filename="patch_tweak.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fxduizn31 RnJvbTogTmljayBFZGVsZW4gPHNpcm5vdEBnbWFpbC5jb20+ClN1YmplY3Q6IFtQQVRDSF0gdC9w YWNrL3R3ZWFrCgpidWlsdGluLXBhY2stb2JqZWN0cyBjaGVja3Mvd3JpdGVzIHBhY2tlZCBvYmpl Y3RzIGJ5IG1hcHBpbmcgYSBwb3J0aW9uIG9mIHRoZSBwYWNrLCB0aGVuIGVpdGhlciB2ZXJpZnlp bmcgYW4gb2JqZWN0J3MgaW50ZWdyaXR5IG9yIGNvcHlpbmcgdGhlIGRhdGEuICBjdXJyZW50bHks IHVzaW5nIHVzZV9wYWNrKCkgaXQgbWFwcyBvbmx5IGEgc21hbGwgcG9ydGlvbiAoYSAnd2luZG93 JykgYXQgYSB0aW1lLCBhbmQgY29uc2VxdWVudGx5IGNhbGxzIG1tYXAoKSBtYW55IHRpbWVzLiAg YXMgbW9zdCBwYWNrcyB3aWxsIGNvbnRhaW4gbWFueSBjb25zZWN1dGl2ZSBvYmplY3RzLCBtbWFw KClpbmcgbGFyZ2VyIHBvcnRpb25zIGZld2VyIGNhbiBub3RpY2VhYmx5IHNwZWVkIHVwIHBhY2tp bmcuICB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBwYXRjaCB0byBpbXBsZW1lbnQgc2FpZCBpZGVh LgoKU2lnbmVkLW9mZi1ieTogTmljayBFZGVsZW4gPHNpcm5vdEBnbWFpbC5jb20+CgotLS0KIGJ1 aWx0aW4tcGFjay1vYmplY3RzLmMgfCAgIDI3ICsrKysrKysrKysrKysrKysrKysrKysrKysrLQog Y2FjaGUuaCAgICAgICAgICAgICAgICB8ICAgIDEgKwogc2hhMV9maWxlLmMgICAgICAgICAgICB8 ICAgIDIgKy0KIDMgZmlsZXMgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9idWlsdGluLXBhY2stb2JqZWN0cy5jIGIvYnVpbHRpbi1wYWNrLW9i amVjdHMuYwppbmRleCA5NDFjYzJkLi5jNjhjNmI4IDEwMDY0NAotLS0gYS9idWlsdGluLXBhY2st b2JqZWN0cy5jCisrKyBiL2J1aWx0aW4tcGFjay1vYmplY3RzLmMKQEAgLTIxMCw2ICsyMTAsMjgg QEAgc3RhdGljIGludCBjaGVja19wYWNrX2luZmxhdGUoc3RydWN0IHBhY2tlZF9naXQgKnAsCiAJ CXN0cmVhbS50b3RhbF9pbiA9PSBsZW4pID8gMCA6IC0xOwogfQogCitzdGF0aWMgdm9pZCBtYWtl X2xhcmdlX3BhY2tfbWFwKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBvZnMsIHN0cnVjdCBw YWNrX3dpbmRvdyAqKndfY3VycykKK3sKKwlzdHJ1Y3QgcGFja193aW5kb3cgKnc7CisJCisJZm9y ICh3ID0gcC0+d2luZG93czsgdzsgdyA9IHctPm5leHQpIHsKKwkJaWYgKGluX3dpbmRvdyh3LCBv ZnMpKQorCQkJYnJlYWs7CisJfQorCisJLyogYWRtaXR0ZWRseSB0aGlzIGlzIGEgYml0IG9mIGEg aGFjaywgIGJ1dCB3ZSBuZWVkIHRvIGJlIGFibGUKKwkgKiB0byByZXVzZSB0aGUgbWFwcGluZyBw ZXIgcGFja2ZpbGUgKi8KKwlpZiAoIXcpIHsKKwkJc2l6ZV90IHRlbXBfd2luZG93X3NpemUgPSBw YWNrZWRfZ2l0X3dpbmRvd19zaXplOworCQlwYWNrZWRfZ2l0X3dpbmRvd19zaXplID0gODAwMDAw MDA7IC8qIGEgbW9yZSBpbnRlbGxpZ2VudCBudW1iZXIgbWlnaHQgYmUgYmV0dGVyLi4uICovCisK KwkJdXNlX3BhY2socCwgJncsIG9mcywgMCk7CisJCXBhY2tlZF9naXRfd2luZG93X3NpemUgPSB0 ZW1wX3dpbmRvd19zaXplOworCX0KKwkKKwkqd19jdXJzID0gdzsKK30KKwogc3RhdGljIHZvaWQg Y29weV9wYWNrX2RhdGEoc3RydWN0IHNoYTFmaWxlICpmLAogCQlzdHJ1Y3QgcGFja2VkX2dpdCAq cCwKIAkJc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLApAQCAtNDIyLDYgKzQ0NCw4IEBAIHN0 YXRpYyB1bnNpZ25lZCBsb25nIHdyaXRlX29iamVjdChzdHJ1Y3Qgc2hhMWZpbGUgKmYsCiAJCQl9 CiAJCQlzaGExd3JpdGUoZiwgaGVhZGVyLCBoZHJsZW4pOwogCQl9CisKKwkJbWFrZV9sYXJnZV9w YWNrX21hcChwLCBvZmZzZXQsICZ3X2N1cnMpOwogCQljb3B5X3BhY2tfZGF0YShmLCBwLCAmd19j dXJzLCBvZmZzZXQsIGRhdGFsZW4pOwogCQl1bnVzZV9wYWNrKCZ3X2N1cnMpOwogCQlyZXVzZWQr KzsKQEAgLTEwMTYsNyArMTA0MCw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrX29iamVjdChzdHJ1Y3Qg b2JqZWN0X2VudHJ5ICplbnRyeSkKIHsKIAlpZiAoZW50cnktPmluX3BhY2spIHsKIAkJc3RydWN0 IHBhY2tlZF9naXQgKnAgPSBlbnRyeS0+aW5fcGFjazsKLQkJc3RydWN0IHBhY2tfd2luZG93ICp3 X2N1cnMgPSBOVUxMOworCQlzdHJ1Y3QgcGFja193aW5kb3cgKndfY3VyczsKIAkJY29uc3QgdW5z aWduZWQgY2hhciAqYmFzZV9yZWYgPSBOVUxMOwogCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpiYXNl X2VudHJ5OwogCQl1bnNpZ25lZCBsb25nIHVzZWQsIHVzZWRfMDsKQEAgLTEwMjQsNiArMTA0OCw3 IEBAIHN0YXRpYyB2b2lkIGNoZWNrX29iamVjdChzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSkK IAkJb2ZmX3Qgb2ZzOwogCQl1bnNpZ25lZCBjaGFyICpidWYsIGM7CiAKKwkJbWFrZV9sYXJnZV9w YWNrX21hcChwLCBlbnRyeS0+aW5fcGFja19vZmZzZXQsICZ3X2N1cnMpOwogCQlidWYgPSB1c2Vf cGFjayhwLCAmd19jdXJzLCBlbnRyeS0+aW5fcGFja19vZmZzZXQsICZhdmFpbCk7CiAKIAkJLyoK ZGlmZiAtLWdpdCBhL2NhY2hlLmggYi9jYWNoZS5oCmluZGV4IDg3MWM5ODQuLmJiZGZmOWEgMTAw NjQ0Ci0tLSBhL2NhY2hlLmgKKysrIGIvY2FjaGUuaApAQCAtODQ2LDYgKzg0Niw3IEBAIGV4dGVy biB2b2lkIGluc3RhbGxfcGFja2VkX2dpdChzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjayk7CiBleHRl cm4gc3RydWN0IHBhY2tlZF9naXQgKmZpbmRfc2hhMV9wYWNrKGNvbnN0IHVuc2lnbmVkIGNoYXIg KnNoYTEsCiAJCQkJCSBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFja3MpOwogCitleHRlcm4gaW50IGlu X3dpbmRvdyhzdHJ1Y3QgcGFja193aW5kb3cgKiwgb2ZmX3QpOwogZXh0ZXJuIHZvaWQgcGFja19y ZXBvcnQodm9pZCk7CiBleHRlcm4gaW50IG9wZW5fcGFja19pbmRleChzdHJ1Y3QgcGFja2VkX2dp dCAqKTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyICp1c2VfcGFjayhzdHJ1Y3QgcGFja2VkX2dpdCAq LCBzdHJ1Y3QgcGFja193aW5kb3cgKiosIG9mZl90LCB1bnNpZ25lZCBpbnQgKik7CmRpZmYgLS1n aXQgYS9zaGExX2ZpbGUuYyBiL3NoYTFfZmlsZS5jCmluZGV4IDhmNWZlNjIuLjJkMTA1ZWIgMTAw NjQ0Ci0tLSBhL3NoYTFfZmlsZS5jCisrKyBiL3NoYTFfZmlsZS5jCkBAIC03ODAsNyArNzgwLDcg QEAgc3RhdGljIGludCBvcGVuX3BhY2tlZF9naXQoc3RydWN0IHBhY2tlZF9naXQgKnApCiAJcmV0 dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IGluX3dpbmRvdyhzdHJ1Y3QgcGFja193aW5kb3cgKndp biwgb2ZmX3Qgb2Zmc2V0KQoraW50IGluX3dpbmRvdyhzdHJ1Y3QgcGFja193aW5kb3cgKndpbiwg b2ZmX3Qgb2Zmc2V0KQogewogCS8qIFdlIG11c3QgcHJvbWlzZSBhdCBsZWFzdCAyMCBieXRlcyAo b25lIGhhc2gpIGFmdGVyIHRoZQogCSAqIG9mZnNldCBpcyBhdmFpbGFibGUgZnJvbSB0aGlzIHdp bmRvdywgb3RoZXJ3aXNlIHRoZSBvZmZzZXQKLS0gCnRnOiAoNjc3Y2IyMS4uKSB0L3BhY2svdHdl YWsgKGRlcGVuZHMgb246IHQvcmV2Y2FjaGUvaW50ZWdyYXRpb24pCg== --0016368e21ccbc1cfd046f2bc68f--