From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15231 invoked by alias); 8 Aug 2014 21:44:46 -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 15216 invoked by uid 89); 8 Aug 2014 21:44:45 -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-f47.google.com Received: from mail-qg0-f47.google.com (HELO mail-qg0-f47.google.com) (209.85.192.47) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Fri, 08 Aug 2014 21:44:44 +0000 Received: by mail-qg0-f47.google.com with SMTP id i50so6673414qgf.6 for ; Fri, 08 Aug 2014 14:44:41 -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=h1cAGezVRnQAyxNrsLbE3JoMcWED30i8KKIIt+Ohf2s=; b=cL9KGSSvnDqmxhCZBZPc2XRJpIm6jTfMjp1zV/Yyr5j12RDUcEssaMf17KN/DNik4b vSTqaL93jqrV71Ho3SXiQ3NENWELeKks1TM4Rw3pCYJe0X0Glyc6rRsklJ3Dm26ashFc OTOfWH/cA4SxwpLH/FQzuBwzye9zorZgfRo3oIea5dGjku6eWRVSZxbRT+OgFUzuvz9A qOFj2MJRKfIOcyavYRGLNBmBp97ughdQzUFF9cFhX63VDk5brjvdvyQ57ZkX/NgASGCR PFbcKnLEuDB5/ea6EI9nauoFHW5kWPdwnmRzCSVo8Wt5rA9ckQoxU0DzfoaRK4MI4RcD TpCQ== X-Gm-Message-State: ALoCoQkCwKIPQEe0U1nrRWbntbRWQJS+4BCrEjAROtmPXvKAEZh36E7Zu+llSjxKue9tpQCGeLSU MIME-Version: 1.0 X-Received: by 10.140.98.147 with SMTP id o19mr38472974qge.21.1407534281646; Fri, 08 Aug 2014 14:44:41 -0700 (PDT) Received: by 10.229.216.202 with HTTP; Fri, 8 Aug 2014 14:44:41 -0700 (PDT) In-Reply-To: References: Date: Fri, 08 Aug 2014 21:44: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=001a113a923cde3f3e0500251cbf X-SW-Source: 2014-08/txt/msg00066.txt.bz2 --001a113a923cde3f3e0500251cbf Content-Type: text/plain; charset=UTF-8 Content-length: 3175 Thanks! Patch attached (including gold/Makefile.in) was committed. On Fri, Aug 8, 2014 at 9:33 AM, Cary Coutant wrote: >> 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. > > +// Above is from Table 4-10, Relocations for control-fl > > Looks like this comment got truncated. > > +// Above is from Table 4-17, Initial Exec TLS relocatios, 539-543. > > "relocations" > > + Page(typename elfcpp::Elf_types::Elf_Addr address) > > It might be worth making a class-local typedef for this type. > > + return (address & > + (~(typename elfcpp::Elf_types::Elf_Addr)0xFFF)); > > Please use static_cast (which will be more manageable with the local typedef). > > OK with these changes (please post the patch as committed for > reference). Thanks! > > -cary --001a113a923cde3f3e0500251cbf Content-Type: application/octet-stream; name="gold.patch2" Content-Disposition: attachment; filename="gold.patch2" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hym1kc100 Content-length: 101732 ZGlmZiAtLWdpdCBhL2VsZmNwcC9DaGFuZ2VMb2cgYi9lbGZjcHAvQ2hhbmdl TG9nCmluZGV4IDA0M2ZiNjcuLmVhZmEyNTIgMTAwNjQ0Ci0tLSBhL2VsZmNw cC9DaGFuZ2VMb2cKKysrIGIvZWxmY3BwL0NoYW5nZUxvZwpAQCAtMSwzICsx LDcgQEAKKzIwMTQtMDgtMDggIEhhbiBTaGVuICA8c2hlbmhhbkBnb29nbGUu Y29tPgorCisJKiBhYXJjaDY0LmggKHdpdGhkcmF3bik6IFJlcGxhY2VkIHdp dGggUl9BQVJDSDY0X3dpdGhkcmF3bi4KKwogMjAxNC0wNy0yOSAgTWF0dGhl dyBGb3J0dW5lICA8bWF0dGhldy5mb3J0dW5lQGltZ3RlYy5jb20+CiAKIAkq IGVsZmNwcC5oIChQVF9NSVBTX0FCSUZMQUdTKTogTmV3IHByb2dyYW0gaGVh ZGVyIHR5cGUuCmRpZmYgLS1naXQgYS9lbGZjcHAvYWFyY2g2NC5oIGIvZWxm Y3BwL2FhcmNoNjQuaAppbmRleCA0ZDE4OThmLi41MmFjM2VhIDEwMDY0NAot LS0gYS9lbGZjcHAvYWFyY2g2NC5oCisrKyBiL2VsZmNwcC9hYXJjaDY0LmgK QEAgLTQ2LDcgKzQ2LDcgQEAgZW51bQogewogICAvLyBOdWxsIHJlbG9jYXRp b24gY29kZXMKICAgUl9BQVJDSDY0X05PTkUgPSAwLAkJLy8gTm9uZQotICB3 aXRoZHJhd24gPSAyNTYsCQkvLyBUcmVhdCBhcyBSX0FBUkNINjRfTk9ORQor ICBSX0FBUkNINjRfd2l0aGRyYXduID0gMjU2LAkvLyBUcmVhdCBhcyBSX0FB UkNINjRfTk9ORQogCiAgIC8vIFN0YXRpYyByZWxvY2F0aW9ucwogICBSX0FB UkNINjRfQUJTNjQgPSAyNTcsCS8vIFMgKyBBCmRpZmYgLS1naXQgYS9nb2xk L0NoYW5nZUxvZyBiL2dvbGQvQ2hhbmdlTG9nCmluZGV4IDllMWVmNjMuLjkw OTk3YmQgMTAwNjQ0Ci0tLSBhL2dvbGQvQ2hhbmdlTG9nCisrKyBiL2dvbGQv Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTQtMDgtMDggIEppbmcg WXUgIDxqaW5neXVAZ29vZ2xlLmNvbT4KKwkgICAgSGFuIFNoZW4gIDxzaGVu aGFuQGdvb2dsZS5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChIRklMRVMpOiBB ZGQgYWFyY2g2NC1yZWxvYy1wcm9wZXJ0eS5oLgorCShERUZGSUxFUyk6IGFk ZCBhYXJjaDY0LXJlbG9jLmRlZi4KKwkoVEFSR0VUU09VUkNFUyk6IEFkZCBh YXJjaDY0LXJlbG9jLXByb3BlcnR5LmNjLgorCShBTExfVEFSR0VUT0JKUyk6 IEFkZCBhYXJjaDY0LXJlbG9jLXByb3BlcnR5LiQoT0JKRVhUKS4KKwkqIE1h a2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogYWFyY2g2NC1yZWxvYy1wcm9w ZXJ0eS5jYzogTmV3IGZpbGUuCisJKiBhYXJjaDY0LXJlbG9jLXByb3BlcnR5 Lmg6IE5ldyBmaWxlLgorCSogYWFyY2g2NC1yZWxvYy5kZWY6IE5ldyBmaWxl LgorCSogYWFyY2g2NC5jYzogSW5jbHVkZSBhYXJjaDY0LXJlbG9jLXByb3Bl cnR5LmguIFJlcGxhY2Ugc3BhY2VzCisJd2l0aCB0YWIgdG8gbWFrZSB0aGUg Zm9ybWF0IGNvbnNpc3RlbnQuCisJKE91dHB1dF9kYXRhX2dvdF9hYXJjaDY0 OjpzeW1ib2xfdGFibGVfKTogTmV3IG1ldGhvZC4KKwkoVGFyZ2V0X2FhcmNo NjQ6OmRvX3BsdF9hZGRyZXNzX2Zvcl9nbG9iYWwpOiBOZXcgbWV0aG9kLgor CShUYXJnZXRfYWFyY2g2NDo6ZG9fcGx0X2FkZHJlc3NfZm9yX2xvY2FsKTog TmV3IG1ldGhvZC4KKwkoVGFyZ2V0X2FhcmNoNjQ6OmRvX3NlbGVjdF9hc19k ZWZhdWx0X3RhcmdldCk6IE5ldyBtZXRob2QuCisJKFRhcmdldF9hYXJjaDY0 Ojpkb19tYWtlX2RhdGFfcGx0KTogTmV3IG1ldGhvZC4KKwkoVGFyZ2V0X2Fh cmNoNjQ6Om1ha2VfZGF0YV9wbHQpOiBOZXcgbWV0aG9kLgorCShPdXRwdXRf ZGF0YV9wbHRfYWFyY2g2NDo6aGFzX2lyZWxhdGl2ZV9zZWN0aW9uKTogTmV3 IG1ldGhvZC4KKwkoT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjQ6OmFkZHJlc3Nf Zm9yX2dsb2JhbCk6IE5ldyBtZXRob2QuCisJKE91dHB1dF9kYXRhX3BsdF9h YXJjaDY0OjphZGRyZXNzX2Zvcl9sb2NhbCk6IE5ldyBtZXRob2QuCisJKE91 dHB1dF9kYXRhX3BsdF9hYXJjaDY0OjppcmVsYXRpdmVfcmVsXyk6IE5ldyBw YXJhbWV0ZXIuCisJKE91dHB1dF9kYXRhX3BsdF9hYXJjaDY0OjphZGRfZW50 cnkpOiBJbXBsZW1lbnQgY29udGVudHMuCisJKE91dHB1dF9kYXRhX3BsdF9h YXJjaDY0OjpzZXRfZmluYWxfZGF0YV9zaXplKTogRml4IHR5cG8uCisJKE91 dHB1dF9kYXRhX3BsdF9hYXJjaDY0Ojpkb193cml0ZSk6IFJlbW92ZSB1c2Vs ZXNzIGdvdF9iYXNlLiBTZXQKKwl0aGUgZ290X3BvdiBlbnRyeSB0byBwbHQw LgorCShPdXRwdXRfZGF0YV9wbHRfYWFyY2g2NF9zdGFuZGFyZDo6ZG9fZmls bF9maXJzdF9wbHRfZW50cnkpOgorCUltcGxlbWVudCBjb250ZW50cy4KKwko T3V0cHV0X2RhdGFfcGx0X2FhcmNoNjRfc3RhbmRhcmQ6OmRvX2ZpbGxfcGx0 X2VudHJ5KTogSW1wbGVtZW50LgorCShBQXJjaDY0X2hvd3RvKTogTmV3IHN0 cnVjdC4KKwkoYWFyY2g2NF9ob3d0b1tdKTogTmV3IHN0YXRpYyBjb25zdCBh cnJheS4KKwkoQUFyY2g2NF9yZWxvY2F0ZV9mdW5jdGlvbnMpOiBOZXcgY2xh c3MuCisJKFRhcmdldF9hYXJjaDY0OjpTY2FuOjpnZXRfcmVmZXJlbmNlX2Zs YWdzKTogUmVtb3ZlIG1ldGhvZC4KKwkoVGFyZ2V0X2FhcmNoNjQ6OlNjYW46 OmxvY2FsKTogSW1wbGVtZW50IHRvIHN1cHBvcnQgYSBmZXcgcmVsb2NhdGlv bnMuCisJKFRhcmdldF9hYXJjaDY0OjpTY2FuOjpnbG9iYWwpOiBJbXBsZW1l bnQgdG8gc3VwcG9ydCBhIGZldyByZWxvY2F0aW9ucy4KKwkoVGFyZ2V0X2Fh cmNoNjQ6Om1ha2VfcGx0X3NlY3Rpb24pOiBJbXBsZW1lbnQgY29udGVudHMu CisJKFRhcmdldF9hYXJjaDY0OjptYWtlX3BsdF9lbnRyeSk6IEltcGxlbWVu dCBjb250ZW50cy4KKwkoVGFyZ2V0X2FhcmNoNjQ6OmRvX2ZpbmFsaXplX3Nl Y3Rpb25zKTogSW1wbGVtZW50IGNvbnRlbnRzLgorCShUYXJnZXRfYWFyY2g2 NDo6UmVsb2NhdGU6OnJlbG9jYXRlKTogSW1wbGVtZW50IGEgZmV3IHJlbG9j YXRpb25zLgorCShUYXJnZXRfYWFyY2g2NDo6cmVsb2NhdGVfc2VjdGlvbik6 IEltcGxlbWVudCBjb250ZW50cy4KKwogMjAxNC0wOC0wNiAgQWxhbiBNb2Ry YSAgPGFtb2RyYUBnbWFpbC5jb20+CiAKIAkqIHRlc3RzdWl0ZS9kZWZzeW1f dGVzdC5zaDogQWxsb3cgcHBjNjRsZSBsb2NhbGVudHJ5IGFubm90YXRpb24u CmRpZmYgLS1naXQgYS9nb2xkL01ha2VmaWxlLmFtIGIvZ29sZC9NYWtlZmls ZS5hbQppbmRleCAxN2JhNGI0Li5kZjk5ZjIzIDEwMDY0NAotLS0gYS9nb2xk L01ha2VmaWxlLmFtCisrKyBiL2dvbGQvTWFrZWZpbGUuYW0KQEAgLTEwNiw2 ICsxMDYsNyBAQCBDQ0ZJTEVTID0gXAogCiBIRklMRVMgPSBcCiAJYXJtLXJl bG9jLXByb3BlcnR5LmggXAorCWFhcmNoNjQtcmVsb2MtcHJvcGVydHkuaCBc CiAJYXJjaGl2ZS5oIFwKIAlhdHRyaWJ1dGVzLmggXAogCWJpbmFyeS5oIFwK QEAgLTE1OCwxOCArMTU5LDE4IEBAIEhGSUxFUyA9IFwKIFlGSUxFUyA9IFwK IAl5eXNjcmlwdC55CiAKLURFRkZJTEVTID0gYXJtLXJlbG9jLmRlZgorREVG RklMRVMgPSBhcm0tcmVsb2MuZGVmIGFhcmNoNjQtcmVsb2MuZGVmCiAKIEVY VFJBX0RJU1QgPSB5eXNjcmlwdC5jIHl5c2NyaXB0LmgKIAogVEFSR0VUU09V UkNFUyA9IFwKIAlpMzg2LmNjIHg4Nl82NC5jYyBzcGFyYy5jYyBwb3dlcnBj LmNjIGFybS5jYyBhcm0tcmVsb2MtcHJvcGVydHkuY2MgdGlsZWd4LmNjIFwK LQltaXBzLmNjIGFhcmNoNjQuY2MKKwltaXBzLmNjIGFhcmNoNjQuY2MgYWFy Y2g2NC1yZWxvYy1wcm9wZXJ0eS5jYwogCiBBTExfVEFSR0VUT0JKUyA9IFwK IAlpMzg2LiQoT0JKRVhUKSB4ODZfNjQuJChPQkpFWFQpIHNwYXJjLiQoT0JK RVhUKSBwb3dlcnBjLiQoT0JKRVhUKSBcCiAJYXJtLiQoT0JKRVhUKSBhcm0t cmVsb2MtcHJvcGVydHkuJChPQkpFWFQpIHRpbGVneC4kKE9CSkVYVCkgXAot CW1pcHMuJChPQkpFWFQpIGFhcmNoNjQuJChPQkpFWFQpCisJbWlwcy4kKE9C SkVYVCkgYWFyY2g2NC4kKE9CSkVYVCkgYWFyY2g2NC1yZWxvYy1wcm9wZXJ0 eS4kKE9CSkVYVCkKIAogbGliZ29sZF9hX1NPVVJDRVMgPSAkKENDRklMRVMp ICQoSEZJTEVTKSAkKFlGSUxFUykgJChERUZGSUxFUykKIGxpYmdvbGRfYV9M SUJBREQgPSAkKExJQk9CSlMpCmRpZmYgLS1naXQgYS9nb2xkL01ha2VmaWxl LmluIGIvZ29sZC9NYWtlZmlsZS5pbgppbmRleCBhOGRkMTExLi5kNDA0NjY2 IDEwMDY0NAotLS0gYS9nb2xkL01ha2VmaWxlLmluCisrKyBiL2dvbGQvTWFr ZWZpbGUuaW4KQEAgLTQ3Nyw2ICs0NzcsNyBAQCBDQ0ZJTEVTID0gXAogCiBI RklMRVMgPSBcCiAJYXJtLXJlbG9jLXByb3BlcnR5LmggXAorCWFhcmNoNjQt cmVsb2MtcHJvcGVydHkuaCBcCiAJYXJjaGl2ZS5oIFwKIAlhdHRyaWJ1dGVz LmggXAogCWJpbmFyeS5oIFwKQEAgLTUyOSwxNiArNTMwLDE2IEBAIEhGSUxF UyA9IFwKIFlGSUxFUyA9IFwKIAl5eXNjcmlwdC55CiAKLURFRkZJTEVTID0g YXJtLXJlbG9jLmRlZgorREVGRklMRVMgPSBhcm0tcmVsb2MuZGVmIGFhcmNo NjQtcmVsb2MuZGVmCiBFWFRSQV9ESVNUID0geXlzY3JpcHQuYyB5eXNjcmlw dC5oCiBUQVJHRVRTT1VSQ0VTID0gXAogCWkzODYuY2MgeDg2XzY0LmNjIHNw YXJjLmNjIHBvd2VycGMuY2MgYXJtLmNjIGFybS1yZWxvYy1wcm9wZXJ0eS5j YyB0aWxlZ3guY2MgXAotCW1pcHMuY2MgYWFyY2g2NC5jYworCW1pcHMuY2Mg YWFyY2g2NC5jYyBhYXJjaDY0LXJlbG9jLXByb3BlcnR5LmNjCiAKIEFMTF9U QVJHRVRPQkpTID0gXAogCWkzODYuJChPQkpFWFQpIHg4Nl82NC4kKE9CSkVY VCkgc3BhcmMuJChPQkpFWFQpIHBvd2VycGMuJChPQkpFWFQpIFwKIAlhcm0u JChPQkpFWFQpIGFybS1yZWxvYy1wcm9wZXJ0eS4kKE9CSkVYVCkgdGlsZWd4 LiQoT0JKRVhUKSBcCi0JbWlwcy4kKE9CSkVYVCkgYWFyY2g2NC4kKE9CSkVY VCkKKwltaXBzLiQoT0JKRVhUKSBhYXJjaDY0LiQoT0JKRVhUKSBhYXJjaDY0 LXJlbG9jLXByb3BlcnR5LiQoT0JKRVhUKQogCiBsaWJnb2xkX2FfU09VUkNF UyA9ICQoQ0NGSUxFUykgJChIRklMRVMpICQoWUZJTEVTKSAkKERFRkZJTEVT KQogbGliZ29sZF9hX0xJQkFERCA9ICQoTElCT0JKUykKZGlmZiAtLWdpdCBh L2dvbGQvYWFyY2g2NC1yZWxvYy1wcm9wZXJ0eS5jYyBiL2dvbGQvYWFyY2g2 NC1yZWxvYy1wcm9wZXJ0eS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5iZWFlZDEwCi0tLSAvZGV2L251bGwKKysrIGIvZ29sZC9h YXJjaDY0LXJlbG9jLXByb3BlcnR5LmNjCkBAIC0wLDAgKzEsMTY0IEBACisv LyBhYXJjaDY0LXJlbG9jLXByb3BlcnR5LmNjIC0tIEFBcmNoNjQgcmVsb2Nh dGlvbiBwcm9wZXJ0aWVzICAgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0 IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8g V3JpdHRlbiBieSBIYW4gU2hlbiA8c2hlbmhhbkBnb29nbGUuY29tPiBhbmQg SmluZyBZdSA8amluZ3l1QGdvb2dsZS5jb20+LgorCisvLyBUaGlzIGZpbGUg aXMgcGFydCBvZiBnb2xkLgorCisvLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy8vIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExp Y2Vuc2UsIG9yCisvLyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorCisvLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRp b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBC b3N0b24sCisvLyBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyNpbmNsdWRlICJn b2xkLmgiCisKKyNpbmNsdWRlICJhYXJjaDY0LXJlbG9jLXByb3BlcnR5Lmgi CisjaW5jbHVkZSAiYWFyY2g2NC5oIgorCisjaW5jbHVkZSAic3ltdGFiLmgi CisKKyNpbmNsdWRlPHN0ZGlvLmg+CisKK25hbWVzcGFjZSBnb2xkCit7CisK K3RlbXBsYXRlPGludCBMLCBpbnQgVT4KK2Jvb2wKK3J2YWx1ZV9jaGVja3Vw KGludDY0X3QgeCkKK3sKKyAgLy8gV2Ugc2F2ZSB0aGUgZXh0cmFfYWxpZ25t ZW50X3JlcXVpcmVtZW50IGJpdHMgb24gWzMxOjE2XSBvZiBVLgorICAvLyAi ZXh0cmFfYWxpZ25tZW50X3JlcXVpcmVtZW50IiBjb3VsZCBiZSAwLCAxLCAz LCA3IGFuZCAxNS4KKyAgdW5zaWduZWQgc2hvcnQgZXh0cmFfYWxpZ25tZW50 X3JlcXVpcmVtZW50ID0gKFUgJiAweEZGRkYwMDAwKSA+PiAxNjsKKyAgLy8g WzE1OjBdIG9mIFUgaW5kaWNhdGVzIHRoZSB1cHBlciBib3VuZCBjaGVjay4K KyAgaW50NjRfdCB1ID0gVSAmIDB4MDAwMEZGRkY7CisgIGlmICh1ID09IDAp CisgICAgeworICAgICAgLy8gTm8gcmVxdWlyZW1lbnQgdG8gY2hlY2sgb3Zl cmZsb3cuCisgICAgICBnb2xkX2Fzc2VydChMID09IDApOworICAgICAgcmV0 dXJuICh4ICYgZXh0cmFfYWxpZ25tZW50X3JlcXVpcmVtZW50KSA9PSAwOwor ICAgIH0KKworICAvLyBDaGVjayBib3RoIG92ZXJmbG93IGFuZCBhbGlnbm1l bnQgaWYgbmVlZGVkLgorICBpbnQ2NF90IGxvd19ib3VuZCA9IC0oTCA9PSAw ID8gMCA6ICgoaW50NjRfdCkxIDw8IEwpKTsKKyAgaW50NjRfdCB1cF9ib3Vu ZCA9ICgoaW50NjRfdCkxIDw8IHUpOworICByZXR1cm4gKChsb3dfYm91bmQg PD0geCAmJiB4IDwgdXBfYm91bmQpCisJICAmJiAoKHggJiBleHRyYV9hbGln bm1lbnRfcmVxdWlyZW1lbnQpID09IDApKTsKK30KKwordGVtcGxhdGU8Pgor Ym9vbAorcnZhbHVlX2NoZWNrdXA8MCwgMD4oaW50NjRfdCkgeyByZXR1cm4g dHJ1ZTsgfQorCit0ZW1wbGF0ZTxpbnQgTCwgaW50IFU+Cit1aW50NjRfdAor cnZhbHVlX2JpdF9zZWxlY3QodWludDY0X3QgeCkKK3sKKyAgaWYgKFUgPT0g NjMpIHJldHVybiB4ID4+IEw7CisgIHJldHVybiAoeCAmICgoKHVpbnQ2NF90 KTEgPDwgKFUrMSkpIC0gMSkpID4+IEw7Cit9CisKK3RlbXBsYXRlPD4KK3Vp bnQ2NF90CitydmFsdWVfYml0X3NlbGVjdDwwLCAwPih1aW50NjRfdCB4KSB7 IHJldHVybiB4OyB9CisKK0FBcmNoNjRfcmVsb2NfcHJvcGVydHk6OkFBcmNo NjRfcmVsb2NfcHJvcGVydHkoCisgICAgdW5zaWduZWQgaW50IGNvZGUsCisg ICAgY29uc3QgY2hhciogbmFtZSwKKyAgICBSZWxvY190eXBlIHJ0eXBlLAor ICAgIFJlbG9jX2NsYXNzIHJjbGFzcywKKyAgICBib29sIGlzX2ltcGxlbWVu dGVkLAorICAgIGludCBncm91cF9pbmRleCwKKyAgICBpbnQgcmVmZXJlbmNl X2ZsYWdzLAorICAgIFJlbG9jX2luc3QgcmVsb2NfaW5zdCwKKyAgICBydmFs dWVfY2hlY2t1cF9mdW5jX3AgcnZhbHVlX2NoZWNrdXBfZnVuYywKKyAgICBy dmFsdWVfYml0X3NlbGVjdF9mdW5jIHJ2YWx1ZV9iaXRfc2VsZWN0KQorICA6 IGNvZGVfKGNvZGUpLCBuYW1lXyhuYW1lKSwgcmVsb2NfdHlwZV8ocnR5cGUp LCByZWxvY19jbGFzc18ocmNsYXNzKSwKKyAgICBncm91cF9pbmRleF8oZ3Jv dXBfaW5kZXgpLAorICAgIGlzX2ltcGxlbWVudGVkXyhpc19pbXBsZW1lbnRl ZCksCisgICAgcmVmZXJlbmNlX2ZsYWdzXyhyZWZlcmVuY2VfZmxhZ3MpLAor ICAgIHJlbG9jX2luc3RfKHJlbG9jX2luc3QpLAorICAgIHJ2YWx1ZV9jaGVj a3VwX2Z1bmNfKHJ2YWx1ZV9jaGVja3VwX2Z1bmMpLAorICAgIHJ2YWx1ZV9i aXRfc2VsZWN0X2Z1bmNfKHJ2YWx1ZV9iaXRfc2VsZWN0KQore30KKworQUFy Y2g2NF9yZWxvY19wcm9wZXJ0eV90YWJsZTo6QUFyY2g2NF9yZWxvY19wcm9w ZXJ0eV90YWJsZSgpCit7CisgIGNvbnN0IGJvb2wgWSh0cnVlKSwgTihmYWxz ZSk7CisgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgUHJvcGVydHlf dGFibGVfc2l6ZTsgKytpKQorICAgIHRhYmxlX1tpXSA9IE5VTEw7CisKKyNk ZWZpbmUgUkxfQ0hFQ0tfQUxJR04yICAgKDEgIDw8IDE2KQorI2RlZmluZSBS TF9DSEVDS19BTElHTjQgICAoMyAgPDwgMTYpCisjZGVmaW5lIFJMX0NIRUNL X0FMSUdOOCAgICg3ICA8PCAxNikKKyNkZWZpbmUgUkxfQ0hFQ0tfQUxJR04x NiAgKDE1IDw8IDE2KQorCisjdW5kZWYgQVJECisjZGVmaW5lIEFSRChybmFt ZSwgdHlwZSwgY2xhc3MsIGlzX2ltcGxlbWVudGVkLCBncm91cF9pbmRleCwg TEIsIFVCLCBCU0wsIEJTSCwgUkZMQUdTLCBpbnN0KSBcCisgICAgZG8gXAor ICAgICAgeyBcCisJaW50IHRpZHggPSBjb2RlX3RvX2FycmF5X2luZGV4KGVs ZmNwcDo6Ul9BQVJDSDY0XyMjcm5hbWUpOyBcCisJQUFyY2g2NF9yZWxvY19w cm9wZXJ0eSAqIHAgPSBuZXcgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eSggXAor CSAgZWxmY3BwOjpSX0FBUkNINjRfIyNybmFtZSwgIlJfQUFSQ0g2NF8iICNy bmFtZSwgXAorCSAgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eTo6UlRfIyN0eXBl LCBcCisJICBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5OjpSQ18jI2NsYXNzLCBc CisJICBpc19pbXBsZW1lbnRlZCwgXAorCSAgZ3JvdXBfaW5kZXgsIFwKKwkg IChSRkxBR1MpLCBcCisJICBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5OjpJTlNU XyMjaW5zdCwJXAorCSAgcnZhbHVlX2NoZWNrdXA8TEIsVUI+LCAgICBcCisJ ICBydmFsdWVfYml0X3NlbGVjdDxCU0wsQlNIPik7CQlcCisJdGFibGVfW3Rp ZHhdID0gcDsgXAorICAgICAgfSBcCisgICAgd2hpbGUgKDApOworI2luY2x1 ZGUiYWFyY2g2NC1yZWxvYy5kZWYiCisjdW5kZWYgQVJECit9CisKKy8vIFJl dHVybiBhIHN0cmluZyBkZXNjcmliaW5nIGEgcmVsb2NhdGlvbiBjb2RlIHRo YXQgZmFpbHMgdG8gZ2V0IGEKKy8vIHJlbG9jYXRpb24gcHJvcGVydHkgaW4g Z2V0X2ltcGxlbWVudGVkX3N0YXRpY19yZWxvY19wcm9wZXJ0eSgpLgorCitz dGQ6OnN0cmluZworQUFyY2g2NF9yZWxvY19wcm9wZXJ0eV90YWJsZTo6cmVs b2NfbmFtZV9pbl9lcnJvcl9tZXNzYWdlKHVuc2lnbmVkIGludCBjb2RlKQor eworICBnb2xkX2Fzc2VydChjb2RlIDwgUHJvcGVydHlfdGFibGVfc2l6ZSk7 CisKKyAgY29uc3QgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eSogYXJwID0gdGhp cy0+dGFibGVfW2NvZGVdOworCisgIGlmIChhcnAgPT0gTlVMTCkKKyAgICB7 CisgICAgICBjaGFyIGJ1ZmZlclsxMDBdOworICAgICAgc3ByaW50ZihidWZm ZXIsIF8oImludmFsaWQgcmVsb2MgJXUiKSwgY29kZSk7CisgICAgICByZXR1 cm4gc3RkOjpzdHJpbmcoYnVmZmVyKTsKKyAgICB9CisKKyAgLy8gZ29sZCBv bmx5IGltcGxlbWVudHMgc3RhdGljIHJlbG9jYXRpb24gY29kZXMuCisgIEFB cmNoNjRfcmVsb2NfcHJvcGVydHk6OlJlbG9jX3R5cGUgcmVsb2NfdHlwZSA9 IGFycC0+cmVsb2NfdHlwZSgpOworICBnb2xkX2Fzc2VydChyZWxvY190eXBl ID09IEFBcmNoNjRfcmVsb2NfcHJvcGVydHk6OlJUX1NUQVRJQworCSAgICAg IHx8ICFhcnAtPmlzX2ltcGxlbWVudGVkKCkpOworCisgIGNvbnN0IGNoYXIq IHByZWZpeCA9IE5VTEw7CisgIHN3aXRjaCAocmVsb2NfdHlwZSkKKyAgICB7 CisgICAgY2FzZSBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5OjpSVF9TVEFUSUM6 CisgICAgICBwcmVmaXggPSBhcnAtPmlzX2ltcGxlbWVudGVkKCkgPyBfKCJy ZWxvYyAiKSA6IF8oInVuaW1wbGVtZW50ZWQgcmVsb2MgIik7CisgICAgICBi cmVhazsKKyAgICBjYXNlIEFBcmNoNjRfcmVsb2NfcHJvcGVydHk6OlJUX0RZ TkFNSUM6CisgICAgICBwcmVmaXggPSBfKCJkeW5hbWljIHJlbG9jICIpOwor ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGdvbGRfdW5yZWFj aGFibGUoKTsKKyAgICB9CisgIHJldHVybiBzdGQ6OnN0cmluZyhwcmVmaXgp ICsgYXJwLT5uYW1lKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL2dvbGQvYWFy Y2g2NC1yZWxvYy1wcm9wZXJ0eS5oIGIvZ29sZC9hYXJjaDY0LXJlbG9jLXBy b3BlcnR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ZDhkMTMwMQotLS0gL2Rldi9udWxsCisrKyBiL2dvbGQvYWFyY2g2NC1yZWxv Yy1wcm9wZXJ0eS5oCkBAIC0wLDAgKzEsMjQ1IEBACisvLyBhYXJjaDY0LXJl bG9jLXByb3BlcnR5LmggLS0gQUFyY2g2NCByZWxvY2F0aW9uIHByb3BlcnRp ZXMgICAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTQgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLyBXcml0dGVuIGJ5IEhh biBTaGVuIDxzaGVuaGFuQGdvb2dsZS5jb20+IGFuZCBKaW5nIFl1IDxqaW5n eXVAZ29vZ2xlLmNvbT4uCisKKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGdv bGQuCisKKy8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy8v IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisvLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbiwgSW5jLiwgNTEg RnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwKKy8vIE1B IDAyMTEwLTEzMDEsIFVTQS4KKworI2lmbmRlZiBHT0xEX0FBUkNINjRfUkVM T0NfUFJPUEVSVFlfSAorI2RlZmluZSBHT0xEX0FBUkNINjRfUkVMT0NfUFJP UEVSVFlfSAorCisjaW5jbHVkZTx2ZWN0b3I+CisjaW5jbHVkZTxzdHJpbmc+ CisKKyNpbmNsdWRlImFhcmNoNjQuaCIKKworbmFtZXNwYWNlIGdvbGQKK3sK Ky8vIFRoZSBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5IGNsYXNzIGlzIHRvIHN0 b3JlIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhcgorLy8gcmVsb2Nh dGlvbiBjb2RlLgorCitjbGFzcyBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5Cit7 CisgcHVibGljOgorICAvLyBUeXBlcyBvZiByZWxvY2F0aW9uIGNvZGVzLgor ICBlbnVtIFJlbG9jX3R5cGUgeworICAgIFJUX05PTkUsCQkvLyBObyByZWxv Y2F0aW9uIHR5cGUuCisgICAgUlRfU1RBVElDLAkJLy8gUmVsb2NhdGlvbnMg cHJvY2Vzc2VkIGJ5IHN0YXRpYyBsaW5rZXJzLgorICAgIFJUX0RZTkFNSUMs CS8vIFJlbG9jYXRpb25zIHByb2Nlc3NlZCBieSBkeW5hbWljIGxpbmtlcnMu CisgIH07CisKKyAgLy8gQ2xhc3NlcyBvZiByZWxvY2F0aW9uIGNvZGVzLgor ICBlbnVtIFJlbG9jX2NsYXNzIHsKKyAgICBSQ19OT05FLAkJLy8gTm8gcmVs b2NhdGlvbiBjbGFzcy4KKyAgICBSQ19EQVRBLAkJLy8gRGF0YSByZWxvY2F0 aW9uLgorICAgIFJDX0FBUkNINjQsCQkvLyBTdGF0aWMgQUFyY2g2NCByZWxv Y2F0aW9ucworICAgIFJDX0NGTE9XLAkJLy8gQ29udHJvbCBmbG93CisgICAg UkNfVExTLAkJLy8gVGhyZWFkIGxvY2FsIHN0b3JhZ2UKKyAgICBSQ19EWU5B TUlDLAkJLy8gRHluYW1pYyByZWxvY2F0aW9uCisgIH07CisKKyAgLy8gSW5z dHJ1Y3Rpb25zIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCByZWxvY2F0aW9u cy4KKyAgZW51bSBSZWxvY19pbnN0IHsKKyAgICBJTlNUX0RBVEEgPSAwLAor ICAgIElOU1RfTU9WVyA9IDEsCS8vIG1vdnosIG1vdmssIG1vdm4KKyAgICBJ TlNUX0xEID0gMiwJLy8gbGQgbGl0ZXJhbAorICAgIElOU1RfQURSID0gMywJ Ly8gYWRyCisgICAgSU5TVF9BRFJQID0gNCwJLy8gYWRycAorICAgIElOU1Rf QUREID0gNSwJLy8gYWRkCisgICAgSU5TVF9MRFNUID0gNiwJLy8gbGQvc3QK KyAgICBJTlNUX1RCWk5aID0gNywJLy8gdGJ6L3RibnoKKyAgICBJTlNUX0NP TkRCID0gOCwJLy8gQi5jb25kCisgICAgSU5TVF9CID0gOSwJCS8vIGIgIFsy NTowXQorICAgIElOU1RfQ0FMTCA9IDEwLAkvLyBibCBbMjU6MF0KKyAgICBJ TlNUX05VTSA9IDExLAkvLyB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0 aGUgdGFibGUKKyAgfTsKKworICAvLyBUeXBlcyBvZiBiYXNlcyBvZiByZWxh dGl2ZSBhZGRyZXNzaW5nIHJlbG9jYXRpb24gY29kZXMuCisgIC8vIGVudW0g UmVsYXRpdmVfYWRkcmVzc19iYXNlIHsKKyAgLy8gICBSQUJfTk9ORSwJCS8v IFJlbG9jYXRpb24gaXMgbm90IHJlbGF0aXZlIGFkZHJlc3NpbmcKKyAgLy8g fTsKKworICB0eXBlZGVmIGJvb2wgKCpydmFsdWVfY2hlY2t1cF9mdW5jX3Ap KGludDY0X3QpOworICB0eXBlZGVmIHVpbnQ2NF90ICgqcnZhbHVlX2JpdF9z ZWxlY3RfZnVuYykodWludDY0X3QpOworCisgIC8vIFJlbG9jYXRpb24gY29k ZSByZXByZXNlbnRlZCBieSB0aGlzLgorICB1bnNpZ25lZCBpbnQKKyAgY29k ZSgpIGNvbnN0CisgIHsgcmV0dXJuIHRoaXMtPmNvZGVfOyB9CisKKyAgLy8g TmFtZSBvZiB0aGUgcmVsb2NhdGlvbiBjb2RlLgorICBjb25zdCBzdGQ6OnN0 cmluZyYKKyAgbmFtZSgpIGNvbnN0CisgIHsgcmV0dXJuIHRoaXMtPm5hbWVf OyB9CisKKyAgLy8gVHlwZSBvZiByZWxvY2F0aW9uIGNvZGUuCisgIFJlbG9j X3R5cGUKKyAgcmVsb2NfdHlwZSgpIGNvbnN0CisgIHsgcmV0dXJuIHRoaXMt PnJlbG9jX3R5cGVfOyB9CisKKyAgLy8gQ2xhc3Mgb2YgcmVsb2NhdGlvbiBj b2RlLgorICBSZWxvY19jbGFzcworICByZWxvY19jbGFzcygpIGNvbnN0Cisg IHsgcmV0dXJuIHRoaXMtPnJlbG9jX2NsYXNzXzsgfQorCisgIC8vIFdoZXRo ZXIgdGhpcyBjb2RlIGlzIGltcGxlbWVudGVkIGluIGdvbGQuCisgIGJvb2wK KyAgaXNfaW1wbGVtZW50ZWQoKSBjb25zdAorICB7IHJldHVybiB0aGlzLT5p c19pbXBsZW1lbnRlZF87IH0KKworICAvLyBJZiBjb2RlIGlzIGEgZ3JvdXAg cmVsb2NhdGlvbiBjb2RlLCByZXR1cm4gdGhlIGdyb3VwIG51bWJlciwgb3Ro ZXJ3aXNlIC0xLgorICBpbnQKKyAgZ3JvdXBfaW5kZXgoKSBjb25zdAorICB7 IHJldHVybiB0aGlzLT5ncm91cF9pbmRleF87IH0KKworICAvLyBSZXR1cm4g YWxpZ25tZW50IG9mIHJlbG9jYXRpb24uCisgIHNpemVfdAorICBhbGlnbigp IGNvbnN0CisgIHsgcmV0dXJuIHRoaXMtPmFsaWduXzsgfQorCisgIGludAor ICByZWZlcmVuY2VfZmxhZ3MoKSBjb25zdAorICB7IHJldHVybiB0aGlzLT5y ZWZlcmVuY2VfZmxhZ3NfOyB9CisKKyAgLy8gSW5zdHJ1Y3Rpb24gYXNzb2Np YXRlZCB3aXRoIHRoaXMgcmVsb2NhdGlvbi4KKyAgUmVsb2NfaW5zdAorICBy ZWxvY19pbnN0KCkgY29uc3QKKyAgeyByZXR1cm4gdGhpcy0+cmVsb2NfaW5z dF87IH0KKworICAvLyBDaGVjayBvdmVyZmxvdyBvZiB4CisgIGJvb2wgY2hl Y2t1cF94X3ZhbHVlKGludDY0X3QgeCkgY29uc3QKKyAgeyByZXR1cm4gdGhp cy0+cnZhbHVlX2NoZWNrdXBfZnVuY18oeCk7IH0KKworICAvLyBSZXR1cm4g cG9ydGlvbnMgb2YgeCBhcyBpcyBkZWZpbmVkIGluIGFhcmNoNjQtcmVsb2Mu ZGVmLgorICB1aW50NjRfdCBzZWxlY3RfeF92YWx1ZSh1aW50NjRfdCB4KSBj b25zdAorICB7IHJldHVybiB0aGlzLT5ydmFsdWVfYml0X3NlbGVjdF9mdW5j Xyh4KTsgfQorCisgcHJvdGVjdGVkOgorICAvLyBUaGVzZSBhcmUgcHJvdGVj dGVkLiAgV2Ugb25seSBhbGxvdyBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5X3Rh YmxlIHRvCisgIC8vIG1hbmFnZSBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5Lgor ICBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5KHVuc2lnbmVkIGludCBjb2RlLCBj b25zdCBjaGFyKiBuYW1lLCBSZWxvY190eXBlIHJ0eXBlLAorCQkJIFJlbG9j X2NsYXNzIHJjbGFzcywKKwkJCSBib29sIGlzX2ltcGxlbWVudGVkLAorCQkJ IGludCBncm91cF9pbmRleCwKKwkJCSBpbnQgcmVmZXJlbmNlX2ZsYWdzLAor CQkJIFJlbG9jX2luc3QgcmVsb2NfaW5zdCwKKwkJCSBydmFsdWVfY2hlY2t1 cF9mdW5jX3AgcnZhbHVlX2NoZWNrdXBfZnVuYywKKwkJCSBydmFsdWVfYml0 X3NlbGVjdF9mdW5jIHJ2YWx1ZV9iaXRfc2VsZWN0KTsKKworICBmcmllbmQg Y2xhc3MgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eV90YWJsZTsKKworIHByaXZh dGU6CisgIC8vIENvcHlpbmcgaXMgbm90IGFsbG93ZWQuCisgIEFBcmNoNjRf cmVsb2NfcHJvcGVydHkoY29uc3QgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eSYp OworICBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5JiBvcGVyYXRvcj0oY29uc3Qg QUFyY2g2NF9yZWxvY19wcm9wZXJ0eSYpOworCisgIC8vIFJlbG9jYXRpb24g Y29kZS4KKyAgY29uc3QgdW5zaWduZWQgaW50IGNvZGVfOworICAvLyBSZWxv Y2F0aW9uIG5hbWUuCisgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWVfOworICAv LyBUeXBlIG9mIHJlbG9jYXRpb24uCisgIFJlbG9jX3R5cGUgcmVsb2NfdHlw ZV87CisgIC8vIENsYXNzIG9mIHJlbG9jYXRpb24uCisgIFJlbG9jX2NsYXNz IHJlbG9jX2NsYXNzXzsKKyAgLy8gR3JvdXAgaW5kZXggKDAsIDEsIG9yIDIp IGlmIHRoaXMgaXMgYSBncm91cCByZWxvY2F0aW9uIG9yIC0xIG90aGVyd2lz ZS4KKyAgaW50IGdyb3VwX2luZGV4XzsKKyAgLy8gU2l6ZSBvZiByZWxvY2F0 aW9uLgorICBzaXplX3Qgc2l6ZV87CisgIC8vIEFsaWdubWVudCBvZiByZWxv Y2F0aW9uLgorICBzaXplX3QgYWxpZ25fOworICAvLyBSZWxhdGl2ZSBhZGRy ZXNzIGJhc2UuCisgIC8vIFJlbGF0aXZlX2FkZHJlc3NfYmFzZSByZWxhdGl2 ZV9hZGRyZXNzX2Jhc2VfOworICAvLyBXaGV0aGVyIHRoaXMgaXMgZGVwcmVj YXRlZC4KKyAgYm9vbCBpc19kZXByZWNhdGVkXyA6IDE7CisgIC8vIFdoZXRo ZXIgdGhpcyBpcyBpbXBsZW1lbnRlZCBpbiBnb2xkLgorICBib29sIGlzX2lt cGxlbWVudGVkXyA6IDE7CisgIC8vIFdoZXRoZXIgdGhpcyBjaGVja3Mgb3Zl cmZsb3cuCisgIGJvb2wgY2hlY2tzX292ZXJmbG93XyA6IDE7CisgIGNvbnN0 IGludCByZWZlcmVuY2VfZmxhZ3NfOworICAvLyBJbnN0cnVjdGlvbiBhc3Nv Y2lhdGVkIHdpdGggcmVsb2NhdGlvbi4KKyAgUmVsb2NfaW5zdCByZWxvY19p bnN0XzsKKyAgcnZhbHVlX2NoZWNrdXBfZnVuY19wIHJ2YWx1ZV9jaGVja3Vw X2Z1bmNfOworICBydmFsdWVfYml0X3NlbGVjdF9mdW5jIHJ2YWx1ZV9iaXRf c2VsZWN0X2Z1bmNfOworfTsKKworY2xhc3MgQUFyY2g2NF9yZWxvY19wcm9w ZXJ0eV90YWJsZQoreworIHB1YmxpYzoKKyAgQUFyY2g2NF9yZWxvY19wcm9w ZXJ0eV90YWJsZSgpOworCisgIGNvbnN0IEFBcmNoNjRfcmVsb2NfcHJvcGVy dHkqCisgIGdldF9yZWxvY19wcm9wZXJ0eSh1bnNpZ25lZCBpbnQgY29kZSkg Y29uc3QKKyAgeworICAgIHVuc2lnbmVkIGludCBpZHggPSBjb2RlX3RvX2Fy cmF5X2luZGV4KGNvZGUpOworICAgIHJldHVybiB0aGlzLT50YWJsZV9baWR4 XTsKKyAgfQorCisgIC8vIExpa2UgZ2V0X3JlbG9jX3Byb3BlcnR5IGJ1dCBv bmx5IHJldHVybiBub24tTlVMTCBpZiByZWxvY2F0aW9uIGNvZGUgaXMKKyAg Ly8gc3RhdGljIGFuZCBpbXBsZW1lbnRlZC4KKyAgY29uc3QgQUFyY2g2NF9y ZWxvY19wcm9wZXJ0eSoKKyAgZ2V0X2ltcGxlbWVudGVkX3N0YXRpY19yZWxv Y19wcm9wZXJ0eSh1bnNpZ25lZCBpbnQgY29kZSkgY29uc3QKKyAgeworICAg IHVuc2lnbmVkIGludCBpZHggPSBjb2RlX3RvX2FycmF5X2luZGV4KGNvZGUp OworICAgIGNvbnN0IEFBcmNoNjRfcmVsb2NfcHJvcGVydHkqIGFycCA9IHRo aXMtPnRhYmxlX1tpZHhdOworICAgIHJldHVybiAoKGFycCAhPSBOVUxMCisJ ICAgICAmJiAoYXJwLT5yZWxvY190eXBlKCkgPT0gQUFyY2g2NF9yZWxvY19w cm9wZXJ0eTo6UlRfU1RBVElDKQorCSAgICAgJiYgYXJwLT5pc19pbXBsZW1l bnRlZCgpKQorCSAgICA/IGFycAorCSAgICA6IE5VTEwpOworICB9CisKKyAg Ly8gUmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHJlbG9jYXRpb24g Y29kZSB0aGF0IGlzIG5vdAorICAvLyBhbiBpbXBsZW1lbnRlZCBzdGF0aWMg cmVsb2MgY29kZS4KKyAgc3RkOjpzdHJpbmcKKyAgcmVsb2NfbmFtZV9pbl9l cnJvcl9tZXNzYWdlKHVuc2lnbmVkIGludCBjb2RlKTsKKworIHByaXZhdGU6 CisgIC8vIENvcHlpbmcgaXMgbm90IGFsbG93ZWQuCisgIEFBcmNoNjRfcmVs b2NfcHJvcGVydHlfdGFibGUoY29uc3QgQUFyY2g2NF9yZWxvY19wcm9wZXJ0 eV90YWJsZSYpOworICBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5X3RhYmxlJiBv cGVyYXRvcj0oY29uc3QgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eV90YWJsZSYp OworCisgIC8vIE1hcCBhYXJjaDY0IHJ0eXBlcyBpbnRvIHJhbmdlKDAsMzAw KSBhcyBmb2xsb3dpbmcKKyAgLy8gICAyNTYgfiAzMTMgLT4gMCB+IDU3Cisg IC8vICAgNTEyIH4gNTczIC0+IDEyOCB+IDE4OQorICBpbnQKKyAgY29kZV90 b19hcnJheV9pbmRleCh1bnNpZ25lZCBpbnQgY29kZSkgY29uc3QKKyAgewor ICAgIGlmIChjb2RlID09IDApIHJldHVybiAwOworICAgIGlmICghKChjb2Rl ID49IGVsZmNwcDo6Ul9BQVJDSDY0X0FCUzY0ICYmCisJICAgY29kZSA8PSBl bGZjcHA6OlJfQUFSQ0g2NF9MRDY0X0dPVFBBR0VfTE8xNSkKKwkgIHx8IChj b2RlID49IGVsZmNwcDo6Ul9BQVJDSDY0X1RMU0dEX0FEUl9QUkVMMjEgJiYK KwkgICAgICBjb2RlIDw9IGVsZmNwcDo6Ul9BQVJDSDY0X1RMU0xEX0xEU1Qx MjhfRFRQUkVMX0xPMTJfTkMpKSkKKyAgICAgIHsKKwlnb2xkX2Vycm9yKF8o IkludmFsaWQvdW5yZWNvZ25pemVkIHJlbG9jIHJlbG9jICVkLiIpLCBjb2Rl KTsKKyAgICAgIH0KKyAgICB1bnNpZ25lZCBpbnQgcnYgPSAtMTsKKyAgICBp ZiAoY29kZSAmICgxIDw8IDkpKQorICAgICAgcnYgPSAxMjggKyBjb2RlIC0g NTEyOyAgLy8gNTEyIC0gNTczCisgICAgZWxzZSBpZiAoY29kZSAmICgxIDw8 IDgpKQorICAgICAgcnYgPSBjb2RlIC0gMjU2OyAgLy8gMjU2IC0gMzEzCisg ICAgZ29sZF9hc3NlcnQocnYgPD0gUHJvcGVydHlfdGFibGVfc2l6ZSk7Cisg ICAgcmV0dXJuIHJ2OworICB9CisKKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGludCBQcm9wZXJ0eV90YWJsZV9zaXplID0gMzAwOworICBBQXJjaDY0X3Jl bG9jX3Byb3BlcnR5KiB0YWJsZV9bUHJvcGVydHlfdGFibGVfc2l6ZV07Cit9 OyAgLy8gRW5kIG9mIGNsYXNzIEFBcmNoNjRfcmVsb2NfcHJvcGVydHlfdGFi bGUKKworfSAvLyBFbmQgbmFtZXNwYWNlIGdvbGQuCisKKyNlbmRpZiAvLyAh ZGVmaW5lZChHT0xEX0FBUkNINjRfUkVMT0NfUFJPUEVSVFlfSCkKZGlmZiAt LWdpdCBhL2dvbGQvYWFyY2g2NC1yZWxvYy5kZWYgYi9nb2xkL2FhcmNoNjQt cmVsb2MuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjRmNjcxMGUKLS0tIC9kZXYvbnVsbAorKysgYi9nb2xkL2FhcmNoNjQtcmVs b2MuZGVmCkBAIC0wLDAgKzEsNzAgQEAKKy8vIGFhcmNoNjQtcmVsb2MuZGVm IC0tIEFBcmNoNjQgcmVsb2NhdGlvbiBkZWZpbml0aW9ucy4KKworLy8gQ29w eXJpZ2h0IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgorLy8gV3JpdHRlbiBieSBIYW4gU2hlbiA8c2hlbmhhbkBnb29nbGUuY29t PiBhbmQgSmluZyBZdSA8amluZ3l1QGdvb2dsZS5jb20+LgorCisvLyBUaGlz IGZpbGUgaXMgcGFydCBvZiBnb2xkLgorCisvLyBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy8vIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2Yg dGhlIExpY2Vuc2UsIG9yCisvLyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorCisvLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZs b29yLCBCb3N0b24sCisvLyBNQSAwMjExMC0xMzAxLCBVU0EuCisvLworLy8K Ky8vCisvLyBJbnNuIG1vZGlmaWVkIGJ5IHJlbG9jYXRpb24sIHNlZSBlbnVt IFJlbG9jX2luc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKy8v IFN5bWJvbCByZWZlcmVuY2UgdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsJCSAgICAgICAgICAgICB8CisvLyBQb3J0aW9uIG9mZiBY IHRvIHJldHJpZXZlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICB8CQkg ICAgICAgICAgICAgfAorLy8gQ2hlY2tpbmcgZnVuY3Rpb24sIHNlZSBOb3Rl KEEpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAgfAkJICAgICAgICAgICAgIHwK Ky8vIEdyb3VwIGluZGV4LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgIHwgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgIHwJCSAgICAgICAgICAgICB8CisvLyBJbXBsZW1lbnRl ZC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rICAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8 CQkgICAgICAgICAgICAgfAorLy8gQ2xhc3MtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgfCAgICB8ICAgICAg fCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfAkJICAgICAgICAgICAg IHwKKy8vIFR5cGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAg ICAgIHwgICAgICAgICAgICAgIHwgICAgfCAgICAgIHwgICAgICAgICAgICAg ICAgICAgICAgIHwgICAgIHwJCSAgICAgICAgICAgICB8CisvLyBOYW1lICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAg ICAgICB8ICAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAg ICB8CQkgICAgICAgICAgICAgfAorLy8gIHwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICB8ICAg ICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfAkJICAgICAgICAg ICAgIHwKK0FSRChBQlM2NCAgICAgICAgICAgICAgICAgICAgICAgICwgU1RB VElDICwgIERBVEEgICAgICAgLCAgIFksICAtMSwgICAgMCwwICAgICAgICAg ICAgICAgICwgICAgMCwwICAsIFN5bWJvbDo6QUJTT0xVVEVfUkVGICwgREFU QSApCitBUkQoQUJTMzIgICAgICAgICAgICAgICAgICAgICAgICAsIFNUQVRJ QyAsICBEQVRBICAgICAgICwgICBZLCAgLTEsICAgMzEsMzIgICAgICAgICAg ICAgICAsICAgIDAsMCAgLCBTeW1ib2w6OkFCU09MVVRFX1JFRiAsIERBVEEg KQorQVJEKEFCUzE2ICAgICAgICAgICAgICAgICAgICAgICAgLCBTVEFUSUMg LCAgREFUQSAgICAgICAsICAgWSwgIC0xLCAgIDE1LDE2ICAgICAgICAgICAg ICAgLCAgICAwLDAgICwgU3ltYm9sOjpBQlNPTFVURV9SRUYgLCBEQVRBICkK K0FSRChQUkVMNjQgICAgICAgICAgICAgICAgICAgICAgICwgU1RBVElDICwg IERBVEEgICAgICAgLCAgIFksICAtMSwgICAgMCwwICAgICAgICAgICAgICAg ICwgICAgMCwwICAsIFN5bWJvbDo6UkVMQVRJVkVfUkVGICwgREFUQSApCitB UkQoUFJFTDMyICAgICAgICAgICAgICAgICAgICAgICAsIFNUQVRJQyAsICBE QVRBICAgICAgICwgICBZLCAgLTEsICAgMzEsMzIgICAgICAgICAgICAgICAs ICAgIDAsMCAgLCBTeW1ib2w6OlJFTEFUSVZFX1JFRiAsIERBVEEgKQorQVJE KFBSRUwxNiAgICAgICAgICAgICAgICAgICAgICAgLCBTVEFUSUMgLCAgREFU QSAgICAgICAsICAgWSwgIC0xLCAgIDE1LDE2ICAgICAgICAgICAgICAgLCAg ICAwLDAgICwgU3ltYm9sOjpSRUxBVElWRV9SRUYgLCBEQVRBICkKKy8vIEFi b3ZlIGlzIGZyb20gVGFibGUgNC02LCBEYXRhIHJlbG9jYXRpb25zLCAyNTct MjYyLgorCitBUkQoQURSX1BSRUxfUEdfSEkyMSAgICAgICAgICAgICAsIFNU QVRJQyAsICBBQVJDSDY0ICAgICwgICBZLCAgLTEsICAgMzIsMzIgICAgICAg ICAgICAgICAsICAgMTIsMzIgLCBTeW1ib2w6OlJFTEFUSVZFX1JFRiAsIEFE UlAgKQorQVJEKEFEUl9QUkVMX1BHX0hJMjFfTkMgICAgICAgICAgLCBTVEFU SUMgLCAgQUFSQ0g2NCAgICAsICAgWSwgIC0xLCAgICAwLDAgICAgICAgICAg ICAgICAgLCAgIDEyLDMyICwgU3ltYm9sOjpSRUxBVElWRV9SRUYgLCBBRFJQ ICkKK0FSRChMRFNUOF9BQlNfTE8xMl9OQyAgICAgICAgICAgICwgU1RBVElD ICwgIEFBUkNINjQgICAgLCAgIFksICAtMSwgICAgMCwwICAgICAgICAgICAg ICAgICwgICAgMCwxMSAsIFN5bWJvbDo6QUJTT0xVVEVfUkVGICwgTERTVCAp CitBUkQoTERTVDE2X0FCU19MTzEyX05DICAgICAgICAgICAsIFNUQVRJQyAs ICBBQVJDSDY0ICAgICwgICBZLCAgLTEsICAgIDAsUkxfQ0hFQ0tfQUxJR04y ICAsICAgIDEsMTEgLCBTeW1ib2w6OkFCU09MVVRFX1JFRiAsIExEU1QgKQor QVJEKExEU1QzMl9BQlNfTE8xMl9OQyAgICAgICAgICAgLCBTVEFUSUMgLCAg QUFSQ0g2NCAgICAsICAgWSwgIC0xLCAgICAwLFJMX0NIRUNLX0FMSUdONCAg LCAgICAyLDExICwgU3ltYm9sOjpBQlNPTFVURV9SRUYgLCBMRFNUICkKK0FS RChMRFNUNjRfQUJTX0xPMTJfTkMgICAgICAgICAgICwgU1RBVElDICwgIEFB UkNINjQgICAgLCAgIFksICAtMSwgICAgMCxSTF9DSEVDS19BTElHTjggICwg ICAgMywxMSAsIFN5bWJvbDo6QUJTT0xVVEVfUkVGICwgTERTVCApCitBUkQo TERTVDEyOF9BQlNfTE8xMl9OQyAgICAgICAgICAsIFNUQVRJQyAsICBBQVJD SDY0ICAgICwgICBZLCAgLTEsICAgIDAsUkxfQ0hFQ0tfQUxJR04xNiAsICAg IDQsMTEgLCBTeW1ib2w6OkFCU09MVVRFX1JFRiAsIExEU1QgKQorQVJEKEFE RF9BQlNfTE8xMl9OQyAgICAgICAgICAgICAgLCBTVEFUSUMgLCAgQUFSQ0g2 NCAgICAsICAgWSwgIC0xLCAgICAwLDAgICAgICAgICAgICAgICAgLCAgICAw LDExICwgU3ltYm9sOjpBQlNPTFVURV9SRUYgLCBBREQgKQorQVJEKEFEUl9H T1RfUEFHRSAgICAgICAgICAgICAgICAgLCBTVEFUSUMgLCAgQUFSQ0g2NCAg ICAsICAgWSwgIC0xLCAgIDMyLDMyICAgICAgICAgICAgICAgLCAgIDEyLDMy ICwgU3ltYm9sOjpSRUxBVElWRV9SRUYgLCBBRFJQICkKK0FSRChMRDY0X0dP VF9MTzEyX05DICAgICAgICAgICAgICwgU1RBVElDICwgIEFBUkNINjQgICAg LCAgIFksICAtMSwgICAgMCxSTF9DSEVDS19BTElHTjggICwgICAgMywxMSAs IFN5bWJvbDo6QUJTT0xVVEVfUkVGICwgTERTVCApCitBUkQoVFNUQlIxNCAg ICAgICAgICAgICAgICAgICAgICAsIFNUQVRJQyAsICBDRkxPVyAgICAgICwg ICBOLCAgLTEsICAgMTUsMTUgICAgICAgICAgICAgICAsICAgIDIsMTUgLCBT eW1ib2w6OkFCU09MVVRFX1JFRiAsIFRCWk5aICkKK0FSRChDT05EQlIxOSAg ICAgICAgICAgICAgICAgICAgICwgU1RBVElDICwgIENGTE9XICAgICAgLCAg IE4sICAtMSwgICAyMCwyMCAgICAgICAgICAgICAgICwgICAgMiwyMCAsIFN5 bWJvbDo6QUJTT0xVVEVfUkVGICwgQ09OREIgKQorQVJEKENBTEwyNiAgICAg ICAgICAgICAgICAgICAgICAgLCBTVEFUSUMgLCAgQ0ZMT1cgICAgICAsICAg WSwgIC0xLCAgIDI3LDI3ICAgICAgICAgICAgICAgLCAgICAyLDI3ICwgKFN5 bWJvbDo6RlVOQ1RJT05fQ0FMTHxTeW1ib2w6OlJFTEFUSVZFX1JFRikgLCBD QUxMICkKK0FSRChKVU1QMjYgICAgICAgICAgICAgICAgICAgICAgICwgU1RB VElDICwgIENGTE9XICAgICAgLCAgIFksICAtMSwgICAyNywyNyAgICAgICAg ICAgICAgICwgICAgMiwyNyAsIChTeW1ib2w6OkZVTkNUSU9OX0NBTEx8U3lt Ym9sOjpSRUxBVElWRV9SRUYpICwgQiApCisvLyBBYm92ZSBpcyBmcm9tIFRh YmxlIDQtMTAsIFJlbG9jYXRpb25zIGZvciBjb250cm9sLWZsb3cgaW5zdHJ1 Y3Rpb25zLAorLy8gMjc5LTI4My4KKworQVJEKFRMU0lFX01PVldfR09UVFBS RUxfRzEgICAgICAgLCBTVEFUSUMgLCAgQUFSQ0g2NCAgICAsICAgTiwgIC0x LCAgICAwLDAgICAgICAgICAgICAgICAgLCAgIDE2LDMxICwgU3ltYm9sOjpB QlNPTFVURV9SRUYgLCBNT1ZXICkKK0FSRChUTFNJRV9NT1ZXX0dPVFRQUkVM X0cwX05DICAgICwgU1RBVElDICwgIEFBUkNINjQgICAgLCAgIE4sICAtMSwg ICAgMCwwICAgICAgICAgICAgICAgICwgICAgMCwxNSAsIFN5bWJvbDo6QUJT T0xVVEVfUkVGICwgTU9WVyApCitBUkQoVExTSUVfQURSX0dPVFRQUkVMX1BB R0UyMSAgICAsIFNUQVRJQyAsICBBQVJDSDY0ICAgICwgICBZLCAgLTEsICAg MzIsMzIgICAgICAgICAgICAgICAsICAgMTIsMzIgLCBTeW1ib2w6OkFCU09M VVRFX1JFRiAsIEFEUlAgKQorQVJEKFRMU0lFX0xENjRfR09UVFBSRUxfTE8x Ml9OQyAgLCBTVEFUSUMgLCAgQUFSQ0g2NCAgICAsICAgTiwgIC0xLCAgIDMy LDMyICAgICAgICAgICAgICAgLCAgIDEyLDMyICwgU3ltYm9sOjpBQlNPTFVU RV9SRUYgLCBMRFNUICkKK0FSRChUTFNJRV9MRF9HT1RUUFJFTF9QUkVMMTkg ICAgICwgU1RBVElDICwgIEFBUkNINjQgICAgLCAgIE4sICAtMSwgICAyMCwy MCAgICAgICAgICAgICAgICwgICAgMiwyMCAsIFN5bWJvbDo6QUJTT0xVVEVf UkVGICwgTEQgKQorLy8gQWJvdmUgaXMgZnJvbSBUYWJsZSA0LTE3LCBJbml0 aWFsIEV4ZWMgVExTIHJlbG9jYXRpb25zLCA1MzktNTQzLgorCisvLyBOb3Rl IC0KKy8vIEEgLSBDaGVja2luZyBYLCAoTCxVKSwgaWYgTCA9PSAwICYmIFUg PT0gMCwgbm8gY2hlY2suIE90aGVyd2lzZSwgTCE9MCwKKy8vICAgICBjaGVj ayB0aGF0IC0yXkw8PVg8Ml5VLiBBbHNvIGFuIGV4dHJhIGFsaWdubWVudCBj aGVjayBjb3VsZCBiZSBlbWJlZGVkCisvLyAgICAgaW50byBVLgpkaWZmIC0t Z2l0IGEvZ29sZC9hYXJjaDY0LmNjIGIvZ29sZC9hYXJjaDY0LmNjCmluZGV4 IDE3ZmUwMzEuLjdhM2ZlM2IgMTAwNjQ0Ci0tLSBhL2dvbGQvYWFyY2g2NC5j YworKysgYi9nb2xkL2FhcmNoNjQuY2MKQEAgLTEsNyArMSw3IEBACiAvLyBh YXJjaDY0LmNjIC0tIGFhcmNoNjQgdGFyZ2V0IHN1cHBvcnQgZm9yIGdvbGQu CiAKIC8vIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KLS8vIFdyaXR0ZW4gYnkgSmluZyBZdSA8amluZ3l1QGdv b2dsZS5jb20+LgorLy8gV3JpdHRlbiBieSBKaW5nIFl1IDxqaW5neXVAZ29v Z2xlLmNvbT4gYW5kIEhhbiBTaGVuIDxzaGVuaGFuQGdvb2dsZS5jb20+Lgog CiAvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBnb2xkLgogCkBAIC00Miw2ICs0 Miw3IEBACiAjaW5jbHVkZSAibmFjbC5oIgogI2luY2x1ZGUgImdjLmgiCiAj aW5jbHVkZSAiaWNmLmgiCisjaW5jbHVkZSAiYWFyY2g2NC1yZWxvYy1wcm9w ZXJ0eS5oIgogCiAvLyBUaGUgZmlyc3QgdGhyZWUgLmdvdC5wbHQgZW50cmll cyBhcmUgcmVzZXJ2ZWQuCiBjb25zdCBpbnQzMl90IEFBUkNINjRfR09UUExU X1JFU0VSVkVfQ09VTlQgPSAzOwpAQCAtNjAsNiArNjEsOSBAQCBjbGFzcyBP dXRwdXRfZGF0YV9wbHRfYWFyY2g2NF9zdGFuZGFyZDsKIHRlbXBsYXRlPGlu dCBzaXplLCBib29sIGJpZ19lbmRpYW4+CiBjbGFzcyBUYXJnZXRfYWFyY2g2 NDsKIAordGVtcGxhdGU8aW50IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4KK2Ns YXNzIEFBcmNoNjRfcmVsb2NhdGVfZnVuY3Rpb25zOworCiAvLyBPdXRwdXRf ZGF0YV9nb3RfYWFyY2g2NCBjbGFzcy4KIAogdGVtcGxhdGU8aW50IHNpemUs IGJvb2wgYmlnX2VuZGlhbj4KQEAgLTY4LDcgKzcyLDggQEAgY2xhc3MgT3V0 cHV0X2RhdGFfZ290X2FhcmNoNjQgOiBwdWJsaWMgT3V0cHV0X2RhdGFfZ290 PHNpemUsIGJpZ19lbmRpYW4+CiAgcHVibGljOgogICB0eXBlZGVmIHR5cGVu YW1lIGVsZmNwcDo6RWxmX3R5cGVzPHNpemU+OjpFbGZfQWRkciBWYWx0eXBl OwogICBPdXRwdXRfZGF0YV9nb3RfYWFyY2g2NChTeW1ib2xfdGFibGUqIHN5 bXRhYiwgTGF5b3V0KiBsYXlvdXQpCi0gICAgOiBPdXRwdXRfZGF0YV9nb3Q8 c2l6ZSwgYmlnX2VuZGlhbj4oKSwgbGF5b3V0XyhsYXlvdXQpCisgICAgOiBP dXRwdXRfZGF0YV9nb3Q8c2l6ZSwgYmlnX2VuZGlhbj4oKSwKKyAgICAgIHN5 bWJvbF90YWJsZV8oc3ltdGFiKSwgbGF5b3V0XyhsYXlvdXQpCiAgIHsgfQog CiAgcHJvdGVjdGVkOgpAQCAtODQsMTEgKzg5LDE1IEBAIGNsYXNzIE91dHB1 dF9kYXRhX2dvdF9hYXJjaDY0IDogcHVibGljIE91dHB1dF9kYXRhX2dvdDxz aXplLCBiaWdfZW5kaWFuPgogICB9CiAKICBwcml2YXRlOgorICAvLyBTeW1i b2wgdGFibGUgb2YgdGhlIG91dHB1dCBvYmplY3QuCisgIFN5bWJvbF90YWJs ZSogc3ltYm9sX3RhYmxlXzsKICAgLy8gQSBwb2ludGVyIHRvIHRoZSBMYXlv dXQgY2xhc3MsIHNvIHRoYXQgd2UgY2FuIGZpbmQgdGhlIC5keW5hbWljCiAg IC8vIHNlY3Rpb24gd2hlbiB3ZSB3cml0ZSBvdXQgdGhlIEdPVCBzZWN0aW9u LgogICBMYXlvdXQqIGxheW91dF87CiB9OwogCitBQXJjaDY0X3JlbG9jX3By b3BlcnR5X3RhYmxlKiBhYXJjaDY0X3JlbG9jX3Byb3BlcnR5X3RhYmxlID0g TlVMTDsKKwogLy8gVGhlIGFhcmNoNjQgdGFyZ2V0IGNsYXNzLgogLy8gU2Vl IHRoZSBBQkkgYXQKIC8vIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVs cC90b3BpYy9jb20uYXJtLmRvYy5paGkwMDU2Yi9JSEkwMDU2Ql9hYWVsZjY0 LnBkZgpAQCAtMTg0LDYgKzE5MywxNSBAQCBjbGFzcyBUYXJnZXRfYWFyY2g2 NCA6IHB1YmxpYyBTaXplZF90YXJnZXQ8c2l6ZSwgYmlnX2VuZGlhbj4KICAg ICAgIHVuc2lnbmVkIGNoYXIqIHJlbG9jX3ZpZXcsCiAgICAgICBzZWN0aW9u X3NpemVfdHlwZSByZWxvY192aWV3X3NpemUpOwogCisgIC8vIFJldHVybiB0 aGUgUExUIHNlY3Rpb24uCisgIHVpbnQ2NF90CisgIGRvX3BsdF9hZGRyZXNz X2Zvcl9nbG9iYWwoY29uc3QgU3ltYm9sKiBnc3ltKSBjb25zdAorICB7IHJl dHVybiB0aGlzLT5wbHRfc2VjdGlvbigpLT5hZGRyZXNzX2Zvcl9nbG9iYWwo Z3N5bSk7IH0KKworICB1aW50NjRfdAorICBkb19wbHRfYWRkcmVzc19mb3Jf bG9jYWwoY29uc3QgUmVsb2JqKiByZWxvYmosIHVuc2lnbmVkIGludCBzeW1u ZHgpIGNvbnN0CisgIHsgcmV0dXJuIHRoaXMtPnBsdF9zZWN0aW9uKCktPmFk ZHJlc3NfZm9yX2xvY2FsKHJlbG9iaiwgc3ltbmR4KTsgfQorCiAgIC8vIFJl dHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIFBMVC4KICAgdW5z aWduZWQgaW50CiAgIHBsdF9lbnRyeV9jb3VudCgpIGNvbnN0OwpAQCAtMTk2 LDYgKzIxNCwyNyBAQCBjbGFzcyBUYXJnZXRfYWFyY2g2NCA6IHB1YmxpYyBT aXplZF90YXJnZXQ8c2l6ZSwgYmlnX2VuZGlhbj4KICAgdW5zaWduZWQgaW50 CiAgIHBsdF9lbnRyeV9zaXplKCkgY29uc3Q7CiAKKyBwcm90ZWN0ZWQ6Cisg IHZvaWQKKyAgZG9fc2VsZWN0X2FzX2RlZmF1bHRfdGFyZ2V0KCkKKyAgewor ICAgIGdvbGRfYXNzZXJ0KGFhcmNoNjRfcmVsb2NfcHJvcGVydHlfdGFibGUg PT0gTlVMTCk7CisgICAgYWFyY2g2NF9yZWxvY19wcm9wZXJ0eV90YWJsZSA9 IG5ldyBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5X3RhYmxlKCk7CisgIH0KKwor ICB2aXJ0dWFsIE91dHB1dF9kYXRhX3BsdF9hYXJjaDY0PHNpemUsIGJpZ19l bmRpYW4+KgorICBkb19tYWtlX2RhdGFfcGx0KExheW91dCogbGF5b3V0LCBP dXRwdXRfZGF0YV9zcGFjZSogZ290X3BsdCkKKyAgeworICAgIHJldHVybiBu ZXcgT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjRfc3RhbmRhcmQ8c2l6ZSwgYmln X2VuZGlhbj4obGF5b3V0LAorCQkJCQkJCQkgIGdvdF9wbHQpOworICB9CisK KyAgT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj4q CisgIG1ha2VfZGF0YV9wbHQoTGF5b3V0KiBsYXlvdXQsIE91dHB1dF9kYXRh X3NwYWNlKiBnb3RfcGx0KQorICB7CisgICAgcmV0dXJuIHRoaXMtPmRvX21h a2VfZGF0YV9wbHQobGF5b3V0LCBnb3RfcGx0KTsKKyAgfQorCiAgcHJpdmF0 ZToKICAgLy8gVGhlIGNsYXNzIHdoaWNoIHNjYW5zIHJlbG9jYXRpb25zLgog ICBjbGFzcyBTY2FuCkBAIC0yMDUsOSArMjQ0LDYgQEAgY2xhc3MgVGFyZ2V0 X2FhcmNoNjQgOiBwdWJsaWMgU2l6ZWRfdGFyZ2V0PHNpemUsIGJpZ19lbmRp YW4+CiAgICAgICA6IGlzc3VlZF9ub25fcGljX2Vycm9yXyhmYWxzZSkKICAg ICB7IH0KIAotICAgIHN0YXRpYyBpbmxpbmUgaW50Ci0gICAgZ2V0X3JlZmVy ZW5jZV9mbGFncyh1bnNpZ25lZCBpbnQgcl90eXBlKTsKLQogICAgIGlubGlu ZSB2b2lkCiAgICAgbG9jYWwoU3ltYm9sX3RhYmxlKiBzeW10YWIsIExheW91 dCogbGF5b3V0LCBUYXJnZXRfYWFyY2g2NCogdGFyZ2V0LAogCSAgU2l6ZWRf cmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj4qIG9iamVjdCwKQEAgLTIy NywyMyArMjYzLDIzIEBAIGNsYXNzIFRhcmdldF9hYXJjaDY0IDogcHVibGlj IFNpemVkX3RhcmdldDxzaXplLCBiaWdfZW5kaWFuPgogCiAgICAgaW5saW5l IGJvb2wKICAgICBsb2NhbF9yZWxvY19tYXlfYmVfZnVuY3Rpb25fcG9pbnRl cihTeW1ib2xfdGFibGUqICwgTGF5b3V0KiAsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwg YmlnX2VuZGlhbj4qICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTaXplZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5kaWFu PiogLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0X3NlY3Rpb24qICwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGZjcHA6OlJlbGE8 c2l6ZSwgYmlnX2VuZGlhbj4mICwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcl90eXBlLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZmNw cDo6U3ltPHNpemUsIGJpZ19lbmRpYW4+Jik7CisJCQkJCVRhcmdldF9hYXJj aDY0PHNpemUsIGJpZ19lbmRpYW4+KiAsCisJCQkJCVNpemVkX3JlbG9ial9m aWxlPHNpemUsIGJpZ19lbmRpYW4+KiAsCisJCQkJCXVuc2lnbmVkIGludCAs CisJCQkJCU91dHB1dF9zZWN0aW9uKiAsCisJCQkJCWNvbnN0IGVsZmNwcDo6 UmVsYTxzaXplLCBiaWdfZW5kaWFuPiYgLAorCQkJCQl1bnNpZ25lZCBpbnQg cl90eXBlLAorCQkJCQljb25zdCBlbGZjcHA6OlN5bTxzaXplLCBiaWdfZW5k aWFuPiYpOwogCiAgICAgaW5saW5lIGJvb2wKICAgICBnbG9iYWxfcmVsb2Nf bWF5X2JlX2Z1bmN0aW9uX3BvaW50ZXIoU3ltYm9sX3RhYmxlKiAsIExheW91 dCogLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPiogLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplZF9yZWxv YmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPiogLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRf c2VjdGlvbiogLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBlbGZjcHA6OlJlbGE8c2l6ZSwgYmlnX2VuZGlhbj4m ICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IHJfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU3ltYm9sKiBnc3ltKTsKKwkJCQkJIFRhcmdl dF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+KiAsCisJCQkJCSBTaXplZF9y ZWxvYmpfZmlsZTxzaXplLCBiaWdfZW5kaWFuPiogLAorCQkJCQkgdW5zaWdu ZWQgaW50ICwKKwkJCQkJIE91dHB1dF9zZWN0aW9uKiAsCisJCQkJCSBjb25z dCBlbGZjcHA6OlJlbGE8c2l6ZSwgYmlnX2VuZGlhbj4mICwKKwkJCQkJIHVu c2lnbmVkIGludCByX3R5cGUsCisJCQkJCSBTeW1ib2wqIGdzeW0pOwogCiAg IHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQKQEAgLTQ4OSw3ICs1MjUsNyBA QCBjb25zdCBUYXJnZXQ6OlRhcmdldF9pbmZvIFRhcmdldF9hYXJjaDY0PDMy LCB0cnVlPjo6YWFyY2g2NF9pbmZvID0KIHRlbXBsYXRlPGludCBzaXplLCBi b29sIGJpZ19lbmRpYW4+CiBPdXRwdXRfZGF0YV9nb3RfYWFyY2g2NDxzaXpl LCBiaWdfZW5kaWFuPioKIFRhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRp YW4+Ojpnb3Rfc2VjdGlvbihTeW1ib2xfdGFibGUqIHN5bXRhYiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlv dXQqIGxheW91dCkKKwkJCQkJICAgICAgTGF5b3V0KiBsYXlvdXQpCiB7CiAg IGlmICh0aGlzLT5nb3RfID09IE5VTEwpCiAgICAgewpAQCAtNTE1LDEwICs1 NTEsMTAgQEAgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46Omdv dF9zZWN0aW9uKFN5bWJvbF90YWJsZSogc3ltdGFiLAogCiAgICAgICAvLyBH ZW5lcmF0ZSAuZ290IHNlY3Rpb24uCiAgICAgICB0aGlzLT5nb3RfID0gbmV3 IE91dHB1dF9kYXRhX2dvdF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+KHN5 bXRhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0KTsKKwkJCQkJCQkJ IGxheW91dCk7CiAgICAgICBsYXlvdXQtPmFkZF9vdXRwdXRfc2VjdGlvbl9k YXRhKCIuZ290IiwgZWxmY3BwOjpTSFRfUFJPR0JJVFMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbGZjcHA6OlNIRl9BTExP QyB8IGVsZmNwcDo6U0hGX1dSSVRFKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhpcy0+Z290XywgZ290X29yZGVyLCB0cnVl KTsKKwkJCQkgICAgICAoZWxmY3BwOjpTSEZfQUxMT0MgfCBlbGZjcHA6OlNI Rl9XUklURSksCisJCQkJICAgICAgdGhpcy0+Z290XywgZ290X29yZGVyLCB0 cnVlKTsKICAgICAgIC8vIFRoZSBmaXJzdCB3b3JkIG9mIEdPVCBpcyByZXNl cnZlZCBmb3IgdGhlIGFkZHJlc3Mgb2YgLmR5bmFtaWMuCiAgICAgICAvLyBX ZSBwdXQgMCBoZXJlIG5vdy4gVGhlIHZhbHVlIHdpbGwgYmUgcmVwbGFjZWQg bGF0ZXIgaW4KICAgICAgIC8vIE91dHB1dF9kYXRhX2dvdF9hYXJjaDY0Ojpk b193cml0ZS4KQEAgLTUyOCwzMiArNTY0LDMyIEBAIFRhcmdldF9hYXJjaDY0 PHNpemUsIGJpZ19lbmRpYW4+Ojpnb3Rfc2VjdGlvbihTeW1ib2xfdGFibGUq IHN5bXRhYiwKICAgICAgIC8vIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyB2YWx1 ZSBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSAuZ290IHNlY3Rpb24sCiAg ICAgICAvLyBldmVuIGlmIHRoZXJlIGlzIGEgLmdvdC5wbHQgc2VjdGlvbi4K ICAgICAgIHRoaXMtPmdsb2JhbF9vZmZzZXRfdGFibGVfID0KLSAgICAgICAg c3ltdGFiLT5kZWZpbmVfaW5fb3V0cHV0X2RhdGEoIl9HTE9CQUxfT0ZGU0VU X1RBQkxFXyIsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFN5bWJvbF90YWJsZTo6UFJFREVGSU5FRCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Z290XywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgZWxm Y3BwOjpTVFRfT0JKRUNULAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlbGZjcHA6OlNUQl9MT0NBTCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZWxmY3BwOjpTVFZfSElEREVOLCAw LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxz ZSwgZmFsc2UpOworCXN5bXRhYi0+ZGVmaW5lX2luX291dHB1dF9kYXRhKCJf R0xPQkFMX09GRlNFVF9UQUJMRV8iLCBOVUxMLAorCQkJCSAgICAgIFN5bWJv bF90YWJsZTo6UFJFREVGSU5FRCwKKwkJCQkgICAgICB0aGlzLT5nb3RfLAor CQkJCSAgICAgIDAsIDAsIGVsZmNwcDo6U1RUX09CSkVDVCwKKwkJCQkgICAg ICBlbGZjcHA6OlNUQl9MT0NBTCwKKwkJCQkgICAgICBlbGZjcHA6OlNUVl9I SURERU4sIDAsCisJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKIAogICAgICAg Ly8gR2VuZXJhdGUgLmdvdC5wbHQgc2VjdGlvbi4KICAgICAgIHRoaXMtPmdv dF9wbHRfID0gbmV3IE91dHB1dF9kYXRhX3NwYWNlKHNpemUgLyA4LCAiKiog R09UIFBMVCIpOwogICAgICAgbGF5b3V0LT5hZGRfb3V0cHV0X3NlY3Rpb25f ZGF0YSgiLmdvdC5wbHQiLCBlbGZjcHA6OlNIVF9QUk9HQklUUywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVsZmNwcDo6U0hG X0FMTE9DCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IGVsZmNwcDo6U0hGX1dSSVRFKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhpcy0+Z290X3BsdF8sIGdvdF9wbHRfb3Jk ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz X2dvdF9wbHRfcmVscm8pOworCQkJCSAgICAgIChlbGZjcHA6OlNIRl9BTExP QworCQkJCSAgICAgICB8IGVsZmNwcDo6U0hGX1dSSVRFKSwKKwkJCQkgICAg ICB0aGlzLT5nb3RfcGx0XywgZ290X3BsdF9vcmRlciwKKwkJCQkgICAgICBp c19nb3RfcGx0X3JlbHJvKTsKIAogICAgICAgLy8gVGhlIGZpcnN0IHRocmVl IGVudHJpZXMgYXJlIHJlc2VydmVkLgotICAgICAgdGhpcy0+Z290X3BsdF8t PnNldF9jdXJyZW50X2RhdGFfc2l6ZQotICAgICAgICAgIChBQVJDSDY0X0dP VFBMVF9SRVNFUlZFX0NPVU5UICogKHNpemUgLyA4KSk7CisgICAgICB0aGlz LT5nb3RfcGx0Xy0+c2V0X2N1cnJlbnRfZGF0YV9zaXplKAorCUFBUkNINjRf R09UUExUX1JFU0VSVkVfQ09VTlQgKiAoc2l6ZSAvIDgpKTsKIAogICAgICAg aWYgKCFpc19nb3RfcGx0X3JlbHJvKQotICAgICAgICB7Ci0gICAgICAgICAg Ly8gVGhvc2UgYnl0ZXMgY2FuIGdvIGludG8gdGhlIHJlbHJvIHNlZ21lbnQu Ci0gICAgICAgICAgbGF5b3V0LT5pbmNyZWFzZV9yZWxybwotICAgICAgICAg ICAgICAoQUFSQ0g2NF9HT1RQTFRfUkVTRVJWRV9DT1VOVCAqIChzaXplIC8g OCkpOwotICAgICAgICB9CisJeworCSAgLy8gVGhvc2UgYnl0ZXMgY2FuIGdv IGludG8gdGhlIHJlbHJvIHNlZ21lbnQuCisJICBsYXlvdXQtPmluY3JlYXNl X3JlbHJvKAorCSAgICBBQVJDSDY0X0dPVFBMVF9SRVNFUlZFX0NPVU5UICog KHNpemUgLyA4KSk7CisJfQogCiAgICAgfQogICByZXR1cm4gdGhpcy0+Z290 XzsKQEAgLTU5MCw4ICs2MjYsOCBAQCBjbGFzcyBPdXRwdXRfZGF0YV9wbHRf YWFyY2g2NCA6IHB1YmxpYyBPdXRwdXRfc2VjdGlvbl9kYXRhCiAgIHR5cGVk ZWYgdHlwZW5hbWUgZWxmY3BwOjpFbGZfdHlwZXM8c2l6ZT46OkVsZl9BZGRy IEFkZHJlc3M7CiAKICAgT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjQoTGF5b3V0 KiBsYXlvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90 IGFkZHJhbGlnbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 X2RhdGFfc3BhY2UqIGdvdF9wbHQpCisJCQkgIHVpbnQ2NF90IGFkZHJhbGln biwKKwkJCSAgT3V0cHV0X2RhdGFfc3BhY2UqIGdvdF9wbHQpCiAgICAgOiBP dXRwdXRfc2VjdGlvbl9kYXRhKGFkZHJhbGlnbiksCiAgICAgICBnb3RfcGx0 Xyhnb3RfcGx0KSwKICAgICAgIGNvdW50XygwKQpAQCAtNjEwLDYgKzY0Niwx MSBAQCBjbGFzcyBPdXRwdXRfZGF0YV9wbHRfYWFyY2g2NCA6IHB1YmxpYyBP dXRwdXRfc2VjdGlvbl9kYXRhCiAgIHJlbGFfcGx0KCkKICAgeyByZXR1cm4g dGhpcy0+cmVsXzsgfQogCisgIC8vIFJldHVybiB3aGV0aGVyIHdlIGNyZWF0 ZWQgYSBzZWN0aW9uIGZvciBJUkVMQVRJVkUgcmVsb2NhdGlvbnMuCisgIGJv b2wKKyAgaGFzX2lyZWxhdGl2ZV9zZWN0aW9uKCkgY29uc3QKKyAgeyByZXR1 cm4gdGhpcy0+aXJlbGF0aXZlX3JlbF8gIT0gTlVMTDsgfQorCiAgIC8vIFJl dHVybiB0aGUgbnVtYmVyIG9mIFBMVCBlbnRyaWVzLgogICB1bnNpZ25lZCBp bnQKICAgZW50cnlfY291bnQoKSBjb25zdApAQCAtNjI1LDYgKzY2NiwxNCBA QCBjbGFzcyBPdXRwdXRfZGF0YV9wbHRfYWFyY2g2NCA6IHB1YmxpYyBPdXRw dXRfc2VjdGlvbl9kYXRhCiAgIGdldF9wbHRfZW50cnlfc2l6ZSgpIGNvbnN0 CiAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF9wbHRfZW50cnlfc2l6ZSgpOyB9 CiAKKyAgLy8gUmV0dXJuIHRoZSBQTFQgYWRkcmVzcyB0byB1c2UgZm9yIGEg Z2xvYmFsIHN5bWJvbC4KKyAgdWludDY0X3QKKyAgYWRkcmVzc19mb3JfZ2xv YmFsKGNvbnN0IFN5bWJvbCopOworCisgIC8vIFJldHVybiB0aGUgUExUIGFk ZHJlc3MgdG8gdXNlIGZvciBhIGxvY2FsIHN5bWJvbC4KKyAgdWludDY0X3QK KyAgYWRkcmVzc19mb3JfbG9jYWwoY29uc3QgUmVsb2JqKiwgdW5zaWduZWQg aW50IHN5bW5keCk7CisKICBwcm90ZWN0ZWQ6CiAgIC8vIEZpbGwgaW4gdGhl IGZpcnN0IFBMVCBlbnRyeS4KICAgdm9pZApAQCAtNjgyLDYgKzczMSw5IEBA IGNsYXNzIE91dHB1dF9kYXRhX3BsdF9hYXJjaDY0IDogcHVibGljIE91dHB1 dF9zZWN0aW9uX2RhdGEKIAogICAvLyBUaGUgcmVsb2Mgc2VjdGlvbi4KICAg UmVsb2Nfc2VjdGlvbiogcmVsXzsKKyAgLy8gVGhlIElSRUxBVElWRSByZWxv Y3MsIGlmIG5lY2Vzc2FyeS4gIFRoZXNlIG11c3QgZm9sbG93IHRoZQorICAv LyByZWd1bGFyIFBMVCByZWxvY2F0aW9ucy4KKyAgUmVsb2Nfc2VjdGlvbiog aXJlbGF0aXZlX3JlbF87CiAgIC8vIFRoZSAuZ290IHNlY3Rpb24uCiAgIE91 dHB1dF9kYXRhX2dvdF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+KiBnb3Rf OwogICAvLyBUaGUgLmdvdC5wbHQgc2VjdGlvbi4KQEAgLTcxNywxNiArNzY5 LDY3IEBAIHZvaWQKIE91dHB1dF9kYXRhX3BsdF9hYXJjaDY0PHNpemUsIGJp Z19lbmRpYW4+OjphZGRfZW50cnkoU3ltYm9sKiBnc3ltKQogewogICBnb2xk X2Fzc2VydCghZ3N5bS0+aGFzX3BsdF9vZmZzZXQoKSk7Ci0gIC8vVE9ETwor CisgIGdzeW0tPnNldF9wbHRfb2Zmc2V0KCh0aGlzLT5jb3VudF8pICogdGhp cy0+Z2V0X3BsdF9lbnRyeV9zaXplKCkKKwkJICAgICAgICsgdGhpcy0+Zmly c3RfcGx0X2VudHJ5X29mZnNldCgpKTsKKworICArK3RoaXMtPmNvdW50XzsK KworICBzZWN0aW9uX29mZnNldF90eXBlIGdvdF9vZmZzZXQgPSB0aGlzLT5n b3RfcGx0Xy0+Y3VycmVudF9kYXRhX3NpemUoKTsKKworICAvLyBFdmVyeSBQ TFQgZW50cnkgbmVlZHMgYSBHT1QgZW50cnkgd2hpY2ggcG9pbnRzIGJhY2sg dG8gdGhlIFBMVAorICAvLyBlbnRyeSAodGhpcyB3aWxsIGJlIGNoYW5nZWQg YnkgdGhlIGR5bmFtaWMgbGlua2VyLCBub3JtYWxseQorICAvLyBsYXppbHkg d2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkKS4KKyAgdGhpcy0+Z290X3Bs dF8tPnNldF9jdXJyZW50X2RhdGFfc2l6ZShnb3Rfb2Zmc2V0ICsgc2l6ZSAv IDgpOworCisgIC8vIEV2ZXJ5IFBMVCBlbnRyeSBuZWVkcyBhIHJlbG9jLgor ICBnc3ltLT5zZXRfbmVlZHNfZHluc3ltX2VudHJ5KCk7CisgIHRoaXMtPnJl bF8tPmFkZF9nbG9iYWwoZ3N5bSwgZWxmY3BwOjpSX0FBUkNINjRfSlVNUF9T TE9ULAorCQkJIHRoaXMtPmdvdF9wbHRfLCBnb3Rfb2Zmc2V0LCAwKTsKKwor ICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBzYXZlIHRoZSBzeW1i b2wuIFRoZSBjb250ZW50cyBvZiB0aGUKKyAgLy8gUExUIGFyZSBpbmRlcGVu ZGVudCBvZiB3aGljaCBzeW1ib2xzIGFyZSB1c2VkLiBUaGUgc3ltYm9scyBv bmx5CisgIC8vIGFwcGVhciBpbiB0aGUgcmVsb2NhdGlvbnMuCit9CisKKy8v IFJldHVybiB0aGUgUExUIGFkZHJlc3MgdG8gdXNlIGZvciBhIGdsb2JhbCBz eW1ib2wuCisKK3RlbXBsYXRlPGludCBzaXplLCBib29sIGJpZ19lbmRpYW4+ Cit1aW50NjRfdAorT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjQ8c2l6ZSwgYmln X2VuZGlhbj46OmFkZHJlc3NfZm9yX2dsb2JhbCgKKyAgY29uc3QgU3ltYm9s KiBnc3ltKQoreworICB1aW50NjRfdCBvZmZzZXQgPSAwOworICBpZiAoZ3N5 bS0+dHlwZSgpID09IGVsZmNwcDo6U1RUX0dOVV9JRlVOQworICAgICAgJiYg Z3N5bS0+Y2FuX3VzZV9yZWxhdGl2ZV9yZWxvYyhmYWxzZSkpCisgICAgb2Zm c2V0ID0gKHRoaXMtPmZpcnN0X3BsdF9lbnRyeV9vZmZzZXQoKSArCisJICAg ICAgdGhpcy0+Y291bnRfICogdGhpcy0+Z2V0X3BsdF9lbnRyeV9zaXplKCkp OworICByZXR1cm4gdGhpcy0+YWRkcmVzcygpICsgb2Zmc2V0ICsgZ3N5bS0+ cGx0X29mZnNldCgpOworfQorCisvLyBSZXR1cm4gdGhlIFBMVCBhZGRyZXNz IHRvIHVzZSBmb3IgYSBsb2NhbCBzeW1ib2wuICBUaGVzZSBhcmUgYWx3YXlz CisvLyBJUkVMQVRJVkUgcmVsb2NzLgorCit0ZW1wbGF0ZTxpbnQgc2l6ZSwg Ym9vbCBiaWdfZW5kaWFuPgordWludDY0X3QKK091dHB1dF9kYXRhX3BsdF9h YXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjphZGRyZXNzX2Zvcl9sb2NhbCgK KyAgICBjb25zdCBSZWxvYmoqIG9iamVjdCwKKyAgICB1bnNpZ25lZCBpbnQg cl9zeW0pCit7CisgIHJldHVybiAodGhpcy0+YWRkcmVzcygpCisJICArIHRo aXMtPmZpcnN0X3BsdF9lbnRyeV9vZmZzZXQoKQorCSAgKyB0aGlzLT5jb3Vu dF8gKiB0aGlzLT5nZXRfcGx0X2VudHJ5X3NpemUoKQorCSAgKyBvYmplY3Qt PmxvY2FsX3BsdF9vZmZzZXQocl9zeW0pKTsKIH0KIAogLy8gU2V0IHRoZSBm aW5hbCBzaXplLgorCiB0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdfZW5k aWFuPgogdm9pZAogT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjQ8c2l6ZSwgYmln X2VuZGlhbj46OnNldF9maW5hbF9kYXRhX3NpemUoKQogewogICB0aGlzLT5z ZXRfZGF0YV9zaXplKHRoaXMtPmZpcnN0X3BsdF9lbnRyeV9vZmZzZXQoKQot ICAgICAgICAgICAgICAgICAgICAgICsgdGhpcy0+Y291bnQgKiB0aGlzLT5n ZXRfcGx0X2VudHJ5X3NpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAg KyB0aGlzLT5jb3VudF8gKiB0aGlzLT5nZXRfcGx0X2VudHJ5X3NpemUoKSk7 CiB9CiAKIHRlbXBsYXRlPGludCBzaXplLCBib29sIGJpZ19lbmRpYW4+CkBA IC03MzcsOCArODQwLDggQEAgY2xhc3MgT3V0cHV0X2RhdGFfcGx0X2FhcmNo NjRfc3RhbmRhcmQgOgogICB0eXBlZGVmIHR5cGVuYW1lIGVsZmNwcDo6RWxm X3R5cGVzPHNpemU+OjpFbGZfQWRkciBBZGRyZXNzOwogICBPdXRwdXRfZGF0 YV9wbHRfYWFyY2g2NF9zdGFuZGFyZChMYXlvdXQqIGxheW91dCwgT3V0cHV0 X2RhdGFfc3BhY2UqIGdvdF9wbHQpCiAgICAgOiBPdXRwdXRfZGF0YV9wbHRf YWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPihsYXlvdXQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID09 IDMyID8gNCA6IDgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnb3RfcGx0KQorCQkJCQkJc2l6ZSA9PSAzMiA/ IDQgOiA4LAorCQkJCQkJZ290X3BsdCkKICAgeyB9CiAKICBwcm90ZWN0ZWQ6 CkBAIC03NTQsMTUgKzg1NywxNSBAQCBjbGFzcyBPdXRwdXRfZGF0YV9wbHRf YWFyY2g2NF9zdGFuZGFyZCA6CiAKICAgdmlydHVhbCB2b2lkCiAgIGRvX2Zp bGxfZmlyc3RfcGx0X2VudHJ5KHVuc2lnbmVkIGNoYXIqIHBvdiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyBnb3RfYWRkcmVzcywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyBwbHRfYWRkcmVzcyk7 CisJCQkgIEFkZHJlc3MgZ290X2FkZHJlc3MsCisJCQkgIEFkZHJlc3MgcGx0 X2FkZHJlc3MpOwogCiAgIHZpcnR1YWwgdm9pZAogICBkb19maWxsX3BsdF9l bnRyeSh1bnNpZ25lZCBjaGFyKiBwb3YsCi0gICAgICAgICAgICAgICAgICAg IEFkZHJlc3MgZ290X2FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgIEFk ZHJlc3MgcGx0X2FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBnb3Rfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgcGx0X29mZnNldCk7CisJCSAgICBBZGRyZXNzIGdvdF9hZGRy ZXNzLAorCQkgICAgQWRkcmVzcyBwbHRfYWRkcmVzcywKKwkJICAgIHVuc2ln bmVkIGludCBnb3Rfb2Zmc2V0LAorCQkgICAgdW5zaWduZWQgaW50IHBsdF9v ZmZzZXQpOwogCiAgcHJpdmF0ZToKICAgLy8gVGhlIHNpemUgb2YgdGhlIGZp cnN0IHBsdCBlbnRyeSBzaXplLgpAQCAtODg1LDggKzk4OCw4IEBAIHRlbXBs YXRlPGludCBzaXplLCBib29sIGJpZ19lbmRpYW4+CiB2b2lkCiBPdXRwdXRf ZGF0YV9wbHRfYWFyY2g2NF9zdGFuZGFyZDxzaXplLCBiaWdfZW5kaWFuPjo6 ZG9fZmlsbF9maXJzdF9wbHRfZW50cnkoCiAgICAgdW5zaWduZWQgY2hhciog cG92LAotICAgIEFkZHJlc3MgLyogZ290X2FkZHJlc3MgKi8sCi0gICAgQWRk cmVzcyAvKiBwbHRfYWRkcmVzcyAqLykKKyAgICBBZGRyZXNzIGdvdF9hZGRy ZXNzLAorICAgIEFkZHJlc3MgcGx0X2FkZHJlc3MpCiB7CiAgIC8vIFBMVDAg b2YgdGhlIHNtYWxsIFBMVCBsb29rcyBsaWtlIHRoaXMgaW4gRUxGNjQgLQog ICAvLyBzdHAgeDE2LCB4MzAsIFtzcCwgIy0xNl0hCSAJU2F2ZSB0aGUgcmVs b2MgYW5kIGxyIG9uIHN0YWNrLgpAQCAtODk5LDIyICsxMDAyLDYyIEBAIE91 dHB1dF9kYXRhX3BsdF9hYXJjaDY0X3N0YW5kYXJkPHNpemUsIGJpZ19lbmRp YW4+Ojpkb19maWxsX2ZpcnN0X3BsdF9lbnRyeSgKICAgLy8gUExUMCB3aWxs IGJlIHNsaWdodGx5IGRpZmZlcmVudCBpbiBFTEYzMiBkdWUgdG8gZGlmZmVy ZW50IGdvdCBlbnRyeQogICAvLyBzaXplLgogICBtZW1jcHkocG92LCB0aGlz LT5maXJzdF9wbHRfZW50cnksIHRoaXMtPmZpcnN0X3BsdF9lbnRyeV9zaXpl KTsKLSAgLy8gVE9ETworICBBZGRyZXNzIGdvdHBsdF8ybmRfZW50ID0gZ290 X2FkZHJlc3MgKyAoc2l6ZSAvIDgpICogMjsKKworICAvLyBGaWxsIGluIHRo ZSB0b3AgMjEgYml0cyBmb3IgdGhpczogQURSUCB4MTYsIFBMVF9HT1QgKyA4 ICogMi4KKyAgLy8gQURSUDogIChQRyhTK0EpLVBHKFApKSA+PiAxMikgJiAw eDFmZmZmZi4KKyAgLy8gRklYTUU6IFRoaXMgb25seSB3b3JrcyBmb3IgNjRi aXQKKyAgQUFyY2g2NF9yZWxvY2F0ZV9mdW5jdGlvbnM8c2l6ZSwgYmlnX2Vu ZGlhbj46OmFkcnAocG92ICsgNCwKKyAgICAgIGdvdHBsdF8ybmRfZW50LCBw bHRfYWRkcmVzcyArIDQpOworCisgIC8vIEZpbGwgaW4gUl9BQVJDSDY0X0xE U1Q4X0xPMTIKKyAgZWxmY3BwOjpTd2FwPDMyLCBiaWdfZW5kaWFuPjo6d3Jp dGV2YWwoCisgICAgICBwb3YgKyA4LAorICAgICAgKCh0aGlzLT5maXJzdF9w bHRfZW50cnlbMl0gJiAweGZmYzAwM2ZmKQorICAgICAgIHwgKChnb3RwbHRf Mm5kX2VudCAmIDB4ZmY4KSA8PCA3KSkpOworCisgIC8vIEZpbGwgaW4gUl9B QVJDSDY0X0FERF9BQlNfTE8xMgorICBlbGZjcHA6OlN3YXA8MzIsIGJpZ19l bmRpYW4+Ojp3cml0ZXZhbCgKKyAgICAgIHBvdiArIDEyLAorICAgICAgKCh0 aGlzLT5maXJzdF9wbHRfZW50cnlbM10gJiAweGZmYzAwM2ZmKQorICAgICAg IHwgKChnb3RwbHRfMm5kX2VudCAmIDB4ZmZmKSA8PCAxMCkpKTsKIH0KIAog Ly8gU3Vic2VxdWVudCBlbnRyaWVzIGluIHRoZSBQTFQgZm9yIGFuIGV4ZWN1 dGFibGUuCisvLyBGSVhNRTogVGhpcyBvbmx5IHdvcmtzIGZvciA2NGJpdAog CiB0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgogdm9pZAog T3V0cHV0X2RhdGFfcGx0X2FhcmNoNjRfc3RhbmRhcmQ8c2l6ZSwgYmlnX2Vu ZGlhbj46OmRvX2ZpbGxfcGx0X2VudHJ5KAogICAgIHVuc2lnbmVkIGNoYXIq IHBvdiwKLSAgICBBZGRyZXNzIC8qIGdvdF9hZGRyZXNzKi8sCi0gICAgQWRk cmVzcyAvKiBwbHRfYWRkcmVzcyAqLywKLSAgICB1bnNpZ25lZCBpbnQgLyog Z290X29mZnNldCAqLywKLSAgICB1bnNpZ25lZCBpbnQgLyogcGx0X29mZnNl dCAqLykKKyAgICBBZGRyZXNzIGdvdF9hZGRyZXNzLAorICAgIEFkZHJlc3Mg cGx0X2FkZHJlc3MsCisgICAgdW5zaWduZWQgaW50IGdvdF9vZmZzZXQsCisg ICAgdW5zaWduZWQgaW50IHBsdF9vZmZzZXQpCiB7CiAgIG1lbWNweShwb3Ys IHRoaXMtPnBsdF9lbnRyeSwgdGhpcy0+cGx0X2VudHJ5X3NpemUpOwotICAv L1RPRE8KKworICBBZGRyZXNzIGdvdHBsdF9lbnRyeV9hZGRyZXNzID0gZ290 X2FkZHJlc3MgKyBnb3Rfb2Zmc2V0OworICBBZGRyZXNzIHBsdF9lbnRyeV9h ZGRyZXNzID0gcGx0X2FkZHJlc3MgKyBwbHRfb2Zmc2V0OworCisgIC8vIEZp bGwgaW4gUl9BQVJDSDY0X1BDUkVMX0FEUl9ISTIxCisgIEFBcmNoNjRfcmVs b2NhdGVfZnVuY3Rpb25zPHNpemUsIGJpZ19lbmRpYW4+OjphZHJwKAorICAg ICAgcG92LAorICAgICAgZ290cGx0X2VudHJ5X2FkZHJlc3MsCisgICAgICBw bHRfZW50cnlfYWRkcmVzcyk7CisKKyAgLy8gRmlsbCBpbiBSX0FBUkNINjRf TERTVDY0X0FCU19MTzEyCisgIGVsZmNwcDo6U3dhcDwzMiwgYmlnX2VuZGlh bj46OndyaXRldmFsKAorICAgICAgcG92ICsgNCwKKyAgICAgICgodGhpcy0+ cGx0X2VudHJ5WzFdICYgMHhmZmMwMDNmZikKKyAgICAgICB8ICgoZ290cGx0 X2VudHJ5X2FkZHJlc3MgJiAweGZmOCkgPDwgNykpKTsKKworICAvLyBGaWxs IGluIFJfQUFSQ0g2NF9BRERfQUJTX0xPMTIKKyAgZWxmY3BwOjpTd2FwPDMy LCBiaWdfZW5kaWFuPjo6d3JpdGV2YWwoCisgICAgICBwb3YgKyA4LAorICAg ICAgKCh0aGlzLT5wbHRfZW50cnlbMl0gJiAweGZmYzAwM2ZmKQorICAgICAg IHwgKChnb3RwbHRfZW50cnlfYWRkcmVzcyAmIDB4ZmZmKSA8PDEwKSkpOwor CiB9CiAKIC8vIFdyaXRlIG91dCB0aGUgUExULiAgVGhpcyB1c2VzIHRoZSBo YW5kLWNvZGVkIGluc3RydWN0aW9ucyBhYm92ZSwKQEAgLTkzOSw4ICsxMDgy LDYgQEAgT3V0cHV0X2RhdGFfcGx0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlh bj46OmRvX3dyaXRlKE91dHB1dF9maWxlKiBvZikKIAogICAvLyBUaGUgYmFz ZSBhZGRyZXNzIG9mIHRoZSAucGx0IHNlY3Rpb24uCiAgIHR5cGVuYW1lIGVs ZmNwcDo6RWxmX3R5cGVzPHNpemU+OjpFbGZfQWRkciBwbHRfYWRkcmVzcyA9 IHRoaXMtPmFkZHJlc3MoKTsKLSAgLy8gVGhlIGJhc2UgYWRkcmVzcyBvZiB0 aGUgLmdvdCBzZWN0aW9uLgotICB0eXBlbmFtZSBlbGZjcHA6OkVsZl90eXBl czxzaXplPjo6RWxmX0FkZHIgZ290X2Jhc2UgPSB0aGlzLT5nb3RfLT5hZGRy ZXNzKCk7CiAgIC8vIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFBMVCBwb3J0 aW9uIG9mIHRoZSAuZ290IHNlY3Rpb24uCiAgIHR5cGVuYW1lIGVsZmNwcDo6 RWxmX3R5cGVzPHNpemU+OjpFbGZfQWRkciBnb3RfYWRkcmVzcwogICAgID0g dGhpcy0+Z290X3BsdF8tPmFkZHJlc3MoKTsKQEAgLTk2NiwxMSArMTEwNywx MCBAQCBPdXRwdXRfZGF0YV9wbHRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFu Pjo6ZG9fd3JpdGUoT3V0cHV0X2ZpbGUqIG9mKQogICAgIHsKICAgICAgIC8v IFNldCBhbmQgYWRqdXN0IHRoZSBQTFQgZW50cnkgaXRzZWxmLgogICAgICAg dGhpcy0+ZmlsbF9wbHRfZW50cnkocG92LCBnb3RfYWRkcmVzcywgcGx0X2Fk ZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rfb2Zmc2V0 LCBwbHRfb2Zmc2V0KTsKKwkJCSAgIGdvdF9vZmZzZXQsIHBsdF9vZmZzZXQp OwogCi0gICAgICAvLyBTZXQgdGhlIGVudHJ5IGluIHRoZSBHT1QuCi0gICAg ICBlbGZjcHA6OlN3YXA8c2l6ZSwgYmlnX2VuZGlhbj46OndyaXRldmFsKGdv dF9wb3YsCi0gICAgICAgICAgcGx0X2FkZHJlc3MgKyBwbHRfb2Zmc2V0KTsK KyAgICAgIC8vIFNldCB0aGUgZW50cnkgaW4gdGhlIEdPVCwgd2hpY2ggcG9p bnRzIHRvIHBsdDAuCisgICAgICBlbGZjcHA6OlN3YXA8c2l6ZSwgYmlnX2Vu ZGlhbj46OndyaXRldmFsKGdvdF9wb3YsIHBsdF9hZGRyZXNzKTsKICAgICB9 CiAKICAgZ29sZF9hc3NlcnQoc3RhdGljX2Nhc3Q8c2VjdGlvbl9zaXplX3R5 cGU+KHBvdiAtIG92aWV3KSA9PSBvdmlld19zaXplKTsKQEAgLTk4MCw2ICsx MTIwLDMzMyBAQCBPdXRwdXRfZGF0YV9wbHRfYWFyY2g2NDxzaXplLCBiaWdf ZW5kaWFuPjo6ZG9fd3JpdGUoT3V0cHV0X2ZpbGUqIG9mKQogICBvZi0+d3Jp dGVfb3V0cHV0X3ZpZXcoZ290X2ZpbGVfb2Zmc2V0LCBnb3Rfc2l6ZSwgZ290 X3ZpZXcpOwogfQogCisvLyBUZWxsaW5nIGhvdyB0byB1cGRhdGUgdGhlIGlt bWVkaWF0ZSBmaWVsZCBvZiBhbiBpbnN0cnVjdGlvbi4KK3N0cnVjdCBBQXJj aDY0X2hvd3RvCit7CisgIC8vIFRoZSBpbW1lZGlhdGUgZmllbGQgbWFzay4K KyAgZWxmY3BwOjpFbGZfWHdvcmQgZHN0X21hc2s7CisKKyAgLy8gVGhlIG9m ZnNldCB0byBhcHBseSByZWxvY2F0aW9uIGltbWVkaWF0ZQorICBpbnQgZG9m ZnNldDsKKworICAvLyBUaGUgc2Vjb25kIHBhcnQgb2Zmc2V0LCBpZiB0aGUg aW1tZWRpYXRlIGZpZWxkIGhhcyB0d28gcGFydHMuCisgIC8vIC0xIGlmIHRo ZSBpbW1lZGlhdGUgZmllbGQgaGFzIG9ubHkgb25lIHBhcnQuCisgIGludCBk b2Zmc2V0MjsKK307CisKK3N0YXRpYyBjb25zdCBBQXJjaDY0X2hvd3RvIGFh cmNoNjRfaG93dG9bQUFyY2g2NF9yZWxvY19wcm9wZXJ0eTo6SU5TVF9OVU1d ID0KK3sKKyAgezAsIC0xLCAtMX0sCQkvLyBEQVRBCisgIHsweDFmZmZlMCwg NSwgLTF9LAkvLyBNT1ZXICBbMjA6NV0taW1tMTYKKyAgezB4ZmZmZmUwLCA1 LCAtMX0sCS8vIExEICAgIFsyMzo1XS1pbW0xOQorICB7MHg2MGZmZmZlMCwg MjksIDV9LAkvLyBBRFIgICBbMzA6MjldLWltbWxvICBbMjM6NV0taW1taGkK KyAgezB4NjBmZmZmZTAsIDI5LCA1fSwJLy8gQURSUCAgWzMwOjI5XS1pbW1s byAgWzIzOjVdLWltbWhpCisgIHsweDNmZmMwMCwgMTAsIC0xfSwJLy8gQURE ICAgWzIxOjEwXS1pbW0xMgorICB7MHgzZmZjMDAsIDEwLCAtMX0sCS8vIExE U1QgIFsyMToxMF0taW1tMTIKKyAgezB4N2ZmZTAsIDUsIC0xfSwJLy8gVEJa TlogWzE4OjVdLWltbTE0CisgIHsweGZmZmZlMCwgNSwgLTF9LAkvLyBDT05E QiBbMjM6NV0taW1tMTkKKyAgezB4M2ZmZmZmZiwgMCwgLTF9LAkvLyBCICAg ICBbMjU6MF0taW1tMjYKKyAgezB4M2ZmZmZmZiwgMCwgLTF9LAkvLyBDQUxM ICBbMjU6MF0taW1tMjYKK307CisKKy8vIEFBcmNoNjQgcmVsb2NhdGUgZnVu Y3Rpb24gY2xhc3MKKwordGVtcGxhdGU8aW50IHNpemUsIGJvb2wgYmlnX2Vu ZGlhbj4KK2NsYXNzIEFBcmNoNjRfcmVsb2NhdGVfZnVuY3Rpb25zCit7Cisg cHVibGljOgorICB0eXBlZGVmIGVudW0KKyAgeworICAgIFNUQVRVU19PS0FZ LAkvLyBObyBlcnJvciBkdXJpbmcgcmVsb2NhdGlvbi4KKyAgICBTVEFUVVNf T1ZFUkZMT1csCS8vIFJlbG9jYXRpb24gb3ZlcmZsb3cuCisgICAgU1RBVFVT X0JBRF9SRUxPQywJLy8gUmVsb2NhdGlvbiBjYW5ub3QgYmUgYXBwbGllZC4K KyAgfSBTdGF0dXM7CisKKyBwcml2YXRlOgorICB0eXBlZGVmIEFBcmNoNjRf cmVsb2NhdGVfZnVuY3Rpb25zPHNpemUsIGJpZ19lbmRpYW4+IFRoaXM7Cisg IHR5cGVkZWYgdHlwZW5hbWUgZWxmY3BwOjpFbGZfdHlwZXM8c2l6ZT46OkVs Zl9BZGRyIEFkZHJlc3M7CisKKyAgLy8gUmV0dXJuIHRoZSBwYWdlIGFkZHJl c3Mgb2YgdGhlIGFkZHJlc3MuCisgIC8vIFBhZ2UoYWRkcmVzcykgPSBhZGRy ZXNzICYgfjB4RkZGCisKKyAgc3RhdGljIGlubGluZSB0eXBlbmFtZSBlbGZj cHA6OlN3YXA8c2l6ZSwgYmlnX2VuZGlhbj46OlZhbHR5cGUKKyAgUGFnZShB ZGRyZXNzIGFkZHJlc3MpCisgIHsKKyAgICByZXR1cm4gKGFkZHJlc3MgJiAo fnN0YXRpY19jYXN0PEFkZHJlc3M+KDB4RkZGKSkpOworICB9CisKKyAgLy8g VXBkYXRlIGluc3RydWN0aW9uIChwb2ludGVkIGJ5IHZpZXcpIHdpdGggc2Vs ZWN0ZWQgYml0cyAoaW1tZWQpLgorICAvLyB2YWwgPSAodmFsICYgfmRzdF9t YXNrKSB8IChpbW1lZCA8PCBkb2Zmc2V0KQorCisgIHRlbXBsYXRlPGludCB2 YWxzaXplPgorICBzdGF0aWMgaW5saW5lIHZvaWQKKyAgdXBkYXRlX3ZpZXco dW5zaWduZWQgY2hhciogdmlldywKKwkgICAgICB0eXBlbmFtZSBlbGZjcHA6 OlN3YXA8c2l6ZSwgYmlnX2VuZGlhbj46OlZhbHR5cGUgaW1tZWQsCisJICAg ICAgZWxmY3BwOjpFbGZfWHdvcmQgZG9mZnNldCwKKwkgICAgICBlbGZjcHA6 OkVsZl9Yd29yZCBkc3RfbWFzaykKKyAgeworICAgIHR5cGVkZWYgdHlwZW5h bWUgZWxmY3BwOjpTd2FwPHZhbHNpemUsIGJpZ19lbmRpYW4+OjpWYWx0eXBl IFZhbHR5cGU7CisgICAgVmFsdHlwZSogd3YgPSByZWludGVycHJldF9jYXN0 PFZhbHR5cGUqPih2aWV3KTsKKyAgICBWYWx0eXBlIHZhbCA9IGVsZmNwcDo6 U3dhcDx2YWxzaXplLCBiaWdfZW5kaWFuPjo6cmVhZHZhbCh3dik7CisKKyAg ICAvLyBDbGVhciBpbW1lZGlhdGUgZmllbGRzLgorICAgIHZhbCAmPSB+ZHN0 X21hc2s7CisgICAgZWxmY3BwOjpTd2FwPHZhbHNpemUsIGJpZ19lbmRpYW4+ Ojp3cml0ZXZhbCh3diwKKyAgICAgIHN0YXRpY19jYXN0PFZhbHR5cGU+KHZh bCB8IChpbW1lZCA8PCBkb2Zmc2V0KSkpOworICB9CisKKyAgLy8gVXBkYXRl IHR3byBwYXJ0cyBvZiBhbiBpbnN0cnVjdGlvbiAocG9pbnRlZCBieSB2aWV3 KSB3aXRoIHNlbGVjdGVkCisgIC8vIGJpdHMgKGltbWVkMSBhbmQgaW1tZWQy KS4KKyAgLy8gdmFsID0gKHZhbCAmIH5kc3RfbWFzaykgfCAoaW1tZWQxIDw8 IGRvZmZzZXQxKSB8IChpbW1lZDIgPDwgZG9mZnNldDIpCisKKyAgdGVtcGxh dGU8aW50IHZhbHNpemU+CisgIHN0YXRpYyBpbmxpbmUgdm9pZAorICB1cGRh dGVfdmlld190d29fcGFydHMoCisgICAgdW5zaWduZWQgY2hhciogdmlldywK KyAgICB0eXBlbmFtZSBlbGZjcHA6OlN3YXA8c2l6ZSwgYmlnX2VuZGlhbj46 OlZhbHR5cGUgaW1tZWQxLAorICAgIHR5cGVuYW1lIGVsZmNwcDo6U3dhcDxz aXplLCBiaWdfZW5kaWFuPjo6VmFsdHlwZSBpbW1lZDIsCisgICAgZWxmY3Bw OjpFbGZfWHdvcmQgZG9mZnNldDEsCisgICAgZWxmY3BwOjpFbGZfWHdvcmQg ZG9mZnNldDIsCisgICAgZWxmY3BwOjpFbGZfWHdvcmQgZHN0X21hc2spCisg IHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGVsZmNwcDo6U3dhcDx2YWxzaXpl LCBiaWdfZW5kaWFuPjo6VmFsdHlwZSBWYWx0eXBlOworICAgIFZhbHR5cGUq IHd2ID0gcmVpbnRlcnByZXRfY2FzdDxWYWx0eXBlKj4odmlldyk7CisgICAg VmFsdHlwZSB2YWwgPSBlbGZjcHA6OlN3YXA8dmFsc2l6ZSwgYmlnX2VuZGlh bj46OnJlYWR2YWwod3YpOworICAgIHZhbCAmPSB+ZHN0X21hc2s7CisgICAg ZWxmY3BwOjpTd2FwPHZhbHNpemUsIGJpZ19lbmRpYW4+Ojp3cml0ZXZhbCh3 diwKKyAgICAgIHN0YXRpY19jYXN0PFZhbHR5cGU+KHZhbCB8IChpbW1lZDEg PDwgZG9mZnNldDEpIHwKKwkJCSAgIChpbW1lZDIgPDwgZG9mZnNldDIpKSk7 CisgIH0KKworICAvLyBVcGRhdGUgYWRyIG9yIGFkcnAgaW5zdHJ1Y3Rpb24g d2l0aCBbMzI6MTJdIG9mIFguCisgIC8vIEluIGFkciBhbmQgYWRycDogWzMw OjI5XSBpbW1sbyAgIFsyMzo1XSBpbW1oaQorCisgIHN0YXRpYyBpbmxpbmUg dm9pZAorICB1cGRhdGVfYWRyKHVuc2lnbmVkIGNoYXIqIHZpZXcsCisJICAg ICB0eXBlbmFtZSBlbGZjcHA6OlN3YXA8c2l6ZSwgYmlnX2VuZGlhbj46OlZh bHR5cGUgeCwKKwkgICAgIGNvbnN0IEFBcmNoNjRfcmVsb2NfcHJvcGVydHkq IC8qIHJlbG9jX3Byb3BlcnR5ICovKQorICB7CisgICAgZWxmY3BwOjpFbGZf WHdvcmQgZHN0X21hc2sgPSAoMHgzIDw8IDI5KSB8ICgweDdmZmZmIDw8IDUp OworICAgIHR5cGVuYW1lIGVsZmNwcDo6U3dhcDwzMiwgYmlnX2VuZGlhbj46 OlZhbHR5cGUgaW1tZWQgPQorICAgICAgKHggPj4gMTIpICYgMHgxZmZmZmY7 CisgICAgVGhpczo6dGVtcGxhdGUgdXBkYXRlX3ZpZXdfdHdvX3BhcnRzPDMy PigKKyAgICAgIHZpZXcsCisgICAgICBpbW1lZCAmIDB4MywKKyAgICAgIChp bW1lZCAmIDB4MWZmZmZjKSA+PiAyLAorICAgICAgMjksCisgICAgICA1LAor ICAgICAgZHN0X21hc2spOworICB9CisKKyBwdWJsaWM6CisKKyAgLy8gRG8g YSBzaW1wbGUgcmVsYSByZWxvY2F0aW9uIGF0IHVuYWxpZ25lZCBhZGRyZXNz ZXMuCisKKyAgdGVtcGxhdGU8aW50IHZhbHNpemU+CisgIHN0YXRpYyBpbmxp bmUgdHlwZW5hbWUgVGhpczo6U3RhdHVzCisgIHJlbGFfdWEodW5zaWduZWQg Y2hhciogdmlldywKKwkgIGNvbnN0IFNpemVkX3JlbG9ial9maWxlPHNpemUs IGJpZ19lbmRpYW4+KiBvYmplY3QsCisJICBjb25zdCBTeW1ib2xfdmFsdWU8 c2l6ZT4qIHBzeW12YWwsCisJICB0eXBlbmFtZSBlbGZjcHA6OlN3YXA8c2l6 ZSwgYmlnX2VuZGlhbj46OlZhbHR5cGUgYWRkZW5kLAorCSAgY29uc3QgQUFy Y2g2NF9yZWxvY19wcm9wZXJ0eSogcmVsb2NfcHJvcGVydHkpCisgIHsKKyAg ICB0eXBlZGVmIHR5cGVuYW1lIGVsZmNwcDo6U3dhcF91bmFsaWduZWQ8dmFs c2l6ZSwgYmlnX2VuZGlhbj46OlZhbHR5cGUKKyAgICAgIFZhbHR5cGU7Cisg ICAgdHlwZW5hbWUgZWxmY3BwOjpFbGZfdHlwZXM8c2l6ZT46OkVsZl9BZGRy IHggPQorCXBzeW12YWwtPnZhbHVlKG9iamVjdCwgYWRkZW5kKTsKKyAgICBl bGZjcHA6OlN3YXBfdW5hbGlnbmVkPHZhbHNpemUsIGJpZ19lbmRpYW4+Ojp3 cml0ZXZhbCh2aWV3LAorICAgICAgc3RhdGljX2Nhc3Q8VmFsdHlwZT4oeCkp OworICAgIHJldHVybiAocmVsb2NfcHJvcGVydHktPmNoZWNrdXBfeF92YWx1 ZSh4KQorCSAgICA/IFRoaXM6OlNUQVRVU19PS0FZCisJICAgIDogVGhpczo6 U1RBVFVTX09WRVJGTE9XKTsKKyAgfQorCisgIC8vIERvIGEgc2ltcGxlIHBj LXJlbGF0aXZlIHJlbG9jYXRpb24gYXQgdW5hbGlnbmVkIGFkZHJlc3Nlcy4K KworICB0ZW1wbGF0ZTxpbnQgdmFsc2l6ZT4KKyAgc3RhdGljIGlubGluZSB0 eXBlbmFtZSBUaGlzOjpTdGF0dXMKKyAgcGNyZWxhX3VhKHVuc2lnbmVkIGNo YXIqIHZpZXcsCisJICAgIGNvbnN0IFNpemVkX3JlbG9ial9maWxlPHNpemUs IGJpZ19lbmRpYW4+KiBvYmplY3QsCisJICAgIGNvbnN0IFN5bWJvbF92YWx1 ZTxzaXplPiogcHN5bXZhbCwKKwkgICAgdHlwZW5hbWUgZWxmY3BwOjpTd2Fw PHNpemUsIGJpZ19lbmRpYW4+OjpWYWx0eXBlIGFkZGVuZCwKKwkgICAgQWRk cmVzcyBhZGRyZXNzLAorCSAgICBjb25zdCBBQXJjaDY0X3JlbG9jX3Byb3Bl cnR5KiByZWxvY19wcm9wZXJ0eSkKKyAgeworICAgIHR5cGVkZWYgdHlwZW5h bWUgZWxmY3BwOjpTd2FwX3VuYWxpZ25lZDx2YWxzaXplLCBiaWdfZW5kaWFu Pjo6VmFsdHlwZQorICAgICAgVmFsdHlwZTsKKyAgICBBZGRyZXNzIHggPQlw c3ltdmFsLT52YWx1ZShvYmplY3QsIGFkZGVuZCkgLSBhZGRyZXNzOworICAg IGVsZmNwcDo6U3dhcF91bmFsaWduZWQ8dmFsc2l6ZSwgYmlnX2VuZGlhbj46 OndyaXRldmFsKHZpZXcsCisgICAgICBzdGF0aWNfY2FzdDxWYWx0eXBlPih4 KSk7CisgICAgcmV0dXJuIChyZWxvY19wcm9wZXJ0eS0+Y2hlY2t1cF94X3Zh bHVlKHgpCisJICAgID8gVGhpczo6U1RBVFVTX09LQVkKKwkgICAgOiBUaGlz OjpTVEFUVVNfT1ZFUkZMT1cpOworICB9CisKKyAgLy8gRG8gYSBzaW1wbGUg cmVsYSByZWxvY2F0aW9uIGF0IGFsaWduZWQgYWRkcmVzc2VzLgorCisgIHRl bXBsYXRlPGludCB2YWxzaXplPgorICBzdGF0aWMgaW5saW5lIHR5cGVuYW1l IFRoaXM6OlN0YXR1cworICByZWxhKAorICAgIHVuc2lnbmVkIGNoYXIqIHZp ZXcsCisgICAgY29uc3QgU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2Vu ZGlhbj4qIG9iamVjdCwKKyAgICBjb25zdCBTeW1ib2xfdmFsdWU8c2l6ZT4q IHBzeW12YWwsCisgICAgdHlwZW5hbWUgZWxmY3BwOjpTd2FwPHNpemUsIGJp Z19lbmRpYW4+OjpWYWx0eXBlIGFkZGVuZCwKKyAgICBjb25zdCBBQXJjaDY0 X3JlbG9jX3Byb3BlcnR5KiByZWxvY19wcm9wZXJ0eSkKKyAgeworICAgIHR5 cGVkZWYgdHlwZW5hbWUgZWxmY3BwOjpTd2FwPHZhbHNpemUsIGJpZ19lbmRp YW4+OjpWYWx0eXBlCisgICAgICBWYWx0eXBlOworICAgIFZhbHR5cGUqIHd2 ID0gcmVpbnRlcnByZXRfY2FzdDxWYWx0eXBlKj4odmlldyk7CisgICAgQWRk cmVzcyB4ID0JcHN5bXZhbC0+dmFsdWUob2JqZWN0LCBhZGRlbmQpOworICAg IGVsZmNwcDo6U3dhcDx2YWxzaXplLCBiaWdfZW5kaWFuPjo6d3JpdGV2YWwo d3YsCisgICAgICBzdGF0aWNfY2FzdDxWYWx0eXBlPih4KSk7CisgICAgcmV0 dXJuIChyZWxvY19wcm9wZXJ0eS0+Y2hlY2t1cF94X3ZhbHVlKHgpCisJICAg ID8gVGhpczo6U1RBVFVTX09LQVkKKwkgICAgOiBUaGlzOjpTVEFUVVNfT1ZF UkZMT1cpOworICB9CisKKyAgLy8gRG8gcmVsb2NhdGUuIFVwZGF0ZSBzZWxl Y3RlZCBiaXRzIGluIHRleHQuCisgIC8vIG5ld192YWwgPSAodmFsICYgfmRz dF9tYXNrKSB8IChpbW1lZCA8PCBkb2Zmc2V0KQorCisgIHRlbXBsYXRlPGlu dCB2YWxzaXplPgorICBzdGF0aWMgaW5saW5lIHR5cGVuYW1lIFRoaXM6OlN0 YXR1cworICByZWxhX2dlbmVyYWwodW5zaWduZWQgY2hhciogdmlldywKKwkg ICAgICAgY29uc3QgU2l6ZWRfcmVsb2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlh bj4qIG9iamVjdCwKKwkgICAgICAgY29uc3QgU3ltYm9sX3ZhbHVlPHNpemU+ KiBwc3ltdmFsLAorCSAgICAgICB0eXBlbmFtZSBlbGZjcHA6OlN3YXA8c2l6 ZSwgYmlnX2VuZGlhbj46OlZhbHR5cGUgYWRkZW5kLAorCSAgICAgICBjb25z dCBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5KiByZWxvY19wcm9wZXJ0eSkKKyAg eworICAgIC8vIENhbGN1bGF0ZSByZWxvY2F0aW9uLgorICAgIEFkZHJlc3Mg eCA9CXBzeW12YWwtPnZhbHVlKG9iamVjdCwgYWRkZW5kKTsKKworICAgIC8v IFNlbGVjdCBiaXRzIGZyb20gWC4KKyAgICBBZGRyZXNzIGltbWVkID0gcmVs b2NfcHJvcGVydHktPnNlbGVjdF94X3ZhbHVlKHgpOworCisgICAgLy8gVXBk YXRlIHZpZXcuCisgICAgY29uc3QgQUFyY2g2NF9yZWxvY19wcm9wZXJ0eTo6 UmVsb2NfaW5zdCBpbnN0ID0KKyAgICAgIHJlbG9jX3Byb3BlcnR5LT5yZWxv Y19pbnN0KCk7CisgICAgLy8gSWYgaXQgaXMgYSBkYXRhIHJlbG9jYXRpb24g b3IgaW5zdHJ1Y3Rpb24gaGFzIDIgcGFydHMgb2YgaW1tZWRpYXRlCisgICAg Ly8gZmllbGRzLCB5b3Ugc2hvdWxkIG5vdCBjYWxsIHJlbGFfZ2VuZXJhbC4K KyAgICBnb2xkX2Fzc2VydChhYXJjaDY0X2hvd3RvW2luc3RdLmRvZmZzZXQy ID09IC0xICYmCisJCWFhcmNoNjRfaG93dG9baW5zdF0uZG9mZnNldCAhPSAt MSk7CisgICAgVGhpczo6dGVtcGxhdGUgdXBkYXRlX3ZpZXc8dmFsc2l6ZT4o dmlldywgaW1tZWQsCisJCQkJCWFhcmNoNjRfaG93dG9baW5zdF0uZG9mZnNl dCwKKwkJCQkJYWFyY2g2NF9ob3d0b1tpbnN0XS5kc3RfbWFzayk7CisKKyAg ICAvLyBEbyBjaGVjayBvdmVyZmxvdyBvciBhbGlnbm1lbnQgaWYgbmVlZGVk LgorICAgIHJldHVybiAocmVsb2NfcHJvcGVydHktPmNoZWNrdXBfeF92YWx1 ZSh4KQorCSAgICA/IFRoaXM6OlNUQVRVU19PS0FZCisJICAgIDogVGhpczo6 U1RBVFVTX09WRVJGTE9XKTsKKyAgfQorCisgIC8vIERvIHJlbG9jYXRlLiBV cGRhdGUgc2VsZWN0ZWQgYml0cyBpbiB0ZXh0LgorICAvLyBuZXcgdmFsID0g KHZhbCAmIH5kc3RfbWFzaykgfCAoaW1tZWQgPDwgZG9mZnNldCkKKworICB0 ZW1wbGF0ZTxpbnQgdmFsc2l6ZT4KKyAgc3RhdGljIGlubGluZSB0eXBlbmFt ZSBUaGlzOjpTdGF0dXMKKyAgcmVsYV9nZW5lcmFsKAorICAgIHVuc2lnbmVk IGNoYXIqIHZpZXcsCisgICAgdHlwZW5hbWUgZWxmY3BwOjpTd2FwPHNpemUs IGJpZ19lbmRpYW4+OjpWYWx0eXBlIHMsCisgICAgdHlwZW5hbWUgZWxmY3Bw OjpTd2FwPHNpemUsIGJpZ19lbmRpYW4+OjpWYWx0eXBlIGFkZGVuZCwKKyAg ICBjb25zdCBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5KiByZWxvY19wcm9wZXJ0 eSkKKyAgeworICAgIC8vIENhbGN1bGF0ZSByZWxvY2F0aW9uLgorICAgIEFk ZHJlc3MgeCA9IHMgKyBhZGRlbmQ7CisKKyAgICAvLyBTZWxlY3QgYml0cyBm cm9tIFguCisgICAgQWRkcmVzcyBpbW1lZCA9IHJlbG9jX3Byb3BlcnR5LT5z ZWxlY3RfeF92YWx1ZSh4KTsKKworICAgIC8vIFVwZGF0ZSB2aWV3LgorICAg IGNvbnN0IEFBcmNoNjRfcmVsb2NfcHJvcGVydHk6OlJlbG9jX2luc3QgaW5z dCA9CisgICAgICByZWxvY19wcm9wZXJ0eS0+cmVsb2NfaW5zdCgpOworICAg IC8vIElmIGl0IGlzIGEgZGF0YSByZWxvY2F0aW9uIG9yIGluc3RydWN0aW9u IGhhcyAyIHBhcnRzIG9mIGltbWVkaWF0ZQorICAgIC8vIGZpZWxkcywgeW91 IHNob3VsZCBub3QgY2FsbCByZWxhX2dlbmVyYWwuCisgICAgZ29sZF9hc3Nl cnQoYWFyY2g2NF9ob3d0b1tpbnN0XS5kb2Zmc2V0MiA9PSAtMSAmJgorCQlh YXJjaDY0X2hvd3RvW2luc3RdLmRvZmZzZXQgIT0gLTEpOworICAgIFRoaXM6 OnRlbXBsYXRlIHVwZGF0ZV92aWV3PHZhbHNpemU+KHZpZXcsIGltbWVkLAor CQkJCQlhYXJjaDY0X2hvd3RvW2luc3RdLmRvZmZzZXQsCisJCQkJCWFhcmNo NjRfaG93dG9baW5zdF0uZHN0X21hc2spOworCisgICAgLy8gRG8gY2hlY2sg b3ZlcmZsb3cgb3IgYWxpZ25tZW50IGlmIG5lZWRlZC4KKyAgICByZXR1cm4g KHJlbG9jX3Byb3BlcnR5LT5jaGVja3VwX3hfdmFsdWUoeCkKKwkgICAgPyBU aGlzOjpTVEFUVVNfT0tBWQorCSAgICA6IFRoaXM6OlNUQVRVU19PVkVSRkxP Vyk7CisgIH0KKworICAvLyBEbyBhZGRyZXNzIHJlbGF0aXZlIHJlbG9jYXRl LiBVcGRhdGUgc2VsZWN0ZWQgYml0cyBpbiB0ZXh0LgorICAvLyBuZXcgdmFs ID0gKHZhbCAmIH5kc3RfbWFzaykgfCAoaW1tZWQgPDwgZG9mZnNldCkKKwor ICB0ZW1wbGF0ZTxpbnQgdmFsc2l6ZT4KKyAgc3RhdGljIGlubGluZSB0eXBl bmFtZSBUaGlzOjpTdGF0dXMKKyAgcGNyZWxhX2dlbmVyYWwoCisgICAgdW5z aWduZWQgY2hhciogdmlldywKKyAgICBjb25zdCBTaXplZF9yZWxvYmpfZmls ZTxzaXplLCBiaWdfZW5kaWFuPiogb2JqZWN0LAorICAgIGNvbnN0IFN5bWJv bF92YWx1ZTxzaXplPiogcHN5bXZhbCwKKyAgICB0eXBlbmFtZSBlbGZjcHA6 OlN3YXA8c2l6ZSwgYmlnX2VuZGlhbj46OlZhbHR5cGUgYWRkZW5kLAorICAg IEFkZHJlc3MgYWRkcmVzcywKKyAgICBjb25zdCBBQXJjaDY0X3JlbG9jX3By b3BlcnR5KiByZWxvY19wcm9wZXJ0eSkKKyAgeworICAgIC8vIENhbGN1bGF0 ZSByZWxvY2F0aW9uLgorICAgIEFkZHJlc3MgeCA9CXBzeW12YWwtPnZhbHVl KG9iamVjdCwgYWRkZW5kKSAtIGFkZHJlc3M7CisKKyAgICAvLyBTZWxlY3Qg Yml0cyBmcm9tIFguCisgICAgQWRkcmVzcyBpbW1lZCA9IHJlbG9jX3Byb3Bl cnR5LT5zZWxlY3RfeF92YWx1ZSh4KTsKKworICAgIC8vIFVwZGF0ZSB2aWV3 LgorICAgIGNvbnN0IEFBcmNoNjRfcmVsb2NfcHJvcGVydHk6OlJlbG9jX2lu c3QgaW5zdCA9CisgICAgICByZWxvY19wcm9wZXJ0eS0+cmVsb2NfaW5zdCgp OworICAgIC8vIElmIGl0IGlzIGEgZGF0YSByZWxvY2F0aW9uIG9yIGluc3Ry dWN0aW9uIGhhcyAyIHBhcnRzIG9mIGltbWVkaWF0ZQorICAgIC8vIGZpZWxk cywgeW91IHNob3VsZCBub3QgY2FsbCBwY3JlbGFfZ2VuZXJhbC4KKyAgICBn b2xkX2Fzc2VydChhYXJjaDY0X2hvd3RvW2luc3RdLmRvZmZzZXQyID09IC0x ICYmCisJCWFhcmNoNjRfaG93dG9baW5zdF0uZG9mZnNldCAhPSAtMSk7Cisg ICAgVGhpczo6dGVtcGxhdGUgdXBkYXRlX3ZpZXc8dmFsc2l6ZT4odmlldywg aW1tZWQsCisJCQkJCWFhcmNoNjRfaG93dG9baW5zdF0uZG9mZnNldCwKKwkJ CQkJYWFyY2g2NF9ob3d0b1tpbnN0XS5kc3RfbWFzayk7CisKKyAgICAvLyBE byBjaGVjayBvdmVyZmxvdyBvciBhbGlnbm1lbnQgaWYgbmVlZGVkLgorICAg IHJldHVybiAocmVsb2NfcHJvcGVydHktPmNoZWNrdXBfeF92YWx1ZSh4KQor CSAgICA/IFRoaXM6OlNUQVRVU19PS0FZCisJICAgIDogVGhpczo6U1RBVFVT X09WRVJGTE9XKTsKKyAgfQorCisgIC8vIENhbGN1bGF0ZSBQRyhTK0EpIC0g UEcoYWRkcmVzcyksIHVwZGF0ZSBhZHJwIGluc3RydWN0aW9uLgorICAvLyBS X0FBUkNINjRfQURSX1BSRUxfUEdfSEkyMQorCisgIHN0YXRpYyBpbmxpbmUg dHlwZW5hbWUgVGhpczo6U3RhdHVzCisgIGFkcnAoCisgICAgdW5zaWduZWQg Y2hhciogdmlldywKKyAgICBBZGRyZXNzIHNhLAorICAgIEFkZHJlc3MgYWRk cmVzcykKKyAgeworICAgIHR5cGVuYW1lIGVsZmNwcDo6U3dhcDxzaXplLCBi aWdfZW5kaWFuPjo6VmFsdHlwZSB4ID0KKyAgICAgIFRoaXM6OlBhZ2Uoc2Ep IC0gVGhpczo6UGFnZShhZGRyZXNzKTsKKyAgICB1cGRhdGVfYWRyKHZpZXcs IHgsIE5VTEwpOworICAgIHJldHVybiAoc2l6ZSA9PSA2NCAmJiBCaXRzPDMy Pjo6aGFzX292ZXJmbG93KHgpCisJICAgID8gVGhpczo6U1RBVFVTX09WRVJG TE9XCisJICAgIDogVGhpczo6U1RBVFVTX09LQVkpOworICB9CisKKyAgLy8g Q2FsY3VsYXRlIFBHKFMrQSkgLSBQRyhhZGRyZXNzKSwgdXBkYXRlIGFkcnAg aW5zdHJ1Y3Rpb24uCisgIC8vIFJfQUFSQ0g2NF9BRFJfUFJFTF9QR19ISTIx CisKKyAgc3RhdGljIGlubGluZSB0eXBlbmFtZSBUaGlzOjpTdGF0dXMKKyAg YWRycCh1bnNpZ25lZCBjaGFyKiB2aWV3LAorICAgICAgIGNvbnN0IFNpemVk X3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+KiBvYmplY3QsCisgICAg ICAgY29uc3QgU3ltYm9sX3ZhbHVlPHNpemU+KiBwc3ltdmFsLAorICAgICAg IEFkZHJlc3MgYWRkZW5kLAorICAgICAgIEFkZHJlc3MgYWRkcmVzcywKKyAg ICAgICBjb25zdCBBQXJjaDY0X3JlbG9jX3Byb3BlcnR5KiByZWxvY19wcm9w ZXJ0eSkKKyAgeworICAgIEFkZHJlc3Mgc2EgPSBwc3ltdmFsLT52YWx1ZShv YmplY3QsIGFkZGVuZCk7CisgICAgdHlwZW5hbWUgZWxmY3BwOjpTd2FwPHNp emUsIGJpZ19lbmRpYW4+OjpWYWx0eXBlIHggPQorCVRoaXM6OlBhZ2Uoc2Ep IC0gVGhpczo6UGFnZShhZGRyZXNzKTsKKyAgICB1cGRhdGVfYWRyKHZpZXcs IHgsIHJlbG9jX3Byb3BlcnR5KTsKKyAgICByZXR1cm4gKHJlbG9jX3Byb3Bl cnR5LT5jaGVja3VwX3hfdmFsdWUoeCkKKwkgICAgPyBUaGlzOjpTVEFUVVNf T0tBWQorCSAgICA6IFRoaXM6OlNUQVRVU19PVkVSRkxPVyk7CisgIH0KKwor fTsKKwogLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUg UExULgogCiB0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgpA QCAtMTAxNiwyOSArMTQ4MywxMiBAQCBUYXJnZXRfYWFyY2g2NDxzaXplLCBi aWdfZW5kaWFuPjo6cGx0X2VudHJ5X3NpemUoKSBjb25zdAogdGVtcGxhdGU8 aW50IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4KIHRsczo6VGxzX29wdGltaXph dGlvbgogVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46Om9wdGlt aXplX3Rsc19yZWxvYyhib29sIC8qIGlzX2ZpbmFsICovLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgLyogcl90eXBlICovKQorCQkJCQkJICAgICBpbnQgLyogcl90eXBlICov KQogewogICAvL1RPRE8KICAgcmV0dXJuIHRsczo6VExTT1BUX05PTkU7CiB9 CiAKLS8vIEdldCB0aGUgUmVmZXJlbmNlX2ZsYWdzIGZvciBhIHBhcnRpY3Vs YXIgcmVsb2NhdGlvbi4KLXRlbXBsYXRlPGludCBzaXplLCBib29sIGJpZ19l bmRpYW4+Ci1pbnQKLVRhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+ OjpTY2FuOjpnZXRfcmVmZXJlbmNlX2ZsYWdzKHVuc2lnbmVkIGludCByX3R5 cGUpCi17Ci0gIHN3aXRjaCAocl90eXBlKQotICAgIHsKLSAgICBjYXNlIGVs ZmNwcDo6Ul9BQVJDSDY0X05PTkU6Ci0gICAgICAvLyBObyBzeW1ib2wgcmVm ZXJlbmNlLgotICAgICAgcmV0dXJuIDA7Ci0gICAgLy9UT0RPCi0gICAgZGVm YXVsdDoKLSAgICAgIC8vIE5vdCBleHBlY3RlZC4gV2Ugd2lsbCBnaXZlIGFu IGVycm9yIGxhdGVyLgotICAgIHJldHVybiAwOwotICAgIH0KLX0KLQogLy8g UmV0dXJucyB0cnVlIGlmIHRoaXMgcmVsb2NhdGlvbiB0eXBlIGNvdWxkIGJl IHRoYXQgb2YgYSBmdW5jdGlvbiBwb2ludGVyLgogCiB0ZW1wbGF0ZTxpbnQg c2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgpAQCAtMTA1MSw3ICsxNTAxLDcgQEAg VGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46OlNjYW46OnBvc3Np YmxlX2Z1bmN0aW9uX3BvaW50ZXJfcmVsb2MoCiAgICAgY2FzZSBlbGZjcHA6 OlJfQUFSQ0g2NF9BQlM2NDoKICAgICAvL1RPRE8KICAgICAgIHsKLSAgICAg ICAgcmV0dXJuIHRydWU7CisJcmV0dXJuIHRydWU7CiAgICAgICB9CiAgICAg fQogICByZXR1cm4gZmFsc2U7CkBAIC0xMDc4LDcgKzE1MjgsNyBAQCBUYXJn ZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6U2Nhbjo6bG9jYWxfcmVs b2NfbWF5X2JlX2Z1bmN0aW9uX3BvaW50ZXIoCiAgIC8vIG5vdCBwb3NzaWJs ZSB0byBkaXN0aW5ndWlzaCBwb2ludGVyIHRha2VuIHZlcnN1cyBhIGNhbGwg YnkgbG9va2luZyBhdAogICAvLyB0aGUgcmVsb2NhdGlvbiB0eXBlcy4KICAg cmV0dXJuIChwYXJhbWV0ZXJzLT5vcHRpb25zKCkuc2hhcmVkKCkKLSAgICAg ICAgICB8fCBwb3NzaWJsZV9mdW5jdGlvbl9wb2ludGVyX3JlbG9jKHJfdHlw ZSkpOworCSAgfHwgcG9zc2libGVfZnVuY3Rpb25fcG9pbnRlcl9yZWxvYyhy X3R5cGUpKTsKIH0KIAogLy8gRm9yIHNhZmUgSUNGLCBzY2FuIGEgcmVsb2Nh dGlvbiBmb3IgYSBnbG9iYWwgc3ltYm9sIHRvIGNoZWNrIGlmIGl0CkBAIC0x MTAxLDEwICsxNTUxLDEwIEBAIFRhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19l bmRpYW4+OjpTY2FuOjpnbG9iYWxfcmVsb2NfbWF5X2JlX2Z1bmN0aW9uX3Bv aW50ZXIoCiAgIC8vIFdoZW4gYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSwg ZG8gbm90IGZvbGQgc3ltYm9scyB3aG9zZSB2aXNpYmlsaXR5CiAgIC8vIGlz IGhpZGRlbiwgaW50ZXJuYWwgb3IgcHJvdGVjdGVkLgogICByZXR1cm4gKChw YXJhbWV0ZXJzLT5vcHRpb25zKCkuc2hhcmVkKCkKLSAgICAgICAgICAgJiYg KGdzeW0tPnZpc2liaWxpdHkoKSA9PSBlbGZjcHA6OlNUVl9JTlRFUk5BTAot ICAgICAgICAgICAgICAgfHwgZ3N5bS0+dmlzaWJpbGl0eSgpID09IGVsZmNw cDo6U1RWX1BST1RFQ1RFRAotICAgICAgICAgICAgICAgfHwgZ3N5bS0+dmlz aWJpbGl0eSgpID09IGVsZmNwcDo6U1RWX0hJRERFTikpCi0gICAgICAgICAg fHwgcG9zc2libGVfZnVuY3Rpb25fcG9pbnRlcl9yZWxvYyhyX3R5cGUpKTsK KwkgICAmJiAoZ3N5bS0+dmlzaWJpbGl0eSgpID09IGVsZmNwcDo6U1RWX0lO VEVSTkFMCisJICAgICAgIHx8IGdzeW0tPnZpc2liaWxpdHkoKSA9PSBlbGZj cHA6OlNUVl9QUk9URUNURUQKKwkgICAgICAgfHwgZ3N5bS0+dmlzaWJpbGl0 eSgpID09IGVsZmNwcDo6U1RWX0hJRERFTikpCisJICB8fCBwb3NzaWJsZV9m dW5jdGlvbl9wb2ludGVyX3JlbG9jKHJfdHlwZSkpOwogfQogCiAvLyBSZXBv cnQgYW4gdW5zdXBwb3J0ZWQgcmVsb2NhdGlvbiBhZ2FpbnN0IGEgbG9jYWwg c3ltYm9sLgpAQCAtMTEyNSw3ICsxNTc1LDcgQEAgVGFyZ2V0X2FhcmNoNjQ8 c2l6ZSwgYmlnX2VuZGlhbj46OlNjYW46OnVuc3VwcG9ydGVkX3JlbG9jX2xv Y2FsKAogdGVtcGxhdGU8aW50IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4KIHZv aWQKIFRhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpTY2FuOjpj aGVja19ub25fcGljKFJlbG9iaiogb2JqZWN0LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IHJfdHlwZSkKKwkJCQkJCSAgICAgIHVuc2lnbmVkIGludCByX3R5 cGUpCiB7CiAgIGdvbGRfYXNzZXJ0KHJfdHlwZSAhPSBlbGZjcHA6OlJfQUFS Q0g2NF9OT05FKTsKIApAQCAtMTE1Nyw3ICsxNjA3LDcgQEAgVGFyZ2V0X2Fh cmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46OlNjYW46OmNoZWNrX25vbl9waWMo UmVsb2JqKiBvYmplY3QsCiAgICAgcmV0dXJuOwogICBnb2xkX2Fzc2VydChw YXJhbWV0ZXJzLT5vcHRpb25zKCkub3V0cHV0X2lzX3Bvc2l0aW9uX2luZGVw ZW5kZW50KCkpOwogICBvYmplY3QtPmVycm9yKF8oInJlcXVpcmVzIHVuc3Vw cG9ydGVkIGR5bmFtaWMgcmVsb2M7ICIKLSAgICAgICAgICAgICAgICAgICJy ZWNvbXBpbGUgd2l0aCAtZlBJQyIpKTsKKwkJICAicmVjb21waWxlIHdpdGgg LWZQSUMiKSk7CiAgIHRoaXMtPmlzc3VlZF9ub25fcGljX2Vycm9yXyA9IHRy dWU7CiAgIHJldHVybjsKIH0KQEAgLTExNzAsNyArMTYyMCw3IEBAIFRhcmdl dF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpTY2FuOjpsb2NhbCgKICAg ICBTeW1ib2xfdGFibGUqIC8qIHN5bXRhYiAqLywKICAgICBMYXlvdXQqIC8q IGxheW91dCAqLywKICAgICBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5k aWFuPiogLyogdGFyZ2V0ICovLAotICAgIFNpemVkX3JlbG9ial9maWxlPHNp emUsIGJpZ19lbmRpYW4+KiAvKiBvYmplY3QgKi8sCisgICAgU2l6ZWRfcmVs b2JqX2ZpbGU8c2l6ZSwgYmlnX2VuZGlhbj4qIG9iamVjdCwKICAgICB1bnNp Z25lZCBpbnQgLyogZGF0YV9zaG5keCAqLywKICAgICBPdXRwdXRfc2VjdGlv biogLyogb3V0cHV0X3NlY3Rpb24gKi8sCiAgICAgY29uc3QgZWxmY3BwOjpS ZWxhPHNpemUsIGJpZ19lbmRpYW4+JiAvKiByZWxvYyAqLywKQEAgLTExODMs MTAgKzE2MzMsMzUgQEAgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlh bj46OlNjYW46OmxvY2FsKAogCiAgIHN3aXRjaCAocl90eXBlKQogICAgIHsK LSAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X05PTkU6CisgICAgY2FzZSBl bGZjcHA6OlJfQUFSQ0g2NF9BQlM2NDoKKyAgICBjYXNlIGVsZmNwcDo6Ul9B QVJDSDY0X0FCUzMyOgorICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfQUJT MTY6CisgICAgICAvLyBJZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IG9y IHBpZSwgd2UgbmVlZCB0byBtYXJrIHRoaXMgYXMgYSBkeW5taWMKKyAgICAg IC8vIHJlbG9jdGlvbiwgc28gdGhhdCB0aGUgZHluYW1pYyBsb2FkZXIgY2Fu IHJlbG9jYXRlIGl0LgorICAgICAgLy8gTm90IHN1cHBvcnRlZCB5ZXQuCisg ICAgICBpZiAocGFyYW1ldGVycy0+b3B0aW9ucygpLm91dHB1dF9pc19wb3Np dGlvbl9pbmRlcGVuZGVudCgpKQorCXsKKwkgIGdvbGRfZXJyb3IoXygiJXM6 IHVuc3VwcG9ydGVkIEFCUzY0IHJlbG9jYXRpb24gdHlwZSBmb3IgcGllIG9y ICIKKwkJICAgICAgICJzaGFyZWQgbGlicmFyeS5cbiIpLAorCQkgICAgIG9i amVjdC0+bmFtZSgpLmNfc3RyKCkpOworCX0KKyAgICAgIGJyZWFrOworCisg ICAgICAvLyBSZWxvY2F0aW9ucyB0byBnZW5lcmF0ZSAxOSwgMjEgYW5kIDMz LWJpdCBQQy1yZWxhdGl2ZSBhZGRyZXNzCisgICAgY2FzZSBlbGZjcHA6OlJf QUFSQ0g2NF9BRFJfUFJFTF9QR19ISTIxOiAvLyAyNzUKKyAgICBjYXNlIGVs ZmNwcDo6Ul9BQVJDSDY0X0xEU1Q4X0FCU19MTzEyX05DOiAvLyAyNzgKKyAg ICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0xEU1Q2NF9BQlNfTE8xMl9OQzog Ly8gMjg2CisgICAgY2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9BRERfQUJTX0xP MTJfTkM6IC8vIDI3NwogICAgICAgYnJlYWs7CiAKLSAgICAgIC8vVE9ETwor ICAgICAgLy8gQ29udHJvbCBmbG93LCBwYy1yZWxhdGl2ZS4gV2UgZG9uJ3Qg bmVlZCB0byBkbyBhbnl0aGluZyBmb3IgYSByZWxhdGl2ZQorICAgICAgLy8g YWRkcmVzc2luZyByZWxvY2F0aW9uIGFnYWluc3QgYSBsb2NhbCBzeW1ib2wg aWYgaXQgZG9lcyBub3QgcmVmZXJlbmNlCisgICAgICAvLyB0aGUgR09ULgor ICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfQ0FMTDI2OiAvLyAyODMKKyAg ICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHVuc3VwcG9ydGVk X3JlbG9jX2xvY2FsKG9iamVjdCwgcl90eXBlKTsKICAgICB9CiB9CiAKQEAg LTEyMDcsMTggKzE2ODIsMTMyIEBAIFRhcmdldF9hYXJjaDY0PHNpemUsIGJp Z19lbmRpYW4+OjpTY2FuOjp1bnN1cHBvcnRlZF9yZWxvY19nbG9iYWwoCiB0 ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgogaW5saW5lIHZv aWQKIFRhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpTY2FuOjpn bG9iYWwoCi0gICAgU3ltYm9sX3RhYmxlKiAvKiBzeW10YWIgKi8sCi0gICAg TGF5b3V0KiAvKiBsYXlvdXQgKi8sCi0gICAgVGFyZ2V0X2FhcmNoNjQ8c2l6 ZSwgYmlnX2VuZGlhbj4qIC8qIHRhcmdldCAqLywKKyAgICBTeW1ib2xfdGFi bGUqIHN5bXRhYiwKKyAgICBMYXlvdXQqIGxheW91dCwKKyAgICBUYXJnZXRf YWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPiogdGFyZ2V0LAogICAgIFNpemVk X3JlbG9ial9maWxlPHNpemUsIGJpZ19lbmRpYW4+KiAvKiBvYmplY3QgKi8s CiAgICAgdW5zaWduZWQgaW50IC8qIGRhdGFfc2huZHggKi8sCiAgICAgT3V0 cHV0X3NlY3Rpb24qIC8qIG91dHB1dF9zZWN0aW9uICovLAogICAgIGNvbnN0 IGVsZmNwcDo6UmVsYTxzaXplLCBiaWdfZW5kaWFuPiYgLyogcmVsb2MgKi8s Ci0gICAgdW5zaWduZWQgaW50IC8qIHJfdHlwZSAqLywKLSAgICBTeW1ib2wq IC8qIGdzeW0gKi8pCisgICAgdW5zaWduZWQgaW50IHJfdHlwZSwKKyAgICBT eW1ib2wqIGdzeW0pCiB7Ci0gIC8vVE9ETworICBzd2l0Y2ggKHJfdHlwZSkK KyAgICB7CisgICAgY2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9BQlM2NDoKKyAg ICAgIC8vIFRoaXMgaXMgdXNlZCB0byBmaWxsIHRoZSBHT1QgYWJzb2x1dGUg YWRkcmVzcy4KKyAgICAgIGlmIChnc3ltLT5uZWVkc19wbHRfZW50cnkoKSkK Kwl7CisJICB0YXJnZXQtPm1ha2VfcGx0X2VudHJ5KHN5bXRhYiwgbGF5b3V0 LCBnc3ltKTsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgZWxmY3Bw OjpSX0FBUkNINjRfQURSX1BSRUxfUEdfSEkyMToKKyAgICBjYXNlIGVsZmNw cDo6Ul9BQVJDSDY0X0FEUl9QUkVMX1BHX0hJMjFfTkM6CisgICAgY2FzZSBl bGZjcHA6OlJfQUFSQ0g2NF9BRERfQUJTX0xPMTJfTkM6CisgICAgICB7CisJ Ly8gRG8gbm90aGluZyBoZXJlLgorCWJyZWFrOworICAgICAgfQorCisgICAg Y2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9BRFJfR09UX1BBR0U6CisgICAgY2Fz ZSBlbGZjcHA6OlJfQUFSQ0g2NF9MRDY0X0dPVF9MTzEyX05DOgorICAgICAg eworCS8vIFRoaXMgcGFpciBvZiByZWxvY2F0aW9ucyBpcyB1c2VkIHRvIGFj Y2VzcyBhIHNwZWNpZmljIEdPVCBlbnRyeS4KKwkvLyBOb3RlIGEgR09UIGVu dHJ5IGlzIGFuICphZGRyZXNzKiB0byBhIHN5bWJvbC4KKwkvLyBUaGUgc3lt Ym9sIHJlcXVpcmVzIGEgR09UIGVudHJ5CisJT3V0cHV0X2RhdGFfZ290X2Fh cmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj4qIGdvdCA9CisJICB0YXJnZXQtPmdv dF9zZWN0aW9uKHN5bXRhYiwgbGF5b3V0KTsKKwlpZiAoZ3N5bS0+ZmluYWxf dmFsdWVfaXNfa25vd24oKSkKKwkgIHsKKwkgICAgZ290LT5hZGRfZ2xvYmFs KGdzeW0sIEdPVF9UWVBFX1NUQU5EQVJEKTsKKwkgIH0KKwllbHNlCisJICB7 CisJICAgIFJlbG9jX3NlY3Rpb24qIHJlbGFfZHluID0gdGFyZ2V0LT5yZWxh X2R5bl9zZWN0aW9uKGxheW91dCk7CisJICAgIGlmIChnc3ltLT5pc19mcm9t X2R5bm9iaigpCisJCXx8IGdzeW0tPmlzX3VuZGVmaW5lZCgpCisJCXx8IGdz eW0tPmlzX3ByZWVtcHRpYmxlKCkKKwkJfHwgKGdzeW0tPnZpc2liaWxpdHko KSA9PSBlbGZjcHA6OlNUVl9QUk9URUNURUQKKwkJICAgICYmIHBhcmFtZXRl cnMtPm9wdGlvbnMoKS5zaGFyZWQoKSkpCisJICAgICAgZ290LT5hZGRfZ2xv YmFsX3dpdGhfcmVsKGdzeW0sIEdPVF9UWVBFX1NUQU5EQVJELAorCQkJCSAg ICAgICByZWxhX2R5biwgZWxmY3BwOjpSX0FBUkNINjRfR0xPQl9EQVQpOwor CSAgICBlbHNlCisJICAgICAgeworCQkvLyBOb3QgaW1wbGVtZW50ZWQgeWV0 LgorCQlnb2xkX2Fzc2VydChmYWxzZSk7CisJICAgICAgfQorCSAgfQorCWJy ZWFrOworICAgICAgfQorCisgICAgY2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9K VU1QMjY6CisgICAgY2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9DQUxMMjY6Cisg ICAgICB7CisJaWYgKGdzeW0tPmZpbmFsX3ZhbHVlX2lzX2tub3duKCkpCisJ ICBicmVhazsKKworCWlmIChnc3ltLT5pc19kZWZpbmVkKCkgJiYKKwkgICAg IWdzeW0tPmlzX2Zyb21fZHlub2JqKCkgJiYKKwkgICAgIWdzeW0tPmlzX3By ZWVtcHRpYmxlKCkpCisJICBicmVhazsKKworCS8vIE1ha2UgcGx0IGVudHJ5 IGZvciBmdW5jdGlvbiBjYWxsLgorCWNvbnN0IEFBcmNoNjRfcmVsb2NfcHJv cGVydHkqIGFycCA9CisJICAgIGFhcmNoNjRfcmVsb2NfcHJvcGVydHlfdGFi bGUtPmdldF9yZWxvY19wcm9wZXJ0eShyX3R5cGUpOworCWdvbGRfYXNzZXJ0 KGFycCAhPSBOVUxMKTsKKwl0YXJnZXQtPm1ha2VfcGx0X2VudHJ5KHN5bXRh YiwgbGF5b3V0LCBnc3ltKTsKKwlicmVhazsKKyAgICAgIH0KKworICAgIGRl ZmF1bHQ6CisgICAgICBnb2xkX2Vycm9yKF8oIiVzOiB1bnN1cHBvcnRlZCBy ZWxvYyB0eXBlIiksCisJCSBhYXJjaDY0X3JlbG9jX3Byb3BlcnR5X3RhYmxl LT4KKwkJICAgcmVsb2NfbmFtZV9pbl9lcnJvcl9tZXNzYWdlKHJfdHlwZSku Y19zdHIoKSk7CisgICAgfQogICByZXR1cm47Cit9ICAvLyBFbmQgb2YgU2Nh bjo6Z2xvYmFsCisKKy8vIENyZWF0ZSB0aGUgUExUIHNlY3Rpb24uCit0ZW1w bGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdfZW5kaWFuPgordm9pZAorVGFyZ2V0 X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46Om1ha2VfcGx0X3NlY3Rpb24o CisgIFN5bWJvbF90YWJsZSogc3ltdGFiLCBMYXlvdXQqIGxheW91dCkKK3sK KyAgaWYgKHRoaXMtPnBsdF8gPT0gTlVMTCkKKyAgICB7CisgICAgICAvLyBD cmVhdGUgdGhlIEdPVCBzZWN0aW9uIGZpcnN0LgorICAgICAgdGhpcy0+Z290 X3NlY3Rpb24oc3ltdGFiLCBsYXlvdXQpOworCisgICAgICB0aGlzLT5wbHRf ID0gdGhpcy0+bWFrZV9kYXRhX3BsdChsYXlvdXQsIHRoaXMtPmdvdF9wbHRf KTsKKworICAgICAgbGF5b3V0LT5hZGRfb3V0cHV0X3NlY3Rpb25fZGF0YSgi LnBsdCIsIGVsZmNwcDo6U0hUX1BST0dCSVRTLAorCQkJCSAgICAgIChlbGZj cHA6OlNIRl9BTExPQworCQkJCSAgICAgICB8IGVsZmNwcDo6U0hGX0VYRUNJ TlNUUiksCisJCQkJICAgICAgdGhpcy0+cGx0XywgT1JERVJfUExULCBmYWxz ZSk7CisKKyAgICAgIC8vIE1ha2UgdGhlIHNoX2luZm8gZmllbGQgb2YgLnJl bGEucGx0IHBvaW50IHRvIC5wbHQuCisgICAgICBPdXRwdXRfc2VjdGlvbiog cmVsYV9wbHRfb3MgPSB0aGlzLT5wbHRfLT5yZWxhX3BsdCgpLT5vdXRwdXRf c2VjdGlvbigpOworICAgICAgcmVsYV9wbHRfb3MtPnNldF9pbmZvX3NlY3Rp b24odGhpcy0+cGx0Xy0+b3V0cHV0X3NlY3Rpb24oKSk7CisgICAgfQorfQor CisvLyBDcmVhdGUgYSBQTFQgZW50cnkgZm9yIGEgZ2xvYmFsIHN5bWJvbC4K KwordGVtcGxhdGU8aW50IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4KK3ZvaWQK K1RhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjptYWtlX3BsdF9l bnRyeSgKKyAgICBTeW1ib2xfdGFibGUqIHN5bXRhYiwKKyAgICBMYXlvdXQq IGxheW91dCwKKyAgICBTeW1ib2wqIGdzeW0pCit7CisgIGlmIChnc3ltLT5o YXNfcGx0X29mZnNldCgpKQorICAgIHJldHVybjsKKworICBpZiAodGhpcy0+ cGx0XyA9PSBOVUxMKQorICAgIHRoaXMtPm1ha2VfcGx0X3NlY3Rpb24oc3lt dGFiLCBsYXlvdXQpOworCisgIHRoaXMtPnBsdF8tPmFkZF9lbnRyeShnc3lt KTsKIH0KIAogdGVtcGxhdGU8aW50IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4K QEAgLTEyNDEsMTEgKzE4MzAsMTIgQEAgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwg YmlnX2VuZGlhbj46OmdjX3Byb2Nlc3NfcmVsb2NzKAogICAgICAgcmV0dXJu OwogICAgIH0KIAotICBnb2xkOjpnY19wcm9jZXNzX3JlbG9jczxzaXplLCBi aWdfZW5kaWFuLAotICAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXRf YWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgZWxmY3BwOjpTSFRfUkVMQSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgdHlwZW5hbWUgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2Vu ZGlhbj46OlNjYW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVu YW1lIFRhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+OjpSZWxvY2F0 YWJsZV9zaXplX2Zvcl9yZWxvYz4oCisgIGdvbGQ6OmdjX3Byb2Nlc3NfcmVs b2NzPAorICAgIHNpemUsIGJpZ19lbmRpYW4sCisgICAgVGFyZ2V0X2FhcmNo NjQ8c2l6ZSwgYmlnX2VuZGlhbj4sCisgICAgZWxmY3BwOjpTSFRfUkVMQSwK KyAgICB0eXBlbmFtZSBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFu Pjo6U2NhbiwKKyAgICB0eXBlbmFtZSBUYXJnZXRfYWFyY2g2NDxzaXplLCBi aWdfZW5kaWFuPjo6UmVsb2NhdGFibGVfc2l6ZV9mb3JfcmVsb2M+KAogICAg IHN5bXRhYiwKICAgICBsYXlvdXQsCiAgICAgdGhpcywKQEAgLTEyODIsMTAg KzE4NzIsNyBAQCBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFuPjo6 c2Nhbl9yZWxvY3MoCiAJCSBvYmplY3QtPm5hbWUoKS5jX3N0cigpKTsKICAg ICAgIHJldHVybjsKICAgICB9Ci0KLSAgZ29sZDo6c2Nhbl9yZWxvY3M8c2l6 ZSwgYmlnX2VuZGlhbiwgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlh bj4sCi0gICAgICAgICAgICAgICAgICAgIGVsZmNwcDo6U0hUX1JFTEEsCi0g ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIFRhcmdldF9hYXJjaDY0PHNp emUsIGJpZ19lbmRpYW4+OjpTY2FuPigKKyAgZ29sZDo6c2Nhbl9yZWxvY3M8 c2l6ZSwgYmlnX2VuZGlhbiwgVGFyZ2V0X2FhcmNoNjQsIGVsZmNwcDo6U0hU X1JFTEEsIFNjYW4+KAogICAgIHN5bXRhYiwKICAgICBsYXlvdXQsCiAgICAg dGhpcywKQEAgLTEzMDQsMTEgKzE4OTEsNzMgQEAgVGFyZ2V0X2FhcmNoNjQ8 c2l6ZSwgYmlnX2VuZGlhbj46OnNjYW5fcmVsb2NzKAogdGVtcGxhdGU8aW50 IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4KIHZvaWQKIFRhcmdldF9hYXJjaDY0 PHNpemUsIGJpZ19lbmRpYW4+Ojpkb19maW5hbGl6ZV9zZWN0aW9ucygKLSAg ICBMYXlvdXQqIC8qIGxheW91dCAqLywKKyAgICBMYXlvdXQqIGxheW91dCwK ICAgICBjb25zdCBJbnB1dF9vYmplY3RzKiwKLSAgICBTeW1ib2xfdGFibGUq IC8qIHN5bXRhYiAqLykKKyAgICBTeW1ib2xfdGFibGUqIHN5bXRhYikKIHsK LSAgLy9UT0RPCisgIGNvbnN0IFJlbG9jX3NlY3Rpb24qIHJlbF9wbHQgPSAo dGhpcy0+cGx0XyA9PSBOVUxMCisJCQkJICA/IE5VTEwKKwkJCQkgIDogdGhp cy0+cGx0Xy0+cmVsYV9wbHQoKSk7CisgIGxheW91dC0+YWRkX3RhcmdldF9k eW5hbWljX3RhZ3MoZmFsc2UsIHRoaXMtPmdvdF9wbHRfLCByZWxfcGx0LAor CQkJCSAgdGhpcy0+cmVsYV9keW5fLCB0cnVlLCBmYWxzZSk7CisKKyAgLy8g U2V0IHRoZSBzaXplIG9mIHRoZSBfR0xPQkFMX09GRlNFVF9UQUJMRV8gc3lt Ym9sIHRvIHRoZSBzaXplIG9mCisgIC8vIHRoZSAuZ290LnBsdCBzZWN0aW9u LgorICBTeW1ib2wqIHN5bSA9IHRoaXMtPmdsb2JhbF9vZmZzZXRfdGFibGVf OworICBpZiAoc3ltICE9IE5VTEwpCisgICAgeworICAgICAgdWludDY0X3Qg ZGF0YV9zaXplID0gdGhpcy0+Z290X3BsdF8tPmN1cnJlbnRfZGF0YV9zaXpl KCk7CisgICAgICBzeW10YWItPmdldF9zaXplZF9zeW1ib2w8c2l6ZT4oc3lt KS0+c2V0X3N5bXNpemUoZGF0YV9zaXplKTsKKworICAgICAgLy8gSWYgdGhl IC5nb3Qgc2VjdGlvbiBpcyBtb3JlIHRoYW4gMHg4MDAwIGJ5dGVzLCB3ZSBh ZGQKKyAgICAgIC8vIDB4ODAwMCB0byB0aGUgdmFsdWUgb2YgX0dMT0JBTF9P RkZTRVRfVEFCTEVfLCBzbyB0aGF0IDE2CisgICAgICAvLyBiaXQgcmVsb2Nh dGlvbnMgaGF2ZSBhIGdyZWF0ZXIgY2hhbmNlIG9mIHdvcmtpbmcuCisgICAg ICBpZiAoZGF0YV9zaXplID49IDB4ODAwMCkKKwlzeW10YWItPmdldF9zaXpl ZF9zeW1ib2w8c2l6ZT4oc3ltKS0+c2V0X3ZhbHVlKAorCSAgc3ltdGFiLT5n ZXRfc2l6ZWRfc3ltYm9sPHNpemU+KHN5bSktPnZhbHVlKCkgKyAweDgwMDAp OworICAgIH0KKworICBpZiAocGFyYW1ldGVycy0+ZG9pbmdfc3RhdGljX2xp bmsoKQorICAgICAgJiYgKHRoaXMtPnBsdF8gPT0gTlVMTCB8fCAhdGhpcy0+ cGx0Xy0+aGFzX2lyZWxhdGl2ZV9zZWN0aW9uKCkpKQorICAgIHsKKyAgICAg IC8vIElmIGxpbmtpbmcgc3RhdGljYWxseSwgbWFrZSBzdXJlIHRoYXQgdGhl IF9fcmVsYV9pcGx0IHN5bWJvbHMKKyAgICAgIC8vIHdlcmUgZGVmaW5lZCBp ZiBuZWNlc3NhcnksIGV2ZW4gaWYgd2UgZGlkbid0IGNyZWF0ZSBhIFBMVC4K KyAgICAgIHN0YXRpYyBjb25zdCBEZWZpbmVfc3ltYm9sX2luX3NlZ21lbnQg c3ltc1tdID0KKwl7CisJICB7CisJICAgICJfX3JlbGFfaXBsdF9zdGFydCIs CS8vIG5hbWUKKwkgICAgZWxmY3BwOjpQVF9MT0FELAkJLy8gc2VnbWVudF90 eXBlCisJICAgIGVsZmNwcDo6UEZfVywJCS8vIHNlZ21lbnRfZmxhZ3Nfc2V0 CisJICAgIGVsZmNwcDo6UEYoMCksCQkvLyBzZWdtZW50X2ZsYWdzX2NsZWFy CisJICAgIDAsCQkJCS8vIHZhbHVlCisJICAgIDAsCQkJCS8vIHNpemUKKwkg ICAgZWxmY3BwOjpTVFRfTk9UWVBFLAkJLy8gdHlwZQorCSAgICBlbGZjcHA6 OlNUQl9HTE9CQUwsCQkvLyBiaW5kaW5nCisJICAgIGVsZmNwcDo6U1RWX0hJ RERFTiwJCS8vIHZpc2liaWxpdHkKKwkgICAgMCwJCQkJLy8gbm9udmlzCisJ ICAgIFN5bWJvbDo6U0VHTUVOVF9TVEFSVCwJLy8gb2Zmc2V0X2Zyb21fYmFz ZQorCSAgICB0cnVlCQkJLy8gb25seV9pZl9yZWYKKwkgIH0sCisJICB7CisJ ICAgICJfX3JlbGFfaXBsdF9lbmQiLAkJLy8gbmFtZQorCSAgICBlbGZjcHA6 OlBUX0xPQUQsCQkvLyBzZWdtZW50X3R5cGUKKwkgICAgZWxmY3BwOjpQRl9X LAkJLy8gc2VnbWVudF9mbGFnc19zZXQKKwkgICAgZWxmY3BwOjpQRigwKSwJ CS8vIHNlZ21lbnRfZmxhZ3NfY2xlYXIKKwkgICAgMCwJCQkJLy8gdmFsdWUK KwkgICAgMCwJCQkJLy8gc2l6ZQorCSAgICBlbGZjcHA6OlNUVF9OT1RZUEUs CQkvLyB0eXBlCisJICAgIGVsZmNwcDo6U1RCX0dMT0JBTCwJCS8vIGJpbmRp bmcKKwkgICAgZWxmY3BwOjpTVFZfSElEREVOLAkJLy8gdmlzaWJpbGl0eQor CSAgICAwLAkJCQkvLyBub252aXMKKwkgICAgU3ltYm9sOjpTRUdNRU5UX1NU QVJULAkvLyBvZmZzZXRfZnJvbV9iYXNlCisJICAgIHRydWUJCQkvLyBvbmx5 X2lmX3JlZgorCSAgfQorCX07CisKKyAgICAgIHN5bXRhYi0+ZGVmaW5lX3N5 bWJvbHMobGF5b3V0LCAyLCBzeW1zLAorCQkJICAgICBsYXlvdXQtPnNjcmlw dF9vcHRpb25zKCktPnNhd19zZWN0aW9uc19jbGF1c2UoKSk7CisgICAgfQor CiAgIHJldHVybjsKIH0KIApAQCAtMTMxNywxOSArMTk2NiwxOTggQEAgVGFy Z2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46OmRvX2ZpbmFsaXplX3Nl Y3Rpb25zKAogdGVtcGxhdGU8aW50IHNpemUsIGJvb2wgYmlnX2VuZGlhbj4K IGlubGluZSBib29sCiBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdfZW5kaWFu Pjo6UmVsb2NhdGU6OnJlbG9jYXRlKAotICAgIGNvbnN0IFJlbG9jYXRlX2lu Zm88c2l6ZSwgYmlnX2VuZGlhbj4qIC8qIHJlbGluZm8gKi8sCi0gICAgVGFy Z2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj4qIC8qIHRhcmdldCAqLywK KyAgICBjb25zdCBSZWxvY2F0ZV9pbmZvPHNpemUsIGJpZ19lbmRpYW4+KiBy ZWxpbmZvLAorICAgIFRhcmdldF9hYXJjaDY0PHNpemUsIGJpZ19lbmRpYW4+ KiB0YXJnZXQsCiAgICAgT3V0cHV0X3NlY3Rpb24qICwKLSAgICBzaXplX3Qg LyogcmVsbnVtICovLAotICAgIGNvbnN0IGVsZmNwcDo6UmVsYTxzaXplLCBi aWdfZW5kaWFuPiYgLyogcmVsYSAqLywKLSAgICB1bnNpZ25lZCBpbnQgLyog cl90eXBlICovLAotICAgIGNvbnN0IFNpemVkX3N5bWJvbDxzaXplPiogLyog Z3N5bSAqLywKLSAgICBjb25zdCBTeW1ib2xfdmFsdWU8c2l6ZT4qIC8qIHBz eW12YWwgKi8sCi0gICAgdW5zaWduZWQgY2hhciogLyogdmlldyAqLywKLSAg ICB0eXBlbmFtZSBlbGZjcHA6OkVsZl90eXBlczxzaXplPjo6RWxmX0FkZHIg LyogYWRkcmVzcyAqLywKKyAgICBzaXplX3QgcmVsbnVtLAorICAgIGNvbnN0 IGVsZmNwcDo6UmVsYTxzaXplLCBiaWdfZW5kaWFuPiYgcmVsYSwKKyAgICB1 bnNpZ25lZCBpbnQgcl90eXBlLAorICAgIGNvbnN0IFNpemVkX3N5bWJvbDxz aXplPiogZ3N5bSwKKyAgICBjb25zdCBTeW1ib2xfdmFsdWU8c2l6ZT4qIHBz eW12YWwsCisgICAgdW5zaWduZWQgY2hhciogdmlldywKKyAgICB0eXBlbmFt ZSBlbGZjcHA6OkVsZl90eXBlczxzaXplPjo6RWxmX0FkZHIgYWRkcmVzcywK ICAgICBzZWN0aW9uX3NpemVfdHlwZSAvKiB2aWV3X3NpemUgKi8pCiB7Ci0g IC8vVE9ETworICBpZiAodmlldyA9PSBOVUxMKQorICAgIHJldHVybiB0cnVl OworCisgIHR5cGVkZWYgQUFyY2g2NF9yZWxvY2F0ZV9mdW5jdGlvbnM8c2l6 ZSwgYmlnX2VuZGlhbj4gUmVsb2M7CisKKyAgY29uc3QgQUFyY2g2NF9yZWxv Y19wcm9wZXJ0eSogcmVsb2NfcHJvcGVydHkgPQorICAgICAgYWFyY2g2NF9y ZWxvY19wcm9wZXJ0eV90YWJsZS0+Z2V0X3JlbG9jX3Byb3BlcnR5KHJfdHlw ZSk7CisKKyAgaWYgKHJlbG9jX3Byb3BlcnR5ID09IE5VTEwpCisgICAgewor ICAgICAgc3RkOjpzdHJpbmcgcmVsb2NfbmFtZSA9CisJICBhYXJjaDY0X3Jl bG9jX3Byb3BlcnR5X3RhYmxlLT5yZWxvY19uYW1lX2luX2Vycm9yX21lc3Nh Z2Uocl90eXBlKTsKKyAgICAgIGdvbGRfZXJyb3JfYXRfbG9jYXRpb24ocmVs aW5mbywgcmVsbnVtLCByZWxhLmdldF9yX29mZnNldCgpLAorCQkJICAgICBf KCJjYW5ub3QgcmVsb2NhdGUgJXMgaW4gb2JqZWN0IGZpbGUiKSwKKwkJCSAg ICAgcmVsb2NfbmFtZS5jX3N0cigpKTsKKyAgICAgIHJldHVybiB0cnVlOwor ICAgIH0KKworICBjb25zdCBTaXplZF9yZWxvYmpfZmlsZTxzaXplLCBiaWdf ZW5kaWFuPiogb2JqZWN0ID0gcmVsaW5mby0+b2JqZWN0OworCisgIC8vIFBp Y2sgdGhlIHZhbHVlIHRvIHVzZSBmb3Igc3ltYm9scyBkZWZpbmVkIGluIHRo ZSBQTFQuCisgIFN5bWJvbF92YWx1ZTxzaXplPiBzeW12YWw7CisgIGlmIChn c3ltICE9IE5VTEwKKyAgICAgICYmIGdzeW0tPnVzZV9wbHRfb2Zmc2V0KHJl bG9jX3Byb3BlcnR5LT5yZWZlcmVuY2VfZmxhZ3MoKSkpCisgICAgeworICAg ICAgc3ltdmFsLnNldF9vdXRwdXRfdmFsdWUodGFyZ2V0LT5wbHRfYWRkcmVz c19mb3JfZ2xvYmFsKGdzeW0pKTsKKyAgICAgIHBzeW12YWwgPSAmc3ltdmFs OworICAgIH0KKyAgZWxzZSBpZiAoZ3N5bSA9PSBOVUxMICYmIHBzeW12YWwt PmlzX2lmdW5jX3N5bWJvbCgpKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGlu dCByX3N5bSA9IGVsZmNwcDo6ZWxmX3Jfc3ltPHNpemU+KHJlbGEuZ2V0X3Jf aW5mbygpKTsKKyAgICAgIGlmIChvYmplY3QtPmxvY2FsX2hhc19wbHRfb2Zm c2V0KHJfc3ltKSkKKwl7CisJICBzeW12YWwuc2V0X291dHB1dF92YWx1ZSh0 YXJnZXQtPnBsdF9hZGRyZXNzX2Zvcl9sb2NhbChvYmplY3QsIHJfc3ltKSk7 CisJICBwc3ltdmFsID0gJnN5bXZhbDsKKwl9CisgICAgfQorCisgIGNvbnN0 IGVsZmNwcDo6RWxmX1h3b3JkIGFkZGVuZCA9IHJlbGEuZ2V0X3JfYWRkZW5k KCk7CisKKyAgLy8gR2V0IHRoZSBHT1Qgb2Zmc2V0IGlmIG5lZWRlZC4KKyAg Ly8gRm9yIGFhcmNoNjQsIHRoZSBHT1QgcG9pbnRlciBwb2ludHMgdG8gdGhl IHN0YXJ0IG9mIHRoZSBHT1Qgc2VjdGlvbi4KKyAgYm9vbCBoYXZlX2dvdF9v ZmZzZXQgPSBmYWxzZTsKKyAgaW50IGdvdF9vZmZzZXQgPSAwOworICBpbnQg Z290X2Jhc2UgPSAodGFyZ2V0LT5nb3RfICE9IE5VTEwKKwkJICA/ICh0YXJn ZXQtPmdvdF8tPmN1cnJlbnRfZGF0YV9zaXplKCkgPj0gMHg4MDAwCisJCSAg ICAgPyAweDgwMDAgOiAwKQorCQkgIDogMCk7CisgIHN3aXRjaCAocl90eXBl KQorICAgIHsKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X01PVldfR09U T0ZGX0cwOgorICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfTU9WV19HT1RP RkZfRzBfTkM6CisgICAgY2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9NT1ZXX0dP VE9GRl9HMToKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X01PVldfR09U T0ZGX0cxX05DOgorICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfTU9WV19H T1RPRkZfRzI6CisgICAgY2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9NT1ZXX0dP VE9GRl9HMl9OQzoKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X01PVldf R09UT0ZGX0czOgorICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfR09UUkVM NjQ6CisgICAgY2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9HT1RSRUwzMjoKKyAg ICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0dPVF9MRF9QUkVMMTk6CisgICAg Y2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9MRDY0X0dPVE9GRl9MTzE1OgorICAg IGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfQURSX0dPVF9QQUdFOgorICAgIGNh c2UgZWxmY3BwOjpSX0FBUkNINjRfTEQ2NF9HT1RfTE8xMl9OQzoKKyAgICBj YXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0xENjRfR09UUEFHRV9MTzE1OgorICAg ICAgaWYgKGdzeW0gIT0gTlVMTCkKKwl7CisJICBnb2xkX2Fzc2VydChnc3lt LT5oYXNfZ290X29mZnNldChHT1RfVFlQRV9TVEFOREFSRCkpOworCSAgZ290 X29mZnNldCA9IGdzeW0tPmdvdF9vZmZzZXQoR09UX1RZUEVfU1RBTkRBUkQp IC0gZ290X2Jhc2U7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHVuc2lnbmVk IGludCByX3N5bSA9IGVsZmNwcDo6ZWxmX3Jfc3ltPHNpemU+KHJlbGEuZ2V0 X3JfaW5mbygpKTsKKwkgIGdvbGRfYXNzZXJ0KG9iamVjdC0+bG9jYWxfaGFz X2dvdF9vZmZzZXQocl9zeW0sIEdPVF9UWVBFX1NUQU5EQVJEKSk7CisJICBn b3Rfb2Zmc2V0ID0gKG9iamVjdC0+bG9jYWxfZ290X29mZnNldChyX3N5bSwg R09UX1RZUEVfU1RBTkRBUkQpCisJCQktIGdvdF9iYXNlKTsKKwl9CisgICAg ICBoYXZlX2dvdF9vZmZzZXQgPSB0cnVlOworICAgICAgYnJlYWs7CisgICAg ZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKworICB0eXBlbmFtZSBS ZWxvYzo6U3RhdHVzIHJlbG9jX3N0YXR1cyA9IFJlbG9jOjpTVEFUVVNfT0tB WTsKKyAgdHlwZW5hbWUgZWxmY3BwOjpFbGZfdHlwZXM8c2l6ZT46OkVsZl9B ZGRyIHZhbHVlOworICBzd2l0Y2ggKHJfdHlwZSkKKyAgICB7CisgICAgY2Fz ZSBlbGZjcHA6OlJfQUFSQ0g2NF9OT05FOgorICAgICAgYnJlYWs7CisKKyAg ICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0FCUzY0OgorICAgICAgcmVsb2Nf c3RhdHVzID0gUmVsb2M6OnRlbXBsYXRlIHJlbGFfdWE8NjQ+KAorCXZpZXcs IG9iamVjdCwgcHN5bXZhbCwgYWRkZW5kLCByZWxvY19wcm9wZXJ0eSk7Cisg ICAgICBicmVhazsKKworICAgIGNhc2UgZWxmY3BwOjpSX0FBUkNINjRfQUJT MzI6CisgICAgICByZWxvY19zdGF0dXMgPSBSZWxvYzo6dGVtcGxhdGUgcmVs YV91YTwzMj4oCisJdmlldywgb2JqZWN0LCBwc3ltdmFsLCBhZGRlbmQsIHJl bG9jX3Byb3BlcnR5KTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBlbGZj cHA6OlJfQUFSQ0g2NF9BQlMxNjoKKyAgICAgIHJlbG9jX3N0YXR1cyA9IFJl bG9jOjp0ZW1wbGF0ZSByZWxhX3VhPDE2PigKKwl2aWV3LCBvYmplY3QsIHBz eW12YWwsIGFkZGVuZCwgcmVsb2NfcHJvcGVydHkpOworICAgICAgYnJlYWs7 CisKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X1BSRUw2NDoKKyAgICAg IHJlbG9jX3N0YXR1cyA9IFJlbG9jOjp0ZW1wbGF0ZSBwY3JlbGFfdWE8NjQ+ KAorCXZpZXcsIG9iamVjdCwgcHN5bXZhbCwgYWRkZW5kLCBhZGRyZXNzLCBy ZWxvY19wcm9wZXJ0eSk7CisKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0 X1BSRUwzMjoKKyAgICAgIHJlbG9jX3N0YXR1cyA9IFJlbG9jOjp0ZW1wbGF0 ZSBwY3JlbGFfdWE8MzI+KAorCXZpZXcsIG9iamVjdCwgcHN5bXZhbCwgYWRk ZW5kLCBhZGRyZXNzLCByZWxvY19wcm9wZXJ0eSk7CisKKyAgICBjYXNlIGVs ZmNwcDo6Ul9BQVJDSDY0X1BSRUwxNjoKKyAgICAgIHJlbG9jX3N0YXR1cyA9 IFJlbG9jOjp0ZW1wbGF0ZSBwY3JlbGFfdWE8MTY+KAorCXZpZXcsIG9iamVj dCwgcHN5bXZhbCwgYWRkZW5kLCBhZGRyZXNzLCByZWxvY19wcm9wZXJ0eSk7 CisKKyAgICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0FEUl9QUkVMX1BHX0hJ MjFfTkM6CisgICAgY2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9BRFJfUFJFTF9Q R19ISTIxOgorICAgICAgcmVsb2Nfc3RhdHVzID0gUmVsb2M6OmFkcnAodmll dywgb2JqZWN0LCBwc3ltdmFsLCBhZGRlbmQsIGFkZHJlc3MsCisJCQkJIHJl bG9jX3Byb3BlcnR5KTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBlbGZj cHA6OlJfQUFSQ0g2NF9MRFNUOF9BQlNfTE8xMl9OQzoKKyAgICBjYXNlIGVs ZmNwcDo6Ul9BQVJDSDY0X0xEU1QxNl9BQlNfTE8xMl9OQzoKKyAgICBjYXNl IGVsZmNwcDo6Ul9BQVJDSDY0X0xEU1QzMl9BQlNfTE8xMl9OQzoKKyAgICBj YXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0xEU1Q2NF9BQlNfTE8xMl9OQzoKKyAg ICBjYXNlIGVsZmNwcDo6Ul9BQVJDSDY0X0xEU1QxMjhfQUJTX0xPMTJfTkM6 CisgICAgY2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9BRERfQUJTX0xPMTJfTkM6 CisgICAgICByZWxvY19zdGF0dXMgPSBSZWxvYzo6dGVtcGxhdGUgcmVsYV9n ZW5lcmFsPDMyPigKKwl2aWV3LCBvYmplY3QsIHBzeW12YWwsIGFkZGVuZCwg cmVsb2NfcHJvcGVydHkpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGVs ZmNwcDo6Ul9BQVJDSDY0X0NBTEwyNjoKKyAgICBjYXNlIGVsZmNwcDo6Ul9B QVJDSDY0X0pVTVAyNjoKKyAgICAgIHJlbG9jX3N0YXR1cyA9IFJlbG9jOjp0 ZW1wbGF0ZSBwY3JlbGFfZ2VuZXJhbDwzMj4oCisJdmlldywgb2JqZWN0LCBw c3ltdmFsLCBhZGRlbmQsIGFkZHJlc3MsIHJlbG9jX3Byb3BlcnR5KTsKKyAg ICAgIGJyZWFrOworCisgICAgY2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9BRFJf R09UX1BBR0U6CisgICAgICBnb2xkX2Fzc2VydChoYXZlX2dvdF9vZmZzZXQp OworICAgICAgdmFsdWUgPSB0YXJnZXQtPmdvdF8tPmFkZHJlc3MoKSArIGdv dF9iYXNlICsgZ290X29mZnNldDsKKyAgICAgIHJlbG9jX3N0YXR1cyA9IFJl bG9jOjphZHJwKHZpZXcsIHZhbHVlICsgYWRkZW5kLCBhZGRyZXNzKTsKKyAg ICAgIGJyZWFrOworCisgICAgY2FzZSBlbGZjcHA6OlJfQUFSQ0g2NF9MRDY0 X0dPVF9MTzEyX05DOgorICAgICAgZ29sZF9hc3NlcnQoaGF2ZV9nb3Rfb2Zm c2V0KTsKKyAgICAgIHZhbHVlID0gdGFyZ2V0LT5nb3RfLT5hZGRyZXNzKCkg KyBnb3RfYmFzZSArIGdvdF9vZmZzZXQ7CisgICAgICByZWxvY19zdGF0dXMg PSBSZWxvYzo6dGVtcGxhdGUgcmVsYV9nZW5lcmFsPDMyPigKKwl2aWV3LCB2 YWx1ZSwgYWRkZW5kLCByZWxvY19wcm9wZXJ0eSk7CisgICAgICBicmVhazsK KworICAgIGRlZmF1bHQ6CisgICAgICBnb2xkX2Vycm9yX2F0X2xvY2F0aW9u KHJlbGluZm8sIHJlbG51bSwgcmVsYS5nZXRfcl9vZmZzZXQoKSwKKwkJCSAg ICAgXygidW5zdXBwb3J0ZWQgcmVsb2MgYWFhICV1IiksCisJCQkgICAgIHJf dHlwZSk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgLy8gUmVwb3J0IGFu eSBlcnJvcnMuCisgIHN3aXRjaCAocmVsb2Nfc3RhdHVzKQorICAgIHsKKyAg ICBjYXNlIFJlbG9jOjpTVEFUVVNfT0tBWToKKyAgICAgIGJyZWFrOworICAg IGNhc2UgUmVsb2M6OlNUQVRVU19PVkVSRkxPVzoKKyAgICAgIGdvbGRfZXJy b3JfYXRfbG9jYXRpb24ocmVsaW5mbywgcmVsbnVtLCByZWxhLmdldF9yX29m ZnNldCgpLAorCQkJICAgICBfKCJyZWxvY2F0aW9uIG92ZXJmbG93IGluICVz IiksCisJCQkgICAgIHJlbG9jX3Byb3BlcnR5LT5uYW1lKCkuY19zdHIoKSk7 CisgICAgICBicmVhazsKKyAgICBjYXNlIFJlbG9jOjpTVEFUVVNfQkFEX1JF TE9DOgorICAgICAgZ29sZF9lcnJvcl9hdF9sb2NhdGlvbigKKwkgIHJlbGlu Zm8sCisJICByZWxudW0sCisJICByZWxhLmdldF9yX29mZnNldCgpLAorCSAg XygidW5leHBlY3RlZCBvcGNvZGUgd2hpbGUgcHJvY2Vzc2luZyByZWxvY2F0 aW9uICVzIiksCisJICByZWxvY19wcm9wZXJ0eS0+bmFtZSgpLmNfc3RyKCkp OworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGdvbGRfdW5y ZWFjaGFibGUoKTsKKyAgICB9CisKICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg LTEzMzgsMTkgKzIxNjYsMzEgQEAgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmln X2VuZGlhbj46OlJlbG9jYXRlOjpyZWxvY2F0ZSgKIHRlbXBsYXRlPGludCBz aXplLCBib29sIGJpZ19lbmRpYW4+CiB2b2lkCiBUYXJnZXRfYWFyY2g2NDxz aXplLCBiaWdfZW5kaWFuPjo6cmVsb2NhdGVfc2VjdGlvbigKLSAgICBjb25z dCBSZWxvY2F0ZV9pbmZvPHNpemUsIGJpZ19lbmRpYW4+KiAvKiByZWxpbmZv ICovLAorICAgIGNvbnN0IFJlbG9jYXRlX2luZm88c2l6ZSwgYmlnX2VuZGlh bj4qIHJlbGluZm8sCiAgICAgdW5zaWduZWQgaW50IHNoX3R5cGUsCi0gICAg Y29uc3QgdW5zaWduZWQgY2hhciogLyogcHJlbG9jcyAqLywKLSAgICBzaXpl X3QgLyogcmVsb2NfY291bnQgKi8sCi0gICAgT3V0cHV0X3NlY3Rpb24qIC8q IG91dHB1dF9zZWN0aW9uICovLAotICAgIGJvb2wgLypuZWVkc19zcGVjaWFs X29mZnNldF9oYW5kbGluZyAqLywKLSAgICB1bnNpZ25lZCBjaGFyKiAvKiB2 aWV3ICovLAotICAgIHR5cGVuYW1lIGVsZmNwcDo6RWxmX3R5cGVzPHNpemU+ OjpFbGZfQWRkciAvKiBhZGRyZXNzICovLAotICAgIHNlY3Rpb25fc2l6ZV90 eXBlIC8qIHZpZXdfc2l6ZSAqLywKLSAgICBjb25zdCBSZWxvY19zeW1ib2xf Y2hhbmdlcyogLyogcmVsb2Nfc3ltYm9sX2NoYW5nZXMgKi8pCisgICAgY29u c3QgdW5zaWduZWQgY2hhciogcHJlbG9jcywKKyAgICBzaXplX3QgcmVsb2Nf Y291bnQsCisgICAgT3V0cHV0X3NlY3Rpb24qIG91dHB1dF9zZWN0aW9uLAor ICAgIGJvb2wgbmVlZHNfc3BlY2lhbF9vZmZzZXRfaGFuZGxpbmcsCisgICAg dW5zaWduZWQgY2hhciogdmlldywKKyAgICB0eXBlbmFtZSBlbGZjcHA6OkVs Zl90eXBlczxzaXplPjo6RWxmX0FkZHIgYWRkcmVzcywKKyAgICBzZWN0aW9u X3NpemVfdHlwZSB2aWV3X3NpemUsCisgICAgY29uc3QgUmVsb2Nfc3ltYm9s X2NoYW5nZXMqIHJlbG9jX3N5bWJvbF9jaGFuZ2VzKQogewotICAvL1RPRE8K ICAgZ29sZF9hc3NlcnQoc2hfdHlwZSA9PSBlbGZjcHA6OlNIVF9SRUxBKTsK KyAgdHlwZWRlZiB0eXBlbmFtZSBUYXJnZXRfYWFyY2g2NDxzaXplLCBiaWdf ZW5kaWFuPjo6UmVsb2NhdGUgQUFyY2g2NF9yZWxvY2F0ZTsKKyAgZ29sZDo6 cmVsb2NhdGVfc2VjdGlvbjxzaXplLCBiaWdfZW5kaWFuLCBUYXJnZXRfYWFy Y2g2NCwgZWxmY3BwOjpTSFRfUkVMQSwKKwkJCSBBQXJjaDY0X3JlbG9jYXRl LCBnb2xkOjpEZWZhdWx0X2NvbWRhdF9iZWhhdmlvcj4oCisgICAgcmVsaW5m bywKKyAgICB0aGlzLAorICAgIHByZWxvY3MsCisgICAgcmVsb2NfY291bnQs CisgICAgb3V0cHV0X3NlY3Rpb24sCisgICAgbmVlZHNfc3BlY2lhbF9vZmZz ZXRfaGFuZGxpbmcsCisgICAgdmlldywKKyAgICBhZGRyZXNzLAorICAgIHZp ZXdfc2l6ZSwKKyAgICByZWxvY19zeW1ib2xfY2hhbmdlcyk7CiB9CiAKIC8v IFJldHVybiB0aGUgc2l6ZSBvZiBhIHJlbG9jYXRpb24gd2hpbGUgc2Nhbm5p bmcgZHVyaW5nIGEgcmVsb2NhdGFibGUKQEAgLTE0MTIsMzYgKzIyNTIsNDYg QEAgVGFyZ2V0X2FhcmNoNjQ8c2l6ZSwgYmlnX2VuZGlhbj46OnJlbG9jYXRl X3JlbG9jcygKICAgZ29sZF9hc3NlcnQoc2hfdHlwZSA9PSBlbGZjcHA6OlNI VF9SRUxBKTsKIH0KIAotCiAvLyBUaGUgc2VsZWN0b3IgZm9yIGFhcmNoNjQg b2JqZWN0IGZpbGVzLgogCiB0ZW1wbGF0ZTxpbnQgc2l6ZSwgYm9vbCBiaWdf ZW5kaWFuPgogY2xhc3MgVGFyZ2V0X3NlbGVjdG9yX2FhcmNoNjQgOiBwdWJs aWMgVGFyZ2V0X3NlbGVjdG9yCiB7CiAgcHVibGljOgotICBUYXJnZXRfc2Vs ZWN0b3JfYWFyY2g2NCgpCi0gICAgOiBUYXJnZXRfc2VsZWN0b3IoZWxmY3Bw OjpFTV9BQVJDSDY0LCBzaXplLCBiaWdfZW5kaWFuLAotICAgICAgICAgICAg ICAgICAgICAgIChzaXplID09IDY0Ci0gICAgICAgICAgICAgICAgICAgICAg ID8gKGJpZ19lbmRpYW4gPyAiZWxmNjQtYmlnYWFyY2g2NCIKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJlbGY2NC1saXR0bGVh YXJjaDY0IikKLSAgICAgICAgICAgICAgICAgICAgICAgOiAoYmlnX2VuZGlh biA/ICJlbGYzMi1iaWdhYXJjaDY0IgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogImVsZjMyLWxpdHRsZWFhcmNoNjQiKSksCi0g ICAgICAgICAgICAgICAgICAgICAgKHNpemUgPT0gNjQKLSAgICAgICAgICAg ICAgICAgICAgICAgPyAoYmlnX2VuZGlhbiA/ICJhYXJjaDY0X2VsZjY0X2Jl X3ZlYyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 ICJhYXJjaDY0X2VsZjY0X2xlX3ZlYyIpCi0gICAgICAgICAgICAgICAgICAg ICAgIDogKGJpZ19lbmRpYW4gPyAiYWFyY2g2NF9lbGYzMl9iZV92ZWMiCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiYWFyY2g2 NF9lbGYzMl9sZV92ZWMiKSkpCi0gIHsgfQorICBUYXJnZXRfc2VsZWN0b3Jf YWFyY2g2NCgpOwogCiAgIHZpcnR1YWwgVGFyZ2V0KgogICBkb19pbnN0YW50 aWF0ZV90YXJnZXQoKQogICB7IHJldHVybiBuZXcgVGFyZ2V0X2FhcmNoNjQ8 c2l6ZSwgYmlnX2VuZGlhbj4oKTsgfQogfTsKIAordGVtcGxhdGU8PgorVGFy Z2V0X3NlbGVjdG9yX2FhcmNoNjQ8MzIsIHRydWU+OjpUYXJnZXRfc2VsZWN0 b3JfYWFyY2g2NCgpCisgIDogVGFyZ2V0X3NlbGVjdG9yKGVsZmNwcDo6RU1f QUFSQ0g2NCwgMzIsIHRydWUsCisJCSAgICAiZWxmMzItYmlnYWFyY2g2NCIs ICJhYXJjaDY0X2VsZjMyX2JlX3ZlYyIpCit7IH0KKwordGVtcGxhdGU8Pgor VGFyZ2V0X3NlbGVjdG9yX2FhcmNoNjQ8MzIsIGZhbHNlPjo6VGFyZ2V0X3Nl bGVjdG9yX2FhcmNoNjQoKQorICA6IFRhcmdldF9zZWxlY3RvcihlbGZjcHA6 OkVNX0FBUkNINjQsIDMyLCBmYWxzZSwKKwkJICAgICJlbGYzMi1saXR0bGVh YXJjaDY0IiwgImFhcmNoNjRfZWxmMzJfbGVfdmVjIikKK3sgfQorCit0ZW1w bGF0ZTw+CitUYXJnZXRfc2VsZWN0b3JfYWFyY2g2NDw2NCwgdHJ1ZT46OlRh cmdldF9zZWxlY3Rvcl9hYXJjaDY0KCkKKyAgOiBUYXJnZXRfc2VsZWN0b3Io ZWxmY3BwOjpFTV9BQVJDSDY0LCA2NCwgdHJ1ZSwKKwkJICAgICJlbGY2NC1i aWdhYXJjaDY0IiwgImFhcmNoNjRfZWxmNjRfYmVfdmVjIikKK3sgfQorCit0 ZW1wbGF0ZTw+CitUYXJnZXRfc2VsZWN0b3JfYWFyY2g2NDw2NCwgZmFsc2U+ OjpUYXJnZXRfc2VsZWN0b3JfYWFyY2g2NCgpCisgIDogVGFyZ2V0X3NlbGVj dG9yKGVsZmNwcDo6RU1fQUFSQ0g2NCwgNjQsIGZhbHNlLAorCQkgICAgImVs ZjY0LWxpdHRsZWFhcmNoNjQiLCAiYWFyY2g2NF9lbGY2NF9sZV92ZWMiKQor eyB9CisKIFRhcmdldF9zZWxlY3Rvcl9hYXJjaDY0PDMyLCB0cnVlPiB0YXJn ZXRfc2VsZWN0b3JfYWFyY2g2NGVsZjMyYjsKIFRhcmdldF9zZWxlY3Rvcl9h YXJjaDY0PDMyLCBmYWxzZT4gdGFyZ2V0X3NlbGVjdG9yX2FhcmNoNjRlbGYz MjsKIFRhcmdldF9zZWxlY3Rvcl9hYXJjaDY0PDY0LCB0cnVlPiB0YXJnZXRf c2VsZWN0b3JfYWFyY2g2NGVsZmI7CiBUYXJnZXRfc2VsZWN0b3JfYWFyY2g2 NDw2NCwgZmFsc2U+IHRhcmdldF9zZWxlY3Rvcl9hYXJjaDY0ZWxmOwogCi0K IH0gLy8gRW5kIGFub255bW91cyBuYW1lc3BhY2UuCg== --001a113a923cde3f3e0500251cbf--