<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>214053</bug_id>
          
          <creation_ts>2020-07-07 12:57:14 -0700</creation_ts>
          <short_desc>Remove use of live ranges from AXObject.h</short_desc>
          <delta_ts>2020-07-08 11:03:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1669497</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-07 12:57:14 -0700</bug_when>
    <thetext>Remove use of live ranges from AXObject.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669500</commentid>
    <comment_count>1</comment_count>
      <attachid>403715</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-07 13:04:47 -0700</bug_when>
    <thetext>Created attachment 403715
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669501</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-07 13:05:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/65189732&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669574</commentid>
    <comment_count>3</comment_count>
      <attachid>403737</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-07 15:58:09 -0700</bug_when>
    <thetext>Created attachment 403737
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669614</commentid>
    <comment_count>4</comment_count>
      <attachid>403737</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-07 18:14:42 -0700</bug_when>
    <thetext>Comment on attachment 403737
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=403737&amp;action=review

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2046
&gt; +static bool setRangeStartOrEndWithCharacterOffset(SimpleRange&amp; range, const CharacterOffset&amp; characterOffset, bool isStart)

Not new, but the bool isStart here makes the call below harder to follow than needed.  Could do with an enum replacement. (This bool isStart is common pattern in this file).

&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:2813
&gt; +    int length = AXObjectCache::lengthForRange(SimpleRange { *range });
&gt;      return length &lt; 0 ? 0 : length;

std::max(0, length);?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669796</commentid>
    <comment_count>5</comment_count>
      <attachid>403737</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-08 10:55:42 -0700</bug_when>
    <thetext>Comment on attachment 403737
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=403737&amp;action=review

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2046
&gt;&gt; +static bool setRangeStartOrEndWithCharacterOffset(SimpleRange&amp; range, const CharacterOffset&amp; characterOffset, bool isStart)
&gt; 
&gt; Not new, but the bool isStart here makes the call below harder to follow than needed.  Could do with an enum replacement. (This bool isStart is common pattern in this file).

I agree. My original patch eliminated this function entirely and cut down a ton on use of booleans for isStart, but it was too much change for my goal: move from live range to SimpleRange, so I decided to preserve this function as is instead. There’s a lot more simplification that can be done here but I am holding back on it for now.

&gt;&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:2813
&gt;&gt;      return length &lt; 0 ? 0 : length;
&gt; 
&gt; std::max(0, length);?

Sure, that would be better, but I think I will leave this alone for now. There’s actually no reason for AXObjectCache::lengthForRange to ever return a negative number as far as I can tell. It returns -1 instead of 0 in some error conditions, but I can’t find any code taking advantage of that. Could simply change its return type and get rid of code like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1669806</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-08 11:03:26 -0700</bug_when>
    <thetext>Committed r264118: &lt;https://trac.webkit.org/changeset/264118&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 403737.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403715</attachid>
            <date>2020-07-07 13:04:47 -0700</date>
            <delta_ts>2020-07-07 15:58:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214053-20200707130446.patch</filename>
            <type>text/plain</type>
            <size>49223</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MDM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWU0ZWZlYTg1ZTU4Yzdh
NDFkNmNmZDNkNDU4ODM4MTQxY2YxZDg5Ny4uNTY2YmRlMGM5NDhkOTg4YTg2MzQ1YjA5NWY2MzM0
ZWQxNzk3OTdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDIwLTA3LTA3ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdXNlIG9mIGxpdmUg
cmFuZ2VzIGZyb20gQVhPYmplY3QuaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE0MDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dHJhdmVyc2VUb09mZnNldEluUmFuZ2UpOiBUYWtl
IFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bGVuZ3RoRm9y
UmFuZ2UpOiBUYWtlIE9wdGlvbmFsPFNpbXBsZVJhbmdlPi4KKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKTogUmV0dXJuIFNpbXBsZVJhbmdlLCB0
YWtlIHJlZmVyZW5jZQorICAgICAgICByYXRoZXIgdGhhbiBwb2ludGVyLgorICAgICAgICAoV2Vi
Q29yZTo6Y2hhcmFjdGVyT2Zmc2V0c0luT3JkZXIpOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAg
IChXZWJDb3JlOjpyZXNldE5vZGVBbmRPZmZzZXRGb3JSZXBsYWNlZE5vZGUpOiBUYWtlIGEgcmVm
ZXJlbmNlIHRvIHRoZSBub2RlIHJhdGhlciB0aGFuCisgICAgICAgIGEgcG9pbnRlci4KKyAgICAg
ICAgKFdlYkNvcmU6OmJvdW5kYXJ5UG9pbnQpOiBBZGRlZC4gQ291bGQgYmUgdXNlZCB0byByZXBs
YWNlIGNhbGxzIHRvCisgICAgICAgIHNldFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZz
ZXQuCisgICAgICAgIChXZWJDb3JlOjpzZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zm
c2V0KTogVGFrZSBTaW1wbGVSYW5nZS4gQWxzbyB1c2UgdGhlCisgICAgICAgIG5ldyBib3VuZGFy
eVBvaW50IGZ1bmN0aW9uIGFib3ZlLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKTogUmV0dXJuIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPi4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0YXJ0T3JFbmRDaGFy
YWN0ZXJPZmZzZXRGb3JSYW5nZSk6IFRha2UgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpzdGFydE9yRW5kVGV4dE1hcmtlckRhdGFGb3JSYW5nZSk6IFRha2Ug
U2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJP
ZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KTogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JOZXh0Q2hhcmFjdGVyT2Zmc2V0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZv
clByZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjp2aXNpYmxlUG9zaXRpb25Gcm9tQ2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZyb21WaXNpYmxlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bGVmdFdvcmRSYW5nZSk6IFJl
dHVybiBPcHRpb25hbDxTaW1wbGVSYW5nZT4uCisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpyaWdodFdvcmRSYW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6bmV4dEJvdW5kYXJ5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpwcmV2aW91c0JvdW5kYXJ5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjpzdGFydENoYXJhY3Rlck9mZnNldE9mUGFyYWdyYXBoKTogVXNlIFNpbXBsZVJhbmdl
LgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6ZW5kQ2hhcmFjdGVyT2Zmc2V0T2ZQ
YXJhZ3JhcGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBhcmFn
cmFwaEZvckNoYXJhY3Rlck9mZnNldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmpl
Y3RDYWNoZTo6c2VudGVuY2VGb3JDaGFyYWN0ZXJPZmZzZXQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmxvY2FsQ2FyZXRSZWN0Rm9yQ2hhcmFjdGVyT2Zmc2V0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRG
b3JQb2ludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6Y2hhcmFj
dGVyT2Zmc2V0Rm9ySW5kZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2Fj
aGU6OmluZGV4Rm9yQ2hhcmFjdGVyT2Zmc2V0KTogRGl0dG8uCisKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuaDogUmVtb3ZlIHVzZXMgb2YgUmFuZ2UgYW5kIGluY2x1ZGUg
b2YgIlJhbmdlLmgiLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmVsZW1lbnRS
YW5nZSBjb25zdCk6IENhbGwgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VGb3JQbGFpblRleHRSYW5nZSBjb25zdCk6IERpdHRvLgor
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kc0ZvclJh
bmdlIGNvbnN0KTogUGFzcyBTaW1wbGVSYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoc3RhcnRP
ckVuZFRleHRtYXJrZXJGb3JSYW5nZSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOl0pOiBQYXNzIFNpbXBsZVJhbmdlLgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfaW5kZXhGb3JUZXh0TWFy
a2VyOl0pOiBDYWxsIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlQXRUZXh0TWFya2VyOmZvclVuaXQ6XSk6IERp
dHRvLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6Zm9yUGFyYW1ldGVyOl0pOiBEaXR0by4KKworICAgICAgICAqIGRv
bS9Cb3VuZGFyeVBvaW50Lmg6IEFkZGVkIG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlL0FmdGVyTm9k
ZS4KKworICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpt
YWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlKTogRGl0dG8uCisKIDIwMjAtMDctMDcgIEFuZHJlcyBH
b256YWxleiAgPGFuZHJlc2dfMjJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBjb250ZW50IHBy
b2Nlc3MgaGFuZ3MgaW4gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRWaXNp
YmxlUG9zaXRpb25SYW5nZSBpbiBzb21lIGNvcm5lciBjYXNlcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IGNhYjAwYjkxMWI3ZDhhNzA3
YzNhYjE2N2U3ZTNkY2FlYjVlODlmMTQuLjU3NzhlOWVmOGI5Y2YyNjhkYzZmNTI0ZDNlYmUzNTdj
N2Y0N2M5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmNwcApAQCAtMTgxMiwxMSArMTgxMiw4IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENh
Y2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyRGF0YShUZXh0TWFya2VyRGF0YSYKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1DaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6dHJh
dmVyc2VUb09mZnNldEluUmFuZ2UoUmVmUHRyPFJhbmdlPnJhbmdlLCBpbnQgb2Zmc2V0LCBUcmF2
ZXJzZU9wdGlvbiBvcHRpb24sIGJvb2wgc3RheVdpdGhpblJhbmdlKQorQ2hhcmFjdGVyT2Zmc2V0
IEFYT2JqZWN0Q2FjaGU6OnRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSwgaW50IG9mZnNldCwgVHJhdmVyc2VPcHRpb24gb3B0aW9uLCBib29sIHN0YXlXaXRo
aW5SYW5nZSkKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zm
c2V0KCk7Ci0gICAgCiAgICAgYm9vbCB0b05vZGVFbmQgPSBvcHRpb24gJiBUcmF2ZXJzZU9wdGlv
blRvTm9kZUVuZDsKICAgICBib29sIHZhbGlkYXRlT2Zmc2V0ID0gb3B0aW9uICYgVHJhdmVyc2VP
cHRpb25WYWxpZGF0ZU9mZnNldDsKICAgICBib29sIGRvTm90RW50ZXJUZXh0Q29udHJvbHMgPSBv
cHRpb24gJiBUcmF2ZXJzZU9wdGlvbkRvTm90RW50ZXJUZXh0Q29udHJvbHM7CkBAIC0xODI5LDEy
ICsxODI2LDEyIEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjp0cmF2ZXJzZVRvT2Zm
c2V0SW5SYW5nZShSZWZQdHI8UmFuZ2U+cmFuZ2UsIGludCBvCiAgICAgYm9vbCBmaW5pc2hlZCA9
IGZhbHNlOwogICAgIGludCBsYXN0U3RhcnRPZmZzZXQgPSAwOwogICAgIAotICAgIFRleHRJdGVy
YXRvciBpdGVyYXRvcigqcmFuZ2UsIGRvTm90RW50ZXJUZXh0Q29udHJvbHMgPyBUZXh0SXRlcmF0
b3JEZWZhdWx0QmVoYXZpb3IgOiBUZXh0SXRlcmF0b3JFbnRlcnNUZXh0Q29udHJvbHMpOworICAg
IFRleHRJdGVyYXRvciBpdGVyYXRvcihyYW5nZSwgZG9Ob3RFbnRlclRleHRDb250cm9scyA/IFRl
eHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciA6IFRleHRJdGVyYXRvckVudGVyc1RleHRDb250cm9s
cyk7CiAgICAgCiAgICAgLy8gV2hlbiB0aGUgcmFuZ2UgaGFzIHplcm8gbGVuZ3RoLCB0aGVyZSBt
aWdodCBiZSByZXBsYWNlZCBub2RlIG9yIGJyVGFnIHRoYXQgd2UgbmVlZCB0byBpbmNyZW1lbnQg
dGhlIGNoYXJhY3Rlck9mZnNldC4KICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewotICAgICAg
ICBjdXJyZW50Tm9kZSA9ICZyYW5nZS0+c3RhcnRDb250YWluZXIoKTsKLSAgICAgICAgbGFzdFN0
YXJ0T2Zmc2V0ID0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCk7CisgICAgICAgIGN1cnJlbnROb2RlID0g
cmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpOworICAgICAgICBsYXN0U3RhcnRPZmZzZXQgPSBy
YW5nZS5zdGFydC5vZmZzZXQ7CiAgICAgICAgIGlmIChvZmZzZXQgPiAwIHx8IHRvTm9kZUVuZCkg
ewogICAgICAgICAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJlcGxhY2VkTm9kZU5lZWRz
Q2hhcmFjdGVyKGN1cnJlbnROb2RlKSB8fCAoY3VycmVudE5vZGUtPnJlbmRlcmVyKCkgJiYgY3Vy
cmVudE5vZGUtPnJlbmRlcmVyKCktPmlzQlIoKSkpCiAgICAgICAgICAgICAgICAgY3VtdWxhdGl2
ZU9mZnNldCsrOwpAQCAtMTg0NCw3ICsxODQxLDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0
Q2FjaGU6OnRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKFJlZlB0cjxSYW5nZT5yYW5nZSwgaW50IG8K
ICAgICAgICAgICAgIC8vIEhlcmUgd2hlbiB3ZSBkb24ndCBoYXZlIGFueSBjaGFyYWN0ZXIgdG8g
bW92ZSBhbmQgd2UgYXJlIGdvaW5nIGJhY2t3YXJkcywgd2UgdHJhdmVyc2UgdG8gdGhlIHByZXZp
b3VzIG5vZGUuCiAgICAgICAgICAgICBpZiAoIWxhc3RMZW5ndGggJiYgdG9Ob2RlRW5kICYmICFz
dGF5V2l0aGluUmFuZ2UpIHsKICAgICAgICAgICAgICAgICBpZiAoTm9kZSogcHJlTm9kZSA9IHBy
ZXZpb3VzTm9kZShjdXJyZW50Tm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmF2
ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cyhwcmVOb2RlKSwgb2Zmc2V0
LCBvcHRpb24pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VUb09mZnNldElu
UmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMoKnByZU5vZGUpLCBvZmZzZXQsIG9wdGlvbik7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC0xOTI5LDEzICsxOTI2LDEzIEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVj
dENhY2hlOjp0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShSZWZQdHI8UmFuZ2U+cmFuZ2UsIGludCBv
CiAgICAgCiAgICAgLy8gU29tZXRpbWVzIHdoZW4gd2UgYXJlIGdldHRpbmcgdGhlIGVuZCBDaGFy
YWN0ZXJPZmZzZXQgb2YgYSBsaW5lIHJhbmdlLCB0aGUgVGV4dEl0ZXJhdG9yIHdpbGwgZW1pdCBh
biBleHRyYSBzcGFjZSBhdCB0aGUgZW5kCiAgICAgLy8gYW5kIG1ha2UgdGhlIGNoYXJhY3RlciBj
b3VudCBncmVhdGVyIHRoYW4gdGhlIFJhbmdlJ3MgZW5kIG9mZnNldC4KLSAgICBpZiAodG9Ob2Rl
RW5kICYmIGN1cnJlbnROb2RlLT5pc1RleHROb2RlKCkgJiYgY3VycmVudE5vZGUgPT0gJnJhbmdl
LT5lbmRDb250YWluZXIoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KHJhbmdlLT5lbmRPZmZzZXQoKSkg
PCBsYXN0U3RhcnRPZmZzZXQgKyBvZmZzZXRJbkNoYXJhY3RlcikKLSAgICAgICAgb2Zmc2V0SW5D
aGFyYWN0ZXIgPSByYW5nZS0+ZW5kT2Zmc2V0KCkgLSBsYXN0U3RhcnRPZmZzZXQ7CisgICAgaWYg
KHRvTm9kZUVuZCAmJiBjdXJyZW50Tm9kZS0+aXNUZXh0Tm9kZSgpICYmIGN1cnJlbnROb2RlID09
IHJhbmdlLmVuZC5jb250YWluZXIucHRyKCkgJiYgc3RhdGljX2Nhc3Q8aW50PihyYW5nZS5lbmQu
b2Zmc2V0KSA8IGxhc3RTdGFydE9mZnNldCArIG9mZnNldEluQ2hhcmFjdGVyKQorICAgICAgICBv
ZmZzZXRJbkNoYXJhY3RlciA9IHJhbmdlLmVuZC5vZmZzZXQgLSBsYXN0U3RhcnRPZmZzZXQ7CiAg
ICAgCiAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldChjdXJyZW50Tm9kZSwgbGFzdFN0YXJ0T2Zm
c2V0LCBvZmZzZXRJbkNoYXJhY3RlciwgcmVtYWluaW5nKTsKIH0KIAotaW50IEFYT2JqZWN0Q2Fj
aGU6Omxlbmd0aEZvclJhbmdlKFJhbmdlKiByYW5nZSkKK2ludCBBWE9iamVjdENhY2hlOjpsZW5n
dGhGb3JSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewogICAgIGlm
ICghcmFuZ2UpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTE5NTMsMjMgKzE5NTAsMTQgQEAgaW50
IEFYT2JqZWN0Q2FjaGU6Omxlbmd0aEZvclJhbmdlKFJhbmdlKiByYW5nZSkKICAgICByZXR1cm4g
bGVuZ3RoOwogfQogCi1SZWZQdHI8UmFuZ2U+IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9kZUNv
bnRlbnRzKE5vZGUqIG5vZGUpCitTaW1wbGVSYW5nZSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5v
ZGVDb250ZW50cyhOb2RlJiBub2RlKQogewotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gJm5vZGUtPmRvY3VtZW50KCk7Ci0g
ICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byByYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoKmRvY3VtZW50KTsKLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVj
dDo6cmVwbGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIobm9kZSkpIHsKKyAgICBpZiAoQWNjZXNzaWJp
bGl0eU9iamVjdDo6cmVwbGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIoJm5vZGUpKSB7CiAgICAgICAg
IC8vIEZvciByZXBsYWNlZCBub2RlcyB3aXRob3V0IGNoaWxkcmVuLCB0aGUgbm9kZSBpdHNlbGYg
aXMgaW5jbHVkZWQgaW4gdGhlIHJhbmdlLgotICAgICAgICBpZiAocmFuZ2UtPnNlbGVjdE5vZGUo
Km5vZGUpLmhhc0V4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoKm5vZGUpLmhh
c0V4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlmIChh
dXRvIHJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShub2RlKSkKKyAgICAgICAgICAgIHJl
dHVybiAqcmFuZ2U7CiAgICAgfQotICAgIHJldHVybiByYW5nZTsKKyAgICByZXR1cm4gbWFrZVJh
bmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKG5vZGUpOwogfQogICAgIAogT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IEFYT2JqZWN0Q2FjaGU6OnJhbmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UoY29uc3QgU2lt
cGxlUmFuZ2UmIG9yaWdpbmFsUmFuZ2UsIGNvbnN0IFN0cmluZyYgbWF0Y2hUZXh0KQpAQCAtMjAx
NCw3NyArMjAwMiw2NyBAQCBzdGF0aWMgYm9vbCBjaGFyYWN0ZXJPZmZzZXRzSW5PcmRlcihjb25z
dCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldDEsIGNvbgogICAgIGlmICghbm9kZTEg
fHwgIW5vZGUyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZTEgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250ZW50cyhub2RlMSk7Ci0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZTIgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250
ZW50cyhub2RlMik7Ci0KLSAgICBpZiAoIXJhbmdlMikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgaWYgKCFyYW5nZTEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvIHJlc3VsdCA9
IHJhbmdlMS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgKnJh
bmdlMik7CisgICAgYXV0byByYW5nZTEgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250
ZW50cygqbm9kZTEpOworICAgIGF1dG8gcmFuZ2UyID0gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JO
b2RlQ29udGVudHMoKm5vZGUyKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShy
YW5nZTEpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX1NUQVJULCBjcmVh
dGVMaXZlUmFuZ2UocmFuZ2UyKSk7CiAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KSA8PSAwOwogfQogCi1zdGF0aWMgTm9kZSogcmVzZXROb2RlQW5kT2Zmc2V0Rm9yUmVwbGFjZWRO
b2RlKE5vZGUqIHJlcGxhY2VkTm9kZSwgaW50JiBvZmZzZXQsIGludCBjaGFyYWN0ZXJDb3VudCkK
K3N0YXRpYyBOb2RlKiByZXNldE5vZGVBbmRPZmZzZXRGb3JSZXBsYWNlZE5vZGUoTm9kZSYgcmVw
bGFjZWROb2RlLCBpbnQmIG9mZnNldCwgaW50IGNoYXJhY3RlckNvdW50KQogewogICAgIC8vIFVz
ZSB0aGlzIGZ1bmN0aW9uIHRvIGluY2x1ZGUgdGhlIHJlcGxhY2VkIG5vZGUgaXRzZWxmIGluIHRo
ZSByYW5nZSB3ZSBhcmUgY3JlYXRpbmcuCiAgICAgYXV0byBub2RlUmFuZ2UgPSBBWE9iamVjdENh
Y2hlOjpyYW5nZUZvck5vZGVDb250ZW50cyhyZXBsYWNlZE5vZGUpOwotICAgIGlmICghbm9kZVJh
bmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBib29sIGlzSW5Ob2RlID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNoYXJhY3RlckNvdW50KSA8PSBXZWJDb3JlOjpjaGFyYWN0ZXJDb3Vu
dCgqbm9kZVJhbmdlKTsKLSAgICBvZmZzZXQgPSByZXBsYWNlZE5vZGUtPmNvbXB1dGVOb2RlSW5k
ZXgoKSArIChpc0luTm9kZSA/IDAgOiAxKTsKLSAgICByZXR1cm4gcmVwbGFjZWROb2RlLT5wYXJl
bnROb2RlKCk7CisgICAgYm9vbCBpc0luTm9kZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGFy
YWN0ZXJDb3VudCkgPD0gV2ViQ29yZTo6Y2hhcmFjdGVyQ291bnQobm9kZVJhbmdlKTsKKyAgICBv
ZmZzZXQgPSByZXBsYWNlZE5vZGUuY29tcHV0ZU5vZGVJbmRleCgpICsgKGlzSW5Ob2RlID8gMCA6
IDEpOworICAgIHJldHVybiByZXBsYWNlZE5vZGUucGFyZW50Tm9kZSgpOwogfQogCi1zdGF0aWMg
Ym9vbCBzZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zmc2V0KFJhbmdlJiByYW5nZSwg
Y29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQsIGJvb2wgaXNTdGFydCkKK3N0
YXRpYyBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiBib3VuZGFyeVBvaW50KGNvbnN0IENoYXJhY3Rl
ck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0LCBib29sIGlzU3RhcnQpCiB7CiAgICAgaWYgKGNoYXJh
Y3Rlck9mZnNldC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCiAgICAgaW50IG9mZnNldCA9IGNoYXJhY3Rlck9mZnNl
dC5zdGFydEluZGV4ICsgY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldDsKICAgICBOb2RlKiBub2RlID0g
Y2hhcmFjdGVyT2Zmc2V0Lm5vZGU7CiAgICAgQVNTRVJUKG5vZGUpOwotICAgIAorCiAgICAgYm9v
bCByZXBsYWNlZE5vZGVPckJSID0gaXNSZXBsYWNlZE5vZGVPckJSKG5vZGUpOwogICAgIC8vIEZv
ciB0aGUgbm9uIHRleHQgbm9kZSB0aGF0IGhhcyBubyBjaGlsZHJlbiwgd2Ugc2hvdWxkIGNyZWF0
ZSB0aGUgcmFuZ2Ugd2l0aCBpdHMgcGFyZW50LCBvdGhlcndpc2UgdGhlIHJhbmdlIHdvdWxkIGJl
IGNvbGxhcHNlZC4KICAgICAvLyBFeGFtcGxlOiA8ZGl2IGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+
PC9kaXY+LCB3ZSB3YW50IHRoZSByYW5nZSB0byBpbmNsdWRlIHRoZSBkaXYgZWxlbWVudC4KICAg
ICBib29sIG5vQ2hpbGRyZW4gPSAhcmVwbGFjZWROb2RlT3JCUiAmJiAhbm9kZS0+aXNUZXh0Tm9k
ZSgpICYmICFub2RlLT5oYXNDaGlsZE5vZGVzKCk7CiAgICAgaW50IGNoYXJhY3RlckNvdW50ID0g
bm9DaGlsZHJlbiA/IChpc1N0YXJ0ID8gMCA6IDEpIDogY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldDsK
LSAgICAKKwogICAgIGlmIChyZXBsYWNlZE5vZGVPckJSIHx8IG5vQ2hpbGRyZW4pCi0gICAgICAg
IG5vZGUgPSByZXNldE5vZGVBbmRPZmZzZXRGb3JSZXBsYWNlZE5vZGUobm9kZSwgb2Zmc2V0LCBj
aGFyYWN0ZXJDb3VudCk7Ci0gICAgCisgICAgICAgIG5vZGUgPSByZXNldE5vZGVBbmRPZmZzZXRG
b3JSZXBsYWNlZE5vZGUoKm5vZGUsIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOworCiAgICAgaWYg
KCFub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICBpZiAoaXNTdGFydCkgewotICAgICAgICBpZiAocmFuZ2Uuc2V0U3RhcnQoKm5v
ZGUsIG9mZnNldCkuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHJhbmdlLnNldEVuZCgqbm9kZSwgb2Zmc2V0KS5oYXNF
eGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJu
IHsgeyAqbm9kZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9mZnNldCkgfSB9OworfQogCitzdGF0
aWMgYm9vbCBzZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zmc2V0KFNpbXBsZVJhbmdl
JiByYW5nZSwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQsIGJvb2wgaXNT
dGFydCkKK3sKKyAgICBhdXRvIHBvaW50ID0gYm91bmRhcnlQb2ludChjaGFyYWN0ZXJPZmZzZXQs
IGlzU3RhcnQpOworICAgIGlmICghcG9pbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoaXNTdGFydCkKKyAgICAgICAgcmFuZ2Uuc3RhcnQgPSAqcG9pbnQ7CisgICAgZWxzZQorICAg
ICAgICByYW5nZS5lbmQgPSAqcG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZlB0cjxS
YW5nZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNv
bnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0MSwgY29uc3QgQ2hhcmFjdGVyT2Zm
c2V0JiBjaGFyYWN0ZXJPZmZzZXQyKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFYT2JqZWN0Q2Fj
aGU6OnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhjb25zdCBDaGFyYWN0ZXJPZmZz
ZXQmIGNoYXJhY3Rlck9mZnNldDEsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zm
c2V0MikKIHsKLSAgICBpZiAoY2hhcmFjdGVyT2Zmc2V0MS5pc051bGwoKSB8fCBjaGFyYWN0ZXJP
ZmZzZXQyLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKICAgICBib29s
IGFscmVhZHlJbk9yZGVyID0gY2hhcmFjdGVyT2Zmc2V0c0luT3JkZXIoY2hhcmFjdGVyT2Zmc2V0
MSwgY2hhcmFjdGVyT2Zmc2V0Mik7Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0Q2hhcmFjdGVy
T2Zmc2V0ID0gYWxyZWFkeUluT3JkZXIgPyBjaGFyYWN0ZXJPZmZzZXQxIDogY2hhcmFjdGVyT2Zm
c2V0MjsKLSAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kQ2hhcmFjdGVyT2Zmc2V0ID0gYWxyZWFkeUlu
T3JkZXIgPyBjaGFyYWN0ZXJPZmZzZXQyIDogY2hhcmFjdGVyT2Zmc2V0MTsKLSAgICAKLSAgICBh
dXRvIHJlc3VsdCA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCk7Ci0gICAgaWYgKCFzZXRSYW5n
ZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zmc2V0KHJlc3VsdCwgc3RhcnRDaGFyYWN0ZXJPZmZz
ZXQsIHRydWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIXNldFJhbmdlU3Rh
cnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZzZXQocmVzdWx0LCBlbmRDaGFyYWN0ZXJPZmZzZXQsIGZh
bHNlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBh
dXRvIHN0YXJ0ID0gYm91bmRhcnlQb2ludChhbHJlYWR5SW5PcmRlciA/IGNoYXJhY3Rlck9mZnNl
dDEgOiBjaGFyYWN0ZXJPZmZzZXQyLCB0cnVlKTsKKyAgICBhdXRvIGVuZCA9IGJvdW5kYXJ5UG9p
bnQoYWxyZWFkeUluT3JkZXIgPyBjaGFyYWN0ZXJPZmZzZXQyIDogY2hhcmFjdGVyT2Zmc2V0MSwg
ZmFsc2UpOworICAgIGlmICghc3RhcnQgfHwgIWVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICByZXR1cm4geyB7ICpzdGFydCwgKiBlbmQgfSB9OwogfQogCiB2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OnNldFRleHRNYXJrZXJEYXRhV2l0aENoYXJhY3Rlck9mZnNldChUZXh0TWFya2Vy
RGF0YSYgdGV4dE1hcmtlckRhdGEsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zm
c2V0KQpAQCAtMjEyMCw0MSArMjA5OCwzOCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnNldFRleHRN
YXJrZXJEYXRhV2l0aENoYXJhY3Rlck9mZnNldChUZXh0TWFya2VyRGF0YSYgdGV4dE1hcgogICAg
IHRoaXMtPnNldE5vZGVJblVzZShkb21Ob2RlKTsKIH0KIAotQ2hhcmFjdGVyT2Zmc2V0IEFYT2Jq
ZWN0Q2FjaGU6OnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShSZWZQdHI8UmFuZ2U+
IHJhbmdlLCBib29sIGlzU3RhcnQsIGJvb2wgZW50ZXJUZXh0Q29udHJvbHMpCitDaGFyYWN0ZXJP
ZmZzZXQgQVhPYmplY3RDYWNoZTo6c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9vbCBpc1N0YXJ0LCBib29sIGVudGVyVGV4dENvbnRy
b2xzKQogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQo
KTsKLSAgICAKICAgICAvLyBXaGVuIGdldHRpbmcgdGhlIGVuZCBDaGFyYWN0ZXJPZmZzZXQgYXQg
bm9kZSBib3VuZGFyeSwgd2UgZG9uJ3Qgd2FudCB0byBjb2xsYXBzZSB0byB0aGUgcHJldmlvdXMg
bm9kZS4KLSAgICBpZiAoIWlzU3RhcnQgJiYgIXJhbmdlLT5lbmRPZmZzZXQoKSkKLSAgICAgICAg
cmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQocmFuZ2UtPmVuZENvbnRhaW5l
cigpLCAwLCBUcmF2ZXJzZU9wdGlvbkluY2x1ZGVTdGFydCk7CisgICAgaWYgKCFpc1N0YXJ0ICYm
ICFyYW5nZS5lbmQub2Zmc2V0KQorICAgICAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9k
ZUFuZE9mZnNldChyYW5nZS5lbmQuY29udGFpbmVyLCAwLCBUcmF2ZXJzZU9wdGlvbkluY2x1ZGVT
dGFydCk7CiAgICAgCiAgICAgLy8gSWYgaXQncyBlbmQgdGV4dCBtYXJrZXIsIHdlIHdhbnQgdG8g
Z28gdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UsIGFuZCBzdGF5IHdpdGhpbiB0aGUgcmFuZ2UuCiAg
ICAgYm9vbCBzdGF5V2l0aGluUmFuZ2UgPSAhaXNTdGFydDsKICAgICAKLSAgICBOb2RlJiBlbmRO
b2RlID0gcmFuZ2UtPmVuZENvbnRhaW5lcigpOworICAgIE5vZGUmIGVuZE5vZGUgPSByYW5nZS5l
bmQuY29udGFpbmVyOwogICAgIGlmIChlbmROb2RlLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSAmJiAh
aXNTdGFydCkKLSAgICAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKHJhbmdlRm9y
Tm9kZUNvbnRlbnRzKCZlbmROb2RlKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCBUcmF2ZXJzZU9wdGlv
blZhbGlkYXRlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZzZXRJblJhbmdl
KHJhbmdlRm9yTm9kZUNvbnRlbnRzKGVuZE5vZGUpLCByYW5nZS5lbmQub2Zmc2V0LCBUcmF2ZXJz
ZU9wdGlvblZhbGlkYXRlT2Zmc2V0KTsKICAgICAKLSAgICBSZWY8UmFuZ2U+IGNvcHlSYW5nZSA9
ICpyYW5nZTsKKyAgICBhdXRvIGNvcHlSYW5nZSA9IHJhbmdlOwogICAgIC8vIENoYW5nZSB0aGUg
c3RhcnQgb2YgdGhlIHJhbmdlLCBzbyB0aGUgY2hhcmFjdGVyIG9mZnNldCBzdGFydHMgZnJvbSBu
b2RlIGJlZ2lubmluZy4KICAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBOb2RlJiBub2RlID0gY29w
eVJhbmdlLT5zdGFydENvbnRhaW5lcigpOworICAgIGF1dG8mIG5vZGUgPSBjb3B5UmFuZ2Uuc3Rh
cnQuY29udGFpbmVyLmdldCgpOwogICAgIGlmIChub2RlLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkg
ewotICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgbm9kZVN0YXJ0T2Zmc2V0ID0gdHJhdmVyc2VUb09m
ZnNldEluUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMoJm5vZGUpLCByYW5nZS0+c3RhcnRPZmZz
ZXQoKSwgVHJhdmVyc2VPcHRpb25WYWxpZGF0ZU9mZnNldCk7CisgICAgICAgIGF1dG8gbm9kZVN0
YXJ0T2Zmc2V0ID0gdHJhdmVyc2VUb09mZnNldEluUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMo
bm9kZSksIHJhbmdlLnN0YXJ0Lm9mZnNldCwgVHJhdmVyc2VPcHRpb25WYWxpZGF0ZU9mZnNldCk7
CiAgICAgICAgIGlmIChpc1N0YXJ0KQogICAgICAgICAgICAgcmV0dXJuIG5vZGVTdGFydE9mZnNl
dDsKLSAgICAgICAgY29weVJhbmdlID0gUmFuZ2U6OmNyZWF0ZShyYW5nZS0+b3duZXJEb2N1bWVu
dCgpLCAmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIDAsICZyYW5nZS0+ZW5kQ29udGFpbmVyKCks
IHJhbmdlLT5lbmRPZmZzZXQoKSk7CisgICAgICAgIGNvcHlSYW5nZS5zdGFydC5vZmZzZXQgPSAw
OwogICAgICAgICBvZmZzZXQgKz0gbm9kZVN0YXJ0T2Zmc2V0Lm9mZnNldDsKICAgICB9Ci0gICAg
Ci0gICAgVHJhdmVyc2VPcHRpb24gb3B0aW9ucyA9IGlzU3RhcnQgPyBUcmF2ZXJzZU9wdGlvbkRl
ZmF1bHQgOiBUcmF2ZXJzZU9wdGlvblRvTm9kZUVuZDsKKworICAgIGF1dG8gb3B0aW9ucyA9IGlz
U3RhcnQgPyBUcmF2ZXJzZU9wdGlvbkRlZmF1bHQgOiBUcmF2ZXJzZU9wdGlvblRvTm9kZUVuZDsK
ICAgICBpZiAoIWVudGVyVGV4dENvbnRyb2xzKQogICAgICAgICBvcHRpb25zID0gc3RhdGljX2Nh
c3Q8VHJhdmVyc2VPcHRpb24+KG9wdGlvbnMgfCBUcmF2ZXJzZU9wdGlvbkRvTm90RW50ZXJUZXh0
Q29udHJvbHMpOwotICAgIHJldHVybiB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShXVEZNb3ZlKGNv
cHlSYW5nZSksIG9mZnNldCwgb3B0aW9ucywgc3RheVdpdGhpblJhbmdlKTsKKyAgICByZXR1cm4g
dHJhdmVyc2VUb09mZnNldEluUmFuZ2UoY29weVJhbmdlLCBvZmZzZXQsIG9wdGlvbnMsIHN0YXlX
aXRoaW5SYW5nZSk7CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6c3RhcnRPckVuZFRleHRNYXJr
ZXJEYXRhRm9yUmFuZ2UoVGV4dE1hcmtlckRhdGEmIHRleHRNYXJrZXJEYXRhLCBSZWZQdHI8UmFu
Z2U+IHJhbmdlLCBib29sIGlzU3RhcnQpCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnN0YXJ0T3JFbmRU
ZXh0TWFya2VyRGF0YUZvclJhbmdlKFRleHRNYXJrZXJEYXRhJiB0ZXh0TWFya2VyRGF0YSwgY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBib29sIGlzU3RhcnQpCiB7CiAgICAgLy8gVGhpcyBtZW1v
cnkgbXVzdCBiZSB6ZXJvJ2Qgc28gaW5zdGFuY2VzIG9mIFRleHRNYXJrZXJEYXRhIGNhbiBiZSB0
ZXN0ZWQgZm9yIGJ5dGUtZXF1aXZhbGVuY2UuCiAgICAgLy8gV2FybmluZzogVGhpcyBpcyByaXNr
eSBhbmQgYmFkIGJlY2F1c2UgVGV4dE1hcmtlckRhdGEgaXMgYSBub250cml2aWFsIHR5cGUuCkBA
IC0yMTk3LDcgKzIxNzIsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFj
dGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldChOb2RlJiBub2RlLCBpbnQgbwogICAgICAgICByZXR1
cm4gY2hhck9mZnNldDsKICAgICB9CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHJh
bmdlRm9yTm9kZUNvbnRlbnRzKGRvbU5vZGUpOworICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZvck5v
ZGVDb250ZW50cygqZG9tTm9kZSk7CiAKICAgICAvLyBUcmF2ZXJzZSB0aGUgb2Zmc2V0IGFtb3Vu
dCBvZiBjaGFyYWN0ZXJzIGZvcndhcmQgYW5kIHNlZSBpZiB0aGVyZSdzIHJlbWFpbmluZyBvZmZz
ZXRzLgogICAgIC8vIEtlZXAgdHJhdmVyc2luZyB0byB0aGUgbmV4dCBub2RlIHdoZW4gdGhlcmUn
cyByZW1haW5pbmcgb2Zmc2V0cy4KQEAgLTIyMDYsNyArMjE4MSw3IEBAIENoYXJhY3Rlck9mZnNl
dCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KE5vZGUmIG5v
ZGUsIGludCBvCiAgICAgICAgIGRvbU5vZGUgPSBuZXh0Tm9kZShkb21Ob2RlKTsKICAgICAgICAg
aWYgKCFkb21Ob2RlKQogICAgICAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwotICAg
ICAgICByYW5nZSA9IHJhbmdlRm9yTm9kZUNvbnRlbnRzKGRvbU5vZGUpOworICAgICAgICByYW5n
ZSA9IHJhbmdlRm9yTm9kZUNvbnRlbnRzKCpkb21Ob2RlKTsKICAgICAgICAgY2hhcmFjdGVyT2Zm
c2V0ID0gdHJhdmVyc2VUb09mZnNldEluUmFuZ2UocmFuZ2UsIGNoYXJhY3Rlck9mZnNldC5yZW1h
aW5pbmcoKSwgb3B0aW9uKTsKICAgICB9CiAgICAgCkBAIC0yMjUzLDggKzIyMjgsOCBAQCB2b2lk
IEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yTmV4dENoYXJhY3Rlck9mZnNldChUZXh0
TWFya2VyRGF0YSYgdGV4dE1hcgogICAgICAgICAgICAgbmV4dCA9IG5leHRDaGFyYWN0ZXJPZmZz
ZXQobmV4dCwgZmFsc2UpOwogICAgICAgICB0ZXh0TWFya2VyRGF0YUZvckNoYXJhY3Rlck9mZnNl
dCh0ZXh0TWFya2VyRGF0YSwgbmV4dCk7CiAgICAgICAgIAotICAgICAgICAvLyBXZSBzaG91bGQg
c2tpcCBuZXh0IENoYXJhY3RldE9mZnNldCBpZiBpdCdzIHZpc3VhbGx5IHRoZSBzYW1lLgotICAg
ICAgICBpZiAoIWxlbmd0aEZvclJhbmdlKHJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0
cyhwcmV2aW91cywgbmV4dCkuZ2V0KCkpKQorICAgICAgICAvLyBXZSBzaG91bGQgc2tpcCBuZXh0
IENoYXJhY3Rlck9mZnNldCBpZiBpdCdzIHZpc3VhbGx5IHRoZSBzYW1lLgorICAgICAgICBpZiAo
IWxlbmd0aEZvclJhbmdlKHJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhwcmV2aW91
cywgbmV4dCkpKQogICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSB0cnVlOwogICAgICAgICBw
cmV2aW91cyA9IG5leHQ7CiAgICAgfSB3aGlsZSAodGV4dE1hcmtlckRhdGEuaWdub3JlZCB8fCBz
aG91bGRDb250aW51ZSk7CkBAIC0yMjcwLDggKzIyNDUsOCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6
OnRleHRNYXJrZXJEYXRhRm9yUHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQoVGV4dE1hcmtlckRhdGEm
IHRleAogICAgICAgICBwcmV2aW91cyA9IHByZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KHByZXZpb3Vz
LCBmYWxzZSk7CiAgICAgICAgIHRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KHRleHRN
YXJrZXJEYXRhLCBwcmV2aW91cyk7CiAgICAgICAgIAotICAgICAgICAvLyBXZSBzaG91bGQgc2tp
cCBwcmV2aW91cyBDaGFyYWN0ZXRPZmZzZXQgaWYgaXQncyB2aXN1YWxseSB0aGUgc2FtZS4KLSAg
ICAgICAgaWYgKCFsZW5ndGhGb3JSYW5nZShyYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNl
dHMocHJldmlvdXMsIG5leHQpLmdldCgpKSkKKyAgICAgICAgLy8gV2Ugc2hvdWxkIHNraXAgcHJl
dmlvdXMgQ2hhcmFjdGVyT2Zmc2V0IGlmIGl0J3MgdmlzdWFsbHkgdGhlIHNhbWUuCisgICAgICAg
IGlmICghbGVuZ3RoRm9yUmFuZ2UocmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKHBy
ZXZpb3VzLCBuZXh0KSkpCiAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IHRydWU7CiAgICAg
ICAgIG5leHQgPSBwcmV2aW91czsKICAgICB9IHdoaWxlICh0ZXh0TWFya2VyRGF0YS5pZ25vcmVk
IHx8IHNob3VsZENvbnRpbnVlKTsKQEAgLTIzMDUsNyArMjI4MCw5IEBAIFZpc2libGVQb3NpdGlv
biBBWE9iamVjdENhY2hlOjp2aXNpYmxlUG9zaXRpb25Gcm9tQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0
IENoYXJhY3RlCiAgICAgLy8gQ3JlYXRlIGEgY29sbGFwc2VkIHJhbmdlIGFuZCB1c2UgdGhhdCB0
byBmb3JtIGEgVmlzaWJsZVBvc2l0aW9uLCBzbyB0aGF0IHRoZSBjYXNlIHdpdGgKICAgICAvLyBj
b21wb3NlZCBjaGFyYWN0ZXJzIHdpbGwgYmUgY292ZXJlZC4KICAgICBhdXRvIHJhbmdlID0gcmFu
Z2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVy
T2Zmc2V0KTsKLSAgICByZXR1cm4gcmFuZ2UgPyBWaXNpYmxlUG9zaXRpb24ocmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSkgOiBWaXNpYmxlUG9zaXRpb24oKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAg
ICByZXR1cm4geyB9OworICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFu
Z2UtPnN0YXJ0KTsKIH0KIAogQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rl
ck9mZnNldEZyb21WaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxl
UG9zKQpAQCAtMjMxOCw3ICsyMjk1LDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6
OmNoYXJhY3Rlck9mZnNldEZyb21WaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVAKICAgICBB
U1NFUlQoZG9tTm9kZSk7CiAgICAgCiAgICAgaWYgKGRvbU5vZGUtPmlzQ2hhcmFjdGVyRGF0YU5v
ZGUoKSkKLSAgICAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKHJhbmdlRm9yTm9k
ZUNvbnRlbnRzKGRvbU5vZGUpLCBkZWVwUG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIFRy
YXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQpOworICAgICAgICByZXR1cm4gdHJhdmVyc2VUb09m
ZnNldEluUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMoKmRvbU5vZGUpLCBkZWVwUG9zLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCksIFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQpOwogICAg
IAogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSB0aGlzLT5nZXRPckNyZWF0
ZShkb21Ob2RlKTsKICAgICBpZiAoIW9iaikKQEAgLTIzNTUsNyArMjMzMiw3IEBAIENoYXJhY3Rl
ck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGcm9tVmlzaWJsZVBvc2l0aW9u
KGNvbnN0IFZpc2libGVQCiAgICAgfQogICAgIAogICAgIC8vIFNvbWV0aW1lcyB3aGVuIHRoZSBu
b2RlIGlzIGEgcmVwbGFjZWQgbm9kZSBhbmQgaXMgaWdub3JlZCBpbiBhY2Nlc3NpYmlsaXR5LCB3
ZSBnZXQgYSB3cm9uZyBDaGFyYWN0ZXJPZmZzZXQgZnJvbSBpdC4KLSAgICBDaGFyYWN0ZXJPZmZz
ZXQgcmVzdWx0ID0gdHJhdmVyc2VUb09mZnNldEluUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMo
b2JqLT5ub2RlKCkpLCBjaGFyYWN0ZXJPZmZzZXQpOworICAgIENoYXJhY3Rlck9mZnNldCByZXN1
bHQgPSB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cygqb2JqLT5u
b2RlKCkpLCBjaGFyYWN0ZXJPZmZzZXQpOwogICAgIGlmIChyZXN1bHQucmVtYWluaW5nT2Zmc2V0
ID4gMCAmJiAhcmVzdWx0LmlzTnVsbCgpICYmIGlzUmVuZGVyZXJSZXBsYWNlZEVsZW1lbnQocmVz
dWx0Lm5vZGUtPnJlbmRlcmVyKCkpKQogICAgICAgICByZXN1bHQub2Zmc2V0ICs9IHJlc3VsdC5y
ZW1haW5pbmdPZmZzZXQ7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI1NDgsMTQgKzI1MjUsMTQg
QEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6Om5leHRXb3JkRW5kQ2hhcmFjdGVyT2Zm
c2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYKICAgICByZXR1cm4gZW5kQ2hhcmFjdGVyT2Zmc2V0
T2ZXb3JkKG5leHRPZmZzZXQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKIH0KIAotUmVmUHRyPFJh
bmdlPiBBWE9iamVjdENhY2hlOjpsZWZ0V29yZFJhbmdlKGNvbnN0IENoYXJhY3Rlck9mZnNldCYg
Y2hhcmFjdGVyT2Zmc2V0KQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFYT2JqZWN0Q2FjaGU6Omxl
ZnRXb3JkUmFuZ2UoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCiB7CiAg
ICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gc3RhcnRDaGFyYWN0ZXJPZmZzZXRPZldvcmQoY2hh
cmFjdGVyT2Zmc2V0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0
IGVuZCA9IGVuZENoYXJhY3Rlck9mZnNldE9mV29yZChzdGFydCk7CiAgICAgcmV0dXJuIHJhbmdl
Rm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5kKTsKIH0KIAotUmVmUHRyPFJh
bmdlPiBBWE9iamVjdENhY2hlOjpyaWdodFdvcmRSYW5nZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQm
IGNoYXJhY3Rlck9mZnNldCkKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBBWE9iamVjdENhY2hlOjpy
aWdodFdvcmRSYW5nZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKIHsK
ICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBzdGFydENoYXJhY3Rlck9mZnNldE9mV29yZChj
aGFyYWN0ZXJPZmZzZXQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgQ2hhcmFjdGVyT2Zm
c2V0IGVuZCA9IGVuZENoYXJhY3Rlck9mZnNldE9mV29yZChzdGFydCk7CkBAIC0yNjIxLDI1ICsy
NTk4LDIzIEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpuZXh0Qm91bmRhcnkoY29u
c3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzCiAgICAgaWYgKCFib3VuZGFyeSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UgPSByYW5n
ZUZvck5vZGVDb250ZW50cyhib3VuZGFyeSk7Ci0gICAgaWYgKCFzZWFyY2hSYW5nZSkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIHNlYXJjaFJhbmdlID0gcmFuZ2VGb3JOb2RlQ29udGVu
dHMoKmJvdW5kYXJ5KTsKIAogICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gc3RyaW5nOwogICAgIHVu
c2lnbmVkIHByZWZpeExlbmd0aCA9IDA7CiAgICAgCiAgICAgaWYgKHJlcXVpcmVzQ29udGV4dEZv
cldvcmRCb3VuZGFyeShjaGFyYWN0ZXJBZnRlcihjaGFyYWN0ZXJPZmZzZXQpKSkgewotICAgICAg
ICBhdXRvIGJhY2t3YXJkc1NjYW5SYW5nZSA9IGJvdW5kYXJ5LT5kb2N1bWVudCgpLmNyZWF0ZVJh
bmdlKCk7CisgICAgICAgIGF1dG8gYmFja3dhcmRzU2NhblJhbmdlID0gbWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKGJvdW5kYXJ5LT5kb2N1bWVudCgpKTsKICAgICAgICAgaWYgKCFzZXRS
YW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zmc2V0KGJhY2t3YXJkc1NjYW5SYW5nZSwgY2hh
cmFjdGVyT2Zmc2V0LCBmYWxzZSkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBw
cmVmaXhMZW5ndGggPSBwcmVmaXhMZW5ndGhGb3JSYW5nZShiYWNrd2FyZHNTY2FuUmFuZ2UsIHN0
cmluZyk7CisgICAgICAgIHByZWZpeExlbmd0aCA9IHByZWZpeExlbmd0aEZvclJhbmdlKGNyZWF0
ZUxpdmVSYW5nZShiYWNrd2FyZHNTY2FuUmFuZ2UpLCBzdHJpbmcpOwogICAgIH0KICAgICAKLSAg
ICBpZiAoIXNldFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZzZXQoKnNlYXJjaFJhbmdl
LCBjaGFyYWN0ZXJPZmZzZXQsIHRydWUpKQorICAgIGlmICghc2V0UmFuZ2VTdGFydE9yRW5kV2l0
aENoYXJhY3Rlck9mZnNldChzZWFyY2hSYW5nZSwgY2hhcmFjdGVyT2Zmc2V0LCB0cnVlKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0gc3RhcnRPckVuZENo
YXJhY3Rlck9mZnNldEZvclJhbmdlKHNlYXJjaFJhbmdlLCBmYWxzZSk7CiAgICAgCi0gICAgVGV4
dEl0ZXJhdG9yIGl0KCpzZWFyY2hSYW5nZSwgVGV4dEl0ZXJhdG9yRW1pdHNPYmplY3RSZXBsYWNl
bWVudENoYXJhY3RlcnMpOworICAgIFRleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZSwgVGV4dEl0
ZXJhdG9yRW1pdHNPYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcnMpOwogICAgIHVuc2lnbmVkIG5l
eHQgPSBmb3J3YXJkU2VhcmNoRm9yQm91bmRhcnlXaXRoVGV4dEl0ZXJhdG9yKGl0LCBzdHJpbmcs
IHByZWZpeExlbmd0aCwgc2VhcmNoRnVuY3Rpb24pOwogICAgIAogICAgIGlmIChpdC5hdEVuZCgp
ICYmIG5leHQgPT0gc3RyaW5nLnNpemUoKSkKQEAgLTI2NjksMTIgKzI2NDQsMTIgQEAgQ2hhcmFj
dGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzQm91bmRhcnkoY29uc3QgQ2hhcmFjdGVy
T2Zmc2V0JiBjaGFyYWN0ZXIKICAgICBpZiAoIWJvdW5kYXJ5KQogICAgICAgICByZXR1cm4gQ2hh
cmFjdGVyT2Zmc2V0KCk7CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZSA9IHJh
bmdlRm9yTm9kZUNvbnRlbnRzKGJvdW5kYXJ5KTsKKyAgICBhdXRvIHNlYXJjaFJhbmdlID0gcmFu
Z2VGb3JOb2RlQ29udGVudHMoKmJvdW5kYXJ5KTsKICAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IHN0
cmluZzsKICAgICB1bnNpZ25lZCBzdWZmaXhMZW5ndGggPSAwOwogCiAgICAgaWYgKG5lZWRzQ29u
dGV4dEF0UGFyYWdyYXBoU3RhcnQgPT0gTmVlZHNDb250ZXh0QXRQYXJhZ3JhcGhTdGFydDo6WWVz
ICYmIHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZQYXJhZ3JhcGgoY2hhcmFjdGVyT2Zmc2V0KS5pc0Vx
dWFsKGNoYXJhY3Rlck9mZnNldCkpIHsKLSAgICAgICAgYXV0byBmb3J3YXJkc1NjYW5SYW5nZSA9
IGJvdW5kYXJ5LT5kb2N1bWVudCgpLmNyZWF0ZVJhbmdlKCk7CisgICAgICAgIGF1dG8gZm9yd2Fy
ZHNTY2FuUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoYm91bmRhcnktPmRv
Y3VtZW50KCkpOwogICAgICAgICBhdXRvIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGVuZENoYXJh
Y3Rlck9mZnNldE9mUGFyYWdyYXBoKGNoYXJhY3Rlck9mZnNldCk7CiAgICAgICAgIGlmICghc2V0
UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rlck9mZnNldChmb3J3YXJkc1NjYW5SYW5nZSwgY2hh
cmFjdGVyT2Zmc2V0LCB0cnVlKSkKICAgICAgICAgICAgIHJldHVybiB7IH07CkBAIC0yNjg0LDM3
ICsyNjU5LDM5IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpwcmV2aW91c0JvdW5k
YXJ5KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyCiAgICAgICAgICAgICBhcHBlbmQo
c3RyaW5nLCBmb3J3YXJkc0l0ZXJhdG9yLnRleHQoKSk7CiAgICAgICAgIHN1ZmZpeExlbmd0aCA9
IHN0cmluZy5zaXplKCk7CiAgICAgfSBlbHNlIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91
bmRhcnkoY2hhcmFjdGVyQmVmb3JlKGNoYXJhY3Rlck9mZnNldCkpKSB7Ci0gICAgICAgIGF1dG8g
Zm9yd2FyZHNTY2FuUmFuZ2UgPSBib3VuZGFyeS0+ZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOwot
ICAgICAgICBpZiAoZm9yd2FyZHNTY2FuUmFuZ2UtPnNldEVuZEFmdGVyKCpib3VuZGFyeSkuaGFz
RXhjZXB0aW9uKCkpCisgICAgICAgIGF1dG8gZm9yd2FyZHNTY2FuUmFuZ2UgPSBtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlQ29udGVudHMoYm91bmRhcnktPmRvY3VtZW50KCkpOworICAgICAgICBhdXRv
IGFmdGVyQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZSgqYm91bmRhcnkpOwor
ICAgICAgICBpZiAoIWFmdGVyQm91bmRhcnkpCiAgICAgICAgICAgICByZXR1cm4geyB9OworICAg
ICAgICBmb3J3YXJkc1NjYW5SYW5nZS5zdGFydCA9ICphZnRlckJvdW5kYXJ5OwogICAgICAgICBp
ZiAoIXNldFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZzZXQoZm9yd2FyZHNTY2FuUmFu
Z2UsIGNoYXJhY3Rlck9mZnNldCwgdHJ1ZSkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwotICAg
ICAgICBzdWZmaXhMZW5ndGggPSBzdWZmaXhMZW5ndGhGb3JSYW5nZShmb3J3YXJkc1NjYW5SYW5n
ZSwgc3RyaW5nKTsKKyAgICAgICAgc3VmZml4TGVuZ3RoID0gc3VmZml4TGVuZ3RoRm9yUmFuZ2Uo
Y3JlYXRlTGl2ZVJhbmdlKGZvcndhcmRzU2NhblJhbmdlKSwgc3RyaW5nKTsKICAgICB9CiAgICAg
Ci0gICAgaWYgKCFzZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zmc2V0KCpzZWFyY2hS
YW5nZSwgY2hhcmFjdGVyT2Zmc2V0LCBmYWxzZSkpCisgICAgaWYgKCFzZXRSYW5nZVN0YXJ0T3JF
bmRXaXRoQ2hhcmFjdGVyT2Zmc2V0KHNlYXJjaFJhbmdlLCBjaGFyYWN0ZXJPZmZzZXQsIGZhbHNl
KSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBzdGFy
dE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2Uoc2VhcmNoUmFuZ2UsIHRydWUpOwogICAgIAot
ICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgaXQoKnNlYXJjaFJhbmdlKTsKKyAg
ICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlKTsKICAgICB1
bnNpZ25lZCBuZXh0ID0gYmFja3dhcmRTZWFyY2hGb3JCb3VuZGFyeVdpdGhUZXh0SXRlcmF0b3Io
aXQsIHN0cmluZywgc3VmZml4TGVuZ3RoLCBzZWFyY2hGdW5jdGlvbik7CiAgICAgCiAgICAgaWYg
KCFuZXh0KQogICAgICAgICByZXR1cm4gaXQuYXRFbmQoKSA/IHN0YXJ0IDogY2hhcmFjdGVyT2Zm
c2V0OwogICAgIAotICAgIGF1dG8mIG5vZGUgPSBpdC5hdEVuZCgpID8gc2VhcmNoUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCkgOiBpdC5yYW5nZSgpLnN0YXJ0LmNvbnRhaW5lci5nZXQoKTsKKyAgICBh
dXRvJiBub2RlID0gKGl0LmF0RW5kKCkgPyBzZWFyY2hSYW5nZSA6IGl0LnJhbmdlKCkpLnN0YXJ0
LmNvbnRhaW5lci5nZXQoKTsKIAogICAgIC8vIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0
b3IgaWdub3JlcyByZXBsYWNlZCBlbGVtZW50cy4KICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVj
dDo6cmVwbGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIoY2hhcmFjdGVyT2Zmc2V0Lm5vZGUpKQogICAg
ICAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldCgqY2hhcmFjdGVyT2Zm
c2V0Lm5vZGUsIDApOwogICAgIE5vZGUqIG5leHRTaWJsaW5nID0gbm9kZS5uZXh0U2libGluZygp
OwogICAgIGlmICgmbm9kZSAhPSBjaGFyYWN0ZXJPZmZzZXQubm9kZSAmJiBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpyZXBsYWNlZE5vZGVOZWVkc0NoYXJhY3RlcihuZXh0U2libGluZykpCi0gICAgICAg
IHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2VGb3JOb2RlQ29u
dGVudHMobmV4dFNpYmxpbmcpLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBzdGFydE9yRW5kQ2hh
cmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMoKm5leHRTaWJsaW5nKSwg
ZmFsc2UpOwogCiAgICAgaWYgKCghc3VmZml4TGVuZ3RoICYmIG5vZGUuaXNUZXh0Tm9kZSgpICYm
IG5leHQgPD0gbm9kZS5sZW5ndGgoKSkgfHwgKG5vZGUucmVuZGVyZXIoKSAmJiBub2RlLnJlbmRl
cmVyKCktPmlzQlIoKSAmJiAhbmV4dCkpIHsKICAgICAgICAgLy8gVGhlIG5leHQgdmFyaWFibGUg
Y29udGFpbnMgYSB1c2FibGUgaW5kZXggaW50byBhIHRleHQgbm9kZQogICAgICAgICBpZiAobm9k
ZS5pc1RleHROb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VUb09mZnNldEluUmFu
Z2UocmFuZ2VGb3JOb2RlQ29udGVudHMoJm5vZGUpLCBuZXh0LCBUcmF2ZXJzZU9wdGlvblZhbGlk
YXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShy
YW5nZUZvck5vZGVDb250ZW50cyhub2RlKSwgbmV4dCwgVHJhdmVyc2VPcHRpb25WYWxpZGF0ZU9m
ZnNldCk7CiAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KG5v
ZGUsIG5leHQsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0YXJ0KTsKICAgICB9CiAgICAgCkBAIC0y
NzMyLDIwICsyNzA5LDIwIEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpzdGFydENo
YXJhY3Rlck9mZnNldE9mUGFyYWdyYXBoKGNvbnN0IENoYXJhY3Rlck9mCiAgICAgaWYgKGNoYXJh
Y3Rlck9mZnNldC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwog
ICAgIAotICAgIGF1dG8qIHN0YXJ0Tm9kZSA9IGNoYXJhY3Rlck9mZnNldC5ub2RlOworICAgIGF1
dG8mIHN0YXJ0Tm9kZSA9ICpjaGFyYWN0ZXJPZmZzZXQubm9kZTsKICAgICAKLSAgICBpZiAoaXNS
ZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIoc3RhcnROb2RlKSkKKyAgICBpZiAoaXNS
ZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIoJnN0YXJ0Tm9kZSkpCiAgICAgICAgIHJl
dHVybiBzdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVu
dHMoc3RhcnROb2RlKSwgdHJ1ZSk7CiAgICAgCi0gICAgYXV0byogc3RhcnRCbG9jayA9IGVuY2xv
c2luZ0Jsb2NrKHN0YXJ0Tm9kZSk7CisgICAgYXV0byogc3RhcnRCbG9jayA9IGVuY2xvc2luZ0Js
b2NrKCZzdGFydE5vZGUpOwogICAgIGludCBvZmZzZXQgPSBjaGFyYWN0ZXJPZmZzZXQuc3RhcnRJ
bmRleCArIGNoYXJhY3Rlck9mZnNldC5vZmZzZXQ7Ci0gICAgYXV0byogaGlnaGVzdFJvb3QgPSBo
aWdoZXN0RWRpdGFibGVSb290KGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShzdGFydE5vZGUp
KTsKKyAgICBhdXRvKiBoaWdoZXN0Um9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QoZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKCZzdGFydE5vZGUpKTsKICAgICBQb3NpdGlvbjo6QW5jaG9yVHlw
ZSB0eXBlID0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjsKICAgICAKLSAgICBh
dXRvKiBub2RlID0gZmluZFN0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnROb2RlLCBoaWdoZXN0Um9vdCwg
c3RhcnRCbG9jaywgb2Zmc2V0LCB0eXBlLCBib3VuZGFyeUNyb3NzaW5nUnVsZSk7CisgICAgYXV0
byYgbm9kZSA9ICpmaW5kU3RhcnRPZlBhcmFncmFwaCgmc3RhcnROb2RlLCBoaWdoZXN0Um9vdCwg
c3RhcnRCbG9jaywgb2Zmc2V0LCB0eXBlLCBib3VuZGFyeUNyb3NzaW5nUnVsZSk7CiAgICAgCiAg
ICAgaWYgKHR5cGUgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKLSAgICAg
ICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQoKm5vZGUsIG9mZnNldCwg
VHJhdmVyc2VPcHRpb25JbmNsdWRlU3RhcnQpOworICAgICAgICByZXR1cm4gY2hhcmFjdGVyT2Zm
c2V0Rm9yTm9kZUFuZE9mZnNldChub2RlLCBvZmZzZXQsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0
YXJ0KTsKICAgICAKICAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdl
KHJhbmdlRm9yTm9kZUNvbnRlbnRzKG5vZGUpLCB0cnVlKTsKIH0KQEAgLTI3NTcsMzAgKzI3MzQs
MjkgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmVuZENoYXJhY3Rlck9mZnNldE9m
UGFyYWdyYXBoKGNvbnN0IENoYXJhY3Rlck9mZnMKICAgICAKICAgICBOb2RlKiBzdGFydE5vZGUg
PSBjaGFyYWN0ZXJPZmZzZXQubm9kZTsKICAgICBpZiAoaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFi
bGVJbWFnZU9ySFIoc3RhcnROb2RlKSkKLSAgICAgICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFyYWN0
ZXJPZmZzZXRGb3JSYW5nZShyYW5nZUZvck5vZGVDb250ZW50cyhzdGFydE5vZGUpLCBmYWxzZSk7
CisgICAgICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2VG
b3JOb2RlQ29udGVudHMoKnN0YXJ0Tm9kZSksIGZhbHNlKTsKICAgICAKICAgICBOb2RlKiBzdGF5
SW5zaWRlQmxvY2sgPSBlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpOwogICAgIGludCBvZmZzZXQg
PSBjaGFyYWN0ZXJPZmZzZXQuc3RhcnRJbmRleCArIGNoYXJhY3Rlck9mZnNldC5vZmZzZXQ7CiAg
ICAgTm9kZSogaGlnaGVzdFJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KGZpcnN0UG9zaXRpb25J
bk9yQmVmb3JlTm9kZShzdGFydE5vZGUpKTsKICAgICBQb3NpdGlvbjo6QW5jaG9yVHlwZSB0eXBl
ID0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjsKICAgICAKLSAgICBOb2RlKiBu
b2RlID0gZmluZEVuZE9mUGFyYWdyYXBoKHN0YXJ0Tm9kZSwgaGlnaGVzdFJvb3QsIHN0YXlJbnNp
ZGVCbG9jaywgb2Zmc2V0LCB0eXBlLCBib3VuZGFyeUNyb3NzaW5nUnVsZSk7CisgICAgYXV0byYg
bm9kZSA9ICpmaW5kRW5kT2ZQYXJhZ3JhcGgoc3RhcnROb2RlLCBoaWdoZXN0Um9vdCwgc3RheUlu
c2lkZUJsb2NrLCBvZmZzZXQsIHR5cGUsIGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlKTsKICAgICBpZiAo
dHlwZSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSB7Ci0gICAgICAgIGlm
IChub2RlLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgaWYgKG5vZGUuaXNUZXh0Tm9kZSgpKSB7
CiAgICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnRPZmZzZXQgPSBzdGFydE9yRW5kQ2hh
cmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMobm9kZSksIHRydWUpOwog
ICAgICAgICAgICAgb2Zmc2V0IC09IHN0YXJ0T2Zmc2V0LnN0YXJ0SW5kZXg7CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQoKm5vZGUsIG9m
ZnNldCwgVHJhdmVyc2VPcHRpb25JbmNsdWRlU3RhcnQpOworICAgICAgICByZXR1cm4gY2hhcmFj
dGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldChub2RlLCBvZmZzZXQsIFRyYXZlcnNlT3B0aW9uSW5j
bHVkZVN0YXJ0KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFyYWN0ZXJP
ZmZzZXRGb3JSYW5nZShyYW5nZUZvck5vZGVDb250ZW50cyhub2RlKSwgZmFsc2UpOwogfQogCi1S
ZWZQdHI8UmFuZ2U+IEFYT2JqZWN0Q2FjaGU6OnBhcmFncmFwaEZvckNoYXJhY3Rlck9mZnNldChj
b25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKK09wdGlvbmFsPFNpbXBsZVJh
bmdlPiBBWE9iamVjdENhY2hlOjpwYXJhZ3JhcGhGb3JDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hh
cmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCiB7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0
YXJ0ID0gc3RhcnRDaGFyYWN0ZXJPZmZzZXRPZlBhcmFncmFwaChjaGFyYWN0ZXJPZmZzZXQpOwog
ICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBlbmRDaGFyYWN0ZXJPZmZzZXRPZlBhcmFncmFwaChz
dGFydCk7Ci0gICAgCiAgICAgcmV0dXJuIHJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0
cyhzdGFydCwgZW5kKTsKIH0KIApAQCAtMjgxOCw3ICsyNzk0LDcgQEAgQ2hhcmFjdGVyT2Zmc2V0
IEFYT2JqZWN0Q2FjaGU6OmVuZENoYXJhY3Rlck9mZnNldE9mU2VudGVuY2UoY29uc3QgQ2hhcmFj
dGVyT2Zmc2UKICAgICByZXR1cm4gbmV4dEJvdW5kYXJ5KGNoYXJhY3Rlck9mZnNldCwgZW5kU2Vu
dGVuY2VCb3VuZGFyeSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gQVhPYmplY3RDYWNoZTo6c2VudGVu
Y2VGb3JDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZz
ZXQpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gQVhPYmplY3RDYWNoZTo6c2VudGVuY2VGb3JDaGFy
YWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCiB7CiAg
ICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gc3RhcnRDaGFyYWN0ZXJPZmZzZXRPZlNlbnRlbmNl
KGNoYXJhY3Rlck9mZnNldCk7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGVuZENoYXJhY3Rl
ck9mZnNldE9mU2VudGVuY2Uoc3RhcnQpOwpAQCAtMjg1OSwxMiArMjgzNSwxMSBAQCBMYXlvdXRS
ZWN0IEFYT2JqZWN0Q2FjaGU6OmxvY2FsQ2FyZXRSZWN0Rm9yQ2hhcmFjdGVyT2Zmc2V0KFJlbmRl
ck9iamVjdComIHJlbmRlcgogICAgIElubGluZUJveCogaW5saW5lQm94ID0gbnVsbHB0cjsKICAg
ICBpbnQgY2FyZXRPZmZzZXQ7CiAgICAgLy8gVXNlIGEgY29sbGFwc2VkIHJhbmdlIHRvIGdldCB0
aGUgcG9zaXRpb24uCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHJhbmdlRm9yVW5vcmRlcmVk
Q2hhcmFjdGVyT2Zmc2V0cyhjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7CisgICAg
YXV0byByYW5nZSA9IHJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhjaGFyYWN0ZXJP
ZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKICAgICAKLSAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gcmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKTsKLSAgICBzdGFydFBvc2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldChE
T1dOU1RSRUFNLCBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKKyAgICBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KS5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoRE9XTlNUUkVB
TSwgaW5saW5lQm94LCBjYXJldE9mZnNldCk7CiAgICAgCiAgICAgaWYgKGlubGluZUJveCkKICAg
ICAgICAgcmVuZGVyZXIgPSAmaW5saW5lQm94LT5yZW5kZXJlcigpOwpAQCAtMjg5MiwxNSArMjg2
NywxNiBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9y
UG9pbnQoY29uc3QgSW50UG9pbnQgJnBvaW50LCBBWAogICAgIGlmICghb2JqKQogICAgICAgICBy
ZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7CiAgICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZwID0g
b2JqLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IG1ha2VSYW5nZSh2cCwgdnApOwotICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVy
T2Zmc2V0Rm9yUmFuZ2UocmFuZ2UsIHRydWUpOworICAgIGF1dG8gYm91bmRhcnkgPSBtYWtlQm91
bmRhcnlQb2ludChvYmotPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHBvaW50KSk7CisgICAgaWYg
KCFib3VuZGFyeSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBzdGFydE9yRW5k
Q2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UoeyAqYm91bmRhcnksICpib3VuZGFyeSB9LCB0cnVlKTsK
IH0KIAogQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvclBv
aW50KGNvbnN0IEludFBvaW50ICZwb2ludCkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IGNhcmV0UmFu
Z2UgPSBtX2RvY3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQoTGF5b3V0UG9pbnQocG9pbnQpKTsK
LSAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKGNhcmV0UmFuZ2Us
IHRydWUpOworICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UoKm1f
ZG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Qb2ludChMYXlvdXRQb2ludChwb2ludCkpLCB0cnVlKTsK
IH0KIAogQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvckJv
dW5kcyhjb25zdCBJbnRSZWN0JiByZWN0LCBib29sIGZpcnN0KQpAQCAtMjk2NCw4ICsyOTQwLDEy
IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JJbmRl
eChpbnQgaW5kZXgsIGNvbnN0IEFYQ29yZU9iCiAgICAgLy8gQlIgbm9kZSwgd2hpbGUgQ2hhcmFj
dGVyT2Zmc2V0IHdpbGwgZG8gdGhlIG9wcG9zaXRlLgogICAgIGlmIChvYmotPmlzVGV4dENvbnRy
b2woKSAmJiBjaGFyYWN0ZXJPZmZzZXROb2RlSXNCUih2YWxpZGF0ZSkpCiAgICAgICAgIHZhbGlk
YXRlLm9mZnNldCA9IDE7Ci0gICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG9iai0+ZWxl
bWVudFJhbmdlKCk7CisKKyAgICBhdXRvIGxpdmVSYW5nZSA9IG9iai0+ZWxlbWVudFJhbmdlKCk7
CisgICAgaWYgKCFsaXZlUmFuZ2UpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIHJh
bmdlID0gU2ltcGxlUmFuZ2UgeyAqbGl2ZVJhbmdlIH07CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0
YXJ0ID0gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlLCB0cnVlLCB0cnVl
KTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZv
clJhbmdlKHJhbmdlLCBmYWxzZSwgdHJ1ZSk7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHJlc3VsdCA9
IHN0YXJ0OwpAQCAtMjk5MCwxMSArMjk3MCwxMCBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RD
YWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgoaW50IGluZGV4LCBjb25zdCBBWENvcmVPYgog
aW50IEFYT2JqZWN0Q2FjaGU6OmluZGV4Rm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rl
ck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0LCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmopCiB7CiAg
ICAgLy8gQ3JlYXRlIGEgY29sbGFwc2VkIHJhbmdlIHNvIHRoYXQgd2UgY2FuIGdldCB0aGUgVmlz
aWJsZVBvc2l0aW9uIGZyb20gaXQuCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHJhbmdlRm9y
VW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNl
dCk7CisgICAgYXV0byByYW5nZSA9IHJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhj
aGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZwID0gcmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKTsKLSAgICByZXR1cm4gb2JqLT5pbmRleEZvclZpc2libGVQb3NpdGlvbih2cCk7CisgICAg
cmV0dXJuIG9iai0+aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKHJhbmdlLT5zdGFydCkpOwogfQogCiBjb25zdCBFbGVtZW50KiBBWE9iamVjdENhY2hl
Ojpyb290QVhFZGl0YWJsZUVsZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKaW5kZXggMzUzNmUwNWRlZDMzOGI2MTVl
MzEyZjlkZTE3ZTQzZmFkNDA3MDhkNi4uMjQzMTQwZWI1N2YzOThiNGZlOTA3OGI3N2MxYzkxNjMz
OGViNzNlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmgKQEAgLTI4LDE1ICsyOCwxMyBAQAogI2luY2x1ZGUgIkFYSXNvbGF0ZWRUcmVlLmgiCiAjaW5j
bHVkZSAiQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
T2JqZWN0LmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJTaW1wbGVSYW5nZS5oIgog
I2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSA8
bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiAjaWYgVVNFKEFUSykKICNpbmNsdWRlIDx3
dGYvZ2xpYi9HUmVmUHRyLmg+CkBAIC0yMzYsMjYgKzIzNCwyNiBAQCBwdWJsaWM6CiAgICAgLy8g
VXNlIGlnbm9yZU5leHROb2RlU3RhcnQvaWdub3JlUHJldmlvdXNOb2RlRW5kIHRvIGRldGVybWlu
ZSB0aGUgYmVoYXZpb3Igd2hlbiB3ZSBhcmUgYXQgbm9kZSBib3VuZGFyeS4gCiAgICAgQ2hhcmFj
dGVyT2Zmc2V0IG5leHRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgYm9v
bCBpZ25vcmVOZXh0Tm9kZVN0YXJ0ID0gdHJ1ZSk7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHByZXZp
b3VzQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIGJvb2wgaWdub3JlUHJl
dmlvdXNOb2RlRW5kID0gdHJ1ZSk7Ci0gICAgdm9pZCBzdGFydE9yRW5kVGV4dE1hcmtlckRhdGFG
b3JSYW5nZShUZXh0TWFya2VyRGF0YSYsIFJlZlB0cjxSYW5nZT4sIGJvb2wpOwotICAgIENoYXJh
Y3Rlck9mZnNldCBzdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UoUmVmUHRyPFJhbmdl
PiwgYm9vbCwgYm9vbCBlbnRlclRleHRDb250cm9scyA9IGZhbHNlKTsKKyAgICB2b2lkIHN0YXJ0
T3JFbmRUZXh0TWFya2VyRGF0YUZvclJhbmdlKFRleHRNYXJrZXJEYXRhJiwgY29uc3QgU2ltcGxl
UmFuZ2UmLCBib29sKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnRPckVuZENoYXJhY3Rlck9m
ZnNldEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgYm9vbCwgYm9vbCBlbnRlclRleHRDb250
cm9scyA9IGZhbHNlKTsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5T2Jq
ZWN0Rm9yVGV4dE1hcmtlckRhdGEoVGV4dE1hcmtlckRhdGEmKTsKLSAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhjb25zdCBDaGFyYWN0ZXJPZmZzZXQm
LCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKLSAgICBzdGF0aWMgUmVmUHRyPFJhbmdlPiByYW5n
ZUZvck5vZGVDb250ZW50cyhOb2RlKik7Ci0gICAgc3RhdGljIGludCBsZW5ndGhGb3JSYW5nZShS
YW5nZSopOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUZvclVub3JkZXJlZENoYXJh
Y3Rlck9mZnNldHMoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0
Jik7CisgICAgc3RhdGljIFNpbXBsZVJhbmdlIHJhbmdlRm9yTm9kZUNvbnRlbnRzKE5vZGUmKTsK
KyAgICBzdGF0aWMgaW50IGxlbmd0aEZvclJhbmdlKGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYpOwogICAgIAogICAgIC8vIFdvcmQgYm91bmRhcnkKICAgICBDaGFyYWN0ZXJPZmZzZXQgbmV4
dFdvcmRFbmRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgQ2hh
cmFjdGVyT2Zmc2V0IHByZXZpb3VzV29yZFN0YXJ0Q2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJh
Y3Rlck9mZnNldCYpOwotICAgIFJlZlB0cjxSYW5nZT4gbGVmdFdvcmRSYW5nZShjb25zdCBDaGFy
YWN0ZXJPZmZzZXQmKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJpZ2h0V29yZFJhbmdlKGNvbnN0IENo
YXJhY3Rlck9mZnNldCYpOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBsZWZ0V29yZFJhbmdl
KGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByaWdo
dFdvcmRSYW5nZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICAKICAgICAvLyBQYXJhZ3Jh
cGgKLSAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaEZvckNoYXJhY3Rlck9mZnNldChjb25zdCBD
aGFyYWN0ZXJPZmZzZXQmKTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcGFyYWdyYXBoRm9y
Q2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwogICAgIENoYXJhY3Rlck9m
ZnNldCBuZXh0UGFyYWdyYXBoRW5kQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNl
dCYpOwogICAgIENoYXJhY3Rlck9mZnNldCBwcmV2aW91c1BhcmFncmFwaFN0YXJ0Q2hhcmFjdGVy
T2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwogICAgIAogICAgIC8vIFNlbnRlbmNlCi0g
ICAgUmVmUHRyPFJhbmdlPiBzZW50ZW5jZUZvckNoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0
ZXJPZmZzZXQmKTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gc2VudGVuY2VGb3JDaGFyYWN0
ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IG5l
eHRTZW50ZW5jZUVuZENoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAg
ICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXNTZW50ZW5jZVN0YXJ0Q2hhcmFjdGVyT2Zmc2V0KGNv
bnN0IENoYXJhY3Rlck9mZnNldCYpOwogICAgIApAQCAtNDA1LDcgKzQwMyw3IEBAIHByb3RlY3Rl
ZDoKICAgICBlbnVtIFRyYXZlcnNlT3B0aW9uIHsgVHJhdmVyc2VPcHRpb25EZWZhdWx0ID0gMSA8
PCAwLCBUcmF2ZXJzZU9wdGlvblRvTm9kZUVuZCA9IDEgPDwgMSwgVHJhdmVyc2VPcHRpb25JbmNs
dWRlU3RhcnQgPSAxIDw8IDIsIFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQgPSAxIDw8IDMs
IFRyYXZlcnNlT3B0aW9uRG9Ob3RFbnRlclRleHRDb250cm9scyA9IDEgPDwgNCB9OwogICAgIE5v
ZGUqIG5leHROb2RlKE5vZGUqKSBjb25zdDsKICAgICBOb2RlKiBwcmV2aW91c05vZGUoTm9kZSop
IGNvbnN0OwotICAgIENoYXJhY3Rlck9mZnNldCB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShSZWZQ
dHI8UmFuZ2U+LCBpbnQsIFRyYXZlcnNlT3B0aW9uID0gVHJhdmVyc2VPcHRpb25EZWZhdWx0LCBi
b29sIHN0YXlXaXRoaW5SYW5nZSA9IGZhbHNlKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgdHJhdmVy
c2VUb09mZnNldEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBpbnQsIFRyYXZlcnNlT3B0aW9u
ID0gVHJhdmVyc2VPcHRpb25EZWZhdWx0LCBib29sIHN0YXlXaXRoaW5SYW5nZSA9IGZhbHNlKTsK
ICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRnJvbUNoYXJhY3Rlck9mZnNldChj
b25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zm
c2V0RnJvbVZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKICAgICB2b2lk
IHNldFRleHRNYXJrZXJEYXRhV2l0aENoYXJhY3Rlck9mZnNldChUZXh0TWFya2VyRGF0YSYsIGNv
bnN0IENoYXJhY3Rlck9mZnNldCYpOwpAQCAtNjAzLDcgKzYwMSw3IEBAIGlubGluZSB2b2lkIEFY
T2JqZWN0Q2FjaGU6OnJlY29tcHV0ZUlzSWdub3JlZChSZW5kZXJPYmplY3QqKSB7IH0KIGlubGlu
ZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnRleHRDaGFuZ2VkKEFjY2Vzc2liaWxpdHlPYmplY3QqKSB7
IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnRleHRDaGFuZ2VkKE5vZGUqKSB7IH0KIGlu
bGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnVwZGF0ZUNhY2hlQWZ0ZXJOb2RlSXNBdHRhY2hlZChO
b2RlKikgeyB9Ci1pbmxpbmUgUmVmUHRyPFJhbmdlPiBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5v
ZGVDb250ZW50cyhOb2RlKikgeyByZXR1cm4gbnVsbHB0cjsgfQoraW5saW5lIFNpbXBsZVJhbmdl
IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpIHsgcmV0dXJu
IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhub2RlKTsgfQogaW5saW5lIHZvaWQgQVhP
YmplY3RDYWNoZTo6cmVtb3ZlKEFYSUQpIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6
cmVtb3ZlKFJlbmRlck9iamVjdCopIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cmVt
b3ZlKE5vZGUmKSB7IH0KQEAgLTYxMiwxMCArNjEwLDEwIEBAIGlubGluZSB2b2lkIEFYT2JqZWN0
Q2FjaGU6OnNlbGVjdGVkQ2hpbGRyZW5DaGFuZ2VkKFJlbmRlck9iamVjdCopIHsgfQogaW5saW5l
IHZvaWQgQVhPYmplY3RDYWNoZTo6c2VsZWN0ZWRDaGlsZHJlbkNoYW5nZWQoTm9kZSopIHsgfQog
aW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6c2V0SXNTeW5jaHJvbml6aW5nU2VsZWN0aW9uKGJv
b2wpIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6c2V0VGV4dFNlbGVjdGlvbkludGVu
dChjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYpIHsgfQotaW5saW5lIFJlZlB0cjxSYW5n
ZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNvbnN0
IENoYXJhY3Rlck9mZnNldCYsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYpIHsgcmV0dXJuIG51bGxw
dHI7IH0KK2lubGluZSBPcHRpb25hbDxTaW1wbGVSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VG
b3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIGNvbnN0
IENoYXJhY3Rlck9mZnNldCYpIHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogaW5saW5lIEludFJl
Y3QgQVhPYmplY3RDYWNoZTo6YWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNldChj
b25zdCBDaGFyYWN0ZXJPZmZzZXQmKSB7IHJldHVybiBJbnRSZWN0KCk7IH0KIGlubGluZSBDaGFy
YWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgoaW50LCBj
b25zdCBBWENvcmVPYmplY3QqKSB7IHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsgfQotaW5saW5l
IENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpzdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0
Rm9yUmFuZ2UoUmVmUHRyPFJhbmdlPiwgYm9vbCwgYm9vbCkgeyByZXR1cm4gQ2hhcmFjdGVyT2Zm
c2V0KCk7IH0KK2lubGluZSBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6c3RhcnRPckVu
ZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgYm9vbCwgYm9vbCkg
eyByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7IH0KIGlubGluZSBDaGFyYWN0ZXJPZmZzZXQgQVhP
YmplY3RDYWNoZTo6ZW5kQ2hhcmFjdGVyT2Zmc2V0T2ZMaW5lKGNvbnN0IENoYXJhY3Rlck9mZnNl
dCYpIHsgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOyB9CiBpbmxpbmUgQ2hhcmFjdGVyT2Zmc2V0
IEFYT2JqZWN0Q2FjaGU6Om5leHRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0
JiwgYm9vbCkgeyByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7IH0KIGlubGluZSBDaGFyYWN0ZXJP
ZmZzZXQgQVhPYmplY3RDYWNoZTo6cHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFj
dGVyT2Zmc2V0JiwgYm9vbCkgeyByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmlu
ZGV4IDNmODAwMTAyNDU3MDgzYzg3M2Q5YmY4MTU5MmJiYjA4NWNiNzA0NjAuLjU3YTAxOWRmZmYx
Yjg2MGM3MzgwNzAyMDMxNzI4NWExMjE5MjA0MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNjQ1LDggKzY0NSwx
MSBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9u
UmFuZ2UoKSBjb25zdAogfQogCiBSZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmVs
ZW1lbnRSYW5nZSgpIGNvbnN0Ci17ICAgIAotICAgIHJldHVybiBBWE9iamVjdENhY2hlOjpyYW5n
ZUZvck5vZGVDb250ZW50cyhub2RlKCkpOworeworICAgIGF1dG8gbm9kZSA9IHRoaXMtPm5vZGUo
KTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIGNyZWF0
ZUxpdmVSYW5nZShBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250ZW50cygqbm9kZSkpOwog
fQogCiBSZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2UoVmVj
dG9yPFN0cmluZz4gY29uc3QmIHNlYXJjaFN0cmluZ3MsIFJlZlB0cjxSYW5nZT4gY29uc3QmIHN0
YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CkBA
IC0xMTg5LDcgKzExOTIsNyBAQCBSZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJh
bmdlRm9yUGxhaW5UZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmCiAgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gYXhPYmplY3RDYWNoZSgpKSB7CiAgICAgICAgIENoYXJhY3Rlck9m
ZnNldCBzdGFydCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChyYW5nZS5zdGFydCwg
dGhpcyk7CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zm
c2V0Rm9ySW5kZXgocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgsIHRoaXMpOwotICAgICAgICBy
ZXR1cm4gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5k
KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShjYWNoZS0+cmFuZ2VGb3JVbm9yZGVy
ZWRDaGFyYWN0ZXJPZmZzZXRzKHN0YXJ0LCBlbmQpKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBkMWM4M2U2ZWQzMTllMTc3MjIzZTczZjQ3
ODhiNjhhMDM2Nzc5ZWM3Li41MGYxYjc4MTg1NWIxODkxMmRiOGI1N2ZkZmI3MmVlODNhMzcyMmNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTIxNzYsOCArMjE3Niw4IEBAIEludFJlY3QgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdl
PiByYW5nZSkgY29uCiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsK
ICAgICAKLSAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNoZS0+c3RhcnRPckVuZENoYXJh
Y3Rlck9mZnNldEZvclJhbmdlKHJhbmdlLCB0cnVlKTsKLSAgICBDaGFyYWN0ZXJPZmZzZXQgZW5k
ID0gY2FjaGUtPnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShyYW5nZSwgZmFsc2Up
OworICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IGNhY2hlLT5zdGFydE9yRW5kQ2hhcmFjdGVy
T2Zmc2V0Rm9yUmFuZ2UoKnJhbmdlLCB0cnVlKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0g
Y2FjaGUtPnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZSgqcmFuZ2UsIGZhbHNlKTsK
ICAgICAKICAgICBMYXlvdXRSZWN0IHJlY3QxID0gY2FjaGUtPmFic29sdXRlQ2FyZXRCb3VuZHNG
b3JDaGFyYWN0ZXJPZmZzZXQoc3RhcnQpOwogICAgIExheW91dFJlY3QgcmVjdDIgPSBjYWNoZS0+
YWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNldChlbmQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCA2MTUzY2ZhMjU2MjI4OTRiMDEyOGJjMGQy
MmZhYmZjYmQxYjdjNmI2Li45MWFhMzM2ODE4ZGIyN2Q5MjI3NzEzM2Q0MDE5ZDhlZDc3ODdiNmU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAtODAwLDEyICs4
MDAsMTUgQEAgc3RhdGljIGlkIHN0YXJ0T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2UoQVhPYmplY3RD
YWNoZSogY2FjaGUsIFJlZlB0cjxSYW5nZT4gcmFuZ2UKIHsKICAgICBpZiAoIWNhY2hlKQogICAg
ICAgICByZXR1cm4gbmlsOwotICAgIAorCisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKwogICAgIFRleHRNYXJrZXJEYXRhIHRleHRNYXJrZXJEYXRhOwotICAgIGNhY2hlLT5z
dGFydE9yRW5kVGV4dE1hcmtlckRhdGFGb3JSYW5nZSh0ZXh0TWFya2VyRGF0YSwgcmFuZ2UsIGlz
U3RhcnQpOworICAgIGNhY2hlLT5zdGFydE9yRW5kVGV4dE1hcmtlckRhdGFGb3JSYW5nZSh0ZXh0
TWFya2VyRGF0YSwgKnJhbmdlLCBpc1N0YXJ0KTsKICAgICBpZiAoIXRleHRNYXJrZXJEYXRhLmF4
SUQpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCisKICAgICByZXR1cm4gQ0ZCcmlkZ2luZ1Jl
bGVhc2UoQVhUZXh0TWFya2VyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCBVSW50
OCopJnRleHRNYXJrZXJEYXRhLCBzaXplb2YodGV4dE1hcmtlckRhdGEpKSk7CiB9CiAKQEAgLTg3
OCw3ICs4ODEsNyBAQCAtIChSZWZQdHI8UmFuZ2U+KXJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOihp
ZCl0ZXh0TWFya2VyUmFuZ2UKICAgICAKICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnRDaGFyYWN0
ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnN0YXJ0VGV4dE1h
cmtlcl07CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZENoYXJhY3Rlck9mZnNldCA9IFtzZWxmIGNo
YXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6ZW5kVGV4dE1hcmtlcl07Ci0gICAgcmV0dXJuIGNh
Y2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnRDaGFyYWN0ZXJPZmZz
ZXQsIGVuZENoYXJhY3Rlck9mZnNldCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShjYWNo
ZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0
LCBlbmRDaGFyYWN0ZXJPZmZzZXQpKTsKIH0KIAogc3RhdGljIENoYXJhY3Rlck9mZnNldCBjaGFy
YWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBDRlR5cGVSZWYg
dGV4dE1hcmtlcikKQEAgLTM2NTAsOCArMzY1Myw4IEBAIC0gKE5TSW50ZWdlcilfaW5kZXhGb3JU
ZXh0TWFya2VyOihpZCltYXJrZXIKICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBzZWxm
LmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpKSB7CiAgICAgICAgIENoYXJhY3Rlck9m
ZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2Vy
Om1hcmtlcl07CiAgICAgICAgIC8vIENyZWF0ZSBhIGNvbGxhcHNlZCByYW5nZSBmcm9tIHRoZSBD
aGFyYWN0ZXJPZmZzZXQgb2JqZWN0LgotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY2Fj
aGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhjaGFyYWN0ZXJPZmZzZXQsIGNo
YXJhY3Rlck9mZnNldCk7Ci0gICAgICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZTpy
YW5nZS5nZXQoKV0ubG9jYXRpb247CisgICAgICAgIGF1dG8gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VG
b3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVyT2Zm
c2V0KTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOmNyZWF0ZUxpdmVS
YW5nZShyYW5nZSkuZ2V0KCldLmxvY2F0aW9uOwogICAgIH0KICAgICByZXR1cm4gTlNOb3RGb3Vu
ZDsKIH0KQEAgLTM3NzEsNyArMzc3NCw3IEBAIC0gKGlkKXRleHRNYXJrZXJSYW5nZUF0VGV4dE1h
cmtlcjooaWQpdGV4dE1hcmtlciBmb3JVbml0OihUZXh0VW5pdCl0ZXh0VW5pdAogICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKIAogICAgICAgICBhdXRvIGNoYXJhY3Rlck9mZnNldCA9IGNoYXJhY3Rl
ck9mZnNldEZvclRleHRNYXJrZXIoY2FjaGUsIHRleHRNYXJrZXIpOwotICAgICAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlOworICAgICAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2U7CiAgICAg
ICAgIHN3aXRjaCAodGV4dFVuaXQpIHsKICAgICAgICAgY2FzZSBUZXh0VW5pdDo6TGVmdFdvcmQ6
CiAgICAgICAgICAgICByYW5nZSA9IGNhY2hlLT5sZWZ0V29yZFJhbmdlKGNoYXJhY3Rlck9mZnNl
dCk7CkBAIC0zNzkwLDcgKzM3OTMsNyBAQCAtIChpZCl0ZXh0TWFya2VyUmFuZ2VBdFRleHRNYXJr
ZXI6KGlkKXRleHRNYXJrZXIgZm9yVW5pdDooVGV4dFVuaXQpdGV4dFVuaXQKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21S
YW5nZShjYWNoZSwgcmFuZ2UpOworICAgICAgICByZXR1cm4gdGV4dE1hcmtlclJhbmdlRnJvbVJh
bmdlKGNhY2hlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpKTsKICAgICB9KTsKIH0KIApAQCAtNDE1
OCw4ICs0MTYxLDggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAg
ICAgICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBDR1JlY3RaZXJvOwogCi0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5kKTsK
LSAgICAgICAgICAgIGF1dG8gYm91bmRzID0gRmxvYXRSZWN0KGJhY2tpbmdPYmplY3QtPmJvdW5k
c0ZvclJhbmdlKHJhbmdlKSk7CisgICAgICAgICAgICBhdXRvIHJhbmdlID0gY2FjaGUtPnJhbmdl
Rm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIGF1
dG8gYm91bmRzID0gRmxvYXRSZWN0KGJhY2tpbmdPYmplY3QtPmJvdW5kc0ZvclJhbmdlKGNyZWF0
ZUxpdmVSYW5nZShyYW5nZSkpKTsKICAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiBj
b252ZXJ0UmVjdFRvU3BhY2U6Ym91bmRzIHNwYWNlOkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3Bh
Y2U6OlNjcmVlbl07CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVX
aXRoUmVjdDpyZWN0XTsKQEAgLTQxODUsOCArNDE4OCw4IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1Q
TEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5p
c051bGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICAgICAgICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJP
ZmZzZXRzKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPnN0
cmluZ0ZvclJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYWNoZS0+cmFu
Z2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKHN0YXJ0LCBlbmQpOworICAgICAgICAgICAg
cmV0dXJuIGJhY2tpbmdPYmplY3QtPnN0cmluZ0ZvclJhbmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5n
ZSkpOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTQyMzAsOCArNDIzMyw4IEBAIEFMTE9XX0RF
UFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgICAgICAgICBDaGFyYWN0ZXJPZmZz
ZXQgY2hhcmFjdGVyT2Zmc2V0MSA9IFtwcm90ZWN0ZWRTZWxmIGNoYXJhY3Rlck9mZnNldEZvclRl
eHRNYXJrZXI6dGV4dE1hcmtlcjFdOwogICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJh
Y3Rlck9mZnNldDIgPSBbcHJvdGVjdGVkU2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2Vy
OnRleHRNYXJrZXIyXTsKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjYWNoZS0+
cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldDEsIGNoYXJh
Y3Rlck9mZnNldDIpOwotICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJr
ZXJSYW5nZUZyb21SYW5nZTpyYW5nZV07CisgICAgICAgICAgICBhdXRvIHJhbmdlID0gY2FjaGUt
PnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhjaGFyYWN0ZXJPZmZzZXQxLCBjaGFy
YWN0ZXJPZmZzZXQyKTsKKyAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFy
a2VyUmFuZ2VGcm9tUmFuZ2U6Y3JlYXRlTGl2ZVJhbmdlKHJhbmdlKV07CiAgICAgICAgIH0pOwog
ICAgIH0KIApAQCAtNDMxNCw3ICs0MzE3LDkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRB
VElPTlNfRU5ECiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBbcHJvdGVjdGVkU2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0
ZXh0TWFya2VyUmFuZ2VdOwotICAgICAgICAgICAgcmV0dXJuIEFYT2JqZWN0Q2FjaGU6Omxlbmd0
aEZvclJhbmdlKHJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIGlmICghcmFuZ2UpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gQVhPYmplY3RDYWNoZTo6bGVu
Z3RoRm9yUmFuZ2UoU2ltcGxlUmFuZ2UgeyAqcmFuZ2UgfSk7CiAgICAgICAgIH0pOwogICAgICAg
ICBpZiAobGVuZ3RoIDwgMCkKICAgICAgICAgICAgIHJldHVybiBuaWw7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Jv
dW5kYXJ5UG9pbnQuaAppbmRleCA1ZjhlNDc2NDNhODNiODU3ZDhjODE1YTQ1NjE2MTkxNjViZTUz
NGJlLi5mZGJlMWVhYWI3MjRlZjBiYmNjMjNjZmJmNGY1M2NlYjdjN2ZkOGQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Cb3VuZGFyeVBvaW50LmgKQEAgLTQwLDYgKzQwLDggQEAgc3RydWN0IEJvdW5kYXJ5UG9p
bnQgewogCiBib29sIG9wZXJhdG9yPT0oY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IEJvdW5k
YXJ5UG9pbnQmKTsKIAorV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4gbWFr
ZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlKE5vZGUmKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFs
PEJvdW5kYXJ5UG9pbnQ+IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlKE5vZGUmKTsKIEJvdW5k
YXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoTm9kZSYpOwogQm91
bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggOTI0MGMzNDI0MTgxOGIyZDA0ZWU4NjMw
MjQyYWZmNTRkOTljY2YxZS4uNGE4ZDAwNGRlOTEyODlhMzRhZjBjMTUxYjM2OWMzNTNkZmFkYmNj
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC01NSw2ICs1NSwyNCBAQCBib29s
IG9wZXJhdG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJhbmdlJiBiKQog
ICAgIHJldHVybiBhLnN0YXJ0ID09IGIuc3RhcnQgJiYgYS5lbmQgPT0gYi5lbmQ7CiB9CiAKKy8v
IEZJWE1FOiBDcmVhdGUgQm91bmRhcnlQb2ludC5jcHAgYW5kIG1vdmUgdGhpcyB0aGVyZS4KK09w
dGlvbmFsPEJvdW5kYXJ5UG9pbnQ+IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZShOb2RlJiBu
b2RlKQoreworICAgIGF1dG8gcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFw
YXJlbnQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIEJvdW5kYXJ5
UG9pbnQgeyAqcGFyZW50LCBub2RlLmNvbXB1dGVOb2RlSW5kZXgoKSB9OworfQorCisvLyBGSVhN
RTogQ3JlYXRlIEJvdW5kYXJ5UG9pbnQuY3BwIGFuZCBtb3ZlIHRoaXMgdGhlcmUuCitPcHRpb25h
bDxCb3VuZGFyeVBvaW50PiBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZShOb2RlJiBub2RlKQor
eworICAgIGF1dG8gcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIEJvdW5kYXJ5UG9pbnQg
eyAqcGFyZW50LCBub2RlLmNvbXB1dGVOb2RlSW5kZXgoKSArIDEgfTsKK30KKwogT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoTm9kZSYgbm9kZSkKIHsKICAgICBh
dXRvIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403737</attachid>
            <date>2020-07-07 15:58:09 -0700</date>
            <delta_ts>2020-07-08 11:03:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214053-20200707155808.patch</filename>
            <type>text/plain</type>
            <size>53767</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWU0ZWZlYTg1ZTU4Yzdh
NDFkNmNmZDNkNDU4ODM4MTQxY2YxZDg5Ny4uNDMxMDMyOWY4OGUxZGZiZjRiZjdlNzRlMWU2ZThi
YWRhZTk1ZjUyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDIwLTA3LTA3ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdXNlIG9mIGxpdmUg
cmFuZ2VzIGZyb20gQVhPYmplY3QuaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE0MDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dHJhdmVyc2VUb09mZnNldEluUmFuZ2UpOiBUYWtl
IFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bGVuZ3RoRm9y
UmFuZ2UpOiBUYWtlIE9wdGlvbmFsPFNpbXBsZVJhbmdlPi4KKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKTogUmV0dXJuIFNpbXBsZVJhbmdlLCB0
YWtlIHJlZmVyZW5jZQorICAgICAgICByYXRoZXIgdGhhbiBwb2ludGVyLgorICAgICAgICAoV2Vi
Q29yZTo6Y2hhcmFjdGVyT2Zmc2V0c0luT3JkZXIpOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAg
IChXZWJDb3JlOjpyZXNldE5vZGVBbmRPZmZzZXRGb3JSZXBsYWNlZE5vZGUpOiBUYWtlIGEgcmVm
ZXJlbmNlIHRvIHRoZSBub2RlIHJhdGhlciB0aGFuCisgICAgICAgIGEgcG9pbnRlci4KKyAgICAg
ICAgKFdlYkNvcmU6OmJvdW5kYXJ5UG9pbnQpOiBBZGRlZC4gQ291bGQgYmUgdXNlZCB0byByZXBs
YWNlIGNhbGxzIHRvCisgICAgICAgIHNldFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZz
ZXQuCisgICAgICAgIChXZWJDb3JlOjpzZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zm
c2V0KTogVGFrZSBTaW1wbGVSYW5nZS4gQWxzbyB1c2UgdGhlCisgICAgICAgIG5ldyBib3VuZGFy
eVBvaW50IGZ1bmN0aW9uIGFib3ZlLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKTogUmV0dXJuIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPi4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0YXJ0T3JFbmRDaGFy
YWN0ZXJPZmZzZXRGb3JSYW5nZSk6IFRha2UgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpzdGFydE9yRW5kVGV4dE1hcmtlckRhdGFGb3JSYW5nZSk6IFRha2Ug
U2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJP
ZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KTogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JOZXh0Q2hhcmFjdGVyT2Zmc2V0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZv
clByZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjp2aXNpYmxlUG9zaXRpb25Gcm9tQ2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZyb21WaXNpYmxlUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bGVmdFdvcmRSYW5nZSk6IFJl
dHVybiBPcHRpb25hbDxTaW1wbGVSYW5nZT4uCisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpyaWdodFdvcmRSYW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6bmV4dEJvdW5kYXJ5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpwcmV2aW91c0JvdW5kYXJ5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjpzdGFydENoYXJhY3Rlck9mZnNldE9mUGFyYWdyYXBoKTogVXNlIFNpbXBsZVJhbmdl
LgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6ZW5kQ2hhcmFjdGVyT2Zmc2V0T2ZQ
YXJhZ3JhcGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBhcmFn
cmFwaEZvckNoYXJhY3Rlck9mZnNldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmpl
Y3RDYWNoZTo6c2VudGVuY2VGb3JDaGFyYWN0ZXJPZmZzZXQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmxvY2FsQ2FyZXRSZWN0Rm9yQ2hhcmFjdGVyT2Zmc2V0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRG
b3JQb2ludCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6Y2hhcmFj
dGVyT2Zmc2V0Rm9ySW5kZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2Fj
aGU6OmluZGV4Rm9yQ2hhcmFjdGVyT2Zmc2V0KTogRGl0dG8uCisKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuaDogUmVtb3ZlIHVzZXMgb2YgUmFuZ2UgYW5kIGluY2x1ZGUg
b2YgIlJhbmdlLmgiLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmVsZW1lbnRS
YW5nZSBjb25zdCk6IENhbGwgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VGb3JQbGFpblRleHRSYW5nZSBjb25zdCk6IERpdHRvLgor
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kc0ZvclJh
bmdlIGNvbnN0KTogUGFzcyBTaW1wbGVSYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoK1tXZWJB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBzdGFydE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOmlzU3Rh
cnQ6Y2FjaGU6XSk6IFBhc3MgU2ltcGxlUmFuZ2UuCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIHBvc2l0aW9uRm9yVGV4dE1hcmtlcjpdKTogQ2FsbCBjcmVhdGVMaXZl
UmFuZ2UuCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJr
ZXJSYW5nZUZvclNlbGVjdGlvbl0pOiBQYXNzIFNpbXBsZVJhbmdlLgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyRm9yUG9zaXRpb246XSk6IERpdHRv
LgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciByYW5nZUZvclRleHRN
YXJrZXJzOl0pOiBDYWxsIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgbGVuZ3RoRm9yVGV4dE1hcmtlcnM6XSk6IFBhc3MgU2ltcGxlUmFu
Z2UuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbToKKyAgICAgICAgKHN0YXJ0T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2UpOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciByYW5nZUZvclRleHRNYXJr
ZXJSYW5nZTpdKTogUGFzcyBTaW1wbGVSYW5nZS4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgX2luZGV4Rm9yVGV4dE1hcmtlcjpdKTogQ2FsbCBjcmVhdGVMaXZlUmFu
Z2UuCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJS
YW5nZUF0VGV4dE1hcmtlcjpmb3JVbml0Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmZvclBhcmFt
ZXRlcjpdKTogRGl0dG8uCisKKyAgICAgICAgKiBkb20vQm91bmRhcnlQb2ludC5oOiBBZGRlZCBt
YWtlQm91bmRhcnlQb2ludEJlZm9yZS9BZnRlck5vZGUuCisKKyAgICAgICAgKiBkb20vU2ltcGxl
UmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2Rl
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZSk6
IERpdHRvLgorCiAyMDIwLTA3LTA3ICBBbmRyZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxl
LmNvbT4KIAogICAgICAgICBXZWIgY29udGVudCBwcm9jZXNzIGhhbmdzIGluIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UgaW4gc29tZSBj
b3JuZXIgY2FzZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmNwcAppbmRleCBjYWIwMGI5MTFiN2Q4YTcwN2MzYWIxNjdlN2UzZGNhZWI1ZTg5ZjE0Li41
Nzc4ZTllZjhiOWNmMjY4ZGM2ZjUyNGQzZWJlMzU3YzdmNDdjOWY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTE4MTIsMTEgKzE4MTIs
OCBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yVGV4
dE1hcmtlckRhdGEoVGV4dE1hcmtlckRhdGEmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQ2hh
cmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKFJlZlB0
cjxSYW5nZT5yYW5nZSwgaW50IG9mZnNldCwgVHJhdmVyc2VPcHRpb24gb3B0aW9uLCBib29sIHN0
YXlXaXRoaW5SYW5nZSkKK0NoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjp0cmF2ZXJzZVRv
T2Zmc2V0SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGludCBvZmZzZXQsIFRyYXZl
cnNlT3B0aW9uIG9wdGlvbiwgYm9vbCBzdGF5V2l0aGluUmFuZ2UpCiB7Ci0gICAgaWYgKCFyYW5n
ZSkKLSAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwotICAgIAogICAgIGJvb2wgdG9O
b2RlRW5kID0gb3B0aW9uICYgVHJhdmVyc2VPcHRpb25Ub05vZGVFbmQ7CiAgICAgYm9vbCB2YWxp
ZGF0ZU9mZnNldCA9IG9wdGlvbiAmIFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQ7CiAgICAg
Ym9vbCBkb05vdEVudGVyVGV4dENvbnRyb2xzID0gb3B0aW9uICYgVHJhdmVyc2VPcHRpb25Eb05v
dEVudGVyVGV4dENvbnRyb2xzOwpAQCAtMTgyOSwxMiArMTgyNiwxMiBAQCBDaGFyYWN0ZXJPZmZz
ZXQgQVhPYmplY3RDYWNoZTo6dHJhdmVyc2VUb09mZnNldEluUmFuZ2UoUmVmUHRyPFJhbmdlPnJh
bmdlLCBpbnQgbwogICAgIGJvb2wgZmluaXNoZWQgPSBmYWxzZTsKICAgICBpbnQgbGFzdFN0YXJ0
T2Zmc2V0ID0gMDsKICAgICAKLSAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3IoKnJhbmdlLCBkb05v
dEVudGVyVGV4dENvbnRyb2xzID8gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yIDogVGV4dEl0
ZXJhdG9yRW50ZXJzVGV4dENvbnRyb2xzKTsKKyAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3IocmFu
Z2UsIGRvTm90RW50ZXJUZXh0Q29udHJvbHMgPyBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3Ig
OiBUZXh0SXRlcmF0b3JFbnRlcnNUZXh0Q29udHJvbHMpOwogICAgIAogICAgIC8vIFdoZW4gdGhl
IHJhbmdlIGhhcyB6ZXJvIGxlbmd0aCwgdGhlcmUgbWlnaHQgYmUgcmVwbGFjZWQgbm9kZSBvciBi
clRhZyB0aGF0IHdlIG5lZWQgdG8gaW5jcmVtZW50IHRoZSBjaGFyYWN0ZXJPZmZzZXQuCiAgICAg
aWYgKGl0ZXJhdG9yLmF0RW5kKCkpIHsKLSAgICAgICAgY3VycmVudE5vZGUgPSAmcmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCk7Ci0gICAgICAgIGxhc3RTdGFydE9mZnNldCA9IHJhbmdlLT5zdGFydE9m
ZnNldCgpOworICAgICAgICBjdXJyZW50Tm9kZSA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIo
KTsKKyAgICAgICAgbGFzdFN0YXJ0T2Zmc2V0ID0gcmFuZ2Uuc3RhcnQub2Zmc2V0OwogICAgICAg
ICBpZiAob2Zmc2V0ID4gMCB8fCB0b05vZGVFbmQpIHsKICAgICAgICAgICAgIGlmIChBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyZXBsYWNlZE5vZGVOZWVkc0NoYXJhY3RlcihjdXJyZW50Tm9kZSkgfHwg
KGN1cnJlbnROb2RlLT5yZW5kZXJlcigpICYmIGN1cnJlbnROb2RlLT5yZW5kZXJlcigpLT5pc0JS
KCkpKQogICAgICAgICAgICAgICAgIGN1bXVsYXRpdmVPZmZzZXQrKzsKQEAgLTE4NDQsNyArMTg0
MSw3IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjp0cmF2ZXJzZVRvT2Zmc2V0SW5S
YW5nZShSZWZQdHI8UmFuZ2U+cmFuZ2UsIGludCBvCiAgICAgICAgICAgICAvLyBIZXJlIHdoZW4g
d2UgZG9uJ3QgaGF2ZSBhbnkgY2hhcmFjdGVyIHRvIG1vdmUgYW5kIHdlIGFyZSBnb2luZyBiYWNr
d2FyZHMsIHdlIHRyYXZlcnNlIHRvIHRoZSBwcmV2aW91cyBub2RlLgogICAgICAgICAgICAgaWYg
KCFsYXN0TGVuZ3RoICYmIHRvTm9kZUVuZCAmJiAhc3RheVdpdGhpblJhbmdlKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKE5vZGUqIHByZU5vZGUgPSBwcmV2aW91c05vZGUoY3VycmVudE5vZGUpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VUb09mZnNldEluUmFuZ2UocmFuZ2VG
b3JOb2RlQ29udGVudHMocHJlTm9kZSksIG9mZnNldCwgb3B0aW9uKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRz
KCpwcmVOb2RlKSwgb2Zmc2V0LCBvcHRpb24pOwogICAgICAgICAgICAgICAgIHJldHVybiBDaGFy
YWN0ZXJPZmZzZXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTkyOSwxMyArMTky
NiwxMyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6dHJhdmVyc2VUb09mZnNldElu
UmFuZ2UoUmVmUHRyPFJhbmdlPnJhbmdlLCBpbnQgbwogICAgIAogICAgIC8vIFNvbWV0aW1lcyB3
aGVuIHdlIGFyZSBnZXR0aW5nIHRoZSBlbmQgQ2hhcmFjdGVyT2Zmc2V0IG9mIGEgbGluZSByYW5n
ZSwgdGhlIFRleHRJdGVyYXRvciB3aWxsIGVtaXQgYW4gZXh0cmEgc3BhY2UgYXQgdGhlIGVuZAog
ICAgIC8vIGFuZCBtYWtlIHRoZSBjaGFyYWN0ZXIgY291bnQgZ3JlYXRlciB0aGFuIHRoZSBSYW5n
ZSdzIGVuZCBvZmZzZXQuCi0gICAgaWYgKHRvTm9kZUVuZCAmJiBjdXJyZW50Tm9kZS0+aXNUZXh0
Tm9kZSgpICYmIGN1cnJlbnROb2RlID09ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCkgJiYgc3RhdGlj
X2Nhc3Q8aW50PihyYW5nZS0+ZW5kT2Zmc2V0KCkpIDwgbGFzdFN0YXJ0T2Zmc2V0ICsgb2Zmc2V0
SW5DaGFyYWN0ZXIpCi0gICAgICAgIG9mZnNldEluQ2hhcmFjdGVyID0gcmFuZ2UtPmVuZE9mZnNl
dCgpIC0gbGFzdFN0YXJ0T2Zmc2V0OworICAgIGlmICh0b05vZGVFbmQgJiYgY3VycmVudE5vZGUt
PmlzVGV4dE5vZGUoKSAmJiBjdXJyZW50Tm9kZSA9PSByYW5nZS5lbmQuY29udGFpbmVyLnB0cigp
ICYmIHN0YXRpY19jYXN0PGludD4ocmFuZ2UuZW5kLm9mZnNldCkgPCBsYXN0U3RhcnRPZmZzZXQg
KyBvZmZzZXRJbkNoYXJhY3RlcikKKyAgICAgICAgb2Zmc2V0SW5DaGFyYWN0ZXIgPSByYW5nZS5l
bmQub2Zmc2V0IC0gbGFzdFN0YXJ0T2Zmc2V0OwogICAgIAogICAgIHJldHVybiBDaGFyYWN0ZXJP
ZmZzZXQoY3VycmVudE5vZGUsIGxhc3RTdGFydE9mZnNldCwgb2Zmc2V0SW5DaGFyYWN0ZXIsIHJl
bWFpbmluZyk7CiB9CiAKLWludCBBWE9iamVjdENhY2hlOjpsZW5ndGhGb3JSYW5nZShSYW5nZSog
cmFuZ2UpCitpbnQgQVhPYmplY3RDYWNoZTo6bGVuZ3RoRm9yUmFuZ2UoY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4g
LTE7CkBAIC0xOTUzLDIzICsxOTUwLDE0IEBAIGludCBBWE9iamVjdENhY2hlOjpsZW5ndGhGb3JS
YW5nZShSYW5nZSogcmFuZ2UpCiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAotUmVmUHRyPFJhbmdl
PiBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250ZW50cyhOb2RlKiBub2RlKQorU2ltcGxl
UmFuZ2UgQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoTm9kZSYgbm9kZSkKIHsK
LSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIERvY3VtZW50KiBk
b2N1bWVudCA9ICZub2RlLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVu
dCk7Ci0gICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJlcGxhY2VkTm9kZU5lZWRzQ2hhcmFj
dGVyKG5vZGUpKSB7CisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJlcGxhY2VkTm9kZU5l
ZWRzQ2hhcmFjdGVyKCZub2RlKSkgewogICAgICAgICAvLyBGb3IgcmVwbGFjZWQgbm9kZXMgd2l0
aG91dCBjaGlsZHJlbiwgdGhlIG5vZGUgaXRzZWxmIGlzIGluY2x1ZGVkIGluIHRoZSByYW5nZS4K
LSAgICAgICAgaWYgKHJhbmdlLT5zZWxlY3ROb2RlKCpub2RlKS5oYXNFeGNlcHRpb24oKSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyYW5n
ZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCpub2RlKS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1ha2VSYW5nZVNlbGVj
dGluZ05vZGUobm9kZSkpCisgICAgICAgICAgICByZXR1cm4gKnJhbmdlOwogICAgIH0KLSAgICBy
ZXR1cm4gcmFuZ2U7CisgICAgcmV0dXJuIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhu
b2RlKTsKIH0KICAgICAKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBWE9iamVjdENhY2hlOjpyYW5n
ZU1hdGNoZXNUZXh0TmVhclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBvcmlnaW5hbFJhbmdlLCBj
b25zdCBTdHJpbmcmIG1hdGNoVGV4dCkKQEAgLTIwMTQsNzcgKzIwMDIsNjcgQEAgc3RhdGljIGJv
b2wgY2hhcmFjdGVyT2Zmc2V0c0luT3JkZXIoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0
ZXJPZmZzZXQxLCBjb24KICAgICBpZiAoIW5vZGUxIHx8ICFub2RlMikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UxID0gQVhPYmplY3RDYWNoZTo6
cmFuZ2VGb3JOb2RlQ29udGVudHMobm9kZTEpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UyID0g
QVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMobm9kZTIpOwotCi0gICAgaWYgKCFy
YW5nZTIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghcmFuZ2UxKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgYXV0byByZXN1bHQgPSByYW5nZTEtPmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpyYW5nZTIpOworICAgIGF1dG8gcmFuZ2UxID0g
QVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoKm5vZGUxKTsKKyAgICBhdXRvIHJh
bmdlMiA9IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKCpub2RlMik7CisgICAg
YXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UxKS0+Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlMikpOwogICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMDsKIH0KIAotc3RhdGljIE5vZGUq
IHJlc2V0Tm9kZUFuZE9mZnNldEZvclJlcGxhY2VkTm9kZShOb2RlKiByZXBsYWNlZE5vZGUsIGlu
dCYgb2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpCitzdGF0aWMgTm9kZSogcmVzZXROb2RlQW5k
T2Zmc2V0Rm9yUmVwbGFjZWROb2RlKE5vZGUmIHJlcGxhY2VkTm9kZSwgaW50JiBvZmZzZXQsIGlu
dCBjaGFyYWN0ZXJDb3VudCkKIHsKICAgICAvLyBVc2UgdGhpcyBmdW5jdGlvbiB0byBpbmNsdWRl
IHRoZSByZXBsYWNlZCBub2RlIGl0c2VsZiBpbiB0aGUgcmFuZ2Ugd2UgYXJlIGNyZWF0aW5nLgog
ICAgIGF1dG8gbm9kZVJhbmdlID0gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMo
cmVwbGFjZWROb2RlKTsKLSAgICBpZiAoIW5vZGVSYW5nZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgYm9vbCBpc0luTm9kZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGFyYWN0ZXJD
b3VudCkgPD0gV2ViQ29yZTo6Y2hhcmFjdGVyQ291bnQoKm5vZGVSYW5nZSk7Ci0gICAgb2Zmc2V0
ID0gcmVwbGFjZWROb2RlLT5jb21wdXRlTm9kZUluZGV4KCkgKyAoaXNJbk5vZGUgPyAwIDogMSk7
Ci0gICAgcmV0dXJuIHJlcGxhY2VkTm9kZS0+cGFyZW50Tm9kZSgpOworICAgIGJvb2wgaXNJbk5v
ZGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hhcmFjdGVyQ291bnQpIDw9IFdlYkNvcmU6OmNo
YXJhY3RlckNvdW50KG5vZGVSYW5nZSk7CisgICAgb2Zmc2V0ID0gcmVwbGFjZWROb2RlLmNvbXB1
dGVOb2RlSW5kZXgoKSArIChpc0luTm9kZSA/IDAgOiAxKTsKKyAgICByZXR1cm4gcmVwbGFjZWRO
b2RlLnBhcmVudE5vZGUoKTsKIH0KIAotc3RhdGljIGJvb2wgc2V0UmFuZ2VTdGFydE9yRW5kV2l0
aENoYXJhY3Rlck9mZnNldChSYW5nZSYgcmFuZ2UsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hh
cmFjdGVyT2Zmc2V0LCBib29sIGlzU3RhcnQpCitzdGF0aWMgT3B0aW9uYWw8Qm91bmRhcnlQb2lu
dD4gYm91bmRhcnlQb2ludChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCwg
Ym9vbCBpc1N0YXJ0KQogewogICAgIGlmIChjaGFyYWN0ZXJPZmZzZXQuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwog
ICAgIGludCBvZmZzZXQgPSBjaGFyYWN0ZXJPZmZzZXQuc3RhcnRJbmRleCArIGNoYXJhY3Rlck9m
ZnNldC5vZmZzZXQ7CiAgICAgTm9kZSogbm9kZSA9IGNoYXJhY3Rlck9mZnNldC5ub2RlOwogICAg
IEFTU0VSVChub2RlKTsKLSAgICAKKwogICAgIGJvb2wgcmVwbGFjZWROb2RlT3JCUiA9IGlzUmVw
bGFjZWROb2RlT3JCUihub2RlKTsKICAgICAvLyBGb3IgdGhlIG5vbiB0ZXh0IG5vZGUgdGhhdCBo
YXMgbm8gY2hpbGRyZW4sIHdlIHNob3VsZCBjcmVhdGUgdGhlIHJhbmdlIHdpdGggaXRzIHBhcmVu
dCwgb3RoZXJ3aXNlIHRoZSByYW5nZSB3b3VsZCBiZSBjb2xsYXBzZWQuCiAgICAgLy8gRXhhbXBs
ZTogPGRpdiBjb250ZW50ZWRpdGFibGU9InRydWUiPjwvZGl2Piwgd2Ugd2FudCB0aGUgcmFuZ2Ug
dG8gaW5jbHVkZSB0aGUgZGl2IGVsZW1lbnQuCiAgICAgYm9vbCBub0NoaWxkcmVuID0gIXJlcGxh
Y2VkTm9kZU9yQlIgJiYgIW5vZGUtPmlzVGV4dE5vZGUoKSAmJiAhbm9kZS0+aGFzQ2hpbGROb2Rl
cygpOwogICAgIGludCBjaGFyYWN0ZXJDb3VudCA9IG5vQ2hpbGRyZW4gPyAoaXNTdGFydCA/IDAg
OiAxKSA6IGNoYXJhY3Rlck9mZnNldC5vZmZzZXQ7Ci0gICAgCisKICAgICBpZiAocmVwbGFjZWRO
b2RlT3JCUiB8fCBub0NoaWxkcmVuKQotICAgICAgICBub2RlID0gcmVzZXROb2RlQW5kT2Zmc2V0
Rm9yUmVwbGFjZWROb2RlKG5vZGUsIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwotICAgIAorICAg
ICAgICBub2RlID0gcmVzZXROb2RlQW5kT2Zmc2V0Rm9yUmVwbGFjZWROb2RlKCpub2RlLCBvZmZz
ZXQsIGNoYXJhY3RlckNvdW50KTsKKwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKGlzU3RhcnQpIHsK
LSAgICAgICAgaWYgKHJhbmdlLnNldFN0YXJ0KCpub2RlLCBvZmZzZXQpLmhhc0V4Y2VwdGlvbigp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChy
YW5nZS5zZXRFbmQoKm5vZGUsIG9mZnNldCkuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiB7IHsgKm5vZGUsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihvZmZzZXQpIH0gfTsKK30KIAorc3RhdGljIGJvb2wgc2V0UmFuZ2VTdGFydE9yRW5k
V2l0aENoYXJhY3Rlck9mZnNldChTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IENoYXJhY3Rlck9m
ZnNldCYgY2hhcmFjdGVyT2Zmc2V0LCBib29sIGlzU3RhcnQpCit7CisgICAgYXV0byBwb2ludCA9
IGJvdW5kYXJ5UG9pbnQoY2hhcmFjdGVyT2Zmc2V0LCBpc1N0YXJ0KTsKKyAgICBpZiAoIXBvaW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzU3RhcnQpCisgICAgICAgIHJhbmdl
LnN0YXJ0ID0gKnBvaW50OworICAgIGVsc2UKKyAgICAgICAgcmFuZ2UuZW5kID0gKnBvaW50Owog
ICAgIHJldHVybiB0cnVlOwogfQogCi1SZWZQdHI8UmFuZ2U+IEFYT2JqZWN0Q2FjaGU6OnJhbmdl
Rm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJh
Y3Rlck9mZnNldDEsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0MikKK09w
dGlvbmFsPFNpbXBsZVJhbmdlPiBBWE9iamVjdENhY2hlOjpyYW5nZUZvclVub3JkZXJlZENoYXJh
Y3Rlck9mZnNldHMoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQxLCBjb25z
dCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldDIpCiB7Ci0gICAgaWYgKGNoYXJhY3Rl
ck9mZnNldDEuaXNOdWxsKCkgfHwgY2hhcmFjdGVyT2Zmc2V0Mi5pc051bGwoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgCiAgICAgYm9vbCBhbHJlYWR5SW5PcmRlciA9IGNoYXJhY3Rl
ck9mZnNldHNJbk9yZGVyKGNoYXJhY3Rlck9mZnNldDEsIGNoYXJhY3Rlck9mZnNldDIpOwotICAg
IENoYXJhY3Rlck9mZnNldCBzdGFydENoYXJhY3Rlck9mZnNldCA9IGFscmVhZHlJbk9yZGVyID8g
Y2hhcmFjdGVyT2Zmc2V0MSA6IGNoYXJhY3Rlck9mZnNldDI7Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0
IGVuZENoYXJhY3Rlck9mZnNldCA9IGFscmVhZHlJbk9yZGVyID8gY2hhcmFjdGVyT2Zmc2V0MiA6
IGNoYXJhY3Rlck9mZnNldDE7Ci0gICAgCi0gICAgYXV0byByZXN1bHQgPSBSYW5nZTo6Y3JlYXRl
KG1fZG9jdW1lbnQpOwotICAgIGlmICghc2V0UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rlck9m
ZnNldChyZXN1bHQsIHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0LCB0cnVlKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgaWYgKCFzZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zmc2V0
KHJlc3VsdCwgZW5kQ2hhcmFjdGVyT2Zmc2V0LCBmYWxzZSkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byBzdGFydCA9IGJvdW5kYXJ5UG9pbnQo
YWxyZWFkeUluT3JkZXIgPyBjaGFyYWN0ZXJPZmZzZXQxIDogY2hhcmFjdGVyT2Zmc2V0MiwgdHJ1
ZSk7CisgICAgYXV0byBlbmQgPSBib3VuZGFyeVBvaW50KGFscmVhZHlJbk9yZGVyID8gY2hhcmFj
dGVyT2Zmc2V0MiA6IGNoYXJhY3Rlck9mZnNldDEsIGZhbHNlKTsKKyAgICBpZiAoIXN0YXJ0IHx8
ICFlbmQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyAqc3Rh
cnQsICogZW5kIH0gfTsKIH0KIAogdm9pZCBBWE9iamVjdENhY2hlOjpzZXRUZXh0TWFya2VyRGF0
YVdpdGhDaGFyYWN0ZXJPZmZzZXQoVGV4dE1hcmtlckRhdGEmIHRleHRNYXJrZXJEYXRhLCBjb25z
dCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKQEAgLTIxMjAsNDEgKzIwOTgsMzgg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjpzZXRUZXh0TWFya2VyRGF0YVdpdGhDaGFyYWN0ZXJPZmZz
ZXQoVGV4dE1hcmtlckRhdGEmIHRleHRNYXIKICAgICB0aGlzLT5zZXROb2RlSW5Vc2UoZG9tTm9k
ZSk7CiB9CiAKLUNoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpzdGFydE9yRW5kQ2hhcmFj
dGVyT2Zmc2V0Rm9yUmFuZ2UoUmVmUHRyPFJhbmdlPiByYW5nZSwgYm9vbCBpc1N0YXJ0LCBib29s
IGVudGVyVGV4dENvbnRyb2xzKQorQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnN0YXJ0
T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGJv
b2wgaXNTdGFydCwgYm9vbCBlbnRlclRleHRDb250cm9scykKIHsKLSAgICBpZiAoIXJhbmdlKQot
ICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7Ci0gICAgCiAgICAgLy8gV2hlbiBnZXR0
aW5nIHRoZSBlbmQgQ2hhcmFjdGVyT2Zmc2V0IGF0IG5vZGUgYm91bmRhcnksIHdlIGRvbid0IHdh
bnQgdG8gY29sbGFwc2UgdG8gdGhlIHByZXZpb3VzIG5vZGUuCi0gICAgaWYgKCFpc1N0YXJ0ICYm
ICFyYW5nZS0+ZW5kT2Zmc2V0KCkpCi0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRGb3JO
b2RlQW5kT2Zmc2V0KHJhbmdlLT5lbmRDb250YWluZXIoKSwgMCwgVHJhdmVyc2VPcHRpb25JbmNs
dWRlU3RhcnQpOworICAgIGlmICghaXNTdGFydCAmJiAhcmFuZ2UuZW5kLm9mZnNldCkKKyAgICAg
ICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQocmFuZ2UuZW5kLmNvbnRh
aW5lciwgMCwgVHJhdmVyc2VPcHRpb25JbmNsdWRlU3RhcnQpOwogICAgIAogICAgIC8vIElmIGl0
J3MgZW5kIHRleHQgbWFya2VyLCB3ZSB3YW50IHRvIGdvIHRvIHRoZSBlbmQgb2YgdGhlIHJhbmdl
LCBhbmQgc3RheSB3aXRoaW4gdGhlIHJhbmdlLgogICAgIGJvb2wgc3RheVdpdGhpblJhbmdlID0g
IWlzU3RhcnQ7CiAgICAgCi0gICAgTm9kZSYgZW5kTm9kZSA9IHJhbmdlLT5lbmRDb250YWluZXIo
KTsKKyAgICBOb2RlJiBlbmROb2RlID0gcmFuZ2UuZW5kLmNvbnRhaW5lcjsKICAgICBpZiAoZW5k
Tm9kZS5pc0NoYXJhY3RlckRhdGFOb2RlKCkgJiYgIWlzU3RhcnQpCi0gICAgICAgIHJldHVybiB0
cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cygmZW5kTm9kZSksIHJh
bmdlLT5lbmRPZmZzZXQoKSwgVHJhdmVyc2VPcHRpb25WYWxpZGF0ZU9mZnNldCk7CisgICAgICAg
IHJldHVybiB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cyhlbmRO
b2RlKSwgcmFuZ2UuZW5kLm9mZnNldCwgVHJhdmVyc2VPcHRpb25WYWxpZGF0ZU9mZnNldCk7CiAg
ICAgCi0gICAgUmVmPFJhbmdlPiBjb3B5UmFuZ2UgPSAqcmFuZ2U7CisgICAgYXV0byBjb3B5UmFu
Z2UgPSByYW5nZTsKICAgICAvLyBDaGFuZ2UgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSwgc28gdGhl
IGNoYXJhY3RlciBvZmZzZXQgc3RhcnRzIGZyb20gbm9kZSBiZWdpbm5pbmcuCiAgICAgaW50IG9m
ZnNldCA9IDA7Ci0gICAgTm9kZSYgbm9kZSA9IGNvcHlSYW5nZS0+c3RhcnRDb250YWluZXIoKTsK
KyAgICBhdXRvJiBub2RlID0gY29weVJhbmdlLnN0YXJ0LmNvbnRhaW5lci5nZXQoKTsKICAgICBp
ZiAobm9kZS5pc0NoYXJhY3RlckRhdGFOb2RlKCkpIHsKLSAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0
IG5vZGVTdGFydE9mZnNldCA9IHRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKHJhbmdlRm9yTm9kZUNv
bnRlbnRzKCZub2RlKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIFRyYXZlcnNlT3B0aW9uVmFsaWRh
dGVPZmZzZXQpOworICAgICAgICBhdXRvIG5vZGVTdGFydE9mZnNldCA9IHRyYXZlcnNlVG9PZmZz
ZXRJblJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKG5vZGUpLCByYW5nZS5zdGFydC5vZmZzZXQs
IFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQpOwogICAgICAgICBpZiAoaXNTdGFydCkKICAg
ICAgICAgICAgIHJldHVybiBub2RlU3RhcnRPZmZzZXQ7Ci0gICAgICAgIGNvcHlSYW5nZSA9IFJh
bmdlOjpjcmVhdGUocmFuZ2UtPm93bmVyRG9jdW1lbnQoKSwgJnJhbmdlLT5zdGFydENvbnRhaW5l
cigpLCAwLCAmcmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCkpOworICAg
ICAgICBjb3B5UmFuZ2Uuc3RhcnQub2Zmc2V0ID0gMDsKICAgICAgICAgb2Zmc2V0ICs9IG5vZGVT
dGFydE9mZnNldC5vZmZzZXQ7CiAgICAgfQotICAgIAotICAgIFRyYXZlcnNlT3B0aW9uIG9wdGlv
bnMgPSBpc1N0YXJ0ID8gVHJhdmVyc2VPcHRpb25EZWZhdWx0IDogVHJhdmVyc2VPcHRpb25Ub05v
ZGVFbmQ7CisKKyAgICBhdXRvIG9wdGlvbnMgPSBpc1N0YXJ0ID8gVHJhdmVyc2VPcHRpb25EZWZh
dWx0IDogVHJhdmVyc2VPcHRpb25Ub05vZGVFbmQ7CiAgICAgaWYgKCFlbnRlclRleHRDb250cm9s
cykKICAgICAgICAgb3B0aW9ucyA9IHN0YXRpY19jYXN0PFRyYXZlcnNlT3B0aW9uPihvcHRpb25z
IHwgVHJhdmVyc2VPcHRpb25Eb05vdEVudGVyVGV4dENvbnRyb2xzKTsKLSAgICByZXR1cm4gdHJh
dmVyc2VUb09mZnNldEluUmFuZ2UoV1RGTW92ZShjb3B5UmFuZ2UpLCBvZmZzZXQsIG9wdGlvbnMs
IHN0YXlXaXRoaW5SYW5nZSk7CisgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKGNv
cHlSYW5nZSwgb2Zmc2V0LCBvcHRpb25zLCBzdGF5V2l0aGluUmFuZ2UpOwogfQogCi12b2lkIEFY
T2JqZWN0Q2FjaGU6OnN0YXJ0T3JFbmRUZXh0TWFya2VyRGF0YUZvclJhbmdlKFRleHRNYXJrZXJE
YXRhJiB0ZXh0TWFya2VyRGF0YSwgUmVmUHRyPFJhbmdlPiByYW5nZSwgYm9vbCBpc1N0YXJ0KQor
dm9pZCBBWE9iamVjdENhY2hlOjpzdGFydE9yRW5kVGV4dE1hcmtlckRhdGFGb3JSYW5nZShUZXh0
TWFya2VyRGF0YSYgdGV4dE1hcmtlckRhdGEsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9v
bCBpc1N0YXJ0KQogewogICAgIC8vIFRoaXMgbWVtb3J5IG11c3QgYmUgemVybydkIHNvIGluc3Rh
bmNlcyBvZiBUZXh0TWFya2VyRGF0YSBjYW4gYmUgdGVzdGVkIGZvciBieXRlLWVxdWl2YWxlbmNl
LgogICAgIC8vIFdhcm5pbmc6IFRoaXMgaXMgcmlza3kgYW5kIGJhZCBiZWNhdXNlIFRleHRNYXJr
ZXJEYXRhIGlzIGEgbm9udHJpdmlhbCB0eXBlLgpAQCAtMjE5Nyw3ICsyMTcyLDcgQEAgQ2hhcmFj
dGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQo
Tm9kZSYgbm9kZSwgaW50IG8KICAgICAgICAgcmV0dXJuIGNoYXJPZmZzZXQ7CiAgICAgfQogICAg
IAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSByYW5nZUZvck5vZGVDb250ZW50cyhkb21Ob2Rl
KTsKKyAgICBhdXRvIHJhbmdlID0gcmFuZ2VGb3JOb2RlQ29udGVudHMoKmRvbU5vZGUpOwogCiAg
ICAgLy8gVHJhdmVyc2UgdGhlIG9mZnNldCBhbW91bnQgb2YgY2hhcmFjdGVycyBmb3J3YXJkIGFu
ZCBzZWUgaWYgdGhlcmUncyByZW1haW5pbmcgb2Zmc2V0cy4KICAgICAvLyBLZWVwIHRyYXZlcnNp
bmcgdG8gdGhlIG5leHQgbm9kZSB3aGVuIHRoZXJlJ3MgcmVtYWluaW5nIG9mZnNldHMuCkBAIC0y
MjA2LDcgKzIxODEsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVy
T2Zmc2V0Rm9yTm9kZUFuZE9mZnNldChOb2RlJiBub2RlLCBpbnQgbwogICAgICAgICBkb21Ob2Rl
ID0gbmV4dE5vZGUoZG9tTm9kZSk7CiAgICAgICAgIGlmICghZG9tTm9kZSkKICAgICAgICAgICAg
IHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKLSAgICAgICAgcmFuZ2UgPSByYW5nZUZvck5vZGVD
b250ZW50cyhkb21Ob2RlKTsKKyAgICAgICAgcmFuZ2UgPSByYW5nZUZvck5vZGVDb250ZW50cygq
ZG9tTm9kZSk7CiAgICAgICAgIGNoYXJhY3Rlck9mZnNldCA9IHRyYXZlcnNlVG9PZmZzZXRJblJh
bmdlKHJhbmdlLCBjaGFyYWN0ZXJPZmZzZXQucmVtYWluaW5nKCksIG9wdGlvbik7CiAgICAgfQog
ICAgIApAQCAtMjI1Myw4ICsyMjI4LDggQEAgdm9pZCBBWE9iamVjdENhY2hlOjp0ZXh0TWFya2Vy
RGF0YUZvck5leHRDaGFyYWN0ZXJPZmZzZXQoVGV4dE1hcmtlckRhdGEmIHRleHRNYXIKICAgICAg
ICAgICAgIG5leHQgPSBuZXh0Q2hhcmFjdGVyT2Zmc2V0KG5leHQsIGZhbHNlKTsKICAgICAgICAg
dGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZzZXQodGV4dE1hcmtlckRhdGEsIG5leHQpOwog
ICAgICAgICAKLSAgICAgICAgLy8gV2Ugc2hvdWxkIHNraXAgbmV4dCBDaGFyYWN0ZXRPZmZzZXQg
aWYgaXQncyB2aXN1YWxseSB0aGUgc2FtZS4KLSAgICAgICAgaWYgKCFsZW5ndGhGb3JSYW5nZShy
YW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMocHJldmlvdXMsIG5leHQpLmdldCgpKSkK
KyAgICAgICAgLy8gV2Ugc2hvdWxkIHNraXAgbmV4dCBDaGFyYWN0ZXJPZmZzZXQgaWYgaXQncyB2
aXN1YWxseSB0aGUgc2FtZS4KKyAgICAgICAgaWYgKCFsZW5ndGhGb3JSYW5nZShyYW5nZUZvclVu
b3JkZXJlZENoYXJhY3Rlck9mZnNldHMocHJldmlvdXMsIG5leHQpKSkKICAgICAgICAgICAgIHNo
b3VsZENvbnRpbnVlID0gdHJ1ZTsKICAgICAgICAgcHJldmlvdXMgPSBuZXh0OwogICAgIH0gd2hp
bGUgKHRleHRNYXJrZXJEYXRhLmlnbm9yZWQgfHwgc2hvdWxkQ29udGludWUpOwpAQCAtMjI3MCw4
ICsyMjQ1LDggQEAgdm9pZCBBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclByZXZpb3Vz
Q2hhcmFjdGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRhJiB0ZXgKICAgICAgICAgcHJldmlvdXMgPSBw
cmV2aW91c0NoYXJhY3Rlck9mZnNldChwcmV2aW91cywgZmFsc2UpOwogICAgICAgICB0ZXh0TWFy
a2VyRGF0YUZvckNoYXJhY3Rlck9mZnNldCh0ZXh0TWFya2VyRGF0YSwgcHJldmlvdXMpOwogICAg
ICAgICAKLSAgICAgICAgLy8gV2Ugc2hvdWxkIHNraXAgcHJldmlvdXMgQ2hhcmFjdGV0T2Zmc2V0
IGlmIGl0J3MgdmlzdWFsbHkgdGhlIHNhbWUuCi0gICAgICAgIGlmICghbGVuZ3RoRm9yUmFuZ2Uo
cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKHByZXZpb3VzLCBuZXh0KS5nZXQoKSkp
CisgICAgICAgIC8vIFdlIHNob3VsZCBza2lwIHByZXZpb3VzIENoYXJhY3Rlck9mZnNldCBpZiBp
dCdzIHZpc3VhbGx5IHRoZSBzYW1lLgorICAgICAgICBpZiAoIWxlbmd0aEZvclJhbmdlKHJhbmdl
Rm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhwcmV2aW91cywgbmV4dCkpKQogICAgICAgICAg
ICAgc2hvdWxkQ29udGludWUgPSB0cnVlOwogICAgICAgICBuZXh0ID0gcHJldmlvdXM7CiAgICAg
fSB3aGlsZSAodGV4dE1hcmtlckRhdGEuaWdub3JlZCB8fCBzaG91bGRDb250aW51ZSk7CkBAIC0y
MzA1LDcgKzIyODAsOSBAQCBWaXNpYmxlUG9zaXRpb24gQVhPYmplY3RDYWNoZTo6dmlzaWJsZVBv
c2l0aW9uRnJvbUNoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZQogICAgIC8vIENyZWF0ZSBh
IGNvbGxhcHNlZCByYW5nZSBhbmQgdXNlIHRoYXQgdG8gZm9ybSBhIFZpc2libGVQb3NpdGlvbiwg
c28gdGhhdCB0aGUgY2FzZSB3aXRoCiAgICAgLy8gY29tcG9zZWQgY2hhcmFjdGVycyB3aWxsIGJl
IGNvdmVyZWQuCiAgICAgYXV0byByYW5nZSA9IHJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zm
c2V0cyhjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7Ci0gICAgcmV0dXJuIHJhbmdl
ID8gVmlzaWJsZVBvc2l0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpIDogVmlzaWJsZVBvc2l0
aW9uKCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4g
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5zdGFydCk7CiB9CiAKIENoYXJhY3Rl
ck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGcm9tVmlzaWJsZVBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykKQEAgLTIzMTgsNyArMjI5NSw3IEBA
IENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGcm9tVmlzaWJs
ZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQCiAgICAgQVNTRVJUKGRvbU5vZGUpOwogICAgIAogICAg
IGlmIChkb21Ob2RlLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCi0gICAgICAgIHJldHVybiB0cmF2
ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cyhkb21Ob2RlKSwgZGVlcFBv
cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBUcmF2ZXJzZU9wdGlvblZhbGlkYXRlT2Zmc2V0
KTsKKyAgICAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKHJhbmdlRm9yTm9kZUNv
bnRlbnRzKCpkb21Ob2RlKSwgZGVlcFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBUcmF2
ZXJzZU9wdGlvblZhbGlkYXRlT2Zmc2V0KTsKICAgICAKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0
eU9iamVjdD4gb2JqID0gdGhpcy0+Z2V0T3JDcmVhdGUoZG9tTm9kZSk7CiAgICAgaWYgKCFvYmop
CkBAIC0yMzU1LDcgKzIzMzIsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hh
cmFjdGVyT2Zmc2V0RnJvbVZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUAogICAgIH0KICAg
ICAKICAgICAvLyBTb21ldGltZXMgd2hlbiB0aGUgbm9kZSBpcyBhIHJlcGxhY2VkIG5vZGUgYW5k
IGlzIGlnbm9yZWQgaW4gYWNjZXNzaWJpbGl0eSwgd2UgZ2V0IGEgd3JvbmcgQ2hhcmFjdGVyT2Zm
c2V0IGZyb20gaXQuCi0gICAgQ2hhcmFjdGVyT2Zmc2V0IHJlc3VsdCA9IHRyYXZlcnNlVG9PZmZz
ZXRJblJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKG9iai0+bm9kZSgpKSwgY2hhcmFjdGVyT2Zm
c2V0KTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgcmVzdWx0ID0gdHJhdmVyc2VUb09mZnNldEluUmFu
Z2UocmFuZ2VGb3JOb2RlQ29udGVudHMoKm9iai0+bm9kZSgpKSwgY2hhcmFjdGVyT2Zmc2V0KTsK
ICAgICBpZiAocmVzdWx0LnJlbWFpbmluZ09mZnNldCA+IDAgJiYgIXJlc3VsdC5pc051bGwoKSAm
JiBpc1JlbmRlcmVyUmVwbGFjZWRFbGVtZW50KHJlc3VsdC5ub2RlLT5yZW5kZXJlcigpKSkKICAg
ICAgICAgcmVzdWx0Lm9mZnNldCArPSByZXN1bHQucmVtYWluaW5nT2Zmc2V0OwogICAgIHJldHVy
biByZXN1bHQ7CkBAIC0yNTQ4LDE0ICsyNTI1LDE0IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVj
dENhY2hlOjpuZXh0V29yZEVuZENoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQm
CiAgICAgcmV0dXJuIGVuZENoYXJhY3Rlck9mZnNldE9mV29yZChuZXh0T2Zmc2V0LCBMZWZ0V29y
ZElmT25Cb3VuZGFyeSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gQVhPYmplY3RDYWNoZTo6bGVmdFdv
cmRSYW5nZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBBWE9iamVjdENhY2hlOjpsZWZ0V29yZFJhbmdlKGNvbnN0IENoYXJhY3Rl
ck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQogewogICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9
IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZXb3JkKGNoYXJhY3Rlck9mZnNldCwgTGVmdFdvcmRJZk9u
Qm91bmRhcnkpOwogICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBlbmRDaGFyYWN0ZXJPZmZzZXRP
ZldvcmQoc3RhcnQpOwogICAgIHJldHVybiByYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNl
dHMoc3RhcnQsIGVuZCk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmlnaHRX
b3JkUmFuZ2UoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCitPcHRpb25h
bDxTaW1wbGVSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmlnaHRXb3JkUmFuZ2UoY29uc3QgQ2hhcmFj
dGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCiB7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0
ID0gc3RhcnRDaGFyYWN0ZXJPZmZzZXRPZldvcmQoY2hhcmFjdGVyT2Zmc2V0LCBSaWdodFdvcmRJ
Zk9uQm91bmRhcnkpOwogICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBlbmRDaGFyYWN0ZXJPZmZz
ZXRPZldvcmQoc3RhcnQpOwpAQCAtMjYyMSwyNSArMjU5OCwyMyBAQCBDaGFyYWN0ZXJPZmZzZXQg
QVhPYmplY3RDYWNoZTo6bmV4dEJvdW5kYXJ5KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFj
dGVyT2ZmcwogICAgIGlmICghYm91bmRhcnkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBS
ZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlID0gcmFuZ2VGb3JOb2RlQ29udGVudHMoYm91bmRhcnkp
OwotICAgIGlmICghc2VhcmNoUmFuZ2UpCi0gICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byBz
ZWFyY2hSYW5nZSA9IHJhbmdlRm9yTm9kZUNvbnRlbnRzKCpib3VuZGFyeSk7CiAKICAgICBWZWN0
b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKICAgICB1bnNpZ25lZCBwcmVmaXhMZW5ndGggPSAwOwog
ICAgIAogICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2hhcmFjdGVyQWZ0
ZXIoY2hhcmFjdGVyT2Zmc2V0KSkpIHsKLSAgICAgICAgYXV0byBiYWNrd2FyZHNTY2FuUmFuZ2Ug
PSBib3VuZGFyeS0+ZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOworICAgICAgICBhdXRvIGJhY2t3
YXJkc1NjYW5SYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhib3VuZGFyeS0+
ZG9jdW1lbnQoKSk7CiAgICAgICAgIGlmICghc2V0UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rl
ck9mZnNldChiYWNrd2FyZHNTY2FuUmFuZ2UsIGNoYXJhY3Rlck9mZnNldCwgZmFsc2UpKQogICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcHJlZml4TGVuZ3RoID0gcHJlZml4TGVuZ3Ro
Rm9yUmFuZ2UoYmFja3dhcmRzU2NhblJhbmdlLCBzdHJpbmcpOworICAgICAgICBwcmVmaXhMZW5n
dGggPSBwcmVmaXhMZW5ndGhGb3JSYW5nZShjcmVhdGVMaXZlUmFuZ2UoYmFja3dhcmRzU2NhblJh
bmdlKSwgc3RyaW5nKTsKICAgICB9CiAgICAgCi0gICAgaWYgKCFzZXRSYW5nZVN0YXJ0T3JFbmRX
aXRoQ2hhcmFjdGVyT2Zmc2V0KCpzZWFyY2hSYW5nZSwgY2hhcmFjdGVyT2Zmc2V0LCB0cnVlKSkK
KyAgICBpZiAoIXNldFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZzZXQoc2VhcmNoUmFu
Z2UsIGNoYXJhY3Rlck9mZnNldCwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgQ2hh
cmFjdGVyT2Zmc2V0IGVuZCA9IHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShzZWFy
Y2hSYW5nZSwgZmFsc2UpOwogICAgIAotICAgIFRleHRJdGVyYXRvciBpdCgqc2VhcmNoUmFuZ2Us
IFRleHRJdGVyYXRvckVtaXRzT2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJzKTsKKyAgICBUZXh0
SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzT2JqZWN0UmVwbGFjZW1l
bnRDaGFyYWN0ZXJzKTsKICAgICB1bnNpZ25lZCBuZXh0ID0gZm9yd2FyZFNlYXJjaEZvckJvdW5k
YXJ5V2l0aFRleHRJdGVyYXRvcihpdCwgc3RyaW5nLCBwcmVmaXhMZW5ndGgsIHNlYXJjaEZ1bmN0
aW9uKTsKICAgICAKICAgICBpZiAoaXQuYXRFbmQoKSAmJiBuZXh0ID09IHN0cmluZy5zaXplKCkp
CkBAIC0yNjY5LDEyICsyNjQ0LDEyIEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpw
cmV2aW91c0JvdW5kYXJ5KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyCiAgICAgaWYg
KCFib3VuZGFyeSkKICAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwogICAgIAotICAg
IFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UgPSByYW5nZUZvck5vZGVDb250ZW50cyhib3VuZGFy
eSk7CisgICAgYXV0byBzZWFyY2hSYW5nZSA9IHJhbmdlRm9yTm9kZUNvbnRlbnRzKCpib3VuZGFy
eSk7CiAgICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBzdHJpbmc7CiAgICAgdW5zaWduZWQgc3VmZml4
TGVuZ3RoID0gMDsKIAogICAgIGlmIChuZWVkc0NvbnRleHRBdFBhcmFncmFwaFN0YXJ0ID09IE5l
ZWRzQ29udGV4dEF0UGFyYWdyYXBoU3RhcnQ6OlllcyAmJiBzdGFydENoYXJhY3Rlck9mZnNldE9m
UGFyYWdyYXBoKGNoYXJhY3Rlck9mZnNldCkuaXNFcXVhbChjaGFyYWN0ZXJPZmZzZXQpKSB7Ci0g
ICAgICAgIGF1dG8gZm9yd2FyZHNTY2FuUmFuZ2UgPSBib3VuZGFyeS0+ZG9jdW1lbnQoKS5jcmVh
dGVSYW5nZSgpOworICAgICAgICBhdXRvIGZvcndhcmRzU2NhblJhbmdlID0gbWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKGJvdW5kYXJ5LT5kb2N1bWVudCgpKTsKICAgICAgICAgYXV0byBl
bmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBlbmRDaGFyYWN0ZXJPZmZzZXRPZlBhcmFncmFwaChjaGFy
YWN0ZXJPZmZzZXQpOwogICAgICAgICBpZiAoIXNldFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0
ZXJPZmZzZXQoZm9yd2FyZHNTY2FuUmFuZ2UsIGNoYXJhY3Rlck9mZnNldCwgdHJ1ZSkpCiAgICAg
ICAgICAgICByZXR1cm4geyB9OwpAQCAtMjY4NCwzNyArMjY1OSwzOSBAQCBDaGFyYWN0ZXJPZmZz
ZXQgQVhPYmplY3RDYWNoZTo6cHJldmlvdXNCb3VuZGFyeShjb25zdCBDaGFyYWN0ZXJPZmZzZXQm
IGNoYXJhY3RlcgogICAgICAgICAgICAgYXBwZW5kKHN0cmluZywgZm9yd2FyZHNJdGVyYXRvci50
ZXh0KCkpOwogICAgICAgICBzdWZmaXhMZW5ndGggPSBzdHJpbmcuc2l6ZSgpOwogICAgIH0gZWxz
ZSBpZiAocmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGNoYXJhY3RlckJlZm9yZShjaGFy
YWN0ZXJPZmZzZXQpKSkgewotICAgICAgICBhdXRvIGZvcndhcmRzU2NhblJhbmdlID0gYm91bmRh
cnktPmRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgaWYgKGZvcndhcmRzU2NhblJh
bmdlLT5zZXRFbmRBZnRlcigqYm91bmRhcnkpLmhhc0V4Y2VwdGlvbigpKQorICAgICAgICBhdXRv
IGZvcndhcmRzU2NhblJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGJvdW5k
YXJ5LT5kb2N1bWVudCgpKTsKKyAgICAgICAgYXV0byBhZnRlckJvdW5kYXJ5ID0gbWFrZUJvdW5k
YXJ5UG9pbnRBZnRlck5vZGUoKmJvdW5kYXJ5KTsKKyAgICAgICAgaWYgKCFhZnRlckJvdW5kYXJ5
KQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgZm9yd2FyZHNTY2FuUmFuZ2Uuc3Rh
cnQgPSAqYWZ0ZXJCb3VuZGFyeTsKICAgICAgICAgaWYgKCFzZXRSYW5nZVN0YXJ0T3JFbmRXaXRo
Q2hhcmFjdGVyT2Zmc2V0KGZvcndhcmRzU2NhblJhbmdlLCBjaGFyYWN0ZXJPZmZzZXQsIHRydWUp
KQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgc3VmZml4TGVuZ3RoID0gc3VmZml4
TGVuZ3RoRm9yUmFuZ2UoZm9yd2FyZHNTY2FuUmFuZ2UsIHN0cmluZyk7CisgICAgICAgIHN1ZmZp
eExlbmd0aCA9IHN1ZmZpeExlbmd0aEZvclJhbmdlKGNyZWF0ZUxpdmVSYW5nZShmb3J3YXJkc1Nj
YW5SYW5nZSksIHN0cmluZyk7CiAgICAgfQogICAgIAotICAgIGlmICghc2V0UmFuZ2VTdGFydE9y
RW5kV2l0aENoYXJhY3Rlck9mZnNldCgqc2VhcmNoUmFuZ2UsIGNoYXJhY3Rlck9mZnNldCwgZmFs
c2UpKQorICAgIGlmICghc2V0UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rlck9mZnNldChzZWFy
Y2hSYW5nZSwgY2hhcmFjdGVyT2Zmc2V0LCBmYWxzZSkpCiAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJh
bmdlKHNlYXJjaFJhbmdlLCB0cnVlKTsKICAgICAKLSAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4
dEl0ZXJhdG9yIGl0KCpzZWFyY2hSYW5nZSk7CisgICAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJ
dGVyYXRvciBpdChzZWFyY2hSYW5nZSk7CiAgICAgdW5zaWduZWQgbmV4dCA9IGJhY2t3YXJkU2Vh
cmNoRm9yQm91bmRhcnlXaXRoVGV4dEl0ZXJhdG9yKGl0LCBzdHJpbmcsIHN1ZmZpeExlbmd0aCwg
c2VhcmNoRnVuY3Rpb24pOwogICAgIAogICAgIGlmICghbmV4dCkKICAgICAgICAgcmV0dXJuIGl0
LmF0RW5kKCkgPyBzdGFydCA6IGNoYXJhY3Rlck9mZnNldDsKICAgICAKLSAgICBhdXRvJiBub2Rl
ID0gaXQuYXRFbmQoKSA/IHNlYXJjaFJhbmdlLT5zdGFydENvbnRhaW5lcigpIDogaXQucmFuZ2Uo
KS5zdGFydC5jb250YWluZXIuZ2V0KCk7CisgICAgYXV0byYgbm9kZSA9IChpdC5hdEVuZCgpID8g
c2VhcmNoUmFuZ2UgOiBpdC5yYW5nZSgpKS5zdGFydC5jb250YWluZXIuZ2V0KCk7CiAKICAgICAv
LyBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGlnbm9yZXMgcmVwbGFjZWQgZWxlbWVu
dHMuCiAgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJlcGxhY2VkTm9kZU5lZWRzQ2hhcmFj
dGVyKGNoYXJhY3Rlck9mZnNldC5ub2RlKSkKICAgICAgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNl
dEZvck5vZGVBbmRPZmZzZXQoKmNoYXJhY3Rlck9mZnNldC5ub2RlLCAwKTsKICAgICBOb2RlKiBu
ZXh0U2libGluZyA9IG5vZGUubmV4dFNpYmxpbmcoKTsKICAgICBpZiAoJm5vZGUgIT0gY2hhcmFj
dGVyT2Zmc2V0Lm5vZGUgJiYgQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVwbGFjZWROb2RlTmVlZHND
aGFyYWN0ZXIobmV4dFNpYmxpbmcpKQotICAgICAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rl
ck9mZnNldEZvclJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKG5leHRTaWJsaW5nKSwgZmFsc2Up
OworICAgICAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdl
Rm9yTm9kZUNvbnRlbnRzKCpuZXh0U2libGluZyksIGZhbHNlKTsKIAogICAgIGlmICgoIXN1ZmZp
eExlbmd0aCAmJiBub2RlLmlzVGV4dE5vZGUoKSAmJiBuZXh0IDw9IG5vZGUubGVuZ3RoKCkpIHx8
IChub2RlLnJlbmRlcmVyKCkgJiYgbm9kZS5yZW5kZXJlcigpLT5pc0JSKCkgJiYgIW5leHQpKSB7
CiAgICAgICAgIC8vIFRoZSBuZXh0IHZhcmlhYmxlIGNvbnRhaW5zIGEgdXNhYmxlIGluZGV4IGlu
dG8gYSB0ZXh0IG5vZGUKICAgICAgICAgaWYgKG5vZGUuaXNUZXh0Tm9kZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKCZu
b2RlKSwgbmV4dCwgVHJhdmVyc2VPcHRpb25WYWxpZGF0ZU9mZnNldCk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJhdmVyc2VUb09mZnNldEluUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMobm9kZSks
IG5leHQsIFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQpOwogICAgICAgICByZXR1cm4gY2hh
cmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldChub2RlLCBuZXh0LCBUcmF2ZXJzZU9wdGlvbklu
Y2x1ZGVTdGFydCk7CiAgICAgfQogICAgIApAQCAtMjczMiwyMCArMjcwOSwyMCBAQCBDaGFyYWN0
ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6c3RhcnRDaGFyYWN0ZXJPZmZzZXRPZlBhcmFncmFwaChj
b25zdCBDaGFyYWN0ZXJPZgogICAgIGlmIChjaGFyYWN0ZXJPZmZzZXQuaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKICAgICAKLSAgICBhdXRvKiBzdGFydE5vZGUg
PSBjaGFyYWN0ZXJPZmZzZXQubm9kZTsKKyAgICBhdXRvJiBzdGFydE5vZGUgPSAqY2hhcmFjdGVy
T2Zmc2V0Lm5vZGU7CiAgICAgCi0gICAgaWYgKGlzUmVuZGVyZWRBc05vbklubGluZVRhYmxlSW1h
Z2VPckhSKHN0YXJ0Tm9kZSkpCisgICAgaWYgKGlzUmVuZGVyZWRBc05vbklubGluZVRhYmxlSW1h
Z2VPckhSKCZzdGFydE5vZGUpKQogICAgICAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9m
ZnNldEZvclJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKHN0YXJ0Tm9kZSksIHRydWUpOwogICAg
IAotICAgIGF1dG8qIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpOworICAg
IGF1dG8qIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jaygmc3RhcnROb2RlKTsKICAgICBpbnQg
b2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0LnN0YXJ0SW5kZXggKyBjaGFyYWN0ZXJPZmZzZXQub2Zm
c2V0OwotICAgIGF1dG8qIGhpZ2hlc3RSb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUoc3RhcnROb2RlKSk7CisgICAgYXV0byogaGlnaGVzdFJvb3Qg
PSBoaWdoZXN0RWRpdGFibGVSb290KGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZSgmc3RhcnRO
b2RlKSk7CiAgICAgUG9zaXRpb246OkFuY2hvclR5cGUgdHlwZSA9IFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3I7CiAgICAgCi0gICAgYXV0byogbm9kZSA9IGZpbmRTdGFydE9mUGFy
YWdyYXBoKHN0YXJ0Tm9kZSwgaGlnaGVzdFJvb3QsIHN0YXJ0QmxvY2ssIG9mZnNldCwgdHlwZSwg
Ym91bmRhcnlDcm9zc2luZ1J1bGUpOworICAgIGF1dG8mIG5vZGUgPSAqZmluZFN0YXJ0T2ZQYXJh
Z3JhcGgoJnN0YXJ0Tm9kZSwgaGlnaGVzdFJvb3QsIHN0YXJ0QmxvY2ssIG9mZnNldCwgdHlwZSwg
Ym91bmRhcnlDcm9zc2luZ1J1bGUpOwogICAgIAogICAgIGlmICh0eXBlID09IFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCi0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRG
b3JOb2RlQW5kT2Zmc2V0KCpub2RlLCBvZmZzZXQsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0YXJ0
KTsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQobm9kZSwg
b2Zmc2V0LCBUcmF2ZXJzZU9wdGlvbkluY2x1ZGVTdGFydCk7CiAgICAgCiAgICAgcmV0dXJuIHN0
YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShyYW5nZUZvck5vZGVDb250ZW50cyhub2Rl
KSwgdHJ1ZSk7CiB9CkBAIC0yNzU3LDMwICsyNzM0LDI5IEBAIENoYXJhY3Rlck9mZnNldCBBWE9i
amVjdENhY2hlOjplbmRDaGFyYWN0ZXJPZmZzZXRPZlBhcmFncmFwaChjb25zdCBDaGFyYWN0ZXJP
ZmZzCiAgICAgCiAgICAgTm9kZSogc3RhcnROb2RlID0gY2hhcmFjdGVyT2Zmc2V0Lm5vZGU7CiAg
ICAgaWYgKGlzUmVuZGVyZWRBc05vbklubGluZVRhYmxlSW1hZ2VPckhSKHN0YXJ0Tm9kZSkpCi0g
ICAgICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2VGb3JO
b2RlQ29udGVudHMoc3RhcnROb2RlKSwgZmFsc2UpOworICAgICAgICByZXR1cm4gc3RhcnRPckVu
ZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKCpzdGFydE5vZGUp
LCBmYWxzZSk7CiAgICAgCiAgICAgTm9kZSogc3RheUluc2lkZUJsb2NrID0gZW5jbG9zaW5nQmxv
Y2soc3RhcnROb2RlKTsKICAgICBpbnQgb2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0LnN0YXJ0SW5k
ZXggKyBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0OwogICAgIE5vZGUqIGhpZ2hlc3RSb290ID0gaGln
aGVzdEVkaXRhYmxlUm9vdChmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoc3RhcnROb2RlKSk7
CiAgICAgUG9zaXRpb246OkFuY2hvclR5cGUgdHlwZSA9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3I7CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IGZpbmRFbmRPZlBhcmFncmFwaChz
dGFydE5vZGUsIGhpZ2hlc3RSb290LCBzdGF5SW5zaWRlQmxvY2ssIG9mZnNldCwgdHlwZSwgYm91
bmRhcnlDcm9zc2luZ1J1bGUpOworICAgIGF1dG8mIG5vZGUgPSAqZmluZEVuZE9mUGFyYWdyYXBo
KHN0YXJ0Tm9kZSwgaGlnaGVzdFJvb3QsIHN0YXlJbnNpZGVCbG9jaywgb2Zmc2V0LCB0eXBlLCBi
b3VuZGFyeUNyb3NzaW5nUnVsZSk7CiAgICAgaWYgKHR5cGUgPT0gUG9zaXRpb246OlBvc2l0aW9u
SXNPZmZzZXRJbkFuY2hvcikgewotICAgICAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKSB7Cisg
ICAgICAgIGlmIChub2RlLmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgQ2hhcmFjdGVyT2Zm
c2V0IHN0YXJ0T2Zmc2V0ID0gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdl
Rm9yTm9kZUNvbnRlbnRzKG5vZGUpLCB0cnVlKTsKICAgICAgICAgICAgIG9mZnNldCAtPSBzdGFy
dE9mZnNldC5zdGFydEluZGV4OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJP
ZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KCpub2RlLCBvZmZzZXQsIFRyYXZlcnNlT3B0aW9uSW5jbHVk
ZVN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQo
bm9kZSwgb2Zmc2V0LCBUcmF2ZXJzZU9wdGlvbkluY2x1ZGVTdGFydCk7CiAgICAgfQogICAgIAog
ICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2VGb3JOb2Rl
Q29udGVudHMobm9kZSksIGZhbHNlKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBBWE9iamVjdENhY2hl
OjpwYXJhZ3JhcGhGb3JDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFy
YWN0ZXJPZmZzZXQpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gQVhPYmplY3RDYWNoZTo6cGFyYWdy
YXBoRm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zm
c2V0KQogewogICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0
T2ZQYXJhZ3JhcGgoY2hhcmFjdGVyT2Zmc2V0KTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0g
ZW5kQ2hhcmFjdGVyT2Zmc2V0T2ZQYXJhZ3JhcGgoc3RhcnQpOwotICAgIAogICAgIHJldHVybiBy
YW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnQsIGVuZCk7CiB9CiAKQEAgLTI4
MTgsNyArMjc5NCw3IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjplbmRDaGFyYWN0
ZXJPZmZzZXRPZlNlbnRlbmNlKGNvbnN0IENoYXJhY3Rlck9mZnNlCiAgICAgcmV0dXJuIG5leHRC
b3VuZGFyeShjaGFyYWN0ZXJPZmZzZXQsIGVuZFNlbnRlbmNlQm91bmRhcnkpOwogfQogCi1SZWZQ
dHI8UmFuZ2U+IEFYT2JqZWN0Q2FjaGU6OnNlbnRlbmNlRm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0
IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEFYT2JqZWN0Q2FjaGU6OnNlbnRlbmNlRm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rl
ck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQogewogICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9
IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZTZW50ZW5jZShjaGFyYWN0ZXJPZmZzZXQpOwogICAgIENo
YXJhY3Rlck9mZnNldCBlbmQgPSBlbmRDaGFyYWN0ZXJPZmZzZXRPZlNlbnRlbmNlKHN0YXJ0KTsK
QEAgLTI4NTksMTIgKzI4MzUsMTEgQEAgTGF5b3V0UmVjdCBBWE9iamVjdENhY2hlOjpsb2NhbENh
cmV0UmVjdEZvckNoYXJhY3Rlck9mZnNldChSZW5kZXJPYmplY3QqJiByZW5kZXIKICAgICBJbmxp
bmVCb3gqIGlubGluZUJveCA9IG51bGxwdHI7CiAgICAgaW50IGNhcmV0T2Zmc2V0OwogICAgIC8v
IFVzZSBhIGNvbGxhcHNlZCByYW5nZSB0byBnZXQgdGhlIHBvc2l0aW9uLgotICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSByYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY2hhcmFjdGVy
T2Zmc2V0LCBjaGFyYWN0ZXJPZmZzZXQpOworICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZvclVub3Jk
ZXJlZENoYXJhY3Rlck9mZnNldHMoY2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXJPZmZzZXQpOwog
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAgICAgCi0gICAgUG9z
aXRpb24gc3RhcnRQb3NpdGlvbiA9IHJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgc3RhcnRQ
b3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoRE9XTlNUUkVBTSwgaW5saW5lQm94LCBjYXJl
dE9mZnNldCk7CisgICAgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLT5zdGFydCku
Z2V0SW5saW5lQm94QW5kT2Zmc2V0KERPV05TVFJFQU0sIGlubGluZUJveCwgY2FyZXRPZmZzZXQp
OwogICAgIAogICAgIGlmIChpbmxpbmVCb3gpCiAgICAgICAgIHJlbmRlcmVyID0gJmlubGluZUJv
eC0+cmVuZGVyZXIoKTsKQEAgLTI4OTIsMTUgKzI4NjcsMTYgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFY
T2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvclBvaW50KGNvbnN0IEludFBvaW50ICZwb2lu
dCwgQVgKICAgICBpZiAoIW9iaikKICAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwog
ICAgIAotICAgIFZpc2libGVQb3NpdGlvbiB2cCA9IG9iai0+dmlzaWJsZVBvc2l0aW9uRm9yUG9p
bnQocG9pbnQpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtYWtlUmFuZ2UodnAsIHZwKTsK
LSAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlLCB0cnVl
KTsKKyAgICBhdXRvIGJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQob2JqLT52aXNpYmxlUG9z
aXRpb25Gb3JQb2ludChwb2ludCkpOworICAgIGlmICghYm91bmRhcnkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHsg
KmJvdW5kYXJ5LCAqYm91bmRhcnkgfSwgdHJ1ZSk7CiB9CiAKIENoYXJhY3Rlck9mZnNldCBBWE9i
amVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JQb2ludChjb25zdCBJbnRQb2ludCAmcG9pbnQp
CiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBjYXJldFJhbmdlID0gbV9kb2N1bWVudC5jYXJldFJhbmdl
RnJvbVBvaW50KExheW91dFBvaW50KHBvaW50KSk7Ci0gICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFy
YWN0ZXJPZmZzZXRGb3JSYW5nZShjYXJldFJhbmdlLCB0cnVlKTsKKyAgICByZXR1cm4gc3RhcnRP
ckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKCptX2RvY3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9p
bnQoTGF5b3V0UG9pbnQocG9pbnQpKSwgdHJ1ZSk7CiB9CiAKIENoYXJhY3Rlck9mZnNldCBBWE9i
amVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JCb3VuZHMoY29uc3QgSW50UmVjdCYgcmVjdCwg
Ym9vbCBmaXJzdCkKQEAgLTI5NjQsOCArMjk0MCwxMiBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmpl
Y3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgoaW50IGluZGV4LCBjb25zdCBBWENvcmVP
YgogICAgIC8vIEJSIG5vZGUsIHdoaWxlIENoYXJhY3Rlck9mZnNldCB3aWxsIGRvIHRoZSBvcHBv
c2l0ZS4KICAgICBpZiAob2JqLT5pc1RleHRDb250cm9sKCkgJiYgY2hhcmFjdGVyT2Zmc2V0Tm9k
ZUlzQlIodmFsaWRhdGUpKQogICAgICAgICB2YWxpZGF0ZS5vZmZzZXQgPSAxOwotICAgIAotICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBvYmotPmVsZW1lbnRSYW5nZSgpOworCisgICAgYXV0byBs
aXZlUmFuZ2UgPSBvYmotPmVsZW1lbnRSYW5nZSgpOworICAgIGlmICghbGl2ZVJhbmdlKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgYXV0byByYW5nZSA9IFNpbXBsZVJhbmdlIHsgKmxpdmVS
YW5nZSB9OwogICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IHN0YXJ0T3JFbmRDaGFyYWN0ZXJP
ZmZzZXRGb3JSYW5nZShyYW5nZSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVu
ZCA9IHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShyYW5nZSwgZmFsc2UsIHRydWUp
OwogICAgIENoYXJhY3Rlck9mZnNldCByZXN1bHQgPSBzdGFydDsKQEAgLTI5OTAsMTEgKzI5NzAs
MTAgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvcklu
ZGV4KGludCBpbmRleCwgY29uc3QgQVhDb3JlT2IKIGludCBBWE9iamVjdENhY2hlOjppbmRleEZv
ckNoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCwg
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqKQogewogICAgIC8vIENyZWF0ZSBhIGNvbGxhcHNlZCBy
YW5nZSBzbyB0aGF0IHdlIGNhbiBnZXQgdGhlIFZpc2libGVQb3NpdGlvbiBmcm9tIGl0LgotICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSByYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMo
Y2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXJPZmZzZXQpOworICAgIGF1dG8gcmFuZ2UgPSByYW5n
ZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXJP
ZmZzZXQpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiAwOwotICAgIFZpc2libGVQ
b3NpdGlvbiB2cCA9IHJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIG9iai0+aW5k
ZXhGb3JWaXNpYmxlUG9zaXRpb24odnApOworICAgIHJldHVybiBvYmotPmluZGV4Rm9yVmlzaWJs
ZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpKTsKIH0K
IAogY29uc3QgRWxlbWVudCogQVhPYmplY3RDYWNoZTo6cm9vdEFYRWRpdGFibGVFbGVtZW50KGNv
bnN0IE5vZGUqIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5oCmluZGV4IDM1MzZlMDVkZWQzMzhiNjE1ZTMxMmY5ZGUxN2U0M2ZhZDQwNzA4ZDYuLjI0
MzE0MGViNTdmMzk4YjRmZTkwNzhiNzdjMWM5MTYzMzhlYjczZWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCkBAIC0yOCwxNSArMjgsMTMgQEAKICNp
bmNsdWRlICJBWElzb2xhdGVkVHJlZS5oIgogI2luY2x1ZGUgIkFYVGV4dFN0YXRlQ2hhbmdlSW50
ZW50LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgotI2luY2x1ZGUgIlJhbmdl
LmgiCisjaW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1
ZGUgIlZpc2libGVVbml0cy5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KIAogI2lmIFVTRShBVEspCiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgpAQCAtMjM2
LDI2ICsyMzQsMjYgQEAgcHVibGljOgogICAgIC8vIFVzZSBpZ25vcmVOZXh0Tm9kZVN0YXJ0L2ln
bm9yZVByZXZpb3VzTm9kZUVuZCB0byBkZXRlcm1pbmUgdGhlIGJlaGF2aW9yIHdoZW4gd2UgYXJl
IGF0IG5vZGUgYm91bmRhcnkuIAogICAgIENoYXJhY3Rlck9mZnNldCBuZXh0Q2hhcmFjdGVyT2Zm
c2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIGJvb2wgaWdub3JlTmV4dE5vZGVTdGFydCA9IHRy
dWUpOwogICAgIENoYXJhY3Rlck9mZnNldCBwcmV2aW91c0NoYXJhY3Rlck9mZnNldChjb25zdCBD
aGFyYWN0ZXJPZmZzZXQmLCBib29sIGlnbm9yZVByZXZpb3VzTm9kZUVuZCA9IHRydWUpOwotICAg
IHZvaWQgc3RhcnRPckVuZFRleHRNYXJrZXJEYXRhRm9yUmFuZ2UoVGV4dE1hcmtlckRhdGEmLCBS
ZWZQdHI8UmFuZ2U+LCBib29sKTsKLSAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnRPckVuZENoYXJh
Y3Rlck9mZnNldEZvclJhbmdlKFJlZlB0cjxSYW5nZT4sIGJvb2wsIGJvb2wgZW50ZXJUZXh0Q29u
dHJvbHMgPSBmYWxzZSk7CisgICAgdm9pZCBzdGFydE9yRW5kVGV4dE1hcmtlckRhdGFGb3JSYW5n
ZShUZXh0TWFya2VyRGF0YSYsIGNvbnN0IFNpbXBsZVJhbmdlJiwgYm9vbCk7CisgICAgQ2hhcmFj
dGVyT2Zmc2V0IHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShjb25zdCBTaW1wbGVS
YW5nZSYsIGJvb2wsIGJvb2wgZW50ZXJUZXh0Q29udHJvbHMgPSBmYWxzZSk7CiAgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXJEYXRhKFRleHRN
YXJrZXJEYXRhJik7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZUZvclVub3JkZXJlZENoYXJhY3Rl
ck9mZnNldHMoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7
Ci0gICAgc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JOb2RlQ29udGVudHMoTm9kZSopOwot
ICAgIHN0YXRpYyBpbnQgbGVuZ3RoRm9yUmFuZ2UoUmFuZ2UqKTsKKyAgICBPcHRpb25hbDxTaW1w
bGVSYW5nZT4gcmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNvbnN0IENoYXJhY3Rl
ck9mZnNldCYsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOworICAgIHN0YXRpYyBTaW1wbGVSYW5n
ZSByYW5nZUZvck5vZGVDb250ZW50cyhOb2RlJik7CisgICAgc3RhdGljIGludCBsZW5ndGhGb3JS
YW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKTsKICAgICAKICAgICAvLyBXb3JkIGJv
dW5kYXJ5CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IG5leHRXb3JkRW5kQ2hhcmFjdGVyT2Zmc2V0KGNv
bnN0IENoYXJhY3Rlck9mZnNldCYpOwogICAgIENoYXJhY3Rlck9mZnNldCBwcmV2aW91c1dvcmRT
dGFydENoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKLSAgICBSZWZQdHI8
UmFuZ2U+IGxlZnRXb3JkUmFuZ2UoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7Ci0gICAgUmVmUHRy
PFJhbmdlPiByaWdodFdvcmRSYW5nZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKKyAgICBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gbGVmdFdvcmRSYW5nZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsK
KyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmlnaHRXb3JkUmFuZ2UoY29uc3QgQ2hhcmFjdGVy
T2Zmc2V0Jik7CiAgICAgCiAgICAgLy8gUGFyYWdyYXBoCi0gICAgUmVmUHRyPFJhbmdlPiBwYXJh
Z3JhcGhGb3JDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CisgICAgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IHBhcmFncmFwaEZvckNoYXJhY3Rlck9mZnNldChjb25zdCBDaGFy
YWN0ZXJPZmZzZXQmKTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgbmV4dFBhcmFncmFwaEVuZENoYXJh
Y3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICBDaGFyYWN0ZXJPZmZzZXQg
cHJldmlvdXNQYXJhZ3JhcGhTdGFydENoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZz
ZXQmKTsKICAgICAKICAgICAvLyBTZW50ZW5jZQotICAgIFJlZlB0cjxSYW5nZT4gc2VudGVuY2VG
b3JDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CisgICAgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IHNlbnRlbmNlRm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9m
ZnNldCYpOwogICAgIENoYXJhY3Rlck9mZnNldCBuZXh0U2VudGVuY2VFbmRDaGFyYWN0ZXJPZmZz
ZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHByZXZpb3Vz
U2VudGVuY2VTdGFydENoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAg
ICAKQEAgLTQwNSw3ICs0MDMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgZW51bSBUcmF2ZXJzZU9wdGlv
biB7IFRyYXZlcnNlT3B0aW9uRGVmYXVsdCA9IDEgPDwgMCwgVHJhdmVyc2VPcHRpb25Ub05vZGVF
bmQgPSAxIDw8IDEsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0YXJ0ID0gMSA8PCAyLCBUcmF2ZXJz
ZU9wdGlvblZhbGlkYXRlT2Zmc2V0ID0gMSA8PCAzLCBUcmF2ZXJzZU9wdGlvbkRvTm90RW50ZXJU
ZXh0Q29udHJvbHMgPSAxIDw8IDQgfTsKICAgICBOb2RlKiBuZXh0Tm9kZShOb2RlKikgY29uc3Q7
CiAgICAgTm9kZSogcHJldmlvdXNOb2RlKE5vZGUqKSBjb25zdDsKLSAgICBDaGFyYWN0ZXJPZmZz
ZXQgdHJhdmVyc2VUb09mZnNldEluUmFuZ2UoUmVmUHRyPFJhbmdlPiwgaW50LCBUcmF2ZXJzZU9w
dGlvbiA9IFRyYXZlcnNlT3B0aW9uRGVmYXVsdCwgYm9vbCBzdGF5V2l0aGluUmFuZ2UgPSBmYWxz
ZSk7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IHRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKGNvbnN0IFNp
bXBsZVJhbmdlJiwgaW50LCBUcmF2ZXJzZU9wdGlvbiA9IFRyYXZlcnNlT3B0aW9uRGVmYXVsdCwg
Ym9vbCBzdGF5V2l0aGluUmFuZ2UgPSBmYWxzZSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVQb3NpdGlvbkZyb21DaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CiAg
ICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldEZyb21WaXNpYmxlUG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJik7CiAgICAgdm9pZCBzZXRUZXh0TWFya2VyRGF0YVdpdGhDaGFy
YWN0ZXJPZmZzZXQoVGV4dE1hcmtlckRhdGEmLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKQEAg
LTYwMyw3ICs2MDEsNyBAQCBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpyZWNvbXB1dGVJc0ln
bm9yZWQoUmVuZGVyT2JqZWN0KikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjp0ZXh0
Q2hhbmdlZChBY2Nlc3NpYmlsaXR5T2JqZWN0KikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENh
Y2hlOjp0ZXh0Q2hhbmdlZChOb2RlKikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjp1
cGRhdGVDYWNoZUFmdGVyTm9kZUlzQXR0YWNoZWQoTm9kZSopIHsgfQotaW5saW5lIFJlZlB0cjxS
YW5nZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMoTm9kZSopIHsgcmV0dXJu
IG51bGxwdHI7IH0KK2lubGluZSBTaW1wbGVSYW5nZSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5v
ZGVDb250ZW50cyhOb2RlJiBub2RlKSB7IHJldHVybiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMobm9kZSk7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92ZShBWElEKSB7
IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92ZShSZW5kZXJPYmplY3QqKSB7IH0K
IGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92ZShOb2RlJikgeyB9CkBAIC02MTIsMTAg
KzYxMCwxMCBAQCBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpzZWxlY3RlZENoaWxkcmVuQ2hh
bmdlZChSZW5kZXJPYmplY3QqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnNlbGVj
dGVkQ2hpbGRyZW5DaGFuZ2VkKE5vZGUqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6
OnNldElzU3luY2hyb25pemluZ1NlbGVjdGlvbihib29sKSB7IH0KIGlubGluZSB2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OnNldFRleHRTZWxlY3Rpb25JbnRlbnQoY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJ
bnRlbnQmKSB7IH0KLWlubGluZSBSZWZQdHI8UmFuZ2U+IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9y
VW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhjb25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBjb25zdCBD
aGFyYWN0ZXJPZmZzZXQmKSB7IHJldHVybiBudWxscHRyOyB9CitpbmxpbmUgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0
cyhjb25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKSB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KIGlubGluZSBJbnRSZWN0IEFYT2JqZWN0Q2FjaGU6OmFic29sdXRl
Q2FyZXRCb3VuZHNGb3JDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JikgeyBy
ZXR1cm4gSW50UmVjdCgpOyB9CiBpbmxpbmUgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6
OmNoYXJhY3Rlck9mZnNldEZvckluZGV4KGludCwgY29uc3QgQVhDb3JlT2JqZWN0KikgeyByZXR1
cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7IH0KLWlubGluZSBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RD
YWNoZTo6c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKFJlZlB0cjxSYW5nZT4sIGJv
b2wsIGJvb2wpIHsgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOyB9CitpbmxpbmUgQ2hhcmFjdGVy
T2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShj
b25zdCBTaW1wbGVSYW5nZSYsIGJvb2wsIGJvb2wpIHsgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgp
OyB9CiBpbmxpbmUgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmVuZENoYXJhY3Rlck9m
ZnNldE9mTGluZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKSB7IHJldHVybiBDaGFyYWN0ZXJPZmZz
ZXQoKTsgfQogaW5saW5lIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpuZXh0Q2hhcmFj
dGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIGJvb2wpIHsgcmV0dXJuIENoYXJhY3Rl
ck9mZnNldCgpOyB9CiBpbmxpbmUgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZp
b3VzQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIGJvb2wpIHsgcmV0dXJu
IENoYXJhY3Rlck9mZnNldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCAzZjgwMDEwMjQ1NzA4M2M4NzNkOWJm
ODE1OTJiYmIwODVjYjcwNDYwLi41N2EwMTlkZmZmMWI4NjBjNzM4MDcwMjAzMTcyODVhMTIxOTIw
NDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAKQEAgLTY0NSw4ICs2NDUsMTEgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvblJhbmdlKCkgY29uc3QKIH0KIAogUmVmUHRy
PFJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjplbGVtZW50UmFuZ2UoKSBjb25zdAoteyAgICAK
LSAgICByZXR1cm4gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMobm9kZSgpKTsK
K3sKKyAgICBhdXRvIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAg
ICByZXR1cm4geyB9OworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoQVhPYmplY3RDYWNoZTo6
cmFuZ2VGb3JOb2RlQ29udGVudHMoKm5vZGUpKTsKIH0KIAogUmVmUHRyPFJhbmdlPiBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpmaW5kVGV4dFJhbmdlKFZlY3RvcjxTdHJpbmc+IGNvbnN0JiBzZWFyY2hT
dHJpbmdzLCBSZWZQdHI8UmFuZ2U+IGNvbnN0JiBzdGFydCwgQWNjZXNzaWJpbGl0eVNlYXJjaFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdApAQCAtMTE4OSw3ICsxMTkyLDcgQEAgUmVmUHRy
PFJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZUZvclBsYWluVGV4dFJhbmdlKGNvbnN0
IFBsYWluVGV4dFJhbmdlJgogICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGF4T2JqZWN0
Q2FjaGUoKSkgewogICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNoZS0+Y2hhcmFj
dGVyT2Zmc2V0Rm9ySW5kZXgocmFuZ2Uuc3RhcnQsIHRoaXMpOwogICAgICAgICBDaGFyYWN0ZXJP
ZmZzZXQgZW5kID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNldEZvckluZGV4KHJhbmdlLnN0YXJ0ICsg
cmFuZ2UubGVuZ3RoLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuIGNhY2hlLT5yYW5nZUZvclVub3Jk
ZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnQsIGVuZCk7CisgICAgICAgIHJldHVybiBjcmVhdGVM
aXZlUmFuZ2UoY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydCwg
ZW5kKSk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
aW5kZXggZDFjODNlNmVkMzE5ZTE3NzIyM2U3M2Y0Nzg4YjY4YTAzNjc3OWVjNy4uNTBmMWI3ODE4
NTViMTg5MTJkYjhiNTdmZGZiNzJlZTgzYTM3MjJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBA
IC0yMTc2LDggKzIxNzYsOCBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJv
dW5kc0ZvclJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4gcmFuZ2UpIGNvbgogICAgIGlmICghY2Fj
aGUpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAgICAgCi0gICAgQ2hhcmFjdGVyT2Zmc2V0
IHN0YXJ0ID0gY2FjaGUtPnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShyYW5nZSwg
dHJ1ZSk7Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hlLT5zdGFydE9yRW5kQ2hhcmFj
dGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2UsIGZhbHNlKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgc3Rh
cnQgPSBjYWNoZS0+c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKCpyYW5nZSwgdHJ1
ZSk7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hlLT5zdGFydE9yRW5kQ2hhcmFjdGVy
T2Zmc2V0Rm9yUmFuZ2UoKnJhbmdlLCBmYWxzZSk7CiAgICAgCiAgICAgTGF5b3V0UmVjdCByZWN0
MSA9IGNhY2hlLT5hYnNvbHV0ZUNhcmV0Qm91bmRzRm9yQ2hhcmFjdGVyT2Zmc2V0KHN0YXJ0KTsK
ICAgICBMYXlvdXRSZWN0IHJlY3QyID0gY2FjaGUtPmFic29sdXRlQ2FyZXRCb3VuZHNGb3JDaGFy
YWN0ZXJPZmZzZXQoZW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0K
aW5kZXggZDZhYjc3YmI3MDJlYjZhNDE1OWI0MGNjMmI5Y2U2YmY3ZmY4ODE1Mi4uNDcxOTI1NWE3
NzBiMmIyZDgyNWNmYzBmZjA2ZDFkNWI4YTZjNzFiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MubW0KQEAgLTIxMiw5ICsyMTIsMTAgQEAgKyAoV2ViQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIgKilzdGFydE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOihjb25zdCBSZWZQdHI8
UmFuZ2UKIHsKICAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIAorICAg
IGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBuaWw7CiAgICAgVGV4dE1hcmtlckRhdGEgdGV4
dE1hcmtlckRhdGE7Ci0gICAgY2FjaGUtPnN0YXJ0T3JFbmRUZXh0TWFya2VyRGF0YUZvclJhbmdl
KHRleHRNYXJrZXJEYXRhLCByYW5nZSwgaXNTdGFydCk7CisgICAgY2FjaGUtPnN0YXJ0T3JFbmRU
ZXh0TWFya2VyRGF0YUZvclJhbmdlKHRleHRNYXJrZXJEYXRhLCAqcmFuZ2UsIGlzU3RhcnQpOwog
ICAgIGlmICghdGV4dE1hcmtlckRhdGEuYXhJRCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICBy
ZXR1cm4gW1tbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgYWxsb2NdIGluaXRXaXRoVGV4dE1h
cmtlcjomdGV4dE1hcmtlckRhdGEgY2FjaGU6Y2FjaGVdIGF1dG9yZWxlYXNlXTsKQEAgLTIzNjks
OSArMjM3MCw4IEBAIC0gKE5TSW50ZWdlcilwb3NpdGlvbkZvclRleHRNYXJrZXI6KFdlYkFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyICopbWFya2VyCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hl
ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSkgewogICAgICAgICBDaGFy
YWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW21hcmtlciBjaGFyYWN0ZXJPZmZzZXRdOwog
ICAgICAgICAvLyBDcmVhdGUgYSBjb2xsYXBzZWQgcmFuZ2UgZnJvbSB0aGUgQ2hhcmFjdGVyT2Zm
c2V0IG9iamVjdC4KLSAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNhY2hlLT5yYW5nZUZv
clVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXJPZmZz
ZXQpOwotICAgICAgICBOU1JhbmdlIG5zUmFuZ2UgPSBbc2VsZiBfY29udmVydFRvTlNSYW5nZTpy
YW5nZS5nZXQoKV07Ci0gICAgICAgIHJldHVybiBuc1JhbmdlLmxvY2F0aW9uOworICAgICAgICBh
dXRvIHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhjaGFy
YWN0ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7CisgICAgICAgIHJldHVybiBbc2VsZiBfY29u
dmVydFRvTlNSYW5nZTpjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpXS5sb2NhdGlvbjsKICAg
ICB9CiAgICAgcmV0dXJuIE5TTm90Rm91bmQ7CiB9CkBAIC0yNDMyLDEyICsyNDMyLDEyIEBAIC0g
KE5TQXJyYXkgKil0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb24KICAgICBpZiAoIWNhY2hlKQog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIGF1dG8gcmFuZ2UgPSBjcmVhdGVMaXZlUmFu
Z2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm4gbmlsOwogCi0gICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gY2FjaGUtPnN0YXJ0T3JFbmRD
aGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShyYW5nZSwgdHJ1ZSk7Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0
IGVuZCA9IGNhY2hlLT5zdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2UsIGZh
bHNlKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNoZS0+c3RhcnRPckVuZENoYXJh
Y3Rlck9mZnNldEZvclJhbmdlKCpyYW5nZSwgdHJ1ZSk7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IGVu
ZCA9IGNhY2hlLT5zdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UoKnJhbmdlLCBmYWxz
ZSk7CiAKICAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnRNYXJrZXIgPSBbV2Vi
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhDaGFyYWN0ZXJPZmZzZXQ6c3Rh
cnQgY2FjaGU6Y2FjaGVdOwogICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBlbmRNYXJr
ZXIgPSBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhDaGFyYWN0ZXJP
ZmZzZXQ6ZW5kIGNhY2hlOmNhY2hlXTsKQEAgLTI0NjAsNyArMjQ2MCw3IEBAIC0gKFdlYkFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmtlckZvclBvc2l0aW9uOihOU0ludGVnZXIpcG9z
aXRpb24KICAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIENo
YXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBjYWNoZS0+c3RhcnRPckVuZENoYXJhY3Rl
ck9mZnNldEZvclJhbmdlKHJhbmdlLCB0cnVlKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFj
dGVyT2Zmc2V0ID0gY2FjaGUtPnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZSgqcmFu
Z2UsIHRydWUpOwogICAgIHJldHVybiBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1h
cmtlcldpdGhDaGFyYWN0ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0IGNhY2hlOmNhY2hlXTsKIH0K
IApAQCAtMjc5Nyw3ICsyNzk3LDcgQEAgLSAoUmVmUHRyPFJhbmdlPilyYW5nZUZvclRleHRNYXJr
ZXJzOihOU0FycmF5ICopdGV4dE1hcmtlcnMKICAgICAKICAgICBDaGFyYWN0ZXJPZmZzZXQgc3Rh
cnRDaGFyYWN0ZXJPZmZzZXQgPSBbc3RhcnRNYXJrZXIgY2hhcmFjdGVyT2Zmc2V0XTsKICAgICBD
aGFyYWN0ZXJPZmZzZXQgZW5kQ2hhcmFjdGVyT2Zmc2V0ID0gW2VuZE1hcmtlciBjaGFyYWN0ZXJP
ZmZzZXRdOwotICAgIHJldHVybiBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZz
ZXRzKHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0LCBlbmRDaGFyYWN0ZXJPZmZzZXQpOworICAgIHJldHVy
biBjcmVhdGVMaXZlUmFuZ2UoY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0
cyhzdGFydENoYXJhY3Rlck9mZnNldCwgZW5kQ2hhcmFjdGVyT2Zmc2V0KSk7CiB9CiAKIC0gKE5T
SW50ZWdlcilsZW5ndGhGb3JUZXh0TWFya2VyczooTlNBcnJheSAqKXRleHRNYXJrZXJzCkBAIC0y
ODA1LDggKzI4MDUsMTEgQEAgLSAoTlNJbnRlZ2VyKWxlbmd0aEZvclRleHRNYXJrZXJzOihOU0Fy
cmF5ICopdGV4dE1hcmtlcnMKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNh
bGxdKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
W3NlbGYgcmFuZ2VGb3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vyc107Ci0gICAgaW50IGxlbmd0aCA9
IEFYT2JqZWN0Q2FjaGU6Omxlbmd0aEZvclJhbmdlKHJhbmdlLmdldCgpKTsKKyAgICBhdXRvIHJh
bmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vyc107CisgICAgaWYgKCFy
YW5nZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpbnQgbGVuZ3RoID0gQVhPYmplY3RDYWNo
ZTo6bGVuZ3RoRm9yUmFuZ2UoU2ltcGxlUmFuZ2UgeyAqcmFuZ2UgfSk7CiAgICAgcmV0dXJuIGxl
bmd0aCA8IDAgPyAwIDogbGVuZ3RoOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLm1tCmluZGV4IDYxNTNjZmEyNTYyMjg5NGIwMTI4YmMwZDIyZmFiZmNiZDFiN2M2YjYu
LjkxYWEzMzY4MThkYjI3ZDkyMjc3MTMzZDQwMTlkOGVkNzc4N2I2ZTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC04MDAsMTIgKzgwMCwxNSBAQCBzdGF0aWMg
aWQgc3RhcnRPckVuZFRleHRtYXJrZXJGb3JSYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgUmVm
UHRyPFJhbmdlPiByYW5nZQogewogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBuaWw7
Ci0gICAgCisKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gbmlsOworCiAgICAgVGV4
dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7Ci0gICAgY2FjaGUtPnN0YXJ0T3JFbmRUZXh0TWFy
a2VyRGF0YUZvclJhbmdlKHRleHRNYXJrZXJEYXRhLCByYW5nZSwgaXNTdGFydCk7CisgICAgY2Fj
aGUtPnN0YXJ0T3JFbmRUZXh0TWFya2VyRGF0YUZvclJhbmdlKHRleHRNYXJrZXJEYXRhLCAqcmFu
Z2UsIGlzU3RhcnQpOwogICAgIGlmICghdGV4dE1hcmtlckRhdGEuYXhJRCkKICAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAKKwogICAgIHJldHVybiBDRkJyaWRnaW5nUmVsZWFzZShBWFRleHRNYXJr
ZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IFVJbnQ4KikmdGV4dE1hcmtlckRh
dGEsIHNpemVvZih0ZXh0TWFya2VyRGF0YSkpKTsKIH0KIApAQCAtODc4LDcgKzg4MSw3IEBAIC0g
KFJlZlB0cjxSYW5nZT4pcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6KGlkKXRleHRNYXJrZXJSYW5n
ZQogICAgIAogICAgIENoYXJhY3Rlck9mZnNldCBzdGFydENoYXJhY3Rlck9mZnNldCA9IFtzZWxm
IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6c3RhcnRUZXh0TWFya2VyXTsKICAgICBDaGFy
YWN0ZXJPZmZzZXQgZW5kQ2hhcmFjdGVyT2Zmc2V0ID0gW3NlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9y
VGV4dE1hcmtlcjplbmRUZXh0TWFya2VyXTsKLSAgICByZXR1cm4gY2FjaGUtPnJhbmdlRm9yVW5v
cmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydENoYXJhY3Rlck9mZnNldCwgZW5kQ2hhcmFjdGVy
T2Zmc2V0KTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKGNhY2hlLT5yYW5nZUZvclVub3Jk
ZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnRDaGFyYWN0ZXJPZmZzZXQsIGVuZENoYXJhY3Rlck9m
ZnNldCkpOwogfQogCiBzdGF0aWMgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldEZvclRl
eHRNYXJrZXIoQVhPYmplY3RDYWNoZSogY2FjaGUsIENGVHlwZVJlZiB0ZXh0TWFya2VyKQpAQCAt
MzY1MCw4ICszNjUzLDggQEAgLSAoTlNJbnRlZ2VyKV9pbmRleEZvclRleHRNYXJrZXI6KGlkKW1h
cmtlcgogICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5heE9iamVjdENhY2hlKCkpIHsKICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9m
ZnNldCA9IFtzZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6bWFya2VyXTsKICAgICAg
ICAgLy8gQ3JlYXRlIGEgY29sbGFwc2VkIHJhbmdlIGZyb20gdGhlIENoYXJhY3Rlck9mZnNldCBv
YmplY3QuCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VGb3JVbm9y
ZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVyT2Zmc2V0KTsK
LSAgICAgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOnJhbmdlLmdldCgpXS5sb2Nh
dGlvbjsKKyAgICAgICAgYXV0byByYW5nZSA9IGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJh
Y3Rlck9mZnNldHMoY2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXJPZmZzZXQpOworICAgICAgICBy
ZXR1cm4gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6Y3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQo
KV0ubG9jYXRpb247CiAgICAgfQogICAgIHJldHVybiBOU05vdEZvdW5kOwogfQpAQCAtMzc3MSw3
ICszNzc0LDcgQEAgLSAoaWQpdGV4dE1hcmtlclJhbmdlQXRUZXh0TWFya2VyOihpZCl0ZXh0TWFy
a2VyIGZvclVuaXQ6KFRleHRVbml0KXRleHRVbml0CiAgICAgICAgICAgICByZXR1cm4gbmlsOwog
CiAgICAgICAgIGF1dG8gY2hhcmFjdGVyT2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1h
cmtlcihjYWNoZSwgdGV4dE1hcmtlcik7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7Cisg
ICAgICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZTsKICAgICAgICAgc3dpdGNoICh0ZXh0
VW5pdCkgewogICAgICAgICBjYXNlIFRleHRVbml0OjpMZWZ0V29yZDoKICAgICAgICAgICAgIHJh
bmdlID0gY2FjaGUtPmxlZnRXb3JkUmFuZ2UoY2hhcmFjdGVyT2Zmc2V0KTsKQEAgLTM3OTAsNyAr
Mzc5Myw3IEBAIC0gKGlkKXRleHRNYXJrZXJSYW5nZUF0VGV4dE1hcmtlcjooaWQpdGV4dE1hcmtl
ciBmb3JVbml0OihUZXh0VW5pdCl0ZXh0VW5pdAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAotICAgICAgICByZXR1cm4gdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKGNhY2hlLCByYW5n
ZSk7CisgICAgICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UoY2FjaGUsIGNyZWF0
ZUxpdmVSYW5nZShyYW5nZSkpOwogICAgIH0pOwogfQogCkBAIC00MTU4LDggKzQxNjEsOCBAQCBB
TExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIGlmIChzdGFy
dC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIENHUmVj
dFplcm87CiAKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VG
b3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKHN0YXJ0LCBlbmQpOwotICAgICAgICAgICAgYXV0
byBib3VuZHMgPSBGbG9hdFJlY3QoYmFja2luZ09iamVjdC0+Ym91bmRzRm9yUmFuZ2UocmFuZ2Up
KTsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFy
YWN0ZXJPZmZzZXRzKHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgYXV0byBib3VuZHMgPSBGbG9h
dFJlY3QoYmFja2luZ09iamVjdC0+Ym91bmRzRm9yUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdl
KSkpOwogICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIGNvbnZlcnRSZWN0VG9TcGFj
ZTpib3VuZHMgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6U2NyZWVuXTsKICAg
ICAgICAgfSk7CiAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJlY3RdOwpA
QCAtNDE4NSw4ICs0MTg4LDggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5E
CiAgICAgICAgICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnQsIGVu
ZCk7Ci0gICAgICAgICAgICByZXR1cm4gYmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UocmFu
Z2UpOworICAgICAgICAgICAgYXV0byByYW5nZSA9IGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENo
YXJhY3Rlck9mZnNldHMoc3RhcnQsIGVuZCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2luZ09i
amVjdC0+c3RyaW5nRm9yUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSk7CiAgICAgICAgIH0p
OwogICAgIH0KIApAQCAtNDIzMCw4ICs0MjMzLDggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1F
TlRBVElPTlNfRU5ECiAKICAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZz
ZXQxID0gW3Byb3RlY3RlZFNlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFy
a2VyMV07CiAgICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0MiA9IFtw
cm90ZWN0ZWRTZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcjJdOwot
ICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNhY2hlLT5yYW5nZUZvclVub3JkZXJl
ZENoYXJhY3Rlck9mZnNldHMoY2hhcmFjdGVyT2Zmc2V0MSwgY2hhcmFjdGVyT2Zmc2V0Mik7Ci0g
ICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdl
OnJhbmdlXTsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVy
ZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldDEsIGNoYXJhY3Rlck9mZnNldDIpOwor
ICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5n
ZTpjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpXTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC00MzE0
LDcgKzQzMTcsOSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07
Ci0gICAgICAgICAgICByZXR1cm4gQVhPYmplY3RDYWNoZTo6bGVuZ3RoRm9yUmFuZ2UocmFuZ2Uu
Z2V0KCkpOworICAgICAgICAgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgIHJldHVybiBBWE9iamVjdENhY2hlOjpsZW5ndGhGb3JSYW5nZShTaW1w
bGVSYW5nZSB7ICpyYW5nZSB9KTsKICAgICAgICAgfSk7CiAgICAgICAgIGlmIChsZW5ndGggPCAw
KQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Cb3VuZGFyeVBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oCmlu
ZGV4IDVmOGU0NzY0M2E4M2I4NTdkOGM4MTVhNDU2MTYxOTE2NWJlNTM0YmUuLmZkYmUxZWFhYjcy
NGVmMGJiY2MyM2NmYmY0ZjUzY2ViN2M3ZmQ4ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Cb3VuZGFyeVBvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9p
bnQuaApAQCAtNDAsNiArNDAsOCBAQCBzdHJ1Y3QgQm91bmRhcnlQb2ludCB7CiAKIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogCitX
RUJDT1JFX0VYUE9SVCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiBtYWtlQm91bmRhcnlQb2ludEJl
Zm9yZU5vZGUoTm9kZSYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4g
bWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGUoTm9kZSYpOwogQm91bmRhcnlQb2ludCBtYWtlQm91
bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhOb2RlJik7CiBCb3VuZGFyeVBvaW50IG1ha2VC
b3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoTm9kZSYpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBs
ZVJhbmdlLmNwcAppbmRleCA5MjQwYzM0MjQxODE4YjJkMDRlZTg2MzAyNDJhZmY1NGQ5OWNjZjFl
Li40YThkMDA0ZGU5MTI4OWEzNGFmMGMxNTFiMzY5YzM1M2RmYWRiY2M5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaW1wbGVSYW5nZS5jcHAKQEAgLTU1LDYgKzU1LDI0IEBAIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTaW1wbGVSYW5nZSYgYSwgY29uc3QgU2ltcGxlUmFuZ2UmIGIpCiAgICAgcmV0dXJuIGEuc3Rh
cnQgPT0gYi5zdGFydCAmJiBhLmVuZCA9PSBiLmVuZDsKIH0KIAorLy8gRklYTUU6IENyZWF0ZSBC
b3VuZGFyeVBvaW50LmNwcCBhbmQgbW92ZSB0aGlzIHRoZXJlLgorT3B0aW9uYWw8Qm91bmRhcnlQ
b2ludD4gbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlKE5vZGUmIG5vZGUpCit7CisgICAgYXV0
byBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gQm91bmRhcnlQb2ludCB7ICpwYXJlbnQs
IG5vZGUuY29tcHV0ZU5vZGVJbmRleCgpIH07Cit9CisKKy8vIEZJWE1FOiBDcmVhdGUgQm91bmRh
cnlQb2ludC5jcHAgYW5kIG1vdmUgdGhpcyB0aGVyZS4KK09wdGlvbmFsPEJvdW5kYXJ5UG9pbnQ+
IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlKE5vZGUmIG5vZGUpCit7CisgICAgYXV0byBwYXJl
bnQgPSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gQm91bmRhcnlQb2ludCB7ICpwYXJlbnQsIG5vZGUu
Y29tcHV0ZU5vZGVJbmRleCgpICsgMSB9OworfQorCiBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZShOb2RlJiBub2RlKQogewogICAgIGF1dG8gcGFyZW50ID0gbm9k
ZS5wYXJlbnROb2RlKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>