From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id 260B1385737C; Wed, 2 Nov 2022 15:58:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 260B1385737C 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.95,234,1661846400"; d="diff'?scan'208";a="86082884" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa2.mentor.iphmx.com with ESMTP; 02 Nov 2022 07:58:03 -0800 IronPort-SDR: x1mOIQAWsvatpnfIc5n2M6OkgEbRcje9QhoEyqvnhIfoSgpd6xALw7o5JLyiYt0FPK6FqcrBem bPsoOmEhj0JAK1R6XO+dFpC+0jxEqzAaO0rdaevMNTZFma2ZyMeshMU0utGjPfuFh+uvWI20vZ sq0qcIn81nxfYSV9OmLJSQbzKsARp9DQkQ4xaVoFBAW//o5Zb57jIKdlsnrW5YuS5NNmDffaXS uTYXL6DvvuqvCnkBIhvHvWUSkh2b69R+et0dijrS7MfXiHBk//1EjUcjTU56LVmlcM2v9/jQ77 4ik= Content-Type: multipart/mixed; boundary="------------XwFKodAGG8dxci6oRBhPGmvx" Message-ID: <9d44e561-cad7-d881-95fe-a696cdcfa531@codesourcery.com> Date: Wed, 2 Nov 2022 16:57:56 +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 , Jakub Jelinek From: Tobias Burnus Subject: [Patch] Fortran/OpenMP: Fix DT struct-component with 'alloc' and array descr X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-10.mgc.mentorg.com (139.181.222.10) 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,KAM_SHORT,RCVD_IN_MSPIKE_H2,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: --------------XwFKodAGG8dxci6oRBhPGmvx Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable This fixes some an issue with 'alloc:' found when working on the patch '[Patch] OpenMP/Fortran: 'target update' with strides + DT components' https://gcc.gnu.org/pipermail/gcc-patches/2022-October/604687.html (BTW: This one is still pending review.) OK for mainline? * * * I think the patch is a great improvement. However, again, by writing a testcase, more issues have been found: * one generic Fortran one, worked around by adding '(:)', Cf. https://gcc.gnu.org/PR107508 "Invalid bounds due to bogus reallocati= on on assignment with KIND=3D4 characters". * Some other string issues, some might be generic Fortran issues * Some issue with pointers - where exit data give an error as 0x00 and 0x01 kinds are not known by target exit data Those also showed up with the 'target update' patch mentioned above. For the last two, I used '#if 0' followed by a comment with the current error message. I do intent to look into those - or at least file a PR. Likewise for the remaining issues mentioned in the 'tagret update' patch. Tobias ----------------- 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 --------------XwFKodAGG8dxci6oRBhPGmvx Content-Type: text/x-patch; charset="UTF-8"; name="omp-fix-alloc.diff" Content-Disposition: attachment; filename="omp-fix-alloc.diff" Content-Transfer-Encoding: base64 Rm9ydHJhbi9PcGVuTVA6IEZpeCBEVCBzdHJ1Y3QtY29tcG9uZW50IHdpdGggJ2FsbG9jJyBh bmQgYXJyYXkgZGVzY3IKCldoZW4gdXNpbmcgJ21hcChhbGxvYzogdmFyLCBkdCVjb21wKScg bmVlZHMgdG8gaGF2ZSBhICd0bycgbWFwcGluZyBvZgp0aGUgYXJyYXkgZGVzY3JpcHRvciBh cyBvdGhlcndpc2UgdGhlIGJvdW5kcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUKdGFyZ2V0 IHJlZ2lvbi4gLSBMaWtld2lzZSBmb3IgY2hhcmFjdGVyIHN0cmluZ3MuCgpUaGlzIHBhdGNo IGltcGxlbWVudHMgdGhpczsgaG93ZXZlciwgc29tZSBhZGRpdGlvbmFsIGlzc3VlcyBhcmUg ZXhwb3NlZApieSB0aGUgdGVzdGNhc2U7IHRob3NlIGFyZSAnI2lmIDAnZWQgYW5kIHdpbGwg YmUgaGFuZGxlZCBsYXRlci4KCmdjYy9mb3J0cmFuL0NoYW5nZUxvZzoKCgkqIHRyYW5zLW9w ZW5tcC5jYyAoZ2ZjX3RyYW5zX29tcF9jbGF1c2VzKTogRW5zdXJlIERUIHN0cnVjdC1jb21w IHdpdGgKCWFycmF5IGRlc2NyaXB0b3IgYW5kICdhbGxvYzonIGhhdmUgdGhlIGRlc2NyaXB0 b3IgbWFwcGVkIHdpdGggJ3RvOicuCgpsaWJnb21wL0NoYW5nZUxvZzoKCgkqIHRlc3RzdWl0 ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEtMy5mOTA6IE5ldyB0ZXN0LgoK IGdjYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgIDMgCiBsaWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0 LWVudGVyLWRhdGEtMy5mOTAgfCAgNTY3ICsrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5n ZWQsIDU2OSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZ2Nj L2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNj CmluZGV4IDRiZmRmODVjZDliLi40ZWI5ZDRjOWVkYyAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRy YW4vdHJhbnMtb3Blbm1wLmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYwpA QCAtMzUwNyw3ICszNTA3LDggQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tf dCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJCSAgICA9IGdmY19mdWxs X2FycmF5X3NpemUgKGJsb2NrLCBpbm5lciwgcmFuayk7CiAJCQkgIHRyZWUgZWxlbXN6CiAJ CQkgICAgPSBUWVBFX1NJWkVfVU5JVCAoZ2ZjX2dldF9lbGVtZW50X3R5cGUgKHR5cGUpKTsK LQkJCSAgaWYgKEdPTVBfTUFQX0NPUFlfVE9fUCAoT01QX0NMQVVTRV9NQVBfS0lORCAobm9k ZSkpKQorCQkJICBpZiAoR09NUF9NQVBfQ09QWV9UT19QIChPTVBfQ0xBVVNFX01BUF9LSU5E IChub2RlKSkKKwkJCSAgICAgIHx8IE9NUF9DTEFVU0VfTUFQX0tJTkQgKG5vZGUpID09IEdP TVBfTUFQX0FMTE9DKQogCQkJICAgIG1hcF9raW5kID0gR09NUF9NQVBfVE87CiAJCQkgIGVs c2UgaWYgKG4tPnUubWFwX29wID09IE9NUF9NQVBfUkVMRUFTRQogCQkJCSAgIHx8IG4tPnUu bWFwX29wID09IE9NUF9NQVBfREVMRVRFKQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3Vp dGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTMuZjkwIGIvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTMuZjkwCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZmUzZjAzYzdiOAotLS0gL2Rl di9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQt ZW50ZXItZGF0YS0zLmY5MApAQCAtMCwwICsxLDU2NyBAQAorISB7IGRnLWFkZGl0aW9uYWwt b3B0aW9ucyAiLWNwcCIgfQorCishIEZJWE1FOiBTb21lIHRlc3RzIGRvIG5vdCB3b3JrIHll dC4gVGhvc2UgYXJlIGZvciBub3cgaW4gJyNpZiAwJworCishIENoZWNrIHRoYXQgJ21hcChh bGxvYzonIHByb3Blcmx5IHdvcmtzIHdpdGgKKyEgLSBkZWZlcnJlZC1sZW5ndGggY2hhcmFj dGVyIHN0cmluZ3MKKyEgLSBhcnJheXMgd2l0aCBhcnJheSBkZXNjcmlwdG9ycworISBGb3Ig dGhvc2UsIHRoZSBhcnJheSBkZXNjcmlwdG9yIC8gc3RyaW5nIGxlbmd0aCBtdXN0IGJlIG1h cHBlZCB3aXRoICd0bzonCisKK3Byb2dyYW0gbWFpbgoraW1wbGljaXQgbm9uZQorCit0eXBl IHQKKyAgaW50ZWdlciA6OiBpYygyOjUpLCBpYzIKKyAgY2hhcmFjdGVyKGxlbj0xMSkgOjog Y2NzdHIoMzo0KSwgY2NzdHIyCisgIGNoYXJhY3RlcihsZW49MTEsa2luZD00KSA6OiBjYzRz dHIoMzo3KSwgY2M0c3RyMgorICBpbnRlZ2VyLCBwb2ludGVyIDo6IHBjKDopLCBwYzIKKyAg Y2hhcmFjdGVyKGxlbj06KSwgcG9pbnRlciA6OiBwY3N0cig6KSwgcGNzdHIyCisgIGNoYXJh Y3RlcihsZW49OixraW5kPTQpLCBwb2ludGVyIDo6IHBjNHN0cig6KSwgcGM0c3RyMgorZW5k IHR5cGUgdAorCit0eXBlKHQpIDo6IGR0CisKK2ludGVnZXIgOjogaWkoNSksIGlpMgorY2hh cmFjdGVyKGxlbj0xMSkgOjogY2xzdHIoLTE6MSksIGNsc3RyMgorY2hhcmFjdGVyKGxlbj0x MSxraW5kPTQpIDo6IGNsNHN0cigwOjMpLCBjbDRzdHIyCitpbnRlZ2VyLCBwb2ludGVyIDo6 IGlwKDopLCBpcDIKK2ludGVnZXIsIGFsbG9jYXRhYmxlIDo6IGlhKDopLCBpYTIKK2NoYXJh Y3RlcihsZW49OiksIHBvaW50ZXIgOjogcHN0cig6KSwgcHN0cjIKK2NoYXJhY3RlcihsZW49 OiksIGFsbG9jYXRhYmxlIDo6IGFzdHIoOiksIGFzdHIyCitjaGFyYWN0ZXIobGVuPTosa2lu ZD00KSwgcG9pbnRlciA6OiBwNHN0cig6KSwgcDRzdHIyCitjaGFyYWN0ZXIobGVuPTosa2lu ZD00KSwgYWxsb2NhdGFibGUgOjogYTRzdHIoOiksIGE0c3RyMgorCisKK2FsbG9jYXRlKGR0 JXBjKDUpLCBkdCVwYzIpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTIpIDo6IGR0JXBjc3Ry KDIpKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj00KSA6OiBkdCVwY3N0cjIpCisKK2FsbG9j YXRlKGNoYXJhY3RlcihsZW49MyxraW5kPTQpIDo6IGR0JXBjNHN0cigyOjMpKQorYWxsb2Nh dGUoY2hhcmFjdGVyKGxlbj01LGtpbmQ9NCkgOjogZHQlcGM0c3RyMikKKworYWxsb2NhdGUo aXAoNSksIGlwMiwgaWEoOCksIGlhMikKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49MikgOjog cHN0cigtMjowKSkKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49NCkgOjogcHN0cjIpCithbGxv Y2F0ZShjaGFyYWN0ZXIobGVuPTYpIDo6IGFzdHIoMzo1KSkKK2FsbG9jYXRlKGNoYXJhY3Rl cihsZW49OCkgOjogYXN0cjIpCisKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49MyxraW5kPTQp IDo6IHA0c3RyKDI6NCkpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTUsa2luZD00KSA6OiBw NHN0cjIpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTcsa2luZD00KSA6OiBhNHN0cigtMjoz KSkKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49OSxraW5kPTQpIDo6IGE0c3RyMikKKworCish IGludGVnZXIgOjogaWMoMjo1KSwgaWMyCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1h cChhbGxvYzogZHQlaWMpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVpYykKKyAgaWYg KHNpemUoZHQlaWMpIC89IDQpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChkdCVpYywgMSkg Lz0gMikgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGR0JWljLCAxKSAvPSA1KSBlcnJvciBz dG9wCisgIGR0JWljID0gWzIyLCAzMywgNDQsIDU1XQorISRvbXAgZW5kIHRhcmdldAorISRv bXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlaWMpCitpZiAoc2l6ZShkdCVpYykg Lz0gNCkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChkdCVpYywgMSkgLz0gMikgZXJyb3Igc3Rv cAoraWYgKHVib3VuZChkdCVpYywgMSkgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGFueSAoZHQl aWMgLz0gWzIyLCAzMywgNDQsIDU1XSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVu dGVyIGRhdGEgbWFwKGFsbG9jOiBkdCVpYzIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBk dCVpYzIpCisgIGR0JWljMiA9IDQyCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQg ZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVpYzIpCitpZiAoZHQlaWMyIC89IDQyKSBlcnJvciBz dG9wCisKKworISBjaGFyYWN0ZXIobGVuPTExKSA6OiBjY3N0cigzOjQpLCBjY3N0cjIKKwor ISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBkdCVjY3N0cikKKyEkb21wIHRh cmdldCBtYXAoYWxsb2M6IGR0JWNjc3RyKQorICBpZiAobGVuKGR0JWNjc3RyKSAvPSAxMSkg ZXJyb3Igc3RvcAorICBpZiAoc2l6ZShkdCVjY3N0cikgLz0gMikgZXJyb3Igc3RvcAorICBp ZiAobGJvdW5kKGR0JWNjc3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQo ZHQlY2NzdHIsIDEpIC89IDQpIGVycm9yIHN0b3AKKyAgZHQlY2NzdHIgPSBbIjEyMzQ1Njc4 OTAxIiwgImFiY2RlZmdoaWprIl0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBl eGl0IGRhdGEgbWFwKGZyb206IGR0JWNjc3RyKQoraWYgKGxlbihkdCVjY3N0cikgLz0gMTEp IGVycm9yIHN0b3AKK2lmIChzaXplKGR0JWNjc3RyKSAvPSAyKSBlcnJvciBzdG9wCitpZiAo bGJvdW5kKGR0JWNjc3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0JWNj c3RyLCAxKSAvPSA0KSBlcnJvciBzdG9wCitpZiAoYW55IChkdCVjY3N0ciAvPSBbIjEyMzQ1 Njc4OTAxIiwgImFiY2RlZmdoaWprIl0pKSBlcnJvciBzdG9wCisKKyEkb21wIHRhcmdldCBl bnRlciBkYXRhIG1hcChhbGxvYzogZHQlY2NzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxv YzogZHQlY2NzdHIyKQorICBpZiAobGVuKGR0JWNjc3RyMikgLz0gMTEpIGVycm9yIHN0b3AK KyAgZHQlY2NzdHIyID0gIkFCQ0RFRkdISUpLIgorISRvbXAgZW5kIHRhcmdldAorISRvbXAg dGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlY2NzdHIyKQoraWYgKGxlbihkdCVjY3N0 cjIpIC89IDExKSBlcnJvciBzdG9wCitpZiAoZHQlY2NzdHIyIC89ICJBQkNERUZHSElKSyIp IGVycm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49MTEsa2luZD00KSA6OiBjYzRzdHIo Mzo3KSwgY2M0c3RyMgorCisjaWYgMAorISBWYWx1ZSBjaGVjayBmYWlscworISRvbXAgdGFy Z2V0IG1hcChhbGxvYzogZHQlY2M0c3RyKQorICBpZiAobGVuKGR0JWNjNHN0cikgLz0gMTEp IGVycm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlY2M0c3RyKSAvPSA1KSBlcnJvciBzdG9wCisg IGlmIChsYm91bmQoZHQlY2M0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmICh1Ym91 bmQoZHQlY2M0c3RyLCAxKSAvPSA3KSBlcnJvciBzdG9wCisgIGR0JWNjNHN0ciA9IFs0XyIx MjM0NTY3ODkwMSIsIDRfImFiY2RlZmdoaWprIiwgJgorICAgICAgICAgICAgICAgNF8icWVy ZnRjZWE2ZHMiLCA0XyJhMWY5ZzM3Z2E0LiIsICYKKyAgICAgICAgICAgICAgIDRfIjQ1bmd3 ajU2c2oyIl0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFw KGZyb206IGR0JWNjNHN0cikKK2lmIChsZW4oZHQlY2M0c3RyKSAvPSAxMSkgZXJyb3Igc3Rv cAoraWYgKHNpemUoZHQlY2M0c3RyKSAvPSA1KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGR0 JWNjNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYgKHVib3VuZChkdCVjYzRzdHIsIDEp IC89IDcpIGVycm9yIHN0b3AKK2lmIChkdCVjYzRzdHIoMykgLz0gNF8iMTIzNDU2Nzg5MDEi KSBlcnJvciBzdG9wCitpZiAoZHQlY2M0c3RyKDQpIC89IDRfImFiY2RlZmdoaWprIikgZXJy b3Igc3RvcAoraWYgKGR0JWNjNHN0cig1KSAvPSA0XyJxZXJmdGNlYTZkcyIpIGVycm9yIHN0 b3AKK2lmIChkdCVjYzRzdHIoNikgLz0gNF8iYTFmOWczN2dhNC4iKSBlcnJvciBzdG9wCitp ZiAoZHQlY2M0c3RyKDcpIC89IDRfIjQ1bmd3ajU2c2oyIikgZXJyb3Igc3RvcAorI2VuZGlm CisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogZHQlY2M0c3RyMikKKyEk b21wIHRhcmdldCBtYXAoYWxsb2M6IGR0JWNjNHN0cjIpCisgIGlmIChsZW4oZHQlY2M0c3Ry MikgLz0gMTEpIGVycm9yIHN0b3AKKyAgZHQlY2M0c3RyMiA9IDRfIkFCQ0RFRkdISUpLIgor ISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQl Y2M0c3RyMikKK2lmIChsZW4oZHQlY2M0c3RyMikgLz0gMTEpIGVycm9yIHN0b3AKK2lmIChk dCVjYzRzdHIyIC89IDRfIkFCQ0RFRkdISUpLIikgZXJyb3Igc3RvcAorCisKKyEgaW50ZWdl ciwgcG9pbnRlciA6OiBwYyg6KSwgcGMyCishIGFsbG9jYXRlKGR0JXBjKDUpLCBkdCVwYzIp CisKKyNpZiAwCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVyX2V4aXRfZGF0YSB1bmhh bmRsZWQga2luZCAweDAwCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzog ZHQlcGMpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVwYykKKyAgaWYgKC5ub3QuIGFz c29jaWF0ZWQoZHQlcGMpKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGR0JXBjKSAvPSA1KSBl cnJvciBzdG9wCisgIGlmIChsYm91bmQoZHQlcGMsIDEpIC89IDEpIGVycm9yIHN0b3AKKyAg aWYgKHVib3VuZChkdCVwYywgMSkgLz0gNSkgZXJyb3Igc3RvcAorICBkdCVwYyA9IFsxMSwg MjIsIDMzLCA0NCwgNTVdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBk YXRhIG1hcChmcm9tOiBkdCVwYykKK2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjKSkgZXJy b3Igc3RvcAoraWYgKHNpemUoZHQlcGMpIC89IDUpIGVycm9yIHN0b3AKK2lmIChsYm91bmQo ZHQlcGMsIDEpIC89IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQlcGMsIDEpIC89IDUp IGVycm9yIHN0b3AKK2lmIChhbnkgKGR0JXBjIC89IFsxMSwgMjIsIDMzLCA0NCwgNTVdKSkg ZXJyb3Igc3RvcAorI2VuZGlmCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxv YzogZHQlcGMyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogZHQlcGMyKQorICBpZiAoLm5v dC4gYXNzb2NpYXRlZChkdCVwYzIpKSBlcnJvciBzdG9wCisgIGR0JXBjMiA9IDk5CishJG9t cCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVwYzIp CitpZiAoZHQlcGMyIC89IDk5KSBlcnJvciBzdG9wCitpZiAoLm5vdC4gYXNzb2NpYXRlZChk dCVwYzIpKSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTopLCBwb2ludGVyIDo6 IHBjc3RyKDopLCBwY3N0cjIKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0yKSA6OiBkdCVw Y3N0cigyKSkKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj00KSA6OiBkdCVwY3N0cjIpCisK KyNpZiAwCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVyX2V4aXRfZGF0YSB1bmhhbmRs ZWQga2luZCAweDAwCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogZHQl cGNzdHIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVwY3N0cikKKyAgaWYgKC5ub3Qu IGFzc29jaWF0ZWQoZHQlcGNzdHIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4oZHQlcGNzdHIp IC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlcGNzdHIpIC89IDIpIGVycm9yIHN0 b3AKKyAgaWYgKGxib3VuZChkdCVwY3N0ciwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBpZiAo dWJvdW5kKGR0JXBjc3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCisgIGR0JXBjc3RyID0gWyIw MSIsICJqayJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1h cChmcm9tOiBkdCVwY3N0cikKK2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjc3RyKSkgZXJy b3Igc3RvcAoraWYgKGxlbihkdCVwY3N0cikgLz0gMikgZXJyb3Igc3RvcAoraWYgKHNpemUo ZHQlcGNzdHIpIC89IDIpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoZHQlcGNzdHIsIDEpIC89 IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQlcGNzdHIsIDEpIC89IDIpIGVycm9yIHN0 b3AKK2lmIChhbnkgKGR0JXBjc3RyIC89IFsiMDEiLCAiamsiXSkpIGVycm9yIHN0b3AKKyNl bmRpZgorCisjaWYgMAorISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEg dW5oYW5kbGVkIGtpbmQgMHgwMQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxs b2M6IGR0JXBjc3RyMikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGR0JXBjc3RyMikKKyAg aWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGNzdHIyKSkgZXJyb3Igc3RvcAorICBpZiAobGVu KGR0JXBjc3RyMikgLz0gNCkgZXJyb3Igc3RvcAorICBkdCVwY3N0cjIgPSAiSElKSyIKKyEk b21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JXBj c3RyMikKK2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjc3RyMikpIGVycm9yIHN0b3AKK2lm IChsZW4oZHQlcGNzdHIyKSAvPSA0KSBlcnJvciBzdG9wCitpZiAoZHQlcGNzdHIyIC89ICJI SUpLIikgZXJyb3Igc3RvcAorI2VuZGlmCisKKworISBjaGFyYWN0ZXIobGVuPTosa2luZD00 KSwgcG9pbnRlciA6OiBwYzRzdHIoOiksIHBjNHN0cjIKKyEgYWxsb2NhdGUoY2hhcmFjdGVy KGxlbj0zLGtpbmQ9NCkgOjogZHQlcGM0c3RyKDI6MykpCishIGFsbG9jYXRlKGNoYXJhY3Rl cihsZW49NSxraW5kPTQpIDo6IGR0JXBjNHN0cjIpCisKKyNpZiAwCishIGxpYmdvbXA6IEdP TVBfdGFyZ2V0X2VudGVyX2V4aXRfZGF0YSB1bmhhbmRsZWQga2luZCAweDAwCisKKyEkb21w IHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogZHQlcGM0c3RyKQorISRvbXAgdGFyZ2V0 IG1hcChhbGxvYzogZHQlcGM0c3RyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwYzRz dHIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4oZHQlcGM0c3RyKSAvPSAzKSBlcnJvciBzdG9w CisgIGlmIChzaXplKGR0JXBjNHN0cikgLz0gMikgZXJyb3Igc3RvcAorICBpZiAobGJvdW5k KGR0JXBjNHN0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGR0JXBjNHN0 ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICBkdCVwYzRzdHIgPSBbNF8iNDU2IiwgNF8idHp1 Il0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206 IGR0JXBjNHN0cikKK2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjNHN0cikpIGVycm9yIHN0 b3AKK2lmIChsZW4oZHQlcGM0c3RyKSAvPSAzKSBlcnJvciBzdG9wCitpZiAoc2l6ZShkdCVw YzRzdHIpIC89IDIpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoZHQlcGM0c3RyLCAxKSAvPSAy KSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0JXBjNHN0ciwgMSkgLz0gMykgZXJyb3Igc3Rv cAoraWYgKGR0JXBjNHN0cigyKSAvPSA0XyI0NTYiKSBlcnJvciBzdG9wCitpZiAoZHQlcGM0 c3RyKDMpIC89IDRfInR6dSIpIGVycm9yIHN0b3AKKyNlbmRpZgorCisjaWYgMAorISBsaWJn b21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5oYW5kbGVkIGtpbmQgMHgwMQor CishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JXBjNHN0cjIpCishJG9t cCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVwYzRzdHIyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRl ZChkdCVwYzRzdHIyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKGR0JXBjNHN0cjIpIC89IDUp IGVycm9yIHN0b3AKKyAgZHQlcGM0c3RyMiA9IDRfIjk4NzY1IgorISRvbXAgZW5kIHRhcmdl dAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlcGM0c3RyMikKK2lmICgu bm90LiBhc3NvY2lhdGVkKGR0JXBjNHN0cjIpKSBlcnJvciBzdG9wCitpZiAobGVuKGR0JXBj NHN0cjIpIC89IDUpIGVycm9yIHN0b3AKK2lmIChkdCVwYzRzdHIyIC89IDRfIjk4NzY1Iikg ZXJyb3Igc3RvcAorI2VuZGlmCisKKworISBpbnRlZ2VyIDo6IGlpKDUpLCBpaTIKKworISRv bXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBpaSkKKyEkb21wIHRhcmdldCBtYXAo YWxsb2M6IGlpKQorICBpZiAoc2l6ZShpaSkgLz0gNSkgZXJyb3Igc3RvcAorICBpZiAobGJv dW5kKGlpLCAxKSAvPSAxKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoaWksIDEpIC89IDUp IGVycm9yIHN0b3AKKyAgaWkgPSBbLTEsIC0yLCAtMywgLTQsIC01XQorISRvbXAgZW5kIHRh cmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogaWkpCitpZiAoc2l6ZShp aSkgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChpaSwgMSkgLz0gMSkgZXJyb3Igc3Rv cAoraWYgKHVib3VuZChpaSwgMSkgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGFueSAoaWkgLz0g Wy0xLCAtMiwgLTMsIC00LCAtNV0pKSBlcnJvciBzdG9wCisKKyEkb21wIHRhcmdldCBlbnRl ciBkYXRhIG1hcChhbGxvYzogaWkyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogaWkyKQor ICBpaTIgPSAtNDEwCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRh IG1hcChmcm9tOiBpaTIpCitpZiAoaWkyIC89IC00MTApIGVycm9yIHN0b3AKKworCishIGNo YXJhY3RlcihsZW49MTEpIDo6IGNsc3RyKC0xOjEpLCBjbHN0cjIKKworISRvbXAgdGFyZ2V0 IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBjbHN0cikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6 IGNsc3RyKQorICBpZiAobGVuKGNsc3RyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBpZiAoc2l6 ZShjbHN0cikgLz0gMykgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGNsc3RyLCAxKSAvPSAt MSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGNsc3RyLCAxKSAvPSAxKSBlcnJvciBzdG9w CisgIGNsc3RyID0gWyIxMjM0NTY3ODkwMSIsICJhYmNkZWZnaGlqayIsICJBQkNERUZHSElK SyJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9t OiBjbHN0cikKK2lmIChsZW4oY2xzdHIpIC89IDExKSBlcnJvciBzdG9wCitpZiAoc2l6ZShj bHN0cikgLz0gMykgZXJyb3Igc3RvcAoraWYgKGxib3VuZChjbHN0ciwgMSkgLz0gLTEpIGVy cm9yIHN0b3AKK2lmICh1Ym91bmQoY2xzdHIsIDEpIC89IDEpIGVycm9yIHN0b3AKK2lmIChh bnkgKGNsc3RyIC89IFsiMTIzNDU2Nzg5MDEiLCAiYWJjZGVmZ2hpamsiLCAiQUJDREVGR0hJ SksiXSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9j OiBjbHN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBjbHN0cjIpCisgIGlmIChsZW4o Y2xzdHIyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBjbHN0cjIgPSAiQUJDREVGZ2hpamsiCish JG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBjbHN0 cjIpCitpZiAobGVuKGNsc3RyMikgLz0gMTEpIGVycm9yIHN0b3AKK2lmIChjbHN0cjIgLz0g IkFCQ0RFRmdoaWprIikgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj0xMSxraW5k PTQpIDo6IGNsNHN0cigwOjMpLCBjbDRzdHIyCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRh IG1hcChhbGxvYzogY2w0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogY2w0c3RyKQor ICBpZiAobGVuKGNsNHN0cikgLz0gMTEpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoY2w0c3Ry KSAvPSA0KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoY2w0c3RyLCAxKSAvPSAwKSBlcnJv ciBzdG9wCisgIGlmICh1Ym91bmQoY2w0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCisgIGNs NHN0ciA9IFs0XyIxMjM0NTY3ODkwMSIsIDRfImFiY2RlZmdoaWprIiwgJgorICAgICAgICAg ICAgNF8icWVyZnRjZWE2ZHMiLCA0XyJhMWY5ZzM3Z2E0LiJdCishJG9tcCBlbmQgdGFyZ2V0 CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBjbDRzdHIpCitpZiAobGVuKGNs NHN0cikgLz0gMTEpIGVycm9yIHN0b3AKK2lmIChzaXplKGNsNHN0cikgLz0gNCkgZXJyb3Ig c3RvcAoraWYgKGxib3VuZChjbDRzdHIsIDEpIC89IDApIGVycm9yIHN0b3AKK2lmICh1Ym91 bmQoY2w0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCitpZiAoY2w0c3RyKDApIC89IDRfIjEy MzQ1Njc4OTAxIikgZXJyb3Igc3RvcAoraWYgKGNsNHN0cigxKSAvPSA0XyJhYmNkZWZnaGlq ayIpIGVycm9yIHN0b3AKK2lmIChjbDRzdHIoMikgLz0gNF8icWVyZnRjZWE2ZHMiKSBlcnJv ciBzdG9wCitpZiAoY2w0c3RyKDMpIC89IDRfImExZjlnMzdnYTQuIikgZXJyb3Igc3RvcAor CishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGNsNHN0cjIpCishJG9tcCB0 YXJnZXQgbWFwKGFsbG9jOiBjbDRzdHIyKQorICBpZiAobGVuKGNsNHN0cjIpIC89IDExKSBl cnJvciBzdG9wCisgIGNsNHN0cjIgPSA0XyJBQkNERUZHSElKSyIKKyEkb21wIGVuZCB0YXJn ZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGNsNHN0cjIpCitpZiAobGVu KGNsNHN0cjIpIC89IDExKSBlcnJvciBzdG9wCitpZiAoY2w0c3RyMiAvPSA0XyJBQkNERUZH SElKSyIpIGVycm9yIHN0b3AKKworCishIGFsbG9jYXRlKGlwKDUpLCBpcDIsIGlhKDgpLCBp YTIpCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogaXApCishJG9tcCB0 YXJnZXQgbWFwKGFsbG9jOiBpcCkKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQoaXApKSBlcnJv ciBzdG9wCisgIGlmIChzaXplKGlwKSAvPSA1KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQo aXAsIDEpIC89IDEpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChpcCwgMSkgLz0gNSkgZXJy b3Igc3RvcAorICBpcCA9IFsxMSwgMjIsIDMzLCA0NCwgNTVdCishJG9tcCBlbmQgdGFyZ2V0 CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBpcCkKK2lmICgubm90LiBhc3Nv Y2lhdGVkKGlwKSkgZXJyb3Igc3RvcAoraWYgKHNpemUoaXApIC89IDUpIGVycm9yIHN0b3AK K2lmIChsYm91bmQoaXAsIDEpIC89IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoaXAsIDEp IC89IDUpIGVycm9yIHN0b3AKK2lmIChhbnkgKGlwIC89IFsxMSwgMjIsIDMzLCA0NCwgNTVd KSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGlw MikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGlwMikKKyAgaWYgKC5ub3QuIGFzc29jaWF0 ZWQoaXAyKSkgZXJyb3Igc3RvcAorICBpcDIgPSA5OQorISRvbXAgZW5kIHRhcmdldAorISRv bXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogaXAyKQoraWYgKGlwMiAvPSA5OSkgZXJy b3Igc3RvcAoraWYgKC5ub3QuIGFzc29jaWF0ZWQoaXAyKSkgZXJyb3Igc3RvcAorCisKKyEg YWxsb2NhdGUoaXAoNSksIGlwMiwgaWEoOCksIGlhMikKKworISRvbXAgdGFyZ2V0IGVudGVy IGRhdGEgbWFwKGFsbG9jOiBpYSkKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGlhKQorICBp ZiAoLm5vdC4gYWxsb2NhdGVkKGlhKSkgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShpYSkgLz0g OCkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGlhLCAxKSAvPSAxKSBlcnJvciBzdG9wCisg IGlmICh1Ym91bmQoaWEsIDEpIC89IDgpIGVycm9yIHN0b3AKKyAgaWEgPSBbMSwyLDMsNCw1 LDYsNyw4XQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAo ZnJvbTogaWEpCitpZiAoLm5vdC4gYWxsb2NhdGVkKGlhKSkgZXJyb3Igc3RvcAoraWYgKHNp emUoaWEpIC89IDgpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoaWEsIDEpIC89IDEpIGVycm9y IHN0b3AKK2lmICh1Ym91bmQoaWEsIDEpIC89IDgpIGVycm9yIHN0b3AKK2lmIChhbnkgKGlh IC89IFsxLDIsMyw0LDUsNiw3LDhdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50 ZXIgZGF0YSBtYXAoYWxsb2M6IGlhMikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGlhMikK KyAgaWYgKC5ub3QuIGFsbG9jYXRlZChpYTIpKSBlcnJvciBzdG9wCisgIGlhMiA9IDEwMgor ISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogaWEy KQoraWYgKGlhMiAvPSAxMDIpIGVycm9yIHN0b3AKK2lmICgubm90LiBhbGxvY2F0ZWQoaWEy KSkgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj06KSwgcG9pbnRlciA6OiBwc3Ry KDopLCBwc3RyMgorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTIpIDo6IHBzdHIoLTI6MCkp CishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49NCkgOjogcHN0cjIpCisKKyNpZiAwCishIGxp YmdvbXA6IG52cHR4X2FsbG9jIGVycm9yOiBvdXQgb2YgbWVtb3J5CisKKyEkb21wIHRhcmdl dCBlbnRlciBkYXRhIG1hcChhbGxvYzogcHN0cikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6 IHBzdHIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKHBzdHIpKSBlcnJvciBzdG9wCisgIGlm IChsZW4ocHN0cikgLz0gMikgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShwc3RyKSAvPSAzKSBl cnJvciBzdG9wCisgIGlmIChsYm91bmQocHN0ciwgMSkgLz0gLTIpIGVycm9yIHN0b3AKKyAg aWYgKHVib3VuZChwc3RyLCAxKSAvPSAwKSBlcnJvciBzdG9wCisgIHBzdHIgPSBbIjAxIiwg ImprIiwgImFxIl0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEg bWFwKGZyb206IHBzdHIpCitpZiAoLm5vdC4gYXNzb2NpYXRlZChwc3RyKSkgZXJyb3Igc3Rv cAoraWYgKGxlbihwc3RyKSAvPSAyKSBlcnJvciBzdG9wCitpZiAoc2l6ZShwc3RyKSAvPSAz KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKHBzdHIsIDEpIC89IC0yKSBlcnJvciBzdG9wCitp ZiAodWJvdW5kKHBzdHIsIDEpIC89IDApIGVycm9yIHN0b3AKK2lmIChhbnkgKHBzdHIgLz0g WyIwMSIsICJqayIsICJhcSJdKSkgZXJyb3Igc3RvcAorI2VuZGlmCisKKyEkb21wIHRhcmdl dCBlbnRlciBkYXRhIG1hcChhbGxvYzogcHN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9j OiBwc3RyMikKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQocHN0cjIpKSBlcnJvciBzdG9wCisg IGlmIChsZW4ocHN0cjIpIC89IDQpIGVycm9yIHN0b3AKKyAgcHN0cjIgPSAiSElKSyIKKyEk b21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IHBzdHIy KQoraWYgKC5ub3QuIGFzc29jaWF0ZWQocHN0cjIpKSBlcnJvciBzdG9wCitpZiAobGVuKHBz dHIyKSAvPSA0KSBlcnJvciBzdG9wCitpZiAocHN0cjIgLz0gIkhJSksiKSBlcnJvciBzdG9w CisKKworISBjaGFyYWN0ZXIobGVuPTopLCBhbGxvY2F0YWJsZSA6OiBhc3RyKDopLCBhc3Ry MgorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTYpIDo6IGFzdHIoMzo1KSkKKyEgYWxsb2Nh dGUoY2hhcmFjdGVyKGxlbj04KSA6OiBhc3RyMikKKworI2lmIDAKKyEgbGliZ29tcDogbnZw dHhfYWxsb2MgZXJyb3I6IG91dCBvZiBtZW1vcnkKKworISRvbXAgdGFyZ2V0IGVudGVyIGRh dGEgbWFwKGFsbG9jOiBhc3RyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogYXN0cikKKyAg aWYgKC5ub3QuIGFsbG9jYXRlZChhc3RyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKGFzdHIp IC89IDYpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoYXN0cikgLz0gMykgZXJyb3Igc3RvcAor ICBpZiAobGJvdW5kKGFzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChh c3RyLCAxKSAvPSA1KSBlcnJvciBzdG9wCisgIGFzdHIgPSBbIjAxZGI0NSIsICJqayREJVMi LCAienV0ZzQ3Il0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEg bWFwKGZyb206IGFzdHIpCitpZiAoLm5vdC4gYWxsb2NhdGVkKGFzdHIpKSBlcnJvciBzdG9w CitpZiAobGVuKGFzdHIpIC89IDYpIGVycm9yIHN0b3AKK2lmIChzaXplKGFzdHIpIC89IDMp IGVycm9yIHN0b3AKK2lmIChsYm91bmQoYXN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYg KHVib3VuZChhc3RyLCAxKSAvPSA1KSBlcnJvciBzdG9wCitpZiAoYW55IChhc3RyIC89IFsi MDFkYjQ1IiwgImprJEQlUyIsICJ6dXRnNDciXSkpIGVycm9yIHN0b3AKKyNlbmRpZgorCisj aWYgMAorISBsaWJnb21wOiBudnB0eF9hbGxvYyBlcnJvcjogb3V0IG9mIG1lbW9yeQorCish JG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGFzdHIyKQorISRvbXAgdGFyZ2V0 IG1hcChhbGxvYzogYXN0cjIpCisgIGlmICgubm90LiBhbGxvY2F0ZWQoYXN0cjIpKSBlcnJv ciBzdG9wCisgIGlmIChsZW4oYXN0cjIpIC89IDgpIGVycm9yIHN0b3AKKyAgYXN0cjIgPSAi SElKS2hpamsiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1h cChmcm9tOiBhc3RyMikKK2lmICgubm90LiBhbGxvY2F0ZWQoYXN0cjIpKSBlcnJvciBzdG9w CitpZiAobGVuKGFzdHIyKSAvPSA4KSBlcnJvciBzdG9wCitpZiAoYXN0cjIgLz0gIkhJSkto aWprIikgZXJyb3Igc3RvcAorI2VuZGlmCisKKworISBjaGFyYWN0ZXIobGVuPTosa2luZD00 KSwgcG9pbnRlciA6OiBwNHN0cig6KSwgcDRzdHIyCishIGFsbG9jYXRlKGNoYXJhY3Rlcihs ZW49MyxraW5kPTQpIDo6IHA0c3RyKDI6NCkpCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49 NSxraW5kPTQpIDo6IHA0c3RyMikKKworI2lmIDAKKyEgRkFJTFMgd2l0aCB2YWx1ZSBjaGVj aworCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IHA0c3RyKQorISRvbXAg dGFyZ2V0IG1hcChhbGxvYzogcDRzdHIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKHA0c3Ry KSkgZXJyb3Igc3RvcAorICBpZiAobGVuKHA0c3RyKSAvPSAzKSBlcnJvciBzdG9wCisgIGlm IChzaXplKHA0c3RyKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQocDRzdHIsIDEp IC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChwNHN0ciwgMSkgLz0gNCkgZXJyb3Ig c3RvcAorICBwNHN0cig6KSA9IFs0XyJmODUiLCA0XyI4YWYiLCA0XyJBJUYiXQorISRvbXAg ZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogcDRzdHIpCitp ZiAoLm5vdC4gYXNzb2NpYXRlZChwNHN0cikpIGVycm9yIHN0b3AKK2lmIChsZW4ocDRzdHIp IC89IDMpIGVycm9yIHN0b3AKK2lmIChzaXplKHA0c3RyKSAvPSAzKSBlcnJvciBzdG9wCitp ZiAobGJvdW5kKHA0c3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKHA0c3Ry LCAxKSAvPSA0KSBlcnJvciBzdG9wCitpZiAocDRzdHIoMikgIC89IDRfImY4NSIpIGVycm9y IHN0b3AKK2lmIChwNHN0cigzKSAgLz0gNF8iOGFmIikgZXJyb3Igc3RvcAoraWYgKHA0c3Ry KDQpICAvPSA0XyJBJUYiKSBlcnJvciBzdG9wCisjZW5kaWYKKworISRvbXAgdGFyZ2V0IGVu dGVyIGRhdGEgbWFwKGFsbG9jOiBwNHN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBw NHN0cjIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKHA0c3RyMikpIGVycm9yIHN0b3AKKyAg aWYgKGxlbihwNHN0cjIpIC89IDUpIGVycm9yIHN0b3AKKyAgcDRzdHIyID0gNF8iOTg3NWEi CishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBw NHN0cjIpCitpZiAoLm5vdC4gYXNzb2NpYXRlZChwNHN0cjIpKSBlcnJvciBzdG9wCitpZiAo bGVuKHA0c3RyMikgLz0gNSkgZXJyb3Igc3RvcAoraWYgKHA0c3RyMiAvPSA0XyI5ODc1YSIp IGVycm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49OixraW5kPTQpLCBhbGxvY2F0YWJs ZSA6OiBhNHN0cig6KSwgYTRzdHIyCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49NyxraW5k PTQpIDo6IGE0c3RyKC0yOjMpKQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTksa2luZD00 KSA6OiBhNHN0cjIpCisKKyNpZiAwCishIGxpYmdvbXA6IFRyeWluZyB0byBtYXAgaW50byBk ZXZpY2UgWzB4MTAyN2JhMC4uMHgyNTEwNTBiYjljOWViYmEwKSBvYmplY3Qgd2hlbiBbMHg3 ZmZkMDI2ZTY3MDguLjB4N2ZmZDAyNmU2NzEwKSBpcyBhbHJlYWR5IG1hcHBlZAorCishJG9t cCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGE0c3RyKQorISRvbXAgdGFyZ2V0IG1h cChhbGxvYzogYTRzdHIpCisgIGlmICgubm90LiBhbGxvY2F0ZWQoYTRzdHIpKSBlcnJvciBz dG9wCisgIGlmIChsZW4oYTRzdHIpIC89IDcpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoYTRz dHIpIC89IDYpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChhNHN0ciwgMSkgLz0gLTIpIGVy cm9yIHN0b3AKKyAgaWYgKHVib3VuZChhNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICAh IFNlZSBQUiBmb3J0cmFuLzEwNzUwOCB3aHkgJyg6KScgaXMgcmVxdWlyZWQKKyAgYTRzdHIo OikgPSBbNF8ic2Y0NTZhcSIsIDRfIjNkdHp1MjQiLCA0XyJfNGZoN3NtIiwgNF8iPWZmODVz NyIsIDRfImo9OGFmNGQiLCA0XyIuLEElRnN6Il0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21w IHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGE0c3RyKQoraWYgKC5ub3QuIGFsbG9jYXRl ZChhNHN0cikpIGVycm9yIHN0b3AKK2lmIChsZW4oYTRzdHIpIC89IDcpIGVycm9yIHN0b3AK K2lmIChzaXplKGE0c3RyKSAvPSA2KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGE0c3RyLCAx KSAvPSAtMikgZXJyb3Igc3RvcAoraWYgKHVib3VuZChhNHN0ciwgMSkgLz0gMykgZXJyb3Ig c3RvcAoraWYgKGE0c3RyKC0yKSAvPSA0XyJzZjQ1NmFxIikgZXJyb3Igc3RvcAoraWYgKGE0 c3RyKC0xKSAvPSA0XyIzZHR6dTI0IikgZXJyb3Igc3RvcAoraWYgKGE0c3RyKDApICAvPSA0 XyJfNGZoN3NtIikgZXJyb3Igc3RvcAoraWYgKGE0c3RyKDEpICAvPSA0XyI9ZmY4NXM3Iikg ZXJyb3Igc3RvcAoraWYgKGE0c3RyKDIpICAvPSA0XyJqPThhZjRkIikgZXJyb3Igc3RvcAor aWYgKGE0c3RyKDMpICAvPSA0XyIuLEElRnN6IikgZXJyb3Igc3RvcAorI2VuZGlmCisKKyEk b21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogYTRzdHIyKQorISRvbXAgdGFyZ2V0 IG1hcChhbGxvYzogYTRzdHIyKQorICBpZiAoLm5vdC4gYWxsb2NhdGVkKGE0c3RyMikpIGVy cm9yIHN0b3AKKyAgaWYgKGxlbihhNHN0cjIpIC89IDkpIGVycm9yIHN0b3AKKyAgYTRzdHIy ID0gNF8iOTg3NjVhMjNkIgorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQg ZGF0YSBtYXAoZnJvbTogYTRzdHIyKQoraWYgKC5ub3QuIGFsbG9jYXRlZChhNHN0cjIpKSBl cnJvciBzdG9wCitpZiAobGVuKGE0c3RyMikgLz0gOSkgZXJyb3Igc3RvcAoraWYgKGE0c3Ry MiAvPSA0XyI5ODc2NWEyM2QiKSBlcnJvciBzdG9wCisKKworZGVhbGxvY2F0ZShkdCVwYywg ZHQlcGMyKQorZGVhbGxvY2F0ZShkdCVwY3N0cikKK2RlYWxsb2NhdGUoZHQlcGNzdHIyKQor CitkZWFsbG9jYXRlKGR0JXBjNHN0cikKK2RlYWxsb2NhdGUoZHQlcGM0c3RyMikKKworZGVh bGxvY2F0ZShpcCwgaXAyLCBpYSwgaWEyKQorZGVhbGxvY2F0ZShwc3RyKQorZGVhbGxvY2F0 ZShwc3RyMikKK2RlYWxsb2NhdGUoYXN0cikKK2RlYWxsb2NhdGUoYXN0cjIpCisKK2RlYWxs b2NhdGUocDRzdHIpCitkZWFsbG9jYXRlKHA0c3RyMikKK2RlYWxsb2NhdGUoYTRzdHIpCitk ZWFsbG9jYXRlKGE0c3RyMikKKworZW5kCg== --------------XwFKodAGG8dxci6oRBhPGmvx--