From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([69.77.167.62] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from <gentoo-soc+bounces-305-garchives=archives.gentoo.org@lists.gentoo.org>) id 1KW0Yd-0004qf-Pi for garchives@archives.gentoo.org; Thu, 21 Aug 2008 03:09:58 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 58708E0311; Thu, 21 Aug 2008 03:09:55 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id B7F53E0311 for <gentoo-soc@lists.gentoo.org>; Thu, 21 Aug 2008 03:09:54 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp.gentoo.org (Postfix) with ESMTP id EB54865095 for <gentoo-soc@lists.gentoo.org>; Thu, 21 Aug 2008 03:09:53 +0000 (UTC) X-Virus-Scanned: amavisd-new at gentoo.org X-Spam-Score: -1.529 X-Spam-Level: X-Spam-Status: No, score=-1.529 required=5.5 tests=[AWL=1.070, BAYES_00=-2.599] Received: from smtp.gentoo.org ([127.0.0.1]) by localhost (smtp.gentoo.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ap86e2IgsGIn for <gentoo-soc@lists.gentoo.org>; Thu, 21 Aug 2008 03:09:46 +0000 (UTC) Received: from an-out-0708.google.com (an-out-0708.google.com [209.85.132.241]) by smtp.gentoo.org (Postfix) with ESMTP id 7A21F66506 for <gentoo-soc@gentoo.org>; Thu, 21 Aug 2008 03:09:46 +0000 (UTC) Received: by an-out-0708.google.com with SMTP id c3so138748ana.43 for <gentoo-soc@gentoo.org>; Wed, 20 Aug 2008 20:09:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:sender :to:subject:cc:mime-version:content-type:x-google-sender-auth; bh=H4ZxrvH9o4rC1dIZz4J5mLm5JrE4lBAD3zoGqOUjQhE=; b=Vng5newmTK1Kc73pmwYfZVN4DMRoNCDTVfpU2KCN7JafigEGAUNX2L/0n3CE/I9ZWm 5mJL2o2R2dwC1s6JIBJ1CwHuHV0cezkqyAjn9769DVZmppddijpv+u2q246uhbY35YNY zQNPnzPIxaUGsE66USA8qL2+F4K+FZ5rkPGQw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:sender:to:subject:cc:mime-version:content-type :x-google-sender-auth; b=LNuZ+1gMOUFTEAUnHiv275b8UFunDc6IsAMs5dkNfhazOOH6k77kO3BgPH0wKrZXVJ dxhRVJYYb/qEsEfSma3WzOuGJNx5NGVLHWNQ/4g/2u3PAJQJFpkqkKMZfPCecq7h/v7D bCAqIKl2Jj9hbBSN4uVACXaitmwj87j30lD84= Received: by 10.100.247.14 with SMTP id u14mr1193165anh.89.1219288185503; Wed, 20 Aug 2008 20:09:45 -0700 (PDT) Received: by 10.100.93.4 with HTTP; Wed, 20 Aug 2008 20:09:45 -0700 (PDT) Message-ID: <c4cdc1420808202009g121e10f9m5e79f741ab8d3918@mail.gmail.com> Date: Wed, 20 Aug 2008 22:09:45 -0500 From: "Lucian Poston" <lucianposton@gmail.com> Sender: lucian.poston@gmail.com To: gentoo-soc@lists.gentoo.org Subject: [gentoo-soc] Progress Report - Revdep-rebuild Cc: "Marius Mauch" <google-soc@genone.de> Precedence: bulk List-Post: <mailto:gentoo-soc@lists.gentoo.org> List-Help: <mailto:gentoo-soc+help@lists.gentoo.org> List-Unsubscribe: <mailto:gentoo-soc+unsubscribe@lists.gentoo.org> List-Subscribe: <mailto:gentoo-soc+subscribe@lists.gentoo.org> List-Id: Gentoo Linux mail <gentoo-soc.gentoo.org> X-BeenThere: gentoo-soc@lists.gentoo.org Reply-to: gentoo-soc@lists.gentoo.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_54009_27571114.1219288185481" X-Google-Sender-Auth: a9ba5947eb75e545 X-Archives-Salt: 42567ce1-5b8a-4321-b340-e0631af01d70 X-Archives-Hash: 0c8488708530cc97b807e8b0225dea7c ------=_Part_54009_27571114.1219288185481 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline Last week's work was interesting. As mentioned in the last report, I significantly modified LinkageMap to utilize path's inodes rather os.path.realpath for path comparisons -- basically, reducing the amount of filesystem access. It turned out to improve its efficiency, which in turn improved the efficiency of MisingLibraryConsumerSet as it relies on LinkageMap.listBrokenBinaries. I previously mentioned there would be problems in cases where LinkageMap is rebuilt when files have been removed but the /var/db/pkg database has not been updated accordingly. I got around this by falling back on os.path.realpath for missing files (or more generally, when os.stat fails). For future endeavors, I will explore adding a new entry into /var/db/pkg to catalog libtool libraries (similar in nature to NEEDED.ELF.2). Currently, the contents of all packages are searched in order to find libtool libraries, so having them available in the vdb_path will speed things up. Here are the known problems: 1) I've noticed that on my older systems, I had to re-emerge several packages, which appeared broken due older/incomplete NEEDED.ELF.2 entries. They appeared to be missing entries for various files. I suppose this is due to modifications to the scripts that generate these files as those systems had been using older versions of portage. Everything worked fine after updating these files. 2) In certain situations, packages may be ordered such that a second emerge is necessary. This is due to dependency neglection in portage. [1] The flag --complete-graph can be used to properly order packages in these situations. 3) In the last report [2], I mentioned the functionality to emerge the set of packages containing consumers of libraries matched by a regular expression. The libraries returned by LinkageMap.listLibraryObjects() are matched against that regular expression. Consequently, only files cataloged in LinkageMap will be considered. Since symlinks aren't entered into NEEDED.ELF.2 files, LinkageMap doesn't catalog them. So if /usr/lib were a symlink to /usr/lib64 and the regular expression were /usr/lib/libfoo*, nothing would be matched (libfoo would work however). This can be fixed by adding symlink entries into LinkageMap, searching CONTENTS files for symlinks, or utilizing the find utility. I'll decide to search CONTENTS files to resolve this. 4) As masks are used to filter out specially evaluated binaries, there is always the potential for false positives until the correct masks are added. Attached are three patches[3] for portage-2.2_rc8 for the files: /usr/lib/portage/pym/portage/dbapi/vartree.py /usr/lib/portage/pym/portage/sets/libs.py /usr/share/portage/config/sets.conf Lucian [1] http://dev.gentoo.org/~zmedico/portage/doc/portage.html#dependency-resolution-package-modeling-dependency-neglection [2] http://archives.gentoo.org/gentoo-soc/msg_b8a874ceac9b58c1badf86f3eaff4803.xml [3] http://repo.or.cz/w/revdep-rebuild-reimplementation.git?a=shortlog;h=refs/heads/rc3 ------=_Part_54009_27571114.1219288185481 Content-Type: application/octet-stream; name=libs.py.2.2_rc8.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fk4q1mlz0 Content-Disposition: attachment; filename=libs.py.2.2_rc8.patch LS0tIGxpYnMucHkuMi4yX3JjOAkyMDA4LTA4LTE0IDE1OjQ1OjMwLjAwMDAwMDAwMCAtMDUwMAor KysgcHltL3BvcnRhZ2Uvc2V0cy9saWJzLnB5CTIwMDgtMDgtMTggMDQ6MjU6MzIuMDAwMDAwMDAw IC0wNTAwCkBAIC0yLDEwICsyLDE4IEBACiAjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIKICMgJElkOiBsaWJzLnB5IDEwNzU5 IDIwMDgtMDYtMjIgMDQ6MDQ6NTBaIHptZWRpY28gJAogCitpbXBvcnQgb3MKK2ltcG9ydCByZQor aW1wb3J0IHRpbWUKK2Zyb20gcG9ydGFnZS5kYmFwaS52YXJ0cmVlIGltcG9ydCBkYmxpbmsKK2Zy b20gcG9ydGFnZS52ZXJzaW9ucyBpbXBvcnQgY2F0c3BsaXQKIGZyb20gcG9ydGFnZS5zZXRzLmJh c2UgaW1wb3J0IFBhY2thZ2VTZXQKIGZyb20gcG9ydGFnZS5zZXRzIGltcG9ydCBnZXRfYm9vbGVh bgogZnJvbSBwb3J0YWdlLnZlcnNpb25zIGltcG9ydCBjYXRwa2dzcGxpdAogCitfX2FsbF9fID0g WyJMaWJyYXJ5Q29uc3VtZXJTZXQiLCAiUHJlc2VydmVkTGlicmFyeUNvbnN1bWVyU2V0IiwKKwkJ Ik1pc3NpbmdMaWJyYXJ5Q29uc3VtZXJTZXQiXQorCiBjbGFzcyBMaWJyYXJ5Q29uc3VtZXJTZXQo UGFja2FnZVNldCk6CiAJX29wZXJhdGlvbnMgPSBbIm1lcmdlIiwgInVubWVyZ2UiXQogCkBAIC00 NSwzICs1MywzMjQgQEAKIAkJZGVidWcgPSBnZXRfYm9vbGVhbihvcHRpb25zLCAiZGVidWciLCBG YWxzZSkKIAkJcmV0dXJuIFByZXNlcnZlZExpYnJhcnlDb25zdW1lclNldCh0cmVlc1sidmFydHJl ZSJdLmRiYXBpLCBkZWJ1ZykKIAlzaW5nbGVCdWlsZGVyID0gY2xhc3NtZXRob2Qoc2luZ2xlQnVp bGRlcikKKworCitjbGFzcyBNaXNzaW5nTGlicmFyeUNvbnN1bWVyU2V0KExpYnJhcnlDb25zdW1l clNldCk6CisKKwkiIiIKKwlUaGlzIGNsYXNzIGlzIHRoZSBzZXQgb2YgcGFja2FnZXMgdG8gZW1l cmdlIGR1ZSB0byBtaXNzaW5nIGxpYnJhcmllcy4KKworCVRoaXMgY2xhc3Mgc2NhbnMgYmluYXJp ZXMgZm9yIG1pc3NpbmcgYW5kIGJyb2tlbiBzaGFyZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMKKwlh bmQgZml4ZXMgdGhlbSBieSBlbWVyZ2luZyB0aGUgcGFja2FnZXMgY29udGFpbmluZyB0aGUgYnJv a2VuIGJpbmFyaWVzLgorCisJVGhlIHVzZXIgbWF5IGFsc28gZW1lcmdlIHBhY2thZ2VzIGNvbnRh aW5pbmcgY29uc3VtZXJzIG9mIHNwZWNpZmllZAorCWxpYnJhcmllcyBieSBwYXNzaW5nIHRoZSBu YW1lIG9yIGEgcHl0aG9uIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aHJvdWdoIHRoZQorCWVudmlyb25t ZW50IHZhcmlhYmxlLCBMSUJSQVJZLiAgRHVlIHRvIGEgbGltaXRhdGlvbiBpbiBwYXNzaW5nIGZs YWdzIHRvCisJcGFja2FnZSBzZXRzIHRocm91Z2ggdGhlIHBvcnRhZ2UgY2xpLCB0aGUgdXNlciBt dXN0IHNldCBlbnZpcm9ubWVudAorCXZhcmlhYmxlcyB0byBtb2RpZnkgdGhlIGJlaGF2aW91ciBv ZiB0aGlzIHBhY2thZ2Ugc2V0LiAgU28gaWYgdGhlCisJZW52aXJvbm1lbnQgdmFyaWFibGUgTElC UkFSWSBpcyBzZXQsIHRoZSBiZWhhdmlvdXIgb2YgdGhpcyBzZXQgY2hhbmdlcy4KKworCSIiIgor CisJZGVzY3JpcHRpb24gPSAiVGhlIHNldCBvZiBwYWNrYWdlcyB0byBlbWVyZ2UgZHVlIHRvIG1p c3NpbmcgbGlicmFyaWVzLiIKKwlfb3BlcmF0aW9ucyA9IFsibWVyZ2UiXQorCisJZGVmIF9faW5p dF9fKHNlbGYsIHZhcmRiYXBpLCBkZWJ1Zz1GYWxzZSk6CisJCXN1cGVyKE1pc3NpbmdMaWJyYXJ5 Q29uc3VtZXJTZXQsIHNlbGYpLl9faW5pdF9fKHZhcmRiYXBpLCBkZWJ1ZykKKwkJIyBGSVhNRSBT aW5jZSB3ZSBjYW4ndCBnZXQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmcm9tIHRoZSB1c2VyLCB0 aGUKKwkJIyBzb25hbWUgY2FuIGJlIHBhc3NlZCB0aHJvdWdoIGFuIGVudmlyb25tZW50IHZhcmlh YmxlIGZvciBub3cuCisJCXNlbGYubGlicmFyeVJlZ2V4cCA9IG9zLmdldGVudigiTElCUkFSWSIp CisJCXNlbGYucm9vdCA9IHNlbGYuZGJhcGkucm9vdAorCQlzZWxmLmxpbmttYXAgPSBzZWxmLmRi YXBpLmxpbmttYXAKKworCWRlZiBsb2FkKHNlbGYpOgorCQkjIGJyb2tlbkRlcGVuZGVuY2llczog b2JqZWN0IC0+IHNldC1vZi11bnNhdGlzZmllZC1kZXBlbmRlbmNpZXMsIHdoZXJlCisJCSMgb2Jq ZWN0IGlzIGFuIGluc3RhbGxlZCBiaW5hcnkvbGlicmFyeSBhbmQKKwkJIyBzZXQtb2YtdW5zYXRp c2ZpZWQtZGVwZW5kZW5jaWVzIGFyZSBzb25hbWVzIG9yIGxpYnJhcmllcyByZXF1aXJlZCBieQor CQkjIHRoZSBvYmplY3QgYnV0IGhhdmUgbm8gY29ycmVzcG9uZGluZyBsaWJyYXJpZXMgdG8gZnVs ZmlsbCB0aGUKKwkJIyBkZXBlbmRlbmN5LgorCQlicm9rZW5EZXBlbmRlbmNpZXMgPSB7fQorCQlh dG9tcyA9IHNldCgpCisKKwkJIyBJZiB0aGUgTElCUkFSWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBp cyBzZXQsIHRoZSByZXN1bHRpbmcgcGFja2FnZSBzZXQKKwkJIyB3aWxsIGJlIHBhY2thZ2VzIGNv bnRhaW5pbmcgY29uc3VtZXJzIG9mIHRoZSBsaWJyYXJpZXMgbWF0Y2hlZCBieSB0aGUKKwkJIyB2 YXJpYWJsZS4KKwkJaWYgc2VsZi5saWJyYXJ5UmVnZXhwOgorCQkJYXRvbXMgPSBzZWxmLmZpbmRB dG9tc09mTGlicmFyeUNvbnN1bWVycyhzZWxmLmxpYnJhcnlSZWdleHApCisJCQlzZWxmLl9zZXRB dG9tcyhhdG9tcykKKwkJCWlmIHNlbGYuZGVidWc6CisJCQkJcHJpbnQKKwkJCQlwcmludCAiYXRv bXMgdG8gYmUgZW1lcmdlZDoiCisJCQkJZm9yIHggaW4gc29ydGVkKGF0b21zKToKKwkJCQkJcHJp bnQgeAorCQkJcmV0dXJuCisKKwkJIyBSZWJ1aWxkIExpbmthZ2VNYXAuCisJCWlmIHNlbGYuZGVi dWc6CisJCQl0aW1lU3RhcnQgPSB0aW1lLnRpbWUoKQorCQlzZWxmLmxpbmttYXAucmVidWlsZCgp CisJCWlmIHNlbGYuZGVidWc6CisJCQl0aW1lUmVidWlsZCA9IHRpbWUudGltZSgpIC0gdGltZVN0 YXJ0CisKKwkJIyBHZXQgdGhlIGxpc3Qgb2YgYnJva2VuIGRlcGVuZGVuY2llcyBmcm9tIExpbmth Z2VNYXAuCisJCWlmIHNlbGYuZGVidWc6CisJCQl0aW1lU3RhcnQgPSB0aW1lLnRpbWUoKQorCQli cm9rZW5EZXBlbmRlbmNpZXMgPSBzZWxmLmxpbmttYXAubGlzdEJyb2tlbkJpbmFyaWVzKHNlbGYu ZGVidWcpCisJCWlmIHNlbGYuZGVidWc6CisJCQl0aW1lTGlzdEJyb2tlbkJpbmFyaWVzID0gdGlt ZS50aW1lKCkgLSB0aW1lU3RhcnQKKworCQkjIEFkZCBicm9rZW4gbGlidG9vbCBsaWJyYXJpZXMg aW50byB0aGUgYnJva2VuRGVwZW5kZW5jaWVzIGRpY3QuCisJCWlmIHNlbGYuZGVidWc6CisJCQl0 aW1lU3RhcnQgPSB0aW1lLnRpbWUoKQorCQlicm9rZW5EZXBlbmRlbmNpZXMudXBkYXRlKHNlbGYu bGlzdEJyb2tlbkxpYnRvb2xMaWJyYXJpZXMoKSkKKwkJaWYgc2VsZi5kZWJ1ZzoKKwkJCXRpbWVM aWJ0b29sID0gdGltZS50aW1lKCkgLSB0aW1lU3RhcnQKKworCQkjIEZJWE1FIFRvbyBtYW55IGF0 b21zIG1heSBiZSBlbWVyZ2VkIGJlY2F1c2UgbGlicmFyaWVzIGluIGJpbmFyeQorCQkjIHBhY2th Z2VzIGFyZSBub3QgYmVpbmcgaGFuZGxlZCBwcm9wZXJseSBlZyBvcGVub2ZmaWNlLCBudmlkaWEt ZHJpdmVycywKKwkJIyBzdW4tamRrLiAgQ2VydGFpbiBiaW5hcmllcyBhcmUgcnVuIGluIGFuIGVu dmlyb25tZW50IHdoZXJlIGFkZGl0aW9uYWwKKwkJIyBsaWJyYXJ5IHBhdGhzIGFyZSBhZGRlZCB2 aWEgTERfTElCUkFSWV9QQVRILiAgU2luY2UgdGhlc2UgcGF0aHMgYXJlbid0CisJCSMgcmVnaXN0 ZXJlZCBpbiBfb2JqX3Byb3BlcnRpZXMsIHRoZXkgYXBwZWFyIGJyb2tlbiAoYW5kIGFyZSBpZiBu b3QgcnVuCisJCSMgaW4gdGhlIGNvcnJlY3QgZW52aXJvbm1lbnQpLiAgSSBoYXZlIHRvIGRldGVy bWluZSBpZiBsaWJyYXJpZXMgYW5kIGxpYgorCQkjIHBhdGhzIHNob3VsZCBiZSBtYXNrZWQgdXNp bmcgL2V0Yy9yZXZkZXAtcmVidWlsZC8qIGFzIGRvbmUgaW4KKwkJIyByZXZkZXAtcmVidWlsZCBv ciBpZiB0aGVyZSBpcyBhIGJldHRlciB3YXkgdG8gaWRlbnRpZnkgYW5kIGRlYWwgd2l0aAorCQkj IHRoZXNlIHByb2JsZW1hdGljIHBhY2thZ2VzIChvciBpZiBzb21ldGhpbmcgZW50aXJlbHkgZGlm ZmVyZW50IHNob3VsZAorCQkjIGJlIGRvbmUpLiAgRm9yIG5vdyBkaXJlY3RvcnkgYW5kIGxpYnJh cnkgbWFza3MgYXJlIHVzZWQuCisKKwkJIyBSZW1vdmUgbWFza2VkIGRpcmVjdG9yaWVzIGFuZCBs aWJyYXJpZXMuCisJCWlmIHNlbGYuZGVidWc6CisJCQl0aW1lU3RhcnQgPSB0aW1lLnRpbWUoKQor CQlpZiBicm9rZW5EZXBlbmRlbmNpZXM6CisJCQlicm9rZW5EZXBlbmRlbmNpZXMgPSBzZWxmLnJl bW92ZU1hc2tlZERlcGVuZGVuY2llcyhicm9rZW5EZXBlbmRlbmNpZXMpCisJCWlmIHNlbGYuZGVi dWc6CisJCQl0aW1lTWFzayA9IHRpbWUudGltZSgpIC0gdGltZVN0YXJ0CisKKwkJIyBEZXRlcm1p bmUgYXRvbXMgdG8gZW1lcmdlIGJhc2VkIG9uIGJyb2tlbiBvYmplY3RzIGluCisJCSMgYnJva2Vu RGVwZW5kZW5jaWVzLgorCQlpZiBzZWxmLmRlYnVnOgorCQkJdGltZVN0YXJ0ID0gdGltZS50aW1l KCkKKwkJaWYgYnJva2VuRGVwZW5kZW5jaWVzOgorCQkJYXRvbXMgPSBzZWxmLm1hcFBhdGhzVG9B dG9tcyhzZXQoYnJva2VuRGVwZW5kZW5jaWVzLmtleXMoKSkpCisJCWlmIHNlbGYuZGVidWc6CisJ CQl0aW1lQXRvbXMgPSB0aW1lLnRpbWUoKSAtIHRpbWVTdGFydAorCisJCSMgRGVidWcgb3V0cHV0 CisJCWlmIHNlbGYuZGVidWc6CisJCQlwcmludAorCQkJcHJpbnQgbGVuKGJyb2tlbkRlcGVuZGVu Y2llcyksICJicm9rZW5EZXBlbmRlbmNpZXM6IgorCQkJZm9yIHggaW4gc29ydGVkKGJyb2tlbkRl cGVuZGVuY2llcy5rZXlzKCkpOgorCQkJCXByaW50CisJCQkJcHJpbnQgeCwgIi0+IgorCQkJCXBy aW50ICdcdCcsIGJyb2tlbkRlcGVuZGVuY2llc1t4XQorCQkJcHJpbnQKKwkJCXByaW50ICJhdG9t cyB0byBiZSBlbWVyZ2VkOiIKKwkJCWZvciB4IGluIHNvcnRlZChhdG9tcyk6CisJCQkJcHJpbnQg eAorCQkJcHJpbnQKKwkJCXByaW50ICJSZWJ1aWxkIHRpbWU6IiwgdGltZVJlYnVpbGQKKwkJCXBy aW50ICJCcm9rZW4gYmluYXJpZXMgdGltZToiLCB0aW1lTGlzdEJyb2tlbkJpbmFyaWVzCisJCQlw cmludCAiQnJva2VuIGxpYnRvb2wgdGltZToiLCB0aW1lTGlidG9vbAorCQkJcHJpbnQgIlJlbW92 ZSBtYXNrIHRpbWU6IiwgdGltZU1hc2sKKwkJCXByaW50ICJtYXBQYXRoc1RvQXRvbXMgdGltZToi LCB0aW1lQXRvbXMKKwkJCXByaW50CisKKwkJc2VsZi5fc2V0QXRvbXMoYXRvbXMpCisKKwlkZWYg cmVtb3ZlTWFza2VkRGVwZW5kZW5jaWVzKHNlbGYsIGRlcGVuZGVuY2llcyk6CisJCSIiIgorCQlS ZW1vdmUgYWxsIG1hc2tlZCBkZXBlbmRlbmNpZXMgYW5kIHJldHVybiB0aGUgdXBkYXRlZCBtYXBw aW5nLgorCisJCUBwYXJhbSBkZXBlbmRlbmNpZXM6IGRlcGVuZGVuY2llcyBmcm9tIHdoaWNoIHRv IHJlbW92ZWQgbWFza2VkCisJCQlkZXBlbmRlbmNpZXMKKwkJQHR5cGUgZGVwZW5kZW5jaWVzOiBk aWN0IChleGFtcGxlOiB7Jy91c3IvYmluL2Zvbyc6IHNldChbJ2xpYmZvby5zbyddKX0pCisJCUBy dHlwZTogZGljdAorCQlAcmV0dXJuOiBzaGFsbG93IGNvcHkgb2YgZGVwZW5kZW5jaWVzIHdpdGgg bWFza2VkIGl0ZW1zIHJlbW92ZWQKKworCQkiIiIKKwkJclZhbHVlID0gZGVwZW5kZW5jaWVzLmNv cHkoKQorCQlkaXJNYXNrLCBsaWJNYXNrID0gc2VsZi5nZXREZXBlbmRlbmN5TWFza3MoKQorCisJ CSMgUmVtb3ZlIGVudHJpZXMgdGhhdCBhcmUgbWFza2VkLgorCQlpZiBkaXJNYXNrIG9yIGxpYk1h c2s6CisJCQlpZiBzZWxmLmRlYnVnOgorCQkJCXByaW50ICJUaGUgZm9sbG93aW5nIGFyZSBtYXNr ZWQ6IgorCQkJZm9yIGJpbmFyeSwgbGliU2V0IGluIHJWYWx1ZS5pdGVtcygpOgorCQkJCWZvciBk aXJlY3RvcnkgaW4gZGlyTWFzazoKKwkJCQkJIyBDaGVjayBpZiB0aGUgYnJva2VuIGJpbmFyeSBs aWVzIHdpdGhpbiB0aGUgbWFza2VkIGRpcmVjdG9yeSBvcgorCQkJCQkjIGl0cyBzdWJkaXJlY3Rv cmllcy4KKwkJCQkJIyBYWFggUGVyaGFwcyB3ZSBzaG91bGQgYWxsb3cgcmVnZXhwcyBhcyBtYXNr cy4KKwkJCQkJaWYgYmluYXJ5LnN0YXJ0c3dpdGgoZGlyZWN0b3J5KToKKwkJCQkJCWRlbCByVmFs dWVbYmluYXJ5XQorCQkJCQkJaWYgc2VsZi5kZWJ1ZzoKKwkJCQkJCQlwcmludCAiZGlyTWFzazoi LGJpbmFyeQorCQkJCQkJYnJlYWsKKwkJCQkjIENoZWNrIGlmIGFsbCB0aGUgcmVxdWlyZWQgbGli cmFyaWVzIGFyZSBtYXNrZWQuCisJCQkJaWYgYmluYXJ5IGluIHJWYWx1ZSBhbmQgbGliU2V0Lmlz c3Vic2V0KGxpYk1hc2spOgorCQkJCQlkZWwgclZhbHVlW2JpbmFyeV0KKwkJCQkJaWYgc2VsZi5k ZWJ1ZzoKKwkJCQkJCXByaW50ICJsaWJNYXNrOiIsIGJpbmFyeSwgbGliU2V0ICYgbGliTWFzawor CisJCWlmIHNlbGYuZGVidWc6CisJCQlwcmludAorCQkJcHJpbnQgIkRpcmVjdG9yeSBtYXNrOiIs IGRpck1hc2sKKwkJCXByaW50CisJCQlwcmludCAiTGlicmFyeSBtYXNrOiIsIGxpYk1hc2sKKwor CQlyZXR1cm4gclZhbHVlCisKKwlkZWYgZ2V0RGVwZW5kZW5jeU1hc2tzKHNlbGYpOgorCQkiIiIK KwkJUmV0dXJuIGFsbCBkZXBlbmRlbmN5IG1hc2tzIGFzIGEgdHVwbGUuCisKKwkJQHJ0eXBlOiAy LXR1cGxlIG9mIHNldHMgb2Ygc3RyaW5ncworCQlAcmV0dXJuOiAyLXR1cGxlIGluIHdoaWNoIHRo ZSBmaXJzdCBjb21wb25lbnQgaXMgYSBzZXQgb2YgZGlyZWN0b3J5CisJCQltYXNrcyBhbmQgdGhl IHNlY29uZCBjb21wb25lbnQgaXMgYSBzZXQgb2YgbGlicmFyeSBtYXNrcworCisJCSIiIgorCQlk aXJNYXNrID0gc2V0KCkKKwkJbGliTWFzayA9IHNldCgpCisJCV9kaXJNYXNrX3JlID0gcmUuY29t cGlsZShyJ1NFQVJDSF9ESVJTX01BU0tccyo9XHMqIihbXiJdKikiJykKKwkJX2xpYk1hc2tfcmUg PSByZS5jb21waWxlKHInTERfTElCUkFSWV9NQVNLXHMqPVxzKiIoW14iXSopIicpCisJCWxpbmVz ID0gW10KKworCQkjIFJlYWRzIHRoZSBjb250ZW50cyBvZiAvZXRjL3JldmRlcC1yZWJ1aWxkLyoK KwkJbGliTWFza0RpciA9IG9zLnBhdGguam9pbihzZWxmLnJvb3QsICJldGMiLCAicmV2ZGVwLXJl YnVpbGQiKQorCQlpZiBvcy5wYXRoLmV4aXN0cyhsaWJNYXNrRGlyKToKKwkJCWZvciBmaWxlIGlu IG9zLmxpc3RkaXIobGliTWFza0Rpcik6CisJCQkJdHJ5OgorCQkJCQlmID0gb3Blbihvcy5wYXRo LmpvaW4obGliTWFza0RpciwgZmlsZSksICJyIikKKwkJCQkJdHJ5OgorCQkJCQkJbGluZXMuZXh0 ZW5kKGYucmVhZGxpbmVzKCkpCisJCQkJCWZpbmFsbHk6CisJCQkJCQlmLmNsb3NlKCkKKwkJCQll eGNlcHQgSU9FcnJvcjogIyBPU0Vycm9yPworCQkJCQljb250aW51ZQorCQkJIyBUaGUgZm9sbG93 aW5nIHBhcnNlcyBTRUFSQ0hfRElSU19NQVNLIGFuZCBMRF9MSUJSQVJZX01BU0sgdmFyaWFibGVz CisJCQkjIGZyb20gL2V0Yy9yZXZkZXAtcmVidWlsZC8qCisJCQlmb3IgbGluZSBpbiBsaW5lczoK KwkJCQltYXRjaERpciA9IF9kaXJNYXNrX3JlLm1hdGNoKGxpbmUpCisJCQkJbWF0Y2hMaWIgPSBf bGliTWFza19yZS5tYXRjaChsaW5lKQorCQkJCWlmIG1hdGNoRGlyOgorCQkJCQlkaXJNYXNrLnVw ZGF0ZShzZXQobWF0Y2hEaXIuZ3JvdXAoMSkuc3BsaXQoKSkpCisJCQkJaWYgbWF0Y2hMaWI6CisJ CQkJCWxpYk1hc2sudXBkYXRlKHNldChtYXRjaExpYi5ncm91cCgxKS5zcGxpdCgpKSkKKworCQkj IFRoZXNlIGRpcmVjdG9yaWVzIGNvbnRhaW4gc3BlY2lhbGx5IGV2YWx1YXRlZCBsaWJyYXJpZXMu CisJCSMgYXBwLWVtdWxhdGlvbi92bXdhcmUtd29ya3N0YXRpb24tNi4wLjEuNTUwMTcKKwkJZGly TWFzay5hZGQoJy9vcHQvdm13YXJlL3dvcmtzdGF0aW9uL2xpYicpCisJCSMgYXBwLWVtdWxhdGlv bi92bXdhcmUtc2VydmVyLWNvbnNvbGUtMS4wLjYuOTE4OTEKKwkJZGlyTWFzay5hZGQoJy9vcHQv dm13YXJlL3NlcnZlci9jb25zb2xlL2xpYicpCisJCSMgd3d3LWNsaWVudC9tb3ppbGxhLWZpcmVm b3gtMi4wLjAuMTUKKwkJZGlyTWFzay5hZGQoJy91c3IvbGliL21vemlsbGEtZmlyZWZveC9wbHVn aW5zJykKKwkJZGlyTWFzay5hZGQoJy91c3IvbGliNjQvbW96aWxsYS1maXJlZm94L3BsdWdpbnMn KQorCQkjIGFwcC1vZmZpY2Uvb3Blbm9mZmljZS0yLjQuMQorCQlkaXJNYXNrLmFkZCgnL29wdC9P cGVuT2ZmaWNlJykKKwkJZGlyTWFzay5hZGQoJy91c3IvbGliL29wZW5vZmZpY2UnKQorCQkjIGRl di1saWJzL2xpYm1peC0yLjA1ICBsaWJtaXguc28gaXMgbWlzc2luZyBzb25hbWUgZW50cnkKKwkJ bGliTWFzay5hZGQoJ2xpYm1peC5zbycpCisJCSMgYXBwLWFjY2Vzc2liaWxpdHkvc3BlZWNoLXRv b2xzLTEuMi45Nl9iZXRhICBtaXNzaW5nIHNvbmFtZXMKKwkJbGliTWFzay5hZGQoJ2xpYmVzdG9v bHMuc28nKQorCQlsaWJNYXNrLmFkZCgnbGliZXN0YmFzZS5zbycpCisJCWxpYk1hc2suYWRkKCds aWJlc3RzdHJpbmcuc28nKQorCQkjIGFwcC1lbXVsYXRpb24vZW11bC1saW51eC14ODYtc291bmRs aWJzLTIwMDgwNDE4CisJCWRpck1hc2suYWRkKCcvdXNyL2tkZS8zLjUvbGliMzInKQorCisJCXJl dHVybiAoZGlyTWFzaywgbGliTWFzaykKKworCWRlZiBsaXN0QnJva2VuTGlidG9vbExpYnJhcmll cyhzZWxmKToKKwkJIiIiCisJCUZpbmQgYnJva2VuIGxpYnRvb2wgbGlicmFyaWVzIGFuZCB0aGVp ciBtaXNzaW5nIGRlcGVuZGVuY2llcy4KKworCQlAcnR5cGU6IGRpY3QgKGV4YW1wbGU6IHsnL2xp Yi9saWJmb28ubGEnOiBzZXQoWycvbGliL2xpYmJhci5sYSddKX0pCisJCUByZXR1cm46IFRoZSBy ZXR1cm4gdmFsdWUgaXMgYSBsaWJyYXJ5IC0+IHNldC1vZi1saWJyYXJpZXMgbWFwcGluZywgd2hl cmUKKwkJCWxpYnJhcnkgaXMgYSBicm9rZW4gbGlicmFyeSBhbmQgdGhlIHNldCBjb25zaXN0cyBv ZiBkZXBlbmRlbmNpZXMKKwkJCW5lZWRlZCBieSBsaWJyYXJ5IHRoYXQgZG8gbm90IGV4aXN0IG9u IHRoZSBmaWxlc3lzdGVtLgorCisJCSIiIgorCQlyVmFsdWUgPSB7fQorCQlsaW5lcyA9IFtdCisJ CWRlcGVuZGVuY2llcyA9IFtdCisJCV9sYV9yZSA9IHJlLmNvbXBpbGUociIuKlwubGEkIikKKwkJ X2RlcGVuZGVuY3lfbGlic19yZSA9IHJlLmNvbXBpbGUociJeZGVwZW5kZW5jeV9saWJzXHMqPVxz KicoLiopJyIpCisKKwkJIyBMb29wIG92ZXIgdGhlIGNvbnRlbnRzIG9mIGFsbCBwYWNrYWdlcy4K KwkJZm9yIGNwdiBpbiBzZWxmLmRiYXBpLmNwdl9hbGwoKToKKwkJCW15c3BsaXQgPSBjYXRzcGxp dChjcHYpCisJCQlsaW5rID0gZGJsaW5rKG15c3BsaXRbMF0sIG15c3BsaXRbMV0sIG15cm9vdD1z ZWxmLmRiYXBpLnJvb3QsIFwKKwkJCQkJbXlzZXR0aW5ncz1zZWxmLmRiYXBpLnNldHRpbmdzLCB0 cmVldHlwZT0ndmFydHJlZScsIFwKKwkJCQkJdmFydHJlZT1zZWxmLmRiYXBpLnZhcnRyZWUpCisJ CQlmb3IgZmlsZSBpbiBsaW5rLmdldGNvbnRlbnRzKCk6CisJCQkJIyBDaGVjayBpZiB0aGUgZmls ZSBlbmRzIHdpdGggJy5sYScuCisJCQkJbWF0Y2hMaWIgPSBfbGFfcmUubWF0Y2goZmlsZSkKKwkJ CQlpZiBtYXRjaExpYjoKKwkJCQkJIyBSZWFkIHRoZSBsaW5lcyBmcm9tIHRoZSBsaWJyYXJ5Lgor CQkJCQlsaW5lcyA9IFtdCisJCQkJCXRyeToKKwkJCQkJCWYgPSBvcGVuKGZpbGUsICJyIikKKwkJ CQkJCXRyeToKKwkJCQkJCQlsaW5lcy5leHRlbmQoZi5yZWFkbGluZXMoKSkKKwkJCQkJCWZpbmFs bHk6CisJCQkJCQkJZi5jbG9zZSgpCisJCQkJCWV4Y2VwdCBJT0Vycm9yOgorCQkJCQkJY29udGlu dWUKKwkJCQkJIyBGaW5kIHRoZSBsaW5lIGxpc3RpbmcgdGhlIGRlcGVuZGVuY2llcy4KKwkJCQkJ Zm9yIGxpbmUgaW4gbGluZXM6CisJCQkJCQltYXRjaExpbmUgPSBfZGVwZW5kZW5jeV9saWJzX3Jl Lm1hdGNoKGxpbmUpCisJCQkJCQlpZiBtYXRjaExpbmU6CisJCQkJCQkJZGVwZW5kZW5jaWVzID0g bWF0Y2hMaW5lLmdyb3VwKDEpLnNwbGl0KCkKKwkJCQkJCQkjIEZvciBlYWNoIGRlcGVuZGVuY3kg dGhhdCBpcyBhIHBhdGhuYW1lIChiZWdpbnMgd2l0aAorCQkJCQkJCSMgb3Muc2VwKSwgY2hlY2sg dGhhdCBpdCBleGlzdHMgb24gdGhlIGZpbGVzeXN0ZW0uICBJZiBpdAorCQkJCQkJCSMgZG9lcyBu b3QgZXhpc3QsIHRoZW4gYWRkIHRoZSBsaWJyYXJ5IGFuZCB0aGUgbWlzc2luZworCQkJCQkJCSMg ZGVwZW5kZW5jeSB0byByVmFsdWUuCisJCQkJCQkJZm9yIGRlcGVuZGVuY3kgaW4gZGVwZW5kZW5j aWVzOgorCQkJCQkJCQlpZiBkZXBlbmRlbmN5WzBdID09IG9zLnNlcCBhbmQgXAorCQkJCQkJCQkJ CW5vdCBvcy5wYXRoLmlzZmlsZShkZXBlbmRlbmN5KToKKwkJCQkJCQkJCXJWYWx1ZS5zZXRkZWZh dWx0KGZpbGUsIHNldCgpKS5hZGQoZGVwZW5kZW5jeSkKKworCQlyZXR1cm4gclZhbHVlCisKKwlk ZWYgZmluZEF0b21zT2ZMaWJyYXJ5Q29uc3VtZXJzKHNlbGYsIHNlYXJjaFN0cmluZyk6CisJCSIi IgorCQlSZXR1cm4gYXRvbXMgY29udGFpbmluZyBjb25zdW1lcnMgb2YgbGlicmFyaWVzIG1hdGNo aW5nIHRoZSBhcmd1bWVudC4KKworCQlAcGFyYW0gc2VhcmNoU3RyaW5nOiBhIHN0cmluZyB1c2Vk IHRvIHNlYXJjaCBmb3IgbGlicmFyaWVzCisJCUB0eXBlIHNlYXJjaFN0cmluZzogc3RyaW5nIHRv IGJlIGNvbXBpbGVkIGFzIGEgcmVndWxhciBleHByZXNzaW9uCisJCQkoZXhhbXBsZTogJ2xpYmZv by4qJykKKwkJQHJ0eXBlOiBzZXQgb2Ygc3RyaW5ncworCQlAcmV0dXJuOiB0aGUgcmV0dXJuZWQg c2V0IG9mIGF0b21zIGFyZSB2YWxpZCB0byBiZSB1c2VkIGJ5IHBhY2thZ2Ugc2V0cworCisJCSIi IgorCQlhdG9tcyA9IHNldCgpCisJCWNvbnN1bWVycyA9IHNldCgpCisJCW1hdGNoZWRMaWJyYXJp ZXMgPSBzZXQoKQorCQlsaWJyYXJ5T2JqZWN0cyA9IHNlbGYubGlua21hcC5saXN0TGlicmFyeU9i amVjdHMoKQorCQlfbGlicmFyeVNlYXJjaF9yZSA9IHJlLmNvbXBpbGUoc2VhcmNoU3RyaW5nKQor CisJCSMgRmluZCBsaWJyYXJpZXMgbWF0Y2hpbmcgc2VhcmNoU3RyaW5nLgorCQlmb3IgbGlicmFy eSBpbiBsaWJyYXJ5T2JqZWN0czoKKwkJCW0gPSBfbGlicmFyeVNlYXJjaF9yZS5zZWFyY2gobGli cmFyeSkKKwkJCWlmIG06CisJCQkJbWF0Y2hlZExpYnJhcmllcy5hZGQobGlicmFyeSkKKwkJCQlj b25zdW1lcnMudXBkYXRlKHNlbGYubGlua21hcC5maW5kQ29uc3VtZXJzKGxpYnJhcnkpKQorCisJ CWlmIHNlbGYuZGVidWc6CisJCQlwcmludAorCQkJcHJpbnQgIkNvbnN1bWVycyBvZiB0aGUgZm9s bG93aW5nIGxpYnJhcmllcyB3aWxsIGJlIGVtZXJnZWQ6IgorCQkJZm9yIHggaW4gbWF0Y2hlZExp YnJhcmllczoKKwkJCQlwcmludCB4CisKKwkJaWYgY29uc3VtZXJzOgorCQkJIyBUaGUgZm9sbG93 aW5nIHByZXZlbnRzIGVtZXJnaW5nIHRoZSBwYWNrYWdlcyB0aGF0IG93biB0aGUgbWF0Y2hlZAor CQkJIyBsaWJyYXJpZXMuICBOb3RlIHRoYXQgdGhpcyB3aWxsIHByZXZlbnQgdXBkYXRpbmcgdGhl IHBhY2thZ2VzIG93bmluZworCQkJIyB0aGUgbGlicmFyaWVzIGlmIHRoZXJlIGFyZSBuZXdlciB2 ZXJzaW9ucyBhdmFpbGFibGUgaW4gdGhlIGluc3RhbGxlZAorCQkJIyBzbG90LiAgU2VlIGJ1ZyAj MzAwOTUKKwkJCWF0b21zID0gc2VsZi5tYXBQYXRoc1RvQXRvbXMoY29uc3VtZXJzKQorCQkJbGli cmFyeU93bmVycyA9IHNlbGYubWFwUGF0aHNUb0F0b21zKG1hdGNoZWRMaWJyYXJpZXMpCisJCQlh dG9tcy5kaWZmZXJlbmNlX3VwZGF0ZShsaWJyYXJ5T3duZXJzKQorCisJCXJldHVybiBhdG9tcwor CisJZGVmIHNpbmdsZUJ1aWxkZXIoc2VsZiwgb3B0aW9ucywgc2V0dGluZ3MsIHRyZWVzKToKKwkJ ZGVidWcgPSBnZXRfYm9vbGVhbihvcHRpb25zLCAiZGVidWciLCBGYWxzZSkKKwkJcmV0dXJuIE1p c3NpbmdMaWJyYXJ5Q29uc3VtZXJTZXQodHJlZXNbInZhcnRyZWUiXS5kYmFwaSwgZGVidWcpCisJ c2luZ2xlQnVpbGRlciA9IGNsYXNzbWV0aG9kKHNpbmdsZUJ1aWxkZXIpCg== ------=_Part_54009_27571114.1219288185481 Content-Type: application/octet-stream; name=vartree.py.2.2_rc8.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fk4q1yuq1 Content-Disposition: attachment; filename=vartree.py.2.2_rc8.patch LS0tIHZhcnRyZWUucHkuMi4yX3JjOAkyMDA4LTA4LTE3IDIxOjExOjQxLjAwMDAwMDAwMCAtMDUw MAorKysgcHltL3BvcnRhZ2UvZGJhcGkvdmFydHJlZS5weQkyMDA4LTA4LTE4IDA0OjEzOjMzLjAw MDAwMDAwMCAtMDUwMApAQCAtMTQzLDEwICsxNDMsMTIgQEAKIAkJc2VsZi5fZGJhcGkgPSB2YXJk YmFwaQogCQlzZWxmLl9saWJzID0ge30KIAkJc2VsZi5fb2JqX3Byb3BlcnRpZXMgPSB7fQotCQlz ZWxmLl9kZWZwYXRoID0gZ2V0bGlicGF0aHMoKQotCQorCQlzZWxmLl9kZWZwYXRoID0gc2V0KGdl dGxpYnBhdGhzKCkpCisJCXNlbGYuX29ial9rZXlfY2FjaGUgPSB7fQorCiAJZGVmIHJlYnVpbGQo c2VsZiwgaW5jbHVkZV9maWxlPU5vbmUpOgogCQlsaWJzID0ge30KKwkJb2JqX2tleV9jYWNoZSA9 IHt9CiAJCW9ial9wcm9wZXJ0aWVzID0ge30KIAkJbGluZXMgPSBbXQogCQlmb3IgY3B2IGluIHNl bGYuX2RiYXBpLmNwdl9hbGwoKToKQEAgLTE3NiwyOSArMTc4LDYxIEBACiAJCQkJIyBpbnN1ZmZp Y2llbnQgZmllbGQgbGVuZ3RoCiAJCQkJY29udGludWUKIAkJCWFyY2ggPSBmaWVsZHNbMF0KLQkJ CW9iaiA9IG9zLnBhdGgucmVhbHBhdGgoZmllbGRzWzFdKQorCQkJb2JqID0gZmllbGRzWzFdCisJ CQlvYmpfa2V5ID0gc2VsZi5fZ2VuZXJhdGVPYmpLZXkob2JqKQogCQkJc29uYW1lID0gZmllbGRz WzJdCi0JCQlwYXRoID0gZmlsdGVyKE5vbmUsIGZpZWxkc1szXS5yZXBsYWNlKAorCQkJcGF0aCA9 IHNldChbbm9ybWFsaXplX3BhdGgoeCkKKwkJCQlmb3IgeCBpbiBmaWx0ZXIoTm9uZSwgZmllbGRz WzNdLnJlcGxhY2UoCiAJCQkJIiR7T1JJR0lOfSIsIG9zLnBhdGguZGlybmFtZShvYmopKS5yZXBs YWNlKAotCQkJCSIkT1JJR0lOIiwgb3MucGF0aC5kaXJuYW1lKG9iaikpLnNwbGl0KCI6IikpCisJ CQkJIiRPUklHSU4iLCBvcy5wYXRoLmRpcm5hbWUob2JqKSkuc3BsaXQoIjoiKSldKQogCQkJbmVl ZGVkID0gZmlsdGVyKE5vbmUsIGZpZWxkc1s0XS5zcGxpdCgiLCIpKQogCQkJaWYgc29uYW1lOgot CQkJCWxpYnMuc2V0ZGVmYXVsdChzb25hbWUsIHthcmNoOiB7InByb3ZpZGVycyI6IFtdLCAiY29u c3VtZXJzIjogW119fSkKLQkJCQlsaWJzW3NvbmFtZV0uc2V0ZGVmYXVsdChhcmNoLCB7InByb3Zp ZGVycyI6IFtdLCAiY29uc3VtZXJzIjogW119KQotCQkJCWxpYnNbc29uYW1lXVthcmNoXVsicHJv dmlkZXJzIl0uYXBwZW5kKG9iaikKKwkJCQlsaWJzLnNldGRlZmF1bHQoc29uYW1lLCBcCisJCQkJ CQl7YXJjaDogeyJwcm92aWRlcnMiOiBzZXQoKSwgImNvbnN1bWVycyI6IHNldCgpfX0pCisJCQkJ bGlic1tzb25hbWVdLnNldGRlZmF1bHQoYXJjaCwgXAorCQkJCQkJeyJwcm92aWRlcnMiOiBzZXQo KSwgImNvbnN1bWVycyI6IHNldCgpfSkKKwkJCQlsaWJzW3NvbmFtZV1bYXJjaF1bInByb3ZpZGVy cyJdLmFkZChvYmpfa2V5KQogCQkJZm9yIHggaW4gbmVlZGVkOgotCQkJCWxpYnMuc2V0ZGVmYXVs dCh4LCB7YXJjaDogeyJwcm92aWRlcnMiOiBbXSwgImNvbnN1bWVycyI6IFtdfX0pCi0JCQkJbGli c1t4XS5zZXRkZWZhdWx0KGFyY2gsIHsicHJvdmlkZXJzIjogW10sICJjb25zdW1lcnMiOiBbXX0p Ci0JCQkJbGlic1t4XVthcmNoXVsiY29uc3VtZXJzIl0uYXBwZW5kKG9iaikKLQkJCW9ial9wcm9w ZXJ0aWVzW29ial0gPSAoYXJjaCwgbmVlZGVkLCBwYXRoLCBzb25hbWUpCi0JCQorCQkJCWxpYnMu c2V0ZGVmYXVsdCh4LCBcCisJCQkJCQl7YXJjaDogeyJwcm92aWRlcnMiOiBzZXQoKSwgImNvbnN1 bWVycyI6IHNldCgpfX0pCisJCQkJbGlic1t4XS5zZXRkZWZhdWx0KGFyY2gsIHsicHJvdmlkZXJz Ijogc2V0KCksICJjb25zdW1lcnMiOiBzZXQoKX0pCisJCQkJbGlic1t4XVthcmNoXVsiY29uc3Vt ZXJzIl0uYWRkKG9ial9rZXkpCisJCQlvYmpfa2V5X2NhY2hlLnNldGRlZmF1bHQob2JqLCBvYmpf a2V5KQorCQkJIyBBbGwgb2JqZWN0IHBhdGhzIGFyZSBhZGRlZCBpbnRvIHRoZSBvYmpfcHJvcGVy dGllcyB0dXBsZQorCQkJb2JqX3Byb3BlcnRpZXMuc2V0ZGVmYXVsdChvYmpfa2V5LCBcCisJCQkJ CShhcmNoLCBuZWVkZWQsIHBhdGgsIHNvbmFtZSwgc2V0KCkpKVs0XS5hZGQob2JqKQorCiAJCXNl bGYuX2xpYnMgPSBsaWJzCiAJCXNlbGYuX29ial9wcm9wZXJ0aWVzID0gb2JqX3Byb3BlcnRpZXMK KwkJc2VsZi5fb2JqX2tleV9jYWNoZSA9IG9ial9rZXlfY2FjaGUKIAotCWRlZiBsaXN0QnJva2Vu QmluYXJpZXMoc2VsZik6CisJZGVmIF9nZW5lcmF0ZU9iaktleShzZWxmLCBvYmopOgorCQkiIiIK KwkJR2VuZXJhdGUgb2JqIGtleSBmb3IgYSBnaXZlbiBvYmplY3QuCisKKwkJQHBhcmFtIG9iajog cGF0aCB0byBhbiBleGlzdGluZyBmaWxlCisJCUB0eXBlIG9iajogc3RyaW5nIChleGFtcGxlOiAn L3Vzci9iaW4vYmFyJykKKwkJQHJ0eXBlOiAyLXR1cGxlIG9mIGxvbmdzIGlmIG9iaiBleGlzdHMu IHN0cmluZyBpZiBvYmogZG9lcyBub3QgZXhpc3QuCisJCUByZXR1cm46CisJCQkxLiAyLXR1cGxl IG9mIG9iaidzIGlub2RlIGFuZCBkZXZpY2UgZnJvbSBhIHN0YXQgY2FsbCwgaWYgb2JqIGV4aXN0 cy4KKwkJCTIuIHJlYWxwYXRoIG9mIG9iamVjdCBpZiBvYmogZG9lcyBub3QgZXhpc3QuCisKKwkJ IiIiCisJCXRyeToKKwkJCW9ial9zdCA9IG9zLnN0YXQob2JqKQorCQlleGNlcHQgT1NFcnJvcjoK KwkJCSMgVXNlIHRoZSByZWFscGF0aCBhcyB0aGUga2V5IGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4 aXN0cyBvbiB0aGUKKwkJCSMgZmlsZXN5c3RlbS4KKwkJCXJldHVybiBvcy5wYXRoLnJlYWxwYXRo KG9iaikKKwkJIyBSZXR1cm4gYSB0dXBsZSBvZiB0aGUgZGV2aWNlIGFuZCBpbm9kZS4KKwkJcmV0 dXJuIChvYmpfc3Quc3RfZGV2LCBvYmpfc3Quc3RfaW5vKQorCisJZGVmIGxpc3RCcm9rZW5CaW5h cmllcyhzZWxmLCBkZWJ1Zz1GYWxzZSk6CiAJCSIiIgogCQlGaW5kIGJpbmFyaWVzIGFuZCB0aGVp ciBuZWVkZWQgc29uYW1lcywgd2hpY2ggaGF2ZSBubyBwcm92aWRlcnMuCiAKKwkJQHBhcmFtIGRl YnVnOiBCb29sZWFuIHRvIGVuYWJsZSBkZWJ1ZyBvdXRwdXQKKwkJQHR5cGUgZGVidWc6IEJvb2xl YW4KIAkJQHJ0eXBlOiBkaWN0IChleGFtcGxlOiB7Jy91c3IvYmluL2Zvbyc6IHNldChbJ2xpYmJh ci5zbyddKX0pCiAJCUByZXR1cm46IFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gb2JqZWN0IC0+IHNl dC1vZi1zb25hbWVzIG1hcHBpbmcsIHdoZXJlCiAJCQlvYmplY3QgaXMgYSBicm9rZW4gYmluYXJ5 IGFuZCB0aGUgc2V0IGNvbnNpc3RzIG9mIHNvbmFtZXMgbmVlZGVkIGJ5CkBAIC0yMDgsNjUgKzI0 Miw2NiBAQAogCQljbGFzcyBMaWJyYXJ5Q2FjaGUob2JqZWN0KToKIAogCQkJIiIiCi0JCQlDYWNo ZXMgc29uYW1lcyBhbmQgcmVhbHBhdGhzIGFzc29jaWF0ZWQgd2l0aCBwYXRocy4KKwkJCUNhY2hl cyBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCBwYXRocy4KIAogCQkJVGhlIHB1cnBvc2Ugb2Yg dGhpcyBjbGFzcyBpcyB0byBwcmV2ZW50IG11bHRpcGxlIGNhbGxzIG9mCi0JCQlvcy5wYXRoLnJl YWxwYXRoIGFuZCBvcy5wYXRoLmlzZmlsZSBvbiB0aGUgc2FtZSBwYXRocy4KKwkJCV9nZW5lcmF0 ZU9iaktleSBvbiB0aGUgc2FtZSBwYXRocy4KIAogCQkJIiIiCiAKIAkJCWRlZiBfX2luaXRfXyhj YWNoZV9zZWxmKToKIAkJCQljYWNoZV9zZWxmLmNhY2hlID0ge30KIAotCQkJZGVmIGdldChjYWNo ZV9zZWxmLCBwYXRoKToKKwkJCWRlZiBnZXQoY2FjaGVfc2VsZiwgb2JqKToKIAkJCQkiIiIKLQkJ CQlDYWNoZXMgYW5kIHJldHVybnMgdGhlIHNvbmFtZSBhbmQgcmVhbHBhdGggZm9yIGEgcGF0aC4K KwkJCQlDYWNoZXMgYW5kIHJldHVybnMgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggYW4gb2Jq ZWN0LgogCi0JCQkJQHBhcmFtIHBhdGg6IGFic29sdXRlIHBhdGggKGNhbiBiZSBzeW1saW5rKQot CQkJCUB0eXBlIHBhdGg6IHN0cmluZyAoZXhhbXBsZTogJy91c3IvbGliL2xpYmZvby5zbycpCi0J CQkJQHJ0eXBlOiAzLXR1cGxlIHdpdGggdHlwZXMgKHN0cmluZyBvciBOb25lLCBzdHJpbmcsIGJv b2xlYW4pCi0JCQkJQHJldHVybjogMy10dXBsZSB3aXRoIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50 czoKLQkJCQkJMS4gc29uYW1lIGFzIGEgc3RyaW5nIG9yIE5vbmUgaWYgaXQgZG9lcyBub3QgZXhp c3QsCi0JCQkJCTIuIHJlYWxwYXRoIGFzIGEgc3RyaW5nLAotCQkJCQkzLiB0aGUgcmVzdWx0IG9m IG9zLnBhdGguaXNmaWxlKHJlYWxwYXRoKQotCQkJCQkoZXhhbXBsZTogKCdsaWJmb28uc28uMScs ICcvdXNyL2xpYi9saWJmb28uc28uMS41LjEnLCBUcnVlKSkKKwkJCQlAcGFyYW0gb2JqOiBhYnNv bHV0ZSBwYXRoIChjYW4gYmUgc3ltbGluaykKKwkJCQlAdHlwZSBvYmo6IHN0cmluZyAoZXhhbXBs ZTogJy91c3IvbGliL2xpYmZvby5zbycpCisJCQkJQHJ0eXBlOiA0LXR1cGxlIHdpdGggdHlwZXMK KwkJCQkJKHN0cmluZyBvciBOb25lLCBzdHJpbmcgb3IgTm9uZSwgMi10dXBsZSwgQm9vbGVhbikK KwkJCQlAcmV0dXJuOiA0LXR1cGxlIHdpdGggdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOgorCQkJ CQkxLiBhcmNoIGFzIGEgc3RyaW5nIG9yIE5vbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QsCisJCQkJ CTIuIHNvbmFtZSBhcyBhIHN0cmluZyBvciBOb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0LAorCQkJ CQkzLiBvYmpfa2V5IGFzIDItdHVwbGUsCisJCQkJCTQuIEJvb2xlYW4gcmVwcmVzZW50aW5nIHdo ZXRoZXIgdGhlIG9iamVjdCBleGlzdHMuCisJCQkJCShleGFtcGxlOiAoJ2xpYmZvby5zby4xJywg KDEyM0wsIDQ1NkwpLCBUcnVlKSkKIAogCQkJCSIiIgotCQkJCWlmIHBhdGggaW4gY2FjaGVfc2Vs Zi5jYWNoZToKLQkJCQkJcmV0dXJuIGNhY2hlX3NlbGYuY2FjaGVbcGF0aF0KKwkJCQlpZiBvYmog aW4gY2FjaGVfc2VsZi5jYWNoZToKKwkJCQkJcmV0dXJuIGNhY2hlX3NlbGYuY2FjaGVbb2JqXQog CQkJCWVsc2U6Ci0JCQkJCXJlYWxwYXRoID0gb3MucGF0aC5yZWFscGF0aChwYXRoKQorCQkJCQlp ZiBvYmogaW4gc2VsZi5fb2JqX2tleV9jYWNoZToKKwkJCQkJCW9ial9rZXkgPSBzZWxmLl9vYmpf a2V5X2NhY2hlLmdldChvYmopCisJCQkJCWVsc2U6CisJCQkJCQlvYmpfa2V5ID0gc2VsZi5fZ2Vu ZXJhdGVPYmpLZXkob2JqKQogCQkJCQkjIENoZWNrIHRoYXQgdGhlIGxpYnJhcnkgZXhpc3RzIG9u IHRoZSBmaWxlc3lzdGVtLgotCQkJCQlpZiBvcy5wYXRoLmlzZmlsZShyZWFscGF0aCk6Ci0JCQkJ CQkjIEdldCB0aGUgc29uYW1lIGZyb20gTGlua2FnZU1hcC5fb2JqX3Byb3BlcnRpZXMgaWYgaXQK LQkJCQkJCSMgZXhpc3RzLiBPdGhlcndpc2UsIE5vbmUuCi0JCQkJCQlzb25hbWUgPSBzZWxmLl9v YmpfcHJvcGVydGllcy5nZXQocmVhbHBhdGgsIChOb25lLCkqMylbM10KLQkJCQkJCSMgQm90aCBw YXRoIGFuZCByZWFscGF0aCBhcmUgY2FjaGVkIGFuZCB0aGUgcmVzdWx0IGlzCi0JCQkJCQkjIHJl dHVybmVkLgotCQkJCQkJY2FjaGVfc2VsZi5jYWNoZS5zZXRkZWZhdWx0KHJlYWxwYXRoLCBcCi0J CQkJCQkJCShzb25hbWUsIHJlYWxwYXRoLCBUcnVlKSkKLQkJCQkJCXJldHVybiBjYWNoZV9zZWxm LmNhY2hlLnNldGRlZmF1bHQocGF0aCwgXAotCQkJCQkJCQkoc29uYW1lLCByZWFscGF0aCwgVHJ1 ZSkpCisJCQkJCWlmIGlzaW5zdGFuY2Uob2JqX2tleSwgdHVwbGUpOgorCQkJCQkJIyBHZXQgdGhl IGFyY2ggYW5kIHNvbmFtZSBmcm9tIExpbmthZ2VNYXAuX29ial9wcm9wZXJ0aWVzIGlmCisJCQkJ CQkjIGl0IGV4aXN0cy4gT3RoZXJ3aXNlLCBOb25lLgorCQkJCQkJYXJjaCwgXywgXywgc29uYW1l LCBfID0gXAorCQkJCQkJCQlzZWxmLl9vYmpfcHJvcGVydGllcy5nZXQob2JqX2tleSwgKE5vbmUs KSo1KQorCQkJCQkJcmV0dXJuIGNhY2hlX3NlbGYuY2FjaGUuc2V0ZGVmYXVsdChvYmosIFwKKwkJ CQkJCQkJKGFyY2gsIHNvbmFtZSwgb2JqX2tleSwgVHJ1ZSkpCiAJCQkJCWVsc2U6Ci0JCQkJCQkj IHJlYWxwYXRoIGlzIG5vdCBjYWNoZWQgaGVyZSwgYmVjYXVzZSB0aGUgbWFqb3JpdHkgb2YgY2Fz ZXMKLQkJCQkJCSMgd2hlcmUgcmVhbHBhdGggaXMgbm90IGEgZmlsZSwgcGF0aCBpcyB0aGUgc2Ft ZSBhcyByZWFscGF0aC4KLQkJCQkJCSMgVGh1cyBzdG9yaW5nIHR3aWNlIHNsb3dzIGRvd24gdGhl IGNhY2hlIHBlcmZvcm1hbmNlLgotCQkJCQkJcmV0dXJuIGNhY2hlX3NlbGYuY2FjaGUuc2V0ZGVm YXVsdChwYXRoLCBcCi0JCQkJCQkJCShOb25lLCByZWFscGF0aCwgRmFsc2UpKQorCQkJCQkJcmV0 dXJuIGNhY2hlX3NlbGYuY2FjaGUuc2V0ZGVmYXVsdChvYmosIFwKKwkJCQkJCQkJKE5vbmUsIE5v bmUsIG9ial9rZXksIEZhbHNlKSkKIAotCQlkZWJ1ZyA9IEZhbHNlCiAJCXJWYWx1ZSA9IHt9CiAJ CWNhY2hlID0gTGlicmFyeUNhY2hlKCkKIAkJcHJvdmlkZXJzID0gc2VsZi5saXN0UHJvdmlkZXJz KCkKIAotCQkjIEl0ZXJhdGUgb3ZlciBhbGwgYmluYXJpZXMgYW5kIHRoZWlyIHByb3ZpZGVycy4K LQkJZm9yIG9iaiwgc29uYW1lcyBpbiBwcm92aWRlcnMuaXRlbXMoKToKKwkJIyBJdGVyYXRlIG92 ZXIgYWxsIG9ial9rZXlzIGFuZCB0aGVpciBwcm92aWRlcnMuCisJCWZvciBvYmpfa2V5LCBzb25h bWVzIGluIHByb3ZpZGVycy5pdGVtcygpOgorCQkJYXJjaCwgXywgcGF0aCwgXywgb2JqcyA9IHNl bGYuX29ial9wcm9wZXJ0aWVzW29ial9rZXldCisJCQlwYXRoID0gcGF0aC51bmlvbihzZWxmLl9k ZWZwYXRoKQogCQkJIyBJdGVyYXRlIG92ZXIgZWFjaCBuZWVkZWQgc29uYW1lIGFuZCB0aGUgc2V0 IG9mIGxpYnJhcnkgcGF0aHMgdGhhdAogCQkJIyBmdWxmaWxsIHRoZSBzb25hbWUgdG8gZGV0ZXJt aW5lIGlmIHRoZSBkZXBlbmRlbmN5IGlzIGJyb2tlbi4KIAkJCWZvciBzb25hbWUsIGxpYnJhcmll cyBpbiBzb25hbWVzLml0ZW1zKCk6CiAJCQkJIyB2YWxpZExpYnJhcmllcyBpcyB1c2VkIHRvIHN0 b3JlIGxpYnJhcmllcywgd2hpY2ggc2F0aXNmeSBzb25hbWUsCiAJCQkJIyBzbyBpZiBubyB2YWxp ZCBsaWJyYXJpZXMgYXJlIGZvdW5kLCB0aGUgc29uYW1lIGlzIG5vdCBzYXRpc2ZpZWQKLQkJCQkj IGZvciBvYmouICBUaHVzIG9iaiBtdXN0IGJlIGVtZXJnZWQuCisJCQkJIyBmb3Igb2JqX2tleS4g IElmIHVuc2F0aXNmaWVkLCBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCBvYmpfa2V5CisJCQkJIyBt dXN0IGJlIGVtZXJnZWQuCiAJCQkJdmFsaWRMaWJyYXJpZXMgPSBzZXQoKQogCQkJCSMgSXQgY291 bGQgYmUgdGhlIGNhc2UgdGhhdCB0aGUgbGlicmFyeSB0byBzYXRpc2Z5IHRoZSBzb25hbWUgaXMK IAkJCQkjIG5vdCBpbiB0aGUgb2JqJ3MgcnVucGF0aCwgYnV0IGEgc3ltbGluayB0byB0aGUgbGli cmFyeSBpcyAoZWcKQEAgLTI3NCw2NyArMzA5LDYwIEBACiAJCQkJIyBkb2VzIG5vdCBjYXRhbG9n IHN5bWxpbmtzLCBicm9rZW4gb3IgbWlzc2luZyBzeW1saW5rcyBtYXkgZ28KIAkJCQkjIHVubm90 aWNlZC4gIEFzIGEgcmVzdWx0IG9mIHRoZXNlIGNhc2VzLCBjaGVjayB0aGF0IGEgZmlsZSB3aXRo CiAJCQkJIyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBzb25hbWUgZXhpc3RzIGluIG9iaidzIHJ1bnBh dGguCi0JCQkJcGF0aCA9IHNlbGYuX29ial9wcm9wZXJ0aWVzW29ial1bMl0gKyBzZWxmLl9kZWZw YXRoCi0JCQkJZm9yIGQgaW4gcGF0aDoKLQkJCQkJY2FjaGVkU29uYW1lLCBjYWNoZWRSZWFscGF0 aCwgY2FjaGVkRXhpc3RzID0gXAotCQkJCQkJCWNhY2hlLmdldChvcy5wYXRoLmpvaW4oZCwgc29u YW1lKSkKLQkJCQkJIyBDaGVjayB0aGF0IHRoZSB0aGlzIGxpYnJhcnkgcHJvdmlkZXMgdGhlIG5l ZWRlZCBzb25hbWUuICBEb2luZworCQkJCSMgWFhYIElmIHdlIGNhdGFsb2cgc3ltbGlua3MgaW4g TGlua2FnZU1hcCwgdGhpcyBjb3VsZCBiZSBpbXByb3ZlZC4KKwkJCQlmb3IgZGlyZWN0b3J5IGlu IHBhdGg6CisJCQkJCWNhY2hlZEFyY2gsIGNhY2hlZFNvbmFtZSwgY2FjaGVkS2V5LCBjYWNoZWRF eGlzdHMgPSBcCisJCQkJCQkJY2FjaGUuZ2V0KG9zLnBhdGguam9pbihkaXJlY3RvcnksIHNvbmFt ZSkpCisJCQkJCSMgQ2hlY2sgdGhhdCB0aGlzIGxpYnJhcnkgcHJvdmlkZXMgdGhlIG5lZWRlZCBz b25hbWUuICBEb2luZwogCQkJCQkjIHRoaXMsIGhvd2V2ZXIsIHdpbGwgY2F1c2UgY29uc3VtZXJz IG9mIGxpYnJhcmllcyBtaXNzaW5nCiAJCQkJCSMgc29uYW1lcyB0byBiZSB1bm5lY2Vzc2FyaWx5 IGVtZXJnZWQuIChlZyBsaWJtaXguc28pCi0JCQkJCWlmIGNhY2hlZFNvbmFtZSA9PSBzb25hbWU6 Ci0JCQkJCQl2YWxpZExpYnJhcmllcy5hZGQoY2FjaGVkUmVhbHBhdGgpCi0JCQkJCQlpZiBkZWJ1 ZyBhbmQgY2FjaGVkUmVhbHBhdGggbm90IGluIGxpYnJhcmllczoKKwkJCQkJaWYgY2FjaGVkU29u YW1lID09IHNvbmFtZSBhbmQgY2FjaGVkQXJjaCA9PSBhcmNoOgorCQkJCQkJdmFsaWRMaWJyYXJp ZXMuYWRkKGNhY2hlZEtleSkKKwkJCQkJCWlmIGRlYnVnIGFuZCBjYWNoZWRLZXkgbm90IGluIFwK KwkJCQkJCQkJc2V0KG1hcChzZWxmLl9vYmpfa2V5X2NhY2hlLmdldCwgbGlicmFyaWVzKSk6CisJ CQkJCQkJIyBYWFggVGhpcyBpcyBtb3N0IG9mdGVuIGR1ZSB0byBzb25hbWUgc3ltbGlua3Mgbm90 IGluCisJCQkJCQkJIyBhIGxpYnJhcnkncyBkaXJlY3RvcnkuICBXZSBjb3VsZCBjYXRhbG9nIHN5 bWxpbmtzIGluCisJCQkJCQkJIyBMaW5rYWdlTWFwIHRvIGF2b2lkIGNoZWNraW5nIGZvciB0aGlz IGVkZ2UgY2FzZSBoZXJlLgogCQkJCQkJCXByaW50ICJGb3VuZCBwcm92aWRlciBvdXRzaWRlIG9m IGZpbmRQcm92aWRlcnM6IiwgXAotCQkJCQkJCQkJb3MucGF0aC5qb2luKGQsIHNvbmFtZSksICIt PiIsIGNhY2hlZFJlYWxwYXRoCisJCQkJCQkJCQlvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCBzb25h bWUpLCAiLT4iLCBcCisJCQkJCQkJCQlzZWxmLl9vYmpfcHJvcGVydGllc1tjYWNoZWRLZXldWzRd LCBsaWJyYXJpZXMKIAkJCQkJCSMgQSB2YWxpZCBsaWJyYXJ5IGhhcyBiZWVuIGZvdW5kLCBzbyB0 aGVyZSBpcyBubyBuZWVkIHRvCiAJCQkJCQkjIGNvbnRpbnVlLgogCQkJCQkJYnJlYWsKLQkJCQkJ aWYgZGVidWcgYW5kIGNhY2hlZFJlYWxwYXRoIGluIHNlbGYuX29ial9wcm9wZXJ0aWVzOgorCQkJ CQlpZiBkZWJ1ZyBhbmQgY2FjaGVkQXJjaCA9PSBhcmNoIGFuZCBcCisJCQkJCQkJY2FjaGVkS2V5 IGluIHNlbGYuX29ial9wcm9wZXJ0aWVzOgogCQkJCQkJcHJpbnQgIkJyb2tlbiBzeW1saW5rIG9y IG1pc3NpbmcvYmFkIHNvbmFtZToiLCBcCi0JCQkJCQkJCW9zLnBhdGguam9pbihkLCBzb25hbWUp LCAnLT4nLCBjYWNoZWRSZWFscGF0aCwgXAotCQkJCQkJCQkid2l0aCBzb25hbWUiLCBjYWNoZWRT b25hbWUsICJidXQgZXhwZWN0aW5nIiwgc29uYW1lCisJCQkJCQkJCW9zLnBhdGguam9pbihkaXJl Y3RvcnksIHNvbmFtZSksICctPicsIFwKKwkJCQkJCQkJc2VsZi5fb2JqX3Byb3BlcnRpZXNbY2Fj aGVkS2V5XSwgIndpdGggc29uYW1lIiwgXAorCQkJCQkJCQljYWNoZWRTb25hbWUsICJidXQgZXhw ZWN0aW5nIiwgc29uYW1lCiAJCQkJIyBUaGlzIGNvbmRpdGlvbmFsIGNoZWNrcyBpZiB0aGVyZSBh cmUgbm8gbGlicmFyaWVzIHRvIHNhdGlzZnkgdGhlCiAJCQkJIyBzb25hbWUgKGVtcHR5IHNldCku CiAJCQkJaWYgbm90IHZhbGlkTGlicmFyaWVzOgotCQkJCQlyVmFsdWUuc2V0ZGVmYXVsdChvYmos IHNldCgpKS5hZGQoc29uYW1lKQorCQkJCQlmb3Igb2JqIGluIG9ianM6CisJCQkJCQlyVmFsdWUu c2V0ZGVmYXVsdChvYmosIHNldCgpKS5hZGQoc29uYW1lKQogCQkJCQkjIElmIG5vIHZhbGlkIGxp YnJhcmllcyBoYXZlIGJlZW4gZm91bmQgYnkgdGhpcyBwb2ludCwgdGhlbgogCQkJCQkjIHRoZXJl IGFyZSBubyBmaWxlcyBuYW1lZCB3aXRoIHRoZSBzb25hbWUgd2l0aGluIG9iaidzIHJ1bnBhdGgs CiAJCQkJCSMgYnV0IGlmIHRoZXJlIGFyZSBsaWJyYXJpZXMgKGZyb20gdGhlIHByb3ZpZGVycyBt YXBwaW5nKSwgaXQgaXMKLQkJCQkJIyBsaWtlbHkgdGhhdCBzeW1saW5rcyBvciB0aGUgYWN0dWFs IGxpYnJhcmllcyBhcmUgbWlzc2luZy4KLQkJCQkJIyBUaHVzIHBvc3NpYmxlIHN5bWxpbmtzIGFu ZCBtaXNzaW5nIGxpYnJhcmllcyBhcmUgYWRkZWQgdG8KLQkJCQkJIyByVmFsdWUgaW4gb3JkZXIg dG8gZW1lcmdlIGNvcnJ1cHQgbGlicmFyeSBwYWNrYWdlcy4KKwkJCQkJIyBsaWtlbHkgdGhhdCBz b25hbWUgc3ltbGlua3Mgb3IgdGhlIGFjdHVhbCBsaWJyYXJpZXMgYXJlCisJCQkJCSMgbWlzc2lu ZyBvciBicm9rZW4uICBUaHVzIHRob3NlIGxpYnJhcmllcyBhcmUgYWRkZWQgdG8gclZhbHVlCisJ CQkJCSMgaW4gb3JkZXIgdG8gZW1lcmdlIGNvcnJ1cHQgbGlicmFyeSBwYWNrYWdlcy4KIAkJCQkJ Zm9yIGxpYiBpbiBsaWJyYXJpZXM6Ci0JCQkJCQljYWNoZWRTb25hbWUsIGNhY2hlZFJlYWxwYXRo LCBjYWNoZWRFeGlzdHMgPSBjYWNoZS5nZXQobGliKQotCQkJCQkJaWYgbm90IGNhY2hlZEV4aXN0 czoKLQkJCQkJCQkjIFRoZSBsaWJyYXJ5J3MgcGFja2FnZSBuZWVkcyB0byBiZSBlbWVyZ2VkIHRv IHJlcGFpciB0aGUKLQkJCQkJCQkjIG1pc3NpbmcgbGlicmFyeS4KLQkJCQkJCQlyVmFsdWUuc2V0 ZGVmYXVsdChsaWIsIHNldCgpKS5hZGQoc29uYW1lKQotCQkJCQkJZWxzZToKLQkJCQkJCQkjIEEg bGlicmFyeSBwcm92aWRpbmcgdGhlIHNvbmFtZSBleGlzdHMgaW4gdGhlIG9iaidzCi0JCQkJCQkJ IyBydW5wYXRoLCBidXQgbm8gZmlsZSBuYW1lZCBhcyB0aGUgc29uYW1lIGV4aXN0cywgc28gYWRk Ci0JCQkJCQkJIyB0aGUgcGF0aCBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBsaWIncyBkaXJlY3Rvcnkg YW5kIHRoZQotCQkJCQkJCSMgc29uYW1lIHRvIHJWYWx1ZSB0byBmaXggY2FzZXMgb2YgdmFuaXNo aW5nIChvciBtb2RpZmllZCkKLQkJCQkJCQkjIHN5bWxpbmtzLiAgVGhpcyBwYXRoIGlzIG5vdCBn dWFyYW50ZWVkIHRvIGV4aXN0LCBidXQgaXQKLQkJCQkJCQkjIGZvbGxvd3MgdGhlIHN5bWxpbmsg Y29udmVudGlvbiBmb3VuZCBpbiB0aGUgbWFqb3JpdHkgb2YKLQkJCQkJCQkjIHBhY2thZ2VzLgot CQkJCQkJCXJWYWx1ZS5zZXRkZWZhdWx0KG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUobGli KSwgXAotCQkJCQkJCQkJc29uYW1lKSwgc2V0KCkpLmFkZChzb25hbWUpCisJCQkJCQlyVmFsdWUu c2V0ZGVmYXVsdChsaWIsIHNldCgpKS5hZGQoc29uYW1lKQogCQkJCQkJaWYgZGVidWc6Ci0JCQkJ CQkJaWYgbm90IGNhY2hlZEV4aXN0czoKKwkJCQkJCQlpZiBub3Qgb3MucGF0aC5pc2ZpbGUobGli KToKIAkJCQkJCQkJcHJpbnQgIk1pc3NpbmcgbGlicmFyeToiLCBsaWIKIAkJCQkJCQllbHNlOgog CQkJCQkJCQlwcmludCAiUG9zc2libHkgbWlzc2luZyBzeW1saW5rOiIsIFwKIAkJCQkJCQkJCQlv cy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGxpYiksIHNvbmFtZSkKLQogCQlyZXR1cm4gclZh bHVlCiAKIAlkZWYgbGlzdFByb3ZpZGVycyhzZWxmKToKIAkJIiIiCi0JCUZpbmQgdGhlIHByb3Zp ZGVycyBmb3IgYWxsIGJpbmFyaWVzLgorCQlGaW5kIHRoZSBwcm92aWRlcnMgZm9yIGFsbCBvYmpl Y3Qga2V5cyBpbiBMaW5rYWdlTWFwLgogCiAJCUBydHlwZTogZGljdCAoZXhhbXBsZToKLQkJCXsn L3Vzci9iaW4vZm9vJzogeydsaWJiYXIuc28nOiBzZXQoWycvbGliL2xpYmJhci5zby4xLjUnXSl9 fSkKLQkJQHJldHVybjogVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBvYmplY3QgLT4gcHJvdmlkZXJz IG1hcHBpbmcsIHdoZXJlCisJCQl7KDEyM0wsIDQ1NkwpOiB7J2xpYmJhci5zbyc6IHNldChbJy9s aWIvbGliYmFyLnNvLjEuNSddKX19KQorCQlAcmV0dXJuOiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFu IG9iamVjdCBrZXkgLT4gcHJvdmlkZXJzIG1hcHBpbmcsIHdoZXJlCiAJCQlwcm92aWRlcnMgaXMg YSBtYXBwaW5nIG9mIHNvbmFtZSAtPiBzZXQtb2YtbGlicmFyeS1wYXRocyByZXR1cm5lZAogCQkJ ZnJvbSB0aGUgZmluZFByb3ZpZGVycyBtZXRob2QuCiAKQEAgLTM0MiwxMTggKzM3MCwxODggQEAK IAkJclZhbHVlID0ge30KIAkJaWYgbm90IHNlbGYuX2xpYnM6CiAJCQlzZWxmLnJlYnVpbGQoKQot CQkjIEl0ZXJhdGUgb3ZlciBhbGwgYmluYXJpZXMgd2l0aGluIExpbmthZ2VNYXAuCi0JCWZvciBv YmogaW4gc2VsZi5fb2JqX3Byb3BlcnRpZXM6Ci0JCQlyVmFsdWUuc2V0ZGVmYXVsdChvYmosIHNl bGYuZmluZFByb3ZpZGVycyhvYmopKQorCQkjIEl0ZXJhdGUgb3ZlciBhbGwgb2JqZWN0IGtleXMg d2l0aGluIExpbmthZ2VNYXAuCisJCWZvciBvYmpfa2V5IGluIHNlbGYuX29ial9wcm9wZXJ0aWVz OgorCQkJclZhbHVlLnNldGRlZmF1bHQob2JqX2tleSwgc2VsZi5maW5kUHJvdmlkZXJzKG9ial9r ZXk9b2JqX2tleSkpCiAJCXJldHVybiByVmFsdWUKIAogCWRlZiBpc01hc3Rlckxpbmsoc2VsZiwg b2JqKToKKwkJIiIiCisJCURldGVybWluZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBhIG1hc3RlciBs aW5rLgorCisJCUBwYXJhbSBvYmo6IGFic29sdXRlIHBhdGggdG8gYW4gb2JqZWN0CisJCUB0eXBl IG9iajogc3RyaW5nIChleGFtcGxlOiAnL3Vzci9iaW4vZm9vJykKKwkJQHJ0eXBlOiBCb29sZWFu CisJCUByZXR1cm46CisJCQkxLiBUcnVlIGlmIG9iaiBpcyBhIG1hc3RlciBsaW5rCisJCQkyLiBG YWxzZSBpZiBvYmogaXMgbm90IGEgbWFzdGVyIGxpbmsKKworCQkiIiIKIAkJYmFzZW5hbWUgPSBv cy5wYXRoLmJhc2VuYW1lKG9iaikKLQkJaWYgb2JqIG5vdCBpbiBzZWxmLl9vYmpfcHJvcGVydGll czoKLQkJCW9iaiA9IG9zLnBhdGgucmVhbHBhdGgob2JqKQotCQkJaWYgb2JqIG5vdCBpbiBzZWxm Ll9vYmpfcHJvcGVydGllczoKLQkJCQlyYWlzZSBLZXlFcnJvcigiJXMgbm90IGluIG9iamVjdCBs aXN0IiAlIG9iaikKLQkJc29uYW1lID0gc2VsZi5fb2JqX3Byb3BlcnRpZXNbb2JqXVszXQorCQlv Ympfa2V5ID0gc2VsZi5fZ2VuZXJhdGVPYmpLZXkob2JqKQorCQlpZiBvYmpfa2V5IG5vdCBpbiBz ZWxmLl9vYmpfcHJvcGVydGllczoKKwkJCXJhaXNlIEtleUVycm9yKCIlcyAoJXMpIG5vdCBpbiBv YmplY3QgbGlzdCIgJSAob2JqX2tleSwgb2JqKSkKKwkJc29uYW1lID0gc2VsZi5fb2JqX3Byb3Bl cnRpZXNbb2JqX2tleV1bM10KIAkJcmV0dXJuIChsZW4oYmFzZW5hbWUpIDwgbGVuKHNvbmFtZSkp Ci0JCQorCiAJZGVmIGxpc3RMaWJyYXJ5T2JqZWN0cyhzZWxmKToKKwkJIiIiCisJCVJldHVybiBh IGxpc3Qgb2YgbGlicmFyeSBvYmplY3RzLgorCisJCUtub3duIGxpbWl0YXRpb246IGxpYnJhcnkg b2JqZWN0cyBsYWNraW5nIGFuIHNvbmFtZSBhcmUgbm90IGluY2x1ZGVkLgorCisJCUBydHlwZTog bGlzdCBvZiBzdHJpbmdzCisJCUByZXR1cm46IGxpc3Qgb2YgcGF0aHMgdG8gYWxsIHByb3ZpZGVy cworCisJCSIiIgogCQlyVmFsdWUgPSBbXQogCQlpZiBub3Qgc2VsZi5fbGliczoKIAkJCXNlbGYu cmVidWlsZCgpCiAJCWZvciBzb25hbWUgaW4gc2VsZi5fbGliczoKIAkJCWZvciBhcmNoIGluIHNl bGYuX2xpYnNbc29uYW1lXToKLQkJCQlyVmFsdWUuZXh0ZW5kKHNlbGYuX2xpYnNbc29uYW1lXVth cmNoXVsicHJvdmlkZXJzIl0pCisJCQkJZm9yIG9ial9rZXkgaW4gc2VsZi5fbGlic1tzb25hbWVd W2FyY2hdWyJwcm92aWRlcnMiXToKKwkJCQkJclZhbHVlLmV4dGVuZChzZWxmLl9vYmpfcHJvcGVy dGllc1tvYmpfa2V5XVs0XSkKIAkJcmV0dXJuIHJWYWx1ZQogCiAJZGVmIGdldFNvbmFtZShzZWxm LCBvYmopOgorCQkiIiIKKwkJUmV0dXJuIHRoZSBzb25hbWUgYXNzb2NpYXRlZCB3aXRoIGFuIG9i amVjdC4KKworCQlAcGFyYW0gb2JqOiBhYnNvbHV0ZSBwYXRoIHRvIGFuIG9iamVjdAorCQlAdHlw ZSBvYmo6IHN0cmluZyAoZXhhbXBsZTogJy91c3IvYmluL2JhcicpCisJCUBydHlwZTogc3RyaW5n CisJCUByZXR1cm46IHNvbmFtZSBhcyBhIHN0cmluZworCisJCSIiIgogCQlpZiBub3Qgc2VsZi5f bGliczoKIAkJCXNlbGYucmVidWlsZCgpCi0JCWlmIG9iaiBub3QgaW4gc2VsZi5fb2JqX3Byb3Bl cnRpZXM6Ci0JCQlvYmogPSBvcy5wYXRoLnJlYWxwYXRoKG9iaikKLQkJCWlmIG9iaiBub3QgaW4g c2VsZi5fb2JqX3Byb3BlcnRpZXM6Ci0JCQkJcmFpc2UgS2V5RXJyb3IoIiVzIG5vdCBpbiBvYmpl Y3QgbGlzdCIgJSBvYmopCi0JCWFyY2gsIG5lZWRlZCwgcGF0aCwgc29uYW1lID0gc2VsZi5fb2Jq X3Byb3BlcnRpZXNbb2JqXQotCQlyZXR1cm4gc29uYW1lCisJCWlmIG9iaiBub3QgaW4gc2VsZi5f b2JqX2tleV9jYWNoZToKKwkJCXJhaXNlIEtleUVycm9yKCIlcyBub3QgaW4gb2JqZWN0IGxpc3Qi ICUgb2JqKQorCQlyZXR1cm4gc2VsZi5fb2JqX3Byb3BlcnRpZXNbc2VsZi5fb2JqX2tleV9jYWNo ZVtvYmpdXVszXQorCisJZGVmIGZpbmRQcm92aWRlcnMoc2VsZiwgb2JqPU5vbmUsIG9ial9rZXk9 Tm9uZSk6CisJCSIiIgorCQlGaW5kIHByb3ZpZGVycyBmb3IgYW4gb2JqZWN0IG9yIG9iamVjdCBr ZXkuCisKKwkJVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGVpdGhlciBhbiBvYmog b3Igb2JqX2tleS4gIElmIGNhbGxlZAorCQl3aXRoIGJvdGgsIHRoZSBvYmpfa2V5IGlzIGlnbm9y ZWQuICBJZiBjYWxsZWQgd2l0aCBuZWl0aGVyLCBLZXlFcnJvciBpcworCQlyYWlzZWQgYXMgaWYg YW4gaW52YWxpZCBvYmogd2FzIHBhc3NlZC4KKworCQlJbiBzb21lIGNhc2VzLCBub3QgYWxsIHZh bGlkIGxpYnJhcmllcyBhcmUgcmV0dXJuZWQuICBUaGlzIG1heSBvY2N1ciB3aGVuCisJCWFuIHNv bmFtZSBzeW1saW5rIHJlZmVyZW5jaW5nIGEgbGlicmFyeSBpcyBpbiBhbiBvYmplY3QncyBydW5w YXRoIHdoaWxlCisJCXRoZSBhY3R1YWwgbGlicmFyeSBpcyBub3QuCisKKwkJQHBhcmFtIG9iajog YWJzb2x1dGUgcGF0aCB0byBhbiBvYmplY3QKKwkJQHR5cGUgb2JqOiBzdHJpbmcgKGV4YW1wbGU6 ICcvdXNyL2Jpbi9iYXInKQorCQlAcGFyYW0gb2JqX2tleToga2V5IGZyb20gTGlua2FnZU1hcC5f Z2VuZXJhdGVPYmpLZXkKKwkJQHR5cGUgb2JqX2tleTogMi10dXBsZSBvZiBsb25ncyBvciBzdHJp bmcKKwkJQHJ0eXBlOiBkaWN0IChleGFtcGxlOiB7J2xpYmJhci5zbyc6IHNldChbJy9saWIvbGli YmFyLnNvLjEuNSddKX0pCisJCUByZXR1cm46IFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzb25hbWUg LT4gc2V0LW9mLWxpYnJhcnktcGF0aHMsIHdoZXJlCisJCXNldC1vZi1saWJyYXJ5LXBhdGhzIHNh dGlzZnkgc29uYW1lLgorCisJCSIiIgorCQlyVmFsdWUgPSB7fQogCi0JZGVmIGZpbmRQcm92aWRl cnMoc2VsZiwgb2JqKToKIAkJaWYgbm90IHNlbGYuX2xpYnM6CiAJCQlzZWxmLnJlYnVpbGQoKQog Ci0JCXJlYWxwYXRoX2NhY2hlID0ge30KLQkJZGVmIHJlYWxwYXRoKHApOgotCQkJcmVhbF9wYXRo ID0gcmVhbHBhdGhfY2FjaGUuZ2V0KHApCi0JCQlpZiByZWFsX3BhdGggaXMgTm9uZToKLQkJCQly ZWFsX3BhdGggPSBvcy5wYXRoLnJlYWxwYXRoKHApCi0JCQkJcmVhbHBhdGhfY2FjaGVbcF0gPSBy ZWFsX3BhdGgKLQkJCXJldHVybiByZWFsX3BhdGgKLQotCQlyVmFsdWUgPSB7fQotCQlpZiBvYmog bm90IGluIHNlbGYuX29ial9wcm9wZXJ0aWVzOgotCQkJb2JqID0gcmVhbHBhdGgob2JqKQotCQkJ aWYgb2JqIG5vdCBpbiBzZWxmLl9vYmpfcHJvcGVydGllczoKLQkJCQlyYWlzZSBLZXlFcnJvcigi JXMgbm90IGluIG9iamVjdCBsaXN0IiAlIG9iaikKLQkJYXJjaCwgbmVlZGVkLCBwYXRoLCBzb25h bWUgPSBzZWxmLl9vYmpfcHJvcGVydGllc1tvYmpdCi0JCXBhdGggPSBwYXRoWzpdCi0JCXBhdGgu ZXh0ZW5kKHNlbGYuX2RlZnBhdGgpCi0JCXBhdGggPSBzZXQocmVhbHBhdGgoeCkgZm9yIHggaW4g cGF0aCkKLQkJZm9yIHggaW4gbmVlZGVkOgotCQkJclZhbHVlW3hdID0gc2V0KCkKLQkJCWlmIHgg bm90IGluIHNlbGYuX2xpYnMgb3IgYXJjaCBub3QgaW4gc2VsZi5fbGlic1t4XToKLQkJCQljb250 aW51ZQotCQkJZm9yIHkgaW4gc2VsZi5fbGlic1t4XVthcmNoXVsicHJvdmlkZXJzIl06Ci0JCQkJ aWYgeFswXSA9PSBvcy5zZXAgYW5kIHJlYWxwYXRoKHgpID09IHJlYWxwYXRoKHkpOgotCQkJCQly VmFsdWVbeF0uYWRkKHkpCi0JCQkJZWxpZiByZWFscGF0aChvcy5wYXRoLmRpcm5hbWUoeSkpIGlu IHBhdGg6Ci0JCQkJCXJWYWx1ZVt4XS5hZGQoeSkKKwkJIyBEZXRlcm1pbmUgdGhlIG9ial9rZXkg ZnJvbSB0aGUgYXJndW1lbnRzLgorCQlpZiBvYmogaXMgbm90IE5vbmU6CisJCQlvYmpfa2V5ID0g c2VsZi5fb2JqX2tleV9jYWNoZS5nZXQob2JqKQorCQkJaWYgb2JqX2tleSBub3QgaW4gc2VsZi5f b2JqX3Byb3BlcnRpZXM6CisJCQkJb2JqX2tleSA9IHNlbGYuX2dlbmVyYXRlT2JqS2V5KG9iaikK KwkJCQlpZiBvYmpfa2V5IG5vdCBpbiBzZWxmLl9vYmpfcHJvcGVydGllczoKKwkJCQkJcmFpc2Ug S2V5RXJyb3IoIiVzICglcykgbm90IGluIG9iamVjdCBsaXN0IiAlIChvYmpfa2V5LCBvYmopKQor CQllbGlmIG9ial9rZXkgbm90IGluIHNlbGYuX29ial9wcm9wZXJ0aWVzOgorCQkJcmFpc2UgS2V5 RXJyb3IoIiVzIG5vdCBpbiBvYmplY3QgbGlzdCIgJSBvYmpfa2V5KQorCisJCWFyY2gsIG5lZWRl ZCwgcGF0aCwgXywgXyA9IHNlbGYuX29ial9wcm9wZXJ0aWVzW29ial9rZXldCisJCXBhdGggPSBw YXRoLnVuaW9uKHNlbGYuX2RlZnBhdGgpCisJCWZvciBzb25hbWUgaW4gbmVlZGVkOgorCQkJclZh bHVlW3NvbmFtZV0gPSBzZXQoKQorCQkJaWYgc29uYW1lIG5vdCBpbiBzZWxmLl9saWJzIG9yIGFy Y2ggbm90IGluIHNlbGYuX2xpYnNbc29uYW1lXToKKwkJCQljb250aW51ZQorCQkJIyBGb3IgZWFj aCBwb3RlbnRpYWwgcHJvdmlkZXIgb2YgdGhlIHNvbmFtZSwgYWRkIGl0IHRvIHJWYWx1ZSBpZiBp dAorCQkJIyByZXNpZGVzIGluIHRoZSBvYmoncyBydW5wYXRoLgorCQkJZm9yIHByb3ZpZGVyX2tl eSBpbiBzZWxmLl9saWJzW3NvbmFtZV1bYXJjaF1bInByb3ZpZGVycyJdOgorCQkJCXByb3ZpZGVy cyA9IHNlbGYuX29ial9wcm9wZXJ0aWVzW3Byb3ZpZGVyX2tleV1bNF0KKwkJCQlmb3IgcHJvdmlk ZXIgaW4gcHJvdmlkZXJzOgorCQkJCQlpZiBvcy5wYXRoLmRpcm5hbWUocHJvdmlkZXIpIGluIHBh dGg6CisJCQkJCQlyVmFsdWVbc29uYW1lXS5hZGQocHJvdmlkZXIpCiAJCXJldHVybiByVmFsdWUK LQkKLQlkZWYgZmluZENvbnN1bWVycyhzZWxmLCBvYmopOgorCisJZGVmIGZpbmRDb25zdW1lcnMo c2VsZiwgb2JqPU5vbmUsIG9ial9rZXk9Tm9uZSk6CisJCSIiIgorCQlGaW5kIGNvbnN1bWVycyBv ZiBhbiBvYmplY3Qgb3Igb2JqZWN0IGtleS4KKworCQlUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2Fs bGVkIHdpdGggZWl0aGVyIGFuIG9iaiBvciBvYmpfa2V5LiAgSWYgY2FsbGVkCisJCXdpdGggYm90 aCwgdGhlIG9ial9rZXkgaXMgaWdub3JlZC4gIElmIGNhbGxlZCB3aXRoIG5laXRoZXIsIEtleUVy cm9yIGlzCisJCXJhaXNlZCBhcyBpZiBhbiBpbnZhbGlkIG9iaiB3YXMgcGFzc2VkLgorCisJCUlu IHNvbWUgY2FzZXMsIG5vdCBhbGwgY29uc3VtZXJzIGFyZSByZXR1cm5lZC4gIFRoaXMgbWF5IG9j Y3VyIHdoZW4KKwkJYW4gc29uYW1lIHN5bWxpbmsgcmVmZXJlbmNpbmcgYSBsaWJyYXJ5IGlzIGlu IGFuIG9iamVjdCdzIHJ1bnBhdGggd2hpbGUKKwkJdGhlIGFjdHVhbCBsaWJyYXJ5IGlzIG5vdC4K KworCQlAcGFyYW0gb2JqOiBhYnNvbHV0ZSBwYXRoIHRvIGFuIG9iamVjdAorCQlAdHlwZSBvYmo6 IHN0cmluZyAoZXhhbXBsZTogJy91c3IvYmluL2JhcicpCisJCUBwYXJhbSBvYmpfa2V5OiBrZXkg ZnJvbSBMaW5rYWdlTWFwLl9nZW5lcmF0ZU9iaktleQorCQlAdHlwZSBvYmpfa2V5OiAyLXR1cGxl IG9mIGxvbmdzIG9yIHN0cmluZworCQlAcnR5cGU6IHNldCBvZiBzdHJpbmdzIChleGFtcGxlOiAp CisJCUByZXR1cm46IFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzb25hbWUgLT4gc2V0LW9mLWxpYnJh cnktcGF0aHMsIHdoZXJlCisJCXNldC1vZi1saWJyYXJ5LXBhdGhzIHNhdGlzZnkgc29uYW1lLgor CisJCSIiIgorCQlyVmFsdWUgPSBzZXQoKQorCiAJCWlmIG5vdCBzZWxmLl9saWJzOgogCQkJc2Vs Zi5yZWJ1aWxkKCkKIAotCQlyZWFscGF0aF9jYWNoZSA9IHt9Ci0JCWRlZiByZWFscGF0aChwKToK LQkJCXJlYWxfcGF0aCA9IHJlYWxwYXRoX2NhY2hlLmdldChwKQotCQkJaWYgcmVhbF9wYXRoIGlz IE5vbmU6Ci0JCQkJcmVhbF9wYXRoID0gb3MucGF0aC5yZWFscGF0aChwKQotCQkJCXJlYWxwYXRo X2NhY2hlW3BdID0gcmVhbF9wYXRoCi0JCQlyZXR1cm4gcmVhbF9wYXRoCi0KLQkJaWYgb2JqIG5v dCBpbiBzZWxmLl9vYmpfcHJvcGVydGllczoKLQkJCW9iaiA9IHJlYWxwYXRoKG9iaikKLQkJCWlm IG9iaiBub3QgaW4gc2VsZi5fb2JqX3Byb3BlcnRpZXM6Ci0JCQkJcmFpc2UgS2V5RXJyb3IoIiVz IG5vdCBpbiBvYmplY3QgbGlzdCIgJSBvYmopCisJCSMgRGV0ZXJtaW5lIHRoZSBvYmpfa2V5IGFu ZCB0aGUgc2V0IG9mIG9iamVjdHMgbWF0Y2hpbmcgdGhlIGFyZ3VtZW50cy4KKwkJaWYgb2JqIGlz IG5vdCBOb25lOgorCQkJb2JqcyA9IHNldChbb2JqXSkKKwkJCW9ial9rZXkgPSBzZWxmLl9vYmpf a2V5X2NhY2hlLmdldChvYmopCisJCQlpZiBvYmpfa2V5IG5vdCBpbiBzZWxmLl9vYmpfcHJvcGVy dGllczoKKwkJCQlvYmpfa2V5ID0gc2VsZi5fZ2VuZXJhdGVPYmpLZXkob2JqKQorCQkJCWlmIG9i al9rZXkgbm90IGluIHNlbGYuX29ial9wcm9wZXJ0aWVzOgorCQkJCQlyYWlzZSBLZXlFcnJvcigi JXMgKCVzKSBub3QgaW4gb2JqZWN0IGxpc3QiICUgKG9ial9rZXksIG9iaikpCisJCWVsc2U6CisJ CQlpZiBvYmpfa2V5IG5vdCBpbiBzZWxmLl9vYmpfcHJvcGVydGllczoKKwkJCQlyYWlzZSBLZXlF cnJvcigiJXMgbm90IGluIG9iamVjdCBsaXN0IiAlIG9ial9rZXkpCisJCQlvYmpzID0gc2VsZi5f b2JqX3Byb3BlcnRpZXNbb2JqX2tleV1bNF0KKworCQkjIERldGVybWluZSB0aGUgZGlyZWN0b3J5 KGllcykgZnJvbSB0aGUgc2V0IG9mIG9iamVjdHMuCisJCW9ianNfZGlycyA9IHNldChbb3MucGF0 aC5kaXJuYW1lKHgpIGZvciB4IGluIG9ianNdKQogCiAJCSMgSWYgdGhlcmUgaXMgYW5vdGhlciB2 ZXJzaW9uIG9mIHRoaXMgbGliIHdpdGggdGhlCiAJCSMgc2FtZSBzb25hbWUgYW5kIHRoZSBtYXN0 ZXIgbGluayBwb2ludHMgdG8gdGhhdAogCQkjIG90aGVyIHZlcnNpb24sIHRoaXMgbGliIHdpbGwg YmUgc2hhZG93ZWQgYW5kIHdvbid0CiAJCSMgaGF2ZSBhbnkgY29uc3VtZXJzLgotCQlhcmNoLCBu ZWVkZWQsIHBhdGgsIHNvbmFtZSA9IHNlbGYuX29ial9wcm9wZXJ0aWVzW29ial0KLQkJb2JqX2Rp ciA9IG9zLnBhdGguZGlybmFtZShvYmopCi0JCW1hc3Rlcl9saW5rID0gb3MucGF0aC5qb2luKG9i al9kaXIsIHNvbmFtZSkKLQkJdHJ5OgotCQkJbWFzdGVyX3N0ID0gb3Muc3RhdChtYXN0ZXJfbGlu aykKLQkJCW9ial9zdCA9IG9zLnN0YXQob2JqKQotCQlleGNlcHQgT1NFcnJvcjoKLQkJCXBhc3MK LQkJZWxzZToKLQkJCWlmIChvYmpfc3Quc3RfZGV2LCBvYmpfc3Quc3RfaW5vKSAhPSBcCi0JCQkJ KG1hc3Rlcl9zdC5zdF9kZXYsIG1hc3Rlcl9zdC5zdF9pbm8pOgotCQkJCXJldHVybiBzZXQoKQot Ci0JCXJWYWx1ZSA9IHNldCgpCi0JCWZvciBzb25hbWUgaW4gc2VsZi5fbGliczoKLQkJCWZvciBh cmNoIGluIHNlbGYuX2xpYnNbc29uYW1lXToKLQkJCQlpZiBvYmogaW4gc2VsZi5fbGlic1tzb25h bWVdW2FyY2hdWyJwcm92aWRlcnMiXToKLQkJCQkJZm9yIHggaW4gc2VsZi5fbGlic1tzb25hbWVd W2FyY2hdWyJjb25zdW1lcnMiXToKLQkJCQkJCXBhdGggPSBzZWxmLl9vYmpfcHJvcGVydGllc1t4 XVsyXQotCQkJCQkJcGF0aCA9IFtyZWFscGF0aCh5KSBmb3IgeSBpbiBwYXRoK3NlbGYuX2RlZnBh dGhdCi0JCQkJCQlpZiBzb25hbWVbMF0gPT0gb3Muc2VwIGFuZCByZWFscGF0aChzb25hbWUpID09 IHJlYWxwYXRoKG9iaik6Ci0JCQkJCQkJclZhbHVlLmFkZCh4KQotCQkJCQkJZWxpZiByZWFscGF0 aChvYmpfZGlyKSBpbiBwYXRoOgotCQkJCQkJCXJWYWx1ZS5hZGQoeCkKKwkJaWYgb2JqIGlzIG5v dCBOb25lOgorCQkJc29uYW1lID0gc2VsZi5fb2JqX3Byb3BlcnRpZXNbb2JqX2tleV1bM10KKwkJ CW9ial9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob2JqKQorCQkJbWFzdGVyX2xpbmsgPSBvcy5wYXRo LmpvaW4ob2JqX2Rpciwgc29uYW1lKQorCQkJdHJ5OgorCQkJCW1hc3Rlcl9zdCA9IG9zLnN0YXQo bWFzdGVyX2xpbmspCisJCQkJb2JqX3N0ID0gb3Muc3RhdChvYmopCisJCQlleGNlcHQgT1NFcnJv cjoKKwkJCQlwYXNzCisJCQllbHNlOgorCQkJCWlmIChvYmpfc3Quc3RfZGV2LCBvYmpfc3Quc3Rf aW5vKSAhPSBcCisJCQkJCShtYXN0ZXJfc3Quc3RfZGV2LCBtYXN0ZXJfc3Quc3RfaW5vKToKKwkJ CQkJcmV0dXJuIHNldCgpCisKKwkJYXJjaCwgXywgXywgc29uYW1lLCBfID0gc2VsZi5fb2JqX3By b3BlcnRpZXNbb2JqX2tleV0KKwkJaWYgc29uYW1lIGluIHNlbGYuX2xpYnMgYW5kIGFyY2ggaW4g c2VsZi5fbGlic1tzb25hbWVdOgorCQkJIyBGb3IgZWFjaCBwb3RlbnRpYWwgY29uc3VtZXIsIGFk ZCBpdCB0byByVmFsdWUgaWYgYW4gb2JqZWN0IGZyb20gdGhlCisJCQkjIGFyZ3VtZW50cyByZXNp ZGVzIGluIHRoZSBjb25zdW1lcidzIHJ1bnBhdGguCisJCQlmb3IgY29uc3VtZXJfa2V5IGluIHNl bGYuX2xpYnNbc29uYW1lXVthcmNoXVsiY29uc3VtZXJzIl06CisJCQkJXywgXywgcGF0aCwgXywg Y29uc3VtZXJfb2JqcyA9IFwKKwkJCQkJCXNlbGYuX29ial9wcm9wZXJ0aWVzW2NvbnN1bWVyX2tl eV0KKwkJCQlwYXRoID0gcGF0aC51bmlvbihzZWxmLl9kZWZwYXRoKQorCQkJCWlmIG9ianNfZGly cy5pbnRlcnNlY3Rpb24ocGF0aCk6CisJCQkJCXJWYWx1ZS51cGRhdGUoY29uc3VtZXJfb2JqcykK IAkJcmV0dXJuIHJWYWx1ZQotCQkJCQkKKwogY2xhc3MgdmFyZGJhcGkoZGJhcGkpOgogCiAJX2V4 Y2x1ZGVkX2RpcnMgPSBbIkNWUyIsICJsb3N0K2ZvdW5kIl0K ------=_Part_54009_27571114.1219288185481 Content-Type: application/octet-stream; name=sets.conf.2.2_rc8.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fk4q20hw2 Content-Disposition: attachment; filename=sets.conf.2.2_rc8.patch LS0tIHNldHMuY29uZi4yLjJfcmM4CTIwMDgtMDgtMTQgMTU6NDY6MjAuMDAwMDAwMDAwIC0wNTAw CisrKyAvdXNyL3NoYXJlL3BvcnRhZ2UvY29uZmlnL3NldHMuY29uZgkyMDA4LTA4LTE0IDE1OjU2 OjE4LjAwMDAwMDAwMCAtMDUwMApAQCAtNjMsMyArNjMsOCBAQAogW2Rvd25ncmFkZV0KIGNsYXNz ID0gcG9ydGFnZS5zZXRzLmRiYXBpLkRvd25ncmFkZVNldAogd29ybGQtY2FuZGlkYXRlID0gRmFs c2UKKworIyBQYWNrYWdlcyB0byByZWJ1aWxkIGJyb2tlbiBsaWJyYXJ5IGRlcGVuZGVuY2llcy4K K1ttaXNzaW5nLXJlYnVpbGRdCitjbGFzcyA9IHBvcnRhZ2Uuc2V0cy5saWJzLk1pc3NpbmdMaWJy YXJ5Q29uc3VtZXJTZXQKK3dvcmxkLWNhbmRpZGF0ZSA9IEZhbHNlCg== ------=_Part_54009_27571114.1219288185481--