From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from zg8tndyumtaxlji0oc4xnzya.icoremail.net (zg8tndyumtaxlji0oc4xnzya.icoremail.net [46.101.248.176]) by sourceware.org (Postfix) with SMTP id DDA9D3857C55 for ; Fri, 3 Feb 2023 08:52:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DDA9D3857C55 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=eswincomputing.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=eswincomputing.com Received: from E0001797DT (unknown [113.200.72.66]) by app1 (Coremail) with SMTP id EwgMCgBn8YNby9xjpz4BAA--.188S2; Fri, 03 Feb 2023 16:52:44 +0800 (CST) Date: Fri, 3 Feb 2023 16:52:44 +0800 From: "Fei Gao" To: gcc-patches Cc: jeffreyalaw , "Kito Cheng" , "Palmer Dabbelt" Subject: [PING] [PATCH 2/3] RISC-V: optimize stack manipulation in save-restore References: <20221201100332.22226-1-gaofei@eswincomputing.com>, <20221201100332.22226-3-gaofei@eswincomputing.com> X-Priority: 3 X-GUID: 339E44D9-87CD-4F04-BFDF-C4835FD5FAE5 X-Has-Attach: no X-Mailer: Foxmail 7.2.15.80[cn] Mime-Version: 1.0 Message-ID: <20230203165243892433118@eswincomputing.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-CM-TRANSID:EwgMCgBn8YNby9xjpz4BAA--.188S2 X-Coremail-Antispam: 1UD129KBjvJXoW3WF1DCF1rKF17KFWxWF47twb_yoWfXrW8pr s5tFs3AryUJrn3Ar47Jr18XFy5JrZ5G3W5Wr1IqFy8t3yDArWqqFW2q3W29FyUJF4kXr1Y kF1DZrnxZF97G3DanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUkGb7Iv0xC_Kw4lb4IE77IF4wAFc2x0x2IEx4CE42xK8VAvwI8I cIk0rVWrJVCq3wA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK021l84ACjcxK6xIIjx v20xvE14v26w1j6s0DM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4UJVWxJr1l84ACjcxK 6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_GcCE3s1le2I262IYc4 CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E74AGY7Cv6cx26r4U Jr1UJwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lFcxC0VAYjxAxZF0Ew4 CEw7xC0wCY02Avz4vE14v_GFyl42xK82IYc2Ij64vIr41l42xK82IY6x8ErcxFaVAv8VW8 Jr1UJr1l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s026x 8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r126r1DMIIYrxkI7VAKI48JMIIF0xvE 2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26r4j6F4UMIIF0xvE42 xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv6xkF 7I0E14v26r4j6r4UJwCE64xvF2IEb7IF0Fy7YxBIdaVFxhVjvjDU0xZFpf9x07jWc_fUUU UU= X-CM-SenderInfo: xjdrwv3l6h245lqf0zpsxwx03jof0z/ X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00,BODY_8BITS,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_SHORT,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,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: CkdlbnRsZSBwaW5nLgoKVGhlIHBhdGNoIEkgcHJldmlvdXNseSBzdWJtaXR0ZWQ6CnwgRGF0ZTog V2VkLCAzMCBOb3YgMjAyMiAwMDozODowOCAtMDgwMAp8IFN1YmplY3Q6IFtQQVRDSF0gUklTQy1W OiBvcHRpbWl6ZSBzdGFjayBtYW5pcHVsYXRpb24gaW4gc2F2ZS1yZXN0b3JlCnwgTWVzc2FnZS1J RDogPGdhb2ZlaUBlc3dpbmNvbXB1dGluZy5jb20+CgpJIHNwbGl0IHRoZSBwYXRjaGVzIGFzIHBl ciBQYWxtZXIncyByZXZpZXcgY29tbWVudC4KCkJSCkZlaQoKPlRoZSBzdGFjayB0aGF0IHNhdmUt cmVzdG9yZSByZXNlcnZlcyBpcyBub3Qgd2VsbCBhY2N1bXVsYXRlZCBpbiBzdGFjayBhbGxvY2F0 aW9uIGFuZCBkZWFsbG9jYXRpb24uCj5UaGlzIHBhdGNoIGFsbG93cyBsZXNzIGluc3RydWN0aW9u cyB0byBiZSB1c2VkIGluIHN0YWNrIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBpZiBzYXZl LXJlc3RvcmUgZW5hYmxlZC4KPgo+YmVmb3JlIHBhdGNoOgo+wqAgYmFyOgo+wqDCoMKgIGNhbGwJ dDAsX19yaXNjdl9zYXZlXzQKPsKgwqDCoCBhZGRpCXNwLHNwLC02NAo+wqDCoMKgIC4uLgo+wqDC oMKgIGxpCXQwLC0xMjI4OAo+wqDCoMKgIGFkZGkJdDAsdDAsLTE5NjggIyBvcHRpbWl6ZWQgb3V0 IGFmdGVyIHBhdGNoCj7CoMKgwqAgYWRkCXNwLHNwLHQwICMgcHJvbG9ndWUKPsKgwqDCoCAuLi4K PsKgwqDCoCBsaQl0MCwxMjI4OCAjIGVwaWxvZ3VlCj7CoMKgwqAgYWRkaQl0MCx0MCwyMDAwICMg b3B0aW1pemVkIG91dCBhZnRlciBwYXRjaAo+wqDCoMKgIGFkZAlzcCxzcCx0MAo+wqDCoMKgIC4u Lgo+wqDCoMKgIGFkZGkJc3Asc3AsMzIKPsKgwqDCoCB0YWlsCV9fcmlzY3ZfcmVzdG9yZV80Cj4K PmFmdGVyIHBhdGNoOgo+wqAgYmFyOgo+wqDCoMKgIGNhbGwJdDAsX19yaXNjdl9zYXZlXzQKPsKg wqDCoCBhZGRpCXNwLHNwLC0yMDMyCj7CoMKgwqAgLi4uCj7CoMKgwqAgbGkJdDAsLTEyMjg4Cj7C oMKgwqAgYWRkCXNwLHNwLHQwICMgcHJvbG9ndWUKPsKgwqDCoCAuLi4KPsKgwqDCoCBsaQl0MCwx MjI4OCAjIGVwaWxvZ3VlCj7CoMKgwqAgYWRkCXNwLHNwLHQwCj7CoMKgwqAgLi4uCj7CoMKgwqAg YWRkaQlzcCxzcCwyMDMyCj7CoMKgwqAgdGFpbAlfX3Jpc2N2X3Jlc3RvcmVfNAo+Cj5nY2MvQ2hh bmdlTG9nOgo+Cj7CoMKgwqDCoMKgwqDCoCAqIGNvbmZpZy9yaXNjdi9yaXNjdi5jYyAocmlzY3Zf ZXhwYW5kX3Byb2xvZ3VlKTogY29uc2lkZXIgc2F2ZS1yZXN0b3JlIGluIHN0YWNrIGFsbG9jYXRp b24uCj7CoMKgwqDCoMKgwqDCoCAocmlzY3ZfZXhwYW5kX2VwaWxvZ3VlKTogY29uc2lkZXIgc2F2 ZS1yZXN0b3JlIGluIHN0YWNrIGRlYWxsb2NhdGlvbi4KPgo+Z2NjL3Rlc3RzdWl0ZS9DaGFuZ2VM b2c6Cj4KPsKgwqDCoMKgwqDCoMKgICogZ2NjLnRhcmdldC9yaXNjdi9zdGFja19zYXZlX3Jlc3Rv cmUuYzogTmV3IHRlc3QuCj4tLS0KPiBnY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LmNjwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDUwICsrKysrKysrKystLS0tLS0tLS0K PiAuLi4vZ2NjLnRhcmdldC9yaXNjdi9zdGFja19zYXZlX3Jlc3RvcmUuY8KgwqDCoMKgIHwgNDAg KysrKysrKysrKysrKysrCj4gMiBmaWxlcyBjaGFuZ2VkLCA2NiBpbnNlcnRpb25zKCspLCAyNCBk ZWxldGlvbnMoLSkKPiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L3Jpc2N2L3N0YWNrX3NhdmVfcmVzdG9yZS5jCj4KPmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jp c2N2L3Jpc2N2LmNjIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5jYwo+aW5kZXggZjBiYmNkNmQ2 YmUuLmE1MGYyMzAzMDMyIDEwMDY0NAo+LS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5jYwo+ KysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5jYwo+QEAgLTUwMTAsMTIgKzUwMTAsMTIgQEAg dm9pZAo+IHJpc2N2X2V4cGFuZF9wcm9sb2d1ZSAodm9pZCkKPiB7Cj7CoMKgIHN0cnVjdCByaXNj dl9mcmFtZV9pbmZvICpmcmFtZSA9ICZjZnVuLT5tYWNoaW5lLT5mcmFtZTsKPi3CoCBwb2x5X2lu dDY0IHNpemUgPSBmcmFtZS0+dG90YWxfc2l6ZTsKPivCoCBwb2x5X2ludDY0IHJlbWFpbmluZ19z aXplID0gZnJhbWUtPnRvdGFsX3NpemU7Cj7CoMKgIHVuc2lnbmVkIG1hc2sgPSBmcmFtZS0+bWFz azsKPsKgwqAgcnR4IGluc247Cj4KPsKgwqAgaWYgKGZsYWdfc3RhY2tfdXNhZ2VfaW5mbykKPi3C oMKgwqAgY3VycmVudF9mdW5jdGlvbl9zdGF0aWNfc3RhY2tfc2l6ZSA9IGNvbnN0YW50X2xvd2Vy X2JvdW5kIChzaXplKTsKPivCoMKgwqAgY3VycmVudF9mdW5jdGlvbl9zdGF0aWNfc3RhY2tfc2l6 ZSA9IGNvbnN0YW50X2xvd2VyX2JvdW5kIChyZW1haW5pbmdfc2l6ZSk7Cj4KPsKgwqAgaWYgKGNm dW4tPm1hY2hpbmUtPm5ha2VkX3ApCj7CoMKgwqDCoCByZXR1cm47Cj5AQCAtNTAyNiw3ICs1MDI2 LDcgQEAgcmlzY3ZfZXhwYW5kX3Byb2xvZ3VlICh2b2lkKQo+wqDCoMKgwqDCoMKgIHJ0eCBkd2Fy ZiA9IE5VTExfUlRYOwo+wqDCoMKgwqDCoMKgIGR3YXJmID0gcmlzY3ZfYWRqdXN0X2xpYmNhbGxf Y2ZpX3Byb2xvZ3VlICgpOwo+Cj4twqDCoMKgwqDCoCBzaXplIC09IGZyYW1lLT5zYXZlX2xpYmNh bGxfYWRqdXN0bWVudDsKPivCoMKgwqDCoMKgIHJlbWFpbmluZ19zaXplIC09IGZyYW1lLT5zYXZl X2xpYmNhbGxfYWRqdXN0bWVudDsKPsKgwqDCoMKgwqDCoCBpbnNuID0gZW1pdF9pbnNuIChyaXNj dl9nZW5fZ3ByX3NhdmVfaW5zbiAoZnJhbWUpKTsKPsKgwqDCoMKgwqDCoCBmcmFtZS0+bWFzayA9 IDA7IC8qIFRlbXBvcmFyaWx5IGZpYiB0aGF0IHdlIG5lZWQgbm90IHNhdmUgR1BScy7CoCAqLwo+ Cj5AQCAtNTAzNywxNiArNTAzNywxNCBAQCByaXNjdl9leHBhbmRfcHJvbG9ndWUgKHZvaWQpCj7C oMKgIC8qIFNhdmUgdGhlIHJlZ2lzdGVycy7CoCAqLwo+wqDCoCBpZiAoKGZyYW1lLT5tYXNrIHwg ZnJhbWUtPmZtYXNrKSAhPSAwKQo+wqDCoMKgwqAgewo+LcKgwqDCoMKgwqAgSE9TVF9XSURFX0lO VCBzdGVwMSA9IHJpc2N2X2ZpcnN0X3N0YWNrX3N0ZXAgKGZyYW1lLCBmcmFtZS0+dG90YWxfc2l6 ZSk7Cj4twqDCoMKgwqDCoCBpZiAoc2l6ZS5pc19jb25zdGFudCAoKSkKPi0Jc3RlcDEgPSBNSU4g KHNpemUudG9fY29uc3RhbnQoKSwgc3RlcDEpOwo+K8KgwqDCoMKgwqAgSE9TVF9XSURFX0lOVCBz dGVwMSA9IHJpc2N2X2ZpcnN0X3N0YWNrX3N0ZXAgKGZyYW1lLCByZW1haW5pbmdfc2l6ZSk7Cj4K PsKgwqDCoMKgwqDCoCBpbnNuID0gZ2VuX2FkZDNfaW5zbiAoc3RhY2tfcG9pbnRlcl9ydHgsCj4g wqDCoMKgIHN0YWNrX3BvaW50ZXJfcnR4LAo+IMKgwqDCoCBHRU5fSU5UICgtc3RlcDEpKTsKPsKg wqDCoMKgwqDCoCBSVFhfRlJBTUVfUkVMQVRFRF9QIChlbWl0X2luc24gKGluc24pKSA9IDE7Cj4t wqDCoMKgwqDCoCBzaXplIC09IHN0ZXAxOwo+LcKgwqDCoMKgwqAgcmlzY3ZfZm9yX2VhY2hfc2F2 ZWRfcmVnIChzaXplLCByaXNjdl9zYXZlX3JlZywgZmFsc2UsIGZhbHNlKTsKPivCoMKgwqDCoMKg IHJlbWFpbmluZ19zaXplIC09IHN0ZXAxOwo+K8KgwqDCoMKgwqAgcmlzY3ZfZm9yX2VhY2hfc2F2 ZWRfcmVnIChyZW1haW5pbmdfc2l6ZSwgcmlzY3Zfc2F2ZV9yZWcsIGZhbHNlLCBmYWxzZSk7Cj7C oMKgwqDCoCB9Cj4KPsKgwqAgZnJhbWUtPm1hc2sgPSBtYXNrOyAvKiBVbmRvIHRoZSBhYm92ZSBm aWIuwqAgKi8KPkBAIC01MDU1LDI5ICs1MDUzLDI5IEBAIHJpc2N2X2V4cGFuZF9wcm9sb2d1ZSAo dm9pZCkKPsKgwqAgaWYgKGZyYW1lX3BvaW50ZXJfbmVlZGVkKQo+wqDCoMKgwqAgewo+wqDCoMKg wqDCoMKgIGluc24gPSBnZW5fYWRkM19pbnNuIChoYXJkX2ZyYW1lX3BvaW50ZXJfcnR4LCBzdGFj a19wb2ludGVyX3J0eCwKPi0JwqDCoMKgIEdFTl9JTlQgKChmcmFtZS0+aGFyZF9mcmFtZV9wb2lu dGVyX29mZnNldCAtIHNpemUpLnRvX2NvbnN0YW50ICgpKSk7Cj4rCcKgwqDCoCBHRU5fSU5UICgo ZnJhbWUtPmhhcmRfZnJhbWVfcG9pbnRlcl9vZmZzZXQgLSByZW1haW5pbmdfc2l6ZSkudG9fY29u c3RhbnQgKCkpKTsKPsKgwqDCoMKgwqDCoCBSVFhfRlJBTUVfUkVMQVRFRF9QIChlbWl0X2luc24g KGluc24pKSA9IDE7Cj4KPsKgwqDCoMKgwqDCoCByaXNjdl9lbWl0X3N0YWNrX3RpZSAoKTsKPsKg wqDCoMKgIH0KPgo+wqDCoCAvKiBBbGxvY2F0ZSB0aGUgcmVzdCBvZiB0aGUgZnJhbWUuwqAgKi8K Pi3CoCBpZiAoa25vd25fZ3QgKHNpemUsIDApKQo+K8KgIGlmIChrbm93bl9ndCAocmVtYWluaW5n X3NpemUsIDApKQo+wqDCoMKgwqAgewo+wqDCoMKgwqDCoMKgIC8qIFR3byBzdGVwIGFkanVzdG1l bnQ6Cj4gMS5zY2FsYWJsZSBmcmFtZS4gMi5jb25zdGFudCBmcmFtZS7CoCAqLwo+wqDCoMKgwqDC oMKgIHBvbHlfaW50NjQgc2NhbGFibGVfZnJhbWUgKDAsIDApOwo+LcKgwqDCoMKgwqAgaWYgKCFz aXplLmlzX2NvbnN0YW50ICgpKQo+K8KgwqDCoMKgwqAgaWYgKCFyZW1haW5pbmdfc2l6ZS5pc19j b25zdGFudCAoKSkKPiB7Cj4gwqAgLyogRmlyc3QgZm9yIHNjYWxhYmxlIGZyYW1lLsKgICovCj4t CcKgIHBvbHlfaW50NjQgc2NhbGFibGVfZnJhbWUgPSBzaXplOwo+LQnCoCBzY2FsYWJsZV9mcmFt ZS5jb2VmZnNbMF0gPSBzaXplLmNvZWZmc1sxXTsKPisJwqAgcG9seV9pbnQ2NCBzY2FsYWJsZV9m cmFtZSA9IHJlbWFpbmluZ19zaXplOwo+KwnCoCBzY2FsYWJsZV9mcmFtZS5jb2VmZnNbMF0gPSBy ZW1haW5pbmdfc2l6ZS5jb2VmZnNbMV07Cj4gwqAgcmlzY3Zfdl9hZGp1c3Rfc2NhbGFibGVfZnJh bWUgKHN0YWNrX3BvaW50ZXJfcnR4LCBzY2FsYWJsZV9mcmFtZSwgZmFsc2UpOwo+LQnCoCBzaXpl IC09IHNjYWxhYmxlX2ZyYW1lOwo+KwnCoCByZW1haW5pbmdfc2l6ZSAtPSBzY2FsYWJsZV9mcmFt ZTsKPiB9Cj4KPsKgwqDCoMKgwqDCoCAvKiBTZWNvbmQgc3RlcCBmb3IgY29uc3RhbnQgZnJhbWUu wqAgKi8KPi3CoMKgwqDCoMKgIEhPU1RfV0lERV9JTlQgY29uc3RhbnRfZnJhbWUgPSBzaXplLnRv X2NvbnN0YW50ICgpOwo+K8KgwqDCoMKgwqAgSE9TVF9XSURFX0lOVCBjb25zdGFudF9mcmFtZSA9 IHJlbWFpbmluZ19zaXplLnRvX2NvbnN0YW50ICgpOwo+wqDCoMKgwqDCoMKgIGlmIChjb25zdGFu dF9mcmFtZSA9PSAwKQo+IHJldHVybjsKPgo+QEAgLTUxNDIsNiArNTE0MCw4IEBAIHJpc2N2X2V4 cGFuZF9lcGlsb2d1ZSAoaW50IHN0eWxlKQo+wqDCoCBIT1NUX1dJREVfSU5UIHN0ZXAyID0gMDsK PsKgwqAgYm9vbCB1c2VfcmVzdG9yZV9saWJjYWxsID0gKChzdHlsZSA9PSBOT1JNQUxfUkVUVVJO KQo+IMKgwqDCoMKgwqAgJiYgcmlzY3ZfdXNlX3NhdmVfbGliY2FsbCAoZnJhbWUpKTsKPivCoCB1 bnNpZ25lZCBsaWJjYWxsX3NpemUgPSB1c2VfcmVzdG9yZV9saWJjYWxsID8KPivCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZnJhbWUtPnNhdmVf bGliY2FsbF9hZGp1c3RtZW50IDogMDsKPsKgwqAgcnR4IHJhID0gZ2VuX3J0eF9SRUcgKFBtb2Rl LCBSRVRVUk5fQUREUl9SRUdOVU0pOwo+wqDCoCBydHggaW5zbjsKPgo+QEAgLTUyMTIsMTMgKzUy MTIsMTggQEAgcmlzY3ZfZXhwYW5kX2VwaWxvZ3VlIChpbnQgc3R5bGUpCj7CoMKgwqDCoMKgwqAg UkVHX05PVEVTIChpbnNuKSA9IGR3YXJmOwo+wqDCoMKgwqAgfQo+Cj4rwqAgaWYgKHVzZV9yZXN0 b3JlX2xpYmNhbGwpCj4rwqDCoMKgIGZyYW1lLT5tYXNrID0gMDsgLyogVGVtcG9yYXJpbHkgZmli IGZvciBHUFJzLsKgICovCj4rCj7CoMKgIC8qIElmIHdlIG5lZWQgdG8gcmVzdG9yZSByZWdpc3Rl cnMsIGRlYWxsb2NhdGUgYXMgbXVjaCBzdGFjayBhcwo+wqDCoMKgwqDCoCBwb3NzaWJsZSBpbiB0 aGUgc2Vjb25kIHN0ZXAgd2l0aG91dCBnb2luZyBvdXQgb2YgcmFuZ2UuwqAgKi8KPsKgwqAgaWYg KChmcmFtZS0+bWFzayB8IGZyYW1lLT5mbWFzaykgIT0gMCkKPi3CoMKgwqAgewo+LcKgwqDCoMKg wqAgc3RlcDIgPSByaXNjdl9maXJzdF9zdGFja19zdGVwIChmcmFtZSwgZnJhbWUtPnRvdGFsX3Np emUpOwo+LcKgwqDCoMKgwqAgc3RlcDEgLT0gc3RlcDI7Cj4twqDCoMKgIH0KPivCoMKgwqAgc3Rl cDIgPSByaXNjdl9maXJzdF9zdGFja19zdGVwIChmcmFtZSwgZnJhbWUtPnRvdGFsX3NpemUgLSBs aWJjYWxsX3NpemUpOwo+Kwo+K8KgIGlmICh1c2VfcmVzdG9yZV9saWJjYWxsKQo+K8KgwqDCoCBm cmFtZS0+bWFzayA9IG1hc2s7IC8qIFVuZG8gdGhlIGFib3ZlIGZpYi7CoCAqLwo+Kwo+K8KgIHN0 ZXAxIC09IHN0ZXAyICsgbGliY2FsbF9zaXplOwo+Cj7CoMKgIC8qIFNldCBUQVJHRVQgdG8gQkFT RSArIFNURVAxLsKgICovCj7CoMKgIGlmIChrbm93bl9ndCAoc3RlcDEsIDApKQo+QEAgLTUyNzIs MTUgKzUyNzcsMTIgQEAgcmlzY3ZfZXhwYW5kX2VwaWxvZ3VlIChpbnQgc3R5bGUpCj7CoMKgwqDC oCBmcmFtZS0+bWFzayA9IDA7IC8qIFRlbXBvcmFyaWx5IGZpYiB0aGF0IHdlIG5lZWQgbm90IHNh dmUgR1BScy7CoCAqLwo+Cj7CoMKgIC8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycy7CoCAqLwo+LcKg IHJpc2N2X2Zvcl9lYWNoX3NhdmVkX3JlZyAoZnJhbWUtPnRvdGFsX3NpemUgLSBzdGVwMiwgcmlz Y3ZfcmVzdG9yZV9yZWcsCj4rwqAgcmlzY3ZfZm9yX2VhY2hfc2F2ZWRfcmVnIChmcmFtZS0+dG90 YWxfc2l6ZSAtIHN0ZXAyIC0gbGliY2FsbF9zaXplLAo+K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByaXNjdl9yZXN0b3JlX3JlZywKPiDCoMKg wqAgdHJ1ZSwgc3R5bGUgPT0gRVhDRVBUSU9OX1JFVFVSTik7Cj4KPsKgwqAgaWYgKHVzZV9yZXN0 b3JlX2xpYmNhbGwpCj4twqDCoMKgIHsKPsKgwqDCoMKgwqDCoCBmcmFtZS0+bWFzayA9IG1hc2s7 IC8qIFVuZG8gdGhlIGFib3ZlIGZpYi7CoCAqLwo+LcKgwqDCoMKgwqAgZ2NjX2Fzc2VydCAoc3Rl cDIgPj0gZnJhbWUtPnNhdmVfbGliY2FsbF9hZGp1c3RtZW50KTsKPi3CoMKgwqDCoMKgIHN0ZXAy IC09IGZyYW1lLT5zYXZlX2xpYmNhbGxfYWRqdXN0bWVudDsKPi3CoMKgwqAgfQo+Cj7CoMKgIGlm IChuZWVkX2JhcnJpZXJfcCkKPsKgwqDCoMKgIHJpc2N2X2VtaXRfc3RhY2tfdGllICgpOwo+ZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9zdGFja19zYXZlX3Jlc3Rv cmUuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9zdGFja19zYXZlX3Jlc3RvcmUu Ywo+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPmluZGV4IDAwMDAwMDAwMDAwLi41MjJlNzA2Y2ZiZgo+ LS0tIC9kZXYvbnVsbAo+KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3N0YWNr X3NhdmVfcmVzdG9yZS5jCj5AQCAtMCwwICsxLDQwIEBACj4rLyogeyBkZy1kbyBjb21waWxlIH0g Ki8KPisvKiB7IGRnLW9wdGlvbnMgIi1tYXJjaD1ydjMyaW1hZmMgLW1hYmk9aWxwMzJmIC1tc2F2 ZS1yZXN0b3JlIC1PMiAtZm5vLXNjaGVkdWxlLWluc25zIC1mbm8tc2NoZWR1bGUtaW5zbnMyIC1m bm8tdW5yb2xsLWxvb3BzIC1mbm8tcGVlbC1sb29wcyAtZm5vLWx0byIgfSAqLwo+Ky8qIHsgZGct ZmluYWwgeyBjaGVjay1mdW5jdGlvbi1ib2RpZXMgIioqIiAiIiB9IH0gKi8KPisKPitjaGFyIG15 X2dldGNoYXIoKTsKPitmbG9hdCBnZXRmKCk7Cj4rCj4rLyoKPisqKmJhcjoKPisqKgljYWxsCXQw LF9fcmlzY3Zfc2F2ZV80Cj4rKioJYWRkaQlzcCxzcCwtMjAzMgo+KyoqCS4uLgo+KyoqCWxpCXQw LC0xMjI4OAo+KyoqCWFkZAlzcCxzcCx0MAo+KyoqCS4uLgo+KyoqCWxpCXQwLDEyMjg4Cj4rKioJ YWRkCXNwLHNwLHQwCj4rKioJLi4uCj4rKioJYWRkaQlzcCxzcCwyMDMyCj4rKioJdGFpbAlfX3Jp c2N2X3Jlc3RvcmVfNAo+KyovCj4raW50IGJhcigpCj4rewo+K8KgIGZsb2F0IHZvbGF0aWxlIGZh cnJheVszNTY4XTsKPisKPivCoCBmbG9hdCBzdW0gPSAwOwo+K8KgIGZsb2F0IGYxID0gZ2V0Zigp Owo+K8KgIGZsb2F0IGYyID0gZ2V0ZigpOwo+K8KgIGZsb2F0IGYzID0gZ2V0ZigpOwo+K8KgIGZs b2F0IGY0ID0gZ2V0ZigpOwo+Kwo+K8KgIGZvciAoaW50IGkgPSAwOyBpIDwgMzU2ODsgaSsrKQo+ K8KgIHsKPivCoMKgwqAgZmFycmF5W2ldID0gbXlfZ2V0Y2hhcigpICogMS4yOwo+K8KgwqDCoCBz dW0gKz0gZmFycmF5W2ldOwo+K8KgIH0KPisKPivCoCByZXR1cm4gc3VtICsgZjEgKyBmMiArIGYz ICsgZjQ7Cj4rfQo+Kwo+LS0KPjIuMTcuMQ==