From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6263 invoked by alias); 20 May 2014 04:09:25 -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 6245 invoked by uid 89); 20 May 2014 04:09:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.9 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-qg0-f54.google.com Received: from mail-qg0-f54.google.com (HELO mail-qg0-f54.google.com) (209.85.192.54) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Tue, 20 May 2014 04:09:18 +0000 Received: by mail-qg0-f54.google.com with SMTP id q108so10169607qgd.41 for ; Mon, 19 May 2014 21:09:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=Y4iiiqHvBVGKRiXajng2PdU3YzGySyUXO3NjN9a5jH0=; b=CzQBJezVHBSHSAt5GW5Dz4BFrG+hNqdjpBw2gXq/a1m3khGpir/JrYbKqAvShfn4IB OB8SmRXgsp56POLFgIdAanLrcMuNcRfY0Xmqo4oebN1Q2zpuB4PNj5p+NYFxz5t4eZvK 9oy+9TXqtIEYsR9FMq6wpLiRpLuhWmgm/aUm3MLbSEwMZ/7TEAYLQ35XYkUcStGtus5A +majlw0NaO0zzXAP9LUKqvx/Reqxl5dQDgoozeFDf4huK/0pjbp89C/tpwb0gG5W0gLD qH7UaGRt68Irhy+QOkTf6NNRl/cVV1ULQWDctqP6hWDawISnBsYN5YNXWIJ94c3Fazps 8MsA== X-Gm-Message-State: ALoCoQklCJNJavufKvSmNe4SwdAvcQWG4WqaO84lR3wKWmI4hVY68Z61Mv/U/h5KrkOrjg/2o86r MIME-Version: 1.0 X-Received: by 10.224.56.5 with SMTP id w5mr53105814qag.60.1400558956216; Mon, 19 May 2014 21:09:16 -0700 (PDT) Received: by 10.229.167.129 with HTTP; Mon, 19 May 2014 21:09:16 -0700 (PDT) In-Reply-To: References: Date: Tue, 20 May 2014 04:09:00 -0000 Message-ID: Subject: Re: [Google/4-8] Support for user-guided feedback-directed library optimization From: Teresa Johnson To: Xinliang David Li Cc: "gcc-patches@gcc.gnu.org" , Jan Hubicka Content-Type: multipart/mixed; boundary=001a11c300a613e90104f9cd0bfb X-IsSubscribed: yes X-SW-Source: 2014-05/txt/msg01567.txt.bz2 --001a11c300a613e90104f9cd0bfb Content-Type: text/plain; charset=UTF-8 Content-length: 6416 On Sun, May 11, 2014 at 11:33 AM, Xinliang David Li wrote: >> =================================================================== >> --- gcc/builtins.c (revision 210019) >> +++ gcc/builtins.c (working copy) >> @@ -87,6 +87,9 @@ static rtx result_vector (int, rtx); >> #endif >> static void expand_builtin_update_setjmp_buf (rtx); >> static void expand_builtin_prefetch (tree); >> +static rtx expand_builtin_profile_invoke (tree); >> +static rtx expand_builtin_profile_register_handler (tree); > > It might be more general to support handler invocation with some data > -- basically let handler to take a 'void*' as type of the data. As discussed offline, deferring to a follow-on patch. > > >> +/* Expand a call to __builtin_profile_invoke. Passed a pointer to >> + a routine that should be called on -fprofile-generate compiles >> + and the profile counter address and data to pass to the routine. */ >> + >> +static rtx >> +expand_builtin_profile_invoke (tree exp) >> +{ >> + tree func, ctr, data, fndecl; > > Expanding late is ok for now. It might be better to support expansion > of builin_invoke before ipa inlining (after early inline). This may > allow more efficient code gen (i.e., when the update function is > defined inline ..) Ditto. > >> + >> +/* Expand a call to __builtin_profile_register_handler. Passed a pointer to >> + a routine that should be called atexit in -fprofile-generate binaries. */ >> + >> +static rtx >> +expand_builtin_profile_register_handler (tree exp) >> +{ >> + tree fn, fndecl; >> + > > See comment about supporting one parameter. Ditto. > >> + gcc_assert (alloc < GCOV_BLOCK_SIZE); >> + return alloc; >> +} > >> #if !IN_GCOV >> /* Write out the current block, if needs be. */ > >> >> @@ -292,12 +308,11 @@ gcov_write_words (unsigned words) >> #if IN_LIBGCOV >> if (gcov_var.offset >= GCOV_BLOCK_SIZE) >> { >> - gcov_write_block (GCOV_BLOCK_SIZE); >> - if (gcov_var.offset) >> - { >> - gcc_assert (gcov_var.offset == 1); >> - memcpy (gcov_var.buffer, gcov_var.buffer + GCOV_BLOCK_SIZE, 4); >> - } >> + // Strings will cause offset to go above GCOV_BLOCK_SIZE >> + // by a variable amount, so we no longer assert that any >> + // offset be 1. >> + gcov_write_block (gcov_var.offset); >> + gcc_assert (!gcov_var.offset); > > This part needs more explanation. After looking at this again, I realized I was papering over a big issue when enabling string writing from libgcov, involving buffer overflow, since in the libgcov case buffer is statically sized to GCOV_BLOCK_SIZE + 1. gcov_write_block was previously only called with "words" equal to 1 or 2, and so the offset would only exceed the block size by at most 1. With strings we may exceed it by a variable amount, which is obviously bad when buffer is a static size as in libgcov. I reverted this change, and instead added handling to gcov_write_string, to check if the buffer size would be exceeded by the new string and if so first call gcov_write_block to open up space for the string (which is checked to ensure it doesn't exceed the block size). > >> +/* Write parameter values to the gcov file. These should be applied >> + to profile-use compiles as macro definitions by the compiler. */ >> + >> +GCOV_LINKAGE void >> +gcov_write_parameters (struct gcov_parameter_value *parameters) >> +{ >> + gcov_unsigned_t len = 0; >> + struct gcov_parameter_value *curr_parm; >> + >> + if (!parameters) >> + return; >> + >> + for (curr_parm = parameters; curr_parm; >> + curr_parm = curr_parm->next) >> + { > > Maybe comment here -- string followed by 2 word counter value. Done. > >> + struct gcov_parameter_value *cur_new_parm, *cur_merge_parm, *merged_parms; >> + >> + merged_parms = saved_parms; >> + >> + for (cur_new_parm = new_parms; cur_new_parm; >> + cur_new_parm = cur_new_parm->next) >> + { >> + cur_merge_parm = find_parameter (saved_parms, cur_new_parm->macro_name); >> + >> + if (cur_merge_parm) >> + { >> + // Simply average them for now. The best merge strategy will >> + // depend on how they were computed in the first place. >> + cur_merge_parm->value >> + = (cur_merge_parm->value + cur_new_parm->value) / 2; > > Some parmeters may have value set that is not averageable. When > recording parameters, maybe record the parmeter type of some sort (by > default it is avaragble). Deferred and added a comment. > > >> + struct gcov_parameter_value **merged_parameters) >> { >> gcov_unsigned_t tag, length, version, stamp; >> unsigned t_ix, f_ix; >> @@ -418,6 +490,15 @@ gcov_exit_merge_gcda (struct gcov_info *gi_ptr, >> next_summary:; >> } >> >> + if (tag == GCOV_TAG_PARAMETERS) >> + { >> + length = gcov_read_unsigned (); >> + *merged_parameters = gcov_read_parameters (length); >> + *merged_parameters = merge_parameters (*merged_parameters, >> + gcov_parameter_values); >> + } >> + tag = gcov_read_unsigned (); >> + > > Should the tag reading be inside the previous guard? Yes, this was a bug. Ran the new patch through a profiledbootstrap as well, which presumably would have caught this. New patch attached. Passes regular regression tests and profiledbootstrap+regression tests. Thanks, Teresa > > David > > > > 81,1 98% > > > > On Fri, May 9, 2014 at 1:50 PM, Teresa Johnson wrote: >> The attached patch adds support for user-guided feedback-directed >> library optimization, for google/gcc-4_8 initially (to be ported to >> google/gcc-4_9). >> >> Cc'ing Honza for any comments since I would eventually like to send >> this and follow-on work to trunk. >> >> Patch to add support for user-guided feedback-directed library optimization. >> >> Contains support for builtins and attributes for specifying user-supplied >> routines for initializing, updating and analyzing profile counters during >> profile collection runs, and for feeding back macro values via a new >> parameter section in the gcda file. >> >> Passes regression tests. Ok for google branches? >> >> Thanks, >> Teresa >> >> -- >> Teresa Johnson | Software Engineer | tejohnson@google.com | 408-460-2413 -- Teresa Johnson | Software Engineer | tejohnson@google.com | 408-460-2413 --001a11c300a613e90104f9cd0bfb Content-Type: text/plain; charset=UTF-8; name="patch.diff" Content-Disposition: attachment; filename="patch.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hveompo90 Content-length: 54746 MjAxNC0wNS0xOSAgVGVyZXNhIEpvaG5zb24gIDx0ZWpvaG5zb25AZ29vZ2xl LmNvbT4KCgkqIGdjYy9idWlsdGlucy5jIChleHBhbmRfYnVpbHRpbl9wcm9m aWxlX2ludm9rZSk6IE5ldyBmdW5jdGlvbi4KCShleHBhbmRfYnVpbHRpbl9w cm9maWxlX3JlZ2lzdGVyX2hhbmRsZXIpOiBEaXR0by4KCShleHBhbmRfYnVp bHRpbl9wcm9maWxlX3JlY29yZF9wYXJhbWV0ZXIpOiBEaXR0by4KCShleHBh bmRfYnVpbHRpbik6IEludm9rZSBuZXcgYnVpbHRpbiBleHBhbnNpb25zLgoJ KiBnY2MvYnVpbHRpbnMuZGVmIChCVUlMVF9JTl9QUk9GSUxFX0lOVk9LRSk6 IE5ldy4KICAgICAgICAoQlVJTFRfSU5fUFJPRklMRV9SRUdJU1RFUl9IQU5E TEVSKTogRGl0dG8uCiAgICAgICAgKEJVSUxUX0lOX1BST0ZJTEVfUkVDT1JE X1BBUkFNRVRFUik6IERpdHRvLgoJKiBnY2MvYnVpbHRpbi10eXBlcy5kZWYg KEJUX0ZOX1ZPSURfUFRSX0xPTkdMT05HKTogTmV3LgogICAgICAgIChCVF9Q VFJfRk5fVk9JRF9QVFJfTE9OR0xPTkcpOiBEaXR0by4KICAgICAgICAoQlRf Rk5fVk9JRF9QVFJfRk5fVk9JRF9QVFJfTE9OR0xPTkdfUFRSX0xPTkdMT05H KTogRGl0dG8uCiAgICAgICAgKEJUX1BUUl9GTl9WT0lEKTogRGl0dG8uCiAg ICAgICAgKEJUX0ZOX1ZPSURfUFRSX0ZOX1ZPSUQpOiBEaXR0by4KICAgICAg ICAoQlRfRk5fVk9JRF9DT05TVF9QVFJfTE9OR0xPTkcpOiBEaXR0by4KCSog Z2NjL2MtZmFtaWx5L2MtY29tbW9uLmMgKGhhbmRsZV9wcm9maWxlX2luaXRf YXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKiBnY2MvYy1mYW1pbHkvYy1v cHRzLmMgKGNfY29tbW9uX3BhcnNlX2ZpbGUpOiBJbnZva2UKICAgICAgICBz ZXRfcHJvZmlsZV9wYXJhbWV0ZXJzIHRvIHNldCB1cCBtYWNybyBwYXJhbWV0 ZXJzIGZyb20gcHJvZmlsZS4KCSogZ2NjL2NvbW1vbi5vcHQgKGZsYWdfcHJv ZmlsZV91c2VfcGFyYW1ldGVycyk6IE5ldyBmbGFnLgoJKiBnY2MvY292ZXJh Z2UuYyAocmVhZF9jb3VudHNfZmlsZSk6IFJlYWQgcGFyYW1ldGVycy4KCShz ZXRfcHJvZmlsZV9wYXJhbWV0ZXJzKTogTmV3IGZ1bmN0aW9uLgoJKiBnY2Mv Z2Nvdi5jIChyZWFkX2NvdW50X2ZpbGUpOiBSZWFkIHBhcmFtZXRlcnMuCgkq IGdjYy9nY292LWR1bXAuYyAodGFnX3BhcmFtZXRlcnMpOiBOZXcgZnVuY3Rp b24uCgkqIGdjYy9nY292LWlvLmMgKGdjb3Zfc3RyaW5nX2xlbmd0aCk6IE5l dyBmdW5jdGlvbi4KCShnY292X3dyaXRlX3N0cmluZyk6IEVuYWJsZSBpbiBs aWJnY292LgoJKGdjb3Zfd3JpdGVfcGFyYW1ldGVycyk6IE5ldyBmdW5jdGlv bi4KCShnY292X3JlYWRfc3RyaW5nKTogRW5hYmxlIGluIGxpYmdjb3YgYW5k IGdjb3YgdG9vbC4KCShnY292X3JlYWRfcGFyYW1ldGVycyk6IE5ldyBmdW5j dGlvbi4KCSogZ2NjL2djb3YtaW8uaCAoc3RydWN0IGdjb3ZfcGFyYW1ldGVy X3ZhbHVlKTogTmV3IHN0cnVjdHVyZS4KCSogZ2NjL29wdHMuaCAoZXh0ZXJu IHZvaWQgY29udHJvbF93YXJuaW5nX29wdGlvbik6CgkoZ2Nvdl93cml0ZV9z dHJpbmcpOiBFbmFibGUgaW4gbGliZ2Nvdi4KCShnY292X3JlYWRfcGFyYW1l dGVycyk6IERlY2xhcmUuCgoJKiBsaWJnY2MvbGliZ2Nvdi1kcml2ZXIuYyAo c3RydWN0IGdjb3ZfaGFuZGxlcl9saXN0KTogTmV3IHN0cnVjdHVyZS4KCShm aW5kX3BhcmFtZXRlcik6IE5ldyBmdW5jdGlvbi4KCShtZXJnZV9wYXJhbWV0 ZXJzKTogRGl0dG8uCgkoZ2Nvdl9leGl0X21lcmdlX2djZGEpOiBIYW5kbGUg cGFyYW1ldGVycy4KCShnY292X2V4aXRfd3JpdGVfZ2NkYSk6IERpdHRvLgoJ KGdjb3ZfZXhpdF9kdW1wX2djb3YpOiBEaXR0by4KCShnY292X2V4aXQpOiBE aXR0by4KCShfX2djb3ZfcmVnaXN0ZXJfcHJvZmlsZV9oYW5kbGVyKTogTmV3 IGZ1bmN0aW9uLgoJKF9fZ2Nvdl9yZWNvcmRfcGFyYW1ldGVyX3ZhbHVlKTog RGl0dG8uCgkqIGxpYmdjYy9saWJnY292LmggKGdjb3ZfcmVhZF9wYXJhbWV0 ZXJzKTogRGVmaW5lLgogICAgICAgIChnY292X3JlYWRfc3RyaW5nKTogRGl0 dG8uCiAgICAgICAgKF9fZ2Nvdl9yZWdpc3Rlcl9wcm9maWxlX2hhbmRsZXIp OiBEZWNsYXJlLgogICAgICAgIChfX2djb3ZfcmVjb3JkX3BhcmFtZXRlcl92 YWx1ZSk6IERlY2xhcmUuCiAgICAgICAgKGdjb3Zfd3JpdGVfcGFyYW1ldGVy cyk6IERlY2xhcmUuCgkoR0NPVl9MSU5LQUdFIHZvaWQgZ2Nvdl93cml0ZV90 YWdfbGVuZ3RoKToKCgkqIGdjYy90ZXN0c3VpdGUvZysrLmRnL3RyZWUtcHJv Zi9mZGxvMS5DOiBOZXcgdGVzdC4KCkluZGV4OiBnY2MvYnVpbHRpbnMuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvYnVpbHRpbnMuYwkocmV2 aXNpb24gMjEwNjI0KQorKysgZ2NjL2J1aWx0aW5zLmMJKHdvcmtpbmcgY29w eSkKQEAgLTg3LDYgKzg3LDkgQEAgc3RhdGljIHJ0eCByZXN1bHRfdmVjdG9y IChpbnQsIHJ0eCk7CiAjZW5kaWYKIHN0YXRpYyB2b2lkIGV4cGFuZF9idWls dGluX3VwZGF0ZV9zZXRqbXBfYnVmIChydHgpOwogc3RhdGljIHZvaWQgZXhw YW5kX2J1aWx0aW5fcHJlZmV0Y2ggKHRyZWUpOworc3RhdGljIHJ0eCBleHBh bmRfYnVpbHRpbl9wcm9maWxlX2ludm9rZSAodHJlZSk7CitzdGF0aWMgcnR4 IGV4cGFuZF9idWlsdGluX3Byb2ZpbGVfcmVnaXN0ZXJfaGFuZGxlciAodHJl ZSk7CitzdGF0aWMgcnR4IGV4cGFuZF9idWlsdGluX3Byb2ZpbGVfcmVjb3Jk X3BhcmFtZXRlciAodHJlZSk7CiBzdGF0aWMgcnR4IGV4cGFuZF9idWlsdGlu X2FwcGx5X2FyZ3MgKHZvaWQpOwogc3RhdGljIHJ0eCBleHBhbmRfYnVpbHRp bl9hcHBseV9hcmdzXzEgKHZvaWQpOwogc3RhdGljIHJ0eCBleHBhbmRfYnVp bHRpbl9hcHBseSAocnR4LCBydHgsIHJ0eCk7CkBAIC0yMjIsNiArMjI1LDcg QEAgc3RhdGljIHRyZWUgZG9fbXBmcl9iZXNzZWxfbiAodHJlZSwgdHJlZSwg dHJlZSwKIHN0YXRpYyB0cmVlIGRvX21wZnJfcmVtcXVvICh0cmVlLCB0cmVl LCB0cmVlKTsKIHN0YXRpYyB0cmVlIGRvX21wZnJfbGdhbW1hX3IgKHRyZWUs IHRyZWUsIHRyZWUpOwogc3RhdGljIHZvaWQgZXhwYW5kX2J1aWx0aW5fc3lu Y19zeW5jaHJvbml6ZSAodm9pZCk7CitzdGF0aWMgdHJlZSBidWlsZF9jYWxs X25vZm9sZF9sb2MgKGxvY2F0aW9uX3QgbG9jLCB0cmVlIGZuZGVjbCwgaW50 IG4sIC4uLik7CiAKIC8qIFJldHVybiB0cnVlIGlmIE5BTUUgc3RhcnRzIHdp dGggX19idWlsdGluXyBvciBfX3N5bmNfLiAgKi8KIApAQCAtMTIyMyw2ICsx MjI3LDk0IEBAIGV4cGFuZF9idWlsdGluX3ByZWZldGNoICh0cmVlIGV4cCkK ICAgICBlbWl0X2luc24gKG9wMCk7CiB9CiAKKy8qIEV4cGFuZCBhIGNhbGwg dG8gX19idWlsdGluX3Byb2ZpbGVfaW52b2tlLiAgUGFzc2VkIGEgcG9pbnRl ciB0bworICAgYSByb3V0aW5lIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCBvbiAt ZnByb2ZpbGUtZ2VuZXJhdGUgY29tcGlsZXMKKyAgIGFuZCB0aGUgcHJvZmls ZSBjb3VudGVyIGFkZHJlc3MgYW5kIGRhdGEgdG8gcGFzcyB0byB0aGUgcm91 dGluZS4gICovCisKK3N0YXRpYyBydHgKK2V4cGFuZF9idWlsdGluX3Byb2Zp bGVfaW52b2tlICh0cmVlIGV4cCkKK3sKKyAgdHJlZSBmdW5jLCBjdHIsIGRh dGEsIGZuZGVjbDsKKyAgdHJlZSBjYWxsOworICBsb2NhdGlvbl90IGxvYyA9 IEVYUFJfTE9DQVRJT04gKGV4cCk7CisKKyAgLyogVGhpcyBpcyBvbmx5IHJl bGV2ZW50IHRvIC1mcHJvZmlsZS1nZW5lcmF0ZSBjb21waWxlcy4gICovCisg IGlmICghIHByb2ZpbGVfYXJjX2ZsYWcpCisgICAgcmV0dXJuIGNvbnN0MF9y dHg7CisKKyAgaWYgKCF2YWxpZGF0ZV9hcmdsaXN0IChleHAsIFBPSU5URVJf VFlQRSwKKyAJCQkgUE9JTlRFUl9UWVBFLCBJTlRFR0VSX1RZUEUsIFZPSURf VFlQRSkpCisgICAgcmV0dXJuIE5VTExfUlRYOworCisgIC8qIEFyZ3VtZW50 IDAgaXMgdGhlIHByb2ZpbGUgdXBkYXRlIGZ1bmN0aW9uIHRvIGNhbGwuICAq LworICBmdW5jID0gQ0FMTF9FWFBSX0FSRyAoZXhwLCAwKTsKKyAgZ2NjX2Fz c2VydCAoVFJFRV9DT0RFIChmdW5jKSA9PSBBRERSX0VYUFIpOworICBnY2Nf YXNzZXJ0IChUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAoZnVuYywgMCkpID09 IEZVTkNUSU9OX0RFQ0wpOworICBmbmRlY2wgPSBUUkVFX09QRVJBTkQgKGZ1 bmMsIDApOworCisgIC8qIEFyZ3VtZW50IDEgaXMgdGhlIGNvdW50ZXIgYWRk cmVzcyB0byBwYXNzIHRvIHRoZSBwcm9maWxlCisgICAgIHVwZGF0ZSBmdW5j dGlvbi4gICovCisgIGN0ciA9IENBTExfRVhQUl9BUkcgKGV4cCwgMSk7CisK KyAgLyogQXJndW1lbnQgMSBpcyB0aGUgZGF0YSBiZWluZyBwcm9maWxlZCB0 byBwYXNzIHRvIHRoZSBwcm9maWxlCisgICAgIHVwZGF0ZSBmdW5jdGlvbi4g ICovCisgIGRhdGEgPSBDQUxMX0VYUFJfQVJHIChleHAsIDIpOworCisgIGNh bGwgPSBidWlsZF9jYWxsX2V4cHJfbG9jIChsb2MsIGZuZGVjbCwgMiwgY3Ry LCBkYXRhKTsKKworICByZXR1cm4gZXhwYW5kX25vcm1hbCAoY2FsbCk7Cit9 CisKKy8qIEV4cGFuZCBhIGNhbGwgdG8gX19idWlsdGluX3Byb2ZpbGVfcmVn aXN0ZXJfaGFuZGxlci4gIFBhc3NlZCBhIHBvaW50ZXIgdG8KKyAgIGEgcm91 dGluZSB0aGF0IHNob3VsZCBiZSBjYWxsZWQgYXRleGl0IGluIC1mcHJvZmls ZS1nZW5lcmF0ZSBiaW5hcmllcy4gICovCisKK3N0YXRpYyBydHgKK2V4cGFu ZF9idWlsdGluX3Byb2ZpbGVfcmVnaXN0ZXJfaGFuZGxlciAodHJlZSBleHAp Cit7CisgIHRyZWUgZm4sIGZuZGVjbDsKKworICAvKiBUaGlzIGlzIG9ubHkg cmVsZXZlbnQgdG8gLWZwcm9maWxlLWdlbmVyYXRlIGNvbXBpbGVzLiAgKi8K KyAgaWYgKCEgcHJvZmlsZV9hcmNfZmxhZykKKyAgICByZXR1cm4gY29uc3Qw X3J0eDsKKworICAvKiBBcmd1bWVudCAwIGlzIHRoZSBmdW5jdGlvbiB0byBj YWxsIGF0ZXhpdC4gICovCisgIHRyZWUgYXJnMCA9IENBTExfRVhQUl9BUkcg KGV4cCwgMCk7CisgIHRyZWUgZm50eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlw ZV9saXN0ICh2b2lkX3R5cGVfbm9kZSwgcHRyX3R5cGVfbm9kZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTExfVFJF RSk7CisgIGZuZGVjbCA9IGJ1aWxkX2ZuX2RlY2wgKCJfX2djb3ZfcmVnaXN0 ZXJfcHJvZmlsZV9oYW5kbGVyIiwgZm50eXBlKTsKKyAgZm4gPSBidWlsZF9j YWxsX25vZm9sZF9sb2MgKEVYUFJfTE9DQVRJT04gKGV4cCksIGZuZGVjbCwg MSwgYXJnMCk7CisgIGdjY19hc3NlcnQgKFRSRUVfQ09ERSAoZm4pID09IENB TExfRVhQUik7CisgIENBTExfRVhQUl9UQUlMQ0FMTCAoZm4pID0gQ0FMTF9F WFBSX1RBSUxDQUxMIChleHApOworICByZXR1cm4gZXhwYW5kX2NhbGwgKGZu LCBjb25zdDBfcnR4LCAxKTsKK30KKworLyogRXhwYW5kIGEgY2FsbCB0byBf X2J1aWx0aW5fcHJvZmlsZV9yZWNvcmRfcGFyYW1ldGVyLiAgUGFzc2VkIGEg cG9pbnRlciB0bworICAgdGhlIHN0cmluZyBob2xkaW5nIHRoZSBwYXJhbWV0 ZXIgbmFtZSBhbmQgYW4gaW50ZWdlciB2YWx1ZSB0byBhc3NvY2lhdGUKKyAg IHdpdGggaXQuIFRoZXNlIGFyZSBwYXNzZWQgdG8gYSBzeW50aGVzaXplZCBj YWxsIHRvCisgICBfX2djb3ZfcmVjb3JkX3BhcmFtZXRlcl92YWx1ZS4gICov CisKK3N0YXRpYyBydHgKK2V4cGFuZF9idWlsdGluX3Byb2ZpbGVfcmVjb3Jk X3BhcmFtZXRlciAodHJlZSBleHApCit7CisgIHRyZWUgZm4sIGZuZGVjbDsK KworICAvKiBUaGlzIGlzIG9ubHkgcmVsZXZlbnQgdG8gLWZwcm9maWxlLWdl bmVyYXRlIGNvbXBpbGVzLiAgKi8KKyAgaWYgKCEgcHJvZmlsZV9hcmNfZmxh ZykKKyAgICByZXR1cm4gY29uc3QwX3J0eDsKKworICAvKiBBcmd1bWVudCAw IGlzIHRoZSBwYXJhbWV0ZXIgbmFtZS4gICovCisgIHRyZWUgYXJnMCA9IENB TExfRVhQUl9BUkcgKGV4cCwgMCk7CisgIC8qIEFyZ3VtZW50IDAgaXMgdGhl IHZhbHVlIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBwYXJhbWV0ZXIgbmFtZS4g ICovCisgIHRyZWUgYXJnMSA9IENBTExfRVhQUl9BUkcgKGV4cCwgMSk7Cisg IHRyZWUgZm50eXBlID0gYnVpbGRfZnVuY3Rpb25fdHlwZV9saXN0ICh2b2lk X3R5cGVfbm9kZSwgY29uc3RfcHRyX3R5cGVfbm9kZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXJfdHlwZV9u b2RlLCBOVUxMX1RSRUUpOworICBmbmRlY2wgPSBidWlsZF9mbl9kZWNsICgi X19nY292X3JlY29yZF9wYXJhbWV0ZXJfdmFsdWUiLCBmbnR5cGUpOworICBm biA9IGJ1aWxkX2NhbGxfbm9mb2xkX2xvYyAoRVhQUl9MT0NBVElPTiAoZXhw KSwgZm5kZWNsLCAyLCBhcmcwLCBhcmcxKTsKKyAgZ2NjX2Fzc2VydCAoVFJF RV9DT0RFIChmbikgPT0gQ0FMTF9FWFBSKTsKKyAgQ0FMTF9FWFBSX1RBSUxD QUxMIChmbikgPSBDQUxMX0VYUFJfVEFJTENBTEwgKGV4cCk7CisgIHJldHVy biBleHBhbmRfY2FsbCAoZm4sIGNvbnN0MF9ydHgsIDEpOworfQorCiAvKiBH ZXQgYSBNRU0gcnR4IGZvciBleHByZXNzaW9uIEVYUCB3aGljaCBpcyB0aGUg YWRkcmVzcyBvZiBhbiBvcGVyYW5kCiAgICB0byBiZSB1c2VkIGluIGEgc3Ry aW5nIGluc3RydWN0aW9uIChjbXBzdHJzaSwgbW92bWVtc2ksIC4uKS4gIExF TiBpcwogICAgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBibG9jayBvZiBt ZW1vcnkgdGhhdCBtaWdodCBiZSBhY2Nlc3NlZCBvcgpAQCAtNjM3NSw2ICs2 NDY3LDEyIEBAIGV4cGFuZF9idWlsdGluICh0cmVlIGV4cCwgcnR4IHRhcmdl dCwgcnR4IHN1YnRhcmdlCiAgICAgICByZXR1cm4gZXhwYW5kX2J1aWx0aW5f ZXhwZWN0IChleHAsIHRhcmdldCk7CiAgICAgY2FzZSBCVUlMVF9JTl9BU1NV TUVfQUxJR05FRDoKICAgICAgIHJldHVybiBleHBhbmRfYnVpbHRpbl9hc3N1 bWVfYWxpZ25lZCAoZXhwLCB0YXJnZXQpOworICAgIGNhc2UgQlVJTFRfSU5f UFJPRklMRV9JTlZPS0U6CisgICAgICByZXR1cm4gZXhwYW5kX2J1aWx0aW5f cHJvZmlsZV9pbnZva2UgKGV4cCk7CisgICAgY2FzZSBCVUlMVF9JTl9QUk9G SUxFX1JFR0lTVEVSX0hBTkRMRVI6CisgICAgICByZXR1cm4gZXhwYW5kX2J1 aWx0aW5fcHJvZmlsZV9yZWdpc3Rlcl9oYW5kbGVyIChleHApOworICAgIGNh c2UgQlVJTFRfSU5fUFJPRklMRV9SRUNPUkRfUEFSQU1FVEVSOgorICAgICAg cmV0dXJuIGV4cGFuZF9idWlsdGluX3Byb2ZpbGVfcmVjb3JkX3BhcmFtZXRl ciAoZXhwKTsKICAgICBjYXNlIEJVSUxUX0lOX1BSRUZFVENIOgogICAgICAg ZXhwYW5kX2J1aWx0aW5fcHJlZmV0Y2ggKGV4cCk7CiAgICAgICByZXR1cm4g Y29uc3QwX3J0eDsKSW5kZXg6IGdjYy9idWlsdGlucy5kZWYKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gZ2NjL2J1aWx0aW5zLmRlZgkocmV2aXNpb24g MjEwNjI0KQorKysgZ2NjL2J1aWx0aW5zLmRlZgkod29ya2luZyBjb3B5KQpA QCAtNzkzLDYgKzc5MywxOCBAQCBERUZfQlVJTFRJTiAoQlVJTFRfSU5fUFJP RklMRV9GVU5DX0VOVEVSLCAiX19jeWdfcAogREVGX0JVSUxUSU4gKEJVSUxU X0lOX1BST0ZJTEVfRlVOQ19FWElULCAiX19jeWdfcHJvZmlsZV9mdW5jX2V4 aXQiLCBCVUlMVF9JTl9OT1JNQUwsIEJUX0ZOX1ZPSURfUFRSX1BUUiwgQlRf TEFTVCwKIAkgICAgIGZhbHNlLCBmYWxzZSwgZmFsc2UsIEFUVFJfTlVMTCwg dHJ1ZSwgdHJ1ZSkKIAorREVGX0JVSUxUSU4gKEJVSUxUX0lOX1BST0ZJTEVf SU5WT0tFLCAiX19idWlsdGluX3Byb2ZpbGVfaW52b2tlIiwKKyAgICAgICAg ICAgICBCVUlMVF9JTl9OT1JNQUwsIEJUX0ZOX1ZPSURfUFRSX0ZOX1ZPSURf UFRSX0xPTkdMT05HX1BUUl9MT05HTE9ORywKKyAgICAgICAgICAgICBCVF9M QVNULCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBBVFRSX05VTEwsIHRydWUsIHRy dWUpCisKK0RFRl9CVUlMVElOIChCVUlMVF9JTl9QUk9GSUxFX1JFR0lTVEVS X0hBTkRMRVIsICJfX2J1aWx0aW5fcHJvZmlsZV9yZWdpc3Rlcl9oYW5kbGVy IiwKKyAgICAgICAgICAgICBCVUlMVF9JTl9OT1JNQUwsIEJUX0ZOX1ZPSURf UFRSX0ZOX1ZPSUQsCisgICAgICAgICAgICAgQlRfTEFTVCwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgQVRUUl9OVUxMLCB0cnVlLCB0cnVlKQorCitERUZfQlVJ TFRJTiAoQlVJTFRfSU5fUFJPRklMRV9SRUNPUkRfUEFSQU1FVEVSLCAiX19i dWlsdGluX3Byb2ZpbGVfcmVjb3JkX3BhcmFtZXRlciIsCisgICAgICAgICAg ICAgQlVJTFRfSU5fTk9STUFMLCBCVF9GTl9WT0lEX0NPTlNUX1BUUl9MT05H TE9ORywKKyAgICAgICAgICAgICBCVF9MQVNULCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBBVFRSX05VTEwsIHRydWUsIHRydWUpCisKIC8qIFRMUyB0aHJlYWQg cG9pbnRlciByZWxhdGVkIGJ1aWx0aW5zLiAgKi8KIERFRl9CVUlMVElOIChC VUlMVF9JTl9USFJFQURfUE9JTlRFUiwgIl9fYnVpbHRpbl90aHJlYWRfcG9p bnRlciIsCiAJICAgICBCVUlMVF9JTl9OT1JNQUwsIEJUX0ZOX1BUUiwgQlRf TEFTVCwKSW5kZXg6IGdjYy9idWlsdGluLXR5cGVzLmRlZgo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBnY2MvYnVpbHRpbi10eXBlcy5kZWYJKHJldmlz aW9uIDIxMDYyNCkKKysrIGdjYy9idWlsdGluLXR5cGVzLmRlZgkod29ya2lu ZyBjb3B5KQpAQCAtMzYyLDYgKzM2MiwxOCBAQCBERUZfRlVOQ1RJT05fVFlQ RV8zIChCVF9GTl9WT0lEX1BUUl9JTlRfSU5ULAogCQkgICAgIEJUX1ZPSUQs IEJUX1BUUiwgQlRfSU5ULCBCVF9JTlQpCiBERUZfRlVOQ1RJT05fVFlQRV8z IChCVF9GTl9WT0lEX0NPTlNUX1BUUl9QVFJfU0laRSwKIAkJICAgICBCVF9W T0lELCBCVF9DT05TVF9QVFIsIEJUX1BUUiwgQlRfU0laRSkKK0RFRl9GVU5D VElPTl9UWVBFXzIgKEJUX0ZOX1ZPSURfUFRSX0xPTkdMT05HLAorCQkgICAg IEJUX1ZPSUQsIEJUX1BUUiwgQlRfTE9OR0xPTkcpCitERUZfUE9JTlRFUl9U WVBFIChCVF9QVFJfRk5fVk9JRF9QVFJfTE9OR0xPTkcsIEJUX0ZOX1ZPSURf UFRSX0xPTkdMT05HKQorREVGX0ZVTkNUSU9OX1RZUEVfMyAoQlRfRk5fVk9J RF9QVFJfRk5fVk9JRF9QVFJfTE9OR0xPTkdfUFRSX0xPTkdMT05HLAorCQkg ICAgIEJUX1ZPSUQsIEJUX1BUUl9GTl9WT0lEX1BUUl9MT05HTE9ORywgQlRf UFRSLCBCVF9MT05HTE9ORykKKworREVGX1BPSU5URVJfVFlQRSAoQlRfUFRS X0ZOX1ZPSUQsIEJUX0ZOX1ZPSUQpCitERUZfRlVOQ1RJT05fVFlQRV8xIChC VF9GTl9WT0lEX1BUUl9GTl9WT0lELCBCVF9WT0lELCBCVF9QVFJfRk5fVk9J RCkKKworREVGX0ZVTkNUSU9OX1RZUEVfMiAoQlRfRk5fVk9JRF9DT05TVF9Q VFJfTE9OR0xPTkcsIEJUX1ZPSUQsIEJUX0NPTlNUX1BUUiwKKyAgICAgICAg ICAgICAgICAgICAgIEJUX0xPTkdMT05HKQorCiBERUZfRlVOQ1RJT05fVFlQ RV8zIChCVF9GTl9JTlRfU1RSSU5HX0NPTlNUX1NUUklOR19WQUxJU1RfQVJH LAogCQkgICAgIEJUX0lOVCwgQlRfU1RSSU5HLCBCVF9DT05TVF9TVFJJTkcs IEJUX1ZBTElTVF9BUkcpCiBERUZfRlVOQ1RJT05fVFlQRV8zIChCVF9GTl9J TlRfQ09OU1RfU1RSSU5HX0NPTlNUX1NUUklOR19WQUxJU1RfQVJHLApJbmRl eDogZ2NjL2MtZmFtaWx5L2MtY29tbW9uLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZ2NjL2MtZmFtaWx5L2MtY29tbW9uLmMJKHJldmlzaW9uIDIx MDYyNCkKKysrIGdjYy9jLWZhbWlseS9jLWNvbW1vbi5jCSh3b3JraW5nIGNv cHkpCkBAIC0zMTYsNiArMzE2LDcgQEAgc3RhdGljIHRyZWUgaGFuZGxlX25v Y2xvbmVfYXR0cmlidXRlICh0cmVlICosIHRyZWUKIHN0YXRpYyB0cmVlIGhh bmRsZV9sZWFmX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQs IGJvb2wgKik7CiBzdGF0aWMgdHJlZSBoYW5kbGVfYWx3YXlzX2lubGluZV9h dHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LAogCQkJCQkgICAg Ym9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRsZV9wcm9maWxlX2luaXRfYXR0 cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKIHN0 YXRpYyB0cmVlIGhhbmRsZV9nbnVfaW5saW5lX2F0dHJpYnV0ZSAodHJlZSAq LCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CiBzdGF0aWMgdHJlZSBoYW5k bGVfYXJ0aWZpY2lhbF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwg aW50LCBib29sICopOwogc3RhdGljIHRyZWUgaGFuZGxlX2ZsYXR0ZW5fYXR0 cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKQEAg LTYyOSw2ICs2MzAsOCBAQCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMg Y19jb21tb25fYXR0cmlidXRlX3RhYgogCQkJICAgICAgaGFuZGxlX2Fsd2F5 c19pbmxpbmVfYXR0cmlidXRlLCBmYWxzZSB9LAogICB7ICJnbnVfaW5saW5l IiwgICAgICAgICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwKIAkJ CSAgICAgIGhhbmRsZV9nbnVfaW5saW5lX2F0dHJpYnV0ZSwgZmFsc2UgfSwK KyAgeyAicHJvZmlsZV9pbml0IiwgICAgICAgICAgIDAsIDAsIHRydWUsICBm YWxzZSwgZmFsc2UsCisJCQkgICAgICBoYW5kbGVfcHJvZmlsZV9pbml0X2F0 dHJpYnV0ZSwgZmFsc2UgfSwKICAgeyAiYXJ0aWZpY2lhbCIsICAgICAgICAg ICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsCiAJCQkgICAgICBoYW5k bGVfYXJ0aWZpY2lhbF9hdHRyaWJ1dGUsIGZhbHNlIH0sCiAgIHsgImZsYXR0 ZW4iLCAgICAgICAgICAgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNl LApAQCAtNjU4Miw2ICs2NTg1LDQwIEBAIGhhbmRsZV9ub2lubGluZV9hdHRy aWJ1dGUgKHRyZWUgKm5vZGUsIHRyZWUgbmFtZSwKICAgcmV0dXJuIE5VTExf VFJFRTsKIH0KIAorLyogSGFuZGxlIGEgInByb2ZpbGVfaW5pdCIgYXR0cmli dXRlOyBhcmd1bWVudHMgYXMgaW4KKyAgIHN0cnVjdCBhdHRyaWJ1dGVfc3Bl Yy5oYW5kbGVyLiAgKi8KKworc3RhdGljIHRyZWUKK2hhbmRsZV9wcm9maWxl X2luaXRfYXR0cmlidXRlICh0cmVlICpub2RlLCB0cmVlIG5hbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZSBBUkdfVU5VU0VEIChh cmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgQVJH X1VOVVNFRCAoZmxhZ3MpLCBib29sICpub19hZGRfYXR0cnMpCit7CisgIHRy ZWUgZGVjbCA9ICpub2RlOworICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKGRl Y2wpOworCisgIGlmIChUUkVFX0NPREUgKGRlY2wpID09IEZVTkNUSU9OX0RF Q0wKKyAgICAgICYmIFRSRUVfQ09ERSAodHlwZSkgPT0gRlVOQ1RJT05fVFlQ RQorICAgICAgJiYgZGVjbF9mdW5jdGlvbl9jb250ZXh0IChkZWNsKSA9PSAw KQorICAgIHsKKyAgICAgIC8qIFByb2ZpbGUgaW5pdCBmdW5jdGlvbiBpcyBh IHN0YXRpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lCisgICAgICAgICBpbiAt ZnByb2ZpbGUtZ2VuZXJhdGUgY29tcGlsZXMsIGFuZCBkaXNjYXJkZWQgb3Ro ZXJ3aXNlLiAgKi8KKyAgICAgIGlmIChwcm9maWxlX2FyY19mbGFnKQorICAg ICAgICB7CisgICAgICAgICAgREVDTF9TVEFUSUNfQ09OU1RSVUNUT1IgKGRl Y2wpID0gMTsKKyAgICAgICAgICBTRVRfREVDTF9JTklUX1BSSU9SSVRZIChk ZWNsLCBERUZBVUxUX0lOSVRfUFJJT1JJVFkpOworICAgICAgICAgIFRSRUVf VVNFRCAoZGVjbCkgPSAxOworICAgICAgICAgIERFQ0xfUFJFU0VSVkVfUCAo ZGVjbCkgPSAxOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgewor ICAgICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFFIGF0dHJpYnV0 ZSBpZ25vcmVkIiwgbmFtZSk7CisgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1 ZTsKKyAgICB9CisKKyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKwogLyogSGFu ZGxlIGEgIm5vY2xvbmUiIGF0dHJpYnV0ZTsgYXJndW1lbnRzIGFzIGluCiAg ICBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMuaGFuZGxlci4gICovCiAKSW5kZXg6 IGdjYy9jLWZhbWlseS9jLW9wdHMuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBnY2MvYy1mYW1pbHkvYy1vcHRzLmMJKHJldmlzaW9uIDIxMDYyNCkK KysrIGdjYy9jLWZhbWlseS9jLW9wdHMuYwkod29ya2luZyBjb3B5KQpAQCAt MTA4OCw2ICsxMDg4LDcgQEAgY19jb21tb25fcGFyc2VfZmlsZSAodm9pZCkK ICAgICB7CiAgICAgICBjX2ZpbmlzaF9vcHRpb25zICgpOwogICAgICAgcGNo X2luaXQgKCk7CisgICAgICBzZXRfcHJvZmlsZV9wYXJhbWV0ZXJzIChwYXJz ZV9pbik7CiAgICAgICBzZXRfbGlwb19jX3BhcnNpbmdfY29udGV4dCAocGFy c2VfaW4sIGksIHZlcmJvc2UpOwogICAgICAgcHVzaF9maWxlX3Njb3BlICgp OwogCkluZGV4OiBnY2MvY29tbW9uLm9wdAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBnY2MvY29tbW9uLm9wdAkocmV2aXNpb24gMjEwNjI0KQorKysg Z2NjL2NvbW1vbi5vcHQJKHdvcmtpbmcgY29weSkKQEAgLTE4MTMsNiArMTgx MywxMCBAQCBmcHJvZmlsZS11c2U9CiBDb21tb24gSm9pbmVkIFJlamVjdE5l Z2F0aXZlCiBFbmFibGUgY29tbW9uIG9wdGlvbnMgZm9yIHBlcmZvcm1pbmcg cHJvZmlsZSBmZWVkYmFjayBkaXJlY3RlZCBvcHRpbWl6YXRpb25zLCBhbmQg c2V0IC1mcHJvZmlsZS1kaXI9CiAKK2Zwcm9maWxlLXVzZS1wYXJhbWV0ZXJz CitDb21tb24gVmFyKGZsYWdfcHJvZmlsZV91c2VfcGFyYW1ldGVycykKK1Vz ZSBwYXJhbWV0ZXJzIHNlY3Rpb24gb2YgcHJvZmlsZSBkYXRhCisKIGZwcm9m aWxlLXZhbHVlcwogQ29tbW9uIFJlcG9ydCBWYXIoZmxhZ19wcm9maWxlX3Zh bHVlcykKIEluc2VydCBjb2RlIHRvIHByb2ZpbGUgdmFsdWVzIG9mIGV4cHJl c3Npb25zCkluZGV4OiBnY2MvY292ZXJhZ2UuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvY292ZXJhZ2UuYwkocmV2aXNpb24gMjEwNjI0KQor KysgZ2NjL2NvdmVyYWdlLmMJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsx NTcsOSBAQCBzdGF0aWMgdW5zaWduZWQgbnVtX2NwcF9pbmNsdWRlcyA9IDA7 CiAvKiBUcnVlIGlmIHRoZSBjdXJyZW50IG1vZHVsZSBoYXMgYW55IGFzbSBz dGF0ZW1lbnRzLiAgKi8KIHN0YXRpYyBib29sIGhhc19hc21fc3RhdGVtZW50 OwogCisvKiBMaXN0IG9mIHBhcmFtZXRlciB2YWx1ZXMgcmVhZCBpbiBmcm9t IHRoZSBnY2RhIGZpbGUuICAqLworc3RhdGljIHN0cnVjdCBnY292X3BhcmFt ZXRlcl92YWx1ZSAqZ2Nvdl9wYXJhbWV0ZXJfdmFsdWVzID0gTlVMTDsKKwog LyogRm9yd2FyZCBkZWNsYXJhdGlvbnMuICAqLwogc3RhdGljIHZvaWQgcmVh ZF9jb3VudHNfZmlsZSAoY29uc3QgY2hhciAqLCB1bnNpZ25lZCk7CiBzdGF0 aWMgdHJlZSBidWlsZF92YXIgKHRyZWUsIHRyZWUsIGludCk7CkBAIC03ODcs NiArNzkwLDggQEAgcmVhZF9jb3VudHNfZmlsZSAoY29uc3QgY2hhciAqZGFf ZmlsZV9uYW1lLCB1bnNpZ24KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdW0uY3Ryc1tHQ09WX0NPVU5URVJfQVJDU10uaGlzdG9ncmFt KTsKIAkgIG5ld19zdW1tYXJ5ID0gMDsKIAl9CisgICAgICBlbHNlIGlmICh0 YWcgPT0gR0NPVl9UQUdfUEFSQU1FVEVSUykKKyAgICAgICAgZ2Nvdl9wYXJh bWV0ZXJfdmFsdWVzID0gZ2Nvdl9yZWFkX3BhcmFtZXRlcnMgKGxlbmd0aCk7 CiAgICAgICBlbHNlIGlmIChHQ09WX1RBR19JU19DT1VOVEVSICh0YWcpICYm IGZuX2lkZW50KQogCXsKIAkgIGNvdW50c19lbnRyeV90ICoqc2xvdCwgKmVu dHJ5LCBlbHQ7CkBAIC0yNzY0LDYgKzI3NjksNDIgQEAgY292ZXJhZ2VfZmlu aXNoICh2b2lkKQogICAgIH0KIH0KIAorLyogQWRkIHRoZSBwYXJhbWV0ZXJz IHJlY29yZGVkIGluIHRoZSBHQ09WX1RBR19QQVJBTUVURVJTIHNlY3Rpb24K KyAgIGFzIHByZXByb2Nlc3NvciBtYWNybyBkZWZpbmVzLiAgKi8KK3ZvaWQK K3NldF9wcm9maWxlX3BhcmFtZXRlcnMgKHN0cnVjdCBjcHBfcmVhZGVyICpw YXJzZV9pbikKK3sKKyAgc3RydWN0IGdjb3ZfcGFyYW1ldGVyX3ZhbHVlICpj dXJyX3Bhcm07CisKKyAgaWYgKCFmbGFnX3Byb2ZpbGVfdXNlX3BhcmFtZXRl cnMpCisgICAgcmV0dXJuOworCisgIGlmICghZ2Nvdl9wYXJhbWV0ZXJfdmFs dWVzKQorICAgIHJldHVybjsKKworICAvKiBTaW5jZSBzZXRfcHJvZmlsZV9w YXJhbWV0ZXJzIGlzIGludm9rZWQgdmVyeSBlYXJseSwgYmVmb3JlIHRoZSBw YXNzCisgICAgIG1hbmFnZXIsIHdlIG5lZWQgdG8gc2V0IHVwIHRoZSBkdW1w aW5nIGV4cGxpY2l0bHkuIFRoaXMgaXMKKyAgICAgc2ltaWxhciB0byB0aGUg aGFuZGxpbmcgaW4gZmluaXNoX29wdGltaXphdGlvbl9wYXNzZXMuICAqLwor ICBkdW1wX3N0YXJ0IChwYXNzX3Byb2ZpbGUucGFzcy5zdGF0aWNfcGFzc19u dW1iZXIsIE5VTEwpOworCisgIGZvciAoY3Vycl9wYXJtID0gZ2Nvdl9wYXJh bWV0ZXJfdmFsdWVzOyBjdXJyX3Bhcm07CisgICAgICAgY3Vycl9wYXJtID0g Y3Vycl9wYXJtLT5uZXh0KQorICAgIHsKKyAgICAgIC8qIEVub3VnaCBmb3Ig bWFjcm8gbmFtZSwgcGx1cyB0aGUgZ2Nvdl90eXBlIHZhbHVlLCBlcXVhbCBz aWduIGFuZCBudWxsCisgICAgICAgICB0ZXJtaW5hdGlvbi4gICovCisgICAg ICBjaGFyICpwYXJhbWV0ZXIgPSBYTkVXVkVDIChjaGFyLCBzdHJsZW4gKGN1 cnJfcGFybS0+bWFjcm9fbmFtZSkgKyAyNSk7CisgICAgICBzcHJpbnRmIChw YXJhbWV0ZXIsICIlcz0lbGQiLAorICAgICAgICAgICAgICAgY3Vycl9wYXJt LT5tYWNyb19uYW1lLCBjdXJyX3Bhcm0tPnZhbHVlKTsKKyAgICAgIGNwcF9k ZWZpbmUgKHBhcnNlX2luLCBwYXJhbWV0ZXIpOworICAgICAgaWYgKGR1bXBf ZW5hYmxlZF9wICgpKQorICAgICAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19P UFRJTUlaRURfTE9DQVRJT05TLCBpbnB1dF9sb2NhdGlvbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAiQWRkIC1EJXMgZnJvbSBwcm9maWxlXG4iLCBw YXJhbWV0ZXIpOworICAgICAgWERFTEVURVZFQyAocGFyYW1ldGVyKTsKKyAg ICB9CisKKyAgZHVtcF9maW5pc2ggKHBhc3NfcHJvZmlsZS5wYXNzLnN0YXRp Y19wYXNzX251bWJlcik7Cit9CisKIC8qIEFkZCBTIHRvIHRoZSBlbmQgb2Yg dGhlIHN0cmluZy1saXN0LCB0aGUgaGVhZCBhbmQgdGFpbCBvZiB3aGljaCBh cmUKICAgIHBvaW50ZWQtdG8gYnkgSEVBRCBhbmQgVEFJTCwgcmVzcGVjdGl2 ZWx5LiAgKi8KIApJbmRleDogZ2NjL2djb3YuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvZ2Nvdi5jCShyZXZpc2lvbiAyMTA2MjQpCisrKyBn Y2MvZ2Nvdi5jCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMwLDYgKzE0MzAsOCBA QCByZWFkX2NvdW50X2ZpbGUgKGZ1bmN0aW9uX3QgKmZucykKIAkgIG9iamVj dF9ydW5zICs9IHN1bW1hcnkuY3Ryc1tHQ09WX0NPVU5URVJfQVJDU10ucnVu czsKIAkgIHByb2dyYW1fY291bnQrKzsKIAl9CisgICAgICBlbHNlIGlmICh0 YWcgPT0gR0NPVl9UQUdfUEFSQU1FVEVSUykKKyAgICAgICAgZ2Nvdl9yZWFk X3BhcmFtZXRlcnMgKGxlbmd0aCk7CiAgICAgICBlbHNlIGlmICh0YWcgPT0g R0NPVl9UQUdfRlVOQ1RJT04gJiYgIWxlbmd0aCkKIAk7IC8qIHBsYWNlaG9s ZGVyICAqLwogICAgICAgZWxzZSBpZiAodGFnID09IEdDT1ZfVEFHX0ZVTkNU SU9OICYmIGxlbmd0aCA9PSBHQ09WX1RBR19GVU5DVElPTl9MRU5HVEgpCklu ZGV4OiBnY2MvZ2Nvdi1kdW1wLmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gZ2NjL2djb3YtZHVtcC5jCShyZXZpc2lvbiAyMTA2MjQpCisrKyBnY2Mv Z2Nvdi1kdW1wLmMJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAg c3RhdGljIHZvaWQgdGFnX2FyY3MgKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQs IHVuc2kKIHN0YXRpYyB2b2lkIHRhZ19saW5lcyAoY29uc3QgY2hhciAqLCB1 bnNpZ25lZCwgdW5zaWduZWQpOwogc3RhdGljIHZvaWQgdGFnX2NvdW50ZXJz IChjb25zdCBjaGFyICosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CiBzdGF0aWMg dm9pZCB0YWdfc3VtbWFyeSAoY29uc3QgY2hhciAqLCB1bnNpZ25lZCwgdW5z aWduZWQpOworc3RhdGljIHZvaWQgdGFnX3BhcmFtZXRlcnMgKGNvbnN0IGNo YXIgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKIHN0YXRpYyB2b2lkIGR1bXBf d29ya2luZ19zZXRzIChjb25zdCBjaGFyICpmaWxlbmFtZSBBVFRSSUJVVEVf VU5VU0VELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHN0cnVjdCBnY292X2N0cl9zdW1tYXJ5ICpzdW1tYXJ5KTsKIHN0YXRpYyB2 b2lkIHRhZ19tb2R1bGVfaW5mbyAoY29uc3QgY2hhciAqLCB1bnNpZ25lZCwg dW5zaWduZWQpOwpAQCAtNzcsNiArNzgsNyBAQCBzdGF0aWMgY29uc3QgdGFn X2Zvcm1hdF90IHRhZ190YWJsZVtdID0KICAge0dDT1ZfVEFHX0xJTkVTLCAi TElORVMiLCB0YWdfbGluZXN9LAogICB7R0NPVl9UQUdfT0JKRUNUX1NVTU1B UlksICJPQkpFQ1RfU1VNTUFSWSIsIHRhZ19zdW1tYXJ5fSwKICAge0dDT1Zf VEFHX1BST0dSQU1fU1VNTUFSWSwgIlBST0dSQU1fU1VNTUFSWSIsIHRhZ19z dW1tYXJ5fSwKKyAge0dDT1ZfVEFHX1BBUkFNRVRFUlMsICJQQVJBTUVURVJT IiwgdGFnX3BhcmFtZXRlcnN9LAogICB7R0NPVl9UQUdfTU9EVUxFX0lORk8s ICJNT0RVTEUgSU5GTyIsIHRhZ19tb2R1bGVfaW5mb30sCiAgIHswLCBOVUxM LCBOVUxMfQogfTsKQEAgLTYyNCwzICs2MjYsMjIgQEAgZHVtcF93b3JraW5n X3NldHMgKGNvbnN0IGNoYXIgKmZpbGVuYW1lIEFUVFJJQlVURV8KICAgICAg ICAgICAgICAgIChIT1NUX1dJREVTVF9JTlQpd3NfaW5mby0+bWluX2NvdW50 ZXIpOwogICAgIH0KIH0KKworc3RhdGljIHZvaWQKK3RhZ19wYXJhbWV0ZXJz IChjb25zdCBjaGFyICpmaWxlbmFtZSBBVFRSSUJVVEVfVU5VU0VELAorICAg ICAgICAgICAgICAgIHVuc2lnbmVkIHRhZyBBVFRSSUJVVEVfVU5VU0VELCB1 bnNpZ25lZCBsZW5ndGgpCit7CisgIHN0cnVjdCBnY292X3BhcmFtZXRlcl92 YWx1ZSAqcGFyYW1ldGVyczsKKworICBwYXJhbWV0ZXJzID0gZ2Nvdl9yZWFk X3BhcmFtZXRlcnMgKGxlbmd0aCk7CisKKyAgd2hpbGUgKHBhcmFtZXRlcnMp CisgICAgeworICAgICAgcHJpbnRmICgiXG4iKTsKKyAgICAgIHByaW50X3By ZWZpeCAoZmlsZW5hbWUsIDAsIDApOworICAgICAgcHJpbnRmICgiXHRcdCVz ID0gIiwgcGFyYW1ldGVycy0+bWFjcm9fbmFtZSk7CisgICAgICBwcmludGYg KEhPU1RfV0lERVNUX0lOVF9QUklOVF9ERUMsCisJICAgICAgKEhPU1RfV0lE RVNUX0lOVClwYXJhbWV0ZXJzLT52YWx1ZSk7CisgICAgICBwYXJhbWV0ZXJz ID0gcGFyYW1ldGVycy0+bmV4dDsKKyAgICB9Cit9CkluZGV4OiBnY2MvZ2Nv di1pby5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy9nY292LWlv LmMJKHJldmlzaW9uIDIxMDYyNCkKKysrIGdjYy9nY292LWlvLmMJKHdvcmtp bmcgY29weSkKQEAgLTUyLDcgKzUyLDggQEAgR0NPVl9MSU5LQUdFIHN0cnVj dCBnY292X3ZhcgogICAvKiBIb2xkcyBvbmUgYmxvY2sgcGx1cyA0IGJ5dGVz LCB0aHVzIGFsbCBjb3ZlcmFnZSByZWFkcyAmIHdyaXRlcwogICAgICBmaXQg d2l0aGluIHRoaXMgYnVmZmVyIGFuZCB3ZSBhbHdheXMgY2FuIHRyYW5zZmVy IEdDT1ZfQkxPQ0tfU0laRQogICAgICB0byBhbmQgZnJvbSB0aGUgZGlzay4g bGliZ2NvdiBuZXZlciBiYWNrdHJhY2tzIGFuZCBvbmx5IHdyaXRlcyA0Ci0g ICAgIG9yIDggYnl0ZSBvYmplY3RzLiAgKi8KKyAgICAgb3IgOCBieXRlIG9i amVjdHMsIGV4Y2VwdCBmb3Igc3RyaW5ncywgd2hpY2ggYXJlIGhhbmRsZWQg c3BlY2lhbGx5CisgICAgIGJ5IGdjb3Zfd3JpdGVfc3RyaW5nLiAgKi8KICAg Z2Nvdl91bnNpZ25lZF90IGJ1ZmZlcltHQ09WX0JMT0NLX1NJWkUgKyAxXTsK ICNlbHNlCiAgIGludCBlbmRpYW47ICAgICAgICAgICAgICAgICAgIC8qIFN3 YXAgZW5kaWFubmVzcy4gICovCkBAIC0yNjgsNiArMjY5LDI2IEBAIGdjb3Zf YWxsb2NhdGUgKHVuc2lnbmVkIGxlbmd0aCkKIH0KICNlbmRpZgogCisvKiBS ZXR1cm4gdGhlIG51bWJlciBvZiB3b3JkcyBTVFJJTkcgd291bGQgbmVlZCBp bmNsdWRpbmcgdGhlIGxlbmd0aAorICAgZmllbGQgaW4gdGhlIG91dHB1dCBz dHJlYW0gaXRzZWxmLiAgVGhpcyBzaG91bGQgYmUgaWRlbnRpY2FsIHRvCisg ICAiYWxsb2MiIGNhbGN1bGF0aW9uIGluIGdjb3Zfd3JpdGVfc3RyaW5nKCku ICAqLworCitzdGF0aWMgZ2Nvdl91bnNpZ25lZF90CitnY292X3N0cmluZ19s ZW5ndGggKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgZ2Nvdl91bnNpZ25l ZF90IGxlbiA9IChzdHJpbmcpID8gc3RybGVuIChzdHJpbmcpIDogMDsKKyAg LyogKyAxIGJlY2F1c2Ugb2YgdGhlIGxlbmd0aCBmaWVsZC4gICovCisgIGdj b3ZfdW5zaWduZWRfdCBhbGxvYyA9IDEgKyAoKGxlbiArIDQpID4+IDIpOwor CisjaWYgSU5fTElCR0NPVgorICAvKiBDdXJyZW50bHksIGxpYmdjb3YgY2Fu bm90IHdyaXRlIHN0cmluZ3MgbGFyZ2VyIHRoYW4KKyAgICAgR0NPVl9CTE9D S19TSVpFLCBkdWUgdG8gdGhlIHN0YXRpYyBidWZmZXIgc2l6ZS4gICovCisg IGdjY19hc3NlcnQgKGFsbG9jIDwgR0NPVl9CTE9DS19TSVpFKTsKKyNlbmRp ZgorCisgIHJldHVybiBhbGxvYzsKK30KKwogI2lmICFJTl9HQ09WCiAvKiBX cml0ZSBvdXQgdGhlIGN1cnJlbnQgYmxvY2ssIGlmIG5lZWRzIGJlLiAgKi8K IApAQCAtMzM3LDcgKzM1OCw2IEBAIGdjb3Zfd3JpdGVfY291bnRlciAoZ2Nv dl90eXBlIHZhbHVlKQogfQogI2VuZGlmIC8qIElOX0xJQkdDT1YgKi8KIAot I2lmICFJTl9MSUJHQ09WCiAvKiBXcml0ZSBTVFJJTkcgdG8gY292ZXJhZ2Ug ZmlsZS4gIFNldHMgZXJyb3IgZmxhZyBvbiBmaWxlCiAgICBlcnJvciwgb3Zl cmZsb3cgZmxhZyBvbiBvdmVyZmxvdyAqLwogCkBAIC0zNTIsMTUgKzM3Miw0 MSBAQCBnY292X3dyaXRlX3N0cmluZyAoY29uc3QgY2hhciAqc3RyaW5nKQog ICAgIHsKICAgICAgIGxlbmd0aCA9IHN0cmxlbiAoc3RyaW5nKTsKICAgICAg IGFsbG9jID0gKGxlbmd0aCArIDQpID4+IDI7CisjaWYgSU5fTElCR0NPVgor ICAgICAgLyogQ3VycmVudGx5LCBsaWJnY292IGNhbm5vdCB3cml0ZSBzdHJp bmdzIGxhcmdlciB0aGFuCisgICAgICAgICBHQ09WX0JMT0NLX1NJWkUsIGR1 ZSB0byB0aGUgc3RhdGljIGJ1ZmZlciBzaXplLiAgKi8KKyAgICAgIGdjY19h c3NlcnQgKGFsbG9jICsgMSA8IEdDT1ZfQkxPQ0tfU0laRSk7CisgICAgICAv KiBFbnN1cmUgd2UgZG8gbm90IG92ZXJmbG93IGJ1ZmZlciwgd2hpY2ggaXMg c3RhdGljYWxseQorICAgICAgICAgYWxsb2NhdGVkIHRvIEdDT1ZfQkxPQ0tf U0laRSArIDEgaW4gbGliZ2Nvdi4gU2luY2UKKyAgICAgICAgIGdjb3Zfd3Jp dGVfd29yZHMgd2lsbCB3cml0ZSBvdXQgYSBHQ09WX0JMT0NLX1NJWkUgYXQK KyAgICAgICAgIGEgdGltZSBhbmQgZXhwZWN0cyB0byBvbmx5IGV4Y2VlZCB0 aGlzIGJ5IGF0IG1vc3QgMSwKKyAgICAgICAgIHdlIG5lZWQgdG8gY2hlY2sg d2hldGhlciB0aGUgb2Zmc2V0IGlzIGxhcmdlIGVub3VnaCB0bworICAgICAg ICAgY2F1c2UgYSBibG9jayB0byBiZSB3cml0dGVuIG9uIGVudHJ5IHRvIGdj b3Zfd3JpdGVfd29yZHMgYW5kIGlmCisgICAgICAgICBub3QsIHdoZXRoZXIg dGhlIG5ldyBzdHJpbmcgd291bGQgY2F1c2UgdGhlIGJ1ZmZlciB0bworICAg ICAgICAgb3ZlcmZsb3cuIElmIHNvLCB3cml0ZSBvdXQgdGhlIGN1cnJlbnQg YnVmZmVyIGNvbnRlbnRzCisgICAgICAgICB0byBtYWtlIHNwYWNlIGZvciBz dHJpbmcgYW5kIHRoZSBzdWJzZXF1ZW50IGNhbGwKKyAgICAgICAgIHRvIGdj b3Zfd3JpdGVfd29yZHMgKHdoaWNoIGlzIG90aGVyd2lzZSBjYWxsZWQgd2l0 aAorICAgICAgICAgMSBvciAyIHdvcmRzKS4gICovCisgICAgICBpZiAoZ2Nv dl92YXIub2Zmc2V0IDwgR0NPVl9CTE9DS19TSVpFCisgICAgICAgICAgJiYg Z2Nvdl92YXIub2Zmc2V0ICsgYWxsb2MgKyAxID49IEdDT1ZfQkxPQ0tfU0la RSkKKyAgICAgICAgeworICAgICAgICAgIGdjb3Zfd3JpdGVfYmxvY2sgKGdj b3ZfdmFyLm9mZnNldCk7CisgICAgICAgICAgZ2NjX2Fzc2VydCAoIWdjb3Zf dmFyLm9mZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgogICAgIH0KIAogICBi dWZmZXIgPSBnY292X3dyaXRlX3dvcmRzICgxICsgYWxsb2MpOwogCiAgIGJ1 ZmZlclswXSA9IGFsbG9jOwotICBidWZmZXJbYWxsb2NdID0gMDsKLSAgbWVt Y3B5ICgmYnVmZmVyWzFdLCBzdHJpbmcsIGxlbmd0aCk7CisKKyAgLyogQ29w eSBpbiBzdHJpbmcgaWYgaXQgaXMgbm9uLWVtcHR5LiAgKi8KKyAgaWYgKGFs bG9jKQorICAgIHsKKyAgICAgIGJ1ZmZlclthbGxvY10gPSAwOworICAgICAg bWVtY3B5ICgmYnVmZmVyWzFdLCBzdHJpbmcsIGxlbmd0aCk7CisgICAgfQog fQotI2VuZGlmCiAKICNpZiAhSU5fTElCR0NPVgogLyogV3JpdGUgYSB0YWcg VEFHIGFuZCByZXNlcnZlIHNwYWNlIGZvciB0aGUgcmVjb3JkIGxlbmd0aC4g UmV0dXJuIGEKQEAgLTQ2NSw2ICs1MTEsMzYgQEAgZ2Nvdl93cml0ZV9zdW1t YXJ5IChnY292X3Vuc2lnbmVkX3QgdGFnLCBjb25zdCBzdHIKICAgICAgICAg fQogICAgIH0KIH0KKworLyogV3JpdGUgcGFyYW1ldGVyIHZhbHVlcyB0byB0 aGUgZ2NvdiBmaWxlLiBUaGVzZSBzaG91bGQgYmUgYXBwbGllZAorICAgdG8g cHJvZmlsZS11c2UgY29tcGlsZXMgYXMgbWFjcm8gZGVmaW5pdGlvbnMgYnkg dGhlIGNvbXBpbGVyLiAgKi8KKworR0NPVl9MSU5LQUdFIHZvaWQKK2djb3Zf d3JpdGVfcGFyYW1ldGVycyAoc3RydWN0IGdjb3ZfcGFyYW1ldGVyX3ZhbHVl ICpwYXJhbWV0ZXJzKQoreworICBnY292X3Vuc2lnbmVkX3QgbGVuID0gMDsK KyAgc3RydWN0IGdjb3ZfcGFyYW1ldGVyX3ZhbHVlICpjdXJyX3Bhcm07CisK KyAgaWYgKCFwYXJhbWV0ZXJzKQorICAgIHJldHVybjsKKworICBmb3IgKGN1 cnJfcGFybSA9IHBhcmFtZXRlcnM7IGN1cnJfcGFybTsKKyAgICAgICBjdXJy X3Bhcm0gPSBjdXJyX3Bhcm0tPm5leHQpCisgICAgeworICAgICAgLyogRWFj aCBwYXJhbWV0ZXIgY29udGFpbnMgYSBzdHJpbmcgZm9sbG93ZWQgYnkgYSAy LXdvcmQKKyAgICAgICAgIGNvdW50ZXIgdmFsdWUuICAqLworICAgICAgbGVu ICs9IGdjb3Zfc3RyaW5nX2xlbmd0aCAoY3Vycl9wYXJtLT5tYWNyb19uYW1l KSArIDI7CisgICAgfQorCisgIGdjb3Zfd3JpdGVfdGFnX2xlbmd0aCAoR0NP Vl9UQUdfUEFSQU1FVEVSUywgbGVuKTsKKworICBmb3IgKGN1cnJfcGFybSA9 IHBhcmFtZXRlcnM7IGN1cnJfcGFybTsKKyAgICAgICBjdXJyX3Bhcm0gPSBj dXJyX3Bhcm0tPm5leHQpCisgICAgeworICAgICAgZ2Nvdl93cml0ZV9zdHJp bmcgKGN1cnJfcGFybS0+bWFjcm9fbmFtZSk7CisgICAgICBnY292X3dyaXRl X2NvdW50ZXIgKGN1cnJfcGFybS0+dmFsdWUpOworICAgIH0KK30KICNlbmRp ZiAvKiBJTl9MSUJHQ09WICovCiAKICNlbmRpZiAvKiFJTl9HQ09WICovCkBA IC01NTUsNyArNjMxLDYgQEAgZ2Nvdl9yZWFkX2NvdW50ZXIgKHZvaWQpCiAg ICBidWZmZXIsIG9yIE5VTEwgb24gZW1wdHkgc3RyaW5nLiBZb3UgbXVzdCBj b3B5IHRoZSBzdHJpbmcgYmVmb3JlCiAgICBjYWxsaW5nIGFub3RoZXIgZ2Nv diBmdW5jdGlvbi4gICovCiAKLSNpZiAhSU5fTElCR0NPViB8fCBJTl9HQ09W X1RPT0wKIEdDT1ZfTElOS0FHRSBjb25zdCBjaGFyICoKIGdjb3ZfcmVhZF9z dHJpbmcgKHZvaWQpCiB7CkBAIC01NjYsNyArNjQxLDYgQEAgZ2Nvdl9yZWFk X3N0cmluZyAodm9pZCkKIAogICByZXR1cm4gKGNvbnN0IGNoYXIgKikgZ2Nv dl9yZWFkX3dvcmRzIChsZW5ndGgpOwogfQotI2VuZGlmCiAKIEdDT1ZfTElO S0FHRSB2b2lkCiBnY292X3JlYWRfc3VtbWFyeSAoc3RydWN0IGdjb3Zfc3Vt bWFyeSAqc3VtbWFyeSkKQEAgLTY4NSw2ICs3NTksNDIgQEAgZ2Nvdl9yZWFk X21vZHVsZV9pbmZvIChzdHJ1Y3QgZ2Nvdl9tb2R1bGVfaW5mbyAqbW8KIH0K ICNlbmRpZgogCisvKiBSZWFkIExFTkdUSCB3b3JkcyBhcyBwYXJhbWV0ZXIg dmFsdWVzLiBUaGVzZSBzaG91bGQgYmUgYXBwbGllZAorICAgdG8gcHJvZmls ZS11c2UgY29tcGlsZXMgYXMgbWFjcm8gZGVmaW5pdGlvbnMgYnkgdGhlIGNv bXBpbGVyLgorICAgUmV0dXJuIGxpbmtlZCBsaXN0IG9mIHBhcmFtZXRlcnMu ICAqLworCitHQ09WX0xJTktBR0Ugc3RydWN0IGdjb3ZfcGFyYW1ldGVyX3Zh bHVlICoKK2djb3ZfcmVhZF9wYXJhbWV0ZXJzIChnY292X3Vuc2lnbmVkX3Qg bGVuZ3RoKQoreworICB1bnNpZ25lZCBsZW4gPSBsZW5ndGg7CisgIHN0cnVj dCBnY292X3BhcmFtZXRlcl92YWx1ZSAqY3Vycl9wYXJtLCAqcGFyYW1ldGVy cyA9IDA7CisgIGNvbnN0IGNoYXIgKnN0cjsKKworICB3aGlsZSAobGVuID4g MCkKKyAgICB7CisgICAgICB1bnNpZ25lZCBjdXJfbGVuOworICAgICAgc3Ry ID0gZ2Nvdl9yZWFkX3N0cmluZyAoKTsKKyNpZiBJTl9MSUJHQ09WCisgICAg ICBjdXJyX3Bhcm0gPSAoc3RydWN0IGdjb3ZfcGFyYW1ldGVyX3ZhbHVlICop CisgICAgICAgICAgeG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZ2Nvdl9wYXJh bWV0ZXJfdmFsdWUpKTsKKyAgICAgIGN1cnJfcGFybS0+bWFjcm9fbmFtZSA9 IChjaGFyICopIHhtYWxsb2MgKHN0cmxlbiAoc3RyKSArIDEpOworICAgICAg c3RyY3B5IChjdXJyX3Bhcm0tPm1hY3JvX25hbWUsIHN0cik7CisjZWxzZQor ICAgICAgY3Vycl9wYXJtID0gKHN0cnVjdCBnY292X3BhcmFtZXRlcl92YWx1 ZSAqKQorICAgICAgICAgIHhtYWxsb2MgKHNpemVvZiAoc3RydWN0IGdjb3Zf cGFyYW1ldGVyX3ZhbHVlKSk7CisgICAgICBjdXJyX3Bhcm0tPm1hY3JvX25h bWUgPSBzdHIgPyB4c3RyZHVwIChzdHIpIDogMDsKKyNlbmRpZgorICAgICAg Y3Vycl9wYXJtLT5uZXh0ID0gcGFyYW1ldGVyczsKKyAgICAgIHBhcmFtZXRl cnMgPSBjdXJyX3Bhcm07CisgICAgICBjdXJyX3Bhcm0tPnZhbHVlID0gZ2Nv dl9yZWFkX2NvdW50ZXIgKCk7CisgICAgICBjdXJfbGVuID0gZ2Nvdl9zdHJp bmdfbGVuZ3RoIChzdHIpICsgMjsKKyAgICAgIGdjY19hc3NlcnQgKGxlbiA+ PSBjdXJfbGVuKTsKKyAgICAgIGxlbiAtPSBjdXJfbGVuOworICAgIH0KKwor ICByZXR1cm4gcGFyYW1ldGVyczsKK30KKwogI2lmICFJTl9MSUJHQ09WIHx8 IElOX0dDT1ZfVE9PTAogLyogUmVzZXQgdG8gYSBrbm93biBwb3NpdGlvbi4g IEJBU0Ugc2hvdWxkIGhhdmUgYmVlbiBvYnRhaW5lZCBmcm9tCiAgICBnY292 X3Bvc2l0aW9uLCBMRU5HVEggc2hvdWxkIGJlIGEgcmVjb3JkIGxlbmd0aC4g ICovCkluZGV4OiBnY2MvZ2Nvdi1pby5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGdjYy9nY292LWlvLmgJKHJldmlzaW9uIDIxMDYyNCkKKysrIGdj Yy9nY292LWlvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBA QCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUg cmVzcGVjdAogICAgYmxvY2tzIHRoZXkgYXJlIGZvci4KIAogICAgVGhlIGRh dGEgZmlsZSBjb250YWlucyB0aGUgZm9sbG93aW5nIHJlY29yZHMuCi0gICAg ICAgIGRhdGE6IHt1bml0IHN1bW1hcnk6b2JqZWN0IHN1bW1hcnk6cHJvZ3Jh bSogZnVuY3Rpb24tZGF0YSp9KgorICAgICAgICBkYXRhOiB7dW5pdCBzdW1t YXJ5OnByb2dyYW0qIHBhcmFtZXRlci1kYXRhIGZ1bmN0aW9uLWRhdGEqfSoK IAl1bml0OiBoZWFkZXIgaW50MzI6Y2hlY2tzdW0KICAgICAgICAgZnVuY3Rp b24tZGF0YToJYW5ub3VuY2VfZnVuY3Rpb24gcHJlc2VudCBjb3VudHMKIAlh bm5vdW5jZV9mdW5jdGlvbjogaGVhZGVyIGludDMyOmlkZW50CkBAIC0xNDEs NiArMTQxLDggQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlO Ry5SVU5USU1FIHJlc3BlY3QKIAkJCWludDY0Om1heCBpbnQ2NDpzdW1fbWF4 IGhpc3RvZ3JhbQogICAgICAgICBoaXN0b2dyYW06IHtpbnQzMjpiaXR2ZWN0 b3J9OCBoaXN0b2dyYW0tYnVja2V0cyoKICAgICAgICAgaGlzdG9ncmFtLWJ1 Y2tldHM6IGludDMyOm51bSBpbnQ2NDptaW4gaW50NjQ6c3VtCisgICAgICAg IHBhcmFtZXRlci1kYXRhOiBoZWFkZXIgcGFybS12YWx1ZSoKKyAgICAgICAg cGFybS12YWx1ZTogc3RyaW5nOm1hY3JvX25hbWUgaW50NjQ6dmFsdWUKIAog ICAgVGhlIEFOTk9VTkNFX0ZVTkNUSU9OIHJlY29yZCBpcyB0aGUgc2FtZSBh cyB0aGF0IGluIHRoZSBub3RlIGZpbGUsCiAgICBidXQgd2l0aG91dCB0aGUg c291cmNlIGxvY2F0aW9uLiAgVGhlIENPVU5UUyBnaXZlcyB0aGUKQEAgLTE0 OCw5ICsxNTAsOCBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZ SU5HLlJVTlRJTUUgcmVzcGVjdAogICAgcHJvZ3JhbS4gIFRoZSBjaGVja3N1 bSBpcyB1c2VkIGZvciB3aG9sZSBwcm9ncmFtIHN1bW1hcmllcywgYW5kCiAg ICBkaXNhbWJpZ3VhdGVzIGRpZmZlcmVudCBwcm9ncmFtcyB3aGljaCBpbmNs dWRlIHRoZSBzYW1lCiAgICBpbnN0cnVtZW50ZWQgb2JqZWN0IGZpbGUuICBU aGVyZSBtYXkgYmUgc2V2ZXJhbCBwcm9ncmFtIHN1bW1hcmllcywKLSAgIGVh Y2ggd2l0aCBhIHVuaXF1ZSBjaGVja3N1bS4gIFRoZSBvYmplY3Qgc3VtbWFy eSdzIGNoZWNrc3VtIGlzCi0gICB6ZXJvLiAgTm90ZSB0aGF0IHRoZSBkYXRh IGZpbGUgbWlnaHQgY29udGFpbiBpbmZvcm1hdGlvbiBmcm9tCi0gICBzZXZl cmFsIHJ1bnMgY29uY2F0ZW5hdGVkLCBvciB0aGUgZGF0YSBtaWdodCBiZSBt ZXJnZWQuCisgICBlYWNoIHdpdGggYSB1bmlxdWUgY2hlY2tzdW0uICBOb3Rl IHRoYXQgdGhlIGRhdGEgZmlsZSBtaWdodCBjb250YWluCisgICBpbmZvcm1h dGlvbiBmcm9tIHNldmVyYWwgcnVucyBjb25jYXRlbmF0ZWQsIG9yIHRoZSBk YXRhIG1pZ2h0IGJlIG1lcmdlZC4KIAogICAgVGhpcyBmaWxlIGlzIGluY2x1 ZGVkIGJ5IGJvdGggdGhlIGNvbXBpbGVyLCBnY292IHRvb2xzIGFuZCB0aGUK ICAgIHJ1bnRpbWUgc3VwcG9ydCBsaWJyYXJ5IGxpYmdjb3YuIElOX0xJQkdD T1YgYW5kIElOX0dDT1YgYXJlIHVzZWQgdG8KQEAgLTI1Nyw2ICsyNTgsNyBA QCB0eXBlZGVmIHVuc2lnbmVkIEhPU1RfV0lERVNUX0lOVCBnY292X3R5cGVf dW5zaWduZQogI2RlZmluZSBHQ09WX1RBR19QUk9HUkFNX1NVTU1BUlkgKChn Y292X3Vuc2lnbmVkX3QpMHhhMzAwMDAwMCkKICNkZWZpbmUgR0NPVl9UQUdf U1VNTUFSWV9MRU5HVEgoTlVNKSAgXAogICAgICAgICAoMSArIEdDT1ZfQ09V TlRFUlNfU1VNTUFCTEUgKiAoMTAgKyAzICogMikgKyAoTlVNKSAqIDUpCisj ZGVmaW5lIEdDT1ZfVEFHX1BBUkFNRVRFUlMgICAgKChnY292X3Vuc2lnbmVk X3QpMHhhNTAwMDAwMCkKICNkZWZpbmUgR0NPVl9UQUdfTU9EVUxFX0lORk8g KChnY292X3Vuc2lnbmVkX3QpMHhhYjAwMDAwMCkKICNkZWZpbmUgR0NPVl9U QUdfQUZET19GSUxFX05BTUVTICgoZ2Nvdl91bnNpZ25lZF90KTB4YWEwMDAw MDApCiAjZGVmaW5lIEdDT1ZfVEFHX0FGRE9fRlVOQ1RJT04gKChnY292X3Vu c2lnbmVkX3QpMHhhYzAwMDAwMCkKQEAgLTQzNiw2ICs0MzgsMTUgQEAgZXh0 ZXJuIHVuc2lnbmVkIHByaW1hcnlfbW9kdWxlX2lkOwogICAgJiYgISgobW9k dWxlX2luZm9zWzBdLT5sYW5nICYgR0NPVl9NT0RVTEVfQVNNX1NUTVRTKQkJ CVwKIAkmJiBmbGFnX3JpcGFfZGlzYWxsb3dfYXNtX21vZHVsZXMpKQogCisv KiBQYXJhbWV0ZXIgdmFsdWVzIGRldGVybWluZWQgYXQgcHJvZmlsZSB0aW1l IHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgdG8KKyAgIHByb2ZpbGUtdXNlIGNv bXBpbGVzIGFzIG1hY3JvIGRlZmluaXRpb25zLiAgKi8KK3N0cnVjdCBnY292 X3BhcmFtZXRlcl92YWx1ZQoreworICBzdHJ1Y3QgZ2Nvdl9wYXJhbWV0ZXJf dmFsdWUgKm5leHQ7CisgIGNoYXIgKm1hY3JvX25hbWU7CisgIGdjb3ZfdHlw ZSB2YWx1ZTsKK307CisKICNpZiAhZGVmaW5lZChpbmhpYml0X2xpYmMpCiAK IC8qIEZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBnY292IGZp bGVzLiBJbiBsaWJnY292IHlvdSBjYW4KQEAgLTQ1Nyw2ICs0NjgsOCBAQCBH Q09WX0xJTktBR0UgaW50IGdjb3ZfY2xvc2UgKHZvaWQpIEFUVFJJQlVURV9I SURERQogR0NPVl9MSU5LQUdFIGdjb3ZfdW5zaWduZWRfdCBnY292X3JlYWRf dW5zaWduZWQgKHZvaWQpIEFUVFJJQlVURV9ISURERU47CiBHQ09WX0xJTktB R0UgZ2Nvdl90eXBlIGdjb3ZfcmVhZF9jb3VudGVyICh2b2lkKSBBVFRSSUJV VEVfSElEREVOOwogR0NPVl9MSU5LQUdFIHZvaWQgZ2Nvdl9yZWFkX3N1bW1h cnkgKHN0cnVjdCBnY292X3N1bW1hcnkgKikgQVRUUklCVVRFX0hJRERFTjsK K0dDT1ZfTElOS0FHRSBzdHJ1Y3QgZ2Nvdl9wYXJhbWV0ZXJfdmFsdWUgKmdj b3ZfcmVhZF9wYXJhbWV0ZXJzIChnY292X3Vuc2lnbmVkX3QpCisgIEFUVFJJ QlVURV9ISURERU47CiBHQ09WX0xJTktBR0UgY29uc3QgY2hhciAqZ2Nvdl9y ZWFkX3N0cmluZyAodm9pZCk7CiBHQ09WX0xJTktBR0Ugdm9pZCBnY292X3N5 bmMgKGdjb3ZfcG9zaXRpb25fdCAvKmJhc2UqLywKIAkJCSAgICAgZ2Nvdl91 bnNpZ25lZF90IC8qbGVuZ3RoICovKTsKQEAgLTQ2OSwxMiArNDgyLDEyIEBA IEdDT1ZfTElOS0FHRSB2b2lkIGdjb3ZfcmVhZF9tb2R1bGVfaW5mbyAoc3Ry dWN0IGdjCiAjaWYgIUlOX0dDT1YKIC8qIEF2YWlsYWJsZSBvdXRzaWRlIGdj b3YgKi8KIEdDT1ZfTElOS0FHRSB2b2lkIGdjb3Zfd3JpdGVfdW5zaWduZWQg KGdjb3ZfdW5zaWduZWRfdCkgQVRUUklCVVRFX0hJRERFTjsKK0dDT1ZfTElO S0FHRSB2b2lkIGdjb3Zfd3JpdGVfc3RyaW5nIChjb25zdCBjaGFyICopOwog I2VuZGlmCiAKICNpZiAhSU5fR0NPViAmJiAhSU5fTElCR0NPVgogLyogQXZh aWxhYmxlIG9ubHkgaW4gY29tcGlsZXIgKi8KIEdDT1ZfTElOS0FHRSB1bnNp Z25lZCBnY292X2hpc3RvX2luZGV4IChnY292X3R5cGUgdmFsdWUpOwotR0NP Vl9MSU5LQUdFIHZvaWQgZ2Nvdl93cml0ZV9zdHJpbmcgKGNvbnN0IGNoYXIg Kik7CiBHQ09WX0xJTktBR0UgZ2Nvdl9wb3NpdGlvbl90IGdjb3Zfd3JpdGVf dGFnIChnY292X3Vuc2lnbmVkX3QpOwogR0NPVl9MSU5LQUdFIHZvaWQgZ2Nv dl93cml0ZV9sZW5ndGggKGdjb3ZfcG9zaXRpb25fdCAvKnBvc2l0aW9uKi8p OwogI2VuZGlmCkluZGV4OiBnY2Mvb3B0cy5oCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGdjYy9vcHRzLmgJKHJldmlzaW9uIDIxMDYyNCkKKysrIGdj Yy9vcHRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3OCw2ICszNzgsNyBAQCBl eHRlcm4gdm9pZCBjb250cm9sX3dhcm5pbmdfb3B0aW9uICh1bnNpZ25lZCBp bnQgbwogCQkJCSAgICBzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHNfc2V0LAog CQkJCSAgICBkaWFnbm9zdGljX2NvbnRleHQgKmRjKTsKIGV4dGVybiB2b2lk IHByaW50X2lnbm9yZWRfb3B0aW9ucyAodm9pZCk7CitleHRlcm4gdm9pZCBz ZXRfcHJvZmlsZV9wYXJhbWV0ZXJzIChzdHJ1Y3QgY3BwX3JlYWRlciAqcGFy c2VfaW4pOwogZXh0ZXJuIHZvaWQgYWRkX2lucHV0X2ZpbGVuYW1lIChjb25z dCBjaGFyICpmaWxlbmFtZSk7CiBleHRlcm4gdm9pZCBhZGRfbW9kdWxlX2lu Zm8gKHVuc2lnbmVkIG1vZF9pZCwgYm9vbCBpc19wcmltYXJ5LCBpbnQgaW5k ZXgpOwogZXh0ZXJuIHZvaWQgc2V0X2xpcG9fY19wYXJzaW5nX2NvbnRleHQg KHN0cnVjdCBjcHBfcmVhZGVyICpwYXJzZV9pbiwgaW50IGksIGJvb2wgdmVy Ym9zZSk7CkluZGV4OiBnY2MvdGVzdHN1aXRlL2crKy5kZy90cmVlLXByb2Yv ZmRsbzEuQwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1 aXRlL2crKy5kZy90cmVlLXByb2YvZmRsbzEuQwkocmV2aXNpb24gMCkKKysr IGdjYy90ZXN0c3VpdGUvZysrLmRnL3RyZWUtcHJvZi9mZGxvMS5DCShyZXZp c2lvbiAwKQpAQCAtMCwwICsxLDgyIEBACisvKiBFbnN1cmUgdGhhdCBwYXJh bWV0ZXIgcHJvZmlsaW5nIGJlaGF2ZXMgYXMgZXhwZWN0ZWQuICAqLworLyog eyBkZy1vcHRpb25zICItZnByb2ZpbGUtdXNlLXBhcmFtZXRlcnMgLWZkdW1w LXRyZWUtcHJvZmlsZV9lc3RpbWF0ZS1hbGwiIH0gKi8KKworI2luY2x1ZGU8 c3RkaW8uaD4KKworY2xhc3MgQ29udGFpbmVyCit7CitwdWJsaWM6CisgIENv bnRhaW5lcigpOworICB2b2lkIHJlc2l6ZSAoc2l6ZV90IHMpOworCitwcml2 YXRlOgorCisvKiBQcm9maWxpbmcgc3BlY2lmaWMgc2VjdGlvbjogwqAqLwor CisgIHR5cGVkZWYgc3RydWN0IFByb2ZDb3VudGVyIHsKKyAgICBsb25nIGxv bmcgdG90YWw7CisgICAgaW50IGNvdW50OworICB9IFByb2ZDb3VudGVyOwor CisgIHN0YXRpYyB2b2lkIHByb2ZpbGVfaW5pdCAodm9pZCkgX19hdHRyaWJ1 dGVfXygocHJvZmlsZV9pbml0KSk7CisgIHN0YXRpYyB2b2lkIHByb2ZpbGVf aGFuZGxlciAodm9pZCk7CisgIHN0YXRpYyB2b2lkIHByb2ZpbGVfdXBkYXRl ICh2b2lkICosIGxvbmcgbG9uZyB2YWx1ZSk7CisgIHN0YXRpYyBQcm9mQ291 bnRlciAqY291bnRlcl87Cit9OworCitDb250YWluZXI6OlByb2ZDb3VudGVy ICpDb250YWluZXI6OmNvdW50ZXJfOworCitDb250YWluZXI6OkNvbnRhaW5l cigpCit7CisjaWZuZGVmIEJVRl9TSVpFCisjZGVmaW5lIEJVRl9TSVpFIDMy CisjZW5kaWYKKyAgZnByaW50ZiAoc3RkZXJyLCAiQ29udGFpbmVyIEJVRl9T SVpFIGlzICVkXG4iLCBCVUZfU0laRSk7Cit9CisKK3ZvaWQKK0NvbnRhaW5l cjo6cHJvZmlsZV9pbml0ICh2b2lkKQoreworICAvKiBDb3VudGVyIGNyZWF0 aW9uICovCisgIGNvdW50ZXJfID0gbmV3IFByb2ZDb3VudGVyICgpOworICBj b3VudGVyXy0+dG90YWwgPSAwOworICBjb3VudGVyXy0+Y291bnQgPSAwOwor CisgIC8qIFJlZ2lzdGVyIGhhbmRsZXI6IMKgKi8KKyAgX19idWlsdGluX3By b2ZpbGVfcmVnaXN0ZXJfaGFuZGxlciAoJnByb2ZpbGVfaGFuZGxlcik7Cit9 CisKK3ZvaWQKK0NvbnRhaW5lcjo6cHJvZmlsZV9oYW5kbGVyICh2b2lkKQor eworICAvKiBQcm9jZXNzIGNvdW50ZXJfIGRhdGEgKi8KKyAgbG9uZyBsb25n IG9wdGltYWxfYnVmZmVyX3NpemUgPSBjb3VudGVyXy0+dG90YWwvY291bnRl cl8tPmNvdW50OworCisgIC8qIE5vdyByZWNvcmQgdGhlIG9wdGltYWwgYnVm ZmVyIHNpemUgKi8KKyAgX19idWlsdGluX3Byb2ZpbGVfcmVjb3JkX3BhcmFt ZXRlciAoIkJVRl9TSVpFIiwgb3B0aW1hbF9idWZmZXJfc2l6ZSk7Cit9CisK K3ZvaWQKK0NvbnRhaW5lcjo6cmVzaXplIChzaXplX3QgcykKK3sKKyAgX19i dWlsdGluX3Byb2ZpbGVfaW52b2tlIChwcm9maWxlX3VwZGF0ZSwgY291bnRl cl8sIHMpOworfQorCit2b2lkCitDb250YWluZXI6OnByb2ZpbGVfdXBkYXRl ICh2b2lkICogcHJvZmlsZV9jb3VudGVyLCBsb25nIGxvbmcgZGF0YSkKK3sK KyAgUHJvZkNvdW50ZXIgKnAgPSAoUHJvZkNvdW50ZXIgKikgcHJvZmlsZV9j b3VudGVyOworICBwLT50b3RhbCArPSBkYXRhOworICBwLT5jb3VudCsrOwor fQorCitpbnQgbWFpbigpCit7CisgIENvbnRhaW5lciBzOworICBzLnJlc2l6 ZSgxMCk7CisgIHMucmVzaXplKDIwKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8q IHsgZGctZmluYWwtdXNlIHsgc2Nhbi10cmVlLWR1bXAgIm5vdGU6IEFkZCAt REJVRl9TSVpFPTE1IGZyb20gcHJvZmlsZSIgInByb2ZpbGVfZXN0aW1hdGUi fSB9ICovCisvKiB7IGRnLWZpbmFsLXVzZSB7IGNsZWFudXAtdHJlZS1kdW1w ICJwcm9maWxlX2VzdGltYXRlIiB9IH0gKi8KSW5kZXg6IGxpYmdjYy9saWJn Y292LWRyaXZlci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpYmdj Yy9saWJnY292LWRyaXZlci5jCShyZXZpc2lvbiAyMTA2MjQpCisrKyBsaWJn Y2MvbGliZ2Nvdi1kcml2ZXIuYwkod29ya2luZyBjb3B5KQpAQCAtMTI4LDYg KzEyOCwxOSBAQCBzdHJ1Y3QgZ2Nvdl9zdW1tYXJ5X2J1ZmZlcgogICBzdHJ1 Y3QgZ2Nvdl9zdW1tYXJ5IHN1bW1hcnk7CiB9OwogCitzdHJ1Y3QgZ2Nvdl9o YW5kbGVyX2xpc3QKK3sKKyAgc3RydWN0IGdjb3ZfaGFuZGxlcl9saXN0ICpu ZXh0OworICB2b2lkICgqaGFuZGxlcikgKHZvaWQpOworfTsKKworLyogTGlz dCBvZiB1c2VyLXNwZWNpZmllZCBoYW5kbGVycyB0byBpbnZva2UgYXRleGl0 LiAgKi8KK3N0YXRpYyBzdHJ1Y3QgZ2Nvdl9oYW5kbGVyX2xpc3QgKmdjb3Zf cmVnaXN0ZXJlZF9oYW5kbGVycyA9IE5VTEw7CisKKy8qIExpc3Qgb2YgcGFy YW10ZXIgdmFsdWVzIHJlY29yZGVkIGJ5IF9fZ2Nvdl9yZWNvcmRfcGFyYW1l dGVyX3ZhbHVlCisgICBpbnZvY2F0aW9ucyB0aGF0IHNob3VsZCBiZSBlbWl0 dGVkIHRvIHBhcmFtZXRlciBzZWN0aW9uIG9mIHByb2ZpbGUuICAqLworc3Rh dGljIHN0cnVjdCBnY292X3BhcmFtZXRlcl92YWx1ZSAqZ2Nvdl9wYXJhbWV0 ZXJfdmFsdWVzID0gTlVMTDsKKwogLyogQ2hhaW4gb2YgcGVyLW9iamVjdCBn Y292IHN0cnVjdHVyZXMuICAqLwogc3RhdGljIHN0cnVjdCBnY292X2luZm8g Kl9fZ2Nvdl9saXN0OwogCkBAIC0yNzcsNiArMjkwLDY2IEBAIGdjb3ZfY29t cHV0ZV9oaXN0b2dyYW0gKHN0cnVjdCBnY292X3N1bW1hcnkgKnN1bSkKICAg ICB9CiB9CiAKKy8qIEZpbmQgYW5kIHJldHVybiBwYXJhbWV0ZXIgaW4gTElT VCB3aXRoIG5hbWUgbWF0Y2hpbmcgTUFDUk9fTkFNRSwKKyAgIG9yIE5VTEwg aWYgbm8gbWF0Y2ggZm91bmQuICAqLworCitzdGF0aWMgc3RydWN0IGdjb3Zf cGFyYW1ldGVyX3ZhbHVlICoKK2ZpbmRfcGFyYW1ldGVyIChzdHJ1Y3QgZ2Nv dl9wYXJhbWV0ZXJfdmFsdWUgKmxpc3QsIGNvbnN0IGNoYXIgKm1hY3JvX25h bWUpCit7CisgIHN0cnVjdCBnY292X3BhcmFtZXRlcl92YWx1ZSAqY3VyX3Bh cm0gPSBsaXN0OworCisgIHdoaWxlIChjdXJfcGFybSkKKyAgICB7CisgICAg ICBpZiAoIXN0cmNtcChjdXJfcGFybS0+bWFjcm9fbmFtZSwgbWFjcm9fbmFt ZSkpCisgICAgICAgIHJldHVybiBjdXJfcGFybTsKKyAgICAgIGN1cl9wYXJt ID0gY3VyX3Bhcm0tPm5leHQ7CisgICAgfQorCisgIHJldHVybiBOVUxMOwor fQorCisvKiBNZXJnZSBwYXJhbWV0ZXJzIGZyb20gTkVXX1BBUk1TIGxpc3Qg aW50byBTQVZFRF9QQVJNUy4gIEFueSBwYXJhbWV0ZXJzCisgICB3aXRoIG1h dGNoaW5nIG5hbWVzIHdpbGwgaGF2ZSB0aGVpciB2YWx1ZXMgbWVyZ2VkLiAg UmV0dXJucyBtZXJnZWQgbGlzdC4gICovCisKK3N0YXRpYyBzdHJ1Y3QgZ2Nv dl9wYXJhbWV0ZXJfdmFsdWUgKgorbWVyZ2VfcGFyYW1ldGVycyAoc3RydWN0 IGdjb3ZfcGFyYW1ldGVyX3ZhbHVlICpzYXZlZF9wYXJtcywKKyAgICAgICAg ICAgICAgICAgIHN0cnVjdCBnY292X3BhcmFtZXRlcl92YWx1ZSAqbmV3X3Bh cm1zKQorCit7CisgIHN0cnVjdCBnY292X3BhcmFtZXRlcl92YWx1ZSAqY3Vy X25ld19wYXJtLCAqY3VyX21lcmdlX3Bhcm0sICptZXJnZWRfcGFybXM7CisK KyAgbWVyZ2VkX3Bhcm1zID0gc2F2ZWRfcGFybXM7CisKKyAgZm9yIChjdXJf bmV3X3Bhcm0gPSBuZXdfcGFybXM7IGN1cl9uZXdfcGFybTsKKyAgICAgICBj dXJfbmV3X3Bhcm0gPSBjdXJfbmV3X3Bhcm0tPm5leHQpCisgICAgeworICAg ICAgY3VyX21lcmdlX3Bhcm0gPSBmaW5kX3BhcmFtZXRlciAoc2F2ZWRfcGFy bXMsIGN1cl9uZXdfcGFybS0+bWFjcm9fbmFtZSk7CisKKyAgICAgIGlmIChj dXJfbWVyZ2VfcGFybSkKKyAgICAgICAgeworICAgICAgICAgIC8qIFNpbXBs eSBhdmVyYWdlIHRoZW0gZm9yIG5vdy4gVGhlIGJlc3QgbWVyZ2Ugc3RyYXRl Z3kgd2lsbAorICAgICAgICAgICAgIGRlcGVuZCBvbiBob3cgdGhleSB3ZXJl IGNvbXB1dGVkIGluIHRoZSBmaXJzdCBwbGFjZS4KKyAgICAgICAgICAgICBJ biB0aGUgZnV0dXJlIHRoaXMgY2FuIGJlIGhhbmRsZWQgYnkgcmVjb3JkaW5n IGEgcGFyYW1ldGVyCisgICAgICAgICAgICAgdHlwZSBhbG9uZyB3aXRoIHRo ZSBwYXJhbWV0ZXIsIHRoYXQgdGVsbHMgaG93IHRvIG1lcmdlLiAgKi8KKyAg ICAgICAgICBjdXJfbWVyZ2VfcGFybS0+dmFsdWUKKyAgICAgICAgICAgICAg PSAoY3VyX21lcmdlX3Bhcm0tPnZhbHVlICsgY3VyX25ld19wYXJtLT52YWx1 ZSkgLyAyOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAg ICAgICAgICBjdXJfbWVyZ2VfcGFybSA9IChzdHJ1Y3QgZ2Nvdl9wYXJhbWV0 ZXJfdmFsdWUgKikKKyAgICAgICAgICAgICAgeG1hbGxvYyAoc2l6ZW9mIChz dHJ1Y3QgZ2Nvdl9wYXJhbWV0ZXJfdmFsdWUpKTsKKyAgICAgICAgICBjdXJf bWVyZ2VfcGFybS0+bWFjcm9fbmFtZSA9IChjaGFyICopCisgICAgICAgICAg ICAgIHhtYWxsb2MgKHN0cmxlbihjdXJfbmV3X3Bhcm0tPm1hY3JvX25hbWUp ICsgMSk7CisgICAgICAgICAgc3RyY3B5IChjdXJfbWVyZ2VfcGFybS0+bWFj cm9fbmFtZSwgY3VyX25ld19wYXJtLT5tYWNyb19uYW1lKTsKKyAgICAgICAg ICBjdXJfbWVyZ2VfcGFybS0+dmFsdWUgPSBjdXJfbmV3X3Bhcm0tPnZhbHVl OworCisgICAgICAgICAgY3VyX21lcmdlX3Bhcm0tPm5leHQgPSBtZXJnZWRf cGFybXM7CisgICAgICAgICAgbWVyZ2VkX3Bhcm1zID0gY3VyX21lcmdlX3Bh cm07CisgICAgICAgIH0KKyAgICB9CisgIHJldHVybiBtZXJnZWRfcGFybXM7 Cit9CisKIC8qIFRoaXMgZnVudGlvbnMgY29tcHV0ZXMgdGhlIHByb2dyYW0g bGV2ZWwgc3VtbWFyeSBhbmQgdGhlIGhpc3RvLWdyYW0uCiAgICBJdCBjb21w dXRlcyBhbmQgcmV0dXJucyBDUkMzMiBhbmQgc3RvcmVkIHN1bW1hcnkgaW4g VEhJU19QUkcuICAqLwogCkBAIC0zNjIsNyArNDM1LDggQEAgZ2Nvdl9leGl0 X21lcmdlX2djZGEgKHN0cnVjdCBnY292X2luZm8gKmdpX3B0ciwKICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2Nvdl9zdW1tYXJ5ICp0aGlzX3By ZywKICAgICAgICAgICAgICAgICAgICAgICBnY292X3Bvc2l0aW9uX3QgKnN1 bW1hcnlfcG9zX3AsCiAgICAgICAgICAgICAgICAgICAgICAgZ2Nvdl9wb3Np dGlvbl90ICplb2ZfcG9zX3AsCi0gICAgICAgICAgICAgICAgICAgICAgZ2Nv dl91bnNpZ25lZF90IGNyYzMyKQorICAgICAgICAgICAgICAgICAgICAgIGdj b3ZfdW5zaWduZWRfdCBjcmMzMiwKKyAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZ2Nvdl9wYXJhbWV0ZXJfdmFsdWUgKiptZXJnZWRfcGFyYW1ldGVy cykKIHsKICAgZ2Nvdl91bnNpZ25lZF90IHRhZywgbGVuZ3RoLCB2ZXJzaW9u LCBzdGFtcDsKICAgdW5zaWduZWQgdF9peCwgZl9peDsKQEAgLTQxOCw2ICs0 OTIsMTUgQEAgZ2Nvdl9leGl0X21lcmdlX2djZGEgKHN0cnVjdCBnY292X2lu Zm8gKmdpX3B0ciwKICAgICBuZXh0X3N1bW1hcnk6OwogICAgIH0KIAorICBp ZiAodGFnID09IEdDT1ZfVEFHX1BBUkFNRVRFUlMpCisgICAgeworICAgICAg bGVuZ3RoID0gZ2Nvdl9yZWFkX3Vuc2lnbmVkICgpOworICAgICAgKm1lcmdl ZF9wYXJhbWV0ZXJzID0gZ2Nvdl9yZWFkX3BhcmFtZXRlcnMgKGxlbmd0aCk7 CisgICAgICAqbWVyZ2VkX3BhcmFtZXRlcnMgPSBtZXJnZV9wYXJhbWV0ZXJz ICgqbWVyZ2VkX3BhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnY292X3BhcmFtZXRlcl92YWx1ZXMp OworICAgICAgdGFnID0gZ2Nvdl9yZWFkX3Vuc2lnbmVkICgpOworICAgIH0K KwogICAvKiBNZXJnZSBleGVjdXRpb24gY291bnRzIGZvciBlYWNoIGZ1bmN0 aW9uLiAgKi8KICAgZm9yIChmX2l4ID0gMDsgZl9peCAhPSBnaV9wdHItPm5f ZnVuY3Rpb25zOwogICAgICAgIGZfaXgrKywgdGFnID0gZ2Nvdl9yZWFkX3Vu c2lnbmVkICgpKQpAQCAtNDg4LDcgKzU3MSw4IEBAIHN0YXRpYyB2b2lkCiBn Y292X2V4aXRfd3JpdGVfZ2NkYSAoc3RydWN0IGdjb3ZfaW5mbyAqZ2lfcHRy LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBnY292X3N1 bW1hcnkgKnByZ19wLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdj b3ZfcG9zaXRpb25fdCBlb2ZfcG9zLAotICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGdjb3ZfcG9zaXRpb25fdCBzdW1tYXJ5X3BvcykKKyAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBnY292X3Bvc2l0aW9uX3Qgc3VtbWFyeV9w b3MsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdjb3ZfcGFyYW1l dGVyX3ZhbHVlICptZXJnZWRfcGFyYW1ldGVycykKIAogewogICBjb25zdCBz dHJ1Y3QgZ2Nvdl9jdHJfaW5mbyAqY2lfcHRyOwpAQCAtNTIzLDYgKzYwNywx OCBAQCBnY292X2V4aXRfd3JpdGVfZ2NkYSAoc3RydWN0IGdjb3ZfaW5mbyAq Z2lfcHRyLAogICAgICAgc3VtX2J1ZmZlciA9IG5leHRfc3VtX2J1ZmZlcjsK ICAgICB9CiAKKyAgaWYgKG1lcmdlZF9wYXJhbWV0ZXJzKQorICAgIHsKKyAg ICAgIGdjb3Zfd3JpdGVfcGFyYW1ldGVycyAobWVyZ2VkX3BhcmFtZXRlcnMp OworCisgICAgICB3aGlsZSAobWVyZ2VkX3BhcmFtZXRlcnMpCisgICAgICAg IHsKKyAgICAgICAgICBzdHJ1Y3QgZ2Nvdl9wYXJhbWV0ZXJfdmFsdWUgKmN1 cl9wYXJhbWV0ZXIgPSBtZXJnZWRfcGFyYW1ldGVyczsKKyAgICAgICAgICBt ZXJnZWRfcGFyYW1ldGVycyA9IG1lcmdlZF9wYXJhbWV0ZXJzLT5uZXh0Owor ICAgICAgICAgIGZyZWUgKGN1cl9wYXJhbWV0ZXIpOworICAgICAgICB9Cisg ICAgfQorCiAgIC8qIFdyaXRlIGV4ZWN1dGlvbiBjb3VudHMgZm9yIGVhY2gg ZnVuY3Rpb24uICAqLwogICBmb3IgKGZfaXggPSAwOyBmX2l4IDwgZ2lfcHRy LT5uX2Z1bmN0aW9uczsgZl9peCsrKQogICAgIHsKQEAgLTcwMiw2ICs3OTgs NyBAQCBnY292X2V4aXRfZHVtcF9nY292IChzdHJ1Y3QgZ2Nvdl9pbmZvICpn aV9wdHIsIHN0cgogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdjb3Zf c3VtbWFyeSAqdGhpc19wcmcpCiB7CiAgIHN0cnVjdCBnY292X3N1bW1hcnkg cHJnOyAvKiBzdW1tYXJ5IGZvciB0aGlzIG9iamVjdCBvdmVyIGFsbCBwcm9n cmFtLiAgKi8KKyAgc3RydWN0IGdjb3ZfcGFyYW1ldGVyX3ZhbHVlICptZXJn ZWRfcGFyYW1ldGVycyA9IE5VTEw7CiAgIGludCBlcnJvcjsKICAgZ2Nvdl91 bnNpZ25lZF90IHRhZzsKICAgZ2Nvdl9wb3NpdGlvbl90IHN1bW1hcnlfcG9z ID0gMDsKQEAgLTcyMyw4ICs4MjAsOCBAQCBnY292X2V4aXRfZHVtcF9nY292 IChzdHJ1Y3QgZ2Nvdl9pbmZvICpnaV9wdHIsIHN0cgogICAgICAgICAgIGdj b3ZfZXJyb3IgKCJwcm9maWxpbmc6JXM6Tm90IGEgZ2NvdiBkYXRhIGZpbGVc biIsIGdpX2ZpbGVuYW1lKTsKICAgICAgICAgICBnb3RvIHJlYWRfZmF0YWw7 CiAgICAgICAgIH0KLSAgICAgIGVycm9yID0gZ2Nvdl9leGl0X21lcmdlX2dj ZGEgKGdpX3B0ciwgJnByZywgdGhpc19wcmcsICZzdW1tYXJ5X3BvcywgJmVv Zl9wb3MsCi0JCQkJICAgIGNyYzMyKTsKKyAgICAgIGVycm9yID0gZ2Nvdl9l eGl0X21lcmdlX2djZGEgKGdpX3B0ciwgJnByZywgdGhpc19wcmcsICZzdW1t YXJ5X3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZlb2ZfcG9zLCBjcmMzMiwgJm1lcmdlZF9wYXJhbWV0ZXJzKTsKICAgICAg IGlmIChlcnJvciA9PSAtMSkKICAgICAgICAgZ290byByZWFkX2ZhdGFsOwog ICAgIH0KQEAgLTc0MSw3ICs4MzgsMTAgQEAgZ2Nvdl9leGl0X2R1bXBfZ2Nv diAoc3RydWN0IGdjb3ZfaW5mbyAqZ2lfcHRyLCBzdHIKICAgaWYgKGVycm9y ID09IC0xKQogICAgIGdvdG8gcmVhZF9mYXRhbDsKIAotICBnY292X2V4aXRf d3JpdGVfZ2NkYSAoZ2lfcHRyLCAmcHJnLCBlb2ZfcG9zLCBzdW1tYXJ5X3Bv cyk7CisgIGlmICghbWVyZ2VkX3BhcmFtZXRlcnMpCisgICAgICBtZXJnZWRf cGFyYW1ldGVycyA9IG1lcmdlX3BhcmFtZXRlcnMgKE5VTEwsIGdjb3ZfcGFy YW1ldGVyX3ZhbHVlcyk7CisKKyAgZ2Nvdl9leGl0X3dyaXRlX2djZGEgKGdp X3B0ciwgJnByZywgZW9mX3Bvcywgc3VtbWFyeV9wb3MsIG1lcmdlZF9wYXJh bWV0ZXJzKTsKICAgLyogZmFsbCB0aHJvdWdoICovCiAKIHJlYWRfZmF0YWw6 OwpAQCAtODUxLDYgKzk1MSwxMiBAQCBnY292X2V4aXQgKHZvaWQpCiAgIGlm IChnY292X2R1bXBfY29tcGxldGUpCiAgICAgcmV0dXJuOwogCisgIHN0cnVj dCBnY292X2hhbmRsZXJfbGlzdCAqY3Vycl9oYW5kbGVyOworICBmb3IgKGN1 cnJfaGFuZGxlciA9IGdjb3ZfcmVnaXN0ZXJlZF9oYW5kbGVyczsKKyAgICAg ICBjdXJyX2hhbmRsZXIgIT0gTlVMTDsKKyAgICAgICBjdXJyX2hhbmRsZXIg PSBjdXJyX2hhbmRsZXItPm5leHQpCisgICAgY3Vycl9oYW5kbGVyLT5oYW5k bGVyICgpOworCiAgIGNyYzMyID0gZ2Nvdl9leGl0X2NvbXB1dGVfc3VtbWFy eSAoJnRoaXNfcHJnKTsKIAogICBhbGxvY2F0ZV9maWxlbmFtZV9zdHJ1Y3Qg KCZnZik7CkBAIC04NjgsNiArOTc0LDE0IEBAIGdjb3ZfZXhpdCAodm9pZCkK ICAgICAgICAgZHVtcF9tb2R1bGVfaW5mbyB8PSBnaV9wdHItPm1vZF9pbmZv LT5pc19wcmltYXJ5OwogICAgIH0KIAorICBzdHJ1Y3QgZ2Nvdl9wYXJhbWV0 ZXJfdmFsdWUgKmN1cl9wYXJhbWV0ZXIgPSAwOworICB3aGlsZSAoZ2Nvdl9w YXJhbWV0ZXJfdmFsdWVzKQorICAgIHsKKyAgICAgIGN1cl9wYXJhbWV0ZXIg PSBnY292X3BhcmFtZXRlcl92YWx1ZXM7CisgICAgICBnY292X3BhcmFtZXRl cl92YWx1ZXMgPSBnY292X3BhcmFtZXRlcl92YWx1ZXMtPm5leHQ7CisgICAg ICBmcmVlIChjdXJfcGFyYW1ldGVyKTsKKyAgICB9CisKICAgaWYgKGR1bXBf bW9kdWxlX2luZm8pCiAgICAgZ2Nvdl9kdW1wX21vZHVsZV9pbmZvICgmZ2Yp OwogCkBAIC0xMDA4LDUgKzExMjIsMzkgQEAgZ2Nvdl9nY2RhX2ZpbGVfc2l6 ZSAoY29uc3Qgc3RydWN0IGdjb3ZfaW5mbyAqZ2lfcHQKICAgcmV0dXJuIHNp emUqNDsKIH0KIAorLyogUmVnaXN0ZXIgYSBoYW5kbGVyIHJvdXRpbmUgdG8g ZXhlY3V0ZSBhdGV4aXQuICAqLworCit2b2lkCitfX2djb3ZfcmVnaXN0ZXJf cHJvZmlsZV9oYW5kbGVyICh2b2lkICgqaGFuZGxlcikgKHZvaWQpKQorewor ICBzdHJ1Y3QgZ2Nvdl9oYW5kbGVyX2xpc3QgKm5ld19oYW5kbGVyCisgICAg ICA9IChzdHJ1Y3QgZ2Nvdl9oYW5kbGVyX2xpc3QgKikgeG1hbGxvYyAoc2l6 ZW9mIChzdHJ1Y3QgZ2Nvdl9oYW5kbGVyX2xpc3QpKTsKKworICBuZXdfaGFu ZGxlci0+aGFuZGxlciA9IGhhbmRsZXI7CisgIG5ld19oYW5kbGVyLT5uZXh0 ID0gZ2Nvdl9yZWdpc3RlcmVkX2hhbmRsZXJzOworICBnY292X3JlZ2lzdGVy ZWRfaGFuZGxlcnMgPSBuZXdfaGFuZGxlcjsKK30KKworLyogUmVjb3JkIGEg cGFyYW1ldGVyIE1BQ1JPX05BTUUgYW5kIFZBTFVFIHRvIHNhdmUgaW4gdGhl IHByb2ZpbGUgdG8gYXBwbHkKKyAgIHZpYSAtRE1BQ1JPPVZBTFVFIG9uIHBy b2ZpbGUgdXNlIGNvbXBpbGVzLiAgKi8KKwordm9pZAorX19nY292X3JlY29y ZF9wYXJhbWV0ZXJfdmFsdWUgKGNvbnN0IGNoYXIgKm1hY3JvX25hbWUsIGdj b3ZfdHlwZSB2YWx1ZSkKK3sKKyAgc3RydWN0IGdjb3ZfcGFyYW1ldGVyX3Zh bHVlICpuZXdfcGFybTsKKworICBpZiAoZmluZF9wYXJhbWV0ZXIgKGdjb3Zf cGFyYW1ldGVyX3ZhbHVlcywgbWFjcm9fbmFtZSkpCisgICAgcmV0dXJuOwor CisgIG5ld19wYXJtCisgICAgICA9IChzdHJ1Y3QgZ2Nvdl9wYXJhbWV0ZXJf dmFsdWUgKikgeG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgZ2Nvdl9wYXJhbWV0 ZXJfdmFsdWUpKTsKKyAgbmV3X3Bhcm0tPm1hY3JvX25hbWUgPSAoY2hhciAq KSB4bWFsbG9jIChzdHJsZW4obWFjcm9fbmFtZSkgKyAxKTsKKyAgc3RyY3B5 IChuZXdfcGFybS0+bWFjcm9fbmFtZSwgbWFjcm9fbmFtZSk7CisgIG5ld19w YXJtLT52YWx1ZSA9IHZhbHVlOworCisgIG5ld19wYXJtLT5uZXh0ID0gZ2Nv dl9wYXJhbWV0ZXJfdmFsdWVzOworICBnY292X3BhcmFtZXRlcl92YWx1ZXMg PSBuZXdfcGFybTsKK30KKwogI2VuZGlmIC8qIExfZ2NvdiAqLwogI2VuZGlm IC8qIGluaGliaXRfbGliYyAqLwpJbmRleDogbGliZ2NjL2xpYmdjb3YuaAo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWJnY2MvbGliZ2Nvdi5oCShy ZXZpc2lvbiAyMTA2MjQpCisrKyBsaWJnY2MvbGliZ2Nvdi5oCSh3b3JraW5n IGNvcHkpCkBAIC0xNzEsMTIgKzE3MSwxNCBAQCB0eXBlZGVmIHVuc2lnbmVk IGdjb3ZfdHlwZV91bnNpZ25lZCBfX2F0dHJpYnV0ZV9fCiAjZGVmaW5lIGdj b3ZfcmVhZF91bnNpZ25lZCBfX2djb3ZfcmVhZF91bnNpZ25lZAogI2RlZmlu ZSBnY292X3JlYWRfY291bnRlciBfX2djb3ZfcmVhZF9jb3VudGVyCiAjZGVm aW5lIGdjb3ZfcmVhZF9zdW1tYXJ5IF9fZ2Nvdl9yZWFkX3N1bW1hcnkKKyNk ZWZpbmUgZ2Nvdl9yZWFkX3BhcmFtZXRlcnMgX19nY292X3JlYWRfcGFyYW1l dGVycworI2RlZmluZSBnY292X3JlYWRfc3RyaW5nIF9fZ2Nvdl9yZWFkX3N0 cmluZwogI2RlZmluZSBnY292X3JlYWRfbW9kdWxlX2luZm8gX19nY292X3Jl YWRfbW9kdWxlX2luZm8KICNkZWZpbmUgZ2Nvdl9zb3J0X25fdmFscyBfX2dj b3Zfc29ydF9uX3ZhbHMKIAogLyogUG9pc29uIHRoZXNlLCBzbyB0aGV5IGRv bid0IGFjY2lkZW50YWxseSBzbGlwIGluLiAgKi8KLSNwcmFnbWEgR0NDIHBv aXNvbiBnY292X3dyaXRlX3N0cmluZyBnY292X3dyaXRlX3RhZyBnY292X3dy aXRlX2xlbmd0aAotI3ByYWdtYSBHQ0MgcG9pc29uIC8qZ2Nvdl9yZWFkX3N0 cmluZyBnY292X3N5bmMqLyBnY292X3RpbWUgZ2Nvdl9tYWdpYworI3ByYWdt YSBHQ0MgcG9pc29uIGdjb3Zfd3JpdGVfdGFnIGdjb3Zfd3JpdGVfbGVuZ3Ro CisjcHJhZ21hIEdDQyBwb2lzb24gLypnY292X3N5bmMqLyBnY292X3RpbWUg Z2Nvdl9tYWdpYwogCiAjaWZkZWYgSEFWRV9HQVNfSElEREVOCiAjZGVmaW5l IEFUVFJJQlVURV9ISURERU4gIF9fYXR0cmlidXRlX18gKChfX3Zpc2liaWxp dHlfXyAoImhpZGRlbiIpKSkKQEAgLTI1MCw2ICsyNTIsMTMgQEAgZXh0ZXJu IHZvaWQgX19nY292X2luaXQgKHN0cnVjdCBnY292X2luZm8gKikgQVRUUkkK IC8qIFNldCBzYW1wbGluZyByYXRlIHRvIFJBVEUuICAqLwogZXh0ZXJuIHZv aWQgX19nY292X3NldF9zYW1wbGluZ19yYXRlICh1bnNpZ25lZCBpbnQgcmF0 ZSk7CiAKKy8qIFJlZ2lzdGVyIGEgaGFuZGxlciB0byBiZSBjYWxsZWQgYXRl eGl0LiAgKi8KK2V4dGVybiB2b2lkIF9fZ2Nvdl9yZWdpc3Rlcl9wcm9maWxl X2hhbmRsZXIgKHZvaWQgKCopICh2b2lkKSkgQVRUUklCVVRFX0hJRERFTjsK KworLyogUmVjb3JkIGEgcGFyYW1ldGVyIGFuZCBhc3NvY2lhdGVkIHZhbHVl IGluIHByb2ZpbGUuICAqLworZXh0ZXJuIHZvaWQgX19nY292X3JlY29yZF9w YXJhbWV0ZXJfdmFsdWUgKGNvbnN0IGNoYXIgKiwgZ2Nvdl90eXBlKQorICBB VFRSSUJVVEVfSElEREVOOworCiAvKiBDYWxsZWQgYmVmb3JlIGZvcmssIHRv IGF2b2lkIGRvdWJsZSBjb3VudGluZy4gICovCiBleHRlcm4gdm9pZCBfX2dj b3ZfZmx1c2ggKHZvaWQpIEFUVFJJQlVURV9ISURERU47CiAKQEAgLTMxMCw2 ICszMTksOCBAQCBHQ09WX0xJTktBR0Ugdm9pZCBnY292X3dyaXRlX3RhZ19s ZW5ndGggKGdjb3ZfdW5zaQogR0NPVl9MSU5LQUdFIHZvaWQgZ2Nvdl93cml0 ZV9zdW1tYXJ5IChnY292X3Vuc2lnbmVkX3QgLyp0YWcqLywKIAkJCQkgICAg ICBjb25zdCBzdHJ1Y3QgZ2Nvdl9zdW1tYXJ5ICopCiAgICAgQVRUUklCVVRF X0hJRERFTjsKK0dDT1ZfTElOS0FHRSB2b2lkIGdjb3Zfd3JpdGVfcGFyYW1l dGVycyAoc3RydWN0IGdjb3ZfcGFyYW1ldGVyX3ZhbHVlICopCisgIEFUVFJJ QlVURV9ISURERU47CiAKIEdDT1ZfTElOS0FHRSB2b2lkIGdjb3Zfd3JpdGVf bW9kdWxlX2luZm9zIChzdHJ1Y3QgZ2Nvdl9pbmZvICptb2RfaW5mbykKICAg ICBBVFRSSUJVVEVfSElEREVOOwo= --001a11c300a613e90104f9cd0bfb--