From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail05.groups.io (mail05.groups.io [45.79.224.7]) by spool.mail.gandi.net (Postfix) with ESMTPS id 2218A7803DE for ; Wed, 15 May 2024 07:41:01 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=EAmGAimMX00AX6mSrNBFbuoXJlWoG72IEbaiz8ZRLiM=; c=relaxed/simple; d=groups.io; h=Date:From:To:Cc:Subject:In-Reply-To:References:MIME-Version:Message-ID:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Resent-From:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding:Content-Type; s=20240206; t=1715758860; v=1; b=4JYYciLNT86FNTlEo9AphrxtJK24eFIbnSdxsQykZdjOeru/7jvWs5sHAgOTG50WFivhN+CS deVp3SspxWP/lmmzeWkIscg2RnD/vgHDkRwtetGnfr8mkOWPeY4w7VaeJhtySahIS7FIMussjs5 LbYroXo681l6iG8IfihTmYqxnrmQv9HQ8Gyffi5xxvLfKctn9hgX6iw0BZNh2B9PpEKnJ21ifDa HdwOnBRN0V+iCobgynKDLcv+CwcQxKWI606kvURG9VWr/oT7rOcA7pfbKjzLRG+ZsrJ+ULJ9Kyr NcdwpJZSytw8Dt+ubrXXExQzJ6IzsNhLaujciTeXsLqsg== X-Received: by 127.0.0.2 with SMTP id iFpOYY7687511xgBcOHMTmxl; Wed, 15 May 2024 00:41:00 -0700 X-Received: from zg8tmty1ljiyny4xntqumjca.icoremail.net (zg8tmty1ljiyny4xntqumjca.icoremail.net [165.227.154.27]) by mx.groups.io with SMTP id smtpd.web11.9174.1715758857443947847 for ; Wed, 15 May 2024 00:40:59 -0700 X-Received: from wangyang$bosc.ac.cn ( [123.114.53.210] ) by ajax-webmail-mail (Coremail) ; Wed, 15 May 2024 15:40:47 +0800 (GMT+08:00) X-Originating-IP: [123.114.53.210] Date: Wed, 15 May 2024 15:40:47 +0800 (GMT+08:00) X-CM-HeaderCharset: UTF-8 From: "WangYang" To: devel@edk2.groups.io Cc: sunilvl@ventanamicro.com, git@danielschaefer.me, "Ran Wang" , "Leif Lindholm" , "Michael D Kinney" Subject: Re: [edk2-devel] [PATCH] XiangshanSeriesPkg:Add Support for Xilinx RC(PCIE) Driver X-Priority: 3 In-Reply-To: <17C6FF8EBB82206B.20815@groups.io> References: <17C6FF8EBB82206B.20815@groups.io> MIME-Version: 1.0 Message-ID: <29ca357a.eb.18f7b3255cd.Coremail.wangyang@bosc.ac.cn> X-Coremail-Locale: zh_CN X-CM-TRANSID: AQAAfwDnuiD_ZkRmyh6DAA--.1956W X-CM-SenderInfo: 5zdqw5hdqjquxrvfhtffof0/1tbiAQATE2ZDeD4DYgABsC X-Coremail-Antispam: 1Ur529EdanIXcx71UUUUU7IcSsGvfJ3iIAIbVAYjsxI4VWkKw CS07vEb4IE77IF4wCS07vE1I0E4x80FVAKz4kxMIAIbVAFxVCaYxvI4VCIwcAKzIAtYxBI daVFxhVjvjDU= Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Resent-Date: Wed, 15 May 2024 00:40:59 -0700 Resent-From: wangyang@bosc.ac.cn Reply-To: devel@edk2.groups.io,wangyang@bosc.ac.cn List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: WhAEzA5wwJyZIrFTpiSXwPdcx7686176AA= Content-Transfer-Encoding: base64 Content-Type: text/plain; charset=UTF-8 X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=4JYYciLN; dmarc=none; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 45.79.224.7 as permitted sender) smtp.mailfrom=bounce@groups.io SGksU3VuaWwgViBMCgogICBUaGFuayB5b3UgdmVyeSBtdWNoIGZvciB5b3VyIGF0dGVudGlvbi4K ICAgSG93IGFib3V0IHRoaXMgc3RhdHVzLgogICBUaGlzIHBhdGNoIGlzIGJhc2VkIG9uICBodHRw czovL2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwvdG9waWMvMTA1NDM3MTcyI21zZzExODU3OS4gICAK ICAgSSBhbHNvIHdhbnQgdG8ga25vdyB0aGUgc3RhdHVzIG9mIHRoaXMgcGF0Y2jvvIhodHRwczov L2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwvdG9waWMvMTA1NDM3MTcyI21zZzExODU3Oe+8iS4gIAog ICAKQmVzdCBSZWdhcmRzLApZYW5nIFdhbmcKCj4gLS0tLS3ljp/lp4vpgq7ku7YtLS0tLQo+IOWP keS7tuS6ujogV2FuZ1lhbmcgPHdhbmd5YW5nQGJvc2MuYWMuY24+Cj4g5Y+R6YCB5pe26Ze0OiAy MDI0LTA0LTE3IDE1OjA4OjA2ICjmmJ/mnJ/kuIkpCj4g5pS25Lu25Lq6OiBzdW5pbHZsQHZlbnRh bmFtaWNyby5jb20sIGdpdEBkYW5pZWxzY2hhZWZlci5tZSwgZGV2ZWxAZWRrMi5ncm91cHMuaW8K PiDmioTpgIE6ICJZYW5nIFdhbmciIDx3YW5neWFuZ0Bib3NjLmFjLmNuPiwgIlJhbiBXYW5nIiA8 d2FuZ3JhbkBib3NjLmFjLmNuPiwgIkxlaWYgTGluZGhvbG0iIDxxdWljX2xsaW5kaG9sQHF1aWNp bmMuY29tPiwgIk1pY2hhZWwgRCBLaW5uZXkiIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4K PiDkuLvpopg6IFtlZGsyLWRldmVsXSBbUEFUQ0hdIFhpYW5nc2hhblNlcmllc1BrZzpBZGQgU3Vw cG9ydCBmb3IgWGlsaW54IFJDKFBDSUUpIERyaXZlcgo+IAo+IDEuWGlsaW54IFJDIGlzIFhETUEK PiAyLlN1cHBvcnQgTlZNRSBzdG9yYWdlCj4gCj4gTnZtZSBzdG9yYWdlIG5lZWRzIHRvIGJlIGZv cm1hdHRlZCB0byBGQVQzMiBmb3JtYXQuCj4gCj4gUmV2aWV3ZWQtYnk6IFJhbiBXYW5nIDx3YW5n cmFuQGJvc2MuYWMuY24+Cj4gQ2M6IExlaWYgTGluZGhvbG0gPHF1aWNfbGxpbmRob2xAcXVpY2lu Yy5jb20+Cj4gQ2M6IE1pY2hhZWwgRCBLaW5uZXkgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29t Pgo+IENjOiBTdW5pbCBWIEwgPHN1bmlsdmxAdmVudGFuYW1pY3JvLmNvbT4KPiBDYzogRGFuaWVs IFNjaGFlZmVyIDxnaXRAZGFuaWVsc2NoYWVmZXIubWU+Cj4gU2lnbmVkLW9mZi1ieTogWWFuZyBX YW5nIDx3YW5neWFuZ0Bib3NjLmFjLmNuPgo+IC0tLQo+ICAuLi4vWGlhbmdzaGFuU2VyaWVzUGtn L05hbmh1RGV2L05hbmh1RGV2LmRzYyAgfCAgIDMwICstCj4gIC4uLi9YaWFuZ3NoYW5TZXJpZXNQ a2cvTmFuaHVEZXYvTmFuaHVEZXYuZmRmICB8ICAgMTMgKy0KPiAgLi4uL05hbmh1RGV2L05hbmh1 RGV2LmZkZi5pbmMgICAgICAgICAgICAgICAgIHwgICAgMSArCj4gIC4uLi9QY2lIb3N0QnJpZGdl TGliL1BjaUhvc3RCcmlkZ2VMaWIuYyAgICAgICB8ICAyNzMgKysrKwo+ICAuLi4vUGNpSG9zdEJy aWRnZUxpYi9QY2lIb3N0QnJpZGdlTGliLmluZiAgICAgfCAgIDQ4ICsKPiAgLi4uL0xpYnJhcnkv UGNpU2VnbWVudExpYi9QY2lTZWdtZW50TGliLmMgICAgIHwgMTM5MSArKysrKysrKysrKysrKysr Kwo+ICAuLi4vTGlicmFyeS9QY2lTZWdtZW50TGliL1BjaVNlZ21lbnRMaWIuaW5mICAgfCAgIDI5 ICsKPiAgU2lsaWNvbi9Cb3NjL05hbkh1UGtnL05hbkh1RGV2UGtnLmRlYyAgICAgICAgIHwgICAy MCArCj4gIDggZmlsZXMgY2hhbmdlZCwgMTgwMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygt KQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgU2lsaWNvbi9Cb3NjL05hbkh1UGtnL0xpYnJhcnkvUGNp SG9zdEJyaWRnZUxpYi9QY2lIb3N0QnJpZGdlTGliLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IFNp bGljb24vQm9zYy9OYW5IdVBrZy9MaWJyYXJ5L1BjaUhvc3RCcmlkZ2VMaWIvUGNpSG9zdEJyaWRn ZUxpYi5pbmYKPiAgY3JlYXRlIG1vZGUgMTAwNzU1IFNpbGljb24vQm9zYy9OYW5IdVBrZy9MaWJy YXJ5L1BjaVNlZ21lbnRMaWIvUGNpU2VnbWVudExpYi5jCj4gIGNyZWF0ZSBtb2RlIDEwMDc1NSBT aWxpY29uL0Jvc2MvTmFuSHVQa2cvTGlicmFyeS9QY2lTZWdtZW50TGliL1BjaVNlZ21lbnRMaWIu aW5mCj4gCj4gZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0Jvc2MvWGlhbmdzaGFuU2VyaWVzUGtnL05h bmh1RGV2L05hbmh1RGV2LmRzYyBiL1BsYXRmb3JtL0Jvc2MvWGlhbmdzaGFuU2VyaWVzUGtnL05h bmh1RGV2L05hbmh1RGV2LmRzYwo+IGluZGV4IDdkY2Q3YzQzMTMuLjg1OTM0ZjY2YmUgMTAwNjQ0 Cj4gLS0tIGEvUGxhdGZvcm0vQm9zYy9YaWFuZ3NoYW5TZXJpZXNQa2cvTmFuaHVEZXYvTmFuaHVE ZXYuZHNjCj4gKysrIGIvUGxhdGZvcm0vQm9zYy9YaWFuZ3NoYW5TZXJpZXNQa2cvTmFuaHVEZXYv TmFuaHVEZXYuZHNjCj4gQEAgLTIzOSw2ICsyMzksOSBAQAo+ICAgIFBsYXRmb3JtQm9vdE1hbmFn ZXJMaWJ8UGxhdGZvcm0vUklTQy1WL1BsYXRmb3JtUGtnL0xpYnJhcnkvUGxhdGZvcm1Cb290TWFu YWdlckxpYi9QbGF0Zm9ybUJvb3RNYW5hZ2VyTGliLmluZgo+ICAgIFBsYXRmb3JtTWVtb3J5VGVz dExpYnxQbGF0Zm9ybS9SSVNDLVYvUGxhdGZvcm1Qa2cvTGlicmFyeS9QbGF0Zm9ybU1lbW9yeVRl c3RMaWJOdWxsL1BsYXRmb3JtTWVtb3J5VGVzdExpYk51bGwuaW5mCj4gICAgUGxhdGZvcm1VcGRh dGVQcm9ncmVzc0xpYnxQbGF0Zm9ybS9SSVNDLVYvUGxhdGZvcm1Qa2cvTGlicmFyeS9QbGF0Zm9y bVVwZGF0ZVByb2dyZXNzTGliTnVsbC9QbGF0Zm9ybVVwZGF0ZVByb2dyZXNzTGliTnVsbC5pbmYK PiArICAjIFBjaSBkZXBlbmRlbmNpZXMKPiArICBQY2lTZWdtZW50TGlifFNpbGljb24vQm9zYy9O YW5IdVBrZy9MaWJyYXJ5L1BjaVNlZ21lbnRMaWIvUGNpU2VnbWVudExpYi5pbmYKPiArICBQY2lI b3N0QnJpZGdlTGlifFNpbGljb24vQm9zYy9OYW5IdVBrZy9MaWJyYXJ5L1BjaUhvc3RCcmlkZ2VM aWIvUGNpSG9zdEJyaWRnZUxpYi5pbmYKPiAgCj4gIFtMaWJyYXJ5Q2xhc3Nlcy5jb21tb24uVUVG SV9BUFBMSUNBVElPTl0KPiAgICBQY2RMaWJ8TWRlUGtnL0xpYnJhcnkvRHhlUGNkTGliL0R4ZVBj ZExpYi5pbmYKPiBAQCAtMjYyLDYgKzI2NSwyNCBAQAo+ICAgIGdFZmlNZGVNb2R1bGVQa2dUb2tl blNwYWNlR3VpZC5QY2RDb25PdXRVZ2FTdXBwb3J0fEZBTFNFCj4gIAo+ICBbUGNkc0ZpeGVkQXRC dWlsZF0KPiArICAjCj4gKyAgIyBYSUxJTlggUENJIFJvb3QgQ29tcGxleAo+ICsgICMKPiArICBn RWZpTWRlUGtnVG9rZW5TcGFjZUd1aWQuUGNkUGNpRXhwcmVzc0Jhc2VBZGRyZXNzfDB4NDAwMDAw MDAKPiArICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkUGNpRGlzYWJsZUJ1c0Vu dW1lcmF0aW9ufEZBTFNFCj4gKyAgZ0VmaU1kZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBjaUlvVHJh bnNsYXRpb258MHgwCj4gKyAgZ0VmaU1kZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBjaU1taW8zMlRy YW5zbGF0aW9ufDB4NTAwMDAwMDAKPiArICBnQm9zY05hbkh1RGRldlBsYXRmb3JtUGtnVG9rZW5T cGFjZUd1aWQuUGNkUGNpQ29uZmlnQmFzZXwweDQwMDAwMDAwCj4gKyAgZ0Jvc2NOYW5IdURkZXZQ bGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBjaUNvbmZpZ1NpemV8MHgxMDAwMDAwMAo+ICsg IGdCb3NjTmFuSHVEZGV2UGxhdGZvcm1Qa2dUb2tlblNwYWNlR3VpZC5QY2RQY2lCdXNNaW58MAo+ ICsgIGdCb3NjTmFuSHVEZGV2UGxhdGZvcm1Qa2dUb2tlblNwYWNlR3VpZC5QY2RQY2lCdXNNYXh8 MjU1Cj4gKyAgZ0Jvc2NOYW5IdURkZXZQbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBjaUlv QmFzZXwweDAwMDAwCj4gKyAgZ0Jvc2NOYW5IdURkZXZQbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlk LlBjZFBjaUlvU2l6ZXwweGYwMDAwMAo+ICsgIGdCb3NjTmFuSHVEZGV2UGxhdGZvcm1Qa2dUb2tl blNwYWNlR3VpZC5QY2RQY2lNbWlvMzJCYXNlfDB4NTAwMDAwMDAKPiArICBnQm9zY05hbkh1RGRl dlBsYXRmb3JtUGtnVG9rZW5TcGFjZUd1aWQuUGNkUGNpTW1pbzMyU2l6ZXwweDEwMDAwMDAwCj4g KyAgZ0Jvc2NOYW5IdURkZXZQbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBjaU1taW82NEJh c2V8MHgxMDAwMDAwMDAwCj4gKyAgZ0Jvc2NOYW5IdURkZXZQbGF0Zm9ybVBrZ1Rva2VuU3BhY2VH dWlkLlBjZFBjaU1taW82NFNpemV8MHgwMDAwMDAwMDAwCj4gKwo+ICAgIGdFZmlNZGVNb2R1bGVQ a2dUb2tlblNwYWNlR3VpZC5QY2RTdGF0dXNDb2RlVXNlTWVtb3J5fEZBTFNFCj4gICAgZ0VmaU1k ZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFN0YXR1c0NvZGVVc2VTZXJpYWx8VFJVRQo+ICAg IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RTdGF0dXNDb2RlTWVtb3J5U2l6ZXwx Cj4gQEAgLTQyNywxMSArNDQ4LDEzIEBACj4gICAgTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9TZWN1 cml0eVN0dWJEeGUvU2VjdXJpdHlTdHViRHhlLmluZgo+ICAhZW5kaWYKPiAgCj4gLSAgVWVmaUNw dVBrZy9DcHVJbzJEeGUvQ3B1SW8yRHhlLmluZgo+ICsgIFNpbGljb24vUklTQy1WL1Byb2Nlc3Nv clBrZy9Vbml2ZXJzYWwvUGNpQ3B1SW8yRHhlL1BjaUNwdUlvMkR4ZS5pbmYKPiArICBNZGVNb2R1 bGVQa2cvQnVzL1BjaS9QY2lIb3N0QnJpZGdlRHhlL1BjaUhvc3RCcmlkZ2VEeGUuaW5mCj4gICAg TWRlTW9kdWxlUGtnL0J1cy9QY2kvUGNpQnVzRHhlL1BjaUJ1c0R4ZS5pbmYgewo+ICAgICAgPExp YnJhcnlDbGFzc2VzPgo+ICAgICAgICBQY2RMaWJ8TWRlUGtnL0xpYnJhcnkvRHhlUGNkTGliL0R4 ZVBjZExpYi5pbmYKPiAgICB9Cj4gKyAgTWRlTW9kdWxlUGtnL0J1cy9QY2kvTm9uRGlzY292ZXJh YmxlUGNpRGV2aWNlRHhlL05vbkRpc2NvdmVyYWJsZVBjaURldmljZUR4ZS5pbmYKPiAgICBNZGVN b2R1bGVQa2cvVW5pdmVyc2FsL01ldHJvbm9tZS9NZXRyb25vbWUuaW5mCj4gICAgTWRlTW9kdWxl UGtnL1VuaXZlcnNhbC9CZHNEeGUvQmRzRHhlLmluZgo+ICAgIE1kZU1vZHVsZVBrZy9Vbml2ZXJz YWwvUmVzZXRTeXN0ZW1SdW50aW1lRHhlL1Jlc2V0U3lzdGVtUnVudGltZUR4ZS5pbmYgewo+IEBA IC00NDAsNiArNDYzLDExIEBACj4gICAgfQo+ICAgIEVtYmVkZGVkUGtnL1JlYWxUaW1lQ2xvY2tS dW50aW1lRHhlL1JlYWxUaW1lQ2xvY2tSdW50aW1lRHhlLmluZgo+ICAKPiArICAjCj4gKyAgIyBO Vk1FIFN1cHBvcnQKPiArICAjCj4gKyAgTWRlTW9kdWxlUGtnL0J1cy9QY2kvTnZtRXhwcmVzc0R4 ZS9Odm1FeHByZXNzRHhlLmluZgo+ICsKPiAgICAjCj4gICAgIyBSSVNDLVYgUGxhdGZvcm0gbW9k dWxlCj4gICAgIwo+IGRpZmYgLS1naXQgYS9QbGF0Zm9ybS9Cb3NjL1hpYW5nc2hhblNlcmllc1Br Zy9OYW5odURldi9OYW5odURldi5mZGYgYi9QbGF0Zm9ybS9Cb3NjL1hpYW5nc2hhblNlcmllc1Br Zy9OYW5odURldi9OYW5odURldi5mZGYKPiBpbmRleCBkNTRiYjczMzUzLi40NWM5NmY1OGEwIDEw MDY0NAo+IC0tLSBhL1BsYXRmb3JtL0Jvc2MvWGlhbmdzaGFuU2VyaWVzUGtnL05hbmh1RGV2L05h bmh1RGV2LmZkZgo+ICsrKyBiL1BsYXRmb3JtL0Jvc2MvWGlhbmdzaGFuU2VyaWVzUGtnL05hbmh1 RGV2L05hbmh1RGV2LmZkZgo+IEBAIC02OSw4ICs2OSw2IEBAIElORiAgT3ZtZlBrZy9GZHQvSGln aE1lbUR4ZS9IaWdoTWVtRHhlLmluZgo+ICAKPiAgSU5GICBNZGVNb2R1bGVQa2cvQ29yZS9SdW50 aW1lRHhlL1J1bnRpbWVEeGUuaW5mCj4gIElORiAgTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9TZWN1 cml0eVN0dWJEeGUvU2VjdXJpdHlTdHViRHhlLmluZgo+IC1JTkYgIFVlZmlDcHVQa2cvQ3B1SW8y RHhlL0NwdUlvMkR4ZS5pbmYKPiAtSU5GICBNZGVNb2R1bGVQa2cvQnVzL1BjaS9QY2lCdXNEeGUv UGNpQnVzRHhlLmluZgo+ICBJTkYgIE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvTWV0cm9ub21lL01l dHJvbm9tZS5pbmYKPiAgSU5GICBFbWJlZGRlZFBrZy9SZWFsVGltZUNsb2NrUnVudGltZUR4ZS9S ZWFsVGltZUNsb2NrUnVudGltZUR4ZS5pbmYKPiAgCj4gQEAgLTEyNyw2ICsxMjUsMTcgQEAgSU5G ICBTaGVsbFBrZy9BcHBsaWNhdGlvbi9TaGVsbC9TaGVsbC5pbmYKPiAgCj4gICFpbmNsdWRlIE5l dHdvcmtQa2cvTmV0d29yay5mZGYuaW5jCj4gIAo+ICsjCj4gKyMgUENJIFN1cHBvcnQKPiArIwo+ ICtJTkYgU2lsaWNvbi9SSVNDLVYvUHJvY2Vzc29yUGtnL1VuaXZlcnNhbC9QY2lDcHVJbzJEeGUv UGNpQ3B1SW8yRHhlLmluZgo+ICtJTkYgTWRlTW9kdWxlUGtnL0J1cy9QY2kvUGNpSG9zdEJyaWRn ZUR4ZS9QY2lIb3N0QnJpZGdlRHhlLmluZgo+ICtJTkYgTWRlTW9kdWxlUGtnL0J1cy9QY2kvUGNp QnVzRHhlL1BjaUJ1c0R4ZS5pbmYKPiArCj4gKyMgTlZNZSBib290IGRldmljZXMKPiArIwo+ICtJ TkYgTWRlTW9kdWxlUGtnL0J1cy9QY2kvTnZtRXhwcmVzc0R4ZS9Odm1FeHByZXNzRHhlLmluZgo+ ICsKPiAgIwo+ICAjIFVzYiBTdXBwb3J0Cj4gICMKPiBkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vQm9z Yy9YaWFuZ3NoYW5TZXJpZXNQa2cvTmFuaHVEZXYvTmFuaHVEZXYuZmRmLmluYyBiL1BsYXRmb3Jt L0Jvc2MvWGlhbmdzaGFuU2VyaWVzUGtnL05hbmh1RGV2L05hbmh1RGV2LmZkZi5pbmMKPiBpbmRl eCBiNzhkMjVmODNlLi42NjkzNGU1ZWZlIDEwMDY0NAo+IC0tLSBhL1BsYXRmb3JtL0Jvc2MvWGlh bmdzaGFuU2VyaWVzUGtnL05hbmh1RGV2L05hbmh1RGV2LmZkZi5pbmMKPiArKysgYi9QbGF0Zm9y bS9Cb3NjL1hpYW5nc2hhblNlcmllc1BrZy9OYW5odURldi9OYW5odURldi5mZGYuaW5jCj4gQEAg LTYwLDMgKzYwLDQgQEAgU0VUIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RTZXJp YWxSZWdpc3RlckJhc2UgICAgICAgICAgICAgID0gMHgzMTBCMDAKPiAgU0VUIGdFZmlNZGVQa2dU b2tlblNwYWNlR3VpZC5QY2RVYXJ0RGVmYXVsdEJhdWRSYXRlICAgICAgICAgICAgICAgICAgID0g MTE1MjAwCj4gIFNFVCBnSGlzaVRva2VuU3BhY2VHdWlkLlBjZFNlcmlhbFBvcnRTZW5kRGVsYXkg ICAgICAgICAgICAgICAgICAgICAgICA9IDUwCj4gIFNFVCBnSGlzaVRva2VuU3BhY2VHdWlkLlBj ZFVhcnRDbGtJbkh6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDUwMDAwMDAwCj4g Kwo+IGRpZmYgLS1naXQgYS9TaWxpY29uL0Jvc2MvTmFuSHVQa2cvTGlicmFyeS9QY2lIb3N0QnJp ZGdlTGliL1BjaUhvc3RCcmlkZ2VMaWIuYyBiL1NpbGljb24vQm9zYy9OYW5IdVBrZy9MaWJyYXJ5 L1BjaUhvc3RCcmlkZ2VMaWIvUGNpSG9zdEJyaWRnZUxpYi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAwLi5hMjU3MjhhZmZjCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L1NpbGljb24vQm9zYy9OYW5IdVBrZy9MaWJyYXJ5L1BjaUhvc3RCcmlkZ2VMaWIvUGNpSG9zdEJy aWRnZUxpYi5jCj4gQEAgLTAsMCArMSwyNzMgQEAKPiArLyoqIEBmaWxlCj4gKyAgUENJIGhvc3Qg YnJpZGdlIGxpYnJhcnkgaW5zdGFuY2UgZm9yIE5hbkh1RGV2IFNPQy4KPiArCj4gKyAgQ29weXJp Z2h0IChDKSAyMDIwLCBQaHl0aXVtIFRlY2hub2xvZ3kgQ28gTHRkLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLjxCUj4KPiArICBDb3B5cmlnaHQgKGMpIDIwMjQsIEJvc2MuIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPnZlZC48QlI+Cj4gKwo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50Cj4gKwo+ICsqKi8KPiArCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGli Lmg+Cj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RldmljZVBhdGhMaWIuaD4KPiArI2luY2x1ZGUgPExp YnJhcnkvUGNpSG9zdEJyaWRnZUxpYi5oPgo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvUGNpSG9zdEJy aWRnZVJlc291cmNlQWxsb2NhdGlvbi5oPgo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvUGNpUm9vdEJy aWRnZUlvLmg+Cj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0lvTGliLmg+Cj4gKwo+ICsjcHJhZ21hIHBh Y2soMSkKPiArCj4gK3R5cGVkZWYgc3RydWN0IHsKPiArICBBQ1BJX0hJRF9ERVZJQ0VfUEFUSCAg ICAgQWNwaURldmljZVBhdGg7Cj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MIEVuZERldmlj ZVBhdGg7Cj4gK30gRUZJX1BDSV9ST09UX0JSSURHRV9ERVZJQ0VfUEFUSDsKPiArCj4gKyNwcmFn bWEgcGFjayAoKQo+ICsKPiArI2RlZmluZSBCSVQobnIpICAgICAgICAgKDFVTCA8PCAobnIpKQo+ ICsjZGVmaW5lIEdFTk1BU0soaCwgbCkgXAo+ICsgICAgKCgofjBVTCkgLSAoMVVMIDw8IChsKSkg KyAxKSAmICh+MFVMID4+IChCSVRTX1BFUl9MT05HIC0gMSAtIChoKSkpKQo+ICsKPiArLyogUmVn aXN0ZXIgZGVmaW5pdGlvbnMgKi8KPiArI2RlZmluZSBYSUxJTlhfUENJRV9SRUdfVlNFQwkJMHgw MDAwMDEyYwo+ICsjZGVmaW5lIFhJTElOWF9QQ0lFX1JFR19CSVIJCTB4MDAwMDAxMzAKPiArI2Rl ZmluZSBYSUxJTlhfUENJRV9SRUdfSURSCQkweDAwMDAwMTM4Cj4gKyNkZWZpbmUgWElMSU5YX1BD SUVfUkVHX0lNUgkJMHgwMDAwMDEzYwo+ICsjZGVmaW5lIFhJTElOWF9QQ0lFX1JFR19QU0NSCQkw eDAwMDAwMTQ0Cj4gKyNkZWZpbmUgWElMSU5YX1BDSUVfUkVHX1JQU0MJCTB4MDAwMDAxNDgKPiAr I2RlZmluZSBYSUxJTlhfUENJRV9SRUdfTVNJQkFTRTEJMHgwMDAwMDE0Ywo+ICsjZGVmaW5lIFhJ TElOWF9QQ0lFX1JFR19NU0lCQVNFMgkweDAwMDAwMTUwCj4gKyNkZWZpbmUgWElMSU5YX1BDSUVf UkVHX1JQRUZSCQkweDAwMDAwMTU0Cj4gKyNkZWZpbmUgWElMSU5YX1BDSUVfUkVHX1JQSUZSMQkJ MHgwMDAwMDE1OAo+ICsjZGVmaW5lIFhJTElOWF9QQ0lFX1JFR19SUElGUjIJCTB4MDAwMDAxNWMK PiArI2RlZmluZSBYSUxJTlhfUENJRV9SRUdfSURSTiAgICAgICAgICAgIDB4MDAwMDAxNjAKPiAr I2RlZmluZSBYSUxJTlhfUENJRV9SRUdfSURSTl9NQVNLICAgICAgIDB4MDAwMDAxNjQKPiArI2Rl ZmluZSBYSUxJTlhfUENJRV9SRUdfTVNJX0xPVwkJMHgwMDAwMDE3MAo+ICsjZGVmaW5lIFhJTElO WF9QQ0lFX1JFR19NU0lfSEkJCTB4MDAwMDAxNzQKPiArI2RlZmluZSBYSUxJTlhfUENJRV9SRUdf TVNJX0xPV19NQVNLCTB4MDAwMDAxNzgKPiArI2RlZmluZSBYSUxJTlhfUENJRV9SRUdfTVNJX0hJ X01BU0sJMHgwMDAwMDE3Ywo+ICsKPiArLyogSW50ZXJydXB0IHJlZ2lzdGVycyBkZWZpbml0aW9u cyAqLwo+ICsjZGVmaW5lIFhJTElOWF9QQ0lFX0lOVFJfTElOS19ET1dOCUJJVCgwKQo+ICsjZGVm aW5lIFhJTElOWF9QQ0lFX0lOVFJfSE9UX1JFU0VUCUJJVCgzKQo+ICsjZGVmaW5lIFhJTElOWF9Q Q0lFX0lOVFJfQ0ZHX1RJTUVPVVQJQklUKDgpCj4gKyNkZWZpbmUgWElMSU5YX1BDSUVfSU5UUl9D T1JSRUNUQUJMRQlCSVQoOSkKPiArI2RlZmluZSBYSUxJTlhfUENJRV9JTlRSX05PTkZBVEFMCUJJ VCgxMCkKPiArI2RlZmluZSBYSUxJTlhfUENJRV9JTlRSX0ZBVEFMCQlCSVQoMTEpCj4gKyNkZWZp bmUgWElMSU5YX1BDSUVfSU5UUl9JTlRYCQlCSVQoMTYpCj4gKyNkZWZpbmUgWElMSU5YX1BDSUVf SU5UUl9NU0kJCUJJVCgxNykKPiArI2RlZmluZSBYSUxJTlhfUENJRV9JTlRSX1NMVl9VTlNVUFAJ QklUKDIwKQo+ICsjZGVmaW5lIFhJTElOWF9QQ0lFX0lOVFJfU0xWX1VORVhQCUJJVCgyMSkKPiAr I2RlZmluZSBYSUxJTlhfUENJRV9JTlRSX1NMVl9DT01QTAlCSVQoMjIpCj4gKyNkZWZpbmUgWElM SU5YX1BDSUVfSU5UUl9TTFZfRVJSUAlCSVQoMjMpCj4gKyNkZWZpbmUgWElMSU5YX1BDSUVfSU5U Ul9TTFZfQ01QQUJUCUJJVCgyNCkKPiArI2RlZmluZSBYSUxJTlhfUENJRV9JTlRSX1NMVl9JTExC VVIJQklUKDI1KQo+ICsjZGVmaW5lIFhJTElOWF9QQ0lFX0lOVFJfTVNUX0RFQ0VSUglCSVQoMjYp Cj4gKyNkZWZpbmUgWElMSU5YX1BDSUVfSU5UUl9NU1RfU0xWRVJSCUJJVCgyNykKPiArI2RlZmlu ZSBYSUxJTlhfUENJRV9JTVJfQUxMX01BU0sJMHgwRkYzMEZFOQo+ICsjZGVmaW5lIFhJTElOWF9Q Q0lFX0lEUl9BTExfTUFTSwkweEZGRkZGRkZGCj4gKyNkZWZpbmUgWElMSU5YX1BDSUVfSURSTl9N QVNLICAgICAgICAgICBHRU5NQVNLKDE5LCAxNikKPiArCj4gKy8qIFJvb3QgUG9ydCBFcnJvciBG SUZPIFJlYWQgUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KPiArI2RlZmluZSBYSUxJTlhfUENJRV9S UEVGUl9FUlJfVkFMSUQJQklUKDE4KQo+ICsjZGVmaW5lIFhJTElOWF9QQ0lFX1JQRUZSX1JFUV9J RAlHRU5NQVNLKDE1LCAwKQo+ICsjZGVmaW5lIFhJTElOWF9QQ0lFX1JQRUZSX0FMTF9NQVNLCTB4 RkZGRkZGRkYKPiArCj4gKy8qIFJvb3QgUG9ydCBJbnRlcnJ1cHQgRklGTyBSZWFkIFJlZ2lzdGVy IDEgZGVmaW5pdGlvbnMgKi8KPiArI2RlZmluZSBYSUxJTlhfUENJRV9SUElGUjFfSU5UUl9WQUxJ RAlCSVQoMzEpCj4gKyNkZWZpbmUgWElMSU5YX1BDSUVfUlBJRlIxX01TSV9JTlRSCUJJVCgzMCkK PiArI2RlZmluZSBYSUxJTlhfUENJRV9SUElGUjFfSU5UUl9NQVNLCUdFTk1BU0soMjgsIDI3KQo+ ICsjZGVmaW5lIFhJTElOWF9QQ0lFX1JQSUZSMV9BTExfTUFTSwkweEZGRkZGRkZGCj4gKyNkZWZp bmUgWElMSU5YX1BDSUVfUlBJRlIxX0lOVFJfU0hJRlQJMjcKPiArI2RlZmluZSBYSUxJTlhfUENJ RV9JRFJOX1NISUZUICAgICAgICAgIDE2Cj4gKyNkZWZpbmUgWElMSU5YX1BDSUVfVlNFQ19SRVZf TUFTSwlHRU5NQVNLKDE5LCAxNikKPiArI2RlZmluZSBYSUxJTlhfUENJRV9WU0VDX1JFVl9TSElG VAkxNgo+ICsjZGVmaW5lIFhJTElOWF9QQ0lFX0ZJRk9fU0hJRlQJCTUKPiArCj4gKy8qIEJyaWRn ZSBJbmZvIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCj4gKyNkZWZpbmUgWElMSU5YX1BDSUVfQklS X0VDQU1fU1pfTUFTSwlHRU5NQVNLKDE4LCAxNikKPiArI2RlZmluZSBYSUxJTlhfUENJRV9CSVJf RUNBTV9TWl9TSElGVAkxNgo+ICsKPiArLyogUm9vdCBQb3J0IEludGVycnVwdCBGSUZPIFJlYWQg UmVnaXN0ZXIgMiBkZWZpbml0aW9ucyAqLwo+ICsjZGVmaW5lIFhJTElOWF9QQ0lFX1JQSUZSMl9N U0dfREFUQQlHRU5NQVNLKDE1LCAwKQo+ICsKPiArLyogUm9vdCBQb3J0IFN0YXR1cy9jb250cm9s IFJlZ2lzdGVyIGRlZmluaXRpb25zICovCj4gKyNkZWZpbmUgWElMSU5YX1BDSUVfUkVHX1JQU0Nf QkVOCUJJVCgwKQo+ICsKPiArLyogUGh5IFN0YXR1cy9Db250cm9sIFJlZ2lzdGVyIGRlZmluaXRp b25zICovCj4gKyNkZWZpbmUgWElMSU5YX1BDSUVfUkVHX1BTQ1JfTE5LVVAJQklUKDExKQo+ICsK PiArLyogRUNBTSBkZWZpbml0aW9ucyAqLwo+ICsjZGVmaW5lIEVDQU1fQlVTX05VTV9TSElGVAkJ MjAKPiArI2RlZmluZSBFQ0FNX0RFVl9OVU1fU0hJRlQJCTEyCj4gKwo+ICsvKiBOdW1iZXIgb2Yg TVNJIElSUXMgKi8KPiArI2RlZmluZSBYSUxJTlhfTlVNX01TSV9JUlFTCQk2NAo+ICsjZGVmaW5l IElOVFhfTlVNICAgICAgICAgICAgICAgICAgICAgICAgNAo+ICsKPiArI2RlZmluZSBETUFfQlJJ REdFX0JBU0VfT0ZGCQkweENEOAo+ICsKPiArCj4gKyNkZWZpbmUgRU5EX0RFVklDRV9QQVRIX0RF RiB7IEVORF9ERVZJQ0VfUEFUSF9UWVBFLCBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEVORF9FTlRJUkVfREVWSUNFX1BBVEhfU1VCVFlQRSwgXAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB7IEVORF9ERVZJQ0VfUEFUSF9MRU5HVEgsIDAgfSBcCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9Cj4gKwo+ICsjZGVmaW5lIEFDUElfREVWSUNFX1BBVEhfREVG KFVJRCkge3sgQUNQSV9ERVZJQ0VfUEFUSCwgQUNQSV9EUCwgXAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeyAoVUlOVDgpIChzaXplb2YgKEFDUElfSElEX0RFVklDRV9Q QVRIKSksIFwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVJTlQ4 KSAoc2l6ZW9mIChBQ1BJX0hJRF9ERVZJQ0VfUEFUSCkgPj4gOCl9IFwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0sIFwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEVJU0FfUE5QX0lEICgweDBBMDMpLCBVSUQgXAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQo+ICsKPiArU1RBVElDIENPTlNUIEVGSV9QQ0lfUk9PVF9C UklER0VfREVWSUNFX1BBVEggbUVmaVBjaVJvb3RCcmlkZ2VEZXZpY2VQYXRoW10gPSB7Cj4gKyAg ewo+ICsgICAgQUNQSV9ERVZJQ0VfUEFUSF9ERUYgKDApLAo+ICsgICAgRU5EX0RFVklDRV9QQVRI X0RFRgo+ICsgIH0sCj4gK307Cj4gKwo+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRAo+ ICtDSEFSMTYgKm1QY2lIb3N0QnJpZGdlTGliQWNwaUFkZHJlc3NTcGFjZVR5cGVTdHJbXSA9IHsK PiArICBMIk1lbSIsIEwiSS9PIiwgTCJCdXMiCj4gK307Cj4gKwo+ICtTVEFUSUMgUENJX1JPT1Rf QlJJREdFIG1Sb290QnJpZGdlID0gewo+ICsgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIFNlZ21lbnQKPiArICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0cwo+ICsgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0dHJpYnV0ZXMKPiArICBGQUxT RSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG1hQWJvdmU0 Rwo+ICsgIEZBTFNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v IE5vRXh0ZW5kZWRDb25maWdTcGFjZQo+ICsgIEZBTFNFLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIFJlc291cmNlQXNzaWduZWQKPiArICAwLCAgICAgICAgICAg Ly8gQWxsb2NhdGlvbkF0dHJpYnV0ZXMKPiArICB7Cj4gKyAgICAvLyBCdXMKPiArICAgIEZpeGVk UGNkR2V0MzIgKFBjZFBjaUJ1c01pbiksCj4gKyAgICBGaXhlZFBjZEdldDMyIChQY2RQY2lCdXNN YXgpCj4gKyAgfSwgewo+ICsgICAgLy8gSW8KPiArICAgIEZpeGVkUGNkR2V0NjQgKFBjZFBjaUlv QmFzZSksCj4gKyAgICBGaXhlZFBjZEdldDY0IChQY2RQY2lJb0Jhc2UpICsgRml4ZWRQY2RHZXQ2 NCAoUGNkUGNpSW9TaXplKSAtIDEKPiArICB9LCB7Cj4gKyAgICAvLyBNZW0KPiArICAgIEZpeGVk UGNkR2V0MzIgKFBjZFBjaU1taW8zMkJhc2UpLAo+ICsgICAgRml4ZWRQY2RHZXQzMiAoUGNkUGNp TW1pbzMyQmFzZSkgKyAoRml4ZWRQY2RHZXQzMiAoUGNkUGNpTW1pbzMyU2l6ZSkgLSAxKQo+ICsg ICAgLy8weDdGRkZGRkZGCj4gKyAgfSwgewo+ICsgICAgLy8gTWVtQWJvdmU0Rwo+ICsgICAgRml4 ZWRQY2RHZXQ2NCAoUGNkUGNpTW1pbzY0QmFzZSksCj4gKyAgICBGaXhlZFBjZEdldDY0IChQY2RQ Y2lNbWlvNjRCYXNlKSArIEZpeGVkUGNkR2V0NjQgKFBjZFBjaU1taW82NFNpemUpIC0gMQo+ICsg IH0sIHsKPiArICAgIC8vIFBNZW0KPiArICAgIE1BWF9VSU5UNjQsCj4gKyAgICAwCj4gKyAgfSwg ewo+ICsgICAgLy8gUE1lbUFib3ZlNEcKPiArICAgIE1BWF9VSU5UNjQsCj4gKyAgICAwCj4gKyAg fSwKPiArICAoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICopJm1FZmlQY2lSb290QnJpZGdlRGV2 aWNlUGF0aAo+ICt9Owo+ICsKPiArLyoqCj4gKyAgUmV0dXJuIGFsbCB0aGUgcm9vdCBicmlkZ2Ug aW5zdGFuY2VzIGluIGFuIGFycmF5Lgo+ICsKPiArICBAcGFyYW1bb3V0XSBDb3VudCAgUmV0dXJu IHRoZSBjb3VudCBvZiByb290IGJyaWRnZSBpbnN0YW5jZXMuCj4gKwo+ICsgIEByZXR1cm4gQWxs IHRoZSByb290IGJyaWRnZSBpbnN0YW5jZXMgaW4gYW4gYXJyYXkuCj4gKyAgICAgICAgICBUaGUg YXJyYXkgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIFBjaUhvc3RCcmlkZ2VGcmVlUm9vdEJyaWRnZXMo KQo+ICsgICAgICAgICAgd2hlbiBpdCdzIG5vdCB1c2VkLgo+ICsKPiArKiovCj4gK1BDSV9ST09U X0JSSURHRSAqCj4gK0VGSUFQSQo+ICtQY2lIb3N0QnJpZGdlR2V0Um9vdEJyaWRnZXMgKAo+ICsg IE9VVCBVSU5UTiAgICAgKkNvdW50Cj4gKyAgKQo+ICt7Cj4gKyAgLyogRW5hYmxlIHRoZSBCcmlk Z2UgZW5hYmxlIGJpdCAqLwo+ICsgIFVJTlQ2NCBQY2lDb25maWdCYXNlID0gRml4ZWRQY2RHZXQ2 NCAoUGNkUGNpQ29uZmlnQmFzZSk7Cj4gKyAgVUlOVDMyIFJwc2MgPSBNbWlvUmVhZDMyIChQY2lD b25maWdCYXNlICsgWElMSU5YX1BDSUVfUkVHX1JQU0MpOwo+ICsgIE1taW9Xcml0ZTMyIChQY2lD b25maWdCYXNlICsgWElMSU5YX1BDSUVfUkVHX1JQU0MsIFJwc2MgfCBYSUxJTlhfUENJRV9SRUdf UlBTQ19CRU4pOwo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlBjaUhvc3RCcmlkZ2VHZXRSb290 QnJpZGdlcygpOiVkIFBjaUNvbmZpZ0Jhc2U6MHgleCBScHNjOjB4JXggWElMSU5YX1BDSUVfUkVH X1JQU0NfQkVOOjB4JXhcbiIsIFwKPiArICAgICAgICAgICAgICBfX0xJTkVfXywgUGNpQ29uZmln QmFzZSwgUnBzYywgUnBzYyB8IFhJTElOWF9QQ0lFX1JFR19SUFNDX0JFTikpOwo+ICsKPiArICAq Q291bnQgPSAxOwo+ICsgIHJldHVybiAmbVJvb3RCcmlkZ2U7Cj4gK30KPiArCj4gKwo+ICsvKioK PiArICBGcmVlIHRoZSByb290IGJyaWRnZSBpbnN0YW5jZXMgYXJyYXkgcmV0dXJuZWQgZnJvbSBQ Y2lIb3N0QnJpZGdlR2V0Um9vdEJyaWRnZXMoKS4KPiArCj4gKyAgQHBhcmFtW2luXSBCcmlkZ2Vz IFRoZSByb290IGJyaWRnZSBpbnN0YW5jZXMgYXJyYXkuCj4gKyAgQHBhcmFtW2luXSBDb3VudCAg IFRoZSBjb3VudCBvZiB0aGUgYXJyYXkuCj4gKwo+ICsqKi8KPiArVk9JRAo+ICtFRklBUEkKPiAr UGNpSG9zdEJyaWRnZUZyZWVSb290QnJpZGdlcyAoCj4gKyAgSU4gUENJX1JPT1RfQlJJREdFICpC cmlkZ2VzLAo+ICsgIElOIFVJTlROICAgICAgICAgICBDb3VudAo+ICsgICkKPiArewo+ICsKPiAr fQo+ICsKPiArCj4gKy8qKgo+ICsgIEluZm9ybSB0aGUgcGxhdGZvcm0gdGhhdCB0aGUgcmVzb3Vy Y2UgY29uZmxpY3QgaGFwcGVucy4KPiArCj4gKyAgQHBhcmFtW2luXSBIb3N0QnJpZGdlSGFuZGxl IEhhbmRsZSBvZiB0aGUgSG9zdCBCcmlkZ2UuCj4gKyAgQHBhcmFtW2luXSBDb25maWd1cmF0aW9u ICAgIFBvaW50ZXIgdG8gUENJIEkvTyBhbmQgUENJIG1lbW9yeSByZXNvdXJjZQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JzLiBUaGUgQ29uZmlndXJhdGlvbiBjb250YWlu cyB0aGUgcmVzb3VyY2VzCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFsbCB0aGUg cm9vdCBicmlkZ2VzLiBUaGUgcmVzb3VyY2UgZm9yIGVhY2ggcm9vdAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyaWRnZSBpcyB0ZXJtaW5hdGVkIHdpdGggRU5EIGRlc2NyaXB0b3IgYW5k IGFuCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbCBFTkQgaXMgYXBwZW5k ZWQgaW5kaWNhdGluZyB0aGUgZW5kIG9mIHRoZQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg IGVudGlyZSByZXNvdXJjZXMuIFRoZSByZXNvdXJjZSBkZXNjcmlwdG9yIGZpZWxkCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGZvbGxvdyB0aGUgZGVzY3JpcHRpb24gaW4KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FM TE9DQVRJT05fUFJPVE9DT0wKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJtaXRSZXNv dXJjZXMoKS4KPiArCj4gKyoqLwo+ICtWT0lECj4gK0VGSUFQSQo+ICtQY2lIb3N0QnJpZGdlUmVz b3VyY2VDb25mbGljdCAoCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAg IEhvc3RCcmlkZ2VIYW5kbGUsCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpDb25maWd1cmF0aW9uCj4gKyAgKQo+ICt7Cj4gKyAgRUZJX0FDUElfQUREUkVTU19TUEFD RV9ERVNDUklQVE9SICpEZXNjcmlwdG9yOwo+ICsgIEJPT0xFQU4gSXNQcmVmZXRjaGFibGU7Cj4g Kwo+ICsgIERlc2NyaXB0b3IgPSAoRUZJX0FDUElfQUREUkVTU19TUEFDRV9ERVNDUklQVE9SICop IENvbmZpZ3VyYXRpb247Cj4gKyAgd2hpbGUgKERlc2NyaXB0b3ItPkRlc2MgPT0gQUNQSV9BRERS RVNTX1NQQUNFX0RFU0NSSVBUT1IpIHsKPiArICAgIGZvciAoOyBEZXNjcmlwdG9yLT5EZXNjID09 IEFDUElfQUREUkVTU19TUEFDRV9ERVNDUklQVE9SOyBEZXNjcmlwdG9yKyspIHsKPiArICAgICAg QVNTRVJUIChEZXNjcmlwdG9yLT5SZXNUeXBlIDwKPiArICAgICAgICAgICAgICBBUlJBWV9TSVpF IChtUGNpSG9zdEJyaWRnZUxpYkFjcGlBZGRyZXNzU3BhY2VUeXBlU3RyKSk7Cj4gKyAgICAgIERF QlVHICgoREVCVUdfSU5GTywgIiAlczogTGVuZ3RoL0FsaWdubWVudCA9IDB4JWx4IC8gMHglbHhc biIsCj4gKyAgICAgICAgICAgICAgbVBjaUhvc3RCcmlkZ2VMaWJBY3BpQWRkcmVzc1NwYWNlVHlw ZVN0cltEZXNjcmlwdG9yLT5SZXNUeXBlXSwKPiArICAgICAgICAgICAgICBEZXNjcmlwdG9yLT5B ZGRyTGVuLAo+ICsgICAgICAgICAgICAgIERlc2NyaXB0b3ItPkFkZHJSYW5nZU1heAo+ICsgICAg ICAgICAgICAgICkpOwo+ICsgICAgICBpZiAoRGVzY3JpcHRvci0+UmVzVHlwZSA9PSBBQ1BJX0FE RFJFU1NfU1BBQ0VfVFlQRV9NRU0pIHsKPiArCj4gKyAgICAgICAgSXNQcmVmZXRjaGFibGUgPSAo RGVzY3JpcHRvci0+U3BlY2lmaWNGbGFnICYKPiArICAgICAgICAgIEVGSV9BQ1BJX01FTU9SWV9S RVNPVVJDRV9TUEVDSUZJQ19GTEFHX0NBQ0hFQUJMRV9QUkVGRVRDSEFCTEUpICE9IDA7Cj4gKwo+ ICsgICAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIiAgICAgR3JhbnVsYXJpdHkvU3BlY2lmaWNG bGFnID0gJWxkIC8gJTAyeCVzXG4iLAo+ICsgICAgICAgICAgRGVzY3JpcHRvci0+QWRkclNwYWNl R3JhbnVsYXJpdHksCj4gKyAgICAgICAgICBEZXNjcmlwdG9yLT5TcGVjaWZpY0ZsYWcsCj4gKyAg ICAgICAgICAoSXNQcmVmZXRjaGFibGUpID8gTCIgKFByZWZldGNoYWJsZSkiIDogTCIiCj4gKyAg ICAgICAgICApKTsKPiArICAgICAgfQo+ICsgICAgfQo+ICsgICAgLy8KPiArICAgIC8vIFNraXAg dGhlIGVuZCBkZXNjcmlwdG9yIGZvciByb290IGJyaWRnZQo+ICsgICAgLy8KPiArICAgIEFTU0VS VCAoRGVzY3JpcHRvci0+RGVzYyA9PSBBQ1BJX0VORF9UQUdfREVTQ1JJUFRPUik7Cj4gKyAgICBE ZXNjcmlwdG9yID0gKEVGSV9BQ1BJX0FERFJFU1NfU1BBQ0VfREVTQ1JJUFRPUiAqKSAoCj4gKyAg ICAgICAgICAgICAgICAgICAoRUZJX0FDUElfRU5EX1RBR19ERVNDUklQVE9SICopRGVzY3JpcHRv ciArIDEKPiArICAgICAgICAgICAgICAgICAgICk7Cj4gKyAgfQo+ICt9Cj4gZGlmZiAtLWdpdCBh L1NpbGljb24vQm9zYy9OYW5IdVBrZy9MaWJyYXJ5L1BjaUhvc3RCcmlkZ2VMaWIvUGNpSG9zdEJy aWRnZUxpYi5pbmYgYi9TaWxpY29uL0Jvc2MvTmFuSHVQa2cvTGlicmFyeS9QY2lIb3N0QnJpZGdl TGliL1BjaUhvc3RCcmlkZ2VMaWIuaW5mCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwMDAwLi4xNjIwOTM2NzM2Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL1NpbGljb24vQm9z Yy9OYW5IdVBrZy9MaWJyYXJ5L1BjaUhvc3RCcmlkZ2VMaWIvUGNpSG9zdEJyaWRnZUxpYi5pbmYK PiBAQCAtMCwwICsxLDQ4IEBACj4gKyMvKiogQGZpbGUKPiArIyAgUENJIEhvc3QgQnJpZGdlIExp YnJhcnkgaW5zdGFuY2UgZm9yIEJvc2MgU09DLgo+ICsjCj4gKyMgIENvcHlyaWdodCAoQykgMjAy MCwgQm9zYyBUZWNobm9sb2d5IENvLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPgo+ICsj ICBDb3B5cmlnaHQgKGMpIDIwMjQsIEJvc2MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPnZlZC48 QlI+Cj4gKyMKPiArIyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQKPiArIwo+ICsjKiovCj4gKwo+ICtbRGVmaW5lc10KPiArICBJTkZfVkVSU0lPTiAgICAgICAg ICAgICAgICAgICAgPSAweDAwMDEwMDFiCj4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAg ICAgID0gUGNpSG9zdEJyaWRnZUxpYgo+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAg ICA9IDdGNDE4RTQ1LTAxMjctNDU0RS05Q0JCLUY1RkNGMjM3RTM4Mwo+ICsgIE1PRFVMRV9UWVBF ICAgICAgICAgICAgICAgICAgICA9IERYRV9EUklWRVIKPiArICBWRVJTSU9OX1NUUklORyAgICAg ICAgICAgICAgICAgPSAxLjAKPiArICBMSUJSQVJZX0NMQVNTICAgICAgICAgICAgICAgICAgPSBQ Y2lIb3N0QnJpZGdlTGlifERYRV9EUklWRVIKPiArCj4gKyMKPiArIyBUaGUgZm9sbG93aW5nIGlu Zm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZSBi dWlsZAo+ICsjIHRvb2xzLgo+ICsjCj4gKyMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAg ID0gUklTQ1Y2NAo+ICsjCj4gKwo+ICtbU291cmNlc10KPiArICBQY2lIb3N0QnJpZGdlTGliLmMK PiArCj4gK1tQYWNrYWdlc10KPiArICBNZGVQa2cvTWRlUGtnLmRlYwo+ICsgIE1kZU1vZHVsZVBr Zy9NZGVNb2R1bGVQa2cuZGVjCj4gKyAgU2lsaWNvbi9Cb3NjL05hbkh1UGtnL05hbkh1RGV2UGtn LmRlYwo+ICsKPiArW0xpYnJhcnlDbGFzc2VzXQo+ICsgIERlYnVnTGliCj4gKwo+ICtbR3VpZHNd Cj4gKwo+ICtbRml4ZWRQY2RdCj4gKyAgZ0Jvc2NOYW5IdURkZXZQbGF0Zm9ybVBrZ1Rva2VuU3Bh Y2VHdWlkLlBjZFBjaUJ1c01pbgo+ICsgIGdCb3NjTmFuSHVEZGV2UGxhdGZvcm1Qa2dUb2tlblNw YWNlR3VpZC5QY2RQY2lCdXNNYXgKPiArICBnQm9zY05hbkh1RGRldlBsYXRmb3JtUGtnVG9rZW5T cGFjZUd1aWQuUGNkUGNpSW9CYXNlCj4gKyAgZ0Jvc2NOYW5IdURkZXZQbGF0Zm9ybVBrZ1Rva2Vu U3BhY2VHdWlkLlBjZFBjaUlvU2l6ZQo+ICsgIGdCb3NjTmFuSHVEZGV2UGxhdGZvcm1Qa2dUb2tl blNwYWNlR3VpZC5QY2RQY2lNbWlvMzJCYXNlCj4gKyAgZ0Jvc2NOYW5IdURkZXZQbGF0Zm9ybVBr Z1Rva2VuU3BhY2VHdWlkLlBjZFBjaU1taW8zMlNpemUKPiArICBnQm9zY05hbkh1RGRldlBsYXRm b3JtUGtnVG9rZW5TcGFjZUd1aWQuUGNkUGNpTW1pbzY0QmFzZQo+ICsgIGdCb3NjTmFuSHVEZGV2 UGxhdGZvcm1Qa2dUb2tlblNwYWNlR3VpZC5QY2RQY2lNbWlvNjRTaXplCj4gKyAgZ0Jvc2NOYW5I dURkZXZQbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBjaUNvbmZpZ0Jhc2UKPiBkaWZmIC0t Z2l0IGEvU2lsaWNvbi9Cb3NjL05hbkh1UGtnL0xpYnJhcnkvUGNpU2VnbWVudExpYi9QY2lTZWdt ZW50TGliLmMgYi9TaWxpY29uL0Jvc2MvTmFuSHVQa2cvTGlicmFyeS9QY2lTZWdtZW50TGliL1Bj aVNlZ21lbnRMaWIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNzU1Cj4gaW5kZXggMDAwMDAwMDAwMC4u OGU0NjNmY2M3OQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9TaWxpY29uL0Jvc2MvTmFuSHVQa2cv TGlicmFyeS9QY2lTZWdtZW50TGliL1BjaVNlZ21lbnRMaWIuYwo+IEBAIC0wLDAgKzEsMTM5MSBA QAo+ICsvKiogQGZpbGUKPiArICBQQ0kgU2VnbWVudCBMaWJyYXJ5IGZvciBTb0Mgd2l0aCBtdWx0 aXBsZSBSQ3MuCj4gKwo+ICsgIENvcHlyaWdodCAoQykgMjAyMCwgUGh5dGl1bSBUZWNobm9sb2d5 IENvIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+Cj4gKyAgQ29weXJpZ2h0IChjKSAyMDI0 LCBCb3NjLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4KPiArCj4gKyAgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQKPiArCj4gKyoqLwo+ICsKPiArI2luY2x1ZGUg PEJhc2UuaD4KPiArI2luY2x1ZGUgPExpYnJhcnkvUGNpU2VnbWVudExpYi5oPgo+ICsjaW5jbHVk ZSA8TGlicmFyeS9CYXNlTGliLmg+Cj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+Cj4g KyNpbmNsdWRlIDxMaWJyYXJ5L0lvTGliLmg+Cj4gKwo+ICsjZGVmaW5lIFBDSV9TRUdfQ09ORklH X0JBU0UgICAgICAgMHg0MDAwMDAwMAo+ICsKPiArdHlwZWRlZiBlbnVtIHsKPiArICBQY2lDZmdX aWR0aFVpbnQ4ID0gMCwKPiArICBQY2lDZmdXaWR0aFVpbnQxNiwKPiArICBQY2lDZmdXaWR0aFVp bnQzMiwKPiArICBQY2lDZmdXaWR0aE1heAo+ICt9IFBDSV9DRkdfV0lEVEg7Cj4gKwo+ICsvKioK PiArICBBc3NlcnQgdGhlIHZhbGlkaXR5IG9mIGEgUENJIFNlZ21lbnQgYWRkcmVzcy4KPiArICBB IHZhbGlkIFBDSSBTZWdtZW50IGFkZHJlc3Mgc2hvdWxkIG5vdCBjb250YWluIDEncyBpbiBiaXRz IDI4Li4zMSBhbmQgNDguLjYzCj4gKwo+ICsgIEBwYXJhbVtpbl0gIEEgVGhlIGFkZHJlc3MgdG8g dmFsaWRhdGUuCj4gKyAgQHBhcmFtW2luXSAgTSBBZGRpdGlvbmFsIGJpdHMgdG8gYXNzZXJ0IHRv IGJlIHplcm8uCj4gKwo+ICsqKi8KPiArI2RlZmluZSBBU1NFUlRfSU5WQUxJRF9QQ0lfU0VHTUVO VF9BRERSRVNTKEEsTSkgXAo+ICtBU1NFUlQgKCgoQSkgJiAoMHhmZmZmMDAwMGYwMDAwMDAwVUxM IHwgKE0pKSkgPT0gMCkKPiArCj4gKwo+ICsjZGVmaW5lIEVYVFJBQ1RfUENJRV9BRERSRVNTKEFk ZHJlc3MsIEJ1cywgRGV2aWNlLCBGdW5jdGlvbikgXAo+ICt7IFwKPiArICAoQnVzKSAgICAgID0g KCgoQWRkcmVzcykgPj4gMjApICYgMHhmZik7ICAgXAo+ICsgIChEZXZpY2UpICAgPSAoKChBZGRy ZXNzKSA+PiAxNSkgJiAweDFmKTsgICBcCj4gKyAgKEZ1bmN0aW9uKSA9ICgoKEFkZHJlc3MpID4+ IDEyKSAmIDB4MDcpOyAgIFwKPiArfQo+ICsKPiArCj4gKy8qKgo+ICsgIFRoaXMgZnVuY3Rpb24g IGdldGVkIHRoZSBjb25maWcgYmFzZSBvZiBQQ0kgZGV2aWNlLgo+ICsgIEBwYXJhbVtpbl0gIEFk ZHJlc3MgIFRoZSBhZGRyZXNzIHRoYXQgZW5jb2RlcyB0aGUgUENJIEJ1cywgRGV2aWNlLCBGdW5j dGlvbiBhbmQKPiArICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rlci4KPiArCj4gKyAgQHJl dHVybiBUaGUgdmFsdWUgb2YgdGhlIGNvbmZpZyBiYXNlIG9mIFBDSSBkZXZpY2UuCj4gKwo+ICsq Ki8KPiArU1RBVElDCj4gK1VJTlQ2NAo+ICtQY2lTZWdtZW50TGliR2V0Q29uZmlnQmFzZSAoCj4g KyAgSU4gIFVJTlQ2NCAgICAgIEFkZHJlc3MKPiArICApCj4gK3sKPiArICBVSU5UOCBCdXM7Cj4g KyAgVUlOVDggRGV2aWNlOwo+ICsgIFVJTlQ4IEZ1bmN0aW9uOwo+ICsKPiArICBFWFRSQUNUX1BD SUVfQUREUkVTUyAoQWRkcmVzcywgQnVzLCBEZXZpY2UsIEZ1bmN0aW9uKTsKPiArICBpZiAoKEJ1 cyA9PSAxKSB8fCAoQnVzID09IDIpIHx8IChCdXMgPT0gMykgfHwgKEJ1cyA9PSA0KSkgewo+ICsg ICAgcmV0dXJuIFBDSV9TRUdfQ09ORklHX0JBU0U7Cj4gKyAgfQo+ICsKPiArICByZXR1cm4gUENJ X1NFR19DT05GSUdfQkFTRTsKPiArfQo+ICsKPiArLyoqCj4gKyAgSW50ZXJuYWwgd29ya2VyIGZ1 bmN0aW9uIHRvIHJlYWQgYSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4gKyAgQHBh cmFtW2luXSAgQWRkcmVzcyBUaGUgYWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBCdXMsIERl dmljZSwgRnVuY3Rpb24gYW5kCj4gKyAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rlci4KPiAr ICBAcGFyYW1baW5dICBXaWR0aCAgIFRoZSB3aWR0aCBvZiBkYXRhIHRvIHJlYWQKPiArCj4gKyAg QHJldHVybiBUaGUgdmFsdWUgcmVhZCBmcm9tIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rl ci4KPiArCj4gKyoqLwo+ICtTVEFUSUMKPiArVUlOVDMyCj4gK1BjaVNlZ21lbnRMaWJSZWFkV29y a2VyICgKPiArICBJTiAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsCj4gKyAg SU4gIFBDSV9DRkdfV0lEVEggICAgICAgICAgICAgICBXaWR0aAo+ICsgICkKPiArewo+ICsgIFVJ TlQ2NCAgICBCYXNlOwo+ICsKPiArICBCYXNlID0gUGNpU2VnbWVudExpYkdldENvbmZpZ0Jhc2Ug KEFkZHJlc3MpOwo+ICsgIGlmIChCYXNlID09IDB4RkZGRkZGRkYpIHsKPiArICAgIHJldHVybiAw eEZGRkZGRkZGOwo+ICsgIH0KPiArCj4gKyAgc3dpdGNoIChXaWR0aCkgewo+ICsgIGNhc2UgUGNp Q2ZnV2lkdGhVaW50ODoKPiArICAgIHJldHVybiBNbWlvUmVhZDggKEJhc2UgKyAoVUlOVDMyKUFk ZHJlc3MpOwo+ICsgIGNhc2UgUGNpQ2ZnV2lkdGhVaW50MTY6Cj4gKyAgICByZXR1cm4gTW1pb1Jl YWQxNiAoQmFzZSArIChVSU5UMzIpQWRkcmVzcyk7Cj4gKyAgY2FzZSBQY2lDZmdXaWR0aFVpbnQz MjoKPiArICAgIHJldHVybiBNbWlvUmVhZDMyIChCYXNlICsgKFVJTlQzMilBZGRyZXNzKTsKPiAr ICBkZWZhdWx0Ogo+ICsgICAgQVNTRVJUIChGQUxTRSk7Cj4gKyAgfQo+ICsKPiArICByZXR1cm4g MDsKPiArfQo+ICsKPiArCj4gKy8qKgo+ICsgIEludGVybmFsIHdvcmtlciBmdW5jdGlvbiB0byB3 cml0ZXMgYSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4gKyAgQHBhcmFtW2luXSAg QWRkcmVzcyBUaGUgYWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBCdXMsIERldmljZSwgRnVu Y3Rpb24gYW5kCj4gKyAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyLgo+ICsgIEBwYXJhbVtpbl0g IFdpZHRoICAgVGhlIHdpZHRoIG9mIGRhdGEgdG8gd3JpdGUKPiArICBAcGFyYW1baW5dICBEYXRh ICAgIFRoZSB2YWx1ZSB0byB3cml0ZS4KPiArCj4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRl biB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gKwo+ICsqKi8KPiArU1RBVElD Cj4gK1VJTlQzMgo+ICtQY2lTZWdtZW50TGliV3JpdGVXb3JrZXIgKAo+ICsgIElOICBVSU5UNjQg ICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywKPiArICBJTiAgUENJX0NGR19XSURUSCAgICAg ICAgICAgICAgIFdpZHRoLAo+ICsgIElOICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgRGF0 YQo+ICsgICkKPiArewo+ICsgIFVJTlQ2NCAgICBCYXNlOwo+ICsKPiArICBCYXNlID0gUGNpU2Vn bWVudExpYkdldENvbmZpZ0Jhc2UgKEFkZHJlc3MpOwo+ICsgIGlmIChCYXNlID09IDB4RkZGRkZG RkYpIHsKPiArICAgIHJldHVybiAweEZGRkZGRkZGOwo+ICsgIH0KPiArCj4gKyAgc3dpdGNoIChX aWR0aCkgewo+ICsgIGNhc2UgUGNpQ2ZnV2lkdGhVaW50ODoKPiArICAgIE1taW9Xcml0ZTggKEJh c2UgKyAoVUlOVDMyKUFkZHJlc3MsIERhdGEpOwo+ICsgICAgYnJlYWs7Cj4gKyAgY2FzZSBQY2lD ZmdXaWR0aFVpbnQxNjoKPiArICAgIE1taW9Xcml0ZTE2IChCYXNlICsgKFVJTlQzMilBZGRyZXNz LCBEYXRhKTsKPiArICAgIGJyZWFrOwo+ICsgIGNhc2UgUGNpQ2ZnV2lkdGhVaW50MzI6Cj4gKyAg ICBNbWlvV3JpdGUzMiAoQmFzZSArIChVSU5UMzIpQWRkcmVzcywgRGF0YSk7Cj4gKyAgICBicmVh azsKPiArICBkZWZhdWx0Ogo+ICsgICAgQVNTRVJUIChGQUxTRSk7Cj4gKyAgfQo+ICsKPiArICBy ZXR1cm4gRGF0YTsKPiArfQo+ICsKPiArLyoqCj4gKyAgUmVnaXN0ZXIgYSBQQ0kgZGV2aWNlIHNv IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBtYXkgYmUgYWNjZXNzZWQgYWZ0ZXIKPiArICBT ZXRWaXJ0dWFsQWRkcmVzc01hcCgpLgo+ICsKPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0cyBpbiBB ZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCkuCj4gKwo+ICsgIEBwYXJhbVtpbl0gICAgICBB ZGRyZXNzICAgICAgICAgIFRoZSBhZGRyZXNzIHRoYXQgZW5jb2RlcyB0aGUgUENJIEJ1cywgRGV2 aWNlLCBGdW5jdGlvbiBhbmQKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3Rlci4KPiArCj4gKyAgQHJldHZhbCBSRVRVUk5fU1VDQ0VTUyAgICAgICAgICAgVGhlIFBD SSBkZXZpY2Ugd2FzIHJlZ2lzdGVyZWQgZm9yIHJ1bnRpbWUgYWNjZXNzLgo+ICsgIEByZXR2YWwg UkVUVVJOX1VOU1VQUE9SVEVEICAgICAgIEFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gY2FsbCB0aGlz IGZ1bmN0aW9uCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgRXhp dEJvb3RTZXJ2aWNlcygpLgo+ICsgIEByZXR2YWwgUkVUVVJOX1VOU1VQUE9SVEVEICAgICAgIFRo ZSByZXNvdXJjZXMgcmVxdWlyZWQgdG8gYWNjZXNzIHRoZSBQQ0kgZGV2aWNlCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgcnVudGltZSBjb3VsZCBub3QgYmUgbWFwcGVk Lgo+ICsgIEByZXR2YWwgUkVUVVJOX09VVF9PRl9SRVNPVVJDRVMgIFRoZXJlIGFyZSBub3QgZW5v dWdoIHJlc291cmNlcyBhdmFpbGFibGUgdG8KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb21wbGV0ZSB0aGUgcmVnaXN0cmF0aW9uLgo+ICsKPiArKiovCj4gK1JFVFVSTl9T VEFUVVMKPiArRUZJQVBJCj4gK1BjaVNlZ21lbnRSZWdpc3RlckZvclJ1bnRpbWVBY2Nlc3MgKAo+ ICsgIElOIFVJTlROICBBZGRyZXNzCj4gKyAgKQo+ICt7Cj4gKyAgQVNTRVJUX0lOVkFMSURfUENJ X1NFR01FTlRfQUREUkVTUyAoQWRkcmVzcywgMCk7Cj4gKwo+ICsgIHJldHVybiBSRVRVUk5fVU5T VVBQT1JURUQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgIFJlYWRzIGFuIDgtYml0IFBDSSBjb25maWd1 cmF0aW9uIHJlZ2lzdGVyLgo+ICsKPiArICBSZWFkcyBhbmQgcmV0dXJucyB0aGUgOC1iaXQgUENJ IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuCj4gKyAgVGhpcyBm dW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kgcmVhZCBhbmQgd3JpdGUgb3BlcmF0 aW9ucyBhcmUgc2VyaWFsaXplZC4KPiArCj4gKyAgSWYgYW55IHJlc2VydmVkIGJpdHMgaW4gQWRk cmVzcyBhcmUgc2V0LCB0aGVuIEFTU0VSVCgpLgo+ICsKPiArICBAcGFyYW1baW5dICBBZGRyZXNz ICAgVGhlIGFkZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kgU2VnbWVudCwgQnVzLCBEZXZpY2Us IEZ1bmN0aW9uLAo+ICsgICAgICAgICAgICAgICAgICAgIGFuZCBSZWdpc3Rlci4KPiArCj4gKyAg QHJldHVybiBUaGUgOC1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5 IEFkZHJlc3MuCj4gKwo+ICsqKi8KPiArVUlOVDgKPiArRUZJQVBJCj4gK1BjaVNlZ21lbnRSZWFk OCAoCj4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICBBZGRyZXNzCj4gKyAgKQo+ICt7 Cj4gKyAgQVNTRVJUX0lOVkFMSURfUENJX1NFR01FTlRfQUREUkVTUyAoQWRkcmVzcywgMCk7Cj4g Kwo+ICsgIHJldHVybiAoVUlOVDgpIFBjaVNlZ21lbnRMaWJSZWFkV29ya2VyIChBZGRyZXNzLCBQ Y2lDZmdXaWR0aFVpbnQ4KTsKPiArfQo+ICsKPiArLyoqCj4gKyAgV3JpdGVzIGFuIDgtYml0IFBD SSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsKPiArICBXcml0ZXMgdGhlIDgtYml0IFBDSSBj b25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzIHdpdGggdGhlIHZhbHVl IHNwZWNpZmllZCBieSBWYWx1ZS4KPiArICBWYWx1ZSBpcyByZXR1cm5lZC4gIFRoaXMgZnVuY3Rp b24gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgUENJIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMg YXJlIHNlcmlhbGl6ZWQuCj4gKwo+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFkZHJlc3Mg YXJlIHNldCwgdGhlbiBBU1NFUlQoKS4KPiArCj4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgICAg VGhlIGFkZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kgU2VnbWVudCwgQnVzLCBEZXZpY2UsIEZ1 bmN0aW9uLCBhbmQgUmVnaXN0ZXIuCj4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgVGhlIHZh bHVlIHRvIHdyaXRlLgo+ICsKPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIHRvIHRoZSBQ Q0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4gKyoqLwo+ICtVSU5UOAo+ICtFRklBUEkK PiArUGNpU2VnbWVudFdyaXRlOCAoCj4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICBB ZGRyZXNzLAo+ICsgIElOIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgVmFsdWUKPiArICApCj4g K3sKPiArICBBU1NFUlRfSU5WQUxJRF9QQ0lfU0VHTUVOVF9BRERSRVNTIChBZGRyZXNzLCAwKTsK PiArCj4gKyAgcmV0dXJuIChVSU5UOCkgUGNpU2VnbWVudExpYldyaXRlV29ya2VyIChBZGRyZXNz LCBQY2lDZmdXaWR0aFVpbnQ4LCBWYWx1ZSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgIFBlcmZvcm1z IGEgYml0d2lzZSBPUiBvZiBhbiA4LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciB3aXRo IGFuIDgtYml0IHZhbHVlLgo+ICsKPiArICBSZWFkcyB0aGUgOC1iaXQgUENJIGNvbmZpZ3VyYXRp b24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MsCj4gKyAgcGVyZm9ybXMgYSBiaXR3aXNl IE9SIGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFuZCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IE9y RGF0YSwKPiArICBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIDgtYml0IFBDSSBjb25maWd1 cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLgo+ICsgIFRoZSB2YWx1ZSB3cml0 dGVuIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBpcyByZXR1cm5lZC4KPiArICBU aGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFBDSSByZWFkIGFuZCB3cml0ZSBv cGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLgo+ICsKPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0cyBp biBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCkuCj4gKwo+ICsgIEBwYXJhbVtpbl0gIEFk ZHJlc3MgICBUaGUgYWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBTZWdtZW50LCBCdXMsIERl dmljZSwgRnVuY3Rpb24sIGFuZCBSZWdpc3Rlci4KPiArICBAcGFyYW1baW5dICBPckRhdGEgICAg VGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsK PiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBy ZWdpc3Rlci4KPiArCj4gKyoqLwo+ICtVSU5UOAo+ICtFRklBUEkKPiArUGNpU2VnbWVudE9yOCAo Cj4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLAo+ICsgIElOIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgT3JEYXRhCj4gKyAgKQo+ICt7Cj4gKyAgcmV0dXJuIFBjaVNl Z21lbnRXcml0ZTggKEFkZHJlc3MsIChVSU5UOCkgKFBjaVNlZ21lbnRSZWFkOCAoQWRkcmVzcykg fCBPckRhdGEpKTsKPiArfQo+ICsKPiArLyoqCj4gKyAgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBv ZiBhbiA4LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciB3aXRoIGFuIDgtYml0IHZhbHVl Lgo+ICsKPiArICBSZWFkcyB0aGUgOC1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3Bl Y2lmaWVkIGJ5IEFkZHJlc3MsCj4gKyAgcGVyZm9ybXMgYSBiaXR3aXNlIEFORCBiZXR3ZWVuIHRo ZSByZWFkIHJlc3VsdCBhbmQgdGhlIHZhbHVlIHNwZWNpZmllZCBieSBBbmREYXRhLAo+ICsgIGFu ZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgOC1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0 ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuCj4gKyAgVGhlIHZhbHVlIHdyaXR0ZW4gdG8gdGhlIFBD SSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGlzIHJldHVybmVkLgo+ICsgIFRoaXMgZnVuY3Rpb24g bXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgUENJIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJl IHNlcmlhbGl6ZWQuCj4gKyAgSWYgYW55IHJlc2VydmVkIGJpdHMgaW4gQWRkcmVzcyBhcmUgc2V0 LCB0aGVuIEFTU0VSVCgpLgo+ICsKPiArICBAcGFyYW1baW5dICBBZGRyZXNzICAgVGhlIGFkZHJl c3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kgU2VnbWVudCwgQnVzLCBEZXZpY2UsIEZ1bmN0aW9uLCBh bmQgUmVnaXN0ZXIuCj4gKyAgQHBhcmFtW2luXSAgQW5kRGF0YSAgIFRoZSB2YWx1ZSB0byBBTkQg d2l0aCB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gKwo+ICsgIEByZXR1cm4gVGhl IHZhbHVlIHdyaXR0ZW4gdG8gdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsKPiAr KiovCj4gK1VJTlQ4Cj4gK0VGSUFQSQo+ICtQY2lTZWdtZW50QW5kOCAoCj4gKyAgSU4gVUlOVDY0 ICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLAo+ICsgIElOIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgQW5kRGF0YQo+ICsgICkKPiArewo+ICsgIHJldHVybiBQY2lTZWdtZW50V3JpdGU4IChB ZGRyZXNzLCAoVUlOVDgpIChQY2lTZWdtZW50UmVhZDggKEFkZHJlc3MpICYgQW5kRGF0YSkpOwo+ ICt9Cj4gKwo+ICsvKioKPiArICBQZXJmb3JtcyBhIGJpdHdpc2UgQU5EIG9mIGFuIDgtYml0IFBD SSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHdpdGggYW4gOC1iaXQgdmFsdWUsCj4gKyAgZm9sbG93 ZWQgYSAgYml0d2lzZSBPUiB3aXRoIGFub3RoZXIgOC1iaXQgdmFsdWUuCj4gKwo+ICsgIFJlYWRz IHRoZSA4LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVz cywKPiArICBwZXJmb3JtcyBhIGJpdHdpc2UgQU5EIGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFu ZCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IEFuZERhdGEsCj4gKyAgcGVyZm9ybXMgYSBiaXR3aXNl IE9SIGJldHdlZW4gdGhlIHJlc3VsdCBvZiB0aGUgQU5EIG9wZXJhdGlvbiBhbmQgdGhlIHZhbHVl IHNwZWNpZmllZCBieSBPckRhdGEsCj4gKyAgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSA4 LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4KPiAr ICBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaXMg cmV0dXJuZWQuCj4gKyAgVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kg cmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4KPiArCj4gKyAgSWYgYW55 IHJlc2VydmVkIGJpdHMgaW4gQWRkcmVzcyBhcmUgc2V0LCB0aGVuIEFTU0VSVCgpLgo+ICsKPiAr ICBAcGFyYW1baW5dICBBZGRyZXNzICAgVGhlIGFkZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kg U2VnbWVudCwgQnVzLCBEZXZpY2UsIEZ1bmN0aW9uLCBhbmQgUmVnaXN0ZXIuCj4gKyAgQHBhcmFt W2luXSAgQW5kRGF0YSAgICBUaGUgdmFsdWUgdG8gQU5EIHdpdGggdGhlIFBDSSBjb25maWd1cmF0 aW9uIHJlZ2lzdGVyLgo+ICsgIEBwYXJhbVtpbl0gIE9yRGF0YSAgICBUaGUgdmFsdWUgdG8gT1Ig d2l0aCB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gKwo+ICsgIEByZXR1cm4gVGhl IHZhbHVlIHdyaXR0ZW4gdG8gdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsKPiAr KiovCj4gK1VJTlQ4Cj4gK0VGSUFQSQo+ICtQY2lTZWdtZW50QW5kVGhlbk9yOCAoCj4gKyAgSU4g VUlOVDY0ICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLAo+ICsgIElOIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgQW5kRGF0YSwKPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgICAgIE9y RGF0YQo+ICsgICkKPiArewo+ICsgIHJldHVybiBQY2lTZWdtZW50V3JpdGU4IChBZGRyZXNzLCAo VUlOVDgpICgoUGNpU2VnbWVudFJlYWQ4IChBZGRyZXNzKSAmIEFuZERhdGEpIHwgT3JEYXRhKSk7 Cj4gK30KPiArCj4gKy8qKgo+ICsgIFJlYWRzIGEgYml0IGZpZWxkIG9mIGEgUENJIGNvbmZpZ3Vy YXRpb24gcmVnaXN0ZXIuCj4gKwo+ICsgIFJlYWRzIHRoZSBiaXQgZmllbGQgaW4gYW4gOC1iaXQg UENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuIFRoZSBiaXQgZmllbGQgaXMKPiArICBzcGVjaWZp ZWQgYnkgdGhlIFN0YXJ0Qml0IGFuZCB0aGUgRW5kQml0LiBUaGUgdmFsdWUgb2YgdGhlIGJpdCBm aWVsZCBpcwo+ICsgIHJldHVybmVkLgo+ICsKPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0cyBpbiBB ZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgU3RhcnRCaXQgaXMgZ3JlYXRl ciB0aGFuIDcsIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgRW5kQml0IGlzIGdyZWF0ZXIgdGhhbiA3 LCB0aGVuIEFTU0VSVCgpLgo+ICsgIElmIEVuZEJpdCBpcyBsZXNzIHRoYW4gU3RhcnRCaXQsIHRo ZW4gQVNTRVJUKCkuCj4gKwo+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICBUaGUgUENJIGNvbmZp Z3VyYXRpb24gcmVnaXN0ZXIgdG8gcmVhZC4KPiArICBAcGFyYW1baW5dICBTdGFydEJpdCAgVGhl IG9yZGluYWwgb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLgo+ ICsgICAgICAgICAgICAgICAgICAgIFJhbmdlIDAuLjcuCj4gKyAgQHBhcmFtW2luXSAgRW5kQml0 ICAgIFRoZSBvcmRpbmFsIG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZp ZWxkLgo+ICsgICAgICAgICAgICAgICAgICAgIFJhbmdlIDAuLjcuCj4gKwo+ICsgIEByZXR1cm4g VGhlIHZhbHVlIG9mIHRoZSBiaXQgZmllbGQgcmVhZCBmcm9tIHRoZSBQQ0kgY29uZmlndXJhdGlv biByZWdpc3Rlci4KPiArCj4gKyoqLwo+ICtVSU5UOAo+ICtFRklBUEkKPiArUGNpU2VnbWVudEJp dEZpZWxkUmVhZDggKAo+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywK PiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFN0YXJ0Qml0LAo+ICsgIElOIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgRW5kQml0Cj4gKyAgKQo+ICt7Cj4gKyAgcmV0dXJuIEJpdEZp ZWxkUmVhZDggKFBjaVNlZ21lbnRSZWFkOCAoQWRkcmVzcyksIFN0YXJ0Qml0LCBFbmRCaXQpOwo+ ICt9Cj4gKwo+ICsvKioKPiArICBXcml0ZXMgYSBiaXQgZmllbGQgdG8gYSBQQ0kgY29uZmlndXJh dGlvbiByZWdpc3Rlci4KPiArCj4gKyAgV3JpdGVzIFZhbHVlIHRvIHRoZSBiaXQgZmllbGQgb2Yg dGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiBUaGUgYml0Cj4gKyAgZmllbGQgaXMgc3Bl Y2lmaWVkIGJ5IHRoZSBTdGFydEJpdCBhbmQgdGhlIEVuZEJpdC4gQWxsIG90aGVyIGJpdHMgaW4g dGhlCj4gKyAgZGVzdGluYXRpb24gUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYXJlIHByZXNl cnZlZC4gVGhlIG5ldyB2YWx1ZSBvZiB0aGUKPiArICA4LWJpdCByZWdpc3RlciBpcyByZXR1cm5l ZC4KPiArCj4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgIFRoZSBQQ0kgY29uZmlndXJhdGlvbiBy ZWdpc3RlciB0byB3cml0ZS4KPiArICBAcGFyYW1baW5dICBTdGFydEJpdCAgVGhlIG9yZGluYWwg b2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLgo+ICsgICAgICAg ICAgICAgICAgICAgIFJhbmdlIDAuLjcuCj4gKyAgQHBhcmFtW2luXSAgRW5kQml0ICAgIFRoZSBv cmRpbmFsIG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLgo+ICsg ICAgICAgICAgICAgICAgICAgIFJhbmdlIDAuLjcuCj4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAg IFRoZSBuZXcgdmFsdWUgb2YgdGhlIGJpdCBmaWVsZC4KPiArCj4gKyAgQHJldHVybiBUaGUgdmFs dWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4g KyoqLwo+ICtVSU5UOAo+ICtFRklBUEkKPiArUGNpU2VnbWVudEJpdEZpZWxkV3JpdGU4ICgKPiAr ICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsCj4gKyAgSU4gVUlOVE4gICAg ICAgICAgICAgICAgICAgICBTdGFydEJpdCwKPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAg ICAgIEVuZEJpdCwKPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgICAgIFZhbHVlCj4gKyAg KQo+ICt7Cj4gKyAgcmV0dXJuIFBjaVNlZ21lbnRXcml0ZTggKAo+ICsgICAgICAgICAgIEFkZHJl c3MsCj4gKyAgICAgICAgICAgQml0RmllbGRXcml0ZTggKFBjaVNlZ21lbnRSZWFkOCAoQWRkcmVz cyksIFN0YXJ0Qml0LCBFbmRCaXQsIFZhbHVlKQo+ICsgICAgICAgICAgICk7Cj4gK30KPiArCj4g Ky8qKgo+ICsgIFJlYWRzIGEgYml0IGZpZWxkIGluIGFuIDgtYml0IFBDSSBjb25maWd1cmF0aW9u LCBwZXJmb3JtcyBhIGJpdHdpc2UgT1IsIGFuZAo+ICsgIHdyaXRlcyB0aGUgcmVzdWx0IGJhY2sg dG8gdGhlIGJpdCBmaWVsZCBpbiB0aGUgOC1iaXQgcG9ydC4KPiArCj4gKyAgUmVhZHMgdGhlIDgt Yml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLCBwZXJm b3JtcyBhCj4gKyAgYml0d2lzZSBPUiBiZXR3ZWVuIHRoZSByZWFkIHJlc3VsdCBhbmQgdGhlIHZh bHVlIHNwZWNpZmllZCBieQo+ICsgIE9yRGF0YSwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRo ZSA4LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlcgo+ICsgIHNwZWNpZmllZCBieSBBZGRy ZXNzLiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIg aXMKPiArICByZXR1cm5lZC4gVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQ Q0kgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucwo+ICsgIGFyZSBzZXJpYWxpemVkLiBFeHRyYSBs ZWZ0IGJpdHMgaW4gT3JEYXRhIGFyZSBzdHJpcHBlZC4KPiArCj4gKyAgSWYgYW55IHJlc2VydmVk IGJpdHMgaW4gQWRkcmVzcyBhcmUgc2V0LCB0aGVuIEFTU0VSVCgpLgo+ICsgIElmIFN0YXJ0Qml0 IGlzIGdyZWF0ZXIgdGhhbiA3LCB0aGVuIEFTU0VSVCgpLgo+ICsgIElmIEVuZEJpdCBpcyBncmVh dGVyIHRoYW4gNywgdGhlbiBBU1NFUlQoKS4KPiArICBJZiBFbmRCaXQgaXMgbGVzcyB0aGFuIFN0 YXJ0Qml0LCB0aGVuIEFTU0VSVCgpLgo+ICsgIElmIE9yRGF0YSBpcyBsYXJnZXIgdGhhbiB0aGUg Yml0bWFzayB2YWx1ZSByYW5nZSBzcGVjaWZpZWQgYnkgU3RhcnRCaXQgYW5kIEVuZEJpdCwgdGhl biBBU1NFUlQoKS4KPiArCj4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgIFRoZSBQQ0kgY29uZmln dXJhdGlvbiByZWdpc3RlciB0byB3cml0ZS4KPiArICBAcGFyYW1baW5dICBTdGFydEJpdCAgVGhl IG9yZGluYWwgb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLgo+ ICsgICAgICAgICAgICAgICAgICAgIFJhbmdlIDAuLjcuCj4gKyAgQHBhcmFtW2luXSAgRW5kQml0 ICAgIFRoZSBvcmRpbmFsIG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZp ZWxkLgo+ICsgICAgICAgICAgICAgICAgICAgIFJhbmdlIDAuLjcuCj4gKyAgQHBhcmFtW2luXSAg T3JEYXRhICAgIFRoZSB2YWx1ZSB0byBPUiB3aXRoIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdp c3Rlci4KPiArCj4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kg Y29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4gKyoqLwo+ICtVSU5UOAo+ICtFRklBUEkKPiAr UGNpU2VnbWVudEJpdEZpZWxkT3I4ICgKPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAg IEFkZHJlc3MsCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICBTdGFydEJpdCwKPiAr ICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEVuZEJpdCwKPiArICBJTiBVSU5UOCAgICAg ICAgICAgICAgICAgICAgIE9yRGF0YQo+ICsgICkKPiArewo+ICsgIHJldHVybiBQY2lTZWdtZW50 V3JpdGU4ICgKPiArICAgICAgICAgICBBZGRyZXNzLAo+ICsgICAgICAgICAgIEJpdEZpZWxkT3I4 IChQY2lTZWdtZW50UmVhZDggKEFkZHJlc3MpLCBTdGFydEJpdCwgRW5kQml0LCBPckRhdGEpCj4g KyAgICAgICAgICAgKTsKPiArfQo+ICsKPiArLyoqCj4gKyAgUmVhZHMgYSBiaXQgZmllbGQgaW4g YW4gOC1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIsIHBlcmZvcm1zIGEgYml0d2lzZQo+ ICsgIEFORCwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IGJhY2sgdG8gdGhlIGJpdCBmaWVsZCBpbiB0 aGUgOC1iaXQgcmVnaXN0ZXIuCj4gKwo+ICsgIFJlYWRzIHRoZSA4LWJpdCBQQ0kgY29uZmlndXJh dGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcywgcGVyZm9ybXMgYQo+ICsgIGJpdHdp c2UgQU5EIGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFuZCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5 IEFuZERhdGEsIGFuZAo+ICsgIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSA4LWJpdCBQQ0kgY29u ZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkKPiArICBBZGRyZXNzLiBUaGUgdmFsdWUg d3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaXMgcmV0dXJuZWQuCj4g KyAgVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kgcmVhZCBhbmQgd3Jp dGUgb3BlcmF0aW9ucyBhcmUKPiArICBzZXJpYWxpemVkLiBFeHRyYSBsZWZ0IGJpdHMgaW4gQW5k RGF0YSBhcmUgc3RyaXBwZWQuCj4gKwo+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFkZHJl c3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4KPiArICBJZiBTdGFydEJpdCBpcyBncmVhdGVyIHRo YW4gNywgdGhlbiBBU1NFUlQoKS4KPiArICBJZiBFbmRCaXQgaXMgZ3JlYXRlciB0aGFuIDcsIHRo ZW4gQVNTRVJUKCkuCj4gKyAgSWYgRW5kQml0IGlzIGxlc3MgdGhhbiBTdGFydEJpdCwgdGhlbiBB U1NFUlQoKS4KPiArICBJZiBBbmREYXRhIGlzIGxhcmdlciB0aGFuIHRoZSBiaXRtYXNrIHZhbHVl IHJhbmdlIHNwZWNpZmllZCBieSBTdGFydEJpdCBhbmQgRW5kQml0LCB0aGVuIEFTU0VSVCgpLgo+ ICsKPiArICBAcGFyYW1baW5dICBBZGRyZXNzICAgVGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lz dGVyIHRvIHdyaXRlLgo+ICsgIEBwYXJhbVtpbl0gIFN0YXJ0Qml0ICBUaGUgb3JkaW5hbCBvZiB0 aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQuCj4gKyAgICAgICAgICAg ICAgICAgICAgUmFuZ2UgMC4uNy4KPiArICBAcGFyYW1baW5dICBFbmRCaXQgICAgVGhlIG9yZGlu YWwgb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQuCj4gKyAgICAg ICAgICAgICAgICAgICAgUmFuZ2UgMC4uNy4KPiArICBAcGFyYW1baW5dICBBbmREYXRhICAgVGhl IHZhbHVlIHRvIEFORCB3aXRoIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4g KyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlv biByZWdpc3Rlci4KPiArCj4gKyoqLwo+ICtVSU5UOAo+ICtFRklBUEkKPiArUGNpU2VnbWVudEJp dEZpZWxkQW5kOCAoCj4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLAo+ ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgU3RhcnRCaXQsCj4gKyAgSU4gVUlOVE4g ICAgICAgICAgICAgICAgICAgICBFbmRCaXQsCj4gKyAgSU4gVUlOVDggICAgICAgICAgICAgICAg ICAgICBBbmREYXRhCj4gKyAgKQo+ICt7Cj4gKyAgcmV0dXJuIFBjaVNlZ21lbnRXcml0ZTggKAo+ ICsgICAgICAgICAgIEFkZHJlc3MsCj4gKyAgICAgICAgICAgQml0RmllbGRBbmQ4IChQY2lTZWdt ZW50UmVhZDggKEFkZHJlc3MpLCBTdGFydEJpdCwgRW5kQml0LCBBbmREYXRhKQo+ICsgICAgICAg ICAgICk7Cj4gK30KPiArCj4gKy8qKgo+ICsgIFJlYWRzIGEgYml0IGZpZWxkIGluIGFuIDgtYml0 IHBvcnQsIHBlcmZvcm1zIGEgYml0d2lzZSBBTkQgZm9sbG93ZWQgYnkgYQo+ICsgIGJpdHdpc2Ug T1IsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSBiaXQgZmllbGQgaW4gdGhlCj4g KyAgOC1iaXQgcG9ydC4KPiArCj4gKyAgUmVhZHMgdGhlIDgtYml0IFBDSSBjb25maWd1cmF0aW9u IHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLCBwZXJmb3JtcyBhCj4gKyAgYml0d2lzZSBB TkQgZm9sbG93ZWQgYnkgYSBiaXR3aXNlIE9SIGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFuZAo+ ICsgIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgQW5kRGF0YSwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0 IHRvIHRoZSA4LWJpdCBQQ0kKPiArICBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBi eSBBZGRyZXNzLiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJCj4gKyAgY29uZmlndXJhdGlv biByZWdpc3RlciBpcyByZXR1cm5lZC4gVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0 IGFsbCBQQ0kKPiArICByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLiBF eHRyYSBsZWZ0IGJpdHMgaW4gYm90aCBBbmREYXRhIGFuZAo+ICsgIE9yRGF0YSBhcmUgc3RyaXBw ZWQuCj4gKwo+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICBUaGUgUENJIGNvbmZpZ3VyYXRpb24g cmVnaXN0ZXIgdG8gd3JpdGUuCj4gKyAgQHBhcmFtW2luXSAgU3RhcnRCaXQgIFRoZSBvcmRpbmFs IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4KPiArICAgICAg ICAgICAgICAgICAgICBSYW5nZSAwLi43Lgo+ICsgIEBwYXJhbVtpbl0gIEVuZEJpdCAgICBUaGUg b3JkaW5hbCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4KPiAr ICAgICAgICAgICAgICAgICAgICBSYW5nZSAwLi43Lgo+ICsgIEBwYXJhbVtpbl0gIEFuZERhdGEg ICBUaGUgdmFsdWUgdG8gQU5EIHdpdGggdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ ICsgIEBwYXJhbVtpbl0gIE9yRGF0YSAgICBUaGUgdmFsdWUgdG8gT1Igd2l0aCB0aGUgcmVzdWx0 IG9mIHRoZSBBTkQgb3BlcmF0aW9uLgo+ICsKPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVu IGJhY2sgdG8gdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsKPiArKiovCj4gK1VJ TlQ4Cj4gK0VGSUFQSQo+ICtQY2lTZWdtZW50Qml0RmllbGRBbmRUaGVuT3I4ICgKPiArICBJTiBV SU5UNjQgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsCj4gKyAgSU4gVUlOVE4gICAgICAgICAg ICAgICAgICAgICBTdGFydEJpdCwKPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEVu ZEJpdCwKPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgICAgIEFuZERhdGEsCj4gKyAgSU4g VUlOVDggICAgICAgICAgICAgICAgICAgICBPckRhdGEKPiArICApCj4gK3sKPiArICByZXR1cm4g UGNpU2VnbWVudFdyaXRlOCAoCj4gKyAgICAgICAgICAgQWRkcmVzcywKPiArICAgICAgICAgICBC aXRGaWVsZEFuZFRoZW5PcjggKFBjaVNlZ21lbnRSZWFkOCAoQWRkcmVzcyksIFN0YXJ0Qml0LCBF bmRCaXQsIEFuZERhdGEsIE9yRGF0YSkKPiArICAgICAgICAgICApOwo+ICt9Cj4gKwo+ICsvKioK PiArICBSZWFkcyBhIDE2LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4gKyAg UmVhZHMgYW5kIHJldHVybnMgdGhlIDE2LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBz cGVjaWZpZWQgYnkgQWRkcmVzcy4KPiArICBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRo YXQgYWxsIFBDSSByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLgo+ICsK PiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0cyBpbiBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJU KCkuCj4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwg dGhlbiBBU1NFUlQoKS4KPiArCj4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgIFRoZSBhZGRyZXNz IHRoYXQgZW5jb2RlcyB0aGUgUENJIFNlZ21lbnQsIEJ1cywgRGV2aWNlLCBGdW5jdGlvbiwgYW5k IFJlZ2lzdGVyLgo+ICsKPiArICBAcmV0dXJuIFRoZSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24g cmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuCj4gKwo+ICsqKi8KPiArVUlOVDE2Cj4gK0VG SUFQSQo+ICtQY2lTZWdtZW50UmVhZDE2ICgKPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAg ICAgIEFkZHJlc3MKPiArICApCj4gK3sKPiArICBBU1NFUlRfSU5WQUxJRF9QQ0lfU0VHTUVOVF9B RERSRVNTIChBZGRyZXNzLCAxKTsKPiArCj4gKyAgcmV0dXJuIChVSU5UMTYpIFBjaVNlZ21lbnRM aWJSZWFkV29ya2VyIChBZGRyZXNzLCBQY2lDZmdXaWR0aFVpbnQxNik7Cj4gK30KPiArCj4gKy8q Kgo+ICsgIFdyaXRlcyBhIDE2LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4g KyAgV3JpdGVzIHRoZSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVk IGJ5IEFkZHJlc3Mgd2l0aCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IFZhbHVlLgo+ICsgIFZhbHVl IGlzIHJldHVybmVkLiAgVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kg cmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4KPiArCj4gKyAgSWYgYW55 IHJlc2VydmVkIGJpdHMgaW4gQWRkcmVzcyBhcmUgc2V0LCB0aGVuIEFTU0VSVCgpLgo+ICsgIElm IEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJU KCkuCj4gKwo+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICAgIFRoZSBhZGRyZXNzIHRoYXQgZW5j b2RlcyB0aGUgUENJIFNlZ21lbnQsIEJ1cywgRGV2aWNlLCBGdW5jdGlvbiwgYW5kIFJlZ2lzdGVy Lgo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgIFRoZSB2YWx1ZSB0byB3cml0ZS4KPiArCj4g KyAgQHJldHVybiBUaGUgcGFyYW1ldGVyIG9mIFZhbHVlLgo+ICsKPiArKiovCj4gK1VJTlQxNgo+ ICtFRklBUEkKPiArUGNpU2VnbWVudFdyaXRlMTYgKAo+ICsgIElOIFVJTlQ2NCAgICAgICAgICAg ICAgICAgICAgQWRkcmVzcywKPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgICAgIFZhbHVl Cj4gKyAgKQo+ICt7Cj4gKyAgQVNTRVJUX0lOVkFMSURfUENJX1NFR01FTlRfQUREUkVTUyAoQWRk cmVzcywgMSk7Cj4gKwo+ICsgIHJldHVybiAoVUlOVDE2KSBQY2lTZWdtZW50TGliV3JpdGVXb3Jr ZXIgKEFkZHJlc3MsIFBjaUNmZ1dpZHRoVWludDE2LCBWYWx1ZSk7Cj4gK30KPiArCj4gKy8qKgo+ ICsgIFBlcmZvcm1zIGEgYml0d2lzZSBPUiBvZiBhIDE2LWJpdCBQQ0kgY29uZmlndXJhdGlvbiBy ZWdpc3RlciB3aXRoCj4gKyAgYSAxNi1iaXQgdmFsdWUuCj4gKwo+ICsgIFJlYWRzIHRoZSAxNi1i aXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MsIHBlcmZv cm1zIGEKPiArICBiaXR3aXNlIE9SIGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFuZCB0aGUgdmFs dWUgc3BlY2lmaWVkIGJ5Cj4gKyAgT3JEYXRhLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhl IDE2LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlcgo+ICsgIHNwZWNpZmllZCBieSBBZGRy ZXNzLiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIg aXMKPiArICByZXR1cm5lZC4gVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQ Q0kgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucwo+ICsgIGFyZSBzZXJpYWxpemVkLgo+ICsKPiAr ICBJZiBhbnkgcmVzZXJ2ZWQgYml0cyBpbiBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCku Cj4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhl biBBU1NFUlQoKS4KPiArCj4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyBUaGUgYWRkcmVzcyB0aGF0 IGVuY29kZXMgdGhlIFBDSSBTZWdtZW50LCBCdXMsIERldmljZSwgRnVuY3Rpb24gYW5kCj4gKyAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyLgo+ICsgIEBwYXJhbVtpbl0gIE9yRGF0YSAgVGhlIHZh bHVlIHRvIE9SIHdpdGggdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsKPiArICBA cmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIFBDSSBjb25maWd1cmF0aW9uIHJl Z2lzdGVyLgo+ICsKPiArKiovCj4gK1VJTlQxNgo+ICtFRklBUEkKPiArUGNpU2VnbWVudE9yMTYg KAo+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywKPiArICBJTiBVSU5U MTYgICAgICAgICAgICAgICAgICAgIE9yRGF0YQo+ICsgICkKPiArewo+ICsgIHJldHVybiBQY2lT ZWdtZW50V3JpdGUxNiAoQWRkcmVzcywgKFVJTlQxNikgKFBjaVNlZ21lbnRSZWFkMTYgKEFkZHJl c3MpIHwgT3JEYXRhKSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgIFBlcmZvcm1zIGEgYml0d2lzZSBB TkQgb2YgYSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgd2l0aCBhIDE2LWJpdCB2 YWx1ZS4KPiArCj4gKyAgUmVhZHMgdGhlIDE2LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rl ciBzcGVjaWZpZWQgYnkgQWRkcmVzcywKPiArICBwZXJmb3JtcyBhIGJpdHdpc2UgQU5EIGJldHdl ZW4gdGhlIHJlYWQgcmVzdWx0IGFuZCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IEFuZERhdGEsCj4g KyAgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24g cmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuCj4gKyAgVGhlIHZhbHVlIHdyaXR0ZW4gdG8g dGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGlzIHJldHVybmVkLgo+ICsgIFRoaXMgZnVu Y3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgUENJIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlv bnMgYXJlIHNlcmlhbGl6ZWQuCj4gKwo+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFkZHJl c3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4KPiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVk IG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLgo+ICsKPiArICBAcGFyYW1baW5d ICBBZGRyZXNzICAgVGhlIGFkZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kgU2VnbWVudCwgQnVz LCBEZXZpY2UsIEZ1bmN0aW9uLCBhbmQgUmVnaXN0ZXIuCj4gKyAgQHBhcmFtW2luXSAgQW5kRGF0 YSAgIFRoZSB2YWx1ZSB0byBBTkQgd2l0aCB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIu Cj4gKwo+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gdG8gdGhlIFBDSSBjb25maWd1cmF0 aW9uIHJlZ2lzdGVyLgo+ICsKPiArKiovCj4gK1VJTlQxNgo+ICtFRklBUEkKPiArUGNpU2VnbWVu dEFuZDE2ICgKPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsCj4gKyAg SU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICBBbmREYXRhCj4gKyAgKQo+ICt7Cj4gKyAgcmV0 dXJuIFBjaVNlZ21lbnRXcml0ZTE2IChBZGRyZXNzLCAoVUlOVDE2KSAoUGNpU2VnbWVudFJlYWQx NiAoQWRkcmVzcykgJiBBbmREYXRhKSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgIFBlcmZvcm1zIGEg Yml0d2lzZSBBTkQgb2YgYSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgd2l0aCBh IDE2LWJpdCB2YWx1ZSwKPiArICBmb2xsb3dlZCBhICBiaXR3aXNlIE9SIHdpdGggYW5vdGhlciAx Ni1iaXQgdmFsdWUuCj4gKwo+ICsgIFJlYWRzIHRoZSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24g cmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MsCj4gKyAgcGVyZm9ybXMgYSBiaXR3aXNlIEFO RCBiZXR3ZWVuIHRoZSByZWFkIHJlc3VsdCBhbmQgdGhlIHZhbHVlIHNwZWNpZmllZCBieSBBbmRE YXRhLAo+ICsgIHBlcmZvcm1zIGEgYml0d2lzZSBPUiBiZXR3ZWVuIHRoZSByZXN1bHQgb2YgdGhl IEFORCBvcGVyYXRpb24gYW5kIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgT3JEYXRhLAo+ICsgIGFu ZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgMTYtYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lz dGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLgo+ICsgIFRoZSB2YWx1ZSB3cml0dGVuIHRvIHRoZSBQ Q0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBpcyByZXR1cm5lZC4KPiArICBUaGlzIGZ1bmN0aW9u IG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFBDSSByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFy ZSBzZXJpYWxpemVkLgo+ICsKPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0cyBpbiBBZGRyZXNzIGFy ZSBzZXQsIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBh IDE2LWJpdCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4KPiArCj4gKyAgQHBhcmFtW2luXSAgQWRk cmVzcyAgIFRoZSBhZGRyZXNzIHRoYXQgZW5jb2RlcyB0aGUgUENJIFNlZ21lbnQsIEJ1cywgRGV2 aWNlLCBGdW5jdGlvbiwgYW5kIFJlZ2lzdGVyLgo+ICsgIEBwYXJhbVtpbl0gIEFuZERhdGEgICBU aGUgdmFsdWUgdG8gQU5EIHdpdGggdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsg IEBwYXJhbVtpbl0gIE9yRGF0YSAgICBUaGUgdmFsdWUgdG8gT1Igd2l0aCB0aGUgUENJIGNvbmZp Z3VyYXRpb24gcmVnaXN0ZXIuCj4gKwo+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gdG8g dGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsKPiArKiovCj4gK1VJTlQxNgo+ICtF RklBUEkKPiArUGNpU2VnbWVudEFuZFRoZW5PcjE2ICgKPiArICBJTiBVSU5UNjQgICAgICAgICAg ICAgICAgICAgIEFkZHJlc3MsCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICBBbmRE YXRhLAo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgT3JEYXRhCj4gKyAgKQo+ICt7 Cj4gKyAgcmV0dXJuIFBjaVNlZ21lbnRXcml0ZTE2IChBZGRyZXNzLCAoVUlOVDE2KSAoKFBjaVNl Z21lbnRSZWFkMTYgKEFkZHJlc3MpICYgQW5kRGF0YSkgfCBPckRhdGEpKTsKPiArfQo+ICsKPiAr LyoqCj4gKyAgUmVhZHMgYSBiaXQgZmllbGQgb2YgYSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rl ci4KPiArCj4gKyAgUmVhZHMgdGhlIGJpdCBmaWVsZCBpbiBhIDE2LWJpdCBQQ0kgY29uZmlndXJh dGlvbiByZWdpc3Rlci4gVGhlIGJpdCBmaWVsZCBpcwo+ICsgIHNwZWNpZmllZCBieSB0aGUgU3Rh cnRCaXQgYW5kIHRoZSBFbmRCaXQuIFRoZSB2YWx1ZSBvZiB0aGUgYml0IGZpZWxkIGlzCj4gKyAg cmV0dXJuZWQuCj4gKwo+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFkZHJlc3MgYXJlIHNl dCwgdGhlbiBBU1NFUlQoKS4KPiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYt Yml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLgo+ICsgIElmIFN0YXJ0Qml0IGlzIGdyZWF0ZXIg dGhhbiAxNSwgdGhlbiBBU1NFUlQoKS4KPiArICBJZiBFbmRCaXQgaXMgZ3JlYXRlciB0aGFuIDE1 LCB0aGVuIEFTU0VSVCgpLgo+ICsgIElmIEVuZEJpdCBpcyBsZXNzIHRoYW4gU3RhcnRCaXQsIHRo ZW4gQVNTRVJUKCkuCj4gKwo+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICBUaGUgUENJIGNvbmZp Z3VyYXRpb24gcmVnaXN0ZXIgdG8gcmVhZC4KPiArICBAcGFyYW1baW5dICBTdGFydEJpdCAgVGhl IG9yZGluYWwgb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLgo+ ICsgICAgICAgICAgICAgICAgICAgIFJhbmdlIDAuLjE1Lgo+ICsgIEBwYXJhbVtpbl0gIEVuZEJp dCAgICBUaGUgb3JkaW5hbCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBm aWVsZC4KPiArICAgICAgICAgICAgICAgICAgICBSYW5nZSAwLi4xNS4KPiArCj4gKyAgQHJldHVy biBUaGUgdmFsdWUgb2YgdGhlIGJpdCBmaWVsZCByZWFkIGZyb20gdGhlIFBDSSBjb25maWd1cmF0 aW9uIHJlZ2lzdGVyLgo+ICsKPiArKiovCj4gK1VJTlQxNgo+ICtFRklBUEkKPiArUGNpU2VnbWVu dEJpdEZpZWxkUmVhZDE2ICgKPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgIEFkZHJl c3MsCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICBTdGFydEJpdCwKPiArICBJTiBV SU5UTiAgICAgICAgICAgICAgICAgICAgIEVuZEJpdAo+ICsgICkKPiArewo+ICsgIHJldHVybiBC aXRGaWVsZFJlYWQxNiAoUGNpU2VnbWVudFJlYWQxNiAoQWRkcmVzcyksIFN0YXJ0Qml0LCBFbmRC aXQpOwo+ICt9Cj4gKwo+ICsvKioKPiArICBXcml0ZXMgYSBiaXQgZmllbGQgdG8gYSBQQ0kgY29u ZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4gKyAgV3JpdGVzIFZhbHVlIHRvIHRoZSBiaXQgZmll bGQgb2YgdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiBUaGUgYml0Cj4gKyAgZmllbGQg aXMgc3BlY2lmaWVkIGJ5IHRoZSBTdGFydEJpdCBhbmQgdGhlIEVuZEJpdC4gQWxsIG90aGVyIGJp dHMgaW4gdGhlCj4gKyAgZGVzdGluYXRpb24gUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYXJl IHByZXNlcnZlZC4gVGhlIG5ldyB2YWx1ZSBvZiB0aGUKPiArICAxNi1iaXQgcmVnaXN0ZXIgaXMg cmV0dXJuZWQuCj4gKwo+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFkZHJlc3MgYXJlIHNl dCwgdGhlbiBBU1NFUlQoKS4KPiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYt Yml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLgo+ICsgIElmIFN0YXJ0Qml0IGlzIGdyZWF0ZXIg dGhhbiAxNSwgdGhlbiBBU1NFUlQoKS4KPiArICBJZiBFbmRCaXQgaXMgZ3JlYXRlciB0aGFuIDE1 LCB0aGVuIEFTU0VSVCgpLgo+ICsgIElmIEVuZEJpdCBpcyBsZXNzIHRoYW4gU3RhcnRCaXQsIHRo ZW4gQVNTRVJUKCkuCj4gKyAgSWYgVmFsdWUgaXMgbGFyZ2VyIHRoYW4gdGhlIGJpdG1hc2sgdmFs dWUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IFN0YXJ0Qml0IGFuZCBFbmRCaXQsIHRoZW4gQVNTRVJUKCku Cj4gKwo+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICBUaGUgUENJIGNvbmZpZ3VyYXRpb24gcmVn aXN0ZXIgdG8gd3JpdGUuCj4gKyAgQHBhcmFtW2luXSAgU3RhcnRCaXQgIFRoZSBvcmRpbmFsIG9m IHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4KPiArICAgICAgICAg ICAgICAgICAgICBSYW5nZSAwLi4xNS4KPiArICBAcGFyYW1baW5dICBFbmRCaXQgICAgVGhlIG9y ZGluYWwgb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQuCj4gKyAg ICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uMTUuCj4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAg IFRoZSBuZXcgdmFsdWUgb2YgdGhlIGJpdCBmaWVsZC4KPiArCj4gKyAgQHJldHVybiBUaGUgdmFs dWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4g KyoqLwo+ICtVSU5UMTYKPiArRUZJQVBJCj4gK1BjaVNlZ21lbnRCaXRGaWVsZFdyaXRlMTYgKAo+ ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywKPiArICBJTiBVSU5UTiAg ICAgICAgICAgICAgICAgICAgIFN0YXJ0Qml0LAo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAg ICAgICAgRW5kQml0LAo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgVmFsdWUKPiAr ICApCj4gK3sKPiArICByZXR1cm4gUGNpU2VnbWVudFdyaXRlMTYgKAo+ICsgICAgICAgICAgIEFk ZHJlc3MsCj4gKyAgICAgICAgICAgQml0RmllbGRXcml0ZTE2IChQY2lTZWdtZW50UmVhZDE2IChB ZGRyZXNzKSwgU3RhcnRCaXQsIEVuZEJpdCwgVmFsdWUpCj4gKyAgICAgICAgICAgKTsKPiArfQo+ ICsKPiArLyoqCj4gKyAgUmVhZHMgdGhlIDE2LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rl ciBzcGVjaWZpZWQgYnkgQWRkcmVzcywKPiArICBwZXJmb3JtcyBhIGJpdHdpc2UgT1IgYmV0d2Vl biB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgT3JEYXRhLAo+ICsg IGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgMTYtYml0IFBDSSBjb25maWd1cmF0aW9uIHJl Z2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLgo+ICsKPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0 cyBpbiBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgQWRkcmVzcyBpcyBu b3QgYWxpZ25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4KPiArICBJZiBT dGFydEJpdCBpcyBncmVhdGVyIHRoYW4gMTUsIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgRW5kQml0 IGlzIGdyZWF0ZXIgdGhhbiAxNSwgdGhlbiBBU1NFUlQoKS4KPiArICBJZiBFbmRCaXQgaXMgbGVz cyB0aGFuIFN0YXJ0Qml0LCB0aGVuIEFTU0VSVCgpLgo+ICsgIElmIE9yRGF0YSBpcyBsYXJnZXIg dGhhbiB0aGUgYml0bWFzayB2YWx1ZSByYW5nZSBzcGVjaWZpZWQgYnkgU3RhcnRCaXQgYW5kIEVu ZEJpdCwgdGhlbiBBU1NFUlQoKS4KPiArCj4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgIFRoZSBQ Q0kgY29uZmlndXJhdGlvbiByZWdpc3RlciB0byB3cml0ZS4KPiArICBAcGFyYW1baW5dICBTdGFy dEJpdCAgVGhlIG9yZGluYWwgb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0 IGZpZWxkLgo+ICsgICAgICAgICAgICAgICAgICAgIFJhbmdlIDAuLjE1Lgo+ICsgIEBwYXJhbVtp bl0gIEVuZEJpdCAgICBUaGUgb3JkaW5hbCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4g dGhlIGJpdCBmaWVsZC4KPiArICAgICAgICAgICAgICAgICAgICBSYW5nZSAwLi4xNS4KPiArICBA cGFyYW1baW5dICBPckRhdGEgICAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIFBDSSBjb25maWd1 cmF0aW9uIHJlZ2lzdGVyLgo+ICsKPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sg dG8gdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsKPiArKiovCj4gK1VJTlQxNgo+ ICtFRklBUEkKPiArUGNpU2VnbWVudEJpdEZpZWxkT3IxNiAoCj4gKyAgSU4gVUlOVDY0ICAgICAg ICAgICAgICAgICAgICBBZGRyZXNzLAo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAg U3RhcnRCaXQsCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICBFbmRCaXQsCj4gKyAg SU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICBPckRhdGEKPiArICApCj4gK3sKPiArICByZXR1 cm4gUGNpU2VnbWVudFdyaXRlMTYgKAo+ICsgICAgICAgICAgIEFkZHJlc3MsCj4gKyAgICAgICAg ICAgQml0RmllbGRPcjE2IChQY2lTZWdtZW50UmVhZDE2IChBZGRyZXNzKSwgU3RhcnRCaXQsIEVu ZEJpdCwgT3JEYXRhKQo+ICsgICAgICAgICAgICk7Cj4gK30KPiArCj4gKy8qKgo+ICsgIFJlYWRz IGEgYml0IGZpZWxkIGluIGEgMTYtYml0IFBDSSBjb25maWd1cmF0aW9uLCBwZXJmb3JtcyBhIGJp dHdpc2UgT1IsCj4gKyAgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IGJhY2sgdG8gdGhlIGJpdCBmaWVs ZCBpbiB0aGUgMTYtYml0IHBvcnQuCj4gKwo+ICsgIFJlYWRzIHRoZSAxNi1iaXQgUENJIGNvbmZp Z3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MsCj4gKyAgcGVyZm9ybXMgYSBi aXR3aXNlIE9SIGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFuZCB0aGUgdmFsdWUgc3BlY2lmaWVk IGJ5IE9yRGF0YSwKPiArICBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIDE2LWJpdCBQQ0kg Y29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4KPiArICBUaGUgdmFs dWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaXMgcmV0dXJuZWQu Cj4gKyAgVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kgcmVhZCBhbmQg d3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4KPiArICBFeHRyYSBsZWZ0IGJpdHMgaW4g T3JEYXRhIGFyZSBzdHJpcHBlZC4KPiArCj4gKyAgSWYgYW55IHJlc2VydmVkIGJpdHMgaW4gQWRk cmVzcyBhcmUgc2V0LCB0aGVuIEFTU0VSVCgpLgo+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWdu ZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgU3RhcnRCaXQg aXMgZ3JlYXRlciB0aGFuIDcsIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgRW5kQml0IGlzIGdyZWF0 ZXIgdGhhbiA3LCB0aGVuIEFTU0VSVCgpLgo+ICsgIElmIEVuZEJpdCBpcyBsZXNzIHRoYW4gU3Rh cnRCaXQsIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgQW5kRGF0YSBpcyBsYXJnZXIgdGhhbiB0aGUg Yml0bWFzayB2YWx1ZSByYW5nZSBzcGVjaWZpZWQgYnkgU3RhcnRCaXQgYW5kIEVuZEJpdCwgdGhl biBBU1NFUlQoKS4KPiArCj4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgIFRoZSBhZGRyZXNzIHRo YXQgZW5jb2RlcyB0aGUgUENJIFNlZ21lbnQsIEJ1cywgRGV2aWNlLCBGdW5jdGlvbiwgYW5kIFJl Z2lzdGVyLgo+ICsgIEBwYXJhbVtpbl0gIFN0YXJ0Qml0ICBUaGUgb3JkaW5hbCBvZiB0aGUgbGVh c3Qgc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQuCj4gKyAgICAgICAgICAgICAgICAg ICAgVGhlIG9yZGluYWwgb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpbiBhIGJ5dGUgaXMg Yml0IDAuCj4gKyAgQHBhcmFtW2luXSAgRW5kQml0ICAgIFRoZSBvcmRpbmFsIG9mIHRoZSBtb3N0 IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLgo+ICsgICAgICAgICAgICAgICAgICAg IFRoZSBvcmRpbmFsIG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpbiBhIGJ5dGUgaXMgYml0 IDcuCj4gKyAgQHBhcmFtW2luXSAgQW5kRGF0YSAgIFRoZSB2YWx1ZSB0byBBTkQgd2l0aCB0aGUg cmVhZCB2YWx1ZSBmcm9tIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4gKyAg QHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0 ZXIuCj4gKwo+ICsqKi8KPiArVUlOVDE2Cj4gK0VGSUFQSQo+ICtQY2lTZWdtZW50Qml0RmllbGRB bmQxNiAoCj4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLAo+ICsgIElO IFVJTlROICAgICAgICAgICAgICAgICAgICAgU3RhcnRCaXQsCj4gKyAgSU4gVUlOVE4gICAgICAg ICAgICAgICAgICAgICBFbmRCaXQsCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICBB bmREYXRhCj4gKyAgKQo+ICt7Cj4gKyAgcmV0dXJuIFBjaVNlZ21lbnRXcml0ZTE2ICgKPiArICAg ICAgICAgICBBZGRyZXNzLAo+ICsgICAgICAgICAgIEJpdEZpZWxkQW5kMTYgKFBjaVNlZ21lbnRS ZWFkMTYgKEFkZHJlc3MpLCBTdGFydEJpdCwgRW5kQml0LCBBbmREYXRhKQo+ICsgICAgICAgICAg ICk7Cj4gK30KPiArCj4gKy8qKgo+ICsgIFJlYWRzIGEgYml0IGZpZWxkIGluIGEgMTYtYml0IHBv cnQsIHBlcmZvcm1zIGEgYml0d2lzZSBBTkQgZm9sbG93ZWQgYnkgYQo+ICsgIGJpdHdpc2UgT1Is IGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSBiaXQgZmllbGQgaW4gdGhlCj4gKyAg MTYtYml0IHBvcnQuCj4gKwo+ICsgIFJlYWRzIHRoZSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24g cmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MsIHBlcmZvcm1zIGEKPiArICBiaXR3aXNlIEFO RCBmb2xsb3dlZCBieSBhIGJpdHdpc2UgT1IgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kCj4g KyAgdGhlIHZhbHVlIHNwZWNpZmllZCBieSBBbmREYXRhLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQg dG8gdGhlIDE2LWJpdCBQQ0kKPiArICBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBi eSBBZGRyZXNzLiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJCj4gKyAgY29uZmlndXJhdGlv biByZWdpc3RlciBpcyByZXR1cm5lZC4gVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0 IGFsbCBQQ0kKPiArICByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLiBF eHRyYSBsZWZ0IGJpdHMgaW4gYm90aCBBbmREYXRhIGFuZAo+ICsgIE9yRGF0YSBhcmUgc3RyaXBw ZWQuCj4gKwo+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFkZHJlc3MgYXJlIHNldCwgdGhl biBBU1NFUlQoKS4KPiArICBJZiBTdGFydEJpdCBpcyBncmVhdGVyIHRoYW4gMTUsIHRoZW4gQVNT RVJUKCkuCj4gKyAgSWYgRW5kQml0IGlzIGdyZWF0ZXIgdGhhbiAxNSwgdGhlbiBBU1NFUlQoKS4K PiArICBJZiBFbmRCaXQgaXMgbGVzcyB0aGFuIFN0YXJ0Qml0LCB0aGVuIEFTU0VSVCgpLgo+ICsg IElmIEFuZERhdGEgaXMgbGFyZ2VyIHRoYW4gdGhlIGJpdG1hc2sgdmFsdWUgcmFuZ2Ugc3BlY2lm aWVkIGJ5IFN0YXJ0Qml0IGFuZCBFbmRCaXQsIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgT3JEYXRh IGlzIGxhcmdlciB0aGFuIHRoZSBiaXRtYXNrIHZhbHVlIHJhbmdlIHNwZWNpZmllZCBieSBTdGFy dEJpdCBhbmQgRW5kQml0LCB0aGVuIEFTU0VSVCgpLgo+ICsKPiArICBAcGFyYW1baW5dICBBZGRy ZXNzICAgVGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHRvIHdyaXRlLgo+ICsgIEBwYXJh bVtpbl0gIFN0YXJ0Qml0ICBUaGUgb3JkaW5hbCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0 IGluIHRoZSBiaXQgZmllbGQuCj4gKyAgICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uMTUuCj4g KyAgQHBhcmFtW2luXSAgRW5kQml0ICAgIFRoZSBvcmRpbmFsIG9mIHRoZSBtb3N0IHNpZ25pZmlj YW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLgo+ICsgICAgICAgICAgICAgICAgICAgIFJhbmdlIDAu LjE1Lgo+ICsgIEBwYXJhbVtpbl0gIEFuZERhdGEgICBUaGUgdmFsdWUgdG8gQU5EIHdpdGggdGhl IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsgIEBwYXJhbVtpbl0gIE9yRGF0YSAgICBU aGUgdmFsdWUgdG8gT1Igd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBBTkQgb3BlcmF0aW9uLgo+ICsK PiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIFBDSSBjb25maWd1cmF0 aW9uIHJlZ2lzdGVyLgo+ICsKPiArKiovCj4gK1VJTlQxNgo+ICtFRklBUEkKPiArUGNpU2VnbWVu dEJpdEZpZWxkQW5kVGhlbk9yMTYgKAo+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAg QWRkcmVzcywKPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFN0YXJ0Qml0LAo+ICsg IElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgRW5kQml0LAo+ICsgIElOIFVJTlQxNiAgICAg ICAgICAgICAgICAgICAgQW5kRGF0YSwKPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgICAg IE9yRGF0YQo+ICsgICkKPiArewo+ICsgIHJldHVybiBQY2lTZWdtZW50V3JpdGUxNiAoCj4gKyAg ICAgICAgICAgQWRkcmVzcywKPiArICAgICAgICAgICBCaXRGaWVsZEFuZFRoZW5PcjE2IChQY2lT ZWdtZW50UmVhZDE2IChBZGRyZXNzKSwgU3RhcnRCaXQsIEVuZEJpdCwgQW5kRGF0YSwgT3JEYXRh KQo+ICsgICAgICAgICAgICk7Cj4gK30KPiArCj4gKy8qKgo+ICsgIFJlYWRzIGEgMzItYml0IFBD SSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsKPiArICBSZWFkcyBhbmQgcmV0dXJucyB0aGUg MzItYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLgo+ ICsgIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgUENJIHJlYWQgYW5kIHdy aXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuCj4gKwo+ICsgIElmIGFueSByZXNlcnZlZCBi aXRzIGluIEFkZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4KPiArICBJZiBBZGRyZXNzIGlz IG5vdCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLgo+ICsKPiAr ICBAcGFyYW1baW5dICBBZGRyZXNzICAgVGhlIGFkZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kg U2VnbWVudCwgQnVzLCBEZXZpY2UsIEZ1bmN0aW9uLAo+ICsgICAgICAgICAgICAgICAgICAgIGFu ZCBSZWdpc3Rlci4KPiArCj4gKyAgQHJldHVybiBUaGUgMzItYml0IFBDSSBjb25maWd1cmF0aW9u IHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLgo+ICsKPiArKiovCj4gK1VJTlQzMgo+ICtF RklBUEkKPiArUGNpU2VnbWVudFJlYWQzMiAoCj4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAg ICAgICBBZGRyZXNzCj4gKyAgKQo+ICt7Cj4gKyAgQVNTRVJUX0lOVkFMSURfUENJX1NFR01FTlRf QUREUkVTUyAoQWRkcmVzcywgMyk7Cj4gKwo+ICsgIHJldHVybiBQY2lTZWdtZW50TGliUmVhZFdv cmtlciAoQWRkcmVzcywgUGNpQ2ZnV2lkdGhVaW50MzIpOwo+ICt9Cj4gKwo+ICsvKioKPiArICBX cml0ZXMgYSAzMi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gKwo+ICsgIFdyaXRl cyB0aGUgMzItYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRy ZXNzIHdpdGggdGhlIHZhbHVlIHNwZWNpZmllZCBieSBWYWx1ZS4KPiArICBWYWx1ZSBpcyByZXR1 cm5lZC4gIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgUENJIHJlYWQgYW5k IHdyaXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuCj4gKwo+ICsgIElmIGFueSByZXNlcnZl ZCBiaXRzIGluIEFkZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4KPiArICBJZiBBZGRyZXNz IGlzIG5vdCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLgo+ICsK PiArICBAcGFyYW1baW5dICBBZGRyZXNzICAgICBUaGUgYWRkcmVzcyB0aGF0IGVuY29kZXMgdGhl IFBDSSBTZWdtZW50LCBCdXMsIERldmljZSwKPiArICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0 aW9uLCBhbmQgUmVnaXN0ZXIuCj4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgVGhlIHZhbHVl IHRvIHdyaXRlLgo+ICsKPiArICBAcmV0dXJuIFRoZSBwYXJhbWV0ZXIgb2YgVmFsdWUuCj4gKwo+ ICsqKi8KPiArVUlOVDMyCj4gK0VGSUFQSQo+ICtQY2lTZWdtZW50V3JpdGUzMiAoCj4gKyAgSU4g VUlOVDY0ICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLAo+ICsgIElOIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgVmFsdWUKPiArICApCj4gK3sKPiArICBBU1NFUlRfSU5WQUxJRF9QQ0lfU0VH TUVOVF9BRERSRVNTIChBZGRyZXNzLCAzKTsKPiArCj4gKyAgcmV0dXJuIFBjaVNlZ21lbnRMaWJX cml0ZVdvcmtlciAoQWRkcmVzcywgUGNpQ2ZnV2lkdGhVaW50MzIsIFZhbHVlKTsKPiArfQo+ICsK PiArLyoqCj4gKyAgUGVyZm9ybXMgYSBiaXR3aXNlIE9SIG9mIGEgMzItYml0IFBDSSBjb25maWd1 cmF0aW9uIHJlZ2lzdGVyIHdpdGggYSAzMi1iaXQgdmFsdWUuCj4gKwo+ICsgIFJlYWRzIHRoZSAz Mi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MsCj4g KyAgcGVyZm9ybXMgYSBiaXR3aXNlIE9SIGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFuZCB0aGUg dmFsdWUgc3BlY2lmaWVkIGJ5IE9yRGF0YSwKPiArICBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8g dGhlIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVz cy4KPiArICBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0 ZXIgaXMgcmV0dXJuZWQuCj4gKyAgVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFs bCBQQ0kgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4KPiArCj4gKyAg SWYgYW55IHJlc2VydmVkIGJpdHMgaW4gQWRkcmVzcyBhcmUgc2V0LCB0aGVuIEFTU0VSVCgpLgo+ ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnksIHRoZW4g QVNTRVJUKCkuCj4gKwo+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICBUaGUgYWRkcmVzcyB0aGF0 IGVuY29kZXMgdGhlIFBDSSBTZWdtZW50LCBCdXMsIERldmljZSwgRnVuY3Rpb24sIGFuZCBSZWdp c3Rlci4KPiArICBAcGFyYW1baW5dICBPckRhdGEgICAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhl IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsKPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3 cml0dGVuIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4gKyoqLwo+ICtV SU5UMzIKPiArRUZJQVBJCj4gK1BjaVNlZ21lbnRPcjMyICgKPiArICBJTiBVSU5UNjQgICAgICAg ICAgICAgICAgICAgIEFkZHJlc3MsCj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICBP ckRhdGEKPiArICApCj4gK3sKPiArICByZXR1cm4gUGNpU2VnbWVudFdyaXRlMzIgKEFkZHJlc3Ms IFBjaVNlZ21lbnRSZWFkMzIgKEFkZHJlc3MpIHwgT3JEYXRhKTsKPiArfQo+ICsKPiArLyoqCj4g KyAgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiBhIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbiBy ZWdpc3RlciB3aXRoIGEgMzItYml0IHZhbHVlLgo+ICsKPiArICBSZWFkcyB0aGUgMzItYml0IFBD SSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLAo+ICsgIHBlcmZv cm1zIGEgYml0d2lzZSBBTkQgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1ZSBz cGVjaWZpZWQgYnkgQW5kRGF0YSwKPiArICBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIDMy LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4KPiAr ICBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaXMg cmV0dXJuZWQuCj4gKyAgVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kg cmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4KPiArCj4gKyAgSWYgYW55 IHJlc2VydmVkIGJpdHMgaW4gQWRkcmVzcyBhcmUgc2V0LCB0aGVuIEFTU0VSVCgpLgo+ICsgIElm IEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJU KCkuCj4gKwo+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICBUaGUgYWRkcmVzcyB0aGF0IGVuY29k ZXMgdGhlIFBDSSBTZWdtZW50LCBCdXMsIERldmljZSwgRnVuY3Rpb24sCj4gKyAgICAgICAgICAg ICAgICAgICAgYW5kIFJlZ2lzdGVyLgo+ICsgIEBwYXJhbVtpbl0gIEFuZERhdGEgICBUaGUgdmFs dWUgdG8gQU5EIHdpdGggdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsKPiArICBA cmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rl ci4KPiArCj4gKyoqLwo+ICtVSU5UMzIKPiArRUZJQVBJCj4gK1BjaVNlZ21lbnRBbmQzMiAoCj4g KyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLAo+ICsgIElOIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgQW5kRGF0YQo+ICsgICkKPiArewo+ICsgIHJldHVybiBQY2lTZWdt ZW50V3JpdGUzMiAoQWRkcmVzcywgUGNpU2VnbWVudFJlYWQzMiAoQWRkcmVzcykgJiBBbmREYXRh KTsKPiArfQo+ICsKPiArLyoqCj4gKyAgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiBhIDMyLWJp dCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciB3aXRoIGEgMzItYml0IHZhbHVlLAo+ICsgIGZv bGxvd2VkIGEgIGJpdHdpc2UgT1Igd2l0aCBhbm90aGVyIDMyLWJpdCB2YWx1ZS4KPiArCj4gKyAg UmVhZHMgdGhlIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkg QWRkcmVzcywKPiArICBwZXJmb3JtcyBhIGJpdHdpc2UgQU5EIGJldHdlZW4gdGhlIHJlYWQgcmVz dWx0IGFuZCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IEFuZERhdGEsCj4gKyAgcGVyZm9ybXMgYSBi aXR3aXNlIE9SIGJldHdlZW4gdGhlIHJlc3VsdCBvZiB0aGUgQU5EIG9wZXJhdGlvbiBhbmQgdGhl IHZhbHVlIHNwZWNpZmllZCBieSBPckRhdGEsCj4gKyAgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRv IHRoZSAzMi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJl c3MuCj4gKyAgVGhlIHZhbHVlIHdyaXR0ZW4gdG8gdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lz dGVyIGlzIHJldHVybmVkLgo+ICsgIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCBh bGwgUENJIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuCj4gKwo+ICsg IElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFkZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4K PiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5LCB0aGVu IEFTU0VSVCgpLgo+ICsKPiArICBAcGFyYW1baW5dICBBZGRyZXNzICAgVGhlIGFkZHJlc3MgdGhh dCBlbmNvZGVzIHRoZSBQQ0kgU2VnbWVudCwgQnVzLCBEZXZpY2UsIEZ1bmN0aW9uLAo+ICsgICAg ICAgICAgICAgICAgICAgIGFuZCBSZWdpc3Rlci4KPiArICBAcGFyYW1baW5dICBBbmREYXRhICAg VGhlIHZhbHVlIHRvIEFORCB3aXRoIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiAr ICBAcGFyYW1baW5dICBPckRhdGEgICAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIFBDSSBjb25m aWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsKPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIHRv IHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4gKyoqLwo+ICtVSU5UMzIKPiAr RUZJQVBJCj4gK1BjaVNlZ21lbnRBbmRUaGVuT3IzMiAoCj4gKyAgSU4gVUlOVDY0ICAgICAgICAg ICAgICAgICAgICBBZGRyZXNzLAo+ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgQW5k RGF0YSwKPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgIE9yRGF0YQo+ICsgICkKPiAr ewo+ICsgIHJldHVybiBQY2lTZWdtZW50V3JpdGUzMiAoQWRkcmVzcywgKFBjaVNlZ21lbnRSZWFk MzIgKEFkZHJlc3MpICYgQW5kRGF0YSkgfCBPckRhdGEpOwo+ICt9Cj4gKwo+ICsvKioKPiArICBS ZWFkcyBhIGJpdCBmaWVsZCBvZiBhIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsKPiAr ICBSZWFkcyB0aGUgYml0IGZpZWxkIGluIGEgMzItYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lz dGVyLiBUaGUgYml0IGZpZWxkIGlzCj4gKyAgc3BlY2lmaWVkIGJ5IHRoZSBTdGFydEJpdCBhbmQg dGhlIEVuZEJpdC4gVGhlIHZhbHVlIG9mIHRoZSBiaXQgZmllbGQgaXMgcmV0dXJuZWQuCj4gKwo+ ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFkZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQo KS4KPiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5LCB0 aGVuIEFTU0VSVCgpLgo+ICsgIElmIFN0YXJ0Qml0IGlzIGdyZWF0ZXIgdGhhbiAzMSwgdGhlbiBB U1NFUlQoKS4KPiArICBJZiBFbmRCaXQgaXMgZ3JlYXRlciB0aGFuIDMxLCB0aGVuIEFTU0VSVCgp Lgo+ICsgIElmIEVuZEJpdCBpcyBsZXNzIHRoYW4gU3RhcnRCaXQsIHRoZW4gQVNTRVJUKCkuCj4g Kwo+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICBUaGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0 ZXIgdG8gcmVhZC4KPiArICBAcGFyYW1baW5dICBTdGFydEJpdCAgVGhlIG9yZGluYWwgb2YgdGhl IGxlYXN0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLgo+ICsgICAgICAgICAgICAg ICAgICAgIFJhbmdlIDAuLjMxLgo+ICsgIEBwYXJhbVtpbl0gIEVuZEJpdCAgICBUaGUgb3JkaW5h bCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4KPiArICAgICAg ICAgICAgICAgICAgICBSYW5nZSAwLi4zMS4KPiArCj4gKyAgQHJldHVybiBUaGUgdmFsdWUgb2Yg dGhlIGJpdCBmaWVsZCByZWFkIGZyb20gdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ ICsKPiArKiovCj4gK1VJTlQzMgo+ICtFRklBUEkKPiArUGNpU2VnbWVudEJpdEZpZWxkUmVhZDMy ICgKPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsCj4gKyAgSU4gVUlO VE4gICAgICAgICAgICAgICAgICAgICBTdGFydEJpdCwKPiArICBJTiBVSU5UTiAgICAgICAgICAg ICAgICAgICAgIEVuZEJpdAo+ICsgICkKPiArewo+ICsgIHJldHVybiBCaXRGaWVsZFJlYWQzMiAo UGNpU2VnbWVudFJlYWQzMiAoQWRkcmVzcyksIFN0YXJ0Qml0LCBFbmRCaXQpOwo+ICt9Cj4gKwo+ ICsvKioKPiArICBXcml0ZXMgYSBiaXQgZmllbGQgdG8gYSBQQ0kgY29uZmlndXJhdGlvbiByZWdp c3Rlci4KPiArCj4gKyAgV3JpdGVzIFZhbHVlIHRvIHRoZSBiaXQgZmllbGQgb2YgdGhlIFBDSSBj b25maWd1cmF0aW9uIHJlZ2lzdGVyLiBUaGUgYml0Cj4gKyAgZmllbGQgaXMgc3BlY2lmaWVkIGJ5 IHRoZSBTdGFydEJpdCBhbmQgdGhlIEVuZEJpdC4gQWxsIG90aGVyIGJpdHMgaW4gdGhlCj4gKyAg ZGVzdGluYXRpb24gUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYXJlIHByZXNlcnZlZC4gVGhl IG5ldyB2YWx1ZSBvZiB0aGUKPiArICAzMi1iaXQgcmVnaXN0ZXIgaXMgcmV0dXJuZWQuCj4gKwo+ ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFkZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQo KS4KPiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5LCB0 aGVuIEFTU0VSVCgpLgo+ICsgIElmIFN0YXJ0Qml0IGlzIGdyZWF0ZXIgdGhhbiAzMSwgdGhlbiBB U1NFUlQoKS4KPiArICBJZiBFbmRCaXQgaXMgZ3JlYXRlciB0aGFuIDMxLCB0aGVuIEFTU0VSVCgp Lgo+ICsgIElmIEVuZEJpdCBpcyBsZXNzIHRoYW4gU3RhcnRCaXQsIHRoZW4gQVNTRVJUKCkuCj4g KyAgSWYgVmFsdWUgaXMgbGFyZ2VyIHRoYW4gdGhlIGJpdG1hc2sgdmFsdWUgcmFuZ2Ugc3BlY2lm aWVkIGJ5IFN0YXJ0Qml0IGFuZCBFbmRCaXQsIHRoZW4gQVNTRVJUKCkuCj4gKwo+ICsgIEBwYXJh bVtpbl0gIEFkZHJlc3MgICBUaGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdG8gd3JpdGUu Cj4gKyAgQHBhcmFtW2luXSAgU3RhcnRCaXQgIFRoZSBvcmRpbmFsIG9mIHRoZSBsZWFzdCBzaWdu aWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4KPiArICAgICAgICAgICAgICAgICAgICBSYW5n ZSAwLi4zMS4KPiArICBAcGFyYW1baW5dICBFbmRCaXQgICAgVGhlIG9yZGluYWwgb2YgdGhlIG1v c3Qgc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQuCj4gKyAgICAgICAgICAgICAgICAg ICAgUmFuZ2UgMC4uMzEuCj4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgIFRoZSBuZXcgdmFsdWUg b2YgdGhlIGJpdCBmaWVsZC4KPiArCj4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNr IHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4gKyoqLwo+ICtVSU5UMzIK PiArRUZJQVBJCj4gK1BjaVNlZ21lbnRCaXRGaWVsZFdyaXRlMzIgKAo+ICsgIElOIFVJTlQ2NCAg ICAgICAgICAgICAgICAgICAgQWRkcmVzcywKPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAg ICAgIFN0YXJ0Qml0LAo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgRW5kQml0LAo+ ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgVmFsdWUKPiArICApCj4gK3sKPiArICBy ZXR1cm4gUGNpU2VnbWVudFdyaXRlMzIgKAo+ICsgICAgICAgICAgIEFkZHJlc3MsCj4gKyAgICAg ICAgICAgQml0RmllbGRXcml0ZTMyIChQY2lTZWdtZW50UmVhZDMyIChBZGRyZXNzKSwgU3RhcnRC aXQsIEVuZEJpdCwgVmFsdWUpCj4gKyAgICAgICAgICAgKTsKPiArfQo+ICsKPiArLyoqCj4gKyAg UmVhZHMgYSBiaXQgZmllbGQgaW4gYSAzMi1iaXQgUENJIGNvbmZpZ3VyYXRpb24sIHBlcmZvcm1z IGEgYml0d2lzZSBPUiwgYW5kCj4gKyAgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byB0aGUgYml0 IGZpZWxkIGluIHRoZSAzMi1iaXQgcG9ydC4KPiArCj4gKyAgUmVhZHMgdGhlIDMyLWJpdCBQQ0kg Y29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcywgcGVyZm9ybXMgYQo+ ICsgIGJpdHdpc2UgT1IgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1ZSBzcGVj aWZpZWQgYnkKPiArICBPckRhdGEsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgMzItYml0 IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyCj4gKyAgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuIFRo ZSB2YWx1ZSB3cml0dGVuIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBpcwo+ICsg IHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFBDSSByZWFk IGFuZCB3cml0ZSBvcGVyYXRpb25zCj4gKyAgYXJlIHNlcmlhbGl6ZWQuIEV4dHJhIGxlZnQgYml0 cyBpbiBPckRhdGEgYXJlIHN0cmlwcGVkLgo+ICsKPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0cyBp biBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgU3RhcnRCaXQgaXMgZ3Jl YXRlciB0aGFuIDMxLCB0aGVuIEFTU0VSVCgpLgo+ICsgIElmIEVuZEJpdCBpcyBncmVhdGVyIHRo YW4gMzEsIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgRW5kQml0IGlzIGxlc3MgdGhhbiBTdGFydEJp dCwgdGhlbiBBU1NFUlQoKS4KPiArICBJZiBPckRhdGEgaXMgbGFyZ2VyIHRoYW4gdGhlIGJpdG1h c2sgdmFsdWUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IFN0YXJ0Qml0IGFuZCBFbmRCaXQsIHRoZW4gQVNT RVJUKCkuCj4gKwo+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICBUaGUgUENJIGNvbmZpZ3VyYXRp b24gcmVnaXN0ZXIgdG8gd3JpdGUuCj4gKyAgQHBhcmFtW2luXSAgU3RhcnRCaXQgIFRoZSBvcmRp bmFsIG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4KPiArICAg ICAgICAgICAgICAgICAgICBSYW5nZSAwLi4zMS4KPiArICBAcGFyYW1baW5dICBFbmRCaXQgICAg VGhlIG9yZGluYWwgb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQu Cj4gKyAgICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uMzEuCj4gKyAgQHBhcmFtW2luXSAgT3JE YXRhICAgIFRoZSB2YWx1ZSB0byBPUiB3aXRoIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rl ci4KPiArCj4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kgY29u ZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4gKyoqLwo+ICtVSU5UMzIKPiArRUZJQVBJCj4gK1Bj aVNlZ21lbnRCaXRGaWVsZE9yMzIgKAo+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAg QWRkcmVzcywKPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFN0YXJ0Qml0LAo+ICsg IElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgRW5kQml0LAo+ICsgIElOIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgT3JEYXRhCj4gKyAgKQo+ICt7Cj4gKyAgcmV0dXJuIFBjaVNlZ21lbnRX cml0ZTMyICgKPiArICAgICAgICAgICBBZGRyZXNzLAo+ICsgICAgICAgICAgIEJpdEZpZWxkT3Iz MiAoUGNpU2VnbWVudFJlYWQzMiAoQWRkcmVzcyksIFN0YXJ0Qml0LCBFbmRCaXQsIE9yRGF0YSkK PiArICAgICAgICAgICApOwo+ICt9Cj4gKwo+ICsvKioKPiArICBSZWFkcyBhIGJpdCBmaWVsZCBp biBhIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciwgcGVyZm9ybXMgYSBiaXR3aXNl Cj4gKyAgQU5ELCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byB0aGUgYml0IGZpZWxkIGlu IHRoZSAzMi1iaXQgcmVnaXN0ZXIuCj4gKwo+ICsKPiArICBSZWFkcyB0aGUgMzItYml0IFBDSSBj b25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLCBwZXJmb3JtcyBhIGJp dHdpc2UKPiArICBBTkQgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1ZSBzcGVj aWZpZWQgYnkgQW5kRGF0YSwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0Cj4gKyAgdG8gdGhlIDMyLWJp dCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4gVGhlIHZh bHVlIHdyaXR0ZW4gdG8KPiArICB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaXMgcmV0 dXJuZWQuICBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFBDSQo+ICsgIHJl YWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuICBFeHRyYSBsZWZ0IGJpdHMg aW4gQW5kRGF0YSBhcmUgc3RyaXBwZWQuCj4gKyAgSWYgYW55IHJlc2VydmVkIGJpdHMgaW4gQWRk cmVzcyBhcmUgc2V0LCB0aGVuIEFTU0VSVCgpLgo+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWdu ZWQgb24gYSAzMi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgU3RhcnRCaXQg aXMgZ3JlYXRlciB0aGFuIDMxLCB0aGVuIEFTU0VSVCgpLgo+ICsgIElmIEVuZEJpdCBpcyBncmVh dGVyIHRoYW4gMzEsIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgRW5kQml0IGlzIGxlc3MgdGhhbiBT dGFydEJpdCwgdGhlbiBBU1NFUlQoKS4KPiArICBJZiBBbmREYXRhIGlzIGxhcmdlciB0aGFuIHRo ZSBiaXRtYXNrIHZhbHVlIHJhbmdlIHNwZWNpZmllZCBieSBTdGFydEJpdCBhbmQgRW5kQml0LCB0 aGVuIEFTU0VSVCgpLgo+ICsKPiArICBAcGFyYW1baW5dICBBZGRyZXNzICAgVGhlIFBDSSBjb25m aWd1cmF0aW9uIHJlZ2lzdGVyIHRvIHdyaXRlLgo+ICsgIEBwYXJhbVtpbl0gIFN0YXJ0Qml0ICBU aGUgb3JkaW5hbCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQu Cj4gKyAgICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uMzEuCj4gKyAgQHBhcmFtW2luXSAgRW5k Qml0ICAgIFRoZSBvcmRpbmFsIG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0 IGZpZWxkLgo+ICsgICAgICAgICAgICAgICAgICAgIFJhbmdlIDAuLjMxLgo+ICsgIEBwYXJhbVtp bl0gIEFuZERhdGEgICBUaGUgdmFsdWUgdG8gQU5EIHdpdGggdGhlIFBDSSBjb25maWd1cmF0aW9u IHJlZ2lzdGVyLgo+ICsKPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhl IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ICsKPiArKiovCj4gK1VJTlQzMgo+ICtFRklB UEkKPiArUGNpU2VnbWVudEJpdEZpZWxkQW5kMzIgKAo+ICsgIElOIFVJTlQ2NCAgICAgICAgICAg ICAgICAgICAgQWRkcmVzcywKPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFN0YXJ0 Qml0LAo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgRW5kQml0LAo+ICsgIElOIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgQW5kRGF0YQo+ICsgICkKPiArewo+ICsgIHJldHVybiBQ Y2lTZWdtZW50V3JpdGUzMiAoCj4gKyAgICAgICAgICAgQWRkcmVzcywKPiArICAgICAgICAgICBC aXRGaWVsZEFuZDMyIChQY2lTZWdtZW50UmVhZDMyIChBZGRyZXNzKSwgU3RhcnRCaXQsIEVuZEJp dCwgQW5kRGF0YSkKPiArICAgICAgICAgICApOwo+ICt9Cj4gKwo+ICsvKioKPiArICBSZWFkcyBh IGJpdCBmaWVsZCBpbiBhIDMyLWJpdCBwb3J0LCBwZXJmb3JtcyBhIGJpdHdpc2UgQU5EIGZvbGxv d2VkIGJ5IGEKPiArICBiaXR3aXNlIE9SLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byB0 aGUgYml0IGZpZWxkIGluIHRoZQo+ICsgIDMyLWJpdCBwb3J0Lgo+ICsKPiArICBSZWFkcyB0aGUg MzItYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLCBw ZXJmb3JtcyBhCj4gKyAgYml0d2lzZSBBTkQgZm9sbG93ZWQgYnkgYSBiaXR3aXNlIE9SIGJldHdl ZW4gdGhlIHJlYWQgcmVzdWx0IGFuZAo+ICsgIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgQW5kRGF0 YSwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSAzMi1iaXQgUENJCj4gKyAgY29uZmlndXJh dGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4gVGhlIHZhbHVlIHdyaXR0ZW4gdG8g dGhlIFBDSQo+ICsgIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaXMgcmV0dXJuZWQuIFRoaXMgZnVu Y3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgUENJCj4gKyAgcmVhZCBhbmQgd3JpdGUgb3Bl cmF0aW9ucyBhcmUgc2VyaWFsaXplZC4gRXh0cmEgbGVmdCBiaXRzIGluIGJvdGggQW5kRGF0YSBh bmQKPiArICBPckRhdGEgYXJlIHN0cmlwcGVkLgo+ICsKPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0 cyBpbiBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgU3RhcnRCaXQgaXMg Z3JlYXRlciB0aGFuIDMxLCB0aGVuIEFTU0VSVCgpLgo+ICsgIElmIEVuZEJpdCBpcyBncmVhdGVy IHRoYW4gMzEsIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgRW5kQml0IGlzIGxlc3MgdGhhbiBTdGFy dEJpdCwgdGhlbiBBU1NFUlQoKS4KPiArICBJZiBBbmREYXRhIGlzIGxhcmdlciB0aGFuIHRoZSBi aXRtYXNrIHZhbHVlIHJhbmdlIHNwZWNpZmllZCBieSBTdGFydEJpdCBhbmQgRW5kQml0LCB0aGVu IEFTU0VSVCgpLgo+ICsgIElmIE9yRGF0YSBpcyBsYXJnZXIgdGhhbiB0aGUgYml0bWFzayB2YWx1 ZSByYW5nZSBzcGVjaWZpZWQgYnkgU3RhcnRCaXQgYW5kIEVuZEJpdCwgdGhlbiBBU1NFUlQoKS4K PiArCj4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgIFRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdp c3RlciB0byB3cml0ZS4KPiArICBAcGFyYW1baW5dICBTdGFydEJpdCAgVGhlIG9yZGluYWwgb2Yg dGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLgo+ICsgICAgICAgICAg ICAgICAgICAgIFJhbmdlIDAuLjMxLgo+ICsgIEBwYXJhbVtpbl0gIEVuZEJpdCAgICBUaGUgb3Jk aW5hbCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4KPiArICAg ICAgICAgICAgICAgICAgICBSYW5nZSAwLi4zMS4KPiArICBAcGFyYW1baW5dICBBbmREYXRhICAg VGhlIHZhbHVlIHRvIEFORCB3aXRoIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiAr ICBAcGFyYW1baW5dICBPckRhdGEgICAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIHJlc3VsdCBv ZiB0aGUgQU5EIG9wZXJhdGlvbi4KPiArCj4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBi YWNrIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiArCj4gKyoqLwo+ICtVSU5U MzIKPiArRUZJQVBJCj4gK1BjaVNlZ21lbnRCaXRGaWVsZEFuZFRoZW5PcjMyICgKPiArICBJTiBV SU5UNjQgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsCj4gKyAgSU4gVUlOVE4gICAgICAgICAg ICAgICAgICAgICBTdGFydEJpdCwKPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEVu ZEJpdCwKPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEFuZERhdGEsCj4gKyAgSU4g VUlOVDMyICAgICAgICAgICAgICAgICAgICBPckRhdGEKPiArICApCj4gK3sKPiArICByZXR1cm4g UGNpU2VnbWVudFdyaXRlMzIgKAo+ICsgICAgICAgICAgIEFkZHJlc3MsCj4gKyAgICAgICAgICAg Qml0RmllbGRBbmRUaGVuT3IzMiAoUGNpU2VnbWVudFJlYWQzMiAoQWRkcmVzcyksIFN0YXJ0Qml0 LCBFbmRCaXQsIEFuZERhdGEsIE9yRGF0YSkKPiArICAgICAgICAgICApOwo+ICt9Cj4gKwo+ICsv KioKPiArICBSZWFkcyBhIHJhbmdlIG9mIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBpbnRv IGEgY2FsbGVyIHN1cHBsaWVkIGJ1ZmZlci4KPiArCj4gKyAgUmVhZHMgdGhlIHJhbmdlIG9mIFBD SSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBzcGVjaWZpZWQgYnkgU3RhcnRBZGRyZXNzIGFuZAo+ ICsgIFNpemUgaW50byB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBCdWZmZXIuIFRoaXMgZnVuY3Rp b24gb25seSBhbGxvd3MgdGhlIFBDSQo+ICsgIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIGZyb20g YSBzaW5nbGUgUENJIGZ1bmN0aW9uIHRvIGJlIHJlYWQuIFNpemUgaXMKPiArICByZXR1cm5lZC4g V2hlbiBwb3NzaWJsZSAzMi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVhZCBjeWNsZXMgYXJlIHVz ZWQgdG8gcmVhZAo+ICsgIGZyb20gU3RhcnRBZHJlc3MgdG8gU3RhcnRBZGRyZXNzICsgU2l6ZS4g RHVlIHRvIGFsaWdubWVudCByZXN0cmljdGlvbnMsIDgtYml0Cj4gKyAgYW5kIDE2LWJpdCBQQ0kg Y29uZmlndXJhdGlvbiByZWFkIGN5Y2xlcyBtYXkgYmUgdXNlZCBhdCB0aGUgYmVnaW5uaW5nIGFu ZCB0aGUKPiArICBlbmQgb2YgdGhlIHJhbmdlLgo+ICsKPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0 cyBpbiBTdGFydEFkZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4KPiArICBJZiAoKFN0YXJ0 QWRkcmVzcyAmIDB4RkZGKSArIFNpemUpID4gMHgxMDAwLCB0aGVuIEFTU0VSVCgpLgo+ICsgIElm IFNpemUgPiAwIGFuZCBCdWZmZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4KPiArCj4gKyAgQHBh cmFtW2luXSAgU3RhcnRBZGRyZXNzICBUaGUgc3RhcnRpbmcgYWRkcmVzcyB0aGF0IGVuY29kZXMg dGhlIFBDSSBTZWdtZW50LCBCdXMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIERldmljZSwg RnVuY3Rpb24gYW5kIFJlZ2lzdGVyLgo+ICsgIEBwYXJhbVtpbl0gIFNpemUgICAgICAgICAgVGhl IHNpemUgaW4gYnl0ZXMgb2YgdGhlIHRyYW5zZmVyLgo+ICsgIEBwYXJhbVtpbl0gIEJ1ZmZlciAg ICAgICAgVGhlIHBvaW50ZXIgdG8gYSBidWZmZXIgcmVjZWl2aW5nIHRoZSBkYXRhIHJlYWQuCj4g Kwo+ICsgIEByZXR1cm4gU2l6ZQo+ICsKPiArKiovCj4gK1VJTlROCj4gK0VGSUFQSQo+ICtQY2lT ZWdtZW50UmVhZEJ1ZmZlciAoCj4gKyAgSU4gIFVJTlQ2NCAgICAgICAgICAgICAgICAgICBTdGFy dEFkZHJlc3MsCj4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICBTaXplLAo+ICsgIE9V VCBWT0lEICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlcgo+ICsgICkKPiArewo+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5WYWx1ZTsKPiArCj4gKyAgQVNTRVJU X0lOVkFMSURfUENJX1NFR01FTlRfQUREUkVTUyAoU3RhcnRBZGRyZXNzLCAwKTsKPiArICBBU1NF UlQgKCgoU3RhcnRBZGRyZXNzICYgMHhGRkYpICsgU2l6ZSkgPD0gMHgxMDAwKTsKPiArCj4gKyAg aWYgKFNpemUgPT0gMCkgewo+ICsgICAgcmV0dXJuIFNpemU7Cj4gKyAgfQo+ICsKPiArICBBU1NF UlQgKEJ1ZmZlciAhPSBOVUxMKTsKPiArCj4gKyAgLy8KPiArICAvLyBTYXZlIFNpemUgZm9yIHJl dHVybgo+ICsgIC8vCj4gKyAgUmV0dXJuVmFsdWUgPSBTaXplOwo+ICsKPiArICBpZiAoKFN0YXJ0 QWRkcmVzcyAmIEJJVDApICE9IDApIHsKPiArICAgIC8vCj4gKyAgICAvLyBSZWFkIGEgYnl0ZSBp ZiBTdGFydEFkZHJlc3MgaXMgYnl0ZSBhbGlnbmVkLAo+ICsgICAgLy8KPiArICAgIE1taW9Xcml0 ZTggKChVSU5UTilCdWZmZXIsIFBjaVNlZ21lbnRSZWFkOCAoU3RhcnRBZGRyZXNzKSk7Cj4gKyAg ICBTdGFydEFkZHJlc3MgKz0gc2l6ZW9mIChVSU5UOCk7Cj4gKyAgICBTaXplIC09IHNpemVvZiAo VUlOVDgpOwo+ICsgICAgQnVmZmVyID0gKFVJTlQ4ICopQnVmZmVyICsgMTsKPiArICB9Cj4gKwo+ ICsgIGlmIChTaXplID49IHNpemVvZiAoVUlOVDE2KSAmJiAoU3RhcnRBZGRyZXNzICYgQklUMSkg IT0gMCkgewo+ICsgICAgLy8KPiArICAgIC8vIFJlYWQgYSB3b3JkIGlmIFN0YXJ0QWRkcmVzcyBp cyB3b3JkIGFsaWduZWQKPiArICAgIC8vCj4gKyAgICBXcml0ZVVuYWxpZ25lZDE2IChCdWZmZXIs IFBjaVNlZ21lbnRSZWFkMTYgKFN0YXJ0QWRkcmVzcykpOwo+ICsgICAgU3RhcnRBZGRyZXNzICs9 IHNpemVvZiAoVUlOVDE2KTsKPiArICAgIFNpemUgLT0gc2l6ZW9mIChVSU5UMTYpOwo+ICsgICAg QnVmZmVyID0gKFVJTlQxNiAqKUJ1ZmZlciArIDE7Cj4gKyAgfQo+ICsKPiArICB3aGlsZSAoU2l6 ZSA+PSBzaXplb2YgKFVJTlQzMikpIHsKPiArICAgIC8vCj4gKyAgICAvLyBSZWFkIGFzIG1hbnkg ZG91YmxlIHdvcmRzIGFzIHBvc3NpYmxlCj4gKyAgICAvLwo+ICsgICAgV3JpdGVVbmFsaWduZWQz MiAoQnVmZmVyLCBQY2lTZWdtZW50UmVhZDMyIChTdGFydEFkZHJlc3MpKTsKPiArICAgIFN0YXJ0 QWRkcmVzcyArPSBzaXplb2YgKFVJTlQzMik7Cj4gKyAgICBTaXplIC09IHNpemVvZiAoVUlOVDMy KTsKPiArICAgIEJ1ZmZlciA9IChVSU5UMzIgKilCdWZmZXIgKyAxOwo+ICsgIH0KPiArCj4gKyAg aWYgKFNpemUgPj0gc2l6ZW9mIChVSU5UMTYpKSB7Cj4gKyAgICAvLwo+ICsgICAgLy8gUmVhZCB0 aGUgbGFzdCByZW1haW5pbmcgd29yZCBpZiBleGlzdAo+ICsgICAgLy8KPiArICAgIFdyaXRlVW5h bGlnbmVkMTYgKEJ1ZmZlciwgUGNpU2VnbWVudFJlYWQxNiAoU3RhcnRBZGRyZXNzKSk7Cj4gKyAg ICBTdGFydEFkZHJlc3MgKz0gc2l6ZW9mIChVSU5UMTYpOwo+ICsgICAgU2l6ZSAtPSBzaXplb2Yg KFVJTlQxNik7Cj4gKyAgICBCdWZmZXIgPSAoVUlOVDE2ICopQnVmZmVyICsgMTsKPiArICB9Cj4g Kwo+ICsgIGlmIChTaXplID49IHNpemVvZiAoVUlOVDgpKSB7Cj4gKyAgICAvLwo+ICsgICAgLy8g UmVhZCB0aGUgbGFzdCByZW1haW5pbmcgYnl0ZSBpZiBleGlzdAo+ICsgICAgLy8KPiArICAgIE1t aW9Xcml0ZTggKChVSU5UTilCdWZmZXIsIFBjaVNlZ21lbnRSZWFkOCAoU3RhcnRBZGRyZXNzKSk7 Cj4gKyAgfQo+ICsKPiArICByZXR1cm4gUmV0dXJuVmFsdWU7Cj4gK30KPiArCj4gKwo+ICsvKioK PiArICBDb3BpZXMgdGhlIGRhdGEgaW4gYSBjYWxsZXIgc3VwcGxpZWQgYnVmZmVyIHRvIGEgc3Bl Y2lmaWVkIHJhbmdlIG9mIFBDSQo+ICsgIGNvbmZpZ3VyYXRpb24gc3BhY2UuCj4gKwo+ICsgIFdy aXRlcyB0aGUgcmFuZ2Ugb2YgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIHNwZWNpZmllZCBi eSBTdGFydEFkZHJlc3MgYW5kCj4gKyAgU2l6ZSBmcm9tIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5 IEJ1ZmZlci4gVGhpcyBmdW5jdGlvbiBvbmx5IGFsbG93cyB0aGUgUENJCj4gKyAgY29uZmlndXJh dGlvbiByZWdpc3RlcnMgZnJvbSBhIHNpbmdsZSBQQ0kgZnVuY3Rpb24gdG8gYmUgd3JpdHRlbi4g U2l6ZSBpcwo+ICsgIHJldHVybmVkLiBXaGVuIHBvc3NpYmxlIDMyLWJpdCBQQ0kgY29uZmlndXJh dGlvbiB3cml0ZSBjeWNsZXMgYXJlIHVzZWQgdG8KPiArICB3cml0ZSBmcm9tIFN0YXJ0QWRyZXNz IHRvIFN0YXJ0QWRkcmVzcyArIFNpemUuIER1ZSB0byBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zLAo+ ICsgIDgtYml0IGFuZCAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gd3JpdGUgY3ljbGVzIG1heSBi ZSB1c2VkIGF0IHRoZSBiZWdpbm5pbmcKPiArICBhbmQgdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCj4g Kwo+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIFN0YXJ0QWRkcmVzcyBhcmUgc2V0LCB0aGVu IEFTU0VSVCgpLgo+ICsgIElmICgoU3RhcnRBZGRyZXNzICYgMHhGRkYpICsgU2l6ZSkgPiAweDEw MDAsIHRoZW4gQVNTRVJUKCkuCj4gKyAgSWYgU2l6ZSA+IDAgYW5kIEJ1ZmZlciBpcyBOVUxMLCB0 aGVuIEFTU0VSVCgpLgo+ICsKPiArICBAcGFyYW1baW5dICBTdGFydEFkZHJlc3MgIFRoZSBzdGFy dGluZyBhZGRyZXNzIHRoYXQgZW5jb2RlcyB0aGUgUENJIFNlZ21lbnQsIEJ1cywKPiArICAgICAg ICAgICAgICAgICAgICAgICAgRGV2aWNlLCBGdW5jdGlvbiBhbmQgUmVnaXN0ZXIuCj4gKyAgQHBh cmFtW2luXSAgU2l6ZSAgICAgICAgICBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgdHJhbnNmZXIu Cj4gKyAgQHBhcmFtW2luXSAgQnVmZmVyICAgICAgICBUaGUgcG9pbnRlciB0byBhIGJ1ZmZlciBj b250YWluaW5nIHRoZSBkYXRhIHRvIHdyaXRlLgo+ICsKPiArICBAcmV0dXJuIFRoZSBwYXJhbWV0 ZXIgb2YgU2l6ZS4KPiArCj4gKyoqLwo+ICtVSU5UTgo+ICtFRklBUEkKPiArUGNpU2VnbWVudFdy aXRlQnVmZmVyICgKPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgIFN0YXJ0QWRkcmVz cywKPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFNpemUsCj4gKyAgSU4gVk9JRCAg ICAgICAgICAgICAgICAgICAgICAqQnVmZmVyCj4gKyAgKQo+ICt7Cj4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJldHVyblZhbHVlOwo+ICsKPiArICBBU1NFUlRfSU5WQUxJ RF9QQ0lfU0VHTUVOVF9BRERSRVNTIChTdGFydEFkZHJlc3MsIDApOwo+ICsgIEFTU0VSVCAoKChT dGFydEFkZHJlc3MgJiAweEZGRikgKyBTaXplKSA8PSAweDEwMDApOwo+ICsKPiArICBpZiAoU2l6 ZSA9PSAwKSB7Cj4gKyAgICByZXR1cm4gMDsKPiArICB9Cj4gKwo+ICsgIEFTU0VSVCAoQnVmZmVy ICE9IE5VTEwpOwo+ICsKPiArICAvLwo+ICsgIC8vIFNhdmUgU2l6ZSBmb3IgcmV0dXJuCj4gKyAg Ly8KPiArICBSZXR1cm5WYWx1ZSA9IFNpemU7Cj4gKwo+ICsgIGlmICgoU3RhcnRBZGRyZXNzICYg QklUMCkgIT0gMCkgewo+ICsgICAgLy8KPiArICAgIC8vIFdyaXRlIGEgYnl0ZSBpZiBTdGFydEFk ZHJlc3MgaXMgYnl0ZSBhbGlnbmVkCj4gKyAgICAvLwo+ICsgICAgUGNpU2VnbWVudFdyaXRlOCAo U3RhcnRBZGRyZXNzLCAqKFVJTlQ4ICopQnVmZmVyKTsKPiArICAgIFN0YXJ0QWRkcmVzcyArPSBz aXplb2YgKFVJTlQ4KTsKPiArICAgIFNpemUgLT0gc2l6ZW9mIChVSU5UOCk7Cj4gKyAgICBCdWZm ZXIgPSAoVUlOVDggKilCdWZmZXIgKyAxOwo+ICsgIH0KPiArCj4gKyAgaWYgKFNpemUgPj0gc2l6 ZW9mIChVSU5UMTYpICYmIChTdGFydEFkZHJlc3MgJiBCSVQxKSAhPSAwKSB7Cj4gKyAgICAvLwo+ ICsgICAgLy8gV3JpdGUgYSB3b3JkIGlmIFN0YXJ0QWRkcmVzcyBpcyB3b3JkIGFsaWduZWQKPiAr ICAgIC8vCj4gKyAgICBQY2lTZWdtZW50V3JpdGUxNiAoU3RhcnRBZGRyZXNzLCBSZWFkVW5hbGln bmVkMTYgKEJ1ZmZlcikpOwo+ICsgICAgU3RhcnRBZGRyZXNzICs9IHNpemVvZiAoVUlOVDE2KTsK PiArICAgIFNpemUgLT0gc2l6ZW9mIChVSU5UMTYpOwo+ICsgICAgQnVmZmVyID0gKFVJTlQxNiAq KUJ1ZmZlciArIDE7Cj4gKyAgfQo+ICsKPiArICB3aGlsZSAoU2l6ZSA+PSBzaXplb2YgKFVJTlQz MikpIHsKPiArICAgIC8vCj4gKyAgICAvLyBXcml0ZSBhcyBtYW55IGRvdWJsZSB3b3JkcyBhcyBw b3NzaWJsZQo+ICsgICAgLy8KPiArICAgIFBjaVNlZ21lbnRXcml0ZTMyIChTdGFydEFkZHJlc3Ms IFJlYWRVbmFsaWduZWQzMiAoQnVmZmVyKSk7Cj4gKyAgICBTdGFydEFkZHJlc3MgKz0gc2l6ZW9m IChVSU5UMzIpOwo+ICsgICAgU2l6ZSAtPSBzaXplb2YgKFVJTlQzMik7Cj4gKyAgICBCdWZmZXIg PSAoVUlOVDMyICopQnVmZmVyICsgMTsKPiArICB9Cj4gKwo+ICsgIGlmIChTaXplID49IHNpemVv ZiAoVUlOVDE2KSkgewo+ICsgICAgLy8KPiArICAgIC8vIFdyaXRlIHRoZSBsYXN0IHJlbWFpbmlu ZyB3b3JkIGlmIGV4aXN0Cj4gKyAgICAvLwo+ICsgICAgUGNpU2VnbWVudFdyaXRlMTYgKFN0YXJ0 QWRkcmVzcywgUmVhZFVuYWxpZ25lZDE2IChCdWZmZXIpKTsKPiArICAgIFN0YXJ0QWRkcmVzcyAr PSBzaXplb2YgKFVJTlQxNik7Cj4gKyAgICBTaXplIC09IHNpemVvZiAoVUlOVDE2KTsKPiArICAg IEJ1ZmZlciA9IChVSU5UMTYgKilCdWZmZXIgKyAxOwo+ICsgIH0KPiArCj4gKyAgaWYgKFNpemUg Pj0gc2l6ZW9mIChVSU5UOCkpIHsKPiArICAgIC8vCj4gKyAgICAvLyBXcml0ZSB0aGUgbGFzdCBy ZW1haW5pbmcgYnl0ZSBpZiBleGlzdAo+ICsgICAgLy8KPiArICAgIFBjaVNlZ21lbnRXcml0ZTgg KFN0YXJ0QWRkcmVzcywgKihVSU5UOCAqKUJ1ZmZlcik7Cj4gKyAgfQo+ICsKPiArICByZXR1cm4g UmV0dXJuVmFsdWU7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvU2lsaWNvbi9Cb3NjL05hbkh1UGtnL0xp YnJhcnkvUGNpU2VnbWVudExpYi9QY2lTZWdtZW50TGliLmluZiBiL1NpbGljb24vQm9zYy9OYW5I dVBrZy9MaWJyYXJ5L1BjaVNlZ21lbnRMaWIvUGNpU2VnbWVudExpYi5pbmYKPiBuZXcgZmlsZSBt b2RlIDEwMDc1NQo+IGluZGV4IDAwMDAwMDAwMDAuLjI5ZDE3NTg0MTAKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvU2lsaWNvbi9Cb3NjL05hbkh1UGtnL0xpYnJhcnkvUGNpU2VnbWVudExpYi9QY2lT ZWdtZW50TGliLmluZgo+IEBAIC0wLDAgKzEsMjkgQEAKPiArIy8qKiBAZmlsZQo+ICsjICBQQ0kg U2VnbWVudCBMaWJyYXJ5IGZvciBCb3NjIE5hbkh1RGV2IHBsYXRmb3JtIHdpdGggWGlsaW54IFhE TUEgUkNzLgo+ICsjCj4gKyMgIENvcHlyaWdodCAoQykgMjAyMCwgUGh5dGl1bSBUZWNobm9sb2d5 IENvLCBMdGQuIEFsbCByaWdodHMgcmVzZXIKPiArIyAgQ29weXJpZ2h0IChjKSAyMDI0LCBCb3Nj LiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj52ZWQuPEJSPgo+ICsjCj4gKyMgIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50Cj4gKyMKPiArIyoqLwo+ICsKPiArW0Rl ZmluZXNdCj4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAxYgo+ ICsgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IFBjaVNlZ21lbnRMaWIKPiArICBG SUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSBCMERENTNENS0zMEM2LTQ4Q0ItODQ5RC1C RUI5MzVCNTdENzgKPiArICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBCQVNFCj4g KyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wCj4gKyAgTElCUkFSWV9DTEFT UyAgICAgICAgICAgICAgICAgID0gUGNpU2VnbWVudExpYgo+ICsKPiArW1NvdXJjZXNdCj4gKyAg UGNpU2VnbWVudExpYi5jCj4gKwo+ICtbUGFja2FnZXNdCj4gKyAgTWRlUGtnL01kZVBrZy5kZWMK PiArICBTaWxpY29uL0Jvc2MvTmFuSHVQa2cvTmFuSHVEZXZQa2cuZGVjCj4gKwo+ICtbTGlicmFy eUNsYXNzZXNdCj4gKyAgQmFzZUxpYgo+ICsgIERlYnVnTGliCj4gKyAgSW9MaWIKPiBkaWZmIC0t Z2l0IGEvU2lsaWNvbi9Cb3NjL05hbkh1UGtnL05hbkh1RGV2UGtnLmRlYyBiL1NpbGljb24vQm9z Yy9OYW5IdVBrZy9OYW5IdURldlBrZy5kZWMKPiBpbmRleCBlOTc1YWU0MmQwLi45ZjU1M2E1YjBh IDEwMDY0NAo+IC0tLSBhL1NpbGljb24vQm9zYy9OYW5IdVBrZy9OYW5IdURldlBrZy5kZWMKPiAr KysgYi9TaWxpY29uL0Jvc2MvTmFuSHVQa2cvTmFuSHVEZXZQa2cuZGVjCj4gQEAgLTIwLDYgKzIw LDcgQEAKPiAgW1Byb3RvY29sc10KPiAgCj4gIFtHdWlkc10KPiArICBnQm9zY05hbkh1RGRldlBs YXRmb3JtUGtnVG9rZW5TcGFjZUd1aWQgID0geyAweDI0NUM1QzgwLCAweDc5NDUsIDB4NDNCRSwg eyAweEI0LCAweDAxLCAweEM5LCAweDkyLCAweDhBLCAweDEzLCAweERELCAweDBBIH19Cj4gIAo+ ICBbUGNkc0ZpeGVkQXRCdWlsZF0KPiAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQu UGNkU2VyaWFsUmVnaXN0ZXJCYXNlfDB4MHxVSU5UNjR8MHgwMDAwMTAwNAo+IEBAIC0yNyw1ICsy OCwyNCBAQAo+ICAgIGdIaXNpVG9rZW5TcGFjZUd1aWQuUGNkU2VyaWFsUG9ydFNlbmREZWxheXww eDB8VUlOVDMyfDB4MDAwMDEwMDYKPiAgICBnSGlzaVRva2VuU3BhY2VHdWlkLlBjZFVhcnRDbGtJ bkh6fDB4MHxVSU5UMzJ8MHgwMDAwMTAwNwo+ICAKPiArICAjCj4gKyAgIyBQQ0kgY29uZmlndXJh dGlvbiBhZGRyZXNzIHNwYWNlCj4gKyAgIwo+ICsgIGdCb3NjTmFuSHVEZGV2UGxhdGZvcm1Qa2dU b2tlblNwYWNlR3VpZC5QY2RQY2lDb25maWdCYXNlfDB4MHxVSU5UNjR8MHgwMDAwMDAwOAo+ICsg IGdCb3NjTmFuSHVEZGV2UGxhdGZvcm1Qa2dUb2tlblNwYWNlR3VpZC5QY2RQY2lDb25maWdTaXpl fDB4MHxVSU5UNjR8MHgwMDAwMDAwOQo+ICsKPiArICBnQm9zY05hbkh1RGRldlBsYXRmb3JtUGtn VG9rZW5TcGFjZUd1aWQuUGNkUGNpSW9CYXNlfDB4MHxVSU5UNjR8MHgwMDAwMDAwYQo+ICsgIGdC b3NjTmFuSHVEZGV2UGxhdGZvcm1Qa2dUb2tlblNwYWNlR3VpZC5QY2RQY2lJb1NpemV8MHgwfFVJ TlQ2NHwweDAwMDAwMDBiCj4gKyAgZ0Jvc2NOYW5IdURkZXZQbGF0Zm9ybVBrZ1Rva2VuU3BhY2VH dWlkLlBjZFBjaU1taW8zMkJhc2V8MHgwfFVJTlQzMnwweDAwMDAwMDBjCj4gKyAgZ0Jvc2NOYW5I dURkZXZQbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBjaU1taW8zMlNpemV8MHgwfFVJTlQz MnwweDAwMDAwMDBkCj4gKyAgZ0Jvc2NOYW5IdURkZXZQbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlk LlBjZFBjaU1taW82NEJhc2V8MHgwfFVJTlQ2NHwweDAwMDAwMDBlCj4gKyAgZ0Jvc2NOYW5IdURk ZXZQbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBjaU1taW82NFNpemV8MHgwfFVJTlQ2NHww eDAwMDAwMDBmCj4gKwo+ICsgICMKPiArICAjIEluY2x1c2l2ZSByYW5nZSBvZiBhbGxvd2VkIFBD SSBidXNlcy4KPiArICAjCj4gKyAgZ0Jvc2NOYW5IdURkZXZQbGF0Zm9ybVBrZ1Rva2VuU3BhY2VH dWlkLlBjZFBjaUJ1c01pbnwweDB8VUlOVDMyfDB4MDAwMDAwMTAKPiArICBnQm9zY05hbkh1RGRl dlBsYXRmb3JtUGtnVG9rZW5TcGFjZUd1aWQuUGNkUGNpQnVzTWF4fDB4MHxVSU5UMzJ8MHgwMDAw MDAxMQo+ICsKPiAgW1VzZXJFeHRlbnNpb25zLlRpYW5vQ29yZS4iRXh0cmFGaWxlcyJdCj4gICAg TmFuSHVQa2dFeHRyYS51bmkKPiAtLSAKPiAyLjM0LjEKPiAKPiAKPiAKPiAKPiAKDQoKLT0tPS09 LT0tPS09LT0tPS09LT0tPS0KR3JvdXBzLmlvIExpbmtzOiBZb3UgcmVjZWl2ZSBhbGwgbWVzc2Fn ZXMgc2VudCB0byB0aGlzIGdyb3VwLgpWaWV3L1JlcGx5IE9ubGluZSAoIzExODkxMik6IGh0dHBz Oi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC9tZXNzYWdlLzExODkxMgpNdXRlIFRoaXMgVG9waWM6 IGh0dHBzOi8vZ3JvdXBzLmlvL210LzEwNTU3MjcwMC83Njg2MTc2Ckdyb3VwIE93bmVyOiBkZXZl bCtvd25lckBlZGsyLmdyb3Vwcy5pbwpVbnN1YnNjcmliZTogaHR0cHM6Ly9lZGsyLmdyb3Vwcy5p by9nL2RldmVsL3Vuc3ViIFtyZWJlY2NhQG9wZW5mdy5pb10KLT0tPS09LT0tPS09LT0tPS09LT0t PS0KCg0K