From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from xry111.site (xry111.site [IPv6:2001:470:683e::1]) by sourceware.org (Postfix) with ESMTPS id 452883858D35 for ; Tue, 22 Nov 2022 16:44:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 452883858D35 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=1669135465; bh=yJXP0obO7TC3uZlvxLFdRltNiqZd9t3p9nH7rTMngvY=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=Te4e+bHd7ix8IJPboiWp4FDsVsqu50X/smJesWuZMftEeVoAbNTMpA47j4Fm7AOUz k9vBaLM+nWeH2pKjIUlFQcaRVfe97qSPJr3PqRnPKWto7/thZU8sCNn7x1wWov8BR4 S2Yqxs2iM0UL8KlyjYJE00XVpVZqDsDaQVuATKxU= Received: from localhost.localdomain (xry111.site [IPv6:2001:470:683e::1]) (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 D008C65CAF; Tue, 22 Nov 2022 11:44:24 -0500 (EST) Message-ID: <32b7624b24d1f48805d4c777ebde1380fd3d1596.camel@xry111.site> Subject: Re: [PATCH v4] LoongArch: Optimize immediate load. From: Xi Ruoyao To: Lulu Cheng , gcc-patches@gcc.gnu.org Cc: i@xen0n.name, xuchenghua@loongson.cn Date: Wed, 23 Nov 2022 00:44:22 +0800 In-Reply-To: References: <20221117095909.2896386-1-chenglulu@loongson.cn> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.0 MIME-Version: 1.0 X-Spam-Status: No, score=-5.2 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FROM_SUSPICIOUS_NTLD,GIT_PATCH_0,KAM_SHORT,LIKELY_SPAM_FROM,PDS_OTHER_BAD_TLD,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: T24gVHVlLCAyMDIyLTExLTIyIGF0IDIyOjAzICswODAwLCBYaSBSdW95YW8gdmlhIEdjYy1wYXRj aGVzIHdyb3RlOgo+IFdoaWxlIEkgc3RpbGwgY2FuJ3QgZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1t ZWRpYXRlIGxvYWQgaXNzdWUgYW5kIGhvdwo+IHRoaXMgcGF0Y2ggZml4IGl0LCBJJ3ZlIHRlc3Rl ZCB0aGlzIHBhdGNoIChhbG9uZ3NpZGUgdGhlIHByZWZldGNoCj4gaW5zdHJ1Y3Rpb24gcGF0Y2gp IHdpdGggYm9vdHN0cmFwLXVic2FuLsKgIEFuZCB0aGUgY29tcGlsZWQgcmVzdWx0IG9mCj4gaW1t LWxvYWQxLmMgc2VlbXMgT0suCgpBbmQgaXQncyBkb2luZyBjb3JyZWN0IHRoaW5nIGZvciBHbGli YyAiaW1wcm92ZWQgZ2VuZXJpYyBzdHJpbmcKZnVuY3Rpb25zIiBwYXRjaCwgcHJvZHVjaW5nIHNv bWUgcmVhbGx5IHRpZ2h0IGxvb3Agbm93LgoKPiAKPiBPbiBUaHUsIDIwMjItMTEtMTcgYXQgMTc6 NTkgKzA4MDAsIEx1bHUgQ2hlbmcgd3JvdGU6Cj4gPiB2MSAtPiB2MjoKPiA+IDEuIENoYW5nZSB0 aGUgY29kZSBmb3JtYXQuCj4gPiAyLiBGaXggYnVncyBpbiB0aGUgY29kZS4KPiA+IAo+ID4gdjIg LT4gdjM6Cj4gPiBNb2RpZnlpbmcgYSBjb2RlIGltcGxlbWVudGF0aW9uIG9mIGFuIHVuZGVmaW5l ZCBiZWhhdmlvci4KPiA+IAo+ID4gdjMgLT4gdjQ6Cj4gPiBNb3ZlIHRoZSBwYXJ0IG9mIHRoZSBp bW1lZGlhdGUgbnVtYmVyIGRlY29tcG9zaXRpb24gZnJvbSBleHBhbmQgcGFzcwo+ID4gdG8gc3Bs aXQKPiA+IHBhc3MuCj4gPiAKPiA+IEJvdGggcmVncmVzc2lvbiB0ZXN0cyBhbmQgc3BlYzIwMDYg cGFzc2VkLgo+ID4gCj4gPiBUaGUgcHJvYmxlbSBtZW50aW9uZWQgaW4gdGhlIGxpbmsgZG9lcyBu b3QgbW92ZSB0aGUgZm91ciBpbW1lZGlhdGUKPiA+IGxvYWQKPiA+IGluc3RydWN0aW9ucyBvdXQg b2YgdGhlIGxvb3AuIEl0IGhhcyBiZWVuIG9wdGltaXplZC4gTm93LCBhcyBpbiB0aGUKPiA+IHRl c3QgY2FzZSwKPiA+IGZvdXIgaW1tZWRpYXRlIGxvYWQgaW5zdHJ1Y3Rpb25zIGFyZSBnZW5lcmF0 ZWQgb3V0c2lkZSB0aGUgbG9vcC4KPiA+ICgKPiA+IGh0dHBzOi8vc291cmNld2FyZS5vcmcvcGlw ZXJtYWlsL2xpYmMtYWxwaGEvMjAyMi1TZXB0ZW1iZXIvMTQyMjAyLmh0bWwKPiA+ICkKPiA+IAo+ ID4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KPiA+IEJlY2F1c2UgbG9vcDJfaW52YXJpYW50IHBhc3Mgd2lsbCBleHRy YWN0IHRoZSBpbnN0cnVjdGlvbnMgdGhhdCBkbwo+ID4gbm90Cj4gPiBjaGFuZ2UKPiA+IGluIHRo ZSBsb29wIG91dCBvZiB0aGUgbG9vcCwgc29tZSBpbnN0cnVjdGlvbnMgd2lsbCBub3QgbWVldCB0 aGUKPiA+IGV4dHJhY3Rpb24KPiA+IGNvbmRpdGlvbnMgaWYgdGhlIG1hY2hpbmUgcGVyZm9ybXMg aW1tZWRpYXRlIGRlY29tcG9zaXRpb24gd2hpbGUKPiA+IGV4cGFuZCBwYXNzLAo+ID4gc28gdGhl IGltbWVkaWF0ZSBkZWNvbXBvc2l0aW9uIHdpbGwgYmUgdHJhbnNmZXJyZWQgdG8gdGhlIHNwbGl0 Cj4gPiBwcm9jZXNzLgo+ID4gCj4gPiBnY2MvQ2hhbmdlTG9nOgo+ID4gCj4gPiDCoMKgwqDCoMKg wqDCoMKgKiBjb25maWcvbG9vbmdhcmNoL2xvb25nYXJjaC5jYyAoZW51bQo+ID4gbG9vbmdhcmNo X2xvYWRfaW1tX21ldGhvZCk6Cj4gPiDCoMKgwqDCoMKgwqDCoMKgUmVtb3ZlIHRoZSBtZW1iZXIg TUVUSE9EX0lOU1YgdGhhdCBpcyBub3QgY3VycmVudGx5IHVzZWQuCj4gPiDCoMKgwqDCoMKgwqDC oMKgKHN0cnVjdCBsb29uZ2FyY2hfaW50ZWdlcl9vcCk6IERlZmluZSBhIG5ldyBtZW1iZXIKPiA+ IGN1cnJfdmFsdWUsCj4gPiDCoMKgwqDCoMKgwqDCoMKgdGhhdCByZWNvcmRzIHRoZSB2YWx1ZSBv ZiB0aGUgbnVtYmVyIHN0b3JlZCBpbiB0aGUKPiA+IGRlc3RpbmF0aW9uCj4gPiDCoMKgwqDCoMKg wqDCoMKgcmVnaXN0ZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24g aGFzIHJ1bi4KPiA+IMKgwqDCoMKgwqDCoMKgwqAobG9vbmdhcmNoX2J1aWxkX2ludGVnZXIpOiBB c3NpZ24gYSB2YWx1ZSB0byB0aGUgY3Vycl92YWx1ZQo+ID4gbWVtYmVyIHZhcmlhYmxlLgo+ID4g wqDCoMKgwqDCoMKgwqDCoChsb29uZ2FyY2hfbW92ZV9pbnRlZ2VyKTogQWRkcyBpbmZvcm1hdGlv biBmb3IgdGhlIGltbWVkaWF0ZQo+ID4gbG9hZCBpbnN0cnVjdGlvbi4KPiA+IMKgwqDCoMKgwqDC oMKgwqAqIGNvbmZpZy9sb29uZ2FyY2gvbG9vbmdhcmNoLm1kICgqbW92ZGlfMzJiaXQpOiBSZWRl ZmluZSBhcwo+ID4gZGVmaW5lX2luc25fYW5kX3NwbGl0Lgo+ID4gwqDCoMKgwqDCoMKgwqDCoCgq bW92ZGlfNjRiaXQpOiBMaWtld2lzZS4KPiA+IMKgwqDCoMKgwqDCoMKgwqAoKm1vdnNpX2ludGVy bmFsKTogTGlrZXdpc2UuCj4gPiDCoMKgwqDCoMKgwqDCoMKgKCptb3ZoaV9pbnRlcm5hbCk6IExp a2V3aXNlLgo+ID4gwqDCoMKgwqDCoMKgwqDCoCogY29uZmlnL2xvb25nYXJjaC9wcmVkaWNhdGVz Lm1kOiBSZXR1cm4gdHJ1ZSBhcyBsb25nIGFzIGl0Cj4gPiBpcwo+ID4gQ09OU1RfSU5ULCBlbnN1 cmUKPiA+IMKgwqDCoMKgwqDCoMKgwqB0aGF0IHRoZSBpbW1lZGlhdGUgbnVtYmVyIGlzIG5vdCBv cHRpbWl6ZWQgYnkgZGVjb21wb3NpdGlvbgo+ID4gZHVyaW5nIGV4cGFuZAo+ID4gwqDCoMKgwqDC oMKgwqDCoG9wdGltaXphdGlvbiBsb29wLgo+ID4gCj4gPiBnY2MvdGVzdHN1aXRlL0NoYW5nZUxv ZzoKPiA+IAo+ID4gwqDCoMKgwqDCoMKgwqDCoCogZ2NjLnRhcmdldC9sb29uZ2FyY2gvaW1tLWxv YWQuYzogTmV3IHRlc3QuCj4gPiDCoMKgwqDCoMKgwqDCoMKgKiBnY2MudGFyZ2V0L2xvb25nYXJj aC9pbW0tbG9hZDEuYzogTmV3IHRlc3QuCj4gPiAtLS0KPiA+IMKgZ2NjL2NvbmZpZy9sb29uZ2Fy Y2gvbG9vbmdhcmNoLmNjwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgNjIgKysrKysrKysrKy0t LS0tLQo+ID4gLS0KPiA+IC0KPiA+IMKgZ2NjL2NvbmZpZy9sb29uZ2FyY2gvbG9vbmdhcmNoLm1k wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgNDQgKysrKysrKysrKystLQo+ID4gwqBnY2MvY29u ZmlnL2xvb25nYXJjaC9wcmVkaWNhdGVzLm1kwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMiAr LQo+ID4gwqBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvbG9vbmdhcmNoL2ltbS1sb2FkLmMgfCAx MCArKysKPiA+IMKgLi4uL2djYy50YXJnZXQvbG9vbmdhcmNoL2ltbS1sb2FkMS5jwqDCoMKgwqDC oMKgwqDCoMKgIHwgMjYgKysrKysrKysKPiA+IMKgNSBmaWxlcyBjaGFuZ2VkLCAxMTAgaW5zZXJ0 aW9ucygrKSwgMzQgZGVsZXRpb25zKC0pCj4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvbG9vbmdhcmNoL2ltbS1sb2FkLmMKPiA+IMKgY3JlYXRlIG1vZGUg MTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9sb29uZ2FyY2gvaW1tLWxvYWQxLmMKPiA+ IAo+ID4gZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbG9vbmdhcmNoL2xvb25nYXJjaC5jYwo+ID4g Yi9nY2MvY29uZmlnL2xvb25nYXJjaC9sb29uZ2FyY2guY2MKPiA+IGluZGV4IDhlZTMyYzkwNTcz Li45ZTBkNmM3YzNlYSAxMDA2NDQKPiA+IC0tLSBhL2djYy9jb25maWcvbG9vbmdhcmNoL2xvb25n YXJjaC5jYwo+ID4gKysrIGIvZ2NjL2NvbmZpZy9sb29uZ2FyY2gvbG9vbmdhcmNoLmNjCj4gPiBA QCAtMTM5LDIyICsxMzksMjEgQEAgc3RydWN0IGxvb25nYXJjaF9hZGRyZXNzX2luZm8KPiA+IMKg Cj4gPiDCoMKgwqAgTUVUSE9EX0xVNTJJOgo+ID4gwqDCoMKgwqDCoCBMb2FkIDUyLTYzIGJpdCBv ZiB0aGUgaW1tZWRpYXRlIG51bWJlci4KPiA+IC0KPiA+IC3CoMKgIE1FVEhPRF9JTlNWOgo+ID4g LcKgwqDCoMKgIGltbWVkaWF0ZSBsaWtlIDB4ZmZmMDAwMDBmZmZmZnh4eAo+ID4gLcKgwqAgKi8K PiA+ICsqLwo+ID4gwqBlbnVtIGxvb25nYXJjaF9sb2FkX2ltbV9tZXRob2QKPiA+IMKgewo+ID4g wqDCoCBNRVRIT0RfTk9STUFMLAo+ID4gwqDCoCBNRVRIT0RfTFUzMkksCj4gPiAtwqAgTUVUSE9E X0xVNTJJLAo+ID4gLcKgIE1FVEhPRF9JTlNWCj4gPiArwqAgTUVUSE9EX0xVNTJJCj4gPiDCoH07 Cj4gPiDCoAo+ID4gwqBzdHJ1Y3QgbG9vbmdhcmNoX2ludGVnZXJfb3AKPiA+IMKgewo+ID4gwqDC oCBlbnVtIHJ0eF9jb2RlIGNvZGU7Cj4gPiDCoMKgIEhPU1RfV0lERV9JTlQgdmFsdWU7Cj4gPiAr wqAgLyogUmVwcmVzZW50IHRoZSByZXN1bHQgb2YgdGhlIGltbWVkaWF0ZSBjb3VudCBvZiB0aGUg bG9hZAo+ID4gaW5zdHJ1Y3Rpb24gYXQKPiA+ICvCoMKgwqDCoCBlYWNoIHN0ZXAuwqAgKi8KPiA+ ICvCoCBIT1NUX1dJREVfSU5UIGN1cnJfdmFsdWU7Cj4gPiDCoMKgIGVudW0gbG9vbmdhcmNoX2xv YWRfaW1tX21ldGhvZCBtZXRob2Q7Cj4gPiDCoH07Cj4gPiDCoAo+ID4gQEAgLTE0NzUsMjQgKzE0 NzQsMjcgQEAgbG9vbmdhcmNoX2J1aWxkX2ludGVnZXIgKHN0cnVjdAo+ID4gbG9vbmdhcmNoX2lu dGVnZXJfb3AgKmNvZGVzLAo+ID4gwqDCoMKgwqAgewo+ID4gwqDCoMKgwqDCoMKgIC8qIFRoZSB2 YWx1ZSBvZiB0aGUgbG93ZXIgMzIgYml0IGJlIGxvYWRlZCB3aXRoIG9uZQo+ID4gaW5zdHJ1Y3Rp b24uCj4gPiDCoMKgwqDCoMKgwqDCoMKgIGx1MTJpLncuwqAgKi8KPiA+IC3CoMKgwqDCoMKgIGNv ZGVzWzBdLmNvZGUgPSBVTktOT1dOOwo+ID4gLcKgwqDCoMKgwqAgY29kZXNbMF0ubWV0aG9kID0g TUVUSE9EX05PUk1BTDsKPiA+IC3CoMKgwqDCoMKgIGNvZGVzWzBdLnZhbHVlID0gbG93X3BhcnQ7 Cj4gPiArwqDCoMKgwqDCoCBjb2Rlc1tjb3N0XS5jb2RlID0gVU5LTk9XTjsKPiA+ICvCoMKgwqDC oMKgIGNvZGVzW2Nvc3RdLm1ldGhvZCA9IE1FVEhPRF9OT1JNQUw7Cj4gPiArwqDCoMKgwqDCoCBj b2Rlc1tjb3N0XS52YWx1ZSA9IGxvd19wYXJ0Owo+ID4gK8KgwqDCoMKgwqAgY29kZXNbY29zdF0u Y3Vycl92YWx1ZSA9IGxvd19wYXJ0Owo+ID4gwqDCoMKgwqDCoMKgIGNvc3QrKzsKPiA+IMKgwqDC oMKgIH0KPiA+IMKgwqAgZWxzZQo+ID4gwqDCoMKgwqAgewo+ID4gwqDCoMKgwqDCoMKgIC8qIGx1 MTJpLncgKyBpb3IuwqAgKi8KPiA+IC3CoMKgwqDCoMKgIGNvZGVzWzBdLmNvZGUgPSBVTktOT1dO Owo+ID4gLcKgwqDCoMKgwqAgY29kZXNbMF0ubWV0aG9kID0gTUVUSE9EX05PUk1BTDsKPiA+IC3C oMKgwqDCoMKgIGNvZGVzWzBdLnZhbHVlID0gbG93X3BhcnQgJiB+KElNTV9SRUFDSCAtIDEpOwo+ ID4gK8KgwqDCoMKgwqAgY29kZXNbY29zdF0uY29kZSA9IFVOS05PV047Cj4gPiArwqDCoMKgwqDC oCBjb2Rlc1tjb3N0XS5tZXRob2QgPSBNRVRIT0RfTk9STUFMOwo+ID4gK8KgwqDCoMKgwqAgY29k ZXNbY29zdF0udmFsdWUgPSBsb3dfcGFydCAmIH4oSU1NX1JFQUNIIC0gMSk7Cj4gPiArwqDCoMKg wqDCoCBjb2Rlc1tjb3N0XS5jdXJyX3ZhbHVlID0gY29kZXNbY29zdF0udmFsdWU7Cj4gPiDCoMKg wqDCoMKgwqAgY29zdCsrOwo+ID4gwqDCoMKgwqDCoMKgIEhPU1RfV0lERV9JTlQgaW9ydiA9IGxv d19wYXJ0ICYgKElNTV9SRUFDSCAtIDEpOwo+ID4gwqDCoMKgwqDCoMKgIGlmIChpb3J2ICE9IDAp Cj4gPiDCoMKgwqDCoMKgwqDCoMKgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqAgY29kZXNbMV0uY29k ZSA9IElPUjsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgIGNvZGVzWzFdLm1ldGhvZCA9IE1FVEhPRF9O T1JNQUw7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoCBjb2Rlc1sxXS52YWx1ZSA9IGlvcnY7Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoCBjb2Rlc1tjb3N0XS5jb2RlID0gSU9SOwo+ID4gK8KgwqDCoMKgwqDC oMKgwqAgY29kZXNbY29zdF0ubWV0aG9kID0gTUVUSE9EX05PUk1BTDsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgIGNvZGVzW2Nvc3RdLnZhbHVlID0gaW9ydjsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgIGNv ZGVzW2Nvc3RdLmN1cnJfdmFsdWUgPSBsb3dfcGFydDsKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoCBj b3N0Kys7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gwqDCoMKgwqAgfQo+ID4gQEAgLTE1MTUs MTEgKzE1MTcsMTQgQEAgbG9vbmdhcmNoX2J1aWxkX2ludGVnZXIgKHN0cnVjdAo+ID4gbG9vbmdh cmNoX2ludGVnZXJfb3AgKmNvZGVzLAo+ID4gwqDCoMKgwqDCoMKgwqDCoHsKPiA+IMKgwqDCoMKg wqDCoMKgwqDCoCBjb2Rlc1tjb3N0XS5tZXRob2QgPSBNRVRIT0RfTFU1Mkk7Cj4gPiDCoMKgwqDC oMKgwqDCoMKgwqAgY29kZXNbY29zdF0udmFsdWUgPSB2YWx1ZSAmIExVNTJJX0I7Cj4gPiArwqDC oMKgwqDCoMKgwqDCoCBjb2Rlc1tjb3N0XS5jdXJyX3ZhbHVlID0gdmFsdWU7Cj4gPiDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIGNvc3QgKyAxOwo+ID4gwqDCoMKgwqDCoMKgwqDCoH0KPiA+IMKg Cj4gPiDCoMKgwqDCoMKgwqAgY29kZXNbY29zdF0ubWV0aG9kID0gTUVUSE9EX0xVMzJJOwo+ID4g wqDCoMKgwqDCoMKgIGNvZGVzW2Nvc3RdLnZhbHVlID0gKHZhbHVlICYgTFUzMklfQikgfCAoc2ln bjUxID8gTFU1MklfQiA6Cj4gPiAwKTsKPiA+ICvCoMKgwqDCoMKgIGNvZGVzW2Nvc3RdLmN1cnJf dmFsdWUgPSAodmFsdWUgJiAweGZmZmZmZmZmZmZmZmYpCj4gPiArwqDCoMKgwqDCoMKgwqB8IChz aWduNTEgPyBMVTUySV9CIDogMCk7Cj4gPiDCoMKgwqDCoMKgwqAgY29zdCsrOwo+ID4gwqAKPiA+ IMKgwqDCoMKgwqDCoCAvKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgNTItNjEgYml0cyBhcmUgc2ln bi1leHRlbmRlZCBmcm9tCj4gPiB0aGUKPiA+IGxvdyBvcmRlciwKPiA+IEBAIC0xNTI4LDYgKzE1 MzMsNyBAQCBsb29uZ2FyY2hfYnVpbGRfaW50ZWdlciAoc3RydWN0Cj4gPiBsb29uZ2FyY2hfaW50 ZWdlcl9vcCAqY29kZXMsCj4gPiDCoMKgwqDCoMKgwqDCoMKgewo+ID4gwqDCoMKgwqDCoMKgwqDC oMKgIGNvZGVzW2Nvc3RdLm1ldGhvZCA9IE1FVEhPRF9MVTUySTsKPiA+IMKgwqDCoMKgwqDCoMKg wqDCoCBjb2Rlc1tjb3N0XS52YWx1ZSA9IHZhbHVlICYgTFU1MklfQjsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgIGNvZGVzW2Nvc3RdLmN1cnJfdmFsdWUgPSB2YWx1ZTsKPiA+IMKgwqDCoMKgwqDCoMKg wqDCoCBjb3N0Kys7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gwqDCoMKgwqAgfQo+ID4gQEAg LTI5MTEsNiArMjkxNyw5IEBAIGxvb25nYXJjaF9tb3ZlX2ludGVnZXIgKHJ0eCB0ZW1wLCBydHgg ZGVzdCwKPiA+IHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgdmFsdWUpCj4gPiDCoMKgwqDCoMKgwqAg ZWxzZQo+ID4gwqDCoMKgwqDCoMKgwqDCoHggPSBmb3JjZV9yZWcgKG1vZGUsIHgpOwo+ID4gwqAK PiA+ICvCoMKgwqDCoMKgIHNldF91bmlxdWVfcmVnX25vdGUgKGdldF9sYXN0X2luc24gKCksIFJF R19FUVVBTCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBHRU5fSU5UIChjb2Rlc1tpLTFdLmN1cnJfdmFsdWUpKTsKPiA+ICsKPiA+IMKgwqDC oMKgwqDCoCBzd2l0Y2ggKGNvZGVzW2ldLm1ldGhvZCkKPiA+IMKgwqDCoMKgwqDCoMKgwqB7Cj4g PiDCoMKgwqDCoMKgwqDCoMKgY2FzZSBNRVRIT0RfTk9STUFMOgo+ID4gQEAgLTI5MTgsMjIgKzI5 MjcsMTcgQEAgbG9vbmdhcmNoX21vdmVfaW50ZWdlciAocnR4IHRlbXAsIHJ0eCBkZXN0LAo+ID4g dW5zaWduZWQgSE9TVF9XSURFX0lOVCB2YWx1ZSkKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOX0lOVCAoY29kZXNbaV0udmFs dWUpKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+IMKgwqDCoMKgwqDCoMKgwqBj YXNlIE1FVEhPRF9MVTMySToKPiA+IC3CoMKgwqDCoMKgwqDCoMKgIGVtaXRfaW5zbiAoCj4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqAgZ2VuX3J0eF9TRVQgKHgsCj4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnZW5fcnR4X0lPUiAoREltb2RlLAo+ID4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBnZW5fcnR4X1pFUk9fRVhURU5EICgKPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBESW1vZGUsIGdlbl9ydHhfU1VCUkVHCj4gPiAoU0ltb2RlLCB4LCAwKSksCj4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIEdFTl9JTlQgKGNvZGVzW2ldLnZhbHVlKSkpKTsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgIGdjY19hc3NlcnQgKG1vZGUgPT0gREltb2RlKTsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgIHggPSBnZW5fcnR4X0lPUiAoREltb2RlLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdlbl9ydHhfWkVST19FWFRFTkQgKERJbW9kZSwK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ2VuX3J0eF9TVUJSRUcK PiA+IChTSW1vZGUsIHgsIDApKSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBHRU5fSU5UIChjb2Rlc1tpXS52YWx1ZSkpOwo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgIGJyZWFrOwo+ID4gwqDCoMKgwqDCoMKgwqDCoGNhc2UgTUVUSE9EX0xVNTJJ Ogo+ID4gLcKgwqDCoMKgwqDCoMKgwqAgZW1pdF9pbnNuIChnZW5fbHU1MmlfZCAoeCwgeCwgR0VO X0lOVCAoMHhmZmZmZmZmZmZmZmZmKSwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTl9JTlQgKGNvZGVzW2ldLnZh bHVlKSkpOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gPiAtwqDCoMKgwqDCoMKgwqBj YXNlIE1FVEhPRF9JTlNWOgo+ID4gLcKgwqDCoMKgwqDCoMKgwqAgZW1pdF9pbnNuICgKPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoCBnZW5fcnR4X1NFVCAoZ2VuX3J0eF9aRVJPX0VYVFJBQ1QgKERJ bW9kZSwgeCwgR0VOX0lOVAo+ID4gKDIwKSwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgR0VOX0lOVCAoMzIpKSwKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGdlbl9ydHhfUkVHIChESW1vZGUsIDApKSk7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoCBnY2NfYXNzZXJ0IChtb2RlID09IERJbW9kZSk7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoCB4ID0gZ2VuX3J0eF9JT1IgKERJbW9kZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnZW5fcnR4X0FORCAoREltb2RlLCB4LCBHRU5f SU5UCj4gPiAoMHhmZmZmZmZmZmZmZmZmKSksCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOX0lOVCAoY29kZXNbaV0udmFsdWUpKTsKPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+IMKgwqDCoMKgwqDCoMKgwqBkZWZhdWx0Ogo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgIGdjY191bnJlYWNoYWJsZSAoKTsKPiA+IGRpZmYgLS1naXQg YS9nY2MvY29uZmlnL2xvb25nYXJjaC9sb29uZ2FyY2gubWQKPiA+IGIvZ2NjL2NvbmZpZy9sb29u Z2FyY2gvbG9vbmdhcmNoLm1kCj4gPiBpbmRleCAyZmRhNTM4MTkwNC4uZjYxZGI2NmQ1MzUgMTAw NjQ0Cj4gPiAtLS0gYS9nY2MvY29uZmlnL2xvb25nYXJjaC9sb29uZ2FyY2gubWQKPiA+ICsrKyBi L2djYy9jb25maWcvbG9vbmdhcmNoL2xvb25nYXJjaC5tZAo+ID4gQEAgLTE3MTgsMjMgKzE3MTgs NDEgQEAgKGRlZmluZV9leHBhbmQgIm1vdmRpIgo+ID4gwqDCoMKgwqAgRE9ORTsKPiA+IMKgfSkK PiA+IMKgCj4gPiAtKGRlZmluZV9pbnNuICIqbW92ZGlfMzJiaXQiCj4gPiArKGRlZmluZV9pbnNu X2FuZF9zcGxpdCAiKm1vdmRpXzMyYml0Igo+ID4gwqDCoCBbKHNldCAobWF0Y2hfb3BlcmFuZDpE SSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIKPiA+ICI9cixyLHIsdywqZiwqZiwqciwqbSIpCj4g PiDCoMKgwqDCoMKgwqDCoCAobWF0Y2hfb3BlcmFuZDpESSAxICJtb3ZlX29wZXJhbmQiCj4gPiAi cixpLHcsciwqSipyLCptLCpmLCpmIikpXQo+ID4gwqDCoCAiIVRBUkdFVF82NEJJVAo+ID4gwqDC oMKgICYmIChyZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1swXSwgREltb2RlKQo+ID4gwqDCoMKg wqDCoMKgwqAgfHwgcmVnX29yXzBfb3BlcmFuZCAob3BlcmFuZHNbMV0sIERJbW9kZSkpIgo+ID4g wqDCoCB7IHJldHVybiBsb29uZ2FyY2hfb3V0cHV0X21vdmUgKG9wZXJhbmRzWzBdLCBvcGVyYW5k c1sxXSk7IH0KPiA+ICvCoCAiQ09OU1RfSU5UX1AgKG9wZXJhbmRzWzFdKSAmJiBSRUdfUCAob3Bl cmFuZHNbMF0pICYmIEdQX1JFR19QCj4gPiAoUkVHTk8KPiA+ICvCoCAob3BlcmFuZHNbMF0pKSIK PiA+ICvCoCBbKGNvbnN0X2ludCAwKV0KPiA+ICvCoCAiCj4gPiArewo+ID4gK8KgIGxvb25nYXJj aF9tb3ZlX2ludGVnZXIgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1swXSwgSU5UVkFMCj4gPiAob3Bl cmFuZHNbMV0pKTsKPiA+ICvCoCBET05FOwo+ID4gK30KPiA+ICvCoCAiCj4gPiDCoMKgIFsoc2V0 X2F0dHIgIm1vdmVfdHlwZSIKPiA+ICJtb3ZlLGNvbnN0LGxvYWQsc3RvcmUsbWd0ZixmcGxvYWQs bWZ0ZyxmcHN0b3JlIikKPiA+IMKgwqDCoCAoc2V0X2F0dHIgIm1vZGUiICJESSIpXSkKPiA+IMKg Cj4gPiAtKGRlZmluZV9pbnNuICIqbW92ZGlfNjRiaXQiCj4gPiArKGRlZmluZV9pbnNuX2FuZF9z cGxpdCAiKm1vdmRpXzY0Yml0Igo+ID4gwqDCoCBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJu b25pbW1lZGlhdGVfb3BlcmFuZCIKPiA+ICI9cixyLHIsdywqZiwqZiwqciwqbSIpCj4gPiDCoMKg wqDCoMKgwqDCoMKgKG1hdGNoX29wZXJhbmQ6REkgMSAibW92ZV9vcGVyYW5kIgo+ID4gInIsWWQs dyxySiwqcipKLCptLCpmLCpmIikpXQo+ID4gwqDCoCAiVEFSR0VUXzY0QklUCj4gPiDCoMKgwqAg JiYgKHJlZ2lzdGVyX29wZXJhbmQgKG9wZXJhbmRzWzBdLCBESW1vZGUpCj4gPiDCoMKgwqDCoMKg wqDCoCB8fCByZWdfb3JfMF9vcGVyYW5kIChvcGVyYW5kc1sxXSwgREltb2RlKSkiCj4gPiDCoMKg IHsgcmV0dXJuIGxvb25nYXJjaF9vdXRwdXRfbW92ZSAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFd KTsgfQo+ID4gK8KgICJDT05TVF9JTlRfUCAob3BlcmFuZHNbMV0pICYmIFJFR19QIChvcGVyYW5k c1swXSkgJiYgR1BfUkVHX1AKPiA+IChSRUdOTwo+ID4gK8KgIChvcGVyYW5kc1swXSkpIgo+ID4g K8KgIFsoY29uc3RfaW50IDApXQo+ID4gK8KgICIKPiA+ICt7Cj4gPiArwqAgbG9vbmdhcmNoX21v dmVfaW50ZWdlciAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzBdLCBJTlRWQUwKPiA+IChvcGVyYW5k c1sxXSkpOwo+ID4gK8KgIERPTkU7Cj4gPiArfQo+ID4gK8KgICIKPiA+IMKgwqAgWyhzZXRfYXR0 ciAibW92ZV90eXBlIgo+ID4gIm1vdmUsY29uc3QsbG9hZCxzdG9yZSxtZ3RmLGZwbG9hZCxtZnRn LGZwc3RvcmUiKQo+ID4gwqDCoMKgIChzZXRfYXR0ciAibW9kZSIgIkRJIildKQo+ID4gwqAKPiA+ IEBAIC0xNzQ5LDEyICsxNzY3LDIxIEBAIChkZWZpbmVfZXhwYW5kICJtb3ZzaSIKPiA+IMKgwqDC oMKgIERPTkU7Cj4gPiDCoH0pCj4gPiDCoAo+ID4gLShkZWZpbmVfaW5zbiAiKm1vdnNpX2ludGVy bmFsIgo+ID4gKyhkZWZpbmVfaW5zbl9hbmRfc3BsaXQgIiptb3ZzaV9pbnRlcm5hbCIKPiA+IMKg wqAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiCj4gPiAi PXIscixyLHcsKmYsKmYsKnIsKm0sKnIsKnoiKQo+ID4gwqDCoMKgwqDCoMKgwqDCoChtYXRjaF9v cGVyYW5kOlNJIDEgIm1vdmVfb3BlcmFuZCIKPiA+ICJyLFlkLHcsckosKnIqSiwqbSwqZiwqZiwq eiwqciIpKV0KPiA+IMKgwqAgIihyZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1swXSwgU0ltb2Rl KQo+ID4gwqDCoMKgwqAgfHwgcmVnX29yXzBfb3BlcmFuZCAob3BlcmFuZHNbMV0sIFNJbW9kZSkp Igo+ID4gwqDCoCB7IHJldHVybiBsb29uZ2FyY2hfb3V0cHV0X21vdmUgKG9wZXJhbmRzWzBdLCBv cGVyYW5kc1sxXSk7IH0KPiA+ICvCoCAiQ09OU1RfSU5UX1AgKG9wZXJhbmRzWzFdKSAmJiBSRUdf UCAob3BlcmFuZHNbMF0pICYmIEdQX1JFR19QCj4gPiAoUkVHTk8KPiA+ICvCoCAob3BlcmFuZHNb MF0pKSIKPiA+ICvCoCBbKGNvbnN0X2ludCAwKV0KPiA+ICvCoCAiCj4gPiArewo+ID4gK8KgIGxv b25nYXJjaF9tb3ZlX2ludGVnZXIgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1swXSwgSU5UVkFMCj4g PiAob3BlcmFuZHNbMV0pKTsKPiA+ICvCoCBET05FOwo+ID4gK30KPiA+ICvCoCAiCj4gPiDCoMKg IFsoc2V0X2F0dHIgIm1vdmVfdHlwZSIKPiA+ICJtb3ZlLGNvbnN0LGxvYWQsc3RvcmUsbWd0Zixm cGxvYWQsbWZ0ZyxmcHN0b3JlLG1mdGcsbWd0ZiIpCj4gPiDCoMKgwqAgKHNldF9hdHRyICJtb2Rl IiAiU0kiKV0pCj4gPiDCoAo+ID4gQEAgLTE3NzQsMTIgKzE4MDEsMjEgQEAgKGRlZmluZV9leHBh bmQgIm1vdmhpIgo+ID4gwqDCoMKgwqAgRE9ORTsKPiA+IMKgfSkKPiA+IMKgCj4gPiAtKGRlZmlu ZV9pbnNuICIqbW92aGlfaW50ZXJuYWwiCj4gPiArKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKm1v dmhpX2ludGVybmFsIgo+ID4gwqDCoCBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJub25pbW1l ZGlhdGVfb3BlcmFuZCIKPiA+ICI9cixyLHIscixtLHIsayIpCj4gPiDCoMKgwqDCoMKgwqDCoMKg KG1hdGNoX29wZXJhbmQ6SEkgMSAibW92ZV9vcGVyYW5kIiAicixZZCxJLG0sckosayxySiIpKV0K PiA+IMKgwqAgIihyZWdpc3Rlcl9vcGVyYW5kIChvcGVyYW5kc1swXSwgSEltb2RlKQo+ID4gwqDC oMKgwqDCoMKgwqAgfHwgcmVnX29yXzBfb3BlcmFuZCAob3BlcmFuZHNbMV0sIEhJbW9kZSkpIgo+ ID4gwqDCoCB7IHJldHVybiBsb29uZ2FyY2hfb3V0cHV0X21vdmUgKG9wZXJhbmRzWzBdLCBvcGVy YW5kc1sxXSk7IH0KPiA+ICvCoCAiQ09OU1RfSU5UX1AgKG9wZXJhbmRzWzFdKSAmJiBSRUdfUCAo b3BlcmFuZHNbMF0pICYmIEdQX1JFR19QCj4gPiAoUkVHTk8KPiA+ICvCoCAob3BlcmFuZHNbMF0p KSIKPiA+ICvCoCBbKGNvbnN0X2ludCAwKV0KPiA+ICvCoCAiCj4gPiArewo+ID4gK8KgIGxvb25n YXJjaF9tb3ZlX2ludGVnZXIgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1swXSwgSU5UVkFMCj4gPiAo b3BlcmFuZHNbMV0pKTsKPiA+ICvCoCBET05FOwo+ID4gK30KPiA+ICvCoCAiCj4gPiDCoMKgIFso c2V0X2F0dHIgIm1vdmVfdHlwZSIgIm1vdmUsY29uc3QsY29uc3QsbG9hZCxzdG9yZSxsb2FkLHN0 b3JlIikKPiA+IMKgwqDCoCAoc2V0X2F0dHIgIm1vZGUiICJISSIpXSkKPiA+IMKgCj4gPiBkaWZm IC0tZ2l0IGEvZ2NjL2NvbmZpZy9sb29uZ2FyY2gvcHJlZGljYXRlcy5tZAo+ID4gYi9nY2MvY29u ZmlnL2xvb25nYXJjaC9wcmVkaWNhdGVzLm1kCj4gPiBpbmRleCA4YmQwYzEzNzZjOS4uNThjM2Rj MjI2MWMgMTAwNjQ0Cj4gPiAtLS0gYS9nY2MvY29uZmlnL2xvb25nYXJjaC9wcmVkaWNhdGVzLm1k Cj4gPiArKysgYi9nY2MvY29uZmlnL2xvb25nYXJjaC9wcmVkaWNhdGVzLm1kCj4gPiBAQCAtMjI2 LDcgKzIyNiw3IEBAIChkZWZpbmVfcHJlZGljYXRlICJtb3ZlX29wZXJhbmQiCj4gPiDCoMKgIHN3 aXRjaCAoR0VUX0NPREUgKG9wKSkKPiA+IMKgwqDCoMKgIHsKPiA+IMKgwqDCoMKgIGNhc2UgQ09O U1RfSU5UOgo+ID4gLcKgwqDCoMKgwqAgcmV0dXJuICFzcGxpdHRhYmxlX2NvbnN0X2ludF9vcGVy YW5kIChvcCwgbW9kZSk7Cj4gPiArwqDCoMKgwqDCoCByZXR1cm4gdHJ1ZTsKPiA+IMKgCj4gPiDC oMKgwqDCoCBjYXNlIENPTlNUOgo+ID4gwqDCoMKgwqAgY2FzZSBTWU1CT0xfUkVGOgo+ID4gZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9sb29uZ2FyY2gvaW1tLWxvYWQuYwo+ ID4gYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvbG9vbmdhcmNoL2ltbS1sb2FkLmMKPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMC4uYzA0Y2EzMzk5NmYKPiA+ IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9sb29uZ2Fy Y2gvaW1tLWxvYWQuYwo+ID4gQEAgLTAsMCArMSwxMCBAQAo+ID4gKy8qIHsgZGctZG8gY29tcGls ZSB9ICovCj4gPiArLyogeyBkZy1vcHRpb25zICItbWFiaT1scDY0ZCAtTzIgLWZkdW1wLXJ0bC1z cGxpdDEiIH0gKi8KPiA+ICsKPiA+ICtsb25nIGludAo+ID4gK3Rlc3QgKHZvaWQpCj4gPiArewo+ ID4gK8KgIHJldHVybiAweDEyMzQ1Njc4OTBhYmNkZWY7Cj4gPiArfQo+ID4gKy8qIHsgZGctZmlu YWwgeyBzY2FuLXJ0bC1kdW1wLXRpbWVzICJzY2FubmluZyBuZXcgaW5zbiB3aXRoIHVpZCIgNgo+ ID4gInNwbGl0MSIgfSB9ICovCj4gPiArCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2xvb25nYXJjaC9pbW0tbG9hZDEuYwo+ID4gYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvbG9vbmdhcmNoL2ltbS1sb2FkMS5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4g aW5kZXggMDAwMDAwMDAwMDAuLjJmZjAyOTcxMjM5Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysg Yi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvbG9vbmdhcmNoL2ltbS1sb2FkMS5jCj4gPiBAQCAt MCwwICsxLDI2IEBACj4gPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8KPiA+ICsvKiB7IGRnLW9w dGlvbnMgIi1tYWJpPWxwNjRkIC1PMiIgfSAqLwo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlcgo+ID4gInRlc3Q6LipsdTUyaVwuZC4qXG5cdGFkZGlcLncuKlxuXC5MMjoiIH0gfSAq Lwo+ID4gKwo+ID4gKwo+ID4gK2V4dGVybiBsb25nIGxvbmcgYlsxMF07Cj4gPiArc3RhdGljIGlu bGluZSBsb25nIGxvbmcKPiA+ICtyZXBlYXRfYnl0ZXMgKHZvaWQpCj4gPiArewo+ID4gK8KgIGxv bmcgbG9uZyByID0gMHgwMTAxMDEwMTAxMDEwMTAxOwo+ID4gKwo+ID4gK8KgIHJldHVybiByOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIGxvbmcgbG9uZwo+ID4gK2hpZ2hiaXRfbWFz ayAobG9uZyBsb25nIG0pCj4gPiArewo+ID4gK8KgIHJldHVybiBtICYgcmVwZWF0X2J5dGVzICgp Owo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIHRlc3QobG9uZyBsb25nICphKQo+ID4gK3sKPiA+ICvC oCBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspCj4gPiArwqDCoMKgIGJbaV0gPSBoaWdoYml0 X21hc2sgKGFbaV0pOwo+ID4gKwo+ID4gK30KPiAKCi0tIApYaSBSdW95YW8gPHhyeTExMUB4cnkx MTEuc2l0ZT4KU2Nob29sIG9mIEFlcm9zcGFjZSBTY2llbmNlIGFuZCBUZWNobm9sb2d5LCBYaWRp YW4gVW5pdmVyc2l0eQo=