From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from azure-sdnproxy-1.icoremail.net (azure-sdnproxy-1.icoremail.net [52.187.6.220]) by mx.groups.io with SMTP id smtpd.web08.6703.1631606168499574400 for ; Tue, 14 Sep 2021 00:56:11 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=fail (domain: phytium.com.cn, ip: 52.187.6.220, mailfrom: jialing@phytium.com.cn) Received: from prodtpl.icoremail.net (unknown [10.12.1.20]) by hzbj-icmmx-2 (Coremail) with SMTP id AQAAfwDXAtOvVUBhTk2nAg--.24020S2; Tue, 14 Sep 2021 15:56:31 +0800 (CST) Received: by ajax-webmail-mail (Coremail) ; Tue, 14 Sep 2021 15:56:01 +0800 (GMT+08:00) X-Originating-IP: [223.104.131.210] Date: Tue, 14 Sep 2021 15:56:01 +0800 (GMT+08:00) X-CM-HeaderCharset: UTF-8 From: "Ling Jia" To: "Leif Lindholm" Cc: devel@edk2.groups.io Subject: Re: [PATCH v6 04/10] Silicon/Phytium: Added PciSegmentLib to FT2000/4 X-Priority: 3 X-Mailer: Coremail Webmail Server Version XT5.0.13 build 20210303(5f774024) Copyright (c) 2002-2021 www.mailtech.cn icmhosting In-Reply-To: <20210913124218.symintdoeeyejfzq@leviathan> References: <20210910082058.15194-1-jialing@phytium.com.cn> <20210910082058.15194-5-jialing@phytium.com.cn> <20210913124218.symintdoeeyejfzq@leviathan> X-CM-CTRLDATA: Ipa7I2Zvb3Rlcl90eHQ9NjEzMjU6Mzgz MIME-Version: 1.0 Message-ID: <5980ff18.18e.17be34e3f62.Coremail.jialing@phytium.com.cn> X-Coremail-Locale: zh_CN X-CM-TRANSID: AQAAfwAXHrORVUBhBTUAAA--.141W X-CM-SenderInfo: xmldzxdqj61x51wl3zoofrzhdfq/1tbiAQAME2DcNzwCpgAAsN Authentication-Results: hzbj-icmmx-2; spf=neutral smtp.mail=jialing@ph ytium.com.cn; X-Coremail-Antispam: 1Uk129KBjvAXoWDCr1rtF1ruFy7ZrWxJF1DKFg_yoW7Aw1DGo ZIqFn2qwn7tw1xGrn2y3sxXws3GFWIkr17JFWYqr43Xan0qFs8ua4Iqa1DJFs3W3WUGryk JFyrX397AFW0q3Wrn29KB7ZKAUJUUUU8529EdanIXcx71UUUUU7KY7ZEXasCq-sGcSsGvf J3UbIjqfuFe4nvWSU8nxnvy29KBjDU0xBIdaVrnUUvcSsGvfC2KfnxnUUI43ZEXa7xR_UU UUUUUUU== Content-Transfer-Encoding: base64 Content-Type: text/plain; charset=UTF-8 SGkgTGVpZiwKClRoYW5rIHlvdSBmb3IgeW91ciByZXBsee+8gQoKSSB0aGluayB5b3VyIHN1Z2dl c3Rpb24gaXMgdmVyeSBnb29kLiBUaGVyZSBpcyBubyBkZXBlbmRlbmN5IGJldHdlZW4gcGF0Y2hl cyA4IC8gMTAgYW5kIDcgLyAxMC4KSSB0aGluayBpdCB3b3VsZCBiZSBncmVhdCBpZiB3ZSBjb3Vs ZCBtZXJnZS4gRm9yIHBhdGNoIDcsIFBsZWFzZSBwb2ludCBvdXQgd2hhdCBjYW4gYmUgY2hhbmdl ZCBiZXR0ZXLvvIwgSSB3aWxsIG1vZGlmeSBpdCBhY2NvcmRpbmcgdG8geW91ciBzdWdnZXN0aW9u cy4KCkJlc3QgUmVnYXJkcywKCkxpbmcKPiAtLS0tLeWOn+Wni+mCruS7ti0tLS0tCj4g5Y+R5Lu2 5Lq6OiAiTGVpZiBMaW5kaG9sbSIgPGxlaWZAbnV2aWFpbmMuY29tPgo+IOWPkemAgeaXtumXtDog MjAyMS0wOS0xMyAyMDo0MjoxOCAo5pif5pyf5LiAKQo+IOaUtuS7tuS6ujogIkxpbmcgSmlhIiA8 amlhbGluZ0BwaHl0aXVtLmNvbS5jbj4KPiDmioTpgIE6IGRldmVsQGVkazIuZ3JvdXBzLmlvCj4g 5Li76aKYOiBSZTogW1BBVENIIHY2IDA0LzEwXSBTaWxpY29uL1BoeXRpdW06IEFkZGVkIFBjaVNl Z21lbnRMaWIgdG8gRlQyMDAwLzQKPiAKPiBIaSBMaW5nLAo+IAo+IEhhdmluZyBoYWQgYSBsb29r IGF0IHRoaXMgdmVyc2lvbiwgSSBwcm9wb3NlIGZvbGRpbmcgaW4gdGhpcyBjaGFuZ2U6Cj4gCj4g ZGlmZiAtLWdpdCBhL1NpbGljb24vUGh5dGl1bS9GVDIwMDAtNFBrZy9MaWJyYXJ5L1BjaVNlZ21l bnRMaWIvUGNpU2VnbWVudExpYi5jIGIvU2lsaWNvbi9QaHl0aXVtL0ZUMjAwMC00UGtnL0xpYnJh cnkvUGNpU2VnbWVudExpYi9QY2lTZWdtZW50TGliLmMKPiBpbmRleCAyNzM0NDNmZDVkNjguLjEy NDkwOWNjMDE1ZSAxMDA2NDQKPiAtLS0gYS9TaWxpY29uL1BoeXRpdW0vRlQyMDAwLTRQa2cvTGli cmFyeS9QY2lTZWdtZW50TGliL1BjaVNlZ21lbnRMaWIuYwo+ICsrKyBiL1NpbGljb24vUGh5dGl1 bS9GVDIwMDAtNFBrZy9MaWJyYXJ5L1BjaVNlZ21lbnRMaWIvUGNpU2VnbWVudExpYi5jCj4gQEAg LTEyODYsOSArMTI4Niw4IEBAIFBjaVNlZ21lbnRSZWFkQnVmZmVyICgKPiAgICBpZiAoKFN0YXJ0 QWRkcmVzcyAmIEJJVDApICE9IDApIHsKPiAgICAgIC8vCj4gICAgICAvLyBSZWFkIGEgYnl0ZSBp ZiBTdGFydEFkZHJlc3MgaXMgYnl0ZSBhbGlnbmVkLAo+IC0gICAgLy8gVm9sYXRpbGUgZW5zdXJl IHRoYXQgdGhlIGxhdGVzdCB2YWx1ZXMgYXJlIHJlYWQgZXZlcnkgdGltZS4KPiAgICAgIC8vCj4g LSAgICAqKFVJTlQ4ICopQnVmZmVyID0gUGNpU2VnbWVudFJlYWQ4IChTdGFydEFkZHJlc3MpOwo+ ICsgICAgTW1pb1dyaXRlOCAoKFVJTlROKUJ1ZmZlciwgUGNpU2VnbWVudFJlYWQ4IChTdGFydEFk ZHJlc3MpKTsKPiAgICAgIFN0YXJ0QWRkcmVzcyArPSBzaXplb2YgKFVJTlQ4KTsKPiAgICAgIFNp emUgLT0gc2l6ZW9mIChVSU5UOCk7Cj4gICAgICBCdWZmZXIgPSAoVUlOVDggKilCdWZmZXIgKyAx Owo+IEBAIC0xMzI4LDcgKzEzMjcsNyBAQCBQY2lTZWdtZW50UmVhZEJ1ZmZlciAoCj4gICAgICAv Lwo+ICAgICAgLy8gUmVhZCB0aGUgbGFzdCByZW1haW5pbmcgYnl0ZSBpZiBleGlzdAo+ICAgICAg Ly8KPiAtICAgICooVUlOVDggKilCdWZmZXIgPSBQY2lTZWdtZW50UmVhZDggKFN0YXJ0QWRkcmVz cyk7Cj4gKyAgICBNbWlvV3JpdGU4ICgoVUlOVE4pQnVmZmVyLCBQY2lTZWdtZW50UmVhZDggKFN0 YXJ0QWRkcmVzcykpOwo+ICAgIH0KPiAgCj4gICAgcmV0dXJuIFJldHVyblZhbHVlOwo+IAo+IAo+ IAo+IElmIHlvdSBhcmUgT0sgd2l0aCB0aGF0LCBJIGZlZWwgdGhhdCBwYXRjaGVzIDEtNiBhbmQg OS0xMCBhcmUgcmVhZHkgdG8KPiBiZSBtZXJnZWQuCj4gCj4gSSB3b3VsZCBsaWtlIHRvIGRpc2N1 c3MgNy8xMCB0byBzZWUgaWYgd2UgY2FuIGltcHJvdmUgdGhlIHJlYWRhYmlsaXR5Cj4gb2YgdGhl IGNvZGUsIGJhc2VkIG9uIHRoZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHlvdSBwcm92aWRlZC4K PiAoQW5kIEkgdGhpbmsgdGhlcmUgaXMgbm8gcG9pbnQgdG8gaW5jbHVkZSA4LzEwIHdpdGhvdXQg Ny8xMD8pCj4gCj4gQmVzdCBSZWdhcmRzLAo+IAo+IExlaWYKPiAKPiAKPiBPbiBGcmksIFNlcCAx MCwgMjAyMSBhdCAxNjoyMDo1NyArMDgwMCwgTGluZyBKaWEgd3JvdGU6Cj4gPiBUaGUgUENJIFNl Z21lbnQgTGlicmFyeSBmb3IgUGh5dGl1bSBwbGF0Zm9ybS4KPiA+IHdpdGggbXVsdGlwbGUgUkNz Lgo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBMaW5nIEppYSA8amlhbGluZ0BwaHl0aXVtLmNvbS5j bj4KPiA+IFJldmlld2VkLWJ5OiBMZWlmIExpbmRob2xtIDxsZWlmQG51dmlhaW5jLmNvbT4KPiA+ IC0tLQo+ID4gIFBsYXRmb3JtL1BoeXRpdW0vRHVyaWFuUGtnL0R1cmlhblBrZy5kc2MgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICstCj4gPiAgU2lsaWNvbi9QaHl0aXVtL0ZUMjAw MC00UGtnL0xpYnJhcnkvUGNpU2VnbWVudExpYi9QY2lTZWdtZW50TGliLmluZiB8ICAgMjggKwo+ ID4gIFNpbGljb24vUGh5dGl1bS9GVDIwMDAtNFBrZy9MaWJyYXJ5L1BjaVNlZ21lbnRMaWIvUGNp U2VnbWVudExpYi5jICAgfCAxNDM0ICsrKysrKysrKysrKysrKysrKysrCj4gPiAgMyBmaWxlcyBj aGFuZ2VkLCAxNDY0IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYg LS1naXQgYS9QbGF0Zm9ybS9QaHl0aXVtL0R1cmlhblBrZy9EdXJpYW5Qa2cuZHNjIGIvUGxhdGZv cm0vUGh5dGl1bS9EdXJpYW5Qa2cvRHVyaWFuUGtnLmRzYwo+ID4gaW5kZXggMjhlNTJlMTVlMy4u MDkzYjJjZDlkYiAxMDA2NDQKPiA+IC0tLSBhL1BsYXRmb3JtL1BoeXRpdW0vRHVyaWFuUGtnL0R1 cmlhblBrZy5kc2MKPiA+ICsrKyBiL1BsYXRmb3JtL1BoeXRpdW0vRHVyaWFuUGtnL0R1cmlhblBr Zy5kc2MKPiA+IEBAIC0zNSw3ICszNSw4IEBACj4gPiAgICBQTDAxMVVhcnRMaWJ8QXJtUGxhdGZv cm1Qa2cvTGlicmFyeS9QTDAxMVVhcnRMaWIvUEwwMTFVYXJ0TGliLmluZgo+ID4gIAo+ID4gIFtM aWJyYXJ5Q2xhc3Nlcy5jb21tb24uRFhFX0RSSVZFUl0KPiA+IC0KPiA+ICsgICMgUGNpIGRlcGVu ZGVuY2llcwo+ID4gKyAgUGNpU2VnbWVudExpYnxTaWxpY29uL1BoeXRpdW0vRlQyMDAwLTRQa2cv TGlicmFyeS9QY2lTZWdtZW50TGliL1BjaVNlZ21lbnRMaWIuaW5mCj4gPiAgCj4gPiAgIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKPiA+ICAjCj4gPiBAQCAtMjYyLDEyICsyNjMsNiBAQAo+ID4gICAg TWRlTW9kdWxlUGtnL0J1cy9TY3NpL1Njc2lEaXNrRHhlL1Njc2lEaXNrRHhlLmluZgo+ID4gICAg TWRlTW9kdWxlUGtnL0J1cy9BdGEvQXRhQXRhcGlQYXNzVGhydS9BdGFBdGFwaVBhc3NUaHJ1Lmlu Zgo+ID4gIAo+ID4gLSAgIwo+ID4gLSAgIyBQQ0kgU3VwcG9ydAo+ID4gLSAgIwo+ID4gLSAgQXJt UGtnL0RyaXZlcnMvQXJtUGNpQ3B1SW8yRHhlL0FybVBjaUNwdUlvMkR4ZS5pbmYKPiA+IC0gIE1k ZU1vZHVsZVBrZy9CdXMvUGNpL05vbkRpc2NvdmVyYWJsZVBjaURldmljZUR4ZS9Ob25EaXNjb3Zl cmFibGVQY2lEZXZpY2VEeGUuaW5mCj4gPiAtCj4gPiAgICAjCj4gPiAgICAjIFRoZSBmb2xsb3dp bmcgMiBtb2R1bGUgcGVyZm9ybSB0aGUgc2FtZSB3b3JrIGV4Y2VwdCBvbmUgb3BlcmF0ZSB2YXJp YWJsZS4KPiA+ICAgICMgT25seSBvbmUgb2YgYm90aCBzaG91bGQgYmUgcHV0IGludG8gZmRmLgo+ ID4gZGlmZiAtLWdpdCBhL1NpbGljb24vUGh5dGl1bS9GVDIwMDAtNFBrZy9MaWJyYXJ5L1BjaVNl Z21lbnRMaWIvUGNpU2VnbWVudExpYi5pbmYgYi9TaWxpY29uL1BoeXRpdW0vRlQyMDAwLTRQa2cv TGlicmFyeS9QY2lTZWdtZW50TGliL1BjaVNlZ21lbnRMaWIuaW5mCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMC4uNjczNjAwMTZlZgo+ID4gLS0tIC9kZXYvbnVs bAo+ID4gKysrIGIvU2lsaWNvbi9QaHl0aXVtL0ZUMjAwMC00UGtnL0xpYnJhcnkvUGNpU2VnbWVu dExpYi9QY2lTZWdtZW50TGliLmluZgo+ID4gQEAgLTAsMCArMSwyOCBAQAo+ID4gKyMvKiogQGZp bGUKPiA+ICsjICBQQ0kgU2VnbWVudCBMaWJyYXJ5IGZvciBQaHl0aXVtIHBsYXRmb3JtIHdpdGgg bXVsdGlwbGUgUkNzLgo+ID4gKyMKPiA+ICsjICBDb3B5cmlnaHQgKEMpIDIwMjAsIFBoeXRpdW0g VGVjaG5vbG9neSBDbywgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4KPiA+ICsjCj4gPiAr IyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQKPiA+ICsjCj4g PiArIyoqLwo+ID4gKwo+ID4gK1tEZWZpbmVzXQo+ID4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAg ICAgICAgICAgID0gMHgwMDAxMDAxYgo+ID4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAg ICAgID0gUGNpU2VnbWVudExpYgo+ID4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAg ID0gZmE1MTczZDItNDBmZS0xMWViLTliMmYtY2IyMGRjNjY5ZmQzCj4gPiArICBNT0RVTEVfVFlQ RSAgICAgICAgICAgICAgICAgICAgPSBCQVNFCj4gPiArICBWRVJTSU9OX1NUUklORyAgICAgICAg ICAgICAgICAgPSAxLjAKPiA+ICsgIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgICAgICA9IFBj aVNlZ21lbnRMaWIKPiA+ICsKPiA+ICtbU291cmNlc10KPiA+ICsgIFBjaVNlZ21lbnRMaWIuYwo+ ID4gKwo+ID4gK1tQYWNrYWdlc10KPiA+ICsgIE1kZVBrZy9NZGVQa2cuZGVjCj4gPiArICBTaWxp Y29uL1BoeXRpdW0vUGh5dGl1bUNvbW1vblBrZy9QaHl0aXVtQ29tbW9uUGtnLmRlYwo+ID4gKwo+ ID4gK1tMaWJyYXJ5Q2xhc3Nlc10KPiA+ICsgIEJhc2VMaWIKPiA+ICsgIERlYnVnTGliCj4gPiAr ICBJb0xpYgo+ID4gZGlmZiAtLWdpdCBhL1NpbGljb24vUGh5dGl1bS9GVDIwMDAtNFBrZy9MaWJy YXJ5L1BjaVNlZ21lbnRMaWIvUGNpU2VnbWVudExpYi5jIGIvU2lsaWNvbi9QaHl0aXVtL0ZUMjAw MC00UGtnL0xpYnJhcnkvUGNpU2VnbWVudExpYi9QY2lTZWdtZW50TGliLmMKPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwLi4yNzM0NDNmZDVkCj4gPiAtLS0gL2Rl di9udWxsCj4gPiArKysgYi9TaWxpY29uL1BoeXRpdW0vRlQyMDAwLTRQa2cvTGlicmFyeS9QY2lT ZWdtZW50TGliL1BjaVNlZ21lbnRMaWIuYwo+ID4gQEAgLTAsMCArMSwxNDM0IEBACj4gPiArLyoq IEBmaWxlCj4gPiArICBQQ0kgU2VnbWVudCBMaWJyYXJ5IGZvciBTb0Mgd2l0aCBtdWx0aXBsZSBS Q3MuCj4gPiArCj4gPiArICBDb3B5cmlnaHQgKEMpIDIwMjAsIFBoeXRpdW0gVGVjaG5vbG9neSBD byBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPgo+ID4gKwo+ID4gKyAgU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQKPiA+ICsKPiA+ICsqKi8KPiA+ICsKPiA+ ICsjaW5jbHVkZSA8QmFzZS5oPgo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1BjaVNlZ21lbnRMaWIu aD4KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+Cj4gPiArI2luY2x1ZGUgPExpYnJh cnkvRGVidWdMaWIuaD4KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9Jb0xpYi5oPgo+ID4gKwo+ID4g KyNkZWZpbmUgUENJX1NFR19DT05GSUdfQkFTRSAgICAgICAweDQwMDAwMDAwCj4gPiArI2RlZmlu ZSBQQ0lFX0JJRl9NT0RFIDB4MjkxMDA4MDAKPiA+ICsKPiA+ICt0eXBlZGVmIGVudW0gewo+ID4g KyAgUGNpQ2ZnV2lkdGhVaW50OCA9IDAsCj4gPiArICBQY2lDZmdXaWR0aFVpbnQxNiwKPiA+ICsg IFBjaUNmZ1dpZHRoVWludDMyLAo+ID4gKyAgUGNpQ2ZnV2lkdGhNYXgKPiA+ICt9IFBDSV9DRkdf V0lEVEg7Cj4gPiArCj4gPiArLyoqCj4gPiArICBBc3NlcnQgdGhlIHZhbGlkaXR5IG9mIGEgUENJ IFNlZ21lbnQgYWRkcmVzcy4KPiA+ICsgIEEgdmFsaWQgUENJIFNlZ21lbnQgYWRkcmVzcyBzaG91 bGQgbm90IGNvbnRhaW4gMSdzIGluIGJpdHMgMjguLjMxIGFuZCA0OC4uNjMKPiA+ICsKPiA+ICsg IEBwYXJhbVtpbl0gIEEgVGhlIGFkZHJlc3MgdG8gdmFsaWRhdGUuCj4gPiArICBAcGFyYW1baW5d ICBNIEFkZGl0aW9uYWwgYml0cyB0byBhc3NlcnQgdG8gYmUgemVyby4KPiA+ICsKPiA+ICsqKi8K PiA+ICsjZGVmaW5lIEFTU0VSVF9JTlZBTElEX1BDSV9TRUdNRU5UX0FERFJFU1MoQSxNKSBcCj4g PiArQVNTRVJUICgoKEEpICYgKDB4ZmZmZjAwMDBmMDAwMDAwMFVMTCB8IChNKSkpID09IDApCj4g PiArCj4gPiArCj4gPiArI2RlZmluZSBFWFRSQUNUX1BDSUVfQUREUkVTUyhBZGRyZXNzLCBCdXMs IERldmljZSwgRnVuY3Rpb24pIFwKPiA+ICt7IFwKPiA+ICsgIChCdXMpICAgICAgPSAoKChBZGRy ZXNzKSA+PiAyMCkgJiAweGZmKTsgICBcCj4gPiArICAoRGV2aWNlKSAgID0gKCgoQWRkcmVzcykg Pj4gMTUpICYgMHgxZik7ICAgXAo+ID4gKyAgIChGdW5jdGlvbikgPSAoKChBZGRyZXNzKSA+PiAx MikgJiAweDA3KTsgICBcCj4gPiArfQo+ID4gKwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAgVGhpcyBm dW5jdGlvbiAgZ2V0ZWQgdGhlIGNvbmZpZyBiYXNlIG9mIFBDSSBkZXZpY2UuCj4gPiArICBAcGFy YW1baW5dICBBZGRyZXNzICBUaGUgYWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBCdXMsIERl dmljZSwgRnVuY3Rpb24gYW5kCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rlci4K PiA+ICsKPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBjb25maWcgYmFzZSBvZiBQQ0kg ZGV2aWNlLgo+ID4gKwo+ID4gKyoqLwo+ID4gK1NUQVRJQwo+ID4gK1VJTlQ2NAo+ID4gK1BjaVNl Z21lbnRMaWJHZXRDb25maWdCYXNlICgKPiA+ICsgIElOICBVSU5UNjQgICAgICBBZGRyZXNzCj4g PiArICApCj4gPiArewo+ID4gKyAgVUlOVDggQnVzOwo+ID4gKyAgVUlOVDggRGV2aWNlOwo+ID4g KyAgVUlOVDggRnVuY3Rpb247Cj4gPiArICBVSU5UOCBSb290UG9ydENvdW50Owo+ID4gKyAgVUlO VDggUGV1MFJvb3RQb3J0Q291bnQ7Cj4gPiArICBVSU5UOCBQZXUxUm9vdFBvcnRDb3VudDsKPiA+ ICsgIFVJTlQzMiBCaWZNb2RlOwo+ID4gKyAgVUlOVDMyIFBldTBCaWZNb2RlOwo+ID4gKyAgVUlO VDMyIFBldTFCaWZNb2RlOwo+ID4gKwo+ID4gKyAgRVhUUkFDVF9QQ0lFX0FERFJFU1MgKEFkZHJl c3MsIEJ1cywgRGV2aWNlLCBGdW5jdGlvbik7Cj4gPiArICBCaWZNb2RlID0gTW1pb1JlYWQzMiAo UENJRV9CSUZfTU9ERSk7Cj4gPiArICBQZXUwQmlmTW9kZSA9IEJpZk1vZGUgJiAweDM7Cj4gPiAr ICBQZXUxQmlmTW9kZSA9IChCaWZNb2RlID4+IDIpICYgMHgzOwo+ID4gKwo+ID4gKyAgaWYgKChQ ZXUwQmlmTW9kZSA9PSAxKSkgewo+ID4gKyAgICBQZXUwUm9vdFBvcnRDb3VudCA9IDM7Cj4gPiAr ICB9IGVsc2Ugewo+ID4gKyAgICBQZXUwUm9vdFBvcnRDb3VudCA9IDI7Cj4gPiArICB9Cj4gPiAr Cj4gPiArICBpZiAoKFBldTFCaWZNb2RlID09IDEpKSB7Cj4gPiArICAgIFBldTFSb290UG9ydENv dW50ID0gMzsKPiA+ICsgIH0gZWxzZSB7Cj4gPiArICAgIFBldTFSb290UG9ydENvdW50ID0gMjsK PiA+ICsgIH0KPiA+ICsgIFJvb3RQb3J0Q291bnQgPSBQZXUwUm9vdFBvcnRDb3VudCArIFBldTFS b290UG9ydENvdW50Owo+ID4gKyAgLy9pZ25vcmUgZGV2aWNlID4gMCBvciBmdW5jdGlvbiA+IDAg b24gcm9vdCBwb3J0Cj4gPiArICBpZiAoUm9vdFBvcnRDb3VudCA9PSA0KSB7Cj4gPiArICAgIGlm ICgoQnVzID09IDEpIHx8IChCdXMgPT0gMikgfHwgKEJ1cyA9PSAzKSB8fCAoQnVzID09IDQpKSB7 Cj4gPiArICAgICAgaWYgKERldmljZSAhPSAwIHx8IEZ1bmN0aW9uICE9IDApIHsKPiA+ICsgICAg ICAgIHJldHVybiAweEZGRkZGRkZGOwo+ID4gKyAgICAgIH0KPiA+ICsgICAgICByZXR1cm4gUENJ X1NFR19DT05GSUdfQkFTRTsKPiA+ICsgICAgfQo+ID4gKyAgfSBlbHNlIGlmIChSb290UG9ydENv dW50ID09IDUpIHsKPiA+ICsgICAgaWYgKChCdXMgPT0gMSkgfHwgKEJ1cyA9PSAyKSB8fCAoQnVz ID09IDMpIHx8IChCdXMgPT0gNCkgfHwgKEJ1cyA9PSA1KSkgewo+ID4gKyAgICAgIGlmIChEZXZp Y2UgIT0gMCB8fCBGdW5jdGlvbiAhPSAwKSB7Cj4gPiArICAgICAgICByZXR1cm4gMHhGRkZGRkZG RjsKPiA+ICsgICAgICB9Cj4gPiArICAgICAgcmV0dXJuIFBDSV9TRUdfQ09ORklHX0JBU0U7Cj4g PiArICAgIH0KPiA+ICsgIH0gZWxzZSBpZiAoUm9vdFBvcnRDb3VudCA9PSA2KSB7Cj4gPiArICAg IGlmICgoQnVzID09IDEpIHx8IChCdXMgPT0gMikgfHwgKEJ1cyA9PSAzKSB8fCAoQnVzID09IDQp IHx8IChCdXMgPT0gNSkgfHwgKEJ1cyA9PSA2KSkgewo+ID4gKyAgICAgIGlmIChEZXZpY2UgIT0g MCB8fCBGdW5jdGlvbiAhPSAwKSB7Cj4gPiArICAgICAgICByZXR1cm4gMHhGRkZGRkZGRjsKPiA+ ICsgICAgICB9Cj4gPiArICAgICAgcmV0dXJuIFBDSV9TRUdfQ09ORklHX0JBU0U7Cj4gPiArICAg IH0KPiA+ICsgIH0KPiA+ICsKPiA+ICsgIHJldHVybiBQQ0lfU0VHX0NPTkZJR19CQVNFOwo+ID4g K30KPiA+ICsKPiA+ICsvKioKPiA+ICsgIEludGVybmFsIHdvcmtlciBmdW5jdGlvbiB0byByZWFk IGEgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gPiArCj4gPiArICBAcGFyYW1baW5dICBB ZGRyZXNzIFRoZSBhZGRyZXNzIHRoYXQgZW5jb2RlcyB0aGUgUENJIEJ1cywgRGV2aWNlLCBGdW5j dGlvbiBhbmQKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIuCj4gPiArICBAcGFy YW1baW5dICBXaWR0aCAgIFRoZSB3aWR0aCBvZiBkYXRhIHRvIHJlYWQKPiA+ICsKPiA+ICsgIEBy ZXR1cm4gVGhlIHZhbHVlIHJlYWQgZnJvbSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIu Cj4gPiArCj4gPiArKiovCj4gPiArU1RBVElDCj4gPiArVUlOVDMyCj4gPiArUGNpU2VnbWVudExp YlJlYWRXb3JrZXIgKAo+ID4gKyAgSU4gIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICBBZGRy ZXNzLAo+ID4gKyAgSU4gIFBDSV9DRkdfV0lEVEggICAgICAgICAgICAgICBXaWR0aAo+ID4gKyAg KQo+ID4gK3sKPiA+ICsgIFVJTlQ2NCAgICBCYXNlOwo+ID4gKwo+ID4gKyAgQmFzZSA9IFBjaVNl Z21lbnRMaWJHZXRDb25maWdCYXNlIChBZGRyZXNzKTsKPiA+ICsgIGlmIChCYXNlID09IDB4RkZG RkZGRkYpIHsKPiA+ICsgICAgcmV0dXJuIDB4RkZGRkZGRkY7Cj4gPiArICB9Cj4gPiArCj4gPiAr ICBzd2l0Y2ggKFdpZHRoKSB7Cj4gPiArICBjYXNlIFBjaUNmZ1dpZHRoVWludDg6Cj4gPiArICAg IHJldHVybiBNbWlvUmVhZDggKEJhc2UgKyAoVUlOVDMyKUFkZHJlc3MpOwo+ID4gKyAgY2FzZSBQ Y2lDZmdXaWR0aFVpbnQxNjoKPiA+ICsgICAgcmV0dXJuIE1taW9SZWFkMTYgKEJhc2UgKyAoVUlO VDMyKUFkZHJlc3MpOwo+ID4gKyAgY2FzZSBQY2lDZmdXaWR0aFVpbnQzMjoKPiA+ICsgICAgcmV0 dXJuIE1taW9SZWFkMzIgKEJhc2UgKyAoVUlOVDMyKUFkZHJlc3MpOwo+ID4gKyAgZGVmYXVsdDoK PiA+ICsgICAgQVNTRVJUIChGQUxTRSk7Cj4gPiArICB9Cj4gPiArCj4gPiArICByZXR1cm4gMDsK PiA+ICt9Cj4gPiArCj4gPiArCj4gPiArLyoqCj4gPiArICBJbnRlcm5hbCB3b3JrZXIgZnVuY3Rp b24gdG8gd3JpdGVzIGEgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gPiArCj4gPiArICBA cGFyYW1baW5dICBBZGRyZXNzIFRoZSBhZGRyZXNzIHRoYXQgZW5jb2RlcyB0aGUgUENJIEJ1cywg RGV2aWNlLCBGdW5jdGlvbiBhbmQKPiA+ICsgICAgICAgICAgICAgICAgICBSZWdpc3Rlci4KPiA+ ICsgIEBwYXJhbVtpbl0gIFdpZHRoICAgVGhlIHdpZHRoIG9mIGRhdGEgdG8gd3JpdGUKPiA+ICsg IEBwYXJhbVtpbl0gIERhdGEgICAgVGhlIHZhbHVlIHRvIHdyaXRlLgo+ID4gKwo+ID4gKyAgQHJl dHVybiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIu Cj4gPiArCj4gPiArKiovCj4gPiArU1RBVElDCj4gPiArVUlOVDMyCj4gPiArUGNpU2VnbWVudExp YldyaXRlV29ya2VyICgKPiA+ICsgIElOICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgQWRk cmVzcywKPiA+ICsgIElOICBQQ0lfQ0ZHX1dJRFRIICAgICAgICAgICAgICAgV2lkdGgsCj4gPiAr ICBJTiAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgIERhdGEKPiA+ICsgICkKPiA+ICt7Cj4g PiArICBVSU5UNjQgICAgQmFzZTsKPiA+ICsKPiA+ICsgIEJhc2UgPSBQY2lTZWdtZW50TGliR2V0 Q29uZmlnQmFzZSAoQWRkcmVzcyk7Cj4gPiArICBpZiAoQmFzZSA9PSAweEZGRkZGRkZGKSB7Cj4g PiArICAgIHJldHVybiAweEZGRkZGRkZGOwo+ID4gKyAgfQo+ID4gKwo+ID4gKyAgc3dpdGNoIChX aWR0aCkgewo+ID4gKyAgY2FzZSBQY2lDZmdXaWR0aFVpbnQ4Ogo+ID4gKyAgICBNbWlvV3JpdGU4 IChCYXNlICsgKFVJTlQzMilBZGRyZXNzLCBEYXRhKTsKPiA+ICsgICAgYnJlYWs7Cj4gPiArICBj YXNlIFBjaUNmZ1dpZHRoVWludDE2Ogo+ID4gKyAgICBNbWlvV3JpdGUxNiAoQmFzZSArIChVSU5U MzIpQWRkcmVzcywgRGF0YSk7Cj4gPiArICAgIGJyZWFrOwo+ID4gKyAgY2FzZSBQY2lDZmdXaWR0 aFVpbnQzMjoKPiA+ICsgICAgTW1pb1dyaXRlMzIgKEJhc2UgKyAoVUlOVDMyKUFkZHJlc3MsIERh dGEpOwo+ID4gKyAgICBicmVhazsKPiA+ICsgIGRlZmF1bHQ6Cj4gPiArICAgIEFTU0VSVCAoRkFM U0UpOwo+ID4gKyAgfQo+ID4gKwo+ID4gKyAgcmV0dXJuIERhdGE7Cj4gPiArfQo+ID4gKwo+ID4g Ky8qKgo+ID4gKyAgUmVnaXN0ZXIgYSBQQ0kgZGV2aWNlIHNvIFBDSSBjb25maWd1cmF0aW9uIHJl Z2lzdGVycyBtYXkgYmUgYWNjZXNzZWQgYWZ0ZXIKPiA+ICsgIFNldFZpcnR1YWxBZGRyZXNzTWFw KCkuCj4gPiArCj4gPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0cyBpbiBBZGRyZXNzIGFyZSBzZXQs IHRoZW4gQVNTRVJUKCkuCj4gPiArCj4gPiArICBAcGFyYW1baW5dICAgICAgQWRkcmVzcyAgICAg ICAgICBUaGUgYWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBCdXMsIERldmljZSwgRnVuY3Rp b24gYW5kCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rlci4K PiA+ICsKPiA+ICsgIEByZXR2YWwgUkVUVVJOX1NVQ0NFU1MgICAgICAgICAgIFRoZSBQQ0kgZGV2 aWNlIHdhcyByZWdpc3RlcmVkIGZvciBydW50aW1lIGFjY2Vzcy4KPiA+ICsgIEByZXR2YWwgUkVU VVJOX1VOU1VQUE9SVEVEICAgICAgIEFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gY2FsbCB0aGlzIGZ1 bmN0aW9uCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciBFeGl0 Qm9vdFNlcnZpY2VzKCkuCj4gPiArICBAcmV0dmFsIFJFVFVSTl9VTlNVUFBPUlRFRCAgICAgICBU aGUgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIGFjY2VzcyB0aGUgUENJIGRldmljZQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgcnVudGltZSBjb3VsZCBub3QgYmUgbWFw cGVkLgo+ID4gKyAgQHJldHZhbCBSRVRVUk5fT1VUX09GX1JFU09VUkNFUyAgVGhlcmUgYXJlIG5v dCBlbm91Z2ggcmVzb3VyY2VzIGF2YWlsYWJsZSB0bwo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29tcGxldGUgdGhlIHJlZ2lzdHJhdGlvbi4KPiA+ICsKPiA+ICsqKi8K PiA+ICtSRVRVUk5fU1RBVFVTCj4gPiArRUZJQVBJCj4gPiArUGNpU2VnbWVudFJlZ2lzdGVyRm9y UnVudGltZUFjY2VzcyAoCj4gPiArICBJTiBVSU5UTiAgQWRkcmVzcwo+ID4gKyAgKQo+ID4gK3sK PiA+ICsgIEFTU0VSVF9JTlZBTElEX1BDSV9TRUdNRU5UX0FERFJFU1MgKEFkZHJlc3MsIDApOwo+ ID4gKwo+ID4gKyAgcmV0dXJuIFJFVFVSTl9VTlNVUFBPUlRFRDsKPiA+ICt9Cj4gPiArCj4gPiAr LyoqCj4gPiArICBSZWFkcyBhbiA4LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiA+ ICsKPiA+ICsgIFJlYWRzIGFuZCByZXR1cm5zIHRoZSA4LWJpdCBQQ0kgY29uZmlndXJhdGlvbiBy ZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4KPiA+ICsgIFRoaXMgZnVuY3Rpb24gbXVzdCBn dWFyYW50ZWUgdGhhdCBhbGwgUENJIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlh bGl6ZWQuCj4gPiArCj4gPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0cyBpbiBBZGRyZXNzIGFyZSBz ZXQsIHRoZW4gQVNTRVJUKCkuCj4gPiArCj4gPiArICBAcGFyYW1baW5dICBBZGRyZXNzICAgVGhl IGFkZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kgU2VnbWVudCwgQnVzLCBEZXZpY2UsIEZ1bmN0 aW9uLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgYW5kIFJlZ2lzdGVyLgo+ID4gKwo+ID4gKyAg QHJldHVybiBUaGUgOC1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5 IEFkZHJlc3MuCj4gPiArCj4gPiArKiovCj4gPiArVUlOVDgKPiA+ICtFRklBUEkKPiA+ICtQY2lT ZWdtZW50UmVhZDggKAo+ID4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICBBZGRyZXNz Cj4gPiArICApCj4gPiArewo+ID4gKyAgQVNTRVJUX0lOVkFMSURfUENJX1NFR01FTlRfQUREUkVT UyAoQWRkcmVzcywgMCk7Cj4gPiArCj4gPiArICByZXR1cm4gKFVJTlQ4KSBQY2lTZWdtZW50TGli UmVhZFdvcmtlciAoQWRkcmVzcywgUGNpQ2ZnV2lkdGhVaW50OCk7Cj4gPiArfQo+ID4gKwo+ID4g Ky8qKgo+ID4gKyAgV3JpdGVzIGFuIDgtYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ ID4gKwo+ID4gKyAgV3JpdGVzIHRoZSA4LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBz cGVjaWZpZWQgYnkgQWRkcmVzcyB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgVmFsdWUuCj4g PiArICBWYWx1ZSBpcyByZXR1cm5lZC4gIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhh dCBhbGwgUENJIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuCj4gPiAr Cj4gPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0cyBpbiBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNT RVJUKCkuCj4gPiArCj4gPiArICBAcGFyYW1baW5dICBBZGRyZXNzICAgICBUaGUgYWRkcmVzcyB0 aGF0IGVuY29kZXMgdGhlIFBDSSBTZWdtZW50LCBCdXMsIERldmljZSwgRnVuY3Rpb24sIGFuZCBS ZWdpc3Rlci4KPiA+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgIFRoZSB2YWx1ZSB0byB3cml0 ZS4KPiA+ICsKPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gdG8gdGhlIFBDSSBjb25m aWd1cmF0aW9uIHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyoqLwo+ID4gK1VJTlQ4Cj4gPiArRUZJQVBJ Cj4gPiArUGNpU2VnbWVudFdyaXRlOCAoCj4gPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAg ICAgIEFkZHJlc3MsCj4gPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgICAgIFZhbHVlCj4g PiArICApCj4gPiArewo+ID4gKyAgQVNTRVJUX0lOVkFMSURfUENJX1NFR01FTlRfQUREUkVTUyAo QWRkcmVzcywgMCk7Cj4gPiArCj4gPiArICByZXR1cm4gKFVJTlQ4KSBQY2lTZWdtZW50TGliV3Jp dGVXb3JrZXIgKEFkZHJlc3MsIFBjaUNmZ1dpZHRoVWludDgsIFZhbHVlKTsKPiA+ICt9Cj4gPiAr Cj4gPiArLyoqCj4gPiArICBQZXJmb3JtcyBhIGJpdHdpc2UgT1Igb2YgYW4gOC1iaXQgUENJIGNv bmZpZ3VyYXRpb24gcmVnaXN0ZXIgd2l0aCBhbiA4LWJpdCB2YWx1ZS4KPiA+ICsKPiA+ICsgIFJl YWRzIHRoZSA4LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRk cmVzcywKPiA+ICsgIHBlcmZvcm1zIGEgYml0d2lzZSBPUiBiZXR3ZWVuIHRoZSByZWFkIHJlc3Vs dCBhbmQgdGhlIHZhbHVlIHNwZWNpZmllZCBieSBPckRhdGEsCj4gPiArICBhbmQgd3JpdGVzIHRo ZSByZXN1bHQgdG8gdGhlIDgtYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmll ZCBieSBBZGRyZXNzLgo+ID4gKyAgVGhlIHZhbHVlIHdyaXR0ZW4gdG8gdGhlIFBDSSBjb25maWd1 cmF0aW9uIHJlZ2lzdGVyIGlzIHJldHVybmVkLgo+ID4gKyAgVGhpcyBmdW5jdGlvbiBtdXN0IGd1 YXJhbnRlZSB0aGF0IGFsbCBQQ0kgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFs aXplZC4KPiA+ICsKPiA+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFkZHJlc3MgYXJlIHNl dCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsKPiA+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICBUaGUg YWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBTZWdtZW50LCBCdXMsIERldmljZSwgRnVuY3Rp b24sIGFuZCBSZWdpc3Rlci4KPiA+ICsgIEBwYXJhbVtpbl0gIE9yRGF0YSAgICBUaGUgdmFsdWUg dG8gT1Igd2l0aCB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gPiArCj4gPiArICBA cmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rl ci4KPiA+ICsKPiA+ICsqKi8KPiA+ICtVSU5UOAo+ID4gK0VGSUFQSQo+ID4gK1BjaVNlZ21lbnRP cjggKAo+ID4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLAo+ID4gKyAg SU4gVUlOVDggICAgICAgICAgICAgICAgICAgICBPckRhdGEKPiA+ICsgICkKPiA+ICt7Cj4gPiAr ICByZXR1cm4gUGNpU2VnbWVudFdyaXRlOCAoQWRkcmVzcywgKFVJTlQ4KSAoUGNpU2VnbWVudFJl YWQ4IChBZGRyZXNzKSB8IE9yRGF0YSkpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgIFBl cmZvcm1zIGEgYml0d2lzZSBBTkQgb2YgYW4gOC1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0 ZXIgd2l0aCBhbiA4LWJpdCB2YWx1ZS4KPiA+ICsKPiA+ICsgIFJlYWRzIHRoZSA4LWJpdCBQQ0kg Y29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcywKPiA+ICsgIHBlcmZv cm1zIGEgYml0d2lzZSBBTkQgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1ZSBz cGVjaWZpZWQgYnkgQW5kRGF0YSwKPiA+ICsgIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUg OC1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuCj4g PiArICBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIg aXMgcmV0dXJuZWQuCj4gPiArICBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxs IFBDSSByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLgo+ID4gKyAgSWYg YW55IHJlc2VydmVkIGJpdHMgaW4gQWRkcmVzcyBhcmUgc2V0LCB0aGVuIEFTU0VSVCgpLgo+ID4g Kwo+ID4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgIFRoZSBhZGRyZXNzIHRoYXQgZW5jb2RlcyB0 aGUgUENJIFNlZ21lbnQsIEJ1cywgRGV2aWNlLCBGdW5jdGlvbiwgYW5kIFJlZ2lzdGVyLgo+ID4g KyAgQHBhcmFtW2luXSAgQW5kRGF0YSAgIFRoZSB2YWx1ZSB0byBBTkQgd2l0aCB0aGUgUENJIGNv bmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gPiArCj4gPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0 dGVuIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiA+ICsKPiA+ICsqKi8KPiA+ ICtVSU5UOAo+ID4gK0VGSUFQSQo+ID4gK1BjaVNlZ21lbnRBbmQ4ICgKPiA+ICsgIElOIFVJTlQ2 NCAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywKPiA+ICsgIElOIFVJTlQ4ICAgICAgICAgICAg ICAgICAgICAgQW5kRGF0YQo+ID4gKyAgKQo+ID4gK3sKPiA+ICsgIHJldHVybiBQY2lTZWdtZW50 V3JpdGU4IChBZGRyZXNzLCAoVUlOVDgpIChQY2lTZWdtZW50UmVhZDggKEFkZHJlc3MpICYgQW5k RGF0YSkpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgIFBlcmZvcm1zIGEgYml0d2lzZSBB TkQgb2YgYW4gOC1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgd2l0aCBhbiA4LWJpdCB2 YWx1ZSwKPiA+ICsgIGZvbGxvd2VkIGEgIGJpdHdpc2UgT1Igd2l0aCBhbm90aGVyIDgtYml0IHZh bHVlLgo+ID4gKwo+ID4gKyAgUmVhZHMgdGhlIDgtYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lz dGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLAo+ID4gKyAgcGVyZm9ybXMgYSBiaXR3aXNlIEFORCBi ZXR3ZWVuIHRoZSByZWFkIHJlc3VsdCBhbmQgdGhlIHZhbHVlIHNwZWNpZmllZCBieSBBbmREYXRh LAo+ID4gKyAgcGVyZm9ybXMgYSBiaXR3aXNlIE9SIGJldHdlZW4gdGhlIHJlc3VsdCBvZiB0aGUg QU5EIG9wZXJhdGlvbiBhbmQgdGhlIHZhbHVlIHNwZWNpZmllZCBieSBPckRhdGEsCj4gPiArICBh bmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIDgtYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lz dGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLgo+ID4gKyAgVGhlIHZhbHVlIHdyaXR0ZW4gdG8gdGhl IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGlzIHJldHVybmVkLgo+ID4gKyAgVGhpcyBmdW5j dGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9u cyBhcmUgc2VyaWFsaXplZC4KPiA+ICsKPiA+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFk ZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsKPiA+ICsgIEBwYXJhbVtpbl0gIEFk ZHJlc3MgICBUaGUgYWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBTZWdtZW50LCBCdXMsIERl dmljZSwgRnVuY3Rpb24sIGFuZCBSZWdpc3Rlci4KPiA+ICsgIEBwYXJhbVtpbl0gIEFuZERhdGEg ICAgVGhlIHZhbHVlIHRvIEFORCB3aXRoIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4K PiA+ICsgIEBwYXJhbVtpbl0gIE9yRGF0YSAgICBUaGUgdmFsdWUgdG8gT1Igd2l0aCB0aGUgUENJ IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gPiArCj4gPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3 cml0dGVuIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiA+ICsKPiA+ICsqKi8K PiA+ICtVSU5UOAo+ID4gK0VGSUFQSQo+ID4gK1BjaVNlZ21lbnRBbmRUaGVuT3I4ICgKPiA+ICsg IElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywKPiA+ICsgIElOIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAgQW5kRGF0YSwKPiA+ICsgIElOIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgT3JEYXRhCj4gPiArICApCj4gPiArewo+ID4gKyAgcmV0dXJuIFBjaVNlZ21lbnRXcml0 ZTggKEFkZHJlc3MsIChVSU5UOCkgKChQY2lTZWdtZW50UmVhZDggKEFkZHJlc3MpICYgQW5kRGF0 YSkgfCBPckRhdGEpKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICBSZWFkcyBhIGJpdCBm aWVsZCBvZiBhIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyAgUmVhZHMg dGhlIGJpdCBmaWVsZCBpbiBhbiA4LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4gVGhl IGJpdCBmaWVsZCBpcwo+ID4gKyAgc3BlY2lmaWVkIGJ5IHRoZSBTdGFydEJpdCBhbmQgdGhlIEVu ZEJpdC4gVGhlIHZhbHVlIG9mIHRoZSBiaXQgZmllbGQgaXMKPiA+ICsgIHJldHVybmVkLgo+ID4g Kwo+ID4gKyAgSWYgYW55IHJlc2VydmVkIGJpdHMgaW4gQWRkcmVzcyBhcmUgc2V0LCB0aGVuIEFT U0VSVCgpLgo+ID4gKyAgSWYgU3RhcnRCaXQgaXMgZ3JlYXRlciB0aGFuIDcsIHRoZW4gQVNTRVJU KCkuCj4gPiArICBJZiBFbmRCaXQgaXMgZ3JlYXRlciB0aGFuIDcsIHRoZW4gQVNTRVJUKCkuCj4g PiArICBJZiBFbmRCaXQgaXMgbGVzcyB0aGFuIFN0YXJ0Qml0LCB0aGVuIEFTU0VSVCgpLgo+ID4g Kwo+ID4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgIFRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdp c3RlciB0byByZWFkLgo+ID4gKyAgQHBhcmFtW2luXSAgU3RhcnRCaXQgIFRoZSBvcmRpbmFsIG9m IHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4KPiA+ICsgICAgICAg ICAgICAgICAgICAgIFJhbmdlIDAuLjcuCj4gPiArICBAcGFyYW1baW5dICBFbmRCaXQgICAgVGhl IG9yZGluYWwgb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQuCj4g PiArICAgICAgICAgICAgICAgICAgICBSYW5nZSAwLi43Lgo+ID4gKwo+ID4gKyAgQHJldHVybiBU aGUgdmFsdWUgb2YgdGhlIGJpdCBmaWVsZCByZWFkIGZyb20gdGhlIFBDSSBjb25maWd1cmF0aW9u IHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyoqLwo+ID4gK1VJTlQ4Cj4gPiArRUZJQVBJCj4gPiArUGNp U2VnbWVudEJpdEZpZWxkUmVhZDggKAo+ID4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAg ICBBZGRyZXNzLAo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICBTdGFydEJpdCwK PiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgRW5kQml0Cj4gPiArICApCj4gPiAr ewo+ID4gKyAgcmV0dXJuIEJpdEZpZWxkUmVhZDggKFBjaVNlZ21lbnRSZWFkOCAoQWRkcmVzcyks IFN0YXJ0Qml0LCBFbmRCaXQpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgIFdyaXRlcyBh IGJpdCBmaWVsZCB0byBhIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyAg V3JpdGVzIFZhbHVlIHRvIHRoZSBiaXQgZmllbGQgb2YgdGhlIFBDSSBjb25maWd1cmF0aW9uIHJl Z2lzdGVyLiBUaGUgYml0Cj4gPiArICBmaWVsZCBpcyBzcGVjaWZpZWQgYnkgdGhlIFN0YXJ0Qml0 IGFuZCB0aGUgRW5kQml0LiBBbGwgb3RoZXIgYml0cyBpbiB0aGUKPiA+ICsgIGRlc3RpbmF0aW9u IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGFyZSBwcmVzZXJ2ZWQuIFRoZSBuZXcgdmFsdWUg b2YgdGhlCj4gPiArICA4LWJpdCByZWdpc3RlciBpcyByZXR1cm5lZC4KPiA+ICsKPiA+ICsgIEBw YXJhbVtpbl0gIEFkZHJlc3MgICBUaGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdG8gd3Jp dGUuCj4gPiArICBAcGFyYW1baW5dICBTdGFydEJpdCAgVGhlIG9yZGluYWwgb2YgdGhlIGxlYXN0 IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLgo+ID4gKyAgICAgICAgICAgICAgICAg ICAgUmFuZ2UgMC4uNy4KPiA+ICsgIEBwYXJhbVtpbl0gIEVuZEJpdCAgICBUaGUgb3JkaW5hbCBv ZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4KPiA+ICsgICAgICAg ICAgICAgICAgICAgIFJhbmdlIDAuLjcuCj4gPiArICBAcGFyYW1baW5dICBWYWx1ZSAgICAgVGhl IG5ldyB2YWx1ZSBvZiB0aGUgYml0IGZpZWxkLgo+ID4gKwo+ID4gKyAgQHJldHVybiBUaGUgdmFs dWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiA+ICsK PiA+ICsqKi8KPiA+ICtVSU5UOAo+ID4gK0VGSUFQSQo+ID4gK1BjaVNlZ21lbnRCaXRGaWVsZFdy aXRlOCAoCj4gPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsCj4gPiAr ICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFN0YXJ0Qml0LAo+ID4gKyAgSU4gVUlOVE4g ICAgICAgICAgICAgICAgICAgICBFbmRCaXQsCj4gPiArICBJTiBVSU5UOCAgICAgICAgICAgICAg ICAgICAgIFZhbHVlCj4gPiArICApCj4gPiArewo+ID4gKyAgcmV0dXJuIFBjaVNlZ21lbnRXcml0 ZTggKAo+ID4gKyAgICAgICAgICAgQWRkcmVzcywKPiA+ICsgICAgICAgICAgIEJpdEZpZWxkV3Jp dGU4IChQY2lTZWdtZW50UmVhZDggKEFkZHJlc3MpLCBTdGFydEJpdCwgRW5kQml0LCBWYWx1ZSkK PiA+ICsgICAgICAgICAgICk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAgUmVhZHMgYSBi aXQgZmllbGQgaW4gYW4gOC1iaXQgUENJIGNvbmZpZ3VyYXRpb24sIHBlcmZvcm1zIGEgYml0d2lz ZSBPUiwgYW5kCj4gPiArICB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSBiaXQgZmllbGQg aW4gdGhlIDgtYml0IHBvcnQuCj4gPiArCj4gPiArICBSZWFkcyB0aGUgOC1iaXQgUENJIGNvbmZp Z3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MsIHBlcmZvcm1zIGEKPiA+ICsg IGJpdHdpc2UgT1IgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1ZSBzcGVjaWZp ZWQgYnkKPiA+ICsgIE9yRGF0YSwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSA4LWJpdCBQ Q0kgY29uZmlndXJhdGlvbiByZWdpc3Rlcgo+ID4gKyAgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuIFRo ZSB2YWx1ZSB3cml0dGVuIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBpcwo+ID4g KyAgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgUENJIHJl YWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMKPiA+ICsgIGFyZSBzZXJpYWxpemVkLiBFeHRyYSBsZWZ0 IGJpdHMgaW4gT3JEYXRhIGFyZSBzdHJpcHBlZC4KPiA+ICsKPiA+ICsgIElmIGFueSByZXNlcnZl ZCBiaXRzIGluIEFkZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmIFN0YXJ0 Qml0IGlzIGdyZWF0ZXIgdGhhbiA3LCB0aGVuIEFTU0VSVCgpLgo+ID4gKyAgSWYgRW5kQml0IGlz IGdyZWF0ZXIgdGhhbiA3LCB0aGVuIEFTU0VSVCgpLgo+ID4gKyAgSWYgRW5kQml0IGlzIGxlc3Mg dGhhbiBTdGFydEJpdCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmIE9yRGF0YSBpcyBsYXJnZXIg dGhhbiB0aGUgYml0bWFzayB2YWx1ZSByYW5nZSBzcGVjaWZpZWQgYnkgU3RhcnRCaXQgYW5kIEVu ZEJpdCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsKPiA+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICBU aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdG8gd3JpdGUuCj4gPiArICBAcGFyYW1baW5d ICBTdGFydEJpdCAgVGhlIG9yZGluYWwgb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpbiB0 aGUgYml0IGZpZWxkLgo+ID4gKyAgICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uNy4KPiA+ICsg IEBwYXJhbVtpbl0gIEVuZEJpdCAgICBUaGUgb3JkaW5hbCBvZiB0aGUgbW9zdCBzaWduaWZpY2Fu dCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4KPiA+ICsgICAgICAgICAgICAgICAgICAgIFJhbmdlIDAu LjcuCj4gPiArICBAcGFyYW1baW5dICBPckRhdGEgICAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhl IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyAgQHJldHVybiBUaGUgdmFs dWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiA+ICsK PiA+ICsqKi8KPiA+ICtVSU5UOAo+ID4gK0VGSUFQSQo+ID4gK1BjaVNlZ21lbnRCaXRGaWVsZE9y OCAoCj4gPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsCj4gPiArICBJ TiBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFN0YXJ0Qml0LAo+ID4gKyAgSU4gVUlOVE4gICAg ICAgICAgICAgICAgICAgICBFbmRCaXQsCj4gPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAg ICAgIE9yRGF0YQo+ID4gKyAgKQo+ID4gK3sKPiA+ICsgIHJldHVybiBQY2lTZWdtZW50V3JpdGU4 ICgKPiA+ICsgICAgICAgICAgIEFkZHJlc3MsCj4gPiArICAgICAgICAgICBCaXRGaWVsZE9yOCAo UGNpU2VnbWVudFJlYWQ4IChBZGRyZXNzKSwgU3RhcnRCaXQsIEVuZEJpdCwgT3JEYXRhKQo+ID4g KyAgICAgICAgICAgKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICBSZWFkcyBhIGJpdCBm aWVsZCBpbiBhbiA4LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciwgcGVyZm9ybXMgYSBi aXR3aXNlCj4gPiArICBBTkQsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSBiaXQg ZmllbGQgaW4gdGhlIDgtYml0IHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyAgUmVhZHMgdGhlIDgtYml0 IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLCBwZXJmb3Jt cyBhCj4gPiArICBiaXR3aXNlIEFORCBiZXR3ZWVuIHRoZSByZWFkIHJlc3VsdCBhbmQgdGhlIHZh bHVlIHNwZWNpZmllZCBieSBBbmREYXRhLCBhbmQKPiA+ICsgIHdyaXRlcyB0aGUgcmVzdWx0IHRv IHRoZSA4LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkKPiA+ICsg IEFkZHJlc3MuIFRoZSB2YWx1ZSB3cml0dGVuIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdp c3RlciBpcyByZXR1cm5lZC4KPiA+ICsgIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhh dCBhbGwgUENJIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJlCj4gPiArICBzZXJpYWxpemVk LiBFeHRyYSBsZWZ0IGJpdHMgaW4gQW5kRGF0YSBhcmUgc3RyaXBwZWQuCj4gPiArCj4gPiArICBJ ZiBhbnkgcmVzZXJ2ZWQgYml0cyBpbiBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCkuCj4g PiArICBJZiBTdGFydEJpdCBpcyBncmVhdGVyIHRoYW4gNywgdGhlbiBBU1NFUlQoKS4KPiA+ICsg IElmIEVuZEJpdCBpcyBncmVhdGVyIHRoYW4gNywgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmIEVu ZEJpdCBpcyBsZXNzIHRoYW4gU3RhcnRCaXQsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBBbmRE YXRhIGlzIGxhcmdlciB0aGFuIHRoZSBiaXRtYXNrIHZhbHVlIHJhbmdlIHNwZWNpZmllZCBieSBT dGFydEJpdCBhbmQgRW5kQml0LCB0aGVuIEFTU0VSVCgpLgo+ID4gKwo+ID4gKyAgQHBhcmFtW2lu XSAgQWRkcmVzcyAgIFRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciB0byB3cml0ZS4KPiA+ ICsgIEBwYXJhbVtpbl0gIFN0YXJ0Qml0ICBUaGUgb3JkaW5hbCBvZiB0aGUgbGVhc3Qgc2lnbmlm aWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQuCj4gPiArICAgICAgICAgICAgICAgICAgICBSYW5n ZSAwLi43Lgo+ID4gKyAgQHBhcmFtW2luXSAgRW5kQml0ICAgIFRoZSBvcmRpbmFsIG9mIHRoZSBt b3N0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLgo+ID4gKyAgICAgICAgICAgICAg ICAgICAgUmFuZ2UgMC4uNy4KPiA+ICsgIEBwYXJhbVtpbl0gIEFuZERhdGEgICBUaGUgdmFsdWUg dG8gQU5EIHdpdGggdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyAg QHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBy ZWdpc3Rlci4KPiA+ICsKPiA+ICsqKi8KPiA+ICtVSU5UOAo+ID4gK0VGSUFQSQo+ID4gK1BjaVNl Z21lbnRCaXRGaWVsZEFuZDggKAo+ID4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICBB ZGRyZXNzLAo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICBTdGFydEJpdCwKPiA+ ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgRW5kQml0LAo+ID4gKyAgSU4gVUlOVDgg ICAgICAgICAgICAgICAgICAgICBBbmREYXRhCj4gPiArICApCj4gPiArewo+ID4gKyAgcmV0dXJu IFBjaVNlZ21lbnRXcml0ZTggKAo+ID4gKyAgICAgICAgICAgQWRkcmVzcywKPiA+ICsgICAgICAg ICAgIEJpdEZpZWxkQW5kOCAoUGNpU2VnbWVudFJlYWQ4IChBZGRyZXNzKSwgU3RhcnRCaXQsIEVu ZEJpdCwgQW5kRGF0YSkKPiA+ICsgICAgICAgICAgICk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ ID4gKyAgUmVhZHMgYSBiaXQgZmllbGQgaW4gYW4gOC1iaXQgcG9ydCwgcGVyZm9ybXMgYSBiaXR3 aXNlIEFORCBmb2xsb3dlZCBieSBhCj4gPiArICBiaXR3aXNlIE9SLCBhbmQgd3JpdGVzIHRoZSBy ZXN1bHQgYmFjayB0byB0aGUgYml0IGZpZWxkIGluIHRoZQo+ID4gKyAgOC1iaXQgcG9ydC4KPiA+ ICsKPiA+ICsgIFJlYWRzIHRoZSA4LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVj aWZpZWQgYnkgQWRkcmVzcywgcGVyZm9ybXMgYQo+ID4gKyAgYml0d2lzZSBBTkQgZm9sbG93ZWQg YnkgYSBiaXR3aXNlIE9SIGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFuZAo+ID4gKyAgdGhlIHZh bHVlIHNwZWNpZmllZCBieSBBbmREYXRhLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIDgt Yml0IFBDSQo+ID4gKyAgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVz cy4gVGhlIHZhbHVlIHdyaXR0ZW4gdG8gdGhlIFBDSQo+ID4gKyAgY29uZmlndXJhdGlvbiByZWdp c3RlciBpcyByZXR1cm5lZC4gVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQ Q0kKPiA+ICsgIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuIEV4dHJh IGxlZnQgYml0cyBpbiBib3RoIEFuZERhdGEgYW5kCj4gPiArICBPckRhdGEgYXJlIHN0cmlwcGVk Lgo+ID4gKwo+ID4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgIFRoZSBQQ0kgY29uZmlndXJhdGlv biByZWdpc3RlciB0byB3cml0ZS4KPiA+ICsgIEBwYXJhbVtpbl0gIFN0YXJ0Qml0ICBUaGUgb3Jk aW5hbCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQuCj4gPiAr ICAgICAgICAgICAgICAgICAgICBSYW5nZSAwLi43Lgo+ID4gKyAgQHBhcmFtW2luXSAgRW5kQml0 ICAgIFRoZSBvcmRpbmFsIG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZp ZWxkLgo+ID4gKyAgICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uNy4KPiA+ICsgIEBwYXJhbVtp bl0gIEFuZERhdGEgICBUaGUgdmFsdWUgdG8gQU5EIHdpdGggdGhlIFBDSSBjb25maWd1cmF0aW9u IHJlZ2lzdGVyLgo+ID4gKyAgQHBhcmFtW2luXSAgT3JEYXRhICAgIFRoZSB2YWx1ZSB0byBPUiB3 aXRoIHRoZSByZXN1bHQgb2YgdGhlIEFORCBvcGVyYXRpb24uCj4gPiArCj4gPiArICBAcmV0dXJu IFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVy Lgo+ID4gKwo+ID4gKyoqLwo+ID4gK1VJTlQ4Cj4gPiArRUZJQVBJCj4gPiArUGNpU2VnbWVudEJp dEZpZWxkQW5kVGhlbk9yOCAoCj4gPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgIEFk ZHJlc3MsCj4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFN0YXJ0Qml0LAo+ID4g KyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICBFbmRCaXQsCj4gPiArICBJTiBVSU5UOCAg ICAgICAgICAgICAgICAgICAgIEFuZERhdGEsCj4gPiArICBJTiBVSU5UOCAgICAgICAgICAgICAg ICAgICAgIE9yRGF0YQo+ID4gKyAgKQo+ID4gK3sKPiA+ICsgIHJldHVybiBQY2lTZWdtZW50V3Jp dGU4ICgKPiA+ICsgICAgICAgICAgIEFkZHJlc3MsCj4gPiArICAgICAgICAgICBCaXRGaWVsZEFu ZFRoZW5PcjggKFBjaVNlZ21lbnRSZWFkOCAoQWRkcmVzcyksIFN0YXJ0Qml0LCBFbmRCaXQsIEFu ZERhdGEsIE9yRGF0YSkKPiA+ICsgICAgICAgICAgICk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ ID4gKyAgUmVhZHMgYSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gPiArCj4g PiArICBSZWFkcyBhbmQgcmV0dXJucyB0aGUgMTYtYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lz dGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLgo+ID4gKyAgVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJh bnRlZSB0aGF0IGFsbCBQQ0kgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXpl ZC4KPiA+ICsKPiA+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFkZHJlc3MgYXJlIHNldCwg dGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1i aXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuCj4gPiArCj4gPiArICBAcGFyYW1baW5dICBBZGRy ZXNzICAgVGhlIGFkZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kgU2VnbWVudCwgQnVzLCBEZXZp Y2UsIEZ1bmN0aW9uLCBhbmQgUmVnaXN0ZXIuCj4gPiArCj4gPiArICBAcmV0dXJuIFRoZSAxNi1i aXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuCj4gPiAr Cj4gPiArKiovCj4gPiArVUlOVDE2Cj4gPiArRUZJQVBJCj4gPiArUGNpU2VnbWVudFJlYWQxNiAo Cj4gPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MKPiA+ICsgICkKPiA+ ICt7Cj4gPiArICBBU1NFUlRfSU5WQUxJRF9QQ0lfU0VHTUVOVF9BRERSRVNTIChBZGRyZXNzLCAx KTsKPiA+ICsKPiA+ICsgIHJldHVybiAoVUlOVDE2KSBQY2lTZWdtZW50TGliUmVhZFdvcmtlciAo QWRkcmVzcywgUGNpQ2ZnV2lkdGhVaW50MTYpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsg IFdyaXRlcyBhIDE2LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiA+ICsKPiA+ICsg IFdyaXRlcyB0aGUgMTYtYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBi eSBBZGRyZXNzIHdpdGggdGhlIHZhbHVlIHNwZWNpZmllZCBieSBWYWx1ZS4KPiA+ICsgIFZhbHVl IGlzIHJldHVybmVkLiAgVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kg cmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4KPiA+ICsKPiA+ICsgIElm IGFueSByZXNlcnZlZCBiaXRzIGluIEFkZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4KPiA+ ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4g QVNTRVJUKCkuCj4gPiArCj4gPiArICBAcGFyYW1baW5dICBBZGRyZXNzICAgICBUaGUgYWRkcmVz cyB0aGF0IGVuY29kZXMgdGhlIFBDSSBTZWdtZW50LCBCdXMsIERldmljZSwgRnVuY3Rpb24sIGFu ZCBSZWdpc3Rlci4KPiA+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgIFRoZSB2YWx1ZSB0byB3 cml0ZS4KPiA+ICsKPiA+ICsgIEByZXR1cm4gVGhlIHBhcmFtZXRlciBvZiBWYWx1ZS4KPiA+ICsK PiA+ICsqKi8KPiA+ICtVSU5UMTYKPiA+ICtFRklBUEkKPiA+ICtQY2lTZWdtZW50V3JpdGUxNiAo Cj4gPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsCj4gPiArICBJTiBV SU5UMTYgICAgICAgICAgICAgICAgICAgIFZhbHVlCj4gPiArICApCj4gPiArewo+ID4gKyAgQVNT RVJUX0lOVkFMSURfUENJX1NFR01FTlRfQUREUkVTUyAoQWRkcmVzcywgMSk7Cj4gPiArCj4gPiAr ICByZXR1cm4gKFVJTlQxNikgUGNpU2VnbWVudExpYldyaXRlV29ya2VyIChBZGRyZXNzLCBQY2lD ZmdXaWR0aFVpbnQxNiwgVmFsdWUpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgIFBlcmZv cm1zIGEgYml0d2lzZSBPUiBvZiBhIDE2LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciB3 aXRoCj4gPiArICBhIDE2LWJpdCB2YWx1ZS4KPiA+ICsKPiA+ICsgIFJlYWRzIHRoZSAxNi1iaXQg UENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MsIHBlcmZvcm1z IGEKPiA+ICsgIGJpdHdpc2UgT1IgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1 ZSBzcGVjaWZpZWQgYnkKPiA+ICsgIE9yRGF0YSwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRo ZSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKPiA+ICsgIHNwZWNpZmllZCBieSBB ZGRyZXNzLiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0 ZXIgaXMKPiA+ICsgIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQg YWxsIFBDSSByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zCj4gPiArICBhcmUgc2VyaWFsaXplZC4K PiA+ICsKPiA+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFkZHJlc3MgYXJlIHNldCwgdGhl biBBU1NFUlQoKS4KPiA+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQg Ym91bmRhcnksIHRoZW4gQVNTRVJUKCkuCj4gPiArCj4gPiArICBAcGFyYW1baW5dICBBZGRyZXNz IFRoZSBhZGRyZXNzIHRoYXQgZW5jb2RlcyB0aGUgUENJIFNlZ21lbnQsIEJ1cywgRGV2aWNlLCBG dW5jdGlvbiBhbmQKPiA+ICsgICAgICAgICAgICAgICAgICBSZWdpc3Rlci4KPiA+ICsgIEBwYXJh bVtpbl0gIE9yRGF0YSAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIFBDSSBjb25maWd1cmF0aW9u IHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRv IHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiA+ICsKPiA+ICsqKi8KPiA+ICtVSU5U MTYKPiA+ICtFRklBUEkKPiA+ICtQY2lTZWdtZW50T3IxNiAoCj4gPiArICBJTiBVSU5UNjQgICAg ICAgICAgICAgICAgICAgIEFkZHJlc3MsCj4gPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAg ICAgIE9yRGF0YQo+ID4gKyAgKQo+ID4gK3sKPiA+ICsgIHJldHVybiBQY2lTZWdtZW50V3JpdGUx NiAoQWRkcmVzcywgKFVJTlQxNikgKFBjaVNlZ21lbnRSZWFkMTYgKEFkZHJlc3MpIHwgT3JEYXRh KSk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBv ZiBhIDE2LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciB3aXRoIGEgMTYtYml0IHZhbHVl Lgo+ID4gKwo+ID4gKyAgUmVhZHMgdGhlIDE2LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rl ciBzcGVjaWZpZWQgYnkgQWRkcmVzcywKPiA+ICsgIHBlcmZvcm1zIGEgYml0d2lzZSBBTkQgYmV0 d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgQW5kRGF0YSwK PiA+ICsgIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgMTYtYml0IFBDSSBjb25maWd1cmF0 aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLgo+ID4gKyAgVGhlIHZhbHVlIHdyaXR0 ZW4gdG8gdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGlzIHJldHVybmVkLgo+ID4gKyAg VGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kgcmVhZCBhbmQgd3JpdGUg b3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4KPiA+ICsKPiA+ICsgIElmIGFueSByZXNlcnZlZCBi aXRzIGluIEFkZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmIEFkZHJlc3Mg aXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuCj4gPiAr Cj4gPiArICBAcGFyYW1baW5dICBBZGRyZXNzICAgVGhlIGFkZHJlc3MgdGhhdCBlbmNvZGVzIHRo ZSBQQ0kgU2VnbWVudCwgQnVzLCBEZXZpY2UsIEZ1bmN0aW9uLCBhbmQgUmVnaXN0ZXIuCj4gPiAr ICBAcGFyYW1baW5dICBBbmREYXRhICAgVGhlIHZhbHVlIHRvIEFORCB3aXRoIHRoZSBQQ0kgY29u ZmlndXJhdGlvbiByZWdpc3Rlci4KPiA+ICsKPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0 ZW4gdG8gdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyoqLwo+ID4g K1VJTlQxNgo+ID4gK0VGSUFQSQo+ID4gK1BjaVNlZ21lbnRBbmQxNiAoCj4gPiArICBJTiBVSU5U NjQgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsCj4gPiArICBJTiBVSU5UMTYgICAgICAgICAg ICAgICAgICAgIEFuZERhdGEKPiA+ICsgICkKPiA+ICt7Cj4gPiArICByZXR1cm4gUGNpU2VnbWVu dFdyaXRlMTYgKEFkZHJlc3MsIChVSU5UMTYpIChQY2lTZWdtZW50UmVhZDE2IChBZGRyZXNzKSAm IEFuZERhdGEpKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICBQZXJmb3JtcyBhIGJpdHdp c2UgQU5EIG9mIGEgMTYtYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHdpdGggYSAxNi1i aXQgdmFsdWUsCj4gPiArICBmb2xsb3dlZCBhICBiaXR3aXNlIE9SIHdpdGggYW5vdGhlciAxNi1i aXQgdmFsdWUuCj4gPiArCj4gPiArICBSZWFkcyB0aGUgMTYtYml0IFBDSSBjb25maWd1cmF0aW9u IHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLAo+ID4gKyAgcGVyZm9ybXMgYSBiaXR3aXNl IEFORCBiZXR3ZWVuIHRoZSByZWFkIHJlc3VsdCBhbmQgdGhlIHZhbHVlIHNwZWNpZmllZCBieSBB bmREYXRhLAo+ID4gKyAgcGVyZm9ybXMgYSBiaXR3aXNlIE9SIGJldHdlZW4gdGhlIHJlc3VsdCBv ZiB0aGUgQU5EIG9wZXJhdGlvbiBhbmQgdGhlIHZhbHVlIHNwZWNpZmllZCBieSBPckRhdGEsCj4g PiArICBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIDE2LWJpdCBQQ0kgY29uZmlndXJhdGlv biByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4KPiA+ICsgIFRoZSB2YWx1ZSB3cml0dGVu IHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBpcyByZXR1cm5lZC4KPiA+ICsgIFRo aXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgUENJIHJlYWQgYW5kIHdyaXRlIG9w ZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuCj4gPiArCj4gPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0 cyBpbiBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBBZGRyZXNzIGlz IG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLgo+ID4gKwo+ ID4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgIFRoZSBhZGRyZXNzIHRoYXQgZW5jb2RlcyB0aGUg UENJIFNlZ21lbnQsIEJ1cywgRGV2aWNlLCBGdW5jdGlvbiwgYW5kIFJlZ2lzdGVyLgo+ID4gKyAg QHBhcmFtW2luXSAgQW5kRGF0YSAgIFRoZSB2YWx1ZSB0byBBTkQgd2l0aCB0aGUgUENJIGNvbmZp Z3VyYXRpb24gcmVnaXN0ZXIuCj4gPiArICBAcGFyYW1baW5dICBPckRhdGEgICAgVGhlIHZhbHVl IHRvIE9SIHdpdGggdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyAg QHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0 ZXIuCj4gPiArCj4gPiArKiovCj4gPiArVUlOVDE2Cj4gPiArRUZJQVBJCj4gPiArUGNpU2VnbWVu dEFuZFRoZW5PcjE2ICgKPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgQWRkcmVz cywKPiA+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgQW5kRGF0YSwKPiA+ICsgIElO IFVJTlQxNiAgICAgICAgICAgICAgICAgICAgT3JEYXRhCj4gPiArICApCj4gPiArewo+ID4gKyAg cmV0dXJuIFBjaVNlZ21lbnRXcml0ZTE2IChBZGRyZXNzLCAoVUlOVDE2KSAoKFBjaVNlZ21lbnRS ZWFkMTYgKEFkZHJlc3MpICYgQW5kRGF0YSkgfCBPckRhdGEpKTsKPiA+ICt9Cj4gPiArCj4gPiAr LyoqCj4gPiArICBSZWFkcyBhIGJpdCBmaWVsZCBvZiBhIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lz dGVyLgo+ID4gKwo+ID4gKyAgUmVhZHMgdGhlIGJpdCBmaWVsZCBpbiBhIDE2LWJpdCBQQ0kgY29u ZmlndXJhdGlvbiByZWdpc3Rlci4gVGhlIGJpdCBmaWVsZCBpcwo+ID4gKyAgc3BlY2lmaWVkIGJ5 IHRoZSBTdGFydEJpdCBhbmQgdGhlIEVuZEJpdC4gVGhlIHZhbHVlIG9mIHRoZSBiaXQgZmllbGQg aXMKPiA+ICsgIHJldHVybmVkLgo+ID4gKwo+ID4gKyAgSWYgYW55IHJlc2VydmVkIGJpdHMgaW4g QWRkcmVzcyBhcmUgc2V0LCB0aGVuIEFTU0VSVCgpLgo+ID4gKyAgSWYgQWRkcmVzcyBpcyBub3Qg YWxpZ25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmIFN0 YXJ0Qml0IGlzIGdyZWF0ZXIgdGhhbiAxNSwgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmIEVuZEJp dCBpcyBncmVhdGVyIHRoYW4gMTUsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBFbmRCaXQgaXMg bGVzcyB0aGFuIFN0YXJ0Qml0LCB0aGVuIEFTU0VSVCgpLgo+ID4gKwo+ID4gKyAgQHBhcmFtW2lu XSAgQWRkcmVzcyAgIFRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciB0byByZWFkLgo+ID4g KyAgQHBhcmFtW2luXSAgU3RhcnRCaXQgIFRoZSBvcmRpbmFsIG9mIHRoZSBsZWFzdCBzaWduaWZp Y2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4KPiA+ICsgICAgICAgICAgICAgICAgICAgIFJhbmdl IDAuLjE1Lgo+ID4gKyAgQHBhcmFtW2luXSAgRW5kQml0ICAgIFRoZSBvcmRpbmFsIG9mIHRoZSBt b3N0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLgo+ID4gKyAgICAgICAgICAgICAg ICAgICAgUmFuZ2UgMC4uMTUuCj4gPiArCj4gPiArICBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUg Yml0IGZpZWxkIHJlYWQgZnJvbSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gPiAr Cj4gPiArKiovCj4gPiArVUlOVDE2Cj4gPiArRUZJQVBJCj4gPiArUGNpU2VnbWVudEJpdEZpZWxk UmVhZDE2ICgKPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywKPiA+ ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgU3RhcnRCaXQsCj4gPiArICBJTiBVSU5U TiAgICAgICAgICAgICAgICAgICAgIEVuZEJpdAo+ID4gKyAgKQo+ID4gK3sKPiA+ICsgIHJldHVy biBCaXRGaWVsZFJlYWQxNiAoUGNpU2VnbWVudFJlYWQxNiAoQWRkcmVzcyksIFN0YXJ0Qml0LCBF bmRCaXQpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgIFdyaXRlcyBhIGJpdCBmaWVsZCB0 byBhIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyAgV3JpdGVzIFZhbHVl IHRvIHRoZSBiaXQgZmllbGQgb2YgdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiBUaGUg Yml0Cj4gPiArICBmaWVsZCBpcyBzcGVjaWZpZWQgYnkgdGhlIFN0YXJ0Qml0IGFuZCB0aGUgRW5k Qml0LiBBbGwgb3RoZXIgYml0cyBpbiB0aGUKPiA+ICsgIGRlc3RpbmF0aW9uIFBDSSBjb25maWd1 cmF0aW9uIHJlZ2lzdGVyIGFyZSBwcmVzZXJ2ZWQuIFRoZSBuZXcgdmFsdWUgb2YgdGhlCj4gPiAr ICAxNi1iaXQgcmVnaXN0ZXIgaXMgcmV0dXJuZWQuCj4gPiArCj4gPiArICBJZiBhbnkgcmVzZXJ2 ZWQgYml0cyBpbiBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBBZGRy ZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLgo+ ID4gKyAgSWYgU3RhcnRCaXQgaXMgZ3JlYXRlciB0aGFuIDE1LCB0aGVuIEFTU0VSVCgpLgo+ID4g KyAgSWYgRW5kQml0IGlzIGdyZWF0ZXIgdGhhbiAxNSwgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElm IEVuZEJpdCBpcyBsZXNzIHRoYW4gU3RhcnRCaXQsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBW YWx1ZSBpcyBsYXJnZXIgdGhhbiB0aGUgYml0bWFzayB2YWx1ZSByYW5nZSBzcGVjaWZpZWQgYnkg U3RhcnRCaXQgYW5kIEVuZEJpdCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsKPiA+ICsgIEBwYXJhbVtp bl0gIEFkZHJlc3MgICBUaGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdG8gd3JpdGUuCj4g PiArICBAcGFyYW1baW5dICBTdGFydEJpdCAgVGhlIG9yZGluYWwgb2YgdGhlIGxlYXN0IHNpZ25p ZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLgo+ID4gKyAgICAgICAgICAgICAgICAgICAgUmFu Z2UgMC4uMTUuCj4gPiArICBAcGFyYW1baW5dICBFbmRCaXQgICAgVGhlIG9yZGluYWwgb2YgdGhl IG1vc3Qgc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQuCj4gPiArICAgICAgICAgICAg ICAgICAgICBSYW5nZSAwLi4xNS4KPiA+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICBUaGUgbmV3 IHZhbHVlIG9mIHRoZSBiaXQgZmllbGQuCj4gPiArCj4gPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3 cml0dGVuIGJhY2sgdG8gdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ID4gKwo+ID4g KyoqLwo+ID4gK1VJTlQxNgo+ID4gK0VGSUFQSQo+ID4gK1BjaVNlZ21lbnRCaXRGaWVsZFdyaXRl MTYgKAo+ID4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLAo+ID4gKyAg SU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICBTdGFydEJpdCwKPiA+ICsgIElOIFVJTlROICAg ICAgICAgICAgICAgICAgICAgRW5kQml0LAo+ID4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAg ICAgICBWYWx1ZQo+ID4gKyAgKQo+ID4gK3sKPiA+ICsgIHJldHVybiBQY2lTZWdtZW50V3JpdGUx NiAoCj4gPiArICAgICAgICAgICBBZGRyZXNzLAo+ID4gKyAgICAgICAgICAgQml0RmllbGRXcml0 ZTE2IChQY2lTZWdtZW50UmVhZDE2IChBZGRyZXNzKSwgU3RhcnRCaXQsIEVuZEJpdCwgVmFsdWUp Cj4gPiArICAgICAgICAgICApOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgIFJlYWRzIHRo ZSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3Ms Cj4gPiArICBwZXJmb3JtcyBhIGJpdHdpc2UgT1IgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5k IHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgT3JEYXRhLAo+ID4gKyAgYW5kIHdyaXRlcyB0aGUgcmVz dWx0IHRvIHRoZSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5 IEFkZHJlc3MuCj4gPiArCj4gPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0cyBpbiBBZGRyZXNzIGFy ZSBzZXQsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9u IGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLgo+ID4gKyAgSWYgU3RhcnRCaXQgaXMg Z3JlYXRlciB0aGFuIDE1LCB0aGVuIEFTU0VSVCgpLgo+ID4gKyAgSWYgRW5kQml0IGlzIGdyZWF0 ZXIgdGhhbiAxNSwgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmIEVuZEJpdCBpcyBsZXNzIHRoYW4g U3RhcnRCaXQsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBPckRhdGEgaXMgbGFyZ2VyIHRoYW4g dGhlIGJpdG1hc2sgdmFsdWUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IFN0YXJ0Qml0IGFuZCBFbmRCaXQs IHRoZW4gQVNTRVJUKCkuCj4gPiArCj4gPiArICBAcGFyYW1baW5dICBBZGRyZXNzICAgVGhlIFBD SSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHRvIHdyaXRlLgo+ID4gKyAgQHBhcmFtW2luXSAgU3Rh cnRCaXQgIFRoZSBvcmRpbmFsIG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJp dCBmaWVsZC4KPiA+ICsgICAgICAgICAgICAgICAgICAgIFJhbmdlIDAuLjE1Lgo+ID4gKyAgQHBh cmFtW2luXSAgRW5kQml0ICAgIFRoZSBvcmRpbmFsIG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJp dCBpbiB0aGUgYml0IGZpZWxkLgo+ID4gKyAgICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uMTUu Cj4gPiArICBAcGFyYW1baW5dICBPckRhdGEgICAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIFBD SSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUg d3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiA+ICsKPiA+ ICsqKi8KPiA+ICtVSU5UMTYKPiA+ICtFRklBUEkKPiA+ICtQY2lTZWdtZW50Qml0RmllbGRPcjE2 ICgKPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywKPiA+ICsgIElO IFVJTlROICAgICAgICAgICAgICAgICAgICAgU3RhcnRCaXQsCj4gPiArICBJTiBVSU5UTiAgICAg ICAgICAgICAgICAgICAgIEVuZEJpdCwKPiA+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAg ICAgT3JEYXRhCj4gPiArICApCj4gPiArewo+ID4gKyAgcmV0dXJuIFBjaVNlZ21lbnRXcml0ZTE2 ICgKPiA+ICsgICAgICAgICAgIEFkZHJlc3MsCj4gPiArICAgICAgICAgICBCaXRGaWVsZE9yMTYg KFBjaVNlZ21lbnRSZWFkMTYgKEFkZHJlc3MpLCBTdGFydEJpdCwgRW5kQml0LCBPckRhdGEpCj4g PiArICAgICAgICAgICApOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgIFJlYWRzIGEgYml0 IGZpZWxkIGluIGEgMTYtYml0IFBDSSBjb25maWd1cmF0aW9uLCBwZXJmb3JtcyBhIGJpdHdpc2Ug T1IsCj4gPiArICBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byB0aGUgYml0IGZpZWxkIGlu IHRoZSAxNi1iaXQgcG9ydC4KPiA+ICsKPiA+ICsgIFJlYWRzIHRoZSAxNi1iaXQgUENJIGNvbmZp Z3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MsCj4gPiArICBwZXJmb3JtcyBh IGJpdHdpc2UgT1IgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1ZSBzcGVjaWZp ZWQgYnkgT3JEYXRhLAo+ID4gKyAgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSAxNi1iaXQg UENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuCj4gPiArICBU aGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaXMgcmV0 dXJuZWQuCj4gPiArICBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFBDSSBy ZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLgo+ID4gKyAgRXh0cmEgbGVm dCBiaXRzIGluIE9yRGF0YSBhcmUgc3RyaXBwZWQuCj4gPiArCj4gPiArICBJZiBhbnkgcmVzZXJ2 ZWQgYml0cyBpbiBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBBZGRy ZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLgo+ ID4gKyAgSWYgU3RhcnRCaXQgaXMgZ3JlYXRlciB0aGFuIDcsIHRoZW4gQVNTRVJUKCkuCj4gPiAr ICBJZiBFbmRCaXQgaXMgZ3JlYXRlciB0aGFuIDcsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBF bmRCaXQgaXMgbGVzcyB0aGFuIFN0YXJ0Qml0LCB0aGVuIEFTU0VSVCgpLgo+ID4gKyAgSWYgQW5k RGF0YSBpcyBsYXJnZXIgdGhhbiB0aGUgYml0bWFzayB2YWx1ZSByYW5nZSBzcGVjaWZpZWQgYnkg U3RhcnRCaXQgYW5kIEVuZEJpdCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsKPiA+ICsgIEBwYXJhbVtp bl0gIEFkZHJlc3MgICBUaGUgYWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBTZWdtZW50LCBC dXMsIERldmljZSwgRnVuY3Rpb24sIGFuZCBSZWdpc3Rlci4KPiA+ICsgIEBwYXJhbVtpbl0gIFN0 YXJ0Qml0ICBUaGUgb3JkaW5hbCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGluIHRoZSBi aXQgZmllbGQuCj4gPiArICAgICAgICAgICAgICAgICAgICBUaGUgb3JkaW5hbCBvZiB0aGUgbGVh c3Qgc2lnbmlmaWNhbnQgYml0IGluIGEgYnl0ZSBpcyBiaXQgMC4KPiA+ICsgIEBwYXJhbVtpbl0g IEVuZEJpdCAgICBUaGUgb3JkaW5hbCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gdGhl IGJpdCBmaWVsZC4KPiA+ICsgICAgICAgICAgICAgICAgICAgIFRoZSBvcmRpbmFsIG9mIHRoZSBt b3N0IHNpZ25pZmljYW50IGJpdCBpbiBhIGJ5dGUgaXMgYml0IDcuCj4gPiArICBAcGFyYW1baW5d ICBBbmREYXRhICAgVGhlIHZhbHVlIHRvIEFORCB3aXRoIHRoZSByZWFkIHZhbHVlIGZyb20gdGhl IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyAgQHJldHVybiBUaGUgdmFs dWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gPiArCj4gPiAr KiovCj4gPiArVUlOVDE2Cj4gPiArRUZJQVBJCj4gPiArUGNpU2VnbWVudEJpdEZpZWxkQW5kMTYg KAo+ID4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLAo+ID4gKyAgSU4g VUlOVE4gICAgICAgICAgICAgICAgICAgICBTdGFydEJpdCwKPiA+ICsgIElOIFVJTlROICAgICAg ICAgICAgICAgICAgICAgRW5kQml0LAo+ID4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAg ICBBbmREYXRhCj4gPiArICApCj4gPiArewo+ID4gKyAgcmV0dXJuIFBjaVNlZ21lbnRXcml0ZTE2 ICgKPiA+ICsgICAgICAgICAgIEFkZHJlc3MsCj4gPiArICAgICAgICAgICBCaXRGaWVsZEFuZDE2 IChQY2lTZWdtZW50UmVhZDE2IChBZGRyZXNzKSwgU3RhcnRCaXQsIEVuZEJpdCwgQW5kRGF0YSkK PiA+ICsgICAgICAgICAgICk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAgUmVhZHMgYSBi aXQgZmllbGQgaW4gYSAxNi1iaXQgcG9ydCwgcGVyZm9ybXMgYSBiaXR3aXNlIEFORCBmb2xsb3dl ZCBieSBhCj4gPiArICBiaXR3aXNlIE9SLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byB0 aGUgYml0IGZpZWxkIGluIHRoZQo+ID4gKyAgMTYtYml0IHBvcnQuCj4gPiArCj4gPiArICBSZWFk cyB0aGUgMTYtYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRy ZXNzLCBwZXJmb3JtcyBhCj4gPiArICBiaXR3aXNlIEFORCBmb2xsb3dlZCBieSBhIGJpdHdpc2Ug T1IgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kCj4gPiArICB0aGUgdmFsdWUgc3BlY2lmaWVk IGJ5IEFuZERhdGEsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgMTYtYml0IFBDSQo+ID4g KyAgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4gVGhlIHZhbHVl IHdyaXR0ZW4gdG8gdGhlIFBDSQo+ID4gKyAgY29uZmlndXJhdGlvbiByZWdpc3RlciBpcyByZXR1 cm5lZC4gVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kKPiA+ICsgIHJl YWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuIEV4dHJhIGxlZnQgYml0cyBp biBib3RoIEFuZERhdGEgYW5kCj4gPiArICBPckRhdGEgYXJlIHN0cmlwcGVkLgo+ID4gKwo+ID4g KyAgSWYgYW55IHJlc2VydmVkIGJpdHMgaW4gQWRkcmVzcyBhcmUgc2V0LCB0aGVuIEFTU0VSVCgp Lgo+ID4gKyAgSWYgU3RhcnRCaXQgaXMgZ3JlYXRlciB0aGFuIDE1LCB0aGVuIEFTU0VSVCgpLgo+ ID4gKyAgSWYgRW5kQml0IGlzIGdyZWF0ZXIgdGhhbiAxNSwgdGhlbiBBU1NFUlQoKS4KPiA+ICsg IElmIEVuZEJpdCBpcyBsZXNzIHRoYW4gU3RhcnRCaXQsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJ ZiBBbmREYXRhIGlzIGxhcmdlciB0aGFuIHRoZSBiaXRtYXNrIHZhbHVlIHJhbmdlIHNwZWNpZmll ZCBieSBTdGFydEJpdCBhbmQgRW5kQml0LCB0aGVuIEFTU0VSVCgpLgo+ID4gKyAgSWYgT3JEYXRh IGlzIGxhcmdlciB0aGFuIHRoZSBiaXRtYXNrIHZhbHVlIHJhbmdlIHNwZWNpZmllZCBieSBTdGFy dEJpdCBhbmQgRW5kQml0LCB0aGVuIEFTU0VSVCgpLgo+ID4gKwo+ID4gKyAgQHBhcmFtW2luXSAg QWRkcmVzcyAgIFRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciB0byB3cml0ZS4KPiA+ICsg IEBwYXJhbVtpbl0gIFN0YXJ0Qml0ICBUaGUgb3JkaW5hbCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNh bnQgYml0IGluIHRoZSBiaXQgZmllbGQuCj4gPiArICAgICAgICAgICAgICAgICAgICBSYW5nZSAw Li4xNS4KPiA+ICsgIEBwYXJhbVtpbl0gIEVuZEJpdCAgICBUaGUgb3JkaW5hbCBvZiB0aGUgbW9z dCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4KPiA+ICsgICAgICAgICAgICAgICAg ICAgIFJhbmdlIDAuLjE1Lgo+ID4gKyAgQHBhcmFtW2luXSAgQW5kRGF0YSAgIFRoZSB2YWx1ZSB0 byBBTkQgd2l0aCB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gPiArICBAcGFyYW1b aW5dICBPckRhdGEgICAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgQU5E IG9wZXJhdGlvbi4KPiA+ICsKPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gYmFjayB0 byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gPiArCj4gPiArKiovCj4gPiArVUlO VDE2Cj4gPiArRUZJQVBJCj4gPiArUGNpU2VnbWVudEJpdEZpZWxkQW5kVGhlbk9yMTYgKAo+ID4g KyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLAo+ID4gKyAgSU4gVUlOVE4g ICAgICAgICAgICAgICAgICAgICBTdGFydEJpdCwKPiA+ICsgIElOIFVJTlROICAgICAgICAgICAg ICAgICAgICAgRW5kQml0LAo+ID4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICBBbmRE YXRhLAo+ID4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICBPckRhdGEKPiA+ICsgICkK PiA+ICt7Cj4gPiArICByZXR1cm4gUGNpU2VnbWVudFdyaXRlMTYgKAo+ID4gKyAgICAgICAgICAg QWRkcmVzcywKPiA+ICsgICAgICAgICAgIEJpdEZpZWxkQW5kVGhlbk9yMTYgKFBjaVNlZ21lbnRS ZWFkMTYgKEFkZHJlc3MpLCBTdGFydEJpdCwgRW5kQml0LCBBbmREYXRhLCBPckRhdGEpCj4gPiAr ICAgICAgICAgICApOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgIFJlYWRzIGEgMzItYml0 IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyAgUmVhZHMgYW5kIHJldHVy bnMgdGhlIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRk cmVzcy4KPiA+ICsgIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgUENJIHJl YWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuCj4gPiArCj4gPiArICBJZiBh bnkgcmVzZXJ2ZWQgYml0cyBpbiBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCkuCj4gPiAr ICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5LCB0aGVuIEFT U0VSVCgpLgo+ID4gKwo+ID4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgIFRoZSBhZGRyZXNzIHRo YXQgZW5jb2RlcyB0aGUgUENJIFNlZ21lbnQsIEJ1cywgRGV2aWNlLCBGdW5jdGlvbiwKPiA+ICsg ICAgICAgICAgICAgICAgICAgIGFuZCBSZWdpc3Rlci4KPiA+ICsKPiA+ICsgIEByZXR1cm4gVGhl IDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4K PiA+ICsKPiA+ICsqKi8KPiA+ICtVSU5UMzIKPiA+ICtFRklBUEkKPiA+ICtQY2lTZWdtZW50UmVh ZDMyICgKPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgQWRkcmVzcwo+ID4gKyAg KQo+ID4gK3sKPiA+ICsgIEFTU0VSVF9JTlZBTElEX1BDSV9TRUdNRU5UX0FERFJFU1MgKEFkZHJl c3MsIDMpOwo+ID4gKwo+ID4gKyAgcmV0dXJuIFBjaVNlZ21lbnRMaWJSZWFkV29ya2VyIChBZGRy ZXNzLCBQY2lDZmdXaWR0aFVpbnQzMik7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAgV3Jp dGVzIGEgMzItYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyAgV3Jp dGVzIHRoZSAzMi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFk ZHJlc3Mgd2l0aCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IFZhbHVlLgo+ID4gKyAgVmFsdWUgaXMg cmV0dXJuZWQuICBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFBDSSByZWFk IGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLgo+ID4gKwo+ID4gKyAgSWYgYW55 IHJlc2VydmVkIGJpdHMgaW4gQWRkcmVzcyBhcmUgc2V0LCB0aGVuIEFTU0VSVCgpLgo+ID4gKyAg SWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeSwgdGhlbiBBU1NF UlQoKS4KPiA+ICsKPiA+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICAgIFRoZSBhZGRyZXNzIHRo YXQgZW5jb2RlcyB0aGUgUENJIFNlZ21lbnQsIEJ1cywgRGV2aWNlLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICBGdW5jdGlvbiwgYW5kIFJlZ2lzdGVyLgo+ID4gKyAgQHBhcmFtW2luXSAgVmFs dWUgICAgICAgVGhlIHZhbHVlIHRvIHdyaXRlLgo+ID4gKwo+ID4gKyAgQHJldHVybiBUaGUgcGFy YW1ldGVyIG9mIFZhbHVlLgo+ID4gKwo+ID4gKyoqLwo+ID4gK1VJTlQzMgo+ID4gK0VGSUFQSQo+ ID4gK1BjaVNlZ21lbnRXcml0ZTMyICgKPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAg ICAgQWRkcmVzcywKPiA+ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgVmFsdWUKPiA+ ICsgICkKPiA+ICt7Cj4gPiArICBBU1NFUlRfSU5WQUxJRF9QQ0lfU0VHTUVOVF9BRERSRVNTIChB ZGRyZXNzLCAzKTsKPiA+ICsKPiA+ICsgIHJldHVybiBQY2lTZWdtZW50TGliV3JpdGVXb3JrZXIg KEFkZHJlc3MsIFBjaUNmZ1dpZHRoVWludDMyLCBWYWx1ZSk7Cj4gPiArfQo+ID4gKwo+ID4gKy8q Kgo+ID4gKyAgUGVyZm9ybXMgYSBiaXR3aXNlIE9SIG9mIGEgMzItYml0IFBDSSBjb25maWd1cmF0 aW9uIHJlZ2lzdGVyIHdpdGggYSAzMi1iaXQgdmFsdWUuCj4gPiArCj4gPiArICBSZWFkcyB0aGUg MzItYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLAo+ ID4gKyAgcGVyZm9ybXMgYSBiaXR3aXNlIE9SIGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFuZCB0 aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IE9yRGF0YSwKPiA+ICsgIGFuZCB3cml0ZXMgdGhlIHJlc3Vs dCB0byB0aGUgMzItYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBB ZGRyZXNzLgo+ID4gKyAgVGhlIHZhbHVlIHdyaXR0ZW4gdG8gdGhlIFBDSSBjb25maWd1cmF0aW9u IHJlZ2lzdGVyIGlzIHJldHVybmVkLgo+ID4gKyAgVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRl ZSB0aGF0IGFsbCBQQ0kgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4K PiA+ICsKPiA+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFkZHJlc3MgYXJlIHNldCwgdGhl biBBU1NFUlQoKS4KPiA+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAzMi1iaXQg Ym91bmRhcnksIHRoZW4gQVNTRVJUKCkuCj4gPiArCj4gPiArICBAcGFyYW1baW5dICBBZGRyZXNz ICAgVGhlIGFkZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kgU2VnbWVudCwgQnVzLCBEZXZpY2Us IEZ1bmN0aW9uLCBhbmQgUmVnaXN0ZXIuCj4gPiArICBAcGFyYW1baW5dICBPckRhdGEgICAgVGhl IHZhbHVlIHRvIE9SIHdpdGggdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ID4gKwo+ ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24g cmVnaXN0ZXIuCj4gPiArCj4gPiArKiovCj4gPiArVUlOVDMyCj4gPiArRUZJQVBJCj4gPiArUGNp U2VnbWVudE9yMzIgKAo+ID4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICBBZGRyZXNz LAo+ID4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICBPckRhdGEKPiA+ICsgICkKPiA+ ICt7Cj4gPiArICByZXR1cm4gUGNpU2VnbWVudFdyaXRlMzIgKEFkZHJlc3MsIFBjaVNlZ21lbnRS ZWFkMzIgKEFkZHJlc3MpIHwgT3JEYXRhKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICBQ ZXJmb3JtcyBhIGJpdHdpc2UgQU5EIG9mIGEgMzItYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lz dGVyIHdpdGggYSAzMi1iaXQgdmFsdWUuCj4gPiArCj4gPiArICBSZWFkcyB0aGUgMzItYml0IFBD SSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLAo+ID4gKyAgcGVy Zm9ybXMgYSBiaXR3aXNlIEFORCBiZXR3ZWVuIHRoZSByZWFkIHJlc3VsdCBhbmQgdGhlIHZhbHVl IHNwZWNpZmllZCBieSBBbmREYXRhLAo+ID4gKyAgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRo ZSAzMi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3Mu Cj4gPiArICBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0 ZXIgaXMgcmV0dXJuZWQuCj4gPiArICBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQg YWxsIFBDSSByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLgo+ID4gKwo+ ID4gKyAgSWYgYW55IHJlc2VydmVkIGJpdHMgaW4gQWRkcmVzcyBhcmUgc2V0LCB0aGVuIEFTU0VS VCgpLgo+ID4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFy eSwgdGhlbiBBU1NFUlQoKS4KPiA+ICsKPiA+ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICBUaGUg YWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBTZWdtZW50LCBCdXMsIERldmljZSwgRnVuY3Rp b24sCj4gPiArICAgICAgICAgICAgICAgICAgICBhbmQgUmVnaXN0ZXIuCj4gPiArICBAcGFyYW1b aW5dICBBbmREYXRhICAgVGhlIHZhbHVlIHRvIEFORCB3aXRoIHRoZSBQQ0kgY29uZmlndXJhdGlv biByZWdpc3Rlci4KPiA+ICsKPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gdG8gdGhl IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ID4gKwo+ID4gKyoqLwo+ID4gK1VJTlQzMgo+ ID4gK0VGSUFQSQo+ID4gK1BjaVNlZ21lbnRBbmQzMiAoCj4gPiArICBJTiBVSU5UNjQgICAgICAg ICAgICAgICAgICAgIEFkZHJlc3MsCj4gPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAg IEFuZERhdGEKPiA+ICsgICkKPiA+ICt7Cj4gPiArICByZXR1cm4gUGNpU2VnbWVudFdyaXRlMzIg KEFkZHJlc3MsIFBjaVNlZ21lbnRSZWFkMzIgKEFkZHJlc3MpICYgQW5kRGF0YSk7Cj4gPiArfQo+ ID4gKwo+ID4gKy8qKgo+ID4gKyAgUGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvZiBhIDMyLWJpdCBQ Q0kgY29uZmlndXJhdGlvbiByZWdpc3RlciB3aXRoIGEgMzItYml0IHZhbHVlLAo+ID4gKyAgZm9s bG93ZWQgYSAgYml0d2lzZSBPUiB3aXRoIGFub3RoZXIgMzItYml0IHZhbHVlLgo+ID4gKwo+ID4g KyAgUmVhZHMgdGhlIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQg YnkgQWRkcmVzcywKPiA+ICsgIHBlcmZvcm1zIGEgYml0d2lzZSBBTkQgYmV0d2VlbiB0aGUgcmVh ZCByZXN1bHQgYW5kIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgQW5kRGF0YSwKPiA+ICsgIHBlcmZv cm1zIGEgYml0d2lzZSBPUiBiZXR3ZWVuIHRoZSByZXN1bHQgb2YgdGhlIEFORCBvcGVyYXRpb24g YW5kIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgT3JEYXRhLAo+ID4gKyAgYW5kIHdyaXRlcyB0aGUg cmVzdWx0IHRvIHRoZSAzMi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVk IGJ5IEFkZHJlc3MuCj4gPiArICBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3Vy YXRpb24gcmVnaXN0ZXIgaXMgcmV0dXJuZWQuCj4gPiArICBUaGlzIGZ1bmN0aW9uIG11c3QgZ3Vh cmFudGVlIHRoYXQgYWxsIFBDSSByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxp emVkLgo+ID4gKwo+ID4gKyAgSWYgYW55IHJlc2VydmVkIGJpdHMgaW4gQWRkcmVzcyBhcmUgc2V0 LCB0aGVuIEFTU0VSVCgpLgo+ID4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDMy LWJpdCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4KPiA+ICsKPiA+ICsgIEBwYXJhbVtpbl0gIEFk ZHJlc3MgICBUaGUgYWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBTZWdtZW50LCBCdXMsIERl dmljZSwgRnVuY3Rpb24sCj4gPiArICAgICAgICAgICAgICAgICAgICBhbmQgUmVnaXN0ZXIuCj4g PiArICBAcGFyYW1baW5dICBBbmREYXRhICAgVGhlIHZhbHVlIHRvIEFORCB3aXRoIHRoZSBQQ0kg Y29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiA+ICsgIEBwYXJhbVtpbl0gIE9yRGF0YSAgICBUaGUg dmFsdWUgdG8gT1Igd2l0aCB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gPiArCj4g PiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBy ZWdpc3Rlci4KPiA+ICsKPiA+ICsqKi8KPiA+ICtVSU5UMzIKPiA+ICtFRklBUEkKPiA+ICtQY2lT ZWdtZW50QW5kVGhlbk9yMzIgKAo+ID4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICBB ZGRyZXNzLAo+ID4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICBBbmREYXRhLAo+ID4g KyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICBPckRhdGEKPiA+ICsgICkKPiA+ICt7Cj4g PiArICByZXR1cm4gUGNpU2VnbWVudFdyaXRlMzIgKEFkZHJlc3MsIChQY2lTZWdtZW50UmVhZDMy IChBZGRyZXNzKSAmIEFuZERhdGEpIHwgT3JEYXRhKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4g PiArICBSZWFkcyBhIGJpdCBmaWVsZCBvZiBhIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgo+ ID4gKwo+ID4gKyAgUmVhZHMgdGhlIGJpdCBmaWVsZCBpbiBhIDMyLWJpdCBQQ0kgY29uZmlndXJh dGlvbiByZWdpc3Rlci4gVGhlIGJpdCBmaWVsZCBpcwo+ID4gKyAgc3BlY2lmaWVkIGJ5IHRoZSBT dGFydEJpdCBhbmQgdGhlIEVuZEJpdC4gVGhlIHZhbHVlIG9mIHRoZSBiaXQgZmllbGQgaXMgcmV0 dXJuZWQuCj4gPiArCj4gPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0cyBpbiBBZGRyZXNzIGFyZSBz ZXQsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEg MzItYml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLgo+ID4gKyAgSWYgU3RhcnRCaXQgaXMgZ3Jl YXRlciB0aGFuIDMxLCB0aGVuIEFTU0VSVCgpLgo+ID4gKyAgSWYgRW5kQml0IGlzIGdyZWF0ZXIg dGhhbiAzMSwgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmIEVuZEJpdCBpcyBsZXNzIHRoYW4gU3Rh cnRCaXQsIHRoZW4gQVNTRVJUKCkuCj4gPiArCj4gPiArICBAcGFyYW1baW5dICBBZGRyZXNzICAg VGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHRvIHJlYWQuCj4gPiArICBAcGFyYW1baW5d ICBTdGFydEJpdCAgVGhlIG9yZGluYWwgb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBpbiB0 aGUgYml0IGZpZWxkLgo+ID4gKyAgICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uMzEuCj4gPiAr ICBAcGFyYW1baW5dICBFbmRCaXQgICAgVGhlIG9yZGluYWwgb2YgdGhlIG1vc3Qgc2lnbmlmaWNh bnQgYml0IGluIHRoZSBiaXQgZmllbGQuCj4gPiArICAgICAgICAgICAgICAgICAgICBSYW5nZSAw Li4zMS4KPiA+ICsKPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBiaXQgZmllbGQgcmVh ZCBmcm9tIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiA+ICsKPiA+ICsqKi8KPiA+ ICtVSU5UMzIKPiA+ICtFRklBUEkKPiA+ICtQY2lTZWdtZW50Qml0RmllbGRSZWFkMzIgKAo+ID4g KyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLAo+ID4gKyAgSU4gVUlOVE4g ICAgICAgICAgICAgICAgICAgICBTdGFydEJpdCwKPiA+ICsgIElOIFVJTlROICAgICAgICAgICAg ICAgICAgICAgRW5kQml0Cj4gPiArICApCj4gPiArewo+ID4gKyAgcmV0dXJuIEJpdEZpZWxkUmVh ZDMyIChQY2lTZWdtZW50UmVhZDMyIChBZGRyZXNzKSwgU3RhcnRCaXQsIEVuZEJpdCk7Cj4gPiAr fQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAgV3JpdGVzIGEgYml0IGZpZWxkIHRvIGEgUENJIGNvbmZp Z3VyYXRpb24gcmVnaXN0ZXIuCj4gPiArCj4gPiArICBXcml0ZXMgVmFsdWUgdG8gdGhlIGJpdCBm aWVsZCBvZiB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuIFRoZSBiaXQKPiA+ICsgIGZp ZWxkIGlzIHNwZWNpZmllZCBieSB0aGUgU3RhcnRCaXQgYW5kIHRoZSBFbmRCaXQuIEFsbCBvdGhl ciBiaXRzIGluIHRoZQo+ID4gKyAgZGVzdGluYXRpb24gUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0 ZXIgYXJlIHByZXNlcnZlZC4gVGhlIG5ldyB2YWx1ZSBvZiB0aGUKPiA+ICsgIDMyLWJpdCByZWdp c3RlciBpcyByZXR1cm5lZC4KPiA+ICsKPiA+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIEFk ZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFs aWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBTdGFy dEJpdCBpcyBncmVhdGVyIHRoYW4gMzEsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBFbmRCaXQg aXMgZ3JlYXRlciB0aGFuIDMxLCB0aGVuIEFTU0VSVCgpLgo+ID4gKyAgSWYgRW5kQml0IGlzIGxl c3MgdGhhbiBTdGFydEJpdCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmIFZhbHVlIGlzIGxhcmdl ciB0aGFuIHRoZSBiaXRtYXNrIHZhbHVlIHJhbmdlIHNwZWNpZmllZCBieSBTdGFydEJpdCBhbmQg RW5kQml0LCB0aGVuIEFTU0VSVCgpLgo+ID4gKwo+ID4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAg IFRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciB0byB3cml0ZS4KPiA+ICsgIEBwYXJhbVtp bl0gIFN0YXJ0Qml0ICBUaGUgb3JkaW5hbCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGlu IHRoZSBiaXQgZmllbGQuCj4gPiArICAgICAgICAgICAgICAgICAgICBSYW5nZSAwLi4zMS4KPiA+ ICsgIEBwYXJhbVtpbl0gIEVuZEJpdCAgICBUaGUgb3JkaW5hbCBvZiB0aGUgbW9zdCBzaWduaWZp Y2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4KPiA+ICsgICAgICAgICAgICAgICAgICAgIFJhbmdl IDAuLjMxLgo+ID4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgIFRoZSBuZXcgdmFsdWUgb2YgdGhl IGJpdCBmaWVsZC4KPiA+ICsKPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gYmFjayB0 byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gPiArCj4gPiArKiovCj4gPiArVUlO VDMyCj4gPiArRUZJQVBJCj4gPiArUGNpU2VnbWVudEJpdEZpZWxkV3JpdGUzMiAoCj4gPiArICBJ TiBVSU5UNjQgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsCj4gPiArICBJTiBVSU5UTiAgICAg ICAgICAgICAgICAgICAgIFN0YXJ0Qml0LAo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAg ICAgICBFbmRCaXQsCj4gPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFZhbHVlCj4g PiArICApCj4gPiArewo+ID4gKyAgcmV0dXJuIFBjaVNlZ21lbnRXcml0ZTMyICgKPiA+ICsgICAg ICAgICAgIEFkZHJlc3MsCj4gPiArICAgICAgICAgICBCaXRGaWVsZFdyaXRlMzIgKFBjaVNlZ21l bnRSZWFkMzIgKEFkZHJlc3MpLCBTdGFydEJpdCwgRW5kQml0LCBWYWx1ZSkKPiA+ICsgICAgICAg ICAgICk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAgUmVhZHMgYSBiaXQgZmllbGQgaW4g YSAzMi1iaXQgUENJIGNvbmZpZ3VyYXRpb24sIHBlcmZvcm1zIGEgYml0d2lzZSBPUiwgYW5kCj4g PiArICB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSBiaXQgZmllbGQgaW4gdGhlIDMyLWJp dCBwb3J0Lgo+ID4gKwo+ID4gKyAgUmVhZHMgdGhlIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbiBy ZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcywgcGVyZm9ybXMgYQo+ID4gKyAgYml0d2lzZSBP UiBiZXR3ZWVuIHRoZSByZWFkIHJlc3VsdCBhbmQgdGhlIHZhbHVlIHNwZWNpZmllZCBieQo+ID4g KyAgT3JEYXRhLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIDMyLWJpdCBQQ0kgY29uZmln dXJhdGlvbiByZWdpc3Rlcgo+ID4gKyAgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuIFRoZSB2YWx1ZSB3 cml0dGVuIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBpcwo+ID4gKyAgcmV0dXJu ZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgUENJIHJlYWQgYW5kIHdy aXRlIG9wZXJhdGlvbnMKPiA+ICsgIGFyZSBzZXJpYWxpemVkLiBFeHRyYSBsZWZ0IGJpdHMgaW4g T3JEYXRhIGFyZSBzdHJpcHBlZC4KPiA+ICsKPiA+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGlu IEFkZHJlc3MgYXJlIHNldCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmIFN0YXJ0Qml0IGlzIGdy ZWF0ZXIgdGhhbiAzMSwgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmIEVuZEJpdCBpcyBncmVhdGVy IHRoYW4gMzEsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBFbmRCaXQgaXMgbGVzcyB0aGFuIFN0 YXJ0Qml0LCB0aGVuIEFTU0VSVCgpLgo+ID4gKyAgSWYgT3JEYXRhIGlzIGxhcmdlciB0aGFuIHRo ZSBiaXRtYXNrIHZhbHVlIHJhbmdlIHNwZWNpZmllZCBieSBTdGFydEJpdCBhbmQgRW5kQml0LCB0 aGVuIEFTU0VSVCgpLgo+ID4gKwo+ID4gKyAgQHBhcmFtW2luXSAgQWRkcmVzcyAgIFRoZSBQQ0kg Y29uZmlndXJhdGlvbiByZWdpc3RlciB0byB3cml0ZS4KPiA+ICsgIEBwYXJhbVtpbl0gIFN0YXJ0 Qml0ICBUaGUgb3JkaW5hbCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQg ZmllbGQuCj4gPiArICAgICAgICAgICAgICAgICAgICBSYW5nZSAwLi4zMS4KPiA+ICsgIEBwYXJh bVtpbl0gIEVuZEJpdCAgICBUaGUgb3JkaW5hbCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQg aW4gdGhlIGJpdCBmaWVsZC4KPiA+ICsgICAgICAgICAgICAgICAgICAgIFJhbmdlIDAuLjMxLgo+ ID4gKyAgQHBhcmFtW2luXSAgT3JEYXRhICAgIFRoZSB2YWx1ZSB0byBPUiB3aXRoIHRoZSBQQ0kg Y29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiA+ICsKPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdy aXR0ZW4gYmFjayB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCj4gPiArCj4gPiAr KiovCj4gPiArVUlOVDMyCj4gPiArRUZJQVBJCj4gPiArUGNpU2VnbWVudEJpdEZpZWxkT3IzMiAo Cj4gPiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsCj4gPiArICBJTiBV SU5UTiAgICAgICAgICAgICAgICAgICAgIFN0YXJ0Qml0LAo+ID4gKyAgSU4gVUlOVE4gICAgICAg ICAgICAgICAgICAgICBFbmRCaXQsCj4gPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAg IE9yRGF0YQo+ID4gKyAgKQo+ID4gK3sKPiA+ICsgIHJldHVybiBQY2lTZWdtZW50V3JpdGUzMiAo Cj4gPiArICAgICAgICAgICBBZGRyZXNzLAo+ID4gKyAgICAgICAgICAgQml0RmllbGRPcjMyIChQ Y2lTZWdtZW50UmVhZDMyIChBZGRyZXNzKSwgU3RhcnRCaXQsIEVuZEJpdCwgT3JEYXRhKQo+ID4g KyAgICAgICAgICAgKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICBSZWFkcyBhIGJpdCBm aWVsZCBpbiBhIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciwgcGVyZm9ybXMgYSBi aXR3aXNlCj4gPiArICBBTkQsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSBiaXQg ZmllbGQgaW4gdGhlIDMyLWJpdCByZWdpc3Rlci4KPiA+ICsKPiA+ICsKPiA+ICsgIFJlYWRzIHRo ZSAzMi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3Ms IHBlcmZvcm1zIGEgYml0d2lzZQo+ID4gKyAgQU5EIGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFu ZCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IEFuZERhdGEsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdAo+ ID4gKyAgdG8gdGhlIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQg YnkgQWRkcmVzcy4gVGhlIHZhbHVlIHdyaXR0ZW4gdG8KPiA+ICsgIHRoZSBQQ0kgY29uZmlndXJh dGlvbiByZWdpc3RlciBpcyByZXR1cm5lZC4gIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUg dGhhdCBhbGwgUENJCj4gPiArICByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxp emVkLiAgRXh0cmEgbGVmdCBiaXRzIGluIEFuZERhdGEgYXJlIHN0cmlwcGVkLgo+ID4gKyAgSWYg YW55IHJlc2VydmVkIGJpdHMgaW4gQWRkcmVzcyBhcmUgc2V0LCB0aGVuIEFTU0VSVCgpLgo+ID4g KyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeSwgdGhlbiBB U1NFUlQoKS4KPiA+ICsgIElmIFN0YXJ0Qml0IGlzIGdyZWF0ZXIgdGhhbiAzMSwgdGhlbiBBU1NF UlQoKS4KPiA+ICsgIElmIEVuZEJpdCBpcyBncmVhdGVyIHRoYW4gMzEsIHRoZW4gQVNTRVJUKCku Cj4gPiArICBJZiBFbmRCaXQgaXMgbGVzcyB0aGFuIFN0YXJ0Qml0LCB0aGVuIEFTU0VSVCgpLgo+ ID4gKyAgSWYgQW5kRGF0YSBpcyBsYXJnZXIgdGhhbiB0aGUgYml0bWFzayB2YWx1ZSByYW5nZSBz cGVjaWZpZWQgYnkgU3RhcnRCaXQgYW5kIEVuZEJpdCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsKPiA+ ICsgIEBwYXJhbVtpbl0gIEFkZHJlc3MgICBUaGUgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIg dG8gd3JpdGUuCj4gPiArICBAcGFyYW1baW5dICBTdGFydEJpdCAgVGhlIG9yZGluYWwgb2YgdGhl IGxlYXN0IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLgo+ID4gKyAgICAgICAgICAg ICAgICAgICAgUmFuZ2UgMC4uMzEuCj4gPiArICBAcGFyYW1baW5dICBFbmRCaXQgICAgVGhlIG9y ZGluYWwgb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQuCj4gPiAr ICAgICAgICAgICAgICAgICAgICBSYW5nZSAwLi4zMS4KPiA+ICsgIEBwYXJhbVtpbl0gIEFuZERh dGEgICBUaGUgdmFsdWUgdG8gQU5EIHdpdGggdGhlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVy Lgo+ID4gKwo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kg Y29uZmlndXJhdGlvbiByZWdpc3Rlci4KPiA+ICsKPiA+ICsqKi8KPiA+ICtVSU5UMzIKPiA+ICtF RklBUEkKPiA+ICtQY2lTZWdtZW50Qml0RmllbGRBbmQzMiAoCj4gPiArICBJTiBVSU5UNjQgICAg ICAgICAgICAgICAgICAgIEFkZHJlc3MsCj4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAg ICAgIFN0YXJ0Qml0LAo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICBFbmRCaXQs Cj4gPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEFuZERhdGEKPiA+ICsgICkKPiA+ ICt7Cj4gPiArICByZXR1cm4gUGNpU2VnbWVudFdyaXRlMzIgKAo+ID4gKyAgICAgICAgICAgQWRk cmVzcywKPiA+ICsgICAgICAgICAgIEJpdEZpZWxkQW5kMzIgKFBjaVNlZ21lbnRSZWFkMzIgKEFk ZHJlc3MpLCBTdGFydEJpdCwgRW5kQml0LCBBbmREYXRhKQo+ID4gKyAgICAgICAgICAgKTsKPiA+ ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICBSZWFkcyBhIGJpdCBmaWVsZCBpbiBhIDMyLWJpdCBw b3J0LCBwZXJmb3JtcyBhIGJpdHdpc2UgQU5EIGZvbGxvd2VkIGJ5IGEKPiA+ICsgIGJpdHdpc2Ug T1IsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSBiaXQgZmllbGQgaW4gdGhlCj4g PiArICAzMi1iaXQgcG9ydC4KPiA+ICsKPiA+ICsgIFJlYWRzIHRoZSAzMi1iaXQgUENJIGNvbmZp Z3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MsIHBlcmZvcm1zIGEKPiA+ICsg IGJpdHdpc2UgQU5EIGZvbGxvd2VkIGJ5IGEgYml0d2lzZSBPUiBiZXR3ZWVuIHRoZSByZWFkIHJl c3VsdCBhbmQKPiA+ICsgIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgQW5kRGF0YSwgYW5kIHdyaXRl cyB0aGUgcmVzdWx0IHRvIHRoZSAzMi1iaXQgUENJCj4gPiArICBjb25maWd1cmF0aW9uIHJlZ2lz dGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJCj4g PiArICBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGlzIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIG11 c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFBDSQo+ID4gKyAgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9u cyBhcmUgc2VyaWFsaXplZC4gRXh0cmEgbGVmdCBiaXRzIGluIGJvdGggQW5kRGF0YSBhbmQKPiA+ ICsgIE9yRGF0YSBhcmUgc3RyaXBwZWQuCj4gPiArCj4gPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0 cyBpbiBBZGRyZXNzIGFyZSBzZXQsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBTdGFydEJpdCBp cyBncmVhdGVyIHRoYW4gMzEsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBFbmRCaXQgaXMgZ3Jl YXRlciB0aGFuIDMxLCB0aGVuIEFTU0VSVCgpLgo+ID4gKyAgSWYgRW5kQml0IGlzIGxlc3MgdGhh biBTdGFydEJpdCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmIEFuZERhdGEgaXMgbGFyZ2VyIHRo YW4gdGhlIGJpdG1hc2sgdmFsdWUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IFN0YXJ0Qml0IGFuZCBFbmRC aXQsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBPckRhdGEgaXMgbGFyZ2VyIHRoYW4gdGhlIGJp dG1hc2sgdmFsdWUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IFN0YXJ0Qml0IGFuZCBFbmRCaXQsIHRoZW4g QVNTRVJUKCkuCj4gPiArCj4gPiArICBAcGFyYW1baW5dICBBZGRyZXNzICAgVGhlIFBDSSBjb25m aWd1cmF0aW9uIHJlZ2lzdGVyIHRvIHdyaXRlLgo+ID4gKyAgQHBhcmFtW2luXSAgU3RhcnRCaXQg IFRoZSBvcmRpbmFsIG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVs ZC4KPiA+ICsgICAgICAgICAgICAgICAgICAgIFJhbmdlIDAuLjMxLgo+ID4gKyAgQHBhcmFtW2lu XSAgRW5kQml0ICAgIFRoZSBvcmRpbmFsIG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpbiB0 aGUgYml0IGZpZWxkLgo+ID4gKyAgICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uMzEuCj4gPiAr ICBAcGFyYW1baW5dICBBbmREYXRhICAgVGhlIHZhbHVlIHRvIEFORCB3aXRoIHRoZSBQQ0kgY29u ZmlndXJhdGlvbiByZWdpc3Rlci4KPiA+ICsgIEBwYXJhbVtpbl0gIE9yRGF0YSAgICBUaGUgdmFs dWUgdG8gT1Igd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBBTkQgb3BlcmF0aW9uLgo+ID4gKwo+ID4g KyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlv biByZWdpc3Rlci4KPiA+ICsKPiA+ICsqKi8KPiA+ICtVSU5UMzIKPiA+ICtFRklBUEkKPiA+ICtQ Y2lTZWdtZW50Qml0RmllbGRBbmRUaGVuT3IzMiAoCj4gPiArICBJTiBVSU5UNjQgICAgICAgICAg ICAgICAgICAgIEFkZHJlc3MsCj4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFN0 YXJ0Qml0LAo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICBFbmRCaXQsCj4gPiAr ICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEFuZERhdGEsCj4gPiArICBJTiBVSU5UMzIg ICAgICAgICAgICAgICAgICAgIE9yRGF0YQo+ID4gKyAgKQo+ID4gK3sKPiA+ICsgIHJldHVybiBQ Y2lTZWdtZW50V3JpdGUzMiAoCj4gPiArICAgICAgICAgICBBZGRyZXNzLAo+ID4gKyAgICAgICAg ICAgQml0RmllbGRBbmRUaGVuT3IzMiAoUGNpU2VnbWVudFJlYWQzMiAoQWRkcmVzcyksIFN0YXJ0 Qml0LCBFbmRCaXQsIEFuZERhdGEsIE9yRGF0YSkKPiA+ICsgICAgICAgICAgICk7Cj4gPiArfQo+ ID4gKwo+ID4gKy8qKgo+ID4gKyAgUmVhZHMgYSByYW5nZSBvZiBQQ0kgY29uZmlndXJhdGlvbiBy ZWdpc3RlcnMgaW50byBhIGNhbGxlciBzdXBwbGllZCBidWZmZXIuCj4gPiArCj4gPiArICBSZWFk cyB0aGUgcmFuZ2Ugb2YgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIHNwZWNpZmllZCBieSBT dGFydEFkZHJlc3MgYW5kCj4gPiArICBTaXplIGludG8gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkg QnVmZmVyLiBUaGlzIGZ1bmN0aW9uIG9ubHkgYWxsb3dzIHRoZSBQQ0kKPiA+ICsgIGNvbmZpZ3Vy YXRpb24gcmVnaXN0ZXJzIGZyb20gYSBzaW5nbGUgUENJIGZ1bmN0aW9uIHRvIGJlIHJlYWQuIFNp emUgaXMKPiA+ICsgIHJldHVybmVkLiBXaGVuIHBvc3NpYmxlIDMyLWJpdCBQQ0kgY29uZmlndXJh dGlvbiByZWFkIGN5Y2xlcyBhcmUgdXNlZCB0byByZWFkCj4gPiArICBmcm9tIFN0YXJ0QWRyZXNz IHRvIFN0YXJ0QWRkcmVzcyArIFNpemUuIER1ZSB0byBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zLCA4 LWJpdAo+ID4gKyAgYW5kIDE2LWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWFkIGN5Y2xlcyBtYXkg YmUgdXNlZCBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGUKPiA+ICsgIGVuZCBvZiB0aGUgcmFuZ2Uu Cj4gPiArCj4gPiArICBJZiBhbnkgcmVzZXJ2ZWQgYml0cyBpbiBTdGFydEFkZHJlc3MgYXJlIHNl dCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmICgoU3RhcnRBZGRyZXNzICYgMHhGRkYpICsgU2l6 ZSkgPiAweDEwMDAsIHRoZW4gQVNTRVJUKCkuCj4gPiArICBJZiBTaXplID4gMCBhbmQgQnVmZmVy IGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuCj4gPiArCj4gPiArICBAcGFyYW1baW5dICBTdGFydEFk ZHJlc3MgIFRoZSBzdGFydGluZyBhZGRyZXNzIHRoYXQgZW5jb2RlcyB0aGUgUENJIFNlZ21lbnQs IEJ1cywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2UsIEZ1bmN0aW9uIGFuZCBS ZWdpc3Rlci4KPiA+ICsgIEBwYXJhbVtpbl0gIFNpemUgICAgICAgICAgVGhlIHNpemUgaW4gYnl0 ZXMgb2YgdGhlIHRyYW5zZmVyLgo+ID4gKyAgQHBhcmFtW2luXSAgQnVmZmVyICAgICAgICBUaGUg cG9pbnRlciB0byBhIGJ1ZmZlciByZWNlaXZpbmcgdGhlIGRhdGEgcmVhZC4KPiA+ICsKPiA+ICsg IEByZXR1cm4gU2l6ZQo+ID4gKwo+ID4gKyoqLwo+ID4gK1VJTlROCj4gPiArRUZJQVBJCj4gPiAr UGNpU2VnbWVudFJlYWRCdWZmZXIgKAo+ID4gKyAgSU4gIFVJTlQ2NCAgICAgICAgICAgICAgICAg ICBTdGFydEFkZHJlc3MsCj4gPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgIFNpemUs Cj4gPiArICBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICAgICpCdWZmZXIKPiA+ICsgICkKPiA+ ICt7Cj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuVmFsdWU7 Cj4gPiArCj4gPiArICBBU1NFUlRfSU5WQUxJRF9QQ0lfU0VHTUVOVF9BRERSRVNTIChTdGFydEFk ZHJlc3MsIDApOwo+ID4gKyAgQVNTRVJUICgoKFN0YXJ0QWRkcmVzcyAmIDB4RkZGKSArIFNpemUp IDw9IDB4MTAwMCk7Cj4gPiArCj4gPiArICBpZiAoU2l6ZSA9PSAwKSB7Cj4gPiArICAgIHJldHVy biBTaXplOwo+ID4gKyAgfQo+ID4gKwo+ID4gKyAgQVNTRVJUIChCdWZmZXIgIT0gTlVMTCk7Cj4g PiArCj4gPiArICAvLwo+ID4gKyAgLy8gU2F2ZSBTaXplIGZvciByZXR1cm4KPiA+ICsgIC8vCj4g PiArICBSZXR1cm5WYWx1ZSA9IFNpemU7Cj4gPiArCj4gPiArICBpZiAoKFN0YXJ0QWRkcmVzcyAm IEJJVDApICE9IDApIHsKPiA+ICsgICAgLy8KPiA+ICsgICAgLy8gUmVhZCBhIGJ5dGUgaWYgU3Rh cnRBZGRyZXNzIGlzIGJ5dGUgYWxpZ25lZCwKPiA+ICsgICAgLy8gVm9sYXRpbGUgZW5zdXJlIHRo YXQgdGhlIGxhdGVzdCB2YWx1ZXMgYXJlIHJlYWQgZXZlcnkgdGltZS4KPiA+ICsgICAgLy8KPiA+ ICsgICAgKihVSU5UOCAqKUJ1ZmZlciA9IFBjaVNlZ21lbnRSZWFkOCAoU3RhcnRBZGRyZXNzKTsK PiA+ICsgICAgU3RhcnRBZGRyZXNzICs9IHNpemVvZiAoVUlOVDgpOwo+ID4gKyAgICBTaXplIC09 IHNpemVvZiAoVUlOVDgpOwo+ID4gKyAgICBCdWZmZXIgPSAoVUlOVDggKilCdWZmZXIgKyAxOwo+ ID4gKyAgfQo+ID4gKwo+ID4gKyAgaWYgKFNpemUgPj0gc2l6ZW9mIChVSU5UMTYpICYmIChTdGFy dEFkZHJlc3MgJiBCSVQxKSAhPSAwKSB7Cj4gPiArICAgIC8vCj4gPiArICAgIC8vIFJlYWQgYSB3 b3JkIGlmIFN0YXJ0QWRkcmVzcyBpcyB3b3JkIGFsaWduZWQKPiA+ICsgICAgLy8KPiA+ICsgICAg V3JpdGVVbmFsaWduZWQxNiAoQnVmZmVyLCBQY2lTZWdtZW50UmVhZDE2IChTdGFydEFkZHJlc3Mp KTsKPiA+ICsgICAgU3RhcnRBZGRyZXNzICs9IHNpemVvZiAoVUlOVDE2KTsKPiA+ICsgICAgU2l6 ZSAtPSBzaXplb2YgKFVJTlQxNik7Cj4gPiArICAgIEJ1ZmZlciA9IChVSU5UMTYgKilCdWZmZXIg KyAxOwo+ID4gKyAgfQo+ID4gKwo+ID4gKyAgd2hpbGUgKFNpemUgPj0gc2l6ZW9mIChVSU5UMzIp KSB7Cj4gPiArICAgIC8vCj4gPiArICAgIC8vIFJlYWQgYXMgbWFueSBkb3VibGUgd29yZHMgYXMg cG9zc2libGUKPiA+ICsgICAgLy8KPiA+ICsgICAgV3JpdGVVbmFsaWduZWQzMiAoQnVmZmVyLCBQ Y2lTZWdtZW50UmVhZDMyIChTdGFydEFkZHJlc3MpKTsKPiA+ICsgICAgU3RhcnRBZGRyZXNzICs9 IHNpemVvZiAoVUlOVDMyKTsKPiA+ICsgICAgU2l6ZSAtPSBzaXplb2YgKFVJTlQzMik7Cj4gPiAr ICAgIEJ1ZmZlciA9IChVSU5UMzIgKilCdWZmZXIgKyAxOwo+ID4gKyAgfQo+ID4gKwo+ID4gKyAg aWYgKFNpemUgPj0gc2l6ZW9mIChVSU5UMTYpKSB7Cj4gPiArICAgIC8vCj4gPiArICAgIC8vIFJl YWQgdGhlIGxhc3QgcmVtYWluaW5nIHdvcmQgaWYgZXhpc3QKPiA+ICsgICAgLy8KPiA+ICsgICAg V3JpdGVVbmFsaWduZWQxNiAoQnVmZmVyLCBQY2lTZWdtZW50UmVhZDE2IChTdGFydEFkZHJlc3Mp KTsKPiA+ICsgICAgU3RhcnRBZGRyZXNzICs9IHNpemVvZiAoVUlOVDE2KTsKPiA+ICsgICAgU2l6 ZSAtPSBzaXplb2YgKFVJTlQxNik7Cj4gPiArICAgIEJ1ZmZlciA9IChVSU5UMTYgKilCdWZmZXIg KyAxOwo+ID4gKyAgfQo+ID4gKwo+ID4gKyAgaWYgKFNpemUgPj0gc2l6ZW9mIChVSU5UOCkpIHsK PiA+ICsgICAgLy8KPiA+ICsgICAgLy8gUmVhZCB0aGUgbGFzdCByZW1haW5pbmcgYnl0ZSBpZiBl eGlzdAo+ID4gKyAgICAvLwo+ID4gKyAgICAqKFVJTlQ4ICopQnVmZmVyID0gUGNpU2VnbWVudFJl YWQ4IChTdGFydEFkZHJlc3MpOwo+ID4gKyAgfQo+ID4gKwo+ID4gKyAgcmV0dXJuIFJldHVyblZh bHVlOwo+ID4gK30KPiA+ICsKPiA+ICsKPiA+ICsvKioKPiA+ICsgIENvcGllcyB0aGUgZGF0YSBp biBhIGNhbGxlciBzdXBwbGllZCBidWZmZXIgdG8gYSBzcGVjaWZpZWQgcmFuZ2Ugb2YgUENJCj4g PiArICBjb25maWd1cmF0aW9uIHNwYWNlLgo+ID4gKwo+ID4gKyAgV3JpdGVzIHRoZSByYW5nZSBv ZiBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgc3BlY2lmaWVkIGJ5IFN0YXJ0QWRkcmVzcyBh bmQKPiA+ICsgIFNpemUgZnJvbSB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBCdWZmZXIuIFRoaXMg ZnVuY3Rpb24gb25seSBhbGxvd3MgdGhlIFBDSQo+ID4gKyAgY29uZmlndXJhdGlvbiByZWdpc3Rl cnMgZnJvbSBhIHNpbmdsZSBQQ0kgZnVuY3Rpb24gdG8gYmUgd3JpdHRlbi4gU2l6ZSBpcwo+ID4g KyAgcmV0dXJuZWQuIFdoZW4gcG9zc2libGUgMzItYml0IFBDSSBjb25maWd1cmF0aW9uIHdyaXRl IGN5Y2xlcyBhcmUgdXNlZCB0bwo+ID4gKyAgd3JpdGUgZnJvbSBTdGFydEFkcmVzcyB0byBTdGFy dEFkZHJlc3MgKyBTaXplLiBEdWUgdG8gYWxpZ25tZW50IHJlc3RyaWN0aW9ucywKPiA+ICsgIDgt Yml0IGFuZCAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gd3JpdGUgY3ljbGVzIG1heSBiZSB1c2Vk IGF0IHRoZSBiZWdpbm5pbmcKPiA+ICsgIGFuZCB0aGUgZW5kIG9mIHRoZSByYW5nZS4KPiA+ICsK PiA+ICsgIElmIGFueSByZXNlcnZlZCBiaXRzIGluIFN0YXJ0QWRkcmVzcyBhcmUgc2V0LCB0aGVu IEFTU0VSVCgpLgo+ID4gKyAgSWYgKChTdGFydEFkZHJlc3MgJiAweEZGRikgKyBTaXplKSA+IDB4 MTAwMCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsgIElmIFNpemUgPiAwIGFuZCBCdWZmZXIgaXMgTlVM TCwgdGhlbiBBU1NFUlQoKS4KPiA+ICsKPiA+ICsgIEBwYXJhbVtpbl0gIFN0YXJ0QWRkcmVzcyAg VGhlIHN0YXJ0aW5nIGFkZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kgU2VnbWVudCwgQnVzLAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIERldmljZSwgRnVuY3Rpb24gYW5kIFJlZ2lzdGVy Lgo+ID4gKyAgQHBhcmFtW2luXSAgU2l6ZSAgICAgICAgICBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0 aGUgdHJhbnNmZXIuCj4gPiArICBAcGFyYW1baW5dICBCdWZmZXIgICAgICAgIFRoZSBwb2ludGVy IHRvIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gd3JpdGUuCj4gPiArCj4gPiArICBA cmV0dXJuIFRoZSBwYXJhbWV0ZXIgb2YgU2l6ZS4KPiA+ICsKPiA+ICsqKi8KPiA+ICtVSU5UTgo+ ID4gK0VGSUFQSQo+ID4gK1BjaVNlZ21lbnRXcml0ZUJ1ZmZlciAoCj4gPiArICBJTiBVSU5UNjQg ICAgICAgICAgICAgICAgICAgIFN0YXJ0QWRkcmVzcywKPiA+ICsgIElOIFVJTlROICAgICAgICAg ICAgICAgICAgICAgU2l6ZSwKPiA+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgKkJ1 ZmZlcgo+ID4gKyAgKQo+ID4gK3sKPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZXR1cm5WYWx1ZTsKPiA+ICsKPiA+ICsgIEFTU0VSVF9JTlZBTElEX1BDSV9TRUdNRU5U X0FERFJFU1MgKFN0YXJ0QWRkcmVzcywgMCk7Cj4gPiArICBBU1NFUlQgKCgoU3RhcnRBZGRyZXNz ICYgMHhGRkYpICsgU2l6ZSkgPD0gMHgxMDAwKTsKPiA+ICsKPiA+ICsgIGlmIChTaXplID09IDAp IHsKPiA+ICsgICAgcmV0dXJuIDA7Cj4gPiArICB9Cj4gPiArCj4gPiArICBBU1NFUlQgKEJ1ZmZl ciAhPSBOVUxMKTsKPiA+ICsKPiA+ICsgIC8vCj4gPiArICAvLyBTYXZlIFNpemUgZm9yIHJldHVy bgo+ID4gKyAgLy8KPiA+ICsgIFJldHVyblZhbHVlID0gU2l6ZTsKPiA+ICsKPiA+ICsgIGlmICgo U3RhcnRBZGRyZXNzICYgQklUMCkgIT0gMCkgewo+ID4gKyAgICAvLwo+ID4gKyAgICAvLyBXcml0 ZSBhIGJ5dGUgaWYgU3RhcnRBZGRyZXNzIGlzIGJ5dGUgYWxpZ25lZAo+ID4gKyAgICAvLwo+ID4g KyAgICBQY2lTZWdtZW50V3JpdGU4IChTdGFydEFkZHJlc3MsICooVUlOVDggKilCdWZmZXIpOwo+ ID4gKyAgICBTdGFydEFkZHJlc3MgKz0gc2l6ZW9mIChVSU5UOCk7Cj4gPiArICAgIFNpemUgLT0g c2l6ZW9mIChVSU5UOCk7Cj4gPiArICAgIEJ1ZmZlciA9IChVSU5UOCAqKUJ1ZmZlciArIDE7Cj4g PiArICB9Cj4gPiArCj4gPiArICBpZiAoU2l6ZSA+PSBzaXplb2YgKFVJTlQxNikgJiYgKFN0YXJ0 QWRkcmVzcyAmIEJJVDEpICE9IDApIHsKPiA+ICsgICAgLy8KPiA+ICsgICAgLy8gV3JpdGUgYSB3 b3JkIGlmIFN0YXJ0QWRkcmVzcyBpcyB3b3JkIGFsaWduZWQKPiA+ICsgICAgLy8KPiA+ICsgICAg UGNpU2VnbWVudFdyaXRlMTYgKFN0YXJ0QWRkcmVzcywgUmVhZFVuYWxpZ25lZDE2IChCdWZmZXIp KTsKPiA+ICsgICAgU3RhcnRBZGRyZXNzICs9IHNpemVvZiAoVUlOVDE2KTsKPiA+ICsgICAgU2l6 ZSAtPSBzaXplb2YgKFVJTlQxNik7Cj4gPiArICAgIEJ1ZmZlciA9IChVSU5UMTYgKilCdWZmZXIg KyAxOwo+ID4gKyAgfQo+ID4gKwo+ID4gKyAgd2hpbGUgKFNpemUgPj0gc2l6ZW9mIChVSU5UMzIp KSB7Cj4gPiArICAgIC8vCj4gPiArICAgIC8vIFdyaXRlIGFzIG1hbnkgZG91YmxlIHdvcmRzIGFz IHBvc3NpYmxlCj4gPiArICAgIC8vCj4gPiArICAgIFBjaVNlZ21lbnRXcml0ZTMyIChTdGFydEFk ZHJlc3MsIFJlYWRVbmFsaWduZWQzMiAoQnVmZmVyKSk7Cj4gPiArICAgIFN0YXJ0QWRkcmVzcyAr PSBzaXplb2YgKFVJTlQzMik7Cj4gPiArICAgIFNpemUgLT0gc2l6ZW9mIChVSU5UMzIpOwo+ID4g KyAgICBCdWZmZXIgPSAoVUlOVDMyICopQnVmZmVyICsgMTsKPiA+ICsgIH0KPiA+ICsKPiA+ICsg IGlmIChTaXplID49IHNpemVvZiAoVUlOVDE2KSkgewo+ID4gKyAgICAvLwo+ID4gKyAgICAvLyBX cml0ZSB0aGUgbGFzdCByZW1haW5pbmcgd29yZCBpZiBleGlzdAo+ID4gKyAgICAvLwo+ID4gKyAg ICBQY2lTZWdtZW50V3JpdGUxNiAoU3RhcnRBZGRyZXNzLCBSZWFkVW5hbGlnbmVkMTYgKEJ1ZmZl cikpOwo+ID4gKyAgICBTdGFydEFkZHJlc3MgKz0gc2l6ZW9mIChVSU5UMTYpOwo+ID4gKyAgICBT aXplIC09IHNpemVvZiAoVUlOVDE2KTsKPiA+ICsgICAgQnVmZmVyID0gKFVJTlQxNiAqKUJ1ZmZl ciArIDE7Cj4gPiArICB9Cj4gPiArCj4gPiArICBpZiAoU2l6ZSA+PSBzaXplb2YgKFVJTlQ4KSkg ewo+ID4gKyAgICAvLwo+ID4gKyAgICAvLyBXcml0ZSB0aGUgbGFzdCByZW1haW5pbmcgYnl0ZSBp ZiBleGlzdAo+ID4gKyAgICAvLwo+ID4gKyAgICBQY2lTZWdtZW50V3JpdGU4IChTdGFydEFkZHJl c3MsICooVUlOVDggKilCdWZmZXIpOwo+ID4gKyAgfQo+ID4gKwo+ID4gKyAgcmV0dXJuIFJldHVy blZhbHVlOwo+ID4gK30KPiA+IC0tIAo+ID4gMi4yNS4xCj4gPiAKDQoNCuS/oeaBr+WuieWFqOWj sOaYju+8muacrOmCruS7tuWMheWQq+S/oeaBr+W9kuWPkeS7tuS6uuaJgOWcqOe7hOe7h+aJgOac iSzlj5Hku7bkurrmiYDlnKjnu4Tnu4flr7nor6Xpgq7ku7bmi6XmnInmiYDmnInmnYPliKnjgILo r7fmjqXmlLbogIXms6jmhI/kv53lr4Ys5pyq57uP5Y+R5Lu25Lq65Lmm6Z2i6K645Y+vLOS4jeW+ l+WQkeS7u+S9leesrOS4ieaWuee7hOe7h+WSjOS4quS6uumAj+mcsuacrOmCruS7tuaJgOWQq+S/ oeaBr+OAgg0KSW5mb3JtYXRpb24gU2VjdXJpdHkgTm90aWNlOiBUaGUgaW5mb3JtYXRpb24gY29u dGFpbmVkIGluIHRoaXMgbWFpbCBpcyBzb2xlbHkgcHJvcGVydHkgb2YgdGhlIHNlbmRlcidzIG9y Z2FuaXphdGlvbi5UaGlzIG1haWwgY29tbXVuaWNhdGlvbiBpcyBjb25maWRlbnRpYWwuUmVjaXBp ZW50cyBuYW1lZCBhYm92ZSBhcmUgb2JsaWdhdGVkIHRvIG1haW50YWluIHNlY3JlY3kgYW5kIGFy ZSBub3QgcGVybWl0dGVkIHRvIGRpc2Nsb3NlIHRoZSBjb250ZW50cyBvZiB0aGlzIGNvbW11bmlj YXRpb24gdG8gb3RoZXJzLg==