From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id 0AED93858D39; Sat, 5 Nov 2022 22:28:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0AED93858D39 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.96,141,1665475200"; d="diff'?scan'208";a="86161890" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 05 Nov 2022 14:28:54 -0800 IronPort-SDR: d46WMHVPzEH+U8oFIxd3ceNv1BWPVt1ECLd/9GnhNm0CEqrd3s5ZS8OEEcFiBJmihFu8ThIsqX mOWUi7gSOlWTMKa/CX1hdBckqI7nYDjPBcIsrX3z2Hp1SUa8MgibujJe+R646De3MclT7CFCw7 GdqtTGjbWZsDAbDAxbkVo4rA6gCJzjV5ByqDDsgEruNmou5xk4U7IROEIr6KyOF+SBYAvlCbLD LKnUQ8EGUE/McQtrExfKUV30qr5HU/cF46n1rzbyFomtT8yc3YUmfzzJNu53t6zwjqdVrktJGw CQU= Content-Type: multipart/mixed; boundary="------------0jcnR30b0tyZslE92y1iMjAK" Message-ID: Date: Sat, 5 Nov 2022 23:28:47 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.1 Content-Language: en-US To: gcc-patches , fortran From: Tobias Burnus Subject: [Patch] Fortran: Fix reallocation on assignment for kind=4 strings [PR107508] X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: SVR-IES-MBX-07.mgc.mentorg.com (139.181.222.7) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,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: --------------0jcnR30b0tyZslE92y1iMjAK Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable Prior to the attached patch, there is a problem with realloc on assignment with kind=3D4 characters as the string length was compared with the byte si= ze, which was always true. I initially thought, looking at the code, that scalars have the same issues= , but they don't; hence, I ended up with a comment and a cleanup. For arrays: The issue shows up in the testcase (=E2=86=92 PR) because there= was unnecessary reallocation on assignment, which changed the lower bound to 1. The rest, I found looking at the dump: (a) cond_null was: D.4298 =3D .a4str !=3D 7 || (character(kind=3D4)[0:][1:.a4str] *) a4st= r.data =3D=3D 0B; ... if (D.4298) a4str.data =3D __builtin_malloc (168); else a4str.data =3D __builtin_realloc (a4str.data, 168); which is the wrong condition. It should be just: D.4298 =3D (character(kind=3D4)[0:][1:.a4str] *) a4str.data =3D= =3D 0B; to avoid a memory leak. (b) The rest was removing bogus code; I think it did not do any harm, but m= akes the code and the dump rather convoluted. The dump (with and without the patch) starts with: D.4295 =3D .a4str * 4; .a4str =3D 7; D.4298 =3D (character(kind=3D4)[0:][1:.a4str] *) a4str.data =3D= =3D 0B; if (D.4298) goto L.6; if (a4str.dim[0].lbound + 5 !=3D a4str.dim[0].ubound) goto L.6; if (D.4295 !=3D 28) goto L.6; goto L.7; L.6:; a4str.dim[0].lbound =3D 1; .... if (D.4298) a4str.data =3D __builtin_malloc (168); else a4str.data =3D __builtin_realloc (a4str.data, 168); L.7:; Thus, any code which reaches L.6 should be reallocated and any code which does not, shouldn't. The deleted code did add directly after L.6 the following additional code: if (D.4298) D.4282 =3D 0; else D.4282 =3D MAX_EXPR + 1; D.4283 =3D D.4282 !=3D 6; and it changed the 'else' into an 'else if' in if (D.4298) a4str.data =3D __builtin_malloc (168); else if (D.4283) a4str.data =3D __builtin_realloc (a4str.data, 168); Closely looking at the added condition and at source code, it does essentially the same check as the code which guarded the L.6 to L.7 code. Thus, the condition should always evaluate as true. Codewise, the 'D.4282 !=3D 6' is the 'size1 !=3D size2' array size compari= son. I think it was the now removed code was there before, but then someone realized the array bounds problem - and the new code was added without actually removing the old one. The handling of deferred strings both in the bogus condition for cond_null and by setting 'D.4283' to always true is not only wrong but implies some early hack. However, I have not checked the history to confirm my suspicion. OK for mainline? Tobias PS: I have the feeling that there might be an issue with finalization/deriv= ed-type handling in case of 'realloc' as I did not spot finalization code between t= he size check and the malloc/realloc. The malloc case should be fine =E2=80=93 but = if realloc shrinks the memory, elements beyond the new last element in storage order would acc= ess invalid memory. =E2=80=93 However, I have not checked whether there is indeed a pro= blem as I concentrated on fixing this issue. PPS: I lost track of pending patches. Are they any which I should review? ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------0jcnR30b0tyZslE92y1iMjAK Content-Type: text/x-patch; charset="UTF-8"; name="realloc-wide-char.diff" Content-Disposition: attachment; filename="realloc-wide-char.diff" Content-Transfer-Encoding: base64 Rm9ydHJhbjogRml4IHJlYWxsb2NhdGlvbiBvbiBhc3NpZ25tZW50IGZvciBraW5kPTQgc3Ry aW5ncyBbUFIxMDc1MDhdCgpUaGUgY2hlY2sgd2hldGhlciByZWFsbG9jYXRpb24gb24gYXNz aWdubWVudCB3YXMgcmVxdWlyZWQgZGlkIG5vdCBoYW5kbGUKa2luZD00IGNoYXJhY3RlcnMg Y29ycmVjdGx5IHN1Y2ggdGhhdCB0aGVyZSB3YXMgYWx3YXlzIGEgcmVhbGxvY2F0aW9uLApp bXBseWluZyBpc3N1ZXMgd2l0aCBwb2ludGVyIGFkZHJlc3NlcyBhbmQgbG93ZXIgYm91bmRz LiAgQWRkaXRpb25hbGx5LAp3aXRoIGFsbCBkZWZlcnJlZCBzdHJpbmdzLCB0aGUgb2xkIG1l bW9yeSB3YXMgbm90IGZyZWVkIG9uIHJlYWxsb2NhdGlvbi4KQW5kLCBmaW5hbGx5LCBpbnNp ZGUgdGhlIGJsb2NrIHdoaWNoIHdhcyBvbmx5IGV4ZWN1dGVkIGlmIHN0cmluZyBsZW5ndGhz Cm9yIGJvdW5kcyBvciBkeW5hbWljIHR5cGVzIGNoYW5nZWQsIHdhcyBhIHN1YmNoZWNrIG9m IHRoZSBzYW1lLCB3aGljaAp3YXMgZWZmZWN0aXZlbHkgYSBubyBvcCBidXQgc3RpbGwgY29u ZnVzaW5nIGFuZCBhdCBsZWFzdCBhZGRlZCB3aXRoIC1PMApleHRyYSBpbnN0cnVjdGlvbnMg dG8gdGhlIGJpbmFyeS4KCglQUiBmb3J0cmFuLzEwNzUwOAoKZ2NjL2ZvcnRyYW4vQ2hhbmdl TG9nOgoKCSogdHJhbnMtYXJyYXkuY2MgKGdmY19hbGxvY19hbGxvY2F0YWJsZV9mb3JfYXNz aWdubWVudCk6IEZpeAoJc3RyaW5nLWxlbmd0aCBjaGVjaywgcGx1ZyBtZW1vcnkgbGVhaywg YW5kIGF2b2lkIGdlbmVyYXRpb24gb2YKCWVmZmVjdGl2ZWx5IG5vLW9wIGNvZGUuCgkqIHRy YW5zLWV4cHIuY2MgKGFsbG9jX3NjYWxhcl9hbGxvY2F0YWJsZV9mb3JfYXNzaWdubWVudCk6 IEV4dGVuZAoJY29tbWVudDsgbWlub3IgY2xlYW51cC4KCmdjYy90ZXN0c3VpdGUvQ2hhbmdl TG9nOgoKCSogZ2ZvcnRyYW4uZGcvd2lkZWNoYXJfMTEuZjkwOiBOZXcgdGVzdC4KCiBnY2Mv Zm9ydHJhbi90cmFucy1hcnJheS5jYyAgICAgICAgICAgICAgICB8IDU3ICsrKystLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIGdjYy9mb3J0cmFuL3RyYW5zLWV4cHIuY2MgICAgICAg ICAgICAgICAgIHwgIDggKystLS0KIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvd2lkZWNo YXJfMTEuZjkwIHwgNTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBj aGFuZ2VkLCA2MiBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5jYyBiL2djYy9mb3J0cmFuL3RyYW5zLWFycmF5 LmNjCmluZGV4IDUxNGNiMDU3YWZiLi5iN2Q0YzQxYjVmZSAxMDA2NDQKLS0tIGEvZ2NjL2Zv cnRyYW4vdHJhbnMtYXJyYXkuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuY2MK QEAgLTEwNTI3LDcgKzEwNTI3LDYgQEAgZ2ZjX2FsbG9jX2FsbG9jYXRhYmxlX2Zvcl9hc3Np Z25tZW50IChnZmNfbG9vcGluZm8gKmxvb3AsCiAgIHRyZWUgb2Zmc2V0OwogICB0cmVlIGp1 bXBfbGFiZWwxOwogICB0cmVlIGp1bXBfbGFiZWwyOwotICB0cmVlIG5lcV9zaXplOwogICB0 cmVlIGxiZDsKICAgdHJlZSBjbGFzc19leHByMiA9IE5VTExfVFJFRTsKICAgaW50IG47CkBA IC0xMDYwNyw2ICsxMDYwNiwxMSBAQCBnZmNfYWxsb2NfYWxsb2NhdGFibGVfZm9yX2Fzc2ln bm1lbnQgKGdmY19sb29waW5mbyAqbG9vcCwKIAllbGVtc2l6ZTEgPSBleHByMS0+dHMudS5j bC0+YmFja2VuZF9kZWNsOwogICAgICAgZWxzZQogCWVsZW1zaXplMSA9IGxzcy0+aW5mby0+ c3RyaW5nX2xlbmd0aDsKKyAgICAgIHRyZWUgdW5pdF9zaXplID0gVFlQRV9TSVpFX1VOSVQg KGdmY19nZXRfY2hhcl90eXBlIChleHByMS0+dHMua2luZCkpOworICAgICAgZWxlbXNpemUx ID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTVVMVF9FWFBSLAorCQkJCSAg IFRSRUVfVFlQRSAoZWxlbXNpemUxKSwgZWxlbXNpemUxLAorCQkJCSAgIGZvbGRfY29udmVy dCAoVFJFRV9UWVBFIChlbGVtc2l6ZTEpLCB1bml0X3NpemUpKTsKKwogICAgIH0KICAgZWxz ZSBpZiAoZXhwcjEtPnRzLnR5cGUgPT0gQlRfQ0xBU1MpCiAgICAgewpAQCAtMTA2OTksMTkg KzEwNzAzLDcgQEAgZ2ZjX2FsbG9jX2FsbG9jYXRhYmxlX2Zvcl9hc3NpZ25tZW50IChnZmNf bG9vcGluZm8gKmxvb3AsCiAgIC8qIEFsbG9jYXRlIGlmIGRhdGEgaXMgTlVMTC4gICovCiAg IGNvbmRfbnVsbCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIEVRX0VYUFIs IGxvZ2ljYWxfdHlwZV9ub2RlLAogCQkJIGFycmF5MSwgYnVpbGRfaW50X2NzdCAoVFJFRV9U WVBFIChhcnJheTEpLCAwKSk7Ci0KLSAgaWYgKGV4cHIxLT50cy50eXBlID09IEJUX0NIQVJB Q1RFUiAmJiBleHByMS0+dHMuZGVmZXJyZWQpCi0gICAgewotICAgICAgdG1wID0gZm9sZF9i dWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTkVfRVhQUiwKLQkJCSAgICAgbG9naWNhbF90 eXBlX25vZGUsCi0JCQkgICAgIGxzcy0+aW5mby0+c3RyaW5nX2xlbmd0aCwKLQkJCSAgICAg cnNzLT5pbmZvLT5zdHJpbmdfbGVuZ3RoKTsKLSAgICAgIGNvbmRfbnVsbCA9IGZvbGRfYnVp bGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIFRSVVRIX09SX0VYUFIsCi0JCQkJICAgbG9naWNh bF90eXBlX25vZGUsIHRtcCwgY29uZF9udWxsKTsKLSAgICAgIGNvbmRfbnVsbD0gZ2ZjX2V2 YWx1YXRlX25vdyAoY29uZF9udWxsLCAmZmJsb2NrKTsKLSAgICB9Ci0gIGVsc2UKLSAgICBj b25kX251bGw9IGdmY19ldmFsdWF0ZV9ub3cgKGNvbmRfbnVsbCwgJmZibG9jayk7CisgIGNv bmRfbnVsbD0gZ2ZjX2V2YWx1YXRlX25vdyAoY29uZF9udWxsLCAmZmJsb2NrKTsKIAogICB0 bXAgPSBidWlsZDNfdiAoQ09ORF9FWFBSLCBjb25kX251bGwsCiAJCSAgYnVpbGQxX3YgKEdP VE9fRVhQUiwganVtcF9sYWJlbDEpLApAQCAtMTA3NzgsMTkgKzEwNzcwLDYgQEAgZ2ZjX2Fs bG9jX2FsbG9jYXRhYmxlX2Zvcl9hc3NpZ25tZW50IChnZmNfbG9vcGluZm8gKmxvb3AsCiAg IHRtcCA9IGJ1aWxkMV92IChMQUJFTF9FWFBSLCBqdW1wX2xhYmVsMSk7CiAgIGdmY19hZGRf ZXhwcl90b19ibG9jayAoJmZibG9jaywgdG1wKTsKIAotICAvKiBJZiB0aGUgbGhzIGhhcyBu b3QgYmVlbiBhbGxvY2F0ZWQsIGl0cyBib3VuZHMgd2lsbCBub3QgaGF2ZSBiZWVuCi0gICAg IGluaXRpYWxpemVkIGFuZCBzbyBpdHMgc2l6ZSBpcyBzZXQgdG8gemVyby4gICovCi0gIHNp emUxID0gZ2ZjX2NyZWF0ZV92YXIgKGdmY19hcnJheV9pbmRleF90eXBlLCBOVUxMKTsKLSAg Z2ZjX2luaXRfYmxvY2sgKCZhbGxvY19ibG9jayk7Ci0gIGdmY19hZGRfbW9kaWZ5ICgmYWxs b2NfYmxvY2ssIHNpemUxLCBnZmNfaW5kZXhfemVyb19ub2RlKTsKLSAgZ2ZjX2luaXRfYmxv Y2sgKCZyZWFsbG9jX2Jsb2NrKTsKLSAgZ2ZjX2FkZF9tb2RpZnkgKCZyZWFsbG9jX2Jsb2Nr LCBzaXplMSwKLQkJICBnZmNfY29udl9kZXNjcmlwdG9yX3NpemUgKGRlc2MsIGV4cHIxLT5y YW5rKSk7Ci0gIHRtcCA9IGJ1aWxkM192IChDT05EX0VYUFIsIGNvbmRfbnVsbCwKLQkJICBn ZmNfZmluaXNoX2Jsb2NrICgmYWxsb2NfYmxvY2spLAotCQkgIGdmY19maW5pc2hfYmxvY2sg KCZyZWFsbG9jX2Jsb2NrKSk7Ci0gIGdmY19hZGRfZXhwcl90b19ibG9jayAoJmZibG9jaywg dG1wKTsKLQogICAvKiBHZXQgdGhlIHJocyBzaXplIGFuZCBmaXggaXQuICAqLwogICBzaXpl MiA9IGdmY19pbmRleF9vbmVfbm9kZTsKICAgZm9yIChuID0gMDsgbiA8IGV4cHIyLT5yYW5r OyBuKyspCkBAIC0xMDgwNywxNiArMTA3ODYsNiBAQCBnZmNfYWxsb2NfYWxsb2NhdGFibGVf Zm9yX2Fzc2lnbm1lbnQgKGdmY19sb29waW5mbyAqbG9vcCwKICAgICB9CiAgIHNpemUyID0g Z2ZjX2V2YWx1YXRlX25vdyAoc2l6ZTIsICZmYmxvY2spOwogCi0gIGNvbmQgPSBmb2xkX2J1 aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBORV9FWFBSLCBsb2dpY2FsX3R5cGVfbm9kZSwK LQkJCSAgc2l6ZTEsIHNpemUyKTsKLQotICAvKiBJZiB0aGUgbGhzIGlzIGRlZmVycmVkIGxl bmd0aCwgYXNzdW1lIHRoYXQgdGhlIGVsZW1lbnQgc2l6ZQotICAgICBjaGFuZ2VzIGFuZCBm b3JjZSBhIHJlYWxsb2NhdGlvbi4gICovCi0gIGlmIChleHByMS0+dHMuZGVmZXJyZWQpCi0g ICAgbmVxX3NpemUgPSBnZmNfZXZhbHVhdGVfbm93IChsb2dpY2FsX3RydWVfbm9kZSwgJmZi bG9jayk7Ci0gIGVsc2UKLSAgICBuZXFfc2l6ZSA9IGdmY19ldmFsdWF0ZV9ub3cgKGNvbmQs ICZmYmxvY2spOwotCiAgIC8qIERlYWxsb2NhdGlvbiBvZiBhbGxvY2F0YWJsZSBjb21wb25l bnRzIHdpbGwgaGF2ZSB0byBvY2N1ciBvbgogICAgICByZWFsbG9jYXRpb24uICBGaXggdGhl IG9sZCBkZXNjcmlwdG9yIG5vdy4gICovCiAgIGlmICgoZXhwcjEtPnRzLnR5cGUgPT0gQlRf REVSSVZFRCkKQEAgLTExMDQ4LDIwICsxMTAxNyw2IEBAIGdmY19hbGxvY19hbGxvY2F0YWJs ZV9mb3JfYXNzaWdubWVudCAoZ2ZjX2xvb3BpbmZvICpsb29wLAogICBnZmNfYWRkX2Jsb2Nr X3RvX2Jsb2NrICgmcmVhbGxvY19ibG9jaywgJmNhZl9zZS5wb3N0KTsKICAgcmVhbGxvY19l eHByID0gZ2ZjX2ZpbmlzaF9ibG9jayAoJnJlYWxsb2NfYmxvY2spOwogCi0gIC8qIFJlYWxs b2NhdGUgaWYgc2l6ZXMgb3IgZHluYW1pYyB0eXBlcyBhcmUgZGlmZmVyZW50LiAgKi8KLSAg aWYgKGVsZW1zaXplMSkKLSAgICB7Ci0gICAgICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlu cHV0X2xvY2F0aW9uLCBORV9FWFBSLCBsb2dpY2FsX3R5cGVfbm9kZSwKLQkJCSAgICAgZWxl bXNpemUxLCBlbGVtc2l6ZTIpOwotICAgICAgdG1wID0gZ2ZjX2V2YWx1YXRlX25vdyAodG1w LCAmZmJsb2NrKTsKLSAgICAgIG5lcV9zaXplID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9s b2NhdGlvbiwgVFJVVEhfT1JfRVhQUiwKLQkJCQkgIGxvZ2ljYWxfdHlwZV9ub2RlLCBuZXFf c2l6ZSwgdG1wKTsKLSAgICB9Ci0gIHRtcCA9IGJ1aWxkM192IChDT05EX0VYUFIsIG5lcV9z aXplLCByZWFsbG9jX2V4cHIsCi0JCSAgYnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRp b24pKTsKLQotICByZWFsbG9jX2V4cHIgPSB0bXA7Ci0KICAgLyogTWFsbG9jIGV4cHJlc3Np b24uICAqLwogICBnZmNfaW5pdF9ibG9jayAoJmFsbG9jX2Jsb2NrKTsKICAgaWYgKCFjb2Fy cmF5KQpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5jYyBiL2djYy9mb3J0 cmFuL3RyYW5zLWV4cHIuY2MKaW5kZXggZTdiOTIxMWYxN2UuLjQ0YzM3M2NjNDk1IDEwMDY0 NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1leHByLmNjCisrKyBiL2djYy9mb3J0cmFuL3Ry YW5zLWV4cHIuY2MKQEAgLTExMjM2LDEwICsxMTIzNiwxMCBAQCBhbGxvY19zY2FsYXJfYWxs b2NhdGFibGVfZm9yX2Fzc2lnbm1lbnQgKHN0bXRibG9ja190ICpibG9jaywKIAogICBpZiAo ZXhwcjEtPnRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSICYmIGV4cHIxLT50cy5kZWZlcnJlZCkK ICAgICB7Ci0gICAgICAvKiBVc2UgdGhlIHJocyBzdHJpbmcgbGVuZ3RoIGFuZCB0aGUgbGhz IGVsZW1lbnQgc2l6ZS4gICovCi0gICAgICBzaXplID0gc3RyaW5nX2xlbmd0aDsKLSAgICAg IHRtcCA9IFRSRUVfVFlQRSAoZ2ZjX3R5cGVub2RlX2Zvcl9zcGVjICgmZXhwcjEtPnRzKSk7 Ci0gICAgICB0bXAgPSBUWVBFX1NJWkVfVU5JVCAodG1wKTsKKyAgICAgIC8qIFVzZSB0aGUg cmhzIHN0cmluZyBsZW5ndGggYW5kIHRoZSBsaHMgZWxlbWVudCBzaXplLiBOb3RlIHRoYXQg J3NpemUnIGlzCisJIHVzZWQgYmVsb3cgZm9yIHRoZSBzdHJpbmctbGVuZ3RoIGNvbXBhcmlz b24sIG9ubHkuICAqLworICAgICAgc2l6ZSA9IHN0cmluZ19sZW5ndGgsCisgICAgICB0bXAg PSBUWVBFX1NJWkVfVU5JVCAoZ2ZjX2dldF9jaGFyX3R5cGUgKGV4cHIyLT50cy5raW5kKSk7 CiAgICAgICBzaXplX2luX2J5dGVzID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlv biwgTVVMVF9FWFBSLAogCQkJCSAgICAgICBUUkVFX1RZUEUgKHRtcCksIHRtcCwKIAkJCQkg ICAgICAgZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKHRtcCksIHNpemUpKTsKZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvd2lkZWNoYXJfMTEuZjkwIGIvZ2NjL3Rl c3RzdWl0ZS9nZm9ydHJhbi5kZy93aWRlY2hhcl8xMS5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNjYjhkOTU2Yzc0Ci0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy93aWRlY2hhcl8xMS5mOTAKQEAgLTAsMCArMSw1 MiBAQAorISB7IGRnLWRvIHJ1biB9CishIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZmR1 bXAtdHJlZS1vcmlnaW5hbCIgfQorIQorISBQUiBmb3J0cmFuLzEwNzUwOAorIQordXNlIGlz b19jX2JpbmRpbmcKK2ltcGxpY2l0IG5vbmUKKyFjaGFyYWN0ZXIobGVuPTosa2luZD00KSwg YWxsb2NhdGFibGUsIHRhcmdldCA6OiBhNHN0cig6KSwgYTRzdHIyCitjaGFyYWN0ZXIobGVu PTcsa2luZD00KSwgYWxsb2NhdGFibGUsIHRhcmdldCA6OiBhNHN0cig6KSwgYTRzdHIyCit0 eXBlKGNfcHRyKSA6OiBjcHRyLCBjcHRyMgorCishYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj03 LGtpbmQ9NCkgOjogYTRzdHIoLTI6MykpCishYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj05LGtp bmQ9NCkgOjogYTRzdHIyKQorCishY3B0ciA9IGNfbG9jKGE0c3RyKQorIWNwdHIyID0gY19s b2MoYTRzdHIyKQorIQorIWlmIChsZW4oYTRzdHIpIC89IDcpIGVycm9yIHN0b3AKKyFpZiAo bGJvdW5kKGE0c3RyLDEpIC89IC0yKSBlcnJvciBzdG9wCishaWYgKHVib3VuZChhNHN0ciwx KSAvPSAzKSBlcnJvciBzdG9wCishaWYgKGxlbihhNHN0cjIpIC89IDkpIGVycm9yIHN0b3AK KyEKK2E0c3RyID0gWzRfInNmNDU2YXEiLCA0XyIzZHR6dTI0IiwgNF8iXzRmaDdzbSIsIDRf Ij1mZjg1czciLCA0XyJqPThhZjRkIiwgNF8iLixBJUZzeiJdCithNHN0cjIgPSA0XyI0ZjVn NWY4YTkiCisKKyFwcmludCAqLCBsYm91bmQoYTRzdHIpLCB1Ym91bmQoYTRzdHIpICAhIGV4 cGVjdGVkICgtMjozKSAtIGFjdHVhbGx5OiAoMTo2KQorCishaWYgKGxlbihhNHN0cikgLz0g NykgZXJyb3Igc3RvcAorIWlmIChsYm91bmQoYTRzdHIsMSkgLz0gLTIpIGVycm9yIHN0b3AK KyFpZiAodWJvdW5kKGE0c3RyLDEpIC89IDMpIGVycm9yIHN0b3AKKyFpZiAobGVuKGE0c3Ry MikgLz0gOSkgZXJyb3Igc3RvcAorIWlmICgubm90LiBjX2Fzc29jaWF0ZWQgKGNwdHIsIGNf bG9jKGE0c3RyKSkpIGVycm9yIHN0b3AKKyFpZiAoLm5vdC4gY19hc3NvY2lhdGVkIChjcHRy MiwgY19sb2MoYTRzdHIyKSkpIGVycm9yIHN0b3AKK2VuZAorCishIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAiX19idWlsdGluX21hbGxvYyIgNCAib3JpZ2luYWwiIH0g fQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIl9fYnVpbHRpbl9yZWFs bG9jIiAyICJvcmlnaW5hbCIgfSB9CisKKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICJhNHN0ci5kYXRhID0gX19idWlsdGluX21hbGxvYyBcXCgxNjhcXCk7IiAyICJv cmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiYTRz dHIuZGF0YSA9IF9fYnVpbHRpbl9yZWFsbG9jIFxcKGE0c3RyLmRhdGEsIDE2OFxcKTsiIDEg Im9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJh NHN0cjIgPSBcXChjaGFyYWN0ZXJcXChraW5kPTRcXClcXFxbMTouYTRzdHIyXFxcXSBcXCpc XCkgX19idWlsdGluX21hbGxvYyBcXCgzNlxcKTsiIDIgIm9yaWdpbmFsIiB9IH0KKyEgeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJhNHN0cjIgPSBcXChjaGFyYWN0ZXJc XChraW5kPTRcXClcXFxbMTouYTRzdHIyXFxcXSBcXCpcXCkgX19idWlsdGluX3JlYWxsb2Mg XFwoXFwodm9pZCBcXCpcXCkgYTRzdHIyLCAzNlxcKTsiIDEgIm9yaWdpbmFsIiB9IH0KKwor ISBBcnJheTogQXNzZXJ0LCByZWFsbG9jLWNoZWNrIGFzc2lnbiBzdHJpbmcgbGVuZ3RoIChh bGxvYyArIChyZWFsbG9jJ2VkKSBhc3NpZ25tZW50KToKKyEgeyBkZy1maW5hbCB7IHNjYW4t dHJlZS1kdW1wLXRpbWVzICJpZiBcXChcW15cXG5cXHJcXSpcXC5hNHN0ciAhPSA3XFwpIiAy ICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi aWYgXFwoRFxcLlxbMC05XF0rICE9IDI4XFwpIGdvdG8gTFxcLiIgMSAib3JpZ2luYWwiIH0g fQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIlxcLmE0c3RyID0gNzsi IDIgIm9yaWdpbmFsIiB9IH0KKworISBTY2FsYXI6IEFzc2VydCwgcmVhbGxvYy1jaGVjayBh c3NpZ24gc3RyaW5nIGxlbmd0aCAoYWxsb2MgKyAocmVhbGxvYydlZCkgYXNzaWdubWVudCk6 CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiaWYgXFwoXFteXFxuXFxy XF0qXFwuYTRzdHIyICE9IDlcXCkiIDIgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJpZiBcXChcXC5hNHN0cjIgPT0gOVxcKSBnb3RvIExc XC4iIDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICJcXC5hNHN0cjIgPSA5OyIgMiAib3JpZ2luYWwiIH0gfQo= --------------0jcnR30b0tyZslE92y1iMjAK--