From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13571 invoked by alias); 7 Aug 2014 23:52:40 -0000 Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org Received: (qmail 13561 invoked by uid 89); 7 Aug 2014 23:52:39 -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_LOW,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-qg0-f41.google.com Received: from mail-qg0-f41.google.com (HELO mail-qg0-f41.google.com) (209.85.192.41) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Thu, 07 Aug 2014 23:52:37 +0000 Received: by mail-qg0-f41.google.com with SMTP id q107so5369907qgd.28 for ; Thu, 07 Aug 2014 16:52:34 -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=NnrzY5EiDuMhOR6zr3PYbdLy5zG5RQKPUdfeHith9Vg=; b=DGx0QnHiaSlE2s5u2l2o32k5xwswFEBLs607xk7VvbE0D9mmVwo2kDuDCnEIA4S8Z1 k/r8GYmER+fNcMI+HBXM+9vibbWrbSWmgNkouygrGWEy+ZH4r020CpTGvMGwflpti/Z0 ep+kY/17exi2AMBRDRCsSzdD304mahYp3qGLG8CKF+iHCFZrxZe9x1R6zjnPssn4z5sA CdUn1txLmKHTm0nuIIpbS5bjbEan6Ik9PPqvHOjAPJGTGDLr/Kfb8Lk2+/sTxfer5Mfs o3q7MV7ayRanKx/Azal+1a+LPBYHHMpJTdLlHA7gstZ+bdcSNZxnxhPAC2ULyMmgoUQl eL7A== X-Gm-Message-State: ALoCoQnBxiHWL1bQmr0IlDaZYdB1Ot3fPG+qUxzUQIOW7xCF8zLHnw3TUrsgLE1yMtGgHwuLPI+o MIME-Version: 1.0 X-Received: by 10.140.98.147 with SMTP id o19mr29659273qge.21.1407455554726; Thu, 07 Aug 2014 16:52:34 -0700 (PDT) Received: by 10.229.216.202 with HTTP; Thu, 7 Aug 2014 16:52:34 -0700 (PDT) In-Reply-To: References: Date: Thu, 07 Aug 2014 23:52:00 -0000 Message-ID: Subject: Re: [gold][aarch64]patch2: link helloworld From: Jing Yu To: Cary Coutant Cc: binutils , Doug Kwan , Han Shen Content-Type: multipart/mixed; boundary=001a113a923c60bf1d050012c8b9 X-SW-Source: 2014-08/txt/msg00063.txt.bz2 --001a113a923c60bf1d050012c8b9 Content-Type: text/plain; charset=UTF-8 Content-length: 10001 On Tue, Aug 5, 2014 at 10:49 AM, Cary Coutant wrote: >> 2014-07-29 Jing Yu >> Han Shen >> >> * elfcpp/aarch64.h(enum): Replace withdrawn with R_AARCH64_withdrawn >> * gold/Makefile.am(HFILES): Add aarch64-reloc-property.h > > The ChangeLog entry needs to be split into two, one for > elfcpp/ChangeLog, and one for gold/ChangeLog. Remove the "elfcpp/" and > "gold/" from the file names on each line. Please put periods at the > end of each entry. Done. > >> (Output_data_plt_aarch64::do_write): Femove useless got_base. Set >> the got_pov entry to plt0. > > "Remove" Done. > >> diff --git a/gold/Makefile.in b/gold/Makefile.in > > No need to include generated files in the patch. > > + return (low_bound <= x && x < up_bound) > + && ((x & extra_alignment_requirement) == 0); > > Put another set of parens around the entire expression, and indent the > second line so the "&&" is aligned properly. Done. > > +template<> > +bool > +rvalue_checkup<0,0>(int64_t) {return true;} > > Spaces after the comma, and inside the braces. Done. > > +template<> > +uint64_t > +rvalue_bit_select<0,0>(uint64_t x) { return x; } > > Likewise. Done. > > + if(code == elfcpp::R_AARCH64_ABS64) > > Space between "if" and "(". Done. > > + typedef uint64_t (*rvalue_bit_select_func_p)(uint64_t); > > This typedef uses the "_p" convention for predicate functions, but the > function doesn't return bool. Done. > > + const AArch64_reloc_property* > + get_reloc_property(unsigned int code) const > > Bad indentation here. Done. > > + unsigned int idx = code_to_array_index(code); > + gold_assert(idx < Property_table_size); > > The assert here seems overcautious -- code_to_array_index() already > does the same assert. Done. > > What happens if you receive an object file with a bad relocation type? > It would be preferable to issue a regular error on bad input, rather > than an internal error. You should assert only when a logic error in > gold's own code could lead to a false condition. Yes, added gold_error when encountering an unexpected reloc type. > > + // The Parse_expression class is used to convert relocation operations in > + // aarch64-reloc.def into S-expression strings, which are parsed again to > + // build actual expression trees. We do not build the expression trees > + // directly because the parser for operations in arm-reloc.def is simpler > + // this way. Conversion from S-expressions to trees is simple. > > So you parse the "S + A" forms from aarch64-reloc.def into a tree form > (letting the compiler do the actual parsing), then convert that back > to a different string-based "( + S A )" form during initialization. > Then, when it's time to apply the relocation, you plan to parse the "( > + S A )" form into a tree form again, right? > > Don't take this as an objection, but why not just put the S-expression > form directly into the .def file, and save a bit of initialization > time? Alternatively, parsing the two forms doesn't seem appreciably > different, so why not just parse the original form when it's time to > apply relocations? Or, why not just save the tree form after the first > parse? > > In Relocate::relocate(), none of the relocations implemented so far > use these expressions -- are you planning to take advantage of these > expressions to simplify the logic later, or will they continue to go > unused? Ok, removed this part totally, including string s_expression member variable, since we probably won't use this approach. > > + // Map aarch64 rtypes into range(0,300) as following > + // 256 ~ 313 -> 0 ~ 57 > + // 512 ~ 573 -> 128 ~ 189 > + // 1024 ~ 1032 -> 256 ~ 264 > > Why bother to reserve space in your array for the dynamic relocations? Yeah, that's correct. Removed mapping from 1024-1032. > > +protected: > + void > + do_select_as_default_target() > > "protected" should be indented one space. Done. > > + offset = this->first_plt_entry_offset() + > + this->count_ * this->get_plt_entry_size(); > > Parenthesize the expression and indent the second line under the open paren. Done. > > +static const AArch64_howto aarch64_howto[AArch64_reloc_property::INST_NUM] = > +{ > + {0, -1, -1}, // DATA > + {0x1fffe0, 5, -1}, // MOVW [20:5]-imm16 > + {0xffffe0, 5, -1}, // LD [23:5]-imm19 > + {0x60ffffe0, 29, 5}, // ADR [30:29]-immlo [23:5]-immhi > + {0x60ffffe0, 29, 5}, // ADR [30:29]-immlo [23:5]-immhi > > Should this be ADRP? Yes. Done. > > + {0x3ffc00, 10, -1}, // ADD [21:10]-imm12 > + {0x3ffc00, 10, -1}, // LDST [21:10]-imm12 > + {0x7ffe0, 5, -1}, // TBZNZ [18:5]-imm14 > + {0xffffe0, 5, -1}, // CONDB [23:5]-imm19 > + {0x3ffffff, 0, -1}, // B [25:0]-imm26 > + {0x3ffffff, 0, -1}, // CALL [25:0]-imm26 > +}; > > + // Page(expr) = expr & ~0xFFF > + > + static inline typename elfcpp::Swap::Valtype > + Page(typename elfcpp::Elf_types::Elf_Addr address) > + { > + return (address >> 12) << 12; > + } > > Why write it as a mask operation in the comment, but use shifting in > the implementation? I'd prefer the mask operation, and the comment > ought to be in English. Changed the implementation and comment. > > + elfcpp::Swap::writeval(wv, > + (Valtype)(val | (immed << doffset))); > > + elfcpp::Swap::writeval(wv, > + (Valtype)(val | (immed1 << doffset1) | (immed2 << doffset2))); > > + elfcpp::Swap_unaligned::writeval(view, (Valtype)x); > > (... and several more places ...) > > Use static_cast(...). Done. > > + typename elfcpp::Elf_types::Elf_Addr x = > + psymval->value(object, addend); > > It's customary to indent lines by four spaces in cases like this > (e.g., when you begin the entire rhs of an assignment on a new line). Done. > > + int got_base = target->got_ != NULL > + ? target->got_->current_data_size() >= 0x8000 ? 0x8000 : 0 > + : 0; > > Parenthesize the expression and indent subsequent lines under the open paren. Done. > > + (size == 64 > + ? (big_endian ? "elf64-bigaarch64" > + : "elf64-littleaarch64") > + : (big_endian ? "elf32-bigaarch64" > + : "elf32-littleaarch64")), > + (size == 64 > + ? (big_endian ? "aarch64_elf64_be_vec" > + : "aarch64_elf64_le_vec") > + : (big_endian ? "aarch64_elf32_be_vec" > + : "aarch64_elf32_le_vec"))) > > I think this would be much easier to read if you specialized each of > the four constructors, like this: > Done. > template > class Target_selector_aarch64 : public Target_selector > { > public: > Target_selector_aarch64(); > > virtual Target* > do_instantiate_target() > { return new Target_aarch64(); } > }; > > template<> > Target_selector_aarch64<32, true>::Target_selector_aarch64() > : Target_selector(elfcpp::EM_AARCH64, 32, true, > "elf32-bigaarch64", "aarch64_elf32_be_vec") > { } > > template<> > Target_selector_aarch64<32, false>::Target_selector_aarch64() > : Target_selector(elfcpp::EM_AARCH64, 32, false, > "elf32-littleaarch64", "aarch64_elf32_le_vec") > { } > > template<> > Target_selector_aarch64<64, true>::Target_selector_aarch64() > : Target_selector(elfcpp::EM_AARCH64, 64, true, > "elf64-bigaarch64", "aarch64_elf64_be_vec") > { } > > template<> > Target_selector_aarch64<64, false>::Target_selector_aarch64() > : Target_selector(elfcpp::EM_AARCH64, 64, false, > "elf64-littleaarch64", "aarch64_elf64_le_vec") > { } > > -cary Thanks for the review! Attached the updated patch. elfcpp/Changelog: 2014-08-07 Jing Yu Han Shen * aarch64.h(enum): Replace withdrawn with R_AARCH64_withdrawn. gold/Changelog: 2014-08-07 Jing Yu Han Shen * Makefile.am(HFILES): Add aarch64-reloc-property.h. (DEFFILES): add aarch64-reloc.def. (TARGETSOURCES): Add aarch64-reloc-property.cc. (ALL_TARGETOBJS): Add aarch64-reloc-property.$(OBJEXT). * Makefile.in: Regenerate. * aarch64-reloc-property.cc: New file. * aarch64-reloc-property.h: New file. * aarch64-reloc.def: New file. * aarch64.cc: Include aarch64-reloc-property.h. Replace spaces with tab to make the format consistent. (Output_data_got_aarch64::symbol_table_): New method. (Target_aarch64::do_plt_address_for_global): New method. (Target_aarch64::do_plt_address_for_local): New method. (Target_aarch64::do_select_as_default_target): New method. (Target_aarch64::do_make_data_plt): New method. (Target_aarch64::make_data_plt): New method. (Output_data_plt_aarch64::has_irelative_section): New method. (Output_data_plt_aarch64::address_for_global): New method. (Output_data_plt_aarch64::address_for_local): New method. (Output_data_plt_aarch64::irelative_rel_): New parameter. (Output_data_plt_aarch64::add_entry): Implement contents. (Output_data_plt_aarch64::set_final_data_size): Fix typo. (Output_data_plt_aarch64::do_write): Remove useless got_base. Set the got_pov entry to plt0. (Output_data_plt_aarch64_standard::do_fill_first_plt_entry): Implement contents. (Output_data_plt_aarch64_standard::do_fill_plt_entry): Implement. (AArch64_howto): New struct. (aarch64_howto[]): New static const array. (AArch64_relocate_functions): New class (Target_aarch64::Scan::get_reference_flags): Remove method. (Target_aarch64::Scan::local): Implement to support a few relocations. (Target_aarch64::Scan::global): Implement to support a few relocations. (Target_aarch64::make_plt_section): Implement contents. (Target_aarch64::make_plt_entry): Implement contents. (Target_aarch64::do_finalize_sections): Implement contents. (Target_aarch64::Relocate::relocate): Implement a few relocations. (Target_aarch64::relocate_section): Implement contents. --001a113a923c60bf1d050012c8b9 Content-Type: application/octet-stream; name="gold.patch2" Content-Disposition: attachment; filename="gold.patch2" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hykqobzx0 Content-length: 97434 ZGlmZiAtLWdpdCBhL2VsZmNwcC9hYXJjaDY0LmggYi9lbGZjcHAvYWFyY2g2 NC5oCmluZGV4IDRkMTg5OGYuLjUyYWMzZWEgMTAwNjQ0Ci0tLSBhL2VsZmNw cC9hYXJjaDY0LmgKKysrIGIvZWxmY3BwL2FhcmNoNjQuaApAQCAtNDYsNyAr NDYsNyBAQCBlbnVtCiB7CiAgIC8vIE51bGwgcmVsb2NhdGlvbiBjb2Rlcwog ICBSX0FBUkNINjRfTk9ORSA9IDAsCQkvLyBOb25lCi0gIHdpdGhkcmF3biA9 IDI1NiwJCS8vIFRyZWF0IGFzIFJfQUFSQ0g2NF9OT05FCisgIFJfQUFSQ0g2 NF93aXRoZHJhd24gPSAyNTYsCS8vIFRyZWF0IGFzIFJfQUFSQ0g2NF9OT05F CiAKICAgLy8gU3RhdGljIHJlbG9jYXRpb25zCiAgIFJfQUFSQ0g2NF9BQlM2 NCA9IDI1NywJLy8gUyArIEEKZGlmZiAtLWdpdCBhL2dvbGQvTWFrZWZpbGUu YW0gYi9nb2xkL01ha2VmaWxlLmFtCmluZGV4IDE3YmE0YjQuLmRmOTlmMjMg MTAwNjQ0Ci0tLSBhL2dvbGQvTWFrZWZpbGUuYW0KKysrIGIvZ29sZC9NYWtl ZmlsZS5hbQpAQCAtMTA2LDYgKzEwNiw3IEBAIENDRklMRVMgPSBcCiAKIEhG SUxFUyA9IFwKIAlhcm0tcmVsb2MtcHJvcGVydHkuaCBcCisJYWFyY2g2NC1y ZWxvYy1wcm9wZXJ0eS5oIFwKIAlhcmNoaXZlLmggXAogCWF0dHJpYnV0ZXMu aCBcCiAJYmluYXJ5LmggXApAQCAtMTU4LDE4ICsxNTksMTggQEAgSEZJTEVT ID0gXAogWUZJTEVTID0gXAogCXl5c2NyaXB0LnkKIAotREVGRklMRVMgPSBh cm0tcmVsb2MuZGVmCitERUZGSUxFUyA9IGFybS1yZWxvYy5kZWYgYWFyY2g2 NC1yZWxvYy5kZWYKIAogRVhUUkFfRElTVCA9IHl5c2NyaXB0LmMgeXlzY3Jp cHQuaAogCiBUQVJHRVRTT1VSQ0VTID0gXAogCWkzODYuY2MgeDg2XzY0LmNj IHNwYXJjLmNjIHBvd2VycGMuY2MgYXJtLmNjIGFybS1yZWxvYy1wcm9wZXJ0 eS5jYyB0aWxlZ3guY2MgXAotCW1pcHMuY2MgYWFyY2g2NC5jYworCW1pcHMu Y2MgYWFyY2g2NC5jYyBhYXJjaDY0LXJlbG9jLXByb3BlcnR5LmNjCiAKIEFM TF9UQVJHRVRPQkpTID0gXAogCWkzODYuJChPQkpFWFQpIHg4Nl82NC4kKE9C SkVYVCkgc3BhcmMuJChPQkpFWFQpIHBvd2VycGMuJChPQkpFWFQpIFwKIAlh cm0uJChPQkpFWFQpIGFybS1yZWxvYy1wcm9wZXJ0eS4kKE9CSkVYVCkgdGls ZWd4LiQoT0JKRVhUKSBcCi0JbWlwcy4kKE9CSkVYVCkgYWFyY2g2NC4kKE9C SkVYVCkKKwltaXBzLiQoT0JKRVhUKSBhYXJjaDY0LiQoT0JKRVhUKSBhYXJj aDY0LXJlbG9jLXByb3BlcnR5LiQoT0JKRVhUKQogCiBsaWJnb2xkX2FfU09V UkNFUyA9ICQoQ0NGSUxFUykgJChIRklMRVMpICQoWUZJTEVTKSAkKERFRkZJ TEVTKQogbGliZ29sZF9hX0xJQkFERCA9ICQoTElCT0JKUykKZGlmZiAtLWdp dCBhL2dvbGQvYWFyY2g2NC1yZWxvYy1wcm9wZXJ0eS5jYyBiL2dvbGQvYWFy Y2g2NC1yZWxvYy1wcm9wZXJ0eS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5iZWFlZDEwCi0tLSAvZGV2L251bGwKKysrIGIvZ29s ZC9hYXJjaDY0LXJlbG9jLXByb3BlcnR5LmNjCkBAIC0wLDAgKzEsMTY0IEBA CisvLyBhYXJjaDY0LXJlbG9jLXByb3BlcnR5LmNjIC0tIEFBcmNoNjQgcmVs b2NhdGlvbiBwcm9wZXJ0aWVzICAgLSotIEMrKyAtKi0KKworLy8gQ29weXJp Z2h0IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor Ly8gV3JpdHRlbiBieSBIYW4gU2hlbiA8c2hlbmhhbkBnb29nbGUuY29tPiBh bmQgSmluZyBZdSA8amluZ3l1QGdvb2dsZS5jb20+LgorCisvLyBUaGlzIGZp bGUgaXMgcGFydCBvZiBnb2xkLgorCisvLyBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy8vIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisvLyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorCisvLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5k YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29y LCBCb3N0b24sCisvLyBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyNpbmNsdWRl ICJnb2xkLmgiCisKKyNpbmNsdWRlICJhYXJjaDY0LXJlbG9jLXByb3BlcnR5 LmgiCisjaW5jbHVkZSAiYWFyY2g2NC5oIgorCisjaW5jbHVkZSAic3ltdGFi LmgiCisKKyNpbmNsdWRlPHN0ZGlvLmg+CisKK25hbWVzcGFjZSBnb2xkCit7 CisKK3RlbXBsYXRlPGludCBMLCBpbnQgVT4KK2Jvb2wKK3J2YWx1ZV9jaGVj a3VwKGludDY0X3QgeCkKK3sKKyAgLy8gV2Ugc2F2ZSB0aGUgZXh0cmFfYWxp Z25tZW50X3JlcXVpcmVtZW50IGJpdHMgb24gWzMxOjE2XSBvZiBVLgorICAv LyAiZXh0cmFfYWxpZ25tZW50X3JlcXVpcmVtZW50IiBjb3VsZCBiZSAwLCAx LCAzLCA3IGFuZCAxNS4KKyAgdW5zaWduZWQgc2hvcnQgZXh0cmFfYWxpZ25t ZW50X3JlcXVpcmVtZW50ID0gKFUgJiAweEZGRkYwMDAwKSA+PiAxNjsKKyAg Ly8gWzE1OjBdIG9mIFUgaW5kaWNhdGVzIHRoZSB1cHBlciBib3VuZCBjaGVj ay4KKyAgaW50NjRfdCB1ID0gVSAmIDB4MDAwMEZGRkY7CisgIGlmICh1ID09 IDApCisgICAgeworICAgICAgLy8gTm8gcmVxdWlyZW1lbnQgdG8gY2hlY2sg b3ZlcmZsb3cuCisgICAgICBnb2xkX2Fzc2VydChMID09IDApOworICAgICAg cmV0dXJuICh4ICYgZXh0cmFfYWxpZ25tZW50X3JlcXVpcmVtZW50KSA9PSAw OworICAgIH0KKworICAvLyBDaGVjayBib3RoIG92ZXJmbG93IGFuZCBhbGln bm1lbnQgaWYgbmVlZGVkLgorICBpbnQ2NF90IGxvd19ib3VuZCA9IC0oTCA9 PSAwID8gMCA6ICgoaW50NjRfdCkxIDw8IEwpKTsKKyAgaW50NjRfdCB1cF9i b3VuZCA9ICgoaW50NjRfdCkxIDw8IHUpOworICByZXR1cm4gKChsb3dfYm91 bmQgPD0geCAmJiB4IDwgdXBfYm91bmQpCisJICAmJiAoKHggJiBleHRyYV9h bGlnbm1lbnRfcmVxdWlyZW1lbnQpID09IDApKTsKK30KKwordGVtcGxhdGU8 PgorYm9vbAorcnZhbHVlX2NoZWNrdXA8MCwgMD4oaW50NjRfdCkgeyByZXR1 cm4gdHJ1ZTsgfQorCit0ZW1wbGF0ZTxpbnQgTCwgaW50IFU+Cit1aW50NjRf dAorcnZhbHVlX2JpdF9zZWxlY3QodWludDY0X3QgeCkKK3sKKyAgaWYgKFUg PT0gNjMpIHJldHVybiB4ID4+IEw7CisgIHJldHVybiAoeCAmICgoKHVpbnQ2 NF90KTEgPDwgKFUrMSkpIC0gMSkpID4+IEw7Cit9CisKK3RlbXBsYXRlPD4K K3VpbnQ2NF90CitydmFsdWVfYml0X3NlbGVjdDwwLCAwPih1aW50NjRfdCB4 KSB7IHJldHVybiB4OyB9CisKK0FBcmNoNjRfcmVsb2NfcHJvcGVydHk6OkFB cmNoNjRfcmVsb2NfcHJvcGVydHkoCisgICAgdW5zaWduZWQgaW50IGNvZGUs CisgICAgY29uc3QgY2hhciogbmFtZSwKKyAgICBSZWxvY190eXBlIHJ0eXBl LAorICAgIFJlbG9jX2NsYXNzIHJjbGFzcywKKyAgICBib29sIGlzX2ltcGxl bWVudGVkLAorICAgIGludCBncm91cF9pbmRleCwKKyAgICBpbnQgcmVmZXJl bmNlX2ZsYWdzLAorICAgIFJlbG9jX2luc3QgcmVsb2NfaW5zdCwKKyAgICBy dmFsdWVfY2hlY2t1cF9mdW5jX3AgcnZhbHVlX2NoZWNrdXBfZnVuYywKKyAg ICBydmFsdWVfYml0X3NlbGVjdF9mdW5jIHJ2YWx1ZV9iaXRfc2VsZWN0KQor ICA6IGNvZGVfKGNvZGUpLCBuYW1lXyhuYW1lKSwgcmVsb2NfdHlwZV8ocnR5 cGUpLCByZWxvY19jbGFzc18ocmNsYXNzKSwKKyAgICBncm91cF9pbmRleF8o Z3JvdXBfaW5kZXgpLAorICAgIGlzX2ltcGxlbWVudGVkXyhpc19pbXBsZW1l bnRlZCksCisgICAgcmVmZXJlbmNlX2ZsYWdzXyhyZWZlcmVuY2VfZmxhZ3Mp LAorICAgIHJlbG9jX2luc3RfKHJlbG9jX2luc3QpLAorICAgIHJ2YWx1ZV9j aGVja3VwX2Z1bmNfKHJ2YWx1ZV9jaGVja3VwX2Z1bmMpLAorICAgIHJ2YWx1 ZV9iaXRfc2VsZWN0X2Z1bmNfKHJ2YWx1ZV9iaXRfc2VsZWN0KQore30KKwor QUFyY2g2NF9yZWxvY19wcm9wZXJ0eV90YWJsZTo6QUFyY2g2NF9yZWxvY19w cm9wZXJ0eV90YWJsZSgpCit7CisgIGNvbnN0IGJvb2wgWSh0cnVlKSwgTihm YWxzZSk7CisgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgUHJvcGVy dHlfdGFibGVfc2l6ZTsgKytpKQorICAgIHRhYmxlX1tpXSA9IE5VTEw7CisK KyNkZWZpbmUgUkxfQ0hFQ0tfQUxJR04yICAgKDEgIDw8IDE2KQorI2RlZmlu ZSBSTF9DSEVDS19BTElHTjQgICAoMyAgPDwgMTYpCisjZGVmaW5lIFJMX0NI RUNLX0FMSUdOOCAgICg3ICA8PCAxNikKKyNkZWZpbmUgUkxfQ0hFQ0tfQUxJ R04xNiAgKDE1IDw8IDE2KQorCisjdW5kZWYgQVJECisjZGVmaW5lIEFSRChy bmFtZSwgdHlwZSwgY2xhc3MsIGlzX2ltcGxlbWVudGVkLCBncm91cF9pbmRl eCwgTEIsIFVCLCBCU0wsIEJTSCwgUkZMQUdTLCBpbnN0KSBcCisgICAgZG8g XAorICAgICAgeyBcCisJaW50IHRpZHggPSBjb2RlX3RvX2FycmF5X2luZGV4 KGVsZmNwcDo6Ul9BQVJDSDY0XyMjcm5hbWUpOyBcCisJQUFyY2g2NF9yZWxv Y19wcm9wZXJ0eSAqIHAgPSBuZXcgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eSgg XAorCSAgZWxmY3BwOjpSX0FBUkNINjRfIyNybmFtZSwgIlJfQUFSQ0g2NF8i ICNybmFtZSwgXAorCSAgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eTo6UlRfIyN0 eXBlLCBcCisJICBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5OjpSQ18jI2NsYXNz LCBcCisJICBpc19pbXBsZW1lbnRlZCwgXAorCSAgZ3JvdXBfaW5kZXgsIFwK KwkgIChSRkxBR1MpLCBcCisJICBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5OjpJ TlNUXyMjaW5zdCwJXAorCSAgcnZhbHVlX2NoZWNrdXA8TEIsVUI+LCAgICBc CisJICBydmFsdWVfYml0X3NlbGVjdDxCU0wsQlNIPik7CQlcCisJdGFibGVf W3RpZHhdID0gcDsgXAorICAgICAgfSBcCisgICAgd2hpbGUgKDApOworI2lu Y2x1ZGUiYWFyY2g2NC1yZWxvYy5kZWYiCisjdW5kZWYgQVJECit9CisKKy8v IFJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIGEgcmVsb2NhdGlvbiBjb2Rl IHRoYXQgZmFpbHMgdG8gZ2V0IGEKKy8vIHJlbG9jYXRpb24gcHJvcGVydHkg aW4gZ2V0X2ltcGxlbWVudGVkX3N0YXRpY19yZWxvY19wcm9wZXJ0eSgpLgor CitzdGQ6OnN0cmluZworQUFyY2g2NF9yZWxvY19wcm9wZXJ0eV90YWJsZTo6 cmVsb2NfbmFtZV9pbl9lcnJvcl9tZXNzYWdlKHVuc2lnbmVkIGludCBjb2Rl KQoreworICBnb2xkX2Fzc2VydChjb2RlIDwgUHJvcGVydHlfdGFibGVfc2l6 ZSk7CisKKyAgY29uc3QgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eSogYXJwID0g dGhpcy0+dGFibGVfW2NvZGVdOworCisgIGlmIChhcnAgPT0gTlVMTCkKKyAg ICB7CisgICAgICBjaGFyIGJ1ZmZlclsxMDBdOworICAgICAgc3ByaW50Zihi dWZmZXIsIF8oImludmFsaWQgcmVsb2MgJXUiKSwgY29kZSk7CisgICAgICBy ZXR1cm4gc3RkOjpzdHJpbmcoYnVmZmVyKTsKKyAgICB9CisKKyAgLy8gZ29s ZCBvbmx5IGltcGxlbWVudHMgc3RhdGljIHJlbG9jYXRpb24gY29kZXMuCisg IEFBcmNoNjRfcmVsb2NfcHJvcGVydHk6OlJlbG9jX3R5cGUgcmVsb2NfdHlw ZSA9IGFycC0+cmVsb2NfdHlwZSgpOworICBnb2xkX2Fzc2VydChyZWxvY190 eXBlID09IEFBcmNoNjRfcmVsb2NfcHJvcGVydHk6OlJUX1NUQVRJQworCSAg ICAgIHx8ICFhcnAtPmlzX2ltcGxlbWVudGVkKCkpOworCisgIGNvbnN0IGNo YXIqIHByZWZpeCA9IE5VTEw7CisgIHN3aXRjaCAocmVsb2NfdHlwZSkKKyAg ICB7CisgICAgY2FzZSBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5OjpSVF9TVEFU SUM6CisgICAgICBwcmVmaXggPSBhcnAtPmlzX2ltcGxlbWVudGVkKCkgPyBf KCJyZWxvYyAiKSA6IF8oInVuaW1wbGVtZW50ZWQgcmVsb2MgIik7CisgICAg ICBicmVhazsKKyAgICBjYXNlIEFBcmNoNjRfcmVsb2NfcHJvcGVydHk6OlJU X0RZTkFNSUM6CisgICAgICBwcmVmaXggPSBfKCJkeW5hbWljIHJlbG9jICIp OworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGdvbGRfdW5y ZWFjaGFibGUoKTsKKyAgICB9CisgIHJldHVybiBzdGQ6OnN0cmluZyhwcmVm aXgpICsgYXJwLT5uYW1lKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL2dvbGQv YWFyY2g2NC1yZWxvYy1wcm9wZXJ0eS5oIGIvZ29sZC9hYXJjaDY0LXJlbG9j LXByb3BlcnR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZDhkMTMwMQotLS0gL2Rldi9udWxsCisrKyBiL2dvbGQvYWFyY2g2NC1y ZWxvYy1wcm9wZXJ0eS5oCkBAIC0wLDAgKzEsMjQ1IEBACisvLyBhYXJjaDY0 LXJlbG9jLXByb3BlcnR5LmggLS0gQUFyY2g2NCByZWxvY2F0aW9uIHByb3Bl cnRpZXMgICAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTQg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLyBXcml0dGVuIGJ5 IEhhbiBTaGVuIDxzaGVuaGFuQGdvb2dsZS5jb20+IGFuZCBKaW5nIFl1IDxq aW5neXVAZ29vZ2xlLmNvbT4uCisKKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IGdvbGQuCisKKy8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK Ky8vIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKy8v IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8v IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisvLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwKKy8v IE1BIDAyMTEwLTEzMDEsIFVTQS4KKworI2lmbmRlZiBHT0xEX0FBUkNINjRf UkVMT0NfUFJPUEVSVFlfSAorI2RlZmluZSBHT0xEX0FBUkNINjRfUkVMT0Nf UFJPUEVSVFlfSAorCisjaW5jbHVkZTx2ZWN0b3I+CisjaW5jbHVkZTxzdHJp bmc+CisKKyNpbmNsdWRlImFhcmNoNjQuaCIKKworbmFtZXNwYWNlIGdvbGQK K3sKKy8vIFRoZSBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5IGNsYXNzIGlzIHRv IHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhcgorLy8gcmVs b2NhdGlvbiBjb2RlLgorCitjbGFzcyBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5 Cit7CisgcHVibGljOgorICAvLyBUeXBlcyBvZiByZWxvY2F0aW9uIGNvZGVz LgorICBlbnVtIFJlbG9jX3R5cGUgeworICAgIFJUX05PTkUsCQkvLyBObyBy ZWxvY2F0aW9uIHR5cGUuCisgICAgUlRfU1RBVElDLAkJLy8gUmVsb2NhdGlv bnMgcHJvY2Vzc2VkIGJ5IHN0YXRpYyBsaW5rZXJzLgorICAgIFJUX0RZTkFN SUMsCS8vIFJlbG9jYXRpb25zIHByb2Nlc3NlZCBieSBkeW5hbWljIGxpbmtl cnMuCisgIH07CisKKyAgLy8gQ2xhc3NlcyBvZiByZWxvY2F0aW9uIGNvZGVz LgorICBlbnVtIFJlbG9jX2NsYXNzIHsKKyAgICBSQ19OT05FLAkJLy8gTm8g cmVsb2NhdGlvbiBjbGFzcy4KKyAgICBSQ19EQVRBLAkJLy8gRGF0YSByZWxv Y2F0aW9uLgorICAgIFJDX0FBUkNINjQsCQkvLyBTdGF0aWMgQUFyY2g2NCBy ZWxvY2F0aW9ucworICAgIFJDX0NGTE9XLAkJLy8gQ29udHJvbCBmbG93Cisg ICAgUkNfVExTLAkJLy8gVGhyZWFkIGxvY2FsIHN0b3JhZ2UKKyAgICBSQ19E WU5BTUlDLAkJLy8gRHluYW1pYyByZWxvY2F0aW9uCisgIH07CisKKyAgLy8g SW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCByZWxvY2F0 aW9ucy4KKyAgZW51bSBSZWxvY19pbnN0IHsKKyAgICBJTlNUX0RBVEEgPSAw LAorICAgIElOU1RfTU9WVyA9IDEsCS8vIG1vdnosIG1vdmssIG1vdm4KKyAg ICBJTlNUX0xEID0gMiwJLy8gbGQgbGl0ZXJhbAorICAgIElOU1RfQURSID0g MywJLy8gYWRyCisgICAgSU5TVF9BRFJQID0gNCwJLy8gYWRycAorICAgIElO U1RfQUREID0gNSwJLy8gYWRkCisgICAgSU5TVF9MRFNUID0gNiwJLy8gbGQv c3QKKyAgICBJTlNUX1RCWk5aID0gNywJLy8gdGJ6L3RibnoKKyAgICBJTlNU X0NPTkRCID0gOCwJLy8gQi5jb25kCisgICAgSU5TVF9CID0gOSwJCS8vIGIg IFsyNTowXQorICAgIElOU1RfQ0FMTCA9IDEwLAkvLyBibCBbMjU6MF0KKyAg ICBJTlNUX05VTSA9IDExLAkvLyB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBp biB0aGUgdGFibGUKKyAgfTsKKworICAvLyBUeXBlcyBvZiBiYXNlcyBvZiBy ZWxhdGl2ZSBhZGRyZXNzaW5nIHJlbG9jYXRpb24gY29kZXMuCisgIC8vIGVu dW0gUmVsYXRpdmVfYWRkcmVzc19iYXNlIHsKKyAgLy8gICBSQUJfTk9ORSwJ CS8vIFJlbG9jYXRpb24gaXMgbm90IHJlbGF0aXZlIGFkZHJlc3NpbmcKKyAg Ly8gfTsKKworICB0eXBlZGVmIGJvb2wgKCpydmFsdWVfY2hlY2t1cF9mdW5j X3ApKGludDY0X3QpOworICB0eXBlZGVmIHVpbnQ2NF90ICgqcnZhbHVlX2Jp dF9zZWxlY3RfZnVuYykodWludDY0X3QpOworCisgIC8vIFJlbG9jYXRpb24g Y29kZSByZXByZXNlbnRlZCBieSB0aGlzLgorICB1bnNpZ25lZCBpbnQKKyAg Y29kZSgpIGNvbnN0CisgIHsgcmV0dXJuIHRoaXMtPmNvZGVfOyB9CisKKyAg Ly8gTmFtZSBvZiB0aGUgcmVsb2NhdGlvbiBjb2RlLgorICBjb25zdCBzdGQ6 OnN0cmluZyYKKyAgbmFtZSgpIGNvbnN0CisgIHsgcmV0dXJuIHRoaXMtPm5h bWVfOyB9CisKKyAgLy8gVHlwZSBvZiByZWxvY2F0aW9uIGNvZGUuCisgIFJl bG9jX3R5cGUKKyAgcmVsb2NfdHlwZSgpIGNvbnN0CisgIHsgcmV0dXJuIHRo aXMtPnJlbG9jX3R5cGVfOyB9CisKKyAgLy8gQ2xhc3Mgb2YgcmVsb2NhdGlv biBjb2RlLgorICBSZWxvY19jbGFzcworICByZWxvY19jbGFzcygpIGNvbnN0 CisgIHsgcmV0dXJuIHRoaXMtPnJlbG9jX2NsYXNzXzsgfQorCisgIC8vIFdo ZXRoZXIgdGhpcyBjb2RlIGlzIGltcGxlbWVudGVkIGluIGdvbGQuCisgIGJv b2wKKyAgaXNfaW1wbGVtZW50ZWQoKSBjb25zdAorICB7IHJldHVybiB0aGlz LT5pc19pbXBsZW1lbnRlZF87IH0KKworICAvLyBJZiBjb2RlIGlzIGEgZ3Jv dXAgcmVsb2NhdGlvbiBjb2RlLCByZXR1cm4gdGhlIGdyb3VwIG51bWJlciwg b3RoZXJ3aXNlIC0xLgorICBpbnQKKyAgZ3JvdXBfaW5kZXgoKSBjb25zdAor ICB7IHJldHVybiB0aGlzLT5ncm91cF9pbmRleF87IH0KKworICAvLyBSZXR1 cm4gYWxpZ25tZW50IG9mIHJlbG9jYXRpb24uCisgIHNpemVfdAorICBhbGln bigpIGNvbnN0CisgIHsgcmV0dXJuIHRoaXMtPmFsaWduXzsgfQorCisgIGlu dAorICByZWZlcmVuY2VfZmxhZ3MoKSBjb25zdAorICB7IHJldHVybiB0aGlz LT5yZWZlcmVuY2VfZmxhZ3NfOyB9CisKKyAgLy8gSW5zdHJ1Y3Rpb24gYXNz b2NpYXRlZCB3aXRoIHRoaXMgcmVsb2NhdGlvbi4KKyAgUmVsb2NfaW5zdAor ICByZWxvY19pbnN0KCkgY29uc3QKKyAgeyByZXR1cm4gdGhpcy0+cmVsb2Nf aW5zdF87IH0KKworICAvLyBDaGVjayBvdmVyZmxvdyBvZiB4CisgIGJvb2wg Y2hlY2t1cF94X3ZhbHVlKGludDY0X3QgeCkgY29uc3QKKyAgeyByZXR1cm4g dGhpcy0+cnZhbHVlX2NoZWNrdXBfZnVuY18oeCk7IH0KKworICAvLyBSZXR1 cm4gcG9ydGlvbnMgb2YgeCBhcyBpcyBkZWZpbmVkIGluIGFhcmNoNjQtcmVs b2MuZGVmLgorICB1aW50NjRfdCBzZWxlY3RfeF92YWx1ZSh1aW50NjRfdCB4 KSBjb25zdAorICB7IHJldHVybiB0aGlzLT5ydmFsdWVfYml0X3NlbGVjdF9m dW5jXyh4KTsgfQorCisgcHJvdGVjdGVkOgorICAvLyBUaGVzZSBhcmUgcHJv dGVjdGVkLiAgV2Ugb25seSBhbGxvdyBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5 X3RhYmxlIHRvCisgIC8vIG1hbmFnZSBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5 LgorICBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5KHVuc2lnbmVkIGludCBjb2Rl LCBjb25zdCBjaGFyKiBuYW1lLCBSZWxvY190eXBlIHJ0eXBlLAorCQkJIFJl bG9jX2NsYXNzIHJjbGFzcywKKwkJCSBib29sIGlzX2ltcGxlbWVudGVkLAor CQkJIGludCBncm91cF9pbmRleCwKKwkJCSBpbnQgcmVmZXJlbmNlX2ZsYWdz LAorCQkJIFJlbG9jX2luc3QgcmVsb2NfaW5zdCwKKwkJCSBydmFsdWVfY2hl Y2t1cF9mdW5jX3AgcnZhbHVlX2NoZWNrdXBfZnVuYywKKwkJCSBydmFsdWVf Yml0X3NlbGVjdF9mdW5jIHJ2YWx1ZV9iaXRfc2VsZWN0KTsKKworICBmcmll bmQgY2xhc3MgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eV90YWJsZTsKKworIHBy aXZhdGU6CisgIC8vIENvcHlpbmcgaXMgbm90IGFsbG93ZWQuCisgIEFBcmNo NjRfcmVsb2NfcHJvcGVydHkoY29uc3QgQUFyY2g2NF9yZWxvY19wcm9wZXJ0 eSYpOworICBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5JiBvcGVyYXRvcj0oY29u c3QgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eSYpOworCisgIC8vIFJlbG9jYXRp b24gY29kZS4KKyAgY29uc3QgdW5zaWduZWQgaW50IGNvZGVfOworICAvLyBS ZWxvY2F0aW9uIG5hbWUuCisgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWVfOwor ICAvLyBUeXBlIG9mIHJlbG9jYXRpb24uCisgIFJlbG9jX3R5cGUgcmVsb2Nf dHlwZV87CisgIC8vIENsYXNzIG9mIHJlbG9jYXRpb24uCisgIFJlbG9jX2Ns YXNzIHJlbG9jX2NsYXNzXzsKKyAgLy8gR3JvdXAgaW5kZXggKDAsIDEsIG9y IDIpIGlmIHRoaXMgaXMgYSBncm91cCByZWxvY2F0aW9uIG9yIC0xIG90aGVy d2lzZS4KKyAgaW50IGdyb3VwX2luZGV4XzsKKyAgLy8gU2l6ZSBvZiByZWxv Y2F0aW9uLgorICBzaXplX3Qgc2l6ZV87CisgIC8vIEFsaWdubWVudCBvZiBy ZWxvY2F0aW9uLgorICBzaXplX3QgYWxpZ25fOworICAvLyBSZWxhdGl2ZSBh ZGRyZXNzIGJhc2UuCisgIC8vIFJlbGF0aXZlX2FkZHJlc3NfYmFzZSByZWxh dGl2ZV9hZGRyZXNzX2Jhc2VfOworICAvLyBXaGV0aGVyIHRoaXMgaXMgZGVw cmVjYXRlZC4KKyAgYm9vbCBpc19kZXByZWNhdGVkXyA6IDE7CisgIC8vIFdo ZXRoZXIgdGhpcyBpcyBpbXBsZW1lbnRlZCBpbiBnb2xkLgorICBib29sIGlz X2ltcGxlbWVudGVkXyA6IDE7CisgIC8vIFdoZXRoZXIgdGhpcyBjaGVja3Mg b3ZlcmZsb3cuCisgIGJvb2wgY2hlY2tzX292ZXJmbG93XyA6IDE7CisgIGNv bnN0IGludCByZWZlcmVuY2VfZmxhZ3NfOworICAvLyBJbnN0cnVjdGlvbiBh c3NvY2lhdGVkIHdpdGggcmVsb2NhdGlvbi4KKyAgUmVsb2NfaW5zdCByZWxv Y19pbnN0XzsKKyAgcnZhbHVlX2NoZWNrdXBfZnVuY19wIHJ2YWx1ZV9jaGVj a3VwX2Z1bmNfOworICBydmFsdWVfYml0X3NlbGVjdF9mdW5jIHJ2YWx1ZV9i aXRfc2VsZWN0X2Z1bmNfOworfTsKKworY2xhc3MgQUFyY2g2NF9yZWxvY19w cm9wZXJ0eV90YWJsZQoreworIHB1YmxpYzoKKyAgQUFyY2g2NF9yZWxvY19w cm9wZXJ0eV90YWJsZSgpOworCisgIGNvbnN0IEFBcmNoNjRfcmVsb2NfcHJv cGVydHkqCisgIGdldF9yZWxvY19wcm9wZXJ0eSh1bnNpZ25lZCBpbnQgY29k ZSkgY29uc3QKKyAgeworICAgIHVuc2lnbmVkIGludCBpZHggPSBjb2RlX3Rv X2FycmF5X2luZGV4KGNvZGUpOworICAgIHJldHVybiB0aGlzLT50YWJsZV9b aWR4XTsKKyAgfQorCisgIC8vIExpa2UgZ2V0X3JlbG9jX3Byb3BlcnR5IGJ1 dCBvbmx5IHJldHVybiBub24tTlVMTCBpZiByZWxvY2F0aW9uIGNvZGUgaXMK KyAgLy8gc3RhdGljIGFuZCBpbXBsZW1lbnRlZC4KKyAgY29uc3QgQUFyY2g2 NF9yZWxvY19wcm9wZXJ0eSoKKyAgZ2V0X2ltcGxlbWVudGVkX3N0YXRpY19y ZWxvY19wcm9wZXJ0eSh1bnNpZ25lZCBpbnQgY29kZSkgY29uc3QKKyAgewor ICAgIHVuc2lnbmVkIGludCBpZHggPSBjb2RlX3RvX2FycmF5X2luZGV4KGNv ZGUpOworICAgIGNvbnN0IEFBcmNoNjRfcmVsb2NfcHJvcGVydHkqIGFycCA9 IHRoaXMtPnRhYmxlX1tpZHhdOworICAgIHJldHVybiAoKGFycCAhPSBOVUxM CisJICAgICAmJiAoYXJwLT5yZWxvY190eXBlKCkgPT0gQUFyY2g2NF9yZWxv Y19wcm9wZXJ0eTo6UlRfU1RBVElDKQorCSAgICAgJiYgYXJwLT5pc19pbXBs ZW1lbnRlZCgpKQorCSAgICA/IGFycAorCSAgICA6IE5VTEwpOworICB9CisK KyAgLy8gUmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHJlbG9jYXRp b24gY29kZSB0aGF0IGlzIG5vdAorICAvLyBhbiBpbXBsZW1lbnRlZCBzdGF0 aWMgcmVsb2MgY29kZS4KKyAgc3RkOjpzdHJpbmcKKyAgcmVsb2NfbmFtZV9p bl9lcnJvcl9tZXNzYWdlKHVuc2lnbmVkIGludCBjb2RlKTsKKworIHByaXZh dGU6CisgIC8vIENvcHlpbmcgaXMgbm90IGFsbG93ZWQuCisgIEFBcmNoNjRf cmVsb2NfcHJvcGVydHlfdGFibGUoY29uc3QgQUFyY2g2NF9yZWxvY19wcm9w ZXJ0eV90YWJsZSYpOworICBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5X3RhYmxl JiBvcGVyYXRvcj0oY29uc3QgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eV90YWJs ZSYpOworCisgIC8vIE1hcCBhYXJjaDY0IHJ0eXBlcyBpbnRvIHJhbmdlKDAs MzAwKSBhcyBmb2xsb3dpbmcKKyAgLy8gICAyNTYgfiAzMTMgLT4gMCB+IDU3 CisgIC8vICAgNTEyIH4gNTczIC0+IDEyOCB+IDE4OQorICBpbnQKKyAgY29k ZV90b19hcnJheV9pbmRleCh1bnNpZ25lZCBpbnQgY29kZSkgY29uc3QKKyAg eworICAgIGlmIChjb2RlID09IDApIHJldHVybiAwOworICAgIGlmICghKChj b2RlID49IGVsZmNwcDo6Ul9BQVJDSDY0X0FCUzY0ICYmCisJICAgY29kZSA8 PSBlbGZjcHA6OlJfQUFSQ0g2NF9MRDY0X0dPVFBBR0VfTE8xNSkKKwkgIHx8 IChjb2RlID49IGVsZmNwcDo6Ul9BQVJDSDY0X1RMU0dEX0FEUl9QUkVMMjEg JiYKKwkgICAgICBjb2RlIDw9IGVsZmNwcDo6Ul9BQVJDSDY0X1RMU0xEX0xE U1QxMjhfRFRQUkVMX0xPMTJfTkMpKSkKKyAgICAgIHsKKwlnb2xkX2Vycm9y KF8oIkludmFsaWQvdW5yZWNvZ25pemVkIHJlbG9jIHJlbG9jICVkLiIpLCBj b2RlKTsKKyAgICAgIH0KKyAgICB1bnNpZ25lZCBpbnQgcnYgPSAtMTsKKyAg ICBpZiAoY29kZSAmICgxIDw8IDkpKQorICAgICAgcnYgPSAxMjggKyBjb2Rl IC0gNTEyOyAgLy8gNTEyIC0gNTczCisgICAgZWxzZSBpZiAoY29kZSAmICgx IDw8IDgpKQorICAgICAgcnYgPSBjb2RlIC0gMjU2OyAgLy8gMjU2IC0gMzEz CisgICAgZ29sZF9hc3NlcnQocnYgPD0gUHJvcGVydHlfdGFibGVfc2l6ZSk7 CisgICAgcmV0dXJuIHJ2OworICB9CisKKyAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGludCBQcm9wZXJ0eV90YWJsZV9zaXplID0gMzAwOworICBBQXJjaDY0 X3JlbG9jX3Byb3BlcnR5KiB0YWJsZV9bUHJvcGVydHlfdGFibGVfc2l6ZV07 Cit9OyAgLy8gRW5kIG9mIGNsYXNzIEFBcmNoNjRfcmVsb2NfcHJvcGVydHlf dGFibGUKKworfSAvLyBFbmQgbmFtZXNwYWNlIGdvbGQuCisKKyNlbmRpZiAv LyAhZGVmaW5lZChHT0xEX0FBUkNINjRfUkVMT0NfUFJPUEVSVFlfSCkKZGlm ZiAtLWdpdCBhL2dvbGQvYWFyY2g2NC1yZWxvYy5kZWYgYi9nb2xkL2FhcmNo NjQtcmVsb2MuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmIyNzljNjkKLS0tIC9kZXYvbnVsbAorKysgYi9nb2xkL2FhcmNoNjQt cmVsb2MuZGVmCkBAIC0wLDAgKzEsNjggQEAKKy8vIGFhcmNoNjQtcmVsb2Mu ZGVmIC0tIEFBcmNoNjQgcmVsb2NhdGlvbiBkZWZpbml0aW9ucy4KKworLy8g Q29weXJpZ2h0IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorLy8gV3JpdHRlbiBieSBIYW4gU2hlbiA8c2hlbmhhbkBnb29nbGUu Y29tPiBhbmQgSmluZyBZdSA8amluZ3l1QGdvb2dsZS5jb20+LgorCisvLyBU aGlzIGZpbGUgaXMgcGFydCBvZiBnb2xkLgorCisvLyBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy8vIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCisvLyAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisv LyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLy8gYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy8v IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRo IEZsb29yLCBCb3N0b24sCisvLyBNQSAwMjExMC0xMzAxLCBVU0EuCisvLwor Ly8KKy8vCisvLyBJbnNuIG1vZGlmaWVkIGJ5IHJlbG9jYXRpb24sIHNlZSBl bnVtIFJlbG9jX2luc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK Ky8vIFN5bWJvbCByZWZlcmVuY2UgdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSsJCSAgICAgICAgICAgICB8CisvLyBQb3J0aW9uIG9m ZiBYIHRvIHJldHJpZXZlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICB8 CQkgICAgICAgICAgICAgfAorLy8gQ2hlY2tpbmcgZnVuY3Rpb24sIHNlZSBO b3RlKEEpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t KyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfAkJICAgICAgICAgICAg IHwKKy8vIEdyb3VwIGluZGV4LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgIHwgICAgICAgICAgICAg ICAgICAgICAgIHwgICAgIHwJCSAgICAgICAgICAgICB8CisvLyBJbXBsZW1l bnRlZC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rICAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAg ICB8CQkgICAgICAgICAgICAgfAorLy8gQ2xhc3MtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfCAgICB8ICAg ICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfAkJICAgICAgICAg ICAgIHwKKy8vIFR5cGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAg ICAgICAgIHwgICAgICAgICAgICAgIHwgICAgfCAgICAgIHwgICAgICAgICAg ICAgICAgICAgICAgIHwgICAgIHwJCSAgICAgICAgICAgICB8CisvLyBOYW1l ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAg ICAgICAgICB8ICAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8 ICAgICB8CQkgICAgICAgICAgICAgfAorLy8gIHwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICB8 ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfAkJICAgICAg ICAgICAgIHwKK0FSRChBQlM2NCAgICAgICAgICAgICAgICAgICAgICAgICwg U1RBVElDICwgIERBVEEgICAgICAgLCAgIFksICAtMSwgICAgMCwwICAgICAg ICAgICAgICAgICwgICAgMCwwICAsIFN5bWJvbDo6QUJTT0xVVEVfUkVGICwg REFUQSApCitBUkQoQUJTMzIgICAgICAgICAgICAgICAgICAgICAgICAsIFNU QVRJQyAsICBEQVRBICAgICAgICwgICBZLCAgLTEsICAgMzEsMzIgICAgICAg ICAgICAgICAsICAgIDAsMCAgLCBTeW1ib2w6OkFCU09MVVRFX1JFRiAsIERB VEEgKQorQVJEKEFCUzE2ICAgICAgICAgICAgICAgICAgICAgICAgLCBTVEFU SUMgLCAgREFUQSAgICAgICAsICAgWSwgIC0xLCAgIDE1LDE2ICAgICAgICAg ICAgICAgLCAgICAwLDAgICwgU3ltYm9sOjpBQlNPTFVURV9SRUYgLCBEQVRB ICkKK0FSRChQUkVMNjQgICAgICAgICAgICAgICAgICAgICAgICwgU1RBVElD ICwgIERBVEEgICAgICAgLCAgIFksICAtMSwgICAgMCwwICAgICAgICAgICAg ICAgICwgICAgMCwwICAsIFN5bWJvbDo6UkVMQVRJVkVfUkVGICwgREFUQSAp CitBUkQoUFJFTDMyICAgICAgICAgICAgICAgICAgICAgICAsIFNUQVRJQyAs ICBEQVRBICAgICAgICwgICBZLCAgLTEsICAgMzEsMzIgICAgICAgICAgICAg ICAsICAgIDAsMCAgLCBTeW1ib2w6OlJFTEFUSVZFX1JFRiAsIERBVEEgKQor QVJEKFBSRUwxNiAgICAgICAgICAgICAgICAgICAgICAgLCBTVEFUSUMgLCAg REFUQSAgICAgICAsICAgWSwgIC0xLCAgIDE1LDE2ICAgICAgICAgICAgICAg LCAgICAwLDAgICwgU3ltYm9sOjpSRUxBVElWRV9SRUYgLCBEQVRBICkKKy8v IEFib3ZlIGlzIGZyb20gVGFibGUgNC02LCBEYXRhIHJlbG9jYXRpb25zLCAy NTctMjYyLgorCitBUkQoQURSX1BSRUxfUEdfSEkyMSAgICAgICAgICAgICAs IFNUQVRJQyAsICBBQVJDSDY0ICAgICwgICBZLCAgLTEsICAgMzIsMzIgICAg ICAgICAgICAgICAsICAgMTIsMzIgLCBTeW1ib2w6OlJFTEFUSVZFX1JFRiAs IEFEUlAgKQorQVJEKEFEUl9QUkVMX1BHX0hJMjFfTkMgICAgICAgICAgLCBT VEFUSUMgLCAgQUFSQ0g2NCAgICAsICAgWSwgIC0xLCAgICAwLDAgICAgICAg ICAgICAgICAgLCAgIDEyLDMyICwgU3ltYm9sOjpSRUxBVElWRV9SRUYgLCBB RFJQICkKK0FSRChMRFNUOF9BQlNfTE8xMl9OQyAgICAgICAgICAgICwgU1RB VElDICwgIEFBUkNINjQgICAgLCAgIFksICAtMSwgICAgMCwwICAgICAgICAg ICAgICAgICwgICAgMCwxMSAsIFN5bWJvbDo6QUJTT0xVVEVfUkVGICwgTERT VCApCitBUkQoTERTVDE2X0FCU19MTzEyX05DICAgICAgICAgICAsIFNUQVRJ QyAsICBBQVJDSDY0ICAgICwgICBZLCAgLTEsICAgIDAsUkxfQ0hFQ0tfQUxJ R04yICAsICAgIDEsMTEgLCBTeW1ib2w6OkFCU09MVVRFX1JFRiAsIExEU1Qg KQorQVJEKExEU1QzMl9BQlNfTE8xMl9OQyAgICAgICAgICAgLCBTVEFUSUMg LCAgQUFSQ0g2NCAgICAsICAgWSwgIC0xLCAgICAwLFJMX0NIRUNLX0FMSUdO NCAgLCAgICAyLDExICwgU3ltYm9sOjpBQlNPTFVURV9SRUYgLCBMRFNUICkK K0FSRChMRFNUNjRfQUJTX0xPMTJfTkMgICAgICAgICAgICwgU1RBVElDICwg IEFBUkNINjQgICAgLCAgIFksICAtMSwgICAgMCxSTF9DSEVDS19BTElHTjgg ICwgICAgMywxMSAsIFN5bWJvbDo6QUJTT0xVVEVfUkVGICwgTERTVCApCitB UkQoTERTVDEyOF9BQlNfTE8xMl9OQyAgICAgICAgICAsIFNUQVRJQyAsICBB QVJDSDY0ICAgICwgICBZLCAgLTEsICAgIDAsUkxfQ0hFQ0tfQUxJR04xNiAs ICAgIDQsMTEgLCBTeW1ib2w6OkFCU09MVVRFX1JFRiAsIExEU1QgKQorQVJE KEFERF9BQlNfTE8xMl9OQyAgICAgICAgICAgICAgLCBTVEFUSUMgLCAgQUFS Q0g2NCAgICAsICAgWSwgIC0xLCAgICAwLDAgICAgICAgICAgICAgICAgLCAg ICAwLDExICwgU3ltYm9sOjpBQlNPTFVURV9SRUYgLCBBREQgKQorQVJEKEFE Ul9HT1RfUEFHRSAgICAgICAgICAgICAgICAgLCBTVEFUSUMgLCAgQUFSQ0g2 NCAgICAsICAgWSwgIC0xLCAgIDMyLDMyICAgICAgICAgICAgICAgLCAgIDEy LDMyICwgU3ltYm9sOjpSRUxBVElWRV9SRUYgLCBBRFJQICkKK0FSRChMRDY0 X0dPVF9MTzEyX05DICAgICAgICAgICAgICwgU1RBVElDICwgIEFBUkNINjQg ICAgLCAgIFksICAtMSwgICAgMCxSTF9DSEVDS19BTElHTjggICwgICAgMywx MSAsIFN5bWJvbDo6QUJTT0xVVEVfUkVGICwgTERTVCApCitBUkQoVFNUQlIx NCAgICAgICAgICAgICAgICAgICAgICAsIFNUQVRJQyAsICBDRkxPVyAgICAg ICwgICBOLCAgLTEsICAgMTUsMTUgICAgICAgICAgICAgICAsICAgIDIsMTUg LCBTeW1ib2w6OkFCU09MVVRFX1JFRiAsIFRCWk5aICkKK0FSRChDT05EQlIx OSAgICAgICAgICAgICAgICAgICAgICwgU1RBVElDICwgIENGTE9XICAgICAg LCAgIE4sICAtMSwgICAyMCwyMCAgICAgICAgICAgICAgICwgICAgMiwyMCAs IFN5bWJvbDo6QUJTT0xVVEVfUkVGICwgQ09OREIgKQorQVJEKENBTEwyNiAg ICAgICAgICAgICAgICAgICAgICAgLCBTVEFUSUMgLCAgQ0ZMT1cgICAgICAs ICAgWSwgIC0xLCAgIDI3LDI3ICAgICAgICAgICAgICAgLCAgICAyLDI3ICwg KFN5bWJvbDo6RlVOQ1RJT05fQ0FMTHxTeW1ib2w6OlJFTEFUSVZFX1JFRikg LCBDQUxMICkKK0FSRChKVU1QMjYgICAgICAgICAgICAgICAgICAgICAgICwg U1RBVElDICwgIENGTE9XICAgICAgLCAgIFksICAtMSwgICAyNywyNyAgICAg ICAgICAgICAgICwgICAgMiwyNyAsIChTeW1ib2w6OkZVTkNUSU9OX0NBTEx8 U3ltYm9sOjpSRUxBVElWRV9SRUYpICwgQiApCisvLyBBYm92ZSBpcyBmcm9t IFRhYmxlIDQtMTAsIFJlbG9jYXRpb25zIGZvciBjb250cm9sLWZsCisKK0FS RChUTFNJRV9NT1ZXX0dPVFRQUkVMX0cxICAgICAgICwgU1RBVElDICwgIEFB UkNINjQgICAgLCAgIE4sICAtMSwgICAgMCwwICAgICAgICAgICAgICAgICwg ICAxNiwzMSAsIFN5bWJvbDo6QUJTT0xVVEVfUkVGICwgTU9WVyApCitBUkQo VExTSUVfTU9WV19HT1RUUFJFTF9HMF9OQyAgICAsIFNUQVRJQyAsICBBQVJD SDY0ICAgICwgICBOLCAgLTEsICAgIDAsMCAgICAgICAgICAgICAgICAsICAg IDAsMTUgLCBTeW1ib2w6OkFCU09MVVRFX1JFRiAsIE1PVlcgKQorQVJEKFRM U0lFX0FEUl9HT1RUUFJFTF9QQUdFMjEgICAgLCBTVEFUSUMgLCAgQUFSQ0g2 NCAgICAsICAgWSwgIC0xLCAgIDMyLDMyICAgICAgICAgICAgICAgLCAgIDEy LDMyICwgU3ltYm9sOjpBQlNPTFVURV9SRUYgLCBBRFJQICkKK0FSRChUTFNJ RV9MRDY0X0dPVFRQUkVMX0xPMTJfTkMgICwgU1RBVElDICwgIEFBUkNINjQg ICAgLCAgIE4sICAtMSwgICAzMiwzMiAgICAgICAgICAgICAgICwgICAxMiwz MiAsIFN5bWJvbDo6QUJTT0xVVEVfUkVGICwgTERTVCApCitBUkQoVExTSUVf TERfR09UVFBSRUxfUFJFTDE5ICAgICAsIFNUQVRJQyAsICBBQVJDSDY0ICAg ICwgICBOLCAgLTEsICAgMjAsMjAgICAgICAgICAgICAgICAsICAgIDIsMjAg LCBTeW1ib2w6OkFCU09MVVRFX1JFRiAsIExEICkKKy8vIEFib3ZlIGlzIGZy b20gVGFibGUgNC0xNywgSW5pdGlhbCBFeGVjIFRMUyByZWxvY2F0aW9zLCA1 MzktNTQzLgorCisvLyBOb3RlIC0KKy8vIEEgLSBDaGVja2luZyBYLCAoTCxV KSwgaWYgTCA9PSAwICYmIFUgPT0gMCwgbm8gY2hlY2suIE90aGVyd2lzZSwg TCE9MCwgY2hlY2sgdGhhdCAtMl5MPD1YPDJeVS4KKy8vICAgICBBbHNvIGFu IGV4dHJhIGFsaWdubWVudCBjaGVjayBjb3VsZCBiZSBlbWJlZGVkIGludG8g VS4KZGlmZiAtLWdpdCBhL2dvbGQvYWFyY2g2NC5jYyBiL2dvbGQvYWFyY2g2 NC5jYwppbmRleCAxN2ZlMDMxLi43ZDRiYWFmIDEwMDY0NAotLS0gYS9nb2xk L2FhcmNoNjQuY2MKKysrIGIvZ29sZC9hYXJjaDY0LmNjCkBAIC0xLDcgKzEs NyBAQAogLy8gYWFyY2g2NC5jYyAtLSBhYXJjaDY0IHRhcmdldCBzdXBwb3J0 IGZvciBnb2xkLgogCiAvLyBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0vLyBXcml0dGVuIGJ5IEppbmcgWXUg PGppbmd5dUBnb29nbGUuY29tPi4KKy8vIFdyaXR0ZW4gYnkgSmluZyBZdSA8 amluZ3l1QGdvb2dsZS5jb20+IGFuZCBIYW4gU2hlbiA8c2hlbmhhbkBnb29n bGUuY29tPi4KIAogLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgZ29sZC4KIApA QCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIm5hY2wuaCIKICNpbmNsdWRl ICJnYy5oIgogI2luY2x1ZGUgImljZi5oIgorI2luY2x1ZGUgImFhcmNoNjQt cmVsb2MtcHJvcGVydHkuaCIKIAogLy8gVGhlIGZpcnN0IHRocmVlIC5nb3Qu cGx0IGVudHJpZXMgYXJlIHJlc2VydmVkLgogY29uc3QgaW50MzJfdCBBQVJD SDY0X0dPVFBMVF9SRVNFUlZFX0NPVU5UID0gMzsKQEAgLTYwLDYgKzYxLDkg QEAgY2xhc3MgT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjRfc3RhbmRhcmQ7CiB0 ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgogY2xhc3MgVGFy Z2V0X2FhcmNoNjQ7CiAKK3RlbXBsYXRlPGludCBzaXplLCBib29sIGJpZ19l bmRpYW4+CitjbGFzcyBBQXJjaDY0X3JlbG9jYXRlX2Z1bmN0aW9uczsKKwog Ly8gT3V0cHV0X2RhdGFfZ290X2FhcmNoNjQgY2xhc3MuCiAKIHRlbXBsYXRl PGludCBzaXplLCBib29sIGJpZ19lbmRpYW4+CkBAIC02OCw3ICs3Miw4IEBA IGNsYXNzIE91dHB1dF9kYXRhX2dvdF9hYXJjaDY0IDogcHVibGljIE91dHB1 dF9kYXRhX2dvdDxzaXplLCBiaWdfZW5kaWFuPgogIHB1YmxpYzoKICAgdHlw ZWRlZiB0eXBlbmFtZSBlbGZjcHA6OkVsZl90eXBlczxzaXplPjo6RWxmX0Fk ZHIgVmFsdHlwZTsKICAgT3V0cHV0X2RhdGFfZ290X2FhcmNoNjQoU3ltYm9s X3RhYmxlKiBzeW10YWIsIExheW91dCogbGF5b3V0KQotICAgIDogT3V0cHV0 X2RhdGFfZ290PHNpemUsIGJpZ19lbmRpYW4+KCksIGxheW91dF8obGF5b3V0 KQorICAgIDogT3V0cHV0X2RhdGFfZ290PHNpemUsIGJpZ19lbmRpYW4+KCks CisgICAgICBzeW1ib2xfdGFibGVfKHN5bXRhYiksIGxheW91dF8obGF5b3V0 KQogICB7IH0KIAogIHByb3RlY3RlZDoKQEAgLTg0LDExICs4OSwxNSBAQCBj bGFzcyBPdXRwdXRfZGF0YV9nb3RfYWFyY2g2NCA6IHB1YmxpYyBPdXRwdXRf ZGF0YV9nb3Q8c2l6ZSwgYmlnX2VuZGlhbj4KICAgfQogCiAgcHJpdmF0ZToK KyAgLy8gU3ltYm9sIHRhYmxlIG9mIHRoZSBvdXRwdXQgb2JqZWN0LgorICBT eW1ib2xfdGFibGUqIHN5bWJvbF90YWJsZV87CiAgIC8vIEEgcG9pbnRlciB0 byB0aGUgTGF5b3V0IGNsYXNzLCBzbyB0aGF0IHdlIGNhbiBmaW5kIHRoZSAu ZHluYW1pYwogICAvLyBzZWN0aW9uIHdoZW4gd2Ugd3JpdGUgb3V0IHRoZSBH T1Qgc2VjdGlvbi4KICAgTGF5b3V0KiBsYXlvdXRfOwogfTsKIAorQUFyY2g2 NF9yZWxvY19wcm9wZXJ0eV90YWJsZSogYWFyY2g2NF9yZWxvY19wcm9wZXJ0 eV90YWJsZSA9IE5VTEw7CisKIC8vIFRoZSBhYXJjaDY0IHRhcmdldCBjbGFz cy4KIC8vIFNlZSB0aGUgQUJJIGF0CiAvLyBodHRwOi8vaW5mb2NlbnRlci5h cm0uY29tL2hlbHAvdG9waWMvY29tLmFybS5kb2MuaWhpMDA1NmIvSUhJMDA1 NkJfYWFlbGY2NC5wZGYKQEAgLTE4NCw2ICsxOTMsMTUgQEAgY2xhc3MgVGFy Z2V0X2FhcmNoNjQgOiBwdWJsaWMgU2l6ZWRfdGFyZ2V0PHNpemUsIGJpZ19l bmRpYW4+CiAgICAgICB1bnNpZ25lZCBjaGFyKiByZWxvY192aWV3LAogICAg ICAgc2VjdGlvbl9zaXplX3R5cGUgcmVsb2Nfdmlld19zaXplKTsKIAorICAv LyBSZXR1cm4gdGhlIFBMVCBzZWN0aW9uLgorICB1aW50NjRfdAorICBkb19w bHRfYWRkcmVzc19mb3JfZ2xvYmFsKGNvbnN0IFN5bWJvbCogZ3N5bSkgY29u c3QKKyAgeyByZXR1cm4gdGhpcy0+cGx0X3NlY3Rpb24oKS0+YWRkcmVzc19m b3JfZ2xvYmFsKGdzeW0pOyB9CisKKyAgdWludDY0X3QKKyAgZG9fcGx0X2Fk ZHJlc3NfZm9yX2xvY2FsKGNvbnN0IFJlbG9iaiogcmVsb2JqLCB1bnNpZ25l ZCBpbnQgc3ltbmR4KSBjb25zdAorICB7IHJldHVybiB0aGlzLT5wbHRfc2Vj dGlvbigpLT5hZGRyZXNzX2Zvcl9sb2NhbChyZWxvYmosIHN5bW5keCk7IH0K KwogICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBQ TFQuCiAgIHVuc2lnbmVkIGludAogICBwbHRfZW50cnlfY291bnQoKSBjb25z dDsKQEAgLTE5Niw2ICsyMTQsMjcgQEAgY2xhc3MgVGFyZ2V0X2FhcmNoNjQg OiBwdWJsaWMgU2l6ZWRfdGFyZ2V0PHNpemUsIGJpZ19lbmRpYW4+CiAgIHVu c2lnbmVkIGludAogICBwbHRfZW50cnlfc2l6ZSgpIGNvbnN0OwogCisgcHJv dGVjdGVkOgorICB2b2lkCisgIGRvX3NlbGVjdF9hc19kZWZhdWx0X3Rhcmdl dCgpCisgIHsKKyAgICBnb2xkX2Fzc2VydChhYXJjaDY0X3JlbG9jX3Byb3Bl cnR5X3RhYmxlID09IE5VTEwpOworICAgIGFhcmNoNjRfcmVsb2NfcHJvcGVy dHlfdGFibGUgPSBuZXcgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eV90YWJsZSgp OworICB9CisKKyAgdmlydHVhbCBPdXRwdXRfZGF0YV9wbHRfYWFyY2g2NDxz aXplLCBiaWdfZW5kaWFuPioKKyAgZG9fbWFrZV9kYXRhX3BsdChMYXlvdXQq IGxheW91dCwgT3V0cHV0X2RhdGFfc3BhY2UqIGdvdF9wbHQpCisgIHsKKyAg ICByZXR1cm4gbmV3IE91dHB1dF9kYXRhX3BsdF9hYXJjaDY0X3N0YW5kYXJk PHNpemUsIGJpZ19lbmRpYW4+KGxheW91dCwKKwkJCQkJCQkJICBnb3RfcGx0 KTsKKyAgfQorCisgIE91dHB1dF9kYXRhX3BsdF9hYXJjaDY0PHNpemUsIGJp Z19lbmRpYW4+KgorICBtYWtlX2RhdGFfcGx0KExheW91dCogbGF5b3V0LCBP dXRwdXRfZGF0YV9zcGFjZSogZ290X3BsdCkKKyAgeworICAgIHJldHVybiB0 aGlzLT5kb19tYWtlX2RhdGFfcGx0KGxheW91dCwgZ290X3BsdCk7CisgIH0K KwogIHByaXZhdGU6CiAgIC8vIFRoZSBjbGFzcyB3aGljaCBzY2FucyByZWxv Y2F0aW9ucy4KICAgY2xhc3MgU2NhbgpAQCAtMjA1LDkgKzI0NCw2IEBAIGNs YXNzIFRhcmdldF9hYXJjaDY0IDogcHVibGljIFNpemVkX3RhcmdldDxzaXpl LCBiaWdfZW5kaWFuPgogICAgICAgOiBpc3N1ZWRfbm9uX3BpY19lcnJvcl8o ZmFsc2UpCiAgICAgeyB9CiAKLSAgICBzdGF0aWMgaW5saW5lIGludAotICAg IGdldF9yZWZlcmVuY2VfZmxhZ3ModW5zaWduZWQgaW50IHJfdHlwZSk7Ci0K ICAgICBpbmxpbmUgdm9pZAogICAgIGxvY2FsKFN5bWJvbF90YWJsZSogc3lt dGFiLCBMYXlvdXQqIGxheW91dCwgVGFyZ2V0X2FhcmNoNjQqIHRhcmdldCwK IAkgIFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+KiBvYmpl Y3QsCkBAIC0yMjcsMjMgKzI2MywyMyBAQCBjbGFzcyBUYXJnZXRfYWFyY2g2 NCA6IHB1YmxpYyBTaXplZF90YXJnZXQ8c2l6ZSwgYmlnX2VuZGlhbj4KIAog ICAgIGlubGluZSBib29sCiAgICAgbG9jYWxfcmVsb2NfbWF5X2JlX2Z1bmN0 aW9uX3BvaW50ZXIoU3ltYm9sX3RhYmxlKiAsIExheW91dCogLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldF9hYXJj aDY0PHNpemUsIGJpZ19lbmRpYW4+KiAsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwg YmlnX2VuZGlhbj4qICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dF9zZWN0aW9uKiAsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxm Y3BwOjpSZWxhPHNpemUsIGJpZ19lbmRpYW4+JiAsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJfdHlw ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBlbGZjcHA6OlN5bTxzaXplLCBiaWdfZW5kaWFuPiYpOworCQkJCQlU YXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPiogLAorCQkJCQlTaXpl ZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPiogLAorCQkJCQl1bnNp Z25lZCBpbnQgLAorCQkJCQlPdXRwdXRfc2VjdGlvbiogLAorCQkJCQljb25z dCBlbGZjcHA6OlJlbGE8c2l6ZSwgYmlnX2VuZGlhbj4mICwKKwkJCQkJdW5z aWduZWQgaW50IHJfdHlwZSwKKwkJCQkJY29uc3QgZWxmY3BwOjpTeW08c2l6 ZSwgYmlnX2VuZGlhbj4mKTsKIAogICAgIGlubGluZSBib29sCiAgICAgZ2xv YmFsX3JlbG9jX21heV9iZV9mdW5jdGlvbl9wb2ludGVyKFN5bWJvbF90YWJs ZSogLCBMYXlvdXQqICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj4q ICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj4qICwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50ICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0X3NlY3Rpb24qICwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgZWxmY3BwOjpSZWxhPHNpemUsIGJp Z19lbmRpYW4+JiAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCByX3R5cGUsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbCogZ3N5bSk7CisJ CQkJCSBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPiogLAorCQkJ CQkgU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj4qICwKKwkJ CQkJIHVuc2lnbmVkIGludCAsCisJCQkJCSBPdXRwdXRfc2VjdGlvbiogLAor CQkJCQkgY29uc3QgZWxmY3BwOjpSZWxhPHNpemUsIGJpZ19lbmRpYW4+JiAs CisJCQkJCSB1bnNpZ25lZCBpbnQgcl90eXBlLAorCQkJCQkgU3ltYm9sKiBn c3ltKTsKIAogICBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkCkBAIC00ODks NyArNTI1LDcgQEAgY29uc3QgVGFyZ2V0OjpUYXJnZXRfaW5mbyBUYXJnZXRf YWFyY2g2NDwzMiwgdHJ1ZT46OmFhcmNoNjRfaW5mbyA9CiB0ZW1wbGF0ZTxp bnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgogT3V0cHV0X2RhdGFfZ290X2Fh cmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj4qCiBUYXJnZXRfYWFyY2g2NDxzaXpl LCBiaWdfZW5kaWFuPjo6Z290X3NlY3Rpb24oU3ltYm9sX3RhYmxlKiBzeW10 YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGF5b3V0KiBsYXlvdXQpCisJCQkJCSAgICAgIExheW91dCogbGF5 b3V0KQogewogICBpZiAodGhpcy0+Z290XyA9PSBOVUxMKQogICAgIHsKQEAg LTUxNSwxMCArNTUxLDEwIEBAIFRhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19l bmRpYW4+Ojpnb3Rfc2VjdGlvbihTeW1ib2xfdGFibGUqIHN5bXRhYiwKIAog ICAgICAgLy8gR2VuZXJhdGUgLmdvdCBzZWN0aW9uLgogICAgICAgdGhpcy0+ Z290XyA9IG5ldyBPdXRwdXRfZGF0YV9nb3RfYWFyY2g2NDxzaXplLCBiaWdf ZW5kaWFuPihzeW10YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dCk7 CisJCQkJCQkJCSBsYXlvdXQpOwogICAgICAgbGF5b3V0LT5hZGRfb3V0cHV0 X3NlY3Rpb25fZGF0YSgiLmdvdCIsIGVsZmNwcDo6U0hUX1BST0dCSVRTLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWxmY3Bw OjpTSEZfQUxMT0MgfCBlbGZjcHA6OlNIRl9XUklURSksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdvdF8sIGdvdF9v cmRlciwgdHJ1ZSk7CisJCQkJICAgICAgKGVsZmNwcDo6U0hGX0FMTE9DIHwg ZWxmY3BwOjpTSEZfV1JJVEUpLAorCQkJCSAgICAgIHRoaXMtPmdvdF8sIGdv dF9vcmRlciwgdHJ1ZSk7CiAgICAgICAvLyBUaGUgZmlyc3Qgd29yZCBvZiBH T1QgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBhZGRyZXNzIG9mIC5keW5hbWljLgog ICAgICAgLy8gV2UgcHV0IDAgaGVyZSBub3cuIFRoZSB2YWx1ZSB3aWxsIGJl IHJlcGxhY2VkIGxhdGVyIGluCiAgICAgICAvLyBPdXRwdXRfZGF0YV9nb3Rf YWFyY2g2NDo6ZG9fd3JpdGUuCkBAIC01MjgsMzIgKzU2NCwzMiBAQCBUYXJn ZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6Z290X3NlY3Rpb24oU3lt Ym9sX3RhYmxlKiBzeW10YWIsCiAgICAgICAvLyBfR0xPQkFMX09GRlNFVF9U QUJMRV8gdmFsdWUgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgLmdvdCBz ZWN0aW9uLAogICAgICAgLy8gZXZlbiBpZiB0aGVyZSBpcyBhIC5nb3QucGx0 IHNlY3Rpb24uCiAgICAgICB0aGlzLT5nbG9iYWxfb2Zmc2V0X3RhYmxlXyA9 Ci0gICAgICAgIHN5bXRhYi0+ZGVmaW5lX2luX291dHB1dF9kYXRhKCJfR0xP QkFMX09GRlNFVF9UQUJMRV8iLCBOVUxMLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTeW1ib2xfdGFibGU6OlBSRURFRklORUQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMt PmdvdF8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDAsIDAsIGVsZmNwcDo6U1RUX09CSkVDVCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZWxmY3BwOjpTVEJfTE9DQUwsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZmNwcDo6U1RW X0hJRERFTiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmFsc2UsIGZhbHNlKTsKKwlzeW10YWItPmRlZmluZV9pbl9vdXRw dXRfZGF0YSgiX0dMT0JBTF9PRkZTRVRfVEFCTEVfIiwgTlVMTCwKKwkJCQkg ICAgICBTeW1ib2xfdGFibGU6OlBSRURFRklORUQsCisJCQkJICAgICAgdGhp cy0+Z290XywKKwkJCQkgICAgICAwLCAwLCBlbGZjcHA6OlNUVF9PQkpFQ1Qs CisJCQkJICAgICAgZWxmY3BwOjpTVEJfTE9DQUwsCisJCQkJICAgICAgZWxm Y3BwOjpTVFZfSElEREVOLCAwLAorCQkJCSAgICAgIGZhbHNlLCBmYWxzZSk7 CiAKICAgICAgIC8vIEdlbmVyYXRlIC5nb3QucGx0IHNlY3Rpb24uCiAgICAg ICB0aGlzLT5nb3RfcGx0XyA9IG5ldyBPdXRwdXRfZGF0YV9zcGFjZShzaXpl IC8gOCwgIioqIEdPVCBQTFQiKTsKICAgICAgIGxheW91dC0+YWRkX291dHB1 dF9zZWN0aW9uX2RhdGEoIi5nb3QucGx0IiwgZWxmY3BwOjpTSFRfUFJPR0JJ VFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChl bGZjcHA6OlNIRl9BTExPQwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCBlbGZjcHA6OlNIRl9XUklURSksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdvdF9wbHRfLCBn b3RfcGx0X29yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpc19nb3RfcGx0X3JlbHJvKTsKKwkJCQkgICAgICAoZWxmY3Bw OjpTSEZfQUxMT0MKKwkJCQkgICAgICAgfCBlbGZjcHA6OlNIRl9XUklURSks CisJCQkJICAgICAgdGhpcy0+Z290X3BsdF8sIGdvdF9wbHRfb3JkZXIsCisJ CQkJICAgICAgaXNfZ290X3BsdF9yZWxybyk7CiAKICAgICAgIC8vIFRoZSBm aXJzdCB0aHJlZSBlbnRyaWVzIGFyZSByZXNlcnZlZC4KLSAgICAgIHRoaXMt PmdvdF9wbHRfLT5zZXRfY3VycmVudF9kYXRhX3NpemUKLSAgICAgICAgICAo QUFSQ0g2NF9HT1RQTFRfUkVTRVJWRV9DT1VOVCAqIChzaXplIC8gOCkpOwor ICAgICAgdGhpcy0+Z290X3BsdF8tPnNldF9jdXJyZW50X2RhdGFfc2l6ZSgK KwlBQVJDSDY0X0dPVFBMVF9SRVNFUlZFX0NPVU5UICogKHNpemUgLyA4KSk7 CiAKICAgICAgIGlmICghaXNfZ290X3BsdF9yZWxybykKLSAgICAgICAgewot ICAgICAgICAgIC8vIFRob3NlIGJ5dGVzIGNhbiBnbyBpbnRvIHRoZSByZWxy byBzZWdtZW50LgotICAgICAgICAgIGxheW91dC0+aW5jcmVhc2VfcmVscm8K LSAgICAgICAgICAgICAgKEFBUkNINjRfR09UUExUX1JFU0VSVkVfQ09VTlQg KiAoc2l6ZSAvIDgpKTsKLSAgICAgICAgfQorCXsKKwkgIC8vIFRob3NlIGJ5 dGVzIGNhbiBnbyBpbnRvIHRoZSByZWxybyBzZWdtZW50LgorCSAgbGF5b3V0 LT5pbmNyZWFzZV9yZWxybygKKwkgICAgQUFSQ0g2NF9HT1RQTFRfUkVTRVJW RV9DT1VOVCAqIChzaXplIC8gOCkpOworCX0KIAogICAgIH0KICAgcmV0dXJu IHRoaXMtPmdvdF87CkBAIC01OTAsOCArNjI2LDggQEAgY2xhc3MgT3V0cHV0 X2RhdGFfcGx0X2FhcmNoNjQgOiBwdWJsaWMgT3V0cHV0X3NlY3Rpb25fZGF0 YQogICB0eXBlZGVmIHR5cGVuYW1lIGVsZmNwcDo6RWxmX3R5cGVzPHNpemU+ OjpFbGZfQWRkciBBZGRyZXNzOwogCiAgIE91dHB1dF9kYXRhX3BsdF9hYXJj aDY0KExheW91dCogbGF5b3V0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50NjRfdCBhZGRyYWxpZ24sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dF9kYXRhX3NwYWNlKiBnb3RfcGx0KQorCQkJICB1aW50NjRf dCBhZGRyYWxpZ24sCisJCQkgIE91dHB1dF9kYXRhX3NwYWNlKiBnb3RfcGx0 KQogICAgIDogT3V0cHV0X3NlY3Rpb25fZGF0YShhZGRyYWxpZ24pLAogICAg ICAgZ290X3BsdF8oZ290X3BsdCksCiAgICAgICBjb3VudF8oMCkKQEAgLTYx MCw2ICs2NDYsMTEgQEAgY2xhc3MgT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjQg OiBwdWJsaWMgT3V0cHV0X3NlY3Rpb25fZGF0YQogICByZWxhX3BsdCgpCiAg IHsgcmV0dXJuIHRoaXMtPnJlbF87IH0KIAorICAvLyBSZXR1cm4gd2hldGhl ciB3ZSBjcmVhdGVkIGEgc2VjdGlvbiBmb3IgSVJFTEFUSVZFIHJlbG9jYXRp b25zLgorICBib29sCisgIGhhc19pcmVsYXRpdmVfc2VjdGlvbigpIGNvbnN0 CisgIHsgcmV0dXJuIHRoaXMtPmlyZWxhdGl2ZV9yZWxfICE9IE5VTEw7IH0K KwogICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBQTFQgZW50cmllcy4KICAg dW5zaWduZWQgaW50CiAgIGVudHJ5X2NvdW50KCkgY29uc3QKQEAgLTYyNSw2 ICs2NjYsMTQgQEAgY2xhc3MgT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjQgOiBw dWJsaWMgT3V0cHV0X3NlY3Rpb25fZGF0YQogICBnZXRfcGx0X2VudHJ5X3Np emUoKSBjb25zdAogICB7IHJldHVybiB0aGlzLT5kb19nZXRfcGx0X2VudHJ5 X3NpemUoKTsgfQogCisgIC8vIFJldHVybiB0aGUgUExUIGFkZHJlc3MgdG8g dXNlIGZvciBhIGdsb2JhbCBzeW1ib2wuCisgIHVpbnQ2NF90CisgIGFkZHJl c3NfZm9yX2dsb2JhbChjb25zdCBTeW1ib2wqKTsKKworICAvLyBSZXR1cm4g dGhlIFBMVCBhZGRyZXNzIHRvIHVzZSBmb3IgYSBsb2NhbCBzeW1ib2wuCisg IHVpbnQ2NF90CisgIGFkZHJlc3NfZm9yX2xvY2FsKGNvbnN0IFJlbG9iaios IHVuc2lnbmVkIGludCBzeW1uZHgpOworCiAgcHJvdGVjdGVkOgogICAvLyBG aWxsIGluIHRoZSBmaXJzdCBQTFQgZW50cnkuCiAgIHZvaWQKQEAgLTY4Miw2 ICs3MzEsOSBAQCBjbGFzcyBPdXRwdXRfZGF0YV9wbHRfYWFyY2g2NCA6IHB1 YmxpYyBPdXRwdXRfc2VjdGlvbl9kYXRhCiAKICAgLy8gVGhlIHJlbG9jIHNl Y3Rpb24uCiAgIFJlbG9jX3NlY3Rpb24qIHJlbF87CisgIC8vIFRoZSBJUkVM QVRJVkUgcmVsb2NzLCBpZiBuZWNlc3NhcnkuICBUaGVzZSBtdXN0IGZvbGxv dyB0aGUKKyAgLy8gcmVndWxhciBQTFQgcmVsb2NhdGlvbnMuCisgIFJlbG9j X3NlY3Rpb24qIGlyZWxhdGl2ZV9yZWxfOwogICAvLyBUaGUgLmdvdCBzZWN0 aW9uLgogICBPdXRwdXRfZGF0YV9nb3RfYWFyY2g2NDxzaXplLCBiaWdfZW5k aWFuPiogZ290XzsKICAgLy8gVGhlIC5nb3QucGx0IHNlY3Rpb24uCkBAIC03 MTcsMTYgKzc2OSw2NyBAQCB2b2lkCiBPdXRwdXRfZGF0YV9wbHRfYWFyY2g2 NDxzaXplLCBiaWdfZW5kaWFuPjo6YWRkX2VudHJ5KFN5bWJvbCogZ3N5bSkK IHsKICAgZ29sZF9hc3NlcnQoIWdzeW0tPmhhc19wbHRfb2Zmc2V0KCkpOwot ICAvL1RPRE8KKworICBnc3ltLT5zZXRfcGx0X29mZnNldCgodGhpcy0+Y291 bnRfKSAqIHRoaXMtPmdldF9wbHRfZW50cnlfc2l6ZSgpCisJCSAgICAgICAr IHRoaXMtPmZpcnN0X3BsdF9lbnRyeV9vZmZzZXQoKSk7CisKKyAgKyt0aGlz LT5jb3VudF87CisKKyAgc2VjdGlvbl9vZmZzZXRfdHlwZSBnb3Rfb2Zmc2V0 ID0gdGhpcy0+Z290X3BsdF8tPmN1cnJlbnRfZGF0YV9zaXplKCk7CisKKyAg Ly8gRXZlcnkgUExUIGVudHJ5IG5lZWRzIGEgR09UIGVudHJ5IHdoaWNoIHBv aW50cyBiYWNrIHRvIHRoZSBQTFQKKyAgLy8gZW50cnkgKHRoaXMgd2lsbCBi ZSBjaGFuZ2VkIGJ5IHRoZSBkeW5hbWljIGxpbmtlciwgbm9ybWFsbHkKKyAg Ly8gbGF6aWx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCkuCisgIHRo aXMtPmdvdF9wbHRfLT5zZXRfY3VycmVudF9kYXRhX3NpemUoZ290X29mZnNl dCArIHNpemUgLyA4KTsKKworICAvLyBFdmVyeSBQTFQgZW50cnkgbmVlZHMg YSByZWxvYy4KKyAgZ3N5bS0+c2V0X25lZWRzX2R5bnN5bV9lbnRyeSgpOwor ICB0aGlzLT5yZWxfLT5hZGRfZ2xvYmFsKGdzeW0sIGVsZmNwcDo6Ul9BQVJD SDY0X0pVTVBfU0xPVCwKKwkJCSB0aGlzLT5nb3RfcGx0XywgZ290X29mZnNl dCwgMCk7CisKKyAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gc2F2 ZSB0aGUgc3ltYm9sLiBUaGUgY29udGVudHMgb2YgdGhlCisgIC8vIFBMVCBh cmUgaW5kZXBlbmRlbnQgb2Ygd2hpY2ggc3ltYm9scyBhcmUgdXNlZC4gVGhl IHN5bWJvbHMgb25seQorICAvLyBhcHBlYXIgaW4gdGhlIHJlbG9jYXRpb25z LgorfQorCisvLyBSZXR1cm4gdGhlIFBMVCBhZGRyZXNzIHRvIHVzZSBmb3Ig YSBnbG9iYWwgc3ltYm9sLgorCit0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBi aWdfZW5kaWFuPgordWludDY0X3QKK091dHB1dF9kYXRhX3BsdF9hYXJjaDY0 PHNpemUsIGJpZ19lbmRpYW4+OjphZGRyZXNzX2Zvcl9nbG9iYWwoCisgIGNv bnN0IFN5bWJvbCogZ3N5bSkKK3sKKyAgdWludDY0X3Qgb2Zmc2V0ID0gMDsK KyAgaWYgKGdzeW0tPnR5cGUoKSA9PSBlbGZjcHA6OlNUVF9HTlVfSUZVTkMK KyAgICAgICYmIGdzeW0tPmNhbl91c2VfcmVsYXRpdmVfcmVsb2MoZmFsc2Up KQorICAgIG9mZnNldCA9ICh0aGlzLT5maXJzdF9wbHRfZW50cnlfb2Zmc2V0 KCkgKworCSAgICAgIHRoaXMtPmNvdW50XyAqIHRoaXMtPmdldF9wbHRfZW50 cnlfc2l6ZSgpKTsKKyAgcmV0dXJuIHRoaXMtPmFkZHJlc3MoKSArIG9mZnNl dCArIGdzeW0tPnBsdF9vZmZzZXQoKTsKK30KKworLy8gUmV0dXJuIHRoZSBQ TFQgYWRkcmVzcyB0byB1c2UgZm9yIGEgbG9jYWwgc3ltYm9sLiAgVGhlc2Ug YXJlIGFsd2F5cworLy8gSVJFTEFUSVZFIHJlbG9jcy4KKwordGVtcGxhdGU8 aW50IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4KK3VpbnQ2NF90CitPdXRwdXRf ZGF0YV9wbHRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6YWRkcmVzc19m b3JfbG9jYWwoCisgICAgY29uc3QgUmVsb2JqKiBvYmplY3QsCisgICAgdW5z aWduZWQgaW50IHJfc3ltKQoreworICByZXR1cm4gKHRoaXMtPmFkZHJlc3Mo KQorCSAgKyB0aGlzLT5maXJzdF9wbHRfZW50cnlfb2Zmc2V0KCkKKwkgICsg dGhpcy0+Y291bnRfICogdGhpcy0+Z2V0X3BsdF9lbnRyeV9zaXplKCkKKwkg ICsgb2JqZWN0LT5sb2NhbF9wbHRfb2Zmc2V0KHJfc3ltKSk7CiB9CiAKIC8v IFNldCB0aGUgZmluYWwgc2l6ZS4KKwogdGVtcGxhdGU8aW50IHNpemUsIGJv b2wgYmlnX2VuZGlhbj4KIHZvaWQKIE91dHB1dF9kYXRhX3BsdF9hYXJjaDY0 PHNpemUsIGJpZ19lbmRpYW4+OjpzZXRfZmluYWxfZGF0YV9zaXplKCkKIHsK ICAgdGhpcy0+c2V0X2RhdGFfc2l6ZSh0aGlzLT5maXJzdF9wbHRfZW50cnlf b2Zmc2V0KCkKLSAgICAgICAgICAgICAgICAgICAgICArIHRoaXMtPmNvdW50 ICogdGhpcy0+Z2V0X3BsdF9lbnRyeV9zaXplKCkpOworICAgICAgICAgICAg ICAgICAgICAgICsgdGhpcy0+Y291bnRfICogdGhpcy0+Z2V0X3BsdF9lbnRy eV9zaXplKCkpOwogfQogCiB0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdf ZW5kaWFuPgpAQCAtNzM3LDggKzg0MCw4IEBAIGNsYXNzIE91dHB1dF9kYXRh X3BsdF9hYXJjaDY0X3N0YW5kYXJkIDoKICAgdHlwZWRlZiB0eXBlbmFtZSBl bGZjcHA6OkVsZl90eXBlczxzaXplPjo6RWxmX0FkZHIgQWRkcmVzczsKICAg T3V0cHV0X2RhdGFfcGx0X2FhcmNoNjRfc3RhbmRhcmQoTGF5b3V0KiBsYXlv dXQsIE91dHB1dF9kYXRhX3NwYWNlKiBnb3RfcGx0KQogICAgIDogT3V0cHV0 X2RhdGFfcGx0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj4obGF5b3V0LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZSA9PSAzMiA/IDQgOiA4LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X3BsdCkKKwkJCQkJCXNp emUgPT0gMzIgPyA0IDogOCwKKwkJCQkJCWdvdF9wbHQpCiAgIHsgfQogCiAg cHJvdGVjdGVkOgpAQCAtNzU0LDE1ICs4NTcsMTUgQEAgY2xhc3MgT3V0cHV0 X2RhdGFfcGx0X2FhcmNoNjRfc3RhbmRhcmQgOgogCiAgIHZpcnR1YWwgdm9p ZAogICBkb19maWxsX2ZpcnN0X3BsdF9lbnRyeSh1bnNpZ25lZCBjaGFyKiBw b3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgZ290X2Fk ZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgcGx0 X2FkZHJlc3MpOworCQkJICBBZGRyZXNzIGdvdF9hZGRyZXNzLAorCQkJICBB ZGRyZXNzIHBsdF9hZGRyZXNzKTsKIAogICB2aXJ0dWFsIHZvaWQKICAgZG9f ZmlsbF9wbHRfZW50cnkodW5zaWduZWQgY2hhciogcG92LAotICAgICAgICAg ICAgICAgICAgICBBZGRyZXNzIGdvdF9hZGRyZXNzLAotICAgICAgICAgICAg ICAgICAgICBBZGRyZXNzIHBsdF9hZGRyZXNzLAotICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgZ290X29mZnNldCwKLSAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IHBsdF9vZmZzZXQpOworCQkgICAgQWRkcmVz cyBnb3RfYWRkcmVzcywKKwkJICAgIEFkZHJlc3MgcGx0X2FkZHJlc3MsCisJ CSAgICB1bnNpZ25lZCBpbnQgZ290X29mZnNldCwKKwkJICAgIHVuc2lnbmVk IGludCBwbHRfb2Zmc2V0KTsKIAogIHByaXZhdGU6CiAgIC8vIFRoZSBzaXpl IG9mIHRoZSBmaXJzdCBwbHQgZW50cnkgc2l6ZS4KQEAgLTg4NSw4ICs5ODgs OCBAQCB0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgogdm9p ZAogT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjRfc3RhbmRhcmQ8c2l6ZSwgYmln X2VuZGlhbj46OmRvX2ZpbGxfZmlyc3RfcGx0X2VudHJ5KAogICAgIHVuc2ln bmVkIGNoYXIqIHBvdiwKLSAgICBBZGRyZXNzIC8qIGdvdF9hZGRyZXNzICov LAotICAgIEFkZHJlc3MgLyogcGx0X2FkZHJlc3MgKi8pCisgICAgQWRkcmVz cyBnb3RfYWRkcmVzcywKKyAgICBBZGRyZXNzIHBsdF9hZGRyZXNzKQogewog ICAvLyBQTFQwIG9mIHRoZSBzbWFsbCBQTFQgbG9va3MgbGlrZSB0aGlzIGlu IEVMRjY0IC0KICAgLy8gc3RwIHgxNiwgeDMwLCBbc3AsICMtMTZdIQkgCVNh dmUgdGhlIHJlbG9jIGFuZCBsciBvbiBzdGFjay4KQEAgLTg5OSwyMiArMTAw Miw2MiBAQCBPdXRwdXRfZGF0YV9wbHRfYWFyY2g2NF9zdGFuZGFyZDxzaXpl LCBiaWdfZW5kaWFuPjo6ZG9fZmlsbF9maXJzdF9wbHRfZW50cnkoCiAgIC8v IFBMVDAgd2lsbCBiZSBzbGlnaHRseSBkaWZmZXJlbnQgaW4gRUxGMzIgZHVl IHRvIGRpZmZlcmVudCBnb3QgZW50cnkKICAgLy8gc2l6ZS4KICAgbWVtY3B5 KHBvdiwgdGhpcy0+Zmlyc3RfcGx0X2VudHJ5LCB0aGlzLT5maXJzdF9wbHRf ZW50cnlfc2l6ZSk7Ci0gIC8vIFRPRE8KKyAgQWRkcmVzcyBnb3RwbHRfMm5k X2VudCA9IGdvdF9hZGRyZXNzICsgKHNpemUgLyA4KSAqIDI7CisKKyAgLy8g RmlsbCBpbiB0aGUgdG9wIDIxIGJpdHMgZm9yIHRoaXM6IEFEUlAgeDE2LCBQ TFRfR09UICsgOCAqIDIuCisgIC8vIEFEUlA6ICAoUEcoUytBKS1QRyhQKSkg Pj4gMTIpICYgMHgxZmZmZmYuCisgIC8vIEZJWE1FOiBUaGlzIG9ubHkgd29y a3MgZm9yIDY0Yml0CisgIEFBcmNoNjRfcmVsb2NhdGVfZnVuY3Rpb25zPHNp emUsIGJpZ19lbmRpYW4+OjphZHJwKHBvdiArIDQsCisgICAgICBnb3RwbHRf Mm5kX2VudCwgcGx0X2FkZHJlc3MgKyA0KTsKKworICAvLyBGaWxsIGluIFJf QUFSQ0g2NF9MRFNUOF9MTzEyCisgIGVsZmNwcDo6U3dhcDwzMiwgYmlnX2Vu ZGlhbj46OndyaXRldmFsKAorICAgICAgcG92ICsgOCwKKyAgICAgICgodGhp cy0+Zmlyc3RfcGx0X2VudHJ5WzJdICYgMHhmZmMwMDNmZikKKyAgICAgICB8 ICgoZ290cGx0XzJuZF9lbnQgJiAweGZmOCkgPDwgNykpKTsKKworICAvLyBG aWxsIGluIFJfQUFSQ0g2NF9BRERfQUJTX0xPMTIKKyAgZWxmY3BwOjpTd2Fw PDMyLCBiaWdfZW5kaWFuPjo6d3JpdGV2YWwoCisgICAgICBwb3YgKyAxMiwK KyAgICAgICgodGhpcy0+Zmlyc3RfcGx0X2VudHJ5WzNdICYgMHhmZmMwMDNm ZikKKyAgICAgICB8ICgoZ290cGx0XzJuZF9lbnQgJiAweGZmZikgPDwgMTAp KSk7CiB9CiAKIC8vIFN1YnNlcXVlbnQgZW50cmllcyBpbiB0aGUgUExUIGZv ciBhbiBleGVjdXRhYmxlLgorLy8gRklYTUU6IFRoaXMgb25seSB3b3JrcyBm b3IgNjRiaXQKIAogdGVtcGxhdGU8aW50IHNpemUsIGJvb2wgYmlnX2VuZGlh bj4KIHZvaWQKIE91dHB1dF9kYXRhX3BsdF9hYXJjaDY0X3N0YW5kYXJkPHNp emUsIGJpZ19lbmRpYW4+Ojpkb19maWxsX3BsdF9lbnRyeSgKICAgICB1bnNp Z25lZCBjaGFyKiBwb3YsCi0gICAgQWRkcmVzcyAvKiBnb3RfYWRkcmVzcyov LAotICAgIEFkZHJlc3MgLyogcGx0X2FkZHJlc3MgKi8sCi0gICAgdW5zaWdu ZWQgaW50IC8qIGdvdF9vZmZzZXQgKi8sCi0gICAgdW5zaWduZWQgaW50IC8q IHBsdF9vZmZzZXQgKi8pCisgICAgQWRkcmVzcyBnb3RfYWRkcmVzcywKKyAg ICBBZGRyZXNzIHBsdF9hZGRyZXNzLAorICAgIHVuc2lnbmVkIGludCBnb3Rf b2Zmc2V0LAorICAgIHVuc2lnbmVkIGludCBwbHRfb2Zmc2V0KQogewogICBt ZW1jcHkocG92LCB0aGlzLT5wbHRfZW50cnksIHRoaXMtPnBsdF9lbnRyeV9z aXplKTsKLSAgLy9UT0RPCisKKyAgQWRkcmVzcyBnb3RwbHRfZW50cnlfYWRk cmVzcyA9IGdvdF9hZGRyZXNzICsgZ290X29mZnNldDsKKyAgQWRkcmVzcyBw bHRfZW50cnlfYWRkcmVzcyA9IHBsdF9hZGRyZXNzICsgcGx0X29mZnNldDsK KworICAvLyBGaWxsIGluIFJfQUFSQ0g2NF9QQ1JFTF9BRFJfSEkyMQorICBB QXJjaDY0X3JlbG9jYXRlX2Z1bmN0aW9uczxzaXplLCBiaWdfZW5kaWFuPjo6 YWRycCgKKyAgICAgIHBvdiwKKyAgICAgIGdvdHBsdF9lbnRyeV9hZGRyZXNz LAorICAgICAgcGx0X2VudHJ5X2FkZHJlc3MpOworCisgIC8vIEZpbGwgaW4g Ul9BQVJDSDY0X0xEU1Q2NF9BQlNfTE8xMgorICBlbGZjcHA6OlN3YXA8MzIs IGJpZ19lbmRpYW4+Ojp3cml0ZXZhbCgKKyAgICAgIHBvdiArIDQsCisgICAg ICAoKHRoaXMtPnBsdF9lbnRyeVsxXSAmIDB4ZmZjMDAzZmYpCisgICAgICAg fCAoKGdvdHBsdF9lbnRyeV9hZGRyZXNzICYgMHhmZjgpIDw8IDcpKSk7CisK KyAgLy8gRmlsbCBpbiBSX0FBUkNINjRfQUREX0FCU19MTzEyCisgIGVsZmNw cDo6U3dhcDwzMiwgYmlnX2VuZGlhbj46OndyaXRldmFsKAorICAgICAgcG92 ICsgOCwKKyAgICAgICgodGhpcy0+cGx0X2VudHJ5WzJdICYgMHhmZmMwMDNm ZikKKyAgICAgICB8ICgoZ290cGx0X2VudHJ5X2FkZHJlc3MgJiAweGZmZikg PDwxMCkpKTsKKwogfQogCiAvLyBXcml0ZSBvdXQgdGhlIFBMVC4gIFRoaXMg dXNlcyB0aGUgaGFuZC1jb2RlZCBpbnN0cnVjdGlvbnMgYWJvdmUsCkBAIC05 MzksOCArMTA4Miw2IEBAIE91dHB1dF9kYXRhX3BsdF9hYXJjaDY0PHNpemUs IGJpZ19lbmRpYW4+Ojpkb193cml0ZShPdXRwdXRfZmlsZSogb2YpCiAKICAg Ly8gVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgLnBsdCBzZWN0aW9uLgogICB0 eXBlbmFtZSBlbGZjcHA6OkVsZl90eXBlczxzaXplPjo6RWxmX0FkZHIgcGx0 X2FkZHJlc3MgPSB0aGlzLT5hZGRyZXNzKCk7Ci0gIC8vIFRoZSBiYXNlIGFk ZHJlc3Mgb2YgdGhlIC5nb3Qgc2VjdGlvbi4KLSAgdHlwZW5hbWUgZWxmY3Bw OjpFbGZfdHlwZXM8c2l6ZT46OkVsZl9BZGRyIGdvdF9iYXNlID0gdGhpcy0+ Z290Xy0+YWRkcmVzcygpOwogICAvLyBUaGUgYmFzZSBhZGRyZXNzIG9mIHRo ZSBQTFQgcG9ydGlvbiBvZiB0aGUgLmdvdCBzZWN0aW9uLgogICB0eXBlbmFt ZSBlbGZjcHA6OkVsZl90eXBlczxzaXplPjo6RWxmX0FkZHIgZ290X2FkZHJl c3MKICAgICA9IHRoaXMtPmdvdF9wbHRfLT5hZGRyZXNzKCk7CkBAIC05NjYs MTEgKzExMDcsMTAgQEAgT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjQ8c2l6ZSwg YmlnX2VuZGlhbj46OmRvX3dyaXRlKE91dHB1dF9maWxlKiBvZikKICAgICB7 CiAgICAgICAvLyBTZXQgYW5kIGFkanVzdCB0aGUgUExUIGVudHJ5IGl0c2Vs Zi4KICAgICAgIHRoaXMtPmZpbGxfcGx0X2VudHJ5KHBvdiwgZ290X2FkZHJl c3MsIHBsdF9hZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg Z290X29mZnNldCwgcGx0X29mZnNldCk7CisJCQkgICBnb3Rfb2Zmc2V0LCBw bHRfb2Zmc2V0KTsKIAotICAgICAgLy8gU2V0IHRoZSBlbnRyeSBpbiB0aGUg R09ULgotICAgICAgZWxmY3BwOjpTd2FwPHNpemUsIGJpZ19lbmRpYW4+Ojp3 cml0ZXZhbChnb3RfcG92LAotICAgICAgICAgIHBsdF9hZGRyZXNzICsgcGx0 X29mZnNldCk7CisgICAgICAvLyBTZXQgdGhlIGVudHJ5IGluIHRoZSBHT1Qs IHdoaWNoIHBvaW50cyB0byBwbHQwLgorICAgICAgZWxmY3BwOjpTd2FwPHNp emUsIGJpZ19lbmRpYW4+Ojp3cml0ZXZhbChnb3RfcG92LCBwbHRfYWRkcmVz cyk7CiAgICAgfQogCiAgIGdvbGRfYXNzZXJ0KHN0YXRpY19jYXN0PHNlY3Rp b25fc2l6ZV90eXBlPihwb3YgLSBvdmlldykgPT0gb3ZpZXdfc2l6ZSk7CkBA IC05ODAsNiArMTEyMCwzNDEgQEAgT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjQ8 c2l6ZSwgYmlnX2VuZGlhbj46OmRvX3dyaXRlKE91dHB1dF9maWxlKiBvZikK ICAgb2YtPndyaXRlX291dHB1dF92aWV3KGdvdF9maWxlX29mZnNldCwgZ290 X3NpemUsIGdvdF92aWV3KTsKIH0KIAorLy8gVGVsbGluZyBob3cgdG8gdXBk YXRlIHRoZSBpbW1lZGlhdGUgZmllbGQgb2YgYW4gaW5zdHJ1Y3Rpb24uCitz dHJ1Y3QgQUFyY2g2NF9ob3d0bworeworICAvLyBUaGUgaW1tZWRpYXRlIGZp ZWxkIG1hc2suCisgIGVsZmNwcDo6RWxmX1h3b3JkIGRzdF9tYXNrOworCisg IC8vIFRoZSBvZmZzZXQgdG8gYXBwbHkgcmVsb2NhdGlvbiBpbW1lZGlhdGUK KyAgaW50IGRvZmZzZXQ7CisKKyAgLy8gVGhlIHNlY29uZCBwYXJ0IG9mZnNl dCwgaWYgdGhlIGltbWVkaWF0ZSBmaWVsZCBoYXMgdHdvIHBhcnRzLgorICAv LyAtMSBpZiB0aGUgaW1tZWRpYXRlIGZpZWxkIGhhcyBvbmx5IG9uZSBwYXJ0 LgorICBpbnQgZG9mZnNldDI7Cit9OworCitzdGF0aWMgY29uc3QgQUFyY2g2 NF9ob3d0byBhYXJjaDY0X2hvd3RvW0FBcmNoNjRfcmVsb2NfcHJvcGVydHk6 OklOU1RfTlVNXSA9Cit7CisgIHswLCAtMSwgLTF9LAkJLy8gREFUQQorICB7 MHgxZmZmZTAsIDUsIC0xfSwJLy8gTU9WVyAgWzIwOjVdLWltbTE2CisgIHsw eGZmZmZlMCwgNSwgLTF9LAkvLyBMRCAgICBbMjM6NV0taW1tMTkKKyAgezB4 NjBmZmZmZTAsIDI5LCA1fSwJLy8gQURSICAgWzMwOjI5XS1pbW1sbyAgWzIz OjVdLWltbWhpCisgIHsweDYwZmZmZmUwLCAyOSwgNX0sCS8vIEFEUlAgIFsz MDoyOV0taW1tbG8gIFsyMzo1XS1pbW1oaQorICB7MHgzZmZjMDAsIDEwLCAt MX0sCS8vIEFERCAgIFsyMToxMF0taW1tMTIKKyAgezB4M2ZmYzAwLCAxMCwg LTF9LAkvLyBMRFNUICBbMjE6MTBdLWltbTEyCisgIHsweDdmZmUwLCA1LCAt MX0sCS8vIFRCWk5aIFsxODo1XS1pbW0xNAorICB7MHhmZmZmZTAsIDUsIC0x fSwJLy8gQ09OREIgWzIzOjVdLWltbTE5CisgIHsweDNmZmZmZmYsIDAsIC0x fSwJLy8gQiAgICAgWzI1OjBdLWltbTI2CisgIHsweDNmZmZmZmYsIDAsIC0x fSwJLy8gQ0FMTCAgWzI1OjBdLWltbTI2Cit9OworCisvLyBBQXJjaDY0IHJl bG9jYXRlIGZ1bmN0aW9uIGNsYXNzCisKK3RlbXBsYXRlPGludCBzaXplLCBi b29sIGJpZ19lbmRpYW4+CitjbGFzcyBBQXJjaDY0X3JlbG9jYXRlX2Z1bmN0 aW9ucworeworIHB1YmxpYzoKKyAgdHlwZWRlZiBlbnVtCisgIHsKKyAgICBT VEFUVVNfT0tBWSwJLy8gTm8gZXJyb3IgZHVyaW5nIHJlbG9jYXRpb24uCisg ICAgU1RBVFVTX09WRVJGTE9XLAkvLyBSZWxvY2F0aW9uIG92ZXJmbG93Lgor ICAgIFNUQVRVU19CQURfUkVMT0MsCS8vIFJlbG9jYXRpb24gY2Fubm90IGJl IGFwcGxpZWQuCisgIH0gU3RhdHVzOworCisgcHJpdmF0ZToKKyAgdHlwZWRl ZiBBQXJjaDY0X3JlbG9jYXRlX2Z1bmN0aW9uczxzaXplLCBiaWdfZW5kaWFu PiBUaGlzOworCisgIC8vIFJldHVybiB0aGUgcGFnZSBhZGRyZXNzIG9mIHRo ZSBhZGRyZXNzLgorICAvLyBQYWdlKGFkZHJlc3MpID0gYWRkcmVzcyAmIH4w eEZGRgorCisgIHN0YXRpYyBpbmxpbmUgdHlwZW5hbWUgZWxmY3BwOjpTd2Fw PHNpemUsIGJpZ19lbmRpYW4+OjpWYWx0eXBlCisgIFBhZ2UodHlwZW5hbWUg ZWxmY3BwOjpFbGZfdHlwZXM8c2l6ZT46OkVsZl9BZGRyIGFkZHJlc3MpCisg IHsKKyAgICByZXR1cm4gKGFkZHJlc3MgJgorCSAgICAofih0eXBlbmFtZSBl bGZjcHA6OkVsZl90eXBlczxzaXplPjo6RWxmX0FkZHIpMHhGRkYpKTsKKyAg fQorCisgIC8vIFVwZGF0ZSBpbnN0cnVjdGlvbiAocG9pbnRlZCBieSB2aWV3 KSB3aXRoIHNlbGVjdGVkIGJpdHMgKGltbWVkKS4KKyAgLy8gdmFsID0gKHZh bCAmIH5kc3RfbWFzaykgfCAoaW1tZWQgPDwgZG9mZnNldCkKKworICB0ZW1w bGF0ZTxpbnQgdmFsc2l6ZT4KKyAgc3RhdGljIGlubGluZSB2b2lkCisgIHVw ZGF0ZV92aWV3KHVuc2lnbmVkIGNoYXIqIHZpZXcsCisJICAgICAgdHlwZW5h bWUgZWxmY3BwOjpTd2FwPHNpemUsIGJpZ19lbmRpYW4+OjpWYWx0eXBlIGlt bWVkLAorCSAgICAgIGVsZmNwcDo6RWxmX1h3b3JkIGRvZmZzZXQsCisJICAg ICAgZWxmY3BwOjpFbGZfWHdvcmQgZHN0X21hc2spCisgIHsKKyAgICB0eXBl ZGVmIHR5cGVuYW1lIGVsZmNwcDo6U3dhcDx2YWxzaXplLCBiaWdfZW5kaWFu Pjo6VmFsdHlwZSBWYWx0eXBlOworICAgIFZhbHR5cGUqIHd2ID0gcmVpbnRl cnByZXRfY2FzdDxWYWx0eXBlKj4odmlldyk7CisgICAgVmFsdHlwZSB2YWwg PSBlbGZjcHA6OlN3YXA8dmFsc2l6ZSwgYmlnX2VuZGlhbj46OnJlYWR2YWwo d3YpOworCisgICAgLy8gQ2xlYXIgaW1tZWRpYXRlIGZpZWxkcy4KKyAgICB2 YWwgJj0gfmRzdF9tYXNrOworICAgIGVsZmNwcDo6U3dhcDx2YWxzaXplLCBi aWdfZW5kaWFuPjo6d3JpdGV2YWwod3YsCisgICAgICBzdGF0aWNfY2FzdDxW YWx0eXBlPih2YWwgfCAoaW1tZWQgPDwgZG9mZnNldCkpKTsKKyAgfQorCisg IC8vIFVwZGF0ZSB0d28gcGFydHMgb2YgYW4gaW5zdHJ1Y3Rpb24gKHBvaW50 ZWQgYnkgdmlldykgd2l0aCBzZWxlY3RlZAorICAvLyBiaXRzIChpbW1lZDEg YW5kIGltbWVkMikuCisgIC8vIHZhbCA9ICh2YWwgJiB+ZHN0X21hc2spIHwg KGltbWVkMSA8PCBkb2Zmc2V0MSkgfCAoaW1tZWQyIDw8IGRvZmZzZXQyKQor CisgIHRlbXBsYXRlPGludCB2YWxzaXplPgorICBzdGF0aWMgaW5saW5lIHZv aWQKKyAgdXBkYXRlX3ZpZXdfdHdvX3BhcnRzKAorICAgIHVuc2lnbmVkIGNo YXIqIHZpZXcsCisgICAgdHlwZW5hbWUgZWxmY3BwOjpTd2FwPHNpemUsIGJp Z19lbmRpYW4+OjpWYWx0eXBlIGltbWVkMSwKKyAgICB0eXBlbmFtZSBlbGZj cHA6OlN3YXA8c2l6ZSwgYmlnX2VuZGlhbj46OlZhbHR5cGUgaW1tZWQyLAor ICAgIGVsZmNwcDo6RWxmX1h3b3JkIGRvZmZzZXQxLAorICAgIGVsZmNwcDo6 RWxmX1h3b3JkIGRvZmZzZXQyLAorICAgIGVsZmNwcDo6RWxmX1h3b3JkIGRz dF9tYXNrKQorICB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBlbGZjcHA6OlN3 YXA8dmFsc2l6ZSwgYmlnX2VuZGlhbj46OlZhbHR5cGUgVmFsdHlwZTsKKyAg ICBWYWx0eXBlKiB3diA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmFsdHlwZSo+KHZp ZXcpOworICAgIFZhbHR5cGUgdmFsID0gZWxmY3BwOjpTd2FwPHZhbHNpemUs IGJpZ19lbmRpYW4+OjpyZWFkdmFsKHd2KTsKKyAgICB2YWwgJj0gfmRzdF9t YXNrOworICAgIGVsZmNwcDo6U3dhcDx2YWxzaXplLCBiaWdfZW5kaWFuPjo6 d3JpdGV2YWwod3YsCisgICAgICBzdGF0aWNfY2FzdDxWYWx0eXBlPih2YWwg fCAoaW1tZWQxIDw8IGRvZmZzZXQxKSB8CisJCQkgICAoaW1tZWQyIDw8IGRv ZmZzZXQyKSkpOworICB9CisKKyAgLy8gVXBkYXRlIGFkciBvciBhZHJwIGlu c3RydWN0aW9uIHdpdGggWzMyOjEyXSBvZiBYLgorICAvLyBJbiBhZHIgYW5k IGFkcnA6IFszMDoyOV0gaW1tbG8gICBbMjM6NV0gaW1taGkKKworICBzdGF0 aWMgaW5saW5lIHZvaWQKKyAgdXBkYXRlX2Fkcih1bnNpZ25lZCBjaGFyKiB2 aWV3LAorCSAgICAgdHlwZW5hbWUgZWxmY3BwOjpTd2FwPHNpemUsIGJpZ19l bmRpYW4+OjpWYWx0eXBlIHgsCisJICAgICBjb25zdCBBQXJjaDY0X3JlbG9j X3Byb3BlcnR5KiAvKiByZWxvY19wcm9wZXJ0eSAqLykKKyAgeworICAgIGVs ZmNwcDo6RWxmX1h3b3JkIGRzdF9tYXNrID0gKDB4MyA8PCAyOSkgfCAoMHg3 ZmZmZiA8PCA1KTsKKyAgICB0eXBlbmFtZSBlbGZjcHA6OlN3YXA8MzIsIGJp Z19lbmRpYW4+OjpWYWx0eXBlIGltbWVkID0KKyAgICAgICh4ID4+IDEyKSAm IDB4MWZmZmZmOworICAgIFRoaXM6OnRlbXBsYXRlIHVwZGF0ZV92aWV3X3R3 b19wYXJ0czwzMj4oCisgICAgICB2aWV3LAorICAgICAgaW1tZWQgJiAweDMs CisgICAgICAoaW1tZWQgJiAweDFmZmZmYykgPj4gMiwKKyAgICAgIDI5LAor ICAgICAgNSwKKyAgICAgIGRzdF9tYXNrKTsKKyAgfQorCisgcHVibGljOgor CisgIC8vIERvIGEgc2ltcGxlIHJlbGEgcmVsb2NhdGlvbiBhdCB1bmFsaWdu ZWQgYWRkcmVzc2VzLgorCisgIHRlbXBsYXRlPGludCB2YWxzaXplPgorICBz dGF0aWMgaW5saW5lIHR5cGVuYW1lIFRoaXM6OlN0YXR1cworICByZWxhX3Vh KHVuc2lnbmVkIGNoYXIqIHZpZXcsCisJICBjb25zdCBTaXplZF9yZWxvYmpf ZmlsZTxzaXplLCBiaWdfZW5kaWFuPiogb2JqZWN0LAorCSAgY29uc3QgU3lt Ym9sX3ZhbHVlPHNpemU+KiBwc3ltdmFsLAorCSAgdHlwZW5hbWUgZWxmY3Bw OjpTd2FwPHNpemUsIGJpZ19lbmRpYW4+OjpWYWx0eXBlIGFkZGVuZCwKKwkg IGNvbnN0IEFBcmNoNjRfcmVsb2NfcHJvcGVydHkqIHJlbG9jX3Byb3BlcnR5 KQorICB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBlbGZjcHA6OlN3YXBfdW5h bGlnbmVkPHZhbHNpemUsIGJpZ19lbmRpYW4+OjpWYWx0eXBlCisgICAgICBW YWx0eXBlOworICAgIHR5cGVuYW1lIGVsZmNwcDo6RWxmX3R5cGVzPHNpemU+ OjpFbGZfQWRkciB4ID0KKwlwc3ltdmFsLT52YWx1ZShvYmplY3QsIGFkZGVu ZCk7CisgICAgZWxmY3BwOjpTd2FwX3VuYWxpZ25lZDx2YWxzaXplLCBiaWdf ZW5kaWFuPjo6d3JpdGV2YWwodmlldywKKyAgICAgIHN0YXRpY19jYXN0PFZh bHR5cGU+KHgpKTsKKyAgICByZXR1cm4gKHJlbG9jX3Byb3BlcnR5LT5jaGVj a3VwX3hfdmFsdWUoeCkKKwkgICAgPyBUaGlzOjpTVEFUVVNfT0tBWQorCSAg ICA6IFRoaXM6OlNUQVRVU19PVkVSRkxPVyk7CisgIH0KKworICAvLyBEbyBh IHNpbXBsZSBwYy1yZWxhdGl2ZSByZWxvY2F0aW9uIGF0IHVuYWxpZ25lZCBh ZGRyZXNzZXMuCisKKyAgdGVtcGxhdGU8aW50IHZhbHNpemU+CisgIHN0YXRp YyBpbmxpbmUgdHlwZW5hbWUgVGhpczo6U3RhdHVzCisgIHBjcmVsYV91YSh1 bnNpZ25lZCBjaGFyKiB2aWV3LAorCSAgICBjb25zdCBTaXplZF9yZWxvYmpf ZmlsZTxzaXplLCBiaWdfZW5kaWFuPiogb2JqZWN0LAorCSAgICBjb25zdCBT eW1ib2xfdmFsdWU8c2l6ZT4qIHBzeW12YWwsCisJICAgIHR5cGVuYW1lIGVs ZmNwcDo6U3dhcDxzaXplLCBiaWdfZW5kaWFuPjo6VmFsdHlwZSBhZGRlbmQs CisJICAgIHR5cGVuYW1lIGVsZmNwcDo6RWxmX3R5cGVzPHNpemU+OjpFbGZf QWRkciBhZGRyZXNzLAorCSAgICBjb25zdCBBQXJjaDY0X3JlbG9jX3Byb3Bl cnR5KiByZWxvY19wcm9wZXJ0eSkKKyAgeworICAgIHR5cGVkZWYgdHlwZW5h bWUgZWxmY3BwOjpTd2FwX3VuYWxpZ25lZDx2YWxzaXplLCBiaWdfZW5kaWFu Pjo6VmFsdHlwZQorICAgICAgVmFsdHlwZTsKKyAgICB0eXBlbmFtZSBlbGZj cHA6OkVsZl90eXBlczxzaXplPjo6RWxmX0FkZHIgeCA9CisJcHN5bXZhbC0+ dmFsdWUob2JqZWN0LCBhZGRlbmQpIC0gYWRkcmVzczsKKyAgICBlbGZjcHA6 OlN3YXBfdW5hbGlnbmVkPHZhbHNpemUsIGJpZ19lbmRpYW4+Ojp3cml0ZXZh bCh2aWV3LAorICAgICAgc3RhdGljX2Nhc3Q8VmFsdHlwZT4oeCkpOworICAg IHJldHVybiAocmVsb2NfcHJvcGVydHktPmNoZWNrdXBfeF92YWx1ZSh4KQor CSAgICA/IFRoaXM6OlNUQVRVU19PS0FZCisJICAgIDogVGhpczo6U1RBVFVT X09WRVJGTE9XKTsKKyAgfQorCisgIC8vIERvIGEgc2ltcGxlIHJlbGEgcmVs b2NhdGlvbiBhdCBhbGlnbmVkIGFkZHJlc3Nlcy4KKworICB0ZW1wbGF0ZTxp bnQgdmFsc2l6ZT4KKyAgc3RhdGljIGlubGluZSB0eXBlbmFtZSBUaGlzOjpT dGF0dXMKKyAgcmVsYSgKKyAgICB1bnNpZ25lZCBjaGFyKiB2aWV3LAorICAg IGNvbnN0IFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+KiBv YmplY3QsCisgICAgY29uc3QgU3ltYm9sX3ZhbHVlPHNpemU+KiBwc3ltdmFs LAorICAgIHR5cGVuYW1lIGVsZmNwcDo6U3dhcDxzaXplLCBiaWdfZW5kaWFu Pjo6VmFsdHlwZSBhZGRlbmQsCisgICAgY29uc3QgQUFyY2g2NF9yZWxvY19w cm9wZXJ0eSogcmVsb2NfcHJvcGVydHkpCisgIHsKKyAgICB0eXBlZGVmIHR5 cGVuYW1lIGVsZmNwcDo6U3dhcDx2YWxzaXplLCBiaWdfZW5kaWFuPjo6VmFs dHlwZQorICAgICAgVmFsdHlwZTsKKyAgICBWYWx0eXBlKiB3diA9IHJlaW50 ZXJwcmV0X2Nhc3Q8VmFsdHlwZSo+KHZpZXcpOworICAgIHR5cGVuYW1lIGVs ZmNwcDo6RWxmX3R5cGVzPHNpemU+OjpFbGZfQWRkciB4ID0KKwlwc3ltdmFs LT52YWx1ZShvYmplY3QsIGFkZGVuZCk7CisgICAgZWxmY3BwOjpTd2FwPHZh bHNpemUsIGJpZ19lbmRpYW4+Ojp3cml0ZXZhbCh3diwKKyAgICAgIHN0YXRp Y19jYXN0PFZhbHR5cGU+KHgpKTsKKyAgICByZXR1cm4gKHJlbG9jX3Byb3Bl cnR5LT5jaGVja3VwX3hfdmFsdWUoeCkKKwkgICAgPyBUaGlzOjpTVEFUVVNf T0tBWQorCSAgICA6IFRoaXM6OlNUQVRVU19PVkVSRkxPVyk7CisgIH0KKwor ICAvLyBEbyByZWxvY2F0ZS4gVXBkYXRlIHNlbGVjdGVkIGJpdHMgaW4gdGV4 dC4KKyAgLy8gbmV3X3ZhbCA9ICh2YWwgJiB+ZHN0X21hc2spIHwgKGltbWVk IDw8IGRvZmZzZXQpCisKKyAgdGVtcGxhdGU8aW50IHZhbHNpemU+CisgIHN0 YXRpYyBpbmxpbmUgdHlwZW5hbWUgVGhpczo6U3RhdHVzCisgIHJlbGFfZ2Vu ZXJhbCh1bnNpZ25lZCBjaGFyKiB2aWV3LAorCSAgICAgICBjb25zdCBTaXpl ZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPiogb2JqZWN0LAorCSAg ICAgICBjb25zdCBTeW1ib2xfdmFsdWU8c2l6ZT4qIHBzeW12YWwsCisJICAg ICAgIHR5cGVuYW1lIGVsZmNwcDo6U3dhcDxzaXplLCBiaWdfZW5kaWFuPjo6 VmFsdHlwZSBhZGRlbmQsCisJICAgICAgIGNvbnN0IEFBcmNoNjRfcmVsb2Nf cHJvcGVydHkqIHJlbG9jX3Byb3BlcnR5KQorICB7CisgICAgLy8gQ2FsY3Vs YXRlIHJlbG9jYXRpb24uCisgICAgdHlwZW5hbWUgZWxmY3BwOjpFbGZfdHlw ZXM8c2l6ZT46OkVsZl9BZGRyIHggPQorCXBzeW12YWwtPnZhbHVlKG9iamVj dCwgYWRkZW5kKTsKKworICAgIC8vIFNlbGVjdCBiaXRzIGZyb20gWC4KKyAg ICB0eXBlbmFtZSBlbGZjcHA6OkVsZl90eXBlczxzaXplPjo6RWxmX0FkZHIg aW1tZWQgPQorICAgICAgcmVsb2NfcHJvcGVydHktPnNlbGVjdF94X3ZhbHVl KHgpOworCisgICAgLy8gVXBkYXRlIHZpZXcuCisgICAgY29uc3QgQUFyY2g2 NF9yZWxvY19wcm9wZXJ0eTo6UmVsb2NfaW5zdCBpbnN0ID0KKyAgICAgIHJl bG9jX3Byb3BlcnR5LT5yZWxvY19pbnN0KCk7CisgICAgLy8gSWYgaXQgaXMg YSBkYXRhIHJlbG9jYXRpb24gb3IgaW5zdHJ1Y3Rpb24gaGFzIDIgcGFydHMg b2YgaW1tZWRpYXRlCisgICAgLy8gZmllbGRzLCB5b3Ugc2hvdWxkIG5vdCBj YWxsIHJlbGFfZ2VuZXJhbC4KKyAgICBnb2xkX2Fzc2VydChhYXJjaDY0X2hv d3RvW2luc3RdLmRvZmZzZXQyID09IC0xICYmCisJCWFhcmNoNjRfaG93dG9b aW5zdF0uZG9mZnNldCAhPSAtMSk7CisgICAgVGhpczo6dGVtcGxhdGUgdXBk YXRlX3ZpZXc8dmFsc2l6ZT4odmlldywgaW1tZWQsCisJCQkJCWFhcmNoNjRf aG93dG9baW5zdF0uZG9mZnNldCwKKwkJCQkJYWFyY2g2NF9ob3d0b1tpbnN0 XS5kc3RfbWFzayk7CisKKyAgICAvLyBEbyBjaGVjayBvdmVyZmxvdyBvciBh bGlnbm1lbnQgaWYgbmVlZGVkLgorICAgIHJldHVybiAocmVsb2NfcHJvcGVy dHktPmNoZWNrdXBfeF92YWx1ZSh4KQorCSAgICA/IFRoaXM6OlNUQVRVU19P S0FZCisJICAgIDogVGhpczo6U1RBVFVTX09WRVJGTE9XKTsKKyAgfQorCisg IC8vIERvIHJlbG9jYXRlLiBVcGRhdGUgc2VsZWN0ZWQgYml0cyBpbiB0ZXh0 LgorICAvLyBuZXcgdmFsID0gKHZhbCAmIH5kc3RfbWFzaykgfCAoaW1tZWQg PDwgZG9mZnNldCkKKworICB0ZW1wbGF0ZTxpbnQgdmFsc2l6ZT4KKyAgc3Rh dGljIGlubGluZSB0eXBlbmFtZSBUaGlzOjpTdGF0dXMKKyAgcmVsYV9nZW5l cmFsKAorICAgIHVuc2lnbmVkIGNoYXIqIHZpZXcsCisgICAgdHlwZW5hbWUg ZWxmY3BwOjpTd2FwPHNpemUsIGJpZ19lbmRpYW4+OjpWYWx0eXBlIHMsCisg ICAgdHlwZW5hbWUgZWxmY3BwOjpTd2FwPHNpemUsIGJpZ19lbmRpYW4+OjpW YWx0eXBlIGFkZGVuZCwKKyAgICBjb25zdCBBQXJjaDY0X3JlbG9jX3Byb3Bl cnR5KiByZWxvY19wcm9wZXJ0eSkKKyAgeworICAgIC8vIENhbGN1bGF0ZSBy ZWxvY2F0aW9uLgorICAgIHR5cGVuYW1lIGVsZmNwcDo6RWxmX3R5cGVzPHNp emU+OjpFbGZfQWRkciB4ID0gcyArIGFkZGVuZDsKKworICAgIC8vIFNlbGVj dCBiaXRzIGZyb20gWC4KKyAgICB0eXBlbmFtZSBlbGZjcHA6OkVsZl90eXBl czxzaXplPjo6RWxmX0FkZHIgaW1tZWQgPQorICAgICAgcmVsb2NfcHJvcGVy dHktPnNlbGVjdF94X3ZhbHVlKHgpOworCisgICAgLy8gVXBkYXRlIHZpZXcu CisgICAgY29uc3QgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eTo6UmVsb2NfaW5z dCBpbnN0ID0KKyAgICAgIHJlbG9jX3Byb3BlcnR5LT5yZWxvY19pbnN0KCk7 CisgICAgLy8gSWYgaXQgaXMgYSBkYXRhIHJlbG9jYXRpb24gb3IgaW5zdHJ1 Y3Rpb24gaGFzIDIgcGFydHMgb2YgaW1tZWRpYXRlCisgICAgLy8gZmllbGRz LCB5b3Ugc2hvdWxkIG5vdCBjYWxsIHJlbGFfZ2VuZXJhbC4KKyAgICBnb2xk X2Fzc2VydChhYXJjaDY0X2hvd3RvW2luc3RdLmRvZmZzZXQyID09IC0xICYm CisJCWFhcmNoNjRfaG93dG9baW5zdF0uZG9mZnNldCAhPSAtMSk7CisgICAg VGhpczo6dGVtcGxhdGUgdXBkYXRlX3ZpZXc8dmFsc2l6ZT4odmlldywgaW1t ZWQsCisJCQkJCWFhcmNoNjRfaG93dG9baW5zdF0uZG9mZnNldCwKKwkJCQkJ YWFyY2g2NF9ob3d0b1tpbnN0XS5kc3RfbWFzayk7CisKKyAgICAvLyBEbyBj aGVjayBvdmVyZmxvdyBvciBhbGlnbm1lbnQgaWYgbmVlZGVkLgorICAgIHJl dHVybiAocmVsb2NfcHJvcGVydHktPmNoZWNrdXBfeF92YWx1ZSh4KQorCSAg ICA/IFRoaXM6OlNUQVRVU19PS0FZCisJICAgIDogVGhpczo6U1RBVFVTX09W RVJGTE9XKTsKKyAgfQorCisgIC8vIERvIGFkZHJlc3MgcmVsYXRpdmUgcmVs b2NhdGUuIFVwZGF0ZSBzZWxlY3RlZCBiaXRzIGluIHRleHQuCisgIC8vIG5l dyB2YWwgPSAodmFsICYgfmRzdF9tYXNrKSB8IChpbW1lZCA8PCBkb2Zmc2V0 KQorCisgIHRlbXBsYXRlPGludCB2YWxzaXplPgorICBzdGF0aWMgaW5saW5l IHR5cGVuYW1lIFRoaXM6OlN0YXR1cworICBwY3JlbGFfZ2VuZXJhbCgKKyAg ICB1bnNpZ25lZCBjaGFyKiB2aWV3LAorICAgIGNvbnN0IFNpemVkX3JlbG9i al9maWxlPHNpemUsIGJpZ19lbmRpYW4+KiBvYmplY3QsCisgICAgY29uc3Qg U3ltYm9sX3ZhbHVlPHNpemU+KiBwc3ltdmFsLAorICAgIHR5cGVuYW1lIGVs ZmNwcDo6U3dhcDxzaXplLCBiaWdfZW5kaWFuPjo6VmFsdHlwZSBhZGRlbmQs CisgICAgdHlwZW5hbWUgZWxmY3BwOjpFbGZfdHlwZXM8c2l6ZT46OkVsZl9B ZGRyIGFkZHJlc3MsCisgICAgY29uc3QgQUFyY2g2NF9yZWxvY19wcm9wZXJ0 eSogcmVsb2NfcHJvcGVydHkpCisgIHsKKyAgICAvLyBDYWxjdWxhdGUgcmVs b2NhdGlvbi4KKyAgICB0eXBlbmFtZSBlbGZjcHA6OkVsZl90eXBlczxzaXpl Pjo6RWxmX0FkZHIgeCA9CisJcHN5bXZhbC0+dmFsdWUob2JqZWN0LCBhZGRl bmQpIC0gYWRkcmVzczsKKworICAgIC8vIFNlbGVjdCBiaXRzIGZyb20gWC4K KyAgICB0eXBlbmFtZSBlbGZjcHA6OkVsZl90eXBlczxzaXplPjo6RWxmX0Fk ZHIgaW1tZWQgPQorICAgICAgcmVsb2NfcHJvcGVydHktPnNlbGVjdF94X3Zh bHVlKHgpOworCisgICAgLy8gVXBkYXRlIHZpZXcuCisgICAgY29uc3QgQUFy Y2g2NF9yZWxvY19wcm9wZXJ0eTo6UmVsb2NfaW5zdCBpbnN0ID0KKyAgICAg IHJlbG9jX3Byb3BlcnR5LT5yZWxvY19pbnN0KCk7CisgICAgLy8gSWYgaXQg aXMgYSBkYXRhIHJlbG9jYXRpb24gb3IgaW5zdHJ1Y3Rpb24gaGFzIDIgcGFy dHMgb2YgaW1tZWRpYXRlCisgICAgLy8gZmllbGRzLCB5b3Ugc2hvdWxkIG5v dCBjYWxsIHBjcmVsYV9nZW5lcmFsLgorICAgIGdvbGRfYXNzZXJ0KGFhcmNo NjRfaG93dG9baW5zdF0uZG9mZnNldDIgPT0gLTEgJiYKKwkJYWFyY2g2NF9o b3d0b1tpbnN0XS5kb2Zmc2V0ICE9IC0xKTsKKyAgICBUaGlzOjp0ZW1wbGF0 ZSB1cGRhdGVfdmlldzx2YWxzaXplPih2aWV3LCBpbW1lZCwKKwkJCQkJYWFy Y2g2NF9ob3d0b1tpbnN0XS5kb2Zmc2V0LAorCQkJCQlhYXJjaDY0X2hvd3Rv W2luc3RdLmRzdF9tYXNrKTsKKworICAgIC8vIERvIGNoZWNrIG92ZXJmbG93 IG9yIGFsaWdubWVudCBpZiBuZWVkZWQuCisgICAgcmV0dXJuIChyZWxvY19w cm9wZXJ0eS0+Y2hlY2t1cF94X3ZhbHVlKHgpCisJICAgID8gVGhpczo6U1RB VFVTX09LQVkKKwkgICAgOiBUaGlzOjpTVEFUVVNfT1ZFUkZMT1cpOworICB9 CisKKyAgLy8gQ2FsY3VsYXRlIFBHKFMrQSkgLSBQRyhhZGRyZXNzKSwgdXBk YXRlIGFkcnAgaW5zdHJ1Y3Rpb24uCisgIC8vIFJfQUFSQ0g2NF9BRFJfUFJF TF9QR19ISTIxCisKKyAgc3RhdGljIGlubGluZSB0eXBlbmFtZSBUaGlzOjpT dGF0dXMKKyAgYWRycCgKKyAgICB1bnNpZ25lZCBjaGFyKiB2aWV3LAorICAg IHR5cGVuYW1lIGVsZmNwcDo6RWxmX3R5cGVzPHNpemU+OjpFbGZfQWRkciBz YSwKKyAgICB0eXBlbmFtZSBlbGZjcHA6OkVsZl90eXBlczxzaXplPjo6RWxm X0FkZHIgYWRkcmVzcykKKyAgeworICAgIHR5cGVuYW1lIGVsZmNwcDo6U3dh cDxzaXplLCBiaWdfZW5kaWFuPjo6VmFsdHlwZSB4ID0KKyAgICAgIFRoaXM6 OlBhZ2Uoc2EpIC0gVGhpczo6UGFnZShhZGRyZXNzKTsKKyAgICB1cGRhdGVf YWRyKHZpZXcsIHgsIE5VTEwpOworICAgIHJldHVybiAoc2l6ZSA9PSA2NCAm JiBCaXRzPDMyPjo6aGFzX292ZXJmbG93KHgpCisJICAgID8gVGhpczo6U1RB VFVTX09WRVJGTE9XCisJICAgIDogVGhpczo6U1RBVFVTX09LQVkpOworICB9 CisKKyAgLy8gQ2FsY3VsYXRlIFBHKFMrQSkgLSBQRyhhZGRyZXNzKSwgdXBk YXRlIGFkcnAgaW5zdHJ1Y3Rpb24uCisgIC8vIFJfQUFSQ0g2NF9BRFJfUFJF TF9QR19ISTIxCisKKyAgc3RhdGljIGlubGluZSB0eXBlbmFtZSBUaGlzOjpT dGF0dXMKKyAgYWRycCh1bnNpZ25lZCBjaGFyKiB2aWV3LAorICAgICAgIGNv bnN0IFNpemVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+KiBvYmpl Y3QsCisgICAgICAgY29uc3QgU3ltYm9sX3ZhbHVlPHNpemU+KiBwc3ltdmFs LAorICAgICAgIHR5cGVuYW1lIGVsZmNwcDo6RWxmX3R5cGVzPHNpemU+OjpF bGZfQWRkciBhZGRlbmQsCisgICAgICAgdHlwZW5hbWUgZWxmY3BwOjpFbGZf dHlwZXM8c2l6ZT46OkVsZl9BZGRyIGFkZHJlc3MsCisgICAgICAgY29uc3Qg QUFyY2g2NF9yZWxvY19wcm9wZXJ0eSogcmVsb2NfcHJvcGVydHkpCisgIHsK KyAgICB0eXBlbmFtZSBlbGZjcHA6OkVsZl90eXBlczxzaXplPjo6RWxmX0Fk ZHIgc2EgPQorCXBzeW12YWwtPnZhbHVlKG9iamVjdCwgYWRkZW5kKTsKKyAg ICB0eXBlbmFtZSBlbGZjcHA6OlN3YXA8c2l6ZSwgYmlnX2VuZGlhbj46OlZh bHR5cGUgeCA9CisJVGhpczo6UGFnZShzYSkgLSBUaGlzOjpQYWdlKGFkZHJl c3MpOworICAgIHVwZGF0ZV9hZHIodmlldywgeCwgcmVsb2NfcHJvcGVydHkp OworICAgIHJldHVybiAocmVsb2NfcHJvcGVydHktPmNoZWNrdXBfeF92YWx1 ZSh4KQorCSAgICA/IFRoaXM6OlNUQVRVU19PS0FZCisJICAgIDogVGhpczo6 U1RBVFVTX09WRVJGTE9XKTsKKyAgfQorCit9OworCiAvLyBSZXR1cm4gdGhl IG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBQTFQuCiAKIHRlbXBsYXRlPGlu dCBzaXplLCBib29sIGJpZ19lbmRpYW4+CkBAIC0xMDE2LDI5ICsxNDkxLDEy IEBAIFRhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpwbHRfZW50 cnlfc2l6ZSgpIGNvbnN0CiB0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdf ZW5kaWFuPgogdGxzOjpUbHNfb3B0aW1pemF0aW9uCiBUYXJnZXRfYWFyY2g2 NDxzaXplLCBiaWdfZW5kaWFuPjo6b3B0aW1pemVfdGxzX3JlbG9jKGJvb2wg LyogaXNfZmluYWwgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKiByX3R5cGUgKi8pCisJ CQkJCQkgICAgIGludCAvKiByX3R5cGUgKi8pCiB7CiAgIC8vVE9ETwogICBy ZXR1cm4gdGxzOjpUTFNPUFRfTk9ORTsKIH0KIAotLy8gR2V0IHRoZSBSZWZl cmVuY2VfZmxhZ3MgZm9yIGEgcGFydGljdWxhciByZWxvY2F0aW9uLgotdGVt cGxhdGU8aW50IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4KLWludAotVGFyZ2V0 X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46OlNjYW46OmdldF9yZWZlcmVu Y2VfZmxhZ3ModW5zaWduZWQgaW50IHJfdHlwZSkKLXsKLSAgc3dpdGNoIChy X3R5cGUpCi0gICAgewotICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfTk9O RToKLSAgICAgIC8vIE5vIHN5bWJvbCByZWZlcmVuY2UuCi0gICAgICByZXR1 cm4gMDsKLSAgICAvL1RPRE8KLSAgICBkZWZhdWx0OgotICAgICAgLy8gTm90 IGV4cGVjdGVkLiBXZSB3aWxsIGdpdmUgYW4gZXJyb3IgbGF0ZXIuCi0gICAg cmV0dXJuIDA7Ci0gICAgfQotfQotCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhp cyByZWxvY2F0aW9uIHR5cGUgY291bGQgYmUgdGhhdCBvZiBhIGZ1bmN0aW9u IHBvaW50ZXIuCiAKIHRlbXBsYXRlPGludCBzaXplLCBib29sIGJpZ19lbmRp YW4+CkBAIC0xMDUxLDcgKzE1MDksNyBAQCBUYXJnZXRfYWFyY2g2NDxzaXpl LCBiaWdfZW5kaWFuPjo6U2Nhbjo6cG9zc2libGVfZnVuY3Rpb25fcG9pbnRl cl9yZWxvYygKICAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0FCUzY0Ogog ICAgIC8vVE9ETwogICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKKwly ZXR1cm4gdHJ1ZTsKICAgICAgIH0KICAgICB9CiAgIHJldHVybiBmYWxzZTsK QEAgLTEwNzgsNyArMTUzNiw3IEBAIFRhcmdldF9hYXJjaDY0PHNpemUsIGJp Z19lbmRpYW4+OjpTY2FuOjpsb2NhbF9yZWxvY19tYXlfYmVfZnVuY3Rpb25f cG9pbnRlcigKICAgLy8gbm90IHBvc3NpYmxlIHRvIGRpc3Rpbmd1aXNoIHBv aW50ZXIgdGFrZW4gdmVyc3VzIGEgY2FsbCBieSBsb29raW5nIGF0CiAgIC8v IHRoZSByZWxvY2F0aW9uIHR5cGVzLgogICByZXR1cm4gKHBhcmFtZXRlcnMt Pm9wdGlvbnMoKS5zaGFyZWQoKQotICAgICAgICAgIHx8IHBvc3NpYmxlX2Z1 bmN0aW9uX3BvaW50ZXJfcmVsb2Mocl90eXBlKSk7CisJICB8fCBwb3NzaWJs ZV9mdW5jdGlvbl9wb2ludGVyX3JlbG9jKHJfdHlwZSkpOwogfQogCiAvLyBG b3Igc2FmZSBJQ0YsIHNjYW4gYSByZWxvY2F0aW9uIGZvciBhIGdsb2JhbCBz eW1ib2wgdG8gY2hlY2sgaWYgaXQKQEAgLTExMDEsMTAgKzE1NTksMTAgQEAg VGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46OlNjYW46Omdsb2Jh bF9yZWxvY19tYXlfYmVfZnVuY3Rpb25fcG9pbnRlcigKICAgLy8gV2hlbiBi dWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5LCBkbyBub3QgZm9sZCBzeW1ib2xz IHdob3NlIHZpc2liaWxpdHkKICAgLy8gaXMgaGlkZGVuLCBpbnRlcm5hbCBv ciBwcm90ZWN0ZWQuCiAgIHJldHVybiAoKHBhcmFtZXRlcnMtPm9wdGlvbnMo KS5zaGFyZWQoKQotICAgICAgICAgICAmJiAoZ3N5bS0+dmlzaWJpbGl0eSgp ID09IGVsZmNwcDo6U1RWX0lOVEVSTkFMCi0gICAgICAgICAgICAgICB8fCBn c3ltLT52aXNpYmlsaXR5KCkgPT0gZWxmY3BwOjpTVFZfUFJPVEVDVEVECi0g ICAgICAgICAgICAgICB8fCBnc3ltLT52aXNpYmlsaXR5KCkgPT0gZWxmY3Bw OjpTVFZfSElEREVOKSkKLSAgICAgICAgICB8fCBwb3NzaWJsZV9mdW5jdGlv bl9wb2ludGVyX3JlbG9jKHJfdHlwZSkpOworCSAgICYmIChnc3ltLT52aXNp YmlsaXR5KCkgPT0gZWxmY3BwOjpTVFZfSU5URVJOQUwKKwkgICAgICAgfHwg Z3N5bS0+dmlzaWJpbGl0eSgpID09IGVsZmNwcDo6U1RWX1BST1RFQ1RFRAor CSAgICAgICB8fCBnc3ltLT52aXNpYmlsaXR5KCkgPT0gZWxmY3BwOjpTVFZf SElEREVOKSkKKwkgIHx8IHBvc3NpYmxlX2Z1bmN0aW9uX3BvaW50ZXJfcmVs b2Mocl90eXBlKSk7CiB9CiAKIC8vIFJlcG9ydCBhbiB1bnN1cHBvcnRlZCBy ZWxvY2F0aW9uIGFnYWluc3QgYSBsb2NhbCBzeW1ib2wuCkBAIC0xMTI1LDcg KzE1ODMsNyBAQCBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6 U2Nhbjo6dW5zdXBwb3J0ZWRfcmVsb2NfbG9jYWwoCiB0ZW1wbGF0ZTxpbnQg c2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgogdm9pZAogVGFyZ2V0X2FhcmNoNjQ8 c2l6ZSwgYmlnX2VuZGlhbj46OlNjYW46OmNoZWNrX25vbl9waWMoUmVsb2Jq KiBvYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcl90eXBlKQorCQkJ CQkJICAgICAgdW5zaWduZWQgaW50IHJfdHlwZSkKIHsKICAgZ29sZF9hc3Nl cnQocl90eXBlICE9IGVsZmNwcDo6Ul9BQVJDSDY0X05PTkUpOwogCkBAIC0x MTU3LDcgKzE2MTUsNyBAQCBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5k aWFuPjo6U2Nhbjo6Y2hlY2tfbm9uX3BpYyhSZWxvYmoqIG9iamVjdCwKICAg ICByZXR1cm47CiAgIGdvbGRfYXNzZXJ0KHBhcmFtZXRlcnMtPm9wdGlvbnMo KS5vdXRwdXRfaXNfcG9zaXRpb25faW5kZXBlbmRlbnQoKSk7CiAgIG9iamVj dC0+ZXJyb3IoXygicmVxdWlyZXMgdW5zdXBwb3J0ZWQgZHluYW1pYyByZWxv YzsgIgotICAgICAgICAgICAgICAgICAgInJlY29tcGlsZSB3aXRoIC1mUElD IikpOworCQkgICJyZWNvbXBpbGUgd2l0aCAtZlBJQyIpKTsKICAgdGhpcy0+ aXNzdWVkX25vbl9waWNfZXJyb3JfID0gdHJ1ZTsKICAgcmV0dXJuOwogfQpA QCAtMTE3MCw3ICsxNjI4LDcgQEAgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmln X2VuZGlhbj46OlNjYW46OmxvY2FsKAogICAgIFN5bWJvbF90YWJsZSogLyog c3ltdGFiICovLAogICAgIExheW91dCogLyogbGF5b3V0ICovLAogICAgIFRh cmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+KiAvKiB0YXJnZXQgKi8s Ci0gICAgU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj4qIC8q IG9iamVjdCAqLywKKyAgICBTaXplZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdf ZW5kaWFuPiogb2JqZWN0LAogICAgIHVuc2lnbmVkIGludCAvKiBkYXRhX3No bmR4ICovLAogICAgIE91dHB1dF9zZWN0aW9uKiAvKiBvdXRwdXRfc2VjdGlv biAqLywKICAgICBjb25zdCBlbGZjcHA6OlJlbGE8c2l6ZSwgYmlnX2VuZGlh bj4mIC8qIHJlbG9jICovLApAQCAtMTE4MywxMCArMTY0MSwzNSBAQCBUYXJn ZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6U2Nhbjo6bG9jYWwoCiAK ICAgc3dpdGNoIChyX3R5cGUpCiAgICAgewotICAgIGNhc2UgZWxmY3BwOjpS X0FBUkNINjRfTk9ORToKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0FC UzY0OgorICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfQUJTMzI6CisgICAg Y2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9BQlMxNjoKKyAgICAgIC8vIElmIGJ1 aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgb3IgcGllLCB3ZSBuZWVkIHRvIG1h cmsgdGhpcyBhcyBhIGR5bm1pYworICAgICAgLy8gcmVsb2N0aW9uLCBzbyB0 aGF0IHRoZSBkeW5hbWljIGxvYWRlciBjYW4gcmVsb2NhdGUgaXQuCisgICAg ICAvLyBOb3Qgc3VwcG9ydGVkIHlldC4KKyAgICAgIGlmIChwYXJhbWV0ZXJz LT5vcHRpb25zKCkub3V0cHV0X2lzX3Bvc2l0aW9uX2luZGVwZW5kZW50KCkp CisJeworCSAgZ29sZF9lcnJvcihfKCIlczogdW5zdXBwb3J0ZWQgQUJTNjQg cmVsb2NhdGlvbiB0eXBlIGZvciBwaWUgb3IgIgorCQkgICAgICAgInNoYXJl ZCBsaWJyYXJ5LlxuIiksCisJCSAgICAgb2JqZWN0LT5uYW1lKCkuY19zdHIo KSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8vIFJlbG9jYXRpb25z IHRvIGdlbmVyYXRlIDE5LCAyMSBhbmQgMzMtYml0IFBDLXJlbGF0aXZlIGFk ZHJlc3MKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0FEUl9QUkVMX1BH X0hJMjE6IC8vIDI3NQorICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfTERT VDhfQUJTX0xPMTJfTkM6IC8vIDI3OAorICAgIGNhc2UgZWxmY3BwOjpSX0FB UkNINjRfTERTVDY0X0FCU19MTzEyX05DOiAvLyAyODYKKyAgICBjYXNlIGVs ZmNwcDo6Ul9BQVJDSDY0X0FERF9BQlNfTE8xMl9OQzogLy8gMjc3CiAgICAg ICBicmVhazsKIAotICAgICAgLy9UT0RPCisgICAgICAvLyBDb250cm9sIGZs b3csIHBjLXJlbGF0aXZlLiBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5n IGZvciBhIHJlbGF0aXZlCisgICAgICAvLyBhZGRyZXNzaW5nIHJlbG9jYXRp b24gYWdhaW5zdCBhIGxvY2FsIHN5bWJvbCBpZiBpdCBkb2VzIG5vdCByZWZl cmVuY2UKKyAgICAgIC8vIHRoZSBHT1QuCisgICAgY2FzZSBlbGZjcHA6OlJf QUFSQ0g2NF9DQUxMMjY6IC8vIDI4MworICAgICAgYnJlYWs7CisKKyAgICBk ZWZhdWx0OgorICAgICAgdW5zdXBwb3J0ZWRfcmVsb2NfbG9jYWwob2JqZWN0 LCByX3R5cGUpOwogICAgIH0KIH0KIApAQCAtMTIwNywxOCArMTY5MCwxMzIg QEAgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46OlNjYW46OnVu c3VwcG9ydGVkX3JlbG9jX2dsb2JhbCgKIHRlbXBsYXRlPGludCBzaXplLCBi b29sIGJpZ19lbmRpYW4+CiBpbmxpbmUgdm9pZAogVGFyZ2V0X2FhcmNoNjQ8 c2l6ZSwgYmlnX2VuZGlhbj46OlNjYW46Omdsb2JhbCgKLSAgICBTeW1ib2xf dGFibGUqIC8qIHN5bXRhYiAqLywKLSAgICBMYXlvdXQqIC8qIGxheW91dCAq LywKLSAgICBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPiogLyog dGFyZ2V0ICovLAorICAgIFN5bWJvbF90YWJsZSogc3ltdGFiLAorICAgIExh eW91dCogbGF5b3V0LAorICAgIFRhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19l bmRpYW4+KiB0YXJnZXQsCiAgICAgU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwg YmlnX2VuZGlhbj4qIC8qIG9iamVjdCAqLywKICAgICB1bnNpZ25lZCBpbnQg LyogZGF0YV9zaG5keCAqLywKICAgICBPdXRwdXRfc2VjdGlvbiogLyogb3V0 cHV0X3NlY3Rpb24gKi8sCiAgICAgY29uc3QgZWxmY3BwOjpSZWxhPHNpemUs IGJpZ19lbmRpYW4+JiAvKiByZWxvYyAqLywKLSAgICB1bnNpZ25lZCBpbnQg Lyogcl90eXBlICovLAotICAgIFN5bWJvbCogLyogZ3N5bSAqLykKKyAgICB1 bnNpZ25lZCBpbnQgcl90eXBlLAorICAgIFN5bWJvbCogZ3N5bSkKIHsKLSAg Ly9UT0RPCisgIHN3aXRjaCAocl90eXBlKQorICAgIHsKKyAgICBjYXNlIGVs ZmNwcDo6Ul9BQVJDSDY0X0FCUzY0OgorICAgICAgLy8gVGhpcyBpcyB1c2Vk IHRvIGZpbGwgdGhlIEdPVCBhYnNvbHV0ZSBhZGRyZXNzLgorICAgICAgaWYg KGdzeW0tPm5lZWRzX3BsdF9lbnRyeSgpKQorCXsKKwkgIHRhcmdldC0+bWFr ZV9wbHRfZW50cnkoc3ltdGFiLCBsYXlvdXQsIGdzeW0pOworCX0KKyAgICAg IGJyZWFrOworCisgICAgY2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9BRFJfUFJF TF9QR19ISTIxOgorICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfQURSX1BS RUxfUEdfSEkyMV9OQzoKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0FE RF9BQlNfTE8xMl9OQzoKKyAgICAgIHsKKwkvLyBEbyBub3RoaW5nIGhlcmUu CisJYnJlYWs7CisgICAgICB9CisKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJD SDY0X0FEUl9HT1RfUEFHRToKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0 X0xENjRfR09UX0xPMTJfTkM6CisgICAgICB7CisJLy8gVGhpcyBwYWlyIG9m IHJlbG9jYXRpb25zIGlzIHVzZWQgdG8gYWNjZXNzIGEgc3BlY2lmaWMgR09U IGVudHJ5LgorCS8vIE5vdGUgYSBHT1QgZW50cnkgaXMgYW4gKmFkZHJlc3Mq IHRvIGEgc3ltYm9sLgorCS8vIFRoZSBzeW1ib2wgcmVxdWlyZXMgYSBHT1Qg ZW50cnkKKwlPdXRwdXRfZGF0YV9nb3RfYWFyY2g2NDxzaXplLCBiaWdfZW5k aWFuPiogZ290ID0KKwkgIHRhcmdldC0+Z290X3NlY3Rpb24oc3ltdGFiLCBs YXlvdXQpOworCWlmIChnc3ltLT5maW5hbF92YWx1ZV9pc19rbm93bigpKQor CSAgeworCSAgICBnb3QtPmFkZF9nbG9iYWwoZ3N5bSwgR09UX1RZUEVfU1RB TkRBUkQpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgUmVsb2Nfc2VjdGlv biogcmVsYV9keW4gPSB0YXJnZXQtPnJlbGFfZHluX3NlY3Rpb24obGF5b3V0 KTsKKwkgICAgaWYgKGdzeW0tPmlzX2Zyb21fZHlub2JqKCkKKwkJfHwgZ3N5 bS0+aXNfdW5kZWZpbmVkKCkKKwkJfHwgZ3N5bS0+aXNfcHJlZW1wdGlibGUo KQorCQl8fCAoZ3N5bS0+dmlzaWJpbGl0eSgpID09IGVsZmNwcDo6U1RWX1BS T1RFQ1RFRAorCQkgICAgJiYgcGFyYW1ldGVycy0+b3B0aW9ucygpLnNoYXJl ZCgpKSkKKwkgICAgICBnb3QtPmFkZF9nbG9iYWxfd2l0aF9yZWwoZ3N5bSwg R09UX1RZUEVfU1RBTkRBUkQsCisJCQkJICAgICAgIHJlbGFfZHluLCBlbGZj cHA6OlJfQUFSQ0g2NF9HTE9CX0RBVCk7CisJICAgIGVsc2UKKwkgICAgICB7 CisJCS8vIE5vdCBpbXBsZW1lbnRlZCB5ZXQuCisJCWdvbGRfYXNzZXJ0KGZh bHNlKTsKKwkgICAgICB9CisJICB9CisJYnJlYWs7CisgICAgICB9CisKKyAg ICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0pVTVAyNjoKKyAgICBjYXNlIGVs ZmNwcDo6Ul9BQVJDSDY0X0NBTEwyNjoKKyAgICAgIHsKKwlpZiAoZ3N5bS0+ ZmluYWxfdmFsdWVfaXNfa25vd24oKSkKKwkgIGJyZWFrOworCisJaWYgKGdz eW0tPmlzX2RlZmluZWQoKSAmJgorCSAgICAhZ3N5bS0+aXNfZnJvbV9keW5v YmooKSAmJgorCSAgICAhZ3N5bS0+aXNfcHJlZW1wdGlibGUoKSkKKwkgIGJy ZWFrOworCisJLy8gTWFrZSBwbHQgZW50cnkgZm9yIGZ1bmN0aW9uIGNhbGwu CisJY29uc3QgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eSogYXJwID0KKwkgICAg YWFyY2g2NF9yZWxvY19wcm9wZXJ0eV90YWJsZS0+Z2V0X3JlbG9jX3Byb3Bl cnR5KHJfdHlwZSk7CisJZ29sZF9hc3NlcnQoYXJwICE9IE5VTEwpOworCXRh cmdldC0+bWFrZV9wbHRfZW50cnkoc3ltdGFiLCBsYXlvdXQsIGdzeW0pOwor CWJyZWFrOworICAgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIGdvbGRf ZXJyb3IoXygiJXM6IHVuc3VwcG9ydGVkIHJlbG9jIHR5cGUiKSwKKwkJIGFh cmNoNjRfcmVsb2NfcHJvcGVydHlfdGFibGUtPgorCQkgICByZWxvY19uYW1l X2luX2Vycm9yX21lc3NhZ2Uocl90eXBlKS5jX3N0cigpKTsKKyAgICB9CiAg IHJldHVybjsKK30gIC8vIEVuZCBvZiBTY2FuOjpnbG9iYWwKKworLy8gQ3Jl YXRlIHRoZSBQTFQgc2VjdGlvbi4KK3RlbXBsYXRlPGludCBzaXplLCBib29s IGJpZ19lbmRpYW4+Cit2b2lkCitUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdf ZW5kaWFuPjo6bWFrZV9wbHRfc2VjdGlvbigKKyAgU3ltYm9sX3RhYmxlKiBz eW10YWIsIExheW91dCogbGF5b3V0KQoreworICBpZiAodGhpcy0+cGx0XyA9 PSBOVUxMKQorICAgIHsKKyAgICAgIC8vIENyZWF0ZSB0aGUgR09UIHNlY3Rp b24gZmlyc3QuCisgICAgICB0aGlzLT5nb3Rfc2VjdGlvbihzeW10YWIsIGxh eW91dCk7CisKKyAgICAgIHRoaXMtPnBsdF8gPSB0aGlzLT5tYWtlX2RhdGFf cGx0KGxheW91dCwgdGhpcy0+Z290X3BsdF8pOworCisgICAgICBsYXlvdXQt PmFkZF9vdXRwdXRfc2VjdGlvbl9kYXRhKCIucGx0IiwgZWxmY3BwOjpTSFRf UFJPR0JJVFMsCisJCQkJICAgICAgKGVsZmNwcDo6U0hGX0FMTE9DCisJCQkJ ICAgICAgIHwgZWxmY3BwOjpTSEZfRVhFQ0lOU1RSKSwKKwkJCQkgICAgICB0 aGlzLT5wbHRfLCBPUkRFUl9QTFQsIGZhbHNlKTsKKworICAgICAgLy8gTWFr ZSB0aGUgc2hfaW5mbyBmaWVsZCBvZiAucmVsYS5wbHQgcG9pbnQgdG8gLnBs dC4KKyAgICAgIE91dHB1dF9zZWN0aW9uKiByZWxhX3BsdF9vcyA9IHRoaXMt PnBsdF8tPnJlbGFfcGx0KCktPm91dHB1dF9zZWN0aW9uKCk7CisgICAgICBy ZWxhX3BsdF9vcy0+c2V0X2luZm9fc2VjdGlvbih0aGlzLT5wbHRfLT5vdXRw dXRfc2VjdGlvbigpKTsKKyAgICB9Cit9CisKKy8vIENyZWF0ZSBhIFBMVCBl bnRyeSBmb3IgYSBnbG9iYWwgc3ltYm9sLgorCit0ZW1wbGF0ZTxpbnQgc2l6 ZSwgYm9vbCBiaWdfZW5kaWFuPgordm9pZAorVGFyZ2V0X2FhcmNoNjQ8c2l6 ZSwgYmlnX2VuZGlhbj46Om1ha2VfcGx0X2VudHJ5KAorICAgIFN5bWJvbF90 YWJsZSogc3ltdGFiLAorICAgIExheW91dCogbGF5b3V0LAorICAgIFN5bWJv bCogZ3N5bSkKK3sKKyAgaWYgKGdzeW0tPmhhc19wbHRfb2Zmc2V0KCkpCisg ICAgcmV0dXJuOworCisgIGlmICh0aGlzLT5wbHRfID09IE5VTEwpCisgICAg dGhpcy0+bWFrZV9wbHRfc2VjdGlvbihzeW10YWIsIGxheW91dCk7CisKKyAg dGhpcy0+cGx0Xy0+YWRkX2VudHJ5KGdzeW0pOwogfQogCiB0ZW1wbGF0ZTxp bnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgpAQCAtMTI0MSwxMSArMTgzOCwx MiBAQCBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6Z2NfcHJv Y2Vzc19yZWxvY3MoCiAgICAgICByZXR1cm47CiAgICAgfQogCi0gIGdvbGQ6 OmdjX3Byb2Nlc3NfcmVsb2NzPHNpemUsIGJpZ19lbmRpYW4sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgIFRhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19l bmRpYW4+LAotICAgICAgICAgICAgICAgICAgICAgICAgICBlbGZjcHA6OlNI VF9SRUxBLAotICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBU YXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6U2NhbiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgVGFyZ2V0X2FhcmNoNjQ8 c2l6ZSwgYmlnX2VuZGlhbj46OlJlbG9jYXRhYmxlX3NpemVfZm9yX3JlbG9j PigKKyAgZ29sZDo6Z2NfcHJvY2Vzc19yZWxvY3M8CisgICAgc2l6ZSwgYmln X2VuZGlhbiwKKyAgICBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFu PiwKKyAgICBlbGZjcHA6OlNIVF9SRUxBLAorICAgIHR5cGVuYW1lIFRhcmdl dF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpTY2FuLAorICAgIHR5cGVu YW1lIFRhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpSZWxvY2F0 YWJsZV9zaXplX2Zvcl9yZWxvYz4oCiAgICAgc3ltdGFiLAogICAgIGxheW91 dCwKICAgICB0aGlzLApAQCAtMTI4MiwxMCArMTg4MCw3IEBAIFRhcmdldF9h YXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpzY2FuX3JlbG9jcygKIAkJIG9i amVjdC0+bmFtZSgpLmNfc3RyKCkpOwogICAgICAgcmV0dXJuOwogICAgIH0K LQotICBnb2xkOjpzY2FuX3JlbG9jczxzaXplLCBiaWdfZW5kaWFuLCBUYXJn ZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPiwKLSAgICAgICAgICAgICAg ICAgICAgZWxmY3BwOjpTSFRfUkVMQSwKLSAgICAgICAgICAgICAgICAgICAg dHlwZW5hbWUgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46OlNj YW4+KAorICBnb2xkOjpzY2FuX3JlbG9jczxzaXplLCBiaWdfZW5kaWFuLCBU YXJnZXRfYWFyY2g2NCwgZWxmY3BwOjpTSFRfUkVMQSwgU2Nhbj4oCiAgICAg c3ltdGFiLAogICAgIGxheW91dCwKICAgICB0aGlzLApAQCAtMTMwNCwxMSAr MTg5OSw3MyBAQCBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6 c2Nhbl9yZWxvY3MoCiB0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdfZW5k aWFuPgogdm9pZAogVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46 OmRvX2ZpbmFsaXplX3NlY3Rpb25zKAotICAgIExheW91dCogLyogbGF5b3V0 ICovLAorICAgIExheW91dCogbGF5b3V0LAogICAgIGNvbnN0IElucHV0X29i amVjdHMqLAotICAgIFN5bWJvbF90YWJsZSogLyogc3ltdGFiICovKQorICAg IFN5bWJvbF90YWJsZSogc3ltdGFiKQogewotICAvL1RPRE8KKyAgY29uc3Qg UmVsb2Nfc2VjdGlvbiogcmVsX3BsdCA9ICh0aGlzLT5wbHRfID09IE5VTEwK KwkJCQkgID8gTlVMTAorCQkJCSAgOiB0aGlzLT5wbHRfLT5yZWxhX3BsdCgp KTsKKyAgbGF5b3V0LT5hZGRfdGFyZ2V0X2R5bmFtaWNfdGFncyhmYWxzZSwg dGhpcy0+Z290X3BsdF8sIHJlbF9wbHQsCisJCQkJICB0aGlzLT5yZWxhX2R5 bl8sIHRydWUsIGZhbHNlKTsKKworICAvLyBTZXQgdGhlIHNpemUgb2YgdGhl IF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBzeW1ib2wgdG8gdGhlIHNpemUgb2YK KyAgLy8gdGhlIC5nb3QucGx0IHNlY3Rpb24uCisgIFN5bWJvbCogc3ltID0g dGhpcy0+Z2xvYmFsX29mZnNldF90YWJsZV87CisgIGlmIChzeW0gIT0gTlVM TCkKKyAgICB7CisgICAgICB1aW50NjRfdCBkYXRhX3NpemUgPSB0aGlzLT5n b3RfcGx0Xy0+Y3VycmVudF9kYXRhX3NpemUoKTsKKyAgICAgIHN5bXRhYi0+ Z2V0X3NpemVkX3N5bWJvbDxzaXplPihzeW0pLT5zZXRfc3ltc2l6ZShkYXRh X3NpemUpOworCisgICAgICAvLyBJZiB0aGUgLmdvdCBzZWN0aW9uIGlzIG1v cmUgdGhhbiAweDgwMDAgYnl0ZXMsIHdlIGFkZAorICAgICAgLy8gMHg4MDAw IHRvIHRoZSB2YWx1ZSBvZiBfR0xPQkFMX09GRlNFVF9UQUJMRV8sIHNvIHRo YXQgMTYKKyAgICAgIC8vIGJpdCByZWxvY2F0aW9ucyBoYXZlIGEgZ3JlYXRl ciBjaGFuY2Ugb2Ygd29ya2luZy4KKyAgICAgIGlmIChkYXRhX3NpemUgPj0g MHg4MDAwKQorCXN5bXRhYi0+Z2V0X3NpemVkX3N5bWJvbDxzaXplPihzeW0p LT5zZXRfdmFsdWUoCisJICBzeW10YWItPmdldF9zaXplZF9zeW1ib2w8c2l6 ZT4oc3ltKS0+dmFsdWUoKSArIDB4ODAwMCk7CisgICAgfQorCisgIGlmIChw YXJhbWV0ZXJzLT5kb2luZ19zdGF0aWNfbGluaygpCisgICAgICAmJiAodGhp cy0+cGx0XyA9PSBOVUxMIHx8ICF0aGlzLT5wbHRfLT5oYXNfaXJlbGF0aXZl X3NlY3Rpb24oKSkpCisgICAgeworICAgICAgLy8gSWYgbGlua2luZyBzdGF0 aWNhbGx5LCBtYWtlIHN1cmUgdGhhdCB0aGUgX19yZWxhX2lwbHQgc3ltYm9s cworICAgICAgLy8gd2VyZSBkZWZpbmVkIGlmIG5lY2Vzc2FyeSwgZXZlbiBp ZiB3ZSBkaWRuJ3QgY3JlYXRlIGEgUExULgorICAgICAgc3RhdGljIGNvbnN0 IERlZmluZV9zeW1ib2xfaW5fc2VnbWVudCBzeW1zW10gPQorCXsKKwkgIHsK KwkgICAgIl9fcmVsYV9pcGx0X3N0YXJ0IiwJLy8gbmFtZQorCSAgICBlbGZj cHA6OlBUX0xPQUQsCQkvLyBzZWdtZW50X3R5cGUKKwkgICAgZWxmY3BwOjpQ Rl9XLAkJLy8gc2VnbWVudF9mbGFnc19zZXQKKwkgICAgZWxmY3BwOjpQRigw KSwJCS8vIHNlZ21lbnRfZmxhZ3NfY2xlYXIKKwkgICAgMCwJCQkJLy8gdmFs dWUKKwkgICAgMCwJCQkJLy8gc2l6ZQorCSAgICBlbGZjcHA6OlNUVF9OT1RZ UEUsCQkvLyB0eXBlCisJICAgIGVsZmNwcDo6U1RCX0dMT0JBTCwJCS8vIGJp bmRpbmcKKwkgICAgZWxmY3BwOjpTVFZfSElEREVOLAkJLy8gdmlzaWJpbGl0 eQorCSAgICAwLAkJCQkvLyBub252aXMKKwkgICAgU3ltYm9sOjpTRUdNRU5U X1NUQVJULAkvLyBvZmZzZXRfZnJvbV9iYXNlCisJICAgIHRydWUJCQkvLyBv bmx5X2lmX3JlZgorCSAgfSwKKwkgIHsKKwkgICAgIl9fcmVsYV9pcGx0X2Vu ZCIsCQkvLyBuYW1lCisJICAgIGVsZmNwcDo6UFRfTE9BRCwJCS8vIHNlZ21l bnRfdHlwZQorCSAgICBlbGZjcHA6OlBGX1csCQkvLyBzZWdtZW50X2ZsYWdz X3NldAorCSAgICBlbGZjcHA6OlBGKDApLAkJLy8gc2VnbWVudF9mbGFnc19j bGVhcgorCSAgICAwLAkJCQkvLyB2YWx1ZQorCSAgICAwLAkJCQkvLyBzaXpl CisJICAgIGVsZmNwcDo6U1RUX05PVFlQRSwJCS8vIHR5cGUKKwkgICAgZWxm Y3BwOjpTVEJfR0xPQkFMLAkJLy8gYmluZGluZworCSAgICBlbGZjcHA6OlNU Vl9ISURERU4sCQkvLyB2aXNpYmlsaXR5CisJICAgIDAsCQkJCS8vIG5vbnZp cworCSAgICBTeW1ib2w6OlNFR01FTlRfU1RBUlQsCS8vIG9mZnNldF9mcm9t X2Jhc2UKKwkgICAgdHJ1ZQkJCS8vIG9ubHlfaWZfcmVmCisJICB9CisJfTsK KworICAgICAgc3ltdGFiLT5kZWZpbmVfc3ltYm9scyhsYXlvdXQsIDIsIHN5 bXMsCisJCQkgICAgIGxheW91dC0+c2NyaXB0X29wdGlvbnMoKS0+c2F3X3Nl Y3Rpb25zX2NsYXVzZSgpKTsKKyAgICB9CisKICAgcmV0dXJuOwogfQogCkBA IC0xMzE3LDE5ICsxOTc0LDE5OCBAQCBUYXJnZXRfYWFyY2g2NDxzaXplLCBi aWdfZW5kaWFuPjo6ZG9fZmluYWxpemVfc2VjdGlvbnMoCiB0ZW1wbGF0ZTxp bnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgogaW5saW5lIGJvb2wKIFRhcmdl dF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpSZWxvY2F0ZTo6cmVsb2Nh dGUoCi0gICAgY29uc3QgUmVsb2NhdGVfaW5mbzxzaXplLCBiaWdfZW5kaWFu PiogLyogcmVsaW5mbyAqLywKLSAgICBUYXJnZXRfYWFyY2g2NDxzaXplLCBi aWdfZW5kaWFuPiogLyogdGFyZ2V0ICovLAorICAgIGNvbnN0IFJlbG9jYXRl X2luZm88c2l6ZSwgYmlnX2VuZGlhbj4qIHJlbGluZm8sCisgICAgVGFyZ2V0 X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj4qIHRhcmdldCwKICAgICBPdXRw dXRfc2VjdGlvbiogLAotICAgIHNpemVfdCAvKiByZWxudW0gKi8sCi0gICAg Y29uc3QgZWxmY3BwOjpSZWxhPHNpemUsIGJpZ19lbmRpYW4+JiAvKiByZWxh ICovLAotICAgIHVuc2lnbmVkIGludCAvKiByX3R5cGUgKi8sCi0gICAgY29u c3QgU2l6ZWRfc3ltYm9sPHNpemU+KiAvKiBnc3ltICovLAotICAgIGNvbnN0 IFN5bWJvbF92YWx1ZTxzaXplPiogLyogcHN5bXZhbCAqLywKLSAgICB1bnNp Z25lZCBjaGFyKiAvKiB2aWV3ICovLAotICAgIHR5cGVuYW1lIGVsZmNwcDo6 RWxmX3R5cGVzPHNpemU+OjpFbGZfQWRkciAvKiBhZGRyZXNzICovLAorICAg IHNpemVfdCByZWxudW0sCisgICAgY29uc3QgZWxmY3BwOjpSZWxhPHNpemUs IGJpZ19lbmRpYW4+JiByZWxhLAorICAgIHVuc2lnbmVkIGludCByX3R5cGUs CisgICAgY29uc3QgU2l6ZWRfc3ltYm9sPHNpemU+KiBnc3ltLAorICAgIGNv bnN0IFN5bWJvbF92YWx1ZTxzaXplPiogcHN5bXZhbCwKKyAgICB1bnNpZ25l ZCBjaGFyKiB2aWV3LAorICAgIHR5cGVuYW1lIGVsZmNwcDo6RWxmX3R5cGVz PHNpemU+OjpFbGZfQWRkciBhZGRyZXNzLAogICAgIHNlY3Rpb25fc2l6ZV90 eXBlIC8qIHZpZXdfc2l6ZSAqLykKIHsKLSAgLy9UT0RPCisgIGlmICh2aWV3 ID09IE5VTEwpCisgICAgcmV0dXJuIHRydWU7CisKKyAgdHlwZWRlZiBBQXJj aDY0X3JlbG9jYXRlX2Z1bmN0aW9uczxzaXplLCBiaWdfZW5kaWFuPiBSZWxv YzsKKworICBjb25zdCBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5KiByZWxvY19w cm9wZXJ0eSA9CisgICAgICBhYXJjaDY0X3JlbG9jX3Byb3BlcnR5X3RhYmxl LT5nZXRfcmVsb2NfcHJvcGVydHkocl90eXBlKTsKKworICBpZiAocmVsb2Nf cHJvcGVydHkgPT0gTlVMTCkKKyAgICB7CisgICAgICBzdGQ6OnN0cmluZyBy ZWxvY19uYW1lID0KKwkgIGFhcmNoNjRfcmVsb2NfcHJvcGVydHlfdGFibGUt PnJlbG9jX25hbWVfaW5fZXJyb3JfbWVzc2FnZShyX3R5cGUpOworICAgICAg Z29sZF9lcnJvcl9hdF9sb2NhdGlvbihyZWxpbmZvLCByZWxudW0sIHJlbGEu Z2V0X3Jfb2Zmc2V0KCksCisJCQkgICAgIF8oImNhbm5vdCByZWxvY2F0ZSAl cyBpbiBvYmplY3QgZmlsZSIpLAorCQkJICAgICByZWxvY19uYW1lLmNfc3Ry KCkpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgIGNvbnN0IFNp emVkX3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+KiBvYmplY3QgPSBy ZWxpbmZvLT5vYmplY3Q7CisKKyAgLy8gUGljayB0aGUgdmFsdWUgdG8gdXNl IGZvciBzeW1ib2xzIGRlZmluZWQgaW4gdGhlIFBMVC4KKyAgU3ltYm9sX3Zh bHVlPHNpemU+IHN5bXZhbDsKKyAgaWYgKGdzeW0gIT0gTlVMTAorICAgICAg JiYgZ3N5bS0+dXNlX3BsdF9vZmZzZXQocmVsb2NfcHJvcGVydHktPnJlZmVy ZW5jZV9mbGFncygpKSkKKyAgICB7CisgICAgICBzeW12YWwuc2V0X291dHB1 dF92YWx1ZSh0YXJnZXQtPnBsdF9hZGRyZXNzX2Zvcl9nbG9iYWwoZ3N5bSkp OworICAgICAgcHN5bXZhbCA9ICZzeW12YWw7CisgICAgfQorICBlbHNlIGlm IChnc3ltID09IE5VTEwgJiYgcHN5bXZhbC0+aXNfaWZ1bmNfc3ltYm9sKCkp CisgICAgeworICAgICAgdW5zaWduZWQgaW50IHJfc3ltID0gZWxmY3BwOjpl bGZfcl9zeW08c2l6ZT4ocmVsYS5nZXRfcl9pbmZvKCkpOworICAgICAgaWYg KG9iamVjdC0+bG9jYWxfaGFzX3BsdF9vZmZzZXQocl9zeW0pKQorCXsKKwkg IHN5bXZhbC5zZXRfb3V0cHV0X3ZhbHVlKHRhcmdldC0+cGx0X2FkZHJlc3Nf Zm9yX2xvY2FsKG9iamVjdCwgcl9zeW0pKTsKKwkgIHBzeW12YWwgPSAmc3lt dmFsOworCX0KKyAgICB9CisKKyAgY29uc3QgZWxmY3BwOjpFbGZfWHdvcmQg YWRkZW5kID0gcmVsYS5nZXRfcl9hZGRlbmQoKTsKKworICAvLyBHZXQgdGhl IEdPVCBvZmZzZXQgaWYgbmVlZGVkLgorICAvLyBGb3IgYWFyY2g2NCwgdGhl IEdPVCBwb2ludGVyIHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIEdPVCBz ZWN0aW9uLgorICBib29sIGhhdmVfZ290X29mZnNldCA9IGZhbHNlOworICBp bnQgZ290X29mZnNldCA9IDA7CisgIGludCBnb3RfYmFzZSA9ICh0YXJnZXQt PmdvdF8gIT0gTlVMTAorCQkgID8gKHRhcmdldC0+Z290Xy0+Y3VycmVudF9k YXRhX3NpemUoKSA+PSAweDgwMDAKKwkJICAgICA/IDB4ODAwMCA6IDApCisJ CSAgOiAwKTsKKyAgc3dpdGNoIChyX3R5cGUpCisgICAgeworICAgIGNhc2Ug ZWxmY3BwOjpSX0FBUkNINjRfTU9WV19HT1RPRkZfRzA6CisgICAgY2FzZSBl bGZjcHA6OlJfQUFSQ0g2NF9NT1ZXX0dPVE9GRl9HMF9OQzoKKyAgICBjYXNl IGVsZmNwcDo6Ul9BQVJDSDY0X01PVldfR09UT0ZGX0cxOgorICAgIGNhc2Ug ZWxmY3BwOjpSX0FBUkNINjRfTU9WV19HT1RPRkZfRzFfTkM6CisgICAgY2Fz ZSBlbGZjcHA6OlJfQUFSQ0g2NF9NT1ZXX0dPVE9GRl9HMjoKKyAgICBjYXNl IGVsZmNwcDo6Ul9BQVJDSDY0X01PVldfR09UT0ZGX0cyX05DOgorICAgIGNh c2UgZWxmY3BwOjpSX0FBUkNINjRfTU9WV19HT1RPRkZfRzM6CisgICAgY2Fz ZSBlbGZjcHA6OlJfQUFSQ0g2NF9HT1RSRUw2NDoKKyAgICBjYXNlIGVsZmNw cDo6Ul9BQVJDSDY0X0dPVFJFTDMyOgorICAgIGNhc2UgZWxmY3BwOjpSX0FB UkNINjRfR09UX0xEX1BSRUwxOToKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJD SDY0X0xENjRfR09UT0ZGX0xPMTU6CisgICAgY2FzZSBlbGZjcHA6OlJfQUFS Q0g2NF9BRFJfR09UX1BBR0U6CisgICAgY2FzZSBlbGZjcHA6OlJfQUFSQ0g2 NF9MRDY0X0dPVF9MTzEyX05DOgorICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNI NjRfTEQ2NF9HT1RQQUdFX0xPMTU6CisgICAgICBpZiAoZ3N5bSAhPSBOVUxM KQorCXsKKwkgIGdvbGRfYXNzZXJ0KGdzeW0tPmhhc19nb3Rfb2Zmc2V0KEdP VF9UWVBFX1NUQU5EQVJEKSk7CisJICBnb3Rfb2Zmc2V0ID0gZ3N5bS0+Z290 X29mZnNldChHT1RfVFlQRV9TVEFOREFSRCkgLSBnb3RfYmFzZTsKKwl9Cisg ICAgICBlbHNlCisJeworCSAgdW5zaWduZWQgaW50IHJfc3ltID0gZWxmY3Bw OjplbGZfcl9zeW08c2l6ZT4ocmVsYS5nZXRfcl9pbmZvKCkpOworCSAgZ29s ZF9hc3NlcnQob2JqZWN0LT5sb2NhbF9oYXNfZ290X29mZnNldChyX3N5bSwg R09UX1RZUEVfU1RBTkRBUkQpKTsKKwkgIGdvdF9vZmZzZXQgPSAob2JqZWN0 LT5sb2NhbF9nb3Rfb2Zmc2V0KHJfc3ltLCBHT1RfVFlQRV9TVEFOREFSRCkK KwkJCS0gZ290X2Jhc2UpOworCX0KKyAgICAgIGhhdmVfZ290X29mZnNldCA9 IHRydWU7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJl YWs7CisgICAgfQorCisgIHR5cGVuYW1lIFJlbG9jOjpTdGF0dXMgcmVsb2Nf c3RhdHVzID0gUmVsb2M6OlNUQVRVU19PS0FZOworICB0eXBlbmFtZSBlbGZj cHA6OkVsZl90eXBlczxzaXplPjo6RWxmX0FkZHIgdmFsdWU7CisgIHN3aXRj aCAocl90eXBlKQorICAgIHsKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0 X05PTkU6CisgICAgICBicmVhazsKKworICAgIGNhc2UgZWxmY3BwOjpSX0FB UkNINjRfQUJTNjQ6CisgICAgICByZWxvY19zdGF0dXMgPSBSZWxvYzo6dGVt cGxhdGUgcmVsYV91YTw2ND4oCisJdmlldywgb2JqZWN0LCBwc3ltdmFsLCBh ZGRlbmQsIHJlbG9jX3Byb3BlcnR5KTsKKyAgICAgIGJyZWFrOworCisgICAg Y2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9BQlMzMjoKKyAgICAgIHJlbG9jX3N0 YXR1cyA9IFJlbG9jOjp0ZW1wbGF0ZSByZWxhX3VhPDMyPigKKwl2aWV3LCBv YmplY3QsIHBzeW12YWwsIGFkZGVuZCwgcmVsb2NfcHJvcGVydHkpOworICAg ICAgYnJlYWs7CisKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0FCUzE2 OgorICAgICAgcmVsb2Nfc3RhdHVzID0gUmVsb2M6OnRlbXBsYXRlIHJlbGFf dWE8MTY+KAorCXZpZXcsIG9iamVjdCwgcHN5bXZhbCwgYWRkZW5kLCByZWxv Y19wcm9wZXJ0eSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgZWxmY3Bw OjpSX0FBUkNINjRfUFJFTDY0OgorICAgICAgcmVsb2Nfc3RhdHVzID0gUmVs b2M6OnRlbXBsYXRlIHBjcmVsYV91YTw2ND4oCisJdmlldywgb2JqZWN0LCBw c3ltdmFsLCBhZGRlbmQsIGFkZHJlc3MsIHJlbG9jX3Byb3BlcnR5KTsKKwor ICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfUFJFTDMyOgorICAgICAgcmVs b2Nfc3RhdHVzID0gUmVsb2M6OnRlbXBsYXRlIHBjcmVsYV91YTwzMj4oCisJ dmlldywgb2JqZWN0LCBwc3ltdmFsLCBhZGRlbmQsIGFkZHJlc3MsIHJlbG9j X3Byb3BlcnR5KTsKKworICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfUFJF TDE2OgorICAgICAgcmVsb2Nfc3RhdHVzID0gUmVsb2M6OnRlbXBsYXRlIHBj cmVsYV91YTwxNj4oCisJdmlldywgb2JqZWN0LCBwc3ltdmFsLCBhZGRlbmQs IGFkZHJlc3MsIHJlbG9jX3Byb3BlcnR5KTsKKworICAgIGNhc2UgZWxmY3Bw OjpSX0FBUkNINjRfQURSX1BSRUxfUEdfSEkyMV9OQzoKKyAgICBjYXNlIGVs ZmNwcDo6Ul9BQVJDSDY0X0FEUl9QUkVMX1BHX0hJMjE6CisgICAgICByZWxv Y19zdGF0dXMgPSBSZWxvYzo6YWRycCh2aWV3LCBvYmplY3QsIHBzeW12YWws IGFkZGVuZCwgYWRkcmVzcywKKwkJCQkgcmVsb2NfcHJvcGVydHkpOworICAg ICAgYnJlYWs7CisKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0xEU1Q4 X0FCU19MTzEyX05DOgorICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfTERT VDE2X0FCU19MTzEyX05DOgorICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRf TERTVDMyX0FCU19MTzEyX05DOgorICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNI NjRfTERTVDY0X0FCU19MTzEyX05DOgorICAgIGNhc2UgZWxmY3BwOjpSX0FB UkNINjRfTERTVDEyOF9BQlNfTE8xMl9OQzoKKyAgICBjYXNlIGVsZmNwcDo6 Ul9BQVJDSDY0X0FERF9BQlNfTE8xMl9OQzoKKyAgICAgIHJlbG9jX3N0YXR1 cyA9IFJlbG9jOjp0ZW1wbGF0ZSByZWxhX2dlbmVyYWw8MzI+KAorCXZpZXcs IG9iamVjdCwgcHN5bXZhbCwgYWRkZW5kLCByZWxvY19wcm9wZXJ0eSk7Cisg ICAgICBicmVhazsKKworICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfQ0FM TDI2OgorICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfSlVNUDI2OgorICAg ICAgcmVsb2Nfc3RhdHVzID0gUmVsb2M6OnRlbXBsYXRlIHBjcmVsYV9nZW5l cmFsPDMyPigKKwl2aWV3LCBvYmplY3QsIHBzeW12YWwsIGFkZGVuZCwgYWRk cmVzcywgcmVsb2NfcHJvcGVydHkpOworICAgICAgYnJlYWs7CisKKyAgICBj YXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0FEUl9HT1RfUEFHRToKKyAgICAgIGdv bGRfYXNzZXJ0KGhhdmVfZ290X29mZnNldCk7CisgICAgICB2YWx1ZSA9IHRh cmdldC0+Z290Xy0+YWRkcmVzcygpICsgZ290X2Jhc2UgKyBnb3Rfb2Zmc2V0 OworICAgICAgcmVsb2Nfc3RhdHVzID0gUmVsb2M6OmFkcnAodmlldywgdmFs dWUgKyBhZGRlbmQsIGFkZHJlc3MpOworICAgICAgYnJlYWs7CisKKyAgICBj YXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0xENjRfR09UX0xPMTJfTkM6CisgICAg ICBnb2xkX2Fzc2VydChoYXZlX2dvdF9vZmZzZXQpOworICAgICAgdmFsdWUg PSB0YXJnZXQtPmdvdF8tPmFkZHJlc3MoKSArIGdvdF9iYXNlICsgZ290X29m ZnNldDsKKyAgICAgIHJlbG9jX3N0YXR1cyA9IFJlbG9jOjp0ZW1wbGF0ZSBy ZWxhX2dlbmVyYWw8MzI+KAorCXZpZXcsIHZhbHVlLCBhZGRlbmQsIHJlbG9j X3Byb3BlcnR5KTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAg ICAgIGdvbGRfZXJyb3JfYXRfbG9jYXRpb24ocmVsaW5mbywgcmVsbnVtLCBy ZWxhLmdldF9yX29mZnNldCgpLAorCQkJICAgICBfKCJ1bnN1cHBvcnRlZCBy ZWxvYyBhYWEgJXUiKSwKKwkJCSAgICAgcl90eXBlKTsKKyAgICAgIGJyZWFr OworICAgIH0KKworICAvLyBSZXBvcnQgYW55IGVycm9ycy4KKyAgc3dpdGNo IChyZWxvY19zdGF0dXMpCisgICAgeworICAgIGNhc2UgUmVsb2M6OlNUQVRV U19PS0FZOgorICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWxvYzo6U1RBVFVT X09WRVJGTE9XOgorICAgICAgZ29sZF9lcnJvcl9hdF9sb2NhdGlvbihyZWxp bmZvLCByZWxudW0sIHJlbGEuZ2V0X3Jfb2Zmc2V0KCksCisJCQkgICAgIF8o InJlbG9jYXRpb24gb3ZlcmZsb3cgaW4gJXMiKSwKKwkJCSAgICAgcmVsb2Nf cHJvcGVydHktPm5hbWUoKS5jX3N0cigpKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgUmVsb2M6OlNUQVRVU19CQURfUkVMT0M6CisgICAgICBnb2xkX2Vy cm9yX2F0X2xvY2F0aW9uKAorCSAgcmVsaW5mbywKKwkgIHJlbG51bSwKKwkg IHJlbGEuZ2V0X3Jfb2Zmc2V0KCksCisJICBfKCJ1bmV4cGVjdGVkIG9wY29k ZSB3aGlsZSBwcm9jZXNzaW5nIHJlbG9jYXRpb24gJXMiKSwKKwkgIHJlbG9j X3Byb3BlcnR5LT5uYW1lKCkuY19zdHIoKSk7CisgICAgICBicmVhazsKKyAg ICBkZWZhdWx0OgorICAgICAgZ29sZF91bnJlYWNoYWJsZSgpOworICAgIH0K KwogICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTMzOCwxOSArMjE3NCwzMSBA QCBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6UmVsb2NhdGU6 OnJlbG9jYXRlKAogdGVtcGxhdGU8aW50IHNpemUsIGJvb2wgYmlnX2VuZGlh bj4KIHZvaWQKIFRhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+Ojpy ZWxvY2F0ZV9zZWN0aW9uKAotICAgIGNvbnN0IFJlbG9jYXRlX2luZm88c2l6 ZSwgYmlnX2VuZGlhbj4qIC8qIHJlbGluZm8gKi8sCisgICAgY29uc3QgUmVs b2NhdGVfaW5mbzxzaXplLCBiaWdfZW5kaWFuPiogcmVsaW5mbywKICAgICB1 bnNpZ25lZCBpbnQgc2hfdHlwZSwKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFy KiAvKiBwcmVsb2NzICovLAotICAgIHNpemVfdCAvKiByZWxvY19jb3VudCAq LywKLSAgICBPdXRwdXRfc2VjdGlvbiogLyogb3V0cHV0X3NlY3Rpb24gKi8s Ci0gICAgYm9vbCAvKm5lZWRzX3NwZWNpYWxfb2Zmc2V0X2hhbmRsaW5nICov LAotICAgIHVuc2lnbmVkIGNoYXIqIC8qIHZpZXcgKi8sCi0gICAgdHlwZW5h bWUgZWxmY3BwOjpFbGZfdHlwZXM8c2l6ZT46OkVsZl9BZGRyIC8qIGFkZHJl c3MgKi8sCi0gICAgc2VjdGlvbl9zaXplX3R5cGUgLyogdmlld19zaXplICov LAotICAgIGNvbnN0IFJlbG9jX3N5bWJvbF9jaGFuZ2VzKiAvKiByZWxvY19z eW1ib2xfY2hhbmdlcyAqLykKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBw cmVsb2NzLAorICAgIHNpemVfdCByZWxvY19jb3VudCwKKyAgICBPdXRwdXRf c2VjdGlvbiogb3V0cHV0X3NlY3Rpb24sCisgICAgYm9vbCBuZWVkc19zcGVj aWFsX29mZnNldF9oYW5kbGluZywKKyAgICB1bnNpZ25lZCBjaGFyKiB2aWV3 LAorICAgIHR5cGVuYW1lIGVsZmNwcDo6RWxmX3R5cGVzPHNpemU+OjpFbGZf QWRkciBhZGRyZXNzLAorICAgIHNlY3Rpb25fc2l6ZV90eXBlIHZpZXdfc2l6 ZSwKKyAgICBjb25zdCBSZWxvY19zeW1ib2xfY2hhbmdlcyogcmVsb2Nfc3lt Ym9sX2NoYW5nZXMpCiB7Ci0gIC8vVE9ETwogICBnb2xkX2Fzc2VydChzaF90 eXBlID09IGVsZmNwcDo6U0hUX1JFTEEpOworICB0eXBlZGVmIHR5cGVuYW1l IFRhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpSZWxvY2F0ZSBB QXJjaDY0X3JlbG9jYXRlOworICBnb2xkOjpyZWxvY2F0ZV9zZWN0aW9uPHNp emUsIGJpZ19lbmRpYW4sIFRhcmdldF9hYXJjaDY0LCBlbGZjcHA6OlNIVF9S RUxBLAorCQkJIEFBcmNoNjRfcmVsb2NhdGUsIGdvbGQ6OkRlZmF1bHRfY29t ZGF0X2JlaGF2aW9yPigKKyAgICByZWxpbmZvLAorICAgIHRoaXMsCisgICAg cHJlbG9jcywKKyAgICByZWxvY19jb3VudCwKKyAgICBvdXRwdXRfc2VjdGlv biwKKyAgICBuZWVkc19zcGVjaWFsX29mZnNldF9oYW5kbGluZywKKyAgICB2 aWV3LAorICAgIGFkZHJlc3MsCisgICAgdmlld19zaXplLAorICAgIHJlbG9j X3N5bWJvbF9jaGFuZ2VzKTsKIH0KIAogLy8gUmV0dXJuIHRoZSBzaXplIG9m IGEgcmVsb2NhdGlvbiB3aGlsZSBzY2FubmluZyBkdXJpbmcgYSByZWxvY2F0 YWJsZQpAQCAtMTQxMiwzNiArMjI2MCw0NiBAQCBUYXJnZXRfYWFyY2g2NDxz aXplLCBiaWdfZW5kaWFuPjo6cmVsb2NhdGVfcmVsb2NzKAogICBnb2xkX2Fz c2VydChzaF90eXBlID09IGVsZmNwcDo6U0hUX1JFTEEpOwogfQogCi0KIC8v IFRoZSBzZWxlY3RvciBmb3IgYWFyY2g2NCBvYmplY3QgZmlsZXMuCiAKIHRl bXBsYXRlPGludCBzaXplLCBib29sIGJpZ19lbmRpYW4+CiBjbGFzcyBUYXJn ZXRfc2VsZWN0b3JfYWFyY2g2NCA6IHB1YmxpYyBUYXJnZXRfc2VsZWN0b3IK IHsKICBwdWJsaWM6Ci0gIFRhcmdldF9zZWxlY3Rvcl9hYXJjaDY0KCkKLSAg ICA6IFRhcmdldF9zZWxlY3RvcihlbGZjcHA6OkVNX0FBUkNINjQsIHNpemUs IGJpZ19lbmRpYW4sCi0gICAgICAgICAgICAgICAgICAgICAgKHNpemUgPT0g NjQKLSAgICAgICAgICAgICAgICAgICAgICAgPyAoYmlnX2VuZGlhbiA/ICJl bGY2NC1iaWdhYXJjaDY0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogImVsZjY0LWxpdHRsZWFhcmNoNjQiKQotICAgICAgICAg ICAgICAgICAgICAgICA6IChiaWdfZW5kaWFuID8gImVsZjMyLWJpZ2FhcmNo NjQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAi ZWxmMzItbGl0dGxlYWFyY2g2NCIpKSwKLSAgICAgICAgICAgICAgICAgICAg ICAoc2l6ZSA9PSA2NAotICAgICAgICAgICAgICAgICAgICAgICA/IChiaWdf ZW5kaWFuID8gImFhcmNoNjRfZWxmNjRfYmVfdmVjIgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogImFhcmNoNjRfZWxmNjRfbGVf dmVjIikKLSAgICAgICAgICAgICAgICAgICAgICAgOiAoYmlnX2VuZGlhbiA/ ICJhYXJjaDY0X2VsZjMyX2JlX3ZlYyIKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6ICJhYXJjaDY0X2VsZjMyX2xlX3ZlYyIpKSkK LSAgeyB9CisgIFRhcmdldF9zZWxlY3Rvcl9hYXJjaDY0KCk7CiAKICAgdmly dHVhbCBUYXJnZXQqCiAgIGRvX2luc3RhbnRpYXRlX3RhcmdldCgpCiAgIHsg cmV0dXJuIG5ldyBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPigp OyB9CiB9OwogCit0ZW1wbGF0ZTw+CitUYXJnZXRfc2VsZWN0b3JfYWFyY2g2 NDwzMiwgdHJ1ZT46OlRhcmdldF9zZWxlY3Rvcl9hYXJjaDY0KCkKKyAgOiBU YXJnZXRfc2VsZWN0b3IoZWxmY3BwOjpFTV9BQVJDSDY0LCAzMiwgdHJ1ZSwK KwkJICAgICJlbGYzMi1iaWdhYXJjaDY0IiwgImFhcmNoNjRfZWxmMzJfYmVf dmVjIikKK3sgfQorCit0ZW1wbGF0ZTw+CitUYXJnZXRfc2VsZWN0b3JfYWFy Y2g2NDwzMiwgZmFsc2U+OjpUYXJnZXRfc2VsZWN0b3JfYWFyY2g2NCgpCisg IDogVGFyZ2V0X3NlbGVjdG9yKGVsZmNwcDo6RU1fQUFSQ0g2NCwgMzIsIGZh bHNlLAorCQkgICAgImVsZjMyLWxpdHRsZWFhcmNoNjQiLCAiYWFyY2g2NF9l bGYzMl9sZV92ZWMiKQoreyB9CisKK3RlbXBsYXRlPD4KK1RhcmdldF9zZWxl Y3Rvcl9hYXJjaDY0PDY0LCB0cnVlPjo6VGFyZ2V0X3NlbGVjdG9yX2FhcmNo NjQoKQorICA6IFRhcmdldF9zZWxlY3RvcihlbGZjcHA6OkVNX0FBUkNINjQs IDY0LCB0cnVlLAorCQkgICAgImVsZjY0LWJpZ2FhcmNoNjQiLCAiYWFyY2g2 NF9lbGY2NF9iZV92ZWMiKQoreyB9CisKK3RlbXBsYXRlPD4KK1RhcmdldF9z ZWxlY3Rvcl9hYXJjaDY0PDY0LCBmYWxzZT46OlRhcmdldF9zZWxlY3Rvcl9h YXJjaDY0KCkKKyAgOiBUYXJnZXRfc2VsZWN0b3IoZWxmY3BwOjpFTV9BQVJD SDY0LCA2NCwgZmFsc2UsCisJCSAgICAiZWxmNjQtbGl0dGxlYWFyY2g2NCIs ICJhYXJjaDY0X2VsZjY0X2xlX3ZlYyIpCit7IH0KKwogVGFyZ2V0X3NlbGVj dG9yX2FhcmNoNjQ8MzIsIHRydWU+IHRhcmdldF9zZWxlY3Rvcl9hYXJjaDY0 ZWxmMzJiOwogVGFyZ2V0X3NlbGVjdG9yX2FhcmNoNjQ8MzIsIGZhbHNlPiB0 YXJnZXRfc2VsZWN0b3JfYWFyY2g2NGVsZjMyOwogVGFyZ2V0X3NlbGVjdG9y X2FhcmNoNjQ8NjQsIHRydWU+IHRhcmdldF9zZWxlY3Rvcl9hYXJjaDY0ZWxm YjsKIFRhcmdldF9zZWxlY3Rvcl9hYXJjaDY0PDY0LCBmYWxzZT4gdGFyZ2V0 X3NlbGVjdG9yX2FhcmNoNjRlbGY7CiAKLQogfSAvLyBFbmQgYW5vbnltb3Vz IG5hbWVzcGFjZS4K --001a113a923c60bf1d050012c8b9--