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 6F5B93854E72 for ; Wed, 7 Jun 2023 20:00:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6F5B93854E72 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-650c8cb68aeso4419217b3a.3 for ; Wed, 07 Jun 2023 13:00:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686168011; x=1688760011; h=in-reply-to:from:references:to:content-language:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=vTsj77kOK6yRCUPoXhFtEuqXZ0BLGWj7ztIACW0dMX0=; b=RzfFRLW/RQFsDDGNMWT8ehq0HEk1BZqIeZijvgdTe/N2ZxiSceNymgzfNMTx9J4oDg 46RW5Nv6JSx0DwuyIaItRPznZwBroPiaaPN24fWXN5CHJC8Tgs9LrN05iwLfRP1VdiSu YgS3l70xmerIlWQkqVwz1TR5QYAGK0XUwd5orBu196q4uur57QzfM9wKbJIi3x3e+lKF gvJKbgpnVT2d4DwSzHpC03wfzmM7kyokKVvBc6UvcMZODKpPkdaViSq3E9fkvHD8Hfrh R2naiVlxCPwQAB5CR/7bWbu5PM5qGhO6zNjiqYhtbP9h/3tx8s2JUlQPDZimTLmg48FT v/pQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686168011; x=1688760011; h=in-reply-to:from:references:to:content-language:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=vTsj77kOK6yRCUPoXhFtEuqXZ0BLGWj7ztIACW0dMX0=; b=LY5adlvAySaukau7v6UwfKYL7ORtZy7nCiG7kfGPzPxHTViM0UdFaYctzTVzU4ZjSk h6CyniSrh/mpBbeWcARpq5rzOn65DRIN6oXz2PhPqMfomkM66wT2GQmKl3AbbMu9a3Ne EgeNu54ofqdCUJc8F0F9klmVnLTYvHJESycTzDqRsAo7+HWiE7BqQLi2vcGAMZ47wXp1 b/Sx2sIzetaoV/9tgF5xHHa+WxYCibKiGwidxTygyqRhMxaQ5mtV9O79McXl2WqngWmV +Fjx1rNxLOoYdH7gOBuXa956rD2j2sFX+5j/w1aJ5xq8Qb5yE4bZxiYcRkoc8P8f1U+u MrVg== X-Gm-Message-State: AC+VfDxHdtOXvtJgKHbYvcOk6JSbvkWOEpevqob1uoIfST08UdTg98Pe txUkCiNmA8okT335vuoG2XQ= X-Google-Smtp-Source: ACHHUZ6M+iNhTssiXBl8ncMnPiPHrhEWNr8JxrDOxwMGCn6p5AnzD3RobzyVDGnTn1e3ufBliGUTBw== X-Received: by 2002:a05:6a00:1a02:b0:654:9d3a:f962 with SMTP id g2-20020a056a001a0200b006549d3af962mr2977615pfv.12.1686168010703; Wed, 07 Jun 2023 13:00:10 -0700 (PDT) Received: from [172.31.0.109] ([136.36.130.248]) by smtp.gmail.com with ESMTPSA id x19-20020aa793b3000000b0064d32771fafsm1318472pff.97.2023.06.07.13.00.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 07 Jun 2023 13:00:09 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------Py0s0yiAbbDUROAZZObT5cb3" Message-ID: <99342f85-d05b-f58d-2026-29bf5fa9bc91@gmail.com> Date: Wed, 7 Jun 2023 14:00:07 -0600 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: Re: [RFC] RISC-V: Eliminate extension after for *w instructions Content-Language: en-US To: Jivan Hakobyan , gcc-patches@gcc.gnu.org References: From: Jeff Law In-Reply-To: X-Spam-Status: No, score=-8.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_LOTSOFHASH,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------Py0s0yiAbbDUROAZZObT5cb3 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 5/24/23 17:14, Jivan Hakobyan via Gcc-patches wrote: > Subject: > [RFC] RISC-V: Eliminate extension after for *w instructions > From: > Jivan Hakobyan via Gcc-patches > Date: > 5/24/23, 17:14 > > To: > gcc-patches@gcc.gnu.org > > > `This patch tries to prevent generating unnecessary sign extension > after *w instructions like "addiw" or "divw". > > The main idea of it is to add SUBREG_PROMOTED fields during expanding. > > I have tested on SPEC2017 there is no regression. > Only gcc.dg/pr30957-1.c test failed. > To solve that I did some changes in loop-iv.cc, but not sure that it is > suitable. > > > gcc/ChangeLog: > * config/riscv/bitmanip.md (rotrdi3): New pattern. > (rotrsi3): Likewise. > (rotlsi3): Likewise. > * config/riscv/riscv-protos.h (riscv_emit_binary): New function > declaration > * config/riscv/riscv.cc (riscv_emit_binary): Removed static > * config/riscv/riscv.md (addsi3): New pattern > (subsi3): Likewise. > (negsi2): Likewise. > (mulsi3): Likewise. > (si3): New pattern for any_div. > (si3): New pattern for any_shift. > * loop-iv.cc (get_biv_step_1): Process src of extension when it > PLUS > > gcc/testsuite/ChangeLog: > * testsuite/gcc.target/riscv/shift-and-2.c: New test > * testsuite/gcc.target/riscv/shift-shift-2.c: New test > * testsuite/gcc.target/riscv/sign-extend.c: New test > * testsuite/gcc.target/riscv/zbb-rol-ror-03.c: New test > > > -- With the best regards Jivan Hakobyan > > > extend.diff > > diff --git a/gcc/config/riscv/bitmanip.md b/gcc/config/riscv/bitmanip.md > index 96d31d92670b27d495dc5a9fbfc07e8767f40976..0430af7c95b1590308648dc4d5aaea78ada71760 100644 > --- a/gcc/config/riscv/bitmanip.md > +++ b/gcc/config/riscv/bitmanip.md > @@ -304,9 +304,9 @@ > [(set_attr "type" "bitmanip,load") > (set_attr "mode" "HI")]) > > -(define_expand "rotr3" > - [(set (match_operand:GPR 0 "register_operand") > - (rotatert:GPR (match_operand:GPR 1 "register_operand") > +(define_expand "rotrdi3" > + [(set (match_operand:DI 0 "register_operand") > + (rotatert:DI (match_operand:DI 1 "register_operand") > (match_operand:QI 2 "arith_operand")))] > "TARGET_ZBB || TARGET_XTHEADBB || TARGET_ZBKB" The condition for this expander needs to be adjusted. Previously it used the GPR iterator. The GPR iterator is defined like this: (define_mode_iterator GPR [SI (DI "TARGET_64BIT")]) Note how the DI case is conditional on TARGET_64BIT. This impacts the HAVE_* macros that are generated from the MD file in insn-flags.h: #define HAVE_rotrsi3 (TARGET_ZBB || TARGET_XTHEADBB || TARGET_ZBKB) #define HAVE_rotrdi3 ((TARGET_ZBB || TARGET_XTHEADBB || TARGET_ZBKB) && (TARGET_64BIT)) Note how the rotrdi3 has the && (TARGET_64BIT) on the end. With your change we would expose rotrdi3 independent of TARGET_64BIT which is not what we want. Sorry I didn't catch that earlier. I'll fix this minor problem. > @@ -544,7 +562,7 @@ > rtx t5 = gen_reg_rtx (DImode); > rtx t6 = gen_reg_rtx (DImode); > > - emit_insn (gen_addsi3 (operands[0], operands[1], operands[2])); > + riscv_emit_binary(PLUS, operands[0], operands[1], operands[2]); Just a note. In GCC we always emit a space between the function name and the open parenthesis for its argument list. I fixed a few of these. > @@ -867,8 +938,8 @@ > > emit_insn (gen_smul3_highpart (hp, operands[1], operands[2])); > emit_insn (gen_mul3 (operands[0], operands[1], operands[2])); > - emit_insn (gen_ashr3 (lp, operands[0], > - GEN_INT (BITS_PER_WORD - 1))); > + riscv_emit_binary(ASHIFTRT, lp, operands[0], > + GEN_INT (BITS_PER_WORD - 1)); Another formatting nit. When we wrap lines for an argument list, we line up the arguments. So something like this frobit (a, b, c d, e, f); Obviously that's not a great example as it doesn't need wrapping, but it should clearly show how we indent things in this case. I've fixed up this nit. > diff --git a/gcc/loop-iv.cc b/gcc/loop-iv.cc > index 6c40db947f7f549303f8bb4d4f38aa98b6561bcc..bec1ea7e4ccf7291bb3dba91161f948e66c7bea9 100644 > --- a/gcc/loop-iv.cc > +++ b/gcc/loop-iv.cc > @@ -637,7 +637,7 @@ get_biv_step_1 (df_ref def, scalar_int_mode outer_mode, rtx reg, > { > rtx set, rhs, op0 = NULL_RTX, op1 = NULL_RTX; > rtx next, nextr; > - enum rtx_code code; > + enum rtx_code code, prev_code; So as I mentioned earlier, PREV_CODE might be used without being initialized. I've initialized it to "UNKNOWN" which is a special RTX code which can be used for this purpose. If we are changing a target independent file the standard is that we bootstrap and regression test on at least one primary platform such as x86_64 linux. This would have been caught by that bootstrap process as it's a pretty simple uninitialized object use to analyze. > rtx_insn *insn = DF_REF_INSN (def); > df_ref next_def; > enum iv_grd_result res; > @@ -697,6 +697,23 @@ get_biv_step_1 (df_ref def, scalar_int_mode outer_mode, rtx reg, > return false; > > op0 = XEXP (rhs, 0); > + > + if (GET_CODE (op0) == PLUS) I've added a few comments before this code indicating why it was added. And WRT formatting, we strongly prefer to use a tab rather than 8 spaces. I think it's pretty annoying myself, but I live with it as it's the standard for the GCC project. I've fixed these nits as well. WRT the impacts. We haven't run this on the emulator, but we can easily look at the instruction counts for spec2017. It's a clear improvement with the biggest improvements in the xz benchmark (1-2%), with others in the .5% range. There is one regression of note with how we expand comparisons against string constants. I'm going to file a bug for that so it doesn't get lost. In my opinion the benefits of this patch outweigh the impact of that minor regression in omnetpp. I'll file a bug for the omnetpp regression. What will be really interesting will be to test the TARGET_REP_EXTENDED patch from Philipp again. I wouldn't be surprised at all if much of the benefit of TARGET_REP_EXTENDED is negated by exposing the target's actual semantics like you've done. This regressed the zba-shNadd-05 test, which isn't a big surprise given this test was designed to test a pattern which is sensitive to the structure of 32bit arithmetic. I've adjusted the appropriate define_insn_and_split so that it matches the updated RTL. There's a couple of other splitters in bitmanip.md which may need similar treatment. But I don't see cases for them in the testsuite, so it's hard to know if those splitters are useful and to test if we've got any adjustments to them correct. Bootstrapped and regression tested on x86 linux. Regression tested on riscv64 as well. Attached is the version I pushed to the trunk. Thanks again, Jeff --------------Py0s0yiAbbDUROAZZObT5cb3 Content-Type: text/plain; charset=UTF-8; name="P" Content-Disposition: attachment; filename="P" Content-Transfer-Encoding: base64 Y29tbWl0IDk5YmZkYjA3MmU2N2ZhM2ZlMjk0ZDg2YjRiMmE5ZjY4NmY4ZDk3MDUKQXV0aG9y OiBKZWZmIExhdyA8amxhd0B2ZW50YW5hbWljcm8uY29tPgpEYXRlOiAgIFdlZCBKdW4gNyAx Mzo0MDoxNiAyMDIzIC0wNjAwCgogICAgUklTQy1WOiBFbGltaW5hdGUgZXh0ZW5zaW9uIGFm dGVyIGZvciAqdyBpbnN0cnVjdGlvbnMKICAgIAogICAgVGhpcyBwYXRjaCB0cmllcyB0byBw cmV2ZW50IGdlbmVyYXRpbmcgdW5uZWNlc3Nhcnkgc2lnbiBleHRlbnNpb24KICAgIGFmdGVy ICp3IGluc3RydWN0aW9ucyBsaWtlICJhZGRpdyIgb3IgImRpdnciLgogICAgCiAgICBUaGUg bWFpbiBpZGVhIG9mIGl0IGlzIHRvIGFkZCBTVUJSRUdfUFJPTU9URUQgZmllbGRzIGR1cmlu ZyBleHBhbmRpbmcuCiAgICAKICAgIEkgaGF2ZSB0ZXN0ZWQgb24gU1BFQzIwMTcgdGhlcmUg aXMgbm8gcmVncmVzc2lvbi4KICAgIE9ubHkgZ2NjLmRnL3ByMzA5NTctMS5jIHRlc3QgZmFp bGVkLgogICAgVG8gc29sdmUgdGhhdCBJIGRpZCBzb21lIGNoYW5nZXMgaW4gbG9vcC1pdi5j YywgYnV0IG5vdCBzdXJlIHRoYXQgaXQgaXMKICAgIHN1aXRhYmxlLgogICAgCiAgICBnY2Mv Q2hhbmdlTG9nOgogICAgICAgICAgICAqIGNvbmZpZy9yaXNjdi9iaXRtYW5pcC5tZCAocm90 cmRpMywgcm90cnNpMywgcm90bHNpMyk6IE5ldyBleHBhbmRlcnMuCiAgICAgICAgICAgIChy b3Ryc2kzX3NleHQpOiBFeHBvc2UgZ2VuZXJhdG9yLgogICAgICAgICAgICAocm90bHNpMyBw YXR0ZXJuKTogSGlkZSBnZW5lcmF0b3IuCiAgICAgICAgICAgICogY29uZmlnL3Jpc2N2L3Jp c2N2LXByb3Rvcy5oIChyaXNjdl9lbWl0X2JpbmFyeSk6IE5ldyBmdW5jdGlvbgogICAgICAg ICAgICBkZWNsYXJhdGlvbi4KICAgICAgICAgICAgKiBjb25maWcvcmlzY3YvcmlzY3YuY2Mg KHJpc2N2X2VtaXRfYmluYXJ5KTogUmVtb3ZlZCBzdGF0aWMKICAgICAgICAgICAgKiBjb25m aWcvcmlzY3YvcmlzY3YubWQgKGFkZHNpMywgc3Vic2kzLCBuZWdzaTIpOiBIaWRlIGdlbmVy YXRvci4KICAgICAgICAgICAgKG11bHNpMywgPG9wdGFiPnNpMyk6IExpa2V3aXNlLgogICAg ICAgICAgICAoYWRkc2kzLCBzdWJzaTMsIG5lZ3NpMiwgbXVsc2kzLCA8b3B0YWI+c2kzKTog TmV3IGV4cGFuZGVycy4KICAgICAgICAgICAgKGFkZHY8bW9kZT40LCBzdWJ2PG1vZGU+NCwg bXVsdjxtb2RlPjQpOiBVc2UgcmlzY3ZfZW1pdF9iaW5hcnkuCiAgICAgICAgICAgICg8dT5t dWxzaWRpMyk6IExpa2V3aXNlLgogICAgICAgICAgICAoYWRkc2kzX2V4dGVuZGVkLCBzdWJz aTNfZXh0ZW5kZWQsIG5lZ3NpMl9leHRlbmRlZCk6IEV4cG9zZSBnZW5lcmF0b3IuCiAgICAg ICAgICAgIChtdWxzaTNfZXh0ZW5kZWQsIDxvcHRhYj5zaTNfZXh0ZW5kZWQpOiBMaWtld2lz ZS4KICAgICAgICAgICAgKHNwbGl0dGVyIGZvciBzaGFkZCBmZWVkaW5nIGRpdmlzb24pOiBV cGRhdGUgUlRMIHBhdHRlcm4gdG8gYWNjb3VudAogICAgICAgICAgICBmb3IgY2hhbmdlcyBp biBob3cgMzIgYml0IG9wcyBhcmUgZXhwYW5kZWQgZm9yIFRBUkdFVF82NEJJVC4KICAgICAg ICAgICAgKiBsb29wLWl2LmNjIChnZXRfYml2X3N0ZXBfMSk6IFByb2Nlc3Mgc3JjIG9mIGV4 dGVuc2lvbiB3aGVuIGl0IFBMVVMuCiAgICAKICAgIGdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9n OgogICAgCiAgICAgICAgICAgICogZ2NjLnRhcmdldC9yaXNjdi9zaGlmdC1hbmQtMi5jOiBO ZXcgdGVzdHMuCiAgICAgICAgICAgICogZ2NjLnRhcmdldC9yaXNjdi9zaGlmdC1zaGlmdC0y LmM6IEFkanVzdCBleHBlY3RlZCBvdXRwdXQuCiAgICAgICAgICAgICogZ2NjLnRhcmdldC9y aXNjdi9zaWduLWV4dGVuZC5jOiBOZXcgdGVzdC4KICAgICAgICAgICAgKiBnY2MudGFyZ2V0 L3Jpc2N2L3piYi1yb2wtcm9yLTAzLmM6IEFkanVzdCBleHBlY3RlZCBvdXRwdXQuCiAgICAK ICAgIENvLWF1dGhvcmVkLWJ5OiBKZWZmIExhdyAgPGpsYXdAdmVudGFuYW1pY3JvLmNvbT4K CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jpc2N2L2JpdG1hbmlwLm1kIGIvZ2NjL2NvbmZp Zy9yaXNjdi9iaXRtYW5pcC5tZAppbmRleCA5NmQzMWQ5MjY3MC4uYzQyZTdiODkwZGIgMTAw NjQ0Ci0tLSBhL2djYy9jb25maWcvcmlzY3YvYml0bWFuaXAubWQKKysrIGIvZ2NjL2NvbmZp Zy9yaXNjdi9iaXRtYW5pcC5tZApAQCAtNDcsMTAgKzQ3LDEwIEBAIChkZWZpbmVfaW5zbiAi KnNoTmFkZCIKIDsgaW1wbGljaXQgc2lnbi1leHRlbnNpb25zLgogKGRlZmluZV9zcGxpdAog ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIikKLQkoc2ln bl9leHRlbmQ6REkgKGRpdjpTSSAocGx1czpTSSAoc3VicmVnOlNJIChhc2hpZnQ6REkgKG1h dGNoX29wZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3BlcmFuZCIpCi0JCQkJCQkJICAgICAgICht YXRjaF9vcGVyYW5kOlFJIDIgImltbTEyM19vcGVyYW5kIikpIDApCi0JCQkJCQkgICAgKHN1 YnJlZzpTSSAobWF0Y2hfb3BlcmFuZDpESSAzICJyZWdpc3Rlcl9vcGVyYW5kIikgMCkpCi0J CShzdWJyZWc6U0kgKG1hdGNoX29wZXJhbmQ6REkgNCAicmVnaXN0ZXJfb3BlcmFuZCIpIDAp KSkpCisJKHNpZ25fZXh0ZW5kOkRJIChkaXY6U0kgKHBsdXM6U0kgKGFzaGlmdDpTSSAoc3Vi cmVnOlNJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVyX29wZXJhbmQiKSAwKQorCQkJ CQkJICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgImltbTEyM19vcGVyYW5kIikpCisJCQkJCSAo c3VicmVnOlNJIChtYXRjaF9vcGVyYW5kOkRJIDMgInJlZ2lzdGVyX29wZXJhbmQiKSAwKSkK KwkJCQkoc3VicmVnOlNJIChtYXRjaF9vcGVyYW5kOkRJIDQgInJlZ2lzdGVyX29wZXJhbmQi KSAwKSkpKQogICAgKGNsb2JiZXIgKG1hdGNoX29wZXJhbmQ6REkgNSAicmVnaXN0ZXJfb3Bl cmFuZCIpKV0KICAgIlRBUkdFVF82NEJJVCAmJiBUQVJHRVRfWkJBIgogICAgWyhzZXQgKG1h dGNoX2R1cCA1KSAocGx1czpESSAoYXNoaWZ0OkRJIChtYXRjaF9kdXAgMSkgKG1hdGNoX2R1 cCAyKSkgKG1hdGNoX2R1cCAzKSkpCkBAIC0zMDQsMTEgKzMwNCwxMSBAQCAoZGVmaW5lX2lu c24gIip6ZXJvX2V4dGVuZGhpPEdQUjptb2RlPjJfemJiIgogICBbKHNldF9hdHRyICJ0eXBl IiAiYml0bWFuaXAsbG9hZCIpCiAgICAoc2V0X2F0dHIgIm1vZGUiICJISSIpXSkKIAotKGRl ZmluZV9leHBhbmQgInJvdHI8bW9kZT4zIgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpHUFIg MCAicmVnaXN0ZXJfb3BlcmFuZCIpCi0JKHJvdGF0ZXJ0OkdQUiAobWF0Y2hfb3BlcmFuZDpH UFIgMSAicmVnaXN0ZXJfb3BlcmFuZCIpCisoZGVmaW5lX2V4cGFuZCAicm90cmRpMyIKKyAg WyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisJKHJvdGF0 ZXJ0OkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVyX29wZXJhbmQiKQogCQkgICAg IChtYXRjaF9vcGVyYW5kOlFJIDIgImFyaXRoX29wZXJhbmQiKSkpXQotICAiVEFSR0VUX1pC QiB8fCBUQVJHRVRfWFRIRUFEQkIgfHwgVEFSR0VUX1pCS0IiCisgICJUQVJHRVRfNjRCSVQg JiYgKFRBUkdFVF9aQkIgfHwgVEFSR0VUX1hUSEVBREJCIHx8IFRBUkdFVF9aQktCKSIKIHsK ICAgaWYgKFRBUkdFVF9YVEhFQURCQiAmJiAhaW1tZWRpYXRlX29wZXJhbmQgKG9wZXJhbmRz WzJdLCBWT0lEbW9kZSkpCiAgICAgRkFJTDsKQEAgLTMyMiw2ICszMjIsMjYgQEAgKGRlZmlu ZV9pbnNuICIqcm90cnNpMyIKICAgInJvciVpMiV+XHQlMCwlMSwlMiIKICAgWyhzZXRfYXR0 ciAidHlwZSIgImJpdG1hbmlwIildKQogCisoZGVmaW5lX2V4cGFuZCAicm90cnNpMyIKKyAg WyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKyAg ICAgICAocm90YXRlcnQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFu ZCIgInIiKQorICAgICAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJhcml0 aF9vcGVyYW5kIiAickkiKSkpXQorICAiVEFSR0VUX1pCQiB8fCBUQVJHRVRfWkJLQiB8fCBU QVJHRVRfWFRIRUFEQkIiCit7CisgIGlmIChUQVJHRVRfWFRIRUFEQkIgJiYgIWltbWVkaWF0 ZV9vcGVyYW5kIChvcGVyYW5kc1syXSwgVk9JRG1vZGUpKQorICAgIEZBSUw7CisgIGlmIChU QVJHRVRfNjRCSVQgJiYgcmVnaXN0ZXJfb3BlcmFuZCAob3BlcmFuZHNbMl0sIFFJbW9kZSkp CisgICAgeworICAgICAgcnR4IHQgPSBnZW5fcmVnX3J0eCAoREltb2RlKTsKKyAgICAgIGVt aXRfaW5zbiAoZ2VuX3JvdHJzaTNfc2V4dCAodCwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJd KSk7CisgICAgICB0ID0gZ2VuX2xvd3BhcnQgKFNJbW9kZSwgdCk7CisgICAgICBTVUJSRUdf UFJPTU9URURfVkFSX1AgKHQpID0gMTsKKyAgICAgIFNVQlJFR19QUk9NT1RFRF9TRVQgKHQs IFNSUF9TSUdORUQpOworICAgICAgZW1pdF9tb3ZlX2luc24gKG9wZXJhbmRzWzBdLCB0KTsK KyAgICAgIERPTkU7CisgICAgfQorfSkKKwogKGRlZmluZV9pbnNuICIqcm90cmRpMyIKICAg WyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKIAko cm90YXRlcnQ6REkgKG1hdGNoX29wZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIi KQpAQCAtMzMwLDcgKzM1MCw3IEBAIChkZWZpbmVfaW5zbiAiKnJvdHJkaTMiCiAgICJyb3Il aTJcdCUwLCUxLCUyIgogICBbKHNldF9hdHRyICJ0eXBlIiAiYml0bWFuaXAiKV0pCiAKLShk ZWZpbmVfaW5zbiAiKnJvdHJzaTNfc2V4dCIKKyhkZWZpbmVfaW5zbiAicm90cnNpM19zZXh0 IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIi KQogCShzaWduX2V4dGVuZDpESSAocm90YXRlcnQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAi cmVnaXN0ZXJfb3BlcmFuZCIgInIiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAiYXJpdGhfb3BlcmFuZCIgInJJIikpKSldCkBAIC0z MzgsNyArMzU4LDcgQEAgKGRlZmluZV9pbnNuICIqcm90cnNpM19zZXh0IgogICAicm9yJWky JX5cdCUwLCUxLCUyIgogICBbKHNldF9hdHRyICJ0eXBlIiAiYml0bWFuaXAiKV0pCiAKLShk ZWZpbmVfaW5zbiAicm90bHNpMyIKKyhkZWZpbmVfaW5zbiAiKnJvdGxzaTMiCiAgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCiAJKHJvdGF0 ZTpTSSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCiAJCSAg IChtYXRjaF9vcGVyYW5kOlFJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKV0KQEAgLTM0 Niw2ICszNjYsMjQgQEAgKGRlZmluZV9pbnNuICJyb3Rsc2kzIgogICAicm9sJX5cdCUwLCUx LCUyIgogICBbKHNldF9hdHRyICJ0eXBlIiAiYml0bWFuaXAiKV0pCiAKKyhkZWZpbmVfZXhw YW5kICJyb3Rsc2kzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9v cGVyYW5kIiAiPXIiKQorICAgICAgIChyb3RhdGU6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAi cmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorICAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJh bmQ6UUkgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkpXQorICAiVEFSR0VUX1pCQiB8fCBU QVJHRVRfWkJLQiIKK3sKKyAgaWYgKFRBUkdFVF82NEJJVCkKKyAgICB7CisgICAgICBydHgg dCA9IGdlbl9yZWdfcnR4IChESW1vZGUpOworICAgICAgZW1pdF9pbnNuIChnZW5fcm90bHNp M19zZXh0ICh0LCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pKTsKKyAgICAgIHQgPSBnZW5f bG93cGFydCAoU0ltb2RlLCB0KTsKKyAgICAgIFNVQlJFR19QUk9NT1RFRF9WQVJfUCAodCkg PSAxOworICAgICAgU1VCUkVHX1BST01PVEVEX1NFVCAodCwgU1JQX1NJR05FRCk7CisgICAg ICBlbWl0X21vdmVfaW5zbiAob3BlcmFuZHNbMF0sIHQpOworICAgICAgRE9ORTsKKyAgICB9 Cit9KQorCiAoZGVmaW5lX2luc24gInJvdGxkaTMiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5k OkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCiAJKHJvdGF0ZTpESSAobWF0Y2hfb3Bl cmFuZDpESSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCmRpZmYgLS1naXQgYS9nY2MvY29u ZmlnL3Jpc2N2L3Jpc2N2LXByb3Rvcy5oIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi1wcm90 b3MuaAppbmRleCA5NzgyZjE3OTRmYi4uMzhlNDEyNTQyNGIgMTAwNjQ0Ci0tLSBhL2djYy9j b25maWcvcmlzY3YvcmlzY3YtcHJvdG9zLmgKKysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNj di1wcm90b3MuaApAQCAtNjEsNiArNjEsNyBAQCBleHRlcm4gY29uc3QgY2hhciAqcmlzY3Zf b3V0cHV0X3JldHVybiAoKTsKIGV4dGVybiB2b2lkIHJpc2N2X2V4cGFuZF9pbnRfc2NjIChy dHgsIGVudW0gcnR4X2NvZGUsIHJ0eCwgcnR4KTsKIGV4dGVybiB2b2lkIHJpc2N2X2V4cGFu ZF9mbG9hdF9zY2MgKHJ0eCwgZW51bSBydHhfY29kZSwgcnR4LCBydHgpOwogZXh0ZXJuIHZv aWQgcmlzY3ZfZXhwYW5kX2NvbmRpdGlvbmFsX2JyYW5jaCAocnR4LCBlbnVtIHJ0eF9jb2Rl LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4IHJpc2N2X2VtaXRfYmluYXJ5IChlbnVtIHJ0eF9j b2RlIGNvZGUsIHJ0eCBkZXN0LCBydHggeCwgcnR4IHkpOwogI2VuZGlmCiBleHRlcm4gYm9v bCByaXNjdl9leHBhbmRfY29uZGl0aW9uYWxfbW92ZSAocnR4LCBydHgsIHJ0eCwgcnR4KTsK IGV4dGVybiBydHggcmlzY3ZfbGVnaXRpbWl6ZV9jYWxsX2FkZHJlc3MgKHJ0eCk7CmRpZmYg LS1naXQgYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LmNjIGIvZ2NjL2NvbmZpZy9yaXNjdi9y aXNjdi5jYwppbmRleCA2MGViZDk5MDNlNS4uZGUzMGJmNGU1NjcgMTAwNjQ0Ci0tLSBhL2dj Yy9jb25maWcvcmlzY3YvcmlzY3YuY2MKKysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5j YwpAQCAtMTQxNSw3ICsxNDE1LDcgQEAgcmlzY3ZfZW1pdF9zZXQgKHJ0eCB0YXJnZXQsIHJ0 eCBzcmMpCiAKIC8qIEVtaXQgYW4gaW5zdHJ1Y3Rpb24gb2YgdGhlIGZvcm0gKHNldCBERVNU IChDT0RFIFggWSkpLiAgKi8KIAotc3RhdGljIHJ0eAorcnR4CiByaXNjdl9lbWl0X2JpbmFy eSAoZW51bSBydHhfY29kZSBjb2RlLCBydHggZGVzdCwgcnR4IHgsIHJ0eCB5KQogewogICBy ZXR1cm4gcmlzY3ZfZW1pdF9zZXQgKGRlc3QsIGdlbl9ydHhfZm10X2VlIChjb2RlLCBHRVRf TU9ERSAoZGVzdCksIHgsIHkpKTsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcmlzY3Yvcmlz Y3YubWQgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2Lm1kCmluZGV4IGJlOTYwNTgzMTAxLi4z OGI4ZmJhMmE1MyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5tZAorKysg Yi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2Lm1kCkBAIC01MTMsNyArNTEzLDcgQEAgKGRlZmlu ZV9pbnNuICJhZGQ8bW9kZT4zIgogICBbKHNldF9hdHRyICJ0eXBlIiAiZmFkZCIpCiAgICAo c2V0X2F0dHIgIm1vZGUiICI8VU5JVE1PREU+IildKQogCi0oZGVmaW5lX2luc24gImFkZHNp MyIKKyhkZWZpbmVfaW5zbiAiKmFkZHNpMyIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kg ICAgICAgICAgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yLHIiKQogCShwbHVzOlNJIChtYXRj aF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIgcixyIikKIAkJIChtYXRjaF9v cGVyYW5kOlNJIDIgImFyaXRoX29wZXJhbmQiICAgICIgcixJIikpKV0KQEAgLTUyMiw2ICs1 MjIsMjQgQEAgKGRlZmluZV9pbnNuICJhZGRzaTMiCiAgIFsoc2V0X2F0dHIgInR5cGUiICJh cml0aCIpCiAgICAoc2V0X2F0dHIgIm1vZGUiICJTSSIpXSkKIAorKGRlZmluZV9leHBhbmQg ImFkZHNpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgICAgICAgICAgMCAicmVnaXN0 ZXJfb3BlcmFuZCIgIj1yLHIiKQorCShwbHVzOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJl Z2lzdGVyX29wZXJhbmQiICIgcixyIikKKwkJIChtYXRjaF9vcGVyYW5kOlNJIDIgImFyaXRo X29wZXJhbmQiICAgICIgcixJIikpKV0KKyAgIiIKK3sKKyAgaWYgKFRBUkdFVF82NEJJVCkK KyAgICB7CisgICAgICBydHggdCA9IGdlbl9yZWdfcnR4IChESW1vZGUpOworICAgICAgZW1p dF9pbnNuIChnZW5fYWRkc2kzX2V4dGVuZGVkICh0LCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNb Ml0pKTsKKyAgICAgIHQgPSBnZW5fbG93cGFydCAoU0ltb2RlLCB0KTsKKyAgICAgIFNVQlJF R19QUk9NT1RFRF9WQVJfUCAodCkgPSAxOworICAgICAgU1VCUkVHX1BST01PVEVEX1NFVCAo dCwgU1JQX1NJR05FRCk7CisgICAgICBlbWl0X21vdmVfaW5zbiAob3BlcmFuZHNbMF0sIHQp OworICAgICAgRE9ORTsKKyAgICB9Cit9KQorCiAoZGVmaW5lX2luc24gImFkZGRpMyIKICAg WyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgICAgICAgICAgMCAicmVnaXN0ZXJfb3BlcmFuZCIg Ij1yLHIiKQogCShwbHVzOkRJIChtYXRjaF9vcGVyYW5kOkRJIDEgInJlZ2lzdGVyX29wZXJh bmQiICIgcixyIikKQEAgLTU0NSw3ICs1NjMsNyBAQCAoZGVmaW5lX2V4cGFuZCAiYWRkdjxt b2RlPjQiCiAgICAgICBydHggdDUgPSBnZW5fcmVnX3J0eCAoREltb2RlKTsKICAgICAgIHJ0 eCB0NiA9IGdlbl9yZWdfcnR4IChESW1vZGUpOwogCi0gICAgICBlbWl0X2luc24gKGdlbl9h ZGRzaTMgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pKTsKKyAgICAg IHJpc2N2X2VtaXRfYmluYXJ5IChQTFVTLCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9w ZXJhbmRzWzJdKTsKICAgICAgIGlmIChHRVRfQ09ERSAob3BlcmFuZHNbMV0pICE9IENPTlNU X0lOVCkKIAllbWl0X2luc24gKGdlbl9leHRlbmRfaW5zbiAodDQsIG9wZXJhbmRzWzFdLCBE SW1vZGUsIFNJbW9kZSwgMCkpOwogICAgICAgZWxzZQpAQCAtNTkxLDcgKzYwOSw3IEBAIChk ZWZpbmVfZXhwYW5kICJ1YWRkdjxtb2RlPjQiCiAJZW1pdF9pbnNuIChnZW5fZXh0ZW5kX2lu c24gKHQzLCBvcGVyYW5kc1sxXSwgREltb2RlLCBTSW1vZGUsIDApKTsKICAgICAgIGVsc2UK IAl0MyA9IG9wZXJhbmRzWzFdOwotICAgICAgZW1pdF9pbnNuIChnZW5fYWRkc2kzIChvcGVy YW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7CisgICAgICByaXNjdl9lbWl0 X2JpbmFyeSAoUExVUywgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSk7 CiAgICAgICBlbWl0X2luc24gKGdlbl9leHRlbmRfaW5zbiAodDQsIG9wZXJhbmRzWzBdLCBE SW1vZGUsIFNJbW9kZSwgMCkpOwogCiAgICAgICByaXNjdl9leHBhbmRfY29uZGl0aW9uYWxf YnJhbmNoIChvcGVyYW5kc1szXSwgTFRVLCB0NCwgdDMpOwpAQCAtNjA2LDcgKzYyNCw3IEBA IChkZWZpbmVfZXhwYW5kICJ1YWRkdjxtb2RlPjQiCiAgIERPTkU7CiB9KQogCi0oZGVmaW5l X2luc24gIiphZGRzaTNfZXh0ZW5kZWQiCisoZGVmaW5lX2luc24gImFkZHNpM19leHRlbmRl ZCIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgICAgICAgICAgICAgICAwICJyZWdpc3Rl cl9vcGVyYW5kIiAiPXIsciIpCiAJKHNpZ25fZXh0ZW5kOkRJCiAJICAgICAocGx1czpTSSAo bWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIHIsciIpCkBAIC02NTMs NyArNjcxLDcgQEAgKGRlZmluZV9pbnNuICJzdWJkaTMiCiAgIFsoc2V0X2F0dHIgInR5cGUi ICJhcml0aCIpCiAgICAoc2V0X2F0dHIgIm1vZGUiICJESSIpXSkKIAotKGRlZmluZV9pbnNu ICJzdWJzaTMiCisoZGVmaW5lX2luc24gIipzdWJzaTMiCiAgIFsoc2V0IChtYXRjaF9vcGVy YW5kOlNJICAgICAgICAgICAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSByIikKIAkobWludXM6 U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnX29yXzBfb3BlcmFuZCIgIiBySiIpCiAJCSAg KG1hdGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIiAgciIpKSldCkBAIC02 NjIsNiArNjgwLDI0IEBAIChkZWZpbmVfaW5zbiAic3Vic2kzIgogICBbKHNldF9hdHRyICJ0 eXBlIiAiYXJpdGgiKQogICAgKHNldF9hdHRyICJtb2RlIiAiU0kiKV0pCiAKKyhkZWZpbmVf ZXhwYW5kICJzdWJzaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJICAgICAgICAgICAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSByIikKKyAgICAgICAobWludXM6U0kgKG1hdGNoX29w ZXJhbmQ6U0kgMSAicmVnX29yXzBfb3BlcmFuZCIgIiBySiIpCisgICAgICAgICAgICAgICAg IChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICIgIHIiKSkpXQorICAi IgoreworICBpZiAoVEFSR0VUXzY0QklUKQorICAgIHsKKyAgICAgIHJ0eCB0ID0gZ2VuX3Jl Z19ydHggKERJbW9kZSk7CisgICAgICBlbWl0X2luc24gKGdlbl9zdWJzaTNfZXh0ZW5kZWQg KHQsIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSkpOworICAgICAgdCA9IGdlbl9sb3dwYXJ0 IChTSW1vZGUsIHQpOworICAgICAgU1VCUkVHX1BST01PVEVEX1ZBUl9QICh0KSA9IDE7Cisg ICAgICBTVUJSRUdfUFJPTU9URURfU0VUICh0LCBTUlBfU0lHTkVEKTsKKyAgICAgIGVtaXRf bW92ZV9pbnNuIChvcGVyYW5kc1swXSwgdCk7CisgICAgICBET05FOworICAgIH0KK30pCisK IChkZWZpbmVfZXhwYW5kICJzdWJ2PG1vZGU+NCIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 R1BSICAgICAgICAgICAgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj0gciIpCiAJKG1pbnVzOkdQ UiAobWF0Y2hfb3BlcmFuZDpHUFIgMSAicmVnX29yXzBfb3BlcmFuZCIgIiBySiIpCkBAIC02 NzYsNyArNzEyLDcgQEAgKGRlZmluZV9leHBhbmQgInN1YnY8bW9kZT40IgogICAgICAgcnR4 IHQ1ID0gZ2VuX3JlZ19ydHggKERJbW9kZSk7CiAgICAgICBydHggdDYgPSBnZW5fcmVnX3J0 eCAoREltb2RlKTsKIAotICAgICAgZW1pdF9pbnNuIChnZW5fc3Vic2kzIChvcGVyYW5kc1sw XSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7CisgICAgICByaXNjdl9lbWl0X2JpbmFy eSAoTUlOVVMsIG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pOwogICAg ICAgaWYgKEdFVF9DT0RFIChvcGVyYW5kc1sxXSkgIT0gQ09OU1RfSU5UKQogCWVtaXRfaW5z biAoZ2VuX2V4dGVuZF9pbnNuICh0NCwgb3BlcmFuZHNbMV0sIERJbW9kZSwgU0ltb2RlLCAw KSk7CiAgICAgICBlbHNlCkBAIC03MjUsNyArNzYxLDcgQEAgKGRlZmluZV9leHBhbmQgInVz dWJ2PG1vZGU+NCIKIAllbWl0X2luc24gKGdlbl9leHRlbmRfaW5zbiAodDMsIG9wZXJhbmRz WzFdLCBESW1vZGUsIFNJbW9kZSwgMCkpOwogICAgICAgZWxzZQogCXQzID0gb3BlcmFuZHNb MV07Ci0gICAgICBlbWl0X2luc24gKGdlbl9zdWJzaTMgKG9wZXJhbmRzWzBdLCBvcGVyYW5k c1sxXSwgb3BlcmFuZHNbMl0pKTsKKyAgICAgIHJpc2N2X2VtaXRfYmluYXJ5IChNSU5VUywg b3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSk7CiAgICAgICBlbWl0X2lu c24gKGdlbl9leHRlbmRfaW5zbiAodDQsIG9wZXJhbmRzWzBdLCBESW1vZGUsIFNJbW9kZSwg MCkpOwogCiAgICAgICByaXNjdl9leHBhbmRfY29uZGl0aW9uYWxfYnJhbmNoIChvcGVyYW5k c1szXSwgTFRVLCB0MywgdDQpOwpAQCAtNzQxLDcgKzc3Nyw3IEBAIChkZWZpbmVfZXhwYW5k ICJ1c3Vidjxtb2RlPjQiCiB9KQogCiAKLShkZWZpbmVfaW5zbiAiKnN1YnNpM19leHRlbmRl ZCIKKyhkZWZpbmVfaW5zbiAic3Vic2kzX2V4dGVuZGVkIgogICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpESSAgICAgICAgICAgICAgIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9IHIiKQogCShz aWduX2V4dGVuZDpESQogCSAgICAobWludXM6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVn X29yXzBfb3BlcmFuZCIgIiBySiIpCkBAIC03NzAsNyArODA2LDcgQEAgKGRlZmluZV9pbnNu ICJuZWdkaTIiCiAgIFsoc2V0X2F0dHIgInR5cGUiICJhcml0aCIpCiAgICAoc2V0X2F0dHIg Im1vZGUiICJESSIpXSkKIAotKGRlZmluZV9pbnNuICJuZWdzaTIiCisoZGVmaW5lX2luc24g IipuZWdzaTIiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJICAgICAgICAgMCAicmVnaXN0 ZXJfb3BlcmFuZCIgIj1yIikKIAkobmVnOlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lz dGVyX29wZXJhbmQiICIgciIpKSldCiAgICIiCkBAIC03NzgsNyArODE0LDI0IEBAIChkZWZp bmVfaW5zbiAibmVnc2kyIgogICBbKHNldF9hdHRyICJ0eXBlIiAiYXJpdGgiKQogICAgKHNl dF9hdHRyICJtb2RlIiAiU0kiKV0pCiAKLShkZWZpbmVfaW5zbiAiKm5lZ3NpMl9leHRlbmRl ZCIKKyhkZWZpbmVfZXhwYW5kICJuZWdzaTIiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJ ICAgICAgICAgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkobmVnOlNJIChtYXRjaF9v cGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIgciIpKSldCisgICIiCit7CisgIGlm IChUQVJHRVRfNjRCSVQpCisgICAgeworICAgICAgcnR4IHQgPSBnZW5fcmVnX3J0eCAoRElt b2RlKTsKKyAgICAgIGVtaXRfaW5zbiAoZ2VuX25lZ3NpMl9leHRlbmRlZCAodCwgb3BlcmFu ZHNbMV0pKTsKKyAgICAgIHQgPSBnZW5fbG93cGFydCAoU0ltb2RlLCB0KTsKKyAgICAgIFNV QlJFR19QUk9NT1RFRF9WQVJfUCAodCkgPSAxOworICAgICAgU1VCUkVHX1BST01PVEVEX1NF VCAodCwgU1JQX1NJR05FRCk7CisgICAgICBlbWl0X21vdmVfaW5zbiAob3BlcmFuZHNbMF0s IHQpOworICAgICAgRE9ORTsKKyAgICB9Cit9KQorCisoZGVmaW5lX2luc24gIm5lZ3NpMl9l eHRlbmRlZCIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgICAgICAgICAgMCAicmVnaXN0 ZXJfb3BlcmFuZCIgIj1yIikKIAkoc2lnbl9leHRlbmQ6REkKIAkgKG5lZzpTSSAobWF0Y2hf b3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIHIiKSkpKV0KQEAgLTgxNCw3ICs4 NjcsNyBAQCAoZGVmaW5lX2luc24gIm11bDxtb2RlPjMiCiAgIFsoc2V0X2F0dHIgInR5cGUi ICJmbXVsIikKICAgIChzZXRfYXR0ciAibW9kZSIgIjxVTklUTU9ERT4iKV0pCiAKLShkZWZp bmVfaW5zbiAibXVsc2kzIgorKGRlZmluZV9pbnNuICIqbXVsc2kzIgogICBbKHNldCAobWF0 Y2hfb3BlcmFuZDpTSSAgICAgICAgICAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQogCSht dWx0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIgciIpCiAJ CSAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiIHIiKSkpXQpAQCAt ODIzLDYgKzg3NiwyNCBAQCAoZGVmaW5lX2luc24gIm11bHNpMyIKICAgWyhzZXRfYXR0ciAi dHlwZSIgImltdWwiKQogICAgKHNldF9hdHRyICJtb2RlIiAiU0kiKV0pCiAKKyhkZWZpbmVf ZXhwYW5kICJtdWxzaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJICAgICAgICAgIDAg InJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisgICAgICAgKG11bHQ6U0kgKG1hdGNoX29wZXJh bmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiByIikKKyAgICAgICAgICAgICAgICAobWF0 Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiIHIiKSkpXQorICAiVEFSR0VU X1pNTVVMIHx8IFRBUkdFVF9NVUwiCit7CisgIGlmIChUQVJHRVRfNjRCSVQpCisgICAgewor ICAgICAgcnR4IHQgPSBnZW5fcmVnX3J0eCAoREltb2RlKTsKKyAgICAgIGVtaXRfaW5zbiAo Z2VuX211bHNpM19leHRlbmRlZCAodCwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7Cisg ICAgICB0ID0gZ2VuX2xvd3BhcnQgKFNJbW9kZSwgdCk7CisgICAgICBTVUJSRUdfUFJPTU9U RURfVkFSX1AgKHQpID0gMTsKKyAgICAgIFNVQlJFR19QUk9NT1RFRF9TRVQgKHQsIFNSUF9T SUdORUQpOworICAgICAgZW1pdF9tb3ZlX2luc24gKG9wZXJhbmRzWzBdLCB0KTsKKyAgICAg IERPTkU7CisgICAgfQorfSkKKwogKGRlZmluZV9pbnNuICJtdWxkaTMiCiAgIFsoc2V0ICht YXRjaF9vcGVyYW5kOkRJICAgICAgICAgIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCiAJ KG11bHQ6REkgKG1hdGNoX29wZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiByIikK QEAgLTg2OCw4ICs5MzksOCBAQCAoZGVmaW5lX2V4cGFuZCAibXVsdjxtb2RlPjQiCiAKICAg ICAgIGVtaXRfaW5zbiAoZ2VuX3NtdWw8bW9kZT4zX2hpZ2hwYXJ0IChocCwgb3BlcmFuZHNb MV0sIG9wZXJhbmRzWzJdKSk7CiAgICAgICBlbWl0X2luc24gKGdlbl9tdWw8bW9kZT4zIChv cGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7Ci0gICAgICBlbWl0X2lu c24gKGdlbl9hc2hyPG1vZGU+MyAobHAsIG9wZXJhbmRzWzBdLAotCQkJCSAgR0VOX0lOVCAo QklUU19QRVJfV09SRCAtIDEpKSk7CisgICAgICByaXNjdl9lbWl0X2JpbmFyeSAoQVNISUZU UlQsIGxwLCBvcGVyYW5kc1swXSwKKwkJCSBHRU5fSU5UIChCSVRTX1BFUl9XT1JEIC0gMSkp OwogCiAgICAgICByaXNjdl9leHBhbmRfY29uZGl0aW9uYWxfYnJhbmNoIChvcGVyYW5kc1sz XSwgTkUsIGhwLCBscCk7CiAgICAgfQpAQCAtOTIzLDcgKzk5NCw3IEBAIChkZWZpbmVfZXhw YW5kICJ1bXVsdjxtb2RlPjQiCiAgIERPTkU7CiB9KQogCi0oZGVmaW5lX2luc24gIiptdWxz aTNfZXh0ZW5kZWQiCisoZGVmaW5lX2luc24gIm11bHNpM19leHRlbmRlZCIKICAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6REkgICAgICAgICAgICAgIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9 ciIpCiAJKHNpZ25fZXh0ZW5kOkRJCiAJICAgIChtdWx0OlNJIChtYXRjaF9vcGVyYW5kOlNJ IDEgInJlZ2lzdGVyX29wZXJhbmQiICIgciIpCkBAIC0xMDI0LDcgKzEwOTUsNyBAQCAoZGVm aW5lX2V4cGFuZCAiPHU+bXVsc2lkaTMiCiAgICIoVEFSR0VUX1pNTVVMIHx8IFRBUkdFVF9N VUwpICYmICFUQVJHRVRfNjRCSVQiCiB7CiAgIHJ0eCB0ZW1wID0gZ2VuX3JlZ19ydHggKFNJ bW9kZSk7Ci0gIGVtaXRfaW5zbiAoZ2VuX211bHNpMyAodGVtcCwgb3BlcmFuZHNbMV0sIG9w ZXJhbmRzWzJdKSk7CisgIHJpc2N2X2VtaXRfYmluYXJ5IChNVUxULCB0ZW1wLCBvcGVyYW5k c1sxXSwgb3BlcmFuZHNbMl0pOwogICBlbWl0X2luc24gKGdlbl88c3U+bXVsc2kzX2hpZ2hw YXJ0IChyaXNjdl9zdWJ3b3JkIChvcGVyYW5kc1swXSwgdHJ1ZSksCiAJCQkJICAgICBvcGVy YW5kc1sxXSwgb3BlcmFuZHNbMl0pKTsKICAgZW1pdF9pbnNuIChnZW5fbW92c2kgKHJpc2N2 X3N1YndvcmQgKG9wZXJhbmRzWzBdLCBmYWxzZSksIHRlbXApKTsKQEAgLTEwNTUsNyArMTEy Niw3IEBAIChkZWZpbmVfZXhwYW5kICJ1c211bHNpZGkzIgogICAiKFRBUkdFVF9aTU1VTCB8 fCBUQVJHRVRfTVVMKSAmJiAhVEFSR0VUXzY0QklUIgogewogICBydHggdGVtcCA9IGdlbl9y ZWdfcnR4IChTSW1vZGUpOwotICBlbWl0X2luc24gKGdlbl9tdWxzaTMgKHRlbXAsIG9wZXJh bmRzWzFdLCBvcGVyYW5kc1syXSkpOworICByaXNjdl9lbWl0X2JpbmFyeSAoTVVMVCwgdGVt cCwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKTsKICAgZW1pdF9pbnNuIChnZW5fdXNtdWxz aTNfaGlnaHBhcnQgKHJpc2N2X3N1YndvcmQgKG9wZXJhbmRzWzBdLCB0cnVlKSwKIAkJCQkg ICAgIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSkpOwogICBlbWl0X2luc24gKGdlbl9tb3Zz aSAocmlzY3Zfc3Vid29yZCAob3BlcmFuZHNbMF0sIGZhbHNlKSwgdGVtcCkpOwpAQCAtMTA4 NCw3ICsxMTU1LDcgQEAgKGRlZmluZV9pbnNuICJ1c211bHNpM19oaWdocGFydCIKIDs7ICAu Li4uLi4uLi4uLi4uLi4uLi4uLgogOzsKIAotKGRlZmluZV9pbnNuICI8b3B0YWI+c2kzIgor KGRlZmluZV9pbnNuICIqPG9wdGFiPnNpMyIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kg ICAgICAgICAgICAgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKIAkoYW55X2RpdjpTSSAo bWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIHIiKQogCQkgICAgKG1h dGNoX29wZXJhbmQ6U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIiByIikpKV0KQEAgLTEwOTMs NiArMTE2NCwyNCBAQCAoZGVmaW5lX2luc24gIjxvcHRhYj5zaTMiCiAgIFsoc2V0X2F0dHIg InR5cGUiICJpZGl2IikKICAgIChzZXRfYXR0ciAibW9kZSIgIlNJIildKQogCisoZGVmaW5l X2V4cGFuZCAiPG9wdGFiPnNpMyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgICAgICAg ICAgICAgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKyAgICAgICAoYW55X2RpdjpTSSAo bWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIHIiKQorICAgICAgICAg ICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICIgciIp KSldCisgICJUQVJHRVRfRElWIgoreworICBpZiAoVEFSR0VUXzY0QklUKQorICAgIHsKKyAg ICAgIHJ0eCB0ID0gZ2VuX3JlZ19ydHggKERJbW9kZSk7CisgICAgICBlbWl0X2luc24gKGdl bl88b3B0YWI+c2kzX2V4dGVuZGVkICh0LCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pKTsK KyAgICAgIHQgPSBnZW5fbG93cGFydCAoU0ltb2RlLCB0KTsKKyAgICAgIFNVQlJFR19QUk9N T1RFRF9WQVJfUCAodCkgPSAxOworICAgICAgU1VCUkVHX1BST01PVEVEX1NFVCAodCwgU1JQ X1NJR05FRCk7CisgICAgICBlbWl0X21vdmVfaW5zbiAob3BlcmFuZHNbMF0sIHQpOworICAg ICAgRE9ORTsKKyAgICB9Cit9KQorCiAoZGVmaW5lX2luc24gIjxvcHRhYj5kaTMiCiAgIFso c2V0IChtYXRjaF9vcGVyYW5kOkRJICAgICAgICAgICAgIDAgInJlZ2lzdGVyX29wZXJhbmQi ICI9ciIpCiAJKGFueV9kaXY6REkgKG1hdGNoX29wZXJhbmQ6REkgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgIiByIikKQEAgLTExMTgsNyArMTIwNyw3IEBAIChkZWZpbmVfZXhwYW5kICI8dT5k aXZtb2Q8bW9kZT40IgogICAgICAgRE9ORTsKICAgfSkKIAotKGRlZmluZV9pbnNuICIqPG9w dGFiPnNpM19leHRlbmRlZCIKKyhkZWZpbmVfaW5zbiAiPG9wdGFiPnNpM19leHRlbmRlZCIK ICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgICAgICAgICAgICAgICAgIDAgInJlZ2lzdGVy X29wZXJhbmQiICI9ciIpCiAJKHNpZ25fZXh0ZW5kOkRJCiAJICAgIChhbnlfZGl2OlNJICht YXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIgciIpCkBAIC0yMDcyLDcg KzIxNjEsNyBAQCAoZGVmaW5lX2luc24gInJpc2N2X3BhdXNlIgogOzsgZXhwYW5kX3NoaWZ0 XzEgY2FuIGRvIHRoaXMgYXV0b21hdGljYWxseSB3aGVuIFNISUZUX0NPVU5UX1RSVU5DQVRF RCBpcwogOzsgZGVmaW5lZCwgYnV0IHVzZSBvZiB0aGF0IGlzIGRpc2NvdXJhZ2VkLgogCi0o ZGVmaW5lX2luc24gIjxvcHRhYj5zaTMiCisoZGVmaW5lX2luc24gIio8b3B0YWI+c2kzIgog ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAgICAgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj0g ciIpCiAJKGFueV9zaGlmdDpTSQogCSAgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rl cl9vcGVyYW5kIiAiICByIikKQEAgLTIwODgsNiArMjE3NywyNCBAQCAoZGVmaW5lX2luc24g IjxvcHRhYj5zaTMiCiAgIFsoc2V0X2F0dHIgInR5cGUiICJzaGlmdCIpCiAgICAoc2V0X2F0 dHIgIm1vZGUiICJTSSIpXSkKIAorKGRlZmluZV9leHBhbmQgIjxvcHRhYj5zaTMiCisgIFso c2V0IChtYXRjaF9vcGVyYW5kOlNJICAgICAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSByIikK KyAgICAgICAoYW55X3NoaWZ0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVyX29w ZXJhbmQiICIgIHIiKQorICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgImFy aXRoX29wZXJhbmQiICAgICIgckkiKSkpXQorICAiIgoreworICBpZiAoVEFSR0VUXzY0QklU KQorICAgIHsKKyAgICAgIHJ0eCB0ID0gZ2VuX3JlZ19ydHggKERJbW9kZSk7CisgICAgICBl bWl0X2luc24gKGdlbl88b3B0YWI+c2kzX2V4dGVuZCAodCwgb3BlcmFuZHNbMV0sIG9wZXJh bmRzWzJdKSk7CisgICAgICB0ID0gZ2VuX2xvd3BhcnQgKFNJbW9kZSwgdCk7CisgICAgICBT VUJSRUdfUFJPTU9URURfVkFSX1AgKHQpID0gMTsKKyAgICAgIFNVQlJFR19QUk9NT1RFRF9T RVQgKHQsIFNSUF9TSUdORUQpOworICAgICAgZW1pdF9tb3ZlX2luc24gKG9wZXJhbmRzWzBd LCB0KTsKKyAgICAgIERPTkU7CisgICAgfQorfSkKKwogKGRlZmluZV9pbnNuICI8b3B0YWI+ ZGkzIgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAg ICAgIj0gciIpCiAJKGFueV9zaGlmdDpESQpAQCAtMjEyMiw3ICsyMjI5LDcgQEAgKGRlZmlu ZV9pbnNuX2FuZF9zcGxpdCAiKjxvcHRhYj48R1BSOm1vZGU+M19tYXNrXzEiCiAgIFsoc2V0 X2F0dHIgInR5cGUiICJzaGlmdCIpCiAgICAoc2V0X2F0dHIgIm1vZGUiICI8R1BSOk1PREU+ IildKQogCi0oZGVmaW5lX2luc24gIio8b3B0YWI+c2kzX2V4dGVuZCIKKyhkZWZpbmVfaW5z biAiPG9wdGFiPnNpM19leHRlbmQiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkRJICAgICAg ICAgICAgICAgICAgIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9IHIiKQogCShzaWduX2V4dGVu ZDpESQogCSAgICAoYW55X3NoaWZ0OlNJIChtYXRjaF9vcGVyYW5kOlNJIDEgInJlZ2lzdGVy X29wZXJhbmQiICIgIHIiKQpkaWZmIC0tZ2l0IGEvZ2NjL2xvb3AtaXYuY2MgYi9nY2MvbG9v cC1pdi5jYwppbmRleCA2YzQwZGI5NDdmNy4uODU4YzVlZTg0ZjIgMTAwNjQ0Ci0tLSBhL2dj Yy9sb29wLWl2LmNjCisrKyBiL2djYy9sb29wLWl2LmNjCkBAIC02MzcsNyArNjM3LDcgQEAg Z2V0X2Jpdl9zdGVwXzEgKGRmX3JlZiBkZWYsIHNjYWxhcl9pbnRfbW9kZSBvdXRlcl9tb2Rl LCBydHggcmVnLAogewogICBydHggc2V0LCByaHMsIG9wMCA9IE5VTExfUlRYLCBvcDEgPSBO VUxMX1JUWDsKICAgcnR4IG5leHQsIG5leHRyOwotICBlbnVtIHJ0eF9jb2RlIGNvZGU7Cisg IGVudW0gcnR4X2NvZGUgY29kZSwgcHJldl9jb2RlID0gVU5LTk9XTjsKICAgcnR4X2luc24g Kmluc24gPSBERl9SRUZfSU5TTiAoZGVmKTsKICAgZGZfcmVmIG5leHRfZGVmOwogICBlbnVt IGl2X2dyZF9yZXN1bHQgcmVzOwpAQCAtNjk3LDYgKzY5NywyNyBAQCBnZXRfYml2X3N0ZXBf MSAoZGZfcmVmIGRlZiwgc2NhbGFyX2ludF9tb2RlIG91dGVyX21vZGUsIHJ0eCByZWcsCiAJ cmV0dXJuIGZhbHNlOwogCiAgICAgICBvcDAgPSBYRVhQIChyaHMsIDApOworCisgICAgICAv KiBydjY0IHdyYXBzIFNJbW9kZSBhcml0aG1ldGljIGluc2lkZSBhbiBleHRlbnNpb24gdG8g REltb2RlLgorCSBUaGlzIG1hdGNoZXMgdGhlIGFjdHVhbCBoYXJkd2FyZSBzZW1hbnRpY3Mu ICBTbyBwZWVrIGluc2lkZQorCSB0aGUgZXh0ZW5zaW9uIGFuZCBzZWUgaWYgd2UgaGF2ZSBz aW1wbGUgYXJpdGhtZXRpYyB0aGF0IHdlCisJIGNhbiBhbmFseXplLiAgKi8KKyAgICAgIGlm IChHRVRfQ09ERSAob3AwKSA9PSBQTFVTKQorCXsKKwkgIHJocyA9IG9wMDsKKwkgIG9wMCA9 IFhFWFAgKHJocywgMCk7CisJICBvcDEgPSBYRVhQIChyaHMsIDEpOworCisJICBpZiAoQ09O U1RBTlRfUCAob3AwKSkKKwkgICAgc3RkOjpzd2FwIChvcDAsIG9wMSk7CisKKwkgIGlmICgh c2ltcGxlX3JlZ19wIChvcDApIHx8ICFDT05TVEFOVF9QIChvcDEpKQorCSAgICByZXR1cm4g ZmFsc2U7CisKKwkgIHByZXZfY29kZSA9IGNvZGU7CisJICBjb2RlID0gUExVUzsKKwl9CisK ICAgICAgIGlmICghc2ltcGxlX3JlZ19wIChvcDApKQogCXJldHVybiBmYWxzZTsKIApAQCAt NzY5LDYgKzc5MCwxMSBAQCBnZXRfYml2X3N0ZXBfMSAoZGZfcmVmIGRlZiwgc2NhbGFyX2lu dF9tb2RlIG91dGVyX21vZGUsIHJ0eCByZWcsCiAgICAgICBlbHNlCiAJKm91dGVyX3N0ZXAg PSBzaW1wbGlmeV9nZW5fYmluYXJ5IChjb2RlLCBvdXRlcl9tb2RlLAogCQkJCQkgICAqb3V0 ZXJfc3RlcCwgb3AxKTsKKworICAgICAgaWYgKHByZXZfY29kZSA9PSBTSUdOX0VYVEVORCkK KwkqZXh0ZW5kID0gSVZfU0lHTl9FWFRFTkQ7CisgICAgICBlbHNlIGlmIChwcmV2X2NvZGUg PT0gWkVST19FWFRFTkQpCisJKmV4dGVuZCA9IElWX1pFUk9fRVhURU5EOwogICAgICAgYnJl YWs7CiAKICAgICBjYXNlIFNJR05fRVhURU5EOgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L3Jpc2N2L3NoaWZ0LWFuZC0yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvcmlzY3Yvc2hpZnQtYW5kLTIuYwppbmRleCBiYzAxZThlZjk5Mi4uZWU5OTI1Yjc0 OTggMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9zaGlmdC1h bmQtMi5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9zaGlmdC1hbmQt Mi5jCkBAIC0zOCw1ICszOCwyNCBAQCBzdWI2IChsb25nIGksIGxvbmcgaikKIHsKICAgcmV0 dXJuIGkgPDwgKGogJiAweDNmKTsKIH0KKworLyogVGVzdCBmb3IgPG9wdGFiPnNpM19leHRl bmQuICovCitpbnQKK3N1YjcgKGludCBpLCBpbnQgaikgeworICByZXR1cm4gKGkgPDwgMTAp ICYgajsKK30KKworLyogVGVzdCBmb3IgPG9wdGFiPnNpM19leHRlbmQuICovCit1bnNpZ25l ZAorc3ViOCAodW5zaWduZWQgaSwgdW5zaWduZWQgaikgeworICByZXR1cm4gKGkgPDwgMTAp ICYgajsKK30KKworLyogVGVzdCBmb3IgPG9wdGFiPnNpM19leHRlbmQuICovCit1bnNpZ25l ZAorc3ViOSAodW5zaWduZWQgaSwgdW5zaWduZWQgaikgeworICByZXR1cm4gKGkgPj4gMTAp ICYgajsKK30KKwogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiYW5kaSIg fSB9ICovCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJzZXh0LnciIH0g fSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3NoaWZ0 LXNoaWZ0LTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9zaGlmdC1zaGlm dC0yLmMKaW5kZXggNWY5M2JlMTVhYzUuLmJjOGM0ZWYzODI4IDEwMDY0NAotLS0gYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3Yvc2hpZnQtc2hpZnQtMi5jCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9zaGlmdC1zaGlmdC0yLmMKQEAgLTM4LDUgKzM4 LDYgQEAgc3ViNSAodW5zaWduZWQgaW50IGkpCiB9CiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMgInNsbGkiIDUgfSB9ICovCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMgInNybGkiIDUgfSB9ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMgInNsbGl3IiAxIH0gfSAqLwotLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLXRpbWVzICJzcmxpdyIgMSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyAiLDQwIiAyIH0gfSAqLyAvKiBGb3Igc3ViNSB0ZXN0ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJzbGxpdyIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJzcmxpdyIgfSB9ICovCmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3Yvc2lnbi1leHRlbmQuYyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9zaWduLWV4dGVuZC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42Zjg0MDE5NDgzMwotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9zaWduLWV4dGVuZC5jCkBA IC0wLDAgKzEsODEgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB7IHJpc2N2NjQq LSotKiB9IH0gfSAqLworLyogeyBkZy1vcHRpb25zICItbWFyY2g9cnY2NGdjIC1tYWJpPWxw NjQiIH0gKi8KKy8qIHsgZGctc2tpcC1pZiAiIiB7ICotKi0qIH0geyAiLU8wIiB9IH0gKi8K KwordW5zaWduZWQKK2ZvbzEgKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHop Cit7CisgIHJldHVybiB4ICYgKHkgLSB6KTsKK30KKworaW50Citmb28yIChpbnQgeCwgaW50 IHksIGludCB6KQoreworICByZXR1cm4geCAmICh5IC0geik7Cit9CisKK3Vuc2lnbmVkCitm b28zICh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCB6KQoreworICByZXR1cm4g eCAmICh5ICogeik7Cit9CisKK2ludAorZm9vNCAoaW50IHgsIGludCB5LCBpbnQgeikKK3sK KyAgcmV0dXJuIHggJiAoeSAqIHopOworfQorCit1bnNpZ25lZAorZm9vNSAodW5zaWduZWQg eCwgdW5zaWduZWQgeSkKK3sKKyAgcmV0dXJuIHggJiAoeSAvIHgpOworfQorCitpbnQKK2Zv bzYgKGludCB4LCBpbnQgeSkKK3sKKyAgcmV0dXJuIHggJiAoeSAvIHgpOworfQorCit1bnNp Z25lZAorZm9vNyAodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKK3sKKyAgcmV0dXJuIHggJiAo eSAlIHgpOworfQorCitpbnQKK2ZvbzggKGludCB4LCBpbnQgeSkKK3sKKyAgcmV0dXJuIHgg JiAoeSAlIHgpOworfQorCitpbnQKK2ZvbzkgKGludCB4KQoreworICByZXR1cm4geCAmICgt eCk7Cit9CisKK3Vuc2lnbmVkCitmb28xMCAodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKK3sK KyAgcmV0dXJuIHggJiAoeSArIHgpOworfQorCisKK3Vuc2lnbmVkCitmb28xMSAodW5zaWdu ZWQgeCkKK3sKKyAgcmV0dXJuIHggJiAoMTUgKyB4KTsKK30KKworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJzdWJ3IiAyIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJhZGR3IiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJhZGRpdyIgMSB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyAibXVsdyIgMiB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyAiZGl2dyIgMSB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyAiZGl2dXciIDEgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInJlbXciIDEgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInJlbXV3IiAxIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJuZWd3IiAxIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAic2V4dC53IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi96YmItcm9sLXJvci0wMy5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3piYi1yb2wtcm9yLTAzLmMKaW5kZXggYjQ0ZDdm ZTg5MjAuLmU3ZTVjYmI5YTFhIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvcmlzY3YvemJiLXJvbC1yb3ItMDMuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvcmlzY3YvemJiLXJvbC1yb3ItMDMuYwpAQCAtMTYsNCArMTYsNSBAQCB1bnNpZ25lZCBp bnQgcm9yKHVuc2lnbmVkIGludCByczEsIHVuc2lnbmVkIGludCByczIpCiAKIC8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAicm9sdyIgMSB9IH0gKi8KIC8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAicm9ydyIgMSB9IH0gKi8KLS8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgImFuZCIgfSB9ICovClwgTm8gbmV3bGluZSBh dCBlbmQgb2YgZmlsZQorLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiYW5k IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInNleHQudyIg fSB9ICovCg== --------------Py0s0yiAbbDUROAZZObT5cb3--