From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x429.google.com (mail-pf1-x429.google.com [IPv6:2607:f8b0:4864:20::429]) by sourceware.org (Postfix) with ESMTPS id DA53F385742A for ; Sun, 18 Jul 2021 01:46:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org DA53F385742A Received: by mail-pf1-x429.google.com with SMTP id 21so12916782pfp.3 for ; Sat, 17 Jul 2021 18:46:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=r2OkrtW4NuDGo0vSpwNRTMkulXKTC7yEv4zXJUSk2u0=; b=phhPmSMB+w+EJch7u+LzJNc17iU6rqFhpkoGkG1L7vGnFnTyhe9JsKctM8OBgCSMj5 dDp0+RNACkEYp+kAEZ+pvBpMLAPWFWhwtZQq9OhM7P/OPoioqSPLyp4wW5HvBUw+Uq8o FceGBa6803kQ4HiqJZ05ke1VaJgOEcHb9XDi1qUFIcALQx776ZTTnwhb8TArJiJt1qg+ mfVlLk7hmfFaaJiJXpwXuugnYzhu7+rorg+N5afYiV+iRngtwtJfVDGuyTmcFdrdcEda PaataGT4Rx9H+1m1MI9Zs8X4CPZLQpXAMyk5AN+RmnGcqw+EOyTp5lMMMCDo2ACwcq6b A8cw== X-Gm-Message-State: AOAM5302C9l3Yw+DXKn+kXsJ+GhFhyh7j17xT12v/oueuGe/7XMEDoIp +19y032/MSeuvQdp4fyD7ttfXb6Nx8Tt/Nk2eqw= X-Google-Smtp-Source: ABdhPJz9ArQADtGtQ9fW1RpCU04IJCL+HgBhgkygdAD4vP1EWFI4lShtIzSJFAPhk9epzJyPHAJ/C0o+465CNNuOTAk= X-Received: by 2002:a63:114d:: with SMTP id 13mr18026372pgr.180.1626572768886; Sat, 17 Jul 2021 18:46:08 -0700 (PDT) MIME-Version: 1.0 References: <20210414223918.230495-1-hjl.tools@gmail.com> <20210414223918.230495-3-hjl.tools@gmail.com> <20210422090201.GO1179226@tucnak> <20210422122202.GP1179226@tucnak> In-Reply-To: From: "H.J. Lu" Date: Sat, 17 Jul 2021 18:45:33 -0700 Message-ID: Subject: [PATCH v5] : Add pragma GCC target("general-regs-only") To: Richard Biener , Uros Bizjak , Hongyu Wang Cc: Jakub Jelinek , GCC Patches Content-Type: multipart/mixed; boundary="000000000000175e3305c75bfc18" X-Spam-Status: No, score=-3025.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, 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: Sun, 18 Jul 2021 01:46:18 -0000 --000000000000175e3305c75bfc18 Content-Type: text/plain; charset="UTF-8" On Thu, Apr 22, 2021 at 7:30 AM Richard Biener via Gcc-patches wrote: > > On Thu, Apr 22, 2021 at 2:52 PM Richard Biener > wrote: > > > > On Thu, Apr 22, 2021 at 2:22 PM Jakub Jelinek wrote: > > > > > > On Thu, Apr 22, 2021 at 01:23:20PM +0200, Richard Biener via Gcc-patches wrote: > > > > > The question is if the pragma GCC target right now behaves incrementally > > > > > or not, whether > > > > > #pragma GCC target("avx2") > > > > > adds -mavx2 to options if it was missing before and nothing otherwise, or if > > > > > it switches other options off. If it is incremental, we could e.g. try to > > > > > use the second least significant bit of global_options_set.x_* to mean > > > > > this option has been set explicitly by some surrounding #pragma GCC target. > > > > > The normal tests - global_options_set.x_flag_whatever could still work > > > > > fine because they wouldn't care if the option was explicit from anywhere > > > > > (command line or GCC target or target attribute) and just & 2 would mean > > > > > it was explicit from pragma GCC target; though there is the case of > > > > > bitfields... And then the inlining decision could check the & 2 flags to > > > > > see what is required and what is just from command line. > > > > > Or we can have some other pragma GCC that would be like target but would > > > > > have flags that are explicit (and could e.g. be more restricted, to ISA > > > > > options only, and let those use in addition to #pragma GCC target. > > > > > > > > I'm still curious as to what you think will break if always-inline does what > > > > it is documented to do. > > > > > > We will silently accept calling intrinsics that must be used only in certain > > > ISA contexts, which will lead to people writing non-portable code. > > > > > > So -O2 -mno-avx > > > #include > > > > > > void > > > foo (__m256 *x) > > > { > > > x[0] = _mm256_sub_ps (x[1], x[2]); > > > } > > > etc. will now be accepted when it shouldn't be. > > > clang rejects it like gcc with: > > > 1.c:6:10: error: always_inline function '_mm256_sub_ps' requires target feature 'avx', but would be inlined into function 'foo' that is compiled without support for 'avx' > > > x[0] = _mm256_sub_ps (x[1], x[2]); > > > ^ > > > > > > Note, if I do: > > > #include > > > > > > __attribute__((target ("no-sse3"))) void > > > foo (__m256 *x) > > > { > > > x[0] = _mm256_sub_ps (x[1], x[2]); > > > } > > > and compile > > > clang -S -O2 -mavx2 1.c > > > 1.c:6:10: error: always_inline function '_mm256_sub_ps' requires target feature 'avx', but would be inlined into function 'foo' that is compiled without support for 'avx' > > > x[0] = _mm256_sub_ps (x[1], x[2]); > > > ^ > > > then from the error message it seems that unlike GCC, clang remembers > > > the exact target features that are needed for the intrinsics and checks just > > > those. > > > Though, looking at the preprocessed source, seems it uses > > > static __inline __m256 __attribute__((__always_inline__, __nodebug__, __target__("avx"), __min_vector_width__(256))) > > > _mm256_sub_ps(__m256 __a, __m256 __b) > > > { > > > return (__m256)((__v8sf)__a-(__v8sf)__b); > > > } > > > and not target pragmas. > > > > > > Anyway, if we tweak our intrinsic headers so that > > > -#ifndef __AVX__ > > > #pragma GCC push_options > > > #pragma GCC target("avx") > > > -#define __DISABLE_AVX__ > > > -#endif /* __AVX__ */ > > > > > > ... > > > -#ifdef __DISABLE_AVX__ > > > -#undef __DISABLE_AVX__ > > > #pragma GCC pop_options > > > -#endif /* __DISABLE_AVX__ */ > > > and do the opts_set->x_* & 2 stuff on explicit options coming out of > > > target/optimize pragmas and attributes, perhaps we don't even need > > > to introduce a new attribute and can handle everything magically: > > Oh, and any such changes will likely interact with Martins ideas to rework > how optimize and target attributes work (aka adding ontop of the > commandline options). That is, attribute target will then not be enough > to remember the exact set of needed ISA features (as opposed to what > likely clang implements?) > > > > 1) if it is gnu_inline extern inline, allow indirect calls, otherwise > > > disallow them for always_inline functions > > > > There are a lot of intrinsics using extern inline __gnu_inline though... > > > > > 2) for the isa flags and option mismatches, only disallow opts_set->x_* & 2 > > > stuff > > > This will keep both intrinsics and glibc fortify macros working fine > > > in all the needed use cases. > > > > Yes, see my example in the other mail. > > > > I think before we add any new attributes we should sort out the > > current mess, eventually adding some testcases for desired > > diagnostic. > > > > Richard. > > > > > Jakub Here is the v5 patch: 1. Intrinsics in only require GPR ISAs. Add #if defined __MMX__ || defined __SSE__ #pragma GCC push_options #pragma GCC target("general-regs-only") #define __DISABLE_GENERAL_REGS_ONLY__ #endif and #ifdef __DISABLE_GENERAL_REGS_ONLY__ #undef __DISABLE_GENERAL_REGS_ONLY__ #pragma GCC pop_options #endif /* __DISABLE_GENERAL_REGS_ONLY__ */ to to disable non-GPR ISAs so that they can be used in functions with __attribute__ ((target("general-regs-only"))). 2. When checking always_inline attribute, if callee only uses GPRs, ignore MASK_80387 since enable MASK_80387 in caller has no impact on callee inline. OK for master? Thanks. -- H.J. --000000000000175e3305c75bfc18 Content-Type: application/x-patch; name="v5-0001-x86gprintrin.h-Add-pragma-GCC-target-general-regs.patch" Content-Disposition: attachment; filename="v5-0001-x86gprintrin.h-Add-pragma-GCC-target-general-regs.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kr8jaya80 RnJvbSBhYzJjMTAwZGJhZjgzOGEzNzhiZDhiMTIwOWI1N2FmYzhhNWM3MmZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhqbC50b29sc0BnbWFpbC5jb20+CkRhdGU6 IFNhdCwgMTcgSnVsIDIwMjEgMDc6NDQ6NDUgLTA3MDAKU3ViamVjdDogW1BBVENIIHY1XSA8eDg2 Z3ByaW50cmluLmg+OiBBZGQgcHJhZ21hIEdDQwogdGFyZ2V0KCJnZW5lcmFsLXJlZ3Mtb25seSIp CgoxLiBJbnRyaW5zaWNzIGluIDx4ODZncHJpbnRyaW4uaD4gb25seSByZXF1aXJlIEdQUiBJU0Fz LiAgQWRkCgogI2lmIGRlZmluZWQgX19NTVhfXyB8fCBkZWZpbmVkIF9fU1NFX18KICNwcmFnbWEg R0NDIHB1c2hfb3B0aW9ucwogI3ByYWdtYSBHQ0MgdGFyZ2V0KCJnZW5lcmFsLXJlZ3Mtb25seSIp CiAjZGVmaW5lIF9fRElTQUJMRV9HRU5FUkFMX1JFR1NfT05MWV9fCiAjZW5kaWYKCmFuZAoKICNp ZmRlZiBfX0RJU0FCTEVfR0VORVJBTF9SRUdTX09OTFlfXwogI3VuZGVmIF9fRElTQUJMRV9HRU5F UkFMX1JFR1NfT05MWV9fCiAjcHJhZ21hIEdDQyBwb3Bfb3B0aW9ucwogI2VuZGlmIC8qIF9fRElT QUJMRV9HRU5FUkFMX1JFR1NfT05MWV9fICovCgp0byA8eDg2Z3ByaW50cmluLmg+IHRvIGRpc2Fi bGUgbm9uLUdQUiBJU0FzIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBpbgpmdW5jdGlvbnMgd2l0 aCBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0KCJnZW5lcmFsLXJlZ3Mtb25seSIpKSkuCjIuIFdoZW4g Y2hlY2tpbmcgYWx3YXlzX2lubGluZSBhdHRyaWJ1dGUsIGlmIGNhbGxlZSBvbmx5IHVzZXMgR1BS cywKaWdub3JlIE1BU0tfODAzODcgc2luY2UgZW5hYmxlIE1BU0tfODAzODcgaW4gY2FsbGVyIGhh cyBubyBpbXBhY3Qgb24KY2FsbGVlIGlubGluZS4KCmdjYy8KCglQUiB0YXJnZXQvOTk3NDQKCSog Y29uZmlnL2kzODYvaTM4Ni5jIChpeDg2X2Nhbl9pbmxpbmVfcCk6IElnbm9yZSBNQVNLXzgwMzg3 IGlmCgljYWxsZWUgb25seSB1c2VzIEdQUnMuCgkqIGNvbmZpZy9pMzg2L2lhMzJpbnRyaW4uaDog UmV2ZXJ0IGNvbW1pdCA1NDYzY2VlMjc3MC4KCSogY29uZmlnL2kzODYvc2VyaWFsaXplaW50cmlu Lmg6IFJldmVydCBjb21taXQgNzE5NThmNzQwZjEuCgkqIGNvbmZpZy9pMzg2L3g4NmdwcmludHJp bi5oOiBBZGQKCSNwcmFnbWEgR0NDIHRhcmdldCgiZ2VuZXJhbC1yZWdzLW9ubHkiKSBhbmQgI3By YWdtYSBHQ0MgcG9wX29wdGlvbnMKCXRvIGRpc2FibGUgbm9uLUdQUiBJU0FzLgoKZ2NjL3Rlc3Rz dWl0ZS8KCglQUiB0YXJnZXQvOTk3NDQKCSogZ2NjLnRhcmdldC9pMzg2L3ByOTk3NDQtMy5jOiBO ZXcgdGVzdC4KCSogZ2NjLnRhcmdldC9pMzg2L3ByOTk3NDQtNC5jOiBMaWtld2lzZS4KCSogZ2Nj LnRhcmdldC9pMzg2L3ByOTk3NDQtNS5jOiBMaWtld2lzZS4KCSogZ2NjLnRhcmdldC9pMzg2L3By OTk3NDQtNi5jOiBMaWtld2lzZS4KCSogZ2NjLnRhcmdldC9pMzg2L3ByOTk3NDQtNy5jOiBMaWtl d2lzZS4KCSogZ2NjLnRhcmdldC9pMzg2L3ByOTk3NDQtOC5jOiBMaWtld2lzZS4KLS0tCiBnY2Mv Y29uZmlnL2kzODYvaTM4Ni5jICAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogZ2NjL2NvbmZp Zy9pMzg2L2lhMzJpbnRyaW4uaCAgICAgICAgICAgICAgfCAgMTQgKy0KIGdjYy9jb25maWcvaTM4 Ni9zZXJpYWxpemVpbnRyaW4uaCAgICAgICAgIHwgICA3ICstCiBnY2MvY29uZmlnL2kzODYveDg2 Z3ByaW50cmluLmggICAgICAgICAgICB8ICAxMSArCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjk5NzQ0LTMuYyB8ICAxMyArCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9w cjk5NzQ0LTQuYyB8IDM1NyArKysrKysrKysrKysrKysrKysrKysrCiBnY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjk5NzQ0LTUuYyB8ICAyNSArKwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvcHI5OTc0NC02LmMgfCAgMjMgKysKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9p Mzg2L3ByOTk3NDQtNy5jIHwgIDE0ICsKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3By OTk3NDQtOC5jIHwgIDE1ICsKIDEwIGZpbGVzIGNoYW5nZWQsIDQ4MSBpbnNlcnRpb25zKCspLCA0 IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L3ByOTk3NDQtMy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvcHI5OTc0NC00LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9wcjk5NzQ0LTUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByOTk3NDQtNi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI5OTc0NC03LmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjk5NzQ0LTguYwoKZGlmZiAtLWdpdCBh L2djYy9jb25maWcvaTM4Ni9pMzg2LmMgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCmluZGV4IDlk NzRiN2ExOTFiLi5kYTA2N2IxNTg2ZiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYu YworKysgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCkBAIC01NTQsNyArNTU0LDcgQEAgaXg4Nl9j YW5faW5saW5lX3AgKHRyZWUgY2FsbGVyLCB0cmVlIGNhbGxlZSkKIAogICAvKiBDaGFuZ2VzIG9m IHRob3NlIGZsYWdzIGNhbiBiZSB0b2xlcmF0ZWQgZm9yIGFsd2F5cyBpbmxpbmVzLiBMZXRzIGhv cGUKICAgICAgdXNlciBrbm93cyB3aGF0IGhlIGlzIGRvaW5nLiAgKi8KLSAgY29uc3QgdW5zaWdu ZWQgSE9TVF9XSURFX0lOVCBhbHdheXNfaW5saW5lX3NhZmVfbWFzaworICB1bnNpZ25lZCBIT1NU X1dJREVfSU5UIGFsd2F5c19pbmxpbmVfc2FmZV9tYXNrCiAJID0gKE1BU0tfVVNFXzhCSVRfSURJ ViB8IE1BU0tfQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTCiAJICAgIHwgTUFTS19OT19BTElHTl9T VFJJTkdPUFMgfCBNQVNLX0FWWDI1Nl9TUExJVF9VTkFMSUdORURfTE9BRAogCSAgICB8IE1BU0tf QVZYMjU2X1NQTElUX1VOQUxJR05FRF9TVE9SRSB8IE1BU0tfQ0xECkBAIC01NzksNiArNTc5LDEw IEBAIGl4ODZfY2FuX2lubGluZV9wICh0cmVlIGNhbGxlciwgdHJlZSBjYWxsZWUpCiAgICAgICAg JiYgbG9va3VwX2F0dHJpYnV0ZSAoImFsd2F5c19pbmxpbmUiLAogCQkJICAgIERFQ0xfQVRUUklC VVRFUyAoY2FsbGVlKSkpOwogCisgIC8qIElmIGNhbGxlZSBvbmx5IHVzZXMgR1BScywgaWdub3Jl IE1BU0tfODAzODcuICAqLworICBpZiAoVEFSR0VUX0dFTkVSQUxfUkVHU19PTkxZX1AgKGNhbGxl ZV9vcHRzLT54X2l4ODZfdGFyZ2V0X2ZsYWdzKSkKKyAgICBhbHdheXNfaW5saW5lX3NhZmVfbWFz ayB8PSBNQVNLXzgwMzg3OworCiAgIGNncmFwaF9ub2RlICpjYWxsZWVfbm9kZSA9IGNncmFwaF9u b2RlOjpnZXQgKGNhbGxlZSk7CiAgIC8qIENhbGxlZSdzIGlzYSBvcHRpb25zIHNob3VsZCBiZSBh IHN1YnNldCBvZiB0aGUgY2FsbGVyJ3MsIGkuZS4gYSBTU0U0CiAgICAgIGZ1bmN0aW9uIGNhbiBp bmxpbmUgYSBTU0UyIGZ1bmN0aW9uIGJ1dCBhIFNTRTIgZnVuY3Rpb24gY2FuJ3QgaW5saW5lCmRp ZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvaWEzMmludHJpbi5oIGIvZ2NjL2NvbmZpZy9pMzg2 L2lhMzJpbnRyaW4uaAppbmRleCA1NDIyYjBmYzllMC4uZGY5OTIyMGVlNGYgMTAwNjQ0Ci0tLSBh L2djYy9jb25maWcvaTM4Ni9pYTMyaW50cmluLmgKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2lhMzJp bnRyaW4uaApAQCAtMTA3LDEyICsxMDcsMjIgQEAgX19yZHBtYyAoaW50IF9fUykKICNlbmRpZiAv KiBfX2lhbWN1X18gKi8KIAogLyogcmR0c2MgKi8KLSNkZWZpbmUgX19yZHRzYygpCQlfX2J1aWx0 aW5faWEzMl9yZHRzYyAoKQorZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZworX19h dHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCitfX3JkdHNjICh2b2lkKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcmR0c2Mg KCk7Cit9CiAKICNpZm5kZWYgX19pYW1jdV9fCiAKIC8qIHJkdHNjcCAqLwotI2RlZmluZSBfX3Jk dHNjcChhKQkJX19idWlsdGluX2lhMzJfcmR0c2NwIChhKQorZXh0ZXJuIF9faW5saW5lIHVuc2ln bmVkIGxvbmcgbG9uZworX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lu bGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfX3JkdHNjcCAodW5zaWduZWQgaW50ICpfX0EpCit7 CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZHRzY3AgKF9fQSk7Cit9CiAKICNlbmRpZiAvKiBf X2lhbWN1X18gKi8KIApkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L3NlcmlhbGl6ZWludHJp bi5oIGIvZ2NjL2NvbmZpZy9pMzg2L3NlcmlhbGl6ZWludHJpbi5oCmluZGV4IGUyODAyNTBiMTk4 Li44OWI1Yjk0ZWE5YiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L3NlcmlhbGl6ZWludHJp bi5oCisrKyBiL2djYy9jb25maWcvaTM4Ni9zZXJpYWxpemVpbnRyaW4uaApAQCAtMzQsNyArMzQs MTIgQEAKICNkZWZpbmUgX19ESVNBQkxFX1NFUklBTElaRV9fCiAjZW5kaWYgLyogX19TRVJJQUxJ WkVfXyAqLwogCi0jZGVmaW5lIF9zZXJpYWxpemUoKQlfX2J1aWx0aW5faWEzMl9zZXJpYWxpemUg KCkKK2V4dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXywg X19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19zZXJpYWxpemUgKHZvaWQpCit7 CisgIF9fYnVpbHRpbl9pYTMyX3NlcmlhbGl6ZSAoKTsKK30KIAogI2lmZGVmIF9fRElTQUJMRV9T RVJJQUxJWkVfXwogI3VuZGVmIF9fRElTQUJMRV9TRVJJQUxJWkVfXwpkaWZmIC0tZ2l0IGEvZ2Nj L2NvbmZpZy9pMzg2L3g4NmdwcmludHJpbi5oIGIvZ2NjL2NvbmZpZy9pMzg2L3g4NmdwcmludHJp bi5oCmluZGV4IDc3OTMwMzJiYTkwLi5iN2ZlZmE3ODBhNiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9pMzg2L3g4NmdwcmludHJpbi5oCisrKyBiL2djYy9jb25maWcvaTM4Ni94ODZncHJpbnRyaW4u aApAQCAtMjQsNiArMjQsMTIgQEAKICNpZm5kZWYgX1g4NkdQUklOVFJJTl9IX0lOQ0xVREVECiAj ZGVmaW5lIF9YODZHUFJJTlRSSU5fSF9JTkNMVURFRAogCisjaWYgZGVmaW5lZCBfX01NWF9fIHx8 IGRlZmluZWQgX19TU0VfXworI3ByYWdtYSBHQ0MgcHVzaF9vcHRpb25zCisjcHJhZ21hIEdDQyB0 YXJnZXQoImdlbmVyYWwtcmVncy1vbmx5IikKKyNkZWZpbmUgX19ESVNBQkxFX0dFTkVSQUxfUkVH U19PTkxZX18KKyNlbmRpZgorCiAjaW5jbHVkZSA8aWEzMmludHJpbi5oPgogCiAjaWZuZGVmIF9f aWFtY3VfXwpAQCAtMjU1LDQgKzI2MSw5IEBAIF9wdHdyaXRlMzIgKHVuc2lnbmVkIF9fQikKIAog I2VuZGlmIC8qIF9faWFtY3VfXyAqLwogCisjaWZkZWYgX19ESVNBQkxFX0dFTkVSQUxfUkVHU19P TkxZX18KKyN1bmRlZiBfX0RJU0FCTEVfR0VORVJBTF9SRUdTX09OTFlfXworI3ByYWdtYSBHQ0Mg cG9wX29wdGlvbnMKKyNlbmRpZiAvKiBfX0RJU0FCTEVfR0VORVJBTF9SRUdTX09OTFlfXyAqLwor CiAjZW5kaWYgLyogX1g4NkdQUklOVFJJTl9IX0lOQ0xVREVELiAgKi8KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByOTk3NDQtMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvcHI5OTc0NC0zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjZjNTA1ODE2Y2ViCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvcHI5OTc0NC0zLmMKQEAgLTAsMCArMSwxMyBAQAorLyogeyBkZy1kbyBj b21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tbm8tc2VyaWFsaXplIiB9ICovCisK KyNpbmNsdWRlIDx4ODZpbnRyaW4uaD4KKworX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiZ2VuZXJh bC1yZWdzLW9ubHkiKSkpCit2b2lkCitmb28xICh2b2lkKQoreworICBfc2VyaWFsaXplICgpOwor fQorCisvKiB7IGRnLWVycm9yICJ0YXJnZXQgc3BlY2lmaWMgb3B0aW9uIG1pc21hdGNoIiAiIiB7 IHRhcmdldCAqLSotKiB9IDAgfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvcHI5OTc0NC00LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjk5 NzQ0LTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTE5NmU2MmQ5 NTUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjk5 NzQ0LTQuYwpAQCAtMCwwICsxLDM1NyBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsg ZGctb3B0aW9ucyAiLU8yIC1tYm1pIC1tYm1pMiAtbWNsZGVtb3RlIC1tY2xmbHVzaG9wdCAtbWNs d2IgLW1jbHplcm8gLW1jcmMzMiAtbWVucWNtZCAtbWZzZ3NiYXNlIC1tZnhzciAtbWhyZXNldCAt bWx6Y250IC1tbHdwIC1tbW92ZGlyNjRiIC1tbW92ZGlyaSAtbW13YWl0eCAtbXBjb25maWcgLW1w a3UgLW1wb3BjbnQgLW1wdHdyaXRlIC1tcmRwaWQgLW1yZHJuZCAtbXJkc2VlZCAtbXJ0bSAtbXNn eCAtbXNoc3RrIC1tdGJtIC1tdHN4bGR0cmsgLW14c2F2ZSAtbXhzYXZlYyAtbXhzYXZlb3B0IC1t eHNhdmVzIC1td2FpdHBrZyAtbXdibm9pbnZkIiB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0 aW9ucyAiLW11aW50ciIgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gICovCisKKy8qIFRlc3QgY2Fs bGluZyBHUFIgaW50cmluc2ljcyBmcm9tIGZ1bmN0aW9ucyB3aXRoIGdlbmVyYWwtcmVncy1vbmx5 CisgICB0YXJnZXQgYXR0cmlidXRlLiAgKi8KKworI2luY2x1ZGUgPHg4NmdwcmludHJpbi5oPgor CisjZGVmaW5lIF9DT05DQVQoeCx5KSB4ICMjIHkKKworI2RlZmluZSB0ZXN0XzAoZnVuYywgdHlw ZSkJCQkJCQlcCisgIF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImdlbmVyYWwtcmVncy1vbmx5Iikp KQkJCQlcCisgIHR5cGUgX0NPTkNBVChkb18sZnVuYykgKHZvaWQpCQkJCQkJXAorICB7IHJldHVy biBmdW5jICgpOyB9CisKKyNkZWZpbmUgdGVzdF8wX2kxKGZ1bmMsIHR5cGUsIGltbSkJCQkJCVwK KyAgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiZ2VuZXJhbC1yZWdzLW9ubHkiKSkpCQkJCVwKKyAg dHlwZSBfQ09OQ0FUKGRvXyxmdW5jKSAodm9pZCkJCQkJCQlcCisgIHsgcmV0dXJuIGZ1bmMgKGlt bSk7IH0KKworI2RlZmluZSB0ZXN0XzEoZnVuYywgdHlwZSwgb3AxX3R5cGUpCQkJCQlcCisgIF9f YXR0cmlidXRlX18gKCh0YXJnZXQoImdlbmVyYWwtcmVncy1vbmx5IikpKQkJCQlcCisgIHR5cGUg X0NPTkNBVChkb18sZnVuYykgKG9wMV90eXBlIEEpCQkJCQlcCisgIHsgcmV0dXJuIGZ1bmMgKEEp OyB9CisKKyNkZWZpbmUgdGVzdF8xX2kxKGZ1bmMsIHR5cGUsIG9wMV90eXBlLCBpbW0pCQkJCVwK KyAgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiZ2VuZXJhbC1yZWdzLW9ubHkiKSkpCQkJCVwKKyAg dHlwZSBfQ09OQ0FUKGRvXyxmdW5jKSAob3AxX3R5cGUgQSkJCQkJCVwKKyAgeyByZXR1cm4gZnVu YyAoQSwgaW1tKTsgfQorCisjZGVmaW5lIHRlc3RfMihmdW5jLCB0eXBlLCBvcDFfdHlwZSwgb3Ay X3R5cGUpCQkJCVwKKyAgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiZ2VuZXJhbC1yZWdzLW9ubHki KSkpCQkJCVwKKyAgdHlwZSBfQ09OQ0FUKGRvXyxmdW5jKSAob3AxX3R5cGUgQSwgb3AyX3R5cGUg QikJCQlcCisgIHsgcmV0dXJuIGZ1bmMgKEEsIEIpOyB9CisKKyNkZWZpbmUgdGVzdF8yX2kxKGZ1 bmMsIHR5cGUsIG9wMV90eXBlLCBvcDJfdHlwZSwgaW1tKQkJCVwKKyAgX19hdHRyaWJ1dGVfXyAo KHRhcmdldCgiZ2VuZXJhbC1yZWdzLW9ubHkiKSkpCQkJCVwKKyAgdHlwZSBfQ09OQ0FUKGRvXyxm dW5jKSAob3AxX3R5cGUgQSwgb3AyX3R5cGUgQikJCQlcCisgIHsgcmV0dXJuIGZ1bmMgKEEsIEIs IGltbSk7IH0KKworI2RlZmluZSB0ZXN0XzMoZnVuYywgdHlwZSwgb3AxX3R5cGUsIG9wMl90eXBl LCBvcDNfdHlwZSkJCVwKKyAgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiZ2VuZXJhbC1yZWdzLW9u bHkiKSkpCQkJCVwKKyAgdHlwZSBfQ09OQ0FUKGRvXyxmdW5jKSAob3AxX3R5cGUgQSwgb3AyX3R5 cGUgQiwgb3AzX3R5cGUgQykJCVwKKyAgeyByZXR1cm4gZnVuYyAoQSwgQiwgQyk7IH0KKworI2Rl ZmluZSB0ZXN0XzQoZnVuYywgdHlwZSwgb3AxX3R5cGUsIG9wMl90eXBlLCBvcDNfdHlwZSwgb3A0 X3R5cGUpCVwKKyAgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgiZ2VuZXJhbC1yZWdzLW9ubHkiKSkp CQkJCVwKKyAgdHlwZSBfQ09OQ0FUKGRvXyxmdW5jKSAob3AxX3R5cGUgQSwgb3AyX3R5cGUgQiwg b3AzX3R5cGUgQywJCVwKKwkJCSAgb3A0X3R5cGUgRCkJCQkJCVwKKyAgeyByZXR1cm4gZnVuYyAo QSwgQiwgQywgRCk7IH0KKworLyogaWEzMmludHJpbi5oICAqLwordGVzdF8xIChfX2JzZmQsIGlu dCwgaW50KQordGVzdF8xIChfX2JzcmQsIGludCwgaW50KQordGVzdF8xIChfX2Jzd2FwZCwgaW50 LCBpbnQpCit0ZXN0XzEgKF9fcG9wY250ZCwgaW50LCB1bnNpZ25lZCBpbnQpCit0ZXN0XzIgKF9f cm9sYiwgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhciwgaW50KQordGVzdF8yIChfX3JvbHcs IHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwgaW50KQordGVzdF8yIChfX3JvbGQsIHVu c2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBpbnQpCit0ZXN0XzIgKF9fcm9yYiwgdW5zaWduZWQg Y2hhciwgdW5zaWduZWQgY2hhciwgaW50KQordGVzdF8yIChfX3JvcncsIHVuc2lnbmVkIHNob3J0 LCB1bnNpZ25lZCBzaG9ydCwgaW50KQordGVzdF8yIChfX3JvcmQsIHVuc2lnbmVkIGludCwgdW5z aWduZWQgaW50LCBpbnQpCisKKyNpZm5kZWYgX19pYW1jdV9fCisvKiBhZHhpbnRyaW4uaCAqLwor dGVzdF80IChfc3ViYm9ycm93X3UzMiwgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhciwgdW5z aWduZWQgaW50LAorCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50ICopCit0ZXN0XzQgKF9hZGRj YXJyeV91MzIsIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGludCwKKwl1 bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCAqKQordGVzdF80IChfYWRkY2Fycnl4X3UzMiwgdW5z aWduZWQgY2hhciwgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgaW50LAorCXVuc2lnbmVkIGludCwg dW5zaWduZWQgaW50ICopCisKKy8qIGJtaWludHJpbi5oICovCit0ZXN0XzEgKF9fdHpjbnRfdTE2 LCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpCit0ZXN0XzIgKF9fYW5kbl91MzIsIHVu c2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpCit0ZXN0XzIgKF9fYmV4dHJf dTMyLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KQordGVzdF8zIChf YmV4dHJfdTMyLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LAorCXVu c2lnbmVkIGludCkKK3Rlc3RfMSAoX19ibHNpX3UzMiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBp bnQpCit0ZXN0XzEgKF9ibHNpX3UzMiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpCit0ZXN0 XzEgKF9fYmxzbXNrX3UzMiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpCit0ZXN0XzEgKF9i bHNtc2tfdTMyLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCkKK3Rlc3RfMSAoX19ibHNyX3Uz MiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpCit0ZXN0XzEgKF9ibHNyX3UzMiwgdW5zaWdu ZWQgaW50LCB1bnNpZ25lZCBpbnQpCit0ZXN0XzEgKF9fdHpjbnRfdTMyLCB1bnNpZ25lZCBpbnQs IHVuc2lnbmVkIGludCkKK3Rlc3RfMSAoX3R6Y250X3UzMiwgdW5zaWduZWQgaW50LCB1bnNpZ25l ZCBpbnQpCisKKy8qIGJtaTJpbnRyaW4uaCAqLwordGVzdF8yIChfYnpoaV91MzIsIHVuc2lnbmVk IGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpCit0ZXN0XzIgKF9wZGVwX3UzMiwgdW5z aWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCkKK3Rlc3RfMiAoX3BleHRfdTMy LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KQorCisvKiBjZXRpbnRy aW4uaCAqLwordGVzdF8xIChfaW5jX3NzcCwgdm9pZCwgdW5zaWduZWQgaW50KQordGVzdF8wIChf c2F2ZXByZXZzc3AsIHZvaWQpCit0ZXN0XzEgKF9yc3RvcnNzcCwgdm9pZCwgdm9pZCAqKQordGVz dF8yIChfd3Jzc2QsIHZvaWQsIHVuc2lnbmVkIGludCwgdm9pZCAqKQordGVzdF8yIChfd3J1c3Nk LCB2b2lkLCB1bnNpZ25lZCBpbnQsIHZvaWQgKikKK3Rlc3RfMCAoX3NldHNzYnN5LCB2b2lkKQor dGVzdF8xIChfY2xyc3Nic3ksIHZvaWQsIHZvaWQgKikKKworLyogY2xkZW1vdGVpbnRyaW4uaCAq LwordGVzdF8xIChfY2xkZW1vdGUsIHZvaWQsIHZvaWQgKikKKworLyogY2xmbHVzaG9wdGludHJp bi5oICovCit0ZXN0XzEgKF9tbV9jbGZsdXNob3B0LCB2b2lkLCB2b2lkICopCisKKy8qIGNsd2Jp bnRyaW4uaCAqLwordGVzdF8xIChfbW1fY2x3Yiwgdm9pZCwgdm9pZCAqKQorCisvKiBjbHplcm9p bnRyaW4uaCAqLwordGVzdF8xIChfbW1fY2x6ZXJvLCB2b2lkLCB2b2lkICopCisKKy8qIGVucWNt ZGludHJpbi5oICovCit0ZXN0XzIgKF9lbnFjbWQsIGludCwgdm9pZCAqLCBjb25zdCB2b2lkICop Cit0ZXN0XzIgKF9lbnFjbWRzLCBpbnQsIHZvaWQgKiwgY29uc3Qgdm9pZCAqKQorCisvKiBmeHNy aW50cmluLmggKi8KK3Rlc3RfMSAoX2Z4c2F2ZSwgdm9pZCwgdm9pZCAqKQordGVzdF8xIChfZnhy c3Rvciwgdm9pZCwgdm9pZCAqKQorCisvKiBocmVzZXRpbnRyaW4uaCAqLwordGVzdF8xIChfaHJl c2V0LCB2b2lkLCB1bnNpZ25lZCBpbnQpCisKKy8qIGlhMzJpbnRyaW4uaCAgKi8KK3Rlc3RfMiAo X19jcmMzMmIsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcikKK3Rl c3RfMiAoX19jcmMzMncsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNo b3J0KQordGVzdF8yIChfX2NyYzMyZCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2ln bmVkIGludCkKK3Rlc3RfMSAoX19yZHBtYywgdW5zaWduZWQgbG9uZyBsb25nLCBpbnQpCit0ZXN0 XzAgKF9fcmR0c2MsIHVuc2lnbmVkIGxvbmcgbG9uZykKK3Rlc3RfMSAoX19yZHRzY3AsIHVuc2ln bmVkIGxvbmcgbG9uZywgdW5zaWduZWQgaW50ICopCit0ZXN0XzAgKF9fcGF1c2UsIHZvaWQpCisK Ky8qIGx6Y250aW50cmluLmggKi8KK3Rlc3RfMSAoX19semNudDE2LCB1bnNpZ25lZCBzaG9ydCwg dW5zaWduZWQgc2hvcnQpCit0ZXN0XzEgKF9fbHpjbnQzMiwgdW5zaWduZWQgaW50LCB1bnNpZ25l ZCBpbnQpCit0ZXN0XzEgKF9semNudF91MzIsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KQor CisvKiBsd3BpbnRyaW4uaCAqLwordGVzdF8xIChfX2xsd3BjYiwgdm9pZCwgdm9pZCAqKQordGVz dF8wIChfX3Nsd3BjYiwgdm9pZCAqKQordGVzdF8yX2kxIChfX2x3cHZhbDMyLCB2b2lkLCB1bnNp Z25lZCBpbnQsIHVuc2lnbmVkIGludCwgMSkKK3Rlc3RfMl9pMSAoX19sd3BpbnMzMiwgdW5zaWdu ZWQgY2hhciwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIDEpCisKKy8qIG1vdmRpcmludHJp bi5oICovCit0ZXN0XzIgKF9kaXJlY3RzdG9yZXVfdTMyLCB2b2lkLCB2b2lkICosIHVuc2lnbmVk IGludCkKK3Rlc3RfMiAoX21vdmRpcjY0Yiwgdm9pZCwgdm9pZCAqLCBjb25zdCB2b2lkICopCisK Ky8qIG13YWl0eGludHJpbi5oICovCit0ZXN0XzMgKF9tbV9tb25pdG9yeCwgdm9pZCwgdm9pZCBj b25zdCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCkKK3Rlc3RfMyAoX21tX213YWl0eCwg dm9pZCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCkKKworLyogcGNv bmZpZ2ludHJpbi5oICovCit0ZXN0XzIgKF9wY29uZmlnX3UzMiwgdW5zaWduZWQgaW50LCBjb25z dCB1bnNpZ25lZCBpbnQsIHNpemVfdCAqKQorCisvKiBwa3VpbnRyaW4uaCAqLwordGVzdF8wIChf cmRwa3J1X3UzMiwgdW5zaWduZWQgaW50KQordGVzdF8xIChfd3Jwa3J1LCB2b2lkLCB1bnNpZ25l ZCBpbnQpCisKKy8qIHBvcGNudGludHJpbi5oICovCit0ZXN0XzEgKF9tbV9wb3BjbnRfdTMyLCBp bnQsIHVuc2lnbmVkIGludCkKKworLyogcmRzZWVkaW50cmluLmggKi8KK3Rlc3RfMSAoX3Jkc2Vl ZDE2X3N0ZXAsIGludCwgdW5zaWduZWQgc2hvcnQgKikKK3Rlc3RfMSAoX3Jkc2VlZDMyX3N0ZXAs IGludCwgdW5zaWduZWQgaW50ICopCisKKy8qIHJ0bWludHJpbi5oICovCit0ZXN0XzAgKF94YmVn aW4sIHVuc2lnbmVkIGludCkKK3Rlc3RfMCAoX3hlbmQsIHZvaWQpCit0ZXN0XzBfaTEgKF94YWJv cnQsIHZvaWQsIDEpCisKKy8qIHNneGludHJpbi5oICovCit0ZXN0XzIgKF9lbmNsc191MzIsIHVu c2lnbmVkIGludCwgY29uc3QgdW5zaWduZWQgaW50LCBzaXplX3QgKikKK3Rlc3RfMiAoX2VuY2x1 X3UzMiwgdW5zaWduZWQgaW50LCBjb25zdCB1bnNpZ25lZCBpbnQsIHNpemVfdCAqKQordGVzdF8y IChfZW5jbHZfdTMyLCB1bnNpZ25lZCBpbnQsIGNvbnN0IHVuc2lnbmVkIGludCwgc2l6ZV90ICop CisKKy8qIHRibWludHJpbi5oICovCit0ZXN0XzFfaTEgKF9fYmV4dHJpX3UzMiwgdW5zaWduZWQg aW50LCB1bnNpZ25lZCBpbnQsIDEpCit0ZXN0XzEgKF9fYmxjZmlsbF91MzIsIHVuc2lnbmVkIGlu dCwgdW5zaWduZWQgaW50KQordGVzdF8xIChfX2JsY2lfdTMyLCB1bnNpZ25lZCBpbnQsIHVuc2ln bmVkIGludCkKK3Rlc3RfMSAoX19ibGNpY191MzIsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50 KQordGVzdF8xIChfX2JsY21za191MzIsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KQordGVz dF8xIChfX2JsY3NfdTMyLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCkKK3Rlc3RfMSAoX19i bHNmaWxsX3UzMiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpCit0ZXN0XzEgKF9fYmxzaWNf dTMyLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCkKK3Rlc3RfMSAoX190MW1za2NfdTMyLCB1 bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCkKK3Rlc3RfMSAoX190em1za191MzIsIHVuc2lnbmVk IGludCwgdW5zaWduZWQgaW50KQorCisvKiB0c3hsZHRya2ludHJpbi5oICovCit0ZXN0XzAgKF94 c3VzbGR0cmssIHZvaWQpCit0ZXN0XzAgKF94cmVzbGR0cmssIHZvaWQpCisKKy8qIHg4Nmdwcmlu dHJpbi5oICovCit0ZXN0XzEgKF9wdHdyaXRlMzIsIHZvaWQsIHVuc2lnbmVkIGludCkKK3Rlc3Rf MSAoX3JkcmFuZDE2X3N0ZXAsIGludCwgdW5zaWduZWQgc2hvcnQgKikKK3Rlc3RfMSAoX3JkcmFu ZDMyX3N0ZXAsIGludCwgdW5zaWduZWQgaW50ICopCit0ZXN0XzAgKF93YmludmQsIHZvaWQpCisK Ky8qIHh0ZXN0aW50cmluLmggKi8KK3Rlc3RfMCAoX3h0ZXN0LCBpbnQpCisKKy8qIHhzYXZlaW50 cmluLmggKi8KK3Rlc3RfMiAoX3hzYXZlLCB2b2lkLCB2b2lkICosIGxvbmcgbG9uZykKK3Rlc3Rf MiAoX3hyc3Rvciwgdm9pZCwgdm9pZCAqLCBsb25nIGxvbmcpCit0ZXN0XzIgKF94c2V0YnYsIHZv aWQsIHVuc2lnbmVkIGludCwgbG9uZyBsb25nKQordGVzdF8xIChfeGdldGJ2LCBsb25nIGxvbmcs IHVuc2lnbmVkIGludCkKKworLyogeHNhdmVjaW50cmluLmggKi8KK3Rlc3RfMiAoX3hzYXZlYywg dm9pZCwgdm9pZCAqLCBsb25nIGxvbmcpCisKKy8qIHhzYXZlb3B0aW50cmluLmggKi8KK3Rlc3Rf MiAoX3hzYXZlb3B0LCB2b2lkLCB2b2lkICosIGxvbmcgbG9uZykKKworLyogeHNhdmVzaW50cmlu LmggKi8KK3Rlc3RfMiAoX3hzYXZlcywgdm9pZCwgdm9pZCAqLCBsb25nIGxvbmcpCit0ZXN0XzIg KF94cnN0b3JzLCB2b2lkLCB2b2lkICosIGxvbmcgbG9uZykKKworLyogd2Jub2ludmRpbnRyaW4u aCAqLwordGVzdF8wIChfd2Jub2ludmQsIHZvaWQpCisKKyNpZmRlZiBfX3g4Nl82NF9fCisvKiBh ZHhpbnRyaW4uaCAqLwordGVzdF80IChfc3ViYm9ycm93X3U2NCwgdW5zaWduZWQgY2hhciwgdW5z aWduZWQgY2hhciwKKwl1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwl1 bnNpZ25lZCBsb25nIGxvbmcgKikKK3Rlc3RfNCAoX2FkZGNhcnJ5X3U2NCwgdW5zaWduZWQgY2hh ciwgdW5zaWduZWQgY2hhciwKKwl1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9u ZywKKwl1bnNpZ25lZCBsb25nIGxvbmcgKikKK3Rlc3RfNCAoX2FkZGNhcnJ5eF91NjQsIHVuc2ln bmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIsCisJdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBs b25nIGxvbmcsCisJdW5zaWduZWQgbG9uZyBsb25nICopCisKKy8qIGJtaWludHJpbi5oICovCit0 ZXN0XzIgKF9fYW5kbl91NjQsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25n LAorCXVuc2lnbmVkIGxvbmcgbG9uZykKK3Rlc3RfMiAoX19iZXh0cl91NjQsIHVuc2lnbmVkIGxv bmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLAorCXVuc2lnbmVkIGxvbmcgbG9uZykKK3Rlc3Rf MyAoX2JleHRyX3U2NCwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsCisJ dW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcpCit0ZXN0XzEgKF9fYmxzaV91 NjQsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nKQordGVzdF8xIChfYmxz aV91NjQsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nKQordGVzdF8xIChf X2Jsc21za191NjQsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nKQordGVz dF8xIChfYmxzbXNrX3U2NCwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcp Cit0ZXN0XzEgKF9fYmxzcl91NjQsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBs b25nKQordGVzdF8xIChfYmxzcl91NjQsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9u ZyBsb25nKQordGVzdF8xIChfX3R6Y250X3U2NCwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25l ZCBsb25nIGxvbmcpCit0ZXN0XzEgKF90emNudF91NjQsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5z aWduZWQgbG9uZyBsb25nKQorCisvKiBibWkyaW50cmluLmggKi8KK3Rlc3RfMiAoX2J6aGlfdTY0 LCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwl1bnNpZ25lZCBsb25n IGxvbmcpCit0ZXN0XzIgKF9wZGVwX3U2NCwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBs b25nIGxvbmcsCisJdW5zaWduZWQgbG9uZyBsb25nKQordGVzdF8yIChfcGV4dF91NjQsIHVuc2ln bmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLAorCXVuc2lnbmVkIGxvbmcgbG9uZykK K3Rlc3RfMyAoX211bHhfdTY0LCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9u ZywKKwl1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZyAqKQorCisvKiBjZXRp bnRyaW4uaCAqLwordGVzdF8wIChfZ2V0X3NzcCwgdW5zaWduZWQgbG9uZyBsb25nKQordGVzdF8y IChfd3Jzc3EsIHZvaWQsIHVuc2lnbmVkIGxvbmcgbG9uZywgdm9pZCAqKQordGVzdF8yIChfd3J1 c3NxLCB2b2lkLCB1bnNpZ25lZCBsb25nIGxvbmcsIHZvaWQgKikKKworLyogZnhzcmludHJpbi5o ICovCit0ZXN0XzEgKF9meHNhdmU2NCwgdm9pZCwgdm9pZCAqKQordGVzdF8xIChfZnhyc3RvcjY0 LCB2b2lkLCB2b2lkICopCisKKy8qIGlhMzJpbnRyaW4uaCAgKi8KK3Rlc3RfMSAoX19ic2ZxLCBp bnQsIGxvbmcgbG9uZykKK3Rlc3RfMSAoX19ic3JxLCBpbnQsIGxvbmcgbG9uZykKK3Rlc3RfMSAo X19ic3dhcHEsIGxvbmcgbG9uZywgbG9uZyBsb25nKQordGVzdF8yIChfX2NyYzMycSwgdW5zaWdu ZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsCisJdW5zaWduZWQgbG9uZyBsb25nKQor dGVzdF8xIChfX3BvcGNudHEsIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nKQordGVzdF8y IChfX3JvbHEsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLCBpbnQpCit0 ZXN0XzIgKF9fcm9ycSwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsIGlu dCkKK3Rlc3RfMCAoX19yZWFkZWZsYWdzLCB1bnNpZ25lZCBsb25nIGxvbmcpCit0ZXN0XzEgKF9f d3JpdGVlZmxhZ3MsIHZvaWQsIHVuc2lnbmVkIGludCkKKworLyogbHpjbnRpbnRyaW4uaCAqLwor dGVzdF8xIChfX2x6Y250NjQsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25n KQordGVzdF8xIChfbHpjbnRfdTY0LCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcg bG9uZykKKworLyogbHdwaW50cmluLmggKi8KK3Rlc3RfMl9pMSAoX19sd3B2YWw2NCwgdm9pZCwg dW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBpbnQsIDEpCit0ZXN0XzJfaTEgKF9fbHdwaW5z NjQsIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkgICB1bnNpZ25lZCBpbnQs IDEpCisKKy8qIG1vdmRpcmludHJpbi5oICovCit0ZXN0XzIgKF9kaXJlY3RzdG9yZXVfdTY0LCB2 b2lkLCB2b2lkICosIHVuc2lnbmVkIGxvbmcgbG9uZykKKworLyogcG9wY250aW50cmluLmggKi8K K3Rlc3RfMSAoX21tX3BvcGNudF91NjQsIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nKQor CisvKiByZHNlZWRpbnRyaW4uaCAqLwordGVzdF8xIChfcmRzZWVkNjRfc3RlcCwgaW50LCB1bnNp Z25lZCBsb25nIGxvbmcgKikKKworLyogdGJtaW50cmluLmggKi8KK3Rlc3RfMV9pMSAoX19iZXh0 cmlfdTY0LCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywgMSkKK3Rlc3Rf MSAoX19ibGNmaWxsX3U2NCwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcp Cit0ZXN0XzEgKF9fYmxjaV91NjQsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBs b25nKQordGVzdF8xIChfX2JsY2ljX3U2NCwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBs b25nIGxvbmcpCit0ZXN0XzEgKF9fYmxjbXNrX3U2NCwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNp Z25lZCBsb25nIGxvbmcpCit0ZXN0XzEgKF9fYmxjc191NjQsIHVuc2lnbmVkIGxvbmcgbG9uZywg dW5zaWduZWQgbG9uZyBsb25nKQordGVzdF8xIChfX2Jsc2ZpbGxfdTY0LCB1bnNpZ25lZCBsb25n IGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZykKK3Rlc3RfMSAoX19ibHNpY191NjQsIHVuc2lnbmVk IGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nKQordGVzdF8xIChfX3QxbXNrY191NjQsIHVu c2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nKQordGVzdF8xIChfX3R6bXNrX3U2 NCwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcpCisKKy8qIHVpbnRyaW50 cmluLmggKi8KK3Rlc3RfMCAoX2NsdWksIHZvaWQpCit0ZXN0XzEgKF9zZW5kdWlwaSwgdm9pZCwg dW5zaWduZWQgbG9uZyBsb25nKQordGVzdF8wIChfc3R1aSwgdm9pZCkKK3Rlc3RfMCAoX3Rlc3R1 aSwgdW5zaWduZWQgY2hhcikKKworLyogeDg2Z3ByaW50cmluLmggKi8KK3Rlc3RfMSAoX3B0d3Jp dGU2NCwgdm9pZCwgdW5zaWduZWQgbG9uZyBsb25nKQordGVzdF8wIChfcmVhZGZzYmFzZV91MzIs IHVuc2lnbmVkIGludCkKK3Rlc3RfMCAoX3JlYWRmc2Jhc2VfdTY0LCB1bnNpZ25lZCBsb25nIGxv bmcpCit0ZXN0XzAgKF9yZWFkZ3NiYXNlX3UzMiwgdW5zaWduZWQgaW50KQordGVzdF8wIChfcmVh ZGdzYmFzZV91NjQsIHVuc2lnbmVkIGxvbmcgbG9uZykKK3Rlc3RfMSAoX3JkcmFuZDY0X3N0ZXAs IGludCwgdW5zaWduZWQgbG9uZyBsb25nICopCit0ZXN0XzEgKF93cml0ZWZzYmFzZV91MzIsIHZv aWQsIHVuc2lnbmVkIGludCkKK3Rlc3RfMSAoX3dyaXRlZnNiYXNlX3U2NCwgdm9pZCwgdW5zaWdu ZWQgbG9uZyBsb25nKQordGVzdF8xIChfd3JpdGVnc2Jhc2VfdTMyLCB2b2lkLCB1bnNpZ25lZCBp bnQpCit0ZXN0XzEgKF93cml0ZWdzYmFzZV91NjQsIHZvaWQsIHVuc2lnbmVkIGxvbmcgbG9uZykK KworLyogeHNhdmVpbnRyaW4uaCAqLwordGVzdF8yIChfeHNhdmU2NCwgdm9pZCwgdm9pZCAqLCBs b25nIGxvbmcpCit0ZXN0XzIgKF94cnN0b3I2NCwgdm9pZCwgdm9pZCAqLCBsb25nIGxvbmcpCisK Ky8qIHhzYXZlY2ludHJpbi5oICovCit0ZXN0XzIgKF94c2F2ZWM2NCwgdm9pZCwgdm9pZCAqLCBs b25nIGxvbmcpCisKKy8qIHhzYXZlb3B0aW50cmluLmggKi8KK3Rlc3RfMiAoX3hzYXZlb3B0NjQs IHZvaWQsIHZvaWQgKiwgbG9uZyBsb25nKQorCisvKiB4c2F2ZXNpbnRyaW4uaCAqLwordGVzdF8y IChfeHNhdmVzNjQsIHZvaWQsIHZvaWQgKiwgbG9uZyBsb25nKQordGVzdF8yIChfeHJzdG9yczY0 LCB2b2lkLCB2b2lkICosIGxvbmcgbG9uZykKKworLyogd2FpdHBrZ2ludHJpbi5oICovCit0ZXN0 XzEgKF91bW9uaXRvciwgdm9pZCwgdm9pZCAqKQordGVzdF8yIChfdW13YWl0LCB1bnNpZ25lZCBj aGFyLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcgbG9uZykKK3Rlc3RfMiAoX3RwYXVzZSwg dW5zaWduZWQgY2hhciwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nIGxvbmcpCisKKyNlbHNl IC8qICFfX3g4Nl82NF9fICovCisvKiBibWkyaW50cmluLmggKi8KK3Rlc3RfMyAoX211bHhfdTMy LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LAorCXVuc2lnbmVkIGlu dCAqKQorCisvKiBjZXRpbnRyaW4uaCAqLwordGVzdF8wIChfZ2V0X3NzcCwgdW5zaWduZWQgaW50 KQorI2VuZGlmIC8qIF9feDg2XzY0X18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjk5NzQ0LTUuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L3ByOTk3NDQtNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi45ZTQwZTVlZjQyOAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L3ByOTk3NDQtNS5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qIHsgZGctZG8gY29tcGls ZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbW13YWl0IiB9ICovCisKKy8qIFRlc3QgY2Fs bGluZyBNV0FJVCBpbnRyaW5zaWNzIGZyb20gZnVuY3Rpb25zIHdpdGggZ2VuZXJhbC1yZWdzLW9u bHkKKyAgIHRhcmdldCBhdHRyaWJ1dGUuICAqLworCisjaW5jbHVkZSA8eDg2Z3ByaW50cmluLmg+ CisKKyNkZWZpbmUgX0NPTkNBVCh4LHkpIHggIyMgeQorCisjZGVmaW5lIHRlc3RfMihmdW5jLCB0 eXBlLCBvcDFfdHlwZSwgb3AyX3R5cGUpCQkJCVwKKyAgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCgi Z2VuZXJhbC1yZWdzLW9ubHkiKSkpCQkJCVwKKyAgdHlwZSBfQ09OQ0FUKGRvXyxmdW5jKSAob3Ax X3R5cGUgQSwgb3AyX3R5cGUgQikJCQlcCisgIHsgcmV0dXJuIGZ1bmMgKEEsIEIpOyB9CisKKyNk ZWZpbmUgdGVzdF8zKGZ1bmMsIHR5cGUsIG9wMV90eXBlLCBvcDJfdHlwZSwgb3AzX3R5cGUpCQlc CisgIF9fYXR0cmlidXRlX18gKCh0YXJnZXQoImdlbmVyYWwtcmVncy1vbmx5IikpKQkJCQlcCisg IHR5cGUgX0NPTkNBVChkb18sZnVuYykgKG9wMV90eXBlIEEsIG9wMl90eXBlIEIsIG9wM190eXBl IEMpCQlcCisgIHsgcmV0dXJuIGZ1bmMgKEEsIEIsIEMpOyB9CisKKyNpZm5kZWYgX19pYW1jdV9f CisvKiBtd2FpdGludHJpbi5oICovCit0ZXN0XzMgKF9tbV9tb25pdG9yLCB2b2lkLCB2b2lkIGNv bnN0ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KQordGVzdF8yIChfbW1fbXdhaXQsIHZv aWQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KQorI2VuZGlmCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjk5NzQ0LTYuYyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L3ByOTk3NDQtNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi40MDI1OTE4YTljOQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L3ByOTk3NDQtNi5jCkBAIC0wLDAgKzEsMjMgQEAKKy8qIHsgZGctZG8gY29t cGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PIiB9ICovCisKKyNpbmNsdWRlIDx4ODZpbnRy aW4uaD4KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgY3Vycl9kZWFkbGluZTsKK2V4 dGVybiB2b2lkIGJhciAodm9pZCk7CisKK3ZvaWQKK2ZvbzEgKHZvaWQpCit7CisgIGlmIChfX3Jk dHNjICgpIDwgY3Vycl9kZWFkbGluZSkKKyAgICByZXR1cm47IAorICBiYXIgKCk7Cit9CisKK3Zv aWQKK2ZvbzIgKHVuc2lnbmVkIGludCAqcCkKK3sKKyAgaWYgKF9fcmR0c2NwIChwKSA8IGN1cnJf ZGVhZGxpbmUpCisgICAgcmV0dXJuOyAKKyAgYmFyICgpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI5OTc0NC03LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9wcjk5NzQ0LTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uYTk1NDlmNjliZDIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9wcjk5NzQ0LTcuYwpAQCAtMCwwICsxLDE0IEBACisvKiB7IGRnLWRvIGNvbXBp bGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTyAtbW5vLWF2eCAtV25vLXBzYWJpIiB9ICovCisK KyNpbmNsdWRlIDx4ODZpbnRyaW4uaD4KKworI2luY2x1ZGUgPHg4NmludHJpbi5oPgorCit2b2lk Citmb28gKF9fbTI1NiAqeCkKK3sKKyAgeFswXSA9IF9tbTI1Nl9zdWJfcHMgKHhbMV0sIHhbMl0p OworfQorCisvKiB7IGRnLWVycm9yICJ0YXJnZXQgc3BlY2lmaWMgb3B0aW9uIG1pc21hdGNoIiAi IiB7IHRhcmdldCAqLSotKiB9IDAgfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvcHI5OTc0NC04LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9w cjk5NzQ0LTguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDIwYTNm NTZiMjQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9w cjk5NzQ0LTguYwpAQCAtMCwwICsxLDE1IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyog eyBkZy1vcHRpb25zICItTyAtV25vLXBzYWJpIiB9ICovCisKKyNpbmNsdWRlIDx4ODZpbnRyaW4u aD4KKworI2luY2x1ZGUgPHg4NmludHJpbi5oPgorCitfX2F0dHJpYnV0ZV9fKCh0YXJnZXQgKCJu by1hdngiKSkpCit2b2lkCitmb28gKF9fbTI1NiAqeCkKK3sKKyAgeFswXSA9IF9tbTI1Nl9zdWJf cHMgKHhbMV0sIHhbMl0pOworfQorCisvKiB7IGRnLWVycm9yICJ0YXJnZXQgc3BlY2lmaWMgb3B0 aW9uIG1pc21hdGNoIiAiIiB7IHRhcmdldCAqLSotKiB9IDAgfSAqLwotLSAKMi4zMS4xCgo= --000000000000175e3305c75bfc18--