From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15593 invoked by alias); 29 Jul 2014 17:36:38 -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 15583 invoked by uid 89); 29 Jul 2014 17:36:38 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.4 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mail2-relais-roc.national.inria.fr Received: from mail2-relais-roc.national.inria.fr (HELO mail2-relais-roc.national.inria.fr) (192.134.164.83) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (CAMELLIA256-SHA encrypted) ESMTPS; Tue, 29 Jul 2014 17:36:34 +0000 Received: from stedding.saclay.inria.fr ([193.55.250.194]) by mail2-relais-roc.national.inria.fr with ESMTP/TLS/AES128-SHA; 29 Jul 2014 19:36:31 +0200 Received: from glisse (helo=localhost) by stedding.saclay.inria.fr with local-esmtp (Exim 4.82_1-5b7a7c0-XX) (envelope-from ) id 1XCBKB-0005zl-AV; Tue, 29 Jul 2014 19:36:31 +0200 Date: Tue, 29 Jul 2014 19:00:00 -0000 From: Marc Glisse To: Richard Sandiford cc: gcc-patches@gcc.gnu.org Subject: Re: Warn when returning the address of a temporary (middle-end) v2 In-Reply-To: <87fvhmllc5.fsf@talisman.default> Message-ID: References: <87fvhmllc5.fsf@talisman.default> User-Agent: Alpine 2.02 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-188578144-1406655391=:23005" X-SW-Source: 2014-07/txt/msg02002.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-188578144-1406655391=:23005 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII Content-length: 1825 On Sun, 27 Jul 2014, Richard Sandiford wrote: > Marc Glisse writes: >> Hello, >> >> I followed the advice in this discussion: >> https://gcc.gnu.org/ml/gcc-patches/2014-04/msg00269.html >> >> and here is a new patch. I made an effort to isolate a path in at least >> one subcase so it doesn't look too strange that the warning is in this >> file. Computing the dominance info just to tweak the warning message may >> be a bit excessive. > > How about only calculating it once you've decided to issue a message? > >> + if (always_executed) >> + msg = "function returns address of local variable"; >> + else >> + msg = "function may return address of local variable"; > > I think you need _(...) here, unless some magic makes that unnecessary now. Current version, which passed bootstrap+testsuite on x86_64-linux-gnu. (the original discussion is at https://gcc.gnu.org/ml/gcc-patches/2014-06/msg01692.html ) 2014-07-30 Marc Glisse PR c++/60517 gcc/c/ * c-typeck.c (c_finish_return): Return 0 instead of the address of a local variable. gcc/cp/ * typeck.c (maybe_warn_about_returning_address_of_local): Return whether it is returning the address of a local variable. (check_return_expr): Return 0 instead of the address of a local variable. gcc/c-family/ * c.opt (-Wreturn-local-addr): Move to common.opt. gcc/ * common.opt (-Wreturn-local-addr): Moved from c.opt. * gimple-ssa-isolate-paths.c: Include diagnostic-core.h and intl.h. (isolate_path): New argument to avoid inserting a trap. (find_implicit_erroneous_behaviour): Handle returning the address of a local variable. (find_explicit_erroneous_behaviour): Likewise. gcc/testsuite/ * c-c++-common/addrtmp.c: New file. * c-c++-common/uninit-G.c: Adapt. -- Marc Glisse --8323329-188578144-1406655391=:23005 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=p0 Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: inline; filename=p0 Content-length: 24836 SW5kZXg6IGdjYy9jL2MtdHlwZWNrLmMNCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCi0tLSBnY2MvYy9jLXR5cGVjay5jCShyZXZpc2lvbiAyMTMyMTApDQor KysgZ2NjL2MvYy10eXBlY2suYwkod29ya2luZyBjb3B5KQ0KQEAgLTkzMzAs MjIgKzkzMzAsMjYgQEAgY19maW5pc2hfcmV0dXJuIChsb2NhdGlvbl90IGxv YywgdHJlZSByZQ0KIA0KIAkgICAgICBpZiAoREVDTF9QIChpbm5lcikNCiAJ CSAgJiYgIURFQ0xfRVhURVJOQUwgKGlubmVyKQ0KIAkJICAmJiAhVFJFRV9T VEFUSUMgKGlubmVyKQ0KIAkJICAmJiBERUNMX0NPTlRFWFQgKGlubmVyKSA9 PSBjdXJyZW50X2Z1bmN0aW9uX2RlY2wpDQogCQl7DQogCQkgIGlmIChUUkVF X0NPREUgKGlubmVyKSA9PSBMQUJFTF9ERUNMKQ0KIAkJICAgIHdhcm5pbmdf YXQgKGxvYywgT1BUX1dyZXR1cm5fbG9jYWxfYWRkciwNCiAJCQkJImZ1bmN0 aW9uIHJldHVybnMgYWRkcmVzcyBvZiBsYWJlbCIpOw0KIAkJICBlbHNlDQot CQkgICAgd2FybmluZ19hdCAobG9jLCBPUFRfV3JldHVybl9sb2NhbF9hZGRy LA0KLQkJCQkiZnVuY3Rpb24gcmV0dXJucyBhZGRyZXNzIG9mIGxvY2FsIHZh cmlhYmxlIik7DQorCQkgICAgew0KKwkJICAgICAgd2FybmluZ19hdCAobG9j LCBPUFRfV3JldHVybl9sb2NhbF9hZGRyLA0KKwkJCQkgICJmdW5jdGlvbiBy ZXR1cm5zIGFkZHJlc3Mgb2YgbG9jYWwgdmFyaWFibGUiKTsNCisJCSAgICAg IHRyZWUgemVybyA9IGJ1aWxkX3plcm9fY3N0IChUUkVFX1RZUEUgKHJlcykp Ow0KKwkJICAgICAgdCA9IGJ1aWxkX2NvbXBvdW5kX2V4cHIgKGxvYywgdCwg emVybyk7DQorCQkgICAgfQ0KIAkJfQ0KIAkgICAgICBicmVhazsNCiANCiAJ ICAgIGRlZmF1bHQ6DQogCSAgICAgIGJyZWFrOw0KIAkgICAgfQ0KIA0KIAkg IGJyZWFrOw0KIAl9DQogDQpJbmRleDogZ2NjL2MtZmFtaWx5L2Mub3B0DQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjL2MtZmFtaWx5L2Mub3B0 CShyZXZpc2lvbiAyMTMyMTApDQorKysgZ2NjL2MtZmFtaWx5L2Mub3B0CSh3 b3JraW5nIGNvcHkpDQpAQCAtNjk4LDI0ICs2OTgsMjAgQEAgT2JqQyBPYmpD KysgVmFyKHdhcm5fcHJvdG9jb2wpIEluaXQoMSkgVw0KIFdhcm4gaWYgaW5o ZXJpdGVkIG1ldGhvZHMgYXJlIHVuaW1wbGVtZW50ZWQNCiANCiBXcmVkdW5k YW50LWRlY2xzDQogQyBPYmpDIEMrKyBPYmpDKysgVmFyKHdhcm5fcmVkdW5k YW50X2RlY2xzKSBXYXJuaW5nDQogV2FybiBhYm91dCBtdWx0aXBsZSBkZWNs YXJhdGlvbnMgb2YgdGhlIHNhbWUgb2JqZWN0DQogDQogV3Jlb3JkZXINCiBD KysgT2JqQysrIFZhcih3YXJuX3Jlb3JkZXIpIFdhcm5pbmcgTGFuZ0VuYWJs ZWRCeShDKysgT2JqQysrLFdhbGwpDQogV2FybiB3aGVuIHRoZSBjb21waWxl ciByZW9yZGVycyBjb2RlDQogDQotV3JldHVybi1sb2NhbC1hZGRyDQotQyBP YmpDIEMrKyBPYmpDKysgVmFyKHdhcm5fcmV0dXJuX2xvY2FsX2FkZHIpIElu aXQoMSkgV2FybmluZw0KLVdhcm4gYWJvdXQgcmV0dXJuaW5nIGEgcG9pbnRl ci9yZWZlcmVuY2UgdG8gYSBsb2NhbCBvciB0ZW1wb3JhcnkgdmFyaWFibGUu DQotDQogV3JldHVybi10eXBlDQogQyBPYmpDIEMrKyBPYmpDKysgVmFyKHdh cm5fcmV0dXJuX3R5cGUpIFdhcm5pbmcgTGFuZ0VuYWJsZWRCeShDIE9iakMg QysrIE9iakMrKyxXYWxsKQ0KIFdhcm4gd2hlbmV2ZXIgYSBmdW5jdGlvbidz IHJldHVybiB0eXBlIGRlZmF1bHRzIHRvIFwiaW50XCIgKEMpLCBvciBhYm91 dCBpbmNvbnNpc3RlbnQgcmV0dXJuIHR5cGVzIChDKyspDQogDQogV3NlbGVj dG9yDQogT2JqQyBPYmpDKysgVmFyKHdhcm5fc2VsZWN0b3IpIFdhcm5pbmcN CiBXYXJuIGlmIGEgc2VsZWN0b3IgaGFzIG11bHRpcGxlIG1ldGhvZHMNCiAN CiBXc2hhZG93LWl2YXINCiBPYmpDIE9iakMrKyBWYXIod2Fybl9zaGFkb3df aXZhcikgRW5hYmxlZEJ5KFdzaGFkb3cpIEluaXQoMSkgV2FybmluZw0KSW5k ZXg6IGdjYy9jb21tb24ub3B0DQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot LS0gZ2NjL2NvbW1vbi5vcHQJKHJldmlzaW9uIDIxMzIxMCkNCisrKyBnY2Mv Y29tbW9uLm9wdAkod29ya2luZyBjb3B5KQ0KQEAgLTYwMCwyMCArNjAwLDI0 IEBAIENvbW1vbiBWYXIod2Fybl9wYWNrZWQpIFdhcm5pbmcNCiBXYXJuIHdo ZW4gdGhlIHBhY2tlZCBhdHRyaWJ1dGUgaGFzIG5vIGVmZmVjdCBvbiBzdHJ1 Y3QgbGF5b3V0DQogDQogV3BhZGRlZA0KIENvbW1vbiBWYXIod2Fybl9wYWRk ZWQpIFdhcm5pbmcNCiBXYXJuIHdoZW4gcGFkZGluZyBpcyByZXF1aXJlZCB0 byBhbGlnbiBzdHJ1Y3R1cmUgbWVtYmVycw0KIA0KIFdwZWRhbnRpYw0KIENv bW1vbiBWYXIocGVkYW50aWMpIFdhcm5pbmcNCiBJc3N1ZSB3YXJuaW5ncyBu ZWVkZWQgZm9yIHN0cmljdCBjb21wbGlhbmNlIHRvIHRoZSBzdGFuZGFyZA0K IA0KK1dyZXR1cm4tbG9jYWwtYWRkcg0KK0NvbW1vbiBWYXIod2Fybl9yZXR1 cm5fbG9jYWxfYWRkcikgSW5pdCgxKSBXYXJuaW5nDQorV2FybiBhYm91dCBy ZXR1cm5pbmcgYSBwb2ludGVyL3JlZmVyZW5jZSB0byBhIGxvY2FsIG9yIHRl bXBvcmFyeSB2YXJpYWJsZS4NCisNCiBXc2hhZG93DQogQ29tbW9uIFZhcih3 YXJuX3NoYWRvdykgV2FybmluZw0KIFdhcm4gd2hlbiBvbmUgbG9jYWwgdmFy aWFibGUgc2hhZG93cyBhbm90aGVyDQogDQogV3N0YWNrLXByb3RlY3Rvcg0K IENvbW1vbiBWYXIod2Fybl9zdGFja19wcm90ZWN0KSBXYXJuaW5nDQogV2Fy biB3aGVuIG5vdCBpc3N1aW5nIHN0YWNrIHNtYXNoaW5nIHByb3RlY3Rpb24g Zm9yIHNvbWUgcmVhc29uDQogDQogV3N0YWNrLXVzYWdlPQ0KIENvbW1vbiBK b2luZWQgUmVqZWN0TmVnYXRpdmUgVUludGVnZXIgVmFyKHdhcm5fc3RhY2tf dXNhZ2UpIEluaXQoLTEpIFdhcm5pbmcNCkluZGV4OiBnY2MvY3AvdHlwZWNr LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MvY3AvdHlwZWNr LmMJKHJldmlzaW9uIDIxMzIxMCkNCisrKyBnY2MvY3AvdHlwZWNrLmMJKHdv cmtpbmcgY29weSkNCkBAIC00OSwyMSArNDksMjEgQEAgc3RhdGljIHRyZWUg Y29udmVydF9mb3JfYXNzaWdubWVudCAodHJlZQ0KIHN0YXRpYyB0cmVlIGNw X3BvaW50ZXJfaW50X3N1bSAoZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUs IHRzdWJzdF9mbGFnc190KTsNCiBzdGF0aWMgdHJlZSByYXRpb25hbGl6ZV9j b25kaXRpb25hbF9leHByIChlbnVtIHRyZWVfY29kZSwgdHJlZSwgDQogCQkJ CQkgIHRzdWJzdF9mbGFnc190KTsNCiBzdGF0aWMgaW50IGNvbXBfcHRyX3R0 eXBlc19yZWFsICh0cmVlLCB0cmVlLCBpbnQpOw0KIHN0YXRpYyBib29sIGNv bXBfZXhjZXB0X3R5cGVzICh0cmVlLCB0cmVlLCBib29sKTsNCiBzdGF0aWMg Ym9vbCBjb21wX2FycmF5X3R5cGVzIChjb25zdF90cmVlLCBjb25zdF90cmVl LCBib29sKTsNCiBzdGF0aWMgdHJlZSBwb2ludGVyX2RpZmYgKHRyZWUsIHRy ZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsNCiBzdGF0aWMgdHJlZSBnZXRf ZGVsdGFfZGlmZmVyZW5jZSAodHJlZSwgdHJlZSwgYm9vbCwgYm9vbCwgdHN1 YnN0X2ZsYWdzX3QpOw0KIHN0YXRpYyB2b2lkIGNhc3RzX2F3YXlfY29uc3Ru ZXNzX3IgKHRyZWUgKiwgdHJlZSAqLCB0c3Vic3RfZmxhZ3NfdCk7DQogc3Rh dGljIGJvb2wgY2FzdHNfYXdheV9jb25zdG5lc3MgKHRyZWUsIHRyZWUsIHRz dWJzdF9mbGFnc190KTsNCi1zdGF0aWMgdm9pZCBtYXliZV93YXJuX2Fib3V0 X3JldHVybmluZ19hZGRyZXNzX29mX2xvY2FsICh0cmVlKTsNCitzdGF0aWMg Ym9vbCBtYXliZV93YXJuX2Fib3V0X3JldHVybmluZ19hZGRyZXNzX29mX2xv Y2FsICh0cmVlKTsNCiBzdGF0aWMgdHJlZSBsb29rdXBfZGVzdHJ1Y3RvciAo dHJlZSwgdHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOw0KIHN0YXRpYyB2 b2lkIHdhcm5fYXJnc19udW0gKGxvY2F0aW9uX3QsIHRyZWUsIGJvb2wpOw0K IHN0YXRpYyBpbnQgY29udmVydF9hcmd1bWVudHMgKHRyZWUsIHZlYzx0cmVl LCB2YV9nYz4gKiosIHRyZWUsIGludCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0c3Vic3RfZmxhZ3NfdCk7DQogDQogLyogRG8gYGV4cCA9 IHJlcXVpcmVfY29tcGxldGVfdHlwZSAoZXhwKTsnIHRvIG1ha2Ugc3VyZSBl eHANCiAgICBkb2VzIG5vdCBoYXZlIGFuIGluY29tcGxldGUgdHlwZS4gIChU aGF0IGluY2x1ZGVzIHZvaWQgdHlwZXMuKQ0KICAgIFJldHVybnMgZXJyb3Jf bWFya19ub2RlIGlmIHRoZSBWQUxVRSBkb2VzIG5vdCBoYXZlDQogICAgY29t cGxldGUgdHlwZSB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4gICovDQog DQpAQCAtODI4OSw4MiArODI4OSw4NCBAQCBjb252ZXJ0X2Zvcl9pbml0aWFs aXphdGlvbiAodHJlZSBleHAsIHRyDQogICAgIHJldHVybiByaHM7DQogDQog ICBpZiAoTUFZQkVfQ0xBU1NfVFlQRV9QICh0eXBlKSkNCiAgICAgcmV0dXJu IHBlcmZvcm1faW1wbGljaXRfY29udmVyc2lvbl9mbGFncyAodHlwZSwgcmhz LCBjb21wbGFpbiwgZmxhZ3MpOw0KIA0KICAgcmV0dXJuIGNvbnZlcnRfZm9y X2Fzc2lnbm1lbnQgKHR5cGUsIHJocywgZXJydHlwZSwgZm5kZWNsLCBwYXJt bnVtLA0KIAkJCQkgY29tcGxhaW4sIGZsYWdzKTsNCiB9DQogDA0KIC8qIElm IFJFVFZBTCBpcyB0aGUgYWRkcmVzcyBvZiwgb3IgYSByZWZlcmVuY2UgdG8s IGEgbG9jYWwgdmFyaWFibGUgb3INCi0gICB0ZW1wb3JhcnkgZ2l2ZSBhbiBh cHByb3ByaWF0ZSB3YXJuaW5nLiAgKi8NCisgICB0ZW1wb3JhcnkgZ2l2ZSBh biBhcHByb3ByaWF0ZSB3YXJuaW5nIGFuZCByZXR1cm4gdHJ1ZS4gICovDQog DQotc3RhdGljIHZvaWQNCitzdGF0aWMgYm9vbA0KIG1heWJlX3dhcm5fYWJv dXRfcmV0dXJuaW5nX2FkZHJlc3Nfb2ZfbG9jYWwgKHRyZWUgcmV0dmFsKQ0K IHsNCiAgIHRyZWUgdmFsdHlwZSA9IFRSRUVfVFlQRSAoREVDTF9SRVNVTFQg KGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkpOw0KICAgdHJlZSB3aGF0c19yZXR1 cm5lZCA9IHJldHZhbDsNCiANCiAgIGZvciAoOzspDQogICAgIHsNCiAgICAg ICBpZiAoVFJFRV9DT0RFICh3aGF0c19yZXR1cm5lZCkgPT0gQ09NUE9VTkRf RVhQUikNCiAJd2hhdHNfcmV0dXJuZWQgPSBUUkVFX09QRVJBTkQgKHdoYXRz X3JldHVybmVkLCAxKTsNCiAgICAgICBlbHNlIGlmIChDT05WRVJUX0VYUFJf UCAod2hhdHNfcmV0dXJuZWQpDQogCSAgICAgICB8fCBUUkVFX0NPREUgKHdo YXRzX3JldHVybmVkKSA9PSBOT05fTFZBTFVFX0VYUFIpDQogCXdoYXRzX3Jl dHVybmVkID0gVFJFRV9PUEVSQU5EICh3aGF0c19yZXR1cm5lZCwgMCk7DQog ICAgICAgZWxzZQ0KIAlicmVhazsNCiAgICAgfQ0KIA0KICAgaWYgKFRSRUVf Q09ERSAod2hhdHNfcmV0dXJuZWQpICE9IEFERFJfRVhQUikNCi0gICAgcmV0 dXJuOw0KKyAgICByZXR1cm4gZmFsc2U7DQogICB3aGF0c19yZXR1cm5lZCA9 IFRSRUVfT1BFUkFORCAod2hhdHNfcmV0dXJuZWQsIDApOw0KIA0KICAgd2hp bGUgKFRSRUVfQ09ERSAod2hhdHNfcmV0dXJuZWQpID09IENPTVBPTkVOVF9S RUYNCiAJIHx8IFRSRUVfQ09ERSAod2hhdHNfcmV0dXJuZWQpID09IEFSUkFZ X1JFRikNCiAgICAgd2hhdHNfcmV0dXJuZWQgPSBUUkVFX09QRVJBTkQgKHdo YXRzX3JldHVybmVkLCAwKTsNCiANCiAgIGlmIChUUkVFX0NPREUgKHZhbHR5 cGUpID09IFJFRkVSRU5DRV9UWVBFKQ0KICAgICB7DQogICAgICAgaWYgKFRS RUVfQ09ERSAod2hhdHNfcmV0dXJuZWQpID09IEFHR1JfSU5JVF9FWFBSDQog CSAgfHwgVFJFRV9DT0RFICh3aGF0c19yZXR1cm5lZCkgPT0gVEFSR0VUX0VY UFIpDQogCXsNCiAJICB3YXJuaW5nIChPUFRfV3JldHVybl9sb2NhbF9hZGRy LCAicmV0dXJuaW5nIHJlZmVyZW5jZSB0byB0ZW1wb3JhcnkiKTsNCi0JICBy ZXR1cm47DQorCSAgcmV0dXJuIHRydWU7DQogCX0NCiAgICAgICBpZiAoVkFS X1AgKHdoYXRzX3JldHVybmVkKQ0KIAkgICYmIERFQ0xfTkFNRSAod2hhdHNf cmV0dXJuZWQpDQogCSAgJiYgVEVNUF9OQU1FX1AgKERFQ0xfTkFNRSAod2hh dHNfcmV0dXJuZWQpKSkNCiAJew0KIAkgIHdhcm5pbmcgKE9QVF9XcmV0dXJu X2xvY2FsX2FkZHIsICJyZWZlcmVuY2UgdG8gbm9uLWx2YWx1ZSByZXR1cm5l ZCIpOw0KLQkgIHJldHVybjsNCisJICByZXR1cm4gdHJ1ZTsNCiAJfQ0KICAg ICB9DQogDQogICBpZiAoREVDTF9QICh3aGF0c19yZXR1cm5lZCkNCiAgICAg ICAmJiBERUNMX05BTUUgKHdoYXRzX3JldHVybmVkKQ0KICAgICAgICYmIERF Q0xfRlVOQ1RJT05fU0NPUEVfUCAod2hhdHNfcmV0dXJuZWQpDQogICAgICAg JiYgIWlzX2NhcHR1cmVfcHJveHkgKHdoYXRzX3JldHVybmVkKQ0KICAgICAg ICYmICEoVFJFRV9TVEFUSUMgKHdoYXRzX3JldHVybmVkKQ0KIAkgICB8fCBU UkVFX1BVQkxJQyAod2hhdHNfcmV0dXJuZWQpKSkNCiAgICAgew0KICAgICAg IGlmIChUUkVFX0NPREUgKHZhbHR5cGUpID09IFJFRkVSRU5DRV9UWVBFKQ0K IAl3YXJuaW5nIChPUFRfV3JldHVybl9sb2NhbF9hZGRyLCAicmVmZXJlbmNl IHRvIGxvY2FsIHZhcmlhYmxlICVxK0QgcmV0dXJuZWQiLA0KIAkJIHdoYXRz X3JldHVybmVkKTsNCiAgICAgICBlbHNlIGlmIChUUkVFX0NPREUgKHdoYXRz X3JldHVybmVkKSA9PSBMQUJFTF9ERUNMKQ0KIAl3YXJuaW5nIChPUFRfV3Jl dHVybl9sb2NhbF9hZGRyLCAiYWRkcmVzcyBvZiBsYWJlbCAlcStEIHJldHVy bmVkIiwNCiAJCSB3aGF0c19yZXR1cm5lZCk7DQogICAgICAgZWxzZQ0KIAl3 YXJuaW5nIChPUFRfV3JldHVybl9sb2NhbF9hZGRyLCAiYWRkcmVzcyBvZiBs b2NhbCB2YXJpYWJsZSAlcStEICINCiAJCSAicmV0dXJuZWQiLCB3aGF0c19y ZXR1cm5lZCk7DQotICAgICAgcmV0dXJuOw0KKyAgICAgIHJldHVybiB0cnVl Ow0KICAgICB9DQorDQorICByZXR1cm4gZmFsc2U7DQogfQ0KIA0KIC8qIENo ZWNrIHRoYXQgcmV0dXJuaW5nIFJFVFZBTCBmcm9tIHRoZSBjdXJyZW50IGZ1 bmN0aW9uIGlzIHZhbGlkLg0KICAgIFJldHVybiBhbiBleHByZXNzaW9uIGV4 cGxpY2l0bHkgc2hvd2luZyBhbGwgY29udmVyc2lvbnMgcmVxdWlyZWQgdG8N CiAgICBjaGFuZ2UgUkVUVkFMIGludG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0 eXBlLCBhbmQgdG8gYXNzaWduIGl0IHRvDQogICAgdGhlIERFQ0xfUkVTVUxU IGZvciB0aGUgZnVuY3Rpb24uICBTZXQgKk5PX1dBUk5JTkcgdG8gdHJ1ZSBp Zg0KICAgIGNvZGUgcmVhY2hlcyBlbmQgb2Ygbm9uLXZvaWQgZnVuY3Rpb24g d2FybmluZyBzaG91bGRuJ3QgYmUgaXNzdWVkDQogICAgb24gdGhpcyBSRVRV Uk5fRVhQUi4gICovDQogDQogdHJlZQ0KQEAgLTg2NDMsMjIgKzg2NDUsMjMg QEAgY2hlY2tfcmV0dXJuX2V4cHIgKHRyZWUgcmV0dmFsLCBib29sICpubw0K IA0KICAgICAgIC8qIElmIHRoZSBjb252ZXJzaW9uIGZhaWxlZCwgdHJlYXQg dGhpcyBqdXN0IGxpa2UgYHJldHVybjsnLiAgKi8NCiAgICAgICBpZiAocmV0 dmFsID09IGVycm9yX21hcmtfbm9kZSkNCiAJcmV0dXJuIHJldHZhbDsNCiAg ICAgICAvKiBXZSBjYW4ndCBpbml0aWFsaXplIGEgcmVnaXN0ZXIgZnJvbSBh IEFHR1JfSU5JVF9FWFBSLiAgKi8NCiAgICAgICBlbHNlIGlmICghIGNmdW4t PnJldHVybnNfc3RydWN0DQogCSAgICAgICAmJiBUUkVFX0NPREUgKHJldHZh bCkgPT0gVEFSR0VUX0VYUFINCiAJICAgICAgICYmIFRSRUVfQ09ERSAoVFJF RV9PUEVSQU5EIChyZXR2YWwsIDEpKSA9PSBBR0dSX0lOSVRfRVhQUikNCiAJ cmV0dmFsID0gYnVpbGQyIChDT01QT1VORF9FWFBSLCBUUkVFX1RZUEUgKHJl dHZhbCksIHJldHZhbCwNCiAJCQkgVFJFRV9PUEVSQU5EIChyZXR2YWwsIDAp KTsNCi0gICAgICBlbHNlDQotCW1heWJlX3dhcm5fYWJvdXRfcmV0dXJuaW5n X2FkZHJlc3Nfb2ZfbG9jYWwgKHJldHZhbCk7DQorICAgICAgZWxzZSBpZiAo bWF5YmVfd2Fybl9hYm91dF9yZXR1cm5pbmdfYWRkcmVzc19vZl9sb2NhbCAo cmV0dmFsKSkNCisJcmV0dmFsID0gYnVpbGQyIChDT01QT1VORF9FWFBSLCBU UkVFX1RZUEUgKHJldHZhbCksIHJldHZhbCwNCisJCQkgYnVpbGRfemVyb19j c3QgKFRSRUVfVFlQRSAocmV0dmFsKSkpOw0KICAgICB9DQogDQogICAvKiBB Y3R1YWxseSBjb3B5IHRoZSB2YWx1ZSByZXR1cm5lZCBpbnRvIHRoZSBhcHBy b3ByaWF0ZSBsb2NhdGlvbi4gICovDQogICBpZiAocmV0dmFsICYmIHJldHZh bCAhPSByZXN1bHQpDQogICAgIHJldHZhbCA9IGJ1aWxkMiAoSU5JVF9FWFBS LCBUUkVFX1RZUEUgKHJlc3VsdCksIHJlc3VsdCwgcmV0dmFsKTsNCiANCiAg IHJldHVybiByZXR2YWw7DQogfQ0KIA0KIAwNCkluZGV4OiBnY2MvZ2ltcGxl LXNzYS1pc29sYXRlLXBhdGhzLmMNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSBnY2MvZ2ltcGxlLXNzYS1pc29sYXRlLXBhdGhzLmMJKHJldmlzaW9u IDIxMzIxMCkNCisrKyBnY2MvZ2ltcGxlLXNzYS1pc29sYXRlLXBhdGhzLmMJ KHdvcmtpbmcgY29weSkNCkBAIC0zNSwyMCArMzUsMjIgQEAgYWxvbmcgd2l0 aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4NCiAjaW5jbHVkZSAidHJl ZS1zc2EuaCINCiAjaW5jbHVkZSAic3RyaW5ncG9vbC5oIg0KICNpbmNsdWRl ICJ0cmVlLXNzYW5hbWVzLmgiDQogI2luY2x1ZGUgImdpbXBsZS1zc2EuaCIN CiAjaW5jbHVkZSAidHJlZS1zc2Etb3BlcmFuZHMuaCINCiAjaW5jbHVkZSAi dHJlZS1waGlub2Rlcy5oIg0KICNpbmNsdWRlICJzc2EtaXRlcmF0b3JzLmgi DQogI2luY2x1ZGUgImNmZ2xvb3AuaCINCiAjaW5jbHVkZSAidHJlZS1wYXNz LmgiDQogI2luY2x1ZGUgInRyZWUtY2ZnLmgiDQorI2luY2x1ZGUgImRpYWdu b3N0aWMtY29yZS5oIg0KKyNpbmNsdWRlICJpbnRsLmgiDQogDQogDQogc3Rh dGljIGJvb2wgY2ZnX2FsdGVyZWQ7DQogDQogLyogQ2FsbGJhY2sgZm9yIHdh bGtfc3RtdF9sb2FkX3N0b3JlX29wcy4NCiANCiAgICBSZXR1cm4gVFJVRSBp ZiBPUCB3aWxsIGRlcmVmZXJlbmNlIHRoZSB0cmVlIHN0b3JlZCBpbiBEQVRB LCBGQUxTRQ0KICAgIG90aGVyd2lzZS4NCiANCiAgICBUaGlzIHJvdXRpbmUg b25seSBtYWtlcyBhIHN1cGVyZmljaWFsIGNoZWNrIGZvciBhIGRlcmVmZXJl bmNlLiAgVGh1cywNCkBAIC0xMjUsNDEgKzEyNyw0NCBAQCBpbnNlcnRfdHJh cF9hbmRfcmVtb3ZlX3RyYWlsaW5nX3N0YXRlbWVuDQogDQogLyogQkIgd2hl biByZWFjaGVkIHZpYSBpbmNvbWluZyBlZGdlIEUgd2lsbCBleGhpYml0IHVu ZGVmaW5lZCBiZWhhdmlvdXINCiAgICBhdCBTVE1ULiAgSXNvbGF0ZSBhbmQg b3B0aW1pemUgdGhlIHBhdGggd2hpY2ggZXhoaWJpdHMgdW5kZWZpbmVkDQog ICAgYmVoYXZpb3VyLg0KIA0KICAgIElzb2xhdGlvbiBpcyBzaW1wbGUuICBE dXBsaWNhdGUgQkIgYW5kIHJlZGlyZWN0IEUgdG8gQkInLg0KIA0KICAgIE9w dGltaXphdGlvbiBpcyBzaW1wbGUgYXMgd2VsbC4gIFJlcGxhY2UgU1RNVCBp biBCQicgd2l0aCBhbg0KICAgIHVuY29uZGl0aW9uYWwgdHJhcCBhbmQgcmVt b3ZlIGFsbCBvdXRnb2luZyBlZGdlcyBmcm9tIEJCJy4NCiANCisgICBJZiBS RVRfWkVSTywgZG8gbm90IHRyYXAsIG9ubHkgcmV0dXJuIE5VTEwuDQorDQog ICAgRFVQTElDQVRFIGlzIGEgcHJlLWV4aXN0aW5nIGR1cGxpY2F0ZSwgdXNl IGl0IGFzIEJCJyBpZiBpdCBleGlzdHMuDQogDQogICAgUmV0dXJuIEJCJy4g ICovDQogDQogYmFzaWNfYmxvY2sNCiBpc29sYXRlX3BhdGggKGJhc2ljX2Js b2NrIGJiLCBiYXNpY19ibG9jayBkdXBsaWNhdGUsDQotCSAgICAgIGVkZ2Ug ZSwgZ2ltcGxlIHN0bXQsIHRyZWUgb3ApDQorCSAgICAgIGVkZ2UgZSwgZ2lt cGxlIHN0bXQsIHRyZWUgb3AsIGJvb2wgcmV0X3plcm8pDQogew0KICAgZ2lt cGxlX3N0bXRfaXRlcmF0b3Igc2ksIHNpMjsNCiAgIGVkZ2VfaXRlcmF0b3Ig ZWk7DQogICBlZGdlIGUyOw0KIA0KICAgLyogRmlyc3QgZHVwbGljYXRlIEJC IGlmIHdlIGhhdmUgbm90IGRvbmUgc28gYWxyZWFkeSBhbmQgcmVtb3ZlIGFs bA0KICAgICAgdGhlIGR1cGxpY2F0ZSdzIG91dGdvaW5nIGVkZ2VzIGFzIGR1 cGxpY2F0ZSBpcyBnb2luZyB0byB1bmNvbmRpdGlvbmFsbHkNCiAgICAgIHRy YXAuICBSZW1vdmluZyB0aGUgb3V0Z29pbmcgZWRnZXMgaXMgYm90aCBhbiBv cHRpbWl6YXRpb24gYW5kIGVuc3VyZXMNCiAgICAgIHdlIGRvbid0IG5lZWQg dG8gZG8gYW55IFBISSBub2RlIHVwZGF0ZXMuICAqLw0KICAgaWYgKCFkdXBs aWNhdGUpDQogICAgIHsNCiAgICAgICBkdXBsaWNhdGUgPSBkdXBsaWNhdGVf YmxvY2sgKGJiLCBOVUxMLCBOVUxMKTsNCi0gICAgICBmb3IgKGVpID0gZWlf c3RhcnQgKGR1cGxpY2F0ZS0+c3VjY3MpOyAoZTIgPSBlaV9zYWZlX2VkZ2Ug KGVpKSk7ICkNCi0JcmVtb3ZlX2VkZ2UgKGUyKTsNCisgICAgICBpZiAoIXJl dF96ZXJvKQ0KKwlmb3IgKGVpID0gZWlfc3RhcnQgKGR1cGxpY2F0ZS0+c3Vj Y3MpOyAoZTIgPSBlaV9zYWZlX2VkZ2UgKGVpKSk7ICkNCisJICByZW1vdmVf ZWRnZSAoZTIpOw0KICAgICB9DQogDQogICAvKiBDb21wbGV0ZSB0aGUgaXNv bGF0aW9uIHN0ZXAgYnkgcmVkaXJlY3RpbmcgRSB0byByZWFjaCBEVVBMSUNB VEUuICAqLw0KICAgZTIgPSByZWRpcmVjdF9lZGdlX2FuZF9icmFuY2ggKGUs IGR1cGxpY2F0ZSk7DQogICBpZiAoZTIpDQogICAgIGZsdXNoX3BlbmRpbmdf c3RtdHMgKGUyKTsNCiANCiANCiAgIC8qIFRoZXJlIG1heSBiZSBtb3JlIHRo YW4gb25lIHN0YXRlbWVudCBpbiBEVVBMSUNBVEUgd2hpY2ggZXhoaWJpdHMN CiAgICAgIHVuZGVmaW5lZCBiZWhhdmlvdXIuICBVbHRpbWF0ZWx5IHdlIHdh bnQgdGhlIGZpcnN0IHN1Y2ggc3RhdGVtZW50IGluDQpAQCAtMTkwLDIxICsx OTUsMzEgQEAgaXNvbGF0ZV9wYXRoIChiYXNpY19ibG9jayBiYiwgYmFzaWNf YmxvYw0KICAgICB9DQogDQogICAvKiBUaGlzIHdvdWxkIGJlIGFuIGluZGlj YXRvciB0aGF0IHdlIG5ldmVyIGZvdW5kIFNUTVQgaW4gQkIsIHdoaWNoIHNo b3VsZA0KICAgICAgbmV2ZXIgaGFwcGVuLiAgKi8NCiAgIGdjY19hc3NlcnQg KCFnc2lfZW5kX3AgKHNpKSk7DQogDQogICAvKiBJZiB3ZSBkaWQgbm90IHJ1 biB0byB0aGUgZW5kIG9mIERVUExJQ0FURSwgdGhlbiBTSSBwb2ludHMgdG8g U1RNVCBhbmQNCiAgICAgIFNJMiBwb2ludHMgdG8gdGhlIGR1cGxpY2F0ZSBv ZiBTVE1UIGluIERVUExJQ0FURS4gIEluc2VydCBhIHRyYXANCiAgICAgIGJl Zm9yZSBTSTIgYW5kIHJlbW92ZSBTSTIgYW5kIGFsbCB0cmFpbGluZyBzdGF0 ZW1lbnRzLiAgKi8NCiAgIGlmICghZ3NpX2VuZF9wIChzaTIpKQ0KLSAgICBp bnNlcnRfdHJhcF9hbmRfcmVtb3ZlX3RyYWlsaW5nX3N0YXRlbWVudHMgKCZz aTIsIG9wKTsNCisgICAgew0KKyAgICAgIGlmIChyZXRfemVybykNCisJew0K KwkgIGdpbXBsZSByZXQgPSBnc2lfc3RtdCAoc2kyKTsNCisJICB0cmVlIHpl cm8gPSBidWlsZF96ZXJvX2NzdCAoVFJFRV9UWVBFIChnaW1wbGVfcmV0dXJu X3JldHZhbCAocmV0KSkpOw0KKwkgIGdpbXBsZV9yZXR1cm5fc2V0X3JldHZh bCAocmV0LCB6ZXJvKTsNCisJICB1cGRhdGVfc3RtdCAocmV0KTsNCisJfQ0K KyAgICAgIGVsc2UNCisJaW5zZXJ0X3RyYXBfYW5kX3JlbW92ZV90cmFpbGlu Z19zdGF0ZW1lbnRzICgmc2kyLCBvcCk7DQorICAgIH0NCiANCiAgIHJldHVy biBkdXBsaWNhdGU7DQogfQ0KIA0KIC8qIExvb2sgZm9yIFBISSBub2RlcyB3 aGljaCBmZWVkIHN0YXRlbWVudHMgaW4gdGhlIHNhbWUgYmxvY2sgd2hlcmUN CiAgICB0aGUgdmFsdWUgb2YgdGhlIFBISSBub2RlIGltcGxpZXMgdGhlIHN0 YXRlbWVudCBpcyBlcnJvbmVvdXMuDQogDQogICAgRm9yIGV4YW1wbGUsIGEg TlVMTCBQSEkgYXJnIHZhbHVlIHdoaWNoIHRoZW4gZmVlZHMgYSBwb2ludGVy DQogICAgZGVyZWZlcmVuY2UuDQogDQpAQCAtMjQ4LDQ3ICsyNjMsODAgQEAg ZmluZF9pbXBsaWNpdF9lcnJvbmVvdXNfYmVoYXZpb3VyICh2b2lkKQ0KIAkg ICAgIGFyZ3VtZW50cyBhcmUgTlVMTC4NCiANCiAJICAgICBXaGVuIHdlIHJl bW92ZSBhbiBlZGdlLCB3ZSB3YW50IHRvIHJlcHJvY2VzcyB0aGUgY3VycmVu dA0KIAkgICAgIGluZGV4LCBoZW5jZSB0aGUgdWdseSB3YXkgd2UgdXBkYXRl IEkgZm9yIGVhY2ggaXRlcmF0aW9uLiAgKi8NCiAJICBiYXNpY19ibG9jayBk dXBsaWNhdGUgPSBOVUxMOw0KIAkgIGZvciAodW5zaWduZWQgaSA9IDAsIG5l eHRfaSA9IDA7DQogCSAgICAgICBpIDwgZ2ltcGxlX3BoaV9udW1fYXJncyAo cGhpKTsNCiAJICAgICAgIGkgPSBuZXh0X2kpDQogCSAgICB7DQogCSAgICAg IHRyZWUgb3AgPSBnaW1wbGVfcGhpX2FyZ19kZWYgKHBoaSwgaSk7DQorCSAg ICAgIGVkZ2UgZSA9IGdpbXBsZV9waGlfYXJnX2VkZ2UgKHBoaSwgaSk7DQor CSAgICAgIGltbV91c2VfaXRlcmF0b3IgaXRlcjsNCisJICAgICAgZ2ltcGxl IHVzZV9zdG10Ow0KIA0KIAkgICAgICBuZXh0X2kgPSBpICsgMTsNCiANCisJ ICAgICAgaWYgKFRSRUVfQ09ERSAob3ApID09IEFERFJfRVhQUikNCisJCXsN CisJCSAgdHJlZSB2YWxiYXNlID0gZ2V0X2Jhc2VfYWRkcmVzcyAoVFJFRV9P UEVSQU5EIChvcCwgMCkpOw0KKwkJICBpZiAoKFRSRUVfQ09ERSAodmFsYmFz ZSkgPT0gVkFSX0RFQ0wNCisJCSAgICAgICAmJiAhaXNfZ2xvYmFsX3ZhciAo dmFsYmFzZSkpDQorCQkgICAgICB8fCBUUkVFX0NPREUgKHZhbGJhc2UpID09 IFBBUk1fREVDTCkNCisJCSAgICB7DQorCQkgICAgICBGT1JfRUFDSF9JTU1f VVNFX1NUTVQgKHVzZV9zdG10LCBpdGVyLCBsaHMpDQorCQkJew0KKwkJCSAg aWYgKGdpbXBsZV9jb2RlICh1c2Vfc3RtdCkgIT0gR0lNUExFX1JFVFVSTg0K KwkJCSAgICAgIHx8IGdpbXBsZV9yZXR1cm5fcmV0dmFsICh1c2Vfc3RtdCkg IT0gbGhzKQ0KKwkJCSAgICBjb250aW51ZTsNCisNCisJCQkgIGlmICh3YXJu aW5nX2F0IChnaW1wbGVfbG9jYXRpb24gKHVzZV9zdG10KSwNCisJCQkJCSAg T1BUX1dyZXR1cm5fbG9jYWxfYWRkciwNCisJCQkJCSAgImZ1bmN0aW9uIG1h eSByZXR1cm4gYWRkcmVzcyAiDQorCQkJCQkgICJvZiBsb2NhbCB2YXJpYWJs ZSIpKQ0KKwkJCSAgICBpbmZvcm0gKERFQ0xfU09VUkNFX0xPQ0FUSU9OKHZh bGJhc2UpLA0KKwkJCQkgICAgImRlY2xhcmVkIGhlcmUiKTsNCisNCisJCQkg IGlmIChnaW1wbGVfYmIgKHVzZV9zdG10KSA9PSBiYikNCisJCQkgICAgew0K KwkJCSAgICAgIGR1cGxpY2F0ZSA9IGlzb2xhdGVfcGF0aCAoYmIsIGR1cGxp Y2F0ZSwgZSwNCisJCQkJCQkJdXNlX3N0bXQsIGxocywgdHJ1ZSk7DQorDQor CQkJICAgICAgLyogV2hlbiB3ZSByZW1vdmUgYW4gaW5jb21pbmcgZWRnZSwg d2UgbmVlZCB0bw0KKwkJCQkgcmVwcm9jZXNzIHRoZSBJdGggZWxlbWVudC4g ICovDQorCQkJICAgICAgbmV4dF9pID0gaTsNCisJCQkgICAgICBjZmdfYWx0 ZXJlZCA9IHRydWU7DQorCQkJICAgIH0NCisJCQl9DQorCQkgICAgfQ0KKwkJ fQ0KKw0KIAkgICAgICBpZiAoIWludGVnZXJfemVyb3AgKG9wKSkNCiAJCWNv bnRpbnVlOw0KIA0KLQkgICAgICBlZGdlIGUgPSBnaW1wbGVfcGhpX2FyZ19l ZGdlIChwaGksIGkpOw0KLQkgICAgICBpbW1fdXNlX2l0ZXJhdG9yIGl0ZXI7 DQotCSAgICAgIGdpbXBsZSB1c2Vfc3RtdDsNCi0NCiAJICAgICAgLyogV2Un dmUgZ290IGEgTlVMTCBQSEkgYXJndW1lbnQuICBOb3cgc2VlIGlmIHRoZQ0K ICAJICAgICAgICAgUEhJJ3MgcmVzdWx0IGlzIGRlcmVmZXJlbmNlZCB3aXRo aW4gQkIuICAqLw0KIAkgICAgICBGT1JfRUFDSF9JTU1fVVNFX1NUTVQgKHVz ZV9zdG10LCBpdGVyLCBsaHMpDQogCSAgICAgICAgew0KIAkgICAgICAgICAg LyogV2Ugb25seSBjYXJlIGFib3V0IHVzZXMgaW4gQkIuICBDYXRjaGluZyBj YXNlcyBpbg0KIAkJICAgICBpbiBvdGhlciBibG9ja3Mgd291bGQgcmVxdWly ZSBtb3JlIGNvbXBsZXggcGF0aA0KIAkJICAgICBpc29sYXRpb24gY29kZS4g ICAqLw0KIAkJICBpZiAoZ2ltcGxlX2JiICh1c2Vfc3RtdCkgIT0gYmIpDQog CQkgICAgY29udGludWU7DQogDQogCQkgIGlmIChpbmZlcl9ub25udWxsX3Jh bmdlICh1c2Vfc3RtdCwgbGhzLA0KIAkJCQkJICAgZmxhZ19pc29sYXRlX2Vy cm9uZW91c19wYXRoc19kZXJlZmVyZW5jZSwNCiAJCQkJCSAgIGZsYWdfaXNv bGF0ZV9lcnJvbmVvdXNfcGF0aHNfYXR0cmlidXRlKSkNCiANCiAJCSAgICB7 DQotCQkgICAgICBkdXBsaWNhdGUgPSBpc29sYXRlX3BhdGggKGJiLCBkdXBs aWNhdGUsDQotCQkJCQkJZSwgdXNlX3N0bXQsIGxocyk7DQorCQkgICAgICBk dXBsaWNhdGUgPSBpc29sYXRlX3BhdGggKGJiLCBkdXBsaWNhdGUsIGUsDQor CQkJCQkJdXNlX3N0bXQsIGxocywgZmFsc2UpOw0KIA0KIAkJICAgICAgLyog V2hlbiB3ZSByZW1vdmUgYW4gaW5jb21pbmcgZWRnZSwgd2UgbmVlZCB0bw0K IAkJCSByZXByb2Nlc3MgdGhlIEl0aCBlbGVtZW50LiAgKi8NCiAJCSAgICAg IG5leHRfaSA9IGk7DQogCQkgICAgICBjZmdfYWx0ZXJlZCA9IHRydWU7DQog CQkgICAgfQ0KIAkJfQ0KIAkgICAgfQ0KIAl9DQogICAgIH0NCkBAIC0zNDAs MjMgKzM4OCw1OSBAQCBmaW5kX2V4cGxpY2l0X2Vycm9uZW91c19iZWhhdmlv dXIgKHZvaWQpDQogCSAgICAgIGZvciAoZWRnZV9pdGVyYXRvciBlaSA9IGVp X3N0YXJ0IChiYi0+c3VjY3MpOw0KIAkJICAgKGUgPSBlaV9zYWZlX2VkZ2Ug KGVpKSk7ICkNCiAJCXJlbW92ZV9lZGdlIChlKTsNCiANCiAJICAgICAgLyog SWdub3JlIGFueSBtb3JlIG9wZXJhbmRzIG9uIHRoaXMgc3RhdGVtZW50IGFu ZA0KIAkJIGNvbnRpbnVlIHRoZSBzdGF0ZW1lbnQgaXRlcmF0b3IgKHdoaWNo IHNob3VsZA0KIAkJIHRlcm1pbmF0ZSBpdHMgbG9vcCBpbW1lZGlhdGVseS4g ICovDQogCSAgICAgIGNmZ19hbHRlcmVkID0gdHJ1ZTsNCiAJICAgICAgYnJl YWs7DQogCSAgICB9DQorDQorCSAgLyogRGV0ZWN0IHJldHVybmluZyB0aGUg YWRkcmVzcyBvZiBhIGxvY2FsIHZhcmlhYmxlLiAgVGhpcyBvbmx5DQorCSAg ICAgYmVjb21lcyB1bmRlZmluZWQgYmVoYXZpb3IgaWYgdGhlIHJlc3VsdCBp cyB1c2VkLCBzbyB3ZSBkbyBub3QNCisJICAgICBpbnNlcnQgYSB0cmFwIGFu ZCBvbmx5IHJldHVybiBOVUxMIGluc3RlYWQuICAqLw0KKwkgIGlmIChnaW1w bGVfY29kZSAoc3RtdCkgPT0gR0lNUExFX1JFVFVSTikNCisJICAgIHsNCisJ ICAgICAgdHJlZSB2YWwgPSBnaW1wbGVfcmV0dXJuX3JldHZhbCAoc3RtdCk7 DQorCSAgICAgIGlmICh2YWwgJiYgVFJFRV9DT0RFICh2YWwpID09IEFERFJf RVhQUikNCisJCXsNCisJCSAgdHJlZSB2YWxiYXNlID0gZ2V0X2Jhc2VfYWRk cmVzcyAoVFJFRV9PUEVSQU5EICh2YWwsIDApKTsNCisJCSAgaWYgKChUUkVF X0NPREUgKHZhbGJhc2UpID09IFZBUl9ERUNMDQorCQkgICAgICAgJiYgIWlz X2dsb2JhbF92YXIgKHZhbGJhc2UpKQ0KKwkJICAgICAgfHwgVFJFRV9DT0RF ICh2YWxiYXNlKSA9PSBQQVJNX0RFQ0wpDQorCQkgICAgew0KKwkJICAgICAg LyogV2Ugb25seSBuZWVkIGl0IGZvciB0aGlzIHBhcnRpY3VsYXIgY2FzZS4g ICovDQorCQkgICAgICBjYWxjdWxhdGVfZG9taW5hbmNlX2luZm8gKENESV9Q T1NUX0RPTUlOQVRPUlMpOw0KKwkJICAgICAgY29uc3QgY2hhciogbXNnOw0K KwkJICAgICAgYm9vbCBhbHdheXNfZXhlY3V0ZWQgPSBkb21pbmF0ZWRfYnlf cA0KKwkJCShDRElfUE9TVF9ET01JTkFUT1JTLA0KKwkJCSBzaW5nbGVfc3Vj YyAoRU5UUllfQkxPQ0tfUFRSX0ZPUl9GTiAoY2Z1bikpLCBiYik7DQorCQkg ICAgICBpZiAoYWx3YXlzX2V4ZWN1dGVkKQ0KKwkJCW1zZyA9IE5fKCJmdW5j dGlvbiByZXR1cm5zIGFkZHJlc3Mgb2YgbG9jYWwgdmFyaWFibGUiKTsNCisJ CSAgICAgIGVsc2UNCisJCQltc2cgPSBOXygiZnVuY3Rpb24gbWF5IHJldHVy biBhZGRyZXNzIG9mICINCisJCQkJICJsb2NhbCB2YXJpYWJsZSIpOw0KKw0K KwkJICAgICAgaWYgKHdhcm5pbmdfYXQgKGdpbXBsZV9sb2NhdGlvbiAoc3Rt dCksDQorCQkJCSAgICAgIE9QVF9XcmV0dXJuX2xvY2FsX2FkZHIsIG1zZykp DQorCQkJaW5mb3JtIChERUNMX1NPVVJDRV9MT0NBVElPTih2YWxiYXNlKSwg ImRlY2xhcmVkIGhlcmUiKTsNCisJCSAgICAgIHRyZWUgemVybyA9IGJ1aWxk X3plcm9fY3N0IChUUkVFX1RZUEUgKHZhbCkpOw0KKwkJICAgICAgZ2ltcGxl X3JldHVybl9zZXRfcmV0dmFsIChzdG10LCB6ZXJvKTsNCisJCSAgICAgIHVw ZGF0ZV9zdG10IChzdG10KTsNCisJCSAgICB9DQorCQl9DQorCSAgICB9DQog CX0NCiAgICAgfQ0KIH0NCisNCiAvKiBTZWFyY2ggdGhlIGZ1bmN0aW9uIGZv ciBzdGF0ZW1lbnRzIHdoaWNoLCBpZiBleGVjdXRlZCwgd291bGQgY2F1c2UN CiAgICB0aGUgcHJvZ3JhbSB0byBmYXVsdCBzdWNoIGFzIGEgZGVyZWZlcmVu Y2Ugb2YgYSBOVUxMIHBvaW50ZXIuDQogDQogICAgU3VjaCBhIHByb2dyYW0g Y2FuJ3QgYmUgdmFsaWQgaWYgc3VjaCBhIHN0YXRlbWVudCB3YXMgdG8gZXhl Y3V0ZQ0KICAgIGFjY29yZGluZyB0byBJU08gc3RhbmRhcmRzLg0KIA0KICAg IFdlIGRldGVjdCBleHBsaWNpdCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Vz IGFzIHdlbGwgYXMgdGhvc2UgaW1wbGllZA0KICAgIGJ5IGEgUEhJIGFyZ3Vt ZW50IGhhdmluZyBhIE5VTEwgdmFsdWUgd2hpY2ggdW5jb25kaXRpb25hbGx5 IGZsb3dzIGludG8NCiAgICBhIGRlcmVmZXJlbmNlIGluIHRoZSBzYW1lIGJs b2NrIGFzIHRoZSBQSEkuDQogDQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9jLWMr Ky1jb21tb24vYWRkcnRtcC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot LS0gZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYWRkcnRtcC5jCShyZXZp c2lvbiAwKQ0KKysrIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FkZHJ0 bXAuYwkod29ya2luZyBjb3B5KQ0KQEAgLTAsMCArMSwyNCBAQA0KKy8qIHsg ZGctZG8gY29tcGlsZSB9ICovDQorLyogeyBkZy1vcHRpb25zICItTzIiIH0g Ki8NCisNCit0eXBlZGVmIHN0cnVjdCBBIHsgaW50IGEsYjsgfSBBOw0KK2lu dCpnKGludCp4KXtyZXR1cm4geDt9DQoraW50KmYxKCl7DQorICBBIHhbMl09 e3sxLDJ9LHszLDR9fTsNCisgIHJldHVybiBnKCZ4WzFdLmEpOyAvLyB7IGRn LXdhcm5pbmcgInJldHVybnMgYWRkcmVzcyBvZiBsb2NhbCB2YXJpYWJsZSIg fQ0KK30NCitpbnQqZjIoaW50IG4pew0KKyAgQSB4WzJdPXt7MSwyfSx7Myw0 fX07DQorICByZXR1cm4gbj8wOmcoJnhbMV0uYSk7IC8vIHsgZGctd2Fybmlu ZyAibWF5IHJldHVybiBhZGRyZXNzIG9mIGxvY2FsIHZhcmlhYmxlIiB9DQor fQ0KK0EgeVsyXT17ezEsMn0sezMsNH19Ow0KK2ludCpoKCl7DQorICByZXR1 cm4gZygmeVsxXS5hKTsNCit9DQoraW50KmooaW50IG4pew0KKyAgQSB4WzJd PXt7MSwyfSx7Myw0fX07DQorICBpbnQqcD1nKCZ5WzFdLmEpOw0KKyAgaWYo bj09MSlwPWcoJnhbMV0uYSk7DQorICBpZihuPT0yKXA9ZygmeFswXS5iKTsN CisgIHJldHVybiBwOyAvLyB7IGRnLXdhcm5pbmcgIm1heSByZXR1cm4gYWRk cmVzcyBvZiBsb2NhbCB2YXJpYWJsZSIgfQ0KK30NCkluZGV4OiBnY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi91bmluaXQtRy5jDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vdW5p bml0LUcuYwkocmV2aXNpb24gMjEzMjEwKQ0KKysrIGdjYy90ZXN0c3VpdGUv Yy1jKystY29tbW9uL3VuaW5pdC1HLmMJKHdvcmtpbmcgY29weSkNCkBAIC0x LDkgKzEsMTAgQEANCiAvKiBUZXN0IHdlIGRvIG5vdCB3YXJuIGFib3V0IGlu aXRpYWxpemluZyB2YXJpYWJsZSB3aXRoIGFkZHJlc3Mgb2Ygc2VsZiBpbiB0 aGUgaW5pdGlhbGl6YXRpb24uICovDQogLyogeyBkZy1kbyBjb21waWxlIH0g Ki8NCiAvKiB7IGRnLW9wdGlvbnMgIi1PIC1XdW5pbml0aWFsaXplZCIgfSAq Lw0KIA0KLXZvaWQgKmYoKQ0KK3ZvaWQgZyh2b2lkKik7DQordm9pZCBmKCkN CiB7DQogICB2b2lkICppID0gJmk7DQotICByZXR1cm4gaTsNCisgIGcoaSk7 DQogfQ0K --8323329-188578144-1406655391=:23005--