From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6141 invoked by alias); 9 Dec 2015 18:53:51 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 6029 invoked by uid 89); 9 Dec 2015 18:53:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-ob0-f174.google.com Received: from mail-ob0-f174.google.com (HELO mail-ob0-f174.google.com) (209.85.214.174) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Wed, 09 Dec 2015 18:53:33 +0000 Received: by obbww6 with SMTP id ww6so42573651obb.0 for ; Wed, 09 Dec 2015 10:53:31 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.60.101.166 with SMTP id fh6mr5530803oeb.34.1449687211308; Wed, 09 Dec 2015 10:53:31 -0800 (PST) Received: by 10.76.77.99 with HTTP; Wed, 9 Dec 2015 10:53:31 -0800 (PST) In-Reply-To: References: Date: Wed, 09 Dec 2015 18:53:00 -0000 Message-ID: Subject: Re: PING^1: [PATCH] Add TYPE_EMPTY_RECORD for C++ empty class From: "H.J. Lu" To: Richard Biener Cc: Jason Merrill , GCC Patches Content-Type: multipart/mixed; boundary=089e0111d6ec44131405267b9baa X-IsSubscribed: yes X-SW-Source: 2015-12/txt/msg01054.txt.bz2 --089e0111d6ec44131405267b9baa Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-length: 6726 On Wed, Dec 9, 2015 at 6:05 AM, Richard Biener wrote: > On Tue, Dec 8, 2015 at 5:22 PM, H.J. Lu wrote: >> On Mon, Nov 23, 2015 at 12:53 PM, H.J. Lu wrote: >>> On Mon, Nov 23, 2015 at 1:57 AM, Richard Biener >>> wrote: >>>> On Sat, Nov 21, 2015 at 12:46 AM, H.J. Lu wrote: >>>>> On Fri, Nov 20, 2015 at 2:17 PM, Jason Merrill wro= te: >>>>>> On 11/20/2015 01:52 PM, H.J. Lu wrote: >>>>>>> >>>>>>> On Tue, Nov 17, 2015 at 4:22 AM, Richard Biener >>>>>>> wrote: >>>>>>>> >>>>>>>> On Tue, Nov 17, 2015 at 12:01 PM, H.J. Lu wr= ote: >>>>>>>>> >>>>>>>>> Empty record should be returned and passed the same way in C and = C++. >>>>>>>>> This patch adds LANG_HOOKS_EMPTY_RECORD_P for C++ empty class, wh= ich >>>>>>>>> defaults to return false. For C++, LANG_HOOKS_EMPTY_RECORD_P is = defined >>>>>>>>> to is_really_empty_class, which returns true for C++ empty classe= s. For >>>>>>>>> LTO, we stream out a bit to indicate if a record is empty and we = store >>>>>>>>> it in TYPE_LANG_FLAG_0 when streaming in. get_ref_base_and_exten= t is >>>>>>>>> changed to set bitsize to 0 for empty records. Middle-end and x86 >>>>>>>>> backend are updated to ignore empty records for parameter passing= and >>>>>>>>> function value return. Other targets may need similar changes. >>>>>>>> >>>>>>>> >>>>>>>> Please avoid a new langhook for this and instead claim a bit in >>>>>>>> tree_type_common >>>>>>>> like for example restrict_flag (double-check it is unused for >>>>>>>> non-pointers). >>>>>>> >>>>>>> >>>>>>> There is no bit in tree_type_common I can overload. restrict_flag = is >>>>>>> checked for non-pointers to issue an error when it is used on >>>>>>> non-pointers: >>>>>>> >>>>>>> >>>>>>> /export/gnu/import/git/sources/gcc/gcc/testsuite/g++.dg/template/qu= alttp20.C:19:38: >>>>>>> error: =E2=80=98__restrict__=E2=80=99 qualifiers cannot be applied = to =E2=80=98AS::L=E2=80=99 >>>>>>> typedef typename T::L __restrict__ r;// { dg-error "'__restrict= __' >>>>>>> qualifiers cannot" "" } >>>>>> >>>>>> >>>>>> The C++ front end only needs to check TYPE_RESTRICT for this purpose= on >>>>>> front-end-specific type codes like TEMPLATE_TYPE_PARM; cp_type_quals= could >>>>>> handle that specifically if you change TYPE_RESTRICT to only apply to >>>>>> pointers. >>>>>> >>>>> >>>>> restrict_flag is also checked in this case: >>>>> >>>>> [hjl@gnu-6 gcc]$ cat x.i >>>>> struct dummy { }; >>>>> >>>>> struct dummy >>>>> foo (struct dummy __restrict__ i) >>>>> { >>>>> return i; >>>>> } >>>>> [hjl@gnu-6 gcc]$ gcc -S x.i -Wall >>>>> x.i:4:13: error: invalid use of =E2=80=98restrict=E2=80=99 >>>>> foo (struct dummy __restrict__ i) >>>>> ^ >>>>> x.i:4:13: error: invalid use of =E2=80=98restrict=E2=80=99 >>>>> [hjl@gnu-6 gcc]$ >>>>> >>>>> restrict_flag can't also be used to indicate `i' is an empty record. >>>> >>>> I'm sure this error can be done during parsing w/o relying on TYPE_RES= TRICT. >>>> >>>> But well, use any other free bit (but do not enlarge >>>> tree_type_common). Eventually >>>> you can free up a bit by putting sth into type_lang_specific currently >>>> using bits >>>> in tree_type_common. >>> >>> There are no bits in tree_type_common I can move. Instead, >>> this patch overloads side_effects_flag in tree_base. Tested on >>> Linux/x86-64. OK for trunk? > > I'm fine with using side_effects_flag for this. > > I miss an explanation of where this detail of the ABI is documented and w= onder > if the term "empty record" is also used in that document and how it is > documented. > > Thus > > +/* Nonzero in a type considered an empty record. */ > +#define TYPE_EMPTY_RECORD(NODE) \ > + (TYPE_CHECK (NODE)->base.side_effects_flag) > > should refer to the ABI where is defined what an "empty record" is and how > it is handled by the backend(s). Empty C++ class is a corner case which isn't covered in psABI nor C++ ABI. There is no mention of "empty record" in GCC documentation. But there are plenty of "empty class" in gcc/cp. This change affects all targets. C++ A= BI should specify how it should be passed. > +/* Return true if type T is an empty record. */ > + > +static inline bool > +type_is_empty_record_p (const_tree t) > +{ > + return TYPE_EMPTY_RECORD (TYPE_MAIN_VARIANT (t)); > > the type checker should probably check the bit is consistent across > variants so it can be tested on any of them. TYPE_EMPTY_RECORD is only relevant for parameter passing. For struct foo; typedef foo bar; TYPE_EMPTY_RECORD has no impact. Since call only uses the main variant type, checking TYPE_MAIN_VARIANT is sufficient. > You fail to adjust other targets gimplification hooks which suggests > this is a detail of the x86 psABI and not the C++ ABI? If so I miss > a -Wpsabi warning for this change. My change is generic. The only x86 specific change is diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index d30fbff..308d9a4e 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -10292,7 +10292,8 @@ ix86_gimplify_va_arg (tree valist, tree type, gimpl= e_seq *pre_p, indirect_p =3D pass_by_reference (NULL, TYPE_MODE (type), type, false); if (indirect_p) type =3D build_pointer_type (type); - size =3D int_size_in_bytes (type); + bool empty_record =3D type && type_is_empty_record_p (type); + size =3D empty_record ? 0 : int_size_in_bytes (type); rsize =3D CEIL (size, UNITS_PER_WORD); nat_mode =3D type_natural_mode (type, NULL, false); which is for 64-bit variadic functions. I added a testcase, g++.dg/pr60336-2.C, for it. There are also other variadic tests in g++.dg/compat. If a target doesn't use std_gimplify_va_arg_expr, it needs similar change. I see that TARGET_GIMPLIFY_VA_ARG_EXPR is also defined in aarch64/aarch64.c alpha/alpha.c arm/arm.c epiphany/epiphany.c ia64/ia64.c mep/mep.c mips/mips.c msp430/msp430.c pa/pa.c rs6000/rs6000.c s390/s390.c sh/sh.c sparc/sparc.c spu/spu.c stormy16/stormy16.c tilegx/tilegx.c tilepro/tilepro.c visium/visium.c xtensa/xtensa.c I will prepare a separate patch for those targets to try. > Did you investigate the effect of this patch on a larger code base? I use it to bootstrap GCC. > More specifically does it only affect variadic functions? See above. > An entry for changes.html is warranted as well. > > I will prepare a patch for changes.html. Here is the updated patch with -Wpsabi warning: /export/gnu/import/git/sources/gcc/gcc/testsuite/g++.dg/abi/empty12.C:15:12: note: the ABI of passing empty record has changed in GCC 6 Thanks. --=20 H.J. --089e0111d6ec44131405267b9baa Content-Type: text/x-patch; charset=US-ASCII; name="0001-Add-TYPE_EMPTY_RECORD-for-C-empty-class.patch" Content-Disposition: attachment; filename="0001-Add-TYPE_EMPTY_RECORD-for-C-empty-class.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ihz6ar1g0 Content-length: 44242 RnJvbSAzY2I4OTNlMmM5YzA5NmViZWE4MmZkN2Y3MmQ1MjkyNmExMmQ3N2U0 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhq bC50b29sc0BnbWFpbC5jb20+CkRhdGU6IFN1biwgMTUgTm92IDIwMTUgMTM6 MTk6MDUgLTA4MDAKU3ViamVjdDogW1BBVENIXSBBZGQgVFlQRV9FTVBUWV9S RUNPUkQgZm9yIEMrKyBlbXB0eSBjbGFzcwoKRW1wdHkgcmVjb3JkIHNob3Vs ZCBiZSByZXR1cm5lZCBhbmQgcGFzc2VkIHRoZSBzYW1lIHdheSBpbiBDIGFu ZCBDKysuClRoaXMgcGF0Y2ggb3ZlcmxvYWRzIGEgYml0LCBzaWRlX2VmZmVj dHNfZmxhZywgaW4gdHJlZV9iYXNlIGZvciBDKysKZW1wdHkgY2xhc3MuICBN aWRkbGUtZW5kIGFuZCB4ODYgYmFja2VuZCBhcmUgdXBkYXRlZCB0byBpZ25v cmUgZW1wdHkKcmVjb3JkcyBmb3IgcGFyYW1ldGVyIHBhc3NpbmcgYW5kIGZ1 bmN0aW9uIHZhbHVlIHJldHVybi4gIE90aGVyIHRhcmdldHMKbWF5IG5lZWQg c2ltaWxhciBjaGFuZ2VzLgoKZ2V0X3JlZl9iYXNlX2FuZF9leHRlbnQgaXMg Y2hhbmdlZCB0byBzZXQgYml0c2l6ZSB0byAwIGZvciBlbXB0eSByZWNvcmRz CnNvIHRoYXQgd2hlbiByZWZfbWF5YmVfdXNlZF9ieV9jYWxsX3BfMSBjYWxs cyBnZXRfcmVmX2Jhc2VfYW5kX2V4dGVudCB0bwpnZXQgMCBhcyB0aGUgbWF4 aW11bSBzaXplIG9uIGVtcHR5IHJlY29yZC4gIE90aGVyd2lzZSwgZmluZF90 YWlsX2NhbGxzCndvbid0IHBlcmZvcm0gdGFpbCBjYWxsIG9wdGltaXphdGlv biBmb3IgZnVuY3Rpb25zIHdpdGggZW1wdHkgcmVjb3JkCnBhcmFtZXRlcnMs IGFzIHNob3duIGluIGcrKy5kZy9wcjYwMzM2LTEuQyBhbmQgZysrLmRnL3By NjAzMzYtMi5DLgoKZ2NjLwoKCVBSIGMrKy82MDMzNgoJUFIgbWlkZGxlLWVu ZC82NzIzOQoJUFIgdGFyZ2V0LzY4MzU1CgkqIGNhbGxzLmMgKGluaXRpYWxp emVfYXJndW1lbnRfaW5mb3JtYXRpb24pOiBSZXBsYWNlCgl0YXJnZXRtLmNh bGxzLmZ1bmN0aW9uX2FyZywgdGFyZ2V0bS5jYWxscy5mdW5jdGlvbl9pbmNv bWluZ19hcmcKCWFuZCB0YXJnZXRtLmNhbGxzLmZ1bmN0aW9uX2FyZ19hZHZh bmNlIHdpdGggZnVuY3Rpb25fYXJnLAoJZnVuY3Rpb25faW5jb21pbmdfYXJn IGFuZCBmdW5jdGlvbl9hcmdfYWR2YW5jZS4KCShleHBhbmRfY2FsbCk6IExp a2V3aXNlLgoJKGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlXzEpOiBMaWtld2lz ZS4KCShzdG9yZV9vbmVfYXJnKTogVXNlIDAgZm9yIGVtcHR5IHJlY29yZCBz aXplLiAgRG9uJ3QKCXB1c2ggMCBzaXplIGFyZ3VtZW50IG9udG8gc3RhY2su CgkobXVzdF9wYXNzX2luX3N0YWNrX3Zhcl9zaXplX29yX3BhZCk6IFJldHVy biBmYWxzZSBmb3IgZW1wdHkKCXJlY29yZC4KCSogZHNlLmMgKGdldF9jYWxs X2FyZ3MpOiBSZXBsYWNlIHRhcmdldG0uY2FsbHMuZnVuY3Rpb25fYXJnCglh bmQgdGFyZ2V0bS5jYWxscy5mdW5jdGlvbl9hcmdfYWR2YW5jZSB3aXRoIGZ1 bmN0aW9uX2FyZyBhbmQKCWZ1bmN0aW9uX2FyZ19hZHZhbmNlLgoJKiBleHBy LmMgKGJsb2NrX21vdmVfbGliY2FsbF9zYWZlX2Zvcl9jYWxsX3Bhcm0pOiBM aWtld2lzZS4KCSogZnVuY3Rpb24uYyAoYWdncmVnYXRlX3ZhbHVlX3ApOiBS ZXBsYWNlCgl0YXJnZXRtLmNhbGxzLnJldHVybl9pbl9tZW1vcnkgd2l0aCBy ZXR1cm5faW5fbWVtb3J5LgoJKGFzc2lnbl9wYXJtX2ZpbmRfZW50cnlfcnRs KTogUmVwbGFjZQoJdGFyZ2V0bS5jYWxscy5mdW5jdGlvbl9pbmNvbWluZ19h cmcgd2l0aCBmdW5jdGlvbl9pbmNvbWluZ19hcmcuCgkoYXNzaWduX3Bhcm1z KTogUmVwbGFjZSB0YXJnZXRtLmNhbGxzLmZ1bmN0aW9uX2FyZ19hZHZhbmNl IHdpdGgKCWZ1bmN0aW9uX2FyZ19hZHZhbmNlLgoJKGdpbXBsaWZ5X3BhcmFt ZXRlcnMpOiBSZXBsYWNlIHRhcmdldG0uY2FsbHMuZnVuY3Rpb25fYXJnX2Fk dmFuY2UKCXdpdGggZnVuY3Rpb25fYXJnX2FkdmFuY2UuCgkobG9jYXRlX2Fu ZF9wYWRfcGFybSk6IFVzZSAwIGZvciBlbXB0eSByZWNvcmQgc2l6ZS4KCSh3 YXJuX2VtcHR5X3JlY29yZCk6IE5ldyBmdW5jdGlvbi4KCShmdW5jdGlvbl9h cmdfYWR2YW5jZSk6IE5ldyB3cmFwcGVyIGZ1bmN0aW9uLgoJKGZ1bmN0aW9u X2FyZyk6IExpa2V3aXNlLgoJKGZ1bmN0aW9uX2luY29taW5nX2FyZyk6IExp a2V3aXNlLgoJKHJldHVybl9pbl9tZW1vcnkpOiBMaWtld2lzZS4KCSogbHRv LXN0cmVhbWVyLW91dC5jIChoYXNoX3RyZWUpOiBDYWxsIGhzdGF0ZS5hZGRf ZmxhZyB3aXRoCglUWVBFX0VNUFRZX1JFQ09SRCBmb3IgdHlwZXMuCgkqIHBy aW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IEFsc28gaGFuZGxlIFRZUEVfRU1Q VFlfUkVDT1JELgoJKiB1YnNhbi5jICh1YnNhbl90eXBlX2Rlc2NyaXB0b3Ip OiBMaWtld2lzZS4KCSogdGFyZ2V0LmggKGZ1bmN0aW9uX2FyZ19hZHZhbmNl KTogTmV3IHByb3RvdHlwZS4KCShmdW5jdGlvbl9hcmcpOiBMaWtld2lzZS4K CShmdW5jdGlvbl9pbmNvbWluZ19hcmcpOiBMaWtld2lzZS4KCShyZXR1cm5f aW5fbWVtb3J5KTogTGlrZXdpc2UuCgkqIHRhcmdob29rcy5jIChzdGRfZ2lt cGxpZnlfdmFfYXJnX2V4cHIpOiBVc2UgMCBmb3IgZW1wdHkgcmVjb3JkCglz aXplLgoJKiB0cmVlLWRmYS5jIChnZXRfcmVmX2Jhc2VfYW5kX2V4dGVudCk6 IExpa2V3aXNlLgoJKiB0cmVlLWNvcmUuaCAodHJlZV9iYXNlKTogTWVudGlv biBUWVBFX0VNUFRZX1JFQ09SRCBpbiBjb21tZW50cwoJZm9yIHNpZGVfZWZm ZWN0c19mbGFnLgoJKiB0cmVlLXN0cmVhbWVyLWluLmMgKHVucGFja190c19i YXNlX3ZhbHVlX2ZpZWxkcyk6IFN0cmVhbSBpbgoJVFlQRV9FTVBUWV9SRUNP UkQgZm9yIHR5cGVzLgoJKiB0cmVlLXN0cmVhbWVyLW91dC5jIChwYWNrX3Rz X2Jhc2VfdmFsdWVfZmllbGRzKTogU3RyZWFtIG91dAoJVFlQRV9FTVBUWV9S RUNPUkQgZm9yIHR5cGVzLgoJKiB0cmVlLmggKFRZUEVfRU1QVFlfUkVDT1JE KTogTmV3LgoJKHR5cGVfaXNfZW1wdHlfcmVjb3JkX3ApOiBOZXcgc3RhdGlj IGlubGluZSBmdW5jdGlvbi4KCSogdmFyLXRyYWNraW5nLmMgKHByZXBhcmVf Y2FsbF9hcmd1bWVudHMpOiBSZXBsYWNlCgl0YXJnZXRtLmNhbGxzLmZ1bmN0 aW9uX2FyZyBhbmQgdGFyZ2V0bS5jYWxscy5mdW5jdGlvbl9hcmdfYWR2YW5j ZQoJd2l0aCBmdW5jdGlvbl9hcmcgYW5kIGZ1bmN0aW9uX2FyZ19hZHZhbmNl LgoJKiBjb25maWcvaTM4Ni9pMzg2LmMgKGl4ODZfZ2ltcGxpZnlfdmFfYXJn KTogVXNlIDAgZm9yIGVtcHR5CglyZWNvcmQgc2l6ZS4KCmdjYy9jCgoJUFIg YysrLzYwMzM2CglQUiBtaWRkbGUtZW5kLzY3MjM5CglQUiB0YXJnZXQvNjgz NTUKCSogYy1hdXgtaW5mby5jIChnZW5fdHlwZSk6IEFkZCBUWVBFX0VNUFRZ X1JFQ09SRCBjaGVjay4KCmdjYy9jcC8KCglQUiBjKysvNjAzMzYKCVBSIG1p ZGRsZS1lbmQvNjcyMzkKCVBSIHRhcmdldC82ODM1NQoJKiBjbGFzcy5jIChm aW5pc2hfc3RydWN0XzEpOiBTZXQgVFlQRV9FTVBUWV9SRUNPUkQgd2l0aCBy ZXR1cm4KCXZhbHVlIGZyb20gaXNfcmVhbGx5X2VtcHR5X2NsYXNzICgpLgoK Z2NjL2x0by8KCglQUiBjKysvNjAzMzYKCVBSIG1pZGRsZS1lbmQvNjcyMzkK CVBSIHRhcmdldC82ODM1NQoJKiBsdG8uYyAoY29tcGFyZV90cmVlX3NjY3Nf MSk6IENhbGwgY29tcGFyZV92YWx1ZXMgd2l0aAoJVFlQRV9FTVBUWV9SRUNP UkQgZm9yIHR5cGVzLgoKZ2NjL3Rlc3RzdWl0ZS8KCglQUiBjKysvNjAzMzYK CVBSIG1pZGRsZS1lbmQvNjcyMzkKCVBSIHRhcmdldC82ODM1NQoJKiBnKysu ZGcvYWJpL2VtcHR5MTIuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9hYmkvZW1w dHkxMi5oOiBMaWtld2lzZS4KCSogZysrLmRnL2FiaS9lbXB0eTEyYS5jOiBM aWtld2lzZS4KCSogZysrLmRnL3ByNjAzMzYtMS5DOiBMaWtld2lzZS4KCSog ZysrLmRnL3ByNjAzMzYtMi5DOiBMaWtld2lzZS4KCSogZysrLmRnL3ByNjgz NTUuQzogTGlrZXdpc2UuCi0tLQogZ2NjL2MvYy1hdXgtaW5mby5jICAgICAg ICAgICAgICAgICAgfCAgMiArCiBnY2MvY2FsbHMuYyAgICAgICAgICAgICAg ICAgICAgICAgICB8IDc2ICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0K IGdjYy9jb25maWcvaTM4Ni9pMzg2LmMgICAgICAgICAgICAgIHwgIDMgKy0K IGdjYy9jcC9jbGFzcy5jICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKwog Z2NjL2RzZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArLQog Z2NjL2V4cHIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNSArLQog Z2NjL2Z1bmN0aW9uLmMgICAgICAgICAgICAgICAgICAgICAgfCA5OCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCiBnY2MvbHRvLXN0 cmVhbWVyLW91dC5jICAgICAgICAgICAgICB8ICAyICsKIGdjYy9sdG8vbHRv LmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKwogZ2NjL3ByaW50LXRy ZWUuYyAgICAgICAgICAgICAgICAgICAgfCAgMyArKwogZ2NjL3RhcmdldC5o ICAgICAgICAgICAgICAgICAgICAgICAgfCAgOCArKysKIGdjYy90YXJnaG9v a3MuYyAgICAgICAgICAgICAgICAgICAgIHwgIDUgKy0KIGdjYy90ZXN0c3Vp dGUvZysrLmRnL2FiaS9lbXB0eTEyLkMgIHwgMTcgKysrKysrKwogZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvYWJpL2VtcHR5MTIuaCAgfCAgOSArKysrCiBnY2Mv dGVzdHN1aXRlL2crKy5kZy9hYmkvZW1wdHkxMmEuYyB8ICA2ICsrKwogZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvcHI2MDMzNi0xLkMgICAgfCAxNyArKysrKysr CiBnY2MvdGVzdHN1aXRlL2crKy5kZy9wcjYwMzM2LTIuQyAgICB8IDI4ICsr KysrKysrKysrCiBnY2MvdGVzdHN1aXRlL2crKy5kZy9wcjY4MzU1LkMgICAg ICB8IDI0ICsrKysrKysrKwogZ2NjL3RyZWUtY29yZS5oICAgICAgICAgICAg ICAgICAgICAgfCAgMyArKwogZ2NjL3RyZWUtZGZhLmMgICAgICAgICAgICAg ICAgICAgICAgfCAgMiArCiBnY2MvdHJlZS1zdHJlYW1lci1pbi5jICAgICAg ICAgICAgICB8ICA1ICstCiBnY2MvdHJlZS1zdHJlYW1lci1vdXQuYyAgICAg ICAgICAgICB8ICA1ICstCiBnY2MvdHJlZS5oICAgICAgICAgICAgICAgICAg ICAgICAgICB8IDEyICsrKysrCiBnY2MvdWJzYW4uYyAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAzICstCiBnY2MvdmFyLXRyYWNraW5nLmMgICAgICAg ICAgICAgICAgICB8IDE4ICsrKy0tLS0KIDI1IGZpbGVzIGNoYW5nZWQsIDI5 NCBpbnNlcnRpb25zKCspLCA2NSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9hYmkvZW1wdHkxMi5DCiBj cmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYWJpL2Vt cHR5MTIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysr LmRnL2FiaS9lbXB0eTEyYS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvcHI2MDMzNi0xLkMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9wcjYwMzM2LTIuQwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL3ByNjgzNTUuQwoKZGlm ZiAtLWdpdCBhL2djYy9jL2MtYXV4LWluZm8uYyBiL2djYy9jL2MtYXV4LWlu Zm8uYwppbmRleCA3OWQ5ODUxLi45M2IwMDFiIDEwMDY0NAotLS0gYS9nY2Mv Yy9jLWF1eC1pbmZvLmMKKysrIGIvZ2NjL2MvYy1hdXgtaW5mby5jCkBAIC00 MzMsNiArNDMzLDggQEAgZ2VuX3R5cGUgKGNvbnN0IGNoYXIgKnJldF92YWws IHRyZWUgdCwgZm9ybWFsc19zdHlsZSBzdHlsZSkKICAgICByZXRfdmFsID0g Y29uY2F0ICgidm9sYXRpbGUgIiwgcmV0X3ZhbCwgTlVMTCk7CiAgIGlmIChU WVBFX1JFU1RSSUNUICh0KSkKICAgICByZXRfdmFsID0gY29uY2F0ICgicmVz dHJpY3QgIiwgcmV0X3ZhbCwgTlVMTCk7CisgIGlmIChUWVBFX0VNUFRZX1JF Q09SRCAodCkpCisgICAgcmV0X3ZhbCA9IGNvbmNhdCAoImVtcHR5LXJlY29y ZCAiLCByZXRfdmFsLCBOVUxMKTsKICAgcmV0dXJuIHJldF92YWw7CiB9CiAK ZGlmZiAtLWdpdCBhL2djYy9jYWxscy5jIGIvZ2NjL2NhbGxzLmMKaW5kZXgg MWViNGVjNy4uNTU3YzUxZSAxMDA2NDQKLS0tIGEvZ2NjL2NhbGxzLmMKKysr IGIvZ2NjL2NhbGxzLmMKQEAgLTEzOTksOCArMTM5OSw4IEBAIGluaXRpYWxp emVfYXJndW1lbnRfaW5mb3JtYXRpb24gKGludCBudW1fYWN0dWFscyBBVFRS SUJVVEVfVU5VU0VELAogICAgICAgYXJnc1tpXS51bnNpZ25lZHAgPSB1bnNp Z25lZHA7CiAgICAgICBhcmdzW2ldLm1vZGUgPSBtb2RlOwogCi0gICAgICBh cmdzW2ldLnJlZyA9IHRhcmdldG0uY2FsbHMuZnVuY3Rpb25fYXJnIChhcmdz X3NvX2ZhciwgbW9kZSwgdHlwZSwKLQkJCQkJCWFyZ3BvcyA8IG5fbmFtZWRf YXJncyk7CisgICAgICBhcmdzW2ldLnJlZyA9IGZ1bmN0aW9uX2FyZyAoYXJn c19zb19mYXIsIG1vZGUsIHR5cGUsCisJCQkJICBhcmdwb3MgPCBuX25hbWVk X2FyZ3MpOwogCiAgICAgICBpZiAoYXJnc1tpXS5yZWcgJiYgQ09OU1RfSU5U X1AgKGFyZ3NbaV0ucmVnKSkKIAl7CkBAIC0xNDEzLDggKzE0MTMsOCBAQCBp bml0aWFsaXplX2FyZ3VtZW50X2luZm9ybWF0aW9uIChpbnQgbnVtX2FjdHVh bHMgQVRUUklCVVRFX1VOVVNFRCwKIAkgYXJndW1lbnRzIGhhdmUgdG8gZ28g aW50byB0aGUgaW5jb21pbmcgcmVnaXN0ZXJzLiAgKi8KICAgICAgIGlmICh0 YXJnZXRtLmNhbGxzLmZ1bmN0aW9uX2luY29taW5nX2FyZyAhPSB0YXJnZXRt LmNhbGxzLmZ1bmN0aW9uX2FyZykKIAlhcmdzW2ldLnRhaWxfY2FsbF9yZWcK LQkgID0gdGFyZ2V0bS5jYWxscy5mdW5jdGlvbl9pbmNvbWluZ19hcmcgKGFy Z3Nfc29fZmFyLCBtb2RlLCB0eXBlLAotCQkJCQkJIGFyZ3BvcyA8IG5fbmFt ZWRfYXJncyk7CisJICA9IGZ1bmN0aW9uX2luY29taW5nX2FyZyAoYXJnc19z b19mYXIsIG1vZGUsIHR5cGUsCisJCQkJICAgYXJncG9zIDwgbl9uYW1lZF9h cmdzKTsKICAgICAgIGVsc2UKIAlhcmdzW2ldLnRhaWxfY2FsbF9yZWcgPSBh cmdzW2ldLnJlZzsKIApAQCAtMTQ3NSw4ICsxNDc1LDggQEAgaW5pdGlhbGl6 ZV9hcmd1bWVudF9pbmZvcm1hdGlvbiAoaW50IG51bV9hY3R1YWxzIEFUVFJJ QlVURV9VTlVTRUQsCiAgICAgICAvKiBJbmNyZW1lbnQgQVJHU19TT19GQVIs IHdoaWNoIGhhcyBpbmZvIGFib3V0IHdoaWNoIGFyZy1yZWdpc3RlcnMKIAkg aGF2ZSBiZWVuIHVzZWQsIGV0Yy4gICovCiAKLSAgICAgIHRhcmdldG0uY2Fs bHMuZnVuY3Rpb25fYXJnX2FkdmFuY2UgKGFyZ3Nfc29fZmFyLCBUWVBFX01P REUgKHR5cGUpLAotCQkJCQkgIHR5cGUsIGFyZ3BvcyA8IG5fbmFtZWRfYXJn cyk7CisgICAgICBmdW5jdGlvbl9hcmdfYWR2YW5jZSAoYXJnc19zb19mYXIs IFRZUEVfTU9ERSAodHlwZSksIHR5cGUsCisJCQkgICAgYXJncG9zIDwgbl9u YW1lZF9hcmdzKTsKICAgICB9CiB9CiAKQEAgLTMzMjgsMTQgKzMzMjgsMTEg QEAgZXhwYW5kX2NhbGwgKHRyZWUgZXhwLCBydHggdGFyZ2V0LCBpbnQgaWdu b3JlKQogICAgICAgLyogU2V0IHVwIG5leHQgYXJndW1lbnQgcmVnaXN0ZXIu ICBGb3Igc2libGluZyBjYWxscyBvbiBtYWNoaW5lcwogCSB3aXRoIHJlZ2lz dGVyIHdpbmRvd3MgdGhpcyBzaG91bGQgYmUgdGhlIGluY29taW5nIHJlZ2lz dGVyLiAgKi8KICAgICAgIGlmIChwYXNzID09IDApCi0JbmV4dF9hcmdfcmVn ID0gdGFyZ2V0bS5jYWxscy5mdW5jdGlvbl9pbmNvbWluZ19hcmcgKGFyZ3Nf c29fZmFyLAotCQkJCQkJCSAgICBWT0lEbW9kZSwKLQkJCQkJCQkgICAgdm9p ZF90eXBlX25vZGUsCi0JCQkJCQkJICAgIHRydWUpOworCW5leHRfYXJnX3Jl ZyA9IGZ1bmN0aW9uX2luY29taW5nX2FyZyAoYXJnc19zb19mYXIsIFZPSURt b2RlLAorCQkJCQkgICAgICB2b2lkX3R5cGVfbm9kZSwgdHJ1ZSk7CiAgICAg ICBlbHNlCi0JbmV4dF9hcmdfcmVnID0gdGFyZ2V0bS5jYWxscy5mdW5jdGlv bl9hcmcgKGFyZ3Nfc29fZmFyLAotCQkJCQkJICAgVk9JRG1vZGUsIHZvaWRf dHlwZV9ub2RlLAotCQkJCQkJICAgdHJ1ZSk7CisJbmV4dF9hcmdfcmVnID0g ZnVuY3Rpb25fYXJnIChhcmdzX3NvX2ZhciwgVk9JRG1vZGUsCisJCQkJICAg ICB2b2lkX3R5cGVfbm9kZSwgdHJ1ZSk7CiAKICAgICAgIGlmIChwYXNzID09 IDEgJiYgKHJldHVybl9mbGFncyAmIEVSRl9SRVRVUk5TX0FSRykpCiAJewpA QCAtMzk0Nyw4ICszOTQ0LDggQEAgZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWVf MSAoaW50IHJldHZhbCwgcnR4IG9yZ2Z1biwgcnR4IHZhbHVlLAogICAgICAg YXJndmVjW2NvdW50XS5tb2RlID0gUG1vZGU7CiAgICAgICBhcmd2ZWNbY291 bnRdLnBhcnRpYWwgPSAwOwogCi0gICAgICBhcmd2ZWNbY291bnRdLnJlZyA9 IHRhcmdldG0uY2FsbHMuZnVuY3Rpb25fYXJnIChhcmdzX3NvX2ZhciwKLQkJ CQkJCSAgICAgIFBtb2RlLCBOVUxMX1RSRUUsIHRydWUpOworICAgICAgYXJn dmVjW2NvdW50XS5yZWcgPSBmdW5jdGlvbl9hcmcgKGFyZ3Nfc29fZmFyLCBQ bW9kZSwgTlVMTF9UUkVFLAorCQkJCQl0cnVlKTsKICAgICAgIGdjY19hc3Nl cnQgKHRhcmdldG0uY2FsbHMuYXJnX3BhcnRpYWxfYnl0ZXMgKGFyZ3Nfc29f ZmFyLCBQbW9kZSwKIAkJCQkJCSAgIE5VTExfVFJFRSwgMSkgPT0gMCk7CiAK QEAgLTM5NjUsNyArMzk2Miw3IEBAIGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVl XzEgKGludCByZXR2YWwsIHJ0eCBvcmdmdW4sIHJ0eCB2YWx1ZSwKIAkgIHx8 IHJlZ19wYXJtX3N0YWNrX3NwYWNlID4gMCkKIAlhcmdzX3NpemUuY29uc3Rh bnQgKz0gYXJndmVjW2NvdW50XS5sb2NhdGUuc2l6ZS5jb25zdGFudDsKIAot ICAgICAgdGFyZ2V0bS5jYWxscy5mdW5jdGlvbl9hcmdfYWR2YW5jZSAoYXJn c19zb19mYXIsIFBtb2RlLCAodHJlZSkgMCwgdHJ1ZSk7CisgICAgICBmdW5j dGlvbl9hcmdfYWR2YW5jZSAoYXJnc19zb19mYXIsIFBtb2RlLCAodHJlZSkg MCwgdHJ1ZSk7CiAKICAgICAgIGNvdW50Kys7CiAgICAgfQpAQCAtNDAzMCw3 ICs0MDI3LDcgQEAgZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWVfMSAoaW50IHJl dHZhbCwgcnR4IG9yZ2Z1biwgcnR4IHZhbHVlLAogICAgICAgbW9kZSA9IHBy b21vdGVfZnVuY3Rpb25fbW9kZSAoTlVMTF9UUkVFLCBtb2RlLCAmdW5zaWdu ZWRfcCwgTlVMTF9UUkVFLCAwKTsKICAgICAgIGFyZ3ZlY1tjb3VudF0ubW9k ZSA9IG1vZGU7CiAgICAgICBhcmd2ZWNbY291bnRdLnZhbHVlID0gY29udmVy dF9tb2RlcyAobW9kZSwgR0VUX01PREUgKHZhbCksIHZhbCwgdW5zaWduZWRf cCk7Ci0gICAgICBhcmd2ZWNbY291bnRdLnJlZyA9IHRhcmdldG0uY2FsbHMu ZnVuY3Rpb25fYXJnIChhcmdzX3NvX2ZhciwgbW9kZSwKKyAgICAgIGFyZ3Zl Y1tjb3VudF0ucmVnID0gZnVuY3Rpb25fYXJnIChhcmdzX3NvX2ZhciwgbW9k ZSwKIAkJCQkJCSAgICAgIE5VTExfVFJFRSwgdHJ1ZSk7CiAKICAgICAgIGFy Z3ZlY1tjb3VudF0ucGFydGlhbApAQCAtNDA2MCw3ICs0MDU3LDcgQEAgZW1p dF9saWJyYXJ5X2NhbGxfdmFsdWVfMSAoaW50IHJldHZhbCwgcnR4IG9yZ2Z1 biwgcnR4IHZhbHVlLAogCQkJICAgICBHRVRfTU9ERV9TSVpFIChtb2RlKSA8 PSBVTklUU19QRVJfV09SRCk7CiAjZW5kaWYKIAotICAgICAgdGFyZ2V0bS5j YWxscy5mdW5jdGlvbl9hcmdfYWR2YW5jZSAoYXJnc19zb19mYXIsIG1vZGUs ICh0cmVlKSAwLCB0cnVlKTsKKyAgICAgIGZ1bmN0aW9uX2FyZ19hZHZhbmNl IChhcmdzX3NvX2ZhciwgbW9kZSwgKHRyZWUpIDAsIHRydWUpOwogICAgIH0K IAogICAvKiBJZiB0aGlzIG1hY2hpbmUgcmVxdWlyZXMgYW4gZXh0ZXJuYWwg ZGVmaW5pdGlvbiBmb3IgbGlicmFyeQpAQCAtNDQwNyw4ICs0NDA0LDcgQEAg ZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWVfMSAoaW50IHJldHZhbCwgcnR4IG9y Z2Z1biwgcnR4IHZhbHVlLAogCSAgICAgICBidWlsZF9mdW5jdGlvbl90eXBl ICh0Zm9tLCBOVUxMX1RSRUUpLAogCSAgICAgICBvcmlnaW5hbF9hcmdzX3Np emUuY29uc3RhbnQsIGFyZ3Nfc2l6ZS5jb25zdGFudCwKIAkgICAgICAgc3Ry dWN0X3ZhbHVlX3NpemUsCi0JICAgICAgIHRhcmdldG0uY2FsbHMuZnVuY3Rp b25fYXJnIChhcmdzX3NvX2ZhciwKLQkJCQkJICAgVk9JRG1vZGUsIHZvaWRf dHlwZV9ub2RlLCB0cnVlKSwKKwkgICAgICAgZnVuY3Rpb25fYXJnIChhcmdz X3NvX2ZhciwgVk9JRG1vZGUsIHZvaWRfdHlwZV9ub2RlLCB0cnVlKSwKIAkg ICAgICAgdmFscmVnLAogCSAgICAgICBvbGRfaW5oaWJpdF9kZWZlcl9wb3Ag KyAxLCBjYWxsX2Z1c2FnZSwgZmxhZ3MsIGFyZ3Nfc29fZmFyKTsKIApAQCAt NDg0Myw3ICs0ODM5LDEwIEBAIHN0b3JlX29uZV9hcmcgKHN0cnVjdCBhcmdf ZGF0YSAqYXJnLCBydHggYXJnYmxvY2ssIGludCBmbGFncywKIAkgTm90ZSB0 aGF0IGluIEMgdGhlIGRlZmF1bHQgYXJndW1lbnQgcHJvbW90aW9ucwogCSB3 aWxsIHByZXZlbnQgc3VjaCBtaXNtYXRjaGVzLiAgKi8KIAotICAgICAgc2l6 ZSA9IEdFVF9NT0RFX1NJWkUgKGFyZy0+bW9kZSk7CisgICAgICBpZiAodHlw ZV9pc19lbXB0eV9yZWNvcmRfcCAoVFJFRV9UWVBFIChwdmFsKSkpCisJc2l6 ZSA9IDA7CisgICAgICBlbHNlCisJc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKGFy Zy0+bW9kZSk7CiAgICAgICAvKiBDb21wdXRlIGhvdyBtdWNoIHNwYWNlIHRo ZSBwdXNoIGluc3RydWN0aW9uIHdpbGwgcHVzaC4KIAkgT24gbWFueSBtYWNo aW5lcywgcHVzaGluZyBhIGJ5dGUgd2lsbCBhZHZhbmNlIHRoZSBzdGFjawog CSBwb2ludGVyIGJ5IGEgaGFsZndvcmQuICAqLwpAQCAtNDg3MywxMCArNDg3 MiwxNCBAQCBzdG9yZV9vbmVfYXJnIChzdHJ1Y3QgYXJnX2RhdGEgKmFyZywg cnR4IGFyZ2Jsb2NrLCBpbnQgZmxhZ3MsCiAKICAgICAgIC8qIFRoaXMgaXNu J3QgYWxyZWFkeSB3aGVyZSB3ZSB3YW50IGl0IG9uIHRoZSBzdGFjaywgc28g cHV0IGl0IHRoZXJlLgogCSBUaGlzIGNhbiBlaXRoZXIgYmUgZG9uZSB3aXRo IHB1c2ggb3IgY29weSBpbnNucy4gICovCi0gICAgICBpZiAoIWVtaXRfcHVz aF9pbnNuIChhcmctPnZhbHVlLCBhcmctPm1vZGUsIFRSRUVfVFlQRSAocHZh bCksIE5VTExfUlRYLAotCQkgICAgICBwYXJtX2FsaWduLCBwYXJ0aWFsLCBy ZWcsIHVzZWQgLSBzaXplLCBhcmdibG9jaywKLQkJICAgICAgQVJHU19TSVpF X1JUWCAoYXJnLT5sb2NhdGUub2Zmc2V0KSwgcmVnX3Bhcm1fc3RhY2tfc3Bh Y2UsCi0JCSAgICAgIEFSR1NfU0laRV9SVFggKGFyZy0+bG9jYXRlLmFsaWdu bWVudF9wYWQpLCB0cnVlKSkKKyAgICAgIGlmICh1c2VkCisJICAmJiAhZW1p dF9wdXNoX2luc24gKGFyZy0+dmFsdWUsIGFyZy0+bW9kZSwgVFJFRV9UWVBF IChwdmFsKSwKKwkJCSAgICAgIE5VTExfUlRYLCBwYXJtX2FsaWduLCBwYXJ0 aWFsLCByZWcsCisJCQkgICAgICB1c2VkIC0gc2l6ZSwgYXJnYmxvY2ssCisJ CQkgICAgICBBUkdTX1NJWkVfUlRYIChhcmctPmxvY2F0ZS5vZmZzZXQpLAor CQkJICAgICAgcmVnX3Bhcm1fc3RhY2tfc3BhY2UsCisJCQkgICAgICBBUkdT X1NJWkVfUlRYIChhcmctPmxvY2F0ZS5hbGlnbm1lbnRfcGFkKSwKKwkJCSAg ICAgIHRydWUpKQogCXNpYmNhbGxfZmFpbHVyZSA9IDE7CiAKICAgICAgIC8q IFVubGVzcyB0aGlzIGlzIGEgcGFydGlhbGx5LWluLXJlZ2lzdGVyIGFyZ3Vt ZW50LCB0aGUgYXJndW1lbnQgaXMgbm93CkBAIC00OTA4LDEwICs0OTExLDE1 IEBAIHN0b3JlX29uZV9hcmcgKHN0cnVjdCBhcmdfZGF0YSAqYXJnLCBydHgg YXJnYmxvY2ssIGludCBmbGFncywKIAl7CiAJICAvKiBQVVNIX1JPVU5ESU5H IGhhcyBubyBlZmZlY3Qgb24gdXMsIGJlY2F1c2UgZW1pdF9wdXNoX2luc24K IAkgICAgIGZvciBCTEttb2RlIGlzIGNhcmVmdWwgdG8gYXZvaWQgaXQuICAq LworCSAgYm9vbCBlbXB0eV9yZWNvcmQgPSB0eXBlX2lzX2VtcHR5X3JlY29y ZF9wIChUUkVFX1RZUEUgKHB2YWwpKTsKIAkgIGV4Y2VzcyA9IChhcmctPmxv Y2F0ZS5zaXplLmNvbnN0YW50Ci0JCSAgICAtIGludF9zaXplX2luX2J5dGVz IChUUkVFX1RZUEUgKHB2YWwpKQorCQkgICAgLSAoZW1wdHlfcmVjb3JkCisJ CSAgICAgICA/IDAKKwkJICAgICAgIDogaW50X3NpemVfaW5fYnl0ZXMgKFRS RUVfVFlQRSAocHZhbCkpKQogCQkgICAgKyBwYXJ0aWFsKTsKLQkgIHNpemVf cnR4ID0gZXhwYW5kX2V4cHIgKHNpemVfaW5fYnl0ZXMgKFRSRUVfVFlQRSAo cHZhbCkpLAorCSAgc2l6ZV9ydHggPSBleHBhbmRfZXhwciAoKGVtcHR5X3Jl Y29yZAorCQkJCSAgID8gc2l6ZV96ZXJvX25vZGUKKwkJCQkgICA6IHNpemVf aW5fYnl0ZXMgKFRSRUVfVFlQRSAocHZhbCkpKSwKIAkJCQkgIE5VTExfUlRY LCBUWVBFX01PREUgKHNpemV0eXBlKSwKIAkJCQkgIEVYUEFORF9OT1JNQUwp OwogCX0KQEAgLTQ5ODYsMTAgKzQ5OTQsMTMgQEAgc3RvcmVfb25lX2FyZyAo c3RydWN0IGFyZ19kYXRhICphcmcsIHJ0eCBhcmdibG9jaywgaW50IGZsYWdz LAogCSAgICB9CiAJfQogCi0gICAgICBlbWl0X3B1c2hfaW5zbiAoYXJnLT52 YWx1ZSwgYXJnLT5tb2RlLCBUUkVFX1RZUEUgKHB2YWwpLCBzaXplX3J0eCwK LQkJICAgICAgcGFybV9hbGlnbiwgcGFydGlhbCwgcmVnLCBleGNlc3MsIGFy Z2Jsb2NrLAotCQkgICAgICBBUkdTX1NJWkVfUlRYIChhcmctPmxvY2F0ZS5v ZmZzZXQpLCByZWdfcGFybV9zdGFja19zcGFjZSwKLQkJICAgICAgQVJHU19T SVpFX1JUWCAoYXJnLT5sb2NhdGUuYWxpZ25tZW50X3BhZCksIGZhbHNlKTsK KyAgICAgIGlmICghQ09OU1RfSU5UX1AgKHNpemVfcnR4KSB8fCBJTlRWQUwg KHNpemVfcnR4KSAhPSAwKQorCWVtaXRfcHVzaF9pbnNuIChhcmctPnZhbHVl LCBhcmctPm1vZGUsIFRSRUVfVFlQRSAocHZhbCksCisJCQlzaXplX3J0eCwg cGFybV9hbGlnbiwgcGFydGlhbCwgcmVnLCBleGNlc3MsCisJCQlhcmdibG9j aywgQVJHU19TSVpFX1JUWCAoYXJnLT5sb2NhdGUub2Zmc2V0KSwKKwkJCXJl Z19wYXJtX3N0YWNrX3NwYWNlLAorCQkJQVJHU19TSVpFX1JUWCAoYXJnLT5s b2NhdGUuYWxpZ25tZW50X3BhZCksCisJCQlmYWxzZSk7CiAKICAgICAgIC8q IFVubGVzcyB0aGlzIGlzIGEgcGFydGlhbGx5LWluLXJlZ2lzdGVyIGFyZ3Vt ZW50LCB0aGUgYXJndW1lbnQgaXMgbm93CiAJIGluIHRoZSBzdGFjay4KQEAg LTUwNjcsNiArNTA3OCw5IEBAIG11c3RfcGFzc19pbl9zdGFja192YXJfc2l6 ZV9vcl9wYWQgKG1hY2hpbmVfbW9kZSBtb2RlLCBjb25zdF90cmVlIHR5cGUp CiAgIGlmIChUUkVFX0FERFJFU1NBQkxFICh0eXBlKSkKICAgICByZXR1cm4g dHJ1ZTsKIAorICBpZiAodHlwZV9pc19lbXB0eV9yZWNvcmRfcCAodHlwZSkp CisgICAgcmV0dXJuIGZhbHNlOworCiAgIC8qIElmIHRoZSBwYWRkaW5nIGFu ZCBtb2RlIG9mIHRoZSB0eXBlIGlzIHN1Y2ggdGhhdCBhIGNvcHkgaW50bwog ICAgICBhIHJlZ2lzdGVyIHdvdWxkIHB1dCBpdCBpbnRvIHRoZSB3cm9uZyBw YXJ0IG9mIHRoZSByZWdpc3Rlci4gICovCiAgIGlmIChtb2RlID09IEJMS21v ZGUKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LmMgYi9nY2Mv Y29uZmlnL2kzODYvaTM4Ni5jCmluZGV4IGQzMGZiZmYuLjMwOGQ5YTRlIDEw MDY0NAotLS0gYS9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCisrKyBiL2djYy9j b25maWcvaTM4Ni9pMzg2LmMKQEAgLTEwMjkyLDcgKzEwMjkyLDggQEAgaXg4 Nl9naW1wbGlmeV92YV9hcmcgKHRyZWUgdmFsaXN0LCB0cmVlIHR5cGUsIGdp bXBsZV9zZXEgKnByZV9wLAogICBpbmRpcmVjdF9wID0gcGFzc19ieV9yZWZl cmVuY2UgKE5VTEwsIFRZUEVfTU9ERSAodHlwZSksIHR5cGUsIGZhbHNlKTsK ICAgaWYgKGluZGlyZWN0X3ApCiAgICAgdHlwZSA9IGJ1aWxkX3BvaW50ZXJf dHlwZSAodHlwZSk7Ci0gIHNpemUgPSBpbnRfc2l6ZV9pbl9ieXRlcyAodHlw ZSk7CisgIGJvb2wgZW1wdHlfcmVjb3JkID0gdHlwZSAmJiB0eXBlX2lzX2Vt cHR5X3JlY29yZF9wICh0eXBlKTsKKyAgc2l6ZSA9IGVtcHR5X3JlY29yZCA/ IDAgOiBpbnRfc2l6ZV9pbl9ieXRlcyAodHlwZSk7CiAgIHJzaXplID0gQ0VJ TCAoc2l6ZSwgVU5JVFNfUEVSX1dPUkQpOwogCiAgIG5hdF9tb2RlID0gdHlw ZV9uYXR1cmFsX21vZGUgKHR5cGUsIE5VTEwsIGZhbHNlKTsKZGlmZiAtLWdp dCBhL2djYy9jcC9jbGFzcy5jIGIvZ2NjL2NwL2NsYXNzLmMKaW5kZXggMjE2 YTMwMS4uZDk3YWFlNiAxMDA2NDQKLS0tIGEvZ2NjL2NwL2NsYXNzLmMKKysr IGIvZ2NjL2NwL2NsYXNzLmMKQEAgLTY4MDIsNiArNjgwMiw4IEBAIGZpbmlz aF9zdHJ1Y3RfMSAodHJlZSB0KQogCSAgVFlQRV9UUkFOU1BBUkVOVF9BR0dS ICh0KSA9IDA7CiAJfQogICAgIH0KKworICBUWVBFX0VNUFRZX1JFQ09SRCAo dCkgPSBpc19yZWFsbHlfZW1wdHlfY2xhc3MgKHQpOwogfQogCiAvKiBJbnNl cnQgRklFTERTIGludG8gVCBmb3IgdGhlIHNvcnRlZCBjYXNlIGlmIHRoZSBG SUVMRFMgY291bnQgaXMKZGlmZiAtLWdpdCBhL2djYy9kc2UuYyBiL2djYy9k c2UuYwppbmRleCAzNWVlZjcxLi41OTQxMDZmIDEwMDY0NAotLS0gYS9nY2Mv ZHNlLmMKKysrIGIvZ2NjL2RzZS5jCkBAIC0yMzY2LDcgKzIzNjYsNyBAQCBn ZXRfY2FsbF9hcmdzIChydHggY2FsbF9pbnNuLCB0cmVlIGZuLCBydHggKmFy Z3MsIGludCBuYXJncykKICAgICB7CiAgICAgICBtYWNoaW5lX21vZGUgbW9k ZSA9IFRZUEVfTU9ERSAoVFJFRV9WQUxVRSAoYXJnKSk7CiAgICAgICBydHgg cmVnLCBsaW5rLCB0bXA7Ci0gICAgICByZWcgPSB0YXJnZXRtLmNhbGxzLmZ1 bmN0aW9uX2FyZyAoYXJnc19zb19mYXIsIG1vZGUsIE5VTExfVFJFRSwgdHJ1 ZSk7CisgICAgICByZWcgPSBmdW5jdGlvbl9hcmcgKGFyZ3Nfc29fZmFyLCBt b2RlLCBOVUxMX1RSRUUsIHRydWUpOwogICAgICAgaWYgKCFyZWcgfHwgIVJF R19QIChyZWcpIHx8IEdFVF9NT0RFIChyZWcpICE9IG1vZGUKIAkgIHx8IEdF VF9NT0RFX0NMQVNTIChtb2RlKSAhPSBNT0RFX0lOVCkKIAlyZXR1cm4gZmFs c2U7CkBAIC0yNDAwLDcgKzI0MDAsNyBAQCBnZXRfY2FsbF9hcmdzIChydHgg Y2FsbF9pbnNuLCB0cmVlIGZuLCBydHggKmFyZ3MsIGludCBuYXJncykKICAg ICAgIGlmICh0bXApCiAJYXJnc1tpZHhdID0gdG1wOwogCi0gICAgICB0YXJn ZXRtLmNhbGxzLmZ1bmN0aW9uX2FyZ19hZHZhbmNlIChhcmdzX3NvX2Zhciwg bW9kZSwgTlVMTF9UUkVFLCB0cnVlKTsKKyAgICAgIGZ1bmN0aW9uX2FyZ19h ZHZhbmNlIChhcmdzX3NvX2ZhciwgbW9kZSwgTlVMTF9UUkVFLCB0cnVlKTsK ICAgICB9CiAgIGlmIChhcmcgIT0gdm9pZF9saXN0X25vZGUgfHwgaWR4ICE9 IG5hcmdzKQogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2djYy9l eHByLmMgYi9nY2MvZXhwci5jCmluZGV4IGJkNDNkYzQuLjM4NDU4MWEgMTAw NjQ0Ci0tLSBhL2djYy9leHByLmMKKysrIGIvZ2NjL2V4cHIuYwpAQCAtMTE5 OCwxMyArMTE5OCwxMiBAQCBibG9ja19tb3ZlX2xpYmNhbGxfc2FmZV9mb3Jf Y2FsbF9wYXJtICh2b2lkKQogICAgIGZvciAoIDsgYXJnICE9IHZvaWRfbGlz dF9ub2RlIDsgYXJnID0gVFJFRV9DSEFJTiAoYXJnKSkKICAgICAgIHsKIAlt YWNoaW5lX21vZGUgbW9kZSA9IFRZUEVfTU9ERSAoVFJFRV9WQUxVRSAoYXJn KSk7Ci0JcnR4IHRtcCA9IHRhcmdldG0uY2FsbHMuZnVuY3Rpb25fYXJnIChh cmdzX3NvX2ZhciwgbW9kZSwKLQkJCQkJICAgICAgTlVMTF9UUkVFLCB0cnVl KTsKKwlydHggdG1wID0gZnVuY3Rpb25fYXJnIChhcmdzX3NvX2ZhciwgbW9k ZSwgTlVMTF9UUkVFLCB0cnVlKTsKIAlpZiAoIXRtcCB8fCAhUkVHX1AgKHRt cCkpCiAJICByZXR1cm4gZmFsc2U7CiAJaWYgKHRhcmdldG0uY2FsbHMuYXJn X3BhcnRpYWxfYnl0ZXMgKGFyZ3Nfc29fZmFyLCBtb2RlLCBOVUxMLCAxKSkK IAkgIHJldHVybiBmYWxzZTsKLQl0YXJnZXRtLmNhbGxzLmZ1bmN0aW9uX2Fy Z19hZHZhbmNlIChhcmdzX3NvX2ZhciwgbW9kZSwKKwlmdW5jdGlvbl9hcmdf YWR2YW5jZSAoYXJnc19zb19mYXIsIG1vZGUsCiAJCQkJCSAgICBOVUxMX1RS RUUsIHRydWUpOwogICAgICAgfQogICB9CmRpZmYgLS1naXQgYS9nY2MvZnVu Y3Rpb24uYyBiL2djYy9mdW5jdGlvbi5jCmluZGV4IGI1MTNlYWQuLmVjY2Q5 NjggMTAwNjQ0Ci0tLSBhL2djYy9mdW5jdGlvbi5jCisrKyBiL2djYy9mdW5j dGlvbi5jCkBAIC0yMDc0LDcgKzIwNzQsNyBAQCBhZ2dyZWdhdGVfdmFsdWVf cCAoY29uc3RfdHJlZSBleHAsIGNvbnN0X3RyZWUgZm50eXBlKQogICBpZiAo ZmxhZ19wY2Nfc3RydWN0X3JldHVybiAmJiBBR0dSRUdBVEVfVFlQRV9QICh0 eXBlKSkKICAgICByZXR1cm4gMTsKIAotICBpZiAodGFyZ2V0bS5jYWxscy5y ZXR1cm5faW5fbWVtb3J5ICh0eXBlLCBmbnR5cGUpKQorICBpZiAocmV0dXJu X2luX21lbW9yeSAodHlwZSwgZm50eXBlKSkKICAgICByZXR1cm4gMTsKIAog ICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBzdWl0YWJsZSBjYWxsLWNsb2JiZXJl ZCByZWdzIHRvIHJldHVybgpAQCAtMjUyNCwxMCArMjUyNCwxMCBAQCBhc3Np Z25fcGFybV9maW5kX2VudHJ5X3J0bCAoc3RydWN0IGFzc2lnbl9wYXJtX2Rh dGFfYWxsICphbGwsCiAgICAgICByZXR1cm47CiAgICAgfQogCi0gIGVudHJ5 X3Bhcm0gPSB0YXJnZXRtLmNhbGxzLmZ1bmN0aW9uX2luY29taW5nX2FyZyAo YWxsLT5hcmdzX3NvX2ZhciwKLQkJCQkJCSAgICBkYXRhLT5wcm9tb3RlZF9t b2RlLAotCQkJCQkJICAgIGRhdGEtPnBhc3NlZF90eXBlLAotCQkJCQkJICAg IGRhdGEtPm5hbWVkX2FyZyk7CisgIGVudHJ5X3Bhcm0gPSBmdW5jdGlvbl9p bmNvbWluZ19hcmcgKGFsbC0+YXJnc19zb19mYXIsCisJCQkJICAgICAgZGF0 YS0+cHJvbW90ZWRfbW9kZSwKKwkJCQkgICAgICBkYXRhLT5wYXNzZWRfdHlw ZSwKKwkJCQkgICAgICBkYXRhLT5uYW1lZF9hcmcpOwogCiAgIGlmIChlbnRy eV9wYXJtID09IDApCiAgICAgZGF0YS0+cHJvbW90ZWRfbW9kZSA9IGRhdGEt PnBhc3NlZF9tb2RlOwpAQCAtMjU1MSw5ICsyNTUxLDkgQEAgYXNzaWduX3Bh cm1fZmluZF9lbnRyeV9ydGwgKHN0cnVjdCBhc3NpZ25fcGFybV9kYXRhX2Fs bCAqYWxsLAogICAgICAgaWYgKHRhcmdldG0uY2FsbHMucHJldGVuZF9vdXRn b2luZ192YXJhcmdzX25hbWVkIChhbGwtPmFyZ3Nfc29fZmFyKSkKIAl7CiAJ ICBydHggdGVtOwotCSAgdGVtID0gdGFyZ2V0bS5jYWxscy5mdW5jdGlvbl9p bmNvbWluZ19hcmcgKGFsbC0+YXJnc19zb19mYXIsCi0JCQkJCQkgICAgIGRh dGEtPnByb21vdGVkX21vZGUsCi0JCQkJCQkgICAgIGRhdGEtPnBhc3NlZF90 eXBlLCB0cnVlKTsKKwkgIHRlbSA9IGZ1bmN0aW9uX2luY29taW5nX2FyZyAo YWxsLT5hcmdzX3NvX2ZhciwKKwkJCQkgICAgICAgZGF0YS0+cHJvbW90ZWRf bW9kZSwKKwkJCQkgICAgICAgZGF0YS0+cGFzc2VkX3R5cGUsIHRydWUpOwog CSAgaW5fcmVncyA9IHRlbSAhPSBOVUxMOwogCX0KICAgICB9CkBAIC0zNzkx LDggKzM3OTEsOCBAQCBhc3NpZ25fcGFybXMgKHRyZWUgZm5kZWNsKQogCX0K IAogICAgICAgLyogVXBkYXRlIGluZm8gb24gd2hlcmUgbmV4dCBhcmcgYXJy aXZlcyBpbiByZWdpc3RlcnMuICAqLwotICAgICAgdGFyZ2V0bS5jYWxscy5m dW5jdGlvbl9hcmdfYWR2YW5jZSAoYWxsLmFyZ3Nfc29fZmFyLCBkYXRhLnBy b21vdGVkX21vZGUsCi0JCQkJCSAgZGF0YS5wYXNzZWRfdHlwZSwgZGF0YS5u YW1lZF9hcmcpOworICAgICAgZnVuY3Rpb25fYXJnX2FkdmFuY2UgKGFsbC5h cmdzX3NvX2ZhciwgZGF0YS5wcm9tb3RlZF9tb2RlLAorCQkJICAgIGRhdGEu cGFzc2VkX3R5cGUsIGRhdGEubmFtZWRfYXJnKTsKIAogICAgICAgaWYgKFBP SU5URVJfQk9VTkRTX1RZUEVfUCAoZGF0YS5wYXNzZWRfdHlwZSkpCiAJYm91 bmRfbm8rKzsKQEAgLTM5ODgsOCArMzk4OCw4IEBAIGdpbXBsaWZ5X3BhcmFt ZXRlcnMgKHZvaWQpCiAJY29udGludWU7CiAKICAgICAgIC8qIFVwZGF0ZSBp bmZvIG9uIHdoZXJlIG5leHQgYXJnIGFycml2ZXMgaW4gcmVnaXN0ZXJzLiAg Ki8KLSAgICAgIHRhcmdldG0uY2FsbHMuZnVuY3Rpb25fYXJnX2FkdmFuY2Ug KGFsbC5hcmdzX3NvX2ZhciwgZGF0YS5wcm9tb3RlZF9tb2RlLAotCQkJCQkg IGRhdGEucGFzc2VkX3R5cGUsIGRhdGEubmFtZWRfYXJnKTsKKyAgICAgIGZ1 bmN0aW9uX2FyZ19hZHZhbmNlIChhbGwuYXJnc19zb19mYXIsIGRhdGEucHJv bW90ZWRfbW9kZSwKKwkJCSAgICBkYXRhLnBhc3NlZF90eXBlLCBkYXRhLm5h bWVkX2FyZyk7CiAKICAgICAgIC8qID8/PyBPbmNlIHVwb24gYSB0aW1lIHZh cmlhYmxlX3NpemUgc3R1ZmZlZCBwYXJhbWV0ZXIgbGlzdAogCSBTQVZFX0VY UFJzIChhbW9uZ3N0IG90aGVycykgb250byBhIHBlbmRpbmcgc2l6ZXMgbGlz dC4gIFRoaXMKQEAgLTQxMzIsOCArNDEzMiwxMSBAQCBsb2NhdGVfYW5kX3Bh ZF9wYXJtIChtYWNoaW5lX21vZGUgcGFzc2VkX21vZGUsIHRyZWUgdHlwZSwg aW50IGluX3JlZ3MsCiAKICAgcGFydF9zaXplX2luX3JlZ3MgPSAocmVnX3Bh cm1fc3RhY2tfc3BhY2UgPT0gMCA/IHBhcnRpYWwgOiAwKTsKIAotICBzaXpl dHJlZQotICAgID0gdHlwZSA/IHNpemVfaW5fYnl0ZXMgKHR5cGUpIDogc2l6 ZV9pbnQgKEdFVF9NT0RFX1NJWkUgKHBhc3NlZF9tb2RlKSk7CisgIGlmICh0 eXBlKQorICAgIHNpemV0cmVlID0gKHR5cGVfaXNfZW1wdHlfcmVjb3JkX3Ag KHR5cGUpCisJCT8gc2l6ZV96ZXJvX25vZGUgOiBzaXplX2luX2J5dGVzICh0 eXBlKSk7CisgIGVsc2UKKyAgICBzaXpldHJlZSA9IHNpemVfaW50IChHRVRf TU9ERV9TSVpFIChwYXNzZWRfbW9kZSkpOwogICB3aGVyZV9wYWQgPSBGVU5D VElPTl9BUkdfUEFERElORyAocGFzc2VkX21vZGUsIHR5cGUpOwogICBib3Vu ZGFyeSA9IHRhcmdldG0uY2FsbHMuZnVuY3Rpb25fYXJnX2JvdW5kYXJ5IChw YXNzZWRfbW9kZSwgdHlwZSk7CiAgIHJvdW5kX2JvdW5kYXJ5ID0gdGFyZ2V0 bS5jYWxscy5mdW5jdGlvbl9hcmdfcm91bmRfYm91bmRhcnkgKHBhc3NlZF9t b2RlLApAQCAtNjg2Miw1ICs2ODY1LDcyIEBAIG1ha2VfcGFzc19tYXRjaF9h c21fY29uc3RyYWludHMgKGdjYzo6Y29udGV4dCAqY3R4dCkKICAgcmV0dXJu IG5ldyBwYXNzX21hdGNoX2FzbV9jb25zdHJhaW50cyAoY3R4dCk7CiB9CiAK K3N0YXRpYyB2b2lkCit3YXJuX2VtcHR5X3JlY29yZCAodm9pZCkKK3sKKyAg aWYgKHdhcm5fcHNhYmkpCisgICAgaW5mb3JtIChpbnB1dF9sb2NhdGlvbiwg InRoZSBBQkkgb2YgcGFzc2luZyBlbXB0eSByZWNvcmQgaGFzIgorCSAgICAi IGNoYW5nZWQgaW4gR0NDIDYiKTsKK30KKworLyogV3JhcHBlciBmb3IgdGFy Z2V0bS5jYWxscy5mdW5jdGlvbl9hcmdfYWR2YW5jZS4gICovCisKK3ZvaWQK K2Z1bmN0aW9uX2FyZ19hZHZhbmNlIChjdW11bGF0aXZlX2FyZ3NfdCBjYSwg bWFjaGluZV9tb2RlIG1vZGUsCisJCSAgICAgIGNvbnN0X3RyZWUgdHlwZSwg Ym9vbCBuYW1lZCkKK3sKKyAgaWYgKHR5cGUgJiYgdHlwZV9pc19lbXB0eV9y ZWNvcmRfcCAodHlwZSkpCisgICAgeworICAgICAgd2Fybl9lbXB0eV9yZWNv cmQgKCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIHRhcmdldG0uY2Fs bHMuZnVuY3Rpb25fYXJnX2FkdmFuY2UgKGNhLCBtb2RlLCB0eXBlLCBuYW1l ZCk7Cit9CisKKy8qIFdyYXBwZXIgZm9yIHRhcmdldG0uY2FsbHMuZnVuY3Rp b25fYXJnLiAgKi8KKworcnR4CitmdW5jdGlvbl9hcmcgKGN1bXVsYXRpdmVf YXJnc190IGNhLCBtYWNoaW5lX21vZGUgbW9kZSwgY29uc3RfdHJlZSB0eXBl LAorCSAgICAgIGJvb2wgbmFtZWQpCit7CisgIGlmICh0eXBlICYmIHR5cGVf aXNfZW1wdHlfcmVjb3JkX3AgKHR5cGUpKQorICAgIHsKKyAgICAgIHdhcm5f ZW1wdHlfcmVjb3JkICgpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor CisgIHJldHVybiB0YXJnZXRtLmNhbGxzLmZ1bmN0aW9uX2FyZyAoY2EsIG1v ZGUsIHR5cGUsIG5hbWVkKTsKK30KKworLyogV3JhcHBlciBmb3IgdGFyZ2V0 bS5jYWxscy5mdW5jdGlvbl9pbmNvbWluZ19hcmcuICAqLworCitydHgKK2Z1 bmN0aW9uX2luY29taW5nX2FyZyAoY3VtdWxhdGl2ZV9hcmdzX3QgY2EsIG1h Y2hpbmVfbW9kZSBtb2RlLAorCQkgICAgICAgY29uc3RfdHJlZSB0eXBlLCBi b29sIG5hbWVkKQoreworICBpZiAodHlwZSAmJiB0eXBlX2lzX2VtcHR5X3Jl Y29yZF9wICh0eXBlKSkKKyAgICB7CisgICAgICB3YXJuX2VtcHR5X3JlY29y ZCAoKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICByZXR1cm4g dGFyZ2V0bS5jYWxscy5mdW5jdGlvbl9pbmNvbWluZ19hcmcgKGNhLCBtb2Rl LCB0eXBlLCBuYW1lZCk7Cit9CisKKy8qIFdyYXBwZXIgZm9yIHRhcmdldG0u Y2FsbHMucmV0dXJuX2luX21lbW9yeS4gICovCisKK2Jvb2wKK3JldHVybl9p bl9tZW1vcnkgKGNvbnN0X3RyZWUgdHlwZSwgY29uc3RfdHJlZSBmbnR5cGUp Cit7CisgIGlmICh0eXBlICYmIHR5cGVfaXNfZW1wdHlfcmVjb3JkX3AgKHR5 cGUpKQorICAgIHsKKyAgICAgIHdhcm5fZW1wdHlfcmVjb3JkICgpOworICAg ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICByZXR1cm4gdGFyZ2V0bS5j YWxscy5yZXR1cm5faW5fbWVtb3J5ICh0eXBlLCBmbnR5cGUpOworfQorCiAK ICNpbmNsdWRlICJndC1mdW5jdGlvbi5oIgpkaWZmIC0tZ2l0IGEvZ2NjL2x0 by1zdHJlYW1lci1vdXQuYyBiL2djYy9sdG8tc3RyZWFtZXItb3V0LmMKaW5k ZXggYTg3NDg0Ni4uNTA5ZjBiMyAxMDA2NDQKLS0tIGEvZ2NjL2x0by1zdHJl YW1lci1vdXQuYworKysgYi9nY2MvbHRvLXN0cmVhbWVyLW91dC5jCkBAIC05 NDQsNiArOTQ0LDggQEAgaGFzaF90cmVlIChzdHJ1Y3Qgc3RyZWFtZXJfdHJl ZV9jYWNoZV9kICpjYWNoZSwgaGFzaF9tYXA8dHJlZSwgaGFzaHZhbF90PiAq bWFwLAogICAgICAgaHN0YXRlLmFkZF9mbGFnIChUUkVFX1JFQURPTkxZICh0 KSk7CiAgICAgICBoc3RhdGUuYWRkX2ZsYWcgKFRSRUVfUFVCTElDICh0KSk7 CiAgICAgfQorICBlbHNlCisgICAgaHN0YXRlLmFkZF9mbGFnIChUWVBFX0VN UFRZX1JFQ09SRCAodCkpOwogICBoc3RhdGUuYWRkX2ZsYWcgKFRSRUVfQURE UkVTU0FCTEUgKHQpKTsKICAgaHN0YXRlLmFkZF9mbGFnIChUUkVFX1RISVNf Vk9MQVRJTEUgKHQpKTsKICAgaWYgKERFQ0xfUCAodCkpCmRpZmYgLS1naXQg YS9nY2MvbHRvL2x0by5jIGIvZ2NjL2x0by9sdG8uYwppbmRleCA5MDcxMmI0 Li42NzU1MTMyIDEwMDY0NAotLS0gYS9nY2MvbHRvL2x0by5jCisrKyBiL2dj Yy9sdG8vbHRvLmMKQEAgLTEwMDIsNiArMTAwMiw4IEBAIGNvbXBhcmVfdHJl ZV9zY2NzXzEgKHRyZWUgdDEsIHRyZWUgdDIsIHRyZWUgKiptYXApCiAgICAg ICBjb21wYXJlX3ZhbHVlcyAoVFJFRV9SRUFET05MWSk7CiAgICAgICBjb21w YXJlX3ZhbHVlcyAoVFJFRV9QVUJMSUMpOwogICAgIH0KKyAgZWxzZQorICAg IGNvbXBhcmVfdmFsdWVzIChUWVBFX0VNUFRZX1JFQ09SRCk7CiAgIGNvbXBh cmVfdmFsdWVzIChUUkVFX0FERFJFU1NBQkxFKTsKICAgY29tcGFyZV92YWx1 ZXMgKFRSRUVfVEhJU19WT0xBVElMRSk7CiAgIGlmIChERUNMX1AgKHQxKSkK ZGlmZiAtLWdpdCBhL2djYy9wcmludC10cmVlLmMgYi9nY2MvcHJpbnQtdHJl ZS5jCmluZGV4IGNiMGYxZmQuLmJiNDg5ZmYgMTAwNjQ0Ci0tLSBhL2djYy9w cmludC10cmVlLmMKKysrIGIvZ2NjL3ByaW50LXRyZWUuYwpAQCAtNTg3LDYg KzU4Nyw5IEBAIHByaW50X25vZGUgKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIg KnByZWZpeCwgdHJlZSBub2RlLCBpbnQgaW5kZW50KQogICAgICAgaWYgKFRZ UEVfUkVTVFJJQ1QgKG5vZGUpKQogCWZwdXRzICgiIHJlc3RyaWN0IiwgZmls ZSk7CiAKKyAgICAgIGlmIChUWVBFX0VNUFRZX1JFQ09SRCAobm9kZSkpCisJ ZnB1dHMgKCIgZW1wdHktcmVjb3JkIiwgZmlsZSk7CisKICAgICAgIGlmIChU WVBFX0xBTkdfRkxBR18wIChub2RlKSkKIAlmcHV0cyAoIiB0eXBlXzAiLCBm aWxlKTsKICAgICAgIGlmIChUWVBFX0xBTkdfRkxBR18xIChub2RlKSkKZGlm ZiAtLWdpdCBhL2djYy90YXJnZXQuaCBiL2djYy90YXJnZXQuaAppbmRleCBm ZmM0ZDZhLi5lYjAxYTc2IDEwMDY0NAotLS0gYS9nY2MvdGFyZ2V0LmgKKysr IGIvZ2NjL3RhcmdldC5oCkBAIC0xMDQsNiArMTA0LDE0IEBAIGV4dGVybiBi b29sIHRhcmdldF9kZWZhdWx0X3BvaW50ZXJfYWRkcmVzc19tb2Rlc19wICh2 b2lkKTsKICAgIGJlaGF2aW91ci4gICovCiBleHRlcm4gdW5zaWduZWQgaW50 IGdldF9tb3ZlX3JhdGlvIChib29sKTsKIAorZXh0ZXJuIHZvaWQgZnVuY3Rp b25fYXJnX2FkdmFuY2UgKGN1bXVsYXRpdmVfYXJnc190LCBtYWNoaW5lX21v ZGUsCisJCQkJICBjb25zdF90cmVlLCBib29sKTsKK2V4dGVybiBydHggZnVu Y3Rpb25fYXJnIChjdW11bGF0aXZlX2FyZ3NfdCwgbWFjaGluZV9tb2RlLCBj b25zdF90cmVlLAorCQkJIGJvb2wpOworZXh0ZXJuIHJ0eCBmdW5jdGlvbl9p bmNvbWluZ19hcmcgKGN1bXVsYXRpdmVfYXJnc190LCBtYWNoaW5lX21vZGUs CisJCQkJICBjb25zdF90cmVlLCBib29sKTsKK2V4dGVybiBib29sIHJldHVy bl9pbl9tZW1vcnkgKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworCiBzdHJ1 Y3Qgc3RkYXJnX2luZm87CiBzdHJ1Y3Qgc3BlY19pbmZvX2RlZjsKIHN0cnVj dCBoYXJkX3JlZ19zZXRfY29udGFpbmVyOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rh cmdob29rcy5jIGIvZ2NjL3Rhcmdob29rcy5jCmluZGV4IGRjZjA4NjMuLjdh OGQxZTggMTAwNjQ0Ci0tLSBhL2djYy90YXJnaG9va3MuYworKysgYi9nY2Mv dGFyZ2hvb2tzLmMKQEAgLTE4MjcsOSArMTgyNywxMiBAQCBzdGRfZ2ltcGxp ZnlfdmFfYXJnX2V4cHIgKHRyZWUgdmFsaXN0LCB0cmVlIHR5cGUsIGdpbXBs ZV9zZXEgKnByZV9wLAogICAvKiBIb2lzdCB0aGUgdmFsaXN0IHZhbHVlIGlu dG8gYSB0ZW1wb3JhcnkgZm9yIHRoZSBtb21lbnQuICAqLwogICB2YWxpc3Rf dG1wID0gZ2V0X2luaXRpYWxpemVkX3RtcF92YXIgKHZhbGlzdCwgcHJlX3As IE5VTEwpOwogCisgIGJvb2wgZW1wdHlfcmVjb3JkID0gdHlwZV9pc19lbXB0 eV9yZWNvcmRfcCAodHlwZSk7CisKICAgLyogdmFfbGlzdCBwb2ludGVyIGlz IGFsaWduZWQgdG8gUEFSTV9CT1VOREFSWS4gIElmIGFyZ3VtZW50IGFjdHVh bGx5CiAgICAgIHJlcXVpcmVzIGdyZWF0ZXIgYWxpZ25tZW50LCB3ZSBtdXN0 IHBlcmZvcm0gZHluYW1pYyBhbGlnbm1lbnQuICAqLwogICBpZiAoYm91bmRh cnkgPiBhbGlnbgorICAgICAgJiYgIWVtcHR5X3JlY29yZAogICAgICAgJiYg IWludGVnZXJfemVyb3AgKFRZUEVfU0laRSAodHlwZSkpKQogICAgIHsKICAg ICAgIHQgPSBidWlsZDIgKE1PRElGWV9FWFBSLCBUUkVFX1RZUEUgKHZhbGlz dCksIHZhbGlzdF90bXAsCkBAIC0xODU2LDcgKzE4NTksNyBAQCBzdGRfZ2lt cGxpZnlfdmFfYXJnX2V4cHIgKHRyZWUgdmFsaXN0LCB0cmVlIHR5cGUsIGdp bXBsZV9zZXEgKnByZV9wLAogICAgIH0KIAogICAvKiBDb21wdXRlIHRoZSBy b3VuZGVkIHNpemUgb2YgdGhlIHR5cGUuICAqLwotICB0eXBlX3NpemUgPSBz aXplX2luX2J5dGVzICh0eXBlKTsKKyAgdHlwZV9zaXplID0gZW1wdHlfcmVj b3JkID8gc2l6ZV96ZXJvX25vZGUgOiBzaXplX2luX2J5dGVzICh0eXBlKTsK ICAgcm91bmRlZF9zaXplID0gcm91bmRfdXAgKHR5cGVfc2l6ZSwgYWxpZ24p OwogCiAgIC8qIFJlZHVjZSByb3VuZGVkX3NpemUgc28gaXQncyBzaGFyYWJs ZSB3aXRoIHRoZSBwb3N0cXVldWUuICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvYWJpL2VtcHR5MTIuQyBiL2djYy90ZXN0c3VpdGUv ZysrLmRnL2FiaS9lbXB0eTEyLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uZGIyZmQyNAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL2FiaS9lbXB0eTEyLkMKQEAgLTAsMCArMSwxNyBA QAorLy8gUFIgYysrLzYwMzM2CisvLyB7IGRnLWRvIHJ1biB9CisvLyB7IGRn LW9wdGlvbnMgIi14IGMiIH0KKy8vIHsgZGctYWRkaXRpb25hbC1zb3VyY2Vz ICJlbXB0eTEyYS5jIiB9CisvLyB7IGRnLXBydW5lLW91dHB1dCAiY29tbWFu ZCBsaW5lIG9wdGlvbiIgfQorCisjaW5jbHVkZSAiZW1wdHkxMi5oIgorZXh0 ZXJuICJDIiB2b2lkIGZ1bihzdHJ1Y3QgZHVtbXksIHN0cnVjdCBmb28pOwor CitpbnQgbWFpbigpCit7CisgIHN0cnVjdCBkdW1teSBkOworICBzdHJ1Y3Qg Zm9vIGYgPSB7IC0xLCAtMiwgLTMsIC00LCAtNSB9OworCisgIGZ1bihkLCBm KTsgLy8geyBkZy1tZXNzYWdlICJub3RlOiB0aGUgQUJJIG9mIHBhc3Npbmcg ZW1wdHkgcmVjb3JkIGhhcyBjaGFuZ2VkIGluIEdDQyA2IiB9CisgIHJldHVy biAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYWJp L2VtcHR5MTIuaCBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2FiaS9lbXB0eTEy LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxYWZj ZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2Fi aS9lbXB0eTEyLmgKQEAgLTAsMCArMSw5IEBACitzdHJ1Y3QgZHVtbXkgeyB9 Oworc3RydWN0IGZvbworeworICBpbnQgaTE7CisgIGludCBpMjsKKyAgaW50 IGkzOworICBpbnQgaTQ7CisgIGludCBpNTsKK307CmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2crKy5kZy9hYmkvZW1wdHkxMmEuYyBiL2djYy90ZXN0 c3VpdGUvZysrLmRnL2FiaS9lbXB0eTEyYS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjM0YTI1YmEKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2crKy5kZy9hYmkvZW1wdHkxMmEuYwpAQCAtMCww ICsxLDYgQEAKKyNpbmNsdWRlICJlbXB0eTEyLmgiCit2b2lkIGZ1bihzdHJ1 Y3QgZHVtbXkgZCwgc3RydWN0IGZvbyBmKQoreworICBpZiAoZi5pMSAhPSAt MSkKKyAgICBfX2J1aWx0aW5fYWJvcnQoKTsKK30KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZysrLmRnL3ByNjAzMzYtMS5DIGIvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvcHI2MDMzNi0xLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMjEzNmY0OAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL3ByNjAzMzYtMS5DCkBAIC0wLDAgKzEsMTcgQEAK Ky8vIHsgZGctZG8gY29tcGlsZSB9CisvLyB7IGRnLW9wdGlvbnMgIi1PMiAt c3RkPWMrKzExIC1mbm8tcGljIiB9CisvLyB7IGRnLXJlcXVpcmUtZWZmZWN0 aXZlLXRhcmdldCBmcGljIH0KKworc3RydWN0IGR1bW15IHsgfTsKK3N0cnVj dCB0cnVlX3R5cGUgeyBzdHJ1Y3QgZHVtbXkgaTsgfTsKKworZXh0ZXJuIHRy dWVfdHlwZSB5OworZXh0ZXJuIHZvaWQgeHh4ICh0cnVlX3R5cGUgYyk7CisK K3ZvaWQKK3l5eSAodm9pZCkKK3sKKyAgeHh4ICh5KTsgLy8geyBkZy1tZXNz YWdlICJub3RlOiB0aGUgQUJJIG9mIHBhc3NpbmcgZW1wdHkgcmVjb3JkIGhh cyBjaGFuZ2VkIGluIEdDQyA2IiB9Cit9CisKKy8vIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlciAiam1wXFtcdCBcXStcW15cJFxdKj9fWjN4eHg5dHJ1 ZV90eXBlIiB7IHRhcmdldCBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSB9CmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9wcjYwMzM2LTIuQyBi L2djYy90ZXN0c3VpdGUvZysrLmRnL3ByNjAzMzYtMi5DCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYjdkMjMKLS0tIC9kZXYvbnVs bAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9wcjYwMzM2LTIuQwpAQCAt MCwwICsxLDI4IEBACisvLyB7IGRnLWRvIHJ1biB9CisvLyB7IGRnLW9wdGlv bnMgIi1PMiIgfQorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKK3N0cnVjdCBk dW1teSB7IHN0cnVjdHt9X19hdHRyaWJ1dGVfXygoYWxpZ25lZCAoNCkpKSBh WzddOyB9OworCit2b2lkCit0ZXN0IChzdHJ1Y3QgZHVtbXkgYSwgLi4uKSAv LyB7IGRnLW1lc3NhZ2UgIm5vdGU6IHRoZSBBQkkgb2YgcGFzc2luZyBlbXB0 eSByZWNvcmQgaGFzIGNoYW5nZWQgaW4gR0NDIDYiIH0KK3sKKyAgdmFfbGlz dCB2YV9hcmdsaXN0OworICBpbnQgaTsKKworICB2YV9zdGFydCAodmFfYXJn bGlzdCwgYSk7CisgIGkgPSB2YV9hcmcgKHZhX2FyZ2xpc3QsIGludCk7Cisg IGlmIChpICE9IDB4MTApCisgICAgX19idWlsdGluX2Fib3J0ICgpOworICB2 YV9lbmQgKHZhX2FyZ2xpc3QpOworfQorCitzdHJ1Y3QgZHVtbXkgYTA7CisK K2ludAorbWFpbiAoKQoreworICB0ZXN0IChhMCwgMHgxMCk7IC8vIHsgZGct bWVzc2FnZSAibm90ZTogdGhlIEFCSSBvZiBwYXNzaW5nIGVtcHR5IHJlY29y ZCBoYXMgY2hhbmdlZCBpbiBHQ0MgNiIgfQorICByZXR1cm4gMDsKK30KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL3ByNjgzNTUuQyBiL2dj Yy90ZXN0c3VpdGUvZysrLmRnL3ByNjgzNTUuQwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi45MDU4NGQwCi0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvcHI2ODM1NS5DCkBAIC0wLDAgKzEs MjQgQEAKKy8vIHsgZGctZG8gY29tcGlsZSB9CisvLyB7IGRnLW9wdGlvbnMg Ii1Xbm8tcHNhYmkgLU8yIC1zdGQ9YysrMTEgLWZuby1waWMiIH0KKy8vIHsg ZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGZwaWMgfQorCit0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHAsIF9UcCBfX3Y+CitzdHJ1Y3QgaW50ZWdyYWxfY29u c3RhbnQKK3sKKyAgc3RhdGljIGNvbnN0ZXhwciBfVHAgdmFsdWUgPSBfX3Y7 CisgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CisgIHR5cGVkZWYgaW50ZWdy YWxfY29uc3RhbnQ8X1RwLCBfX3Y+IHR5cGU7CisgIGNvbnN0ZXhwciBvcGVy YXRvciB2YWx1ZV90eXBlKCkgY29uc3QgeyByZXR1cm4gdmFsdWU7IH0KK307 CisKK3R5cGVkZWYgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgdHJ1ZT4gdHJ1 ZV90eXBlOworZXh0ZXJuIHZvaWQgeHh4ICh0cnVlX3R5cGUgYyk7CisKK3Zv aWQKK3l5eSAodm9pZCkKK3sKKyAgdHJ1ZV90eXBlIHk7CisgIHh4eCAoeSk7 Cit9CisKKy8vIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiam1wXFtc dCBcXStcW15cJFxdKj9fWjN4eHgxN2ludGVncmFsX2NvbnN0YW50SWJMYjFF RSIgeyB0YXJnZXQgaT84Ni0qLSogeDg2XzY0LSotKiB9IH0gfQpkaWZmIC0t Z2l0IGEvZ2NjL3RyZWUtY29yZS5oIGIvZ2NjL3RyZWUtY29yZS5oCmluZGV4 IDljYzY0ZDkuLjY3YmZmYTQgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLWNvcmUu aAorKysgYi9nY2MvdHJlZS1jb3JlLmgKQEAgLTEwODYsNiArMTA4Niw5IEBA IHN0cnVjdCBHVFkoKCkpIHRyZWVfYmFzZSB7CiAgICAgICAgRk9SQ0VEX0xB QkVMIGluCiAgICAgICAgICAgIExBQkVMX0RFQ0wKIAorICAgICAgIFRZUEVf RU1QVFlfUkVDT1JEIGluCisgICAgICAgICAgIGFsbCB0eXBlcworCiAgICB2 b2xhdGlsZV9mbGFnOgogCiAgICAgICAgVFJFRV9USElTX1ZPTEFUSUxFIGlu CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1kZmEuYyBiL2djYy90cmVlLWRmYS5j CmluZGV4IGJiNWNkNDkuLjE2MzRlZDYgMTAwNjQ0Ci0tLSBhL2djYy90cmVl LWRmYS5jCisrKyBiL2djYy90cmVlLWRmYS5jCkBAIC0zOTQsNiArMzk0LDgg QEAgZ2V0X3JlZl9iYXNlX2FuZF9leHRlbnQgKHRyZWUgZXhwLCBIT1NUX1dJ REVfSU5UICpwb2Zmc2V0LAogICAgICAgbWFjaGluZV9tb2RlIG1vZGUgPSBU WVBFX01PREUgKFRSRUVfVFlQRSAoZXhwKSk7CiAgICAgICBpZiAobW9kZSA9 PSBCTEttb2RlKQogCXNpemVfdHJlZSA9IFRZUEVfU0laRSAoVFJFRV9UWVBF IChleHApKTsKKyAgICAgIGVsc2UgaWYgKHR5cGVfaXNfZW1wdHlfcmVjb3Jk X3AgKFRSRUVfVFlQRSAoZXhwKSkpCisJYml0c2l6ZSA9IDA7CiAgICAgICBl bHNlCiAJYml0c2l6ZSA9IGludCAoR0VUX01PREVfUFJFQ0lTSU9OIChtb2Rl KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc3RyZWFtZXItaW4u YyBiL2djYy90cmVlLXN0cmVhbWVyLWluLmMKaW5kZXggMzE2MmQxYS4uMmFl ZTdhZCAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3RyZWFtZXItaW4uYworKysg Yi9nY2MvdHJlZS1zdHJlYW1lci1pbi5jCkBAIC0xMTIsNyArMTEyLDEwIEBA IHVucGFja190c19iYXNlX3ZhbHVlX2ZpZWxkcyAoc3RydWN0IGJpdHBhY2tf ZCAqYnAsIHRyZWUgZXhwcikKICAgICAgIFRSRUVfUFVCTElDIChleHByKSA9 ICh1bnNpZ25lZCkgYnBfdW5wYWNrX3ZhbHVlIChicCwgMSk7CiAgICAgfQog ICBlbHNlCi0gICAgYnBfdW5wYWNrX3ZhbHVlIChicCwgNCk7CisgICAgewor ICAgICAgVFlQRV9FTVBUWV9SRUNPUkQgKGV4cHIpID0gKHVuc2lnbmVkKSBi cF91bnBhY2tfdmFsdWUgKGJwLCAxKTsKKyAgICAgIGJwX3VucGFja192YWx1 ZSAoYnAsIDMpOworICAgIH0KICAgVFJFRV9BRERSRVNTQUJMRSAoZXhwcikg PSAodW5zaWduZWQpIGJwX3VucGFja192YWx1ZSAoYnAsIDEpOwogICBUUkVF X1RISVNfVk9MQVRJTEUgKGV4cHIpID0gKHVuc2lnbmVkKSBicF91bnBhY2tf dmFsdWUgKGJwLCAxKTsKICAgaWYgKERFQ0xfUCAoZXhwcikpCmRpZmYgLS1n aXQgYS9nY2MvdHJlZS1zdHJlYW1lci1vdXQuYyBiL2djYy90cmVlLXN0cmVh bWVyLW91dC5jCmluZGV4IGJmZDA2NDQuLjQzMDZmY2MgMTAwNjQ0Ci0tLSBh L2djYy90cmVlLXN0cmVhbWVyLW91dC5jCisrKyBiL2djYy90cmVlLXN0cmVh bWVyLW91dC5jCkBAIC04Myw3ICs4MywxMCBAQCBwYWNrX3RzX2Jhc2VfdmFs dWVfZmllbGRzIChzdHJ1Y3QgYml0cGFja19kICpicCwgdHJlZSBleHByKQog ICAgICAgYnBfcGFja192YWx1ZSAoYnAsIFRSRUVfUFVCTElDIChleHByKSwg MSk7CiAgICAgfQogICBlbHNlCi0gICAgYnBfcGFja192YWx1ZSAoYnAsIDAs IDQpOworICAgIHsKKyAgICAgIGJwX3BhY2tfdmFsdWUgKGJwLCBUWVBFX0VN UFRZX1JFQ09SRCAoZXhwciksIDEpOworICAgICAgYnBfcGFja192YWx1ZSAo YnAsIDAsIDMpOworICAgIH0KICAgYnBfcGFja192YWx1ZSAoYnAsIFRSRUVf QUREUkVTU0FCTEUgKGV4cHIpLCAxKTsKICAgYnBfcGFja192YWx1ZSAoYnAs IFRSRUVfVEhJU19WT0xBVElMRSAoZXhwciksIDEpOwogICBpZiAoREVDTF9Q IChleHByKSkKZGlmZiAtLWdpdCBhL2djYy90cmVlLmggYi9nY2MvdHJlZS5o CmluZGV4IGFlZjgyNWQuLjliMTNkNWMgMTAwNjQ0Ci0tLSBhL2djYy90cmVl LmgKKysrIGIvZ2NjL3RyZWUuaApAQCAtNzY2LDYgKzc2NiwxMCBAQCBleHRl cm4gdm9pZCBvbXBfY2xhdXNlX3JhbmdlX2NoZWNrX2ZhaWxlZCAoY29uc3Rf dHJlZSwgY29uc3QgY2hhciAqLCBpbnQsCiAgICBjb21wdXRlZCBnb3Rvcy4g ICovCiAjZGVmaW5lIEZPUkNFRF9MQUJFTChOT0RFKSAoTEFCRUxfREVDTF9D SEVDSyAoTk9ERSktPmJhc2Uuc2lkZV9lZmZlY3RzX2ZsYWcpCiAKKy8qIE5v bnplcm8gaW4gYSB0eXBlIGNvbnNpZGVyZWQgYW4gZW1wdHkgcmVjb3JkLiAg Ki8KKyNkZWZpbmUgVFlQRV9FTVBUWV9SRUNPUkQoTk9ERSkgXAorICAoVFlQ RV9DSEVDSyAoTk9ERSktPmJhc2Uuc2lkZV9lZmZlY3RzX2ZsYWcpCisKIC8q IE5vbnplcm8gbWVhbnMgdGhpcyBleHByZXNzaW9uIGlzIHZvbGF0aWxlIGlu IHRoZSBDIHNlbnNlOgogICAgaXRzIGFkZHJlc3Mgc2hvdWxkIGJlIG9mIHR5 cGUgYHZvbGF0aWxlIFdIQVRFVkVSIConLgogICAgSW4gb3RoZXIgd29yZHMs IHRoZSBkZWNsYXJlZCBpdGVtIGlzIHZvbGF0aWxlIHF1YWxpZmllZC4KQEAg LTUzNzksNiArNTM4MywxNCBAQCBnZXRfZmluaXNoIChsb2NhdGlvbl90IGxv YykKICAgcmV0dXJuIGdldF9yYW5nZV9mcm9tX2xvYyAobGluZV90YWJsZSwg bG9jKS5tX2ZpbmlzaDsKIH0KIAorLyogUmV0dXJuIHRydWUgaWYgdHlwZSBU IGlzIGFuIGVtcHR5IHJlY29yZC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9v bAordHlwZV9pc19lbXB0eV9yZWNvcmRfcCAoY29uc3RfdHJlZSB0KQorewor ICByZXR1cm4gVFlQRV9FTVBUWV9SRUNPUkQgKFRZUEVfTUFJTl9WQVJJQU5U ICh0KSk7Cit9CisKIGV4dGVybiBsb2NhdGlvbl90IHNldF9ibG9jayAobG9j YXRpb25fdCBsb2MsIHRyZWUgYmxvY2spOwogCiBleHRlcm4gdm9pZCBndF9n Z2NfbXggKHRyZWUgJik7CmRpZmYgLS1naXQgYS9nY2MvdWJzYW4uYyBiL2dj Yy91YnNhbi5jCmluZGV4IDZmYzYyMzMuLjZkYWZjOTAgMTAwNjQ0Ci0tLSBh L2djYy91YnNhbi5jCisrKyBiL2djYy91YnNhbi5jCkBAIC0zNzksMTAgKzM3 OSwxMSBAQCB1YnNhbl90eXBlX2Rlc2NyaXB0b3IgKHRyZWUgdHlwZSwgZW51 bSB1YnNhbl9wcmludF9zdHlsZSBwc3R5bGUpCiAKICAgaWYgKHBzdHlsZSA9 PSBVQlNBTl9QUklOVF9QT0lOVEVSKQogICAgIHsKLSAgICAgIHBwX3ByaW50 ZiAoJnByZXR0eV9uYW1lLCAiJyVzJXMlcyVzJXMlcyVzIiwKKyAgICAgIHBw X3ByaW50ZiAoJnByZXR0eV9uYW1lLCAiJyVzJXMlcyVzJXMlcyVzJXMiLAog CQkgVFlQRV9WT0xBVElMRSAodHlwZTIpID8gInZvbGF0aWxlICIgOiAiIiwK IAkJIFRZUEVfUkVBRE9OTFkgKHR5cGUyKSA/ICJjb25zdCAiIDogIiIsCiAJ CSBUWVBFX1JFU1RSSUNUICh0eXBlMikgPyAicmVzdHJpY3QgIiA6ICIiLAor CQkgVFlQRV9FTVBUWV9SRUNPUkQgKHR5cGUyKSA/ICJlbXB0eS1yZWNvcmQg IiA6ICIiLAogCQkgVFlQRV9BVE9NSUMgKHR5cGUyKSA/ICJfQXRvbWljICIg OiAiIiwKIAkJIFRSRUVfQ09ERSAodHlwZTIpID09IFJFQ09SRF9UWVBFCiAJ CSA/ICJzdHJ1Y3QgIgpkaWZmIC0tZ2l0IGEvZ2NjL3Zhci10cmFja2luZy5j IGIvZ2NjL3Zhci10cmFja2luZy5jCmluZGV4IDkxODViZmQuLmU5ZmRiZTkg MTAwNjQ0Ci0tLSBhL2djYy92YXItdHJhY2tpbmcuYworKysgYi9nY2MvdmFy LXRyYWNraW5nLmMKQEAgLTYxNDAsMTAgKzYxNDAsMTAgQEAgcHJlcGFyZV9j YWxsX2FyZ3VtZW50cyAoYmFzaWNfYmxvY2sgYmIsIHJ0eF9pbnNuICppbnNu KQogCQkgIHJ0eCByZWc7CiAJCSAgSU5JVF9DVU1VTEFUSVZFX0FSR1MgKGFy Z3Nfc29fZmFyX3YsIHR5cGUsIE5VTExfUlRYLCBmbmRlY2wsCiAJCQkJCW5h cmdzICsgMSk7Ci0JCSAgcmVnID0gdGFyZ2V0bS5jYWxscy5mdW5jdGlvbl9h cmcgKGFyZ3Nfc29fZmFyLCBtb2RlLAotCQkJCQkJICAgIHN0cnVjdF9hZGRy LCB0cnVlKTsKLQkJICB0YXJnZXRtLmNhbGxzLmZ1bmN0aW9uX2FyZ19hZHZh bmNlIChhcmdzX3NvX2ZhciwgbW9kZSwKLQkJCQkJCSAgICAgIHN0cnVjdF9h ZGRyLCB0cnVlKTsKKwkJICByZWcgPSBmdW5jdGlvbl9hcmcgKGFyZ3Nfc29f ZmFyLCBtb2RlLCBzdHJ1Y3RfYWRkciwKKwkJCQkgICAgICB0cnVlKTsKKwkJ ICBmdW5jdGlvbl9hcmdfYWR2YW5jZSAoYXJnc19zb19mYXIsIG1vZGUsIHN0 cnVjdF9hZGRyLAorCQkJCQl0cnVlKTsKIAkJICBpZiAocmVnID09IE5VTExf UlRYKQogCQkgICAgewogCQkgICAgICBmb3IgKDsgbGluazsgbGluayA9IFhF WFAgKGxpbmssIDEpKQpAQCAtNjE2NCw4ICs2MTY0LDggQEAgcHJlcGFyZV9j YWxsX2FyZ3VtZW50cyAoYmFzaWNfYmxvY2sgYmIsIHJ0eF9pbnNuICppbnNu KQogCQkgIG1hY2hpbmVfbW9kZSBtb2RlOwogCQkgIHQgPSBUWVBFX0FSR19U WVBFUyAodHlwZSk7CiAJCSAgbW9kZSA9IFRZUEVfTU9ERSAoVFJFRV9WQUxV RSAodCkpOwotCQkgIHRoaXNfYXJnID0gdGFyZ2V0bS5jYWxscy5mdW5jdGlv bl9hcmcgKGFyZ3Nfc29fZmFyLCBtb2RlLAotCQkJCQkJCSBUUkVFX1ZBTFVF ICh0KSwgdHJ1ZSk7CisJCSAgdGhpc19hcmcgPSBmdW5jdGlvbl9hcmcgKGFy Z3Nfc29fZmFyLCBtb2RlLAorCQkJCQkgICBUUkVFX1ZBTFVFICh0KSwgdHJ1 ZSk7CiAJCSAgaWYgKHRoaXNfYXJnICYmICFSRUdfUCAodGhpc19hcmcpKQog CQkgICAgdGhpc19hcmcgPSBOVUxMX1JUWDsKIAkJICBlbHNlIGlmICh0aGlz X2FyZyA9PSBOVUxMX1JUWCkKQEAgLTYyODAsOCArNjI4MCw3IEBAIHByZXBh cmVfY2FsbF9hcmd1bWVudHMgKGJhc2ljX2Jsb2NrIGJiLCBydHhfaW5zbiAq aW5zbikKIAkJYXJndHlwZSA9IGJ1aWxkX3BvaW50ZXJfdHlwZSAoYXJndHlw ZSk7CiAJCW1vZGUgPSBUWVBFX01PREUgKGFyZ3R5cGUpOwogCSAgICAgIH0K LQkgICAgcmVnID0gdGFyZ2V0bS5jYWxscy5mdW5jdGlvbl9hcmcgKGFyZ3Nf c29fZmFyLCBtb2RlLAotCQkJCQkgICAgICBhcmd0eXBlLCB0cnVlKTsKKwkg ICAgcmVnID0gZnVuY3Rpb25fYXJnIChhcmdzX3NvX2ZhciwgbW9kZSwgYXJn dHlwZSwgdHJ1ZSk7CiAJICAgIGlmIChUUkVFX0NPREUgKGFyZ3R5cGUpID09 IFJFRkVSRU5DRV9UWVBFCiAJCSYmIElOVEVHUkFMX1RZUEVfUCAoVFJFRV9U WVBFIChhcmd0eXBlKSkKIAkJJiYgcmVnCkBAIC02MzM1LDggKzYzMzQsNyBA QCBwcmVwYXJlX2NhbGxfYXJndW1lbnRzIChiYXNpY19ibG9jayBiYiwgcnR4 X2luc24gKmluc24pCiAJCQl9CiAJCSAgfQogCSAgICAgIH0KLQkgICAgdGFy Z2V0bS5jYWxscy5mdW5jdGlvbl9hcmdfYWR2YW5jZSAoYXJnc19zb19mYXIs IG1vZGUsCi0JCQkJCQlhcmd0eXBlLCB0cnVlKTsKKwkgICAgZnVuY3Rpb25f YXJnX2FkdmFuY2UgKGFyZ3Nfc29fZmFyLCBtb2RlLCBhcmd0eXBlLCB0cnVl KTsKIAkgICAgdCA9IFRSRUVfQ0hBSU4gKHQpOwogCSAgfQogICAgICAgfQot LSAKMi41LjAKCg== --089e0111d6ec44131405267b9baa--