From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qv1-xf31.google.com (mail-qv1-xf31.google.com [IPv6:2607:f8b0:4864:20::f31]) by sourceware.org (Postfix) with ESMTPS id A25433858D35 for ; Thu, 16 Dec 2021 18:37:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A25433858D35 Received: by mail-qv1-xf31.google.com with SMTP id kd9so82549qvb.11 for ; Thu, 16 Dec 2021 10:37:15 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=cta2QD+/K/aKJClYKE2eggxC2z+Gbpux8GgDVHCd5ak=; b=yg7GQflKq+6cW8aZIpRyyOnlXZzLZwE/ZiSa4LT/qhefV9j7SsXRzkOx0nyTPoJwq/ u/31Vi/qfVJkOjpsSskYFr721T9otif2WGoD+y6m1XCi4EIeFM5iDHP1g24p2b8VsFS2 QI5SlXGxiUPE1MfcjQH3pSbr8z9gwUSTDSUfvfBeUBRkQFquIBj8dDDDBXVORiqURY2Q mFaovMrArsBgsvbXMKvaYlFi679razeEOGLiWCWejrW8eseB4+9HGlCcLI30kDP+CSBA mac9DzVKFUHlI1naRXZDWw9GmmdvuGAg9Ovw00BrOGvNUl6vbRX/vBatjCooCLD7rYE3 CUxw== X-Gm-Message-State: AOAM533RbSzyrdUZ1OZl+GbT7IeYmw2hL49j20htcDCVPRs6u8SO/GFV zD5ckIfHaCeAKZXS8EdvPFq5fcnjiOSLAarzd++HAyiPt/SmlA== X-Google-Smtp-Source: ABdhPJzOXAOPxQwLU+UggwwslW1LAs0+zBwsVwCBrSbrX1GJbsgtKej7Gvv/syLz9WJQh+PilbMlgxp7GicccQsxTNs= X-Received: by 2002:a0c:fa06:: with SMTP id q6mr16863197qvn.125.1639679834929; Thu, 16 Dec 2021 10:37:14 -0800 (PST) MIME-Version: 1.0 From: Uros Bizjak Date: Thu, 16 Dec 2021 19:37:03 +0100 Message-ID: Subject: [PATCH] i386: Enable VxHF vector modes lower ABI levels [PR103571] To: "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary="0000000000001b9b7205d347b62f" X-Spam-Status: No, score=-8.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Dec 2021 18:37:17 -0000 --0000000000001b9b7205d347b62f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Enable VxHF vector modes for SSE2, AVX and AVX512F ABIs. 2021-12-16 Uro=C5=A1 Bizjak gcc/ChangeLog: PR target/103571 * config/i386/i386.h (VALID_AVX256_REG_MODE): Add V16HFmode. (VALID_AVX256_REG_OR_OI_VHF_MODE): Replace with ... (VALID_AVX256_REG_OR_OI_MODE): ... this. Remove V16HFmode. (VALID_AVX512F_SCALAR_MODE): Remove HImode and HFmode. (VALID_AVX512FP16_SCALAR_MODE): New. (VALID_AVX512F_REG_MODE): Add V32HFmode. (VALID_SSE2_REG_MODE): Add V8HFmode, V4HFmode and V2HFmode. (VALID_SSE2_REG_VHF_MODE): Remove. (VALID_INT_MODE_P): Add V2HFmode. * config/i386/i386.c (function_arg_advance_64): Remove explicit mention of V16HFmode and V32HFmode. (ix86_hard_regno_mode_ok): Remove explicit mention of XImode and V32HFmode, use VALID_AVX512F_REG_OR_XI_MODE instead. Use VALID_AVX512FP_SCALAR_MODE for TARGET_aVX512FP16. Use VALID_AVX256_REG_OR_OI_MODE instead of VALID_AVX256_REG_OR_OI_VHF_MODE and VALID_SSE2_REG_MODE instead of VALID_SSE2_REG_VHF_MODE. (ix86_set_reg_reg_cost): Remove usge of VALID_AVX512FP16_REG_MODE. (ix86_vector_mode_supported): Ditto. gcc/testsuite/ChangeLog: PR target/103571 * gcc.target/i386/pr102812.c (dg-final): Do not scan for movdqa. Bootstrapped and regression tested on x86_64-linux-gnu b,-m32}. Pushed to master. Uros. --0000000000001b9b7205d347b62f Content-Type: text/plain; charset="US-ASCII"; name="p.diff.txt" Content-Disposition: attachment; filename="p.diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kx9b10ls0 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LmMgYi9nY2MvY29uZmlnL2kzODYvaTM4 Ni5jCmluZGV4IDlmNGVkMzRmZmQ1Li5lYzE1NTgyNjMxMCAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9pMzg2L2kzODYuYworKysgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCkBAIC0yOTQyLDkgKzI5 NDIsNyBAQCBmdW5jdGlvbl9hcmdfYWR2YW5jZV82NCAoQ1VNVUxBVElWRV9BUkdTICpjdW0sIG1h Y2hpbmVfbW9kZSBtb2RlLAogCiAgIC8qIFVubmFtZWQgNTEyIGFuZCAyNTZiaXQgdmVjdG9yIG1v ZGUgcGFyYW1ldGVycyBhcmUgcGFzc2VkIG9uIHN0YWNrLiAgKi8KICAgaWYgKCFuYW1lZCAmJiAo VkFMSURfQVZYNTEyRl9SRUdfTU9ERSAobW9kZSkKLQkJIHx8IFZBTElEX0FWWDI1Nl9SRUdfTU9E RSAobW9kZSkKLQkJIHx8IG1vZGUgPT0gVjE2SEZtb2RlCi0JCSB8fCBtb2RlID09IFYzMkhGbW9k ZSkpCisJCSB8fCBWQUxJRF9BVlgyNTZfUkVHX01PREUgKG1vZGUpKSkKICAgICByZXR1cm4gMDsK IAogICBpZiAoIWV4YW1pbmVfYXJndW1lbnQgKG1vZGUsIHR5cGUsIDAsICZpbnRfbnJlZ3MsICZz c2VfbnJlZ3MpCkBAIC0xOTkxNSwxNSArMTk5MTMsMTcgQEAgaXg4Nl9oYXJkX3JlZ25vX21vZGVf b2sgKHVuc2lnbmVkIGludCByZWdubywgbWFjaGluZV9tb2RlIG1vZGUpCiAJICAtIFhJIG1vZGUK IAkgIC0gYW55IG9mIDUxMi1iaXQgd2lkZSB2ZWN0b3IgbW9kZQogCSAgLSBhbnkgc2NhbGFyIG1v ZGUuICAqLwotICAgICAgLyogRm9yIEFWWDUxMkZQMTYsIHZtb3Z3IHN1cHBvcnRzIG1vdmVtZW50 IG9mIEhJbW9kZQotCSBiZXR3ZWVuIGdwciBhbmQgc3NlIHJlZ2lzdHNlci4gICovCiAgICAgICBp ZiAoVEFSR0VUX0FWWDUxMkYKLQkgICYmIChtb2RlID09IFhJbW9kZQotCSAgICAgIHx8IG1vZGUg PT0gVjMySEZtb2RlCi0JICAgICAgfHwgVkFMSURfQVZYNTEyRl9SRUdfTU9ERSAobW9kZSkKKwkg ICYmIChWQUxJRF9BVlg1MTJGX1JFR19PUl9YSV9NT0RFIChtb2RlKQogCSAgICAgIHx8IFZBTElE X0FWWDUxMkZfU0NBTEFSX01PREUgKG1vZGUpKSkKIAlyZXR1cm4gdHJ1ZTsKIAorICAgICAgLyog Rm9yIEFWWDUxMkZQMTYsIHZtb3Z3IHN1cHBvcnRzIG1vdmVtZW50IG9mIEhJbW9kZQorCSBhbmQg SEZtb2RlIGJldHdlZW4gR1BSIGFuZCBTU0UgcmVnaXN0ZXJzLiAgKi8KKyAgICAgIGlmIChUQVJH RVRfQVZYNTEyRlAxNgorCSAgJiYgVkFMSURfQVZYNTEyRlAxNl9TQ0FMQVJfTU9ERSAobW9kZSkp CisJcmV0dXJuIHRydWU7CisKICAgICAgIC8qIEZvciBBVlgtNTEyNEZNQVBTIG9yIEFWWC01MTI0 Vk5OSVcKIAkgYWxsb3cgVjY0U0YgYW5kIFY2NFNJIG1vZGVzIGZvciBzcGVjaWFsIHJlZ25vcy4g ICovCiAgICAgICBpZiAoKFRBUkdFVF9BVlg1MTI0Rk1BUFMgfHwgVEFSR0VUX0FWWDUxMjRWTk5J VykKQEAgLTE5OTM0LDcgKzE5OTM0LDcgQEAgaXg4Nl9oYXJkX3JlZ25vX21vZGVfb2sgKHVuc2ln bmVkIGludCByZWdubywgbWFjaGluZV9tb2RlIG1vZGUpCiAgICAgICAvKiBUT0RPIGNoZWNrIGZv ciBRSS9ISSBzY2FsYXJzLiAgKi8KICAgICAgIC8qIEFWWDUxMlZMIGFsbG93cyBzc2UgcmVnczE2 KyBmb3IgMTI4LzI1NiBiaXQgbW9kZXMuICAqLwogICAgICAgaWYgKFRBUkdFVF9BVlg1MTJWTAot CSAgJiYgKFZBTElEX0FWWDI1Nl9SRUdfT1JfT0lfVkhGX01PREUgKG1vZGUpCisJICAmJiAoVkFM SURfQVZYMjU2X1JFR19PUl9PSV9NT0RFIChtb2RlKQogCSAgICAgIHx8IFZBTElEX0FWWDUxMlZM XzEyOF9SRUdfTU9ERSAobW9kZSkpKQogCXJldHVybiB0cnVlOwogCkBAIC0xOTk0NCw5ICsxOTk0 NCw5IEBAIGl4ODZfaGFyZF9yZWdub19tb2RlX29rICh1bnNpZ25lZCBpbnQgcmVnbm8sIG1hY2hp bmVfbW9kZSBtb2RlKQogCiAgICAgICAvKiBPSW1vZGUgYW5kIEFWWCBtb2RlcyBhcmUgYXZhaWxh YmxlIG9ubHkgd2hlbiBBVlggaXMgZW5hYmxlZC4gICovCiAgICAgICByZXR1cm4gKChUQVJHRVRf QVZYCi0JICAgICAgICYmIFZBTElEX0FWWDI1Nl9SRUdfT1JfT0lfVkhGX01PREUgKG1vZGUpKQor CSAgICAgICAmJiBWQUxJRF9BVlgyNTZfUkVHX09SX09JX01PREUgKG1vZGUpKQogCSAgICAgIHx8 IFZBTElEX1NTRV9SRUdfTU9ERSAobW9kZSkKLQkgICAgICB8fCBWQUxJRF9TU0UyX1JFR19WSEZf TU9ERSAobW9kZSkKKwkgICAgICB8fCBWQUxJRF9TU0UyX1JFR19NT0RFIChtb2RlKQogCSAgICAg IHx8IFZBTElEX01NWF9SRUdfTU9ERSAobW9kZSkKIAkgICAgICB8fCBWQUxJRF9NTVhfUkVHX01P REVfM0ROT1cgKG1vZGUpKTsKICAgICB9CkBAIC0yMDE1Niw4ICsyMDE1Niw3IEBAIGl4ODZfc2V0 X3JlZ19yZWdfY29zdCAobWFjaGluZV9tb2RlIG1vZGUpCiAKICAgICBjYXNlIE1PREVfVkVDVE9S X0lOVDoKICAgICBjYXNlIE1PREVfVkVDVE9SX0ZMT0FUOgotICAgICAgaWYgKChUQVJHRVRfQVZY NTEyRlAxNiAmJiBWQUxJRF9BVlg1MTJGUDE2X1JFR19NT0RFIChtb2RlKSkKLQkgIHx8IChUQVJH RVRfQVZYNTEyRiAmJiBWQUxJRF9BVlg1MTJGX1JFR19NT0RFIChtb2RlKSkKKyAgICAgIGlmICgo VEFSR0VUX0FWWDUxMkYgJiYgVkFMSURfQVZYNTEyRl9SRUdfTU9ERSAobW9kZSkpCiAJICB8fCAo VEFSR0VUX0FWWCAmJiBWQUxJRF9BVlgyNTZfUkVHX01PREUgKG1vZGUpKQogCSAgfHwgKFRBUkdF VF9TU0UyICYmIFZBTElEX1NTRTJfUkVHX01PREUgKG1vZGUpKQogCSAgfHwgKFRBUkdFVF9TU0Ug JiYgVkFMSURfU1NFX1JFR19NT0RFIChtb2RlKSkKQEAgLTIyMDgwLDggKzIyMDc5LDYgQEAgaXg4 Nl92ZWN0b3JfbW9kZV9zdXBwb3J0ZWRfcCAobWFjaGluZV9tb2RlIG1vZGUpCiAgIGlmICgoVEFS R0VUX01NWCB8fCBUQVJHRVRfTU1YX1dJVEhfU1NFKQogICAgICAgJiYgVkFMSURfTU1YX1JFR19N T0RFIChtb2RlKSkKICAgICByZXR1cm4gdHJ1ZTsKLSAgaWYgKFRBUkdFVF9BVlg1MTJGUDE2ICYm IFZBTElEX0FWWDUxMkZQMTZfUkVHX01PREUgKG1vZGUpKQotICAgIHJldHVybiB0cnVlOwogICBp ZiAoKFRBUkdFVF8zRE5PVyB8fCBUQVJHRVRfTU1YX1dJVEhfU1NFKQogICAgICAgJiYgVkFMSURf TU1YX1JFR19NT0RFXzNETk9XIChtb2RlKSkKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBh L2djYy9jb25maWcvaTM4Ni9pMzg2LmggYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5oCmluZGV4IDQ2 ZmRkNmUxMDg4Li4zOThmNzUxMzc1MiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYu aAorKysgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5oCkBAIC0xMDA1LDIwICsxMDA1LDIyIEBAIGV4 dGVybiBjb25zdCBjaGFyICpob3N0X2RldGVjdF9sb2NhbF9jcHUgKGludCBhcmdjLCBjb25zdCBj aGFyICoqYXJndik7CiAjZGVmaW5lIFZBTElEX0FWWDI1Nl9SRUdfTU9ERShNT0RFKQkJCQkJXAog ICAoKE1PREUpID09IFYzMlFJbW9kZSB8fCAoTU9ERSkgPT0gVjE2SEltb2RlIHx8IChNT0RFKSA9 PSBWOFNJbW9kZQlcCiAgICB8fCAoTU9ERSkgPT0gVjRESW1vZGUgfHwgKE1PREUpID09IFYyVElt b2RlIHx8IChNT0RFKSA9PSBWOFNGbW9kZQlcCi0gICB8fCAoTU9ERSkgPT0gVjRERm1vZGUpCisg ICB8fCAoTU9ERSkgPT0gVjRERm1vZGUgfHwgKE1PREUpID09IFYxNkhGbW9kZSkKIAotI2RlZmlu ZSBWQUxJRF9BVlgyNTZfUkVHX09SX09JX1ZIRl9NT0RFKE1PREUpCQlcCi0gIChWQUxJRF9BVlgy NTZfUkVHX01PREUgKE1PREUpIHx8IChNT0RFKSA9PSBPSW1vZGUgfHwgKE1PREUpID09IFYxNkhG bW9kZSkKKyNkZWZpbmUgVkFMSURfQVZYMjU2X1JFR19PUl9PSV9NT0RFKE1PREUpCQlcCisgIChW QUxJRF9BVlgyNTZfUkVHX01PREUgKE1PREUpIHx8IChNT0RFKSA9PSBPSW1vZGUpCiAKICNkZWZp bmUgVkFMSURfQVZYNTEyRl9TQ0FMQVJfTU9ERShNT0RFKQkJCQkJXAogICAoKE1PREUpID09IERJ bW9kZSB8fCAoTU9ERSkgPT0gREZtb2RlIHx8IChNT0RFKSA9PSBTSW1vZGUJCVwKLSAgIHx8IChN T0RFKSA9PSBTRm1vZGUJCQkJCQkJXAotICAgfHwgKFRBUkdFVF9BVlg1MTJGUDE2ICYmICgoTU9E RSkgPT0gSEltb2RlIHx8IChNT0RFKSA9PSBIRm1vZGUpKSkKKyAgIHx8IChNT0RFKSA9PSBTRm1v ZGUpCisKKyNkZWZpbmUgVkFMSURfQVZYNTEyRlAxNl9TQ0FMQVJfTU9ERShNT0RFKQlcCisgICgo TU9ERSkgPT0gSEltb2RlIHx8IChNT0RFKSA9PSBIRm1vZGUpCiAKICNkZWZpbmUgVkFMSURfQVZY NTEyRl9SRUdfTU9ERShNT0RFKQkJCQkJXAogICAoKE1PREUpID09IFY4REltb2RlIHx8IChNT0RF KSA9PSBWOERGbW9kZSB8fCAoTU9ERSkgPT0gVjY0UUltb2RlCVwKICAgIHx8IChNT0RFKSA9PSBW MTZTSW1vZGUgfHwgKE1PREUpID09IFYxNlNGbW9kZSB8fCAoTU9ERSkgPT0gVjMySEltb2RlIFwK LSAgIHx8IChNT0RFKSA9PSBWNFRJbW9kZSkKKyAgIHx8IChNT0RFKSA9PSBWNFRJbW9kZSB8fCAo TU9ERSkgPT0gVjMySEZtb2RlKQogCiAjZGVmaW5lIFZBTElEX0FWWDUxMkZfUkVHX09SX1hJX01P REUoTU9ERSkJCQkJXAogICAoVkFMSURfQVZYNTEyRl9SRUdfTU9ERSAoTU9ERSkgfHwgKE1PREUp ID09IFhJbW9kZSkKQEAgLTEwMzUsMTMgKzEwMzcsMTAgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKmhv c3RfZGV0ZWN0X2xvY2FsX2NwdSAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKIAogI2Rl ZmluZSBWQUxJRF9TU0UyX1JFR19NT0RFKE1PREUpCQkJCQlcCiAgICgoTU9ERSkgPT0gVjE2UUlt b2RlIHx8IChNT0RFKSA9PSBWOEhJbW9kZSB8fCAoTU9ERSkgPT0gVjJERm1vZGUJXAorICAgfHwg KE1PREUpID09IFY4SEZtb2RlIHx8IChNT0RFKSA9PSBWNEhGbW9kZSB8fCAoTU9ERSkgPT0gVjJI Rm1vZGUJXAogICAgfHwgKE1PREUpID09IFY0UUltb2RlIHx8IChNT0RFKSA9PSBWMkhJbW9kZSB8 fCAoTU9ERSkgPT0gVjFTSW1vZGUJXAogICAgfHwgKE1PREUpID09IFYyREltb2RlIHx8IChNT0RF KSA9PSBERm1vZGUgfHwgKE1PREUpID09IEhGbW9kZSkKIAotI2RlZmluZSBWQUxJRF9TU0UyX1JF R19WSEZfTU9ERShNT0RFKQkJCVwKLSAgKFZBTElEX1NTRTJfUkVHX01PREUgKE1PREUpIHx8IChN T0RFKSA9PSBWOEhGbW9kZQlcCi0gICB8fCAoTU9ERSkgPT0gVjRIRm1vZGUgfHwgKE1PREUpID09 IFYySEZtb2RlKQotCiAjZGVmaW5lIFZBTElEX1NTRV9SRUdfTU9ERShNT0RFKQkJCQkJXAogICAo KE1PREUpID09IFYxVEltb2RlIHx8IChNT0RFKSA9PSBUSW1vZGUJCQkJXAogICAgfHwgKE1PREUp ID09IFY0U0Ztb2RlIHx8IChNT0RFKSA9PSBWNFNJbW9kZQkJCQlcCkBAIC0xMDcyLDcgKzEwNzEs OCBAQCBleHRlcm4gY29uc3QgY2hhciAqaG9zdF9kZXRlY3RfbG9jYWxfY3B1IChpbnQgYXJnYywg Y29uc3QgY2hhciAqKmFyZ3YpOwogICAgfHwgKE1PREUpID09IENTSW1vZGUgfHwgKE1PREUpID09 IENESW1vZGUJCQkJXAogICAgfHwgKE1PREUpID09IFNEbW9kZSB8fCAoTU9ERSkgPT0gRERtb2Rl CQkJCVwKICAgIHx8IChNT0RFKSA9PSBIRm1vZGUgfHwgKE1PREUpID09IEhDbW9kZQkJCQlcCi0g ICB8fCAoTU9ERSkgPT0gVjRRSW1vZGUgfHwgKE1PREUpID09IFYySEltb2RlIHx8IChNT0RFKSA9 PSBWMVNJbW9kZQlcCisgICB8fCAoTU9ERSkgPT0gVjJISW1vZGUgfHwgKE1PREUpID09IFYySEZt b2RlCQkJCVwKKyAgIHx8IChNT0RFKSA9PSBWMVNJbW9kZSB8fCAoTU9ERSkgPT0gVjRRSW1vZGUJ CQkJXAogICAgfHwgKFRBUkdFVF82NEJJVAkJCQkJCQlcCiAgICAgICAgJiYgKChNT0RFKSA9PSBU SW1vZGUgfHwgKE1PREUpID09IENUSW1vZGUJCQlcCiAJICAgfHwgKE1PREUpID09IFRGbW9kZSB8 fCAoTU9ERSkgPT0gVENtb2RlCQkJXApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvcHIxMDI4MTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByMTAy ODEyLmMKaW5kZXggYmFkNGZhOTM5NGUuLjUxYzg5YTYzNmZiIDEwMDY0NAotLS0gYS9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjEwMjgxMi5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L3ByMTAyODEyLmMKQEAgLTIsNyArMiw2IEBACiAvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLwogLyogeyBkZy1vcHRpb25zICItTzIgLW1zc2U0IC1tbm8tYXZ4IiB9ICovCiAvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJ2bW92ZHFhNjRcdCIgfSB9ICovCi0vKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIm1vdmRxYVx0IiB9IH0gKi8KIAogdHlwZWRlZiBf RmxvYXQxNiB2OGhmIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyAoMTYpKSk7CiAK --0000000000001b9b7205d347b62f--