From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-4324.protonmail.ch (mail-4324.protonmail.ch [185.70.43.24]) by sourceware.org (Postfix) with ESMTPS id 7B8903858D32 for ; Thu, 31 Aug 2023 06:02:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7B8903858D32 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=protonmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=protonmail.com Date: Thu, 31 Aug 2023 06:02:36 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1693461767; x=1693720967; bh=4CPC18zxTBQk1UX9ee8X7AdOIarbavoFGB5mqrMcaSA=; h=Date:To:From:Subject:Message-ID:Feedback-ID:From:To:Cc:Date: Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=yeq171/OV5gbOt0e1US9wzdYSMoWvDHn0xYJx17+vfX3liA/vz6A+cd52kdTlQccn KMcz33f5GTW0Tylkld5LG6Rj/4WNYSGoOeOgGTM4vNzS3GJ8Ac69F+iClwljqq0Ozm F4kEtgIcgDlJos/jlueCyheRa6zi10lX4g8bVfN6IbXvn7MrMsFlw30jO/TybOiqnU FuGB2fYFY7go/LFTKMqwTLlhjmP+s+4na7bpUT/S6DiM4ZXUllflc+NgrKBmwtLb7o EyacBk9eSWdQo0mKn+1NIhryni2Mvts3AP+ssUD4wW2kGxtLc64xKR6ypMrWg7Xslz 36GIfd2wc5N4A== To: "gcc-patches@gcc.gnu.org" From: waffl3x Subject: [PATCH 1/2] c++: Initial support for P0847R7 (Deducing This) [PR102609] Message-ID: Feedback-ID: 14591686:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_6wvuz2BhgCJod6oAC0dpsUskOLkHFsHcfl0use2vZg" X-Spam-Status: No, score=-8.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS,TXREP 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. --b1_6wvuz2BhgCJod6oAC0dpsUskOLkHFsHcfl0use2vZg Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Bootstrapped and tested on x86_64-linux with no regressions. I would like to quickly thank everyone who helped me for their patience as = I learned the ropes of the codebase and toolchain. It is much appretiated and= this would have been much much more difficult without the support. This patch handles the new explicit object member functions by bypassing special behavior of implicit object member functions, but opting back into = the special behavior during a function call through member access. This is mainly accom= plished by bypassing becoming a METHOD_TYPE and remaining as a FUNCTION_TYPE. Normally= , this would be treated as a static member function, but a new explicit object member fu= nction flag is added to lang_decl_base and is set for the declaration of explicit = object member functions. This sets it apart from static member functions when it i= s relevant, and is the criteria used to opt-in to passing the implicit object= argument during a member function call. The benefit of this design is less code need= s to be modified to support the new feature, as most of the semantics of explicit o= bject member functions matches those of static member functions. There is very little le= ft to add, and hopefully there are few bugs in the implementation despite the minimal changes. It is possible there are hidden problems with passing the implicit object argument, but none of the tests I made exhibit such a thing EXCEPT for in t= he pathological case as I describe below. Upon reflection, a by value explicit= object parameter might be broken as well, I can't recall if there's a good test fo= r that case. Lambdas do not work yet, but you can work around it by marking it as mutabl= e so I suspect it could be supported with minimal changes, I just ran out of = time. The other thing that does not work is the pathological case with an explici= t object parameter of an unrelated type and relying on a user-defined convers= ion operator to cast to said type in a call to that function. You can observe t= he failing test for that case in explicit-object-param-valid4.C, the result is somewha= t interesting, but is also why I mention that there might be hidden problems = here. I selectively excluded all the diagnostics from this patch, it's possible I made a mistake and the patch will be non-functional without the addition of= the diagnostics patch. If that ends up being the case, please apply the followi= ng patch that includes the diagnostics and tests and judge the functionality from that. I= believe that even if I mess up this patch, there should still be value in splitting= up the changes into the two patches as it should make the changes to the behavior = of the compiler much more clear. With that said, I believe I didn't make any mistakes while seperating the t= wo patches, hopefully that is the case. I left in a FIXME (in call.cc) as I noticed last minute that I made a mista= ke, it should be benign and removing it appears to not break anything, but I do= n't have time to do another bootstrap at the moment. My priority is to get eyes= on the changes I've made and recieve feedback. The patch including the diagnostics will follow shortly, assuming I don't r= un out of time and need to rush to catch my flight :). PS: Are there any circumstances where TREE_CODE is FUNCTION_DECL but the lang_specific member is null? I have a null check for that case in DECL_IS_= XOBJ_MEMBER_FUNC but I question if it's necessary.=20 --b1_6wvuz2BhgCJod6oAC0dpsUskOLkHFsHcfl0use2vZg Content-Type: text/x-patch; name=0001-P0847R7-deducing-this-Initial-support.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0001-P0847R7-deducing-this-Initial-support.patch RnJvbSBlNDg1YTc5ZWM1NjU2ZTcyYmE0NjA1MzYxODg0M2MzZDY5MzMxZWFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBXYWZmbDN4IDx3YWZmbDN4QHByb3Rvbm1haWwuY29tPgpEYXRl OiBUaHUsIDMxIEF1ZyAyMDIzIDAxOjA1OjI1IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gUDA4NDdS NyAoZGVkdWNpbmcgdGhpcykgSW5pdGlhbCBzdXBwb3J0CgpNb3N0IHRoaW5ncyBzaG91bGQgYmUg ZnVuY3Rpb25hbCwgbGFtYmRhcyBuZWVkIGEgbGl0dGxlIG1vcmUgd29yayB0aG91Z2guCkxpbWl0 YXRpb25zOiBNaXNzaW5nIHN1cHBvcnQgZm9yIGxhbWJkYXMsIGFuZCB1c2VyIGRlZmluZWQgY29u dmVyc2lvbiBmdW5jdGlvbnMgd2hlbiBwYXNzaW5nIHRoZSBpbXBsaWNpdCBvYmplY3QgYXJndW1l bnQgZG9lcyBub3Qgd29yayBwcm9wZXJseS4gU2VlIGV4cGxpY2l0LW9iamVjdC1wYXJhbS12YWxp ZDQuQyBmb3IgYW4gZXhhbXBsZSBvZiB0aGUgY3VycmVudCAoZXJyZW50KSBiZWhhdmlvci4KClRo ZXJlIGlzIGEgc2xpZ2h0IG1pc3Rha2UgaW4gY2FsbC5jYywgaXQgc2hvdWxkIGJlIGJlbmlnbi4K CmdjYy9jcC9DaGFuZ2VMb2c6CgoJKiBjYWxsLmNjIChhZGRfZnVuY3Rpb25fY2FuZGlkYXRlKTog KEhvcGVmdWxseSkgYmVuaWduIG1pc3Rha2UKCShhZGRfY2FuZGlkYXRlcyk6IFRyZWF0IGV4cGxp Y2l0IG9iamVjdCBtZW1iZXIgZnVuY3Rpb25zIGFzIG1lbWJlciBmdW5jdGlvbnMgd2hlbiBjb25z aWRlcmluZyBjYW5kaWRhdGVzCgkoYnVpbGRfb3Zlcl9jYWxsKTogRW5hYmxlIHBhc3NpbmcgYW4g aW1wbGljaXQgb2JqZWN0IGFyZ3VtZW50IHdoZW4gY2FsbGluZyBhbiBleHBsaWNpdCBvYmplY3Qg bWVtYmVyIGZ1bmN0aW9uCgkqIGNwLXRyZWUuaCAoc3RydWN0IGxhbmdfZGVjbF9iYXNlKTogQWRk ZWQgbWVtYmVyIHhvYmpfZmxhZyBmb3IgZGlmZmVyZW50aWF0aW5nIGV4cGxpY2l0IG9iamVjdCBt ZW1iZXIgZnVuY3Rpb25zIGZyb20gc3RhdGljIG1lbWJlciBmdW5jdGlvbnMKCShERUNMX0ZVTkNf WE9CSl9GTEFHKTogTmV3LCBjaGVja2VkIGFjY2VzcyBmb3IgeG9ial9mbGFnCgkoREVDTF9QQVJN X1hPQkpfRkxBRyk6IE5ldywgYWNjZXNzIGRlY2xfZmxhZ18zCgkoREVDTF9JU19YT0JKX01FTUJF Ul9GVU5DKTogTmV3LCBzYWZlbHkgY2hlY2sgaWYgYSBub2RlIGlzIGFuIGV4cGxpY2l0IG9iamVj dCBtZW1iZXIgZnVuY3Rpb24KCShlbnVtIGNwX2RlY2xfc3BlYyk6IFN1cHBvcnQgcGFyc2luZyAn dGhpcycgYXMgYSBkZWNsIHNwZWMsIGNoYW5nZSBpcyBtaXJyb3JlZCBpbiBwYXJzZXIuY2M6c2V0 X2FuZF9jaGVja19kZWNsX3NwZWNfbG9jCgkqIGRlY2wuY2MgKGdyb2tmbmRlY2wpOiBTZXRzIHRo ZSB4b2JqIGZsYWcgZm9yIHRoZSBGVU5DVElPTl9ERUNMIGlmIHRoZSBmaXJzdCBwYXJhbWV0ZXIg aXMgYW4gZXhwbGljaXQgb2JqZWN0IHBhcmFtZXRlcgoJKGdyb2tkZWNsYXJhdG9yKTogU2V0cyB0 aGUgeG9iaiBmbGFnIGZvciBQQVJNX0RFQ0wgaWYgJ3RoaXMnIHNwZWMgaXMgcHJlc2VudCBpbiBk ZWNsc3BlY3MsIGJ5cGFzc2VzIGNvbnZlcnNpb24gZnJvbSBGVU5DVElPTl9ERUNMIHRvIE1FVEhP RF9ERUNMIGlmIGFuIHhvYmogZmxhZyBpcyBzZXQgZm9yIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2Yg dGhlIGdpdmVuIGZ1bmN0aW9uIGRlY2xhcmF0b3IKCSogcGFyc2VyLmNjIChjcF9wYXJzZXJfZGVj bF9zcGVjaWZpZXJfc2VxKTogY2hlY2sgZm9yICd0aGlzJyBzcGVjaWZpZXIKCShzZXRfYW5kX2No ZWNrX2RlY2xfc3BlY19sb2MpOiBleHRlbmRlZCBkZWNsX3NwZWNfbmFtZXMgdG8gc3VwcG9ydCAn dGhpcycsIGNoYW5nZSBpcyBtaXJyb3JlZCBpbiBjcC10cmVlLmg6Y3BfZGVjbF9zcGVjCgpnY2Mv Q2hhbmdlTG9nOgoKCSogdHJlZS1jb3JlLmggKHN0cnVjdCB0cmVlX2RlY2xfY29tbW9uKTogQWRk ZWQgY29tbWVudCBkZXNjcmliaW5nIG5ldyB1c2Ugb2YgZGVjbF9mbGFnXzMKCmdjYy90ZXN0c3Vp dGUvQ2hhbmdlTG9nOgoKCSogZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iamVjdC1wYXJhbS12YWxp ZDEuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jcHAyMy9leHBsaWNpdC1vYmplY3QtcGFyYW0tdmFs aWQyLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqZWN0LXBhcmFtLXZh bGlkMy5DOiBOZXcgdGVzdC4KCSogZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iamVjdC1wYXJhbS12 YWxpZDQuQzogTmV3IHRlc3QuCgpTaWduZWQtb2ZmLWJ5OiBXYWZmbDN4IDx3YWZmbDN4QHByb3Rv bm1haWwuY29tPgotLS0KIGdjYy9jcC9jYWxsLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAxMyArLQogZ2NjL2NwL2NwLXRyZWUuaCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgIDIwICsrKy0KIGdjYy9jcC9kZWNsLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAyNSArKysrCiBnY2MvY3AvcGFyc2VyLmNjICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMTUgKystCiAuLi4vY3BwMjMvZXhwbGljaXQtb2JqZWN0LXBhcmFtLXZhbGlkMS5D ICAgICAgfCAxMTMgKysrKysrKysrKysrKysrKysrCiAuLi4vY3BwMjMvZXhwbGljaXQtb2JqZWN0 LXBhcmFtLXZhbGlkMi5DICAgICAgfCAgMjQgKysrKwogLi4uL2NwcDIzL2V4cGxpY2l0LW9iamVj dC1wYXJhbS12YWxpZDMuQyAgICAgIHwgIDE0ICsrKwogLi4uL2NwcDIzL2V4cGxpY2l0LW9iamVj dC1wYXJhbS12YWxpZDQuQyAgICAgIHwgIDMzICsrKysrCiBnY2MvdHJlZS1jb3JlLmggICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIDkgZmlsZXMgY2hhbmdlZCwgMjU0IGlu c2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqZWN0LXBhcmFtLXZhbGlkMS5DCiBjcmVhdGUg bW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqZWN0LXBh cmFtLXZhbGlkMi5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3Bw MjMvZXhwbGljaXQtb2JqZWN0LXBhcmFtLXZhbGlkMy5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqZWN0LXBhcmFtLXZhbGlkNC5DCgpk aWZmIC0tZ2l0IGEvZ2NjL2NwL2NhbGwuY2MgYi9nY2MvY3AvY2FsbC5jYwppbmRleCA2NzNlYzkx ZDYwZS4uYWM1ZTQxNGIwODQgMTAwNjQ0Ci0tLSBhL2djYy9jcC9jYWxsLmNjCisrKyBiL2djYy9j cC9jYWxsLmNjCkBAIC0yNTA5LDcgKzI1MDksMTIgQEAgYWRkX2Z1bmN0aW9uX2NhbmRpZGF0ZSAo c3RydWN0IHpfY2FuZGlkYXRlICoqY2FuZGlkYXRlcywKIAkgIHRyZWUgcGFybXR5cGUgPSBUUkVF X1ZBTFVFIChwYXJtbm9kZSk7CiAJICBpZiAoaSA9PSAwCiAJICAgICAgJiYgREVDTF9OT05TVEFU SUNfTUVNQkVSX0ZVTkNUSU9OX1AgKGZuKQotCSAgICAgICYmICFERUNMX0NPTlNUUlVDVE9SX1Ag KGZuKSkKKwkgICAgICAmJiAhREVDTF9DT05TVFJVQ1RPUl9QIChmbikKKwkgICAgICAvKiBGSVhN RTogVGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgbmVjY2VzYXJ5LCB1cG9uIHJldmlldyBJCisJCSBy ZWFsaXplZCB0aGF0IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSAoYW4geG9iaiBtZW1iZXIgZnVuYwor CQkgaXMgbm90IGEgbm9uc3RhdGljX21lbWJlcl9mdW5jdGlvbiwgc28gdGhpcyBjaGVjayB3aWxs CisJCSBuZXZlciBjaGFuZ2UgYW55dGhpbmcpICovCisJICAgICAgJiYgIURFQ0xfSVNfWE9CSl9N RU1CRVJfRlVOQyAoZm4pKQogCSAgICB0ID0gYnVpbGRfdGhpc19jb252ZXJzaW9uIChmbiwgY3R5 cGUsIHBhcm10eXBlLCBhcmd0eXBlLCBhcmcsCiAJCQkJICAgICAgIGZsYWdzLCBjb21wbGFpbik7 CiAJICBlbHNlCkBAIC02NTY2LDcgKzY1NzEsOCBAQCBhZGRfY2FuZGlkYXRlcyAodHJlZSBmbnMs IHRyZWUgZmlyc3RfYXJnLCBjb25zdCB2ZWM8dHJlZSwgdmFfZ2M+ICphcmdzLAogICAgICAgdHJl ZSBmbl9maXJzdF9hcmcgPSBOVUxMX1RSRUU7CiAgICAgICBjb25zdCB2ZWM8dHJlZSwgdmFfZ2M+ ICpmbl9hcmdzID0gYXJnczsKIAotICAgICAgaWYgKERFQ0xfTk9OU1RBVElDX01FTUJFUl9GVU5D VElPTl9QIChmbikpCisgICAgICBpZiAoREVDTF9OT05TVEFUSUNfTUVNQkVSX0ZVTkNUSU9OX1Ag KGZuKQorCSAgfHwgREVDTF9JU19YT0JKX01FTUJFUl9GVU5DIChmbikpCiAJewogCSAgLyogRmln dXJlIG91dCB3aGVyZSB0aGUgb2JqZWN0IGFyZyBjb21lcyBmcm9tLiAgSWYgdGhpcwogCSAgICAg ZnVuY3Rpb24gaXMgYSBub24tc3RhdGljIG1lbWJlciBhbmQgd2UgZGlkbid0IGdldCBhbgpAQCAt OTk5NSw3ICsxMDAwMSw4IEBAIGJ1aWxkX292ZXJfY2FsbCAoc3RydWN0IHpfY2FuZGlkYXRlICpj YW5kLCBpbnQgZmxhZ3MsIHRzdWJzdF9mbGFnc190IGNvbXBsYWluKQogCX0KICAgICB9CiAgIC8q IEJ5cGFzcyBhY2Nlc3MgY29udHJvbCBmb3IgJ3RoaXMnIHBhcmFtZXRlci4gICovCi0gIGVsc2Ug aWYgKFRSRUVfQ09ERSAoVFJFRV9UWVBFIChmbikpID09IE1FVEhPRF9UWVBFKQorICBlbHNlIGlm IChUUkVFX0NPREUgKFRSRUVfVFlQRSAoZm4pKSA9PSBNRVRIT0RfVFlQRQorCSAgIHx8IERFQ0xf SVNfWE9CSl9NRU1CRVJfRlVOQyAoZm4pICkKICAgICB7CiAgICAgICB0cmVlIGFyZyA9IGJ1aWxk X3RoaXMgKGZpcnN0X2FyZyAhPSBOVUxMX1RSRUUKIAkJCSAgICAgPyBmaXJzdF9hcmcKZGlmZiAt LWdpdCBhL2djYy9jcC9jcC10cmVlLmggYi9nY2MvY3AvY3AtdHJlZS5oCmluZGV4IGViOTAxNjgz YjZkLi4zYWNhMjNkYTEwNSAxMDA2NDQKLS0tIGEvZ2NjL2NwL2NwLXRyZWUuaAorKysgYi9nY2Mv Y3AvY3AtdHJlZS5oCkBAIC0yODc4LDcgKzI4NzgsOSBAQCBzdHJ1Y3QgR1RZKCgpKSBsYW5nX2Rl Y2xfYmFzZSB7CiAgIC8qIFZBUl9ERUNMIG9yIEZVTkNUSU9OX0RFQ0wgaGFzIGtleWVkIGRlY2xz LiAgICAgKi8KICAgdW5zaWduZWQgbW9kdWxlX2tleWVkX2RlY2xzX3AgOiAxOwogCi0gIC8qIDEy IHNwYXJlIGJpdHMuICAqLworICAvKiBGVU5DVElPTl9ERUNMIGV4cGxpY2l0IG9iamVjdCBtZW1i ZXIgZnVuY3Rpb24gZmxhZyAqLworICB1bnNpZ25lZCB4b2JqX2ZsYWcgOiAxOworICAvKiAxMSBz cGFyZSBiaXRzLiAgKi8KIH07CiAKIC8qIFRydWUgZm9yIERFQ0wgY29kZXMgd2hpY2ggaGF2ZSB0 ZW1wbGF0ZSBpbmZvIGFuZCBhY2Nlc3MuICAqLwpAQCAtMzA4Niw2ICszMDg4LDIxIEBAIHN0cnVj dCBHVFkoKCkpIGxhbmdfZGVjbCB7CiAKICNlbmRpZiAvKiBFTkFCTEVfVFJFRV9DSEVDS0lORyAq LwogCisvKiB0aGVzZSBuZWVkIHRvIG1vdmVkIHRvIHNvbWV3aGVyZSBhcHByb3ByaWF0ZSAqLwor CisvKiB0aGUgZmxhZyBpcyBhIG1lbWJlciBvZiBiYXNlLCBidXQgdGhlIHZhbHVlIGlzIG1lYW5p bmdsZXNzIGZvciBvdGhlcgorICAgZGVjbCB0eXBlcyBzbyBjaGVja2luZyBpcyBzdGlsbCBqdXN0 aWZpZWQgSSBpbWFnaW5lICovCisjZGVmaW5lIERFQ0xfRlVOQ19YT0JKX0ZMQUcoTk9ERSkgXAor ICAoTEFOR19ERUNMX0ZOX0NIRUNLIChOT0RFKS0+bWluLmJhc2UueG9ial9mbGFnKQorLyogbm90 IGEgbGFuZ19kZWNsIGZpZWxkLCBidXQgc3RpbGwgc3BlY2lmaWMgdG8gYysrICovCisjZGVmaW5l IERFQ0xfUEFSTV9YT0JKX0ZMQUcoTk9ERSkgXAorICAoUEFSTV9ERUNMX0NIRUNLIChOT0RFKS0+ ZGVjbF9jb21tb24uZGVjbF9mbGFnXzMpCisvKiBldmFsdWF0ZXMgZmFsc2UgZm9yIG5vbiBmdW5j IG5vZGVzIGFuZCBub2RlcyB3aXRoIGEgbnVsbCBsYW5nX2RlY2wgbWVtYmVyICovCisjZGVmaW5l IERFQ0xfSVNfWE9CSl9NRU1CRVJfRlVOQyhOT0RFKSAJCQkJCSBcCisgIChUUkVFX0NPREUgKFNU UklQX1RFTVBMQVRFIChOT0RFKSkgPT0gRlVOQ1RJT05fREVDTAkJCSBcCisgICAmJiBERUNMX0xB TkdfU1BFQ0lGSUMgKFNUUklQX1RFTVBMQVRFIChOT0RFKSkJCQkgXAorICAgJiYgREVDTF9MQU5H X1NQRUNJRklDIChTVFJJUF9URU1QTEFURSAoTk9ERSkpLT51LmJhc2UueG9ial9mbGFnID09IDEp IFwKKwogLyogRm9yIGEgRlVOQ1RJT05fREVDTCBvciBhIFZBUl9ERUNMLCB0aGUgbGFuZ3VhZ2Ug bGlua2FnZSBmb3IgdGhlCiAgICBkZWNsYXJhdGlvbi4gIFNvbWUgZW50aXRpZXMgKGxpa2UgYSBt ZW1iZXIgZnVuY3Rpb24gaW4gYSBsb2NhbAogICAgY2xhc3MsIG9yIGEgbG9jYWwgdmFyaWFibGUp IGRvIG5vdCBoYXZlIGxpbmthZ2UgYXQgYWxsLCBhbmQgdGhpcwpAQCAtNjI3NSw2ICs2MjkyLDcg QEAgZW51bSBjcF9kZWNsX3NwZWMgewogICBkc19jb21wbGV4LAogICBkc19jb25zdGluaXQsCiAg IGRzX2NvbnN0ZXZhbCwKKyAgZHNfdGhpcywgLyogaW5zZXJ0aW5nIGhlcmUgdG8gbWF0Y2ggZGVj bF9zcGVjX25hbWVzIGluIHBhcnNlci5jYyovCiAgIGRzX3RocmVhZCwKICAgZHNfdHlwZV9zcGVj LAogICBkc19yZWRlZmluZWRfYnVpbHRpbl90eXBlX3NwZWMsCmRpZmYgLS1naXQgYS9nY2MvY3Av ZGVjbC5jYyBiL2djYy9jcC9kZWNsLmNjCmluZGV4IGJlYTBlZTkyMTA2Li5hNmQwY2ZiMGVjYyAx MDA2NDQKLS0tIGEvZ2NjL2NwL2RlY2wuY2MKKysrIGIvZ2NjL2NwL2RlY2wuY2MKQEAgLTEwMzE0 LDYgKzEwMzE0LDkgQEAgZ3Jva2ZuZGVjbCAodHJlZSBjdHlwZSwKICAgdHlwZSA9IGJ1aWxkX2Nw X2ZudHlwZV92YXJpYW50ICh0eXBlLCBycXVhbCwgcmFpc2VzLCBsYXRlX3JldHVybl90eXBlX3Ap OwogCiAgIGRlY2wgPSBidWlsZF9sYW5nX2RlY2xfbG9jIChsb2NhdGlvbiwgRlVOQ1RJT05fREVD TCwgZGVjbGFyYXRvciwgdHlwZSk7CisgIC8qIGFsbCBlcnJvciBjaGVja2luZyBoYXMgYmVlbiBk b25lIGJ5IG5vdywganVzdCBjb3B5IHRoZSBmbGFnIG92ZXIKKyAgICAgcGFybXMgaXMgbnVsbCAo YXBwZWFycyB0byBiZSBhbnl3YXkpIGZvciAwIHBhcm0gZnVuY3Rpb25zICovCisgIERFQ0xfRlVO Q19YT0JKX0ZMQUcgKGRlY2wpID0gcGFybXMgPyBERUNMX1BBUk1fWE9CSl9GTEFHIChwYXJtcykg OiBmYWxzZTsKIAogICAvKiBTZXQgdGhlIGNvbnN0cmFpbnRzIG9uIHRoZSBkZWNsYXJhdGlvbi4g Ki8KICAgaWYgKGZsYWdfY29uY2VwdHMpCkBAIC0xMjk2Niw2ICsxMjk2OSwxOSBAQCBncm9rZGVj bGFyYXRvciAoY29uc3QgY3BfZGVjbGFyYXRvciAqZGVjbGFyYXRvciwKICAgaWYgKGF0dHJsaXN0 KQogICAgIGRpYWdub3NlX21pc2FwcGxpZWRfY29udHJhY3RzICgqYXR0cmxpc3QpOwogCisgIC8q IE9ubHkgdXNlZCBmb3Igc2tpcHBpbmcgb3ZlciBidWlsZF9tZW1mbl90eXBlLCBncm9rZm5kZWNs IGhhbmRsZXMKKyAgICAgY29weWluZyB0aGUgZmxhZyB0byB0aGUgY29ycmVjdCBmaWVsZCBmb3Ig YSBmdW5jX2RlY2wuCisgICAgIEkgd2lzaCB0aGVyZSB3YXMgYSBiZXR0ZXIgd2F5IHRvIGRvIHRo aXMsIGJ1dCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgKi8KKyAgYm9vbCBpc194b2JqX21lbWJl cl9mdW5jdGlvbiA9IGZhbHNlOworICBhdXRvIGdldF94b2JqX3Bhcm0gPSBbXSh0cmVlIHBhcm1f bGlzdCkKKyAgICB7CisgICAgICBpZiAoIXBhcm1fbGlzdCkKKwlyZXR1cm4gTlVMTF9UUkVFOwor ICAgICAgdHJlZSBmaXJzdF9wYXJtID0gVFJFRV9WQUxVRSAocGFybV9saXN0KTsKKyAgICAgIGlm IChmaXJzdF9wYXJtID09IHZvaWRfdHlwZV9ub2RlKQorCXJldHVybiBOVUxMX1RSRUU7CisgICAg ICByZXR1cm4gREVDTF9QQVJNX1hPQkpfRkxBRyAoZmlyc3RfcGFybSkgPT0gMSA/IGZpcnN0X3Bh cm0gOiBOVUxMX1RSRUU7CisgICAgfTsKICAgLyogRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHRoZSBl bnRpdHkgZGVjbGFyZWQgYnkgcmVjdXJyaW5nIG9uIHRoZQogICAgICBkZWNsYXJhdG9yLiAgKi8K ICAgZm9yICg7IGRlY2xhcmF0b3I7IGRlY2xhcmF0b3IgPSBkZWNsYXJhdG9yLT5kZWNsYXJhdG9y KQpAQCAtMTMwNjEsNiArMTMwNzcsOSBAQCBncm9rZGVjbGFyYXRvciAoY29uc3QgY3BfZGVjbGFy YXRvciAqZGVjbGFyYXRvciwKIAogCWNhc2UgY2RrX2Z1bmN0aW9uOgogCSAgeworCSAgICB0cmVl IHhvYmpfcGFybQorCSAgICAgID0gZ2V0X3hvYmpfcGFybSAoZGVjbGFyYXRvci0+dS5mdW5jdGlv bi5wYXJhbWV0ZXJzKTsKKwkgICAgaXNfeG9ial9tZW1iZXJfZnVuY3Rpb24gPSB4b2JqX3Bhcm07 CiAJICAgIHRyZWUgYXJnX3R5cGVzOwogCSAgICBpbnQgZnVuY2RlY2xfcDsKIApAQCAtMTQxNDUs NiArMTQxNjQsOCBAQCBncm9rZGVjbGFyYXRvciAoY29uc3QgY3BfZGVjbGFyYXRvciAqZGVjbGFy YXRvciwKICAgICB9CiAKICAgaWYgKGN0eXBlICYmIFRSRUVfQ09ERSAodHlwZSkgPT0gRlVOQ1RJ T05fVFlQRSAmJiBzdGF0aWNwIDwgMgorICAgICAgLyogYnlwYXNzIGNvbnZlcnNpb24gdG8gTUVU SE9EX1RZUEUgaWYgYW4geG9iaiBwYXJtIGlzIHByZXNlbnQgKi8KKyAgICAgICYmICFpc194b2Jq X21lbWJlcl9mdW5jdGlvbgogICAgICAgJiYgISh1bnF1YWxpZmllZF9pZAogCSAgICYmIGlkZW50 aWZpZXJfcCAodW5xdWFsaWZpZWRfaWQpCiAJICAgJiYgSURFTlRJRklFUl9ORVdERUxfT1BfUCAo dW5xdWFsaWZpZWRfaWQpKSkKQEAgLTE0MTYzLDYgKzE0MTg0LDEwIEBAIGdyb2tkZWNsYXJhdG9y IChjb25zdCBjcF9kZWNsYXJhdG9yICpkZWNsYXJhdG9yLAogICAgICAgewogCWRlY2wgPSBjcF9i dWlsZF9wYXJtX2RlY2wgKE5VTExfVFJFRSwgdW5xdWFsaWZpZWRfaWQsIHR5cGUpOwogCURFQ0xf QVJSQVlfUEFSQU1FVEVSX1AgKGRlY2wpID0gYXJyYXlfcGFyYW1ldGVyX3A7CisJLyogU2V0IHRo ZSB4b2JqIGZsYWcgZm9yIHRoaXMgcGFybSwgdW5mb3J0dW5hdGVseQorCSAgIEkgZG9uJ3QgdGhp bmsgdGhlcmUgaXMgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgKi8KKwlERUNMX1BBUk1fWE9CSl9G TEFHIChkZWNsKQorCSAgPSBkZWNsX3NwZWNfc2VxX2hhc19zcGVjX3AgKGRlY2xzcGVjcywgZHNf dGhpcyk7CiAKIAliYWRfc3BlY2lmaWVycyAoZGVjbCwgQlNQX1BBUk0sIHZpcnR1YWxwLAogCQkJ bWVtZm5fcXVhbHMgIT0gVFlQRV9VTlFVQUxJRklFRCwKZGlmZiAtLWdpdCBhL2djYy9jcC9wYXJz ZXIuY2MgYi9nY2MvY3AvcGFyc2VyLmNjCmluZGV4IGVlYjIyZTQ0ZmI0Li5lZDVkY2JkZTNlZCAx MDA2NDQKLS0tIGEvZ2NjL2NwL3BhcnNlci5jYworKysgYi9nY2MvY3AvcGFyc2VyLmNjCkBAIC0x NTg3NSw2ICsxNTg3NSwxOCBAQCBjcF9wYXJzZXJfZGVjbF9zcGVjaWZpZXJfc2VxIChjcF9wYXJz ZXIqIHBhcnNlciwKIAkgICAgZGVjbF9zcGVjcy0+bG9jYXRpb25zW2RzX2F0dHJpYnV0ZV0gPSB0 b2tlbi0+bG9jYXRpb247CiAJICBjb250aW51ZTsKIAl9CisgICAgICAvKiBTcGVjaWFsIGNhc2Ug Zm9yIHhvYmogcGFybSwgZG9lc24ndCByZWFsbHkgYmVsb25nIHVwIGhlcmUKKwkgKGl0IGFwcGxp ZXMgdG8gcGFybSBkZWNscyBhbmQgdGhvc2UgYXJlIG1vc3RseSBoYW5kbGVkIGJlbG93CisJIHRo ZSBmb2xsb3dpbmcgc3BlY2lmaWVycykgYnV0IEkgaW50ZW5kIHRvIHJlZmFjdG9yIHRoaXMgZnVu Y3Rpb24KKwkgc28gSSdtIG5vdCB3b3JyeWluZyBhYm91dCBpdCB0b28gbXVjaC4KKwkgVGhlIGVy cm9yIGRpYWdub3N0aWNzIG1pZ2h0IGJlIGJldHRlciBlbHNld2hlcmUgdGhvdWdoLiAqLworICAg ICAgaWYgKHRva2VuLT5rZXl3b3JkID09IFJJRF9USElTKQorCXsKKwkgIGNwX2xleGVyX2NvbnN1 bWVfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOworCSAgc2V0X2FuZF9jaGVja19kZWNsX3NwZWNfbG9j IChkZWNsX3NwZWNzLCBkc190aGlzLCB0b2tlbik7CisJICBjb250aW51ZTsKKwl9CisKICAgICAg IC8qIEFzc3VtZSB3ZSB3aWxsIGZpbmQgYSBkZWNsLXNwZWNpZmllciBrZXl3b3JkLiAgKi8KICAg ICAgIGZvdW5kX2RlY2xfc3BlYyA9IHRydWU7CiAgICAgICAvKiBJZiB0aGUgbmV4dCB0b2tlbiBp cyBhbiBhcHByb3ByaWF0ZSBrZXl3b3JkLCB3ZSBjYW4gc2ltcGx5CkBAIC0zMzYyNCw3ICszMzYz Niw4IEBAIHNldF9hbmRfY2hlY2tfZGVjbF9zcGVjX2xvYyAoY3BfZGVjbF9zcGVjaWZpZXJfc2Vx ICpkZWNsX3NwZWNzLAogCSAgICAiY29uc3RleHByIiwKIAkgICAgIl9fY29tcGxleCIsCiAJICAg ICJjb25zdGluaXQiLAotCSAgICAiY29uc3RldmFsIgorCSAgICAiY29uc3RldmFsIiwKKwkgICAg InRoaXMiCiAJICB9OwogCSAgZ2NjX3JpY2hfbG9jYXRpb24gcmljaGxvYyAobG9jYXRpb24pOwog CSAgcmljaGxvYy5hZGRfZml4aXRfcmVtb3ZlICgpOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqZWN0LXBhcmFtLXZhbGlkMS5DIGIvZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqZWN0LXBhcmFtLXZhbGlkMS5DCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMjIzMGNmYzNkNQotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iamVjdC1wYXJhbS12 YWxpZDEuQwpAQCAtMCwwICsxLDExMyBAQAorLy8gUDA4NDdSNworLy8geyBkZy1kbyBjb21waWxl IHsgdGFyZ2V0IGMrKzIzIH0gfQorCisvLyBiYXNpYyB1c2UgY2FzZXMgYW5kIGNhbGxpbmcKKwor Ly8gbm9uLXRyYWlsaW5nIHJldHVybgorLy8gZGVmaW5pdGlvbnMKK3N0cnVjdCBTMCB7CisgIHZv aWQgZjAodGhpcyBTMCkge30KKyAgdm9pZCBmMSh0aGlzIFMwJikge30KKyAgdm9pZCBmMih0aGlz IFMwJiYpIHt9CisgIHZvaWQgZjModGhpcyBTMCBjb25zdCYpIHt9CisgIHZvaWQgZjQodGhpcyBT MCBjb25zdCYmKSB7fQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBTZWxmPgorICB2b2lkIGQwKHRoaXMg U2VsZiYmKSB7fQorICB2b2lkIGQxKHRoaXMgYXV0byYmKSB7fQorfTsKKy8vIGRlY2xhcmF0aW9u cworc3RydWN0IFMxIHsKKyAgdm9pZCBmMCh0aGlzIFMxKTsKKyAgdm9pZCBmMSh0aGlzIFMxJik7 CisgIHZvaWQgZjIodGhpcyBTMSYmKTsKKyAgdm9pZCBmMyh0aGlzIFMxIGNvbnN0Jik7CisgIHZv aWQgZjQodGhpcyBTMSBjb25zdCYmKTsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2VsZj4KKyAgdm9p ZCBkMCh0aGlzIFNlbGYmJik7CisgIHZvaWQgZDEodGhpcyBhdXRvJiYpOworfTsKKy8vIG91dCBv ZiBsaW5lIGRlZmluaXRpb25zCit2b2lkIFMxOjpmMCh0aGlzIFMxKSB7fQordm9pZCBTMTo6ZjEo dGhpcyBTMSYpIHt9Cit2b2lkIFMxOjpmMih0aGlzIFMxJiYpIHt9Cit2b2lkIFMxOjpmMyh0aGlz IFMxIGNvbnN0Jikge30KK3ZvaWQgUzE6OmY0KHRoaXMgUzEgY29uc3QmJikge30KK3RlbXBsYXRl PHR5cGVuYW1lIFNlbGY+Cit2b2lkIFMxOjpkMCh0aGlzIFNlbGYmJikge30KK3ZvaWQgUzE6OmQx KHRoaXMgYXV0byYmKSB7fQorCisvLyB0cmFpbGluZyByZXR1cm4KKy8vIGRlZmluaXRpb25zCitz dHJ1Y3QgUzIgeworICBhdXRvIGYwKHRoaXMgUzIpIC0+IHZvaWQge30KKyAgYXV0byBmMSh0aGlz IFMyJikgLT4gdm9pZCB7fQorICBhdXRvIGYyKHRoaXMgUzImJikgLT4gdm9pZCB7fQorICBhdXRv IGYzKHRoaXMgUzIgY29uc3QmKSAtPiB2b2lkIHt9CisgIGF1dG8gZjQodGhpcyBTMiBjb25zdCYm KSAtPiB2b2lkIHt9CisgIHRlbXBsYXRlPHR5cGVuYW1lIFNlbGY+CisgIGF1dG8gZDAodGhpcyBT ZWxmJiYpIC0+IHZvaWQge30KKworICBhdXRvIGQxKHRoaXMgYXV0byYmKSAtPiB2b2lkIHt9Cit9 OworLy8gZGVjbGFyYXRpb25zCitzdHJ1Y3QgUzMgeworICBhdXRvIGYwKHRoaXMgUzMpIC0+IHZv aWQ7CisgIGF1dG8gZjEodGhpcyBTMyYpIC0+IHZvaWQ7CisgIGF1dG8gZjIodGhpcyBTMyYmKSAt PiB2b2lkOworICBhdXRvIGYzKHRoaXMgUzMgY29uc3QmKSAtPiB2b2lkOworICBhdXRvIGY0KHRo aXMgUzMgY29uc3QmJikgLT4gdm9pZDsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2VsZj4KKyAgYXV0 byBkMCh0aGlzIFNlbGYmJikgLT4gdm9pZDsKKyAgYXV0byBkMSh0aGlzIGF1dG8mJikgLT4gdm9p ZDsKK307CisvLyBvdXQgb2YgbGluZSBkZWZpbml0aW9ucworYXV0byBTMzo6ZjAodGhpcyBTMykg LT4gdm9pZCB7fQorYXV0byBTMzo6ZjEodGhpcyBTMyYpIC0+IHZvaWQge30KK2F1dG8gUzM6OmYy KHRoaXMgUzMmJikgLT4gdm9pZCB7fQorYXV0byBTMzo6ZjModGhpcyBTMyBjb25zdCYpIC0+IHZv aWQge30KK2F1dG8gUzM6OmY0KHRoaXMgUzMgY29uc3QmJikgLT4gdm9pZCB7fQordGVtcGxhdGU8 dHlwZW5hbWUgU2VsZj4KK2F1dG8gUzM6OmQwKHRoaXMgU2VsZiYmKSAtPiB2b2lkIHt9CithdXRv IFMzOjpkMSh0aGlzIGF1dG8mJikgLT4gdm9pZCB7fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor dm9pZCBjYWxsX3dpdGhfcXVhbGlmaWNhdGlvbigpCit7CisgIFQgb2Jqe307CisgIC8vIGJ5IHZh bHVlIHNob3VsZCB0YWtlIGFueSBxdWFsaWZpY2F0aW9uIChmMCkKKyAgVHt9LmYwKCk7CisgIG9i ai5mMCgpOworICBzdGF0aWNfY2FzdDxUJiY+KG9iaikuZjAoKTsgCisgIHN0YXRpY19jYXN0PFQg Y29uc3QmPihvYmopLmYwKCk7CisgIHN0YXRpY19jYXN0PFQgY29uc3QmJj4ob2JqKS5mMCgpOwor ICAvLyBzcGVjaWZpYyBxdWFsaWZpY2F0aW9uIChmMSAtIGY0KQorICBUe30uZjIoKTsKKyAgVHt9 LmYzKCk7CisgIFR7fS5mNCgpOworICBvYmouZjEoKTsKKyAgb2JqLmYzKCk7CisgIHN0YXRpY19j YXN0PFQmJj4ob2JqKS5mMigpOworICBzdGF0aWNfY2FzdDxUJiY+KG9iaikuZjMoKTsKKyAgc3Rh dGljX2Nhc3Q8VCYmPihvYmopLmY0KCk7CisgIHN0YXRpY19jYXN0PFQgY29uc3QmPihvYmopLmYz KCk7CisgIHN0YXRpY19jYXN0PFQgY29uc3QmJj4ob2JqKS5mNCgpOworICAvLyBkZWR1Y2VkIHNo b3VsZCAob2J2aW91c2x5KSB0YWtlIGFueSBxdWFsaWZpY2F0aW9uIChkMCwgZDEpCisgIFR7fS5k MCgpOworICBvYmouZDAoKTsKKyAgc3RhdGljX2Nhc3Q8VCYmPihvYmopLmQwKCk7CisgIHN0YXRp Y19jYXN0PFQgY29uc3QmPihvYmopLmQwKCk7CisgIHN0YXRpY19jYXN0PFQgY29uc3QmJj4ob2Jq KS5kMCgpOworICBUe30uZDEoKTsKKyAgb2JqLmQxKCk7CisgIHN0YXRpY19jYXN0PFQmJj4ob2Jq KS5kMSgpOworICBzdGF0aWNfY2FzdDxUIGNvbnN0Jj4ob2JqKS5kMSgpOworICBzdGF0aWNfY2Fz dDxUIGNvbnN0JiY+KG9iaikuZDEoKTsKK30KKwordm9pZCBwZXJmb3JtX2NhbGxzKCkKK3sKKyAg Y2FsbF93aXRoX3F1YWxpZmljYXRpb248UzA+KCk7CisgIGNhbGxfd2l0aF9xdWFsaWZpY2F0aW9u PFMxPigpOworICBjYWxsX3dpdGhfcXVhbGlmaWNhdGlvbjxTMj4oKTsKKyAgY2FsbF93aXRoX3F1 YWxpZmljYXRpb248UzM+KCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqZWN0LXBhcmFtLXZh bGlkMi5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqZWN0LXBhcmFt LXZhbGlkMi5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yZjlhMDgy MDdkNAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxp Y2l0LW9iamVjdC1wYXJhbS12YWxpZDIuQwpAQCAtMCwwICsxLDI0IEBACisvLyBQMDg0N1I3Cisv LyB7IGRnLWRvIHJ1biB7IHRhcmdldCBjKysyMyB9IH0KKworLy8gZXhwbGljaXQgb2JqZWN0IG1l bWJlciBmdW5jdGlvbiBwb2ludGVyIHR5cGUgZGVkdWN0aW9uIGFuZCBjb252ZXJzaW9uIHRvIGZ1 bmN0aW9uIHBvaW50ZXIKKy8vIGFuZCBjYWxsaW5nIHRocm91Z2ggcG9pbnRlciB0byBmdW5jdGlv bgorCitzdHJ1Y3QgUyB7CisgIGludCBfbjsKKyAgaW50IGYodGhpcyBTJiBzZWxmKSB7IHJldHVy biBzZWxmLl9uOyB9Cit9OworCit1c2luZyBmX3R5cGUgPSBpbnQoKikoUyYpOworCitzdGF0aWNf YXNzZXJ0KF9faXNfc2FtZShmX3R5cGUsIGRlY2x0eXBlKCZTOjpmKSkpOworCitpbnQgbWFpbigp Cit7CisgIGF1dG8gZnAwID0gJlM6OmY7CisgIGZfdHlwZSBmcDEgPSAmUzo6ZjsKKyAgc3RhdGlj X2Fzc2VydChfX2lzX3NhbWUoZGVjbHR5cGUoZnAwKSwgZGVjbHR5cGUoZnAxKSkpOworICBTIHN7 NDJ9OworICAvLyB7IGRnLW91dHB1dCAiNDIiIH0KKyAgX19idWlsdGluX3ByaW50ZigiJWRcbiVk XG4iLCBmcDAocyksIGZwMShzKSk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqZWN0LXBhcmFt LXZhbGlkMy5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqZWN0LXBh cmFtLXZhbGlkMy5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYjJi YzQ1OGRmOAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4 cGxpY2l0LW9iamVjdC1wYXJhbS12YWxpZDMuQwpAQCAtMCwwICsxLDE0IEBACisvLyBQMDg0N1I3 CisvLyB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgYysrMjMgfSB9CisKKy8vIHJlY3Vyc2l2ZSBs YW1iZGFzCisKKy8vIHsgZGctZXhjZXNzLWVycm9ycyAiZGVkdWNpbmcgdGhpcyB3aXRoIGxhbWJk YXMgbm90IGltcGxlbWVudGVkIHlldCIgeyB4ZmFpbCAqLSotKiB9IH0KKworaW50IG1haW4oKQor eworICBhdXRvIGNsMCA9IFtdKHRoaXMgYXV0byYmIHNlbGYsIGludCBuKXsgcmV0dXJuIG4gPyBz ZWxmKG4gLSAxKSA6IDQyIH07CisgIGF1dG8gY2wxID0gW10odGhpcyBhdXRvIHNlbGYsIGludCBu KXsgcmV0dXJuIG4gPyBzZWxmKG4gLSAxKSA6IDQyfTsKKyAgaW50IGEgPSBjbDAoNSk7CisgIGlu dCBiID0gY2wxKDUpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iamVjdC1wYXJhbS12YWxpZDQu QyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iamVjdC1wYXJhbS12YWxp ZDQuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMWU5YWRlNjJhNTEK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9leHBsaWNpdC1v YmplY3QtcGFyYW0tdmFsaWQ0LkMKQEAgLTAsMCArMSwzMyBAQAorLy8gUDA4NDdSNworLy8geyBk Zy1kbyBydW4geyB0YXJnZXQgYysrMjMgfSB9CisKKy8vIHRlc3QgaW1wbGljaXQgY29udmVyc2lv biBvZiB0aGUgb2JqZWN0IGFyZ3VtZW50CisvLyB0byB0aGUgZXhwbGljaXQgb2JqZWN0IHBhcmFt ZXRlcgorCisvLyB3ZSBjb21wYXJlICZzIHRvIHJldCBiZWNhdXNlIGVhcmx5IG9uLCB0aGUKKy8v IG9iamVjdCBwYXJhbWV0ZXIgd291bGQgbm90IGNvbnZlcnQsIGl0IHdvdWxkIGp1c3QgZ2V0Cisv LyByZWludGVycHJldGVkIGFzIHRoZSB0eXBlIG9mIHRoZSBleHBsaWNpdCBvYmplY3QgcGFyYW0K KworLy8geyBkZy1vdXRwdXQgInJldCAhPSAmcyA6IDEiIHsgeGZhaWwgKi0qLSogfSB9CisvLyB7 IGRnLW91dHB1dCAicmV0ID09IDQyIDogMSIgeyB4ZmFpbCAqLSotKiB9IH0KKwordXNpbmcgdWlu dHB0cl90ID0gX19VSU5UUFRSX1RZUEVfXzsKKworc3RydWN0IFMgeworICAgIG9wZXJhdG9yIHVp bnRwdHJfdCgpIGNvbnN0IHsKKwlyZXR1cm4gNDI7CisgICAgfQorICAgIHVpbnRwdHJfdCBmKHRo aXMgdWludHB0cl90IG4pIHsKKyAgICAgICAgcmV0dXJuIG47CisgICAgfQorfTsKKworaW50IG1h aW4oKSAKK3sKKyAgICBTIHN7fTsKKyAgICB1aW50cHRyX3QgcmV0ID0gcy5mKCk7CisgICAgX19i dWlsdGluX3ByaW50ZigicmV0ICE9ICZzIDogJWRcbiIKKwkJICAgICAicmV0ID09IDQyIDogJWRc biIsCisJCSAgICAgcmV0ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PigmcykgPyAxIDog MCwKKwkJICAgICByZXQgPT0gNDIgPyAxIDogMCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg ZmlsZQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtY29yZS5oIGIvZ2NjL3RyZWUtY29yZS5oCmluZGV4 IDkxNTUxZmRlOTAwLi5lNDM0YmQ3YzlhYyAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtY29yZS5oCisr KyBiL2djYy90cmVlLWNvcmUuaApAQCAtMTgwOCw3ICsxODA4LDggQEAgc3RydWN0IEdUWSgoKSkg dHJlZV9kZWNsX2NvbW1vbiB7CiAgICAgIERFQ0xfSEFTX1ZBTFVFX0VYUFJfUC4gICovCiAgIHVu c2lnbmVkIGRlY2xfZmxhZ18yIDogMTsKICAgLyogSW4gRklFTERfREVDTCwgdGhpcyBpcyBERUNM X1BBRERJTkdfUC4KLSAgICAgSW4gVkFSX0RFQ0wsIHRoaXMgaXMgREVDTF9NRVJHRUFCTEUuICAq LworICAgICBJbiBWQVJfREVDTCwgdGhpcyBpcyBERUNMX01FUkdFQUJMRS4KKyAgICAgSW4gUEFS TV9ERUNMLCB0aGlzIGlzIERFQ0xfWE9CSl9QQVJNLiAqLwogICB1bnNpZ25lZCBkZWNsX2ZsYWdf MyA6IDE7CiAgIC8qIExvZ2ljYWxseSwgdGhlc2UgdHdvIHdvdWxkIGdvIGluIGEgdGhlb3JldGlj YWwgYmFzZSBzaGFyZWQgYnkgdmFyIGFuZAogICAgICBwYXJtIGRlY2wuICovCi0tIAoyLjQxLjAK Cg== --b1_6wvuz2BhgCJod6oAC0dpsUskOLkHFsHcfl0use2vZg--