From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from xry111.site (xry111.site [89.208.246.23]) by sourceware.org (Postfix) with ESMTPS id C183A3858C2C for ; Tue, 7 Feb 2023 11:57:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C183A3858C2C Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=xry111.site Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=xry111.site DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xry111.site; s=default; t=1675771043; bh=ZlQ0NIMwTvbu6wNsjSb8qgJyNC80R+bYyozp1gUOWT4=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=dXF1uACoesnR5X6CtcpeV1qlKQcrT6H0cDecnH5xnWrC/gWCBmKpWA7DOLNMRwdwE cQa6Q/ds3uztq6f4LhRz38Vxvj2VqYgLotSQbg5etCqMvomhWIWjXQSo5JMgLpOq5q sneoG3coWqFBb9NpfO49JeIqrEGY36cYwtpcNAL4= Received: from [IPv6:240e:358:11cc:4100:dc73:854d:832e:2] (unknown [IPv6:240e:358:11cc:4100:dc73:854d:832e:2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature ECDSA (P-384) server-digest SHA384) (Client did not present a certificate) (Authenticated sender: xry111@xry111.site) by xry111.site (Postfix) with ESMTPSA id 44A6065BF1; Tue, 7 Feb 2023 06:57:17 -0500 (EST) Message-ID: Subject: Re: [RFC PATCH 16/19] riscv: Add accelerated strcmp routines From: Xi Ruoyao To: Christoph Muellner , libc-alpha@sourceware.org, Palmer Dabbelt , Darius Rad , Andrew Waterman , DJ Delorie , Vineet Gupta , Kito Cheng , Jeff Law , Philipp Tomsich , Heiko Stuebner Cc: Adhemerval Zanella Date: Tue, 07 Feb 2023 19:57:10 +0800 In-Reply-To: <20230207001618.458947-17-christoph.muellner@vrull.eu> References: <20230207001618.458947-1-christoph.muellner@vrull.eu> <20230207001618.458947-17-christoph.muellner@vrull.eu> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.3 MIME-Version: 1.0 X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_MANYTO,KAM_SHORT,LIKELY_SPAM_FROM,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: SXMgaXQgcG9zc2libGUgdG8gbWFrZSB0aGUgb3B0aW1pemVkIGdlbmVyaWMgc3RyaW5nIHJvdXRp bmUgWzFdIGlmdW5jLQphd2FyZSBpbiBzb21lIHdheT8gIE9yIGNhbiB3ZSAidGVtcGxhdGl6ZSIg aXQgc28gd2UgY2FuIG1ha2UgdmVjdG9yaXplZApzdHJpbmcgcm91dGluZXMgbW9yZSBlYXNpbHk/ CgpbMV06IGh0dHBzOi8vc291cmNld2FyZS5vcmcvcGlwZXJtYWlsL2xpYmMtYWxwaGEvMjAyMy1G ZWJydWFyeS8xNDUyMTEuaHRtbAoKT24gVHVlLCAyMDIzLTAyLTA3IGF0IDAxOjE2ICswMTAwLCBD aHJpc3RvcGggTXVlbGxuZXIgd3JvdGU6Cj4gRnJvbTogQ2hyaXN0b3BoIE3DvGxsbmVyIDxjaHJp c3RvcGgubXVlbGxuZXJAdnJ1bGwuZXU+Cj4gCj4gVGhlIGltcGxlbWVudGF0aW9uIG9mIHN0cmNt cCgpIGNhbiBiZSBhY2NlbGVyYXRlZCB1c2luZyBaYmIncyBvcmMuYgo+IGluc3RydWN0aW9uIGFu ZCBmYXN0IHVuYWxpZ25lZCBhY2Nlc3Nlcy4gSG93dmVyLCBzdHJjbXAgY2FuIHVzZQo+IHVuYWxp Z25lZCBhY2Nlc3NlcyBvbmx5IGlmIHN1Y2ggYW4gYWRkcmVzcyBkb2VzIG5vdCBjaGFuZ2UgdGhl Cj4gZXhjZXB0aW9uIGJlaGF2aW91ciAoY29tcGFyZWQgdG8gYSBzaW5nbGUtYnl0ZSBjb21wYXJl IGxvb3ApLgo+IExldCdzIGFkZCBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgYWxsIHRoYXQu Cj4gQWRkaXRpb25hbGx5LCBsZXQncyBhZGQgdGhlIHN0cmNtcCBpbXBsZW1lbnRhdGlvbiBmcm9t IHRoZQo+IEJpdG1hbmlwIHNwZWNpZmljYXRpb24sIHdoaWNoIGRvZXMgbm90IGRvIGFueSB1bmFs aWduZWQgYWNjZXNzZXMuCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIE3DvGxsbmVyIDxj aHJpc3RvcGgubXVlbGxuZXJAdnJ1bGwuZXU+Cj4gLS0tCj4gwqBzeXNkZXBzL3Jpc2N2L211bHRp YXJjaC9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDQgKy0KPiDCoHN5 c2RlcHMvcmlzY3YvbXVsdGlhcmNoL2lmdW5jLWltcGwtbGlzdC5jwqDCoMKgwqAgfMKgwqAgNCAr LQo+IMKgc3lzZGVwcy9yaXNjdi9tdWx0aWFyY2gvc3RyY21wLmPCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB8wqAgMTEgKy0KPiDCoHN5c2RlcHMvcmlzY3YvbXVsdGlhcmNoL3N0cmNtcF96YmIu U8KgwqDCoMKgwqDCoMKgwqDCoCB8IDEwNCArKysrKysrKysKPiDCoC4uLi9yaXNjdi9tdWx0aWFy Y2gvc3RyY21wX3piYl91bmFsaWduZWQuU8KgwqDCoCB8IDIxMwo+ICsrKysrKysrKysrKysrKysr Kwo+IMKgNSBmaWxlcyBjaGFuZ2VkLCAzMzIgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkK PiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Jpc2N2L211bHRpYXJjaC9zdHJjbXBfemJi LlMKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Jpc2N2L211bHRpYXJjaC9zdHJjbXBf emJiX3VuYWxpZ25lZC5TCj4gCj4gZGlmZiAtLWdpdCBhL3N5c2RlcHMvcmlzY3YvbXVsdGlhcmNo L01ha2VmaWxlCj4gYi9zeXNkZXBzL3Jpc2N2L211bHRpYXJjaC9NYWtlZmlsZQo+IGluZGV4IDMw MTdiZGU3NWEuLjczYTYyYmU4NWQgMTAwNjQ0Cj4gLS0tIGEvc3lzZGVwcy9yaXNjdi9tdWx0aWFy Y2gvTWFrZWZpbGUKPiArKysgYi9zeXNkZXBzL3Jpc2N2L211bHRpYXJjaC9NYWtlZmlsZQo+IEBA IC0xMSw1ICsxMSw3IEBAIHN5c2RlcF9yb3V0aW5lcyArPSBcCj4gwqDCoMKgwqDCoMKgwqDCoHN0 cmxlbl9nZW5lcmljIFwKPiDCoMKgwqDCoMKgwqDCoMKgc3RybGVuX3piYiBcCj4gwqDCoMKgwqDC oMKgwqDCoFwKPiAtwqDCoMKgwqDCoMKgwqBzdHJjbXBfZ2VuZXJpYwo+ICvCoMKgwqDCoMKgwqDC oHN0cmNtcF9nZW5lcmljIFwKPiArwqDCoMKgwqDCoMKgwqBzdHJjbXBfemJiIFwKPiArwqDCoMKg wqDCoMKgwqBzdHJjbXBfemJiX3VuYWxpZ25lZAo+IMKgZW5kaWYKPiBkaWZmIC0tZ2l0IGEvc3lz ZGVwcy9yaXNjdi9tdWx0aWFyY2gvaWZ1bmMtaW1wbC1saXN0LmMKPiBiL3N5c2RlcHMvcmlzY3Yv bXVsdGlhcmNoL2lmdW5jLWltcGwtbGlzdC5jCj4gaW5kZXggNjQzMzFhNGM3Zi4uZDM1NGFhMTE3 OCAxMDA2NDQKPiAtLS0gYS9zeXNkZXBzL3Jpc2N2L211bHRpYXJjaC9pZnVuYy1pbXBsLWxpc3Qu Ywo+ICsrKyBiL3N5c2RlcHMvcmlzY3YvbXVsdGlhcmNoL2lmdW5jLWltcGwtbGlzdC5jCj4gQEAg LTU5LDcgKzU5LDkgQEAgX19saWJjX2lmdW5jX2ltcGxfbGlzdCAoY29uc3QgY2hhciAqbmFtZSwg c3RydWN0Cj4gbGliY19pZnVuY19pbXBsICphcnJheSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBJRlVOQ19JTVBMX0FERCAoYXJyYXksIGksIHN0cmxlbiwgMSwgX19zdHJsZW5fZ2VuZXJp YykpCj4gwqAKPiDCoMKgIElGVU5DX0lNUEwgKGksIG5hbWUsIHN0cmNtcCwKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIElGVU5DX0lNUExfQUREIChhcnJheSwgaSwgc3RyY3B5LCAxLCBfX3N0 cmNtcF9nZW5lcmljKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElGVU5DX0lNUExfQURE IChhcnJheSwgaSwgc3RyY21wLCAxLAo+IF9fc3RyY21wX3piYl91bmFsaWduZWQpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBJRlVOQ19JTVBMX0FERCAoYXJyYXksIGksIHN0cmNtcCwgMSwg X19zdHJjbXBfemJiKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSUZVTkNfSU1QTF9BREQg KGFycmF5LCBpLCBzdHJjbXAsIDEsIF9fc3RyY21wX2dlbmVyaWMpKQo+IMKgCj4gwqDCoCByZXR1 cm4gaTsKPiDCoH0KPiBkaWZmIC0tZ2l0IGEvc3lzZGVwcy9yaXNjdi9tdWx0aWFyY2gvc3RyY21w LmMKPiBiL3N5c2RlcHMvcmlzY3YvbXVsdGlhcmNoL3N0cmNtcC5jCj4gaW5kZXggOGMyMWE5MGFm ZC4uZDNmMmZlMTlhZSAxMDA2NDQKPiAtLS0gYS9zeXNkZXBzL3Jpc2N2L211bHRpYXJjaC9zdHJj bXAuYwo+ICsrKyBiL3N5c2RlcHMvcmlzY3YvbXVsdGlhcmNoL3N0cmNtcC5jCj4gQEAgLTMwLDgg KzMwLDE1IEBACj4gwqAKPiDCoGV4dGVybiBfX3R5cGVvZiAoX19yZWRpcmVjdF9zdHJjbXApIF9f bGliY19zdHJjbXA7Cj4gwqBleHRlcm4gX190eXBlb2YgKF9fcmVkaXJlY3Rfc3RyY21wKSBfX3N0 cmNtcF9nZW5lcmljCj4gYXR0cmlidXRlX2hpZGRlbjsKPiAtCj4gLWxpYmNfaWZ1bmMgKF9fbGli Y19zdHJjbXAsIF9fc3RyY21wX2dlbmVyaWMpOwo+ICtleHRlcm4gX190eXBlb2YgKF9fcmVkaXJl Y3Rfc3RyY21wKSBfX3N0cmNtcF96YmIgYXR0cmlidXRlX2hpZGRlbjsKPiArZXh0ZXJuIF9fdHlw ZW9mIChfX3JlZGlyZWN0X3N0cmNtcCkgX19zdHJjbXBfemJiX3VuYWxpZ25lZAo+IGF0dHJpYnV0 ZV9oaWRkZW47Cj4gKwo+ICtsaWJjX2lmdW5jIChfX2xpYmNfc3RyY21wLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoCBIQVZFX1JWKHpiYikgJiYgSEFWRV9GQVNUX1VOQUxJR05FRCgpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgID8gX19zdHJjbXBfemJiX3VuYWxpZ25lZAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoCA6IEhBVkVfUlYoemJiKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPyBfX3N0 cmNtcF96YmIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDogX19zdHJjbXBfZ2VuZXJpYyk7 Cj4gwqAKPiDCoCMgdW5kZWYgc3RyY21wCj4gwqBzdHJvbmdfYWxpYXMgKF9fbGliY19zdHJjbXAs IHN0cmNtcCk7Cj4gZGlmZiAtLWdpdCBhL3N5c2RlcHMvcmlzY3YvbXVsdGlhcmNoL3N0cmNtcF96 YmIuUwo+IGIvc3lzZGVwcy9yaXNjdi9tdWx0aWFyY2gvc3RyY21wX3piYi5TCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi4xYzI2NWQ2MTA3Cj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL3N5c2RlcHMvcmlzY3YvbXVsdGlhcmNoL3N0cmNtcF96YmIuUwo+IEBAIC0wLDAg KzEsMTA0IEBACj4gKy8qIENvcHlyaWdodCAoQykgMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KPiArCj4gK8KgwqAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJh cnkuCj4gKwo+ICvCoMKgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICvCoMKgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArwqDCoCBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArwqDCoCB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KPiArCj4gK8KgwqAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCj4gdXNlZnVsLAo+ICvCoMKgIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gK8KgwqAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLsKgIFNl ZSB0aGUgR05VCj4gK8KgwqAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KPiArCj4gK8KgwqAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICvCoMKgIExpY2Vuc2UgYWxvbmcgd2l0aCB0 aGUgR05VIEMgTGlicmFyeS7CoCBJZiBub3QsIHNlZQo+ICvCoMKgIDxodHRwczovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uwqAgKi8KPiArCj4gKyNpbmNsdWRlIDxzeXNkZXAuaD4KPiArI2luY2x1 ZGUgPHN5cy9hc20uaD4KPiArCj4gKy8qIEFzc3VtcHRpb25zOiBydmlfemJiLsKgICovCj4gKy8q IEltcGxlbWVudGF0aW9uIGZyb20gdGhlIEJpdG1hbmlwIHNwZWNpZmljYXRpb24uwqAgKi8KPiAr Cj4gKyNkZWZpbmUgc3JjMcKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhMAo+ICsjZGVmaW5lIHJlc3Vs dMKgwqDCoMKgwqDCoMKgwqDCoGEwCj4gKyNkZWZpbmUgc3JjMsKgwqDCoMKgwqDCoMKgwqDCoMKg wqBhMQo+ICsjZGVmaW5lIGRhdGExwqDCoMKgwqDCoMKgwqDCoMKgwqBhMgo+ICsjZGVmaW5lIGRh dGEywqDCoMKgwqDCoMKgwqDCoMKgwqBhMwo+ICsjZGVmaW5lIGFsaWduwqDCoMKgwqDCoMKgwqDC oMKgwqBhNAo+ICsjZGVmaW5lIGRhdGExX29yY2LCoMKgwqDCoMKgdDAKPiArI2RlZmluZSBtMcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdDIKPiArCj4gKyNpZiBfX3Jpc2N2X3hsZW4gPT0gNjQK PiArIyBkZWZpbmUgUkVHX0zCoGxkCj4gKyMgZGVmaW5lIFNaUkVHwqA4Cj4gKyNlbHNlCj4gKyMg ZGVmaW5lIFJFR19MwqBsdwo+ICsjIGRlZmluZSBTWlJFR8KgNAo+ICsjZW5kaWYKPiArCj4gKyNp Zm5kZWYgU1RSQ01QCj4gKyMgZGVmaW5lIFNUUkNNUCBfX3N0cmNtcF96YmIKPiArI2VuZGlmCj4g Kwo+ICsub3B0aW9uIHB1c2gKPiArLm9wdGlvbiBhcmNoLCt6YmIKPiArCj4gK0VOVFJZX0FMSUdO IChTVFJDTVAsIDYpCj4gK8KgwqDCoMKgwqDCoMKgb3LCoMKgwqDCoMKgwqBhbGlnbiwgc3JjMSwg c3JjMgo+ICvCoMKgwqDCoMKgwqDCoGFuZMKgwqDCoMKgwqBhbGlnbiwgYWxpZ24sIFNaUkVHLTEK PiArwqDCoMKgwqDCoMKgwqBibmV6wqDCoMKgwqBhbGlnbiwgTChzaW1wbGVsb29wKQo+ICvCoMKg wqDCoMKgwqDCoGxpwqDCoMKgwqDCoMKgbTEsIC0xCj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIE1h aW4gbG9vcCBmb3IgYWxpZ25lZCBzdHJpbmdzLsKgICovCj4gK8KgwqDCoMKgwqDCoMKgLnAyYWxp Z24gMgo+ICtMKGxvb3ApOgo+ICvCoMKgwqDCoMKgwqDCoFJFR19MwqDCoMKgZGF0YTEsIDAoc3Jj MSkKPiArwqDCoMKgwqDCoMKgwqBSRUdfTMKgwqDCoGRhdGEyLCAwKHNyYzIpCj4gK8KgwqDCoMKg wqDCoMKgb3JjLmLCoMKgwqBkYXRhMV9vcmNiLCBkYXRhMQo+ICvCoMKgwqDCoMKgwqDCoGJuZcKg wqDCoMKgwqBkYXRhMV9vcmNiLCBtMSwgTChmb3VuZG51bGwpCj4gK8KgwqDCoMKgwqDCoMKgYWRk acKgwqDCoMKgc3JjMSwgc3JjMSwgU1pSRUcKPiArwqDCoMKgwqDCoMKgwqBhZGRpwqDCoMKgwqBz cmMyLCBzcmMyLCBTWlJFRwo+ICvCoMKgwqDCoMKgwqDCoGJlccKgwqDCoMKgwqBkYXRhMSwgZGF0 YTIsIEwobG9vcCkKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogV29yZHMgZG9uJ3QgbWF0Y2gsIGFu ZCBubyBudWxsIGJ5dGUgaW4gdGhlIGZpcnN0IHdvcmQuCj4gK8KgwqDCoMKgwqDCoMKgICogR2V0 IGJ5dGVzIGluIGJpZy1lbmRpYW4gb3JkZXIgYW5kIGNvbXBhcmUuwqAgKi8KPiArI2lmIF9fQllU RV9PUkRFUl9fID09IF9fT1JERVJfTElUVExFX0VORElBTl9fCj4gK8KgwqDCoMKgwqDCoMKgcmV2 OMKgwqDCoMKgZGF0YTEsIGRhdGExCj4gK8KgwqDCoMKgwqDCoMKgcmV2OMKgwqDCoMKgZGF0YTIs IGRhdGEyCj4gKyNlbmRpZgo+ICvCoMKgwqDCoMKgwqDCoC8qIFN5bnRoZXNpemUgKGRhdGExID49 IGRhdGEyKSA/IDEgOiAtMSBpbiBhIGJyYW5jaGxlc3MKPiBzZXF1ZW5jZS7CoCAqLwo+ICvCoMKg wqDCoMKgwqDCoHNsdHXCoMKgwqDCoHJlc3VsdCwgZGF0YTEsIGRhdGEyCj4gK8KgwqDCoMKgwqDC oMKgbmVnwqDCoMKgwqDCoHJlc3VsdCwgcmVzdWx0Cj4gK8KgwqDCoMKgwqDCoMKgb3JpwqDCoMKg wqDCoHJlc3VsdCwgcmVzdWx0LCAxCj4gK8KgwqDCoMKgwqDCoMKgcmV0Cj4gKwo+ICtMKGZvdW5k bnVsbCk6Cj4gK8KgwqDCoMKgwqDCoMKgLyogRm91bmQgYSBudWxsIGJ5dGUuCj4gK8KgwqDCoMKg wqDCoMKgICogSWYgd29yZHMgZG9uJ3QgbWF0Y2gsIGZhbGwgYmFjayB0byBzaW1wbGUgbG9vcC7C oCAqLwo+ICvCoMKgwqDCoMKgwqDCoGJuZcKgwqDCoMKgwqBkYXRhMSwgZGF0YTIsIEwoc2ltcGxl bG9vcCkKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogT3RoZXJ3aXNlLCBzdHJpbmdzIGFyZSBlcXVh bC7CoCAqLwo+ICvCoMKgwqDCoMKgwqDCoGxpwqDCoMKgwqDCoMKgcmVzdWx0LCAwCj4gK8KgwqDC oMKgwqDCoMKgcmV0Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIFNpbXBsZSBsb29wIGZvciBtaXNh bGlnbmVkIHN0cmluZ3MuwqAgKi8KPiArwqDCoMKgwqDCoMKgwqAucDJhbGlnbiAzCj4gK0woc2lt cGxlbG9vcCk6Cj4gK8KgwqDCoMKgwqDCoMKgbGJ1wqDCoMKgwqDCoGRhdGExLCAwKHNyYzEpCj4g K8KgwqDCoMKgwqDCoMKgbGJ1wqDCoMKgwqDCoGRhdGEyLCAwKHNyYzIpCj4gK8KgwqDCoMKgwqDC oMKgYWRkacKgwqDCoMKgc3JjMSwgc3JjMSwgMQo+ICvCoMKgwqDCoMKgwqDCoGFkZGnCoMKgwqDC oHNyYzIsIHNyYzIsIDEKPiArwqDCoMKgwqDCoMKgwqBibmXCoMKgwqDCoMKgZGF0YTEsIGRhdGEy LCBMKHN1YikKPiArwqDCoMKgwqDCoMKgwqBibmV6wqDCoMKgwqBkYXRhMSwgTChzaW1wbGVsb29w KQo+ICsKPiArTChzdWIpOgo+ICvCoMKgwqDCoMKgwqDCoHN1YsKgwqDCoMKgwqByZXN1bHQsIGRh dGExLCBkYXRhMgo+ICvCoMKgwqDCoMKgwqDCoHJldAo+ICsKPiArLm9wdGlvbiBwb3AKPiArCj4g K0VORCAoU1RSQ01QKQo+ICtsaWJjX2hpZGRlbl9idWlsdGluX2RlZiAoU1RSQ01QKQo+IGRpZmYg LS1naXQgYS9zeXNkZXBzL3Jpc2N2L211bHRpYXJjaC9zdHJjbXBfemJiX3VuYWxpZ25lZC5TCj4g Yi9zeXNkZXBzL3Jpc2N2L211bHRpYXJjaC9zdHJjbXBfemJiX3VuYWxpZ25lZC5TCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi5lYzIxOTgyYjY1Cj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL3N5c2RlcHMvcmlzY3YvbXVsdGlhcmNoL3N0cmNtcF96YmJfdW5hbGlnbmVk LlMKPiBAQCAtMCwwICsxLDIxMyBAQAo+ICsvKiBDb3B5cmlnaHQgKEMpIDIwMjIgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCj4gKwo+ICvCoMKgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo ZSBHTlUgQyBMaWJyYXJ5Lgo+ICsKPiArwqDCoCBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArwqDCoCBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCj4gK8KgwqAg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyCj4gK8KgwqAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCj4gKwo+ICvCoMKgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQo+IHVzZWZ1bCwKPiArwqDCoCBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgo+ICvCoMKgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS7CoCBTZWUgdGhlIEdOVQo+ICvCoMKgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKwo+ICvCoMKgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArwqDCoCBMaWNlbnNl IGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnkuwqAgSWYgbm90LCBzZWUKPiArwqDCoCA8aHR0 cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LsKgICovCj4gKwo+ICsjaW5jbHVkZSA8c3lzZGVw Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvYXNtLmg+Cj4gKwo+ICsvKiBBc3N1bXB0aW9uczogcnZpX3pi YiB3aXRoIGZhc3QgdW5hbGlnbmVkIGFjY2Vzcy7CoCAqLwo+ICsvKiBJbXBsZW1lbnRhdGlvbiBp bnNwaXJlZCBieSBhYXJjaDY0L3N0cmNtcC5TLsKgICovCj4gKwo+ICsjZGVmaW5lIHNyYzHCoMKg wqDCoMKgwqDCoMKgwqDCoMKgYTAKPiArI2RlZmluZSByZXN1bHTCoMKgwqDCoMKgwqDCoMKgwqBh MAo+ICsjZGVmaW5lIHNyYzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYTEKPiArI2RlZmluZSBvZmbC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhMwo+ICsjZGVmaW5lIG0xwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBhNAo+ICsjZGVmaW5lIGFsaWduMcKgwqDCoMKgwqDCoMKgwqDCoGE1Cj4gKyNkZWZp bmUgc3JjM8KgwqDCoMKgwqDCoMKgwqDCoMKgwqBhNgo+ICsjZGVmaW5lIHRtcMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGE3Cj4gKwo+ICsjZGVmaW5lIGRhdGExwqDCoMKgwqDCoMKgwqDCoMKgwqB0 MAo+ICsjZGVmaW5lIGRhdGEywqDCoMKgwqDCoMKgwqDCoMKgwqB0MQo+ICsjZGVmaW5lIGIxwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0MAo+ICsjZGVmaW5lIGIywqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB0MQo+ICsjZGVmaW5lIGRhdGEzwqDCoMKgwqDCoMKgwqDCoMKgwqB0Mgo+ICsjZGVm aW5lIGRhdGExX29yY2LCoMKgwqDCoMKgdDMKPiArI2RlZmluZSBkYXRhM19vcmNiwqDCoMKgwqDC oHQ0Cj4gKyNkZWZpbmUgc2hpZnTCoMKgwqDCoMKgwqDCoMKgwqDCoHQ1Cj4gKwo+ICsjaWYgX19y aXNjdl94bGVuID09IDY0Cj4gKyMgZGVmaW5lIFJFR19MwqBsZAo+ICsjIGRlZmluZSBTWlJFR8Kg OAo+ICsjIGRlZmluZSBQVFJMT0fCoMKgwqDCoMKgwqDCoMKgMwo+ICsjZWxzZQo+ICsjIGRlZmlu ZSBSRUdfTMKgbHcKPiArIyBkZWZpbmUgU1pSRUfCoDQKPiArIyBkZWZpbmUgUFRSTE9HwqDCoMKg wqDCoMKgwqDCoDIKPiArI2VuZGlmCj4gKwo+ICsjaWYgX19CWVRFX09SREVSX18gPT0gX19PUkRF Ul9CSUdfRU5ESUFOX18KPiArIyBlcnJvciBiaWcgZW5kaWFuIGlzIHVudGVzdGVkIQo+ICsjIGRl ZmluZSBDWsKgwqDCoMKgY3R6Cj4gKyMgZGVmaW5lIFNISUZUwqBzcmwKPiArIyBkZWZpbmUgU0hJ RlQywqDCoMKgwqDCoMKgwqDCoHNsbAo+ICsjZWxzZQo+ICsjIGRlZmluZSBDWsKgwqDCoMKgY3R6 Cj4gKyMgZGVmaW5lIFNISUZUwqBzbGwKPiArIyBkZWZpbmUgU0hJRlQywqDCoMKgwqDCoMKgwqDC oHNybAo+ICsjZW5kaWYKPiArCj4gKyNpZm5kZWYgU1RSQ01QCj4gKyMgZGVmaW5lIFNUUkNNUCBf X3N0cmNtcF96YmJfdW5hbGlnbmVkCj4gKyNlbmRpZgo+ICsKPiArLm9wdGlvbiBwdXNoCj4gKy5v cHRpb24gYXJjaCwremJiCj4gKwo+ICtFTlRSWV9BTElHTiAoU1RSQ01QLCA2KQo+ICvCoMKgwqDC oMKgwqDCoC8qIG9mZi4uLmRlbHRhIGZyb20gc3JjMSB0byBzcmMyLsKgICovCj4gK8KgwqDCoMKg wqDCoMKgc3ViwqDCoMKgwqDCoG9mZiwgc3JjMiwgc3JjMQo+ICvCoMKgwqDCoMKgwqDCoGxpwqDC oMKgwqDCoMKgbTEsIC0xCj4gK8KgwqDCoMKgwqDCoMKgYW5kacKgwqDCoMKgdG1wLCBvZmYsIFNa UkVHLTEKPiArwqDCoMKgwqDCoMKgwqBhbmRpwqDCoMKgwqBhbGlnbjEsIHNyYzEsIFNaUkVHLTEK PiArwqDCoMKgwqDCoMKgwqBibmV6wqDCoMKgwqB0bXAsIEwobWlzYWxpZ25lZDgpCj4gK8KgwqDC oMKgwqDCoMKgYm5lesKgwqDCoMKgYWxpZ24xLCBMKG11dHVhbF9hbGlnbikKPiArCj4gK8KgwqDC oMKgwqDCoMKgLnAyYWxpZ24gNAo+ICtMKGxvb3BfYWxpZ25lZCk6Cj4gK8KgwqDCoMKgwqDCoMKg UkVHX0zCoMKgwqBkYXRhMSwgMChzcmMxKQo+ICvCoMKgwqDCoMKgwqDCoGFkZMKgwqDCoMKgwqB0 bXAsIHNyYzEsIG9mZgo+ICvCoMKgwqDCoMKgwqDCoGFkZGnCoMKgwqDCoHNyYzEsIHNyYzEsIFNa UkVHCj4gK8KgwqDCoMKgwqDCoMKgUkVHX0zCoMKgwqBkYXRhMiwgMCh0bXApCj4gKwo+ICtMKHN0 YXJ0X3JlYWxpZ25lZCk6Cj4gK8KgwqDCoMKgwqDCoMKgb3JjLmLCoMKgwqBkYXRhMV9vcmNiLCBk YXRhMQo+ICvCoMKgwqDCoMKgwqDCoGJuZcKgwqDCoMKgwqBkYXRhMV9vcmNiLCBtMSwgTChlbmQp Cj4gK8KgwqDCoMKgwqDCoMKgYmVxwqDCoMKgwqDCoGRhdGExLCBkYXRhMiwgTChsb29wX2FsaWdu ZWQpCj4gKwo+ICtMKGZhc3RfZW5kKToKPiArwqDCoMKgwqDCoMKgwqAvKiBXb3JkcyBkb24ndCBt YXRjaCwgYW5kIG5vIE5VTCBieXRlIGluIG9uZSB3b3JkLgo+ICvCoMKgwqDCoMKgwqDCoMKgwqAg R2V0IGJ5dGVzIGluIGJpZy1lbmRpYW4gb3JkZXIgYW5kIGNvbXBhcmUgYXMgd29yZHMuwqAgKi8K PiArI2lmIF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfTElUVExFX0VORElBTl9fCj4gK8KgwqDC oMKgwqDCoMKgcmV2OMKgwqDCoMKgZGF0YTEsIGRhdGExCj4gK8KgwqDCoMKgwqDCoMKgcmV2OMKg wqDCoMKgZGF0YTIsIGRhdGEyCj4gKyNlbmRpZgo+ICvCoMKgwqDCoMKgwqDCoC8qIFN5bnRoZXNp emUgKGRhdGExID49IGRhdGEyKSA/IDEgOiAtMSBpbiBhIGJyYW5jaGxlc3MKPiBzZXF1ZW5jZS7C oCAqLwo+ICvCoMKgwqDCoMKgwqDCoHNsdHXCoMKgwqDCoHJlc3VsdCwgZGF0YTEsIGRhdGEyCj4g K8KgwqDCoMKgwqDCoMKgbmVnwqDCoMKgwqDCoHJlc3VsdCwgcmVzdWx0Cj4gK8KgwqDCoMKgwqDC oMKgb3JpwqDCoMKgwqDCoHJlc3VsdCwgcmVzdWx0LCAxCj4gK8KgwqDCoMKgwqDCoMKgcmV0Cj4g Kwo+ICtMKGVuZF9vcmMpOgo+ICvCoMKgwqDCoMKgwqDCoG9yYy5iwqDCoMKgZGF0YTFfb3JjYiwg ZGF0YTEKPiArTChlbmQpOgo+ICvCoMKgwqDCoMKgwqDCoC8qIFdvcmRzIGRvbid0IG1hdGNoIG9y IE5VTCBieXRlIGluIGF0IGxlYXN0IG9uZSB3b3JkLgo+ICvCoMKgwqDCoMKgwqDCoMKgwqAgZGF0 YTFfb3JjYiBob2xkcyBvcmMuYiB2YWx1ZSBvZiBkYXRhMS7CoCAqLwo+ICvCoMKgwqDCoMKgwqDC oHhvcsKgwqDCoMKgwqB0bXAsIGRhdGExLCBkYXRhMgo+ICvCoMKgwqDCoMKgwqDCoG9yYy5iwqDC oMKgdG1wLCB0bXAKPiArCj4gK8KgwqDCoMKgwqDCoMKgb3JuwqDCoMKgwqDCoHRtcCwgdG1wLCBk YXRhMV9vcmNiCj4gK8KgwqDCoMKgwqDCoMKgQ1rCoMKgwqDCoMKgwqBzaGlmdCwgdG1wCj4gKwo+ ICsjaWYgX19CWVRFX09SREVSX18gPT0gX19PUkRFUl9MSVRUTEVfRU5ESUFOX18KPiArwqDCoMKg wqDCoMKgwqByZXY4wqDCoMKgwqBkYXRhMSwgZGF0YTEKPiArwqDCoMKgwqDCoMKgwqByZXY4wqDC oMKgwqBkYXRhMiwgZGF0YTIKPiArI2VuZGlmCj4gK8KgwqDCoMKgwqDCoMKgc2xswqDCoMKgwqDC oGRhdGExLCBkYXRhMSwgc2hpZnQKPiArwqDCoMKgwqDCoMKgwqBzbGzCoMKgwqDCoMKgZGF0YTIs IGRhdGEyLCBzaGlmdAo+ICvCoMKgwqDCoMKgwqDCoHNybMKgwqDCoMKgwqBiMSwgZGF0YTEsIFNa UkVHKjgtOAo+ICvCoMKgwqDCoMKgwqDCoHNybMKgwqDCoMKgwqBiMiwgZGF0YTIsIFNaUkVHKjgt OAo+ICsKPiArTChlbmRfc2luZ2xlYnl0ZSk6Cj4gK8KgwqDCoMKgwqDCoMKgc3ViwqDCoMKgwqDC oHJlc3VsdCwgYjEsIGIyCj4gK8KgwqDCoMKgwqDCoMKgcmV0Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oC5wMmFsaWduIDQKPiArTChtdXR1YWxfYWxpZ24pOgo+ICvCoMKgwqDCoMKgwqDCoC8qIFNvdXJj ZXMgYXJlIG11dHVhbGx5IGFsaWduZWQsIGJ1dCBhcmUgbm90IGN1cnJlbnRseSBhdCBhbgo+ICvC oMKgwqDCoMKgwqDCoMKgwqAgYWxpZ25tZW50IGJvdW5kYXJ5LsKgIFJvdW5kIGRvd24gdGhlIGFk ZHJlc3NlcyBhbmQgdGhlbiBtYXNrCj4gb2ZmCj4gK8KgwqDCoMKgwqDCoMKgwqDCoCB0aGUgYnl0 ZXMgdGhhdCBwcmVjZWRlIHRoZSBzdGFydCBwb2ludC7CoCAqLwo+ICvCoMKgwqDCoMKgwqDCoGFu ZGnCoMKgwqDCoHNyYzEsIHNyYzEsIC1TWlJFRwo+ICvCoMKgwqDCoMKgwqDCoGFkZMKgwqDCoMKg wqB0bXAsIHNyYzEsIG9mZgo+ICvCoMKgwqDCoMKgwqDCoFJFR19MwqDCoMKgZGF0YTEsIDAoc3Jj MSkKPiArwqDCoMKgwqDCoMKgwqBhZGRpwqDCoMKgwqBzcmMxLCBzcmMxLCBTWlJFRwo+ICvCoMKg wqDCoMKgwqDCoFJFR19MwqDCoMKgZGF0YTIsIDAodG1wKQo+ICvCoMKgwqDCoMKgwqDCoC8qIEdl dCBudW1iZXIgb2YgYml0cyB0byBtYXNrLsKgICovCj4gK8KgwqDCoMKgwqDCoMKgc2xswqDCoMKg wqDCoHNoaWZ0LCBzcmMyLCAzCj4gK8KgwqDCoMKgwqDCoMKgLyogQml0cyB0byBtYXNrIGFyZSBu b3cgMCwgb3RoZXJzIGFyZSAxLsKgICovCj4gK8KgwqDCoMKgwqDCoMKgU0hJRlTCoMKgwqB0bXAs IG0xLCBzaGlmdAo+ICvCoMKgwqDCoMKgwqDCoC8qIE9yIHdpdGggaW52ZXJ0ZWQgdmFsdWUgLT4g bWFza2VkIGJpdHMgYmVjb21lIDEuwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBvcm7CoMKgwqDCoMKg ZGF0YTEsIGRhdGExLCB0bXAKPiArwqDCoMKgwqDCoMKgwqBvcm7CoMKgwqDCoMKgZGF0YTIsIGRh dGEyLCB0bXAKPiArwqDCoMKgwqDCoMKgwqBqwqDCoMKgwqDCoMKgwqBMKHN0YXJ0X3JlYWxpZ25l ZCkKPiArCj4gK0wobWlzYWxpZ25lZDgpOgo+ICvCoMKgwqDCoMKgwqDCoC8qIFNraXAgc2xvdyBs b29wIGlmIFNSQzEgaXMgYWxpZ25lZC7CoCAqLwo+ICvCoMKgwqDCoMKgwqDCoGJlcXrCoMKgwqDC oGFsaWduMSwgTChzcmMxX2FsaWduZWQpCj4gK0woZG9fbWlzYWxpZ25lZCk6Cj4gK8KgwqDCoMKg wqDCoMKgLyogQWxpZ24gU1JDMSB0byA4IGJ5dGVzLsKgICovCj4gK8KgwqDCoMKgwqDCoMKgbGJ1 wqDCoMKgwqDCoGIxLCAwKHNyYzEpCj4gK8KgwqDCoMKgwqDCoMKgbGJ1wqDCoMKgwqDCoGIyLCAw KHNyYzIpCj4gK8KgwqDCoMKgwqDCoMKgYmVxesKgwqDCoMKgYjEsIEwoZW5kX3NpbmdsZWJ5dGUp Cj4gK8KgwqDCoMKgwqDCoMKgYm5lwqDCoMKgwqDCoGIxLCBiMiwgTChlbmRfc2luZ2xlYnl0ZSkK PiArwqDCoMKgwqDCoMKgwqBhZGRpwqDCoMKgwqBzcmMxLCBzcmMxLCAxCj4gK8KgwqDCoMKgwqDC oMKgYWRkacKgwqDCoMKgc3JjMiwgc3JjMiwgMQo+ICvCoMKgwqDCoMKgwqDCoGFuZGnCoMKgwqDC oGFsaWduMSwgc3JjMSwgU1pSRUctMQo+ICvCoMKgwqDCoMKgwqDCoGJuZXrCoMKgwqDCoGFsaWdu MSwgTChkb19taXNhbGlnbmVkKQo+ICsKPiArTChzcmMxX2FsaWduZWQpOgo+ICvCoMKgwqDCoMKg wqDCoC8qIFNSQzEgaXMgYWxpZ25lZC4gQWxpZ24gU1JDMiBkb3duIGFuZCBjaGVjayBmb3IgTlVM IHRoZXJlLgo+ICvCoMKgwqDCoMKgwqDCoCAqIElmIHRoZXJlIGlzIG5vIE5VTCwgd2UgbWF5IHJl YWQgdGhlIG5leHQgd29yZCBmcm9tIFNSQzIuCj4gK8KgwqDCoMKgwqDCoMKgICogSWYgdGhlcmUg aXMgYSBOVUwsIHdlIG11c3Qgbm90IHJlYWQgYSBjb21wbGV0ZSB3b3JkIGZyb20KPiBTUkMyCj4g K8KgwqDCoMKgwqDCoMKgICogYmVjYXVzZSB3ZSBtaWdodCBjcm9zcyBhIHBhZ2UgYm91bmRhcnku wqAgKi8KPiArwqDCoMKgwqDCoMKgwqAvKiBHZXQgbnVtYmVyIG9mIGJpdHMgdG8gbWFzayAodXBw ZXIgYml0cyBhcmUgaWdub3JlZCBieQo+IHNoaWZ0cykuwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBz bGzCoMKgwqDCoMKgc2hpZnQsIHNyYzIsIDMKPiArwqDCoMKgwqDCoMKgwqAvKiBzcmMzIDo9IGFs aWduX2Rvd24gKHNyYzIpwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBhbmRpwqDCoMKgwqBzcmMzLCBz cmMyLCAtU1pSRUcKPiArwqDCoMKgwqDCoMKgwqBSRUdfTMKgwqAgZGF0YTMsIDAoc3JjMykKPiAr wqDCoMKgwqDCoMKgwqBhZGRpwqDCoMKgwqBzcmMzLCBzcmMzLCBTWlJFRwo+ICsKPiArwqDCoMKg wqDCoMKgwqAvKiBCaXRzIHRvIG1hc2sgYXJlIG5vdyAwLCBvdGhlcnMgYXJlIDEuwqAgKi8KPiAr wqDCoMKgwqDCoMKgwqBTSElGVMKgwqDCoHRtcCwgbTEsIHNoaWZ0Cj4gK8KgwqDCoMKgwqDCoMKg LyogT3Igd2l0aCBpbnZlcnRlZCB2YWx1ZSAtPiBtYXNrZWQgYml0cyBiZWNvbWUgMS7CoCAqLwo+ ICvCoMKgwqDCoMKgwqDCoG9ybsKgwqDCoMKgwqBkYXRhM19vcmNiLCBkYXRhMywgdG1wCj4gK8Kg wqDCoMKgwqDCoMKgLyogQ2hlY2sgZm9yIE5VTCBpbiBuZXh0IGFsaWduZWQgd29yZC7CoCAqLwo+ ICvCoMKgwqDCoMKgwqDCoG9yYy5iwqDCoMKgZGF0YTNfb3JjYiwgZGF0YTNfb3JjYgo+ICvCoMKg wqDCoMKgwqDCoGJuZcKgwqDCoMKgwqBkYXRhM19vcmNiLCBtMSwgTCh1bmFsaWduZWRfbnVsKQo+ ICsKPiArwqDCoMKgwqDCoMKgwqAucDJhbGlnbiA0Cj4gK0wobG9vcF91bmFsaWduZWQpOgo+ICvC oMKgwqDCoMKgwqDCoC8qIFJlYWQgdGhlIChhbGlnbmVkKSBkYXRhMSBhbmQgdGhlIHVuYWxpZ25l ZCBkYXRhMi7CoCAqLwo+ICvCoMKgwqDCoMKgwqDCoFJFR19MwqDCoMKgZGF0YTEsIDAoc3JjMSkK PiArwqDCoMKgwqDCoMKgwqBhZGRpwqDCoMKgwqBzcmMxLCBzcmMxLCBTWlJFRwo+ICvCoMKgwqDC oMKgwqDCoFJFR19MwqDCoMKgZGF0YTIsIDAoc3JjMikKPiArwqDCoMKgwqDCoMKgwqBhZGRpwqDC oMKgwqBzcmMyLCBzcmMyLCBTWlJFRwo+ICvCoMKgwqDCoMKgwqDCoG9yYy5iwqDCoMKgZGF0YTFf b3JjYiwgZGF0YTEKPiArwqDCoMKgwqDCoMKgwqBibmXCoMKgwqDCoMKgZGF0YTFfb3JjYiwgbTEs IEwoZW5kKQo+ICvCoMKgwqDCoMKgwqDCoGJuZcKgwqDCoMKgwqBkYXRhMSwgZGF0YTIsIEwoZW5k KQo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBSZWFkIHRoZSBuZXh0IGFsaWduZWQtZG93biB3b3Jk LsKgICovCj4gK8KgwqDCoMKgwqDCoMKgUkVHX0zCoMKgwqBkYXRhMywgMChzcmMzKQo+ICvCoMKg wqDCoMKgwqDCoGFkZGnCoMKgwqDCoHNyYzMsIHNyYzMsIFNaUkVHCj4gK8KgwqDCoMKgwqDCoMKg b3JjLmLCoMKgwqBkYXRhM19vcmNiLCBkYXRhMwo+ICvCoMKgwqDCoMKgwqDCoGJlccKgwqDCoMKg wqBkYXRhM19vcmNiLCBtMSwgTChsb29wX3VuYWxpZ25lZCkKPiArCj4gK0wodW5hbGlnbmVkX251 bCk6Cj4gK8KgwqDCoMKgwqDCoMKgLyogc3JjMSBwb2ludHMgdG8gdW5yZWFkIHdvcmQgKG9ubHkg Zmlyc3QgYnl0ZXMgcmVsZXZhbnQpLgo+ICvCoMKgwqDCoMKgwqDCoCAqIGRhdGEzIGhvbGRzIG5l eHQgYWxpZ25lZC1kb3duIHdvcmQgd2l0aCBOVUwuCj4gK8KgwqDCoMKgwqDCoMKgICogQ29tcGFy ZSB0aGUgZmlyc3QgYnl0ZXMgb2YgZGF0YTEgd2l0aCB0aGUgbGFzdCBieXRlcyBvZgo+IGRhdGEz LsKgICovCj4gK8KgwqDCoMKgwqDCoMKgUkVHX0zCoMKgwqBkYXRhMSwgMChzcmMxKQo+ICvCoMKg wqDCoMKgwqDCoC8qIFNoaWZ0IE5VTCBieXRlcyBpbnRvIGRhdGEzIHRvIGJlY29tZSBkYXRhMi7C oCAqLwo+ICvCoMKgwqDCoMKgwqDCoFNISUZUMsKgwqBkYXRhMiwgZGF0YTMsIHNoaWZ0Cj4gK8Kg wqDCoMKgwqDCoMKgYm5lwqDCoMKgwqDCoGRhdGExLCBkYXRhMiwgTChlbmRfb3JjKQo+ICvCoMKg wqDCoMKgwqDCoGxpwqDCoMKgwqDCoMKgcmVzdWx0LCAwCj4gK8KgwqDCoMKgwqDCoMKgcmV0Cj4g Kwo+ICsub3B0aW9uIHBvcAo+ICsKPiArRU5EIChTVFJDTVApCj4gK2xpYmNfaGlkZGVuX2J1aWx0 aW5fZGVmIChTVFJDTVApCgotLSAKWGkgUnVveWFvIDx4cnkxMTFAeHJ5MTExLnNpdGU+ClNjaG9v bCBvZiBBZXJvc3BhY2UgU2NpZW5jZSBhbmQgVGVjaG5vbG9neSwgWGlkaWFuIFVuaXZlcnNpdHkK