From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 6195 invoked from network); 6 Jan 2021 03:25:19 -0000 Received: from mother.openwall.net (195.42.179.200) by inbox.vuxu.org with ESMTPUTF8; 6 Jan 2021 03:25:19 -0000 Received: (qmail 7818 invoked by uid 550); 6 Jan 2021 03:25:12 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 7792 invoked from network); 6 Jan 2021 03:25:11 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=TGbQY0JV4Xj4Z/iY0xkDa/tPm8L7f+zf5RVH3109ES4=; b=azaZND0YtFEi3H3kIXj8R01GaEqm+je+pYUnI/d2UnAMVhUBvk+X4OYxk+NNO1EBf5 OldqU+008T6oHIwLOGboPcwuIV2zhsk3qRHHO/iUuMhXMWJqv98KebIa19rraM3TPXGs 9D5oyZTllvW/3mtLX47L3LfPwdL6WqfmPiEGCA6q+3TJ1xz9qXv0kiHttSRaR36Qoosn g2LbFC9VKBBZKEif1c0f5hgZADQyDVUQzjQMBiNaBZg6Oq3fT4paiK8hJP0GP35J7AqS AygrmBU2KftFd2+nZU4np7ZMgEnJMkmTMAiADDvHrCBWl0BWXxt6LkoYNHiUayBqQr2D GmqA== 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=TGbQY0JV4Xj4Z/iY0xkDa/tPm8L7f+zf5RVH3109ES4=; b=jJ+vcK2p0pNYZKMWULgcYnwiKQJskS5E3AmomJzLihQrtPaNKDBUK4x+LPKej/ruzM PHhLGc3O1Of7ZhcVedIH9uVBGD5PyXySOApRPc4plfvgpd5AHG57fj5BNx23Bx1jg3Qb CrIgJqFumF1Hrlpq/Cgpizo2/PnLPQzcXqWyV/4OwqQorYStDi16FyWjwMG96jzwsFZR YA96NTSfdp8gHo+oN33YChYYyi3shgH4CA0YqVfFQYGnKDpcxs/N78WJR1FIUjJj2VW0 fxJO+oBOij5kEnHl4/svNJ7DPAH30ezJRPGjvjsAl9SJUfBoltXBPKR0bvGDkjVilv5X z1QA== X-Gm-Message-State: AOAM532GA7ma4bGTwAbKBbzScGJk5S1Ve3ssPNX2Ddny79+ccR4V2yay 4RtIExuo6MrKxJRDbCCeGS8taqdP8wOS1XPDdR0= X-Google-Smtp-Source: ABdhPJwiMNU7YRlQjuyF+Md/SmWgc9kS8TLBnnuVChCrjTofNShWg1cNJPzsCwWUerdRdMlVkHcfeRvgt8veuUf0X1g= X-Received: by 2002:a92:d0c8:: with SMTP id y8mr2548165ila.46.1609903499510; Tue, 05 Jan 2021 19:24:59 -0800 (PST) MIME-Version: 1.0 References: <20201217002348.GO534@brightrain.aerifal.cx> In-Reply-To: From: Jesse DeGuire Date: Tue, 5 Jan 2021 22:24:48 -0500 Message-ID: To: Patrick Oppenlander Cc: musl@lists.openwall.com Content-Type: multipart/mixed; boundary="000000000000364e9d05b832de34" Subject: Re: [musl] Musl on Cortex-M Devices --000000000000364e9d05b832de34 Content-Type: text/plain; charset="UTF-8" Hi everyone, Here's attempt three at Musl on Arm M-profile devices. I think I've incorporated all of the suggestions in this email thread. Let me know your thoughts. More specific responses are below. On Mon, Dec 21, 2020 at 8:39 PM Rich Felker wrote: > > On Mon, Dec 21, 2020 at 06:58:47PM -0500, Jesse DeGuire wrote: > > On Fri, Dec 18, 2020 at 12:30 PM Rich Felker wrote: > > > If it lacks LDREX and STREX how do you implement atomic? I don't see > > > where you're adding any alternative, so is v6-m support > > > non-functional? That rather defeats the purpose of doing anything to > > > support it... > > > > Correct, I haven't yet added an alternative. Arm's answer--and what we > > generally do in the embedded world--is to disable interrupts using > > "cpsid", do your thing, then re-enable interrupts with "cpsie". This > > could be done with a new "__a_cas_v6m" variant that I'd add to > > atomics.s. This still won't work for Linux because the "cps(ie|id)" > > instruction is effectively a no-op if it is executed in an > > unprivileged context (meaning you can't trap and emulate it). You'd be > > looking at another system call if you really wanted v6-m Linux. That > > said, this could let Musl work on v6-m in a bare metal or RTOS > > environment, which I think Musl would be great for, and so I'd still > > work on adding support for it. Also, not all v6-m devices support a > > privilege model and run as though everything is privileged. > > ARMv8-M.base is similar to v6-m with LDREX and STREX and so that could > > have full support. > > I'm not sure what the right answer for this is and whether it makes > support suitable for upstream or not at this point. We should probably > investigate further. If LDREX/STREX are trappable we could just use > them and require the kernel to trap and emulate but that's kinda ugly > (llsc-type atomics are much harder to emulate correctly than a cas > primitive). LDREX/STREX should cause a fault on v6m that can be trapped and handled. It's unfortunate that CPSID/CPSIE are ignored because trapping on those seem like they'd be easier for whoever has to handle them. My current solution is to use the HWCAP_TLS flag on M-profile devices to indicate how to handle this. If it's set, then the code will use STREX, LDREX, and MRC with the assumption that they will be trapped and emulated. If the flag is cleared, then the code will use the ARM get_tls syscall instead of MRC and will use interrupt masking only if the platform (aux{AT_PLATFORM]) indicates a "v6" device. This does mean that I'm overloading an already overloaded flag, but I'm not yet sure how else to handle this. I can easily not set the flag in my bare metal environment and get the behavior I want, but I'm not sure if this is sufficient for nommu Linux users. > > > With M profile support, though, AIUI it's possible that you have the > > > atomics but not the thread pointer. You should not assume that lack of > > > HWCAP_TLS implies lack of the atomics; rather you just have to assume > > > the atomics are present, I think, or use some other means of detection > > > with fallback to interrupt masking (assuming these devices have no > > > kernel/user distinction that prevents you from masking interrupts). > > > HWCAP_TLS should probably be probed just so you don't assume the > > > syscall exists in case a system omits it and does trap-and-emulate for > > > the instruction instead. > > > > I think I'm starting to understand this, which is good because it's > > looking like my startup code for the micros will need to properly set > > HWCAP before Musl can be used. I assume I'll need to set that > > 'aux{"AT_PLATFORM"}' to "v6" or "v7" as well to make this runtime > > detection work properly. I'll have to figure out if "v6m" and "v7m" > > are supported values for the platform. I may have more questions in > > the future as I try actually implementing something. > > Yes that sounds right. There are other aux vector entries that have to > be set correctly too for startup code, particularly AT_PHDR for > __init_tls to find the program headers (and for dl_iterate_phdr to > work). On some archs AT_HWCAP and AT_PLATFORM are also needed for > detection of features. AT_MINSIGSTKSZ is needed if the signal frame > size is variable and may exceed the default one defined in the macro. > AT_RANDOM is desirable for hardening but not mandatory. AT_EXECFN is > used as a fallback for program_invocation_name if auxv[0] is missing. > AT_SYSINFO_EHDR is used to offer vdso but is optional. And AT_*ID and > AT_SECURE are used to control behavior under suid (not trust > environment, etc.). Good to know, thanks. On Tue, Dec 22, 2020 at 4:44 PM Patrick Oppenlander wrote: > > On Fri, Dec 18, 2020 at 6:17 PM Jesse DeGuire wrote: > > > > On Thu, Dec 17, 2020 at 12:10 AM Patrick Oppenlander > > wrote: > > > > > > On Thu, Dec 17, 2020 at 3:55 PM Patrick Oppenlander > > > wrote: > > > > > > > > On Thu, Dec 17, 2020 at 11:24 AM Rich Felker wrote: > > > > > > > > > > On Wed, Dec 16, 2020 at 06:43:15PM -0500, Jesse DeGuire wrote: > > > > > > Hey everyone, > > > > > > > > > > > > I'm working on putting together a Clang-based toolchain to use with > > > > > > Microchip PIC32 (MIPS32) and SAM (Cortex-M) microcontrollers as an > > > > > > alternative to their paid XC32 toolchain and I'd like to use Musl as > > > > > > the C library. Currently, I'm trying to get it to build for a few > > > > > > different Cortex-M devices and have found that Musl builds fine for > > > > > > ARMv7-M, but not for ARMv6-M or v8-M Baseline because Musl uses > > > > > > instructions not supported on the Thumb ISA subset used by v6-M and > > > > > > v8-M Baseline devices. I'm using the v1.2.1 tag version of Musl, but > > > > > > can easily switch to HEAD if needed. I am using a Python script to > > > > > > build Musl (and eventually the rest of the toolchain), which you can > > > > > > see on GitHub at the following link. It's a bit of a mess at the > > > > > > moment, but the build_musl() function is what I'm currently using to > > > > > > build Musl. > > > > > > > > > > I had assumed the thumb1[-ish?] subset wouldn't be interesting, but if > > > > > it is, let's have a look. > > > > > > > > > > > https://github.com/jdeguire/buildPic32Clang/blob/master/buildPic32Clang.py > > > > > > > > > > > > Anyway, I have managed to get Musl to build for v6-M, v7-M, and v8-M > > > > > > Baseline and have attached a diff to this email. If you like, I can go > > > > > > into more detail as to why I made the changes I made; however, many > > > > > > changes were merely the result of my attempts to correct errors > > > > > > reported by Clang due to it encountering instruction sequences not > > > > > > supported on ARMv6-M. > > > > > > > > > > Are there places where clang's linker is failing to make substitutions > > > > > that the GNU one can do, that would make this simpler? For example I > > > > > know the GNU one can replace bx rn by mov pc,rn if needed (based on a > > > > > relocation the assembler emits on the insn). > > > > > > > > > > > A number of errors were simply the result of > > > > > > ARMv6-M requiring one to use the "S" variant of an instruction that > > > > > > sets status flags (such as "ADDS" vs "ADD" or "MOVS" vs "MOV"). A few > > > > > > files I had to change from a "lower case s" to a "capital-S" file so > > > > > > that I could use macros to check for either the Thumb1 ISA > > > > > > ("__thumb2__ || !__thumb__") or for an M-Profile device > > > > > > ("!__ARM_ARCH_ISA_ARM"). > > > > > > > > > > Is __ARM_ARCH_ISA_ARM universally available (even on old compilers)? > > > > > If not this may need an alternate detection. But I'd like to drop as > > > > > much as possible and just make the code compatible rather than having > > > > > 2 versions of it. I don't think there are any places where the > > > > > performance or size is at all relevant. > > > > > > > > > > > The changes under > > > > > > "src/thread/arm/__set_thread_area.c" are different in that I made > > > > > > those because I don't believe Cortex-M devices could handle what was > > > > > > there (no M-Profile device has Coprocessor 15, for example) and so I > > > > > > > > > > Unless this is an ISA level that can't be executed on a normal (non-M) > > > > > ARM profile, it still needs all the backends that might be needed and > > > > > runtime selection of which to use. This is okay. I believe Linux for > > > > > nommu ARM has a syscall for get_tp, which is rather awful but probably > > > > > needs to be added as a backend. The right way to do this would have > > > > > been with trap-and-emulate (of cp15) I think... > > > > > > > > Linux emulates mrc 15 on old -A cores but they decided not to on -M > > > > for some reason. BTW, the syscall is called get_tls. > > > > > > > > Is there any option other than supporting the get_tls syscall? Even if > > > > someone puts in the effort to wire up the trap-and-emulate backend, > > > > musl linked executables will still only run on new kernels. > > > > > > > > I took the trap-and-emulate approach in Apex RTOS to avoid opening > > > > this can of worms. It's the only missing link for musl on armv7-m. > > > > Everything else works beautifully. > > > > > > Another consideration is qemu-user: Currently it aborts when > > > encountering an mrc 15 instruction while emulating armv7-m. I guess > > > that would probably also be solved by supporting the syscall. > > > > > > Patrick > > > > ARMv6-M and v8-M.base do not support the MRC instruction at all. Could > > that play into why Linux and qemu bail? > > > > Jesse > > Sorry, I missed this reply. > > qemu-user refuses to translate the instruction because cp15 is not > implemented on armv7-m, exactly the same issue as is being discussed > here. If you run the same executable but tell qemu to emulate an A > profile core instead it happily runs it. > > Linux will probably kill the executable with SIGILL or something like > that (I haven't tried, just guessing). > > It's related to this discussion as changing musl to use the syscall > will likely result in qemu-user working too. > > I would personally prefer to see a solution which doesn't use the > syscall. It's possible to implement the trap-and-emulate much more > efficiently than the syscall as it can quite easily be done without > preserving any more registers than the core pushes on exception entry > anyway. https://github.com/apexrtos/apex/blob/master/sys/arch/arm/v7m/emulate.S > is what I came up with. That implementation could be even tighter as > it can never run from handler mode, so the stack detection at the > beginning is unnecessary. However, I haven't considered v6-m or v8-m. > > trap-and-emulate also gracefully degrades when running the same > executable on A vs M cores. > > Patrick Any thoughts on what's shown in this patch? For your RTOS and v7m/v8m, I'm thinking you'd be able to get the behavior you want by setting the HWCAP_TLS flag early in your startup code. For my purposes, I plan to use the syscall because I intend to eventually make a "baremetal" arch in Musl that turns syscalls into simple function calls. Therefore, I'd clear the flag in my startup code. -Jesse --000000000000364e9d05b832de34 Content-Type: application/octet-stream; name="musl_cortexm_v3.diff" Content-Disposition: attachment; filename="musl_cortexm_v3.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kjktojxg0 ZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2F0b21pY19hcmNoLmggYi9hcmNoL2FybS9hdG9taWNfYXJj aC5oCmluZGV4IDllMzkzN2NjLi41NGI3NDNiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYXRvbWlj X2FyY2guaAorKysgYi9hcmNoL2FybS9hdG9taWNfYXJjaC5oCkBAIC0yNywxNiArMjcsNiBAQCBz dGF0aWMgaW5saW5lIGludCBhX3NjKHZvbGF0aWxlIGludCAqcCwgaW50IHYpCiAJcmV0dXJuICFy OwogfQogCi0jaWYgX19BUk1fQVJDSF83QV9fIHx8IF9fQVJNX0FSQ0hfN1JfXyB8fCAgX19BUk1f QVJDSCA+PSA3Ci0KLSNkZWZpbmUgYV9iYXJyaWVyIGFfYmFycmllcgotc3RhdGljIGlubGluZSB2 b2lkIGFfYmFycmllcigpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJkbWIgaXNoIiA6IDog OiAibWVtb3J5Iik7Ci19Ci0KLSNlbmRpZgotCiAjZGVmaW5lIGFfcHJlX2xsc2MgYV9iYXJyaWVy CiAjZGVmaW5lIGFfcG9zdF9sbHNjIGFfYmFycmllcgogCkBAIC02MiwxMyArNTIsMjIgQEAgc3Rh dGljIGlubGluZSBpbnQgYV9jYXModm9sYXRpbGUgaW50ICpwLCBpbnQgdCwgaW50IHMpCiAKICNl bmRpZgogCi0jaWZuZGVmIGFfYmFycmllcgogI2RlZmluZSBhX2JhcnJpZXIgYV9iYXJyaWVyCisj aWYgX19BUk1fQVJDSF83QV9fIHx8IF9fQVJNX0FSQ0hfN1JfXyB8fCBfX0FSTV9BUkNIID49IDcg fHwgX19BUk1fQVJDSF9QUk9GSUxFID09ICdNJworCitzdGF0aWMgaW5saW5lIHZvaWQgYV9iYXJy aWVyKCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImRtYiBpc2giIDogOiA6ICJtZW1vcnki KTsKK30KKworI2Vsc2UKKwogc3RhdGljIGlubGluZSB2b2lkIGFfYmFycmllcigpCiB7CiAJcmVn aXN0ZXIgdWludHB0cl90IGlwIF9fYXNtX18oImlwIikgPSBfX2FfYmFycmllcl9wdHI7CiAJX19h c21fXyBfX3ZvbGF0aWxlX18oIEJMWCAiIGlwIiA6ICIrciIoaXApIDogOiAibWVtb3J5IiwgImNj IiwgImxyIiApOwogfQorCiAjZW5kaWYKIAogI2RlZmluZSBhX2NyYXNoIGFfY3Jhc2gKZGlmZiAt LWdpdCBhL2FyY2gvYXJtL2NydF9hcmNoLmggYi9hcmNoL2FybS9jcnRfYXJjaC5oCmluZGV4IDk5 NTA4YjFkLi42NjA4MDQyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY3J0X2FyY2guaAorKysgYi9h cmNoL2FybS9jcnRfYXJjaC5oCkBAIC0zLDEzICszLDE1IEBAIF9fYXNtX18oCiAiLmdsb2JhbCAi IFNUQVJUICIgXG4iCiAiLnR5cGUgIiBTVEFSVCAiLCVmdW5jdGlvbiBcbiIKIFNUQVJUICI6IFxu IgotIgltb3YgZnAsICMwIFxuIgotIgltb3YgbHIsICMwIFxuIgorIgltb3ZzIGEzLCAjMCBcbiIK KyIJbW92IGZwLCBhMyBcbiIKKyIJbW92IGxyLCBhMyBcbiIKICIJbGRyIGEyLCAxZiBcbiIKICIJ YWRkIGEyLCBwYywgYTIgXG4iCiAiCW1vdiBhMSwgc3AgXG4iCi0iMjoJYW5kIGlwLCBhMSwgIy0x NiBcbiIKLSIJbW92IHNwLCBpcCBcbiIKKyIyOglzdWJzIGEzLCAjMTYgXG4iCisiCWFuZHMgYTEs IGEzIFxuIgorIgltb3Ygc3AsIGExIFxuIgogIglibCAiIFNUQVJUICJfYyBcbiIKICIud2VhayBf RFlOQU1JQyBcbiIKICIuaGlkZGVuIF9EWU5BTUlDIFxuIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0v cHRocmVhZF9hcmNoLmggYi9hcmNoL2FybS9wdGhyZWFkX2FyY2guaAppbmRleCBlNjg5ZWEyMS4u OTE1NWI5YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3B0aHJlYWRfYXJjaC5oCisrKyBiL2FyY2gv YXJtL3B0aHJlYWRfYXJjaC5oCkBAIC0xLDUgKzEsNSBAQAogI2lmICgoX19BUk1fQVJDSF82S19f IHx8IF9fQVJNX0FSQ0hfNktaX18gfHwgX19BUk1fQVJDSF82WktfXykgJiYgIV9fdGh1bWJfXykg XAotIHx8IF9fQVJNX0FSQ0hfN0FfXyB8fCBfX0FSTV9BUkNIXzdSX18gfHwgX19BUk1fQVJDSCA+ PSA3CisgfHwgX19BUk1fQVJDSF83QV9fIHx8IF9fQVJNX0FSQ0hfN1JfXyB8fCAoX19BUk1fQVJD SCA+PSA3ICYmIF9fQVJNX0FSQ0hfUFJPRklMRSAhPSAnTScpCiAKIHN0YXRpYyBpbmxpbmUgcHRo cmVhZF90IF9fcHRocmVhZF9zZWxmKCkKIHsKZGlmZiAtLWdpdCBhL2NydC9hcm0vY3J0bi5zIGIv Y3J0L2FybS9jcnRuLnMKaW5kZXggZGMwMjBmOTIuLjU0N2U2NGI3IDEwMDY0NAotLS0gYS9jcnQv YXJtL2NydG4ucworKysgYi9jcnQvYXJtL2NydG4ucwpAQCAtMSw5ICsxLDkgQEAKIC5zeW50YXgg dW5pZmllZAogCiAuc2VjdGlvbiAuaW5pdAotCXBvcCB7cjAsbHJ9Ci0JYnggbHIKKwlwb3Age3Iw LHIxfQorCWJ4IHIxCiAKIC5zZWN0aW9uIC5maW5pCi0JcG9wIHtyMCxscn0KLQlieCBscgorCXBv cCB7cjAscjF9CisJYnggcjEKZGlmZiAtLWdpdCBhL3NyYy9sZHNvL2FybS90bHNkZXNjLlMgYi9z cmMvbGRzby9hcm0vdGxzZGVzYy5TCmluZGV4IDNhZTEzM2M5Li4zMzIxNjIwMCAxMDA2NDQKLS0t IGEvc3JjL2xkc28vYXJtL3Rsc2Rlc2MuUworKysgYi9zcmMvbGRzby9hcm0vdGxzZGVzYy5TCkBA IC0xMiwxMyArMTIsMTMgQEAgX190bHNkZXNjX3N0YXRpYzoKIC5oaWRkZW4gX190bHNkZXNjX2R5 bmFtaWMKIC50eXBlIF9fdGxzZGVzY19keW5hbWljLCVmdW5jdGlvbgogX190bHNkZXNjX2R5bmFt aWM6Ci0JcHVzaCB7cjIscjMsaXAsbHJ9CisJcHVzaCB7cjIscjMscjQsbHJ9CiAJbGRyIHIxLFty MF0KIAlsZHIgcjIsW3IxLCM0XSAgLy8gcjIgPSBvZmZzZXQKIAlsZHIgcjEsW3IxXSAgICAgLy8g cjEgPSBtb2RpZAogCiAjaWYgKChfX0FSTV9BUkNIXzZLX18gfHwgX19BUk1fQVJDSF82S1pfXyB8 fCBfX0FSTV9BUkNIXzZaS19fKSAmJiAhX190aHVtYl9fKSBcCi0gfHwgX19BUk1fQVJDSF83QV9f IHx8IF9fQVJNX0FSQ0hfN1JfXyB8fCBfX0FSTV9BUkNIID49IDcKKyB8fCBfX0FSTV9BUkNIXzdB X18gfHwgX19BUk1fQVJDSF83Ul9fIHx8IChfX0FSTV9BUkNIID49IDcgJiYgX19BUk1fQVJDSF9Q Uk9GSUxFICE9ICdNJykKIAltcmMgcDE1LDAscjAsYzEzLGMwLDMKICNlbHNlCiAJbGRyIHIwLDFm CkBAIC0zNiwxOSArMzYsMjggQEAgX190bHNkZXNjX2R5bmFtaWM6CiAJYnggcjAKICNlbmRpZgog I2VuZGlmCisjaWYgZGVmaW5lZChfX3RodW1iMl9fKSAgfHwgICFkZWZpbmVkKF9fdGh1bWJfXykK IAlsZHIgcjMsW3IwLCMtNF0gLy8gcjMgPSBkdHYKLQlsZHIgaXAsW3IzLHIxLExTTCAjMl0KLQlz dWIgcjAsaXAscjAKKwlsZHIgcjQsW3IzLHIxLExTTCAjMl0KKwlzdWIgcjAscjQscjAKKyNlbHNl CisJbW92IHI0LHIwCisJc3VicyByNCwjNAorCWxkciByMyxbcjRdCisJbHNscyByNCxyMSwjMgor CWxkciByNCxbcjMscjRdCisJc3VicyByMCxyNCxyMAorI2VuZGlmCiAJYWRkIHIwLHIwLHIyICAg IC8vIHIwID0gcjNbcjFdLXIwK3IyCiAjaWYgX19BUk1fQVJDSCA+PSA1Ci0JcG9wIHtyMixyMyxp cCxwY30KKwlwb3Age3IyLHIzLHI0LHBjfQogI2Vsc2UKLQlwb3Age3IyLHIzLGlwLGxyfQorCXBv cCB7cjIscjMscjQsbHJ9CiAJYnggbHIKICNlbmRpZgogCiAjaWYgKChfX0FSTV9BUkNIXzZLX18g fHwgX19BUk1fQVJDSF82S1pfXyB8fCBfX0FSTV9BUkNIXzZaS19fKSAmJiAhX190aHVtYl9fKSBc Ci0gfHwgX19BUk1fQVJDSF83QV9fIHx8IF9fQVJNX0FSQ0hfN1JfXyB8fCBfX0FSTV9BUkNIID49 IDcKKyB8fCBfX0FSTV9BUkNIXzdBX18gfHwgX19BUk1fQVJDSF83Ul9fIHx8IChfX0FSTV9BUkNI ID49IDcgJiYgX19BUk1fQVJDSF9QUk9GSUxFICE9ICdNJykKICNlbHNlCiAJLmFsaWduIDIKIDE6 CS53b3JkIF9fYV9nZXR0cF9wdHIgLSAyYgpkaWZmIC0tZ2l0IGEvc3JjL3Byb2Nlc3MvYXJtL3Zm b3JrLnMgYi9zcmMvcHJvY2Vzcy9hcm0vdmZvcmsucwppbmRleCBkN2VjNDFiMy4uYjZmMDI2MGUg MTAwNjQ0Ci0tLSBhL3NyYy9wcm9jZXNzL2FybS92Zm9yay5zCisrKyBiL3NyYy9wcm9jZXNzL2Fy bS92Zm9yay5zCkBAIC0zLDcgKzMsNyBAQAogLnR5cGUgdmZvcmssJWZ1bmN0aW9uCiB2Zm9yazoK IAltb3YgaXAsIHI3Ci0JbW92IHI3LCAxOTAKKwltb3ZzIHI3LCAxOTAKIAlzdmMgMAogCW1vdiBy NywgaXAKIAkuaGlkZGVuIF9fc3lzY2FsbF9yZXQKZGlmZiAtLWdpdCBhL3NyYy9zZXRqbXAvYXJt L2xvbmdqbXAuUyBiL3NyYy9zZXRqbXAvYXJtL2xvbmdqbXAuUwppbmRleCA4ZGYwYjgxOS4uYTI2 NDFiOTIgMTAwNjQ0Ci0tLSBhL3NyYy9zZXRqbXAvYXJtL2xvbmdqbXAuUworKysgYi9zcmMvc2V0 am1wL2FybS9sb25nam1wLlMKQEAgLTcsMTYgKzcsMzIgQEAgX2xvbmdqbXA6CiBsb25nam1wOgog CW1vdiBpcCxyMAogCW1vdnMgcjAscjEKKyNpZiBkZWZpbmVkKF9fdGh1bWIyX18pICB8fCAgIWRl ZmluZWQoX190aHVtYl9fKQogCW1vdmVxIHIwLCMxCiAJbGRtaWEgaXAhLCB7djEsdjIsdjMsdjQs djUsdjYsc2wsZnB9CiAJbGRtaWEgaXAhLCB7cjIsbHJ9CiAJbW92IHNwLHIyCi0KKyNlbHNlCisJ Ym5lIDRmCisJbW92cyByMCwjMQorNDoJbW92IHIxLGlwCisJYWRkcyByMSwjMTYKKwlsZG1pYSBy MSEsIHtyMi1yN30KKwltb3YgbHIscjcKKwltb3Ygc3AscjYKKwltb3YgcjExLHI1CisJbW92IHIx MCxyNAorCW1vdiByOSxyMworCW1vdiByOCxyMgorCW1vdiBpcCxyMQorCXN1YnMgcjEsIzQwCisJ bGRtaWEgcjEhLCB7cjQtcjd9CisjZW5kaWYKIAlhZHIgcjEsMWYKIAlsZHIgcjIsMWYKIAlsZHIg cjEsW3IxLHIyXQogCi0jaWYgX19BUk1fQVJDSCA8IDgKKyNpZiBfX0FSTV9BUkNIX1BST0ZJTEUg IT0gJ00nICYmIF9fQVJNX0FSQ0ggPCA4CiAJdHN0IHIxLCMweDI2MAogCWJlcSAzZgogCS8vIEhX Q0FQX0FSTV9GUEEKQEAgLTI0LDE0ICs0MCwxNSBAQCBsb25nam1wOgogCWJlcSAyZgogCWxkYyBw MiwgY3I0LCBbaXBdLCAjNDgKICNlbmRpZgotMjoJdHN0IHIxLCMweDQwCisyOgltb3ZzIHIyLCMw eDQwCisJdHN0IHIxLHIyCiAJYmVxIDJmCiAJLmZwdSB2ZnAKIAl2bGRtaWEgaXAhLCB7ZDgtZDE1 fQogCS5mcHUgc29mdHZmcAogCS5lYWJpX2F0dHJpYnV0ZSAxMCwgMAogCS5lYWJpX2F0dHJpYnV0 ZSAyNywgMAotI2lmIF9fQVJNX0FSQ0ggPCA4CisjaWYgX19BUk1fQVJDSF9QUk9GSUxFICE9ICdN JyAmJiBfX0FSTV9BUkNIIDwgOAogCS8vIEhXQ0FQX0FSTV9JV01NWFQKIDI6CXRzdCByMSwjMHgy MDAKIAliZXEgM2YKZGlmZiAtLWdpdCBhL3NyYy9zZXRqbXAvYXJtL3NldGptcC5TIGIvc3JjL3Nl dGptcC9hcm0vc2V0am1wLlMKaW5kZXggNDU3MzFkMjIuLjdjYTUxODg2IDEwMDY0NAotLS0gYS9z cmMvc2V0am1wL2FybS9zZXRqbXAuUworKysgYi9zcmMvc2V0am1wL2FybS9zZXRqbXAuUwpAQCAt OCwxNyArOCwyOCBAQAogX19zZXRqbXA6CiBfc2V0am1wOgogc2V0am1wOgorI2lmIGRlZmluZWQo X190aHVtYjJfXykgIHx8ICAhZGVmaW5lZChfX3RodW1iX18pCiAJbW92IGlwLHIwCiAJc3RtaWEg aXAhLHt2MSx2Mix2Myx2NCx2NSx2NixzbCxmcH0KIAltb3YgcjIsc3AKIAlzdG1pYSBpcCEse3Iy LGxyfQotCW1vdiByMCwjMAotCisjZWxzZQorCXN0bWlhIHIwISx7cjQtcjd9CisJbW92IHIxLHI4 CisJbW92IHIyLHI5CisJbW92IHIzLHIxMAorCW1vdiByNCxyMTEKKwltb3YgcjUsc3AKKwltb3Yg cjYsbHIKKwlzdG1pYSByMCEse3IxLXI2fQorCW1vdiBpcCxyMAorI2VuZGlmCisJbW92cyByMCwj MAogCWFkciByMSwxZgogCWxkciByMiwxZgogCWxkciByMSxbcjEscjJdCiAKLSNpZiBfX0FSTV9B UkNIIDwgOAorI2lmIF9fQVJNX0FSQ0hfUFJPRklMRSAhPSAnTScgJiYgX19BUk1fQVJDSCA8IDgK IAl0c3QgcjEsIzB4MjYwCiAJYmVxIDNmCiAJLy8gSFdDQVBfQVJNX0ZQQQpAQCAtMjYsMTQgKzM3 LDE1IEBAIHNldGptcDoKIAliZXEgMmYKIAlzdGMgcDIsIGNyNCwgW2lwXSwgIzQ4CiAjZW5kaWYK LTI6CXRzdCByMSwjMHg0MAorMjoJbW92cyByMiwjMHg0MAorCXRzdCByMSxyMgogCWJlcSAyZgog CS5mcHUgdmZwCiAJdnN0bWlhIGlwISwge2Q4LWQxNX0KIAkuZnB1IHNvZnR2ZnAKIAkuZWFiaV9h dHRyaWJ1dGUgMTAsIDAKIAkuZWFiaV9hdHRyaWJ1dGUgMjcsIDAKLSNpZiBfX0FSTV9BUkNIIDwg OAorI2lmIF9fQVJNX0FSQ0hfUFJPRklMRSAhPSAnTScgJiYgX19BUk1fQVJDSCA8IDgKIAkvLyBI V0NBUF9BUk1fSVdNTVhUCiAyOgl0c3QgcjEsIzB4MjAwCiAJYmVxIDNmCmRpZmYgLS1naXQgYS9z cmMvc2lnbmFsL2FybS9yZXN0b3JlLnMgYi9zcmMvc2lnbmFsL2FybS9yZXN0b3JlLnMKaW5kZXgg ZmIwODZkOWIuLjJiNzYyMWIxIDEwMDY0NAotLS0gYS9zcmMvc2lnbmFsL2FybS9yZXN0b3JlLnMK KysrIGIvc3JjL3NpZ25hbC9hcm0vcmVzdG9yZS5zCkBAIC00LDEyICs0LDEyIEBACiAuaGlkZGVu IF9fcmVzdG9yZQogLnR5cGUgX19yZXN0b3JlLCVmdW5jdGlvbgogX19yZXN0b3JlOgotCW1vdiBy NywjMTE5CisJbW92cyByNywjMTE5CiAJc3dpIDB4MAogCiAuZ2xvYmFsIF9fcmVzdG9yZV9ydAog LmhpZGRlbiBfX3Jlc3RvcmVfcnQKIC50eXBlIF9fcmVzdG9yZV9ydCwlZnVuY3Rpb24KIF9fcmVz dG9yZV9ydDoKLQltb3YgcjcsIzE3MworCW1vdnMgcjcsIzE3MwogCXN3aSAweDAKZGlmZiAtLWdp dCBhL3NyYy9zaWduYWwvYXJtL3NpZ3NldGptcC5zIGIvc3JjL3NpZ25hbC9hcm0vc2lnc2V0am1w LnMKaW5kZXggNjllYmJmNDkuLjhlZjUxZGUzIDEwMDY0NAotLS0gYS9zcmMvc2lnbmFsL2FybS9z aWdzZXRqbXAucworKysgYi9zcmMvc2lnbmFsL2FybS9zaWdzZXRqbXAucwpAQCAtOSwxNiArOSwy MCBAQCBfX3NpZ3NldGptcDoKIAlibmUgMWYKIAliIHNldGptcAogCi0xOglzdHIgbHIsW3IwLCMy NTZdCi0Jc3RyIHI0LFtyMCwjMjYwKzhdCisxOgltb3YgcjIsbHIKKwlhZGRzIHIwLCMyMDAKKwlz dHIgcjIsW3IwLCM1Nl0KKwlzdHIgcjQsW3IwLCM2MCs4XQogCW1vdiByNCxyMAogCiAJYmwgc2V0 am1wCiAKIAltb3YgcjEscjAKIAltb3YgcjAscjQKLQlsZHIgbHIsW3IwLCMyNTZdCi0JbGRyIHI0 LFtyMCwjMjYwKzhdCisJbGRyIHIyLFtyMCwjNTZdCisJbW92IGxyLHIyCisJbGRyIHI0LFtyMCwj NjArOF0KKwlzdWJzIHIwLCMyMDAKIAogLmhpZGRlbiBfX3NpZ3NldGptcF90YWlsCiAJYiBfX3Np Z3NldGptcF90YWlsCmRpZmYgLS1naXQgYS9zcmMvc3RyaW5nL2FybS9tZW1jcHkuUyBiL3NyYy9z dHJpbmcvYXJtL21lbWNweS5TCmluZGV4IDg2OWUzNDQ4Li4yZWIyOGVlYyAxMDA2NDQKLS0tIGEv c3JjL3N0cmluZy9hcm0vbWVtY3B5LlMKKysrIGIvc3JjL3N0cmluZy9hcm0vbWVtY3B5LlMKQEAg LTQzLDYgKzQzLDggQEAKICAqIGJ1aWxkaW5nIGFzIHRodW1iIDIgYW5kIGJpZy1lbmRpYW4uCiAg Ki8KIAorI2lmIGRlZmluZWQoX190aHVtYjJfXykgIHx8ICAhZGVmaW5lZChfX3RodW1iX18pCisK IC5zeW50YXggdW5pZmllZAogCiAuZ2xvYmFsIG1lbWNweQpAQCAtNDc3LDMgKzQ3OSw0IEBAIGNv cHlfbGFzdF8zX2FuZF9yZXR1cm46CiAJbGRtZmQgICBzcCEsIHtyMCwgcjQsIGxyfQogCWJ4ICAg ICAgbHIKIAorI2VuZGlmIC8qIGRlZmluZWQoX190aHVtYjJfXykgIHx8ICAhZGVmaW5lZChfX3Ro dW1iX18pICovCmRpZmYgLS1naXQgYS9zcmMvc3RyaW5nL2FybS9tZW1jcHlfdGh1bWIxLmMgYi9z cmMvc3RyaW5nL2FybS9tZW1jcHlfdGh1bWIxLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg MDAwMDAwMDAuLjIzNTcxZTAwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3N0cmluZy9hcm0vbWVt Y3B5X3RodW1iMS5jCkBAIC0wLDAgKzEsNSBAQAorI2lmIGRlZmluZWQoX190aHVtYl9fKSAgJiYg ICFkZWZpbmVkKF9fdGh1bWIyX18pDQorDQorI2luY2x1ZGUgIi4uL21lbWNweS5jIg0KKw0KKyNl bmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQv YXJtL19fc2V0X3RocmVhZF9hcmVhLmMgYi9zcmMvdGhyZWFkL2FybS9fX3NldF90aHJlYWRfYXJl YS5jCmluZGV4IDA5ZGU2NWFhLi45OWNlNWY0MSAxMDA2NDQKLS0tIGEvc3JjL3RocmVhZC9hcm0v X19zZXRfdGhyZWFkX2FyZWEuYworKysgYi9zcmMvdGhyZWFkL2FybS9fX3NldF90aHJlYWRfYXJl YS5jCkBAIC02LDI3ICs2LDUwIEBACiAjZGVmaW5lIEhXQ0FQX1RMUyAoMSA8PCAxNSkKIAogZXh0 ZXJuIGhpZGRlbiBjb25zdCB1bnNpZ25lZCBjaGFyCi0JX19hX2JhcnJpZXJfb2xka3VzZXJbXSwg X19hX2JhcnJpZXJfdjZbXSwgX19hX2JhcnJpZXJfdjdbXSwKLQlfX2FfY2FzX3Y2W10sIF9fYV9j YXNfdjdbXSwKLQlfX2FfZ2V0dHBfY3AxNVtdOworCV9fYV9iYXJyaWVyX29sZGt1c2VyW10sIF9f YV9iYXJyaWVyX3Y2W10sIF9fYV9iYXJyaWVyX3Y3W10sIF9fYV9iYXJyaWVyX21bXSwKKwlfX2Ff Y2FzX3Y2W10sIF9fYV9jYXNfdjdbXSwgX19hX2Nhc19tW10sIF9fYV9jYXNfaW50bWFza19tW10s CisJX19hX2dldHRwX2NwMTVbXSwgX19hX2dldHRwX2NwMTVfbVtdLCBfX2FfZ2V0dHBfc3lzY2Fs bF9tW107CiAKICNkZWZpbmUgX19hX2JhcnJpZXJfa3VzZXIgMHhmZmZmMGZhMAogI2RlZmluZSBf X2FfYmFycmllcl9vbGRrdXNlciAodWludHB0cl90KV9fYV9iYXJyaWVyX29sZGt1c2VyCiAjZGVm aW5lIF9fYV9iYXJyaWVyX3Y2ICh1aW50cHRyX3QpX19hX2JhcnJpZXJfdjYKICNkZWZpbmUgX19h X2JhcnJpZXJfdjcgKHVpbnRwdHJfdClfX2FfYmFycmllcl92NworI2RlZmluZSBfX2FfYmFycmll cl9tICh1aW50cHRyX3QpX19hX2JhcnJpZXJfbQogCiAjZGVmaW5lIF9fYV9jYXNfa3VzZXIgMHhm ZmZmMGZjMAogI2RlZmluZSBfX2FfY2FzX3Y2ICh1aW50cHRyX3QpX19hX2Nhc192NgogI2RlZmlu ZSBfX2FfY2FzX3Y3ICh1aW50cHRyX3QpX19hX2Nhc192NworI2RlZmluZSBfX2FfY2FzX20gKHVp bnRwdHJfdClfX2FfY2FzX20KKyNkZWZpbmUgX19hX2Nhc19pbnRtYXNrX20gKHVpbnRwdHJfdClf X2FfY2FzX2ludG1hc2tfbQogCiAjZGVmaW5lIF9fYV9nZXR0cF9rdXNlciAweGZmZmYwZmUwCiAj ZGVmaW5lIF9fYV9nZXR0cF9jcDE1ICh1aW50cHRyX3QpX19hX2dldHRwX2NwMTUKKyNkZWZpbmUg X19hX2dldHRwX2NwMTVfbSAodWludHB0cl90KV9fYV9nZXR0cF9jcDE1X20KKyNkZWZpbmUgX19h X2dldHRwX3N5c2NhbGxfbSAodWludHB0cl90KV9fYV9nZXR0cF9zeXNjYWxsX20KIAogZXh0ZXJu IGhpZGRlbiB1aW50cHRyX3QgX19hX2JhcnJpZXJfcHRyLCBfX2FfY2FzX3B0ciwgX19hX2dldHRw X3B0cjsKIAogaW50IF9fc2V0X3RocmVhZF9hcmVhKHZvaWQgKnApCiB7Ci0jaWYgIV9fQVJNX0FS Q0hfN0FfXyAmJiAhX19BUk1fQVJDSF83Ul9fICYmIF9fQVJNX0FSQ0ggPCA3CisjaWYgX19BUk1f QVJDSF9QUk9GSUxFID09ICdNJworCV9fYV9jYXNfcHRyID0gX19hX2Nhc19tOworCV9fYV9iYXJy aWVyX3B0ciA9IF9fYV9iYXJyaWVyX207CisKKwlpZiAoX19od2NhcCAmIEhXQ0FQX1RMUykgewor CQlfX2FfZ2V0dHBfcHRyID0gX19hX2dldHRwX2NwMTVfbTsKKwl9IGVsc2UgeworCQlzaXplX3Qg KmF1eDsKKwkJX19hX2dldHRwX3B0ciA9IF9fYV9nZXR0cF9zeXNjYWxsX207CisJCWZvciAoYXV4 PWxpYmMuYXV4djsgKmF1eDsgYXV4Kz0yKSB7CisJCQlpZiAoKmF1eCAhPSBBVF9QTEFURk9STSkg Y29udGludWU7CisJCQljb25zdCBjaGFyICpzID0gKHZvaWQgKilhdXhbMV07CisJCQlpZiAoc1sw XT09J3YnICYmIHNbMV09PSc2JykgeworCQkJCV9fYV9jYXNfcHRyID0gX19hX2Nhc19pbnRtYXNr X207CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisjZWxpZiAhX19BUk1fQVJDSF83QV9fICYm ICFfX0FSTV9BUkNIXzdSX18gJiYgX19BUk1fQVJDSCA8IDcKIAlpZiAoX19od2NhcCAmIEhXQ0FQ X1RMUykgewogCQlzaXplX3QgKmF1eDsKIAkJX19hX2Nhc19wdHIgPSBfX2FfY2FzX3Y3OwpkaWZm IC0tZ2l0IGEvc3JjL3RocmVhZC9hcm0vX191bm1hcHNlbGYuYyBiL3NyYy90aHJlYWQvYXJtL19f dW5tYXBzZWxmLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAuLjlhZmM0Nzgw Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3RocmVhZC9hcm0vX191bm1hcHNlbGYuYwpAQCAtMCww ICsxLDIxIEBACisjaWYgX19BUk1fQVJDSF9QUk9GSUxFICE9ICdNJw0KKw0KKyNpbmNsdWRlICJw dGhyZWFkX2ltcGwuaCINCisNCit2b2lkIF9fdW5tYXBzZWxmKHZvaWQgKmJhc2UsIHNpemVfdCBz aXplKQ0KK3sNCisJcmVnaXN0ZXIgdm9pZCAqcjAgX19hc21fXygicjAiKSA9IGJhc2U7DQorCXJl Z2lzdGVyIHNpemVfdCByMSBfX2FzbV9fKCJyMSIpID0gc2l6ZTsNCisJX19hc21fXyBfX3ZvbGF0 aWxlX18gKA0KKwkiCW1vdnMgcjcsIzkxIFxuIg0KKwkiCXN2YyAwIFxuIg0KKwkiCW1vdnMgcjcs IzEgXG4iDQorCSIJc3ZjIDAgXG4iDQorCTo6ICJyIihyMCksICJyIihyMSkpOw0KK30NCisNCisj ZWxzZQ0KKw0KKyNpbmNsdWRlICIuLi9fX3VubWFwc2VsZi5jIg0KKw0KKyNlbmRpZg0KZGlmZiAt LWdpdCBhL3NyYy90aHJlYWQvYXJtL19fdW5tYXBzZWxmLnMgYi9zcmMvdGhyZWFkL2FybS9fX3Vu bWFwc2VsZi5zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWMyZDA3Yi4uMDAwMDAw MDAKLS0tIGEvc3JjL3RocmVhZC9hcm0vX191bm1hcHNlbGYucworKysgL2Rldi9udWxsCkBAIC0x LDkgKzAsMCBAQAotLnN5bnRheCB1bmlmaWVkCi0udGV4dAotLmdsb2JhbCBfX3VubWFwc2VsZgot LnR5cGUgICBfX3VubWFwc2VsZiwlZnVuY3Rpb24KLV9fdW5tYXBzZWxmOgotCW1vdiByNywjOTEK LQlzdmMgMAotCW1vdiByNywjMQotCXN2YyAwCmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkL2FybS9h dG9taWNzLnMgYi9zcmMvdGhyZWFkL2FybS9hdG9taWNzLnMKaW5kZXggZGE1MDUwOGQuLjkwMDU3 MmRjIDEwMDY0NAotLS0gYS9zcmMvdGhyZWFkL2FybS9hdG9taWNzLnMKKysrIGIvc3JjL3RocmVh ZC9hcm0vYXRvbWljcy5zCkBAIC0xMSw2ICsxMSw4IEBAIF9fYV9iYXJyaWVyX2R1bW15OgogLmhp ZGRlbiBfX2FfYmFycmllcl9vbGRrdXNlcgogLnR5cGUgX19hX2JhcnJpZXJfb2xka3VzZXIsJWZ1 bmN0aW9uCiBfX2FfYmFycmllcl9vbGRrdXNlcjoKKwkuYXJjaCBhcm12NgorCS5hcm0KIAlwdXNo IHtyMCxyMSxyMixyMyxpcCxscn0KIAltb3YgcjEscjAKIAltb3YgcjIsc3AKQEAgLTI1LDYgKzI3 LDcgQEAgX19hX2JhcnJpZXJfb2xka3VzZXI6CiAudHlwZSBfX2FfYmFycmllcl92NiwlZnVuY3Rp b24KIF9fYV9iYXJyaWVyX3Y2OgogCS5hcmNoIGFybXY2dDIKKwkuYXJtCiAJbWNyIHAxNSwwLHIw LGM3LGMxMCw1CiAJYnggbHIKIApAQCAtMzMsMjQgKzM2LDM4IEBAIF9fYV9iYXJyaWVyX3Y2Ogog LnR5cGUgX19hX2JhcnJpZXJfdjcsJWZ1bmN0aW9uCiBfX2FfYmFycmllcl92NzoKIAkuYXJjaCBh cm12Ny1hCisJLmFybQogCWRtYiBpc2gKIAlieCBscgogCisuZ2xvYmFsIF9fYV9iYXJyaWVyX20K Ky5oaWRkZW4gX19hX2JhcnJpZXJfbQorLnR5cGUgX19hX2JhcnJpZXJfbSwlZnVuY3Rpb24KK19f YV9iYXJyaWVyX206CisJLmFyY2ggYXJtdjYtbQorCS50aHVtYgorCWRtYgorCWJ4IGxyCisKIC5n bG9iYWwgX19hX2Nhc19kdW1teQogLmhpZGRlbiBfX2FfY2FzX2R1bW15CiAudHlwZSBfX2FfY2Fz X2R1bW15LCVmdW5jdGlvbgogX19hX2Nhc19kdW1teToKKwkuYXJjaCBhcm12Ny1hCisJLmFybQog CW1vdiByMyxyMAogCWxkciByMCxbcjJdCiAJc3VicyByMCxyMyxyMAotCXN0cmVxIHIxLFtyMl0K LQlieCBscgorCWJuZSAxZgorCXN0ciByMSxbcjJdCisxOglieCBscgogCiAuZ2xvYmFsIF9fYV9j YXNfdjYKIC5oaWRkZW4gX19hX2Nhc192NgogLnR5cGUgX19hX2Nhc192NiwlZnVuY3Rpb24KIF9f YV9jYXNfdjY6CiAJLmFyY2ggYXJtdjZ0MgorCS5hcm0KIAltb3YgcjMscjAKIAltY3IgcDE1LDAs cjAsYzcsYzEwLDUKIDE6CWxkcmV4IHIwLFtyMl0KQEAgLTY2LDYgKzgzLDcgQEAgX19hX2Nhc192 NjoKIC50eXBlIF9fYV9jYXNfdjcsJWZ1bmN0aW9uCiBfX2FfY2FzX3Y3OgogCS5hcmNoIGFybXY3 LWEKKwkuYXJtCiAJbW92IHIzLHIwCiAJZG1iIGlzaAogMToJbGRyZXggcjAsW3IyXQpAQCAtNzYs MTMgKzk0LDcyIEBAIF9fYV9jYXNfdjc6CiAJZG1iIGlzaAogCWJ4IGxyCiAKKy5nbG9iYWwgX19h X2Nhc19tCisuaGlkZGVuIF9fYV9jYXNfbQorLnR5cGUgX19hX2Nhc19tLCVmdW5jdGlvbgorX19h X2Nhc19tOgorCS5hcmNoIGFybXY3LW0KKwkudGh1bWIKKwltb3YgcjMscjAKKwlkbWIKKzE6CWxk cmV4IHIwLFtyMl0KKwlzdWJzIHIwLHIzLHIwCisJYm5lIDFiCisJc3RyZXggcjAscjEsW3IyXQor CXRzdCByMCxyMAorCWJuZSAxYgorCWRtYgorCWJ4IGxyCisKKy5nbG9iYWwgX19hX2Nhc19pbnRt YXNrX20KKy5oaWRkZW4gX19hX2Nhc19pbnRtYXNrX20KKy50eXBlIF9fYV9jYXNfaW50bWFza19t LCVmdW5jdGlvbgorX19hX2Nhc19pbnRtYXNrX206CisJLmFyY2ggYXJtdjYtbQorCS50aHVtYgor CW1vdiByMyxyMAorCWRtYgorCWNwc2lkIGkKKzE6CWxkciByMCxbcjJdCisJc3VicyByMCxyMyxy MAorCWJuZSAxYgorCXN0ciByMSxbcjJdCisJY3BzaWUgaQorCWRtYgorCWJ4IGxyCisKIC5nbG9i YWwgX19hX2dldHRwX2NwMTUKIC5oaWRkZW4gX19hX2dldHRwX2NwMTUKIC50eXBlIF9fYV9nZXR0 cF9jcDE1LCVmdW5jdGlvbgogX19hX2dldHRwX2NwMTU6CisJLmFyY2ggYXJtdjYKKwkuYXJtCiAJ bXJjIHAxNSwwLHIwLGMxMyxjMCwzCiAJYnggbHIKIAorLmdsb2JhbCBfX2FfZ2V0dHBfY3AxNV9t CisuaGlkZGVuIF9fYV9nZXR0cF9jcDE1X20KKy50eXBlIF9fYV9nZXR0cF9jcDE1X20sJWZ1bmN0 aW9uCitfX2FfZ2V0dHBfY3AxNV9tOgorCS5hcmNoIGFybXY3LW0KKwkudGh1bWIKKwltcmMgcDE1 LDAscjAsYzEzLGMwLDMKKwlieCBscgorCisuZ2xvYmFsIF9fYV9nZXR0cF9zeXNjYWxsX20KKy5o aWRkZW4gX19hX2dldHRwX3N5c2NhbGxfbQorLnR5cGUgX19hX2dldHRwX3N5c2NhbGxfbSwlZnVu Y3Rpb24KK19fYV9nZXR0cF9zeXNjYWxsX206CisJLmFyY2ggYXJtdjYtbQorCS50aHVtYgorCXB1 c2gge3I3fQorCW1vdnMgcjcsIzB4ZgorCWxzbHMgcjcscjcsIzE2CisJYWRkcyByNywjNiAgICAg ICAgICAvKiBBUk0gZ2V0X3RscyBzeXNjYWxsICgweGYwMDA2KSAqLworCXN2YyAwCisJcG9wIHty N30KKwlieCBscgorCiAvKiBUYWcgdGhpcyBmaWxlIHdpdGggbWluaW11bSBJU0EgbGV2ZWwgc28g YXMgbm90IHRvIGFmZmVjdCBsaW5raW5nLiAqLwogLm9iamVjdF9hcmNoIGFybXY0dAogLmVhYmlf YXR0cmlidXRlIDYsMgpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC9hcm0vY2xvbmUucyBiL3NyYy90 aHJlYWQvYXJtL2Nsb25lLnMKaW5kZXggYmIwOTY1ZGEuLjMzYzJlNTliIDEwMDY0NAotLS0gYS9z cmMvdGhyZWFkL2FybS9jbG9uZS5zCisrKyBiL3NyYy90aHJlYWQvYXJtL2Nsb25lLnMKQEAgLTQs MjQgKzQsMjYgQEAKIC5oaWRkZW4gX19jbG9uZQogLnR5cGUgICBfX2Nsb25lLCVmdW5jdGlvbgog X19jbG9uZToKLQlzdG1mZCBzcCEse3I0LHI1LHI2LHI3fQotCW1vdiByNywjMTIwCisJcHVzaCB7 cjQscjUscjYscjd9CisJbW92cyByNywjMTIwCiAJbW92IHI2LHIzCiAJbW92IHI1LHIwCiAJbW92 IHIwLHIyCi0JYW5kIHIxLHIxLCMtMTYKKwltb3ZzIHIyLCMwCisJc3VicyByMiwjMTYKKwlhbmRz IHIxLHIyCiAJbGRyIHIyLFtzcCwjMTZdCiAJbGRyIHIzLFtzcCwjMjBdCiAJbGRyIHI0LFtzcCwj MjRdCiAJc3ZjIDAKIAl0c3QgcjAscjAKIAliZXEgMWYKLQlsZG1mZCBzcCEse3I0LHI1LHI2LHI3 fQorCXBvcCB7cjQscjUscjYscjd9CiAJYnggbHIKIAogMToJbW92IHIwLHI2CiAJYmwgM2YKLTI6 CW1vdiByNywjMQorMjoJbW92cyByNywjMQogCXN2YyAwCiAJYiAyYgogCmRpZmYgLS1naXQgYS9z cmMvdGhyZWFkL2FybS9zeXNjYWxsX2NwLnMgYi9zcmMvdGhyZWFkL2FybS9zeXNjYWxsX2NwLnMK aW5kZXggZTYwN2RkNDIuLjQyMWU2NGY0IDEwMDY0NAotLS0gYS9zcmMvdGhyZWFkL2FybS9zeXNj YWxsX2NwLnMKKysrIGIvc3JjL3RocmVhZC9hcm0vc3lzY2FsbF9jcC5zCkBAIC0xMSw3ICsxMSw3 IEBACiAudHlwZSBfX3N5c2NhbGxfY3BfYXNtLCVmdW5jdGlvbgogX19zeXNjYWxsX2NwX2FzbToK IAltb3YgaXAsc3AKLQlzdG1mZCBzcCEse3I0LHI1LHI2LHI3fQorCXB1c2gge3I0LHI1LHI2LHI3 fQogX19jcF9iZWdpbjoKIAlsZHIgcjAsW3IwXQogCWNtcCByMCwjMApAQCAtMTksMTEgKzE5LDEy IEBAIF9fY3BfYmVnaW46CiAJbW92IHI3LHIxCiAJbW92IHIwLHIyCiAJbW92IHIxLHIzCi0JbGRt ZmQgaXAse3IyLHIzLHI0LHI1LHI2fQorCW1vdiByMixpcAorCWxkbWZkIHIyLHtyMixyMyxyNCxy NSxyNn0KIAlzdmMgMAogX19jcF9lbmQ6Ci0JbGRtZmQgc3AhLHtyNCxyNSxyNixyN30KKwlwb3Ag e3I0LHI1LHI2LHI3fQogCWJ4IGxyCiBfX2NwX2NhbmNlbDoKLQlsZG1mZCBzcCEse3I0LHI1LHI2 LHI3fQorCXBvcCB7cjQscjUscjYscjd9CiAJYiBfX2NhbmNlbAo= --000000000000364e9d05b832de34--