From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ciao.gmane.io (ciao.gmane.io [116.202.254.214]) by sourceware.org (Postfix) with ESMTPS id 75FC93858D38 for ; Sat, 15 Oct 2022 20:15:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 75FC93858D38 Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=gmx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=m.gmane-mx.org Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1ojnZO-00093m-WF for fortran@gcc.gnu.org; Sat, 15 Oct 2022 22:15:43 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: fortran@gcc.gnu.org From: Harald Anlauf Subject: [PATCH, v2] Fortran: handle bad array ctors with typespec [PR93483,, PR107216, PR107219] Date: Sat, 15 Oct 2022 22:15:35 +0200 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------Xzh4icusXzelDlBcjtDZ1Blp" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.2 Content-Language: en-US In-Reply-To: Cc: gcc-patches@gcc.gnu.org X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,FORGED_MUA_MOZILLA,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,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: This is a multi-part message in MIME format. --------------Xzh4icusXzelDlBcjtDZ1Blp Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Dear all, here is an updated version of the patch that includes suggestions and comments by Mikael in PR93483. Basic new features are: - a new enum value ARITH_NOT_REDUCED to keep track if we encountered an expression that was not reduced via reduce_unary/reduce_binary - a cleanup of the related checking, resulting in more readable code. - a new testcase by Mikael that exhibited a flaw in the first patch due to a false resolution of a symbol by premature simplification. Regtested again. OK for mainline? Thanks, Harald Am 12.10.22 um 21:45 schrieb Harald Anlauf via Fortran: > Dear Fortranners, > > this one was really bugging me for quite some time. We failed to > properly handle (= simplify) expressions using array constructors > with typespec, and with parentheses and unary '+' and '-' > sprinkled here and there. When there was no typespec, there was > no related problem. > > The underlying issue apparently was that we should simplify > elements of the array constructor before attempting the type > conversion. > > Thanks to Gerhard, who insisted by submitted many related PRs. > > Regtested on x86_64-pc-linux-gnu. OK for mainline? > > Thanks, > Harald > --------------Xzh4icusXzelDlBcjtDZ1Blp Content-Type: text/x-patch; charset=UTF-8; name="pr93483-v2.diff" Content-Disposition: attachment; filename="pr93483-v2.diff" Content-Transfer-Encoding: base64 RnJvbSA4ZWI1NWZmMTYyMDA0N2UzMDJlMDBhMGY1MjAyYWI0NWI5YTNmY2FiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIYXJhbGQgQW5sYXVmIDxhbmxhdWZAZ214LmRlPgpE YXRlOiBTYXQsIDE1IE9jdCAyMDIyIDIxOjU2OjU2ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g Rm9ydHJhbjogaGFuZGxlIGJhZCBhcnJheSBjdG9ycyB3aXRoIHR5cGVzcGVjIFtQUjkzNDgz LAogUFIxMDcyMTYsIFBSMTA3MjE5XQoKZ2NjL2ZvcnRyYW4vQ2hhbmdlTG9nOgoKCVBSIGZv cnRyYW4vOTM0ODMKCVBSIGZvcnRyYW4vMTA3MjE2CglQUiBmb3J0cmFuLzEwNzIxOQoJKiBh cml0aC5jYyAocmVkdWNlX3VuYXJ5KTogSGFuZGxlZCBleHByZXNzaW9ucyBhcmUgRVhQX0NP TlNUQU5UIGFuZAoJRVhQUl9BUlJBWS4gIERvIG5vdCBhdHRlbXB0IHRvIHJlZHVjZSBvdGhl cndpc2UuCgkocmVkdWNlX2JpbmFyeV9hYyk6IExpa2V3aXNlLgoJKHJlZHVjZV9iaW5hcnlf Y2EpOiBMaWtld2lzZS4KCShyZWR1Y2VfYmluYXJ5X2FhKTogTW92ZWQgY2hlY2sgZm9yIEVY UF9DT05TVEFOVCBhbmQgRVhQUl9BUlJBWQoJZnJvbSBoZXJlIC4uLgoJKHJlZHVjZV9iaW5h cnkpOiAuLi4gdG8gaGVyZS4KCShldmFsX2ludHJpbnNpYyk6IENhdGNoIGZhaWxlZCByZWR1 Y3Rpb25zLgoJKiBnZm9ydHJhbi5oIChHRkNfSU5UUklOU0lDX09QUyk6IE5ldyBlbnVtIEFS SVRIX05PVF9SRURVQ0VEIHRvIGtlZXAKCXRyYWNrIG9mIGZhaWxlZCByZWR1Y3Rpb25zIGJl Y2F1c2UgYW4gZXJyb25lb3VzIGV4cHJlc3Npb24gd2FzCgllbmNvdW50ZXJlZC4KCmdjYy90 ZXN0c3VpdGUvQ2hhbmdlTG9nOgoKCVBSIGZvcnRyYW4vOTM0ODMKCVBSIGZvcnRyYW4vMTA3 MjE2CglQUiBmb3J0cmFuLzEwNzIxOQoJKiBnZm9ydHJhbi5kZy9hcnJheV9jb25zdHJ1Y3Rv cl81Ni5mOTA6IE5ldyB0ZXN0LgoJKiBnZm9ydHJhbi5kZy9hcnJheV9jb25zdHJ1Y3Rvcl81 Ny5mOTA6IE5ldyB0ZXN0LgoKQ28tYXV0aG9yZWQtYnk6IE1pa2FlbCBNb3JpbiA8bWlrYWVs QGdjYy5nbnUub3JnPgotLS0KIGdjYy9mb3J0cmFuL2FyaXRoLmNjICAgICAgICAgICAgICAg ICAgICAgICAgICB8IDI3ICsrKysrKysrLS0tLS0tLS0tCiBnY2MvZm9ydHJhbi9nZm9ydHJh bi5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgNSArKy0tCiAuLi4vZ2ZvcnRyYW4uZGcv YXJyYXlfY29uc3RydWN0b3JfNTYuZjkwICAgICAgfCAyMiArKysrKysrKysrKysrKwogLi4u L2dmb3J0cmFuLmRnL2FycmF5X2NvbnN0cnVjdG9yXzU3LmY5MCAgICAgIHwgMzAgKysrKysr KysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA2OCBpbnNlcnRpb25zKCspLCAxNiBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2dmb3J0cmFu LmRnL2FycmF5X2NvbnN0cnVjdG9yXzU2LmY5MAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYXJyYXlfY29uc3RydWN0b3JfNTcuZjkwCgpkaWZmIC0t Z2l0IGEvZ2NjL2ZvcnRyYW4vYXJpdGguY2MgYi9nY2MvZm9ydHJhbi9hcml0aC5jYwppbmRl eCAxNGJhOTMxZTM3Zi4uYzhlODgyYmFkYWIgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL2Fy aXRoLmNjCisrKyBiL2djYy9mb3J0cmFuL2FyaXRoLmNjCkBAIC0xMjgyLDE0ICsxMjgyLDE0 IEBAIHJlZHVjZV91bmFyeSAoYXJpdGggKCpldmFsKSAoZ2ZjX2V4cHIgKiwgZ2ZjX2V4cHIg KiopLCBnZmNfZXhwciAqb3AsCiAgIGlmIChvcC0+ZXhwcl90eXBlID09IEVYUFJfQ09OU1RB TlQpCiAgICAgcmV0dXJuIGV2YWwgKG9wLCByZXN1bHQpOwogCisgIGlmIChvcC0+ZXhwcl90 eXBlICE9IEVYUFJfQVJSQVkpCisgICAgcmV0dXJuIEFSSVRIX05PVF9SRURVQ0VEOworCiAg IHJjID0gQVJJVEhfT0s7CiAgIGhlYWQgPSBnZmNfY29uc3RydWN0b3JfY29weSAob3AtPnZh bHVlLmNvbnN0cnVjdG9yKTsKICAgZm9yIChjID0gZ2ZjX2NvbnN0cnVjdG9yX2ZpcnN0ICho ZWFkKTsgYzsgYyA9IGdmY19jb25zdHJ1Y3Rvcl9uZXh0IChjKSkKICAgICB7Ci0gICAgICBp ZiAoYy0+ZXhwci0+ZXhwcl90eXBlID09IEVYUFJfT1AgJiYgYy0+ZXhwci0+dHMudHlwZSA9 PSBCVF9VTktOT1dOKQotCXJjID0gQVJJVEhfSU5WQUxJRF9UWVBFOwotICAgICAgZWxzZQot CXJjID0gcmVkdWNlX3VuYXJ5IChldmFsLCBjLT5leHByLCAmcik7CisgICAgICByYyA9IHJl ZHVjZV91bmFyeSAoZXZhbCwgYy0+ZXhwciwgJnIpOwogCiAgICAgICBpZiAocmMgIT0gQVJJ VEhfT0spCiAJYnJlYWs7CkBAIC0xMzMwLDggKzEzMzAsOCBAQCByZWR1Y2VfYmluYXJ5X2Fj IChhcml0aCAoKmV2YWwpIChnZmNfZXhwciAqLCBnZmNfZXhwciAqLCBnZmNfZXhwciAqKiks CiAKICAgICAgIGlmIChjLT5leHByLT5leHByX3R5cGUgPT0gRVhQUl9DT05TVEFOVCkKICAg ICAgICAgcmMgPSBldmFsIChjLT5leHByLCBvcDIsICZyKTsKLSAgICAgIGVsc2UgaWYgKGMt PmV4cHItPmV4cHJfdHlwZSA9PSBFWFBSX09QICYmIGMtPmV4cHItPnRzLnR5cGUgPT0gQlRf VU5LTk9XTikKLQlyYyA9IEFSSVRIX0lOVkFMSURfVFlQRTsKKyAgICAgIGVsc2UgaWYgKGMt PmV4cHItPmV4cHJfdHlwZSAhPSBFWFBSX0FSUkFZKQorCXJjID0gQVJJVEhfTk9UX1JFRFVD RUQ7CiAgICAgICBlbHNlCiAJcmMgPSByZWR1Y2VfYmluYXJ5X2FjIChldmFsLCBjLT5leHBy LCBvcDIsICZyKTsKIApAQCAtMTM4NCw4ICsxMzg0LDggQEAgcmVkdWNlX2JpbmFyeV9jYSAo YXJpdGggKCpldmFsKSAoZ2ZjX2V4cHIgKiwgZ2ZjX2V4cHIgKiwgZ2ZjX2V4cHIgKiopLAog CiAgICAgICBpZiAoYy0+ZXhwci0+ZXhwcl90eXBlID09IEVYUFJfQ09OU1RBTlQpCiAJcmMg PSBldmFsIChvcDEsIGMtPmV4cHIsICZyKTsKLSAgICAgIGVsc2UgaWYgKGMtPmV4cHItPmV4 cHJfdHlwZSA9PSBFWFBSX09QICYmIGMtPmV4cHItPnRzLnR5cGUgPT0gQlRfVU5LTk9XTikK LQlyYyA9IEFSSVRIX0lOVkFMSURfVFlQRTsKKyAgICAgIGVsc2UgaWYgKGMtPmV4cHItPmV4 cHJfdHlwZSAhPSBFWFBSX0FSUkFZKQorCXJjID0gQVJJVEhfTk9UX1JFRFVDRUQ7CiAgICAg ICBlbHNlCiAJcmMgPSByZWR1Y2VfYmluYXJ5X2NhIChldmFsLCBvcDEsIGMtPmV4cHIsICZy KTsKIApAQCAtMTQ0NSwxMSArMTQ0NSw3IEBAIHJlZHVjZV9iaW5hcnlfYWEgKGFyaXRoICgq ZXZhbCkgKGdmY19leHByICosIGdmY19leHByICosIGdmY19leHByICoqKSwKICAgICAgICBj ICYmIGQ7CiAgICAgICAgYyA9IGdmY19jb25zdHJ1Y3Rvcl9uZXh0IChjKSwgZCA9IGdmY19j b25zdHJ1Y3Rvcl9uZXh0IChkKSkKICAgICB7Ci0gICAgICBpZiAoKGMtPmV4cHItPmV4cHJf dHlwZSA9PSBFWFBSX09QICYmIGMtPmV4cHItPnRzLnR5cGUgPT0gQlRfVU5LTk9XTikKLQkg IHx8IChkLT5leHByLT5leHByX3R5cGUgPT0gRVhQUl9PUCAmJiBkLT5leHByLT50cy50eXBl ID09IEJUX1VOS05PV04pKQotCXJjID0gQVJJVEhfSU5WQUxJRF9UWVBFOwotICAgICAgZWxz ZQotCXJjID0gcmVkdWNlX2JpbmFyeSAoZXZhbCwgYy0+ZXhwciwgZC0+ZXhwciwgJnIpOwor ICAgICAgcmMgPSByZWR1Y2VfYmluYXJ5IChldmFsLCBjLT5leHByLCBkLT5leHByLCAmcik7 CiAKICAgICAgIGlmIChyYyAhPSBBUklUSF9PSykKIAlicmVhazsKQEAgLTE0OTAsNiArMTQ4 Niw5IEBAIHJlZHVjZV9iaW5hcnkgKGFyaXRoICgqZXZhbCkgKGdmY19leHByICosIGdmY19l eHByICosIGdmY19leHByICoqKSwKICAgaWYgKG9wMS0+ZXhwcl90eXBlID09IEVYUFJfQVJS QVkgJiYgb3AyLT5leHByX3R5cGUgPT0gRVhQUl9DT05TVEFOVCkKICAgICByZXR1cm4gcmVk dWNlX2JpbmFyeV9hYyAoZXZhbCwgb3AxLCBvcDIsIHJlc3VsdCk7CiAKKyAgaWYgKG9wMS0+ ZXhwcl90eXBlICE9IEVYUFJfQVJSQVkgfHwgb3AyLT5leHByX3R5cGUgIT0gRVhQUl9BUlJB WSkKKyAgICByZXR1cm4gQVJJVEhfTk9UX1JFRFVDRUQ7CisKICAgcmV0dXJuIHJlZHVjZV9i aW5hcnlfYWEgKGV2YWwsIG9wMSwgb3AyLCByZXN1bHQpOwogfQogCkBAIC0xNjY4LDcgKzE2 NjcsNyBAQCBldmFsX2ludHJpbnNpYyAoZ2ZjX2ludHJpbnNpY19vcCBvcCwKICAgZWxzZQog ICAgIHJjID0gcmVkdWNlX2JpbmFyeSAoZXZhbC5mMywgb3AxLCBvcDIsICZyZXN1bHQpOwog Ci0gIGlmIChyYyA9PSBBUklUSF9JTlZBTElEX1RZUEUpCisgIGlmIChyYyA9PSBBUklUSF9J TlZBTElEX1RZUEUgfHwgcmMgPT0gQVJJVEhfTk9UX1JFRFVDRUQpCiAgICAgZ290byBydW50 aW1lOwogCiAgIC8qIFNvbWV0aGluZyB3ZW50IHdyb25nLiAgKi8KZGlmZiAtLWdpdCBhL2dj Yy9mb3J0cmFuL2dmb3J0cmFuLmggYi9nY2MvZm9ydHJhbi9nZm9ydHJhbi5oCmluZGV4IDEw YmIwOThkMTM2Li43YjhmMGIxNDhiZCAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vZ2ZvcnRy YW4uaAorKysgYi9nY2MvZm9ydHJhbi9nZm9ydHJhbi5oCkBAIC0yMjIsMTEgKzIyMiwxMiBA QCBlbnVtIGdmY19pbnRyaW5zaWNfb3AKICAgIEFzc3VtcHRpb25zIGFyZSBtYWRlIGFib3V0 IHRoZSBudW1iZXJpbmcgb2YgdGhlIGludGVyZmFjZV9vcCBlbnVtcy4gICovCiAjZGVmaW5l IEdGQ19JTlRSSU5TSUNfT1BTIEdGQ19JTlRSSU5TSUNfRU5ECiAKLS8qIEFyaXRobWV0aWMg cmVzdWx0cy4gICovCisvKiBBcml0aG1ldGljIHJlc3VsdHMuICBBUklUSF9OT1RfUkVEVUNF RCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgZmFpbGVkCisgICByZWR1Y3Rpb25zIGJlY2F1 c2UgYW4gZXJyb25lb3VzIGV4cHJlc3Npb24gd2FzIGVuY291bnRlcmVkLiAgKi8KIGVudW0g YXJpdGgKIHsgQVJJVEhfT0sgPSAxLCBBUklUSF9PVkVSRkxPVywgQVJJVEhfVU5ERVJGTE9X LCBBUklUSF9OQU4sCiAgIEFSSVRIX0RJVjAsIEFSSVRIX0lOQ09NTUVOU1VSQVRFLCBBUklU SF9BU1lNTUVUUklDLCBBUklUSF9QUk9ISUJJVCwKLSAgQVJJVEhfV1JPTkdDT05DQVQsIEFS SVRIX0lOVkFMSURfVFlQRQorICBBUklUSF9XUk9OR0NPTkNBVCwgQVJJVEhfSU5WQUxJRF9U WVBFLCBBUklUSF9OT1RfUkVEVUNFRAogfTsKIAogLyogU3RhdGVtZW50cy4gICovCmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2FycmF5X2NvbnN0cnVjdG9yXzU2 LmY5MCBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYXJyYXlfY29uc3RydWN0b3JfNTYu ZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40NzAxZmIzNjIy NQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYXJyYXlf Y29uc3RydWN0b3JfNTYuZjkwCkBAIC0wLDAgKzEsMjIgQEAKKyEgeyBkZy1kbyBjb21waWxl IH0KKyEKKyEgVGVzdCB0aGUgZml4IGZvciB0aGUgZm9sbG93aW5nOgorISBQUiBmb3J0cmFu LzkzNDgzCishIFBSIGZvcnRyYW4vMTA3MjE2CishIFBSIGZvcnRyYW4vMTA3MjE5CishCish IENvbnRyaWJ1dGVkIGJ5IEcuU3RlaW5tZXR6CisKK3Byb2dyYW0gcAorICByZWFsLCBwYXJh bWV0ZXIgOjogcjAoKikgPSArW3JlYWwgOjogKygxKSBdCisgIHJlYWwsIHBhcmFtZXRlciA6 OiByMSgqKSA9ICtbcmVhbCA6OiArWzFdIF0KKyAgcmVhbCwgcGFyYW1ldGVyIDo6IHIyKCop ID0gLVtyZWFsIDo6IFsoMSldXQorICByZWFsLCBwYXJhbWV0ZXIgOjogcjMoKikgPSArW3Jl YWwgOjogWy0oMSldXQorICByZWFsLCBwYXJhbWV0ZXIgOjogcjQoKikgPSAtW3JlYWwgOjog W1soMSldXV0KKyAgcmVhbCwgcGFyYW1ldGVyIDo6IHI1KCopID0gLVtyZWFsIDo6IC1bMSwg Ml1dCisgIHJlYWwsIHBhcmFtZXRlciA6OiByNigqKSA9ICtbcmVhbCA6OiArWzEsIDJdXQor ICByZWFsLCBwYXJhbWV0ZXIgOjogcjcoKikgPSAgW3JlYWwgOjogMSwgMl0gKiBbcmVhbCA6 OiAxLCAoMildCisgIHJlYWwsIHBhcmFtZXRlciA6OiByOCgqKSA9ICBbcmVhbCA6OiAxLCAo MildICogW3JlYWwgOjogMSwgMl0KKyAgcmVhbCwgcGFyYW1ldGVyIDo6IHI5KCopID0gK1ty ZWFsIDo6IDEsIDJdICogW3JlYWwgOjogMSwgKDIpXQorICByZWFsLCBwYXJhbWV0ZXIgOjog cnIoKikgPSAtW3JlYWwgOjogMSwgKDIpXSAqIFtyZWFsIDo6IDEsIDJdCitlbmQKZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYXJyYXlfY29uc3RydWN0b3JfNTcu ZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9hcnJheV9jb25zdHJ1Y3Rvcl81Ny5m OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjEyOThjMDljYzQw Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9hcnJheV9j b25zdHJ1Y3Rvcl81Ny5mOTAKQEAgLTAsMCArMSwzMCBAQAorISB7IGRnLWRvIHJ1biB9Cish IFBSIGZvcnRyYW4vOTM0ODMKKyEKKyEgVmVyaWZ5IHRoYXQgcmVzb2x1dGlvbiAoaG9zdCBh c3NvY2lhdGVkIHBhcmFtZXRlciB2cy4gY29udGFpbmVkIGZ1bmN0aW9uKSB3b3Jrcy4KKyEK KyEgQ29udHJpYnV0ZWQgYnkgTWlrYWVsIE1vcmluCisKK21vZHVsZSBtCisgIGltcGxpY2l0 IG5vbmUKKyAgaW50ZWdlciwgcGFyYW1ldGVyIDo6IGEoKikgPSBbIDcsIDExIF0KK2NvbnRh aW5zCisgIHN1YnJvdXRpbmUgYnVnCisgICAgcmVhbCA6OiBiKDEpLCBjKDEpCisgICAgYiA9 IFsgcmVhbCA6OiAoYSgxKSkgXQorICAgIGMgPSBbIHJlYWwgOjogIGEoMSkgIF0KKyAgICBw cmludCAqLCBiLCBjCisgICAgaWYgKGFueSAoYiAvPSBbIDE0LiBdKSkgc3RvcCAxCisgICAg aWYgKGFueSAoYyAvPSBbIDE0LiBdKSkgc3RvcCAyCisgIGNvbnRhaW5zCisgICAgZnVuY3Rp b24gYShjKQorICAgICAgaW50ZWdlciA6OiBhLCBjCisgICAgICBhID0gYyArIDEzCisgICAg ZW5kIGZ1bmN0aW9uIGEKKyAgZW5kIHN1YnJvdXRpbmUgYnVnCitlbmQgbW9kdWxlIG0KKwor cHJvZ3JhbSBwCisgIHVzZSBtCisgIGNhbGwgYnVnCitlbmQgcHJvZ3JhbSBwCi0tIAoyLjM1 LjMKCg== --------------Xzh4icusXzelDlBcjtDZ1Blp--