From debbugs-submit-bounces@debbugs.gnu.org Fri Mar 25 14:26:41 2011 Received: (at submit) by debbugs.gnu.org; 25 Mar 2011 18:26:42 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q3Bia-0001uE-F0 for submit@debbugs.gnu.org; Fri, 25 Mar 2011 14:26:40 -0400 Received: from eggs.gnu.org ([140.186.70.92]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q3BiY-0001u1-E2 for submit@debbugs.gnu.org; Fri, 25 Mar 2011 14:26:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q3BiR-0003k8-Kq for submit@debbugs.gnu.org; Fri, 25 Mar 2011 14:26:33 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_RP_MATCHES_RCVD autolearn=unavailable version=3.3.1 Received: from lists.gnu.org ([199.232.76.165]:57586) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q3BiR-0003k3-Fz for submit@debbugs.gnu.org; Fri, 25 Mar 2011 14:26:31 -0400 Received: from [140.186.70.92] (port=50431 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q3BiQ-0003nI-IR for bug-gnu-emacs@gnu.org; Fri, 25 Mar 2011 14:26:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q3BiP-0003iz-9N for bug-gnu-emacs@gnu.org; Fri, 25 Mar 2011 14:26:30 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]:60178) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q3BZk-0000ql-W4 for bug-gnu-emacs@gnu.org; Fri, 25 Mar 2011 14:17:33 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id EFFD439E80F7 for ; Fri, 25 Mar 2011 11:17:31 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id TNLERl5qTMGe for ; Fri, 25 Mar 2011 11:17:31 -0700 (PDT) Received: from [131.179.64.200] (Penguin.CS.UCLA.EDU [131.179.64.200]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 4AC2C39E80F0 for ; Fri, 25 Mar 2011 11:17:31 -0700 (PDT) Message-ID: <4D8CDC3A.4010705@cs.ucla.edu> Date: Fri, 25 Mar 2011 11:17:30 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.15) Gecko/20110307 Fedora/3.1.9-0.39.b3pre.fc14 Thunderbird/3.1.9 MIME-Version: 1.0 To: bug-gnu-emacs@gnu.org Subject: (substring ...) crashes on large vectors Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 199.232.76.165 X-Spam-Score: -4.9 (----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -4.9 (----) I found this problem while compiling the Emacs trunk with gcc -Wstrict-overflow. Currently, on a 64-bit machine, (substring VEC FROM TO) fails if TO and FROM are valid indexes and TO - FROM is 2**31 or greater. On typical hosts there can be buffer overruns or crashes. The problem is that (substring ...) internally calls (vector ...), and (vector ...) cannot create a vector whose length is 2**31 or greater, because it follows the Emacs convention that varargs functions count the number of arguments using an 'int'. The simplest and most general way to address this problem is to change the Emacs convention to use EMACS_INT rather than 'int' to count the number of arguments to a function. I'm preparing a patch along those lines. The changes to lisp.h are below; the other changes should be straightforward albeit tedious. Before I work any more on this, can anyone see why not to do this? === modified file 'src/lisp.h' --- src/lisp.h 2011-03-22 09:08:11 +0000 +++ src/lisp.h 2011-03-24 08:54:15 +0000 @@ -964,7 +964,7 @@ struct Lisp_Subr Lisp_Object (*a7) (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object); Lisp_Object (*a8) (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object); Lisp_Object (*aUNEVALLED) (Lisp_Object args); - Lisp_Object (*aMANY) (int, Lisp_Object *); + Lisp_Object (*aMANY) (EMACS_INT, Lisp_Object *); } function; short min_args, max_args; const char *symbol_name; @@ -1809,7 +1809,7 @@ typedef struct { /* Note that the weird token-substitution semantics of ANSI C makes this work for MANY and UNEVALLED. */ -#define DEFUN_ARGS_MANY (int, Lisp_Object *) +#define DEFUN_ARGS_MANY (EMACS_INT, Lisp_Object *) #define DEFUN_ARGS_UNEVALLED (Lisp_Object) #define DEFUN_ARGS_0 (void) #define DEFUN_ARGS_1 (Lisp_Object) @@ -2079,7 +2079,7 @@ struct gcpro volatile Lisp_Object *var; /* Number of consecutive protected variables. */ - int nvars; + EMACS_INT nvars; #ifdef DEBUG_GCPRO int level; @@ -2860,7 +2860,7 @@ extern Lisp_Object internal_lisp_conditi extern Lisp_Object internal_condition_case (Lisp_Object (*) (void), Lisp_Object, Lisp_Object (*) (Lisp_Object)); extern Lisp_Object internal_condition_case_1 (Lisp_Object (*) (Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object)); extern Lisp_Object internal_condition_case_2 (Lisp_Object (*) (Lisp_Object, Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object)); -extern Lisp_Object internal_condition_case_n (Lisp_Object (*) (int, Lisp_Object *), int, Lisp_Object *, Lisp_Object, Lisp_Object (*) (Lisp_Object)); +extern Lisp_Object internal_condition_case_n (Lisp_Object (*) (EMACS_INT, Lisp_Object *), EMACS_INT, Lisp_Object *, Lisp_Object, Lisp_Object (*) (Lisp_Object)); extern void specbind (Lisp_Object, Lisp_Object); extern void record_unwind_protect (Lisp_Object (*) (Lisp_Object), Lisp_Object); extern Lisp_Object unbind_to (int, Lisp_Object); @@ -2870,7 +2870,7 @@ extern void do_autoload (Lisp_Object, Li extern Lisp_Object un_autoload (Lisp_Object); EXFUN (Ffetch_bytecode, 1); extern void init_eval_once (void); -extern Lisp_Object safe_call (int, Lisp_Object *); +extern Lisp_Object safe_call (EMACS_INT, Lisp_Object *); extern Lisp_Object safe_call1 (Lisp_Object, Lisp_Object); extern Lisp_Object safe_call2 (Lisp_Object, Lisp_Object, Lisp_Object); extern void init_eval (void); From debbugs-submit-bounces@debbugs.gnu.org Fri Mar 25 17:25:07 2011 Received: (at 8344) by debbugs.gnu.org; 25 Mar 2011 21:25:08 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q3EVG-0005xD-Gz for submit@debbugs.gnu.org; Fri, 25 Mar 2011 17:25:06 -0400 Received: from ironport2-out.teksavvy.com ([206.248.154.181] helo=ironport2-out.pppoe.ca) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q3EVE-0005wk-Gh for 8344@debbugs.gnu.org; Fri, 25 Mar 2011 17:25:05 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvsEABkHjU1Ld+RO/2dsb2JhbAClYXiITbsihWkElgGDSA X-IronPort-AV: E=Sophos;i="4.63,245,1299474000"; d="scan'208";a="98062386" Received: from 75-119-228-78.dsl.teksavvy.com (HELO ceviche.home) ([75.119.228.78]) by ironport2-out.pppoe.ca with ESMTP/TLS/ADH-AES256-SHA; 25 Mar 2011 17:24:58 -0400 Received: by ceviche.home (Postfix, from userid 20848) id 826AF660F8; Fri, 25 Mar 2011 17:24:58 -0400 (EDT) From: Stefan Monnier To: Paul Eggert Subject: Re: bug#8344: (substring ...) crashes on large vectors Message-ID: References: <4D8CDC3A.4010705@cs.ucla.edu> Date: Fri, 25 Mar 2011 17:24:58 -0400 In-Reply-To: <4D8CDC3A.4010705@cs.ucla.edu> (Paul Eggert's message of "Fri, 25 Mar 2011 11:17:30 -0700") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.1 (--) X-Debbugs-Envelope-To: 8344 Cc: 8344@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -2.1 (--) > The problem is that (substring ...) internally calls > (vector ...), and (vector ...) cannot create a vector > whose length is 2**31 or greater, because it follows > the Emacs convention that varargs functions count the > number of arguments using an 'int'. I'm pretty sure that even with your patch such a vector would bump into all kinds of other problems. Already buffers larger than 2GB are causing troubles right now. So if you want to fix things, I'd urge you to focus on "handling an 8GB file" (on 32bit systems this won't work, but on 64bit it should but didn't last time I tried). Stefan From debbugs-submit-bounces@debbugs.gnu.org Fri Mar 25 17:48:51 2011 Received: (at 8344) by debbugs.gnu.org; 25 Mar 2011 21:48:51 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q3EsE-0006Sl-9V for submit@debbugs.gnu.org; Fri, 25 Mar 2011 17:48:50 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q3EsC-0006SU-9T for 8344@debbugs.gnu.org; Fri, 25 Mar 2011 17:48:49 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 167F939E80F7; Fri, 25 Mar 2011 14:48:42 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JteB8nLhfw2H; Fri, 25 Mar 2011 14:48:41 -0700 (PDT) Received: from [131.179.64.200] (Penguin.CS.UCLA.EDU [131.179.64.200]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id AA99539E80B1; Fri, 25 Mar 2011 14:48:41 -0700 (PDT) Message-ID: <4D8D0DB6.4040206@cs.ucla.edu> Date: Fri, 25 Mar 2011 14:48:38 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.15) Gecko/20110307 Fedora/3.1.9-0.39.b3pre.fc14 Thunderbird/3.1.9 MIME-Version: 1.0 To: Stefan Monnier Subject: Re: bug#8344: (substring ...) crashes on large vectors References: <4D8CDC3A.4010705@cs.ucla.edu> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Spam-Score: -3.2 (---) X-Debbugs-Envelope-To: 8344 Cc: 8344@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.2 (---) On 03/25/2011 02:24 PM, Stefan Monnier wrote: > I'd urge you to focus on "handling an 8GB file" > (on 32bit systems this won't work, but on 64bit it should but didn't > last time I tried) Yes, thanks, that is on my list of things to do. This nargs business is one of the (easier) steps needed to get it done. Another (easier) step will be to merge the gnulib fixes for regular expressions into Emacs, since gnulib has fixed several problems with matching buffers larger than 2**31 bytes. There are several other steps, of course, and some will be harder. To some extent I'm using gcc -Wstrict-overflow as a first pass, to fix the more-obvious gotchas, in such a way that regressions can be caught statically. Many of the other changes won't be so easy, but by then I hope to understand Emacs internals better. For example, the Emacs regex code fails the static checks now, and that is why I want to turn to the regex code at some point in the near future. From debbugs-submit-bounces@debbugs.gnu.org Sat Mar 26 22:19:17 2011 Received: (at 8344) by debbugs.gnu.org; 27 Mar 2011 02:19:17 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q3fZS-00044Z-Qb for submit@debbugs.gnu.org; Sat, 26 Mar 2011 22:19:17 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q3fZN-00044K-La for 8344@debbugs.gnu.org; Sat, 26 Mar 2011 22:19:13 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id ACB6239E80F2 for <8344@debbugs.gnu.org>; Sat, 26 Mar 2011 19:19:03 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 95e1cbUd8W9g for <8344@debbugs.gnu.org>; Sat, 26 Mar 2011 19:19:00 -0700 (PDT) Received: from [192.168.1.10] (pool-71-189-109-235.lsanca.fios.verizon.net [71.189.109.235]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 57E5839E80E0 for <8344@debbugs.gnu.org>; Sat, 26 Mar 2011 19:19:00 -0700 (PDT) Message-ID: <4D8E9E93.80303@cs.ucla.edu> Date: Sat, 26 Mar 2011 19:18:59 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.14) Gecko/20110223 Thunderbird/3.1.8 MIME-Version: 1.0 To: 8344@debbugs.gnu.org Subject: Re: bug#8344: (substring ...) crashes on large vectors References: <4D8CDC3A.4010705@cs.ucla.edu> <4D8D0DB6.4040206@cs.ucla.edu> In-Reply-To: <4D8D0DB6.4040206@cs.ucla.edu> Content-Type: multipart/mixed; boundary="------------020900030601050503010800" X-Spam-Score: -3.0 (---) X-Debbugs-Envelope-To: 8344 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.0 (---) This is a multi-part message in MIME format. --------------020900030601050503010800 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Here's the full patch for this, which I mentioned earlier, to give you a feel for what's needed. It's tedious, but is pretty straightforward. I'll test it more before committing. --------------020900030601050503010800 Content-Type: text/plain; name="patch.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patch.txt" PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9DaGFuZ2VMb2cnCi0tLSBzcmMvQ2hhbmdlTG9nCTIw MTEtMDMtMjYgMDQ6MTc6MzggKzAwMDAKKysrIHNyYy9DaGFuZ2VMb2cJMjAxMS0wMy0yNyAw MjoxMjozNiArMDAwMApAQCAtMSwzICsxLDIyIEBACisyMDExLTAzLTI3ICBQYXVsIEVnZ2Vy dCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVZhcmlhZGljIEMgZnVuY3Rpb25zIG5vdyBj b3VudCBhcmd1bWVudHMgd2l0aCBzaXplX3QsIG5vdCBpbnQuCisJVGhpcyBhdm9pZHMgYW4g dW5uZWNlc3NhcnkgbGltaXRhdGlvbiBvbiA2NC1iaXQgbWFjaGluZXMsIHdoaWNoCisJY2F1 c2VkIChzdWJzdHJpbmcgLi4uKSB0byBjcmFzaCBvbiBsYXJnZSB2ZWN0b3JzIChCdWcjODM0 NCkuCisJKiBsaXNwLmggKHN0cnVjdCBMaXNwX1N1YnIuZnVuY3Rpb24uYU1BTlkpOiBOb3cg dGFrZXMgc2l6ZV90LCBub3QgaW50LgorCShERUZVTl9BUkdTX01BTlksIGludGVybmFsX2Nv bmRpdGlvbl9jYXNlX24sIHNhZmVfY2FsbCk6IExpa2V3aXNlLgorCUFsbCB2YXJpYWRpYyBm dW5jdGlvbnMgY2hhbmdlZCBhY2NvcmRpbmdseS4KKwkoc3RydWN0IGdjcHJvLm52YXJzKTog Tm93IHNpemVfdCwgbm90IGludC4gIEFsbCB1c2VzIGNoYW5nZWQuCisJKiBkYXRhLmMgKGFy aXRoX2RyaXZlciwgZmxvYXRfYXJpdGhfZHJpdmVyKTogTGlrZXdpc2UuCisJKiBlZGl0Zm5z LmMgKGdlbmVyYWxfaW5zZXJ0X2Z1bmN0aW9uKTogTGlrZXdpc2UuCisJKiBldmFsLmMgKHN0 cnVjdCBiYWNrdHJhY2UubmFyZ3MsIGludGVyYWN0aXZlX3ApCisJKGludGVybmFsX2NvbmRp dGlvbl9jYXNlX24sIHJ1bl9ob29rX3dpdGhfYXJncywgYXBwbHlfbGFtYmRhKQorCShmdW5j YWxsX2xhbWJkYSwgbWFya19iYWNrdHJhY2UpOiBMaWtld2lzZS4KKwkqIGZucy5jIChjb25j YXQpOiBMaWtld2lzZS4KKwkqIGZyYW1lLmMgKHhfc2V0X2ZyYW1lX3BhcmFtZXRlcnMpOiBM aWtld2lzZS4KKwkqIGZucy5jIChnZXRfa2V5X2FyZyk6IE5vdyBhY2NlcHRzIGFuZCByZXR1 cm5zIHNpemVfdCwgYW5kIHJldHVybnMKKwkwIGlmIG5vdCBmb3VuZCwgbm90IC0xLiAgQWxs IGNhbGxlcnMgY2hhbmdlZC4KKwogMjAxMS0wMy0yNiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRA Y3MudWNsYS5lZHU+CiAKIAkqIGFsbG9jLmMgKGdhcmJhZ2VfY29sbGVjdCk6IERvbid0IGFz c3VtZSBzdGFjayBzaXplIGZpdHMgaW4gaW50LgoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9h bGxvYy5jJwotLS0gc3JjL2FsbG9jLmMJMjAxMS0wMy0yNiAwNDoxNzozOCArMDAwMAorKysg c3JjL2FsbG9jLmMJMjAxMS0wMy0yNyAwMjoxMjozNiArMDAwMApAQCAtMjcwNyw3ICsyNzA3 LDcgQEAKICAgICAgICBkb2M6IC8qIFJldHVybiBhIG5ld2x5IGNyZWF0ZWQgbGlzdCB3aXRo IHNwZWNpZmllZCBhcmd1bWVudHMgYXMgZWxlbWVudHMuCiBBbnkgbnVtYmVyIG9mIGFyZ3Vt ZW50cywgZXZlbiB6ZXJvIGFyZ3VtZW50cywgYXJlIGFsbG93ZWQuCiB1c2FnZTogKGxpc3Qg JnJlc3QgT0JKRUNUUykgICovKQotICAoaW50IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVj dCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3Mp CiB7CiAgIHJlZ2lzdGVyIExpc3BfT2JqZWN0IHZhbDsKICAgdmFsID0gUW5pbDsKQEAgLTI5 MjMsMTAgKzI5MjMsMTAgQEAKICAgICAgICBkb2M6IC8qIFJldHVybiBhIG5ld2x5IGNyZWF0 ZWQgdmVjdG9yIHdpdGggc3BlY2lmaWVkIGFyZ3VtZW50cyBhcyBlbGVtZW50cy4KIEFueSBu dW1iZXIgb2YgYXJndW1lbnRzLCBldmVuIHplcm8gYXJndW1lbnRzLCBhcmUgYWxsb3dlZC4K IHVzYWdlOiAodmVjdG9yICZyZXN0IE9CSkVDVFMpICAqLykKLSAgKHJlZ2lzdGVyIGludCBu YXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChyZWdpc3RlciBzaXplX3QgbmFyZ3MsIExp c3BfT2JqZWN0ICphcmdzKQogewogICByZWdpc3RlciBMaXNwX09iamVjdCBsZW4sIHZhbDsK LSAgcmVnaXN0ZXIgaW50IGk7CisgIHJlZ2lzdGVyIHNpemVfdCBpOwogICByZWdpc3RlciBz dHJ1Y3QgTGlzcF9WZWN0b3IgKnA7CiAKICAgWFNFVEZBU1RJTlQgKGxlbiwgbmFyZ3MpOwpA QCAtMjk0NSwxMCArMjk0NSwxMCBAQAogVGhlIGZpcnN0IGZvdXIgYXJndW1lbnRzIGFyZSBy ZXF1aXJlZDsgYXQgbW9zdCBzaXggaGF2ZSBhbnkKIHNpZ25pZmljYW5jZS4KIHVzYWdlOiAo bWFrZS1ieXRlLWNvZGUgQVJHTElTVCBCWVRFLUNPREUgQ09OU1RBTlRTIERFUFRIICZvcHRp b25hbCBET0NTVFJJTkcgSU5URVJBQ1RJVkUtU1BFQyAmcmVzdCBFTEVNRU5UUykgICovKQot ICAocmVnaXN0ZXIgaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHJlZ2lzdGVy IHNpemVfdCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIHJlZ2lzdGVyIExpc3Bf T2JqZWN0IGxlbiwgdmFsOwotICByZWdpc3RlciBpbnQgaTsKKyAgcmVnaXN0ZXIgc2l6ZV90 IGk7CiAgIHJlZ2lzdGVyIHN0cnVjdCBMaXNwX1ZlY3RvciAqcDsKIAogICBYU0VURkFTVElO VCAobGVuLCBuYXJncyk7CkBAIC00MjMwLDcgKzQyMzAsNyBAQAogY2hlY2tfZ2Nwcm9zICh2 b2lkKQogewogICBzdHJ1Y3QgZ2Nwcm8gKnA7Ci0gIGludCBpOworICBzaXplX3QgaTsKIAog ICBmb3IgKHAgPSBnY3Byb2xpc3Q7IHA7IHAgPSBwLT5uZXh0KQogICAgIGZvciAoaSA9IDA7 IGkgPCBwLT5udmFyczsgKytpKQpAQCAtNDgzOSw3ICs0ODM5LDcgQEAKIHsKICAgcmVnaXN0 ZXIgc3RydWN0IHNwZWNiaW5kaW5nICpiaW5kOwogICBjaGFyIHN0YWNrX3RvcF92YXJpYWJs ZTsKLSAgcmVnaXN0ZXIgaW50IGk7CisgIHJlZ2lzdGVyIHNpemVfdCBpOwogICBpbnQgbWVz c2FnZV9wOwogICBMaXNwX09iamVjdCB0b3RhbFs4XTsKICAgaW50IGNvdW50ID0gU1BFQ1BE TF9JTkRFWCAoKTsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvY2FsbGludC5jJwotLS0gc3Jj L2NhbGxpbnQuYwkyMDExLTAzLTIzIDEwOjA2OjU3ICswMDAwCisrKyBzcmMvY2FsbGludC5j CTIwMTEtMDMtMjcgMDI6MTI6MzYgKzAwMDAKQEAgLTI2NSw4ICsyNjUsOSBAQAogICAgICBy ZWNvcmRlZCBhcyBhIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIG5hbWVkIGNhbGxpbnRfYXJnZnVu c1t2YXJpZXNbaV1dLiAgKi8KICAgaW50ICp2YXJpZXM7CiAKLSAgcmVnaXN0ZXIgaW50IGks IGo7Ci0gIGludCBjb3VudCwgZm9vOworICByZWdpc3RlciBzaXplX3QgaSwgajsKKyAgc2l6 ZV90IGNvdW50OworICBpbnQgZm9vOwogICBjaGFyIHByb21wdDFbMTAwXTsKICAgY2hhciAq dGVtMTsKICAgaW50IGFyZ19mcm9tX3R0eSA9IDA7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3Jj L2NhbGxwcm9jLmMnCi0tLSBzcmMvY2FsbHByb2MuYwkyMDExLTAzLTE4IDA1OjU2OjQ2ICsw MDAwCisrKyBzcmMvY2FsbHByb2MuYwkyMDExLTAzLTI3IDAyOjEyOjM2ICswMDAwCkBAIC0x NzcsNyArMTc3LDcgQEAKIElmIHlvdSBxdWl0LCB0aGUgcHJvY2VzcyBpcyBraWxsZWQgd2l0 aCBTSUdJTlQsIG9yIFNJR0tJTEwgaWYgeW91IHF1aXQgYWdhaW4uCiAKIHVzYWdlOiAoY2Fs bC1wcm9jZXNzIFBST0dSQU0gJm9wdGlvbmFsIElORklMRSBCVUZGRVIgRElTUExBWSAmcmVz dCBBUkdTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdz KQorICAoc2l6ZV90IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVjdCAqYXJncykKIHsKICAg TGlzcF9PYmplY3QgaW5maWxlLCBidWZmZXIsIGN1cnJlbnRfZGlyLCBwYXRoOwogICB2b2xh dGlsZSBpbnQgZGlzcGxheV9wX3ZvbGF0aWxlOwpAQCAtMjIxLDcgKzIyMSw3IEBACiAgIC8q IERlY2lkZSB0aGUgY29kaW5nLXN5c3RlbSBmb3IgZ2l2aW5nIGFyZ3VtZW50cy4gICovCiAg IHsKICAgICBMaXNwX09iamVjdCB2YWwsICphcmdzMjsKLSAgICBpbnQgaTsKKyAgICBzaXpl X3QgaTsKIAogICAgIC8qIElmIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQsIHdlIG1heSBoYXZl IHRvIGVuY29kZSB0aGVtLiAgKi8KICAgICBpZiAobmFyZ3MgPj0gNSkKQEAgLTM3MywxMCAr MzczLDEwIEBACiAgICAgcGF0aCA9IEZzdWJzdHJpbmcgKHBhdGgsIG1ha2VfbnVtYmVyICgy KSwgUW5pbCk7CiAKICAgbmV3X2FyZ3Zfdm9sYXRpbGUgPSBuZXdfYXJndiA9IChjb25zdCB1 bnNpZ25lZCBjaGFyICoqKQotICAgIGFsbG9jYSAobWF4ICgyLCBuYXJncyAtIDIpICogc2l6 ZW9mIChjaGFyICopKTsKKyAgICBhbGxvY2EgKChuYXJncyA+IDQgPyBuYXJncyAtIDIgOiAy KSAqIHNpemVvZiAoY2hhciAqKSk7CiAgIGlmIChuYXJncyA+IDQpCiAgICAgewotICAgICAg cmVnaXN0ZXIgaW50IGk7CisgICAgICByZWdpc3RlciBzaXplX3QgaTsKICAgICAgIHN0cnVj dCBnY3BybyBnY3BybzEsIGdjcHJvMiwgZ2Nwcm8zLCBnY3BybzQsIGdjcHJvNTsKIAogICAg ICAgR0NQUk81IChpbmZpbGUsIGJ1ZmZlciwgY3VycmVudF9kaXIsIHBhdGgsIGVycm9yX2Zp bGUpOwpAQCAtNjQzLDcgKzY0Myw3IEBACiAJewogCSAgaWYgKEVRIChjb2Rpbmdfc3lzdGVt cywgUXQpKQogCSAgICB7Ci0JICAgICAgaW50IGk7CisJICAgICAgc2l6ZV90IGk7CiAKIAkg ICAgICBhcmdzMiA9IChMaXNwX09iamVjdCAqKSBhbGxvY2EgKChuYXJncyArIDEpICogc2l6 ZW9mICphcmdzMik7CiAJICAgICAgYXJnczJbMF0gPSBRY2FsbF9wcm9jZXNzOwpAQCAtODY0 LDcgKzg2NCw3IEBACiBJZiB5b3UgcXVpdCwgdGhlIHByb2Nlc3MgaXMga2lsbGVkIHdpdGgg U0lHSU5ULCBvciBTSUdLSUxMIGlmIHlvdSBxdWl0IGFnYWluLgogCiB1c2FnZTogKGNhbGwt cHJvY2Vzcy1yZWdpb24gU1RBUlQgRU5EIFBST0dSQU0gJm9wdGlvbmFsIERFTEVURSBCVUZG RVIgRElTUExBWSAmcmVzdCBBUkdTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIHJlZ2lzdGVyIExp c3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVj dCAqYXJncykKIHsKICAgc3RydWN0IGdjcHJvIGdjcHJvMTsKICAgTGlzcF9PYmplY3QgZmls ZW5hbWVfc3RyaW5nOwpAQCAtODczLDcgKzg3Myw3IEBACiAgIC8qIFF0IGRlbm90ZXMgd2Ug aGF2ZSBub3QgeWV0IGNhbGxlZCBGZmluZF9vcGVyYXRpb25fY29kaW5nX3N5c3RlbS4gICov CiAgIExpc3BfT2JqZWN0IGNvZGluZ19zeXN0ZW1zOwogICBMaXNwX09iamVjdCB2YWwsICph cmdzMjsKLSAgaW50IGk7CisgIHNpemVfdCBpOwogICBjaGFyICp0ZW1wZmlsZTsKICAgTGlz cF9PYmplY3QgdG1wZGlyLCBwYXR0ZXJuOwogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2No YXJhY3Rlci5jJwotLS0gc3JjL2NoYXJhY3Rlci5jCTIwMTEtMDMtMDggMDc6NDk6NDEgKzAw MDAKKysrIHNyYy9jaGFyYWN0ZXIuYwkyMDExLTAzLTI3IDAyOjEyOjM2ICswMDAwCkBAIC04 OTMsOSArODkzLDEwIEBACiAgICAgICAgZG9jOiAvKgogQ29uY2F0ZW5hdGUgYWxsIHRoZSBh cmd1bWVudCBjaGFyYWN0ZXJzIGFuZCBtYWtlIHRoZSByZXN1bHQgYSBzdHJpbmcuCiB1c2Fn ZTogKHN0cmluZyAmcmVzdCBDSEFSQUNURVJTKSAgKi8pCi0gIChpbnQgbiwgTGlzcF9PYmpl Y3QgKmFyZ3MpCisgIChzaXplX3QgbiwgTGlzcF9PYmplY3QgKmFyZ3MpCiB7Ci0gIGludCBp LCBjOworICBzaXplX3QgaTsKKyAgaW50IGM7CiAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgKnA7 CiAgIExpc3BfT2JqZWN0IHN0cjsKICAgVVNFX1NBRkVfQUxMT0NBOwpAQCAtOTE4LDkgKzkx OSwxMCBAQAogREVGVU4gKCJ1bmlieXRlLXN0cmluZyIsIEZ1bmlieXRlX3N0cmluZywgU3Vu aWJ5dGVfc3RyaW5nLCAwLCBNQU5ZLCAwLAogICAgICAgIGRvYzogLyogQ29uY2F0ZW5hdGUg YWxsIHRoZSBhcmd1bWVudCBieXRlcyBhbmQgbWFrZSB0aGUgcmVzdWx0IGEgdW5pYnl0ZSBz dHJpbmcuCiB1c2FnZTogKHVuaWJ5dGUtc3RyaW5nICZyZXN0IEJZVEVTKSAgKi8pCi0gIChp bnQgbiwgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbiwgTGlzcF9PYmplY3QgKmFy Z3MpCiB7Ci0gIGludCBpLCBjOworICBzaXplX3QgaTsKKyAgaW50IGM7CiAgIHVuc2lnbmVk IGNoYXIgKmJ1ZiwgKnA7CiAgIExpc3BfT2JqZWN0IHN0cjsKICAgVVNFX1NBRkVfQUxMT0NB OwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9jaGFyc2V0LmMnCi0tLSBzcmMvY2hhcnNldC5j CTIwMTEtMDMtMDggMDA6NDY6MjMgKzAwMDAKKysrIHNyYy9jaGFyc2V0LmMJMjAxMS0wMy0y NyAwMjoxMjozNiArMDAwMApAQCAtODQ1LDcgKzg0NSw3IEBACiAgICAgICAgU2RlZmluZV9j aGFyc2V0X2ludGVybmFsLCBjaGFyc2V0X2FyZ19tYXgsIE1BTlksIDAsCiAgICAgICAgZG9j OiAvKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCiB1c2FnZTogKGRlZmluZS1jaGFyc2V0LWlu dGVybmFsIC4uLikgICovKQotICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAg KHNpemVfdCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIC8qIENoYXJzZXQgYXR0 ciB2ZWN0b3IuICAqLwogICBMaXNwX09iamVjdCBhdHRyczsKQEAgLTIxNzEsMTEgKzIxNzEs MTIgQEAKICAgICAgICAxLCBNQU5ZLCAwLAogICAgICAgIGRvYzogLyogQXNzaWduIGhpZ2hl ciBwcmlvcml0eSB0byB0aGUgY2hhcnNldHMgZ2l2ZW4gYXMgYXJndW1lbnRzLgogdXNhZ2U6 IChzZXQtY2hhcnNldC1wcmlvcml0eSAmcmVzdCBjaGFyc2V0cykgICovKQotICAoaW50IG5h cmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgTGlzcF9PYmplY3Qg KmFyZ3MpCiB7CiAgIExpc3BfT2JqZWN0IG5ld19oZWFkLCBvbGRfbGlzdCwgYXJnbGlzdFsy XTsKICAgTGlzcF9PYmplY3QgbGlzdF8yMDIyLCBsaXN0X2VtYWNzX211bGU7Ci0gIGludCBp LCBpZDsKKyAgc2l6ZV90IGk7CisgIGludCBpZDsKIAogICBvbGRfbGlzdCA9IEZjb3B5X3Nl cXVlbmNlIChWY2hhcnNldF9vcmRlcmVkX2xpc3QpOwogICBuZXdfaGVhZCA9IFFuaWw7Cgo9 PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2NvZGluZy5jJwotLS0gc3JjL2NvZGluZy5jCTIwMTEt MDMtMjIgMTY6MjA6NDUgKzAwMDAKKysrIHNyYy9jb2RpbmcuYwkyMDExLTAzLTI3IDAyOjEy OjM2ICswMDAwCkBAIC05MzAwLDcgKzkzMDAsNyBAQAogY29udGVudHMgb2YgQlVGRkVSIGlu c3RlYWQgb2YgcmVhZGluZyB0aGUgZmlsZS4KIAogdXNhZ2U6IChmaW5kLW9wZXJhdGlvbi1j b2Rpbmctc3lzdGVtIE9QRVJBVElPTiBBUkdVTUVOVFMuLi4pICAqLykKLSAgKGludCBuYXJn cywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICph cmdzKQogewogICBMaXNwX09iamVjdCBvcGVyYXRpb24sIHRhcmdldF9pZHgsIHRhcmdldCwg dmFsOwogICByZWdpc3RlciBMaXNwX09iamVjdCBjaGFpbjsKQEAgLTkzMDksMTcgKzkzMDks MTcgQEAKICAgICBlcnJvciAoIlRvbyBmZXcgYXJndW1lbnRzIik7CiAgIG9wZXJhdGlvbiA9 IGFyZ3NbMF07CiAgIGlmICghU1lNQk9MUCAob3BlcmF0aW9uKQotICAgICAgfHwgIUlOVEVH RVJQICh0YXJnZXRfaWR4ID0gRmdldCAob3BlcmF0aW9uLCBRdGFyZ2V0X2lkeCkpKQorICAg ICAgfHwgIU5BVE5VTVAgKHRhcmdldF9pZHggPSBGZ2V0IChvcGVyYXRpb24sIFF0YXJnZXRf aWR4KSkpCiAgICAgZXJyb3IgKCJJbnZhbGlkIGZpcnN0IGFyZ3VtZW50Iik7Ci0gIGlmIChu YXJncyA8IDEgKyBYSU5UICh0YXJnZXRfaWR4KSkKKyAgaWYgKG5hcmdzIDwgMSArIFhGQVNU SU5UICh0YXJnZXRfaWR4KSkKICAgICBlcnJvciAoIlRvbyBmZXcgYXJndW1lbnRzIGZvciBv cGVyYXRpb246ICVzIiwKIAkgICBTREFUQSAoU1lNQk9MX05BTUUgKG9wZXJhdGlvbikpKTsK LSAgdGFyZ2V0ID0gYXJnc1tYSU5UICh0YXJnZXRfaWR4KSArIDFdOworICB0YXJnZXQgPSBh cmdzW1hGQVNUSU5UICh0YXJnZXRfaWR4KSArIDFdOwogICBpZiAoIShTVFJJTkdQICh0YXJn ZXQpCiAJfHwgKEVRIChvcGVyYXRpb24sIFFpbnNlcnRfZmlsZV9jb250ZW50cykgJiYgQ09O U1AgKHRhcmdldCkKIAkgICAgJiYgU1RSSU5HUCAoWENBUiAodGFyZ2V0KSkgJiYgQlVGRkVS UCAoWENEUiAodGFyZ2V0KSkpCiAJfHwgKEVRIChvcGVyYXRpb24sIFFvcGVuX25ldHdvcmtf c3RyZWFtKSAmJiBJTlRFR0VSUCAodGFyZ2V0KSkpKQotICAgIGVycm9yICgiSW52YWxpZCAl ZHRoIGFyZ3VtZW50IiwgWElOVCAodGFyZ2V0X2lkeCkgKyAxKTsKKyAgICBlcnJvciAoIklu dmFsaWQgJWR0aCBhcmd1bWVudCIsIFhGQVNUSU5UICh0YXJnZXRfaWR4KSArIDEpOwogICBp ZiAoQ09OU1AgKHRhcmdldCkpCiAgICAgdGFyZ2V0ID0gWENBUiAodGFyZ2V0KTsKIApAQCAt OTM3Niw5ICs5Mzc2LDkgQEAKIGFsbCBidXQgdGhlIGZpcnN0IG9uZSBhcmUgaWdub3JlZC4K IAogdXNhZ2U6IChzZXQtY29kaW5nLXN5c3RlbS1wcmlvcml0eSAmcmVzdCBjb2Rpbmctc3lz dGVtcykgICovKQotICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVf dCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7Ci0gIGludCBpLCBqOworICBzaXplX3Qg aSwgajsKICAgaW50IGNoYW5nZWRbY29kaW5nX2NhdGVnb3J5X21heF07CiAgIGVudW0gY29k aW5nX2NhdGVnb3J5IHByaW9yaXRpZXNbY29kaW5nX2NhdGVnb3J5X21heF07CiAKQEAgLTk0 MjEsNyArOTQyMSw3IEBACiAKICAgLyogVXBkYXRlIGBjb2RpbmctY2F0ZWdvcnktbGlzdCcu ICAqLwogICBWY29kaW5nX2NhdGVnb3J5X2xpc3QgPSBRbmlsOwotICBmb3IgKGkgPSBjb2Rp bmdfY2F0ZWdvcnlfbWF4IC0gMTsgaSA+PSAwOyBpLS0pCisgIGZvciAoaSA9IGNvZGluZ19j YXRlZ29yeV9tYXg7IGktLSA+IDA7ICkKICAgICBWY29kaW5nX2NhdGVnb3J5X2xpc3QKICAg ICAgID0gRmNvbnMgKEFSRUYgKFZjb2RpbmdfY2F0ZWdvcnlfdGFibGUsIHByaW9yaXRpZXNb aV0pLAogCSAgICAgICBWY29kaW5nX2NhdGVnb3J5X2xpc3QpOwpAQCAtOTQ4Miw3ICs5NDgy LDcgQEAKICAgICAgICBTZGVmaW5lX2NvZGluZ19zeXN0ZW1faW50ZXJuYWwsIGNvZGluZ19h cmdfbWF4LCBNQU5ZLCAwLAogICAgICAgIGRvYzogLyogRm9yIGludGVybmFsIHVzZSBvbmx5 LgogdXNhZ2U6IChkZWZpbmUtY29kaW5nLXN5c3RlbS1pbnRlcm5hbCAuLi4pICAqLykKLSAg KGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3Bf T2JqZWN0ICphcmdzKQogewogICBMaXNwX09iamVjdCBuYW1lOwogICBMaXNwX09iamVjdCBz cGVjX3ZlYzsJCS8qIFsgQVRUUlMgQUxJQVNFIEVPTF9UWVBFIF0gKi8KCj09PSBtb2RpZmll ZCBmaWxlICdzcmMvZGF0YS5jJwotLS0gc3JjL2RhdGEuYwkyMDExLTAzLTE1IDIzOjIyOjM4 ICswMDAwCisrKyBzcmMvZGF0YS5jCTIwMTEtMDMtMjcgMDI6MTI6MzYgKzAwMDAKQEAgLTI0 NzQsMTMgKzI0NzQsMTMgQEAKICAgICBBbWluCiAgIH07CiAKLXN0YXRpYyBMaXNwX09iamVj dCBmbG9hdF9hcml0aF9kcml2ZXIgKGRvdWJsZSwgaW50LCBlbnVtIGFyaXRob3AsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIExpc3BfT2JqZWN0ICop Oworc3RhdGljIExpc3BfT2JqZWN0IGZsb2F0X2FyaXRoX2RyaXZlciAoZG91YmxlLCBzaXpl X3QsIGVudW0gYXJpdGhvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCwgTGlzcF9PYmplY3QgKik7CiBzdGF0aWMgTGlzcF9PYmplY3QKLWFyaXRo X2RyaXZlciAoZW51bSBhcml0aG9wIGNvZGUsIGludCBuYXJncywgcmVnaXN0ZXIgTGlzcF9P YmplY3QgKmFyZ3MpCithcml0aF9kcml2ZXIgKGVudW0gYXJpdGhvcCBjb2RlLCBzaXplX3Qg bmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdzKQogewogICByZWdpc3RlciBMaXNw X09iamVjdCB2YWw7Ci0gIHJlZ2lzdGVyIGludCBhcmdudW07CisgIHJlZ2lzdGVyIHNpemVf dCBhcmdudW07CiAgIHJlZ2lzdGVyIEVNQUNTX0lOVCBhY2N1bSA9IDA7CiAgIHJlZ2lzdGVy IEVNQUNTX0lOVCBuZXh0OwogCkBAIC0yNTYyLDcgKzI1NjIsOCBAQAogI2RlZmluZSBpc25h bih4KSAoKHgpICE9ICh4KSkKIAogc3RhdGljIExpc3BfT2JqZWN0Ci1mbG9hdF9hcml0aF9k cml2ZXIgKGRvdWJsZSBhY2N1bSwgcmVnaXN0ZXIgaW50IGFyZ251bSwgZW51bSBhcml0aG9w IGNvZGUsIGludCBuYXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3MpCitmbG9hdF9h cml0aF9kcml2ZXIgKGRvdWJsZSBhY2N1bSwgcmVnaXN0ZXIgc2l6ZV90IGFyZ251bSwgZW51 bSBhcml0aG9wIGNvZGUsCisJCSAgICBzaXplX3QgbmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2Jq ZWN0ICphcmdzKQogewogICByZWdpc3RlciBMaXNwX09iamVjdCB2YWw7CiAgIGRvdWJsZSBu ZXh0OwpAQCAtMjYyNCw3ICsyNjI1LDcgQEAKIERFRlVOICgiKyIsIEZwbHVzLCBTcGx1cywg MCwgTUFOWSwgMCwKICAgICAgICBkb2M6IC8qIFJldHVybiBzdW0gb2YgYW55IG51bWJlciBv ZiBhcmd1bWVudHMsIHdoaWNoIGFyZSBudW1iZXJzIG9yIG1hcmtlcnMuCiB1c2FnZTogKCsg JnJlc3QgTlVNQkVSUy1PUi1NQVJLRVJTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIExpc3BfT2Jq ZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKIHsKICAg cmV0dXJuIGFyaXRoX2RyaXZlciAoQWFkZCwgbmFyZ3MsIGFyZ3MpOwogfQpAQCAtMjYzNCw3 ICsyNjM1LDcgQEAKIFdpdGggb25lIGFyZywgbmVnYXRlcyBpdC4gIFdpdGggbW9yZSB0aGFu IG9uZSBhcmcsCiBzdWJ0cmFjdHMgYWxsIGJ1dCB0aGUgZmlyc3QgZnJvbSB0aGUgZmlyc3Qu CiB1c2FnZTogKC0gJm9wdGlvbmFsIE5VTUJFUi1PUi1NQVJLRVIgJnJlc3QgTU9SRS1OVU1C RVJTLU9SLU1BUktFUlMpICAqLykKLSAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3Mp CisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQogewogICByZXR1cm4gYXJp dGhfZHJpdmVyIChBc3ViLCBuYXJncywgYXJncyk7CiB9CkBAIC0yNjQyLDcgKzI2NDMsNyBA QAogREVGVU4gKCIqIiwgRnRpbWVzLCBTdGltZXMsIDAsIE1BTlksIDAsCiAgICAgICAgZG9j OiAvKiBSZXR1cm4gcHJvZHVjdCBvZiBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cywgd2hpY2gg YXJlIG51bWJlcnMgb3IgbWFya2Vycy4KIHVzYWdlOiAoKiAmcmVzdCBOVU1CRVJTLU9SLU1B UktFUlMpICAqLykKLSAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXpl X3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQogewogICByZXR1cm4gYXJpdGhfZHJpdmVy IChBbXVsdCwgbmFyZ3MsIGFyZ3MpOwogfQpAQCAtMjY1MSw5ICsyNjUyLDkgQEAKICAgICAg ICBkb2M6IC8qIFJldHVybiBmaXJzdCBhcmd1bWVudCBkaXZpZGVkIGJ5IGFsbCB0aGUgcmVt YWluaW5nIGFyZ3VtZW50cy4KIFRoZSBhcmd1bWVudHMgbXVzdCBiZSBudW1iZXJzIG9yIG1h cmtlcnMuCiB1c2FnZTogKC8gRElWSURFTkQgRElWSVNPUiAmcmVzdCBESVZJU09SUykgICov KQotICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywg TGlzcF9PYmplY3QgKmFyZ3MpCiB7Ci0gIGludCBhcmdudW07CisgIHNpemVfdCBhcmdudW07 CiAgIGZvciAoYXJnbnVtID0gMjsgYXJnbnVtIDwgbmFyZ3M7IGFyZ251bSsrKQogICAgIGlm IChGTE9BVFAgKGFyZ3NbYXJnbnVtXSkpCiAgICAgICByZXR1cm4gZmxvYXRfYXJpdGhfZHJp dmVyICgwLCAwLCBBZGl2LCBuYXJncywgYXJncyk7CkBAIC0yNzM1LDcgKzI3MzYsNyBAQAog ICAgICAgIGRvYzogLyogUmV0dXJuIGxhcmdlc3Qgb2YgYWxsIHRoZSBhcmd1bWVudHMgKHdo aWNoIG11c3QgYmUgbnVtYmVycyBvciBtYXJrZXJzKS4KIFRoZSB2YWx1ZSBpcyBhbHdheXMg YSBudW1iZXI7IG1hcmtlcnMgYXJlIGNvbnZlcnRlZCB0byBudW1iZXJzLgogdXNhZ2U6ICht YXggTlVNQkVSLU9SLU1BUktFUiAmcmVzdCBOVU1CRVJTLU9SLU1BUktFUlMpICAqLykKLSAg KGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3Bf T2JqZWN0ICphcmdzKQogewogICByZXR1cm4gYXJpdGhfZHJpdmVyIChBbWF4LCBuYXJncywg YXJncyk7CiB9CkBAIC0yNzQ0LDcgKzI3NDUsNyBAQAogICAgICAgIGRvYzogLyogUmV0dXJu IHNtYWxsZXN0IG9mIGFsbCB0aGUgYXJndW1lbnRzICh3aGljaCBtdXN0IGJlIG51bWJlcnMg b3IgbWFya2VycykuCiBUaGUgdmFsdWUgaXMgYWx3YXlzIGEgbnVtYmVyOyBtYXJrZXJzIGFy ZSBjb252ZXJ0ZWQgdG8gbnVtYmVycy4KIHVzYWdlOiAobWluIE5VTUJFUi1PUi1NQVJLRVIg JnJlc3QgTlVNQkVSUy1PUi1NQVJLRVJTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIExpc3BfT2Jq ZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKIHsKICAg cmV0dXJuIGFyaXRoX2RyaXZlciAoQW1pbiwgbmFyZ3MsIGFyZ3MpOwogfQpAQCAtMjc1Myw3 ICsyNzU0LDcgQEAKICAgICAgICBkb2M6IC8qIFJldHVybiBiaXR3aXNlLWFuZCBvZiBhbGwg dGhlIGFyZ3VtZW50cy4KIEFyZ3VtZW50cyBtYXkgYmUgaW50ZWdlcnMsIG9yIG1hcmtlcnMg Y29udmVydGVkIHRvIGludGVnZXJzLgogdXNhZ2U6IChsb2dhbmQgJnJlc3QgSU5UUy1PUi1N QVJLRVJTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQorICAoc2l6 ZV90IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKIHsKICAgcmV0dXJuIGFyaXRoX2RyaXZl ciAoQWxvZ2FuZCwgbmFyZ3MsIGFyZ3MpOwogfQpAQCAtMjc2Miw3ICsyNzYzLDcgQEAKICAg ICAgICBkb2M6IC8qIFJldHVybiBiaXR3aXNlLW9yIG9mIGFsbCB0aGUgYXJndW1lbnRzLgog QXJndW1lbnRzIG1heSBiZSBpbnRlZ2Vycywgb3IgbWFya2VycyBjb252ZXJ0ZWQgdG8gaW50 ZWdlcnMuCiB1c2FnZTogKGxvZ2lvciAmcmVzdCBJTlRTLU9SLU1BUktFUlMpICAqLykKLSAg KGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3Bf T2JqZWN0ICphcmdzKQogewogICByZXR1cm4gYXJpdGhfZHJpdmVyIChBbG9naW9yLCBuYXJn cywgYXJncyk7CiB9CkBAIC0yNzcxLDcgKzI3NzIsNyBAQAogICAgICAgIGRvYzogLyogUmV0 dXJuIGJpdHdpc2UtZXhjbHVzaXZlLW9yIG9mIGFsbCB0aGUgYXJndW1lbnRzLgogQXJndW1l bnRzIG1heSBiZSBpbnRlZ2Vycywgb3IgbWFya2VycyBjb252ZXJ0ZWQgdG8gaW50ZWdlcnMu CiB1c2FnZTogKGxvZ3hvciAmcmVzdCBJTlRTLU9SLU1BUktFUlMpICAqLykKLSAgKGludCBu YXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0 ICphcmdzKQogewogICByZXR1cm4gYXJpdGhfZHJpdmVyIChBbG9neG9yLCBuYXJncywgYXJn cyk7CiB9Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2RidXNiaW5kLmMnCi0tLSBzcmMvZGJ1 c2JpbmQuYwkyMDExLTAzLTE0IDAzOjI1OjUxICswMDAwCisrKyBzcmMvZGJ1c2JpbmQuYwky MDExLTAzLTI3IDAyOjEyOjM2ICswMDAwCkBAIC0xMDUxLDcgKzEwNTEsNyBAQAogICA9PiAi aTY4NiIKIAogdXNhZ2U6IChkYnVzLWNhbGwtbWV0aG9kIEJVUyBTRVJWSUNFIFBBVEggSU5U RVJGQUNFIE1FVEhPRCAmb3B0aW9uYWwgOnRpbWVvdXQgVElNRU9VVCAmcmVzdCBBUkdTKSAg Ki8pCi0gIChpbnQgbmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdzKQorICAoc2l6 ZV90IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVjdCAqYXJncykKIHsKICAgTGlzcF9PYmpl Y3QgYnVzLCBzZXJ2aWNlLCBwYXRoLCBpbnRlcmZhY2UsIG1ldGhvZDsKICAgTGlzcF9PYmpl Y3QgcmVzdWx0OwpAQCAtMTA2Myw3ICsxMDYzLDcgQEAKICAgREJ1c0Vycm9yIGRlcnJvcjsK ICAgdW5zaWduZWQgaW50IGR0eXBlOwogICBpbnQgdGltZW91dCA9IC0xOwotICBpbnQgaSA9 IDU7CisgIHNpemVfdCBpID0gNTsKICAgY2hhciBzaWduYXR1cmVbREJVU19NQVhJTVVNX1NJ R05BVFVSRV9MRU5HVEhdOwogCiAgIC8qIENoZWNrIHBhcmFtZXRlcnMuICAqLwpAQCAtMTEx Niw3ICsxMTE2LDcgQEAKIAl7CiAJICBYRF9ERUJVR19WQUxJRF9MSVNQX09CSkVDVF9QIChh cmdzW2ldKTsKIAkgIFhEX0RFQlVHX1ZBTElEX0xJU1BfT0JKRUNUX1AgKGFyZ3NbaSsxXSk7 Ci0JICBYRF9ERUJVR19NRVNTQUdFICgiUGFyYW1ldGVyJWQgJXMgJXMiLCBpLTQsCisJICBY RF9ERUJVR19NRVNTQUdFICgiUGFyYW1ldGVyJWx1ICVzICVzIiwgKHVuc2lnbmVkIGxvbmcp IChpLTQpLAogCQkJICAgIFNEQVRBIChmb3JtYXQyICgiJXMiLCBhcmdzW2ldLCBRbmlsKSks CiAJCQkgICAgU0RBVEEgKGZvcm1hdDIgKCIlcyIsIGFyZ3NbaSsxXSwgUW5pbCkpKTsKIAkg ICsraTsKQEAgLTExMjQsNyArMTEyNCw3IEBACiAgICAgICBlbHNlCiAJewogCSAgWERfREVC VUdfVkFMSURfTElTUF9PQkpFQ1RfUCAoYXJnc1tpXSk7Ci0JICBYRF9ERUJVR19NRVNTQUdF ICgiUGFyYW1ldGVyJWQgJXMiLCBpLTQsCisJICBYRF9ERUJVR19NRVNTQUdFICgiUGFyYW1l dGVyJWx1ICVzIiwgKHVuc2lnbmVkIGxvbmcpIChpLTQpLAogCQkJICAgIFNEQVRBIChmb3Jt YXQyICgiJXMiLCBhcmdzW2ldLCBRbmlsKSkpOwogCX0KIApAQCAtMTIzMyw3ICsxMjMzLDcg QEAKICAgLXwgaTY4NgogCiB1c2FnZTogKGRidXMtY2FsbC1tZXRob2QtYXN5bmNocm9ub3Vz bHkgQlVTIFNFUlZJQ0UgUEFUSCBJTlRFUkZBQ0UgTUVUSE9EIEhBTkRMRVIgJm9wdGlvbmFs IDp0aW1lb3V0IFRJTUVPVVQgJnJlc3QgQVJHUykgICovKQotICAoaW50IG5hcmdzLCByZWdp c3RlciBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgcmVnaXN0ZXIgTGlz cF9PYmplY3QgKmFyZ3MpCiB7CiAgIExpc3BfT2JqZWN0IGJ1cywgc2VydmljZSwgcGF0aCwg aW50ZXJmYWNlLCBtZXRob2QsIGhhbmRsZXI7CiAgIExpc3BfT2JqZWN0IHJlc3VsdDsKQEAg LTEyNDMsNyArMTI0Myw3IEBACiAgIERCdXNNZXNzYWdlSXRlciBpdGVyOwogICB1bnNpZ25l ZCBpbnQgZHR5cGU7CiAgIGludCB0aW1lb3V0ID0gLTE7Ci0gIGludCBpID0gNjsKKyAgc2l6 ZV90IGkgPSA2OwogICBjaGFyIHNpZ25hdHVyZVtEQlVTX01BWElNVU1fU0lHTkFUVVJFX0xF TkdUSF07CiAKICAgLyogQ2hlY2sgcGFyYW1ldGVycy4gICovCkBAIC0xMjk4LDcgKzEyOTgs NyBAQAogCXsKIAkgIFhEX0RFQlVHX1ZBTElEX0xJU1BfT0JKRUNUX1AgKGFyZ3NbaV0pOwog CSAgWERfREVCVUdfVkFMSURfTElTUF9PQkpFQ1RfUCAoYXJnc1tpKzFdKTsKLQkgIFhEX0RF QlVHX01FU1NBR0UgKCJQYXJhbWV0ZXIlZCAlcyAlcyIsIGktNCwKKwkgIFhEX0RFQlVHX01F U1NBR0UgKCJQYXJhbWV0ZXIlbHUgJXMgJXMiLCAodW5zaWduZWQgbG9uZykgKGktNCksCiAJ CQkgICAgU0RBVEEgKGZvcm1hdDIgKCIlcyIsIGFyZ3NbaV0sIFFuaWwpKSwKIAkJCSAgICBT REFUQSAoZm9ybWF0MiAoIiVzIiwgYXJnc1tpKzFdLCBRbmlsKSkpOwogCSAgKytpOwpAQCAt MTMwNiw3ICsxMzA2LDcgQEAKICAgICAgIGVsc2UKIAl7CiAJICBYRF9ERUJVR19WQUxJRF9M SVNQX09CSkVDVF9QIChhcmdzW2ldKTsKLQkgIFhEX0RFQlVHX01FU1NBR0UgKCJQYXJhbWV0 ZXIlZCAlcyIsIGktNCwKKwkgIFhEX0RFQlVHX01FU1NBR0UgKCJQYXJhbWV0ZXIlbHUgJXMi LCAodW5zaWduZWQgbG9uZykgKGkgLSA0KSwKIAkJCSAgICBTREFUQSAoZm9ybWF0MiAoIiVz IiwgYXJnc1tpXSwgUW5pbCkpKTsKIAl9CiAKQEAgLTEzNTcsNyArMTM1Nyw3IEBACiBUaGlz IGlzIGFuIGludGVybmFsIGZ1bmN0aW9uLCBpdCBzaGFsbCBub3QgYmUgdXNlZCBvdXRzaWRl IGRidXMuZWwuCiAKIHVzYWdlOiAoZGJ1cy1tZXRob2QtcmV0dXJuLWludGVybmFsIEJVUyBT RVJJQUwgU0VSVklDRSAmcmVzdCBBUkdTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIHJlZ2lzdGVy IExpc3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCByZWdpc3RlciBMaXNwX09i amVjdCAqYXJncykKIHsKICAgTGlzcF9PYmplY3QgYnVzLCBzZXJpYWwsIHNlcnZpY2U7CiAg IHN0cnVjdCBnY3BybyBnY3BybzEsIGdjcHJvMiwgZ2Nwcm8zOwpAQCAtMTM2NSw3ICsxMzY1 LDcgQEAKICAgREJ1c01lc3NhZ2UgKmRtZXNzYWdlOwogICBEQnVzTWVzc2FnZUl0ZXIgaXRl cjsKICAgdW5zaWduZWQgaW50IGR0eXBlOwotICBpbnQgaTsKKyAgc2l6ZV90IGk7CiAgIGNo YXIgc2lnbmF0dXJlW0RCVVNfTUFYSU1VTV9TSUdOQVRVUkVfTEVOR1RIXTsKIAogICAvKiBD aGVjayBwYXJhbWV0ZXJzLiAgKi8KQEAgLTE0MDUsNyArMTQwNSw3IEBACiAJewogCSAgWERf REVCVUdfVkFMSURfTElTUF9PQkpFQ1RfUCAoYXJnc1tpXSk7CiAJICBYRF9ERUJVR19WQUxJ RF9MSVNQX09CSkVDVF9QIChhcmdzW2krMV0pOwotCSAgWERfREVCVUdfTUVTU0FHRSAoIlBh cmFtZXRlciVkICVzICVzIiwgaS0yLAorCSAgWERfREVCVUdfTUVTU0FHRSAoIlBhcmFtZXRl ciVsdSAlcyAlcyIsICh1bnNpZ25lZCBsb25nKSAoaS0yKSwKIAkJCSAgICBTREFUQSAoZm9y bWF0MiAoIiVzIiwgYXJnc1tpXSwgUW5pbCkpLAogCQkJICAgIFNEQVRBIChmb3JtYXQyICgi JXMiLCBhcmdzW2krMV0sIFFuaWwpKSk7CiAJICArK2k7CkBAIC0xNDEzLDcgKzE0MTMsNyBA QAogICAgICAgZWxzZQogCXsKIAkgIFhEX0RFQlVHX1ZBTElEX0xJU1BfT0JKRUNUX1AgKGFy Z3NbaV0pOwotCSAgWERfREVCVUdfTUVTU0FHRSAoIlBhcmFtZXRlciVkICVzIiwgaS0yLAor CSAgWERfREVCVUdfTUVTU0FHRSAoIlBhcmFtZXRlciVsdSAlcyIsICh1bnNpZ25lZCBsb25n KSAoaS0yKSwKIAkJCSAgICBTREFUQSAoZm9ybWF0MiAoIiVzIiwgYXJnc1tpXSwgUW5pbCkp KTsKIAl9CiAKQEAgLTE0NDUsNyArMTQ0NSw3IEBACiBUaGlzIGlzIGFuIGludGVybmFsIGZ1 bmN0aW9uLCBpdCBzaGFsbCBub3QgYmUgdXNlZCBvdXRzaWRlIGRidXMuZWwuCiAKIHVzYWdl OiAoZGJ1cy1tZXRob2QtZXJyb3ItaW50ZXJuYWwgQlVTIFNFUklBTCBTRVJWSUNFICZyZXN0 IEFSR1MpICAqLykKLSAgKGludCBuYXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3Mp CisgIChzaXplX3QgbmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdzKQogewogICBM aXNwX09iamVjdCBidXMsIHNlcmlhbCwgc2VydmljZTsKICAgc3RydWN0IGdjcHJvIGdjcHJv MSwgZ2Nwcm8yLCBnY3BybzM7CkBAIC0xNDUzLDcgKzE0NTMsNyBAQAogICBEQnVzTWVzc2Fn ZSAqZG1lc3NhZ2U7CiAgIERCdXNNZXNzYWdlSXRlciBpdGVyOwogICB1bnNpZ25lZCBpbnQg ZHR5cGU7Ci0gIGludCBpOworICBzaXplX3QgaTsKICAgY2hhciBzaWduYXR1cmVbREJVU19N QVhJTVVNX1NJR05BVFVSRV9MRU5HVEhdOwogCiAgIC8qIENoZWNrIHBhcmFtZXRlcnMuICAq LwpAQCAtMTQ5NCw3ICsxNDk0LDcgQEAKIAl7CiAJICBYRF9ERUJVR19WQUxJRF9MSVNQX09C SkVDVF9QIChhcmdzW2ldKTsKIAkgIFhEX0RFQlVHX1ZBTElEX0xJU1BfT0JKRUNUX1AgKGFy Z3NbaSsxXSk7Ci0JICBYRF9ERUJVR19NRVNTQUdFICgiUGFyYW1ldGVyJWQgJXMgJXMiLCBp LTIsCisJICBYRF9ERUJVR19NRVNTQUdFICgiUGFyYW1ldGVyJWx1ICVzICVzIiwgKHVuc2ln bmVkIGxvbmcpIChpLTIpLAogCQkJICAgIFNEQVRBIChmb3JtYXQyICgiJXMiLCBhcmdzW2ld LCBRbmlsKSksCiAJCQkgICAgU0RBVEEgKGZvcm1hdDIgKCIlcyIsIGFyZ3NbaSsxXSwgUW5p bCkpKTsKIAkgICsraTsKQEAgLTE1MDIsNyArMTUwMiw3IEBACiAgICAgICBlbHNlCiAJewog CSAgWERfREVCVUdfVkFMSURfTElTUF9PQkpFQ1RfUCAoYXJnc1tpXSk7Ci0JICBYRF9ERUJV R19NRVNTQUdFICgiUGFyYW1ldGVyJWQgJXMiLCBpLTIsCisJICBYRF9ERUJVR19NRVNTQUdF ICgiUGFyYW1ldGVyJWx1ICVzIiwgKHVuc2lnbmVkIGxvbmcpIChpLTIpLAogCQkJICAgIFNE QVRBIChmb3JtYXQyICgiJXMiLCBhcmdzW2ldLCBRbmlsKSkpOwogCX0KIApAQCAtMTU1Nyw3 ICsxNTU3LDcgQEAKICAgIm9yZy5nbnUuRW1hY3MuRmlsZU1hbmFnZXIiICJGaWxlTW9kaWZp ZWQiICIvaG9tZS9hbGJpbnVzLy5lbWFjcyIpCiAKIHVzYWdlOiAoZGJ1cy1zZW5kLXNpZ25h bCBCVVMgU0VSVklDRSBQQVRIIElOVEVSRkFDRSBTSUdOQUwgJnJlc3QgQVJHUykgICovKQot ICAoaW50IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBu YXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIExpc3BfT2JqZWN0IGJ1 cywgc2VydmljZSwgcGF0aCwgaW50ZXJmYWNlLCBzaWduYWw7CiAgIHN0cnVjdCBnY3BybyBn Y3BybzEsIGdjcHJvMiwgZ2Nwcm8zLCBnY3BybzQsIGdjcHJvNTsKQEAgLTE1NjUsNyArMTU2 NSw3IEBACiAgIERCdXNNZXNzYWdlICpkbWVzc2FnZTsKICAgREJ1c01lc3NhZ2VJdGVyIGl0 ZXI7CiAgIHVuc2lnbmVkIGludCBkdHlwZTsKLSAgaW50IGk7CisgIHNpemVfdCBpOwogICBj aGFyIHNpZ25hdHVyZVtEQlVTX01BWElNVU1fU0lHTkFUVVJFX0xFTkdUSF07CiAKICAgLyog Q2hlY2sgcGFyYW1ldGVycy4gICovCkBAIC0xNjA5LDcgKzE2MDksNyBAQAogCXsKIAkgIFhE X0RFQlVHX1ZBTElEX0xJU1BfT0JKRUNUX1AgKGFyZ3NbaV0pOwogCSAgWERfREVCVUdfVkFM SURfTElTUF9PQkpFQ1RfUCAoYXJnc1tpKzFdKTsKLQkgIFhEX0RFQlVHX01FU1NBR0UgKCJQ YXJhbWV0ZXIlZCAlcyAlcyIsIGktNCwKKwkgIFhEX0RFQlVHX01FU1NBR0UgKCJQYXJhbWV0 ZXIlbHUgJXMgJXMiLCAodW5zaWduZWQgbG9uZykgKGktNCksCiAJCQkgICAgU0RBVEEgKGZv cm1hdDIgKCIlcyIsIGFyZ3NbaV0sIFFuaWwpKSwKIAkJCSAgICBTREFUQSAoZm9ybWF0MiAo IiVzIiwgYXJnc1tpKzFdLCBRbmlsKSkpOwogCSAgKytpOwpAQCAtMTYxNyw3ICsxNjE3LDcg QEAKICAgICAgIGVsc2UKIAl7CiAJICBYRF9ERUJVR19WQUxJRF9MSVNQX09CSkVDVF9QIChh cmdzW2ldKTsKLQkgIFhEX0RFQlVHX01FU1NBR0UgKCJQYXJhbWV0ZXIlZCAlcyIsIGktNCwK KwkgIFhEX0RFQlVHX01FU1NBR0UgKCJQYXJhbWV0ZXIlbHUgJXMiLCAodW5zaWduZWQgbG9u ZykgKGktNCksCiAJCQkgICAgU0RBVEEgKGZvcm1hdDIgKCIlcyIsIGFyZ3NbaV0sIFFuaWwp KSk7CiAJfQogCkBAIC0xODg1LDExICsxODg1LDExIEBACiAgID0+IDphbHJlYWR5LW93bmVy LgogCiB1c2FnZTogKGRidXMtcmVnaXN0ZXItc2VydmljZSBCVVMgU0VSVklDRSAmcmVzdCBG TEFHUykgICovKQotICAoaW50IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVjdCAqYXJncykK KyAgKHNpemVfdCBuYXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIExp c3BfT2JqZWN0IGJ1cywgc2VydmljZTsKICAgREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb247 Ci0gIHVuc2lnbmVkIGludCBpOworICBzaXplX3QgaTsKICAgdW5zaWduZWQgaW50IHZhbHVl OwogICB1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOwogICBpbnQgcmVzdWx0OwpAQCAtMTk4NSwx MyArMTk4NSwxMyBAQAogYGRidXMtdW5yZWdpc3Rlci1vYmplY3QnIGZvciByZW1vdmluZyB0 aGUgcmVnaXN0cmF0aW9uLgogCiB1c2FnZTogKGRidXMtcmVnaXN0ZXItc2lnbmFsIEJVUyBT RVJWSUNFIFBBVEggSU5URVJGQUNFIFNJR05BTCBIQU5ETEVSICZyZXN0IEFSR1MpICovKQot ICAoaW50IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBu YXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIExpc3BfT2JqZWN0IGJ1 cywgc2VydmljZSwgcGF0aCwgaW50ZXJmYWNlLCBzaWduYWwsIGhhbmRsZXI7CiAgIHN0cnVj dCBnY3BybyBnY3BybzEsIGdjcHJvMiwgZ2Nwcm8zLCBnY3BybzQsIGdjcHJvNSwgZ2Nwcm82 OwogICBMaXNwX09iamVjdCB1bmFtZSwga2V5LCBrZXkxLCB2YWx1ZTsKICAgREJ1c0Nvbm5l Y3Rpb24gKmNvbm5lY3Rpb247Ci0gIGludCBpOworICBzaXplX3QgaTsKICAgY2hhciBydWxl W0RCVVNfTUFYSU1VTV9NQVRDSF9SVUxFX0xFTkdUSF07CiAgIGNoYXIgeFtEQlVTX01BWElN VU1fTUFUQ0hfUlVMRV9MRU5HVEhdOwogICBEQnVzRXJyb3IgZGVycm9yOwpAQCAtMjA2MSw3 ICsyMDYxLDggQEAKIAlpZiAoIU5JTFAgKGFyZ3NbaV0pKQogCSAgewogCSAgICBDSEVDS19T VFJJTkcgKGFyZ3NbaV0pOwotCSAgICBzcHJpbnRmICh4LCAiLGFyZyVkPSclcyciLCBpLTYs IFNEQVRBIChhcmdzW2ldKSk7CisJICAgIHNwcmludGYgKHgsICIsYXJnJWx1PSclcyciLCAo dW5zaWduZWQgbG9uZykgKGktNiksCisJCSAgICAgU0RBVEEgKGFyZ3NbaV0pKTsKIAkgICAg c3RyY2F0IChydWxlLCB4KTsKIAkgIH0KIAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9lZGl0 Zm5zLmMnCi0tLSBzcmMvZWRpdGZucy5jCTIwMTEtMDMtMjMgMTA6MDY6NTcgKzAwMDAKKysr IHNyYy9lZGl0Zm5zLmMJMjAxMS0wMy0yNyAwMjoxMjozNiArMDAwMApAQCAtMTAxLDcgKzEw MSw3IEBACiAJCQkJICAgICB2b2lkICgqKSAoTGlzcF9PYmplY3QsIEVNQUNTX0lOVCwKIAkJ CQkJICAgICAgIEVNQUNTX0lOVCwgRU1BQ1NfSU5ULAogCQkJCQkgICAgICAgRU1BQ1NfSU5U LCBpbnQpLAotCQkJCSAgICAgaW50LCBpbnQsIExpc3BfT2JqZWN0ICopOworCQkJCSAgICAg aW50LCBzaXplX3QsIExpc3BfT2JqZWN0ICopOwogc3RhdGljIExpc3BfT2JqZWN0IHN1YnN0 X2NoYXJfaW5fcmVnaW9uX3Vud2luZCAoTGlzcF9PYmplY3QpOwogc3RhdGljIExpc3BfT2Jq ZWN0IHN1YnN0X2NoYXJfaW5fcmVnaW9uX3Vud2luZF8xIChMaXNwX09iamVjdCk7CiBzdGF0 aWMgdm9pZCB0cmFuc3Bvc2VfbWFya2VycyAoRU1BQ1NfSU5ULCBFTUFDU19JTlQsIEVNQUNT X0lOVCwgRU1BQ1NfSU5ULApAQCAtMTg3MSw3ICsxODcxLDcgQEAKIHllYXIgdmFsdWVzIGFz IGxvdyBhcyAxOTAxIGRvIHdvcmsuCiAKIHVzYWdlOiAoZW5jb2RlLXRpbWUgU0VDT05EIE1J TlVURSBIT1VSIERBWSBNT05USCBZRUFSICZvcHRpb25hbCBaT05FKSAgKi8pCi0gIChpbnQg bmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCBy ZWdpc3RlciBMaXNwX09iamVjdCAqYXJncykKIHsKICAgdGltZV90IHZhbHVlOwogICBzdHJ1 Y3QgdG0gdG07CkBAIC0yMjA3LDkgKzIyMDcsOSBAQAogCQkJIHZvaWQgKCppbnNlcnRfZnJv bV9zdHJpbmdfZnVuYykKIAkJCSAgICAgIChMaXNwX09iamVjdCwgRU1BQ1NfSU5ULCBFTUFD U19JTlQsCiAJCQkgICAgICAgRU1BQ1NfSU5ULCBFTUFDU19JTlQsIGludCksCi0JCQkgaW50 IGluaGVyaXQsIGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisJCQkgaW50IGluaGVy aXQsIHNpemVfdCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7Ci0gIHJlZ2lzdGVyIGlu dCBhcmdudW07CisgIHJlZ2lzdGVyIHNpemVfdCBhcmdudW07CiAgIHJlZ2lzdGVyIExpc3Bf T2JqZWN0IHZhbDsKIAogICBmb3IgKGFyZ251bSA9IDA7IGFyZ251bSA8IG5hcmdzOyBhcmdu dW0rKykKQEAgLTIyNzIsNyArMjI3Miw3IEBACiBhbmQgaW5zZXJ0IHRoZSByZXN1bHQuCiAK IHVzYWdlOiAoaW5zZXJ0ICZyZXN0IEFSR1MpICAqLykKLSAgKGludCBuYXJncywgcmVnaXN0 ZXIgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIHJlZ2lzdGVyIExpc3Bf T2JqZWN0ICphcmdzKQogewogICBnZW5lcmFsX2luc2VydF9mdW5jdGlvbiAoaW5zZXJ0LCBp bnNlcnRfZnJvbV9zdHJpbmcsIDAsIG5hcmdzLCBhcmdzKTsKICAgcmV0dXJuIFFuaWw7CkBA IC0yMjkxLDcgKzIyOTEsNyBAQAogdG8gdW5pYnl0ZSBmb3IgaW5zZXJ0aW9uLgogCiB1c2Fn ZTogKGluc2VydC1hbmQtaW5oZXJpdCAmcmVzdCBBUkdTKSAgKi8pCi0gIChpbnQgbmFyZ3Ms IHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCByZWdpc3Rl ciBMaXNwX09iamVjdCAqYXJncykKIHsKICAgZ2VuZXJhbF9pbnNlcnRfZnVuY3Rpb24gKGlu c2VydF9hbmRfaW5oZXJpdCwgaW5zZXJ0X2Zyb21fc3RyaW5nLCAxLAogCQkJICAgbmFyZ3Ms IGFyZ3MpOwpAQCAtMjMwOCw3ICsyMzA4LDcgQEAKIHRvIHVuaWJ5dGUgZm9yIGluc2VydGlv bi4KIAogdXNhZ2U6IChpbnNlcnQtYmVmb3JlLW1hcmtlcnMgJnJlc3QgQVJHUykgICovKQot ICAoaW50IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBu YXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIGdlbmVyYWxfaW5zZXJ0 X2Z1bmN0aW9uIChpbnNlcnRfYmVmb3JlX21hcmtlcnMsCiAJCQkgICBpbnNlcnRfZnJvbV9z dHJpbmdfYmVmb3JlX21hcmtlcnMsIDAsCkBAIC0yMzI3LDcgKzIzMjcsNyBAQAogdG8gdW5p Ynl0ZSBmb3IgaW5zZXJ0aW9uLgogCiB1c2FnZTogKGluc2VydC1iZWZvcmUtbWFya2Vycy1h bmQtaW5oZXJpdCAmcmVzdCBBUkdTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIHJlZ2lzdGVyIExp c3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCByZWdpc3RlciBMaXNwX09iamVj dCAqYXJncykKIHsKICAgZ2VuZXJhbF9pbnNlcnRfZnVuY3Rpb24gKGluc2VydF9iZWZvcmVf bWFya2Vyc19hbmRfaW5oZXJpdCwKIAkJCSAgIGluc2VydF9mcm9tX3N0cmluZ19iZWZvcmVf bWFya2VycywgMSwKQEAgLTMzOTksNyArMzM5OSw3IEBACiBhbHNvIGBjdXJyZW50LW1lc3Nh Z2UnLgogCiB1c2FnZTogKG1lc3NhZ2UgRk9STUFULVNUUklORyAmcmVzdCBBUkdTKSAgKi8p Ci0gIChpbnQgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCBM aXNwX09iamVjdCAqYXJncykKIHsKICAgaWYgKE5JTFAgKGFyZ3NbMF0pCiAgICAgICB8fCAo U1RSSU5HUCAoYXJnc1swXSkKQEAgLTM0MjcsNyArMzQyNyw3IEBACiBtZXNzYWdlOyBsZXQg dGhlIG1pbmlidWZmZXIgY29udGVudHMgc2hvdy4KIAogdXNhZ2U6IChtZXNzYWdlLWJveCBG T1JNQVQtU1RSSU5HICZyZXN0IEFSR1MpICAqLykKLSAgKGludCBuYXJncywgTGlzcF9PYmpl Y3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQogewogICBp ZiAoTklMUCAoYXJnc1swXSkpCiAgICAgewpAQCAtMzQ4NCw3ICszNDg0LDcgQEAKIG1lc3Nh Z2U7IGxldCB0aGUgbWluaWJ1ZmZlciBjb250ZW50cyBzaG93LgogCiB1c2FnZTogKG1lc3Nh Z2Utb3ItYm94IEZPUk1BVC1TVFJJTkcgJnJlc3QgQVJHUykgICovKQotICAoaW50IG5hcmdz LCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgTGlzcF9PYmplY3QgKmFy Z3MpCiB7CiAjaWZkZWYgSEFWRV9NRU5VUwogICBpZiAoKE5JTFAgKGxhc3Rfbm9ubWVudV9l dmVudCkgfHwgQ09OU1AgKGxhc3Rfbm9ubWVudV9ldmVudCkpCkBAIC0zNTA4LDE0ICszNTA4 LDE0IEBACiBSZW1haW5pbmcgYXJndW1lbnRzIGZvcm0gYSBzZXF1ZW5jZSBvZiBQUk9QRVJU WSBWQUxVRSBwYWlycyBmb3IgdGV4dAogcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIHJlc3Vs dC4KIHVzYWdlOiAocHJvcGVydGl6ZSBTVFJJTkcgJnJlc3QgUFJPUEVSVElFUykgICovKQot ICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgTGlz cF9PYmplY3QgKmFyZ3MpCiB7CiAgIExpc3BfT2JqZWN0IHByb3BlcnRpZXMsIHN0cmluZzsK ICAgc3RydWN0IGdjcHJvIGdjcHJvMSwgZ2Nwcm8yOwotICBpbnQgaTsKKyAgc2l6ZV90IGk7 CiAKICAgLyogTnVtYmVyIG9mIGFyZ3MgbXVzdCBiZSBvZGQuICAqLwotICBpZiAoKG5hcmdz ICYgMSkgPT0gMCB8fCBuYXJncyA8IDEpCisgIGlmICgobmFyZ3MgJiAxKSA9PSAwKQogICAg IGVycm9yICgiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyIpOwogCiAgIHByb3BlcnRpZXMg PSBzdHJpbmcgPSBRbmlsOwpAQCAtMzU5MCwxMCArMzU5MCwxMCBAQAogc3BlY2lmaWVyIHRy dW5jYXRlcyB0aGUgc3RyaW5nIHRvIHRoZSBnaXZlbiB3aWR0aC4KIAogdXNhZ2U6IChmb3Jt YXQgU1RSSU5HICZyZXN0IE9CSkVDVFMpICAqLykKLSAgKGludCBuYXJncywgcmVnaXN0ZXIg TGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2Jq ZWN0ICphcmdzKQogewotICByZWdpc3RlciBpbnQgbjsJCS8qIFRoZSBudW1iZXIgb2YgdGhl IG5leHQgYXJnIHRvIHN1YnN0aXR1dGUgKi8KLSAgcmVnaXN0ZXIgRU1BQ1NfSU5UIHRvdGFs OwkvKiBBbiBlc3RpbWF0ZSBvZiB0aGUgZmluYWwgbGVuZ3RoICovCisgIHJlZ2lzdGVyIHNp emVfdCBuOwkJLyogVGhlIG51bWJlciBvZiB0aGUgbmV4dCBhcmcgdG8gc3Vic3RpdHV0ZSAq LworICByZWdpc3RlciBzaXplX3QgdG90YWw7CS8qIEFuIGVzdGltYXRlIG9mIHRoZSBmaW5h bCBsZW5ndGggKi8KICAgY2hhciAqYnVmLCAqcDsKICAgcmVnaXN0ZXIgY2hhciAqZm9ybWF0 LCAqZW5kLCAqZm9ybWF0X3N0YXJ0OwogICBpbnQgbmNoYXJzOwpAQCAtMzY2OSw4ICszNjY5 LDggQEAKIAogICAvKiBBbGxvY2F0ZSB0aGUgaW5mbyBhbmQgZGlzY2FyZGVkIHRhYmxlcy4g ICovCiAgIHsKLSAgICBpbnQgbmJ5dGVzID0gKG5hcmdzKzEpICogc2l6ZW9mICppbmZvOwot ICAgIGludCBpOworICAgIHNpemVfdCBuYnl0ZXMgPSAobmFyZ3MrMSkgKiBzaXplb2YgKmlu Zm87CisgICAgc2l6ZV90IGk7CiAgICAgaWYgKCFpbmZvKQogICAgICAgaW5mbyA9IChzdHJ1 Y3QgaW5mbyAqKSBhbGxvY2EgKG5ieXRlcyk7CiAgICAgbWVtc2V0IChpbmZvLCAwLCBuYnl0 ZXMpOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9ldmFsLmMnCi0tLSBzcmMvZXZhbC5jCTIw MTEtMDMtMTYgMDc6NDQ6MTkgKzAwMDAKKysrIHNyYy9ldmFsLmMJMjAxMS0wMy0yNyAwMjox MjozNiArMDAwMApAQCAtMzgsOSArMzgsOSBAQAogICBzdHJ1Y3QgYmFja3RyYWNlICpuZXh0 OwogICBMaXNwX09iamVjdCAqZnVuY3Rpb247CiAgIExpc3BfT2JqZWN0ICphcmdzOwkvKiBQ b2ludHMgdG8gdmVjdG9yIG9mIGFyZ3MuICovCi0gIGludCBuYXJnczsJCS8qIExlbmd0aCBv ZiB2ZWN0b3IuCi0JCQkgICBJZiBuYXJncyBpcyBVTkVWQUxMRUQsIGFyZ3MgcG9pbnRzIHRv IHNsb3QgaG9sZGluZwotCQkJICAgbGlzdCBvZiB1bmV2YWxsZWQgYXJncyAqLworICBzaXpl X3QgbmFyZ3M7CQkvKiBMZW5ndGggb2YgdmVjdG9yLgorCQkJICAgSWYgbmFyZ3MgaXMgKHNp emVfdCkgVU5FVkFMTEVELCBhcmdzIHBvaW50cworCQkJICAgdG8gc2xvdCBob2xkaW5nIGxp c3Qgb2YgdW5ldmFsbGVkIGFyZ3MgKi8KICAgY2hhciBldmFsYXJnczsKICAgLyogTm9uemVy byBtZWFucyBjYWxsIHZhbHVlIG9mIGRlYnVnZ2VyIHdoZW4gZG9uZSB3aXRoIHRoaXMgb3Bl cmF0aW9uLiAqLwogICBjaGFyIGRlYnVnX29uX2V4aXQ7CkBAIC0xMTEsNyArMTExLDcgQEAK IAogaW50IGhhbmRsaW5nX3NpZ25hbDsKIAotc3RhdGljIExpc3BfT2JqZWN0IGZ1bmNhbGxf bGFtYmRhIChMaXNwX09iamVjdCwgaW50LCBMaXNwX09iamVjdCopOworc3RhdGljIExpc3Bf T2JqZWN0IGZ1bmNhbGxfbGFtYmRhIChMaXNwX09iamVjdCwgc2l6ZV90LCBMaXNwX09iamVj dCopOwogc3RhdGljIHZvaWQgdW53aW5kX3RvX2NhdGNoIChzdHJ1Y3QgY2F0Y2h0YWcgKiwg TGlzcF9PYmplY3QpIE5PX1JFVFVSTjsKIHN0YXRpYyBpbnQgaW50ZXJhY3RpdmVfcCAoaW50 KTsKIHN0YXRpYyBMaXNwX09iamVjdCBhcHBseV9sYW1iZGEgKExpc3BfT2JqZWN0LCBMaXNw X09iamVjdCwgaW50KTsKQEAgLTU1Myw3ICs1NTMsNyBAQAogICAgICBsb29raW5nIGF0IHNl dmVyYWwgZnJhbWVzIGZvciBzcGVjaWFsIGZvcm1zLiAgU2tpcCBwYXN0IHRoZW0uICAqLwog ICB3aGlsZSAoYnRwCiAJICYmIChFUSAoKmJ0cC0+ZnVuY3Rpb24sIFFieXRlY29kZSkKLQkg ICAgIHx8IGJ0cC0+bmFyZ3MgPT0gVU5FVkFMTEVEKSkKKwkgICAgIHx8IGJ0cC0+bmFyZ3Mg PT0gKHNpemVfdCkgVU5FVkFMTEVEKSkKICAgICBidHAgPSBidHAtPm5leHQ7CiAKICAgLyog YnRwIG5vdyBwb2ludHMgYXQgdGhlIGZyYW1lIG9mIHRoZSBpbm5lcm1vc3QgZnVuY3Rpb24g dGhhdCBpc24ndApAQCAtOTU5LDcgKzk1OSw3IEBACiAgIExpc3BfT2JqZWN0ICp0ZW1wcywg dGVtOwogICByZWdpc3RlciBMaXNwX09iamVjdCBlbHQsIHZhcmxpc3Q7CiAgIGludCBjb3Vu dCA9IFNQRUNQRExfSU5ERVggKCk7Ci0gIHJlZ2lzdGVyIGludCBhcmdudW07CisgIHJlZ2lz dGVyIHNpemVfdCBhcmdudW07CiAgIHN0cnVjdCBnY3BybyBnY3BybzEsIGdjcHJvMjsKICAg VVNFX1NBRkVfQUxMT0NBOwogCkBAIC0xNTExLDggKzE1MTEsOCBAQAogICAgYW5kIEFSR1Mg YXMgc2Vjb25kIGFyZ3VtZW50LiAgKi8KIAogTGlzcF9PYmplY3QKLWludGVybmFsX2NvbmRp dGlvbl9jYXNlX24gKExpc3BfT2JqZWN0ICgqYmZ1bikgKGludCwgTGlzcF9PYmplY3QqKSwK LQkJCSAgIGludCBuYXJncywKK2ludGVybmFsX2NvbmRpdGlvbl9jYXNlX24gKExpc3BfT2Jq ZWN0ICgqYmZ1bikgKHNpemVfdCwgTGlzcF9PYmplY3QgKiksCisJCQkgICBzaXplX3QgbmFy Z3MsCiAJCQkgICBMaXNwX09iamVjdCAqYXJncywKIAkJCSAgIExpc3BfT2JqZWN0IGhhbmRs ZXJzLAogCQkJICAgTGlzcF9PYmplY3QgKCpoZnVuKSAoTGlzcF9PYmplY3QpKQpAQCAtMjIw Myw3ICsyMjAzLDcgQEAKIAl7CiAJICAvKiBQYXNzIGEgdmVjdG9yIG9mIGV2YWx1YXRlZCBh cmd1bWVudHMgKi8KIAkgIExpc3BfT2JqZWN0ICp2YWxzOwotCSAgcmVnaXN0ZXIgaW50IGFy Z251bSA9IDA7CisJICByZWdpc3RlciBzaXplX3QgYXJnbnVtID0gMDsKIAkgIFVTRV9TQUZF X0FMTE9DQTsKIAogCSAgU0FGRV9BTExPQ0FfTElTUCAodmFscywgWElOVCAobnVtYXJncykp OwpAQCAtMjMzMiw5ICsyMzMyLDkgQEAKIFRoZW4gcmV0dXJuIHRoZSB2YWx1ZSBGVU5DVElP TiByZXR1cm5zLgogVGh1cywgKGFwcGx5ICcrIDEgMiAnKDMgNCkpIHJldHVybnMgMTAuCiB1 c2FnZTogKGFwcGx5IEZVTkNUSU9OICZyZXN0IEFSR1VNRU5UUykgICovKQotICAoaW50IG5h cmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgTGlzcF9PYmplY3Qg KmFyZ3MpCiB7Ci0gIHJlZ2lzdGVyIGludCBpLCBudW1hcmdzOworICByZWdpc3RlciBzaXpl X3QgaSwgbnVtYXJnczsKICAgcmVnaXN0ZXIgTGlzcF9PYmplY3Qgc3ByZWFkX2FyZzsKICAg cmVnaXN0ZXIgTGlzcF9PYmplY3QgKmZ1bmNhbGxfYXJnczsKICAgTGlzcF9PYmplY3QgZnVu LCByZXR2YWw7CkBAIC0yMzc0LDcgKzIzNzQsNyBAQAogICAgICAgaWYgKG51bWFyZ3MgPCBY U1VCUiAoZnVuKS0+bWluX2FyZ3MKIAkgIHx8IChYU1VCUiAoZnVuKS0+bWF4X2FyZ3MgPj0g MCAmJiBYU1VCUiAoZnVuKS0+bWF4X2FyZ3MgPCBudW1hcmdzKSkKIAlnb3RvIGZ1bmNhbGw7 CQkvKiBMZXQgZnVuY2FsbCBnZXQgdGhlIGVycm9yICovCi0gICAgICBlbHNlIGlmIChYU1VC UiAoZnVuKS0+bWF4X2FyZ3MgPiBudW1hcmdzKQorICAgICAgZWxzZSBpZiAoWFNVQlIgKGZ1 biktPm1heF9hcmdzID49IDAgJiYgWFNVQlIgKGZ1biktPm1heF9hcmdzID4gbnVtYXJncykK IAl7CiAJICAvKiBBdm9pZCBtYWtpbmcgZnVuY2FsbCBjb25zIHVwIGEgeWV0IGFub3RoZXIg bmV3IHZlY3RvciBvZiBhcmd1bWVudHMKIAkgICAgIGJ5IGV4cGxpY2l0bHkgc3VwcGx5aW5n IG5pbCdzIGZvciBvcHRpb25hbCB2YWx1ZXMgKi8KQEAgLTI0MTYsNyArMjQxNiw3IEBACiAv KiBSdW4gaG9vayB2YXJpYWJsZXMgaW4gdmFyaW91cyB3YXlzLiAgKi8KIAogZW51bSBydW5f aG9va3NfY29uZGl0aW9uIHt0b19jb21wbGV0aW9uLCB1bnRpbF9zdWNjZXNzLCB1bnRpbF9m YWlsdXJlfTsKLXN0YXRpYyBMaXNwX09iamVjdCBydW5faG9va193aXRoX2FyZ3MgKGludCwg TGlzcF9PYmplY3QgKiwKK3N0YXRpYyBMaXNwX09iamVjdCBydW5faG9va193aXRoX2FyZ3Mg KHNpemVfdCwgTGlzcF9PYmplY3QgKiwKIAkJCQkgICAgICAgZW51bSBydW5faG9va3NfY29u ZGl0aW9uKTsKIAogREVGVU4gKCJydW4taG9va3MiLCBGcnVuX2hvb2tzLCBTcnVuX2hvb2tz LCAwLCBNQU5ZLCAwLApAQCAtMjQzNCwxMCArMjQzNCwxMCBAQAogRG8gbm90IHVzZSBgbWFr ZS1sb2NhbC12YXJpYWJsZScgdG8gbWFrZSBhIGhvb2sgdmFyaWFibGUgYnVmZmVyLWxvY2Fs LgogSW5zdGVhZCwgdXNlIGBhZGQtaG9vaycgYW5kIHNwZWNpZnkgdCBmb3IgdGhlIExPQ0FM IGFyZ3VtZW50LgogdXNhZ2U6IChydW4taG9va3MgJnJlc3QgSE9PS1MpICAqLykKLSAgKGlu dCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2Jq ZWN0ICphcmdzKQogewogICBMaXNwX09iamVjdCBob29rWzFdOwotICByZWdpc3RlciBpbnQg aTsKKyAgcmVnaXN0ZXIgc2l6ZV90IGk7CiAKICAgZm9yIChpID0gMDsgaSA8IG5hcmdzOyBp KyspCiAgICAgewpAQCAtMjQ2Myw3ICsyNDYzLDcgQEAKIERvIG5vdCB1c2UgYG1ha2UtbG9j YWwtdmFyaWFibGUnIHRvIG1ha2UgYSBob29rIHZhcmlhYmxlIGJ1ZmZlci1sb2NhbC4KIElu c3RlYWQsIHVzZSBgYWRkLWhvb2snIGFuZCBzcGVjaWZ5IHQgZm9yIHRoZSBMT0NBTCBhcmd1 bWVudC4KIHVzYWdlOiAocnVuLWhvb2std2l0aC1hcmdzIEhPT0sgJnJlc3QgQVJHUykgICov KQotICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywg TGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIHJldHVybiBydW5faG9va193aXRoX2FyZ3MgKG5h cmdzLCBhcmdzLCB0b19jb21wbGV0aW9uKTsKIH0KQEAgLTI0ODMsNyArMjQ4Myw3IEBACiBE byBub3QgdXNlIGBtYWtlLWxvY2FsLXZhcmlhYmxlJyB0byBtYWtlIGEgaG9vayB2YXJpYWJs ZSBidWZmZXItbG9jYWwuCiBJbnN0ZWFkLCB1c2UgYGFkZC1ob29rJyBhbmQgc3BlY2lmeSB0 IGZvciB0aGUgTE9DQUwgYXJndW1lbnQuCiB1c2FnZTogKHJ1bi1ob29rLXdpdGgtYXJncy11 bnRpbC1zdWNjZXNzIEhPT0sgJnJlc3QgQVJHUykgICovKQotICAoaW50IG5hcmdzLCBMaXNw X09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7 CiAgIHJldHVybiBydW5faG9va193aXRoX2FyZ3MgKG5hcmdzLCBhcmdzLCB1bnRpbF9zdWNj ZXNzKTsKIH0KQEAgLTI1MDIsNyArMjUwMiw3IEBACiBEbyBub3QgdXNlIGBtYWtlLWxvY2Fs LXZhcmlhYmxlJyB0byBtYWtlIGEgaG9vayB2YXJpYWJsZSBidWZmZXItbG9jYWwuCiBJbnN0 ZWFkLCB1c2UgYGFkZC1ob29rJyBhbmQgc3BlY2lmeSB0IGZvciB0aGUgTE9DQUwgYXJndW1l bnQuCiB1c2FnZTogKHJ1bi1ob29rLXdpdGgtYXJncy11bnRpbC1mYWlsdXJlIEhPT0sgJnJl c3QgQVJHUykgICovKQotICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNp emVfdCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIHJldHVybiBydW5faG9va193 aXRoX2FyZ3MgKG5hcmdzLCBhcmdzLCB1bnRpbF9mYWlsdXJlKTsKIH0KQEAgLTI1MTYsNyAr MjUxNiw4IEBACiAgICBleGNlcHQgdGhhdCBpdCBpc24ndCBuZWNlc3NhcnkgdG8gZ2Nwcm8g QVJHU1swXS4gICovCiAKIHN0YXRpYyBMaXNwX09iamVjdAotcnVuX2hvb2tfd2l0aF9hcmdz IChpbnQgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzLCBlbnVtIHJ1bl9ob29rc19jb25kaXRp b24gY29uZCkKK3J1bl9ob29rX3dpdGhfYXJncyAoc2l6ZV90IG5hcmdzLCBMaXNwX09iamVj dCAqYXJncywKKwkJICAgIGVudW0gcnVuX2hvb2tzX2NvbmRpdGlvbiBjb25kKQogewogICBM aXNwX09iamVjdCBzeW0sIHZhbCwgcmV0OwogICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8xLCBnY3By bzIsIGdjcHJvMzsKQEAgLTI3NjMsMTYgKzI3NjQsMTYgQEAKIFJldHVybiB0aGUgdmFsdWUg dGhhdCBmdW5jdGlvbiByZXR1cm5zLgogVGh1cywgKGZ1bmNhbGwgJ2NvbnMgJ3ggJ3kpIHJl dHVybnMgKHggLiB5KS4KIHVzYWdlOiAoZnVuY2FsbCBGVU5DVElPTiAmcmVzdCBBUkdVTUVO VFMpICAqLykKLSAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3Qg bmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQogewogICBMaXNwX09iamVjdCBmdW4sIG9yaWdp bmFsX2Z1bjsKICAgTGlzcF9PYmplY3QgZnVuY2FyOwotICBpbnQgbnVtYXJncyA9IG5hcmdz IC0gMTsKKyAgc2l6ZV90IG51bWFyZ3MgPSBuYXJncyAtIDE7CiAgIExpc3BfT2JqZWN0IGxp c3BfbnVtYXJnczsKICAgTGlzcF9PYmplY3QgdmFsOwogICBzdHJ1Y3QgYmFja3RyYWNlIGJh Y2t0cmFjZTsKICAgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmludGVybmFsX2FyZ3M7Ci0gIHJl Z2lzdGVyIGludCBpOworICByZWdpc3RlciBzaXplX3QgaTsKIAogICBRVUlUOwogICBpZiAo KGNvbnNpbmdfc2luY2VfZ2MgPiBnY19jb25zX3RocmVzaG9sZApAQCAtMjkyNSwyMSArMjky NiwyMSBAQAogYXBwbHlfbGFtYmRhIChMaXNwX09iamVjdCBmdW4sIExpc3BfT2JqZWN0IGFy Z3MsIGludCBldmFsX2ZsYWcpCiB7CiAgIExpc3BfT2JqZWN0IGFyZ3NfbGVmdDsKLSAgTGlz cF9PYmplY3QgbnVtYXJnczsKKyAgc2l6ZV90IG51bWFyZ3M7CiAgIHJlZ2lzdGVyIExpc3Bf T2JqZWN0ICphcmdfdmVjdG9yOwogICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8xLCBnY3BybzIsIGdj cHJvMzsKLSAgcmVnaXN0ZXIgaW50IGk7CisgIHJlZ2lzdGVyIHNpemVfdCBpOwogICByZWdp c3RlciBMaXNwX09iamVjdCB0ZW07CiAgIFVTRV9TQUZFX0FMTE9DQTsKIAotICBudW1hcmdz ID0gRmxlbmd0aCAoYXJncyk7Ci0gIFNBRkVfQUxMT0NBX0xJU1AgKGFyZ192ZWN0b3IsIFhJ TlQgKG51bWFyZ3MpKTsKKyAgbnVtYXJncyA9IFhJTlQgKEZsZW5ndGggKGFyZ3MpKTsKKyAg U0FGRV9BTExPQ0FfTElTUCAoYXJnX3ZlY3RvciwgbnVtYXJncyk7CiAgIGFyZ3NfbGVmdCA9 IGFyZ3M7CiAKICAgR0NQUk8zICgqYXJnX3ZlY3RvciwgYXJnc19sZWZ0LCBmdW4pOwogICBn Y3BybzEubnZhcnMgPSAwOwogCi0gIGZvciAoaSA9IDA7IGkgPCBYSU5UIChudW1hcmdzKTsp CisgIGZvciAoaSA9IDA7IGkgPCBudW1hcmdzOyApCiAgICAgewogICAgICAgdGVtID0gRmNh ciAoYXJnc19sZWZ0KSwgYXJnc19sZWZ0ID0gRmNkciAoYXJnc19sZWZ0KTsKICAgICAgIGlm IChldmFsX2ZsYWcpIHRlbSA9IEZldmFsICh0ZW0pOwpAQCAtMjk1NSw3ICsyOTU2LDcgQEAK ICAgICAgIGJhY2t0cmFjZV9saXN0LT5uYXJncyA9IGk7CiAgICAgfQogICBiYWNrdHJhY2Vf bGlzdC0+ZXZhbGFyZ3MgPSAwOwotICB0ZW0gPSBmdW5jYWxsX2xhbWJkYSAoZnVuLCBYSU5U IChudW1hcmdzKSwgYXJnX3ZlY3Rvcik7CisgIHRlbSA9IGZ1bmNhbGxfbGFtYmRhIChmdW4s IG51bWFyZ3MsIGFyZ192ZWN0b3IpOwogCiAgIC8qIERvIHRoZSBkZWJ1Zy1vbi1leGl0IG5v dywgd2hpbGUgYXJnX3ZlY3RvciBzdGlsbCBleGlzdHMuICAqLwogICBpZiAoYmFja3RyYWNl X2xpc3QtPmRlYnVnX29uX2V4aXQpCkBAIC0yOTcxLDExICsyOTcyLDEzIEBACiAgICBGVU4g bXVzdCBiZSBlaXRoZXIgYSBsYW1iZGEtZXhwcmVzc2lvbiBvciBhIGNvbXBpbGVkLWNvZGUg b2JqZWN0LiAgKi8KIAogc3RhdGljIExpc3BfT2JqZWN0Ci1mdW5jYWxsX2xhbWJkYSAoTGlz cF9PYmplY3QgZnVuLCBpbnQgbmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdfdmVj dG9yKQorZnVuY2FsbF9sYW1iZGEgKExpc3BfT2JqZWN0IGZ1biwgc2l6ZV90IG5hcmdzLAor CQlyZWdpc3RlciBMaXNwX09iamVjdCAqYXJnX3ZlY3RvcikKIHsKICAgTGlzcF9PYmplY3Qg dmFsLCBzeW1zX2xlZnQsIG5leHQ7CiAgIGludCBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7 Ci0gIGludCBpLCBvcHRpb25hbCwgcmVzdDsKKyAgc2l6ZV90IGk7CisgIGludCBvcHRpb25h bCwgcmVzdDsKIAogICBpZiAoQ09OU1AgKGZ1bikpCiAgICAgewpAQCAtMzMxMCw3ICszMzEz LDcgQEAKICAgd2hpbGUgKGJhY2tsaXN0KQogICAgIHsKICAgICAgIHdyaXRlX3N0cmluZyAo YmFja2xpc3QtPmRlYnVnX29uX2V4aXQgPyAiKiAiIDogIiAgIiwgMik7Ci0gICAgICBpZiAo YmFja2xpc3QtPm5hcmdzID09IFVORVZBTExFRCkKKyAgICAgIGlmIChiYWNrbGlzdC0+bmFy Z3MgPT0gKHNpemVfdCkgVU5FVkFMTEVEKQogCXsKIAkgIEZwcmluMSAoRmNvbnMgKCpiYWNr bGlzdC0+ZnVuY3Rpb24sICpiYWNrbGlzdC0+YXJncyksIFFuaWwpOwogCSAgd3JpdGVfc3Ry aW5nICgiXG4iLCAtMSk7CkBAIC0zMzIwLDcgKzMzMjMsNyBAQAogCSAgdGVtID0gKmJhY2ts aXN0LT5mdW5jdGlvbjsKIAkgIEZwcmluMSAodGVtLCBRbmlsKTsJLyogVGhpcyBjYW4gUVVJ VCAqLwogCSAgd3JpdGVfc3RyaW5nICgiKCIsIC0xKTsKLQkgIGlmIChiYWNrbGlzdC0+bmFy Z3MgPT0gTUFOWSkKKwkgIGlmIChiYWNrbGlzdC0+bmFyZ3MgPT0gKHNpemVfdCkgTUFOWSkK IAkgICAgewogCSAgICAgIGZvciAodGFpbCA9ICpiYWNrbGlzdC0+YXJncywgaSA9IDA7CiAJ CSAgICFOSUxQICh0YWlsKTsKQEAgLTMzNzIsMTEgKzMzNzUsMTEgQEAKIAogICBpZiAoIWJh Y2tsaXN0KQogICAgIHJldHVybiBRbmlsOwotICBpZiAoYmFja2xpc3QtPm5hcmdzID09IFVO RVZBTExFRCkKKyAgaWYgKGJhY2tsaXN0LT5uYXJncyA9PSAoc2l6ZV90KSBVTkVWQUxMRUQp CiAgICAgcmV0dXJuIEZjb25zIChRbmlsLCBGY29ucyAoKmJhY2tsaXN0LT5mdW5jdGlvbiwg KmJhY2tsaXN0LT5hcmdzKSk7CiAgIGVsc2UKICAgICB7Ci0gICAgICBpZiAoYmFja2xpc3Qt Pm5hcmdzID09IE1BTlkpCisgICAgICBpZiAoYmFja2xpc3QtPm5hcmdzID09IChzaXplX3Qp IE1BTlkpCiAJdGVtID0gKmJhY2tsaXN0LT5hcmdzOwogICAgICAgZWxzZQogCXRlbSA9IEZs aXN0IChiYWNrbGlzdC0+bmFyZ3MsIGJhY2tsaXN0LT5hcmdzKTsKQEAgLTMzOTAsMTcgKzMz OTMsMTggQEAKIG1hcmtfYmFja3RyYWNlICh2b2lkKQogewogICByZWdpc3RlciBzdHJ1Y3Qg YmFja3RyYWNlICpiYWNrbGlzdDsKLSAgcmVnaXN0ZXIgaW50IGk7CisgIHJlZ2lzdGVyIHNp emVfdCBpOwogCiAgIGZvciAoYmFja2xpc3QgPSBiYWNrdHJhY2VfbGlzdDsgYmFja2xpc3Q7 IGJhY2tsaXN0ID0gYmFja2xpc3QtPm5leHQpCiAgICAgewogICAgICAgbWFya19vYmplY3Qg KCpiYWNrbGlzdC0+ZnVuY3Rpb24pOwogCi0gICAgICBpZiAoYmFja2xpc3QtPm5hcmdzID09 IFVORVZBTExFRCB8fCBiYWNrbGlzdC0+bmFyZ3MgPT0gTUFOWSkKLQlpID0gMDsKKyAgICAg IGlmIChiYWNrbGlzdC0+bmFyZ3MgPT0gKHNpemVfdCkgVU5FVkFMTEVECisJICB8fCBiYWNr bGlzdC0+bmFyZ3MgPT0gKHNpemVfdCkgTUFOWSkKKwlpID0gMTsKICAgICAgIGVsc2UKLQlp ID0gYmFja2xpc3QtPm5hcmdzIC0gMTsKLSAgICAgIGZvciAoOyBpID49IDA7IGktLSkKKwlp ID0gYmFja2xpc3QtPm5hcmdzOworICAgICAgd2hpbGUgKGktLSkKIAltYXJrX29iamVjdCAo YmFja2xpc3QtPmFyZ3NbaV0pOwogICAgIH0KIH0KCj09PSBtb2RpZmllZCBmaWxlICdzcmMv Zm5zLmMnCi0tLSBzcmMvZm5zLmMJMjAxMS0wMy0xNiAwNzo0OTo1NCArMDAwMAorKysgc3Jj L2Zucy5jCTIwMTEtMDMtMjcgMDI6MTI6MzYgKzAwMDAKQEAgLTM0OCw3ICszNDgsNyBAQAog ICByZXR1cm4gaTEgPCBTQ0hBUlMgKHMyKSA/IFF0IDogUW5pbDsKIH0KIAwKLXN0YXRpYyBM aXNwX09iamVjdCBjb25jYXQgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MsCitzdGF0 aWMgTGlzcF9PYmplY3QgY29uY2F0IChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdz LAogCQkJICAgZW51bSBMaXNwX1R5cGUgdGFyZ2V0X3R5cGUsIGludCBsYXN0X3NwZWNpYWwp OwogCiAvKiBBUkdTVVNFRCAqLwpAQCAtMzc4LDcgKzM3OCw3IEBACiBFYWNoIGFyZ3VtZW50 IG1heSBiZSBhIGxpc3QsIHZlY3RvciBvciBzdHJpbmcuCiBUaGUgbGFzdCBhcmd1bWVudCBp cyBub3QgY29waWVkLCBqdXN0IHVzZWQgYXMgdGhlIHRhaWwgb2YgdGhlIG5ldyBsaXN0Lgog dXNhZ2U6IChhcHBlbmQgJnJlc3QgU0VRVUVOQ0VTKSAgKi8pCi0gIChpbnQgbmFyZ3MsIExp c3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykK IHsKICAgcmV0dXJuIGNvbmNhdCAobmFyZ3MsIGFyZ3MsIExpc3BfQ29ucywgMSk7CiB9CkBA IC0zODgsNyArMzg4LDcgQEAKIFRoZSByZXN1bHQgaXMgYSBzdHJpbmcgd2hvc2UgZWxlbWVu dHMgYXJlIHRoZSBlbGVtZW50cyBvZiBhbGwgdGhlIGFyZ3VtZW50cy4KIEVhY2ggYXJndW1l bnQgbWF5IGJlIGEgc3RyaW5nIG9yIGEgbGlzdCBvciB2ZWN0b3Igb2YgY2hhcmFjdGVycyAo aW50ZWdlcnMpLgogdXNhZ2U6IChjb25jYXQgJnJlc3QgU0VRVUVOQ0VTKSAgKi8pCi0gIChp bnQgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQorICAoc2l6ZV90IG5hcmdzLCBMaXNwX09i amVjdCAqYXJncykKIHsKICAgcmV0dXJuIGNvbmNhdCAobmFyZ3MsIGFyZ3MsIExpc3BfU3Ry aW5nLCAwKTsKIH0KQEAgLTM5OCw3ICszOTgsNyBAQAogVGhlIHJlc3VsdCBpcyBhIHZlY3Rv ciB3aG9zZSBlbGVtZW50cyBhcmUgdGhlIGVsZW1lbnRzIG9mIGFsbCB0aGUgYXJndW1lbnRz LgogRWFjaCBhcmd1bWVudCBtYXkgYmUgYSBsaXN0LCB2ZWN0b3Igb3Igc3RyaW5nLgogdXNh Z2U6ICh2Y29uY2F0ICZyZXN0IFNFUVVFTkNFUykgICAqLykKLSAgKGludCBuYXJncywgTGlz cF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQog ewogICByZXR1cm4gY29uY2F0IChuYXJncywgYXJncywgTGlzcF9WZWN0b3JsaWtlLCAwKTsK IH0KQEAgLTQ0Niw3ICs0NDYsOCBAQAogfTsKIAogc3RhdGljIExpc3BfT2JqZWN0Ci1jb25j YXQgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MsIGVudW0gTGlzcF9UeXBlIHRhcmdl dF90eXBlLCBpbnQgbGFzdF9zcGVjaWFsKQorY29uY2F0IChzaXplX3QgbmFyZ3MsIExpc3Bf T2JqZWN0ICphcmdzLAorCWVudW0gTGlzcF9UeXBlIHRhcmdldF90eXBlLCBpbnQgbGFzdF9z cGVjaWFsKQogewogICBMaXNwX09iamVjdCB2YWw7CiAgIHJlZ2lzdGVyIExpc3BfT2JqZWN0 IHRhaWw7CkBAIC00NTUsNyArNDU2LDcgQEAKICAgRU1BQ1NfSU5UIHRvaW5kZXhfYnl0ZSA9 IDA7CiAgIHJlZ2lzdGVyIEVNQUNTX0lOVCByZXN1bHRfbGVuOwogICByZWdpc3RlciBFTUFD U19JTlQgcmVzdWx0X2xlbl9ieXRlOwotICByZWdpc3RlciBpbnQgYXJnbnVtOworICByZWdp c3RlciBzaXplX3QgYXJnbnVtOwogICBMaXNwX09iamVjdCBsYXN0X3RhaWw7CiAgIExpc3Bf T2JqZWN0IHByZXY7CiAgIGludCBzb21lX211bHRpYnl0ZTsKQEAgLTIyMzIsOSArMjIzMyw5 IEBACiAgICAgICAgZG9jOiAvKiBDb25jYXRlbmF0ZSBhbnkgbnVtYmVyIG9mIGxpc3RzIGJ5 IGFsdGVyaW5nIHRoZW0uCiBPbmx5IHRoZSBsYXN0IGFyZ3VtZW50IGlzIG5vdCBhbHRlcmVk LCBhbmQgbmVlZCBub3QgYmUgYSBsaXN0LgogdXNhZ2U6IChuY29uYyAmcmVzdCBMSVNUUykg ICovKQotICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJn cywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7Ci0gIHJlZ2lzdGVyIGludCBhcmdudW07CisgIHJl Z2lzdGVyIHNpemVfdCBhcmdudW07CiAgIHJlZ2lzdGVyIExpc3BfT2JqZWN0IHRhaWwsIHRl bSwgdmFsOwogCiAgIHZhbCA9IHRhaWwgPSBRbmlsOwpAQCAtMjc2Myw3ICsyNzY0LDcgQEAK ICAgICAgICBkb2M6IC8qIEFwcGx5IHRoZSB2YWx1ZSBvZiBXSURHRVQncyBQUk9QRVJUWSB0 byB0aGUgd2lkZ2V0IGl0c2VsZi4KIEFSR1MgYXJlIHBhc3NlZCBhcyBleHRyYSBhcmd1bWVu dHMgdG8gdGhlIGZ1bmN0aW9uLgogdXNhZ2U6ICh3aWRnZXQtYXBwbHkgV0lER0VUIFBST1BF UlRZICZyZXN0IEFSR1MpICAqLykKLSAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3Mp CisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQogewogICAvKiBUaGlzIGZ1 bmN0aW9uIGNhbiBHQy4gKi8KICAgTGlzcF9PYmplY3QgbmV3YXJnc1szXTsKQEAgLTMzNjcs NyArMzM2OCw3IEBACiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzLiAgKi8KIAogc3RhdGljIHN0 cnVjdCBMaXNwX0hhc2hfVGFibGUgKmNoZWNrX2hhc2hfdGFibGUgKExpc3BfT2JqZWN0KTsK LXN0YXRpYyBpbnQgZ2V0X2tleV9hcmcgKExpc3BfT2JqZWN0LCBpbnQsIExpc3BfT2JqZWN0 ICosIGNoYXIgKik7CitzdGF0aWMgc2l6ZV90IGdldF9rZXlfYXJnIChMaXNwX09iamVjdCwg c2l6ZV90LCBMaXNwX09iamVjdCAqLCBjaGFyICopOwogc3RhdGljIHZvaWQgbWF5YmVfcmVz aXplX2hhc2hfdGFibGUgKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKik7CiBzdGF0aWMgaW50 IGNtcGZuX2VxbCAoc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqLCBMaXNwX09iamVjdCwgdW5z aWduZWQsCiAgICAgICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3QsIHVuc2lnbmVkKTsK QEAgLTM0MjIsMjcgKzM0MjMsMjMgQEAKIC8qIEZpbmQgS0VZIGluIEFSR1Mgd2hpY2ggaGFz IHNpemUgTkFSR1MuICBEb24ndCBjb25zaWRlciBpbmRpY2VzIGZvcgogICAgd2hpY2ggVVNF RFtJXSBpcyBub24temVyby4gIElmIGZvdW5kIGF0IGluZGV4IEkgaW4gQVJHUywgc2V0CiAg ICBVU0VEW0ldIGFuZCBVU0VEW0kgKyAxXSB0byAxLCBhbmQgcmV0dXJuIEkgKyAxLiAgT3Ro ZXJ3aXNlIHJldHVybgotICAgLTEuICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZXh0cmFj dCBhIGtleXdvcmQvYXJndW1lbnQgcGFpciBmcm9tCisgICAwLiAgVGhpcyBmdW5jdGlvbiBp cyB1c2VkIHRvIGV4dHJhY3QgYSBrZXl3b3JkL2FyZ3VtZW50IHBhaXIgZnJvbQogICAgYSBE RUZVTiBwYXJhbWV0ZXIgbGlzdC4gICovCiAKLXN0YXRpYyBpbnQKLWdldF9rZXlfYXJnIChM aXNwX09iamVjdCBrZXksIGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MsIGNoYXIgKnVz ZWQpCitzdGF0aWMgc2l6ZV90CitnZXRfa2V5X2FyZyAoTGlzcF9PYmplY3Qga2V5LCBzaXpl X3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzLCBjaGFyICp1c2VkKQogewotICBpbnQgaTsK LQotICBmb3IgKGkgPSAwOyBpIDwgbmFyZ3MgLSAxOyArK2kpCi0gICAgaWYgKCF1c2VkW2ld ICYmIEVRIChhcmdzW2ldLCBrZXkpKQotICAgICAgYnJlYWs7Ci0KLSAgaWYgKGkgPj0gbmFy Z3MgLSAxKQotICAgIGkgPSAtMTsKLSAgZWxzZQotICAgIHsKLSAgICAgIHVzZWRbaSsrXSA9 IDE7Ci0gICAgICB1c2VkW2ldID0gMTsKLSAgICB9Ci0KLSAgcmV0dXJuIGk7CisgIHNpemVf dCBpOworCisgIGZvciAoaSA9IDE7IGkgPCBuYXJnczsgaSsrKQorICAgIGlmICghdXNlZFtp IC0gMV0gJiYgRVEgKGFyZ3NbaSAtIDFdLCBrZXkpKQorICAgICAgeworCXVzZWRbaSAtIDFd ID0gMTsKKwl1c2VkW2ldID0gMTsKKwlyZXR1cm4gaTsKKyAgICAgIH0KKworICByZXR1cm4g MDsKIH0KIAogCkBAIC00MjkwLDEyICs0Mjg3LDEyIEBACiBpcyBuaWwuCiAKIHVzYWdlOiAo bWFrZS1oYXNoLXRhYmxlICZyZXN0IEtFWVdPUkQtQVJHUykgICovKQotICAoaW50IG5hcmdz LCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgTGlzcF9PYmplY3QgKmFy Z3MpCiB7CiAgIExpc3BfT2JqZWN0IHRlc3QsIHNpemUsIHJlaGFzaF9zaXplLCByZWhhc2hf dGhyZXNob2xkLCB3ZWFrOwogICBMaXNwX09iamVjdCB1c2VyX3Rlc3QsIHVzZXJfaGFzaDsK ICAgY2hhciAqdXNlZDsKLSAgaW50IGk7CisgIHNpemVfdCBpOwogCiAgIC8qIFRoZSB2ZWN0 b3IgYHVzZWQnIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBhcmd1bWVudHMgdGhhdAogICAg ICBoYXZlIGJlZW4gY29uc3VtZWQuICAqLwpAQCAtNDMwNCw3ICs0MzAxLDcgQEAKIAogICAv KiBTZWUgaWYgdGhlcmUncyBhIGA6dGVzdCBURVNUJyBhbW9uZyB0aGUgYXJndW1lbnRzLiAg Ki8KICAgaSA9IGdldF9rZXlfYXJnIChRQ3Rlc3QsIG5hcmdzLCBhcmdzLCB1c2VkKTsKLSAg dGVzdCA9IGkgPCAwID8gUWVxbCA6IGFyZ3NbaV07CisgIHRlc3QgPSBpID8gYXJnc1tpXSA6 IFFlcWw7CiAgIGlmICghRVEgKHRlc3QsIFFlcSkgJiYgIUVRICh0ZXN0LCBRZXFsKSAmJiAh RVEgKHRlc3QsIFFlcXVhbCkpCiAgICAgewogICAgICAgLyogU2VlIGlmIGl0IGlzIGEgdXNl ci1kZWZpbmVkIHRlc3QuICAqLwpAQCAtNDMyMSw3ICs0MzE4LDcgQEAKIAogICAvKiBTZWUg aWYgdGhlcmUncyBhIGA6c2l6ZSBTSVpFJyBhcmd1bWVudC4gICovCiAgIGkgPSBnZXRfa2V5 X2FyZyAoUUNzaXplLCBuYXJncywgYXJncywgdXNlZCk7Ci0gIHNpemUgPSBpIDwgMCA/IFFu aWwgOiBhcmdzW2ldOworICBzaXplID0gaSA/IGFyZ3NbaV0gOiBRbmlsOwogICBpZiAoTklM UCAoc2l6ZSkpCiAgICAgc2l6ZSA9IG1ha2VfbnVtYmVyIChERUZBVUxUX0hBU0hfU0laRSk7 CiAgIGVsc2UgaWYgKCFJTlRFR0VSUCAoc2l6ZSkgfHwgWElOVCAoc2l6ZSkgPCAwKQpAQCAt NDMyOSw3ICs0MzI2LDcgQEAKIAogICAvKiBMb29rIGZvciBgOnJlaGFzaC1zaXplIFNJWkUn LiAgKi8KICAgaSA9IGdldF9rZXlfYXJnIChRQ3JlaGFzaF9zaXplLCBuYXJncywgYXJncywg dXNlZCk7Ci0gIHJlaGFzaF9zaXplID0gaSA8IDAgPyBtYWtlX2Zsb2F0IChERUZBVUxUX1JF SEFTSF9TSVpFKSA6IGFyZ3NbaV07CisgIHJlaGFzaF9zaXplID0gaSA/IGFyZ3NbaV0gOiBt YWtlX2Zsb2F0IChERUZBVUxUX1JFSEFTSF9TSVpFKTsKICAgaWYgKCFOVU1CRVJQIChyZWhh c2hfc2l6ZSkKICAgICAgIHx8IChJTlRFR0VSUCAocmVoYXNoX3NpemUpICYmIFhJTlQgKHJl aGFzaF9zaXplKSA8PSAwKQogICAgICAgfHwgWEZMT0FUSU5UIChyZWhhc2hfc2l6ZSkgPD0g MS4wKQpAQCAtNDMzNyw3ICs0MzM0LDcgQEAKIAogICAvKiBMb29rIGZvciBgOnJlaGFzaC10 aHJlc2hvbGQgVEhSRVNIT0xEJy4gICovCiAgIGkgPSBnZXRfa2V5X2FyZyAoUUNyZWhhc2hf dGhyZXNob2xkLCBuYXJncywgYXJncywgdXNlZCk7Ci0gIHJlaGFzaF90aHJlc2hvbGQgPSBp IDwgMCA/IG1ha2VfZmxvYXQgKERFRkFVTFRfUkVIQVNIX1RIUkVTSE9MRCkgOiBhcmdzW2ld OworICByZWhhc2hfdGhyZXNob2xkID0gaSA/IGFyZ3NbaV0gOiBtYWtlX2Zsb2F0IChERUZB VUxUX1JFSEFTSF9USFJFU0hPTEQpOwogICBpZiAoIUZMT0FUUCAocmVoYXNoX3RocmVzaG9s ZCkKICAgICAgIHx8IFhGTE9BVElOVCAocmVoYXNoX3RocmVzaG9sZCkgPD0gMC4wCiAgICAg ICB8fCBYRkxPQVRJTlQgKHJlaGFzaF90aHJlc2hvbGQpID4gMS4wKQpAQCAtNDM0NSw3ICs0 MzQyLDcgQEAKIAogICAvKiBMb29rIGZvciBgOndlYWtuZXNzIFdFQUsnLiAgKi8KICAgaSA9 IGdldF9rZXlfYXJnIChRQ3dlYWtuZXNzLCBuYXJncywgYXJncywgdXNlZCk7Ci0gIHdlYWsg PSBpIDwgMCA/IFFuaWwgOiBhcmdzW2ldOworICB3ZWFrID0gaSA/IGFyZ3NbaV0gOiBRbmls OwogICBpZiAoRVEgKHdlYWssIFF0KSkKICAgICB3ZWFrID0gUWtleV9hbmRfdmFsdWU7CiAg IGlmICghTklMUCAod2VhaykKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvZm9udC5jJwotLS0g c3JjL2ZvbnQuYwkyMDExLTAzLTE2IDIxOjIzOjM3ICswMDAwCisrKyBzcmMvZm9udC5jCTIw MTEtMDMtMjcgMDI6MTI6MzYgKzAwMDAKQEAgLTM4MzEsMTAgKzM4MzEsMTAgQEAKIGxhbmd1 YWdlIHN5c3RlbSBtdXN0IGNvbnRhaW4gYG1hcmsnIGZlYXR1cmUuCiAKIHVzYWdlOiAoZm9u dC1zcGVjIEFSR1MuLi4pICAqLykKLSAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3Mp CisgIChzaXplX3QgbmFyZ3MsIExpc3BfT2JqZWN0ICphcmdzKQogewogICBMaXNwX09iamVj dCBzcGVjID0gZm9udF9tYWtlX3NwZWMgKCk7Ci0gIGludCBpOworICBzaXplX3QgaTsKIAog ICBmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkgKz0gMikKICAgICB7Cgo9PT0gbW9kaWZpZWQg ZmlsZSAnc3JjL2ZyYW1lLmMnCi0tLSBzcmMvZnJhbWUuYwkyMDExLTAzLTIzIDEwOjA2OjU3 ICswMDAwCisrKyBzcmMvZnJhbWUuYwkyMDExLTAzLTI3IDAyOjEyOjM2ICswMDAwCkBAIC0y OTAyLDcgKzI5MDIsNyBAQAogICAvKiBSZWNvcmQgaW4gdGhlc2UgdmVjdG9ycyBhbGwgdGhl IHBhcm1zIHNwZWNpZmllZC4gICovCiAgIExpc3BfT2JqZWN0ICpwYXJtczsKICAgTGlzcF9P YmplY3QgKnZhbHVlczsKLSAgaW50IGksIHA7CisgIHNpemVfdCBpLCBwOwogICBpbnQgbGVm dF9ub19jaGFuZ2UgPSAwLCB0b3Bfbm9fY2hhbmdlID0gMDsKICAgaW50IGljb25fbGVmdF9u b19jaGFuZ2UgPSAwLCBpY29uX3RvcF9ub19jaGFuZ2UgPSAwOwogICBpbnQgc2l6ZV9jaGFu Z2VkID0gMDsKQEAgLTI5NzUsNyArMjk3NSw3IEBACiAgICAgfQogCiAgIC8qIE5vdyBwcm9j ZXNzIHRoZW0gaW4gcmV2ZXJzZSBvZiBzcGVjaWZpZWQgb3JkZXIuICAqLwotICBmb3IgKGkt LTsgaSA+PSAwOyBpLS0pCisgIHdoaWxlIChpLS0gIT0gMCkKICAgICB7CiAgICAgICBMaXNw X09iamVjdCBwcm9wLCB2YWw7CiAKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvbGlzcC5oJwot LS0gc3JjL2xpc3AuaAkyMDExLTAzLTIyIDA5OjA4OjExICswMDAwCisrKyBzcmMvbGlzcC5o CTIwMTEtMDMtMjcgMDI6MTI6MzYgKzAwMDAKQEAgLTk2NCw3ICs5NjQsNyBAQAogICAgICAg TGlzcF9PYmplY3QgKCphNykgKExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCwgTGlzcF9PYmpl Y3QsIExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0 KTsKICAgICAgIExpc3BfT2JqZWN0ICgqYTgpIChMaXNwX09iamVjdCwgTGlzcF9PYmplY3Qs IExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0LCBM aXNwX09iamVjdCwgTGlzcF9PYmplY3QpOwogICAgICAgTGlzcF9PYmplY3QgKCphVU5FVkFM TEVEKSAoTGlzcF9PYmplY3QgYXJncyk7Ci0gICAgICBMaXNwX09iamVjdCAoKmFNQU5ZKSAo aW50LCBMaXNwX09iamVjdCAqKTsKKyAgICAgIExpc3BfT2JqZWN0ICgqYU1BTlkpIChzaXpl X3QsIExpc3BfT2JqZWN0ICopOwogICAgIH0gZnVuY3Rpb247CiAgICAgc2hvcnQgbWluX2Fy Z3MsIG1heF9hcmdzOwogICAgIGNvbnN0IGNoYXIgKnN5bWJvbF9uYW1lOwpAQCAtMTgwOSw3 ICsxODA5LDcgQEAKIAogLyogTm90ZSB0aGF0IHRoZSB3ZWlyZCB0b2tlbi1zdWJzdGl0dXRp b24gc2VtYW50aWNzIG9mIEFOU0kgQyBtYWtlcwogICAgdGhpcyB3b3JrIGZvciBNQU5ZIGFu ZCBVTkVWQUxMRUQuICAqLwotI2RlZmluZSBERUZVTl9BUkdTX01BTlkJCShpbnQsIExpc3Bf T2JqZWN0ICopCisjZGVmaW5lIERFRlVOX0FSR1NfTUFOWQkJKHNpemVfdCwgTGlzcF9PYmpl Y3QgKikKICNkZWZpbmUgREVGVU5fQVJHU19VTkVWQUxMRUQJKExpc3BfT2JqZWN0KQogI2Rl ZmluZSBERUZVTl9BUkdTXzAJKHZvaWQpCiAjZGVmaW5lIERFRlVOX0FSR1NfMQkoTGlzcF9P YmplY3QpCkBAIC0yMDc5LDcgKzIwNzksNyBAQAogICB2b2xhdGlsZSBMaXNwX09iamVjdCAq dmFyOwogCiAgIC8qIE51bWJlciBvZiBjb25zZWN1dGl2ZSBwcm90ZWN0ZWQgdmFyaWFibGVz LiAgKi8KLSAgaW50IG52YXJzOworICBzaXplX3QgbnZhcnM7CiAKICNpZmRlZiBERUJVR19H Q1BSTwogICBpbnQgbGV2ZWw7CkBAIC0yODYwLDcgKzI4NjAsNyBAQAogZXh0ZXJuIExpc3Bf T2JqZWN0IGludGVybmFsX2NvbmRpdGlvbl9jYXNlIChMaXNwX09iamVjdCAoKikgKHZvaWQp LCBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QgKCopIChMaXNwX09iamVjdCkpOwogZXh0ZXJu IExpc3BfT2JqZWN0IGludGVybmFsX2NvbmRpdGlvbl9jYXNlXzEgKExpc3BfT2JqZWN0ICgq KSAoTGlzcF9PYmplY3QpLCBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0 ICgqKSAoTGlzcF9PYmplY3QpKTsKIGV4dGVybiBMaXNwX09iamVjdCBpbnRlcm5hbF9jb25k aXRpb25fY2FzZV8yIChMaXNwX09iamVjdCAoKikgKExpc3BfT2JqZWN0LCBMaXNwX09iamVj dCksIExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0 ICgqKSAoTGlzcF9PYmplY3QpKTsKLWV4dGVybiBMaXNwX09iamVjdCBpbnRlcm5hbF9jb25k aXRpb25fY2FzZV9uIChMaXNwX09iamVjdCAoKikgKGludCwgTGlzcF9PYmplY3QgKiksIGlu dCwgTGlzcF9PYmplY3QgKiwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0ICgqKSAoTGlzcF9P YmplY3QpKTsKK2V4dGVybiBMaXNwX09iamVjdCBpbnRlcm5hbF9jb25kaXRpb25fY2FzZV9u IChMaXNwX09iamVjdCAoKikgKHNpemVfdCwgTGlzcF9PYmplY3QgKiksIHNpemVfdCwgTGlz cF9PYmplY3QgKiwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0ICgqKSAoTGlzcF9PYmplY3Qp KTsKIGV4dGVybiB2b2lkIHNwZWNiaW5kIChMaXNwX09iamVjdCwgTGlzcF9PYmplY3QpOwog ZXh0ZXJuIHZvaWQgcmVjb3JkX3Vud2luZF9wcm90ZWN0IChMaXNwX09iamVjdCAoKikgKExp c3BfT2JqZWN0KSwgTGlzcF9PYmplY3QpOwogZXh0ZXJuIExpc3BfT2JqZWN0IHVuYmluZF90 byAoaW50LCBMaXNwX09iamVjdCk7CkBAIC0yODcwLDcgKzI4NzAsNyBAQAogZXh0ZXJuIExp c3BfT2JqZWN0IHVuX2F1dG9sb2FkIChMaXNwX09iamVjdCk7CiBFWEZVTiAoRmZldGNoX2J5 dGVjb2RlLCAxKTsKIGV4dGVybiB2b2lkIGluaXRfZXZhbF9vbmNlICh2b2lkKTsKLWV4dGVy biBMaXNwX09iamVjdCBzYWZlX2NhbGwgKGludCwgTGlzcF9PYmplY3QgKik7CitleHRlcm4g TGlzcF9PYmplY3Qgc2FmZV9jYWxsIChzaXplX3QsIExpc3BfT2JqZWN0ICopOwogZXh0ZXJu IExpc3BfT2JqZWN0IHNhZmVfY2FsbDEgKExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCk7CiBl eHRlcm4gTGlzcF9PYmplY3Qgc2FmZV9jYWxsMiAoTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0 LCBMaXNwX09iamVjdCk7CiBleHRlcm4gdm9pZCBpbml0X2V2YWwgKHZvaWQpOwoKPT09IG1v ZGlmaWVkIGZpbGUgJ3NyYy9wcm9jZXNzLmMnCi0tLSBzcmMvcHJvY2Vzcy5jCTIwMTEtMDMt MjYgMDE6MjM6MTUgKzAwMDAKKysrIHNyYy9wcm9jZXNzLmMJMjAxMS0wMy0yNyAwMjoxMjoz NiArMDAwMApAQCAtMTUxMiwxMSArMTUxMiwxMSBAQAogc3ludGF4LgogCiB1c2FnZTogKHN0 YXJ0LXByb2Nlc3MgTkFNRSBCVUZGRVIgUFJPR1JBTSAmcmVzdCBQUk9HUkFNLUFSR1MpICAq LykKLSAgKGludCBuYXJncywgcmVnaXN0ZXIgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXpl X3QgbmFyZ3MsIHJlZ2lzdGVyIExpc3BfT2JqZWN0ICphcmdzKQogewogICBMaXNwX09iamVj dCBidWZmZXIsIG5hbWUsIHByb2dyYW0sIHByb2MsIGN1cnJlbnRfZGlyLCB0ZW07CiAgIHJl Z2lzdGVyIHVuc2lnbmVkIGNoYXIgKipuZXdfYXJndjsKLSAgcmVnaXN0ZXIgaW50IGk7Cisg IHJlZ2lzdGVyIHNpemVfdCBpOwogICBpbnQgY291bnQgPSBTUEVDUERMX0lOREVYICgpOwog CiAgIGJ1ZmZlciA9IGFyZ3NbMV07CkBAIC0xNzIyLDcgKzE3MjIsNyBAQAogICAgICAgbmV3 X2FyZ3YgPSAodW5zaWduZWQgY2hhciAqKikgYWxsb2NhICgobmFyZ3MgLSAxKSAqIHNpemVv ZiAoY2hhciAqKSk7CiAgICAgICBuZXdfYXJndltuYXJncyAtIDJdID0gMDsKIAotICAgICAg Zm9yIChpID0gbmFyZ3MgLSAzOyBpID49IDA7IGktLSkKKyAgICAgIGZvciAoaSA9IG5hcmdz IC0gMjsgaS0tICE9IDA7ICkKIAl7CiAJICBuZXdfYXJndltpXSA9IFNEQVRBIChYQ0FSICh0 ZW0pKTsKIAkgIHRlbSA9IFhDRFIgKHRlbSk7CkBAIC0yNjgxLDcgKzI2ODEsNyBAQAogXChz ZXJpYWwtcHJvY2Vzcy1jb25maWd1cmUgOnBvcnQgIlxcXFwuXFxDT00xMyIgOmJ5dGVzaXpl IDcpCiAKIHVzYWdlOiAoc2VyaWFsLXByb2Nlc3MtY29uZmlndXJlICZyZXN0IEFSR1MpICAq LykKLSAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFyZ3Ms IExpc3BfT2JqZWN0ICphcmdzKQogewogICBzdHJ1Y3QgTGlzcF9Qcm9jZXNzICpwOwogICBM aXNwX09iamVjdCBjb250YWN0ID0gUW5pbDsKQEAgLTI3OTksNyArMjc5OSw3IEBACiBcKG1h a2Utc2VyaWFsLXByb2Nlc3MgOnBvcnQgIi9kZXYvdHR5LkJsdWVDb25zb2xlLVNQUC0xIiA6 c3BlZWQgbmlsKQogCiB1c2FnZTogIChtYWtlLXNlcmlhbC1wcm9jZXNzICZyZXN0IEFSR1Mp ICAqLykKLSAgKGludCBuYXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCisgIChzaXplX3QgbmFy Z3MsIExpc3BfT2JqZWN0ICphcmdzKQogewogICBpbnQgZmQgPSAtMTsKICAgTGlzcF9PYmpl Y3QgcHJvYywgY29udGFjdCwgcG9ydDsKQEAgLTMwNzcsNyArMzA3Nyw3IEBACiBpbmZvcm1h dGlvbiwgaXMgYXZhaWxhYmxlIHZpYSB0aGUgYHByb2Nlc3MtY29udGFjdCcgZnVuY3Rpb24u CiAKIHVzYWdlOiAobWFrZS1uZXR3b3JrLXByb2Nlc3MgJnJlc3QgQVJHUykgICovKQotICAo aW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBuYXJncywgTGlzcF9P YmplY3QgKmFyZ3MpCiB7CiAgIExpc3BfT2JqZWN0IHByb2M7CiAgIExpc3BfT2JqZWN0IGNv bnRhY3Q7CkBAIC0zMzkzLDcgKzMzOTMsOCBAQAogCiAgIGZvciAobHJlcyA9IHJlczsgbHJl czsgbHJlcyA9IGxyZXMtPmFpX25leHQpCiAgICAgewotICAgICAgaW50IG9wdG4sIG9wdGJp dHM7CisgICAgICBzaXplX3Qgb3B0bjsKKyAgICAgIGludCBvcHRiaXRzOwogCiAjaWZkZWYg V0lORE9XU05UCiAgICAgcmV0cnlfY29ubmVjdDoKCj09PSBtb2RpZmllZCBmaWxlICdzcmMv eGRpc3AuYycKLS0tIHNyYy94ZGlzcC5jCTIwMTEtMDMtMjUgMjA6MDA6MjUgKzAwMDAKKysr IHNyYy94ZGlzcC5jCTIwMTEtMDMtMjcgMDI6MTI6MzYgKzAwMDAKQEAgLTIxODEsNyArMjE4 MSw3IEBACiAgICByZWRpc3BsYXkgZHVyaW5nIHRoZSBldmFsdWF0aW9uLiAgKi8KIAogTGlz cF9PYmplY3QKLXNhZmVfY2FsbCAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKK3Nh ZmVfY2FsbCAoc2l6ZV90IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKIHsKICAgTGlzcF9P YmplY3QgdmFsOwogCkBAIC0xNjM4OSw3ICsxNjM4OSw3IEBACiBERUZVTiAoInRyYWNlLXRv LXN0ZGVyciIsIEZ0cmFjZV90b19zdGRlcnIsIFN0cmFjZV90b19zdGRlcnIsIDEsIE1BTlks ICIiLAogICAgICAgIGRvYzogLyogTGlrZSBgZm9ybWF0JywgYnV0IHByaW50IHJlc3VsdCB0 byBzdGRlcnIuCiB1c2FnZTogKHRyYWNlLXRvLXN0ZGVyciBTVFJJTkcgJnJlc3QgT0JKRUNU UykgICovKQotICAoaW50IG5hcmdzLCBMaXNwX09iamVjdCAqYXJncykKKyAgKHNpemVfdCBu YXJncywgTGlzcF9PYmplY3QgKmFyZ3MpCiB7CiAgIExpc3BfT2JqZWN0IHMgPSBGZm9ybWF0 IChuYXJncywgYXJncyk7CiAgIGZwcmludGYgKHN0ZGVyciwgIiVzIiwgU0RBVEEgKHMpKTsK Cg== --------------020900030601050503010800-- From debbugs-submit-bounces@debbugs.gnu.org Sun Mar 27 03:53:09 2011 Received: (at 8344) by debbugs.gnu.org; 27 Mar 2011 07:53:09 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q3kma-0003D3-St for submit@debbugs.gnu.org; Sun, 27 Mar 2011 03:53:09 -0400 Received: from mail-out.m-online.net ([212.18.0.9]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q3kmX-0003CZ-QE for 8344@debbugs.gnu.org; Sun, 27 Mar 2011 03:53:06 -0400 Received: from frontend1.mail.m-online.net (unknown [192.168.8.180]) by mail-out.m-online.net (Postfix) with ESMTP id D79221C08E0A; Sun, 27 Mar 2011 09:52:59 +0200 (CEST) Received: from localhost (dynscan1.mnet-online.de [192.168.8.164]) by mail.m-online.net (Postfix) with ESMTP id 9F0951C000B1; Sun, 27 Mar 2011 09:52:59 +0200 (CEST) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.180]) by localhost (dynscan1.mail.m-online.net [192.168.8.164]) (amavisd-new, port 10024) with ESMTP id GtJ3bSdzncIx; Sun, 27 Mar 2011 09:52:59 +0200 (CEST) Received: from igel.home (ppp-88-217-102-255.dynamic.mnet-online.de [88.217.102.255]) by mail.mnet-online.de (Postfix) with ESMTP; Sun, 27 Mar 2011 09:52:58 +0200 (CEST) Received: by igel.home (Postfix, from userid 501) id 93B80CA2A0; Sun, 27 Mar 2011 09:52:58 +0200 (CEST) From: Andreas Schwab To: Paul Eggert Subject: Re: bug#8344: (substring ...) crashes on large vectors References: <4D8CDC3A.4010705@cs.ucla.edu> <4D8D0DB6.4040206@cs.ucla.edu> <4D8E9E93.80303@cs.ucla.edu> X-Yow: We place two copies of PEOPLE magazine in a DARK, HUMID mobile home. 45 minutes later CYNDI LAUPER emerges wearing a BIRD CAGE on her head! Date: Sun, 27 Mar 2011 09:52:58 +0200 In-Reply-To: <4D8E9E93.80303@cs.ucla.edu> (Paul Eggert's message of "Sat, 26 Mar 2011 19:18:59 -0700") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Spam-Score: -2.6 (--) X-Debbugs-Envelope-To: 8344 Cc: 8344@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -2.6 (--) Paul Eggert writes: > @@ -373,10 +373,10 @@ > path = Fsubstring (path, make_number (2), Qnil); > > new_argv_volatile = new_argv = (const unsigned char **) > - alloca (max (2, nargs - 2) * sizeof (char *)); > + alloca ((nargs > 4 ? nargs - 2 : 2) * sizeof (char *)); That should perhaps be converted to use SAFE_ALLOCA. Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." From debbugs-submit-bounces@debbugs.gnu.org Sun Mar 27 05:10:10 2011 Received: (at 8344) by debbugs.gnu.org; 27 Mar 2011 09:10:10 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q3lz7-0005Kz-Q9 for submit@debbugs.gnu.org; Sun, 27 Mar 2011 05:10:10 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q3lz4-0005KR-Ai for 8344@debbugs.gnu.org; Sun, 27 Mar 2011 05:10:08 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id E058D39E80F2; Sun, 27 Mar 2011 02:09:59 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4K-DF32rOLVd; Sun, 27 Mar 2011 02:09:59 -0700 (PDT) Received: from [192.168.1.10] (pool-71-189-109-235.lsanca.fios.verizon.net [71.189.109.235]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 0758239E80E0; Sun, 27 Mar 2011 02:09:58 -0700 (PDT) Message-ID: <4D8EFEE6.10100@cs.ucla.edu> Date: Sun, 27 Mar 2011 02:09:58 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.14) Gecko/20110223 Thunderbird/3.1.8 MIME-Version: 1.0 To: Andreas Schwab Subject: Re: bug#8344: (substring ...) crashes on large vectors References: <4D8CDC3A.4010705@cs.ucla.edu> <4D8D0DB6.4040206@cs.ucla.edu> <4D8E9E93.80303@cs.ucla.edu> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Score: -3.0 (---) X-Debbugs-Envelope-To: 8344 Cc: 8344@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.0 (---) On 03/27/2011 12:52 AM, Andreas Schwab wrote: > That should perhaps be converted to use SAFE_ALLOCA. Thanks, here's a patch for that, which I'll throw into the pile of patches I'm testing. * callproc.c (Fcall_process, Fcall_process_region): Use SAFE_ALLOCA instead of alloca (Bug#8344). === modified file 'src/callproc.c' --- src/callproc.c 2011-03-27 02:12:36 +0000 +++ src/callproc.c 2011-03-27 08:59:56 +0000 @@ -189,6 +189,7 @@ char buf[CALLPROC_BUFFER_SIZE_MAX]; int bufsize = CALLPROC_BUFFER_SIZE_MIN; int count = SPECPDL_INDEX (); + volatile USE_SAFE_ALLOCA; const unsigned char **volatile new_argv_volatile; register const unsigned char **new_argv; @@ -242,7 +243,7 @@ val = Qraw_text; else { - args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2); + SAFE_ALLOCA (args2, Lisp_Object *, (nargs + 1) * sizeof *args2); args2[0] = Qcall_process; for (i = 0; i < nargs; i++) args2[i + 1] = args[i]; coding_systems = Ffind_operation_coding_system (nargs + 1, args2); @@ -372,8 +373,9 @@ && SREF (path, 1) == ':') path = Fsubstring (path, make_number (2), Qnil); - new_argv_volatile = new_argv = (const unsigned char **) - alloca ((nargs > 4 ? nargs - 2 : 2) * sizeof (char *)); + SAFE_ALLOCA (new_argv, const unsigned char **, + (nargs > 4 ? nargs - 2 : 2) * sizeof *new_argv); + new_argv_volatile = new_argv; if (nargs > 4) { register size_t i; @@ -645,7 +647,7 @@ { size_t i; - args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2); + SAFE_ALLOCA (args2, Lisp_Object *, (nargs + 1) * sizeof *args2); args2[0] = Qcall_process; for (i = 0; i < nargs; i++) args2[i + 1] = args[i]; coding_systems @@ -809,6 +811,7 @@ when exiting. */ call_process_exited = 1; + SAFE_FREE (); unbind_to (count, Qnil); if (synch_process_termsig) @@ -897,30 +900,35 @@ #endif } - pattern = Fexpand_file_name (Vtemp_file_name_pattern, tmpdir); - tempfile = (char *) alloca (SBYTES (pattern) + 1); - memcpy (tempfile, SDATA (pattern), SBYTES (pattern) + 1); - coding_systems = Qt; + { + USE_SAFE_ALLOCA; + pattern = Fexpand_file_name (Vtemp_file_name_pattern, tmpdir); + SAFE_ALLOCA (tempfile, char *, SBYTES (pattern) + 1); + memcpy (tempfile, SDATA (pattern), SBYTES (pattern) + 1); + coding_systems = Qt; #ifdef HAVE_MKSTEMP - { - int fd; + { + int fd; - BLOCK_INPUT; - fd = mkstemp (tempfile); - UNBLOCK_INPUT; - if (fd == -1) - report_file_error ("Failed to open temporary file", - Fcons (Vtemp_file_name_pattern, Qnil)); - else - close (fd); - } + BLOCK_INPUT; + fd = mkstemp (tempfile); + UNBLOCK_INPUT; + if (fd == -1) + report_file_error ("Failed to open temporary file", + Fcons (Vtemp_file_name_pattern, Qnil)); + else + close (fd); + } #else - mktemp (tempfile); + mktemp (tempfile); #endif - filename_string = build_string (tempfile); - GCPRO1 (filename_string); + filename_string = build_string (tempfile); + GCPRO1 (filename_string); + SAFE_FREE (); + } + start = args[0]; end = args[1]; /* Decide coding-system of the contents of the temporary file. */ @@ -930,11 +938,13 @@ val = Qraw_text; else { - args2 = (Lisp_Object *) alloca ((nargs + 1) * sizeof *args2); + USE_SAFE_ALLOCA; + SAFE_ALLOCA (args2, Lisp_Object *, (nargs + 1) * sizeof *args2); args2[0] = Qcall_process_region; for (i = 0; i < nargs; i++) args2[i + 1] = args[i]; coding_systems = Ffind_operation_coding_system (nargs + 1, args2); val = CONSP (coding_systems) ? XCDR (coding_systems) : Qnil; + SAFE_FREE (); } val = complement_process_encoding_system (val); From debbugs-submit-bounces@debbugs.gnu.org Tue Mar 29 20:53:34 2011 Received: (at 8344-done) by debbugs.gnu.org; 30 Mar 2011 00:53:34 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q4jfA-0006SU-Q1 for submit@debbugs.gnu.org; Tue, 29 Mar 2011 20:53:32 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Q4jf4-0006Ry-UF; Tue, 29 Mar 2011 20:53:28 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id C1DA939E80B1; Tue, 29 Mar 2011 17:53:20 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5He4GRcvXQ8I; Tue, 29 Mar 2011 17:53:20 -0700 (PDT) Received: from [192.168.1.10] (pool-71-189-109-235.lsanca.fios.verizon.net [71.189.109.235]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 6490139E8083; Tue, 29 Mar 2011 17:53:20 -0700 (PDT) Message-ID: <4D927EFF.1080308@cs.ucla.edu> Date: Tue, 29 Mar 2011 17:53:19 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.14) Gecko/20110223 Thunderbird/3.1.8 MIME-Version: 1.0 To: 8344-done@debbugs.gnu.org, 8336-done@debbugs.gnu.org, 8335-done@debbugs.gnu.org Subject: fix merged to trunk Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Score: -3.0 (---) X-Debbugs-Envelope-To: 8344-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.0 (---) I committed a fix to the trunk for this, as part of a recent merge (bzr 103776). For Bug#8344, the merge uses size_t rather than EMACS_INT for argument counts as I proposed earlier, since the argument counts are always nonnegative and are limited just by sizes that can be counted at the C level. From unknown Fri Aug 15 12:50:08 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Wed, 27 Apr 2011 11:24:04 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator