From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 61777 invoked by alias); 30 Aug 2016 05:21:12 -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 61764 invoked by uid 89); 30 Aug 2016 05:21:11 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=2.3 required=5.0 tests=BAYES_95,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 spammy=Meet, lat, UD:ipa-prop.c, sk:stream_ X-HELO: mail-qt0-f178.google.com Received: from mail-qt0-f178.google.com (HELO mail-qt0-f178.google.com) (209.85.216.178) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 30 Aug 2016 05:21:01 +0000 Received: by mail-qt0-f178.google.com with SMTP id 52so4126681qtq.3 for ; Mon, 29 Aug 2016 22:21:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=CIKfYCm6ax9nyfyB7ihHGjpyGjcotVetOBSTlnzqCwA=; b=ftIoBKY7aGIUEd3e+4wRjvlSdseK8xJfq5zq8Ge8u1bdo1uCxDiu6EV7tR/urF3g2a gXZ0m1+4x/ZfSnRw3jcA84BsDuzvuCkXNKCxaNY7KVruyiDyS6mOKtrxlQh3KLz4rqXz gyF7sR7wuiSvcng0Tu7DdCAp8JHMJQXeoahcirJiO0uP5qNm15TzibS+q4aA+38YY8Q7 /fPAiVVNnNnWsJ3RbQ2UraZIptcaMEcLZ0uaPfRtPoZu9BOqvj01FQ6pcqC3VEnL8NtV uqEOAUrIq1mnX/3/BavqQl1A9ZpMspcsxSNUyOi+lo2cVEEVueeV7HdfB3sqTafLTSUX mJkw== X-Gm-Message-State: AE9vXwN5f2zzuH8PtPoyQi+LkPa7SC5/k4XFcPetokKDDhKXSAcgv9MB0++pvU5XKsTK+9z/gieJ315RWDn0GgvC X-Received: by 10.237.37.216 with SMTP id y24mr1981404qtc.58.1472534459598; Mon, 29 Aug 2016 22:20:59 -0700 (PDT) MIME-Version: 1.0 Received: by 10.200.53.49 with HTTP; Mon, 29 Aug 2016 22:20:58 -0700 (PDT) In-Reply-To: <20160721125416.GA23760@kam.mff.cuni.cz> References: <57886949.8010300@linaro.org> <57886A2A.4070703@linaro.org> <57886ABA.2060404@linaro.org> <20160715122309.glir5vk5ttwoagdp@virgil.suse.cz> <578DE340.4010904@linaro.org> <578E9B16.2080100@linaro.org> <20160721125416.GA23760@kam.mff.cuni.cz> From: Kugan Vivekanandarajah Date: Tue, 30 Aug 2016 05:21:00 -0000 Message-ID: Subject: Re: [RFC][IPA-VRP] Add support for IPA VRP in ipa-cp/ipa-prop To: Jan Hubicka Cc: "gcc-patches@gcc.gnu.org" , Richard Biener Content-Type: multipart/mixed; boundary=001a11407030628433053b432588 X-IsSubscribed: yes X-SW-Source: 2016-08/txt/msg02022.txt.bz2 --001a11407030628433053b432588 Content-Type: text/plain; charset=UTF-8 Content-length: 4810 Hi Honza, Here is a re-based version which also addresses the review comments. On 21/07/16 22:54, Jan Hubicka wrote: >> Maybe it is better to separate value range and alignment summary >> writing/reading to different functions. Here is another updated >> version which does this. > > Makes sense to me. Note that the alignment summary propagation can be either > handled by doing bitwise constant propagation and/or extending our value ranges > by stride (as described in > http://www.lighterra.com/papers/valuerangeprop/Patterson1995-ValueRangeProp.pdf > I would like it to go eventually away in favour of more generic solution. > >> -/* If DEST_PLATS already has aggregate items, check that aggs_by_ref matches >> +/* Propagate value range across jump function JFUNC that is associated with >> + edge CS and update DEST_PLATS accordingly. */ >> + >> +static bool >> +propagate_vr_accross_jump_function (cgraph_edge *cs, >> + ipa_jump_func *jfunc, >> + struct ipcp_param_lattices *dest_plats) >> +{ >> + struct ipcp_param_lattices *src_lats; >> + ipcp_vr_lattice *dest_lat = &dest_plats->m_value_range; >> + >> + if (dest_lat->bottom_p ()) >> + return false; >> + >> + if (jfunc->type == IPA_JF_PASS_THROUGH) >> + { >> + struct ipa_node_params *caller_info = IPA_NODE_REF (cs->caller); >> + int src_idx = ipa_get_jf_pass_through_formal_id (jfunc); >> + src_lats = ipa_get_parm_lattices (caller_info, src_idx); >> + >> + if (ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR) >> + return dest_lat->meet_with (src_lats->m_value_range); > > Clearly we can propagate thorugh expressions here (PLUS_EXPR). I have run > into similar issue in loop code that builds simple generic expresisons > (like (int)ssa_name+10) and it would be nice to have easy way to deterine > their value range based on the knowledge of SSA_NAME's valur range. > > Bit this is fine for initial implementaiotn for sure. Indeed. I will do this as a follow up. >> >> +/* Look up all VR information that we have discovered and copy it over >> + to the transformation summary. */ >> + >> +static void >> +ipcp_store_vr_results (void) >> +{ >> + cgraph_node *node; >> + >> + FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node) >> + { >> + ipa_node_params *info = IPA_NODE_REF (node); >> + bool found_useful_result = false; >> + >> + if (!opt_for_fn (node->decl, flag_ipa_vrp)) >> + { >> + if (dump_file) >> + fprintf (dump_file, "Not considering %s for VR discovery " >> + "and propagate; -fipa-ipa-vrp: disabled.\n", >> + node->name ()); >> + continue; > > I belive you need to also prevent propagation through functions copmiled with > -fno-ipa-vrp, not only prevent any transformations. Do you mean the following, I was following other implementations. @@ -2264,6 +2430,11 @@ propagate_constants_accross_call (struct cgraph_edge *cs) &dest_plats->bits_lattice); ret |= propagate_aggs_accross_jump_function (cs, jump_func, dest_plats); + if (opt_for_fn (callee->decl, flag_ipa_vrp)) + ret |= propagate_vr_accross_jump_function (cs, + jump_func, dest_plats); + else + ret |= dest_plats->m_value_range.set_to_bottom (); >> +/* Update value range of formal parameters as described in >> + ipcp_transformation_summary. */ >> + >> +static void >> +ipcp_update_vr (struct cgraph_node *node) >> +{ >> + tree fndecl = node->decl; >> + tree parm = DECL_ARGUMENTS (fndecl); >> + tree next_parm = parm; >> + ipcp_transformation_summary *ts = ipcp_get_transformation_summary (node); >> + if (!ts || vec_safe_length (ts->m_vr) == 0) >> + return; >> + const vec &vr = *ts->m_vr; >> + unsigned count = vr.length (); >> + >> + for (unsigned i = 0; i < count; ++i, parm = next_parm) >> + { >> + if (node->clone.combined_args_to_skip >> + && bitmap_bit_p (node->clone.combined_args_to_skip, i)) >> + continue; >> + gcc_checking_assert (parm); >> + next_parm = DECL_CHAIN (parm); >> + tree ddef = ssa_default_def (DECL_STRUCT_FUNCTION (node->decl), parm); >> + >> + if (!ddef || !is_gimple_reg (parm)) >> + continue; >> + >> + if (cgraph_local_p (node) > The test of cgraph_local_p seems redundant here. The analysis phase should not determine > anything if function is reachable non-locally. Removed it. >> +/* Info about value ranges. */ >> + >> +struct GTY(()) ipa_vr >> +{ >> + /* The data fields below are valid only if known is true. */ >> + bool known; >> + enum value_range_type type; >> + tree min; >> + tree max; > What is the point of representing range as trees rather than wide ints. Can they > be non-constant integer? Changed to wide_int after adding that support. LTO Bootstrapped and regression tested on x86_64-linux-gnu with no new regressions, is this OK? Thanks Kugan --001a11407030628433053b432588 Content-Type: text/x-patch; charset=US-ASCII; name="0002-Add-ipa-vrp.patch" Content-Disposition: attachment; filename="0002-Add-ipa-vrp.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ish0z28q0 Content-length: 39264 RnJvbSBjNjY4N2Y2MDAwMTY5NWRkNzEzMTZlODk0MDEwYTc2NGNiMTU2MDZh IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLdWdhbiBWaXZla2Fu YW5kYXJhamFoIDxrdWdhbi52aXZla2FuYW5kYXJhamFoQGxpbmFyby5vcmc+ CkRhdGU6IFR1ZSwgMjMgQXVnIDIwMTYgMTk6NDc6NTggKzEwMDAKU3ViamVj dDogW1BBVENIIDIvM10gQWRkIGlwYS12cnAKCi0tLQogZ2NjL2NncmFwaC5j ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGdjYy9jZ3Jh cGh1bml0LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBnY2Mv Y29tbW9uLm9wdCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKwog Z2NjL2lwYS1jcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjQz ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBnY2MvaXBhLWRl dmlydC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZ2NjL2lw YS1pbmxpbmUtdHJhbnNmb3JtLmMgICAgICAgICAgICAgIHwgICAxICsKIGdj Yy9pcGEtaW5saW5lLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSAr CiBnY2MvaXBhLXByb2ZpbGUuYyAgICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogZ2NjL2lwYS1wcm9wLmMgICAgICAgICAgICAgICAgICAgICAgICAg IHwgMTgwICsrKysrKysrKysrKysrKysrKysrKystCiBnY2MvaXBhLXByb3Au aCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTYgKysrCiBnY2MvaXBh LXV0aWxzLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZ2Nj L2lwYS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsK IGdjYy9sdG8vbHRvLXBhcnRpdGlvbi5jICAgICAgICAgICAgICAgICB8ICAg MSArCiBnY2MvbHRvL2x0by5jICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDEgKwogZ2NjL29wdHMuYyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAxICsKIGdjYy90ZXN0c3VpdGUvZysrLmRnL2lwYS9wdXJlLWNv bnN0LTMuQyB8ICAgMiArLQogZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL3Zy cDEuYyAgICAgICAgIHwgIDMyICsrKysrCiBnY2MvdGVzdHN1aXRlL2djYy5k Zy9pcGEvdnJwMi5jICAgICAgICAgfCAgMzUgKysrKysKIGdjYy90ZXN0c3Vp dGUvZ2NjLmRnL2lwYS92cnAzLmMgICAgICAgICB8ICAzMCArKysrCiBnY2Mv dG9wbGV2LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwog MjAgZmlsZXMgY2hhbmdlZCwgNTQ3IGluc2VydGlvbnMoKyksIDcgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvaXBhL3ZycDEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3Vp dGUvZ2NjLmRnL2lwYS92cnAyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2djYy5kZy9pcGEvdnJwMy5jCgpkaWZmIC0tZ2l0IGEvZ2Nj L2NncmFwaC5jIGIvZ2NjL2NncmFwaC5jCmluZGV4IDliYzViNmIuLjBhNDM4 NTAgMTAwNjQ0Ci0tLSBhL2djYy9jZ3JhcGguYworKysgYi9nY2MvY2dyYXBo LmMKQEAgLTQ5LDYgKzQ5LDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUg ZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJ2YWx1ZS1w cm9mLmgiCiAjaW5jbHVkZSAiaXBhLXV0aWxzLmgiCiAjaW5jbHVkZSAic3lt Ym9sLXN1bW1hcnkuaCIKKyNpbmNsdWRlICJ0cmVlLXZycC5oIgogI2luY2x1 ZGUgImlwYS1wcm9wLmgiCiAjaW5jbHVkZSAiaXBhLWlubGluZS5oIgogI2lu Y2x1ZGUgImNmZ2xvb3AuaCIKZGlmZiAtLWdpdCBhL2djYy9jZ3JhcGh1bml0 LmMgYi9nY2MvY2dyYXBodW5pdC5jCmluZGV4IDZhMWQxMjYuLjU1ODg4MDcg MTAwNjQ0Ci0tLSBhL2djYy9jZ3JhcGh1bml0LmMKKysrIGIvZ2NjL2NncmFw aHVuaXQuYwpAQCAtMTkwLDYgKzE5MCw3IEBAIGFsb25nIHdpdGggR0NDOyBz ZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAi dG9wbGV2LmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJzeW1i b2wtc3VtbWFyeS5oIgorI2luY2x1ZGUgInRyZWUtdnJwLmgiCiAjaW5jbHVk ZSAiaXBhLXByb3AuaCIKICNpbmNsdWRlICJnaW1wbGUtcHJldHR5LXByaW50 LmgiCiAjaW5jbHVkZSAicGx1Z2luLmgiCmRpZmYgLS1naXQgYS9nY2MvY29t bW9uLm9wdCBiL2djYy9jb21tb24ub3B0CmluZGV4IGZkMWFjODcuLjc5ZWU3 OTkgMTAwNjQ0Ci0tLSBhL2djYy9jb21tb24ub3B0CisrKyBiL2djYy9jb21t b24ub3B0CkBAIC0xNjAxLDYgKzE2MDEsMTAgQEAgZmlwYS1zdHJ1Y3QtcmVv cmcKIENvbW1vbiBJZ25vcmUKIERvZXMgbm90aGluZy4gUHJlc2VydmVkIGZv ciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogCitmaXBhLXZycAorQ29tbW9u IFJlcG9ydCBWYXIoZmxhZ19pcGFfdnJwKSBPcHRpbWl6YXRpb24KK1BlcmZv cm0gSVBBIFZhbHVlIFJhbmdlIFByb3BhZ2F0aW9uLgorCiBmaXJhLWFsZ29y aXRobT0KIENvbW1vbiBKb2luZWQgUmVqZWN0TmVnYXRpdmUgRW51bShpcmFf YWxnb3JpdGhtKSBWYXIoZmxhZ19pcmFfYWxnb3JpdGhtKSBJbml0KElSQV9B TEdPUklUSE1fQ0IpIE9wdGltaXphdGlvbgogLWZpcmEtYWxnb3JpdGhtPVtD Qnxwcmlvcml0eV0gU2V0IHRoZSB1c2VkIElSQSBhbGdvcml0aG0uCmRpZmYg LS1naXQgYS9nY2MvaXBhLWNwLmMgYi9nY2MvaXBhLWNwLmMKaW5kZXggOTUx NGRkMS4uZGFjZWY0YyAxMDA2NDQKLS0tIGEvZ2NjL2lwYS1jcC5jCisrKyBi L2djYy9pcGEtY3AuYwpAQCAtMTE0LDYgKzExNCw3IEBAIGFsb25nIHdpdGgg R0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5j bHVkZSAiZm9sZC1jb25zdC5oIgogI2luY2x1ZGUgImdpbXBsZS1mb2xkLmgi CiAjaW5jbHVkZSAic3ltYm9sLXN1bW1hcnkuaCIKKyNpbmNsdWRlICJ0cmVl LXZycC5oIgogI2luY2x1ZGUgImlwYS1wcm9wLmgiCiAjaW5jbHVkZSAidHJl ZS1wcmV0dHktcHJpbnQuaCIKICNpbmNsdWRlICJ0cmVlLWlubGluZS5oIgpA QCAtMzIxLDYgKzMyMiwyNSBAQCBwcml2YXRlOgogICB2b2lkIGdldF92YWx1 ZV9hbmRfbWFzayAodHJlZSwgd2lkZXN0X2ludCAqLCB3aWRlc3RfaW50ICop OwogfTsgCiAKKy8qIExhdHRpY2Ugb2YgdmFsdWUgcmFuZ2VzLiAgKi8KKwor Y2xhc3MgaXBjcF92cl9sYXR0aWNlCit7CitwdWJsaWM6CisgIHZhbHVlX3Jh bmdlIG1fdnI7CisKKyAgaW5saW5lIGJvb2wgYm90dG9tX3AgKCkgY29uc3Q7 CisgIGlubGluZSBib29sIHRvcF9wICgpIGNvbnN0OworICBpbmxpbmUgYm9v bCBzZXRfdG9fYm90dG9tICgpOworICBib29sIG1lZXRfd2l0aCAoY29uc3Qg dmFsdWVfcmFuZ2UgKnBfdnIpOworICBib29sIG1lZXRfd2l0aCAoY29uc3Qg aXBjcF92cl9sYXR0aWNlICZvdGhlcik7CisgIHZvaWQgaW5pdCAoKSB7IG1f dnIudHlwZSA9IFZSX1VOREVGSU5FRDsgfQorICB2b2lkIHByaW50IChGSUxF ICogZik7CisKK3ByaXZhdGU6CisgIGJvb2wgbWVldF93aXRoXzEgKGNvbnN0 IHZhbHVlX3JhbmdlICpvdGhlcl92cik7Cit9OworCiAvKiBTdHJ1Y3R1cmUg Y29udGFpbmluZyBsYXR0aWNlcyBmb3IgYSBwYXJhbWV0ZXIgaXRzZWxmIGFu ZCBmb3IgcGllY2VzIG9mCiAgICBhZ2dyZWdhdGVzIHRoYXQgYXJlIHBhc3Nl ZCBpbiB0aGUgcGFyYW1ldGVyIG9yIGJ5IGEgcmVmZXJlbmNlIGluIGEgcGFy YW1ldGVyCiAgICBwbHVzIHNvbWUgb3RoZXIgdXNlZnVsIGZsYWdzLiAgKi8K QEAgLTMzOCw2ICszNTgsOCBAQCBwdWJsaWM6CiAgIGlwY3BfYWxpZ25tZW50 X2xhdHRpY2UgYWxpZ25tZW50OwogICAvKiBMYXR0aWNlIGRlc2NyaWJpbmcg a25vd24gYml0cy4gICovCiAgIGlwY3BfYml0c19sYXR0aWNlIGJpdHNfbGF0 dGljZTsKKyAgLyogTGF0dGljZSBkZXNjcmliaW5nIHZhbHVlIHJhbmdlLiAg Ki8KKyAgaXBjcF92cl9sYXR0aWNlIG1fdmFsdWVfcmFuZ2U7CiAgIC8qIE51 bWJlciBvZiBhZ2dyZWdhdGUgbGF0dGljZXMgKi8KICAgaW50IGFnZ3NfY291 bnQ7CiAgIC8qIFRydWUgaWYgYWdncmVnYXRlIGRhdGEgd2VyZSBwYXNzZWQg YnkgcmVmZXJlbmNlIChhcyBvcHBvc2VkIHRvIGJ5CkBAIC00MDUsNiArNDI3 LDE2IEBAIGlwYV9nZXRfcG9seV9jdHhfbGF0IChzdHJ1Y3QgaXBhX25vZGVf cGFyYW1zICppbmZvLCBpbnQgaSkKICAgcmV0dXJuICZwbGF0cy0+Y3R4bGF0 OwogfQogCisvKiBSZXR1cm4gdGhlIGxhdHRpY2UgY29ycmVzcG9uZGluZyB0 byB0aGUgdmFsdWUgcmFuZ2Ugb2YgdGhlIEl0aCBmb3JtYWwKKyAgIHBhcmFt ZXRlciBvZiB0aGUgZnVuY3Rpb24gZGVzY3JpYmVkIGJ5IElORk8uICAqLwor CitzdGF0aWMgaW5saW5lIGlwY3BfdnJfbGF0dGljZSAqCitpcGFfZ2V0X3Zy X2xhdCAoc3RydWN0IGlwYV9ub2RlX3BhcmFtcyAqaW5mbywgaW50IGkpCit7 CisgIHN0cnVjdCBpcGNwX3BhcmFtX2xhdHRpY2VzICpwbGF0cyA9IGlwYV9n ZXRfcGFybV9sYXR0aWNlcyAoaW5mbywgaSk7CisgIHJldHVybiAmcGxhdHMt Pm1fdmFsdWVfcmFuZ2U7Cit9CisKIC8qIFJldHVybiB3aGV0aGVyIExBVCBp cyBhIGxhdHRpY2Ugd2l0aCBhIHNpbmdsZSBjb25zdGFudCBhbmQgd2l0aG91 dCBhbgogICAgdW5kZWZpbmVkIHZhbHVlLiAgKi8KIApAQCAtNTMwLDYgKzU2 MiwxNCBAQCBpcGNwX2JpdHNfbGF0dGljZTo6cHJpbnQgKEZJTEUgKmYpCiAg ICAgfQogfQogCisvKiBQcmludCB2YWx1ZSByYW5nZSBsYXR0aWNlIHRvIEYu ICAqLworCit2b2lkCitpcGNwX3ZyX2xhdHRpY2U6OnByaW50IChGSUxFICog ZikKK3sKKyAgZHVtcF92YWx1ZV9yYW5nZSAoZiwgJm1fdnIpOworfQorCiAv KiBQcmludCBhbGwgaXBjcF9sYXR0aWNlcyBvZiBhbGwgZnVuY3Rpb25zIHRv IEYuICAqLwogCiBzdGF0aWMgdm9pZApAQCAtNTU3LDYgKzU5Nyw5IEBAIHBy aW50X2FsbF9sYXR0aWNlcyAoRklMRSAqIGYsIGJvb2wgZHVtcF9zb3VyY2Vz LCBib29sIGR1bXBfYmVuZWZpdHMpCiAJICBwbGF0cy0+Y3R4bGF0LnByaW50 IChmLCBkdW1wX3NvdXJjZXMsIGR1bXBfYmVuZWZpdHMpOwogCSAgcGxhdHMt PmFsaWdubWVudC5wcmludCAoZik7CiAJICBwbGF0cy0+Yml0c19sYXR0aWNl LnByaW50IChmKTsKKwkgIGZwcmludGYgKGYsICIgICAgICAgICAiKTsKKwkg IHBsYXRzLT5tX3ZhbHVlX3JhbmdlLnByaW50IChmKTsKKwkgIGZwcmludGYg KGYsICJcbiIpOwogCSAgaWYgKHBsYXRzLT52aXJ0X2NhbGwpCiAJICAgIGZw cmludGYgKGYsICIgICAgICAgIHZpcnRfY2FsbCBmbGFnIHNldFxuIik7CiAK QEAgLTkwOCw2ICs5NTEsNzcgQEAgaXBjcF9hbGlnbm1lbnRfbGF0dGljZTo6 c2V0X3RvX2JvdHRvbSAoKQogICByZXR1cm4gdHJ1ZTsKIH0KIAorLyogTWVl dCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbGF0dGljZSB3aXRoIGRlc2Ny aWJlZCBieSBPVEhFUgorICAgbGF0dGljZS4gICovCisKK2Jvb2wKK2lwY3Bf dnJfbGF0dGljZTo6bWVldF93aXRoIChjb25zdCBpcGNwX3ZyX2xhdHRpY2Ug Jm90aGVyKQoreworICByZXR1cm4gbWVldF93aXRoXzEgKCZvdGhlci5tX3Zy KTsKK30KKworLyogTWVldCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbGF0 dGljZSB3aXRoIHZhbHVlIHJhbmZnZSBkZXNjcmliZWQgYnkgVlIKKyAgIGxh dHRpY2UuICAqLworCitib29sCitpcGNwX3ZyX2xhdHRpY2U6Om1lZXRfd2l0 aCAoY29uc3QgdmFsdWVfcmFuZ2UgKnBfdnIpCit7CisgIHJldHVybiBtZWV0 X3dpdGhfMSAocF92cik7Cit9CisKKy8qIE1lZXQgdGhlIGN1cnJlbnQgdmFs dWUgb2YgdGhlIGxhdHRpY2Ugd2l0aCB2YWx1ZSByYW5mZ2UgZGVzY3JpYmVk IGJ5CisgICBPVEhFUl9WUiBsYXR0aWNlLiAgKi8KKworYm9vbAoraXBjcF92 cl9sYXR0aWNlOjptZWV0X3dpdGhfMSAoY29uc3QgdmFsdWVfcmFuZ2UgKm90 aGVyX3ZyKQoreworICB0cmVlIG1pbiA9IG1fdnIubWluLCBtYXggPSBtX3Zy Lm1heDsKKyAgdmFsdWVfcmFuZ2VfdHlwZSB0eXBlID0gbV92ci50eXBlOwor CisgIGlmIChib3R0b21fcCAoKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAg aWYgKG90aGVyX3ZyLT50eXBlID09IFZSX1ZBUllJTkcpCisgICAgcmV0dXJu IHNldF90b19ib3R0b20gKCk7CisKKyAgdnJwX21lZXQgKCZtX3ZyLCBvdGhl cl92cik7CisgIGlmICh0eXBlICE9IG1fdnIudHlwZQorICAgICAgfHwgbWlu ICE9IG1fdnIubWluCisgICAgICB8fCBtYXggIT0gbV92ci5tYXgpCisgICAg cmV0dXJuIHRydWU7CisgIGVsc2UKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK Ky8qIFJldHVybiB0cnVlIGlmIHZhbHVlIHJhbmdlIGluZm9ybWF0aW9uIGlu IHRoZSBsYXR0aWNlIGlzIHlldCB1bmtub3duLiAgKi8KKworYm9vbAoraXBj cF92cl9sYXR0aWNlOjp0b3BfcCAoKSBjb25zdAoreworICByZXR1cm4gbV92 ci50eXBlID09IFZSX1VOREVGSU5FRDsKK30KKworLyogUmV0dXJuIHRydWUg aWYgdmFsdWUgcmFuZ2UgaW5mb3JtYXRpb24gaW4gdGhlIGxhdHRpY2UgaXMg a25vd24gdG8gYmUKKyAgIHVudXNhYmxlLiAgKi8KKworYm9vbAoraXBjcF92 cl9sYXR0aWNlOjpib3R0b21fcCAoKSBjb25zdAoreworICByZXR1cm4gbV92 ci50eXBlID09IFZSX1ZBUllJTkc7Cit9CisKKy8qIFNldCB2YWx1ZSByYW5n ZSBpbmZvcm1hdGlvbiBpbiB0aGUgbGF0dGljZSB0byBib3R0b20uICBSZXR1 cm4gdHJ1ZSBpZiBpdAorICAgcHJldmlvdXNseSB3YXMgaW4gYSBkaWZmZXJl bnQgc3RhdGUuICAqLworCitib29sCitpcGNwX3ZyX2xhdHRpY2U6OnNldF90 b19ib3R0b20gKCkKK3sKKyAgaWYgKG1fdnIudHlwZSA9PSBWUl9WQVJZSU5H KQorICAgIHJldHVybiBmYWxzZTsKKyAgbV92ci50eXBlID0gVlJfVkFSWUlO RzsKKyAgcmV0dXJuIHRydWU7Cit9CisKIC8qIE1lZXQgdGhlIGN1cnJlbnQg dmFsdWUgb2YgdGhlIGxhdHRpY2Ugd2l0aCBhbGlnbm1lbnQgZGVzY3JpYmVk IGJ5IE5FV19BTElHTgogICAgYW5kIE5FV19NSVNBTElHTiwgYXNzdW1pbmcg dGhhdCB3ZSBrbm93IHRoZSBjdXJyZW50IHZhbHVlIGlzIG5laXRoZXIgVE9Q IG5vcgogICAgQk9UVE9NLiAgUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9m IGxhdHRpY2UgaGFzIGNoYW5nZWQuICAqLwpAQCAtMTE0MSw2ICsxMjU1LDcg QEAgc2V0X2FsbF9jb250YWluc192YXJpYWJsZSAoc3RydWN0IGlwY3BfcGFy YW1fbGF0dGljZXMgKnBsYXRzKQogICByZXQgfD0gc2V0X2FnZ19sYXRzX2Nv bnRhaW5fdmFyaWFibGUgKHBsYXRzKTsKICAgcmV0IHw9IHBsYXRzLT5hbGln bm1lbnQuc2V0X3RvX2JvdHRvbSAoKTsKICAgcmV0IHw9IHBsYXRzLT5iaXRz X2xhdHRpY2Uuc2V0X3RvX2JvdHRvbSAoKTsKKyAgcmV0IHw9IHBsYXRzLT5t X3ZhbHVlX3JhbmdlLnNldF90b19ib3R0b20gKCk7CiAgIHJldHVybiByZXQ7 CiB9CiAKQEAgLTEyMTEsNiArMTMyNiwxMiBAQCBpbml0aWFsaXplX25vZGVf bGF0dGljZXMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSkKIAlkaXNhYmxl ID0gdHJ1ZTsKICAgICB9CiAKKyAgZm9yIChpID0gMDsgaSA8IGlwYV9nZXRf cGFyYW1fY291bnQgKGluZm8pIDsgaSsrKQorICAgIHsKKyAgICAgIHN0cnVj dCBpcGNwX3BhcmFtX2xhdHRpY2VzICpwbGF0cyA9IGlwYV9nZXRfcGFybV9s YXR0aWNlcyAoaW5mbywgaSk7CisgICAgICBwbGF0cy0+bV92YWx1ZV9yYW5n ZS5pbml0ICgpOworICAgIH0KKwogICBpZiAoZGlzYWJsZSB8fCB2YXJpYWJs ZSkKICAgICB7CiAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXBhX2dldF9wYXJh bV9jb3VudCAoaW5mbykgOyBpKyspCkBAIC0xMjIzLDYgKzEzNDQsNyBAQCBp bml0aWFsaXplX25vZGVfbGF0dGljZXMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAq bm9kZSkKIAkgICAgICBzZXRfYWdnX2xhdHNfdG9fYm90dG9tIChwbGF0cyk7 CiAJICAgICAgcGxhdHMtPmFsaWdubWVudC5zZXRfdG9fYm90dG9tICgpOwog CSAgICAgIHBsYXRzLT5iaXRzX2xhdHRpY2Uuc2V0X3RvX2JvdHRvbSAoKTsK KwkgICAgICBwbGF0cy0+bV92YWx1ZV9yYW5nZS5zZXRfdG9fYm90dG9tICgp OwogCSAgICB9CiAJICBlbHNlCiAJICAgIHNldF9hbGxfY29udGFpbnNfdmFy aWFibGUgKHBsYXRzKTsKQEAgLTE5MTMsNiArMjAzNSw1MCBAQCBwcm9wYWdh dGVfYml0c19hY2Nyb3NzX2p1bXBfZnVuY3Rpb24gKGNncmFwaF9lZGdlICpj cywgaW50IGlkeCwgaXBhX2p1bXBfZnVuYyAqagogICAgIHJldHVybiBkZXN0 X2xhdHRpY2UtPnNldF90b19ib3R0b20gKCk7CiB9CiAKKy8qIFByb3BhZ2F0 ZSB2YWx1ZSByYW5nZSBhY3Jvc3MganVtcCBmdW5jdGlvbiBKRlVOQyB0aGF0 IGlzIGFzc29jaWF0ZWQgd2l0aAorICAgZWRnZSBDUyBhbmQgdXBkYXRlIERF U1RfUExBVFMgYWNjb3JkaW5nbHkuICAqLworCitzdGF0aWMgYm9vbAorcHJv cGFnYXRlX3ZyX2FjY3Jvc3NfanVtcF9mdW5jdGlvbiAoY2dyYXBoX2VkZ2Ug KmNzLAorCQkJCSAgICBpcGFfanVtcF9mdW5jICpqZnVuYywKKwkJCQkgICAg c3RydWN0IGlwY3BfcGFyYW1fbGF0dGljZXMgKmRlc3RfcGxhdHMpCit7Cisg IHN0cnVjdCBpcGNwX3BhcmFtX2xhdHRpY2VzICpzcmNfbGF0czsKKyAgaXBj cF92cl9sYXR0aWNlICpkZXN0X2xhdCA9ICZkZXN0X3BsYXRzLT5tX3ZhbHVl X3JhbmdlOworCisgIGlmIChkZXN0X2xhdC0+Ym90dG9tX3AgKCkpCisgICAg cmV0dXJuIGZhbHNlOworCisgIGlmIChqZnVuYy0+dHlwZSA9PSBJUEFfSkZf UEFTU19USFJPVUdIKQorICAgIHsKKyAgICAgIHN0cnVjdCBpcGFfbm9kZV9w YXJhbXMgKmNhbGxlcl9pbmZvID0gSVBBX05PREVfUkVGIChjcy0+Y2FsbGVy KTsKKyAgICAgIGlmIChkZXN0X2xhdC0+Ym90dG9tX3AgKCkpCisJcmV0dXJu IGZhbHNlOworICAgICAgaW50IHNyY19pZHggPSBpcGFfZ2V0X2pmX3Bhc3Nf dGhyb3VnaF9mb3JtYWxfaWQgKGpmdW5jKTsKKyAgICAgIHNyY19sYXRzID0g aXBhX2dldF9wYXJtX2xhdHRpY2VzIChjYWxsZXJfaW5mbywgc3JjX2lkeCk7 CisKKyAgICAgIGlmIChpcGFfZ2V0X2pmX3Bhc3NfdGhyb3VnaF9vcGVyYXRp b24gKGpmdW5jKSA9PSBOT1BfRVhQUikKKwlyZXR1cm4gZGVzdF9sYXQtPm1l ZXRfd2l0aCAoc3JjX2xhdHMtPm1fdmFsdWVfcmFuZ2UpOworICAgIH0KKyAg ZWxzZSBpZiAoamZ1bmMtPnR5cGUgPT0gSVBBX0pGX0NPTlNUKQorICAgIHsK KyAgICAgIHRyZWUgdmFsID0gaXBhX2dldF9qZl9jb25zdGFudCAoamZ1bmMp OworICAgICAgaWYgKFRSRUVfQ09ERSAodmFsKSA9PSBJTlRFR0VSX0NTVCkK Kwl7CisJICBqZnVuYy0+dnJfa25vd24gPSB0cnVlOworCSAgamZ1bmMtPm1f dnIudHlwZSA9IFZSX1JBTkdFOworCSAgamZ1bmMtPm1fdnIubWluID0gdmFs OworCSAgamZ1bmMtPm1fdnIubWF4ID0gdmFsOworCSAgcmV0dXJuIGRlc3Rf bGF0LT5tZWV0X3dpdGggKCZqZnVuYy0+bV92cik7CisJfQorICAgIH0KKwor ICBpZiAoamZ1bmMtPnZyX2tub3duKQorICAgIHJldHVybiBkZXN0X2xhdC0+ bWVldF93aXRoICgmamZ1bmMtPm1fdnIpOworICBlbHNlCisgICAgcmV0dXJu IGRlc3RfbGF0LT5zZXRfdG9fYm90dG9tICgpOworfQorCiAvKiBJZiBERVNU X1BMQVRTIGFscmVhZHkgaGFzIGFnZ3JlZ2F0ZSBpdGVtcywgY2hlY2sgdGhh dCBhZ2dzX2J5X3JlZiBtYXRjaGVzCiAgICBORVdfQUdHU19CWV9SRUYgYW5k IGlmIG5vdCwgbWFyayBhbGwgYWdncyBhcyBib3R0b21zIGFuZCByZXR1cm4g dHJ1ZSAoaW4gYWxsCiAgICBvdGhlciBjYXNlcywgcmV0dXJuIGZhbHNlKS4g IElmIHRoZXJlIGFyZSBubyBhZ2dyZWdhdGUgaXRlbXMsIHNldApAQCAtMjI2 NCw2ICsyNDMwLDExIEBAIHByb3BhZ2F0ZV9jb25zdGFudHNfYWNjcm9zc19j YWxsIChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKmNzKQogCQkJCQkJICAgICAgICZk ZXN0X3BsYXRzLT5iaXRzX2xhdHRpY2UpOwogCSAgcmV0IHw9IHByb3BhZ2F0 ZV9hZ2dzX2FjY3Jvc3NfanVtcF9mdW5jdGlvbiAoY3MsIGp1bXBfZnVuYywK IAkJCQkJCSAgICAgICBkZXN0X3BsYXRzKTsKKwkgIGlmIChvcHRfZm9yX2Zu IChjYWxsZWUtPmRlY2wsIGZsYWdfaXBhX3ZycCkpCisJICAgIHJldCB8PSBw cm9wYWdhdGVfdnJfYWNjcm9zc19qdW1wX2Z1bmN0aW9uIChjcywKKwkJCQkJ CSAgICAgICBqdW1wX2Z1bmMsIGRlc3RfcGxhdHMpOworCSAgZWxzZQorCSAg ICByZXQgfD0gZGVzdF9wbGF0cy0+bV92YWx1ZV9yYW5nZS5zZXRfdG9fYm90 dG9tICgpOwogCX0KICAgICB9CiAgIGZvciAoOyBpIDwgcGFybXNfY291bnQ7 IGkrKykKQEAgLTQ5NzQsNiArNTE0NSw3NiBAQCBpcGNwX3N0b3JlX2JpdHNf cmVzdWx0cyAodm9pZCkKICAgICAgIH0KICAgICB9CiB9CisKKy8qIExvb2sg dXAgYWxsIFZSIGluZm9ybWF0aW9uIHRoYXQgd2UgaGF2ZSBkaXNjb3ZlcmVk IGFuZCBjb3B5IGl0IG92ZXIKKyAgIHRvIHRoZSB0cmFuc2Zvcm1hdGlvbiBz dW1tYXJ5LiAgKi8KKworc3RhdGljIHZvaWQKK2lwY3Bfc3RvcmVfdnJfcmVz dWx0cyAodm9pZCkKK3sKKyAgY2dyYXBoX25vZGUgKm5vZGU7CisKKyAgRk9S X0VBQ0hfRlVOQ1RJT05fV0lUSF9HSU1QTEVfQk9EWSAobm9kZSkKKyAgewor ICAgIGlwYV9ub2RlX3BhcmFtcyAqaW5mbyA9IElQQV9OT0RFX1JFRiAobm9k ZSk7CisgICAgYm9vbCBmb3VuZF91c2VmdWxfcmVzdWx0ID0gZmFsc2U7CisK KyAgICBpZiAoIW9wdF9mb3JfZm4gKG5vZGUtPmRlY2wsIGZsYWdfaXBhX3Zy cCkpCisgICAgICB7CisJaWYgKGR1bXBfZmlsZSkKKwkgIGZwcmludGYgKGR1 bXBfZmlsZSwgIk5vdCBjb25zaWRlcmluZyAlcyBmb3IgVlIgZGlzY292ZXJ5 ICIKKwkJICAgImFuZCBwcm9wYWdhdGU7IC1maXBhLWlwYS12cnA6IGRpc2Fi bGVkLlxuIiwKKwkJICAgbm9kZS0+bmFtZSAoKSk7CisJY29udGludWU7Cisg ICAgICB9CisKKyAgIGlmIChpbmZvLT5pcGNwX29yaWdfbm9kZSkKKyAgICAg IGluZm8gPSBJUEFfTk9ERV9SRUYgKGluZm8tPmlwY3Bfb3JpZ19ub2RlKTsK KworICAgdW5zaWduZWQgY291bnQgPSBpcGFfZ2V0X3BhcmFtX2NvdW50IChp bmZvKTsKKyAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudCA7IGkr KykKKyAgICAgeworICAgICAgIGlwY3BfcGFyYW1fbGF0dGljZXMgKnBsYXRz ID0gaXBhX2dldF9wYXJtX2xhdHRpY2VzIChpbmZvLCBpKTsKKyAgICAgICBp ZiAoIXBsYXRzLT5tX3ZhbHVlX3JhbmdlLmJvdHRvbV9wICgpCisJICAgJiYg IXBsYXRzLT5tX3ZhbHVlX3JhbmdlLnRvcF9wICgpKQorCSB7CisJICAgZm91 bmRfdXNlZnVsX3Jlc3VsdCA9IHRydWU7CisJICAgYnJlYWs7CisJIH0KKyAg ICAgfQorICAgaWYgKCFmb3VuZF91c2VmdWxfcmVzdWx0KQorICAgICBjb250 aW51ZTsKKworICAgaXBjcF9ncm93X3RyYW5zZm9ybWF0aW9uc19pZl9uZWNl c3NhcnkgKCk7CisgICBpcGNwX3RyYW5zZm9ybWF0aW9uX3N1bW1hcnkgKnRz ID0gaXBjcF9nZXRfdHJhbnNmb3JtYXRpb25fc3VtbWFyeSAobm9kZSk7Cisg ICB2ZWNfc2FmZV9yZXNlcnZlX2V4YWN0ICh0cy0+bV92ciwgY291bnQpOwor CisgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQgOyBpKyspCisg ICAgIHsKKyAgICAgICBpcGNwX3BhcmFtX2xhdHRpY2VzICpwbGF0cyA9IGlw YV9nZXRfcGFybV9sYXR0aWNlcyAoaW5mbywgaSk7CisgICAgICAgaXBhX3Zy IHZyOworCisgICAgICAgaWYgKCFwbGF0cy0+bV92YWx1ZV9yYW5nZS5ib3R0 b21fcCAoKQorCSAgICYmICFwbGF0cy0+bV92YWx1ZV9yYW5nZS50b3BfcCAo KSkKKwkgeworCSAgIHZyLmtub3duID0gdHJ1ZTsKKwkgICB2ci50eXBlID0g cGxhdHMtPm1fdmFsdWVfcmFuZ2UubV92ci50eXBlOworCSAgIHZyLm1pbiA9 IHBsYXRzLT5tX3ZhbHVlX3JhbmdlLm1fdnIubWluOworCSAgIHZyLm1heCA9 IHBsYXRzLT5tX3ZhbHVlX3JhbmdlLm1fdnIubWF4OworCSB9CisgICAgICAg ZWxzZQorCSB7CisJICAgc3RhdGljIHdpZGVfaW50IHplcm8gPSBpbnRlZ2Vy X3plcm9fbm9kZTsKKwkgICB2ci5rbm93biA9IGZhbHNlOworCSAgIHZyLnR5 cGUgPSBWUl9WQVJZSU5HOworCSAgIHZyLm1pbiA9IHplcm87CisJICAgdnIu bWF4ID0gemVybzsKKwkgfQorICAgICAgIHRzLT5tX3ZyLT5xdWlja19wdXNo ICh2cik7CisgICAgIH0KKyAgfQorfQorCiAvKiBUaGUgSVBDUCBkcml2ZXIu ICAqLwogCiBzdGF0aWMgdW5zaWduZWQgaW50CkBAIC01MDA5LDYgKzUyNTAs OCBAQCBpcGNwX2RyaXZlciAodm9pZCkKICAgaXBjcF9zdG9yZV9hbGlnbm1l bnRfcmVzdWx0cyAoKTsKICAgLyogU3RvcmUgcmVzdWx0cyBvZiBiaXRzIHBy b3BhZ2F0aW9uLiAgKi8KICAgaXBjcF9zdG9yZV9iaXRzX3Jlc3VsdHMgKCk7 CisgIC8qIFN0b3JlIHJlc3VsdHMgb2YgdmFsdWUgcmFuZ2UgcHJvcGFnYXRp b24uICAqLworICBpcGNwX3N0b3JlX3ZyX3Jlc3VsdHMgKCk7CiAKICAgLyog RnJlZSBhbGwgSVBDUCBzdHJ1Y3R1cmVzLiAgKi8KICAgZnJlZV90b3BvcmRl cl9pbmZvICgmdG9wbyk7CmRpZmYgLS1naXQgYS9nY2MvaXBhLWRldmlydC5j IGIvZ2NjL2lwYS1kZXZpcnQuYwppbmRleCAyY2YwMThiLi42MmEwOGY4IDEw MDY0NAotLS0gYS9nY2MvaXBhLWRldmlydC5jCisrKyBiL2djYy9pcGEtZGV2 aXJ0LmMKQEAgLTEyMiw2ICsxMjIsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2Vl IHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUgImlw YS11dGlscy5oIgogI2luY2x1ZGUgImdpbXBsZS1mb2xkLmgiCiAjaW5jbHVk ZSAic3ltYm9sLXN1bW1hcnkuaCIKKyNpbmNsdWRlICJ0cmVlLXZycC5oIgog I2luY2x1ZGUgImlwYS1wcm9wLmgiCiAjaW5jbHVkZSAiaXBhLWlubGluZS5o IgogI2luY2x1ZGUgImRlbWFuZ2xlLmgiCmRpZmYgLS1naXQgYS9nY2MvaXBh LWlubGluZS10cmFuc2Zvcm0uYyBiL2djYy9pcGEtaW5saW5lLXRyYW5zZm9y bS5jCmluZGV4IDk4YzdmOTYuLmVmZTc0MjEgMTAwNjQ0Ci0tLSBhL2djYy9p cGEtaW5saW5lLXRyYW5zZm9ybS5jCisrKyBiL2djYy9pcGEtaW5saW5lLXRy YW5zZm9ybS5jCkBAIC0zOSw2ICszOSw3IEBAIGFsb25nIHdpdGggR0NDOyBz ZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAi Y2dyYXBoLmgiCiAjaW5jbHVkZSAidHJlZS1jZmcuaCIKICNpbmNsdWRlICJz eW1ib2wtc3VtbWFyeS5oIgorI2luY2x1ZGUgInRyZWUtdnJwLmgiCiAjaW5j bHVkZSAiaXBhLXByb3AuaCIKICNpbmNsdWRlICJpcGEtaW5saW5lLmgiCiAj aW5jbHVkZSAidHJlZS1pbmxpbmUuaCIKZGlmZiAtLWdpdCBhL2djYy9pcGEt aW5saW5lLmMgYi9nY2MvaXBhLWlubGluZS5jCmluZGV4IDVjOTM2NmEuLjgy YmI5NGYgMTAwNjQ0Ci0tLSBhL2djYy9pcGEtaW5saW5lLmMKKysrIGIvZ2Nj L2lwYS1pbmxpbmUuYwpAQCAtMTA4LDYgKzEwOCw3IEBAIGFsb25nIHdpdGgg R0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5j bHVkZSAicGFyYW1zLmgiCiAjaW5jbHVkZSAicHJvZmlsZS5oIgogI2luY2x1 ZGUgInN5bWJvbC1zdW1tYXJ5LmgiCisjaW5jbHVkZSAidHJlZS12cnAuaCIK ICNpbmNsdWRlICJpcGEtcHJvcC5oIgogI2luY2x1ZGUgImlwYS1pbmxpbmUu aCIKICNpbmNsdWRlICJpcGEtdXRpbHMuaCIKZGlmZiAtLWdpdCBhL2djYy9p cGEtcHJvZmlsZS5jIGIvZ2NjL2lwYS1wcm9maWxlLmMKaW5kZXggZGExN2Jj ZC4uZTg3NjE1YSAxMDA2NDQKLS0tIGEvZ2NjL2lwYS1wcm9maWxlLmMKKysr IGIvZ2NjL2lwYS1wcm9maWxlLmMKQEAgLTYyLDYgKzYyLDcgQEAgYWxvbmcg d2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUK ICNpbmNsdWRlICJ2YWx1ZS1wcm9mLmgiCiAjaW5jbHVkZSAidHJlZS1pbmxp bmUuaCIKICNpbmNsdWRlICJzeW1ib2wtc3VtbWFyeS5oIgorI2luY2x1ZGUg InRyZWUtdnJwLmgiCiAjaW5jbHVkZSAiaXBhLXByb3AuaCIKICNpbmNsdWRl ICJpcGEtaW5saW5lLmgiCiAKZGlmZiAtLWdpdCBhL2djYy9pcGEtcHJvcC5j IGIvZ2NjL2lwYS1wcm9wLmMKaW5kZXggMTYyOTc4MS4uOWQwNDBmOSAxMDA2 NDQKLS0tIGEvZ2NjL2lwYS1wcm9wLmMKKysrIGIvZ2NjL2lwYS1wcm9wLmMK QEAgLTMxMSw2ICszMTEsMTkgQEAgaXBhX3ByaW50X25vZGVfanVtcF9mdW5j dGlvbnNfZm9yX2VkZ2UgKEZJTEUgKmYsIHN0cnVjdCBjZ3JhcGhfZWRnZSAq Y3MpCiAJfQogICAgICAgZWxzZQogCWZwcmludGYgKGYsICIgICAgICAgICBV bmtub3duIGJpdHNcbiIpOworCisgICAgICBpZiAoanVtcF9mdW5jLT52cl9r bm93bikKKwl7CisJICBmcHJpbnRmIChmLCAiICAgICAgICAgVlIgICIpOwor CSAgZnByaW50ZiAoZiwgIiVzWyIsCisJCSAgIChqdW1wX2Z1bmMtPm1fdnIu dHlwZSA9PSBWUl9BTlRJX1JBTkdFKSA/ICJ+IiA6ICIiKTsKKwkgIHByaW50 X2RlY3MgKGp1bXBfZnVuYy0+bV92ci5taW4sIGYpOworCSAgZnByaW50ZiAo ZiwgIiwgIik7CisJICBwcmludF9kZWNzIChqdW1wX2Z1bmMtPm1fdnIubWF4 LCBmKTsKKwkgIGZwcmludGYgKGYsICJdXG4iKTsKKwl9CisgICAgICBlbHNl CisJZnByaW50ZiAoZiwgIiAgICAgICAgIFVua25vd24gVlJcbiIpOwogICAg IH0KIH0KIApAQCAtMzkxLDYgKzQwNCw3IEBAIGlwYV9zZXRfamZfdW5rbm93 biAoc3RydWN0IGlwYV9qdW1wX2Z1bmMgKmpmdW5jKQogICBqZnVuYy0+dHlw ZSA9IElQQV9KRl9VTktOT1dOOwogICBqZnVuYy0+YWxpZ25tZW50Lmtub3du ID0gZmFsc2U7CiAgIGpmdW5jLT5iaXRzLmtub3duID0gZmFsc2U7CisgIGpm dW5jLT52cl9rbm93biA9IGZhbHNlOwogfQogCiAvKiBTZXQgSkZVTkMgdG8g YmUgYSBjb3B5IG9mIGFub3RoZXIgam1wICh0byBiZSB1c2VkIGJ5IGp1bXAg ZnVuY3Rpb24KQEAgLTE2ODAsOSArMTY5NCwyOCBAQCBpcGFfY29tcHV0ZV9q dW1wX2Z1bmN0aW9uc19mb3JfZWRnZSAoc3RydWN0IGlwYV9mdW5jX2JvZHlf aW5mbyAqZmJpLAogCSAgICB9CiAJICBlbHNlCiAJICAgIGdjY19hc3NlcnQg KCFqZnVuYy0+YWxpZ25tZW50Lmtub3duKTsKKwkgIGdjY19hc3NlcnQgKCFq ZnVuYy0+dnJfa25vd24pOwogCX0KICAgICAgIGVsc2UKLQlnY2NfYXNzZXJ0 ICghamZ1bmMtPmFsaWdubWVudC5rbm93bik7CisJeworCSAgd2lkZV9pbnQg bWluLCBtYXg7CisJICB2YWx1ZV9yYW5nZV90eXBlIHR5cGU7CisJICBpZiAo VFJFRV9DT0RFIChhcmcpID09IFNTQV9OQU1FCisJICAgICAgJiYgcGFyYW1f dHlwZQorCSAgICAgICYmICh0eXBlID0gZ2V0X3JhbmdlX2luZm8gKGFyZywg Jm1pbiwgJm1heCkpCisJICAgICAgJiYgKHR5cGUgPT0gVlJfUkFOR0UgfHwg dHlwZSA9PSBWUl9BTlRJX1JBTkdFKQorCSAgICAgICYmIChtaW4uZ2V0X3By ZWNpc2lvbiAoKSA8PSBUWVBFX1BSRUNJU0lPTiAocGFyYW1fdHlwZSkKKwkJ ICB8fCBUWVBFX09WRVJGTE9XX1dSQVBTIChwYXJhbV90eXBlKSkpCisJICAg IHsKKwkgICAgICBqZnVuYy0+dnJfa25vd24gPSB0cnVlOworCSAgICAgIGpm dW5jLT5tX3ZyLnR5cGUgPSB0eXBlOworCSAgICAgIGpmdW5jLT5tX3ZyLm1p biA9IHdpZGVfaW50X3RvX3RyZWUgKHBhcmFtX3R5cGUsIG1pbik7CisJICAg ICAgamZ1bmMtPm1fdnIubWF4ID0gd2lkZV9pbnRfdG9fdHJlZSAocGFyYW1f dHlwZSwgbWF4KTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBnY2NfYXNzZXJ0 ICghamZ1bmMtPnZyX2tub3duKTsKKwkgIGdjY19hc3NlcnQgKCFqZnVuYy0+ YWxpZ25tZW50Lmtub3duKTsKKwl9CiAKICAgICAgIGlmIChJTlRFR1JBTF9U WVBFX1AgKFRSRUVfVFlQRSAoYXJnKSkKIAkgICYmIChUUkVFX0NPREUgKGFy ZykgPT0gU1NBX05BTUUgfHwgVFJFRV9DT0RFIChhcmcpID09IElOVEVHRVJf Q1NUKSkKQEAgLTM3MDksMTYgKzM3NDIsMjggQEAgaXBhX25vZGVfcGFyYW1z X3Q6OmR1cGxpY2F0ZShjZ3JhcGhfbm9kZSAqc3JjLCBjZ3JhcGhfbm9kZSAq ZHN0LAogCiAgIGlwY3BfdHJhbnNmb3JtYXRpb25fc3VtbWFyeSAqc3JjX3Ry YW5zID0gaXBjcF9nZXRfdHJhbnNmb3JtYXRpb25fc3VtbWFyeSAoc3JjKTsK IAotICBpZiAoc3JjX3RyYW5zICYmIHZlY19zYWZlX2xlbmd0aCAoc3JjX3Ry YW5zLT5hbGlnbm1lbnRzKSA+IDApCisgIGlmIChzcmNfdHJhbnMpCiAgICAg ewogICAgICAgaXBjcF9ncm93X3RyYW5zZm9ybWF0aW9uc19pZl9uZWNlc3Nh cnkgKCk7CiAgICAgICBzcmNfdHJhbnMgPSBpcGNwX2dldF90cmFuc2Zvcm1h dGlvbl9zdW1tYXJ5IChzcmMpOwogICAgICAgY29uc3QgdmVjPGlwYV9hbGln bm1lbnQsIHZhX2djPiAqc3JjX2FsaWdubWVudHMgPSBzcmNfdHJhbnMtPmFs aWdubWVudHM7CisgICAgICBjb25zdCB2ZWM8aXBhX3ZyLCB2YV9nYz4gKnNy Y192ciA9IHNyY190cmFucy0+bV92cjsKICAgICAgIHZlYzxpcGFfYWxpZ25t ZW50LCB2YV9nYz4gKiZkc3RfYWxpZ25tZW50cwogCT0gaXBjcF9nZXRfdHJh bnNmb3JtYXRpb25fc3VtbWFyeSAoZHN0KS0+YWxpZ25tZW50czsKLSAgICAg IHZlY19zYWZlX3Jlc2VydmVfZXhhY3QgKGRzdF9hbGlnbm1lbnRzLCBzcmNf YWxpZ25tZW50cy0+bGVuZ3RoICgpKTsKLSAgICAgIGZvciAodW5zaWduZWQg aSA9IDA7IGkgPCBzcmNfYWxpZ25tZW50cy0+bGVuZ3RoICgpOyArK2kpCi0J ZHN0X2FsaWdubWVudHMtPnF1aWNrX3B1c2ggKCgqc3JjX2FsaWdubWVudHMp W2ldKTsKKyAgICAgIHZlYzxpcGFfdnIsIHZhX2djPiAqJmRzdF92cgorCT0g aXBjcF9nZXRfdHJhbnNmb3JtYXRpb25fc3VtbWFyeSAoZHN0KS0+bV92cjsK KyAgICAgIGlmICh2ZWNfc2FmZV9sZW5ndGggKHNyY190cmFucy0+YWxpZ25t ZW50cykgPiAwKQorCXsKKwkgIHZlY19zYWZlX3Jlc2VydmVfZXhhY3QgKGRz dF9hbGlnbm1lbnRzLCBzcmNfYWxpZ25tZW50cy0+bGVuZ3RoICgpKTsKKwkg IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNfYWxpZ25tZW50cy0+bGVu Z3RoICgpOyArK2kpCisJICAgIGRzdF9hbGlnbm1lbnRzLT5xdWlja19wdXNo ICgoKnNyY19hbGlnbm1lbnRzKVtpXSk7CisJfQorICAgICAgaWYgKHZlY19z YWZlX2xlbmd0aCAoc3JjX3RyYW5zLT5tX3ZyKSA+IDApCisJeworCSAgdmVj X3NhZmVfcmVzZXJ2ZV9leGFjdCAoZHN0X3ZyLCBzcmNfdnItPmxlbmd0aCAo KSk7CisJICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3JjX3ZyLT5sZW5n dGggKCk7ICsraSkKKwkgICAgZHN0X3ZyLT5xdWlja19wdXNoICgoKnNyY192 cilbaV0pOworCX0KICAgICB9CiAKICAgaWYgKHNyY190cmFucyAmJiB2ZWNf c2FmZV9sZW5ndGggKHNyY190cmFucy0+Yml0cykgPiAwKQpAQCAtNDY2MCw2 ICs0NzA1LDE1IEBAIGlwYV93cml0ZV9qdW1wX2Z1bmN0aW9uIChzdHJ1Y3Qg b3V0cHV0X2Jsb2NrICpvYiwKICAgICAgIHN0cmVhbWVyX3dyaXRlX3dpZGVz dF9pbnQgKG9iLCBqdW1wX2Z1bmMtPmJpdHMudmFsdWUpOwogICAgICAgc3Ry ZWFtZXJfd3JpdGVfd2lkZXN0X2ludCAob2IsIGp1bXBfZnVuYy0+Yml0cy5t YXNrKTsKICAgICB9ICAgCisgIGJwX3BhY2tfdmFsdWUgKCZicCwganVtcF9m dW5jLT52cl9rbm93biwgMSk7CisgIHN0cmVhbWVyX3dyaXRlX2JpdHBhY2sg KCZicCk7CisgIGlmIChqdW1wX2Z1bmMtPnZyX2tub3duKQorICAgIHsKKyAg ICAgIHN0cmVhbWVyX3dyaXRlX2VudW0gKG9iLT5tYWluX3N0cmVhbSwgdmFs dWVfcmFuZ190eXBlLAorCQkJICAgVlJfTEFTVCwganVtcF9mdW5jLT5tX3Zy LnR5cGUpOworICAgICAgc3RyZWFtX3dyaXRlX3RyZWUgKG9iLCBqdW1wX2Z1 bmMtPm1fdnIubWluLCB0cnVlKTsKKyAgICAgIHN0cmVhbV93cml0ZV90cmVl IChvYiwganVtcF9mdW5jLT5tX3ZyLm1heCwgdHJ1ZSk7CisgICAgfQogfQog CiAvKiBSZWFkIGluIGp1bXAgZnVuY3Rpb24gSlVNUF9GVU5DIGZyb20gSUIu ICAqLwpAQCAtNDc0Nyw2ICs0ODAxLDIwIEBAIGlwYV9yZWFkX2p1bXBfZnVu Y3Rpb24gKHN0cnVjdCBsdG9faW5wdXRfYmxvY2sgKmliLAogICAgIH0KICAg ZWxzZQogICAgIGp1bXBfZnVuYy0+Yml0cy5rbm93biA9IGZhbHNlOworCisg IHN0cnVjdCBiaXRwYWNrX2QgdnJfYnAgPSBzdHJlYW1lcl9yZWFkX2JpdHBh Y2sgKGliKTsKKyAgYm9vbCB2cl9rbm93biA9IGJwX3VucGFja192YWx1ZSAo JnZyX2JwLCAxKTsKKyAgaWYgKHZyX2tub3duKQorICAgIHsKKyAgICAgIGp1 bXBfZnVuYy0+dnJfa25vd24gPSB0cnVlOworICAgICAganVtcF9mdW5jLT5t X3ZyLnR5cGUgPSBzdHJlYW1lcl9yZWFkX2VudW0gKGliLAorCQkJCQkJIHZh bHVlX3JhbmdlX3R5cGUsCisJCQkJCQkgVlJfTEFTVCk7CisgICAgICBqdW1w X2Z1bmMtPm1fdnIubWluID0gc3RyZWFtX3JlYWRfdHJlZSAoaWIsIGRhdGFf aW4pOworICAgICAganVtcF9mdW5jLT5tX3ZyLm1heCA9IHN0cmVhbV9yZWFk X3RyZWUgKGliLCBkYXRhX2luKTsKKyAgICB9CisgIGVsc2UKKyAgICBqdW1w X2Z1bmMtPnZyX2tub3duID0gZmFsc2U7CiB9CiAKIC8qIFN0cmVhbSBvdXQg cGFydHMgb2YgY2dyYXBoX2luZGlyZWN0X2NhbGxfaW5mbyBjb3JyZXNwb25k aW5nIHRvIENTIHRoYXQgYXJlCkBAIC01MTEzLDcgKzUxODEsMjkgQEAgd3Jp dGVfaXBjcF90cmFuc2Zvcm1hdGlvbl9pbmZvIChvdXRwdXRfYmxvY2sgKm9i LCBjZ3JhcGhfbm9kZSAqbm9kZSkKICAgZWxzZQogICAgIHN0cmVhbWVyX3dy aXRlX3Vod2kgKG9iLCAwKTsKIAotICB0cyA9IGlwY3BfZ2V0X3RyYW5zZm9y bWF0aW9uX3N1bW1hcnkgKG5vZGUpOworICBpZiAodHMgJiYgdmVjX3NhZmVf bGVuZ3RoICh0cy0+bV92cikgPiAwKQorICAgIHsKKyAgICAgIGNvdW50ID0g dHMtPm1fdnItPmxlbmd0aCAoKTsKKyAgICAgIHN0cmVhbWVyX3dyaXRlX3Vo d2kgKG9iLCBjb3VudCk7CisgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp IDwgY291bnQ7ICsraSkKKwl7CisJICBzdHJ1Y3QgYml0cGFja19kIGJwOwor CSAgaXBhX3ZyICpwYXJtX3ZyID0gJigqdHMtPm1fdnIpW2ldOworCSAgYnAg PSBiaXRwYWNrX2NyZWF0ZSAob2ItPm1haW5fc3RyZWFtKTsKKwkgIGJwX3Bh Y2tfdmFsdWUgKCZicCwgcGFybV92ci0+a25vd24sIDEpOworCSAgc3RyZWFt ZXJfd3JpdGVfYml0cGFjayAoJmJwKTsKKwkgIGlmIChwYXJtX3ZyLT5rbm93 bikKKwkgICAgeworCSAgICAgIHN0cmVhbWVyX3dyaXRlX2VudW0gKG9iLT5t YWluX3N0cmVhbSwgdmFsdWVfcmFuZ190eXBlLAorCQkJCSAgIFZSX0xBU1Qs IHBhcm1fdnItPnR5cGUpOworCSAgICAgIHN0cmVhbWVyX3dyaXRlX3dpZGVf aW50IChvYiwgcGFybV92ci0+bWluKTsKKwkgICAgICBzdHJlYW1lcl93cml0 ZV93aWRlX2ludCAob2IsIHBhcm1fdnItPm1heCk7CisJICAgIH0KKwl9Cisg ICAgfQorICBlbHNlCisgICAgc3RyZWFtZXJfd3JpdGVfdWh3aSAob2IsIDAp OworCiAgIGlmICh0cyAmJiB2ZWNfc2FmZV9sZW5ndGggKHRzLT5iaXRzKSA+ IDApCiAgICAgewogICAgICAgY291bnQgPSB0cy0+Yml0cy0+bGVuZ3RoICgp OwpAQCAtNTE5MSw2ICs1MjgxLDMwIEBAIHJlYWRfaXBjcF90cmFuc2Zvcm1h dGlvbl9pbmZvIChsdG9faW5wdXRfYmxvY2sgKmliLCBjZ3JhcGhfbm9kZSAq bm9kZSwKICAgaWYgKGNvdW50ID4gMCkKICAgICB7CiAgICAgICBpcGNwX2dy b3dfdHJhbnNmb3JtYXRpb25zX2lmX25lY2Vzc2FyeSAoKTsKKworICAgICAg aXBjcF90cmFuc2Zvcm1hdGlvbl9zdW1tYXJ5ICp0cyA9IGlwY3BfZ2V0X3Ry YW5zZm9ybWF0aW9uX3N1bW1hcnkgKG5vZGUpOworICAgICAgdmVjX3NhZmVf Z3Jvd19jbGVhcmVkICh0cy0+bV92ciwgY291bnQpOworICAgICAgZm9yIChp ID0gMDsgaSA8IGNvdW50OyBpKyspCisJeworCSAgaXBhX3ZyICpwYXJtX3Zy OworCSAgcGFybV92ciA9ICYoKnRzLT5tX3ZyKVtpXTsKKwkgIHN0cnVjdCBi aXRwYWNrX2QgYnA7CisJICBicCA9IHN0cmVhbWVyX3JlYWRfYml0cGFjayAo aWIpOworCSAgcGFybV92ci0+a25vd24gPSBicF91bnBhY2tfdmFsdWUgKCZi cCwgMSk7CisJICBpZiAocGFybV92ci0+a25vd24pCisJICAgIHsKKwkgICAg ICBwYXJtX3ZyLT50eXBlID0gc3RyZWFtZXJfcmVhZF9lbnVtIChpYiwgdmFs dWVfcmFuZ2VfdHlwZSwKKwkJCQkJCSAgVlJfTEFTVCk7CisJICAgICAgcGFy bV92ci0+bWluID0gc3RyZWFtZXJfcmVhZF93aWRlX2ludCAoaWIpOworCSAg ICAgIHBhcm1fdnItPm1heCA9IHN0cmVhbWVyX3JlYWRfd2lkZV9pbnQgKGli KTsKKwkgICAgfQorCX0KKyAgICB9CisgIGNvdW50ID0gc3RyZWFtZXJfcmVh ZF91aHdpIChpYik7CisgIGlmIChjb3VudCA+IDApCisgICAgeworICAgICAg aXBjcF9ncm93X3RyYW5zZm9ybWF0aW9uc19pZl9uZWNlc3NhcnkgKCk7CisK ICAgICAgIGlwY3BfdHJhbnNmb3JtYXRpb25fc3VtbWFyeSAqdHMgPSBpcGNw X2dldF90cmFuc2Zvcm1hdGlvbl9zdW1tYXJ5IChub2RlKTsKICAgICAgIHZl Y19zYWZlX2dyb3dfY2xlYXJlZCAodHMtPmJpdHMsIGNvdW50KTsKIApAQCAt NTU1OCw2ICs1NjcyLDU5IEBAIGlwY3BfdXBkYXRlX2JpdHMgKHN0cnVjdCBj Z3JhcGhfbm9kZSAqbm9kZSkKICAgICB9CiB9CiAKKy8qIFVwZGF0ZSB2YWx1 ZSByYW5nZSBvZiBmb3JtYWwgcGFyYW1ldGVycyBhcyBkZXNjcmliZWQgaW4K KyAgIGlwY3BfdHJhbnNmb3JtYXRpb25fc3VtbWFyeS4gICovCisKK3N0YXRp YyB2b2lkCitpcGNwX3VwZGF0ZV92ciAoc3RydWN0IGNncmFwaF9ub2RlICpu b2RlKQoreworICB0cmVlIGZuZGVjbCA9IG5vZGUtPmRlY2w7CisgIHRyZWUg cGFybSA9IERFQ0xfQVJHVU1FTlRTIChmbmRlY2wpOworICB0cmVlIG5leHRf cGFybSA9IHBhcm07CisgIGlwY3BfdHJhbnNmb3JtYXRpb25fc3VtbWFyeSAq dHMgPSBpcGNwX2dldF90cmFuc2Zvcm1hdGlvbl9zdW1tYXJ5IChub2RlKTsK KyAgaWYgKCF0cyB8fCB2ZWNfc2FmZV9sZW5ndGggKHRzLT5tX3ZyKSA9PSAw KQorICAgIHJldHVybjsKKyAgY29uc3QgdmVjPGlwYV92ciwgdmFfZ2M+ICZ2 ciA9ICp0cy0+bV92cjsKKyAgdW5zaWduZWQgY291bnQgPSB2ci5sZW5ndGgg KCk7CisKKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2ks IHBhcm0gPSBuZXh0X3Bhcm0pCisgICAgeworICAgICAgaWYgKG5vZGUtPmNs b25lLmNvbWJpbmVkX2FyZ3NfdG9fc2tpcAorCSAgJiYgYml0bWFwX2JpdF9w IChub2RlLT5jbG9uZS5jb21iaW5lZF9hcmdzX3RvX3NraXAsIGkpKQorCWNv bnRpbnVlOworICAgICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAocGFybSk7Cisg ICAgICBuZXh0X3Bhcm0gPSBERUNMX0NIQUlOIChwYXJtKTsKKyAgICAgIHRy ZWUgZGRlZiA9IHNzYV9kZWZhdWx0X2RlZiAoREVDTF9TVFJVQ1RfRlVOQ1RJ T04gKG5vZGUtPmRlY2wpLCBwYXJtKTsKKworICAgICAgaWYgKCFkZGVmIHx8 ICFpc19naW1wbGVfcmVnIChwYXJtKSkKKwljb250aW51ZTsKKworICAgICAg aWYgKHZyW2ldLmtub3duCisJICAmJiBJTlRFR1JBTF9UWVBFX1AgKFRSRUVf VFlQRSAoZGRlZikpCisJICAmJiAhUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQ RSAoZGRlZikpCisJICAmJiAodnJbaV0udHlwZSA9PSBWUl9SQU5HRSB8fCB2 cltpXS50eXBlID09IFZSX0FOVElfUkFOR0UpKQorCXsKKwkgIHRyZWUgdHlw ZSA9IFRSRUVfVFlQRSAoZGRlZik7CisJICB1bnNpZ25lZCBwcmVjID0gVFlQ RV9QUkVDSVNJT04gKHR5cGUpOworCSAgaWYgKGR1bXBfZmlsZSkKKwkgICAg eworCSAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIlNldHRpbmcgdmFsdWUg cmFuZ2Ugb2YgcGFyYW0gJXUgIiwgaSk7CisJICAgICAgZnByaW50ZiAoZHVt cF9maWxlLCAiJXNbIiwKKwkJICAgICAgICh2cltpXS50eXBlID09IFZSX0FO VElfUkFOR0UpID8gIn4iIDogIiIpOworCSAgICAgIHByaW50X2RlY3MgKHZy W2ldLm1pbiwgZHVtcF9maWxlKTsKKwkgICAgICBmcHJpbnRmIChkdW1wX2Zp bGUsICIsICIpOworCSAgICAgIHByaW50X2RlY3MgKHZyW2ldLm1heCwgZHVt cF9maWxlKTsKKwkgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJdXG4iKTsK KwkgICAgfQorCSAgc2V0X3JhbmdlX2luZm8gKGRkZWYsIHZyW2ldLnR5cGUs CisJCQkgIHdpZGVfaW50X3N0b3JhZ2U6OmZyb20gKHZyW2ldLm1pbiwgcHJl YywKKwkJCQkJCSAgVFlQRV9TSUdOICh0eXBlKSksCisJCQkgIHdpZGVfaW50 X3N0b3JhZ2U6OmZyb20gKHZyW2ldLm1heCwgcHJlYywKKwkJCQkJCSAgVFlQ RV9TSUdOICh0eXBlKSkpOworCX0KKyAgICB9Cit9CisKIC8qIElQQ1AgdHJh bnNmb3JtYXRpb24gcGhhc2UgZG9pbmcgcHJvcGFnYXRpb24gb2YgYWdncmVn YXRlIHZhbHVlcy4gICovCiAKIHVuc2lnbmVkIGludApAQCAtNTU3OCw2ICs1 NzQ1LDcgQEAgaXBjcF90cmFuc2Zvcm1fZnVuY3Rpb24gKHN0cnVjdCBjZ3Jh cGhfbm9kZSAqbm9kZSkKIAogICBpcGNwX3VwZGF0ZV9hbGlnbm1lbnRzIChu b2RlKTsKICAgaXBjcF91cGRhdGVfYml0cyAobm9kZSk7CisgIGlwY3BfdXBk YXRlX3ZyIChub2RlKTsKICAgYWdndmFsID0gaXBhX2dldF9hZ2dfcmVwbGFj ZW1lbnRzX2Zvcl9ub2RlIChub2RlKTsKICAgaWYgKCFhZ2d2YWwpCiAgICAg ICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2djYy9pcGEtcHJvcC5oIGIvZ2Nj L2lwYS1wcm9wLmgKaW5kZXggZTVhNTZkYS4uYTEyMzk3OCAxMDA2NDQKLS0t IGEvZ2NjL2lwYS1wcm9wLmgKKysrIGIvZ2NjL2lwYS1wcm9wLmgKQEAgLTE2 Nyw2ICsxNjcsMTYgQEAgc3RydWN0IEdUWSgoKSkgaXBhX2JpdHMKICAgYm9v bCBrbm93bjsKIH07CiAKKy8qIEluZm8gYWJvdXQgdmFsdWUgcmFuZ2VzLiAg Ki8KK3N0cnVjdCBHVFkoKCkpIGlwYV92cgoreworICAvKiBUaGUgZGF0YSBm aWVsZHMgYmVsb3cgYXJlIHZhbGlkIG9ubHkgaWYga25vd24gaXMgdHJ1ZS4g ICovCisgIGJvb2wga25vd247CisgIGVudW0gdmFsdWVfcmFuZ2VfdHlwZSB0 eXBlOworICB3aWRlX2ludCBtaW47CisgIHdpZGVfaW50IG1heDsKK307CisK IC8qIEEganVtcCBmdW5jdGlvbiBmb3IgYSBjYWxsc2l0ZSByZXByZXNlbnRz IHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGFjdHVhbAogICAgYXJndW1lbnRzIG9m IHRoZSBjYWxsc2l0ZS4gU2VlIGVudW0ganVtcF9mdW5jX3R5cGUgZm9yIHRo ZSB2YXJpb3VzCiAgICB0eXBlcyBvZiBqdW1wIGZ1bmN0aW9ucyBzdXBwb3J0 ZWQuICAqLwpAQCAtMTgyLDYgKzE5MiwxMCBAQCBzdHJ1Y3QgR1RZICgoKSkg aXBhX2p1bXBfZnVuYwogICAvKiBJbmZvcm1hdGlvbiBhYm91dCB6ZXJvL25v bi16ZXJvIGJpdHMuICAqLwogICBzdHJ1Y3QgaXBhX2JpdHMgYml0czsKIAor ICAvKiBJbmZvcm1hdGlvbiBhYm91dCB2YWx1ZSByYW5nZS4gICovCisgIGJv b2wgdnJfa25vd247CisgIHZhbHVlX3JhbmdlIG1fdnI7CisKICAgZW51bSBq dW1wX2Z1bmNfdHlwZSB0eXBlOwogICAvKiBSZXByZXNlbnRzIGEgdmFsdWUg b2YgYSBqdW1wIGZ1bmN0aW9uLiAgcGFzc190aHJvdWdoIGlzIHVzZWQgb25s eSBpbiBqdW1wCiAgICAgIGZ1bmN0aW9uIGNvbnRleHQuICBjb25zdGFudCBy ZXByZXNlbnRzIHRoZSBhY3R1YWwgY29uc3RhbnQgaW4gY29uc3RhbnQganVt cApAQCAtNTIxLDYgKzUzNSw4IEBAIHN0cnVjdCBHVFkoKCkpIGlwY3BfdHJh bnNmb3JtYXRpb25fc3VtbWFyeQogICB2ZWM8aXBhX2FsaWdubWVudCwgdmFf Z2M+ICphbGlnbm1lbnRzOwogICAvKiBLbm93biBiaXRzIGluZm9ybWF0aW9u LiAgKi8KICAgdmVjPGlwYV9iaXRzLCB2YV9nYz4gKmJpdHM7CisgIC8qIFZh bHVlIHJhbmdlIGluZm9ybWF0aW9uLiAgKi8KKyAgdmVjPGlwYV92ciwgdmFf Z2M+ICptX3ZyOwogfTsKIAogdm9pZCBpcGFfc2V0X25vZGVfYWdnX3ZhbHVl X2NoYWluIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUsCmRpZmYgLS1naXQg YS9nY2MvaXBhLXV0aWxzLmMgYi9nY2MvaXBhLXV0aWxzLmMKaW5kZXggNWVi N2Q1Zi4uNjFkOGRkMSAxMDA2NDQKLS0tIGEvZ2NjL2lwYS11dGlscy5jCisr KyBiL2djYy9pcGEtdXRpbHMuYwpAQCAtMzIsNiArMzIsNyBAQCBhbG9uZyB3 aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQog I2luY2x1ZGUgInNwbGF5LXRyZWUuaCIKICNpbmNsdWRlICJpcGEtdXRpbHMu aCIKICNpbmNsdWRlICJzeW1ib2wtc3VtbWFyeS5oIgorI2luY2x1ZGUgInRy ZWUtdnJwLmgiCiAjaW5jbHVkZSAiaXBhLXByb3AuaCIKICNpbmNsdWRlICJp cGEtaW5saW5lLmgiCiAKZGlmZiAtLWdpdCBhL2djYy9pcGEuYyBiL2djYy9p cGEuYwppbmRleCAwMzVmYjY0Li5iMjZkYWQ1IDEwMDY0NAotLS0gYS9nY2Mv aXBhLmMKKysrIGIvZ2NjL2lwYS5jCkBAIC0zMiw2ICszMiw3IEBAIGFsb25n IHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2Vl CiAjaW5jbHVkZSAidHJlZS1pdGVyYXRvci5oIgogI2luY2x1ZGUgImlwYS11 dGlscy5oIgogI2luY2x1ZGUgInN5bWJvbC1zdW1tYXJ5LmgiCisjaW5jbHVk ZSAidHJlZS12cnAuaCIKICNpbmNsdWRlICJpcGEtcHJvcC5oIgogI2luY2x1 ZGUgImlwYS1pbmxpbmUuaCIKICNpbmNsdWRlICJkYmdjbnQuaCIKZGlmZiAt LWdpdCBhL2djYy9sdG8vbHRvLXBhcnRpdGlvbi5jIGIvZ2NjL2x0by9sdG8t cGFydGl0aW9uLmMKaW5kZXggNDUzMzQzYS4uYjUyZDE3NSAxMDA2NDQKLS0t IGEvZ2NjL2x0by9sdG8tcGFydGl0aW9uLmMKKysrIGIvZ2NjL2x0by9sdG8t cGFydGl0aW9uLmMKQEAgLTMxLDYgKzMxLDcgQEAgYWxvbmcgd2l0aCBHQ0M7 IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRl ICJsdG8tc3RyZWFtZXIuaCIKICNpbmNsdWRlICJwYXJhbXMuaCIKICNpbmNs dWRlICJzeW1ib2wtc3VtbWFyeS5oIgorI2luY2x1ZGUgInRyZWUtdnJwLmgi CiAjaW5jbHVkZSAiaXBhLXByb3AuaCIKICNpbmNsdWRlICJpcGEtaW5saW5l LmgiCiAjaW5jbHVkZSAibHRvLXBhcnRpdGlvbi5oIgpkaWZmIC0tZ2l0IGEv Z2NjL2x0by9sdG8uYyBiL2djYy9sdG8vbHRvLmMKaW5kZXggNzNkMWUyNi4u YmJmMDJlOCAxMDA2NDQKLS0tIGEvZ2NjL2x0by9sdG8uYworKysgYi9nY2Mv bHRvL2x0by5jCkBAIC0zNiw2ICszNiw3IEBAIGFsb25nIHdpdGggR0NDOyBz ZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAi dG9wbGV2LmgiCiAjaW5jbHVkZSAic3Rvci1sYXlvdXQuaCIKICNpbmNsdWRl ICJzeW1ib2wtc3VtbWFyeS5oIgorI2luY2x1ZGUgInRyZWUtdnJwLmgiCiAj aW5jbHVkZSAiaXBhLXByb3AuaCIKICNpbmNsdWRlICJjb21tb24uaCIKICNp bmNsdWRlICJkZWJ1Zy5oIgpkaWZmIC0tZ2l0IGEvZ2NjL29wdHMuYyBiL2dj Yy9vcHRzLmMKaW5kZXggYmMwNTcwZC4uYmI3ODc5YiAxMDA2NDQKLS0tIGEv Z2NjL29wdHMuYworKysgYi9nY2Mvb3B0cy5jCkBAIC01MDYsNiArNTA2LDcg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkZWZhdWx0X29wdGlvbnMgZGVmYXVs dF9vcHRpb25zX3RhYmxlW10gPQogICAgIHsgT1BUX0xFVkVMU18yX1BMVVMs IE9QVF9maXBhX2NwLCBOVUxMLCAxIH0sCiAgICAgeyBPUFRfTEVWRUxTXzJf UExVUywgT1BUX2ZpcGFfY3BfYWxpZ25tZW50LCBOVUxMLCAxIH0sCiAgICAg eyBPUFRfTEVWRUxTXzJfUExVUywgT1BUX2ZpcGFfYml0X2NwLCBOVUxMLCAx IH0sCisgICAgeyBPUFRfTEVWRUxTXzJfUExVUywgT1BUX2ZpcGFfdnJwLCBO VUxMLCAxIH0sCiAgICAgeyBPUFRfTEVWRUxTXzJfUExVUywgT1BUX2ZkZXZp cnR1YWxpemUsIE5VTEwsIDEgfSwKICAgICB7IE9QVF9MRVZFTFNfMl9QTFVT LCBPUFRfZmRldmlydHVhbGl6ZV9zcGVjdWxhdGl2ZWx5LCBOVUxMLCAxIH0s CiAgICAgeyBPUFRfTEVWRUxTXzJfUExVUywgT1BUX2ZpcGFfc3JhLCBOVUxM LCAxIH0sCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9pcGEv cHVyZS1jb25zdC0zLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9pcGEvcHVy ZS1jb25zdC0zLkMKaW5kZXggMzc3OWVjYi4uZmY3ZmU1MyAxMDA2NDQKLS0t IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvaXBhL3B1cmUtY29uc3QtMy5DCisr KyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2lwYS9wdXJlLWNvbnN0LTMuQwpA QCAtMSw1ICsxLDUgQEAKIC8qIHsgZGctZG8gY29tcGlsZSB9ICovCi0vKiB7 IGRnLW9wdGlvbnMgIi1PMiAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiICB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZm5vLWlwYS12cnAgLWZkdW1wLXRy ZWUtb3B0aW1pemVkIiAgfSAqLwogaW50ICpwdHI7CiBzdGF0aWMgaW50IGJh cnZhcjsKIHN0YXRpYyBpbnQgYihpbnQgYSk7CmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy9pcGEvdnJwMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvaXBhL3ZycDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi43MmEzMTM5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvaXBhL3ZycDEuYwpAQCAtMCwwICsxLDMyIEBACisvKiB7 IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLWZk dW1wLWlwYS1jcC1kZXRhaWxzIiB9ICovCisKK3N0YXRpYyBfX2F0dHJpYnV0 ZV9fKChub2lubGluZSwgbm9jbG9uZSkpCitpbnQgZm9vIChpbnQgaSkKK3sK KyAgaWYgKGkgPCA1KQorICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKyAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKChub2lubGluZSwg bm9jbG9uZSkpCitpbnQgYmFyIChpbnQgaikKK3sKKyAgaWYgKGogPiA4KQor ICAgIHJldHVybiBmb28gKGogKyAyKTsKKyAgZWxzZSBpZiAoaiA+IDIpCisg ICAgcmV0dXJuIGZvbyAoaiArIDMpOworCisgIHJldHVybiAwOworfQorCitp bnQgbWFpbiAoKQoreworICBmb3IgKHVuc2lnbmVkIGludCBpID0wOyBpIDwg MTAwMDsgKytpKQorICAgIGJhciAoaSk7CisKKyAgcmV0dXJuIDA7Cit9CisK Ky8qIHsgZGctZmluYWwgeyBzY2FuLWlwYS1kdW1wICJTZXR0aW5nIHZhbHVl IHJhbmdlIG9mIHBhcmFtIDAgXFxcWzYsIiAiY3AiIH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4taXBhLWR1bXAgIlNldHRpbmcgdmFsdWUgcmFuZ2Ug b2YgcGFyYW0gMCBcXFxbMCwgOTk5XFxcXSIgImNwIiB9IH0gKi8KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2lwYS92cnAyLmMgYi9nY2Mv dGVzdHN1aXRlL2djYy5kZy9pcGEvdnJwMi5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmM3MjBlNWMKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy9pcGEvdnJwMi5jCkBAIC0wLDAgKzEs MzUgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlv bnMgIi1PMiAtZmR1bXAtaXBhLWNwLWRldGFpbHMiIH0gKi8KKworc3RhdGlj IF9fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkKK2ludCBmb28g KGludCBpKQoreworICBpZiAoaSA8IDQpCisgICAgX19idWlsdGluX2Fib3J0 ICgpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIF9fYXR0cmlidXRlX18o KG5vaW5saW5lLCBub2Nsb25lKSkKK2ludCBiYXIgKGludCBqKQoreworICBp ZiAoaiA+IDgpCisgICAgcmV0dXJuIGZvbyAoaiArIDIpOworICBlbHNlIGlm IChqID4gMikKKyAgICByZXR1cm4gZm9vIChqICsgMyk7CisKKyAgcmV0dXJu IDA7Cit9CisKK2ludCBtYWluICgpCit7CisgIGZvbyAoMTAwKTsKKyAgZm9y ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAxMjsgKytpKQorICAgIHsKKyAg ICAgIGJhciAoaSk7CisgICAgfQorICBmb28gKDQpOworICByZXR1cm4gMDsK K30KKworLyogeyBkZy1maW5hbCB7IHNjYW4taXBhLWR1bXAgIlNldHRpbmcg dmFsdWUgcmFuZ2Ugb2YgcGFyYW0gMCBcXFxbNCwiICJjcCIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1pcGEtZHVtcCAiU2V0dGluZyB2YWx1ZSBy YW5nZSBvZiBwYXJhbSAwIFxcXFswLCAxMVxcXF0iICJjcCIgfSB9ICovCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9pcGEvdnJwMy5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL3ZycDMuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjVkNTRhCi0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvaXBhL3ZycDMuYwpAQCAtMCww ICsxLDMwIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1v cHRpb25zICItTzIgLWZkdW1wLWlwYS1jcC1kZXRhaWxzIiB9ICovCisKK3Zv bGF0aWxlIGludCBjb25kOworCitzdGF0aWMgX19hdHRyaWJ1dGVfXygobm9p bmxpbmUsIG5vY2xvbmUpKQoraW50IGZvbyAoaW50IGkpCit7CisgIGlmIChp IDwgNSkKKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisgIHJldHVybiAwOwor fQorCitzdGF0aWMgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUsIG5vY2xvbmUp KQoraW50IGJhciAoaW50IGopCit7CisgIGlmIChjb25kKQorICAgIGZvbyAo aik7CisgIHJldHVybiAwOworfQorCitpbnQgbWFpbiAoKQoreworICBmb3Ig KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDEwOyArK2kpCisgICAgYmFyIChp KTsKKworICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4t aXBhLWR1bXAtdGltZXMgIlNldHRpbmcgdmFsdWUgcmFuZ2Ugb2YgcGFyYW0g MCBcXFxbMCwgOVxcXF0iIDIgImNwIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2dj Yy90b3BsZXYuYyBiL2djYy90b3BsZXYuYwppbmRleCAyNjA3OTA0Li42Njhl Y2NkIDEwMDY0NAotLS0gYS9nY2MvdG9wbGV2LmMKKysrIGIvZ2NjL3RvcGxl di5jCkBAIC03MSw2ICs3MSw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhl IGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAiZHdhcmYy b3V0LmgiCiAjaW5jbHVkZSAiaXBhLXJlZmVyZW5jZS5oIgogI2luY2x1ZGUg InN5bWJvbC1zdW1tYXJ5LmgiCisjaW5jbHVkZSAidHJlZS12cnAuaCIKICNp bmNsdWRlICJpcGEtcHJvcC5oIgogI2luY2x1ZGUgImdjc2UuaCIKICNpbmNs dWRlICJ0cmVlLWNoa3AuaCIKLS0gCjIuNy40Cgo= --001a11407030628433053b432588--