From lucene-net-dev-return-1564-apmail-incubator-lucene-net-dev-archive=incubator.apache.org@incubator.apache.org Wed Oct 08 21:08:19 2008 Return-Path: Delivered-To: apmail-incubator-lucene-net-dev-archive@locus.apache.org Received: (qmail 28246 invoked from network); 8 Oct 2008 21:08:19 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 8 Oct 2008 21:08:19 -0000 Received: (qmail 45109 invoked by uid 500); 8 Oct 2008 21:08:18 -0000 Delivered-To: apmail-incubator-lucene-net-dev-archive@incubator.apache.org Received: (qmail 45089 invoked by uid 500); 8 Oct 2008 21:08:18 -0000 Mailing-List: contact lucene-net-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: lucene-net-dev@incubator.apache.org Delivered-To: mailing list lucene-net-dev@incubator.apache.org Received: (qmail 45078 invoked by uid 99); 8 Oct 2008 21:08:17 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 08 Oct 2008 14:08:17 -0700 X-ASF-Spam-Status: No, hits=2.1 required=10.0 tests=DNS_FROM_SECURITYSAGE,HTML_MESSAGE,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of dougsale@gmail.com designates 74.125.46.153 as permitted sender) Received: from [74.125.46.153] (HELO yw-out-1718.google.com) (74.125.46.153) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 08 Oct 2008 21:07:14 +0000 Received: by yw-out-1718.google.com with SMTP id 5so751767ywr.0 for ; Wed, 08 Oct 2008 14:07:39 -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:to :subject:mime-version:content-type; bh=BxMZ6PuvHdZ2rZaJDkcmYzFpXglqOGxIWZK7DtAoFig=; b=amE02vRG+r0muT9eT4s0adg+hbbBXXOI7GlZysDH6zEVHl34WaJ6fZhDouOd3H1Quk qrbSkl5QvG1iIC5VZIOsa36qYYlmeJg02b1ua5OoOFRiiyUd1EHTkiASAa+SDSy0xEyZ UVgZ605PfjJ0hT/Afn5PiVpnkAxr2SZ9W8IfY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:mime-version:content-type; b=QeSTQ0K6TQ4j+R+DJzjxPmx2mH291WPkKm0I/T6pvQdt4zjpFoaGpmwJ3OI4pcSu8o 0B7DwgUxkSRq68vVT9Tw9/YU0xEZAlrlRUuhVLpktb6u6HJ3nhRj9GVUMW41+vi0YeVP ru2TmMw1gzeGfyJZI+57JJRVBP+54hucr+kSs= Received: by 10.142.139.14 with SMTP id m14mr3901670wfd.207.1223500058946; Wed, 08 Oct 2008 14:07:38 -0700 (PDT) Received: by 10.142.157.2 with HTTP; Wed, 8 Oct 2008 14:07:38 -0700 (PDT) Message-ID: <8e3fbf150810081407t4c45d368wb27b20dfc593e2c3@mail.gmail.com> Date: Wed, 8 Oct 2008 16:07:38 -0500 From: "Doug Sale" To: lucene-net-dev@incubator.apache.org Subject: Lucene.Net 2.3.1 Candidate MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_68887_21666192.1223500058932" X-Virus-Checked: Checked by ClamAV on apache.org ------=_Part_68887_21666192.1223500058932 Content-Type: multipart/alternative; boundary="----=_Part_68888_28767898.1223500058933" ------=_Part_68888_28767898.1223500058933 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline I believe we have a candidate for the Lucene.Net 2.3.1 release. It diverges from the SVN HEAD by the list of patches below. LUCENENET-135 SupportClass.patch LUCENENET-143 TestStressIndexing2.patch, FieldsReader.patch LUCENENET-145 DocumentsWriter.patch LUCENENET-146 SegmentTermPositionVector.patch LUCENENET-151 MultiPhraseQuery.patch LUCENENET-152 SegmentInfos.patch, FSDirectory.patch LUCENENET-154 TestIndexWriterLockRelease.patch LUCENENET-155 SetUp.patch LUCENENET-157 GetFieldNames.patch LUCENENET-158 CheckHits.patch I have attached a comprehensive patch to simplify things for those of you who would like to try it out. 1) Get the latest from SVN HEAD (currently revision 702987) 2) Apply Comprehensive.patch from the root directory. - Doug ------=_Part_68888_28767898.1223500058933 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline
I believe we have a candidate for the Lucene.Net 2.3.1 release.  It diverges from the SVN HEAD by the list of patches below.

LUCENENET
-135 SupportClass.patch
LUCENENET-143 TestStressIndexing2.patch, FieldsReader.patch
LUCENENET-145 DocumentsWriter.patch
LUCENENET-146 SegmentTermPositionVector.
patch
LUCENENET-151 MultiPhraseQuery.patch
LUCENENET-152 SegmentInfos.patch, FSDirectory.patch
LUCENENET-154 TestIndexWriterLockRelease.patch
LUCENENET-155 SetUp.patch
LUCENENET-157 GetFieldNames.patch
LUCENENET-158 CheckHits.patch

I have attached a comprehensive patch to simplify things for those of you who would like to try it out.

1) Get the latest from SVN HEAD (currently revision 702987)
2) Apply Comprehensive.patch from the root directory.

- Doug
------=_Part_68888_28767898.1223500058933-- ------=_Part_68887_21666192.1223500058932 Content-Type: text/x-patch; name=Comprehensive.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fm2g9xpo0 Content-Disposition: attachment; filename=Comprehensive.patch SW5kZXg6IEMjL3NyYy9MdWNlbmUuTmV0L0luZGV4L0NoZWNrSW5kZXguY3MNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSBDIy9zcmMvTHVjZW5lLk5ldC9JbmRleC9DaGVja0luZGV4LmNzCShyZXZpc2lvbiA2OTM5 MTUpDQorKysgQyMvc3JjL0x1Y2VuZS5OZXQvSW5kZXgvQ2hlY2tJbmRleC5jcwkod29ya2luZyBj b3B5KQ0KQEAgLTE3OSw4ICsxNzksOCBAQA0KIAkJCQkJCW91dF9SZW5hbWVkLldyaXRlTGluZSgi T0siKTsNCiAJCQkJCQ0KIAkJCQkJb3V0X1JlbmFtZWQuV3JpdGUoIiAgICB0ZXN0OiBmaWVsZHMs IG5vcm1zLi4uLi4uLiIpOw0KLQkJCQkJU3lzdGVtLkNvbGxlY3Rpb25zLklEaWN0aW9uYXJ5IGZp ZWxkTmFtZXMgPSAoU3lzdGVtLkNvbGxlY3Rpb25zLklEaWN0aW9uYXJ5KSByZWFkZXIuR2V0Rmll bGROYW1lcyhJbmRleFJlYWRlci5GaWVsZE9wdGlvbi5BTEwpOw0KLQkJCQkJU3lzdGVtLkNvbGxl Y3Rpb25zLklFbnVtZXJhdG9yIGl0ID0gZmllbGROYW1lcy5LZXlzLkdldEVudW1lcmF0b3IoKTsN CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5Db2xsZWN0aW9ucy5JQ29sbGVjdGlvbiBmaWVs ZE5hbWVzID0gcmVhZGVyLkdldEZpZWxkTmFtZXMoSW5kZXhSZWFkZXIuRmllbGRPcHRpb24uQUxM KTsNCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5Db2xsZWN0aW9ucy5JRW51bWVyYXRvciBp dCA9IGZpZWxkTmFtZXMuR2V0RW51bWVyYXRvcigpOw0KIAkJCQkJd2hpbGUgKGl0Lk1vdmVOZXh0 KCkpDQogCQkJCQl7DQogCQkJCQkJU3lzdGVtLlN0cmluZyBmaWVsZE5hbWUgPSAoU3lzdGVtLlN0 cmluZykgaXQuQ3VycmVudDsNCkluZGV4OiBDIy9zcmMvTHVjZW5lLk5ldC9JbmRleC9Eb2N1bWVu dHNXcml0ZXIuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBDIy9zcmMvTHVjZW5lLk5ldC9JbmRleC9Eb2N1 bWVudHNXcml0ZXIuY3MJKHJldmlzaW9uIDY5MzkxNSkNCisrKyBDIy9zcmMvTHVjZW5lLk5ldC9J bmRleC9Eb2N1bWVudHNXcml0ZXIuY3MJKHdvcmtpbmcgY29weSkNCkBAIC0zNDY0LDcgKzM0NjQs NyBAQA0KIAkJCQkJDQogCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGJ1ZmZlclVwdG87IGkrKykN CiAJCQkJCQkvLyBGdWxseSB6ZXJvIGZpbGwgYnVmZmVycyB0aGF0IHdlIGZ1bGx5IHVzZWQNCi0J CQkJCQlBcnJheS5DbGVhcihidWZmZXJzW2ldLCAwLCBidWZmZXJzLkxlbmd0aCk7DQorCQkJCQkJ QXJyYXkuQ2xlYXIoYnVmZmVyc1tpXSwgMCwgYnVmZmVyc1tpXS5MZW5ndGgpOw0KIAkJCQkJDQog CQkJCQkvLyBQYXJ0aWFsIHplcm8gZmlsbCB0aGUgZmluYWwgYnVmZmVyDQogCQkJCQlBcnJheS5D bGVhcihidWZmZXJzW2J1ZmZlclVwdG9dLCAwLCBieXRlVXB0byk7DQpAQCAtMzQ4MywxMCArMzQ4 MywxMCBAQA0KIAkJCQ0KIAkJCXB1YmxpYyB2b2lkICBOZXh0QnVmZmVyKCkNCiAJCQl7DQotCQkJ CWlmICgxICsgYnVmZmVyVXB0byA9PSBidWZmZXJzLkxlbmd0aCkNCisJCQkJaWYgKDEgKyBidWZm ZXJVcHRvID09IGJ1ZmZlcnMuR2V0TGVuZ3RoKDApKQ0KIAkJCQl7DQotCQkJCQlieXRlW11bXSBu ZXdCdWZmZXJzID0gbmV3IGJ5dGVbKGludCkgKGJ1ZmZlcnMuTGVuZ3RoICogMS41KV1bXTsNCi0J CQkJCUFycmF5LkNvcHkoYnVmZmVycywgMCwgbmV3QnVmZmVycywgMCwgYnVmZmVycy5MZW5ndGgp Ow0KKwkJCQkJYnl0ZVtdW10gbmV3QnVmZmVycyA9IG5ldyBieXRlWyhpbnQpIChidWZmZXJzLkdl dExlbmd0aCgwKSAqIDEuNSldW107DQorCQkJCQlBcnJheS5Db3B5KGJ1ZmZlcnMsIDAsIG5ld0J1 ZmZlcnMsIDAsIGJ1ZmZlcnMuR2V0TGVuZ3RoKDApKTsNCiAJCQkJCWJ1ZmZlcnMgPSBuZXdCdWZm ZXJzOw0KIAkJCQl9DQogCQkJCWJ1ZmZlciA9IGJ1ZmZlcnNbMSArIGJ1ZmZlclVwdG9dID0gRW5j bG9zaW5nX0luc3RhbmNlLkdldEJ5dGVCbG9jaygpOw0KQEAgLTM1NzksMTAgKzM1NzksMTAgQEAN CiAJCQkNCiAJCQlwdWJsaWMgdm9pZCAgTmV4dEJ1ZmZlcigpDQogCQkJew0KLQkJCQlpZiAoMSAr IGJ1ZmZlclVwdG8gPT0gYnVmZmVycy5MZW5ndGgpDQorCQkJCWlmICgxICsgYnVmZmVyVXB0byA9 PSBidWZmZXJzLkdldExlbmd0aCgwKSkNCiAJCQkJew0KLQkJCQkJY2hhcltdW10gbmV3QnVmZmVy cyA9IG5ldyBjaGFyWyhpbnQpIChidWZmZXJzLkxlbmd0aCAqIDEuNSldW107DQotCQkJCQlBcnJh eS5Db3B5KGJ1ZmZlcnMsIDAsIG5ld0J1ZmZlcnMsIDAsIGJ1ZmZlcnMuTGVuZ3RoKTsNCisJCQkJ CWNoYXJbXVtdIG5ld0J1ZmZlcnMgPSBuZXcgY2hhclsoaW50KSAoYnVmZmVycy5HZXRMZW5ndGgo MCkgKiAxLjUpXVtdOw0KKwkJCQkJQXJyYXkuQ29weShidWZmZXJzLCAwLCBuZXdCdWZmZXJzLCAw LCBidWZmZXJzLkdldExlbmd0aCgwKSk7DQogCQkJCQlidWZmZXJzID0gbmV3QnVmZmVyczsNCiAJ CQkJfQ0KIAkJCQlidWZmZXIgPSBidWZmZXJzWzEgKyBidWZmZXJVcHRvXSA9IEVuY2xvc2luZ19J bnN0YW5jZS5HZXRDaGFyQmxvY2soKTsNCkBAIC0zOTQwLDQgKzM5NDAsNCBAQA0KIAkJCWRvY1dy aXRlci5TZXRBYm9ydGluZygpOw0KIAkJfQ0KIAl9DQotfQ0KXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlDQorfQ0KSW5kZXg6IEMjL3NyYy9MdWNlbmUuTmV0L0luZGV4L0ZpZWxkc1JlYWRlci5j cw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KLS0tIEMjL3NyYy9MdWNlbmUuTmV0L0luZGV4L0ZpZWxkc1JlYWRlci5j cwkocmV2aXNpb24gNjkzOTE1KQ0KKysrIEMjL3NyYy9MdWNlbmUuTmV0L0luZGV4L0ZpZWxkc1Jl YWRlci5jcwkod29ya2luZyBjb3B5KQ0KQEAgLTE1Niw3ICsxNTYsNyBAQA0KIAkJDQogCQlwdWJs aWMgRG9jdW1lbnQgRG9jKGludCBuLCBGaWVsZFNlbGVjdG9yIGZpZWxkU2VsZWN0b3IpDQogCQl7 DQotCQkJaW5kZXhTdHJlYW0uU2VlayhuICogOEwpOw0KKwkJCWluZGV4U3RyZWFtLlNlZWsoKG4g KyBkb2NTdG9yZU9mZnNldCkgKiA4TCk7DQogCQkJbG9uZyBwb3NpdGlvbiA9IGluZGV4U3RyZWFt LlJlYWRMb25nKCk7DQogCQkJZmllbGRzU3RyZWFtLlNlZWsocG9zaXRpb24pOw0KIAkJCQ0KQEAg LTY0Myw0ICs2NDMsNCBAQA0KIAkJCX0NCiAJCX0NCiAJfQ0KLX0NClwgTm8gbmV3bGluZSBhdCBl bmQgb2YgZmlsZQ0KK30NCkluZGV4OiBDIy9zcmMvTHVjZW5lLk5ldC9JbmRleC9NdWx0aVNlZ21l bnRSZWFkZXIuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBDIy9zcmMvTHVjZW5lLk5ldC9JbmRleC9NdWx0 aVNlZ21lbnRSZWFkZXIuY3MJKHJldmlzaW9uIDY5MzkxNSkNCisrKyBDIy9zcmMvTHVjZW5lLk5l dC9JbmRleC9NdWx0aVNlZ21lbnRSZWFkZXIuY3MJKHdvcmtpbmcgY29weSkNCkBAIC01MTYsMTQg KzUxNiwxNCBAQA0KIAkJCWZvciAoaW50IGkgPSAwOyBpIDwgc3ViUmVhZGVycy5MZW5ndGg7IGkr KykNCiAJCQl7DQogCQkJCUluZGV4UmVhZGVyIHJlYWRlciA9IHN1YlJlYWRlcnNbaV07DQotCQkJ CVN5c3RlbS5Db2xsZWN0aW9ucy5JRW51bWVyYXRvciBuYW1lcyA9ICgoU3lzdGVtLkNvbGxlY3Rp b25zLklEaWN0aW9uYXJ5KXJlYWRlci5HZXRGaWVsZE5hbWVzKGZpZWxkTmFtZXMpKS5LZXlzLkdl dEVudW1lcmF0b3IoKTsNCi0JCQkJd2hpbGUgKG5hbWVzLk1vdmVOZXh0KCkpDQorICAgICAgICAg ICAgICAgIFN5c3RlbS5Db2xsZWN0aW9ucy5JRW51bWVyYXRvciBuYW1lcyA9IHJlYWRlci5HZXRG aWVsZE5hbWVzKGZpZWxkTmFtZXMpLkdldEVudW1lcmF0b3IoKTsNCisgICAgICAgICAgICAgICAg d2hpbGUgKG5hbWVzLk1vdmVOZXh0KCkpDQogCQkJCXsNCiAJCQkJCWlmICghZmllbGRTZXQuQ29u dGFpbnNLZXkobmFtZXMuQ3VycmVudCkpDQogCQkJCQkJZmllbGRTZXQuQWRkKG5hbWVzLkN1cnJl bnQsIG5hbWVzLkN1cnJlbnQpOw0KIAkJCQl9DQogCQkJfQ0KLQkJCXJldHVybiBmaWVsZFNldDsN CisJCQlyZXR1cm4gZmllbGRTZXQuS2V5czsNCiAJCX0NCiAJCQ0KIAkJLy8gZm9yIHRlc3RpbmcN CkBAIC04MDAsNCArODAwLDQgQEANCiAJCQl9DQogCQl9DQogCX0NCi19DQpcIE5vIG5ld2xpbmUg YXQgZW5kIG9mIGZpbGUNCit9DQpJbmRleDogQyMvc3JjL0x1Y2VuZS5OZXQvSW5kZXgvUGFyYWxs ZWxSZWFkZXIuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBDIy9zcmMvTHVjZW5lLk5ldC9JbmRleC9QYXJh bGxlbFJlYWRlci5jcwkocmV2aXNpb24gNjkzOTE1KQ0KKysrIEMjL3NyYy9MdWNlbmUuTmV0L0lu ZGV4L1BhcmFsbGVsUmVhZGVyLmNzCSh3b3JraW5nIGNvcHkpDQpAQCAtMTE0LDEwICsxMTQsMTEg QEANCiAJCQlTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmF0b3IgaSA9IGZpZWxkcy5HZXRFbnVt ZXJhdG9yKCk7DQogCQkJd2hpbGUgKGkuTW92ZU5leHQoKSkNCiAJCQl7DQotCQkJCVN5c3RlbS5D b2xsZWN0aW9ucy5EaWN0aW9uYXJ5RW50cnkgZmkgPSAoU3lzdGVtLkNvbGxlY3Rpb25zLkRpY3Rp b25hcnlFbnRyeSkgaS5DdXJyZW50Ow0KKyAgICAgICAgICAgICAgICAvL1N5c3RlbS5Db2xsZWN0 aW9ucy5EaWN0aW9uYXJ5RW50cnkgZmkgPSAoU3lzdGVtLkNvbGxlY3Rpb25zLkRpY3Rpb25hcnlF bnRyeSkgaS5DdXJyZW50Ow0KIA0KLQkJCQkvLyB1cGRhdGUgZmllbGRUb1JlYWRlciBtYXANCi0J CQkJU3lzdGVtLlN0cmluZyBmaWVsZCA9IGZpLktleS5Ub1N0cmluZygpOw0KKyAgICAgICAgICAg ICAgICAvLy8vIHVwZGF0ZSBmaWVsZFRvUmVhZGVyIG1hcA0KKyAgICAgICAgICAgICAgICAvL1N5 c3RlbS5TdHJpbmcgZmllbGQgPSBmaS5LZXkuVG9TdHJpbmcoKTsNCisgICAgICAgICAgICAgICAg U3lzdGVtLlN0cmluZyBmaWVsZCA9IChTdHJpbmcpIGkuQ3VycmVudDsNCiAJCQkJaWYgKGZpZWxk VG9SZWFkZXJbZmllbGRdID09IG51bGwpDQogCQkJCQlmaWVsZFRvUmVhZGVyW2ZpZWxkXSA9IHJl YWRlcjsNCiAJCQl9DQpAQCAtMzAyLDcgKzMwMyw3IEBADQogCQkJCQlTeXN0ZW0uQ29sbGVjdGlv bnMuSUVudW1lcmF0b3IgaXQgPSAoKFN5c3RlbS5Db2xsZWN0aW9ucy5JQ29sbGVjdGlvbikgcmVh ZGVyVG9GaWVsZHNbcmVhZGVyXSkuR2V0RW51bWVyYXRvcigpOw0KIAkJCQkJd2hpbGUgKGl0Lk1v dmVOZXh0KCkpDQogCQkJCQl7DQotCQkJCQkJaWYgKGZpZWxkU2VsZWN0b3IuQWNjZXB0KChTeXN0 ZW0uU3RyaW5nKSgoU3lzdGVtLkNvbGxlY3Rpb25zLkRpY3Rpb25hcnlFbnRyeSlpdC5DdXJyZW50 KS5WYWx1ZSkgIT0gRmllbGRTZWxlY3RvclJlc3VsdC5OT19MT0FEKQ0KKwkJCQkJCWlmIChmaWVs ZFNlbGVjdG9yLkFjY2VwdCgoU3lzdGVtLlN0cmluZylpdC5DdXJyZW50KSAhPSBGaWVsZFNlbGVj dG9yUmVzdWx0Lk5PX0xPQUQpDQogCQkJCQkJew0KIAkJCQkJCQlpbmNsdWRlID0gdHJ1ZTsNCiAJ CQkJCQkJYnJlYWs7DQpAQCAtNTIyLDE1ICs1MjMsMTQgQEANCiAJCQkJU3lzdGVtLkNvbGxlY3Rp b25zLklDb2xsZWN0aW9uIG5hbWVzID0gcmVhZGVyLkdldEZpZWxkTmFtZXMoZmllbGROYW1lcyk7 DQogCQkJCWZvciAoU3lzdGVtLkNvbGxlY3Rpb25zLklFbnVtZXJhdG9yIGl0ZXJhdG9yID0gbmFt ZXMuR2V0RW51bWVyYXRvcigpOyBpdGVyYXRvci5Nb3ZlTmV4dCgpOyApDQogCQkJCXsNCi0JCQkJ CVN5c3RlbS5Db2xsZWN0aW9ucy5EaWN0aW9uYXJ5RW50cnkgZmkgPSAoU3lzdGVtLkNvbGxlY3Rp b25zLkRpY3Rpb25hcnlFbnRyeSkgaXRlcmF0b3IuQ3VycmVudDsNCi0JCQkJCVN5c3RlbS5TdHJp bmcgcyA9IGZpLktleS5Ub1N0cmluZygpOw0KKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLlN0 cmluZyBzID0gKFN5c3RlbS5TdHJpbmcpaXRlcmF0b3IuQ3VycmVudDsNCiAJCQkJCWlmIChmaWVs ZFNldC5Db250YWluc0tleShzKSA9PSBmYWxzZSkNCiAJCQkJCXsNCiAJCQkJCQlmaWVsZFNldC5B ZGQocywgcyk7DQogCQkJCQl9DQogCQkJCX0NCiAJCQl9DQotCQkJcmV0dXJuIGZpZWxkU2V0Ow0K KwkJCXJldHVybiBmaWVsZFNldC5LZXlzOw0KIAkJfQ0KIAkJDQogCQlwcml2YXRlIGNsYXNzIFBh cmFsbGVsVGVybUVudW0gOiBUZXJtRW51bQ0KQEAgLTc1OCw0ICs3NTgsNCBAQA0KIAkJCX0NCiAJ CX0NCiAJfQ0KLX0NClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQ0KK30NCkluZGV4OiBDIy9z cmMvTHVjZW5lLk5ldC9JbmRleC9TZWdtZW50SW5mb3MuY3MNCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBDIy9z cmMvTHVjZW5lLk5ldC9JbmRleC9TZWdtZW50SW5mb3MuY3MJKHJldmlzaW9uIDY5MzkxNSkNCisr KyBDIy9zcmMvTHVjZW5lLk5ldC9JbmRleC9TZWdtZW50SW5mb3MuY3MJKHdvcmtpbmcgY29weSkN CkBAIC02MjAsMTkgKzYyMCwyNCBAQA0KIAkJCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IEx1Y2Vu ZS5OZXQuSW5kZXguU2VnbWVudEluZm9zLmRlZmF1bHRHZW5GaWxlUmV0cnlDb3VudDsgaSsrKQ0K IAkJCQkJCQl7DQogCQkJCQkJCQlJbmRleElucHV0IGdlbklucHV0ID0gbnVsbDsNCi0JCQkJCQkJ CXRyeQ0KLQkJCQkJCQkJew0KLQkJCQkJCQkJCWdlbklucHV0ID0gZGlyZWN0b3J5Lk9wZW5JbnB1 dChJbmRleEZpbGVOYW1lcy5TRUdNRU5UU19HRU4pOw0KLQkJCQkJCQkJfQ0KLQkJCQkJCQkJY2F0 Y2ggKFN5c3RlbS5JTy5GaWxlTm90Rm91bmRFeGNlcHRpb24gZSkNCi0JCQkJCQkJCXsNCi0JCQkJ CQkJCQlMdWNlbmUuTmV0LkluZGV4LlNlZ21lbnRJbmZvcy5NZXNzYWdlKCJzZWdtZW50cy5nZW4g b3BlbjogRmlsZU5vdEZvdW5kRXhjZXB0aW9uICIgKyBlKTsNCi0JCQkJCQkJCQlicmVhazsNCi0J CQkJCQkJCX0NCi0JCQkJCQkJCWNhdGNoIChTeXN0ZW0uSU8uSU9FeGNlcHRpb24gZSkNCi0JCQkJ CQkJCXsNCi0JCQkJCQkJCQlMdWNlbmUuTmV0LkluZGV4LlNlZ21lbnRJbmZvcy5NZXNzYWdlKCJz ZWdtZW50cy5nZW4gb3BlbjogSU9FeGNlcHRpb24gIiArIGUpOw0KLQkJCQkJCQkJfQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5DQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSW5wdXQg PSBkaXJlY3RvcnkuT3BlbklucHV0KEluZGV4RmlsZU5hbWVzLlNFR01FTlRTX0dFTik7DQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjYXRjaCAoU3lzdGVtLklPLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEx1Y2VuZS5OZXQuSW5kZXguU2VnbWVudEluZm9zLk1lc3NhZ2UoInNlZ21lbnRz LmdlbiBvcGVuOiBGaWxlTm90Rm91bmRFeGNlcHRpb24gIiArIGUpOw0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKFN5c3RlbS5J Ty5JT0V4Y2VwdGlvbiBlKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEx1Y2VuZS5OZXQuSW5kZXguU2VnbWVu dEluZm9zLk1lc3NhZ2UoInNlZ21lbnRzLmdlbiBvcGVuOiBJT0V4Y2VwdGlvbiAiICsgZSk7DQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjYXRjaCAoVW5hdXRob3JpemVkQWNjZXNzRXhjZXB0aW9uIGUpDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTHVjZW5lLk5ldC5JbmRleC5TZWdtZW50SW5mb3MuTWVzc2FnZSgic2VnbWVudHMu Z2VuIG9wZW46IFVuYXV0aG9yaXplZEFjY2Vzc0V4Y2VwdGlvbiAiICsgZSk7DQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLlRocmVhZGluZy5UaHJlYWQuU2xlZXAo MTApOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KIAkJCQkJCQkJDQogCQkJ CQkJCQlpZiAoZ2VuSW5wdXQgIT0gbnVsbCkNCiAJCQkJCQkJCXsNCkBAIC04MzAsNCArODM1LDQg QEANCiAJCQlyZXR1cm4gaW5mb3M7DQogCQl9DQogCX0NCi19DQpcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUNCit9DQpJbmRleDogQyMvc3JjL0x1Y2VuZS5OZXQvSW5kZXgvU2VnbWVudFJlYWRl ci5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIEMjL3NyYy9MdWNlbmUuTmV0L0luZGV4L1NlZ21lbnRSZWFk ZXIuY3MJKHJldmlzaW9uIDY5MzkxNSkNCisrKyBDIy9zcmMvTHVjZW5lLk5ldC9JbmRleC9TZWdt ZW50UmVhZGVyLmNzCSh3b3JraW5nIGNvcHkpDQpAQCAtODcyLDcgKzg3Miw3IEBADQogICAgICAg ICAgICAgICAgICAgICBmaWVsZFNldC5BZGQoZmkubmFtZSwgZmkubmFtZSk7DQogCQkJCX0NCiAJ CQl9DQotCQkJcmV0dXJuIGZpZWxkU2V0Ow0KKwkJCXJldHVybiBmaWVsZFNldC5LZXlzOw0KIAkJ fQ0KIAkJDQogCQkNCkBAIC0xMjM0LDQgKzEyMzQsNCBAQA0KIAkJCX0NCiAJCX0NCiAJfQ0KLX0N ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQ0KK30NCkluZGV4OiBDIy9zcmMvTHVjZW5lLk5l dC9JbmRleC9TZWdtZW50VGVybVBvc2l0aW9uVmVjdG9yLmNzDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gQyMv c3JjL0x1Y2VuZS5OZXQvSW5kZXgvU2VnbWVudFRlcm1Qb3NpdGlvblZlY3Rvci5jcwkocmV2aXNp b24gNjkzOTE1KQ0KKysrIEMjL3NyYy9MdWNlbmUuTmV0L0luZGV4L1NlZ21lbnRUZXJtUG9zaXRp b25WZWN0b3IuY3MJKHdvcmtpbmcgY29weSkNCkBAIC00Niw3ICs0Niw3IEBADQogCQkJVGVybVZl Y3Rvck9mZnNldEluZm9bXSByZXN1bHQgPSBUZXJtVmVjdG9yT2Zmc2V0SW5mby5FTVBUWV9PRkZT RVRfSU5GTzsNCiAJCQlpZiAob2Zmc2V0cyA9PSBudWxsKQ0KIAkJCQlyZXR1cm4gbnVsbDsNCi0J CQlpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IG9mZnNldHMuTGVuZ3RoKQ0KKwkJCWlmIChpbmRl eCA+PSAwICYmIGluZGV4IDwgb2Zmc2V0cy5HZXRMZW5ndGgoMCkpDQogCQkJew0KIAkJCQlyZXN1 bHQgPSBvZmZzZXRzW2luZGV4XTsNCiAJCQl9DQpAQCAtNjIsNyArNjIsNyBAQA0KIAkJCWludFtd IHJlc3VsdCA9IEVNUFRZX1RFUk1fUE9TOw0KIAkJCWlmIChwb3NpdGlvbnMgPT0gbnVsbCkNCiAJ CQkJcmV0dXJuIG51bGw7DQotCQkJaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBwb3NpdGlvbnMu TGVuZ3RoKQ0KKwkJCWlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgcG9zaXRpb25zLkdldExlbmd0 aCgwKSkNCiAJCQl7DQogCQkJCXJlc3VsdCA9IHBvc2l0aW9uc1tpbmRleF07DQogCQkJfQ0KQEAg LTcwLDQgKzcwLDQgQEANCiAJCQlyZXR1cm4gcmVzdWx0Ow0KIAkJfQ0KIAl9DQotfQ0KXCBObyBu ZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQorfQ0KSW5kZXg6IEMjL3NyYy9MdWNlbmUuTmV0L1NlYXJj aC9NdWx0aVBocmFzZVF1ZXJ5LmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gQyMvc3JjL0x1Y2VuZS5OZXQv U2VhcmNoL011bHRpUGhyYXNlUXVlcnkuY3MJKHJldmlzaW9uIDY5MzkxNSkNCisrKyBDIy9zcmMv THVjZW5lLk5ldC9TZWFyY2gvTXVsdGlQaHJhc2VRdWVyeS5jcwkod29ya2luZyBjb3B5KQ0KQEAg LTEzNyw3ICsxMzcsOCBAQA0KIAkJCQlUZXJtW10gYXJyID0gKFRlcm1bXSkgaXRlci5DdXJyZW50 Ow0KIAkJCQlmb3IgKGludCBpID0gMDsgaSA8IGFyci5MZW5ndGg7IGkrKykNCiAJCQkJew0KLQkJ CQkJdGVybXMuQWRkKGFycltpXSwgYXJyW2ldKTsNCisgICAgICAgICAgICAgICAgICAgIGlmICgh dGVybXMuQ29udGFpbnMoYXJyW2ldKSkNCisJCQkJCSAgICB0ZXJtcy5BZGQoYXJyW2ldLCBhcnJb aV0pOw0KIAkJCQl9DQogCQkJfQ0KIAkJfQ0KSW5kZXg6IEMjL3NyYy9MdWNlbmUuTmV0L1N0b3Jl L0ZTRGlyZWN0b3J5LmNzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gQyMvc3JjL0x1Y2VuZS5OZXQvU3RvcmUv RlNEaXJlY3RvcnkuY3MJKHJldmlzaW9uIDY5MzkxNSkNCisrKyBDIy9zcmMvTHVjZW5lLk5ldC9T dG9yZS9GU0RpcmVjdG9yeS5jcwkod29ya2luZyBjb3B5KQ0KQEAgLTcyNiwxMCArNzI2LDI1IEBA DQogCQkJcHVibGljIEZTSW5kZXhJbnB1dChTeXN0ZW0uSU8uRmlsZUluZm8gcGF0aCkgOiB0aGlz KHBhdGgsIEJ1ZmZlcmVkSW5kZXhJbnB1dC5CVUZGRVJfU0laRSkNCiAJCQl7DQogCQkJfQ0KLQkJ CQ0KKyAgICAgICAgICAgIA0KIAkJCXB1YmxpYyBGU0luZGV4SW5wdXQoU3lzdGVtLklPLkZpbGVJ bmZvIHBhdGgsIGludCBidWZmZXJTaXplKSA6IGJhc2UoYnVmZmVyU2l6ZSkNCiAJCQl7DQotCQkJ CWZpbGUgPSBuZXcgRGVzY3JpcHRvcih0aGlzLCBwYXRoLCBTeXN0ZW0uSU8uRmlsZUFjY2Vzcy5S ZWFkKTsNCisgICAgICAgICAgICAgICAgVW5hdXRob3JpemVkQWNjZXNzRXhjZXB0aW9uIGV4ID0g bnVsbDsNCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKQ0KKyAg ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICB0cnkNCisgICAgICAgICAgICAg ICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlID0gbmV3IERlc2NyaXB0b3Io dGhpcywgcGF0aCwgU3lzdGVtLklPLkZpbGVBY2Nlc3MuUmVhZCk7DQorICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAg ICAgICAgY2F0Y2ggKFVuYXV0aG9yaXplZEFjY2Vzc0V4Y2VwdGlvbiBlKQ0KKyAgICAgICAgICAg ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4ID0gZTsNCisgICAgICAgICAg ICAgICAgICAgICAgICBTeXN0ZW0uVGhyZWFkaW5nLlRocmVhZC5TbGVlcCgxMDApOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgIEdDLkNvbGxlY3QoKTsNCisgICAgICAgICAgICAgICAgICAgIH0N CisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB0aHJvdyBleDsNCiAJCQl9DQog CQkNCiAJCQkvLy8gPHN1bW1hcnk+SW5kZXhJbnB1dCBtZXRob2RzIDwvc3VtbWFyeT4NCkBAIC03 OTksOSArODE0LDI0IEBADQogCQkNCiAJCQlwdWJsaWMgRlNJbmRleE91dHB1dChTeXN0ZW0uSU8u RmlsZUluZm8gcGF0aCkNCiAJCQl7DQotCQkJCWZpbGUgPSBuZXcgU3lzdGVtLklPLkJpbmFyeVdy aXRlcihuZXcgU3lzdGVtLklPLkZpbGVTdHJlYW0ocGF0aC5GdWxsTmFtZSwgU3lzdGVtLklPLkZp bGVNb2RlLk9wZW5PckNyZWF0ZSwgU3lzdGVtLklPLkZpbGVBY2Nlc3MuV3JpdGUsIFN5c3RlbS5J Ty5GaWxlU2hhcmUuUmVhZFdyaXRlKSk7DQotCQkJCWlzT3BlbiA9IHRydWU7DQotCQkJfQ0KKyAg ICAgICAgICAgICAgICBVbmF1dGhvcml6ZWRBY2Nlc3NFeGNlcHRpb24gZXggPSBudWxsOw0KKyAg ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspDQorICAgICAgICAgICAg ICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHRyeQ0KKyAgICAgICAgICAgICAgICAgICAgew0K KyAgIAkJCQkgICAgICAgIGZpbGUgPSBuZXcgU3lzdGVtLklPLkJpbmFyeVdyaXRlcihuZXcgU3lz dGVtLklPLkZpbGVTdHJlYW0ocGF0aC5GdWxsTmFtZSwgU3lzdGVtLklPLkZpbGVNb2RlLk9wZW5P ckNyZWF0ZSwgU3lzdGVtLklPLkZpbGVBY2Nlc3MuV3JpdGUsIFN5c3RlbS5JTy5GaWxlU2hhcmUu UmVhZFdyaXRlKSk7DQorCQkJCSAgICAgICAgaXNPcGVuID0gdHJ1ZTsNCisgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm47DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAg ICAgICAgICBjYXRjaCAoVW5hdXRob3JpemVkQWNjZXNzRXhjZXB0aW9uIGUpDQorICAgICAgICAg ICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZXggPSBlOw0KKyAgICAgICAg ICAgICAgICAgICAgICAgIFN5c3RlbS5UaHJlYWRpbmcuVGhyZWFkLlNsZWVwKDEwMCk7DQorICAg ICAgICAgICAgICAgICAgICAgICAgR0MuQ29sbGVjdCgpOw0KKyAgICAgICAgICAgICAgICAgICAg fQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIHRocm93IGV4Ow0KKyAgICAg ICAgICAgIH0NCiAJCQ0KIAkJCS8vLyA8c3VtbWFyeT5vdXRwdXQgbWV0aG9kczogPC9zdW1tYXJ5 Pg0KIAkJCXB1YmxpYyBvdmVycmlkZSB2b2lkICBGbHVzaEJ1ZmZlcihieXRlW10gYiwgaW50IG9m ZnNldCwgaW50IHNpemUpDQpAQCAtODY3LDQgKzg5Nyw0IEBADQogCQkJfQ0KIAkJfQ0KIAl9DQot fQ0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQorfQ0KSW5kZXg6IEMjL3NyYy9MdWNlbmUu TmV0L1N1cHBvcnRDbGFzcy5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIEMjL3NyYy9MdWNlbmUuTmV0L1N1 cHBvcnRDbGFzcy5jcwkocmV2aXNpb24gNjkzOTE1KQ0KKysrIEMjL3NyYy9MdWNlbmUuTmV0L1N1 cHBvcnRDbGFzcy5jcwkod29ya2luZyBjb3B5KQ0KQEAgLTQ0LDE1ICs0NCwxNyBAQA0KICAgICAg ICAgLy8vIFRoZSBpbnN0YW5jZSBvZiBTeXN0ZW0uVGhyZWFkaW5nLlRocmVhZA0KICAgICAgICAg Ly8vIDwvc3VtbWFyeT4NCiAgICAgICAgIHByaXZhdGUgU3lzdGVtLlRocmVhZGluZy5UaHJlYWQg dGhyZWFkRmllbGQ7DQotCSAgICAgIA0KKw0KKw0KICAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KICAg ICAgICAgLy8vIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBUaHJlYWRDbGFzcyBj bGFzcw0KICAgICAgICAgLy8vIDwvc3VtbWFyeT4NCiAgICAgICAgIHB1YmxpYyBUaHJlYWRDbGFz cygpDQogICAgICAgICB7DQogICAgICAgICAgICAgdGhyZWFkRmllbGQgPSBuZXcgU3lzdGVtLlRo cmVhZGluZy5UaHJlYWQobmV3IFN5c3RlbS5UaHJlYWRpbmcuVGhyZWFkU3RhcnQoUnVuKSk7DQor ICAgICAgICAgICAgVGhpcyA9IHRoaXM7DQogICAgICAgICB9DQotCSANCisNCiAgICAgICAgIC8v LyA8c3VtbWFyeT4NCiAgICAgICAgIC8vLyBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0 aGUgVGhyZWFkIGNsYXNzLg0KICAgICAgICAgLy8vIDwvc3VtbWFyeT4NCkBAIC02MSw4ICs2Myw5 IEBADQogICAgICAgICB7DQogICAgICAgICAgICAgdGhyZWFkRmllbGQgPSBuZXcgU3lzdGVtLlRo cmVhZGluZy5UaHJlYWQobmV3IFN5c3RlbS5UaHJlYWRpbmcuVGhyZWFkU3RhcnQoUnVuKSk7DQog ICAgICAgICAgICAgdGhpcy5OYW1lID0gTmFtZTsNCisgICAgICAgICAgICBUaGlzID0gdGhpczsN CiAgICAgICAgIH0NCi0JICAgICAgDQorDQogICAgICAgICAvLy8gPHN1bW1hcnk+DQogICAgICAg ICAvLy8gSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFRocmVhZCBjbGFzcy4NCiAg ICAgICAgIC8vLyA8L3N1bW1hcnk+DQpAQCAtNzAsOCArNzMsOSBAQA0KICAgICAgICAgcHVibGlj IFRocmVhZENsYXNzKFN5c3RlbS5UaHJlYWRpbmcuVGhyZWFkU3RhcnQgU3RhcnQpDQogICAgICAg ICB7DQogICAgICAgICAgICAgdGhyZWFkRmllbGQgPSBuZXcgU3lzdGVtLlRocmVhZGluZy5UaHJl YWQoU3RhcnQpOw0KKyAgICAgICAgICAgIFRoaXMgPSB0aGlzOw0KICAgICAgICAgfQ0KLQkgDQor DQogICAgICAgICAvLy8gPHN1bW1hcnk+DQogICAgICAgICAvLy8gSW5pdGlhbGl6ZXMgYSBuZXcg aW5zdGFuY2Ugb2YgdGhlIFRocmVhZCBjbGFzcy4NCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+DQpA QCAtODEsMjMgKzg1LDI5IEBADQogICAgICAgICB7DQogICAgICAgICAgICAgdGhyZWFkRmllbGQg PSBuZXcgU3lzdGVtLlRocmVhZGluZy5UaHJlYWQoU3RhcnQpOw0KICAgICAgICAgICAgIHRoaXMu TmFtZSA9IE5hbWU7DQorICAgICAgICAgICAgVGhpcyA9IHRoaXM7DQogICAgICAgICB9DQotCSAg ICAgIA0KKw0KICAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KICAgICAgICAgLy8vIFRoaXMgbWV0aG9k IGhhcyBubyBmdW5jdGlvbmFsaXR5IHVubGVzcyB0aGUgbWV0aG9kIGlzIG92ZXJyaWRkZW4NCiAg ICAgICAgIC8vLyA8L3N1bW1hcnk+DQogICAgICAgICBwdWJsaWMgdmlydHVhbCB2b2lkIFJ1bigp DQogICAgICAgICB7DQogICAgICAgICB9DQotCSAgICAgIA0KKw0KICAgICAgICAgLy8vIDxzdW1t YXJ5Pg0KICAgICAgICAgLy8vIENhdXNlcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSB0byBjaGFuZ2Ug dGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IHRocmVhZCBpbnN0YW5jZSB0byBUaHJlYWRTdGF0ZS5S dW5uaW5nDQogICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KICAgICAgICAgcHVibGljIHZpcnR1YWwg dm9pZCBTdGFydCgpDQogICAgICAgICB7DQogICAgICAgICAgICAgdGhyZWFkRmllbGQuU3RhcnQo KTsNCisgICAgICAgICAgICBpZiAoVGhpcyA9PSBudWxsKQ0KKyAgICAgICAgICAgIHsNCisgICAg ICAgICAgICAgICAgVGhpcyA9IHRoaXM7DQorICAgICAgICAgICAgICAgIFRoaXMuSW5zdGFuY2Ug PSB0aHJlYWRGaWVsZDsNCisgICAgICAgICAgICB9DQogICAgICAgICB9DQotCSAgICAgIA0KKw0K ICAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KICAgICAgICAgLy8vIEludGVycnVwdHMgYSB0aHJlYWQg dGhhdCBpcyBpbiB0aGUgV2FpdFNsZWVwSm9pbiB0aHJlYWQgc3RhdGUNCiAgICAgICAgIC8vLyA8 L3N1bW1hcnk+DQpAQCAtMTA1LDcgKzExNSw3IEBADQogICAgICAgICB7DQogICAgICAgICAgICAg dGhyZWFkRmllbGQuSW50ZXJydXB0KCk7DQogICAgICAgICB9DQotCSAgICAgIA0KKw0KICAgICAg ICAgLy8vIDxzdW1tYXJ5Pg0KICAgICAgICAgLy8vIEdldHMgdGhlIGN1cnJlbnQgdGhyZWFkIGlu c3RhbmNlDQogICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KQEAgLTEyMCw3ICsxMzAsNyBAQA0KICAg ICAgICAgICAgICAgICB0aHJlYWRGaWVsZCA9IHZhbHVlOw0KICAgICAgICAgICAgIH0NCiAgICAg ICAgIH0NCi0JICAgICAgDQorDQogICAgICAgICAvLy8gPHN1bW1hcnk+DQogICAgICAgICAvLy8g R2V0cyBvciBzZXRzIHRoZSBuYW1lIG9mIHRoZSB0aHJlYWQNCiAgICAgICAgIC8vLyA8L3N1bW1h cnk+DQpAQCAtMTMzLDEwICsxNDMsMTAgQEANCiAgICAgICAgICAgICBzZXQNCiAgICAgICAgICAg ICB7DQogICAgICAgICAgICAgICAgIGlmICh0aHJlYWRGaWVsZC5OYW1lID09IG51bGwpDQotICAg ICAgICAgICAgICAgICAgICB0aHJlYWRGaWVsZC5OYW1lID0gdmFsdWU7IA0KKyAgICAgICAgICAg ICAgICAgICAgdGhyZWFkRmllbGQuTmFtZSA9IHZhbHVlOw0KICAgICAgICAgICAgIH0NCiAgICAg ICAgIH0NCi0JICAgICAgDQorDQogICAgICAgICAvLy8gPHN1bW1hcnk+DQogICAgICAgICAvLy8g R2V0cyBvciBzZXRzIGEgdmFsdWUgaW5kaWNhdGluZyB0aGUgc2NoZWR1bGluZyBwcmlvcml0eSBv ZiBhIHRocmVhZA0KICAgICAgICAgLy8vIDwvc3VtbWFyeT4NCkBAIC0xNDQsMTQgKzE1NCwyNiBA QA0KICAgICAgICAgew0KICAgICAgICAgICAgIGdldA0KICAgICAgICAgICAgIHsNCi0gICAgICAg ICAgICAgICAgcmV0dXJuIHRocmVhZEZpZWxkLlByaW9yaXR5Ow0KKyAgICAgICAgICAgICAgICB0 cnkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocmVh ZEZpZWxkLlByaW9yaXR5Ow0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGNh dGNoDQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTeXN0 ZW0uVGhyZWFkaW5nLlRocmVhZFByaW9yaXR5Lk5vcm1hbDsNCisgICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBzZXQNCiAgICAgICAgICAgICB7DQotICAgICAg ICAgICAgICAgIHRocmVhZEZpZWxkLlByaW9yaXR5ID0gdmFsdWU7DQorICAgICAgICAgICAgICAg IHRyeQ0KKyAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICB0aHJlYWRGaWVs ZC5Qcmlvcml0eSA9IHZhbHVlOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAg IGNhdGNoe30NCisgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0K LQkgICAgICANCisNCiAgICAgICAgIC8vLyA8c3VtbWFyeT4NCiAgICAgICAgIC8vLyBHZXRzIGEg dmFsdWUgaW5kaWNhdGluZyB0aGUgZXhlY3V0aW9uIHN0YXR1cyBvZiB0aGUgY3VycmVudCB0aHJl YWQNCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+DQpAQCAtMTYyLDcgKzE4NCw3IEBADQogICAgICAg ICAgICAgICAgIHJldHVybiB0aHJlYWRGaWVsZC5Jc0FsaXZlOw0KICAgICAgICAgICAgIH0NCiAg ICAgICAgIH0NCi0JICAgICAgDQorDQogICAgICAgICAvLy8gPHN1bW1hcnk+DQogICAgICAgICAv Ly8gR2V0cyBvciBzZXRzIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCBhIHRocmVh ZCBpcyBhIGJhY2tncm91bmQgdGhyZWFkLg0KICAgICAgICAgLy8vIDwvc3VtbWFyeT4NCkBAIC0x NzEsMTMgKzE5MywxMyBAQA0KICAgICAgICAgICAgIGdldA0KICAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgICAgcmV0dXJuIHRocmVhZEZpZWxkLklzQmFja2dyb3VuZDsNCi0gICAgICAgICAg ICB9IA0KKyAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBzZXQNCiAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgIHRocmVhZEZpZWxkLklzQmFja2dyb3VuZCA9IHZhbHVlOw0KICAgICAg ICAgICAgIH0NCiAgICAgICAgIH0NCi0JICAgICAgDQorDQogICAgICAgICAvLy8gPHN1bW1hcnk+ DQogICAgICAgICAvLy8gQmxvY2tzIHRoZSBjYWxsaW5nIHRocmVhZCB1bnRpbCBhIHRocmVhZCB0 ZXJtaW5hdGVzDQogICAgICAgICAvLy8gPC9zdW1tYXJ5Pg0KQEAgLTE4NSwxOSArMjA3LDE5IEBA DQogICAgICAgICB7DQogICAgICAgICAgICAgdGhyZWFkRmllbGQuSm9pbigpOw0KICAgICAgICAg fQ0KLQkgICAgICANCisNCiAgICAgICAgIC8vLyA8c3VtbWFyeT4NCiAgICAgICAgIC8vLyBCbG9j a3MgdGhlIGNhbGxpbmcgdGhyZWFkIHVudGlsIGEgdGhyZWFkIHRlcm1pbmF0ZXMgb3IgdGhlIHNw ZWNpZmllZCB0aW1lIGVsYXBzZXMNCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+DQogICAgICAgICAv Ly8gPHBhcmFtIG5hbWU9Ik1pbGlTZWNvbmRzIj5UaW1lIG9mIHdhaXQgaW4gbWlsbGlzZWNvbmRz PC9wYXJhbT4NCiAgICAgICAgIHB1YmxpYyB2b2lkIEpvaW4obG9uZyBNaWxpU2Vjb25kcykNCiAg ICAgICAgIHsNCi0gICAgICAgICAgICBsb2NrKHRoaXMpDQorICAgICAgICAgICAgbG9jayAodGhp cykNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIHRocmVhZEZpZWxkLkpvaW4obmV3 IFN5c3RlbS5UaW1lU3BhbihNaWxpU2Vjb25kcyAqIDEwMDAwKSk7DQogICAgICAgICAgICAgfQ0K ICAgICAgICAgfQ0KLQkgICAgICANCisNCiAgICAgICAgIC8vLyA8c3VtbWFyeT4NCiAgICAgICAg IC8vLyBCbG9ja3MgdGhlIGNhbGxpbmcgdGhyZWFkIHVudGlsIGEgdGhyZWFkIHRlcm1pbmF0ZXMg b3IgdGhlIHNwZWNpZmllZCB0aW1lIGVsYXBzZXMNCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+DQpA QCAtMjA1LDEyICsyMjcsMTIgQEANCiAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iTmFub1NlY29u ZHMiPlRpbWUgb2Ygd2FpdCBpbiBuYW5vc2Vjb25kczwvcGFyYW0+DQogICAgICAgICBwdWJsaWMg dm9pZCBKb2luKGxvbmcgTWlsaVNlY29uZHMsIGludCBOYW5vU2Vjb25kcykNCiAgICAgICAgIHsN Ci0gICAgICAgICAgICBsb2NrKHRoaXMpDQorICAgICAgICAgICAgbG9jayAodGhpcykNCiAgICAg ICAgICAgICB7DQogICAgICAgICAgICAgICAgIHRocmVhZEZpZWxkLkpvaW4obmV3IFN5c3RlbS5U aW1lU3BhbihNaWxpU2Vjb25kcyAqIDEwMDAwICsgTmFub1NlY29uZHMgKiAxMDApKTsNCiAgICAg ICAgICAgICB9DQogICAgICAgICB9DQotCSAgICAgIA0KKw0KICAgICAgICAgLy8vIDxzdW1tYXJ5 Pg0KICAgICAgICAgLy8vIFJlc3VtZXMgYSB0aHJlYWQgdGhhdCBoYXMgYmVlbiBzdXNwZW5kZWQN CiAgICAgICAgIC8vLyA8L3N1bW1hcnk+DQpAQCAtMjE4LDcgKzI0MCw3IEBADQogICAgICAgICB7 DQogICAgICAgICAgICAgU3lzdGVtLlRocmVhZGluZy5Nb25pdG9yLlB1bHNlQWxsKHRocmVhZEZp ZWxkKTsNCiAgICAgICAgIH0NCi0JICAgICAgDQorDQogICAgICAgICAvLy8gPHN1bW1hcnk+DQog ICAgICAgICAvLy8gUmFpc2VzIGEgVGhyZWFkQWJvcnRFeGNlcHRpb24gaW4gdGhlIHRocmVhZCBv biB3aGljaCBpdCBpcyBpbnZva2VkLCANCiAgICAgICAgIC8vLyB0byBiZWdpbiB0aGUgcHJvY2Vz cyBvZiB0ZXJtaW5hdGluZyB0aGUgdGhyZWFkLiBDYWxsaW5nIHRoaXMgbWV0aG9kIA0KQEAgLTIy OCw3ICsyNTAsNyBAQA0KICAgICAgICAgew0KICAgICAgICAgICAgIHRocmVhZEZpZWxkLkFib3J0 KCk7DQogICAgICAgICB9DQotCSAgICAgIA0KKw0KICAgICAgICAgLy8vIDxzdW1tYXJ5Pg0KICAg ICAgICAgLy8vIFJhaXNlcyBhIFRocmVhZEFib3J0RXhjZXB0aW9uIGluIHRoZSB0aHJlYWQgb24g d2hpY2ggaXQgaXMgaW52b2tlZCwgDQogICAgICAgICAvLy8gdG8gYmVnaW4gdGhlIHByb2Nlc3Mg b2YgdGVybWluYXRpbmcgdGhlIHRocmVhZCB3aGlsZSBhbHNvIHByb3ZpZGluZw0KQEAgLTIzOCwx MiArMjYwLDEyIEBADQogICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0YXRlSW5mbyI+QW4gb2Jq ZWN0IHRoYXQgY29udGFpbnMgYXBwbGljYXRpb24tc3BlY2lmaWMgaW5mb3JtYXRpb24sIHN1Y2gg YXMgc3RhdGUsIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IHRoZSB0aHJlYWQgYmVpbmcgYWJvcnRlZDwv cGFyYW0+DQogICAgICAgICBwdWJsaWMgdm9pZCBBYm9ydChTeXN0ZW0uT2JqZWN0IHN0YXRlSW5m bykNCiAgICAgICAgIHsNCi0gICAgICAgICAgICBsb2NrKHRoaXMpDQorICAgICAgICAgICAgbG9j ayAodGhpcykNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIHRocmVhZEZpZWxkLkFi b3J0KHN0YXRlSW5mbyk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KLQkgICAgICANCisN CiAgICAgICAgIC8vLyA8c3VtbWFyeT4NCiAgICAgICAgIC8vLyBTdXNwZW5kcyB0aGUgdGhyZWFk LCBpZiB0aGUgdGhyZWFkIGlzIGFscmVhZHkgc3VzcGVuZGVkIGl0IGhhcyBubyBlZmZlY3QNCiAg ICAgICAgIC8vLyA8L3N1bW1hcnk+DQpAQCAtMjUxLDcgKzI3Myw3IEBADQogICAgICAgICB7DQog ICAgICAgICAgICAgU3lzdGVtLlRocmVhZGluZy5Nb25pdG9yLldhaXQodGhyZWFkRmllbGQpOw0K ICAgICAgICAgfQ0KLQkgICAgICANCisNCiAgICAgICAgIC8vLyA8c3VtbWFyeT4NCiAgICAgICAg IC8vLyBPYnRhaW4gYSBTdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBjdXJyZW50IE9iamVjdA0K ICAgICAgICAgLy8vIDwvc3VtbWFyeT4NCkBAIC0yNjAsMTYgKzI4MiwyMiBAQA0KICAgICAgICAg ew0KICAgICAgICAgICAgIHJldHVybiAiVGhyZWFkWyIgKyBOYW1lICsgIiwiICsgUHJpb3JpdHku VG9TdHJpbmcoKSArICIsIiArICIiICsgIl0iOw0KICAgICAgICAgfQ0KLQkgICAgIA0KKw0KKyAg ICAgICAgW1RocmVhZFN0YXRpY10NCisgICAgICAgIHN0YXRpYyBUaHJlYWRDbGFzcyBUaGlzID0g bnVsbDsNCisNCiAgICAgICAgIC8vLyA8c3VtbWFyeT4NCiAgICAgICAgIC8vLyBHZXRzIHRoZSBj dXJyZW50bHkgcnVubmluZyB0aHJlYWQNCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+DQogICAgICAg ICAvLy8gPHJldHVybnM+VGhlIGN1cnJlbnRseSBydW5uaW5nIHRocmVhZDwvcmV0dXJucz4NCiAg ICAgICAgIHB1YmxpYyBzdGF0aWMgVGhyZWFkQ2xhc3MgQ3VycmVudCgpDQogICAgICAgICB7DQot ICAgICAgICAgICAgVGhyZWFkQ2xhc3MgQ3VycmVudFRocmVhZCA9IG5ldyBUaHJlYWRDbGFzcygp Ow0KLSAgICAgICAgICAgIEN1cnJlbnRUaHJlYWQuSW5zdGFuY2UgPSBTeXN0ZW0uVGhyZWFkaW5n LlRocmVhZC5DdXJyZW50VGhyZWFkOw0KLSAgICAgICAgICAgIHJldHVybiBDdXJyZW50VGhyZWFk Ow0KKyAgICAgICAgICAgIGlmIChUaGlzID09IG51bGwpDQorICAgICAgICAgICAgew0KKyAgICAg ICAgICAgICAgICBUaGlzID0gbmV3IFRocmVhZENsYXNzKCk7DQorICAgICAgICAgICAgICAgIFRo aXMuSW5zdGFuY2UgPSBTeXN0ZW0uVGhyZWFkaW5nLlRocmVhZC5DdXJyZW50VGhyZWFkOw0KKyAg ICAgICAgICAgIH0NCisgICAgICAgICAgICByZXR1cm4gVGhpczsNCiAgICAgICAgIH0NCiAgICAg fQ0KIA0KQEAgLTk3Miw0ICsxMDAwLDQgQEANCiAgICAgICAgICAgICB9DQogICAgICAgICB9DQog ICAgIH0NCi19DQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUNCit9DQpJbmRleDogQyMvc3Jj L1Rlc3QvSW5kZXgvVGVzdENvbXBvdW5kRmlsZS5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIEMjL3NyYy9U ZXN0L0luZGV4L1Rlc3RDb21wb3VuZEZpbGUuY3MJKHJldmlzaW9uIDY5MzkxNSkNCisrKyBDIy9z cmMvVGVzdC9JbmRleC9UZXN0Q29tcG91bmRGaWxlLmNzCSh3b3JraW5nIGNvcHkpDQpAQCAtNjIs NiArNjIsNyBAQA0KIAkJW1NldFVwXQ0KIAkJcHVibGljIG92ZXJyaWRlIHZvaWQgU2V0VXAoKQ0K IAkJew0KKyAgICAgICAgICAgIGJhc2UuU2V0VXAoKTsNCiAJCQlTeXN0ZW0uSU8uRmlsZUluZm8g ZmlsZSA9IG5ldyBTeXN0ZW0uSU8uRmlsZUluZm8oU3lzdGVtLklPLlBhdGguQ29tYmluZShTdXBw b3J0Q2xhc3MuQXBwU2V0dGluZ3MuR2V0KCJ0ZW1wRGlyIiwgIiIpLCAidGVzdEluZGV4IikpOw0K IAkJCUx1Y2VuZS5OZXQuVXRpbC5fVGVzdFV0aWwuUm1EaXIoZmlsZSk7DQogCQkJZGlyID0gRlNE aXJlY3RvcnkuR2V0RGlyZWN0b3J5KGZpbGUpOw0KSW5kZXg6IEMjL3NyYy9UZXN0L0luZGV4L1Rl c3REb2N1bWVudFdyaXRlci5jcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIEMjL3NyYy9UZXN0L0luZGV4L1Rl c3REb2N1bWVudFdyaXRlci5jcwkocmV2aXNpb24gNjkzOTE1KQ0KKysrIEMjL3NyYy9UZXN0L0lu ZGV4L1Rlc3REb2N1bWVudFdyaXRlci5jcwkod29ya2luZyBjb3B5KQ0KQEAgLTE4Nyw2ICsxODcs NyBAQA0KIAkJW1NldFVwXQ0KIAkJcHVibGljIG92ZXJyaWRlIHZvaWQgIFNldFVwKCkNCiAJCXsN CisgICAgICAgICAgICBiYXNlLlNldFVwKCk7DQogCQkJZGlyID0gbmV3IFJBTURpcmVjdG9yeSgp Ow0KIAkJfQ0KIAkJDQpJbmRleDogQyMvc3JjL1Rlc3QvSW5kZXgvVGVzdEZpZWxkSW5mb3MuY3MN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBDIy9zcmMvVGVzdC9JbmRleC9UZXN0RmllbGRJbmZvcy5jcwkocmV2 aXNpb24gNjkzOTE1KQ0KKysrIEMjL3NyYy9UZXN0L0luZGV4L1Rlc3RGaWVsZEluZm9zLmNzCSh3 b3JraW5nIGNvcHkpDQpAQCAtNDIsNiArNDIsNyBAQA0KIAkJW1NldFVwXQ0KIAkJcHVibGljIG92 ZXJyaWRlIHZvaWQgU2V0VXAoKQ0KIAkJew0KKyAgICAgICAgICAgIGJhc2UuU2V0VXAoKTsNCiAJ CQlEb2NIZWxwZXIuU2V0dXBEb2ModGVzdERvYyk7DQogCQl9DQogCQkNCkluZGV4OiBDIy9zcmMv VGVzdC9JbmRleC9UZXN0SW5kZXhSZWFkZXIuY3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBDIy9zcmMvVGVz dC9JbmRleC9UZXN0SW5kZXhSZWFkZXIuY3MJKHJldmlzaW9uIDY5MzkxNSkNCisrKyBDIy9zcmMv VGVzdC9JbmRleC9UZXN0SW5kZXhSZWFkZXIuY3MJKHdvcmtpbmcgY29weSkNCkBAIC0xMzczLDE3 ICsxMzczLDE3IEBADQogCQkJU3lzdGVtLkNvbGxlY3Rpb25zLklDb2xsZWN0aW9uIGZpZWxkczEg PSBpbmRleDEuR2V0RmllbGROYW1lcyhGaWVsZE9wdGlvbi5BTEwpOw0KIAkJCVN5c3RlbS5Db2xs ZWN0aW9ucy5JQ29sbGVjdGlvbiBmaWVsZHMyID0gaW5kZXgyLkdldEZpZWxkTmFtZXMoRmllbGRP cHRpb24uQUxMKTsNCiAJCQlBc3NlcnQuQXJlRXF1YWwoZmllbGRzMS5Db3VudCwgZmllbGRzMi5D b3VudCwgIkluZGV4UmVhZGVycyBoYXZlIGRpZmZlcmVudCBudW1iZXJzIG9mIGZpZWxkcy4iKTsN Ci0JCQlTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmF0b3IgaXQxID0gKChTeXN0ZW0uQ29sbGVj dGlvbnMuSURpY3Rpb25hcnkpIGZpZWxkczEpLktleXMuR2V0RW51bWVyYXRvcigpOw0KLQkJCVN5 c3RlbS5Db2xsZWN0aW9ucy5JRW51bWVyYXRvciBpdDIgPSAoKFN5c3RlbS5Db2xsZWN0aW9ucy5J RGljdGlvbmFyeSkgZmllbGRzMikuS2V5cy5HZXRFbnVtZXJhdG9yKCk7DQotCQkJd2hpbGUgKGl0 MS5Nb3ZlTmV4dCgpKQ0KKyAgICAgICAgICAgIFN5c3RlbS5Db2xsZWN0aW9ucy5JRW51bWVyYXRv ciBpdDEgPSBmaWVsZHMxLkdldEVudW1lcmF0b3IoKTsNCisgICAgICAgICAgICBTeXN0ZW0uQ29s bGVjdGlvbnMuSUVudW1lcmF0b3IgaXQyID0gZmllbGRzMi5HZXRFbnVtZXJhdG9yKCk7DQorICAg ICAgICAgICAgd2hpbGUgKGl0MS5Nb3ZlTmV4dCgpKQ0KIAkJCXsNCiAJCQkJQXNzZXJ0LklzVHJ1 ZShpdDIuTW92ZU5leHQoKSk7DQogCQkJCUFzc2VydC5BcmVFcXVhbCgoU3lzdGVtLlN0cmluZykg aXQxLkN1cnJlbnQsIChTeXN0ZW0uU3RyaW5nKSBpdDIuQ3VycmVudCwgIkRpZmZlcmVudCBmaWVs ZCBuYW1lcy4iKTsNCiAJCQl9DQogCQkJDQogCQkJLy8gY2hlY2sgbm9ybXMNCi0JCQlpdDEgPSAo KFN5c3RlbS5Db2xsZWN0aW9ucy5JRGljdGlvbmFyeSkgZmllbGRzMSkuS2V5cy5HZXRFbnVtZXJh dG9yKCk7DQotCQkJd2hpbGUgKGl0MS5Nb3ZlTmV4dCgpKQ0KKyAgICAgICAgICAgIGl0MSA9IGZp ZWxkczEuR2V0RW51bWVyYXRvcigpOw0KKyAgICAgICAgICAgIHdoaWxlIChpdDEuTW92ZU5leHQo KSkNCiAJCQl7DQogCQkJCVN5c3RlbS5TdHJpbmcgY3VyRmllbGQgPSAoU3lzdGVtLlN0cmluZykg aXQxLkN1cnJlbnQ7DQogCQkJCWJ5dGVbXSBub3JtczEgPSBpbmRleDEuTm9ybXMoY3VyRmllbGQp Ow0KSW5kZXg6IEMjL3NyYy9UZXN0L0luZGV4L1Rlc3RJbmRleFdyaXRlckxvY2tSZWxlYXNlLmNz DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQotLS0gQyMvc3JjL1Rlc3QvSW5kZXgvVGVzdEluZGV4V3JpdGVyTG9ja1Jl bGVhc2UuY3MJKHJldmlzaW9uIDY5MzkxNSkNCisrKyBDIy9zcmMvVGVzdC9JbmRleC9UZXN0SW5k ZXhXcml0ZXJMb2NrUmVsZWFzZS5jcwkod29ya2luZyBjb3B5KQ0KQEAgLTQ0LDcgKzQ0LDcgQEAN CiAJCQliYXNlLlNldFVwKCk7DQogCQkJaWYgKHRoaXMuX190ZXN0X2RpciA9PSBudWxsKQ0KIAkJ CXsNCi0JCQkJU3lzdGVtLlN0cmluZyB0bXBfZGlyID0gU3VwcG9ydENsYXNzLkFwcFNldHRpbmdz LkdldCgiamF2YS5pby50bXBkaXIiLCAidG1wIik7DQorICAgICAgICAgICAgICAgIFN5c3RlbS5T dHJpbmcgdG1wX2RpciA9IFN1cHBvcnRDbGFzcy5BcHBTZXR0aW5ncy5HZXQoInRlbXBEaXIiLCAi Iik7DQogCQkJCXRoaXMuX190ZXN0X2RpciA9IG5ldyBTeXN0ZW0uSU8uRmlsZUluZm8oU3lzdGVt LklPLlBhdGguQ29tYmluZSh0bXBfZGlyLCAidGVzdEluZGV4V3JpdGVyIikpOw0KIAkJCQkNCiAJ CQkJYm9vbCB0bXBCb29sOw0KQEAgLTc4LDcgKzc4LDcgQEANCiAJCXB1YmxpYyBvdmVycmlkZSB2 b2lkIFRlYXJEb3duKCkNCiAJCXsNCiAJCQliYXNlLlRlYXJEb3duKCk7DQotCQkJaWYgKHRoaXMu X190ZXN0X2RpciAhPSBudWxsKQ0KKyAgICAgICAgICAgIGlmICh0aGlzLl9fdGVzdF9kaXIgIT0g bnVsbCAmJiBTeXN0ZW0uSU8uRGlyZWN0b3J5LkV4aXN0cyh0aGlzLl9fdGVzdF9kaXIuRnVsbE5h bWUpKQ0KIAkJCXsNCiAJCQkJU3lzdGVtLklPLkZpbGVJbmZvW10gZmlsZXMgPSBTdXBwb3J0Q2xh c3MuRmlsZVN1cHBvcnQuR2V0RmlsZXModGhpcy5fX3Rlc3RfZGlyKTsNCiAJCQkJDQpJbmRleDog QyMvc3JjL1Rlc3QvSW5kZXgvVGVzdFBhcmFsbGVsUmVhZGVyLmNzDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g QyMvc3JjL1Rlc3QvSW5kZXgvVGVzdFBhcmFsbGVsUmVhZGVyLmNzCShyZXZpc2lvbiA2OTM5MTUp DQorKysgQyMvc3JjL1Rlc3QvSW5kZXgvVGVzdFBhcmFsbGVsUmVhZGVyLmNzCSh3b3JraW5nIGNv cHkpDQpAQCAtMjk5LDkgKzI5OSw4IEBADQogCQl7DQogCQkJZm9yIChTeXN0ZW0uQ29sbGVjdGlv bnMuSUVudW1lcmF0b3IgaXRlcmF0b3IgPSBjb2wuR2V0RW51bWVyYXRvcigpOyBpdGVyYXRvci5N b3ZlTmV4dCgpOyApDQogCQkJew0KLQkJCQlTeXN0ZW0uQ29sbGVjdGlvbnMuRGljdGlvbmFyeUVu dHJ5IGZpID0gKFN5c3RlbS5Db2xsZWN0aW9ucy5EaWN0aW9uYXJ5RW50cnkpIGl0ZXJhdG9yLkN1 cnJlbnQ7DQotCQkJCVN5c3RlbS5TdHJpbmcgcyA9IGZpLktleS5Ub1N0cmluZygpOw0KLQkJCQlp ZiAocyA9PSB2YWwpDQorICAgICAgICAgICAgICAgIFN5c3RlbS5TdHJpbmcgcyA9IChTeXN0ZW0u U3RyaW5nKWl0ZXJhdG9yLkN1cnJlbnQ7DQorICAgICAgICAgICAgICAgIGlmIChzID09IHZhbCkN CiAJCQkJCXJldHVybiB0cnVlOw0KIAkJCX0NCiAJCQlyZXR1cm4gZmFsc2U7DQpJbmRleDogQyMv c3JjL1Rlc3QvSW5kZXgvVGVzdFNlZ21lbnRSZWFkZXIuY3MNCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBDIy9z cmMvVGVzdC9JbmRleC9UZXN0U2VnbWVudFJlYWRlci5jcwkocmV2aXNpb24gNjkzOTE1KQ0KKysr IEMjL3NyYy9UZXN0L0luZGV4L1Rlc3RTZWdtZW50UmVhZGVyLmNzCSh3b3JraW5nIGNvcHkpDQpA QCAtMTI5LDI0ICsxMjksMjMgQEANCiAJCQlBc3NlcnQuSXNUcnVlKHJlc3VsdC5Db3VudCA9PSBE b2NIZWxwZXIuYWxsLkNvdW50KTsNCiAJCQlmb3IgKFN5c3RlbS5Db2xsZWN0aW9ucy5JRW51bWVy YXRvciBpdGVyID0gcmVzdWx0LkdldEVudW1lcmF0b3IoKTsgaXRlci5Nb3ZlTmV4dCgpOyApDQog CQkJew0KLQkJCQlTeXN0ZW0uQ29sbGVjdGlvbnMuRGljdGlvbmFyeUVudHJ5IGZpID0gKFN5c3Rl bS5Db2xsZWN0aW9ucy5EaWN0aW9uYXJ5RW50cnkpIGl0ZXIuQ3VycmVudDsNCi0JCQkJU3lzdGVt LlN0cmluZyBzID0gZmkuS2V5LlRvU3RyaW5nKCk7DQotCQkJCS8vU3lzdGVtLm91dC5wcmludGxu KCJOYW1lOiAiICsgcyk7DQotCQkJCUFzc2VydC5Jc1RydWUoRG9jSGVscGVyLm5hbWVWYWx1ZXMu Q29udGFpbnMocykgPT0gdHJ1ZSB8fCBzLkVxdWFscygiIikpOw0KKyAgICAgICAgICAgICAgICBT eXN0ZW0uU3RyaW5nIHMgPSAoU3lzdGVtLlN0cmluZylpdGVyLkN1cnJlbnQ7DQorICAgICAgICAg ICAgICAgIEFzc2VydC5Jc1RydWUoRG9jSGVscGVyLm5hbWVWYWx1ZXMuQ29udGFpbnMocykgPT0g dHJ1ZSB8fCBzLkVxdWFscygiIikpOw0KIAkJCX0NCisNCiAJCQlyZXN1bHQgPSByZWFkZXIuR2V0 RmllbGROYW1lcyhJbmRleFJlYWRlci5GaWVsZE9wdGlvbi5JTkRFWEVEKTsNCiAJCQlBc3NlcnQu SXNUcnVlKHJlc3VsdCAhPSBudWxsKTsNCiAJCQlBc3NlcnQuSXNUcnVlKHJlc3VsdC5Db3VudCA9 PSBEb2NIZWxwZXIuaW5kZXhlZC5Db3VudCk7DQogCQkJZm9yIChTeXN0ZW0uQ29sbGVjdGlvbnMu SUVudW1lcmF0b3IgaXRlciA9IHJlc3VsdC5HZXRFbnVtZXJhdG9yKCk7IGl0ZXIuTW92ZU5leHQo KTsgKQ0KIAkJCXsNCi0JCQkJU3lzdGVtLkNvbGxlY3Rpb25zLkRpY3Rpb25hcnlFbnRyeSBmaSA9 IChTeXN0ZW0uQ29sbGVjdGlvbnMuRGljdGlvbmFyeUVudHJ5KSBpdGVyLkN1cnJlbnQ7DQotCQkJ CVN5c3RlbS5TdHJpbmcgcyA9IGZpLktleS5Ub1N0cmluZygpOw0KLQkJCQlBc3NlcnQuSXNUcnVl KERvY0hlbHBlci5pbmRleGVkLkNvbnRhaW5zKHMpID09IHRydWUgfHwgcy5FcXVhbHMoIiIpKTsN CisgICAgICAgICAgICAgICAgU3lzdGVtLlN0cmluZyBzID0gKFN5c3RlbS5TdHJpbmcpaXRlci5D dXJyZW50Ow0KKyAgICAgICAgICAgICAgICBBc3NlcnQuSXNUcnVlKERvY0hlbHBlci5pbmRleGVk LkNvbnRhaW5zKHMpID09IHRydWUgfHwgcy5FcXVhbHMoIiIpKTsNCiAJCQl9DQogCQkJDQogCQkJ cmVzdWx0ID0gcmVhZGVyLkdldEZpZWxkTmFtZXMoSW5kZXhSZWFkZXIuRmllbGRPcHRpb24uVU5J TkRFWEVEKTsNCiAJCQlBc3NlcnQuSXNUcnVlKHJlc3VsdCAhPSBudWxsKTsNCiAJCQlBc3NlcnQu SXNUcnVlKHJlc3VsdC5Db3VudCA9PSBEb2NIZWxwZXIudW5pbmRleGVkLkNvdW50KTsNCisNCiAJ CQkvL0dldCBhbGwgaW5kZXhlZCBmaWVsZHMgdGhhdCBhcmUgc3RvcmluZyB0ZXJtIHZlY3RvcnMN CiAJCQlyZXN1bHQgPSByZWFkZXIuR2V0RmllbGROYW1lcyhJbmRleFJlYWRlci5GaWVsZE9wdGlv bi5JTkRFWEVEX1dJVEhfVEVSTVZFQ1RPUik7DQogCQkJQXNzZXJ0LklzVHJ1ZShyZXN1bHQgIT0g bnVsbCk7DQpJbmRleDogQyMvc3JjL1Rlc3QvSW5kZXgvVGVzdFN0cmVzc0luZGV4aW5nMi5jcw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KLS0tIEMjL3NyYy9UZXN0L0luZGV4L1Rlc3RTdHJlc3NJbmRleGluZzIuY3MJ KHJldmlzaW9uIDY5MzkxNSkNCisrKyBDIy9zcmMvVGVzdC9JbmRleC9UZXN0U3RyZXNzSW5kZXhp bmcyLmNzCSh3b3JraW5nIGNvcHkpDQpAQCAtMzIsOSArMzIsMTMgQEANCiAJew0KIAkJaW50ZXJu YWwgY2xhc3MgQW5vbnltb3VzQ2xhc3NDb21wYXJhdG9yIDogU3lzdGVtLkNvbGxlY3Rpb25zLklD b21wYXJlcg0KIAkJew0KKyAgICAgICAgICAgIEZpZWxkYWJsZSBmMSwgZjI7DQogCQkJcHVibGlj IHZpcnR1YWwgaW50IENvbXBhcmUoU3lzdGVtLk9iamVjdCBvMSwgU3lzdGVtLk9iamVjdCBvMikN CiAJCQl7DQotCQkJCXJldHVybiBTdHJpbmcuQ29tcGFyZU9yZGluYWwoKChGaWVsZGFibGUpIG8x KS5OYW1lKCksICgoRmllbGRhYmxlKSBvMikuTmFtZSgpKTsNCisgICAgICAgICAgICAgICAgaWYg KG8xID09IG8yKSByZXR1cm4gMDsNCisgICAgICAgICAgICAgICAgZjEgPSAoRmllbGRhYmxlKW8x Ow0KKyAgICAgICAgICAgICAgICBmMiA9IChGaWVsZGFibGUpbzI7DQorICAgICAgICAgICAgICAg IHJldHVybiBTdHJpbmcuQ29tcGFyZU9yZGluYWwoZjEuTmFtZSgpICsgZjEuU3RyaW5nVmFsdWUo KSwgZjIuTmFtZSgpICsgZjIuU3RyaW5nVmFsdWUoKSk7DQogCQkJfQ0KIAkJfQ0KIAkJaW50ZXJu YWwgc3RhdGljIGludCBtYXhGaWVsZHMgPSA0Ow0KQEAgLTQ3LDIxICs1MSwxMyBAQA0KIAkJDQog CQlpbnRlcm5hbCBzdGF0aWMgU3lzdGVtLlJhbmRvbSByID0gbmV3IFN5c3RlbS5SYW5kb20oKFN5 c3RlbS5JbnQzMikgMCk7DQogCQkNCi0JCQ0KIAkJW1Rlc3RdDQogCQlwdWJsaWMgdmlydHVhbCB2 b2lkICBUZXN0UmFuZG9tKCkNCiAJCXsNCiAJCQlEaXJlY3RvcnkgZGlyMSA9IG5ldyBNb2NrUkFN RGlyZWN0b3J5KCk7DQotCQkJLy8gZGlyMSA9IEZTRGlyZWN0b3J5LmdldERpcmVjdG9yeSgiZm9v Zm9vZm9vIik7DQogCQkJRGlyZWN0b3J5IGRpcjIgPSBuZXcgTW9ja1JBTURpcmVjdG9yeSgpOw0K LQkJCS8vIG1lcmdlRmFjdG9yPTI7IG1heEJ1ZmZlcmVkRG9jcz0yOyBNYXAgZG9jcyA9IGluZGV4 UmFuZG9tKDEsIDMsIDIsIGRpcjEpOw0KLQkJCVN5c3RlbS5Db2xsZWN0aW9ucy5JRGljdGlvbmFy eSBkb2NzID0gSW5kZXhSYW5kb20oMTAsIDEwMCwgMTAwLCBkaXIxKTsNCisgICAgICAgICAgICBT eXN0ZW0uQ29sbGVjdGlvbnMuSURpY3Rpb25hcnkgZG9jcyA9IEluZGV4UmFuZG9tKDEwLCAxMDAs IDEwMCwgZGlyMSk7DQogCQkJSW5kZXhTZXJpYWwoZG9jcywgZGlyMik7DQotCQkJDQotCQkJLy8g dmVyaWZ5aW5nIHZlcmlmeQ0KLQkJCS8vIHZlcmlmeUVxdWFscyhkaXIxLCBkaXIxLCAiaWQiKTsN Ci0JCQkvLyB2ZXJpZnlFcXVhbHMoZGlyMiwgZGlyMiwgImlkIik7DQotCQkJDQogCQkJVmVyaWZ5 RXF1YWxzKGRpcjEsIGRpcjIsICJpZCIpOw0KIAkJfQ0KIAkJDQpAQCAtODQsNyArODAsNyBAQA0K IAkJCQkNCiAJCQkJRGlyZWN0b3J5IGRpcjEgPSBuZXcgTW9ja1JBTURpcmVjdG9yeSgpOw0KIAkJ CQlEaXJlY3RvcnkgZGlyMiA9IG5ldyBNb2NrUkFNRGlyZWN0b3J5KCk7DQotCQkJCVN5c3RlbS5D b2xsZWN0aW9ucy5JRGljdGlvbmFyeSBkb2NzID0gSW5kZXhSYW5kb20oblRocmVhZHMsIGl0ZXIs IHJhbmdlLCBkaXIxKTsNCisgICAgICAgICAgICAgICAgU3lzdGVtLkNvbGxlY3Rpb25zLklEaWN0 aW9uYXJ5IGRvY3MgPSBJbmRleFJhbmRvbShuVGhyZWFkcywgaXRlciwgcmFuZ2UsIGRpcjEpOw0K IAkJCQlJbmRleFNlcmlhbChkb2NzLCBkaXIyKTsNCiAJCQkJVmVyaWZ5RXF1YWxzKGRpcjEsIGRp cjIsICJpZCIpOw0KIAkJCX0NCkBAIC0xMDMsMTIgKzk5LDYgQEANCiAJCXsNCiAJCQlJbmRleFdy aXRlciB3ID0gbmV3IEluZGV4V3JpdGVyKGRpciwgYXV0b0NvbW1pdCwgbmV3IFdoaXRlc3BhY2VB bmFseXplcigpLCB0cnVlKTsNCiAJCQl3LlNldFVzZUNvbXBvdW5kRmlsZShmYWxzZSk7DQotCQkJ LyoqKg0KLQkJCXcuc2V0TWF4TWVyZ2VEb2NzKEludGVnZXIuTUFYX1ZBTFVFKTsNCi0JCQl3LnNl dE1heEZpZWxkTGVuZ3RoKDEwMDAwKTsNCi0JCQl3LnNldFJBTUJ1ZmZlclNpemVNQigxKTsNCi0J CQl3LnNldE1lcmdlRmFjdG9yKDEwKTsNCi0JCQkqKiovDQogCQkJDQogCQkJLy8gZm9yY2UgbWFu eSBtZXJnZXMNCiAJCQl3LlNldE1lcmdlRmFjdG9yKG1lcmdlRmFjdG9yKTsNCkBAIC0xNjcsOCAr MTU3LDE3IEBADQogCQkJCURvY3VtZW50IGQgPSAoRG9jdW1lbnQpIGl0ZXIuQ3VycmVudDsNCiAJ CQkJU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdCBmaWVsZHMgPSBuZXcgU3lzdGVtLkNvbGxl Y3Rpb25zLkFycmF5TGlzdCgpOw0KIAkJCQlmaWVsZHMuQWRkUmFuZ2UoZC5HZXRGaWVsZHMoKSk7 DQotCQkJCS8vIHB1dCBmaWVsZHMgaW4gc2FtZSBvcmRlciBlYWNoIHRpbWUNCi0JCQkJZmllbGRz LlNvcnQoZmllbGROYW1lQ29tcGFyYXRvcik7DQorICAgICAgICAgICAgICAgIA0KKyAgICAgICAg ICAgICAgICAvLyBub25vbm8gLSBjYW4ndCBkbyB0aGlzIChiZWxvdykNCisgICAgICAgICAgICAg ICAgLy8NCisgICAgICAgICAgICAgICAgLy8gaWYgbXVsdGlwbGUgZmllbGRzIHcvIHNhbWUgbmFt ZSwgZWFjaCBpbnN0YW5jZSBtdXN0IGJlDQorICAgICAgICAgICAgICAgIC8vIGFkZGVkIGluIHRo ZSBzYW1lIG9yZGVyIGFzIG9yZ2luYWwgZG9jLCBhcyB0aGUgZmllbGRzDQorICAgICAgICAgICAg ICAgIC8vIGFyZSBlZmZlY3RpdmVseSBjb25jYXRlbmRhdGVkDQorICAgICAgICAgICAgICAgIC8v DQorICAgICAgICAgICAgICAgIC8vIHRlcm0gcG9zaXRpb24vb2Zmc2V0IGluZm9ybWF0aW9uIG11 c3QgYmUgbWFpbnRhaW5lZCANCisgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgIC8v IHB1dCBmaWVsZHMgaW4gc2FtZSBvcmRlciBlYWNoIHRpbWUNCisgICAgICAgICAgICAgICAgLy9m aWVsZHMuU29ydChmaWVsZE5hbWVDb21wYXJhdG9yKTsNCiANCiAJCQkJRG9jdW1lbnQgZDEgPSBu ZXcgRG9jdW1lbnQoKTsNCiAJCQkJZDEuU2V0Qm9vc3QoZC5HZXRCb29zdCgpKTsNCkBAIC0zNDcs OSArMzQ2LDIxIEBADQogCQkJDQogCQkJaWYgKGZmMS5Db3VudCAhPSBmZjIuQ291bnQpDQogCQkJ ew0KLQkJCQlTeXN0ZW0uQ29uc29sZS5PdXQuV3JpdGVMaW5lKGZmMSk7DQotCQkJCVN5c3RlbS5D b25zb2xlLk91dC5Xcml0ZUxpbmUoZmYyKTsNCi0JCQkJQXNzZXJ0LkFyZUVxdWFsKGZmMS5Db3Vu dCwgZmYyLkNvdW50KTsNCisgICAgICAgICAgICAgICAgLy8gcHJpbnQgb3V0IHdob2xlIGRvYyBv biBlcnJvcg0KKyAgICAgICAgICAgICAgICBTeXN0ZW0uQ29uc29sZS5Xcml0ZSgiRG9jIDE6Iik7 DQorICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZmYxLkNvdW50OyBqKyspDQor ICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIEZpZWxkYWJsZSBmaWVsZCA9 IChGaWVsZGFibGUpZmYxW2pdOw0KKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLkNvbnNvbGUu V3JpdGUoIiB7MH09ezF9OyIsIGZpZWxkLk5hbWUoKSwgZmllbGQuU3RyaW5nVmFsdWUoKSk7DQor ICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgU3lzdGVtLkNvbnNvbGUuV3JpdGVM aW5lKCk7DQorICAgICAgICAgICAgICAgIFN5c3RlbS5Db25zb2xlLldyaXRlKCJEb2MgMjoiKTsN CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBmZjIuQ291bnQ7IGorKykNCisg ICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgRmllbGRhYmxlIGZpZWxkID0g KEZpZWxkYWJsZSlmZjJbal07DQorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uQ29uc29sZS5X cml0ZSgiIHswfT17MX07IiwgZmllbGQuTmFtZSgpLCBmaWVsZC5TdHJpbmdWYWx1ZSgpKTsNCisg ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICBTeXN0ZW0uQ29uc29sZS5Xcml0ZUxp bmUoKTsgQXNzZXJ0LkFyZUVxdWFsKGZmMS5Db3VudCwgZmYyLkNvdW50KTsNCiAJCQl9CQkJDQog CQkJDQogCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmZjEuQ291bnQ7IGkrKykNCkBAIC0zNjgsOSAr Mzc5LDIxIEBADQogCQkJCQlpZiAoIXMxLkVxdWFscyhzMikpDQogCQkJCQl7DQogCQkJCQkJLy8g cHJpbnQgb3V0IHdob2xlIGRvYyBvbiBlcnJvcg0KLQkJCQkJCVN5c3RlbS5Db25zb2xlLk91dC5X cml0ZUxpbmUoZmYxKTsNCi0JCQkJCQlTeXN0ZW0uQ29uc29sZS5PdXQuV3JpdGVMaW5lKGZmMik7 DQotCQkJCQkJQXNzZXJ0LkFyZUVxdWFsKHMxLCBzMik7DQorICAgICAgICAgICAgICAgICAgICAg ICAgU3lzdGVtLkNvbnNvbGUuV3JpdGUoIkRvYyAxOiIpOw0KKyAgICAgICAgICAgICAgICAgICAg ICAgIGZvciAoaW50IGogPSAwOyBqIDwgZmYxLkNvdW50OyBqKyspDQorICAgICAgICAgICAgICAg ICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWVsZGFibGUgZmllbGQg PSAoRmllbGRhYmxlKWZmMVtqXTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVt LkNvbnNvbGUuV3JpdGUoIiB7MH09ezF9OyIsIGZpZWxkLk5hbWUoKSwgZmllbGQuU3RyaW5nVmFs dWUoKSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAg ICAgIFN5c3RlbS5Db25zb2xlLldyaXRlTGluZSgpOw0KKyAgICAgICAgICAgICAgICAgICAgICAg IFN5c3RlbS5Db25zb2xlLldyaXRlKCJEb2MgMjoiKTsNCisgICAgICAgICAgICAgICAgICAgICAg ICBmb3IgKGludCBqID0gMDsgaiA8IGZmMi5Db3VudDsgaisrKQ0KKyAgICAgICAgICAgICAgICAg ICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRhYmxlIGZpZWxkID0g KEZpZWxkYWJsZSlmZjJbal07DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5D b25zb2xlLldyaXRlKCIgezB9PXsxfTsiLCBmaWVsZC5OYW1lKCksIGZpZWxkLlN0cmluZ1ZhbHVl KCkpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAg ICBTeXN0ZW0uQ29uc29sZS5Xcml0ZUxpbmUoKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBB c3NlcnQuQXJlRXF1YWwoczEsIHMyKTsNCiAJCQkJCX0NCiAJCQkJfQ0KIAkJCX0NCkBAIC00MjAs NyArNDQzLDcgQEANCiAJCQkJCQkJQXNzZXJ0LklzVHJ1ZShvZmZzZXRzMiAhPSBudWxsKTsNCiAJ CQkJCQlmb3IgKGludCBrID0gMDsgayA8IHBvczEuTGVuZ3RoOyBrKyspDQogCQkJCQkJew0KLQkJ CQkJCQlBc3NlcnQuQXJlRXF1YWwocG9zMVtrXSwgcG9zMltrXSk7DQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFzc2VydC5BcmVFcXVhbChwb3MxW2tdLCBwb3MyW2tdKTsNCiAJCQkJCQkJ aWYgKG9mZnNldHMxICE9IG51bGwpDQogCQkJCQkJCXsNCiAJCQkJCQkJCUFzc2VydC5BcmVFcXVh bChvZmZzZXRzMVtrXS5HZXRTdGFydE9mZnNldCgpLCBvZmZzZXRzMltrXS5HZXRTdGFydE9mZnNl dCgpKTsNCkBAIC00NzUsNDYgKzQ5OCw0NiBAQA0KIAkJCQl7DQogCQkJCQkNCiAJCQkJCUZpZWxk LlRlcm1WZWN0b3IgdHZWYWwgPSBGaWVsZC5UZXJtVmVjdG9yLk5POw0KLQkJCQkJc3dpdGNoIChO ZXh0SW50KDQpKQ0KLQkJCQkJew0KLQkJCQkJCQ0KLQkJCQkJCWNhc2UgMDogDQotCQkJCQkJCXR2 VmFsID0gRmllbGQuVGVybVZlY3Rvci5OTzsNCi0JCQkJCQkJYnJlYWs7DQotCQkJCQkJDQotCQkJ CQkJY2FzZSAxOiANCi0JCQkJCQkJdHZWYWwgPSBGaWVsZC5UZXJtVmVjdG9yLllFUzsNCi0JCQkJ CQkJYnJlYWs7DQotCQkJCQkJDQotCQkJCQkJY2FzZSAyOiANCi0JCQkJCQkJdHZWYWwgPSBGaWVs ZC5UZXJtVmVjdG9yLldJVEhfUE9TSVRJT05TOw0KLQkJCQkJCQlicmVhazsNCi0JCQkJCQkNCi0J CQkJCQljYXNlIDM6IA0KLQkJCQkJCQl0dlZhbCA9IEZpZWxkLlRlcm1WZWN0b3IuV0lUSF9QT1NJ VElPTlNfT0ZGU0VUUzsNCi0JCQkJCQkJYnJlYWs7DQotCQkJCQkJfQ0KLQkJCQkJDQotCQkJCQlz d2l0Y2ggKE5leHRJbnQoNCkpDQotCQkJCQl7DQotCQkJCQkJDQotCQkJCQkJY2FzZSAwOiANCi0J CQkJCQkJZmllbGRzLkFkZChuZXcgRmllbGQoImYwIiwgR2V0U3RyaW5nKDEpLCBGaWVsZC5TdG9y ZS5ZRVMsIEZpZWxkLkluZGV4Lk5PX05PUk1TLCB0dlZhbCkpOw0KLQkJCQkJCQlicmVhazsNCi0J CQkJCQkNCi0JCQkJCQljYXNlIDE6IA0KLQkJCQkJCQlmaWVsZHMuQWRkKG5ldyBGaWVsZCgiZjEi LCBHZXRTdHJpbmcoMCksIEZpZWxkLlN0b3JlLk5PLCBGaWVsZC5JbmRleC5UT0tFTklaRUQsIHR2 VmFsKSk7DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCQ0KLQkJCQkJCWNhc2UgMjogDQotCQkJCQkJ CWZpZWxkcy5BZGQobmV3IEZpZWxkKCJmMiIsIEdldFN0cmluZygwKSwgRmllbGQuU3RvcmUuWUVT LCBGaWVsZC5JbmRleC5OTywgRmllbGQuVGVybVZlY3Rvci5OTykpOw0KLQkJCQkJCQlicmVhazsN Ci0JCQkJCQkNCi0JCQkJCQljYXNlIDM6IA0KLQkJCQkJCQlmaWVsZHMuQWRkKG5ldyBGaWVsZCgi ZjMiLCBHZXRTdHJpbmcoTHVjZW5lLk5ldC5JbmRleC5UZXN0U3RyZXNzSW5kZXhpbmcyLmJpZ0Zp ZWxkU2l6ZSksIEZpZWxkLlN0b3JlLllFUywgRmllbGQuSW5kZXguVE9LRU5JWkVELCB0dlZhbCkp Ow0KLQkJCQkJCQlicmVhazsNCi0JCQkJCQl9DQotCQkJCX0NCisgICAgICAgICAgICAgICAgICAg IHN3aXRjaCAoTmV4dEludCg0KSkNCisgICAgICAgICAgICAgICAgICAgIHsNCisNCisgICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIDA6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2 VmFsID0gRmllbGQuVGVybVZlY3Rvci5OTzsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOg0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0dlZhbCA9IEZpZWxkLlRlcm1WZWN0b3IuWUVTOw0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBj YXNlIDI6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2VmFsID0gRmllbGQuVGVybVZl Y3Rvci5XSVRIX1BPU0lUSU9OUzsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOg0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0dlZhbCA9IEZpZWxkLlRlcm1WZWN0b3IuV0lUSF9QT1NJVElPTlNfT0ZGU0VU UzsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAg ICAgICB9DQorDQorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKE5leHRJbnQoNCkpDQorICAg ICAgICAgICAgICAgICAgICB7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOg0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMuQWRkKG5ldyBGaWVsZCgiZjAiLCBH ZXRTdHJpbmcoMSksIEZpZWxkLlN0b3JlLllFUywgRmllbGQuSW5kZXguTk9fTk9STVMsIHR2VmFs KSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgMToNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRz LkFkZChuZXcgRmllbGQoImYxIiwgR2V0U3RyaW5nKDApLCBGaWVsZC5TdG9yZS5OTywgRmllbGQu SW5kZXguVE9LRU5JWkVELCB0dlZhbCkpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6DQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZpZWxkcy5BZGQobmV3IEZpZWxkKCJmMiIsIEdldFN0cmluZygwKSwg RmllbGQuU3RvcmUuWUVTLCBGaWVsZC5JbmRleC5OTywgRmllbGQuVGVybVZlY3Rvci5OTykpOw0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIDM6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcy5BZGQo bmV3IEZpZWxkKCJmMyIsIEdldFN0cmluZyhMdWNlbmUuTmV0LkluZGV4LlRlc3RTdHJlc3NJbmRl eGluZzIuYmlnRmllbGRTaXplKSwgRmllbGQuU3RvcmUuWUVTLCBGaWVsZC5JbmRleC5UT0tFTkla RUQsIHR2VmFsKSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQogCQkJCQ0KIAkJCQlpZiAoTHVj ZW5lLk5ldC5JbmRleC5UZXN0U3RyZXNzSW5kZXhpbmcyLnNhbWVGaWVsZE9yZGVyKQ0KIAkJCQl7 DQpAQCAtNTIzLDcgKzU0Niw5IEBADQogCQkJCWVsc2UNCiAJCQkJew0KIAkJCQkJLy8gcmFuZG9t IHBsYWNlbWVudCBvZiBpZCBmaWVsZCBhbHNvDQotCQkJCQlmaWVsZHNbTmV4dEludChmaWVsZHMu Q291bnQpXSA9IDA7DQorICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBOZXh0SW50KGZp ZWxkcy5Db3VudCk7DQorICAgICAgICAgICAgICAgICAgICBmaWVsZHNbMF0gPSBmaWVsZHNbaW5k ZXhdOw0KKyAgICAgICAgICAgICAgICAgICAgZmllbGRzW2luZGV4XSA9IGlkRmllbGQ7DQogCQkJ CX0NCiAJCQkJDQogCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLkNvdW50OyBpKyspDQpA QCAtNTYyLDQgKzU4Nyw0IEBADQogCQkJZmllbGROYW1lQ29tcGFyYXRvciA9IG5ldyBBbm9ueW1v dXNDbGFzc0NvbXBhcmF0b3IoKTsNCiAJCX0NCiAJfQ0KLX0NClwgTm8gbmV3bGluZSBhdCBlbmQg b2YgZmlsZQ0KK30NCkluZGV4OiBDIy9zcmMvVGVzdC9TZWFyY2gvQ2hlY2tIaXRzLmNzDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQotLS0gQyMvc3JjL1Rlc3QvU2VhcmNoL0NoZWNrSGl0cy5jcwkocmV2aXNpb24gNjkz OTE1KQ0KKysrIEMjL3NyYy9UZXN0L1NlYXJjaC9DaGVja0hpdHMuY3MJKHdvcmtpbmcgY29weSkN CkBAIC0xNjAsNiArMTYwLDggQEANCiAJCQl9DQogCQkJDQogCQkJQXNzZXJ0LkFyZUVxdWFsKGNv cnJlY3QuQ291bnQsIGFjdHVhbC5Db3VudCk7DQorCQkJY29ycmVjdC5Tb3J0KCk7DQorCQkJYWN0 dWFsLlNvcnQoKTsNCiAJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvcnJlY3QuQ291bnQ7IGkrKykN CiAJCQl7DQogCQkJCUFzc2VydC5BcmVFcXVhbChjb3JyZWN0W2ldLCBhY3R1YWxbaV0pOw0KQEAg LTUxOSw0ICs1MjEsNCBAQA0KIAkJCX0NCiAJCX0NCiAJfQ0KLX0NClwgTm8gbmV3bGluZSBhdCBl bmQgb2YgZmlsZQ0KK30NCg== ------=_Part_68887_21666192.1223500058932--