From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Nick Edelen" Subject: [RFC/PATCH 4/4] rev-cache: tentative integration into rev-list + tests Date: Fri, 03 Jul 2009 16:13:49 +0100 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=----------alP1HPk5fAN0IoTXiDdGJb 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 Fri Jul 03 17:14:30 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 1MMkSz-0005qe-Dk for gcvg-git-2@gmane.org; Fri, 03 Jul 2009 17:14:22 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755602AbZGCPOG (ORCPT ); Fri, 3 Jul 2009 11:14:06 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755752AbZGCPOD (ORCPT ); Fri, 3 Jul 2009 11:14:03 -0400 Received: from mail-ew0-f215.google.com ([209.85.219.215]:58426 "EHLO mail-ew0-f215.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755724AbZGCPOA (ORCPT ); Fri, 3 Jul 2009 11:14:00 -0400 Received: by mail-ew0-f215.google.com with SMTP id 11so1142634ewy.37 for ; Fri, 03 Jul 2009 08:14:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:date:to:subject:from:cc :content-type:mime-version:message-id:user-agent; bh=qN3JWQfH1M2CSzw814fL5NVr9WWLxh4BvF/1X53Hfus=; b=VbPSphCTYsgc/PiFkxxoN3n5/ywgbVoj+FMOx8hB206HbtopVh9Xol5nm+evo16V4Z buWljN7Ngudp3V4+wNd8OnpwaI4QBGW7nJ4RnLi/xuG+M8h7PuHXA53MUSsLjWqR9F75 8hIs2qsYGO4fhspu0msBM/E7zvGS17qSfINYM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:to:subject:from:cc:content-type:mime-version:message-id :user-agent; b=dYO/oCeaX+XloGw9T8gKC0CbcTFryVQtibcyYvXdTlh8xFu1R9IO9nhysg2FmsdPod ekohzLUhxpbb0lPJSPDF6ieMLkMSJ7f0x0EHm+RHhLJXssTzH6BTRTEAar3YrlBQIOdd s49QyYN0zAwGGvOglRO9gmtQ+m65MYHeJUWJo= Received: by 10.210.125.13 with SMTP id x13mr1104209ebc.43.1246634043708; Fri, 03 Jul 2009 08:14:03 -0700 (PDT) Received: from sirnot (resnet-nat-217.ucs.ed.ac.uk [194.81.254.217]) by mx.google.com with ESMTPS id 5sm6215329eyf.2.2009.07.03.08.14.02 (version=TLSv1/SSLv3 cipher=RC4-MD5); Fri, 03 Jul 2009 08:14:03 -0700 (PDT) User-Agent: Opera Mail/9.63 (Win32) Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: ------------alP1HPk5fAN0IoTXiDdGJb Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 7bit This patch introduces a tentative step towards integrating rev-cache into the internal revision walker. Cache traversal is added to both limited and unlimited revision walks, and FACE_VALUEd objects are handled in list-objects. Furthermore the unique object_list field is added to commit objects, to allow runtime association with a commit's cached 'unique' object list. The traversal mechanism in rev-cache is updated to reflect the limiting methods used in rev-list. Tests for coagulation and index generation are included, in addition to several verifying the correctness of integration. Signed-off-by: Nick Edelen --- builtin-rev-cache.c | 44 +++++++- commit.c | 2 +- commit.h | 1 + list-objects.c | 19 +++- rev-cache.c | 299 +++++++++++++++++++++++++++++++++++++++------ revision.c | 91 +++++++++++--- t/t6015-rev-cache-list.sh | 120 +++++++++++++++++-- 7 files changed, 505 insertions(+), 71 deletions(-) ------------alP1HPk5fAN0IoTXiDdGJb Content-Disposition: attachment; filename=patch_int.diff Content-Type: application/octet-stream; name=patch_int.diff Content-Transfer-Encoding: Base64 VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgdGVudGF0aXZlIHN0ZXAgdG93YXJkcyBp bnRlZ3JhdGluZyByZXYtY2FjaGUgaW50byB0aGUgaW50ZXJuYWwgcmV2aXNpb24g d2Fsa2VyLiAgQ2FjaGUgdHJhdmVyc2FsIGlzIGFkZGVkIHRvIGJvdGggbGltaXRl ZCBhbmQgdW5saW1pdGVkIHJldmlzaW9uIHdhbGtzLCBhbmQgRkFDRV9WQUxVRWQg b2JqZWN0cyBhcmUgaGFuZGxlZCBpbiBsaXN0LW9iamVjdHMuICBGdXJ0aGVybW9y ZSB0aGUgdW5pcXVlIG9iamVjdF9saXN0IGZpZWxkIGlzIGFkZGVkIHRvIGNvbW1p dCBvYmplY3RzLCB0byBhbGxvdyBydW50aW1lIGFzc29jaWF0aW9uIHdpdGggYSBj b21taXQncyBjYWNoZWQgJ3VuaXF1ZScgb2JqZWN0IGxpc3QuCgpUaGUgdHJhdmVy c2FsIG1lY2hhbmlzbSBpbiByZXYtY2FjaGUgaXMgdXBkYXRlZCB0byByZWZsZWN0 IHRoZSBsaW1pdGluZyBtZXRob2RzIHVzZWQgaW4gcmV2LWxpc3QuICBUZXN0cyBm b3IgY29hZ3VsYXRpb24gYW5kIGluZGV4IGdlbmVyYXRpb24gYXJlIGluY2x1ZGVk LCBpbiBhZGRpdGlvbiB0byBzZXZlcmFsIHZlcmlmeWluZyB0aGUgY29ycmVjdG5l c3Mgb2YgaW50ZWdyYXRpb24uCgpTaWduZWQtb2ZmLWJ5OiBOaWNrIEVkZWxlbiA8 c2lybm90QGdtYWlsLmNvbT4KCi0tLQogYnVpbHRpbi1yZXYtY2FjaGUuYyAgICAg ICB8ICAgNDQgKysrKysrKy0KIGNvbW1pdC5jICAgICAgICAgICAgICAgICAgfCAg ICAyICstCiBjb21taXQuaCAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBsaXN0 LW9iamVjdHMuYyAgICAgICAgICAgIHwgICAxOSArKystCiByZXYtY2FjaGUuYyAg ICAgICAgICAgICAgIHwgIDI5OSArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLS0tLS0KIHJldmlzaW9uLmMgICAgICAgICAgICAgICAgfCAg IDkxICsrKysrKysrKysrLS0tCiB0L3Q2MDE1LXJldi1jYWNoZS1saXN0LnNoIHwg IDEyMCArKysrKysrKysrKysrKysrKy0tCiA3IGZpbGVzIGNoYW5nZWQsIDUwNSBp bnNlcnRpb25zKCspLCA3MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9idWls dGluLXJldi1jYWNoZS5jIGIvYnVpbHRpbi1yZXYtY2FjaGUuYwppbmRleCAzODA4 MThmLi5jMGMwZDk3IDEwMDc1NQotLS0gYS9idWlsdGluLXJldi1jYWNoZS5jCisr KyBiL2J1aWx0aW4tcmV2LWNhY2hlLmMKQEAgLTMsNiArMyw3IEBACiAjaW5jbHVk ZSAiY29tbWl0LmgiCiAjaW5jbHVkZSAiZGlmZi5oIgogI2luY2x1ZGUgInJldmlz aW9uLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCiAKICNkZWZpbmUgREVG QVVMVF9JR05PUkVfU0xJQ0VfU0laRQkJNTAwMDAwMCAvKiBpbiBieXRlcyAqLwog CkBAIC02OSwxMCArNzAsNDYgQEAgc3RhdGljIGludCBoYW5kbGVfYWRkKGludCBh cmdjLCBjb25zdCBjaGFyICphcmd2W10pIC8qIGFyZ3MgYmV5b25kIHRoaXMgY29t bWFuZAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzaG93X2NvbW1pdChz dHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCit7CisJcHJpbnRmKCIl c1xuIiwgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworfQorCitz dGF0aWMgdm9pZCBzaG93X29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0 IHN0cnVjdCBuYW1lX3BhdGggKnBhdGgsIGNvbnN0IGNoYXIgKmxhc3QpCit7CisJ cHJpbnRmKCIlc1xuIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7Cit9CisKK3N0 YXRpYyBpbnQgdGVzdF9yZXZfbGlzdChpbnQgYXJnYywgY29uc3QgY2hhciAqYXJn dltdKQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXVuc2lnbmVkIGludCBm bGFncyA9IDA7CisJaW50IGk7CisJCisJaW5pdF9yZXZpc2lvbnMoJnJldnMsIDAp OworCQorCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKCFzdHJj bXAoYXJndltpXSwgIi0tbm90IikpCisJCQlmbGFncyBePSBVTklOVEVSRVNUSU5H OworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLW9iamVjdHMiKSkKKwkJ CXJldnMudHJlZV9vYmplY3RzID0gcmV2cy5ibG9iX29iamVjdHMgPSAxOworCQll bHNlCisJCQloYW5kbGVfcmV2aXNpb25fYXJnKGFyZ3ZbaV0sICZyZXZzLCBmbGFn cywgMSk7CisJfQorCQorCXNldHVwX3JldmlzaW9ucygwLCAwLCAmcmV2cywgMCk7 CisJcHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKTsKKwkKKwl0cmF2ZXJzZV9j b21taXRfbGlzdCgmcmV2cywgc2hvd19jb21taXQsIHNob3dfb2JqZWN0LCAwKTsK KwkKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBoYW5kbGVfd2FsayhpbnQg YXJnYywgY29uc3QgY2hhciAqYXJndltdKQogewogCXN0cnVjdCBjb21taXQgKmNv bW1pdDsKIAlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3QgcmV2X2NhY2hl X2luZm8gcmNpOwogCXN0cnVjdCBjb21taXRfbGlzdCAqcXVldWUsICp3b3JrLCAq KnFwOwogCXVuc2lnbmVkIGNoYXIgKnNoYTFwLCAqc2hhMXB0OwogCXVuc2lnbmVk IGxvbmcgZGF0ZSA9IDA7CkBAIC04MCw2ICsxMTcsNyBAQCBzdGF0aWMgaW50IGhh bmRsZV93YWxrKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCiAJaW50IHJl dHZhbCwgc2xvcCA9IDUsIGk7CiAJCiAJaW5pdF9yZXZpc2lvbnMoJnJldnMsIDAp OworCWluaXRfcmNpKCZyY2kpOwogCQogCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBp KyspIHsKIAkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tbm90IikpCkBAIC0xMTMs NyArMTUxLDcgQEAgc3RhdGljIGludCBoYW5kbGVfd2FsayhpbnQgYXJnYywgY29u c3QgY2hhciAqYXJndltdKQogCXF1ZXVlID0gMDsKIAlxcCA9ICZxdWV1ZTsKIAlj b21taXQgPSBwb3BfY29tbWl0KCZ3b3JrKTsKLQlyZXR2YWwgPSB0cmF2ZXJzZV9j YWNoZV9zbGljZSgwLCBzaGExcCwgJnJldnMsIGNvbW1pdCwgJmRhdGUsICZzbG9w LCAmcXAsICZ3b3JrKTsKKwlyZXR2YWwgPSB0cmF2ZXJzZV9jYWNoZV9zbGljZSgm cmNpLCBzaGExcCwgJnJldnMsIGNvbW1pdCwgJmRhdGUsICZzbG9wLCAmcXAsICZ3 b3JrKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKIAkKQEAg LTE4MSw3ICsyMTksNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9mdXNlKGludCBhcmdj LCBjb25zdCBjaGFyICphcmd2W10pCiAKIHN0YXRpYyBpbnQgaGFuZGxlX2luZGV4 KGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCiB7Ci0JcmV0dXJuIHJlZ2Vu ZXJhdGVfY2FjaGVfaW5kZXgoKTsKKwlyZXR1cm4gcmVnZW5lcmF0ZV9jYWNoZV9p bmRleCgwKTsKIH0KIAogc3RhdGljIGludCBoYW5kbGVfaGVscCh2b2lkKQpAQCAt MjM1LDYgKzI3Myw4IEBAIGludCBjbWRfcmV2X2NhY2hlKGludCBhcmdjLCBjb25z dCBjaGFyICphcmd2W10sIGNvbnN0IGNoYXIgKnByZWZpeCkKIAkJciA9IGhhbmRs ZV93YWxrKGFyZ2MsIGFyZ3YpOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiaW5k ZXgiKSkKIAkJciA9IGhhbmRsZV9pbmRleChhcmdjLCBhcmd2KTsKKwllbHNlIGlm ICghc3RyY21wKGFyZywgInRlc3QiKSkKKwkJciA9IHRlc3RfcmV2X2xpc3QoYXJn YywgYXJndik7CiAJZWxzZQogCQlyZXR1cm4gaGFuZGxlX2hlbHAoKTsKIAkKZGlm ZiAtLWdpdCBhL2NvbW1pdC5jIGIvY29tbWl0LmMKaW5kZXggZDk3NzhiYS4uOTI0 NTliZCAxMDA2NDQKLS0tIGEvY29tbWl0LmMKKysrIGIvY29tbWl0LmMKQEAgLTI1 Niw3ICsyNTYsNyBAQCBpbnQgcGFyc2VfY29tbWl0X2J1ZmZlcihzdHJ1Y3QgY29t bWl0ICppdGVtLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIAkJ CSAgICAgc2hhMV90b19oZXgoaXRlbS0+b2JqZWN0LnNoYTEpKTsKIAlpdGVtLT50 cmVlID0gbG9va3VwX3RyZWUocGFyZW50KTsKIAlidWZwdHIgKz0gNDY7IC8qICJ0 cmVlICIgKyAiaGV4IHNoYTEiICsgIlxuIiAqLwotIAlwcHRyID0gJml0ZW0tPnBh cmVudHM7CisJcHB0ciA9ICZpdGVtLT5wYXJlbnRzOwogCXdoaWxlIChwb3BfY29t bWl0KHBwdHIpKQogCQk7IC8qIGNsZWFyIGFueXRoaW5nIGZyb20gY2FjaGUgKi8K IApkaWZmIC0tZ2l0IGEvY29tbWl0LmggYi9jb21taXQuaAppbmRleCAwNTI5ZmNm Li43YzUwYTdmIDEwMDY0NAotLS0gYS9jb21taXQuaAorKysgYi9jb21taXQuaApA QCAtMjAsNiArMjAsNyBAQCBzdHJ1Y3QgY29tbWl0IHsKIAlzdHJ1Y3QgdHJlZSAq dHJlZTsKIAljaGFyICpidWZmZXI7CiAJdW5zaWduZWQgbG9uZyBzaXplOworCXN0 cnVjdCBvYmplY3RfbGlzdCAqdW5pcXVlOwogfTsKIAogZXh0ZXJuIGludCBzYXZl X2NvbW1pdF9idWZmZXI7CmRpZmYgLS1naXQgYS9saXN0LW9iamVjdHMuYyBiL2xp c3Qtb2JqZWN0cy5jCmluZGV4IDg5NTM1NDguLjJiNGJlY2IgMTAwNjQ0Ci0tLSBh L2xpc3Qtb2JqZWN0cy5jCisrKyBiL2xpc3Qtb2JqZWN0cy5jCkBAIC03OCw2ICs3 OCwxMCBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3RyZWUoc3RydWN0IHJldl9pbmZv ICpyZXZzLAogCQlkaWUoImJhZCB0cmVlIG9iamVjdCAlcyIsIHNoYTFfdG9faGV4 KG9iai0+c2hhMSkpOwogCW9iai0+ZmxhZ3MgfD0gU0VFTjsKIAlzaG93KG9iaiwg cGF0aCwgbmFtZSk7CisKKwlpZiAob2JqLT5mbGFncyAmIEZBQ0VfVkFMVUUpCisJ CXJldHVybjsKKwogCW1lLnVwID0gcGF0aDsKIAltZS5lbGVtID0gbmFtZTsKIAlt ZS5lbGVtX2xlbiA9IHN0cmxlbihuYW1lKTsKQEAgLTg1LDExICs4OSwxNiBAQCBz dGF0aWMgdm9pZCBwcm9jZXNzX3RyZWUoc3RydWN0IHJldl9pbmZvICpyZXZzLAog CWluaXRfdHJlZV9kZXNjKCZkZXNjLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUp OwogCiAJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpIHsKLQkJaWYg KFNfSVNESVIoZW50cnkubW9kZSkpCisJCWlmIChTX0lTRElSKGVudHJ5Lm1vZGUp KSB7CisJCQlzdHJ1Y3QgdHJlZSAqc3VidHJlZSA9IGxvb2t1cF90cmVlKGVudHJ5 LnNoYTEpOworCQkJaWYgKCFzdWJ0cmVlKQorCQkJCWNvbnRpbnVlOworCQkJCisJ CQlzdWJ0cmVlLT5vYmplY3QuZmxhZ3MgJj0gfkZBQ0VfVkFMVUU7CiAJCQlwcm9j ZXNzX3RyZWUocmV2cywKLQkJCQkgICAgIGxvb2t1cF90cmVlKGVudHJ5LnNoYTEp LAorCQkJCSAgICAgc3VidHJlZSwKIAkJCQkgICAgIHNob3csICZtZSwgZW50cnku cGF0aCk7Ci0JCWVsc2UgaWYgKFNfSVNHSVRMSU5LKGVudHJ5Lm1vZGUpKQorCQl9 IGVsc2UgaWYgKFNfSVNHSVRMSU5LKGVudHJ5Lm1vZGUpKQogCQkJcHJvY2Vzc19n aXRsaW5rKHJldnMsIGVudHJ5LnNoYTEsCiAJCQkJCXNob3csICZtZSwgZW50cnku cGF0aCk7CiAJCWVsc2UKQEAgLTEzNiw2ICsxNDUsNyBAQCB2b2lkIG1hcmtfZWRn ZXNfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsCiAKIHN0 YXRpYyB2b2lkIGFkZF9wZW5kaW5nX3RyZWUoc3RydWN0IHJldl9pbmZvICpyZXZz LCBzdHJ1Y3QgdHJlZSAqdHJlZSkKIHsKKwl0cmVlLT5vYmplY3QuZmxhZ3MgJj0g fkZBQ0VfVkFMVUU7CiAJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsICZ0cmVlLT5v YmplY3QsICIiKTsKIH0KIApAQCAtMTQ4LDcgKzE1OCw4IEBAIHZvaWQgdHJhdmVy c2VfY29tbWl0X2xpc3Qoc3RydWN0IHJldl9pbmZvICpyZXZzLAogCXN0cnVjdCBj b21taXQgKmNvbW1pdDsKIAogCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9u KHJldnMpKSAhPSBOVUxMKSB7Ci0JCWFkZF9wZW5kaW5nX3RyZWUocmV2cywgY29t bWl0LT50cmVlKTsKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBGQUNF X1ZBTFVFKSkKKwkJCWFkZF9wZW5kaW5nX3RyZWUocmV2cywgY29tbWl0LT50cmVl KTsKIAkJc2hvd19jb21taXQoY29tbWl0LCBkYXRhKTsKIAl9CiAJZm9yIChpID0g MDsgaSA8IHJldnMtPnBlbmRpbmcubnI7IGkrKykgewpkaWZmIC0tZ2l0IGEvcmV2 LWNhY2hlLmMgYi9yZXYtY2FjaGUuYwppbmRleCA2MDJjZWM2Li41ZjZmYjk1IDEw MDc1NQotLS0gYS9yZXYtY2FjaGUuYworKysgYi9yZXYtY2FjaGUuYwpAQCAtODMs MTMgKzgzLDE5IEBAIHN0cnVjdCBvYmplY3RfZW50cnkgewogCS8qIHNpemUgKi8K IH07CiAKK3N0cnVjdCBiYWRfc2xpY2UgeworCXVuc2lnbmVkIGNoYXIgc2hhMVsy MF07CisJc3RydWN0IGJhZF9zbGljZSAqbmV4dDsKK307CisKIC8qIGxpc3QgcmVz ZW1ibGVzIHBhY2sgaW5kZXggZm9ybWF0ICovCiBzdGF0aWMgdWludDMyX3QgZmFu b3V0WzB4ZmYgKyAyXTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgKmlkeF9tYXAg PSAwOwogc3RhdGljIGludCBpZHhfc2l6ZTsKIHN0YXRpYyBzdHJ1Y3QgaW5kZXhf aGVhZGVyIGlkeF9oZWFkOwotc3RhdGljIGNoYXIgbm9faWR4ID0gMDsKK3N0YXRp YyBjaGFyIG5vX2lkeCA9IDAsIHNhdmVfdW5pcXVlID0gMCwgYWRkX3RvX3BlbmRp bmcgPSAwOworc3RhdGljIHN0cnVjdCBiYWRfc2xpY2UgKmJhZF9zbGljZXM7CiAK IHN0YXRpYyBzdHJ1Y3Qgc3RyYnVmICpnX2J1ZmZlcjsKIApAQCAtMTA4LDEwICsx MTQsMzYgQEAgc3RhdGljIHN0cnVjdCBzdHJidWYgKmdfYnVmZmVyOwogI2RlZmlu ZSBBQ1RVQUxfT0JKRUNUX0VOVFJZX1NJWkUoZSkJCShPRV9TSVpFICsgUEFUSF9T SVpFKChlKS0+bWVyZ2VfbnIgKyAoZSktPnNwbGl0X25yKSArIChlKS0+c2l6ZV9z aXplKQogI2RlZmluZSBFTlRSWV9TSVpFX09GRlNFVChlKQkJCShBQ1RVQUxfT0JK RUNUX0VOVFJZX1NJWkUoZSkgLSAoZSktPnNpemVfc2l6ZSkKIAotI2RlZmluZSBT TE9QCQk1CisjZGVmaW5lIFNMT1AJCQk1CisKKyNkZWZpbmUgSEFTX1VOSVFVRVMJ CUZBQ0VfVkFMVUUKIAogLyogaW5pdGlhbGl6YXRpb24gKi8KIAorc3RhdGljIHZv aWQgbWFya19iYWRfc2xpY2UodW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1 Y3QgYmFkX3NsaWNlICpiYWQ7CisJCisJYmFkID0geGNhbGxvYyhzaXplb2Yoc3Ry dWN0IGJhZF9zbGljZSksIDEpOworCWhhc2hjcHkoYmFkLT5zaGExLCBzaGExKTsK KwkKKwliYWQtPm5leHQgPSBiYWRfc2xpY2VzOworCWJhZF9zbGljZXMgPSBiYWQ7 Cit9CisKK3N0YXRpYyBpbnQgaXNfYmFkX3NsaWNlKHVuc2lnbmVkIGNoYXIgKnNo YTEpCit7CisJc3RydWN0IGJhZF9zbGljZSAqYmFkID0gYmFkX3NsaWNlczsKKwkK Kwl3aGlsZSAoYmFkKSB7CisJCWlmICghaGFzaGNtcChiYWQtPnNoYTEsIHNoYTEp KQorCQkJcmV0dXJuIDE7CisJCWJhZCA9IGJhZC0+bmV4dDsKKwl9CisJCisJcmV0 dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZ2V0X2luZGV4X2hlYWQodW5zaWduZWQg Y2hhciAqbWFwLCBpbnQgbGVuLCBzdHJ1Y3QgaW5kZXhfaGVhZGVyICpoZWFkLCB1 aW50MzJfdCAqZmFub3V0KQogewogCXN0cnVjdCBpbmRleF9oZWFkZXJfb25kaXNr IHdoZWFkOwpAQCAtMjI4LDYgKzI2MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5kZXhf ZW50cnkgKnNlYXJjaF9pbmRleCh1bnNpZ25lZCBjaGFyICpzaGExKQogdW5zaWdu ZWQgY2hhciAqZ2V0X2NhY2hlX3NsaWNlKHN0cnVjdCBjb21taXQgKmNvbW1pdCkK IHsKIAlzdHJ1Y3QgaW5kZXhfZW50cnkgKmllOworCXVuc2lnbmVkIGNoYXIgKnNo YTE7CiAJCiAJaWYgKCFpZHhfbWFwKSB7CiAJCWlmIChub19pZHgpCkBAIC0yMzks OCArMjcyLDEzIEBAIHVuc2lnbmVkIGNoYXIgKmdldF9jYWNoZV9zbGljZShzdHJ1 Y3QgY29tbWl0ICpjb21taXQpCiAJCXJldHVybiAwOwogCQogCWllID0gc2VhcmNo X2luZGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpOwotCWlmIChpZSAmJiBpZS0+Y2Fj aGVfaW5kZXggPCBpZHhfaGVhZC5jYWNoZXMpCi0JCXJldHVybiBpZHhfaGVhZC5j YWNoZV9zaGExcyArIGllLT5jYWNoZV9pbmRleCAqIDIwOworCWlmIChpZSAmJiBp ZS0+Y2FjaGVfaW5kZXggPCBpZHhfaGVhZC5jYWNoZXMpIHsKKwkJc2hhMSA9IGlk eF9oZWFkLmNhY2hlX3NoYTFzICsgaWUtPmNhY2hlX2luZGV4ICogMjA7CisJCQor CQlpZiAoaXNfYmFkX3NsaWNlKHNoYTEpKQorCQkJcmV0dXJuIDA7CisJCXJldHVy biBzaGExOworCX0KIAkKIAlyZXR1cm4gMDsKIH0KQEAgLTI1MCw4ICsyODgsMjkg QEAgdW5zaWduZWQgY2hhciAqZ2V0X2NhY2hlX3NsaWNlKHN0cnVjdCBjb21taXQg KmNvbW1pdCkKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVjb2RlX3NpemUodW5z aWduZWQgY2hhciAqc3RyLCBpbnQgbGVuKTsKIAorLyogb24gZmFpbHVyZSAqLwor c3RhdGljIHZvaWQgcmVzdG9yZV9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0 KQoreworCWlmIChjb21taXQtPnVuaXF1ZSkgeworCQlmcmVlKGNvbW1pdC0+dW5p cXVlKTsKKwkJY29tbWl0LT51bmlxdWUgPSAwOworCX0KKwkKKwljb21taXQtPm9i amVjdC5mbGFncyAmPSB+KEFEREVEIHwgU0VFTiB8IEZBQ0VfVkFMVUUpOworCQor CWlmICghY29tbWl0LT5vYmplY3QucGFyc2VkKSB7CisJCXdoaWxlIChwb3BfY29t bWl0KCZjb21taXQtPnBhcmVudHMpKSAKKwkJCTsKKwkJCisJCXBhcnNlX2NvbW1p dChjb21taXQpOworCX0KKwkKK30KKwogc3RhdGljIHZvaWQgaGFuZGxlX25vbmNv bW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1p dCwgc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkpCiB7CisJc3RhdGljIHN0cnVj dCBjb21taXQgKmxhc3RfY29tbWl0ID0gMDsKKwlzdGF0aWMgc3RydWN0IG9iamVj dF9saXN0ICoqbGFzdF91bmlxdWUgPSAwOwogCXN0cnVjdCBibG9iICpibG9iOwog CXN0cnVjdCB0cmVlICp0cmVlOwogCXN0cnVjdCBvYmplY3QgKm9iajsKQEAgLTI4 OSwxMSArMzQ4LDI3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9ub25jb21taXQoc3Ry dWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVj CiAJCXJldHVybjsKIAl9CiAJCisJLyogYWRkIHRvIHVuaXF1ZSBsaXN0IGlmIHdl J3JlIG5vdCBhIHN0YXJ0ICovCisJaWYgKHNhdmVfdW5pcXVlICYmIChjb21taXQt Pm9iamVjdC5mbGFncyAmIEZBQ0VfVkFMVUUpKSB7CisJCWlmIChsYXN0X2NvbW1p dCAhPSBjb21taXQpIHsKKwkJCWxhc3RfY29tbWl0ID0gY29tbWl0OworCQkJbGFz dF91bmlxdWUgPSAwOworCQl9CisJCQorCQlpZiAoIWxhc3RfdW5pcXVlKQorCQkJ bGFzdF91bmlxdWUgPSAmY29tbWl0LT51bmlxdWU7CisJCQorCQlvYmplY3RfbGlz dF9hcHBlbmQob2JqLCBsYXN0X3VuaXF1ZSk7CisJCWxhc3RfdW5pcXVlID0gJigq bGFzdF91bmlxdWUpLT5uZXh0OworCX0KKwkKIAlvYmotPmZsYWdzIHw9IEZBQ0Vf VkFMVUU7Ci0JYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsIG9iaiwgIiIpOworCWlm IChhZGRfdG9fcGVuZGluZykKKwkJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsIG9i aiwgIiIpOwogfQogCi1zdGF0aWMgaW50IHNldHVwX3RyYXZlcnNhbChzdHJ1Y3Qg Y2FjaGVfc2xpY2VfaGVhZGVyICpoZWFkLCB1bnNpZ25lZCBjaGFyICptYXAsIHN0 cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdF9saXN0ICoqd29yaykK K3N0YXRpYyBpbnQgc2V0dXBfdHJhdmVyc2FsKHN0cnVjdCBjYWNoZV9zbGljZV9o ZWFkZXIgKmhlYWQsIHVuc2lnbmVkIGNoYXIgKm1hcCwgc3RydWN0IGNvbW1pdCAq Y29tbWl0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKip3b3JrLCAKKwlzdHJ1Y3QgY29t bWl0X2xpc3QgKip1bndvcmssIGludCAqaXBhdGhfbnIsIGludCAqdXBhdGhfbnIs IGNoYXIgKmlvdXRzaWRlKQogewogCXN0cnVjdCBpbmRleF9lbnRyeSAqaWVwOwog CXN0cnVjdCBvYmplY3RfZW50cnkgKm9lcDsKQEAgLTMwMiw2ICszNzcsMTEgQEAg c3RhdGljIGludCBzZXR1cF90cmF2ZXJzYWwoc3RydWN0IGNhY2hlX3NsaWNlX2hl YWRlciAqaGVhZCwgdW5zaWduZWQgY2hhciAqbWFwLAogCQogCWllcCA9IHNlYXJj aF9pbmRleChjb21taXQtPm9iamVjdC5zaGExKTsKIAlvZXAgPSBPRV9DQVNUKG1h cCArIG50b2hsKGllcC0+cG9zKSk7CisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdz ICYgVU5JTlRFUkVTVElORykgeworCQkrKyp1cGF0aF9ucjsKKwkJb2VwLT51bmlu dGVyZXN0aW5nID0gMTsKKwl9IGVsc2UKKwkJKysqaXBhdGhfbnI7CiAJb2VwLT5p bmNsdWRlID0gMTsKIAlyZXR2YWwgPSBudG9obChpZXAtPnBvcyk7CiAJCkBAIC0z MTYsMTAgKzM5NiwxNCBAQCBzdGF0aWMgaW50IHNldHVwX3RyYXZlcnNhbChzdHJ1 Y3QgY2FjaGVfc2xpY2VfaGVhZGVyICpoZWFkLCB1bnNpZ25lZCBjaGFyICptYXAs CiAJCQogCQlpZXAgPSBzZWFyY2hfaW5kZXgob2JqLT5zaGExKTsKIAkJaWYgKCFp ZXAgfHwgaGFzaGNtcChpZHhfaGVhZC5jYWNoZV9zaGExcyArIGllcC0+Y2FjaGVf aW5kZXggKiAyMCwgaGVhZC0+c2hhMSkpIHsKKwkJCS8qIHRoZXJlIGFyZSBpbnRl cmVzaW5nIG9iamVjdHMgb3V0c2lkZSB0aGUgc2xpY2UgKi8KKwkJCWlmICghKG9i ai0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJCQkqaW91dHNpZGUgPSAxOwor CQkJCiAJCQlwcmV2ID0gd3A7CiAJCQl3cCA9IHdwLT5uZXh0OwogCQkJd3BwID0g JndwOwotIAkJCWNvbnRpbnVlOworCQkJY29udGludWU7CiAJCX0KIAkJCiAJCXQg PSBudG9obChpZXAtPnBvcyk7CkBAIC0zMzAsMTEgKzQxNCwyMCBAQCBzdGF0aWMg aW50IHNldHVwX3RyYXZlcnNhbChzdHJ1Y3QgY2FjaGVfc2xpY2VfaGVhZGVyICpo ZWFkLCB1bnNpZ25lZCBjaGFyICptYXAsCiAJCWlmICh0IDwgcmV0dmFsKQogCQkJ cmV0dmFsID0gdDsKIAkJCisJCS8qIGNvdW50IGV2ZW4gaWYgbm90IGluIHNsaWNl IHNvIHdlIGNhbiBzdG9wIGVudW1lcmF0aW5nIGlmIHBvc3NpYmxlICovCisJCWlm IChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCSsrKnVwYXRoX25yOwor CQllbHNlCisJCQkrKyppcGF0aF9ucjsKKwkJCiAJCS8qIHJlbW92ZSBmcm9tIHdv cmsgbGlzdCAqLwogCQljbyA9IHBvcF9jb21taXQod3BwKTsKIAkJd3AgPSAqd3Bw OwogCQlpZiAocHJldikKIAkJCXByZXYtPm5leHQgPSB3cDsKKwkJCisJCS8qIC4u LmFuZCBzdG9yZSBpbiB0ZW1wIGxpc3Qgc28gd2UgY2FuIHJlc3RvcmUgd29yayBv biBmYWlsdXJlICovCisJCWNvbW1pdF9saXN0X2luc2VydChjbywgdW53b3JrKTsK IAl9CiAJCiAJcmV0dXJuIHJldHZhbDsKQEAgLTM1MSwxNiArNDQ0LDIxIEBAIHN0 YXRpYyBpbnQgdHJhdmVyc2VfY2FjaGVfc2xpY2VfMShzdHJ1Y3QgY2FjaGVfc2xp Y2VfaGVhZGVyICpoZWFkLCB1bnNpZ25lZCBjaGFyCiAJdW5zaWduZWQgbG9uZyAq ZGF0ZV9zb19mYXIsIGludCAqc2xvcF9zb19mYXIsIAogCXN0cnVjdCBjb21taXRf bGlzdCAqKipxdWV1ZSwgc3RydWN0IGNvbW1pdF9saXN0ICoqd29yaykKIHsKLQlz dHJ1Y3QgY29tbWl0X2xpc3QgKmluc2VydF9jYWNoZSA9IDA7CisJc3RydWN0IGNv bW1pdF9saXN0ICppbnNlcnRfY2FjaGUgPSAwLCAqbXlxID0gMCwgKipteXFwID0g Jm15cSwgKm15d29yayA9IDAsICoqbXl3b3JrcCA9ICZteXdvcmssICp1bndvcmsg PSAwOwogCXN0cnVjdCBjb21taXQgKipsYXN0X29iamVjdHMsICpjbzsKLQlpbnQg aSwgdG90YWxfcGF0aF9uciA9IGhlYWQtPnBhdGhfbnIsIHJldHZhbCA9IC0xOwot CWNoYXIgY29uc3VtZV9jaGlsZHJlbiA9IDA7CisJdW5zaWduZWQgbG9uZyBkYXRl ID0gZGF0ZV9zb19mYXIgPyAqZGF0ZV9zb19mYXIgOiB+MHVsOworCWludCBpLCBp cGF0aF9uciA9IDAsIHVwYXRoX25yID0gMCwgb3JpZ19vYmpfbnIgPSAwLCAKKwkJ dG90YWxfcGF0aF9uciA9IGhlYWQtPnBhdGhfbnIsIHJldHZhbCA9IC0xLCBzbG9w ID0gc2xvcF9zb19mYXIgPyAqc2xvcF9zb19mYXIgOiBTTE9QOworCWNoYXIgY29u c3VtZV9jaGlsZHJlbiA9IDAsIGlvdXRzaWRlID0gMDsKIAl1bnNpZ25lZCBjaGFy ICpwYXRoczsKIAkKKwkvKiB0YWtlIG5vdGUgaW4gY2FzZSB3ZSBuZWVkIHRvIHJl Z3Jlc3MgKi8KKwlvcmlnX29ial9uciA9IHJldnMtPnBlbmRpbmcubnI7CisJCiAJ cGF0aHMgPSB4Y2FsbG9jKHRvdGFsX3BhdGhfbnIsIFBBVEhfV0lEVEgpOwogCWxh c3Rfb2JqZWN0cyA9IHhjYWxsb2ModG90YWxfcGF0aF9uciwgc2l6ZW9mKHN0cnVj dCBjb21taXQgKikpOwogCQotCWkgPSBzZXR1cF90cmF2ZXJzYWwoaGVhZCwgbWFw LCBjb21taXQsIHdvcmspOworCWkgPSBzZXR1cF90cmF2ZXJzYWwoaGVhZCwgbWFw LCBjb21taXQsIHdvcmssICZ1bndvcmssICZpcGF0aF9uciwgJnVwYXRoX25yLCAm aW91dHNpZGUpOwogCQogCS8qIGkgYWxyZWFkeSBzZXQgKi8KIAl3aGlsZSAoaSA8 IGhlYWQtPnNpemUpIHsKQEAgLTQwMyw2ICs1MDEsNyBAQCBzdGF0aWMgaW50IHRy YXZlcnNlX2NhY2hlX3NsaWNlXzEoc3RydWN0IGNhY2hlX3NsaWNlX2hlYWRlciAq aGVhZCwgdW5zaWduZWQgY2hhcgogCQkKIAkJaWYgKChwYXRoc1twYXRoXSAmIElQ QVRIKSAmJiAocGF0aHNbcGF0aF0gJiBVUEFUSCkpIHsKIAkJCXBhdGhzW3BhdGhd ID0gVVBBVEg7CisJCQlpcGF0aF9uci0tOwogCQkJCiAJCQkvKiBtYXJrIGVkZ2Ug Ki8KIAkJCWlmIChsYXN0X29iamVjdHNbcGF0aF0pIHsKQEAgLTQxMyw2ICs1MTIs NyBAQCBzdGF0aWMgaW50IHRyYXZlcnNlX2NhY2hlX3NsaWNlXzEoc3RydWN0IGNh Y2hlX3NsaWNlX2hlYWRlciAqaGVhZCwgdW5zaWduZWQgY2hhcgogCQkJCWxhc3Rf b2JqZWN0c1twYXRoXS0+b2JqZWN0LmZsYWdzICY9IH5GQUNFX1ZBTFVFOwogCQkJ CWxhc3Rfb2JqZWN0c1twYXRoXSA9IDA7CiAJCQl9CisJCQlvYmotPmZsYWdzIHw9 IEJPVU5EQVJZOwogCQl9CiAJCQogCQkvKiBub3cgd2UgZ290dGEgcmUtYXNzZXNz IHRoZSB3aG9sZSBpbnRlcmVzdGluZyB0aGluZy4uLiAqLwpAQCAtNDM2LDggKzUz NiwxMCBAQCBzdGF0aWMgaW50IHRyYXZlcnNlX2NhY2hlX3NsaWNlXzEoc3RydWN0 IGNhY2hlX3NsaWNlX2hlYWRlciAqaGVhZCwgdW5zaWduZWQgY2hhcgogCQkJCQkJ bGFzdF9vYmplY3RzW3BdLT5vYmplY3QuZmxhZ3MgJj0gfkZBQ0VfVkFMVUU7CiAJ CQkJCQlsYXN0X29iamVjdHNbcF0gPSAwOwogCQkJCQl9Ci0JCQkJfSBlbHNlIGlm IChsYXN0X29iamVjdHNbcF0gJiYgIWxhc3Rfb2JqZWN0c1twXS0+b2JqZWN0LnBh cnNlZCkKKwkJCQkJb2JqLT5mbGFncyB8PSBCT1VOREFSWTsKKwkJCQl9IGVsc2Ug aWYgKGxhc3Rfb2JqZWN0c1twXSAmJiAhbGFzdF9vYmplY3RzW3BdLT5vYmplY3Qu cGFyc2VkKSB7CiAJCQkJCWNvbW1pdF9saXN0X2luc2VydChjbywgJmxhc3Rfb2Jq ZWN0c1twXS0+cGFyZW50cyk7CisJCQkJfQogCQkJCQogCQkJCS8qIGNhbid0IGNs b3NlIGEgbWVyZ2UgcGF0aCB1bnRpbCBhbGwgYXJlIHBhcmVudHMgaGF2ZSBiZWVu IGVuY291bnRlcmVkICovCiAJCQkJaWYgKEdFVF9DT1VOVChwYXRoc1twXSkpIHsK QEAgLTQ0Nyw0NCArNTQ5LDkwIEBAIHN0YXRpYyBpbnQgdHJhdmVyc2VfY2FjaGVf c2xpY2VfMShzdHJ1Y3QgY2FjaGVfc2xpY2VfaGVhZGVyICpoZWFkLCB1bnNpZ25l ZCBjaGFyCiAJCQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQkJCisJCQkJaWYgKHBh dGhzW3BdICYgSVBBVEgpCisJCQkJCWlwYXRoX25yLS07CisJCQkJZWxzZQorCQkJ CQl1cGF0aF9uci0tOworCQkJCQogCQkJCXBhdGhzW3BdID0gMDsKIAkJCQlsYXN0 X29iamVjdHNbcF0gPSAwOwogCQkJfQogCQl9CiAJCQogCQkvKiBtYWtlIHRvcG8g cmVsYXRpb25zICovCi0JCWlmIChsYXN0X29iamVjdHNbcGF0aF0gJiYgIWxhc3Rf b2JqZWN0c1twYXRoXS0+b2JqZWN0LnBhcnNlZCkKKwkJaWYgKGxhc3Rfb2JqZWN0 c1twYXRoXSAmJiAhbGFzdF9vYmplY3RzW3BhdGhdLT5vYmplY3QucGFyc2VkKSB7 CiAJCQljb21taXRfbGlzdF9pbnNlcnQoY28sICZsYXN0X29iamVjdHNbcGF0aF0t PnBhcmVudHMpOworCQl9CisJCQorCQkvKiB3ZSd2ZSBiZWVuIGhlcmUgYWxyZWFk eSAqLworCQlpZiAob2JqLT5mbGFncyAmIEFEREVEKSB7CisJCQlpZiAoZW50cnkt PnVuaW50ZXJlc3RpbmcgJiYgIShvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykp IHsKKwkJCQlvYmotPmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCQkJbWFya19w YXJlbnRzX3VuaW50ZXJlc3RpbmcoY28pOworCQkJCXVwYXRoX25yLS07CisJCQl9 IGVsc2UgaWYgKCFlbnRyeS0+dW5pbnRlcmVzdGluZykKKwkJCQlpcGF0aF9uci0t OworCQkJCisJCQlwYXRoc1twYXRoXSA9IDA7CisJCQljb250aW51ZTsKKwkJfQog CQkKIAkJLyogaW5pdGlhbGl6ZSBjb21taXQgKi8KIAkJaWYgKCFlbnRyeS0+aXNf c3RhcnQpIHsKIAkJCWNvLT5kYXRlID0gbnRvaGwoZW50cnktPmRhdGUpOwotIAkJ CW9iai0+ZmxhZ3MgfD0gQURERUQgfCBGQUNFX1ZBTFVFOworCQkJb2JqLT5mbGFn cyB8PSBBRERFRCB8IEZBQ0VfVkFMVUU7CiAJCX0gZWxzZQogCQkJcGFyc2VfY29t bWl0KGNvKTsKIAkJCiAJCW9iai0+ZmxhZ3MgfD0gU0VFTjsKLSAJCQotIAkJaWYg KGVudHJ5LT51bmludGVyZXN0aW5nKQotIAkJCW9iai0+ZmxhZ3MgfD0gVU5JTlRF UkVTVElORzsKKwkJCisJCWlmIChlbnRyeS0+dW5pbnRlcmVzdGluZykKKwkJCW9i ai0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJZWxzZSBpZiAoY28tPmRhdGUg PCBkYXRlKQorCQkJZGF0ZSA9IGNvLT5kYXRlOwogCQkKIAkJLyogd2UgbmVlZCB0 byBrbm93IHdoYXQgdGhlIGVkZ2VzIGFyZSAqLwogCQlsYXN0X29iamVjdHNbcGF0 aF0gPSBjbzsKIAkJCiAJCS8qIGFkZCB0byBsaXN0ICovCi0JCWlmICghKG9iai0+ ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB8fCByZXZzLT5zaG93X2FsbCkgewotCQkJ aWYgKGVudHJ5LT5pc19zdGFydCkKLQkJCQlpbnNlcnRfYnlfZGF0ZV9jYWNoZWQo Y28sIHdvcmssIGluc2VydF9jYWNoZSwgJmluc2VydF9jYWNoZSk7Ci0JCQllbHNl Ci0JCQkJKnF1ZXVlID0gJmNvbW1pdF9saXN0X2luc2VydChjbywgKnF1ZXVlKS0+ bmV4dDsKKwkJaWYgKHNsb3AgJiYgIShyZXZzLT5taW5fYWdlICE9IC0xICYmIGNv LT5kYXRlID4gcmV2cy0+bWluX2FnZSkpIHsKKwkJCQorCQkJaWYgKCEob2JqLT5m bGFncyAmIFVOSU5URVJFU1RJTkcpIHx8IHJldnMtPnNob3dfYWxsKSB7CisJCQkJ aWYgKGVudHJ5LT5pc19zdGFydCkKKwkJCQkJbXl3b3JrcCA9ICZjb21taXRfbGlz dF9pbnNlcnQoY28sIG15d29ya3ApLT5uZXh0OworCQkJCWVsc2UKKwkJCQkJbXlx cCA9ICZjb21taXRfbGlzdF9pbnNlcnQoY28sIG15cXApLT5uZXh0OworCQkJCQor CQkJCS8qIGFkZCBjaGlsZHJlbiB0byBsaXN0IGFzIHdlbGwgKi8KKwkJCQlpZiAo b2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQkJCWNvbnN1bWVfY2hpbGRy ZW4gPSAwOworCQkJCWVsc2UKKwkJCQkJY29uc3VtZV9jaGlsZHJlbiA9IDE7CisJ CQl9CiAJCQkKLQkJCS8qIGFkZCBjaGlsZHJlbiB0byBsaXN0IGFzIHdlbGwgKi8K LQkJCWlmIChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykKLQkJCQljb25zdW1l X2NoaWxkcmVuID0gMDsKLQkJCWVsc2UgCi0JCQkJY29uc3VtZV9jaGlsZHJlbiA9 IDE7CiAJCX0KIAkJCisJCS8qIHNob3VsZCB3ZSBjb250aW51ZT8gKi8KKwkJaWYg KCFzbG9wKSB7CisJCQlpZiAoIXVwYXRoX25yKSB7CisJCQkJYnJlYWs7CisJCQl9 IGVsc2UgaWYgKGlvdXRzaWRlIHx8IHJldnMtPnNob3dfYWxsKSB7CisJCQkJLyog cGFzcyBpdCBiYWNrIHRvIHJldi1saXN0CisJCQkJICogd2UgcHVycG9zZWx5IGln bm9yZSBldmVyeXRoaW5nIG91dHNpZGUgdGhpcyBjYWNoZSwgc28gd2UgZG9uJ3Qg bmVlZGxlc3NseSB0cmF2ZXJzZSB0aGUgd2hvbGUgCisJCQkJICogdGhpbmcgb24g dW5pbnRlcmVzdGluZywgYnV0IHRoYXQgZG9lcyBtZWFuIHRoYXQgd2UgbWF5IG5l ZWQgdG8gYm91bmNlIGJhY2sgCisJCQkJICogYW5kIGZvcnRoIGEgZmV3IHRpbWVz IHdpdGggcmV2LWxpc3QgKi8KKwkJCQlteXdvcmtwID0gJmNvbW1pdF9saXN0X2lu c2VydChjbywgbXl3b3JrcCktPm5leHQ7CisJCQkJCisJCQkJcGF0aHNbcGF0aF0g PSAwOworCQkJCXVwYXRoX25yLS07CisJCQl9IGVsc2UgeworCQkJCWJyZWFrOwor CQkJfQorCQl9IGVsc2UgaWYgKCFpcGF0aF9uciAmJiBjby0+ZGF0ZSA8PSBkYXRl KQorCQkJc2xvcC0tOworCQllbHNlCisJCQlzbG9wID0gU0xPUDsKKwkJCiAJCS8q IG9wZW4gcGFyZW50cyAqLwogCQlpZiAoZW50cnktPm1lcmdlX25yKSB7CiAJCQlp bnQgaiwgb2ZmID0gaW5kZXggKyBPRV9TSVpFOwpAQCAtNDk5LDYgKzY0NywxMSBA QCBzdGF0aWMgaW50IHRyYXZlcnNlX2NhY2hlX3NsaWNlXzEoc3RydWN0IGNhY2hl X3NsaWNlX2hlYWRlciAqaGVhZCwgdW5zaWduZWQgY2hhcgogCQkJCWlmIChwYXRo c1twXSAmIGZsYWcpCiAJCQkJCWNvbnRpbnVlOwogCQkJCQorCQkJCWlmIChmbGFn ID09IElQQVRIKQorCQkJCQlpcGF0aF9ucisrOworCQkJCWVsc2UKKwkJCQkJdXBh dGhfbnIrKzsKKwkJCQkKIAkJCQlwYXRoc1twXSB8PSBmbGFnOwogCQkJfQogCQkJ CkBAIC01MDgsMTIgKzY2MSw1NSBAQCBzdGF0aWMgaW50IHRyYXZlcnNlX2NhY2hl X3NsaWNlXzEoc3RydWN0IGNhY2hlX3NsaWNlX2hlYWRlciAqaGVhZCwgdW5zaWdu ZWQgY2hhcgogCQkKIAl9CiAJCisJaWYgKGRhdGVfc29fZmFyKQorCQkqZGF0ZV9z b19mYXIgPSBkYXRlOworCWlmIChzbG9wX3NvX2ZhcikKKwkJKnNsb3Bfc29fZmFy ID0gc2xvcDsKIAlyZXR2YWwgPSAwOwogCQorCS8qIHN1Y2Nlc3M6IGF0dGFjaCB0 byBnaXZlbiBsaXN0cyAqLworCWlmIChteXFwICE9ICZteXEpIHsKKwkJKipxdWV1 ZSA9IG15cTsKKwkJKnF1ZXVlID0gbXlxcDsKKwl9CisJCisJd2hpbGUgKChjbyA9 IHBvcF9jb21taXQoJm15d29yaykpICE9IDApIHsKKwkJaW5zZXJ0X2J5X2RhdGVf Y2FjaGVkKGNvLCB3b3JrLCBpbnNlcnRfY2FjaGUsICZpbnNlcnRfY2FjaGUpOwor CX0KKwkKKwkvKiBmcmVlIGJhY2t1cCAqLworCXdoaWxlIChwb3BfY29tbWl0KCZ1 bndvcmspKSAKKwkJOworCQogZW5kOgogCWZyZWUocGF0aHMpOwogCWZyZWUobGFz dF9vYmplY3RzKTsKIAkKKwkvKiBmYWlsdXJlOiByZXN0b3JlIHdvcmsgdG8gcHJl dmlvdXMgY29uZGl0aW9uCisJICogKGNhY2hlIGNvcnJ1cHRpb24gc2hvdWxkICpu b3QqIGJlIGZhdGFsKSAqLworCWlmIChyZXR2YWwpIHsKKwkJd2hpbGUgKChjbyA9 IHBvcF9jb21taXQoJnVud29yaykpICE9IDApIHsKKwkJCXJlc3RvcmVfY29tbWl0 KGNvKTsKKwkJCWNvLT5vYmplY3QuZmxhZ3MgfD0gU0VFTjsKKwkJCWluc2VydF9i eV9kYXRlKGNvLCB3b3JrKTsKKwkJfQorCQkKKwkJLyogZnJlZSBsaXN0cyAqLwor CQl3aGlsZSAoKGNvID0gcG9wX2NvbW1pdCgmbXlxKSkgIT0gMCkKKwkJCXJlc3Rv cmVfY29tbWl0KGNvKTsKKwkJCisJCXdoaWxlICgoY28gPSBwb3BfY29tbWl0KCZt eXdvcmspKSAhPSAwKQorCQkJcmVzdG9yZV9jb21taXQoY28pOworCQkKKwkJLyog dHJ1bmNhdGUgb2JqZWN0IGFycmF5ICovCisJCWZvciAoaSA9IG9yaWdfb2JqX25y OyBpIDwgcmV2cy0+cGVuZGluZy5ucjsgaSsrKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0 ICpvYmogPSByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0uaXRlbTsKKwkJCQorCQkJ b2JqLT5mbGFncyAmPSB+RkFDRV9WQUxVRTsKKwkJfQorCQlyZXZzLT5wZW5kaW5n Lm5yID0gb3JpZ19vYmpfbnI7CisJfQorCQogCXJldHVybiByZXR2YWw7CiB9CiAK QEAgLTU1MCw2ICs3NDYsNyBAQCBpbnQgdHJhdmVyc2VfY2FjaGVfc2xpY2Uoc3Ry dWN0IHJldl9jYWNoZV9pbmZvICpyY2ksIHVuc2lnbmVkIGNoYXIgKmNhY2hlX3No YTEsCiAJaW50IGZkID0gLTEsIHJldHZhbCA9IC0zOwogCXN0cnVjdCBzdGF0IGZp OwogCXN0cnVjdCBjYWNoZV9zbGljZV9oZWFkZXIgaGVhZDsKKwlzdHJ1Y3QgcmV2 X2NhY2hlX2luZm8gZGVmX3JjaTsKIAl1bnNpZ25lZCBjaGFyICptYXAgPSBNQVBf RkFJTEVEOwogCQogCS8qIHRoZSBpbmRleCBzaG91bGQndmUgYmVlbiBsb2FkZWQg YWxyZWFkeSB0byBmaW5kIGNhY2hlX3NoYTEsIGJ1dCBpdCdzIGdvb2QgCkBAIC01 NTksNiArNzU2LDE1IEBAIGludCB0cmF2ZXJzZV9jYWNoZV9zbGljZShzdHJ1Y3Qg cmV2X2NhY2hlX2luZm8gKnJjaSwgdW5zaWduZWQgY2hhciAqY2FjaGVfc2hhMSwK IAlpZiAoIWlkeF9tYXApCiAJCXJldHVybiAtMTsKIAkKKwkvKiBsb2FkIG9wdGlv bnMgKi8KKwlpZiAoIXJjaSkgeworCQlyY2kgPSAmZGVmX3JjaTsKKwkJaW5pdF9y Y2kocmNpKTsKKwl9CisJCisJc2F2ZV91bmlxdWUgPSByY2ktPnNhdmVfdW5pcXVl OworCWFkZF90b19wZW5kaW5nID0gcmNpLT5hZGRfdG9fcGVuZGluZzsKKwkKIAlt ZW1zZXQoJmhlYWQsIDAsIHNpemVvZihzdHJ1Y3QgY2FjaGVfc2xpY2VfaGVhZGVy KSk7CiAJCiAJZmQgPSBvcGVuKGdpdF9wYXRoKCJyZXYtY2FjaGUvJXMiLCBzaGEx X3RvX2hleChjYWNoZV9zaGExKSksIE9fUkRPTkxZKTsKQEAgLTU4MSw2ICs3ODcs MTAgQEAgZW5kOgogCWlmIChmZCAhPSAtMSkKIAkJY2xvc2UoZmQpOwogCQorCS8q IHJlbWVtYmVyIHRoaXMhICovCisJaWYgKHJldHZhbCkKKwkJbWFya19iYWRfc2xp Y2UoY2FjaGVfc2hhMSk7CisJCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNzc1 LDYgKzk4NSw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9wYXRocyhzdHJ1Y3QgY29t bWl0ICpjb21taXQsIHN0cnVjdCBvYmplY3RfZW50cnkgKm9iamVjdCwgc3RyCiAJ CWlmIChwdC0+Y29tbWl0ID09IGNvbW1pdCkgewogCQkJaWYgKHBhdGhzW3B0LT5w YXRoXSAhPSBQQVRIX0lOX1VTRSkKIAkJCQlwYXRoc1twdC0+cGF0aF0tLTsKKwkJ CQogCQkJcmVtb3ZlX3BhdGhfdHJhY2socHB0LCAwKTsKIAkJCXB0ID0gKnBwdDsK IAkJfSBlbHNlIHsKQEAgLTEwMzQsNiArMTI0NSwyMSBAQCBzdGF0aWMgaW50IGFk ZF91bmlxdWVfb2JqZWN0cyhzdHJ1Y3QgY29tbWl0ICpjb21taXQpCiAJaW50IGks IGosIG5leHQ7CiAJY2hhciBpc19maXJzdCA9IDE7CiAJCisJLyogYnV0IHdhaXQh ICBpcyB0aGlzIGl0c2VsZiBmcm9tIGEgc2xpY2U/ICovCisJaWYgKGNvbW1pdC0+ dW5pcXVlKSB7CisJCXN0cnVjdCBvYmplY3RfbGlzdCAqb2xpc3Q7CisJCQorCQlv bGlzdCA9IGNvbW1pdC0+dW5pcXVlOworCQlpID0gMDsKKwkJd2hpbGUgKG9saXN0 KSB7CisJCQlhZGRfb2JqZWN0X2VudHJ5KG9saXN0LT5pdGVtLT5zaGExLCAwLCAw LCAwKTsKKwkJCWkrKzsKKwkJCW9saXN0ID0gb2xpc3QtPm5leHQ7CisJCX0KKwkJ CisJCXJldHVybiBpOworCX0KKwkKIAkvKiAuLi5ubywgY2FsY3VsYXRlIHVuaXF1 ZSBvYmplY3RzICovCiAJc3RyYnVmX2luaXQoJm9zLCAwKTsKIAlzdHJidWZfaW5p dCgmb3N0LCAwKTsKQEAgLTEwODcsMTAgKzEzMTMsMTMgQEAgc3RhdGljIGludCBh ZGRfdW5pcXVlX29iamVjdHMoc3RydWN0IGNvbW1pdCAqY29tbWl0KQogCWZvciAo aSA9IDA7IGkgPCBvcy5sZW47IGkgKz0gMjApCiAJCWFkZF9vYmplY3RfZW50cnko KHVuc2lnbmVkIGNoYXIgKikob3MuYnVmICsgaSksIDAsIDAsIDApOwogCQorCS8q IGxhc3QgYnV0IG5vdCBsZWFzdCwgdGhlIG1haW4gdHJlZSAqLworCWFkZF9vYmpl Y3RfZW50cnkoY29tbWl0LT50cmVlLT5vYmplY3Quc2hhMSwgMCwgMCwgMCk7CisJ CiAJc3RyYnVmX3JlbGVhc2UoJm9zdCk7CiAJc3RyYnVmX3JlbGVhc2UoJm9zKTsK IAkKLQlyZXR1cm4gaSAvIDIwOworCXJldHVybiBpIC8gMjAgKyAxOwogfQogCiBz dGF0aWMgdm9pZCBpbml0X3JldmNhY2hlX2RpcmVjdG9yeSh2b2lkKQpAQCAtMTE3 MSw2ICsxNDAwLDcgQEAgaW50IG1ha2VfY2FjaGVfc2xpY2Uoc3RydWN0IHJldl9j YWNoZV9pbmZvICpyY2ksCiAJcmV2cy0+YmxvYl9vYmplY3RzID0gMTsKIAlyZXZz LT50b3BvX29yZGVyID0gMTsKIAlyZXZzLT5saWZvID0gMTsKKwlzYXZlX3VuaXF1 ZSA9IDE7IC8qIHJlLXVzZSBpbmZvIGZyb20gb3RoZXIgY2FjaGVzIGlmIHBvc3Np YmxlICovCiAJCiAJc2V0dXBfcmV2aXNpb25zKDAsIDAsIHJldnMsIDApOwogCWlm IChwcmVwYXJlX3JldmlzaW9uX3dhbGsocmV2cykpCkBAIC0xMjAzLDE0ICsxNDMz LDggQEAgaW50IG1ha2VfY2FjaGVfc2xpY2Uoc3RydWN0IHJldl9jYWNoZV9pbmZv ICpyY2ksCiAJCWFkZF9vYmplY3RfZW50cnkoMCwgJm9iamVjdCwgJm1lcmdlX3Bh dGhzLCAmc3BsaXRfcGF0aHMpOwogCQlvYmplY3RfbnIrKzsKIAkJCi0JCWlmIChy Y2ktPm9iamVjdHMgJiYgIShjb21taXQtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1F KSkgewotCQkJLyogYWRkIGFsbCB1bmlxdWUgY2hpbGRyZW4gZm9yIHRoaXMgY29t bWl0ICovCi0JCQlhZGRfb2JqZWN0X2VudHJ5KGNvbW1pdC0+dHJlZS0+b2JqZWN0 LnNoYTEsIDAsIDAsIDApOwotCQkJb2JqZWN0X25yKys7Ci0JCQkKLQkJCWlmICgh b2JqZWN0LmlzX3N0YXJ0KQotCQkJCW9iamVjdF9uciArPSBhZGRfdW5pcXVlX29i amVjdHMoY29tbWl0KTsKLQkJfQorCQlpZiAocmNpLT5vYmplY3RzICYmICEoY29t bWl0LT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkgJiYgIW9iamVjdC5pc19zdGFy dCkKKwkJCW9iamVjdF9uciArPSBhZGRfdW5pcXVlX29iamVjdHMoY29tbWl0KTsK IAkJCiAJCS8qIHByaW50IGV2ZXJ5IH4xTUIgb3Igc28gKi8KIAkJaWYgKGJ1ZmZl ci5sZW4gPiAxMDAwMDAwKSB7CkBAIC0xNDk3LDcgKzE3MjEsNiBAQCB2b2lkIGVu ZHNfZnJvbV9zbGljZXMoc3RydWN0IHJldl9pbmZvICpyZXZzLCB1bnNpZ25lZCBp bnQgZmxhZ3MsIHVuc2lnbmVkIGNoYXIgKgogCQogfQogCi0KIC8qIHRoZSBtb3N0 IHdvcmstaW50ZW5zaXZlIGF0dHJpYnV0ZXMgaW4gdGhlIGNhY2hlIGFyZSB0aGUg dW5pcXVlIG9iamVjdHMgYW5kIHNpemUsIGJvdGggCiAgKiBvZiB3aGljaCBjYW4g YmUgcmUtdXNlZC4gIGFsdGhvdWdoIHBhdGggc3RydWN0dXJlcyB3aWxsIGJlIGlz b21vcnBoaWMsIHBhdGggZ2VuZXJhdGlvbiBpcyAKICAqIG5vdCBwYXJ0aWN1bGFy bHkgZXhwZW5zaXZlLCBhbmQgYXQgYW55IHJhdGUgd2UgbmVlZCB0byByZS1zb3J0 IHRoZSBjb21taXRzICovCkBAIC0xNjI2LDQgKzE4NDksNCBAQCBpbnQgcmVnZW5l cmF0ZV9jYWNoZV9pbmRleChzdHJ1Y3QgcmV2X2NhY2hlX2luZm8gKnJjaSkKIAl9 CiAJCiAJcmV0dXJuIDA7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQor fQpkaWZmIC0tZ2l0IGEvcmV2aXNpb24uYyBiL3JldmlzaW9uLmMKaW5kZXggZDg1 YWJhZS4uOWZiNTgwOSAxMDA2NDQKLS0tIGEvcmV2aXNpb24uYworKysgYi9yZXZp c2lvbi5jCkBAIC02MzgsNyArNjM4LDExIEBAIHN0YXRpYyBpbnQgbGltaXRfbGlz dChzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCiAJc3RydWN0IGNvbW1pdF9saXN0ICps aXN0ID0gcmV2cy0+Y29tbWl0czsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKm5ld2xp c3QgPSBOVUxMOwogCXN0cnVjdCBjb21taXRfbGlzdCAqKnAgPSAmbmV3bGlzdDsK Kwl1bnNpZ25lZCBjaGFyICpjYWNoZV9zaGExOworCXN0cnVjdCByZXZfY2FjaGVf aW5mbyByY2k7CisJY2hhciB1c2VkX2NhY2hlOwogCisJaW5pdF9yY2koJnJjaSk7 CiAJd2hpbGUgKGxpc3QpIHsKIAkJc3RydWN0IGNvbW1pdF9saXN0ICplbnRyeSA9 IGxpc3Q7CiAJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxpc3QtPml0ZW07CkBA IC02NTAsMjQgKzY1NCwzOSBAQCBzdGF0aWMgaW50IGxpbWl0X2xpc3Qoc3RydWN0 IHJldl9pbmZvICpyZXZzKQogCiAJCWlmIChyZXZzLT5tYXhfYWdlICE9IC0xICYm IChjb21taXQtPmRhdGUgPCByZXZzLT5tYXhfYWdlKSkKIAkJCW9iai0+ZmxhZ3Mg fD0gVU5JTlRFUkVTVElORzsKLQkJaWYgKGFkZF9wYXJlbnRzX3RvX2xpc3QocmV2 cywgY29tbWl0LCAmbGlzdCwgTlVMTCkgPCAwKQotCQkJcmV0dXJuIC0xOwotCQlp ZiAob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKLQkJCW1hcmtfcGFyZW50 c191bmludGVyZXN0aW5nKGNvbW1pdCk7Ci0JCQlpZiAocmV2cy0+c2hvd19hbGwp Ci0JCQkJcCA9ICZjb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCBwKS0+bmV4dDsK LQkJCXNsb3AgPSBzdGlsbF9pbnRlcmVzdGluZyhsaXN0LCBkYXRlLCBzbG9wKTsK LQkJCWlmIChzbG9wKQorCQkKKwkJLyogcmV2LWNhY2hlIHRvIHRoZSByZXNjdWUh ISEgKi8KKwkJdXNlZF9jYWNoZSA9IDA7CisJCWlmICghcmV2cy0+ZG9udF9jYWNo ZV9tZSAmJiAhKG9iai0+ZmxhZ3MgJiBBRERFRCkpIHsKKwkJCWNhY2hlX3NoYTEg PSBnZXRfY2FjaGVfc2xpY2UoY29tbWl0KTsKKwkJCWlmIChjYWNoZV9zaGExKSB7 CisJCQkJaWYgKHRyYXZlcnNlX2NhY2hlX3NsaWNlKCZyY2ksIGNhY2hlX3NoYTEs IHJldnMsIGNvbW1pdCwgJmRhdGUsICZzbG9wLCAmcCwgJmxpc3QpIDwgMCkKKwkJ CQkJdXNlZF9jYWNoZSA9IDA7CisJCQkJZWxzZQorCQkJCQl1c2VkX2NhY2hlID0g MTsKKwkJCX0KKwkJfQorCQkKKwkJaWYgKCF1c2VkX2NhY2hlKSB7CisJCQlpZiAo YWRkX3BhcmVudHNfdG9fbGlzdChyZXZzLCBjb21taXQsICZsaXN0LCBOVUxMKSA8 IDApCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKG9iai0+ZmxhZ3MgJiBVTklOVEVS RVNUSU5HKSB7CisJCQkJbWFya19wYXJlbnRzX3VuaW50ZXJlc3RpbmcoY29tbWl0 KTsgLyogTUU6IHdoeT8gKi8KKwkJCQlpZiAocmV2cy0+c2hvd19hbGwpCisJCQkJ CXAgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgcCktPm5leHQ7CisJCQkJ c2xvcCA9IHN0aWxsX2ludGVyZXN0aW5nKGxpc3QsIGRhdGUsIHNsb3ApOworCQkJ CWlmIChzbG9wID4gMCkKKwkJCQkJY29udGludWU7CisJCQkJLyogSWYgc2hvd2lu ZyBhbGwsIGFkZCB0aGUgd2hvbGUgcGVuZGluZyBsaXN0IHRvIHRoZSBlbmQgKi8K KwkJCQlpZiAocmV2cy0+c2hvd19hbGwpCisJCQkJCSpwID0gbGlzdDsKKwkJCQli cmVhazsKKwkJCX0KKwkJCWlmIChyZXZzLT5taW5fYWdlICE9IC0xICYmIChjb21t aXQtPmRhdGUgPiByZXZzLT5taW5fYWdlKSkKIAkJCQljb250aW51ZTsKLQkJCS8q IElmIHNob3dpbmcgYWxsLCBhZGQgdGhlIHdob2xlIHBlbmRpbmcgbGlzdCB0byB0 aGUgZW5kICovCi0JCQlpZiAocmV2cy0+c2hvd19hbGwpCi0JCQkJKnAgPSBsaXN0 OwotCQkJYnJlYWs7CisJCQlkYXRlID0gY29tbWl0LT5kYXRlOworCQkJcCA9ICZj b21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCBwKS0+bmV4dDsKIAkJfQotCQlpZiAo cmV2cy0+bWluX2FnZSAhPSAtMSAmJiAoY29tbWl0LT5kYXRlID4gcmV2cy0+bWlu X2FnZSkpCi0JCQljb250aW51ZTsKLQkJZGF0ZSA9IGNvbW1pdC0+ZGF0ZTsKLQkJ cCA9ICZjb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCBwKS0+bmV4dDsKIAogCQlz aG93ID0gc2hvd19lYXJseV9vdXRwdXQ7CiAJCWlmICghc2hvdykKQEAgLTEzNzIs NiArMTM5MSwxMSBAQCBpbnQgc2V0dXBfcmV2aXNpb25zKGludCBhcmdjLCBjb25z dCBjaGFyICoqYXJndiwgc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBjaAog CWlmIChyZXZzLT5yZWZsb2dfaW5mbyAmJiByZXZzLT5ncmFwaCkKIAkJZGllKCJj YW5ub3QgY29tYmluZSAtLXdhbGstcmVmbG9ncyB3aXRoIC0tZ3JhcGgiKTsKIAor CS8qIGxpbWl0cyBvbiBjYWNoaW5nCisJICogdG9kbzogaW1wbGVtZW50IHRoaXMg ZnVuY3Rpb25hbGl0eSAqLworCWlmIChyZXZzLT5wcnVuZSB8fCByZXZzLT5kaWZm KQorCQlyZXZzLT5kb250X2NhY2hlX21lID0gMTsKKwogCXJldHVybiBsZWZ0Owog fQogCkBAIC0xNjU0LDYgKzE2NzgsOCBAQCBzdGF0aWMgaW50IGNvbW1pdF9tYXRj aChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCByZXZfaW5mbyAqb3B0KQog ewogCWlmICghb3B0LT5ncmVwX2ZpbHRlci5wYXR0ZXJuX2xpc3QpCiAJCXJldHVy biAxOworCWlmICghY29tbWl0LT5vYmplY3QucGFyc2VkKQorCQlwYXJzZV9jb21t aXQoY29tbWl0KTsKIAlyZXR1cm4gZ3JlcF9idWZmZXIoJm9wdC0+Z3JlcF9maWx0 ZXIsCiAJCQkgICBOVUxMLCAvKiB3ZSBzYXkgbm90aGluZywgbm90IGV2ZW4gZmls ZW5hbWUgKi8KIAkJCSAgIGNvbW1pdC0+YnVmZmVyLCBzdHJsZW4oY29tbWl0LT5i dWZmZXIpKTsKQEAgLTE3MDYsNiArMTczMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgY29t bWl0ICpnZXRfcmV2aXNpb25fMShzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCiAJZG8g ewogCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmVudHJ5ID0gcmV2cy0+Y29tbWl0czsK IAkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gZW50cnktPml0ZW07CisJCXN0cnVj dCBvYmplY3QgKm9iaiA9ICZjb21taXQtPm9iamVjdDsKIAogCQlyZXZzLT5jb21t aXRzID0gZW50cnktPm5leHQ7CiAJCWZyZWUoZW50cnkpOwpAQCAtMTcyMiwxMSAr MTc0OSw0MyBAQCBzdGF0aWMgc3RydWN0IGNvbW1pdCAqZ2V0X3JldmlzaW9uXzEo c3RydWN0IHJldl9pbmZvICpyZXZzKQogCQkJaWYgKHJldnMtPm1heF9hZ2UgIT0g LTEgJiYKIAkJCSAgICAoY29tbWl0LT5kYXRlIDwgcmV2cy0+bWF4X2FnZSkpCiAJ CQkJY29udGludWU7CisJCQkKKwkJCWlmICghcmV2cy0+ZG9udF9jYWNoZV9tZSkg eworCQkJCXN0cnVjdCBjb21taXRfbGlzdCAqcXVldWUgPSAwLCAqKnF1ZXVlcCA9 ICZxdWV1ZTs7CisJCQkJdW5zaWduZWQgY2hhciAqY2FjaGVfc2hhMTsKKwkJCQkK KwkJCQlpZiAob2JqLT5mbGFncyAmIEFEREVEKQorCQkJCQlnb3RvIHNraXBfcGFy ZW50aW5nOworCQkJCQorCQkJCWNhY2hlX3NoYTEgPSBnZXRfY2FjaGVfc2xpY2Uo Y29tbWl0KTsKKwkJCQlpZiAoY2FjaGVfc2hhMSkgeworCQkJCQlzdHJ1Y3QgcmV2 X2NhY2hlX2luZm8gcmNpOworCQkJCQkKKwkJCQkJaW5pdF9yY2koJnJjaSk7CisJ CQkJCQorCQkJCQlpZiAoIXRyYXZlcnNlX2NhY2hlX3NsaWNlKCZyY2ksIGNhY2hl X3NoYTEsIHJldnMsIGNvbW1pdCwgMCwgMCwgJnF1ZXVlcCwgJnJldnMtPmNvbW1p dHMpKSB7CisJCQkJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKndvcmsgPSByZXZzLT5j b21taXRzOworCQkJCQkJCisJCQkJCQkvKiBhdHRhY2ggcXVldWUgdG8gZW5kIG9m IC0+Y29tbWl0cyAqLworCQkJCQkJd2hpbGUgKHdvcmsgJiYgd29yay0+bmV4dCkK KwkJCQkJCQl3b3JrID0gd29yay0+bmV4dDsKKwkJCQkJCQorCQkJCQkJaWYgKHdv cmspCisJCQkJCQkJd29yay0+bmV4dCA9IHF1ZXVlOworCQkJCQkJZWxzZQorCQkJ CQkJCXJldnMtPmNvbW1pdHMgPSBxdWV1ZTsKKwkJCQkJCQorCQkJCQkJZ290byBz a2lwX3BhcmVudGluZzsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCQogCQkJaWYg KGFkZF9wYXJlbnRzX3RvX2xpc3QocmV2cywgY29tbWl0LCAmcmV2cy0+Y29tbWl0 cywgTlVMTCkgPCAwKQogCQkJCWRpZSgiRmFpbGVkIHRvIHRyYXZlcnNlIHBhcmVu dHMgb2YgY29tbWl0ICVzIiwKIAkJCQkgICAgc2hhMV90b19oZXgoY29tbWl0LT5v YmplY3Quc2hhMSkpOwogCQl9CiAKK3NraXBfcGFyZW50aW5nOgogCQlzd2l0Y2gg KHNpbXBsaWZ5X2NvbW1pdChyZXZzLCBjb21taXQpKSB7CiAJCWNhc2UgY29tbWl0 X2lnbm9yZToKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvdC90NjAxNS1yZXYt Y2FjaGUtbGlzdC5zaCBiL3QvdDYwMTUtcmV2LWNhY2hlLWxpc3Quc2gKaW5kZXgg OWNkNzIyYS4uYjcwMmNlOSAxMDA3NTUKLS0tIGEvdC90NjAxNS1yZXYtY2FjaGUt bGlzdC5zaAorKysgYi90L3Q2MDE1LXJldi1jYWNoZS1saXN0LnNoCkBAIC0zMyw3 ICszMyw4IEBAIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgcmVwbycgJwogCWVj aG8gb21nID5zbW9rZS9ib25nICYmIAogCWdpdCBhZGQgLiAmJiAKIAlnaXQgY29t bWl0IC1tICJvbWciICYmIAotCQorCisJc2xlZXAgMiAmJiAKIAlnaXQgYnJhbmNo IGI0ICYmIAogCWdpdCBjaGVja291dCBiNCAmJiAKIAllY2hvIHNoYXphbSA+Zmls ZTggJiYgCkBAIC00Miw5ICs0Myw5IEBAIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lu aXQgcmVwbycgJwogCWdpdCBtZXJnZSAtbSAibWVyZ2UgYjIiIGIyICYmIAogCQog CWVjaG8gYmFtID5zbW9rZS9waXBlICYmIAotCWdpdCBhZGQgLgorCWdpdCBhZGQg LiAmJiAKIAlnaXQgY29tbWl0IC1tICJiYW0iICYmIAotCQorCiAJZ2l0IGNoZWNr b3V0IG1hc3RlciAmJiAKIAllY2hvIHBvdyA+ZmlsZTcgJiYgCiAJZ2l0IGFkZCAu ICYmIApAQCAtNjcsMTggKzY4LDI2IEBAIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lu aXQgcmVwbycgJwogCWdpdCBhZGQgLiAmJiAKIAlnaXQgY29tbWl0IC1tICJsb2wi ICYmIAogCisJc2xlZXAgMiAmJiAKIAlnaXQgY2hlY2tvdXQgbWFzdGVyICYmIAog CWdpdCBtZXJnZSAtbSAidHJpcGxlIG1lcmdlIiBiMSBiMTEgJiYgCiAJZ2l0IHJt IC1yIGQxICYmICAKKwlzbGVlcCAyICYmIAogCWdpdCBjb21taXQgLWEgLW0gIm9o IG5vZXMiCiAnCiAKLWdpdC1yZXYtbGlzdCBIRUFEIC0tbm90IEhFQUR+MyA+cHJv cGVyX2NvbW1pdF9saXN0X2xpbWl0ZWQKLWdpdC1yZXYtbGlzdCBIRUFEID5wcm9w ZXJfY29tbWl0X2xpc3QKLWdpdC1yZXYtbGlzdCBIRUFEIC0tb2JqZWN0cyA+cHJv cGVyX29iamVjdF9saXN0CittYXhfZGF0ZT1gZ2l0LXJldi1saXN0IC0tdGltZXN0 YW1wIEhFQUR+MSAtLW1heC1jb3VudD0xIHwgZ3JlcCAtZSAiXlswLTldKiIgLW9g CittaW5fZGF0ZT1gZ2l0LXJldi1saXN0IC0tdGltZXN0YW1wIGI0IC0tbWF4LWNv dW50PTEgfCBncmVwIC1lICJeWzAtOV0qIiAtb2AKKworZ2l0LXJldi1saXN0IC0t dG9wby1vcmRlciBIRUFEIC0tbm90IEhFQUR+MyA+cHJvcGVyX2NvbW1pdF9saXN0 X2xpbWl0ZWQKK2dpdC1yZXYtbGlzdCAtLXRvcG8tb3JkZXIgSEVBRCAtLW5vdCBI RUFEfjIgPnByb3Blcl9jb21taXRfbGlzdF9saW1pdGVkMgorZ2l0LXJldi1saXN0 IC0tdG9wby1vcmRlciBIRUFEID5wcm9wZXJfY29tbWl0X2xpc3QKK2dpdC1yZXYt bGlzdCAtLW9iamVjdHMgSEVBRCA+cHJvcGVyX29iamVjdF9saXN0CitnaXQtcmV2 LWxpc3QgSEVBRCAtLW1heC1hZ2U9JG1pbl9kYXRlIC0tbWluLWFnZT0kbWF4X2Rh dGUgPnByb3Blcl9saXN0X2RhdGVfbGltaXRlZAorCitjYWNoZV9zaGExPWBnaXQt cmV2LWNhY2hlIGFkZCBIRUFEIDI+b3V0cHV0LmVycmAKIAogdGVzdF9leHBlY3Rf c3VjY2VzcyAnbWFrZSBjYWNoZSBzbGljZScgJwotCWdpdC1yZXYtY2FjaGUgYWRk IEhFQUQgMj5vdXRwdXQuZXJyICYmIAogCWdyZXAgImZpbmFsIHJldHVybiB2YWx1 ZTogMCIgb3V0cHV0LmVycgogJwogCkBAIC05OCw3ICsxMDcsNyBAQCB0ZXN0X2V4 cGVjdF9zdWNjZXNzICd0ZXN0IHJldi1jYWNoZXMgd2Fsa2VyIGRpcmVjdGx5ICh1 bmxpbWl0ZWQpJyAnCiAJdGVzdCAteiBgJHNoYTFkaWZmIGxpc3QgcHJvcGVyX2Nv bW1pdF9saXN0YAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHJldi1s aXN0IHJldi1saXN0IHRyYXZlcnNhbCAobGltaXRlZCknICcKK3Rlc3RfZXhwZWN0 X3N1Y2Nlc3MgJ3Rlc3QgcmV2LWxpc3QgdHJhdmVyc2FsIChsaW1pdGVkKScgJwog CWdpdC1yZXYtbGlzdCBIRUFEIC0tbm90IEhFQUR+MyA+bGlzdCAmJiAKIAl0ZXN0 IC16IGAkc2hhMWRpZmYgbGlzdCBwcm9wZXJfY29tbWl0X2xpc3RfbGltaXRlZGAK ICcKQEAgLTExNCwxNSArMTIzLDEwNiBAQCB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0 ZXN0IHJldi1jYWNoZXMgd2Fsa2VyIHdpdGggb2JqZWN0cycgJwogCXRlc3QgLXog YCRzaGExZGlmZiBsaXN0IHByb3Blcl9vYmplY3RfbGlzdGAKICcKIAotdGVzdF9l eHBlY3Rfc3VjY2VzcyAndGVzdCByZXYtbGlzdCB3aXRoIG9iamVjdHMgKGxpbWl0 ZWQpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHJldi1saXN0IHdpdGgg b2JqZWN0cyAodG9wbyBvcmRlciknICcKIAlnaXQtcmV2LWxpc3QgLS10b3BvLW9y ZGVyIC0tb2JqZWN0cyBIRUFEID5saXN0ICYmIAogCXRlc3QgLXogYCRzaGExZGlm ZiBsaXN0IHByb3Blcl9vYmplY3RfbGlzdGAKICcKIAotdGVzdF9leHBlY3Rfc3Vj Y2VzcyAndGVzdCByZXYtbGlzdCB3aXRoIG9iamVjdHMgKHVubGltaXRlZCknICcK K3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcmV2LWxpc3Qgd2l0aCBvYmplY3Rz IChubyBvcmRlciknICcKIAlnaXQtcmV2LWxpc3QgLS1vYmplY3RzIEhFQUQgPmxp c3QgJiYgCiAJdGVzdCAteiBgJHNoYTFkaWZmIGxpc3QgcHJvcGVyX29iamVjdF9s aXN0YAogJwogCisjdmVyaWZ5IGFnZSBsaW1pdGluZwordGVzdF9leHBlY3Rfc3Vj Y2VzcyAndGVzdCByZXYtbGlzdCBkYXRlIGxpbWl0aW5nICh0b3BvIG9yZGVyKScg JworCWdpdC1yZXYtbGlzdCAtLXRvcG8tb3JkZXIgLS1tYXgtYWdlPSRtaW5fZGF0 ZSAtLW1pbi1hZ2U9JG1heF9kYXRlIEhFQUQgPmxpc3QgJiYgCisJdGVzdCAteiBg JHNoYTFkaWZmIGxpc3QgcHJvcGVyX2xpc3RfZGF0ZV9saW1pdGVkYAorJworCit0 ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHJldi1saXN0IGRhdGUgbGltaXRpbmcg KG5vIG9yZGVyKScgJworCWdpdC1yZXYtbGlzdCAtLW1heC1hZ2U9JG1pbl9kYXRl IC0tbWluLWFnZT0kbWF4X2RhdGUgSEVBRCA+bGlzdCAmJiAKKwl0ZXN0IC16IGBz aGExZGlmZiBsaXN0IHByb3Blcl9saXN0X2RhdGVfbGltaXRlZGAKKycKKworI2No ZWNrIHBhcnRpYWwgY2FjaGUgc2xpY2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nh dmluZyBvbGQgY2FjaGUgYW5kIGdlbmVyYXRpbmcgcGFydGlhbCBzbGljZScgJwor CWNwICIuZ2l0L3Jldi1jYWNoZS8kY2FjaGVfc2hhMSIgLmdpdC9yZXYtY2FjaGUv Lm9sZCAmJiAKKwlybSAiLmdpdC9yZXYtY2FjaGUvJGNhY2hlX3NoYTEiIC5naXQv cmV2LWNhY2hlL2luZGV4ICYmIAorCisJZ2l0LXJldi1jYWNoZSBhZGQgSEVBRH4y IDI+b3V0cHV0LmVyciAmJiAKKwlncmVwICJmaW5hbCByZXR1cm4gdmFsdWU6IDAi IG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qg d2l0aCB3aG9sbHkgaW50ZXJlc3RpbmcgcGFydGlhbCBzbGljZScgJworCWdpdC1y ZXYtbGlzdCAtLXRvcG8tb3JkZXIgSEVBRCA+bGlzdCAmJgorCXRlc3RfY21wIGxp c3QgcHJvcGVyX2NvbW1pdF9saXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mg J3Jldi1saXN0IHdpdGggcGFydGx5IHVuaW50ZXJlc3RpbmcgcGFydGlhbCBzbGlj ZScgJworCWdpdC1yZXYtbGlzdCAtLXRvcG8tb3JkZXIgSEVBRCAtLW5vdCBIRUFE fjMgPmxpc3QgJiYgCisJdGVzdF9jbXAgbGlzdCBwcm9wZXJfY29tbWl0X2xpc3Rf bGltaXRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCB3aXRo IHdob2xseSB1bmludGVyZXN0aW5nIHBhcnRpYWwgc2xpY2UnICcKKwlnaXQtcmV2 LWxpc3QgLS10b3BvLW9yZGVyIEhFQUQgLS1ub3QgSEVBRH4yID5saXN0ICYmIAor CXRlc3RfY21wIGxpc3QgcHJvcGVyX2NvbW1pdF9saXN0X2xpbWl0ZWQyCisnCisK KyN0cnkgb3V0IGluZGV4IGdlbmVyYXRpb24gYW5kIGZ1c2UgKG5vdGUgdGhhdCAt LWFsbCA9PSBIRUFEIGluIHRoaXMgY2FzZSkKKyNwcm9iYWJseSBzaG91bGQgbWFr ZSBhIHRlc3QgZm9yIHRoYXQgdG9vLi4uCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdt YWtlIGZyZXNoIHNsaWNlJyAnCisJZ2l0LXJldi1jYWNoZSBhZGQgLS1hbGwgLS1m cmVzaCAyPm91dHB1dC5lcnIgJiYgCisJZ3JlcCAiZmluYWwgcmV0dXJuIHZhbHVl OiAwIiBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNr IGR1YWwgc2xpY2VzJyAnCisJZ2l0LXJldi1saXN0IC0tdG9wby1vcmRlciBIRUFE fjIgSEVBRCA+bGlzdCAmJiAKKwl0ZXN0X2NtcCBsaXN0IHByb3Blcl9jb21taXRf bGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWdlbmVyYXRlIGluZGV4 JyAnCisJcm0gLmdpdC9yZXYtY2FjaGUvaW5kZXggJiYgCisJZ2l0LXJldi1jYWNo ZSBpbmRleCAyPm91dHB1dC5lcnIgJiYgCisJZ3JlcCAiZmluYWwgcmV0dXJuIHZh bHVlOiAwIiBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Z1 c2Ugc2xpY2VzJyAnCisJdGVzdCAtZSAuZ2l0L3Jldi1jYWNoZS8ub2xkICYmIAor CWdpdC1yZXYtY2FjaGUgZnVzZSAyPm91dHB1dC5lcnIgJiYgCisJZ3JlcCAiZmlu YWwgcmV0dXJuIHZhbHVlOiAwIiBvdXRwdXQuZXJyICYmIAorCXRlc3RfY21wIC5n aXQvcmV2LWNhY2hlLyRjYWNoZV9zaGExIC5naXQvcmV2LWNhY2hlLy5vbGQKKycK KworI21ha2Ugc3VyZSB3ZSBjYW4gc21vb3RobHkgaGFuZGxlIGNvcnJ1cHRlZCBj YWNoZXMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJ1cHQgc2xpY2UnICcKKwll Y2hvIGJsYSA+LmdpdC9yZXYtY2FjaGUvJGNhY2hlX3NoYTEKKycKKwordGVzdF9l eHBlY3Rfc3VjY2VzcyAndGVzdCByZXYtbGlzdCB0cmF2ZXJzYWwgKGxpbWl0ZWQp IChjb3JydXB0IHNsaWNlKScgJworCWdpdC1yZXYtbGlzdCBIRUFEIC0tbm90IEhF QUR+MyA+bGlzdCAmJiAKKwl0ZXN0IC16IGAkc2hhMWRpZmYgbGlzdCBwcm9wZXJf Y29tbWl0X2xpc3RfbGltaXRlZGAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAn dGVzdCByZXYtbGlzdCB0cmF2ZXJzYWwgKHVubGltaXRlZCkgKGNvcnJ1cHQgc2xp Y2UpJyAnCisJZ2l0LXJldi1saXN0IEhFQUQgPmxpc3QgJiYgCisJdGVzdCAteiBg JHNoYTFkaWZmIGxpc3QgcHJvcGVyX2NvbW1pdF9saXN0YAorJworCit0ZXN0X2V4 cGVjdF9zdWNjZXNzICdjb3JydXB0IGluZGV4JyAnCisJZWNobyBibHUgPi5naXQv cmV2LWNhY2hlL2luZGV4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qg cmV2LWxpc3QgdHJhdmVyc2FsIChsaW1pdGVkKSAoY29ycnVwdCBpbmRleCknICcK KwlnaXQtcmV2LWxpc3QgSEVBRCAtLW5vdCBIRUFEfjMgPmxpc3QgJiYgCisJdGVz dCAteiBgJHNoYTFkaWZmIGxpc3QgcHJvcGVyX2NvbW1pdF9saXN0X2xpbWl0ZWRg CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcmV2LWxpc3QgdHJhdmVy c2FsICh1bmxpbWl0ZWQpIChjb3JydXB0IGluZGV4KScgJworCWdpdC1yZXYtbGlz dCBIRUFEID5saXN0ICYmIAorCXRlc3QgLXogYCRzaGExZGlmZiBsaXN0IHByb3Bl cl9jb21taXRfbGlzdGAKKycKKworI3RvZG86IHRlc3QgLS1pZ25vcmUtc2l6ZSBp biBmdXNlCisKIHRlc3RfZG9uZQogCi0tIAp0ZzogKGRlOWE0NjYuLikgdC9yZXZj YWNoZS9pbnRlZ3JhdGlvbiAoZGVwZW5kcyBvbjogdC9yZXZjYWNoZS9taXNjKQo= ------------alP1HPk5fAN0IoTXiDdGJb--