<?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>225028</bug_id>
          
          <creation_ts>2021-04-24 19:18:35 -0700</creation_ts>
          <short_desc>Deploy Ref/RefPtr in DeleteSelectionCommand</short_desc>
          <delta_ts>2021-04-24 23:01:19 -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>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>mifenton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1753981</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-24 19:18:35 -0700</bug_when>
    <thetext>We should use more smart pointers in DeleteSelectionCommand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753982</commentid>
    <comment_count>1</comment_count>
      <attachid>426995</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-24 19:24:32 -0700</bug_when>
    <thetext>Created attachment 426995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753983</commentid>
    <comment_count>2</comment_count>
      <attachid>426995</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-04-24 19:30:19 -0700</bug_when>
    <thetext>Comment on attachment 426995
Patch

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

r=mews

&gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:1044
&gt; +            Text&amp; textNode = downcast&lt;Text&gt;(*endNode);

Nit - auto&amp; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753984</commentid>
    <comment_count>3</comment_count>
      <attachid>426996</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-24 19:34:54 -0700</bug_when>
    <thetext>Created attachment 426996
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753985</commentid>
    <comment_count>4</comment_count>
      <attachid>426996</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-24 19:35:07 -0700</bug_when>
    <thetext>Comment on attachment 426996
Patch for landing

Wait for EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753987</commentid>
    <comment_count>5</comment_count>
      <attachid>426996</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-24 23:00:03 -0700</bug_when>
    <thetext>Comment on attachment 426996
Patch for landing

Clearing flags on attachment: 426996

Committed r276563 (236999@main): &lt;https://commits.webkit.org/236999@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753988</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-24 23:00:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753989</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-24 23:01:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/77114154&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426995</attachid>
            <date>2021-04-24 19:24:32 -0700</date>
            <delta_ts>2021-04-24 19:39:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225028-20210424192431.patch</filename>
            <type>text/plain</type>
            <size>30519</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTI2YjgwZmYwY2ViOGFi
NDY2YzAyZDM4YzU0OGU3ZDkwNTk0NmZlNC4uYjQ1MGU3MDVkMTkxZDQ3MGM4YTAwNWI2NzVkMTkw
YTU1MmQwMjE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDIxLTA0LTI0ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERlcGxveSBSZWYvUmVmUHRy
IGluIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNTAyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIERlcGxveWVkIHNtYXJ0IHBvaW50ZXJzIGluIERlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuCisKKyAgICAgICAgQWxzbyBkZXBsb3llZCBTY3JpcHREaXNhbGxvd2VkU2Nv
cGUgYXJvdW5kIHRoZSBjb2RlIHdoaWNoIGFjY2Vzc2VzIHRoZSByZW5kZXIgdHJlZS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgc2luY2UgdGhlcmUgc2hvdWxkIGJlIG5vIG9ic2VydmFibGUgYmVo
YXZpb3JhbCBkaWZmZXJlbmNlcy4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1RhYmxlUm93RW1wdHkpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNTcGVjaWFsSFRNTEVsZW1lbnQpOiBNb3ZlZCBmcm9tIEVkaXRpbmcuY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RJblNwZWNpYWxFbGVtZW50KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpsYXN0SW5TcGVjaWFsRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6cG9zaXRpb25CZWZvcmVDb250YWluaW5nU3BlY2lhbEVsZW1lbnQpOiBEaXR0by4gTm93
IHJldHVybnMgYSBwYWlyIGluc3RlYWQgb2YgcmV0dXJuaW5nCisgICAgICAgIFBvc2l0aW9uIGFu
ZCAicmV0dXJuaW5nIiB0aGUgc3BlY2lhbCBlbGVtZW50IHZpYSBhbiBvdXQgYXJndW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbkFmdGVyQ29udGFpbmluZ1NwZWNpYWxFbGVtZW50KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjppbml0aWFs
aXplU3RhcnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
aW5pdGlhbGl6ZVBvc2l0aW9uRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rp
b25Db21tYW5kOjpoYW5kbGVTcGVjaWFsQ2FzZUJSRGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OmZpcnN0RWRpdGFibGVQb3NpdGlvbkluTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjppbnNlcnRCbG9ja1BsYWNlaG9sZGVyRm9yVGFibGVDZWxsSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5l
cmFsRGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1l
cmdlUGFyYWdyYXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5k
OjpyZW1vdmVQcmV2aW91c2x5U2VsZWN0ZWRFbXB0eVRhYmxlUm93cyk6CisgICAgICAgIChXZWJD
b3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpvcmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0
aW9uQXRCZWdpbm5pbmdPZlNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aXNSZW5kZXJlZFRhYmxlKTogUmV0dXJuIGZhbHNlIHdoZW4gdGhl
IG5vZGUgaXMgbm90IGEgSFRNTEVsZW1lbnQgZm9yIGNvbnNpc3RlbmN5LgorICAgICAgICAoV2Vi
Q29yZTo6aXNTcGVjaWFsSFRNTEVsZW1lbnQpOiBNb3ZlZCB0byBEZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0SW5TcGVjaWFsRWxlbWVudCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6bGFzdEluU3BlY2lhbEVsZW1lbnQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OnBvc2l0aW9uQmVmb3JlQ29udGFpbmluZ1NwZWNpYWxFbGVtZW50KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbkFmdGVyQ29udGFpbmluZ1NwZWNpYWxFbGVt
ZW50KTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmg6CisKIDIwMjEtMDQtMjQg
IEp1bGlhbiBHb256YWxleiAgPGp1bGlhbl9hX2dvbnphbGV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBDcmFzaCBpbiBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDRmNzc3
MzViYmRmYTdiZGQyNTdkMjc5ZThhMjE4YjI0YmI4MzhiOGEuLjk2NjFhZTYwNzIxNjhkNWQ2ZmMx
MGVhOTI1YTllZTk1Yjc3MjMxZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9E
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNjUsMTQgKzY1LDk1IEBAIHN0YXRpYyBib29s
IGlzVGFibGVSb3dFbXB0eShOb2RlKiByb3cpCiB7CiAgICAgaWYgKCFpc1RhYmxlUm93KHJvdykp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgZm9yIChOb2RlKiBjaGlsZCA9
IHJvdy0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkK
LSAgICAgICAgaWYgKGlzVGFibGVDZWxsKGNoaWxkKSAmJiAhaXNUYWJsZUNlbGxFbXB0eShjaGls
ZCkpCisKKyAgICBmb3IgKGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRyKHJvdy0+Zmlyc3RDaGlsZCgp
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGlz
VGFibGVDZWxsKGNoaWxkLmdldCgpKSAmJiAhaXNUYWJsZUNlbGxFbXB0eShjaGlsZC5nZXQoKSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisgICAgfQorCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK3N0YXRpYyBib29sIGlzU3BlY2lhbEhUTUxFbGVtZW50KGNvbnN0IE5vZGUmIG5v
ZGUpCit7CisgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlIHNjcmlwdERpc2FsbG93ZWRTY29wZTsK
KworICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUpLmlzTGluaygpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8SFRNTEVsZW1l
bnQ+KG5vZGUpLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLmRpc3BsYXkoKSA9PSBEaXNwbGF5
VHlwZTo6VGFibGUgfHwgcmVuZGVyZXItPnN0eWxlKCkuZGlzcGxheSgpID09IERpc3BsYXlUeXBl
OjpJbmxpbmVUYWJsZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVuZGVyZXIt
PnN0eWxlKCkuaXNGbG9hdGluZygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChy
ZW5kZXJlci0+c3R5bGUoKS5wb3NpdGlvbigpICE9IFBvc2l0aW9uVHlwZTo6U3RhdGljKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIFJlZlB0
cjxIVE1MRWxlbWVudD4gZmlyc3RJblNwZWNpYWxFbGVtZW50KGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbikKK3sKKyAgICBhdXRvIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBtYWtlUmVmUHRyKHBvc2l0
aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSk7CisgICAgZm9yIChhdXRvIG5vZGUgPSBtYWtlUmVm
UHRyKHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpOyBub2RlICYmIG5vZGUtPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKSA9PSByb290RWRpdGFibGVFbGVtZW50OyBub2RlID0gbm9kZS0+cGFyZW50Tm9k
ZSgpKSB7CisgICAgICAgIGlmICghaXNTcGVjaWFsSFRNTEVsZW1lbnQoKm5vZGUpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24g
PSBwb3NpdGlvbjsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5FbGVtZW50ID0gZmly
c3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUuZ2V0KCkpOworICAgICAgICBpZiAoKGlzUmVu
ZGVyZWRUYWJsZShub2RlLmdldCgpKSAmJiB2aXNpYmxlUG9zaXRpb24gPT0gZmlyc3RJbkVsZW1l
bnQubmV4dCgpKSB8fCB2aXNpYmxlUG9zaXRpb24gPT0gZmlyc3RJbkVsZW1lbnQpIHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzPEhUTUxFbGVtZW50Pihub2RlKSk7CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxIVE1MRWxlbWVudD4obm9kZSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBSZWZQdHI8SFRNTEVs
ZW1lbnQ+IGxhc3RJblNwZWNpYWxFbGVtZW50KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKK3sK
KyAgICBhdXRvIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBtYWtlUmVmUHRyKHBvc2l0aW9uLnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKSk7CisgICAgZm9yIChhdXRvIG5vZGUgPSBtYWtlUmVmUHRyKHBvc2l0
aW9uLmRlcHJlY2F0ZWROb2RlKCkpOyBub2RlICYmIG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQo
KSA9PSByb290RWRpdGFibGVFbGVtZW50OyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Cisg
ICAgICAgIGlmICghaXNTcGVjaWFsSFRNTEVsZW1lbnQoKm5vZGUpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24gPSBwb3NpdGlv
bjsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkVsZW1lbnQgPSBsYXN0UG9zaXRpb25J
bk9yQWZ0ZXJOb2RlKG5vZGUuZ2V0KCkpOworICAgICAgICBpZiAoKGlzUmVuZGVyZWRUYWJsZShu
b2RlLmdldCgpKSAmJiB2aXNpYmxlUG9zaXRpb24gPT0gbGFzdEluRWxlbWVudC5wcmV2aW91cygp
KSB8fCB2aXNpYmxlUG9zaXRpb24gPT0gbGFzdEluRWxlbWVudCkgeworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKTsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfcG9pbnRlcl9jYXN0PEhUTUxFbGVtZW50Pihub2RlKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIHN0ZDo6cGFpcjxQb3NpdGlvbiwgUmVm
UHRyPEhUTUxFbGVtZW50Pj4gcG9zaXRpb25CZWZvcmVDb250YWluaW5nU3BlY2lhbEVsZW1lbnQo
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIGF1dG8gZWxlbWVudCA9IGZpcnN0SW5T
cGVjaWFsRWxlbWVudChwb3NpdGlvbik7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1
cm4geyBwb3NpdGlvbiwgbnVsbHB0ciB9OworICAgIGF1dG8gcmVzdWx0ID0gcG9zaXRpb25JblBh
cmVudEJlZm9yZU5vZGUoZWxlbWVudC5nZXQoKSk7CisgICAgaWYgKHJlc3VsdC5pc051bGwoKSB8
fCByZXN1bHQuY29udGFpbmVyTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gcG9zaXRp
b24uY29udGFpbmVyTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkpCisgICAgICAgIHJldHVy
biB7IHBvc2l0aW9uLCBudWxscHRyIH07CisgICAgcmV0dXJuIHsgcmVzdWx0LCBXVEZNb3ZlKGVs
ZW1lbnQpIH07Cit9CisKK3N0YXRpYyBzdGQ6OnBhaXI8UG9zaXRpb24sIFJlZlB0cjxIVE1MRWxl
bWVudD4+IHBvc2l0aW9uQWZ0ZXJDb250YWluaW5nU3BlY2lhbEVsZW1lbnQoY29uc3QgUG9zaXRp
b24mIHBvc2l0aW9uKQoreworICAgIGF1dG8gZWxlbWVudCA9IGxhc3RJblNwZWNpYWxFbGVtZW50
KHBvc2l0aW9uKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiB7IHBvc2l0aW9u
LCBudWxscHRyIH07CisgICAgYXV0byByZXN1bHQgPSBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2Rl
KGVsZW1lbnQuZ2V0KCkpOworICAgIGlmIChyZXN1bHQuaXNOdWxsKCkgfHwgcmVzdWx0LmRlcHJl
Y2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBwb3NpdGlvbi5jb250YWluZXJO
b2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHsgcG9zaXRpb24s
IG51bGxwdHIgfTsKKyAgICByZXR1cm4geyByZXN1bHQsIFdURk1vdmUoZWxlbWVudCkgfTsKK30K
KwogRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZChEb2N1bWVu
dCYgZG9jdW1lbnQsIGJvb2wgc21hcnREZWxldGUsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0
ZSwgYm9vbCByZXBsYWNlLCBib29sIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50cywgYm9vbCBzYW5p
dGl6ZU1hcmt1cCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogICAgIDogQ29tcG9zaXRlRWRp
dENvbW1hbmQoZG9jdW1lbnQsIGVkaXRpbmdBY3Rpb24pCiAgICAgLCBtX2hhc1NlbGVjdGlvblRv
RGVsZXRlKGZhbHNlKQpAQCAtMTAzLDEwICsxODQsNyBAQCBEZWxldGVTZWxlY3Rpb25Db21tYW5k
OjpEZWxldGVTZWxlY3Rpb25Db21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
bgogfQogCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmluaXRpYWxpemVTdGFydEVuZChQ
b3NpdGlvbiYgc3RhcnQsIFBvc2l0aW9uJiBlbmQpCi17Ci0gICAgSFRNTEVsZW1lbnQqIHN0YXJ0
U3BlY2lhbENvbnRhaW5lciA9IG51bGxwdHI7Ci0gICAgSFRNTEVsZW1lbnQqIGVuZFNwZWNpYWxD
b250YWluZXIgPSBudWxscHRyOwotIAoreyAKICAgICBzdGFydCA9IG1fc2VsZWN0aW9uVG9EZWxl
dGUuc3RhcnQoKTsKICAgICBlbmQgPSBtX3NlbGVjdGlvblRvRGVsZXRlLmVuZCgpOwogIApAQCAt
MTIyLDEyICsyMDAsOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmluaXRpYWxpemVT
dGFydEVuZChQb3NpdGlvbiYgc3RhcnQsIFBvc2l0aW9uJiBlbmQpCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICB3aGlsZSAoMSkgewotICAgICAgICBzdGFydFNwZWNpYWxDb250YWluZXIgPSBu
dWxscHRyOwotICAgICAgICBlbmRTcGVjaWFsQ29udGFpbmVyID0gbnVsbHB0cjsKLSAgICAKLSAg
ICAgICAgUG9zaXRpb24gcyA9IHBvc2l0aW9uQmVmb3JlQ29udGFpbmluZ1NwZWNpYWxFbGVtZW50
KHN0YXJ0LCAmc3RhcnRTcGVjaWFsQ29udGFpbmVyKTsKLSAgICAgICAgUG9zaXRpb24gZSA9IHBv
c2l0aW9uQWZ0ZXJDb250YWluaW5nU3BlY2lhbEVsZW1lbnQoZW5kLCAmZW5kU3BlY2lhbENvbnRh
aW5lcik7Ci0gICAgICAgIAorICAgICAgICBhdXRvIFtzdGFydEJlZm9yZVNwZWNpYWxFbGVtZW50
LCBzdGFydFNwZWNpYWxDb250YWluZXJdID0gcG9zaXRpb25CZWZvcmVDb250YWluaW5nU3BlY2lh
bEVsZW1lbnQoc3RhcnQpOworICAgICAgICBhdXRvIFtlbmRBZnRlclNwZWNpYWxFbGVtZW50LCBl
bmRTcGVjaWFsQ29udGFpbmVyXSA9IHBvc2l0aW9uQWZ0ZXJDb250YWluaW5nU3BlY2lhbEVsZW1l
bnQoZW5kKTsKKwogICAgICAgICBpZiAoIXN0YXJ0U3BlY2lhbENvbnRhaW5lciAmJiAhZW5kU3Bl
Y2lhbENvbnRhaW5lcikKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0xMzcsMjQgKzIxMiwyNCBA
QCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmluaXRpYWxpemVTdGFydEVuZChQb3NpdGlv
biYgc3RhcnQsIFBvc2l0aW9uJiBlbmQpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAv
LyBJZiB3ZSdyZSBnb2luZyB0byBleHBhbmQgdG8gaW5jbHVkZSB0aGUgc3RhcnRTcGVjaWFsQ29u
dGFpbmVyLCBpdCBtdXN0IGJlIGZ1bGx5IHNlbGVjdGVkLgotICAgICAgICBpZiAoc3RhcnRTcGVj
aWFsQ29udGFpbmVyICYmICFlbmRTcGVjaWFsQ29udGFpbmVyICYmIHBvc2l0aW9uSW5QYXJlbnRB
ZnRlck5vZGUoc3RhcnRTcGVjaWFsQ29udGFpbmVyKSA+PSBlbmQpCisgICAgICAgIGlmIChzdGFy
dFNwZWNpYWxDb250YWluZXIgJiYgIWVuZFNwZWNpYWxDb250YWluZXIgJiYgcG9zaXRpb25JblBh
cmVudEFmdGVyTm9kZShzdGFydFNwZWNpYWxDb250YWluZXIuZ2V0KCkpID49IGVuZCkKICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8vIElmIHdlJ3JlIGdvaW5nIHRvIGV4cGFuZCB0byBp
bmNsdWRlIHRoZSBlbmRTcGVjaWFsQ29udGFpbmVyLCBpdCBtdXN0IGJlIGZ1bGx5IHNlbGVjdGVk
LgotICAgICAgICBpZiAoZW5kU3BlY2lhbENvbnRhaW5lciAmJiAhc3RhcnRTcGVjaWFsQ29udGFp
bmVyICYmIHN0YXJ0ID49IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKGVuZFNwZWNpYWxDb250
YWluZXIpKQorICAgICAgICBpZiAoZW5kU3BlY2lhbENvbnRhaW5lciAmJiAhc3RhcnRTcGVjaWFs
Q29udGFpbmVyICYmIHN0YXJ0ID49IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKGVuZFNwZWNp
YWxDb250YWluZXIuZ2V0KCkpKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgaWYgKHN0
YXJ0U3BlY2lhbENvbnRhaW5lciAmJiBzdGFydFNwZWNpYWxDb250YWluZXItPmlzRGVzY2VuZGFu
dE9mKGVuZFNwZWNpYWxDb250YWluZXIpKQorICAgICAgICBpZiAoc3RhcnRTcGVjaWFsQ29udGFp
bmVyICYmIHN0YXJ0U3BlY2lhbENvbnRhaW5lci0+aXNEZXNjZW5kYW50T2YoZW5kU3BlY2lhbENv
bnRhaW5lci5nZXQoKSkpIHsKICAgICAgICAgICAgIC8vIERvbid0IGFkanVzdCB0aGUgZW5kIHll
dCwgaXQgaXMgdGhlIGVuZCBvZiBhIHNwZWNpYWwgZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBz
dGFydAogICAgICAgICAgICAgLy8gc3BlY2lhbCBlbGVtZW50ICh3aGljaCBtYXkgb3IgbWF5IG5v
dCBiZSBmdWxseSBzZWxlY3RlZCkuCi0gICAgICAgICAgICBzdGFydCA9IHM7Ci0gICAgICAgIGVs
c2UgaWYgKGVuZFNwZWNpYWxDb250YWluZXIgJiYgZW5kU3BlY2lhbENvbnRhaW5lci0+aXNEZXNj
ZW5kYW50T2Yoc3RhcnRTcGVjaWFsQ29udGFpbmVyKSkKKyAgICAgICAgICAgIHN0YXJ0ID0gc3Rh
cnRCZWZvcmVTcGVjaWFsRWxlbWVudDsKKyAgICAgICAgfSBlbHNlIGlmIChlbmRTcGVjaWFsQ29u
dGFpbmVyICYmIGVuZFNwZWNpYWxDb250YWluZXItPmlzRGVzY2VuZGFudE9mKHN0YXJ0U3BlY2lh
bENvbnRhaW5lci5nZXQoKSkpIHsKICAgICAgICAgICAgIC8vIERvbid0IGFkanVzdCB0aGUgc3Rh
cnQgeWV0LCBpdCBpcyB0aGUgc3RhcnQgb2YgYSBzcGVjaWFsIGVsZW1lbnQgdGhhdCBjb250YWlu
cyB0aGUgZW5kCiAgICAgICAgICAgICAvLyBzcGVjaWFsIGVsZW1lbnQgKHdoaWNoIG1heSBvciBt
YXkgbm90IGJlIGZ1bGx5IHNlbGVjdGVkKS4KLSAgICAgICAgICAgIGVuZCA9IGU7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgc3RhcnQgPSBzOwotICAgICAgICAgICAgZW5kID0gZTsKKyAg
ICAgICAgICAgIGVuZCA9IGVuZEFmdGVyU3BlY2lhbEVsZW1lbnQ7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBzdGFydCA9IHN0YXJ0QmVmb3JlU3BlY2lhbEVsZW1lbnQ7CisgICAgICAg
ICAgICBlbmQgPSBlbmRBZnRlclNwZWNpYWxFbGVtZW50OwogICAgICAgICB9CiAgICAgfQogfQpA
QCAtMjQ1LDggKzMyMCw4IEBAIGJvb2wgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aW5pdGlhbGl6
ZVBvc2l0aW9uRGF0YSgpCiAgICAgLy8gRG9uJ3QgbW92ZSBjb250ZW50IG91dCBvZiBhIHRhYmxl
IGNlbGwuCiAgICAgLy8gSWYgdGhlIGNlbGwgaXMgbm9uLWVkaXRhYmxlLCBlbmNsb3NpbmdOb2Rl
T2ZUeXBlIHdvbid0IHJldHVybiBpdCBieSBkZWZhdWx0LCBzbwogICAgIC8vIHRlbGwgdGhhdCBm
dW5jdGlvbiB0aGF0IHdlIGRvbid0IGNhcmUgaWYgaXQgcmV0dXJucyBub24tZWRpdGFibGUgbm9k
ZXMuCi0gICAgTm9kZSogc3RhcnRDZWxsID0gZW5jbG9zaW5nTm9kZU9mVHlwZShtX3Vwc3RyZWFt
U3RhcnQsICZpc1RhYmxlQ2VsbCwgQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgIE5vZGUq
IGVuZENlbGwgPSBlbmNsb3NpbmdOb2RlT2ZUeXBlKG1fZG93bnN0cmVhbUVuZCwgJmlzVGFibGVD
ZWxsLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAgYXV0byBzdGFydENlbGwgPSBtYWtl
UmVmUHRyKGVuY2xvc2luZ05vZGVPZlR5cGUobV91cHN0cmVhbVN0YXJ0LCAmaXNUYWJsZUNlbGws
IENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KSk7CisgICAgYXV0byBlbmRDZWxsID0gbWFrZVJlZlB0
cihlbmNsb3NpbmdOb2RlT2ZUeXBlKG1fZG93bnN0cmVhbUVuZCwgJmlzVGFibGVDZWxsLCBDYW5D
cm9zc0VkaXRpbmdCb3VuZGFyeSkpOwogICAgIC8vIEZJWE1FOiBUaGlzIGlzbid0IHJpZ2h0LiAg
QSBib3JkZXJsZXNzIHRhYmxlIHdpdGggdHdvIHJvd3MgYW5kIGEgc2luZ2xlIGNvbHVtbiB3b3Vs
ZCBhcHBlYXIgYXMgdHdvIHBhcmFncmFwaHMuCiAgICAgaWYgKGVuZENlbGwgJiYgZW5kQ2VsbCAh
PSBzdGFydENlbGwpCiAgICAgICAgIG1fbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSA9IGZhbHNlOwpA
QCAtMzU4LDEwICs0MzMsMTAgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlw
aW5nU3R5bGVTdGF0ZSgpCiAKIGJvb2wgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3Bl
Y2lhbENhc2VCUkRlbGV0ZSgpCiB7Ci0gICAgTm9kZSogbm9kZUFmdGVyVXBzdHJlYW1TdGFydCA9
IG1fdXBzdHJlYW1TdGFydC5jb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKTsKLSAgICBOb2RlKiBu
b2RlQWZ0ZXJEb3duc3RyZWFtU3RhcnQgPSBtX2Rvd25zdHJlYW1TdGFydC5jb21wdXRlTm9kZUFm
dGVyUG9zaXRpb24oKTsKKyAgICBhdXRvIG5vZGVBZnRlclVwc3RyZWFtU3RhcnQgPSBtYWtlUmVm
UHRyKG1fdXBzdHJlYW1TdGFydC5jb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKSk7CisgICAgYXV0
byBub2RlQWZ0ZXJEb3duc3RyZWFtU3RhcnQgPSBtYWtlUmVmUHRyKG1fZG93bnN0cmVhbVN0YXJ0
LmNvbXB1dGVOb2RlQWZ0ZXJQb3NpdGlvbigpKTsKICAgICAvLyBVcHN0cmVhbSBlbmQgd2lsbCBh
cHBlYXIgYmVmb3JlIEJSIGR1ZSB0byBjYW5vbmljYWxpemF0aW9uCi0gICAgTm9kZSogbm9kZUFm
dGVyVXBzdHJlYW1FbmQgPSBtX3Vwc3RyZWFtRW5kLmNvbXB1dGVOb2RlQWZ0ZXJQb3NpdGlvbigp
OworICAgIGF1dG8gbm9kZUFmdGVyVXBzdHJlYW1FbmQgPSBtYWtlUmVmUHRyKG1fdXBzdHJlYW1F
bmQuY29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKCkpOwogCiAgICAgaWYgKCFub2RlQWZ0ZXJVcHN0
cmVhbVN0YXJ0IHx8ICFub2RlQWZ0ZXJEb3duc3RyZWFtU3RhcnQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTM4MSw3ICs0NTYsNyBAQCBib29sIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Omhh
bmRsZVNwZWNpYWxDYXNlQlJEZWxldGUoKQogICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24n
dCBiZWxvbmcgaW4gaGVyZS4KICAgICAvLyBXZSBkZXRlY3QgdGhlIGNhc2Ugd2hlcmUgdGhlIHN0
YXJ0IGlzIGFuIGVtcHR5IGxpbmUgY29uc2lzdGluZyBvZiBCUiBub3Qgd3JhcHBlZCBpbiBhIGJs
b2NrIGVsZW1lbnQuCiAgICAgaWYgKHVwc3RyZWFtU3RhcnRJc0JSICYmIGRvd25zdHJlYW1TdGFy
dElzQlIKLSAgICAgICAgJiYgIShpc1N0YXJ0T2ZCbG9jayhwb3NpdGlvbkJlZm9yZU5vZGUobm9k
ZUFmdGVyVXBzdHJlYW1TdGFydCkpICYmIGlzRW5kT2ZCbG9jayhwb3NpdGlvbkFmdGVyTm9kZShu
b2RlQWZ0ZXJEb3duc3RyZWFtU3RhcnQpKSkKKyAgICAgICAgJiYgIShpc1N0YXJ0T2ZCbG9jayhw
b3NpdGlvbkJlZm9yZU5vZGUobm9kZUFmdGVyVXBzdHJlYW1TdGFydC5nZXQoKSkpICYmIGlzRW5k
T2ZCbG9jayhwb3NpdGlvbkFmdGVyTm9kZShub2RlQWZ0ZXJEb3duc3RyZWFtU3RhcnQuZ2V0KCkp
KSkKICAgICAgICAgJiYgKCFub2RlQWZ0ZXJVcHN0cmVhbUVuZCB8fCBub2RlQWZ0ZXJVcHN0cmVh
bUVuZC0+aGFzVGFnTmFtZShiclRhZykgfHwgbm9kZUFmdGVyVXBzdHJlYW1FbmQtPnByZXZpb3Vz
U2libGluZygpICE9IG5vZGVBZnRlclVwc3RyZWFtU3RhcnQpKSB7CiAgICAgICAgIG1fc3RhcnRz
QXRFbXB0eUxpbmUgPSB0cnVlOwogICAgICAgICBtX2VuZGluZ1Bvc2l0aW9uID0gbV9kb3duc3Ry
ZWFtRW5kOwpAQCAtMzkzLDIwICs0NjgsMjMgQEAgYm9vbCBEZWxldGVTZWxlY3Rpb25Db21tYW5k
OjpoYW5kbGVTcGVjaWFsQ2FzZUJSRGVsZXRlKCkKIHN0YXRpYyBQb3NpdGlvbiBmaXJzdEVkaXRh
YmxlUG9zaXRpb25Jbk5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7Ci0gICAg
Tm9kZSogbmV4dCA9IG5vZGU7CisgICAgYXV0byBuZXh0ID0gbWFrZVJlZlB0cihub2RlKTsKICAg
ICB3aGlsZSAobmV4dCAmJiAhbmV4dC0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICBuZXh0
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbmV4dCwgbm9kZSk7Ci0gICAgcmV0dXJuIG5leHQgPyBm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobmV4dCkgOiBQb3NpdGlvbigpOworICAgIHJldHVy
biBuZXh0ID8gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5leHQuZ2V0KCkpIDogUG9zaXRp
b24oKTsKIH0KIAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRCbG9ja1BsYWNl
aG9sZGVyRm9yVGFibGVDZWxsSWZOZWVkZWQoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAvLyBN
YWtlIHN1cmUgZW1wdHkgY2VsbCBoYXMgc29tZSBoZWlnaHQuCi0gICAgYXV0byogcmVuZGVyZXIg
PSBlbGVtZW50LnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFpczxSZW5kZXJUYWJsZUNlbGw+KHJlbmRl
cmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+
KCpyZW5kZXJlcikuY29udGVudEhlaWdodCgpID4gMCkKLSAgICAgICAgcmV0dXJuOworICAgIHsK
KyAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKKyAg
ICAgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgICAgIGlmICgh
aXM8UmVuZGVyVGFibGVDZWxsPihyZW5kZXJlcikpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGlmIChkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KCpyZW5kZXJlcikuY29udGVudEhlaWdo
dCgpID4gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaW5zZXJ0QmxvY2tQbGFj
ZWhvbGRlcihmaXJzdEVkaXRhYmxlUG9zaXRpb25Jbk5vZGUoJmVsZW1lbnQpKTsKIH0KICAgICAK
QEAgLTQ0MCwxNCArNTE4LDE0IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3Zl
Tm9kZShOb2RlJiBub2RlLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFCiAgICAgICAgICAg
ICBpZiAoIW5vZGUuZmlyc3RDaGlsZCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIC8vIFNlYXJjaCB0aGlzIG5vbi1lZGl0YWJsZSByZWdpb24gZm9yIGVkaXRhYmxlIHJl
Z2lvbnMgdG8gZW1wdHkuCi0gICAgICAgICAgICBSZWZQdHI8Tm9kZT4gY2hpbGQgPSBub2RlLmZp
cnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRyKG5vZGUuZmly
c3RDaGlsZCgpKTsKICAgICAgICAgICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICAgICAgICAg
IFJlZlB0cjxOb2RlPiBuZXh0Q2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIG5leHRDaGlsZCA9IG1ha2VSZWZQdHIoY2hpbGQtPm5leHRTaWJsaW5nKCkp
OwogICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoKmNoaWxkLCBzaG91bGRBc3N1bWVDb250ZW50
SXNBbHdheXNFZGl0YWJsZSk7CiAgICAgICAgICAgICAgICAgLy8gQmFpbCBpZiBuZXh0Q2hpbGQg
aXMgbm8gbG9uZ2VyIG5vZGUncyBjaGlsZC4KICAgICAgICAgICAgICAgICBpZiAobmV4dENoaWxk
ICYmIG5leHRDaGlsZC0+cGFyZW50Tm9kZSgpICE9ICZub2RlKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgY2hpbGQgPSBuZXh0Q2hpbGQ7CisgICAgICAgICAg
ICAgICAgY2hpbGQgPSBXVEZNb3ZlKG5leHRDaGlsZCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIC8vIERvbid0IHJlbW92ZSBlZGl0YWJsZSByZWdpb25zIHRoYXQg
YXJlIGluc2lkZSBub24tZWRpdGFibGUgb25lcywganVzdCBjbGVhciB0aGVtLgpAQCAtNDU4LDI2
ICs1MzYsMjYgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKE5vZGUm
IG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0UKICAgICBpZiAoc2hvdWxkUmVtb3Zl
Q29udGVudE9ubHkobm9kZSkpIHsKICAgICAgICAgLy8gRG8gbm90IHJlbW92ZSBhbiBlbGVtZW50
IG9mIHRhYmxlIHN0cnVjdHVyZTsgcmVtb3ZlIGl0cyBjb250ZW50cy4KICAgICAgICAgLy8gTGlr
ZXdpc2UgZm9yIHRoZSByb290IGVkaXRhYmxlIGVsZW1lbnQuCi0gICAgICAgIGF1dG8qIGNoaWxk
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCAmbm9kZSk7CisgICAgICAgIGF1dG8gY2hpbGQg
PSBtYWtlUmVmUHRyKE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgJm5vZGUpKTsKICAgICAgICAg
d2hpbGUgKGNoaWxkKSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQ29udGVudE9ubHko
KmNoaWxkKSkgewogICAgICAgICAgICAgICAgIGNoaWxkID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgq
Y2hpbGQsICZub2RlKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGF1dG8qIHJlbW92ZSA9IGNoaWxkOwotICAgICAgICAgICAgY2hpbGQgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqY2hpbGQsICZub2RlKTsKLSAgICAg
ICAgICAgIHJlbW92ZU5vZGVVcGRhdGluZ1N0YXRlcygqcmVtb3ZlLCBzaG91bGRBc3N1bWVDb250
ZW50SXNBbHdheXNFZGl0YWJsZSk7CisgICAgICAgICAgICBhdXRvIG5leHRDaGlsZCA9IG1ha2VS
ZWZQdHIoTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKmNoaWxkLCAmbm9kZSkp
OworICAgICAgICAgICAgcmVtb3ZlTm9kZVVwZGF0aW5nU3RhdGVzKCpjaGlsZCwgc2hvdWxkQXNz
dW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOworICAgICAgICAgICAgY2hpbGQgPSBXVEZNb3Zl
KG5leHRDaGlsZCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEFTU0VSVChpczxFbGVt
ZW50Pihub2RlKSk7CiAgICAgICAgIGF1dG8mIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pihu
b2RlKTsKICAgICAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBpbnNlcnQgYSBwbGFjZWhv
bGRlciBmb3IgZGVzY2VuZGFudCB0YWJsZSBjZWxscy4KLSAgICAgICAgYXV0byogZGVzY2VuZGFu
dCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCwgJmVsZW1lbnQpOworICAgICAgICBh
dXRvIGRlc2NlbmRhbnQgPSBtYWtlUmVmUHRyKEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVu
dCwgJmVsZW1lbnQpKTsKICAgICAgICAgd2hpbGUgKGRlc2NlbmRhbnQpIHsKLSAgICAgICAgICAg
IGF1dG8qIHBsYWNlaG9sZGVyQ2FuZGlkYXRlID0gZGVzY2VuZGFudDsKLSAgICAgICAgICAgIGRl
c2NlbmRhbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KCpkZXNjZW5kYW50LCAmZWxlbWVudCk7
Ci0gICAgICAgICAgICBpbnNlcnRCbG9ja1BsYWNlaG9sZGVyRm9yVGFibGVDZWxsSWZOZWVkZWQo
KnBsYWNlaG9sZGVyQ2FuZGlkYXRlKTsKKyAgICAgICAgICAgIGF1dG8gbmV4dERlc2NlbmRhbnQg
PSBtYWtlUmVmUHRyKEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoKmRlc2NlbmRhbnQsICZlbGVtZW50
KSk7CisgICAgICAgICAgICBpbnNlcnRCbG9ja1BsYWNlaG9sZGVyRm9yVGFibGVDZWxsSWZOZWVk
ZWQoKmRlc2NlbmRhbnQpOworICAgICAgICAgICAgZGVzY2VuZGFudCA9IFdURk1vdmUobmV4dERl
c2NlbmRhbnQpOwogICAgICAgICB9CiAgICAgICAgIGluc2VydEJsb2NrUGxhY2Vob2xkZXJGb3JU
YWJsZUNlbGxJZk5lZWRlZChlbGVtZW50KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTM1LDggKzYx
Myw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGludCBzdGFydE9mZnNldCA9IG1fdXBzdHJlYW1TdGFy
dC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IG1fdXBz
dHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpOwotICAgIAorICAgIGF1dG8gc3RhcnROb2RlID0g
bWFrZVJlZlB0cihtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7CisKICAgICBtYWtl
U3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxl
TG9zcygpOwogCiAgICAgLy8gTmV2ZXIgcmVtb3ZlIHRoZSBzdGFydCBibG9jayB1bmxlc3MgaXQn
cyBhIHRhYmxlLCBpbiB3aGljaCBjYXNlIHdlIHdvbid0IG1lcmdlIGNvbnRlbnQgaW4uCkBAIC01
ODIsMTkgKzY2MCwxOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVy
YWxEZWxldGUoKQogICAgIGVsc2UgewogICAgICAgICBib29sIHN0YXJ0Tm9kZVdhc0Rlc2NlbmRh
bnRPZkVuZE5vZGUgPSBtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5k
YW50T2YobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICAvLyBUaGUg
c2VsZWN0aW9uIHRvIGRlbGV0ZSBzcGFucyBtb3JlIHRoYW4gb25lIG5vZGUuCi0gICAgICAgIFJl
ZlB0cjxOb2RlPiBub2RlKHN0YXJ0Tm9kZSk7CisgICAgICAgIGF1dG8gbm9kZSA9IHN0YXJ0Tm9k
ZS5jb3B5UmVmKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPiAwKSB7Ci0g
ICAgICAgICAgICBpZiAoaXM8VGV4dD4oKnN0YXJ0Tm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChp
czxUZXh0Pigqbm9kZSkpIHsKICAgICAgICAgICAgICAgICAvLyBpbiBhIHRleHQgbm9kZSB0aGF0
IG5lZWRzIHRvIGJlIHRyaW1tZWQKLSAgICAgICAgICAgICAgICBUZXh0JiB0ZXh0ID0gZG93bmNh
c3Q8VGV4dD4oKm5vZGUpOworICAgICAgICAgICAgICAgIFRleHQmIHRleHQgPSBkb3duY2FzdDxU
ZXh0Pigqc3RhcnROb2RlKTsKICAgICAgICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUodGV4
dCwgc3RhcnRPZmZzZXQsIHRleHQubGVuZ3RoKCkgLSBzdGFydE9mZnNldCk7Ci0gICAgICAgICAg
ICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpOworICAgICAgICAgICAgICAg
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpzdGFydE5vZGUpOwogICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICBub2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZVRvQ2hpbGRB
dChzdGFydE9mZnNldCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRO
b2RlID09IG1fdXBzdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBpczxUZXh0Pigqc3RhcnRO
b2RlKSkgewotICAgICAgICAgICAgVGV4dCYgdGV4dCA9IGRvd25jYXN0PFRleHQ+KCptX3Vwc3Ry
ZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICAgICAgVGV4dCYgdGV4dCA9IGRvd25j
YXN0PFRleHQ+KCpzdGFydE5vZGUpOwogICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRl
eHQsIDAsIG1fdXBzdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAg
IH0KICAgICAgICAgCkBAIC02MTEsOCArNjg5LDggQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAgICAgICAgICAgICByZW1vdmVOb2RlKCpu
b2RlKTsKICAgICAgICAgICAgICAgICBub2RlID0gbmV4dE5vZGUuZ2V0KCk7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBub2RlLT5sYXN0RGVzY2VuZGFu
dCgpOwotICAgICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUo
KSA9PSBuICYmIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNh
cmV0TWF4T2Zmc2V0KCpuKSkgeworICAgICAgICAgICAgICAgIGF1dG8gbGFzdERlc2NlbmRhbnQg
PSBtYWtlUmVmUHRyKG5vZGUtPmxhc3REZXNjZW5kYW50KCkpOworICAgICAgICAgICAgICAgIGlm
IChtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSA9PSBsYXN0RGVzY2VuZGFudCAmJiBt
X2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNl
dCgqbGFzdERlc2NlbmRhbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoKm5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICBub2RlID0gbnVsbHB0cjsKICAgICAgICAgICAgICAg
ICB9IGVsc2UKQEAgLTYzMCw5ICs3MDgsOCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogICAgICAgICAgICAgICAgIGlmIChpczxUZXh0PigqbV9k
b3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IGluIGEgdGV4dCBub2RlIHRoYXQgbmVlZHMgdG8gYmUgdHJpbW1lZAogICAgICAgICAgICAgICAg
ICAgICBUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm1fZG93bnN0cmVhbUVuZC5kZXByZWNh
dGVkTm9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9k
b3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPiAwKQogICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRleHQsIDAsIG1fZG93bnN0cmVhbUVuZC5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIC8vIFJlbW92ZSBjaGlsZHJlbiBvZiBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRl
ZE5vZGUoKSB0aGF0IGNvbWUgYWZ0ZXIgbV91cHN0cmVhbVN0YXJ0LgogICAgICAgICAgICAgICAg
IC8vIERvbid0IHRyeSB0byByZW1vdmUgY2hpbGRyZW4gaWYgbV91cHN0cmVhbVN0YXJ0IHdhcyBp
bnNpZGUgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkKICAgICAgICAgICAgICAgICAv
LyBhbmQgbV91cHN0cmVhbVN0YXJ0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZG9jdW1lbnQs
IGJlY2F1c2UgdGhlbiB3ZSBkb24ndCAKQEAgLTY0Miw3ICs3MTksNyBAQCB2b2lkIERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIShzdGFydE5vZGVXYXNEZXNjZW5kYW50T2ZFbmROb2RlICYmICFtX3Vwc3RyZWFt
U3RhcnQuYW5jaG9yTm9kZSgpLT5pc0Nvbm5lY3RlZCgpKSkgewogICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBvZmZzZXQgPSAwOwogICAgICAgICAgICAgICAgICAgICBpZiAobV91cHN0cmVh
bVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKG1fZG93bnN0cmVhbUVuZC5k
ZXByZWNhdGVkTm9kZSgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbiA9IG1f
dXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBuID0gbWFrZVJlZlB0cihtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5wYXJlbnROb2RlKCkgIT0gbV9k
b3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuKQpA
QCAtNzAyLDcgKzc3OSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJh
Z3JhcGhzKCkKICAgICAKICAgICAvLyBtX2Rvd25zdHJlYW1FbmQncyBibG9jayBoYXMgYmVlbiBl
bXB0aWVkIG91dCBieSBkZWxldGlvbi4gIFRoZXJlIGlzIG5vIGNvbnRlbnQgaW5zaWRlIG9mIGl0
IHRvCiAgICAgLy8gbW92ZSwgc28ganVzdCByZW1vdmUgaXQuCi0gICAgRWxlbWVudCogZW5kQmxv
Y2sgPSBlbmNsb3NpbmdCbG9jayhtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSk7Cisg
ICAgYXV0byBlbmRCbG9jayA9IG1ha2VSZWZQdHIoZW5jbG9zaW5nQmxvY2sobV9kb3duc3RyZWFt
RW5kLmRlcHJlY2F0ZWROb2RlKCkpKTsKICAgICBpZiAoIWVuZEJsb2NrKQogICAgICAgICByZXR1
cm47CiAKQEAgLTcyOSw3ICs4MDYsOCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1l
cmdlUGFyYWdyYXBocygpCiAgICAgLy8gRklYTUU6IENvbnNpZGVyIFJUTC4KICAgICBpZiAoIW1f
c3RhcnRzQXRFbXB0eUxpbmUgJiYgaXNTdGFydE9mUGFyYWdyYXBoKG1lcmdlRGVzdGluYXRpb24p
ICYmIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuYWJzb2x1dGVDYXJldEJvdW5kcygpLngoKSA+IG1l
cmdlRGVzdGluYXRpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpLngoKSkgewogICAgICAgICBpZiAo
bWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVk
Tm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkgewotICAgICAgICAgICAgcmVtb3ZlTm9kZUFuZFBy
dW5lQW5jZXN0b3JzKCptZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVh
bSgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICAgICAgYXV0byBub2RlVG9SZW1vdmUgPSBt
YWtlUmVmUHRyKG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCku
ZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3Rv
cnMoKm5vZGVUb1JlbW92ZSk7CiAgICAgICAgICAgICBtX2VuZGluZ1Bvc2l0aW9uID0gc3RhcnRP
ZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkBAIC03NjgsMjUgKzg0NiwyNiBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6Om1lcmdlUGFyYWdyYXBocygpCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92
ZVByZXZpb3VzbHlTZWxlY3RlZEVtcHR5VGFibGVSb3dzKCkKIHsKICAgICBpZiAobV9lbmRUYWJs
ZVJvdyAmJiBtX2VuZFRhYmxlUm93LT5pc0Nvbm5lY3RlZCgpICYmIG1fZW5kVGFibGVSb3cgIT0g
bV9zdGFydFRhYmxlUm93KSB7Ci0gICAgICAgIE5vZGUqIHJvdyA9IG1fZW5kVGFibGVSb3ctPnBy
ZXZpb3VzU2libGluZygpOworICAgICAgICBhdXRvIHJvdyA9IG1ha2VSZWZQdHIobV9lbmRUYWJs
ZVJvdy0+cHJldmlvdXNTaWJsaW5nKCkpOwogICAgICAgICB3aGlsZSAocm93ICYmIHJvdyAhPSBt
X3N0YXJ0VGFibGVSb3cpIHsKLSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBwcmV2aW91c1JvdyA9
IHJvdy0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAgICBpZiAoaXNUYWJsZVJvd0VtcHR5
KHJvdykpCisgICAgICAgICAgICBhdXRvIHByZXZpb3VzUm93ID0gbWFrZVJlZlB0cihyb3ctPnBy
ZXZpb3VzU2libGluZygpKTsKKyAgICAgICAgICAgIGlmIChpc1RhYmxlUm93RW1wdHkocm93Lmdl
dCgpKSkgewogICAgICAgICAgICAgICAgIC8vIFVzZSBhIHJhdyByZW1vdmVOb2RlLCBpbnN0ZWFk
IG9mIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQncywgYmVjYXVzZQogICAgICAgICAgICAgICAgIC8v
IHRoYXQgd29uJ3QgcmVtb3ZlIHJvd3MsIGl0IG9ubHkgZW1wdGllcyB0aGVtIGluIHByZXBhcmF0
aW9uIGZvciB0aGlzIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjpyZW1vdmVOb2RlKCpyb3cpOwotICAgICAgICAgICAgcm93ID0gcHJldmlvdXNSb3cuZ2V0
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByb3cgPSBXVEZNb3ZlKHByZXZpb3VzUm93
KTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICAvLyBSZW1vdmUgZW1wdHkgcm93cyBhZnRl
ciB0aGUgc3RhcnQgcm93LgogICAgIGlmIChtX3N0YXJ0VGFibGVSb3cgJiYgbV9zdGFydFRhYmxl
Um93LT5pc0Nvbm5lY3RlZCgpICYmIG1fc3RhcnRUYWJsZVJvdyAhPSBtX2VuZFRhYmxlUm93KSB7
Ci0gICAgICAgIE5vZGUqIHJvdyA9IG1fc3RhcnRUYWJsZVJvdy0+bmV4dFNpYmxpbmcoKTsKKyAg
ICAgICAgYXV0byByb3cgPSBtYWtlUmVmUHRyKG1fc3RhcnRUYWJsZVJvdy0+bmV4dFNpYmxpbmco
KSk7CiAgICAgICAgIHdoaWxlIChyb3cgJiYgcm93ICE9IG1fZW5kVGFibGVSb3cpIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0Um93ID0gcm93LT5uZXh0U2libGluZygpOwotICAgICAg
ICAgICAgaWYgKGlzVGFibGVSb3dFbXB0eShyb3cpKQorICAgICAgICAgICAgYXV0byBuZXh0Um93
ID0gbWFrZVJlZlB0cihyb3ctPm5leHRTaWJsaW5nKCkpOworICAgICAgICAgICAgaWYgKGlzVGFi
bGVSb3dFbXB0eShyb3cuZ2V0KCkpKQogICAgICAgICAgICAgICAgIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjpyZW1vdmVOb2RlKCpyb3cpOwotICAgICAgICAgICAgcm93ID0gbmV4dFJvdy5nZXQoKTsK
KyAgICAgICAgICAgIHJvdyA9IFdURk1vdmUobmV4dFJvdyk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTg1NCw2ICs5MzMsNyBAQCBTdHJpbmcgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6b3JpZ2lu
YWxTdHJpbmdGb3JBdXRvY29ycmVjdGlvbkF0QmVnaW5uaW5nT2ZTZWxlYwogICAgIGlmICghcmFu
Z2VPZkZpcnN0Q2hhcmFjdGVyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKKyAgICBTY3Jp
cHREaXNhbGxvd2VkU2NvcGUgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOwogICAgIGZvciAoYXV0byog
bWFya2VyIDogZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UoKnJhbmdlT2ZGaXJz
dENoYXJhY3RlciwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpKSB7CiAgICAgICAgIGlu
dCBzdGFydE9mZnNldCA9IG1hcmtlci0+c3RhcnRPZmZzZXQoKTsKICAgICAgICAgaWYgKHN0YXJ0
T2Zmc2V0ID09IHN0YXJ0T2ZTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQoKS5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSkKQEAgLTg5Niw5ICs5NzYsOCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6OmRvQXBwbHkoKQogCiAgICAgLy8gSWYgdGhlIGRlbGV0aW9uIGlzIG9jY3VycmluZyBpbiBh
IHRleHQgZmllbGQsIGFuZCB3ZSdyZSBub3QgZGVsZXRpbmcgdG8gcmVwbGFjZSB0aGUgc2VsZWN0
aW9uLCB0aGVuIGxldCB0aGUgZnJhbWUgY2FsbCBhY3Jvc3MgdGhlIGJyaWRnZSB0byBub3RpZnkg
dGhlIGZvcm0gZGVsZWdhdGUuIAogICAgIGlmICghbV9yZXBsYWNlKSB7Ci0gICAgICAgIEVsZW1l
bnQqIHRleHRDb250cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fc2VsZWN0aW9uVG9E
ZWxldGUuc3RhcnQoKSk7Ci0gICAgICAgIGlmICh0ZXh0Q29udHJvbCAmJiB0ZXh0Q29udHJvbC0+
Zm9jdXNlZCgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS50ZXh0V2lsbEJlRGVs
ZXRlZEluVGV4dEZpZWxkKHRleHRDb250cm9sKTsKKyAgICAgICAgaWYgKGF1dG8gdGV4dENvbnRy
b2wgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChtX3NlbGVjdGlvblRvRGVs
ZXRlLnN0YXJ0KCkpKTsgdGV4dENvbnRyb2wgJiYgdGV4dENvbnRyb2wtPmZvY3VzZWQoKSkKKyAg
ICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVs
ZCh0ZXh0Q29udHJvbC5nZXQoKSk7CiAgICAgfQogCiAgICAgLy8gc2F2ZSB0aGlzIHRvIGxhdGVy
IG1ha2UgdGhlIHNlbGVjdGlvbiB3aXRoCkBAIC05MTIsNyArOTkxLDcgQEAgdm9pZCBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgLy8gRG9uJ3QgbmVlZCBhIHBsYWNl
aG9sZGVyIHdoZW4gZGVsZXRpbmcgYSBzZWxlY3Rpb24gdGhhdCBzdGFydHMganVzdCBiZWZvcmUg
YSB0YWJsZQogICAgICAgICAvLyBhbmQgZW5kcyBpbnNpZGUgaXQgKHdlIGRvIG5lZWQgcGxhY2Vo
b2xkZXJzIHRvIGhvbGQgb3BlbiBlbXB0eSBjZWxscywgYnV0IHRoYXQncwogICAgICAgICAvLyBo
YW5kbGVkIGVsc2V3aGVyZSkuCi0gICAgICAgIGlmIChhdXRvKiB0YWJsZSA9IGlzTGFzdFBvc2l0
aW9uQmVmb3JlVGFibGUobV9zZWxlY3Rpb25Ub0RlbGV0ZS52aXNpYmxlU3RhcnQoKSkpIHsKKyAg
ICAgICAgaWYgKGF1dG8gdGFibGUgPSBtYWtlUmVmUHRyKGlzTGFzdFBvc2l0aW9uQmVmb3JlVGFi
bGUobV9zZWxlY3Rpb25Ub0RlbGV0ZS52aXNpYmxlU3RhcnQoKSkpKSB7CiAgICAgICAgICAgICBp
ZiAobV9zZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRh
bnRPZigqdGFibGUpKQogICAgICAgICAgICAgICAgIG1fbmVlZFBsYWNlaG9sZGVyID0gZmFsc2U7
CiAgICAgICAgIH0KQEAgLTk2MSw5ICsxMDQwLDkgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpkb0FwcGx5KCkKIAogICAgIGJvb2wgc2hvdWxkUmViYWxhY2VXaGl0ZVNwYWNlID0gdHJ1
ZTsKICAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRSZWJhbGFu
Y2VXaGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgewotICAgICAgICBOb2RlKiBub2RlID0gbV9l
bmRpbmdQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOwotICAgICAgICBpZiAoaXM8VGV4dD4obm9k
ZSkpIHsKLSAgICAgICAgICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUp
OworICAgICAgICBpZiAoYXV0byBlbmROb2RlID0gbWFrZVJlZlB0cihtX2VuZGluZ1Bvc2l0aW9u
LmRlcHJlY2F0ZWROb2RlKCkpOyBpczxUZXh0PihlbmROb2RlKSkgeworICAgICAgICAgICAgVGV4
dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0PigqZW5kTm9kZSk7CisgICAgICAgICAgICBTY3Jp
cHREaXNhbGxvd2VkU2NvcGUgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOwogICAgICAgICAgICAgaWYg
KHRleHROb2RlLmxlbmd0aCgpICYmIHRleHROb2RlLnJlbmRlcmVyKCkpCiAgICAgICAgICAgICAg
ICAgc2hvdWxkUmViYWxhY2VXaGl0ZVNwYWNlID0gdGV4dE5vZGUucmVuZGVyZXIoKS0+c3R5bGUo
KS50ZXh0U2VjdXJpdHkoKSA9PSBUZXh0U2VjdXJpdHk6Ok5vbmU7CiAgICAgICAgIH0gICAgICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5kZXggZTMzZGE1ODlkN2MyZGE1MGQ4YTY2
N2YwMzE5MDMzOWM0NWE2OTQ2My4uMzQ1NmE3NjlmMTg0NWUwOTQxOWM3YWM1NDFmZDk4M2MzYzAy
NGM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC00MDMsODQgKzQwMyw2IEBA
IGNvbnN0IFN0cmluZyYgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpCiAgICAgcmV0dXJuIG5vbkJy
ZWFraW5nU3BhY2VTdHJpbmc7CiB9CiAKLXN0YXRpYyBib29sIGlzU3BlY2lhbEhUTUxFbGVtZW50
KGNvbnN0IE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFpczxIVE1MRWxlbWVudD4obm9kZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChkb3duY2FzdDxIVE1MRWxlbWVudD4oKm5v
ZGUpLmlzTGluaygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGF1dG8qIHJlbmRlcmVy
ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpub2RlKS5yZW5kZXJlcigpOwotICAgIGlmICghcmVu
ZGVyZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChyZW5kZXJlci0+c3R5bGUo
KS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OlRhYmxlIHx8IHJlbmRlcmVyLT5zdHlsZSgpLmRp
c3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lVGFibGUpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLmlzRmxvYXRpbmcoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBpZiAocmVuZGVyZXItPnN0eWxlKCkucG9zaXRpb24oKSAhPSBQb3Np
dGlvblR5cGU6OlN0YXRpYykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXN0YXRpYyBIVE1MRWxlbWVudCogZmlyc3RJblNwZWNpYWxFbGVtZW50KGNvbnN0
IFBvc2l0aW9uJiBwb3NpdGlvbikKLXsKLSAgICBhdXRvKiByb290RWRpdGFibGVFbGVtZW50ID0g
cG9zaXRpb24uY29udGFpbmVyTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgZm9y
IChOb2RlKiBub2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsgbm9kZSAmJiBub2RlLT5y
b290RWRpdGFibGVFbGVtZW50KCkgPT0gcm9vdEVkaXRhYmxlRWxlbWVudDsgbm9kZSA9IG5vZGUt
PnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoIWlzU3BlY2lhbEhUTUxFbGVtZW50KG5vZGUp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2UG9zKHBv
c2l0aW9uKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5FbGVtZW50KGZpcnN0UG9z
aXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSk7Ci0gICAgICAgIGlmICgoaXNSZW5kZXJlZFRhYmxl
KG5vZGUpICYmIHZQb3MgPT0gZmlyc3RJbkVsZW1lbnQubmV4dCgpKSB8fCB2UG9zID09IGZpcnN0
SW5FbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuICZkb3duY2FzdDxIVE1MRWxlbWVudD4oKm5v
ZGUpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIEhUTUxFbGVtZW50
KiBsYXN0SW5TcGVjaWFsRWxlbWVudChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCi17Ci0gICAg
YXV0byogcm9vdEVkaXRhYmxlRWxlbWVudCA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKS0+cm9v
dEVkaXRhYmxlRWxlbWVudCgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlcHJl
Y2F0ZWROb2RlKCk7IG5vZGUgJiYgbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RF
ZGl0YWJsZUVsZW1lbnQ7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYg
KCFpc1NwZWNpYWxIVE1MRWxlbWVudChub2RlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gdlBvcyhwb3NpdGlvbik7Ci0gICAgICAgIFZpc2libGVQb3Np
dGlvbiBsYXN0SW5FbGVtZW50KGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobm9kZSkpOwotICAg
ICAgICBpZiAoKGlzUmVuZGVyZWRUYWJsZShub2RlKSAmJiB2UG9zID09IGxhc3RJbkVsZW1lbnQu
cHJldmlvdXMoKSkgfHwgdlBvcyA9PSBsYXN0SW5FbGVtZW50KQotICAgICAgICAgICAgcmV0dXJu
ICZkb3duY2FzdDxIVE1MRWxlbWVudD4oKm5vZGUpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotUG9zaXRpb24gcG9zaXRpb25CZWZvcmVDb250YWluaW5nU3BlY2lhbEVsZW1lbnQo
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBIVE1MRWxlbWVudCoqIGNvbnRhaW5pbmdTcGVjaWFs
RWxlbWVudCkKLXsKLSAgICBhdXRvKiBlbGVtZW50ID0gZmlyc3RJblNwZWNpYWxFbGVtZW50KHBv
c2l0aW9uKTsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybiBwb3NpdGlvbjsKLSAg
ICBQb3NpdGlvbiByZXN1bHQgPSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShlbGVtZW50KTsK
LSAgICBpZiAocmVzdWx0LmlzTnVsbCgpIHx8IHJlc3VsdC5kZXByZWNhdGVkTm9kZSgpLT5yb290
RWRpdGFibGVFbGVtZW50KCkgIT0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRh
YmxlRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gcG9zaXRpb247Ci0gICAgaWYgKGNvbnRhaW5p
bmdTcGVjaWFsRWxlbWVudCkKLSAgICAgICAgKmNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudCA9IGVs
ZW1lbnQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUG9zaXRpb24gcG9zaXRpb25BZnRlckNv
bnRhaW5pbmdTcGVjaWFsRWxlbWVudChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIEhUTUxFbGVt
ZW50KiogY29udGFpbmluZ1NwZWNpYWxFbGVtZW50KQotewotICAgIGF1dG8qIGVsZW1lbnQgPSBs
YXN0SW5TcGVjaWFsRWxlbWVudChwb3NpdGlvbik7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAg
ICByZXR1cm4gcG9zaXRpb247Ci0gICAgUG9zaXRpb24gcmVzdWx0ID0gcG9zaXRpb25JblBhcmVu
dEFmdGVyTm9kZShlbGVtZW50KTsKLSAgICBpZiAocmVzdWx0LmlzTnVsbCgpIHx8IHJlc3VsdC5k
ZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gcG9zaXRpb24uZGVwcmVj
YXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gcG9zaXRp
b247Ci0gICAgaWYgKGNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudCkKLSAgICAgICAgKmNvbnRhaW5p
bmdTcGVjaWFsRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogRWxl
bWVudCogaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBv
c2l0aW9uKQogewogICAgIFBvc2l0aW9uIHVwc3RyZWFtKHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkudXBzdHJlYW0oKSk7CkBAIC04MTAsOSArNzMyLDkgQEAgTm9kZSogbmV4dExlYWZOb2RlKGNv
bnN0IE5vZGUqIG5vZGUpCiAvLyBGSVhNRTogRG8gbm90IHJlcXVpcmUgcmVuZGVyZXIsIHNvIHRo
YXQgdGhpcyBjYW4gYmUgdXNlZCB3aXRoaW4gZnJhZ21lbnRzLgogYm9vbCBpc1JlbmRlcmVkVGFi
bGUoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAg
IGlmICghaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
YXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkucmVuZGVyZXIoKTsKKyAg
ICBhdXRvKiByZW5kZXJlciA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pigqbm9kZSkucmVuZGVyZXIo
KTsKICAgICByZXR1cm4gcmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzVGFibGUoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmggYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmcuaAppbmRleCBkMTQ0OGY5NTAyZmRlOWJhYWI3OGNmZTU3YjZiOGY2
ZjE4MmVkMDM1Li43OTEzYzZkOTgxNTJkNTA2ZGFkYWRmNmU4YTY1YmYyYzFiYTU2ZTQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmcuaApAQCAtMTE4LDkgKzExOCw2IEBAIFBvc2l0aW9uIHByZXZp
b3VzQ2FuZGlkYXRlKGNvbnN0IFBvc2l0aW9uJik7CiBQb3NpdGlvbiBuZXh0VmlzdWFsbHlEaXN0
aW5jdENhbmRpZGF0ZShjb25zdCBQb3NpdGlvbiYpOwogUG9zaXRpb24gcHJldmlvdXNWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKGNvbnN0IFBvc2l0aW9uJik7CiAKLVBvc2l0aW9uIHBvc2l0aW9u
QmVmb3JlQ29udGFpbmluZ1NwZWNpYWxFbGVtZW50KGNvbnN0IFBvc2l0aW9uJiwgSFRNTEVsZW1l
bnQqKiBjb250YWluaW5nU3BlY2lhbEVsZW1lbnQgPSBudWxscHRyKTsKLVBvc2l0aW9uIHBvc2l0
aW9uQWZ0ZXJDb250YWluaW5nU3BlY2lhbEVsZW1lbnQoY29uc3QgUG9zaXRpb24mLCBIVE1MRWxl
bWVudCoqIGNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudCA9IG51bGxwdHIpOwotCiBQb3NpdGlvbiBm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoTm9kZSopOwogUG9zaXRpb24gbGFzdFBvc2l0aW9u
SW5PckFmdGVyTm9kZShOb2RlKik7CiAK
</data>
<flag name="commit-queue"
          id="447460"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426996</attachid>
            <date>2021-04-24 19:34:54 -0700</date>
            <delta_ts>2021-04-24 19:35:07 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-225028-20210424193453.patch</filename>
            <type>text/plain</type>
            <size>30711</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTI2YjgwZmYwY2ViOGFi
NDY2YzAyZDM4YzU0OGU3ZDkwNTk0NmZlNC4uM2EzMTI0MDFlNDI4MGE4MDVhMjgzZWUwYTFkNWVl
M2FhNjJmY2FhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDIxLTA0LTI0ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERlcGxveSBSZWYvUmVmUHRy
IGluIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNTAyOAorCisgICAgICAgIFJldmlld2VkIGJ5IFdlbnNvbiBI
c2llaC4KKworICAgICAgICBEZXBsb3llZCBzbWFydCBwb2ludGVycyBpbiBEZWxldGVTZWxlY3Rp
b25Db21tYW5kLgorCisgICAgICAgIEFsc28gZGVwbG95ZWQgU2NyaXB0RGlzYWxsb3dlZFNjb3Bl
IGFyb3VuZCB0aGUgY29kZSB3aGljaCBhY2Nlc3NlcyB0aGUgcmVuZGVyIHRyZWUuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIHNpbmNlIHRoZXJlIHNob3VsZCBiZSBubyBvYnNlcnZhYmxlIGJlaGF2
aW9yYWwgZGlmZmVyZW5jZXMuCisKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNUYWJsZVJvd0VtcHR5KToKKyAgICAgICAg
KFdlYkNvcmU6OmlzU3BlY2lhbEhUTUxFbGVtZW50KTogTW92ZWQgZnJvbSBFZGl0aW5nLmNwcC4K
KyAgICAgICAgKFdlYkNvcmU6OmZpcnN0SW5TcGVjaWFsRWxlbWVudCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6bGFzdEluU3BlY2lhbEVsZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OnBvc2l0aW9uQmVmb3JlQ29udGFpbmluZ1NwZWNpYWxFbGVtZW50KTogRGl0dG8uIE5vdyBy
ZXR1cm5zIGEgcGFpciBpbnN0ZWFkIG9mIHJldHVybmluZworICAgICAgICBQb3NpdGlvbiBhbmQg
InJldHVybmluZyIgdGhlIHNwZWNpYWwgZWxlbWVudCB2aWEgYW4gb3V0IGFyZ3VtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6cG9zaXRpb25BZnRlckNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aW5pdGlhbGl6
ZVN0YXJ0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Omlu
aXRpYWxpemVQb3NpdGlvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6aGFuZGxlU3BlY2lhbENhc2VCUkRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpm
aXJzdEVkaXRhYmxlUG9zaXRpb25Jbk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6aW5zZXJ0QmxvY2tQbGFjZWhvbGRlckZvclRhYmxlQ2VsbElmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJh
bERlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJn
ZVBhcmFncmFwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
cmVtb3ZlUHJldmlvdXNseVNlbGVjdGVkRW1wdHlUYWJsZVJvd3MpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6b3JpZ2luYWxTdHJpbmdGb3JBdXRvY29ycmVjdGlv
bkF0QmVnaW5uaW5nT2ZTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmlzUmVuZGVyZWRUYWJsZSk6IFJldHVybiBmYWxzZSB3aGVuIHRoZSBu
b2RlIGlzIG5vdCBhIEhUTUxFbGVtZW50IGZvciBjb25zaXN0ZW5jeS4KKyAgICAgICAgKFdlYkNv
cmU6OmlzU3BlY2lhbEhUTUxFbGVtZW50KTogTW92ZWQgdG8gRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpmaXJzdEluU3BlY2lhbEVsZW1lbnQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Omxhc3RJblNwZWNpYWxFbGVtZW50KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpwb3NpdGlvbkJlZm9yZUNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25BZnRlckNvbnRhaW5pbmdTcGVjaWFsRWxlbWVu
dCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOgorCiAyMDIxLTA0LTI0ICBK
dWxpYW4gR29uemFsZXogIDxqdWxpYW5fYV9nb256YWxlekBhcHBsZS5jb20+CiAKICAgICAgICAg
Q3Jhc2ggaW4gQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA0Zjc3NzM1
YmJkZmE3YmRkMjU3ZDI3OWU4YTIxOGIyNGJiODM4YjhhLi4xYjQ3NTY3MDAyNmM3NGU4Y2VhZDQ1
ZjA5ZTdmMjI2M2FjNjY5MGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
ZWREb2N1bWVudE1hcmtlci5oIgorI2luY2x1ZGUgIlNjcmlwdERpc2FsbG93ZWRTY29wZS5oIgog
I2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKIApAQCAtNjUsMTQg
KzY2LDk1IEBAIHN0YXRpYyBib29sIGlzVGFibGVSb3dFbXB0eShOb2RlKiByb3cpCiB7CiAgICAg
aWYgKCFpc1RhYmxlUm93KHJvdykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0g
ICAgZm9yIChOb2RlKiBjaGlsZCA9IHJvdy0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgaWYgKGlzVGFibGVDZWxsKGNoaWxkKSAmJiAh
aXNUYWJsZUNlbGxFbXB0eShjaGlsZCkpCisKKyAgICBmb3IgKGF1dG8gY2hpbGQgPSBtYWtlUmVm
UHRyKHJvdy0+Zmlyc3RDaGlsZCgpKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpIHsKKyAgICAgICAgaWYgKGlzVGFibGVDZWxsKGNoaWxkLmdldCgpKSAmJiAhaXNUYWJsZUNl
bGxFbXB0eShjaGlsZC5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisg
ICAgfQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBib29sIGlzU3BlY2lhbEhUTUxF
bGVtZW50KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlIHNj
cmlwdERpc2FsbG93ZWRTY29wZTsKKworICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5v
ZGUpLmlzTGluaygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8qIHJlbmRlcmVy
ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUpLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5k
ZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgp
LmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6VGFibGUgfHwgcmVuZGVyZXItPnN0eWxlKCkuZGlz
cGxheSgpID09IERpc3BsYXlUeXBlOjpJbmxpbmVUYWJsZSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAocmVuZGVyZXItPnN0eWxlKCkuaXNGbG9hdGluZygpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS5wb3NpdGlvbigpICE9IFBvc2l0
aW9uVHlwZTo6U3RhdGljKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworc3RhdGljIFJlZlB0cjxIVE1MRWxlbWVudD4gZmlyc3RJblNwZWNpYWxFbGVtZW50
KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAgICBhdXRvIHJvb3RFZGl0YWJsZUVsZW1l
bnQgPSBtYWtlUmVmUHRyKHBvc2l0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSk7CisgICAgZm9y
IChhdXRvIG5vZGUgPSBtYWtlUmVmUHRyKHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpOyBub2Rl
ICYmIG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSByb290RWRpdGFibGVFbGVtZW50OyBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmICghaXNTcGVjaWFsSFRNTEVs
ZW1lbnQoKm5vZGUpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IGZpcnN0SW5FbGVtZW50ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUuZ2V0KCkp
OworICAgICAgICBpZiAoKGlzUmVuZGVyZWRUYWJsZShub2RlLmdldCgpKSAmJiB2aXNpYmxlUG9z
aXRpb24gPT0gZmlyc3RJbkVsZW1lbnQubmV4dCgpKSB8fCB2aXNpYmxlUG9zaXRpb24gPT0gZmly
c3RJbkVsZW1lbnQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzPEhUTUxFbGVtZW50
Pihub2RlKSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxIVE1MRWxl
bWVudD4obm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3N0YXRpYyBSZWZQdHI8SFRNTEVsZW1lbnQ+IGxhc3RJblNwZWNpYWxFbGVtZW50KGNvbnN0IFBv
c2l0aW9uJiBwb3NpdGlvbikKK3sKKyAgICBhdXRvIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBtYWtl
UmVmUHRyKHBvc2l0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSk7CisgICAgZm9yIChhdXRvIG5v
ZGUgPSBtYWtlUmVmUHRyKHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpOyBub2RlICYmIG5vZGUt
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSByb290RWRpdGFibGVFbGVtZW50OyBub2RlID0gbm9k
ZS0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmICghaXNTcGVjaWFsSFRNTEVsZW1lbnQoKm5v
ZGUpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkVs
ZW1lbnQgPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGUuZ2V0KCkpOworICAgICAgICBp
ZiAoKGlzUmVuZGVyZWRUYWJsZShub2RlLmdldCgpKSAmJiB2aXNpYmxlUG9zaXRpb24gPT0gbGFz
dEluRWxlbWVudC5wcmV2aW91cygpKSB8fCB2aXNpYmxlUG9zaXRpb24gPT0gbGFzdEluRWxlbWVu
dCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKTsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PEhUTUxFbGVtZW50Pihub2Rl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIHN0
ZDo6cGFpcjxQb3NpdGlvbiwgUmVmUHRyPEhUTUxFbGVtZW50Pj4gcG9zaXRpb25CZWZvcmVDb250
YWluaW5nU3BlY2lhbEVsZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIGF1
dG8gZWxlbWVudCA9IGZpcnN0SW5TcGVjaWFsRWxlbWVudChwb3NpdGlvbik7CisgICAgaWYgKCFl
bGVtZW50KQorICAgICAgICByZXR1cm4geyBwb3NpdGlvbiwgbnVsbHB0ciB9OworICAgIGF1dG8g
cmVzdWx0ID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoZWxlbWVudC5nZXQoKSk7CisgICAg
aWYgKHJlc3VsdC5pc051bGwoKSB8fCByZXN1bHQuY29udGFpbmVyTm9kZSgpLT5yb290RWRpdGFi
bGVFbGVtZW50KCkgIT0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpLT5yb290RWRpdGFibGVFbGVt
ZW50KCkpCisgICAgICAgIHJldHVybiB7IHBvc2l0aW9uLCBudWxscHRyIH07CisgICAgcmV0dXJu
IHsgcmVzdWx0LCBXVEZNb3ZlKGVsZW1lbnQpIH07Cit9CisKK3N0YXRpYyBzdGQ6OnBhaXI8UG9z
aXRpb24sIFJlZlB0cjxIVE1MRWxlbWVudD4+IHBvc2l0aW9uQWZ0ZXJDb250YWluaW5nU3BlY2lh
bEVsZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIGF1dG8gZWxlbWVudCA9
IGxhc3RJblNwZWNpYWxFbGVtZW50KHBvc2l0aW9uKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAg
ICAgIHJldHVybiB7IHBvc2l0aW9uLCBudWxscHRyIH07CisgICAgYXV0byByZXN1bHQgPSBwb3Np
dGlvbkluUGFyZW50QWZ0ZXJOb2RlKGVsZW1lbnQuZ2V0KCkpOworICAgIGlmIChyZXN1bHQuaXNO
dWxsKCkgfHwgcmVzdWx0LmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAh
PSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuIHsgcG9zaXRpb24sIG51bGxwdHIgfTsKKyAgICByZXR1cm4geyByZXN1bHQsIFdU
Rk1vdmUoZWxlbWVudCkgfTsKK30KKwogRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6RGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIGJvb2wgc21hcnREZWxldGUsIGJvb2wg
bWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSwgYm9vbCByZXBsYWNlLCBib29sIGV4cGFuZEZvclNwZWNp
YWxFbGVtZW50cywgYm9vbCBzYW5pdGl6ZU1hcmt1cCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9u
KQogICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZG9jdW1lbnQsIGVkaXRpbmdBY3Rpb24pCiAg
ICAgLCBtX2hhc1NlbGVjdGlvblRvRGVsZXRlKGZhbHNlKQpAQCAtMTAzLDEwICsxODUsNyBAQCBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbgogfQogCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OmluaXRpYWxpemVTdGFydEVuZChQb3NpdGlvbiYgc3RhcnQsIFBvc2l0aW9uJiBlbmQpCi17Ci0g
ICAgSFRNTEVsZW1lbnQqIHN0YXJ0U3BlY2lhbENvbnRhaW5lciA9IG51bGxwdHI7Ci0gICAgSFRN
TEVsZW1lbnQqIGVuZFNwZWNpYWxDb250YWluZXIgPSBudWxscHRyOwotIAoreyAKICAgICBzdGFy
dCA9IG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKTsKICAgICBlbmQgPSBtX3NlbGVjdGlvblRv
RGVsZXRlLmVuZCgpOwogIApAQCAtMTIyLDEyICsyMDEsOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OmluaXRpYWxpemVTdGFydEVuZChQb3NpdGlvbiYgc3RhcnQsIFBvc2l0aW9uJiBl
bmQpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICB3aGlsZSAoMSkgewotICAgICAgICBzdGFy
dFNwZWNpYWxDb250YWluZXIgPSBudWxscHRyOwotICAgICAgICBlbmRTcGVjaWFsQ29udGFpbmVy
ID0gbnVsbHB0cjsKLSAgICAKLSAgICAgICAgUG9zaXRpb24gcyA9IHBvc2l0aW9uQmVmb3JlQ29u
dGFpbmluZ1NwZWNpYWxFbGVtZW50KHN0YXJ0LCAmc3RhcnRTcGVjaWFsQ29udGFpbmVyKTsKLSAg
ICAgICAgUG9zaXRpb24gZSA9IHBvc2l0aW9uQWZ0ZXJDb250YWluaW5nU3BlY2lhbEVsZW1lbnQo
ZW5kLCAmZW5kU3BlY2lhbENvbnRhaW5lcik7Ci0gICAgICAgIAorICAgICAgICBhdXRvIFtzdGFy
dEJlZm9yZVNwZWNpYWxFbGVtZW50LCBzdGFydFNwZWNpYWxDb250YWluZXJdID0gcG9zaXRpb25C
ZWZvcmVDb250YWluaW5nU3BlY2lhbEVsZW1lbnQoc3RhcnQpOworICAgICAgICBhdXRvIFtlbmRB
ZnRlclNwZWNpYWxFbGVtZW50LCBlbmRTcGVjaWFsQ29udGFpbmVyXSA9IHBvc2l0aW9uQWZ0ZXJD
b250YWluaW5nU3BlY2lhbEVsZW1lbnQoZW5kKTsKKwogICAgICAgICBpZiAoIXN0YXJ0U3BlY2lh
bENvbnRhaW5lciAmJiAhZW5kU3BlY2lhbENvbnRhaW5lcikKICAgICAgICAgICAgIGJyZWFrOwog
CkBAIC0xMzcsMjQgKzIxMywyNCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmluaXRp
YWxpemVTdGFydEVuZChQb3NpdGlvbiYgc3RhcnQsIFBvc2l0aW9uJiBlbmQpCiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBnb2luZyB0byBleHBhbmQgdG8gaW5jbHVk
ZSB0aGUgc3RhcnRTcGVjaWFsQ29udGFpbmVyLCBpdCBtdXN0IGJlIGZ1bGx5IHNlbGVjdGVkLgot
ICAgICAgICBpZiAoc3RhcnRTcGVjaWFsQ29udGFpbmVyICYmICFlbmRTcGVjaWFsQ29udGFpbmVy
ICYmIHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUoc3RhcnRTcGVjaWFsQ29udGFpbmVyKSA+PSBl
bmQpCisgICAgICAgIGlmIChzdGFydFNwZWNpYWxDb250YWluZXIgJiYgIWVuZFNwZWNpYWxDb250
YWluZXIgJiYgcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShzdGFydFNwZWNpYWxDb250YWluZXIu
Z2V0KCkpID49IGVuZCkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8vIElmIHdlJ3Jl
IGdvaW5nIHRvIGV4cGFuZCB0byBpbmNsdWRlIHRoZSBlbmRTcGVjaWFsQ29udGFpbmVyLCBpdCBt
dXN0IGJlIGZ1bGx5IHNlbGVjdGVkLgotICAgICAgICBpZiAoZW5kU3BlY2lhbENvbnRhaW5lciAm
JiAhc3RhcnRTcGVjaWFsQ29udGFpbmVyICYmIHN0YXJ0ID49IHBvc2l0aW9uSW5QYXJlbnRCZWZv
cmVOb2RlKGVuZFNwZWNpYWxDb250YWluZXIpKQorICAgICAgICBpZiAoZW5kU3BlY2lhbENvbnRh
aW5lciAmJiAhc3RhcnRTcGVjaWFsQ29udGFpbmVyICYmIHN0YXJ0ID49IHBvc2l0aW9uSW5QYXJl
bnRCZWZvcmVOb2RlKGVuZFNwZWNpYWxDb250YWluZXIuZ2V0KCkpKQogICAgICAgICAgICAgYnJl
YWs7CiAKLSAgICAgICAgaWYgKHN0YXJ0U3BlY2lhbENvbnRhaW5lciAmJiBzdGFydFNwZWNpYWxD
b250YWluZXItPmlzRGVzY2VuZGFudE9mKGVuZFNwZWNpYWxDb250YWluZXIpKQorICAgICAgICBp
ZiAoc3RhcnRTcGVjaWFsQ29udGFpbmVyICYmIHN0YXJ0U3BlY2lhbENvbnRhaW5lci0+aXNEZXNj
ZW5kYW50T2YoZW5kU3BlY2lhbENvbnRhaW5lci5nZXQoKSkpIHsKICAgICAgICAgICAgIC8vIERv
bid0IGFkanVzdCB0aGUgZW5kIHlldCwgaXQgaXMgdGhlIGVuZCBvZiBhIHNwZWNpYWwgZWxlbWVu
dCB0aGF0IGNvbnRhaW5zIHRoZSBzdGFydAogICAgICAgICAgICAgLy8gc3BlY2lhbCBlbGVtZW50
ICh3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSBmdWxseSBzZWxlY3RlZCkuCi0gICAgICAgICAgICBz
dGFydCA9IHM7Ci0gICAgICAgIGVsc2UgaWYgKGVuZFNwZWNpYWxDb250YWluZXIgJiYgZW5kU3Bl
Y2lhbENvbnRhaW5lci0+aXNEZXNjZW5kYW50T2Yoc3RhcnRTcGVjaWFsQ29udGFpbmVyKSkKKyAg
ICAgICAgICAgIHN0YXJ0ID0gc3RhcnRCZWZvcmVTcGVjaWFsRWxlbWVudDsKKyAgICAgICAgfSBl
bHNlIGlmIChlbmRTcGVjaWFsQ29udGFpbmVyICYmIGVuZFNwZWNpYWxDb250YWluZXItPmlzRGVz
Y2VuZGFudE9mKHN0YXJ0U3BlY2lhbENvbnRhaW5lci5nZXQoKSkpIHsKICAgICAgICAgICAgIC8v
IERvbid0IGFkanVzdCB0aGUgc3RhcnQgeWV0LCBpdCBpcyB0aGUgc3RhcnQgb2YgYSBzcGVjaWFs
IGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgZW5kCiAgICAgICAgICAgICAvLyBzcGVjaWFsIGVs
ZW1lbnQgKHdoaWNoIG1heSBvciBtYXkgbm90IGJlIGZ1bGx5IHNlbGVjdGVkKS4KLSAgICAgICAg
ICAgIGVuZCA9IGU7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc3RhcnQgPSBzOwotICAg
ICAgICAgICAgZW5kID0gZTsKKyAgICAgICAgICAgIGVuZCA9IGVuZEFmdGVyU3BlY2lhbEVsZW1l
bnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGFydCA9IHN0YXJ0QmVmb3JlU3Bl
Y2lhbEVsZW1lbnQ7CisgICAgICAgICAgICBlbmQgPSBlbmRBZnRlclNwZWNpYWxFbGVtZW50Owog
ICAgICAgICB9CiAgICAgfQogfQpAQCAtMjQ1LDggKzMyMSw4IEBAIGJvb2wgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6aW5pdGlhbGl6ZVBvc2l0aW9uRGF0YSgpCiAgICAgLy8gRG9uJ3QgbW92ZSBj
b250ZW50IG91dCBvZiBhIHRhYmxlIGNlbGwuCiAgICAgLy8gSWYgdGhlIGNlbGwgaXMgbm9uLWVk
aXRhYmxlLCBlbmNsb3NpbmdOb2RlT2ZUeXBlIHdvbid0IHJldHVybiBpdCBieSBkZWZhdWx0LCBz
bwogICAgIC8vIHRlbGwgdGhhdCBmdW5jdGlvbiB0aGF0IHdlIGRvbid0IGNhcmUgaWYgaXQgcmV0
dXJucyBub24tZWRpdGFibGUgbm9kZXMuCi0gICAgTm9kZSogc3RhcnRDZWxsID0gZW5jbG9zaW5n
Tm9kZU9mVHlwZShtX3Vwc3RyZWFtU3RhcnQsICZpc1RhYmxlQ2VsbCwgQ2FuQ3Jvc3NFZGl0aW5n
Qm91bmRhcnkpOwotICAgIE5vZGUqIGVuZENlbGwgPSBlbmNsb3NpbmdOb2RlT2ZUeXBlKG1fZG93
bnN0cmVhbUVuZCwgJmlzVGFibGVDZWxsLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAg
YXV0byBzdGFydENlbGwgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ05vZGVPZlR5cGUobV91cHN0cmVh
bVN0YXJ0LCAmaXNUYWJsZUNlbGwsIENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KSk7CisgICAgYXV0
byBlbmRDZWxsID0gbWFrZVJlZlB0cihlbmNsb3NpbmdOb2RlT2ZUeXBlKG1fZG93bnN0cmVhbUVu
ZCwgJmlzVGFibGVDZWxsLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkpOwogICAgIC8vIEZJWE1F
OiBUaGlzIGlzbid0IHJpZ2h0LiAgQSBib3JkZXJsZXNzIHRhYmxlIHdpdGggdHdvIHJvd3MgYW5k
IGEgc2luZ2xlIGNvbHVtbiB3b3VsZCBhcHBlYXIgYXMgdHdvIHBhcmFncmFwaHMuCiAgICAgaWYg
KGVuZENlbGwgJiYgZW5kQ2VsbCAhPSBzdGFydENlbGwpCiAgICAgICAgIG1fbWVyZ2VCbG9ja3NB
ZnRlckRlbGV0ZSA9IGZhbHNlOwpAQCAtMzU4LDEwICs0MzQsMTAgQEAgdm9pZCBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kOjpzYXZlVHlwaW5nU3R5bGVTdGF0ZSgpCiAKIGJvb2wgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6aGFuZGxlU3BlY2lhbENhc2VCUkRlbGV0ZSgpCiB7Ci0gICAgTm9kZSogbm9k
ZUFmdGVyVXBzdHJlYW1TdGFydCA9IG1fdXBzdHJlYW1TdGFydC5jb21wdXRlTm9kZUFmdGVyUG9z
aXRpb24oKTsKLSAgICBOb2RlKiBub2RlQWZ0ZXJEb3duc3RyZWFtU3RhcnQgPSBtX2Rvd25zdHJl
YW1TdGFydC5jb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKTsKKyAgICBhdXRvIG5vZGVBZnRlclVw
c3RyZWFtU3RhcnQgPSBtYWtlUmVmUHRyKG1fdXBzdHJlYW1TdGFydC5jb21wdXRlTm9kZUFmdGVy
UG9zaXRpb24oKSk7CisgICAgYXV0byBub2RlQWZ0ZXJEb3duc3RyZWFtU3RhcnQgPSBtYWtlUmVm
UHRyKG1fZG93bnN0cmVhbVN0YXJ0LmNvbXB1dGVOb2RlQWZ0ZXJQb3NpdGlvbigpKTsKICAgICAv
LyBVcHN0cmVhbSBlbmQgd2lsbCBhcHBlYXIgYmVmb3JlIEJSIGR1ZSB0byBjYW5vbmljYWxpemF0
aW9uCi0gICAgTm9kZSogbm9kZUFmdGVyVXBzdHJlYW1FbmQgPSBtX3Vwc3RyZWFtRW5kLmNvbXB1
dGVOb2RlQWZ0ZXJQb3NpdGlvbigpOworICAgIGF1dG8gbm9kZUFmdGVyVXBzdHJlYW1FbmQgPSBt
YWtlUmVmUHRyKG1fdXBzdHJlYW1FbmQuY29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKCkpOwogCiAg
ICAgaWYgKCFub2RlQWZ0ZXJVcHN0cmVhbVN0YXJ0IHx8ICFub2RlQWZ0ZXJEb3duc3RyZWFtU3Rh
cnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM4MSw3ICs0NTcsNyBAQCBib29sIERlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVNwZWNpYWxDYXNlQlJEZWxldGUoKQogICAgIC8vIEZJ
WE1FOiBUaGlzIGNvZGUgZG9lc24ndCBiZWxvbmcgaW4gaGVyZS4KICAgICAvLyBXZSBkZXRlY3Qg
dGhlIGNhc2Ugd2hlcmUgdGhlIHN0YXJ0IGlzIGFuIGVtcHR5IGxpbmUgY29uc2lzdGluZyBvZiBC
UiBub3Qgd3JhcHBlZCBpbiBhIGJsb2NrIGVsZW1lbnQuCiAgICAgaWYgKHVwc3RyZWFtU3RhcnRJ
c0JSICYmIGRvd25zdHJlYW1TdGFydElzQlIKLSAgICAgICAgJiYgIShpc1N0YXJ0T2ZCbG9jayhw
b3NpdGlvbkJlZm9yZU5vZGUobm9kZUFmdGVyVXBzdHJlYW1TdGFydCkpICYmIGlzRW5kT2ZCbG9j
ayhwb3NpdGlvbkFmdGVyTm9kZShub2RlQWZ0ZXJEb3duc3RyZWFtU3RhcnQpKSkKKyAgICAgICAg
JiYgIShpc1N0YXJ0T2ZCbG9jayhwb3NpdGlvbkJlZm9yZU5vZGUobm9kZUFmdGVyVXBzdHJlYW1T
dGFydC5nZXQoKSkpICYmIGlzRW5kT2ZCbG9jayhwb3NpdGlvbkFmdGVyTm9kZShub2RlQWZ0ZXJE
b3duc3RyZWFtU3RhcnQuZ2V0KCkpKSkKICAgICAgICAgJiYgKCFub2RlQWZ0ZXJVcHN0cmVhbUVu
ZCB8fCBub2RlQWZ0ZXJVcHN0cmVhbUVuZC0+aGFzVGFnTmFtZShiclRhZykgfHwgbm9kZUFmdGVy
VXBzdHJlYW1FbmQtPnByZXZpb3VzU2libGluZygpICE9IG5vZGVBZnRlclVwc3RyZWFtU3RhcnQp
KSB7CiAgICAgICAgIG1fc3RhcnRzQXRFbXB0eUxpbmUgPSB0cnVlOwogICAgICAgICBtX2VuZGlu
Z1Bvc2l0aW9uID0gbV9kb3duc3RyZWFtRW5kOwpAQCAtMzkzLDIwICs0NjksMjMgQEAgYm9vbCBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTcGVjaWFsQ2FzZUJSRGVsZXRlKCkKIHN0YXRp
YyBQb3NpdGlvbiBmaXJzdEVkaXRhYmxlUG9zaXRpb25Jbk5vZGUoTm9kZSogbm9kZSkKIHsKICAg
ICBBU1NFUlQobm9kZSk7Ci0gICAgTm9kZSogbmV4dCA9IG5vZGU7CisgICAgYXV0byBuZXh0ID0g
bWFrZVJlZlB0cihub2RlKTsKICAgICB3aGlsZSAobmV4dCAmJiAhbmV4dC0+aGFzRWRpdGFibGVT
dHlsZSgpKQogICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbmV4dCwgbm9kZSk7
Ci0gICAgcmV0dXJuIG5leHQgPyBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobmV4dCkgOiBQ
b3NpdGlvbigpOworICAgIHJldHVybiBuZXh0ID8gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KG5leHQuZ2V0KCkpIDogUG9zaXRpb24oKTsKIH0KIAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjppbnNlcnRCbG9ja1BsYWNlaG9sZGVyRm9yVGFibGVDZWxsSWZOZWVkZWQoRWxlbWVudCYg
ZWxlbWVudCkKIHsKICAgICAvLyBNYWtlIHN1cmUgZW1wdHkgY2VsbCBoYXMgc29tZSBoZWlnaHQu
Ci0gICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFpczxS
ZW5kZXJUYWJsZUNlbGw+KHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkb3du
Y2FzdDxSZW5kZXJUYWJsZUNlbGw+KCpyZW5kZXJlcikuY29udGVudEhlaWdodCgpID4gMCkKLSAg
ICAgICAgcmV0dXJuOworICAgIHsKKyAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlIHNjcmlw
dERpc2FsbG93ZWRTY29wZTsKKyAgICAgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRl
cmVyKCk7CisgICAgICAgIGlmICghaXM8UmVuZGVyVGFibGVDZWxsPihyZW5kZXJlcikpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KCpy
ZW5kZXJlcikuY29udGVudEhlaWdodCgpID4gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CiAgICAgaW5zZXJ0QmxvY2tQbGFjZWhvbGRlcihmaXJzdEVkaXRhYmxlUG9zaXRpb25Jbk5vZGUo
JmVsZW1lbnQpKTsKIH0KICAgICAKQEAgLTQ0MCwxNCArNTE5LDE0IEBAIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZShOb2RlJiBub2RlLCBTaG91bGRBc3N1bWVDb250ZW50
SXNBbHdheXNFCiAgICAgICAgICAgICBpZiAoIW5vZGUuZmlyc3RDaGlsZCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIC8vIFNlYXJjaCB0aGlzIG5vbi1lZGl0YWJsZSBy
ZWdpb24gZm9yIGVkaXRhYmxlIHJlZ2lvbnMgdG8gZW1wdHkuCi0gICAgICAgICAgICBSZWZQdHI8
Tm9kZT4gY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIGF1dG8gY2hpbGQg
PSBtYWtlUmVmUHRyKG5vZGUuZmlyc3RDaGlsZCgpKTsKICAgICAgICAgICAgIHdoaWxlIChjaGls
ZCkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0Q2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5leHRDaGlsZCA9IG1ha2VSZWZQdHIo
Y2hpbGQtPm5leHRTaWJsaW5nKCkpOwogICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoKmNoaWxk
LCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CiAgICAgICAgICAgICAgICAg
Ly8gQmFpbCBpZiBuZXh0Q2hpbGQgaXMgbm8gbG9uZ2VyIG5vZGUncyBjaGlsZC4KICAgICAgICAg
ICAgICAgICBpZiAobmV4dENoaWxkICYmIG5leHRDaGlsZC0+cGFyZW50Tm9kZSgpICE9ICZub2Rl
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgY2hpbGQgPSBu
ZXh0Q2hpbGQ7CisgICAgICAgICAgICAgICAgY2hpbGQgPSBXVEZNb3ZlKG5leHRDaGlsZCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIERvbid0IHJlbW92ZSBl
ZGl0YWJsZSByZWdpb25zIHRoYXQgYXJlIGluc2lkZSBub24tZWRpdGFibGUgb25lcywganVzdCBj
bGVhciB0aGVtLgpAQCAtNDU4LDI2ICs1MzcsMjYgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpyZW1vdmVOb2RlKE5vZGUmIG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0UK
ICAgICBpZiAoc2hvdWxkUmVtb3ZlQ29udGVudE9ubHkobm9kZSkpIHsKICAgICAgICAgLy8gRG8g
bm90IHJlbW92ZSBhbiBlbGVtZW50IG9mIHRhYmxlIHN0cnVjdHVyZTsgcmVtb3ZlIGl0cyBjb250
ZW50cy4KICAgICAgICAgLy8gTGlrZXdpc2UgZm9yIHRoZSByb290IGVkaXRhYmxlIGVsZW1lbnQu
Ci0gICAgICAgIGF1dG8qIGNoaWxkID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCAmbm9kZSk7
CisgICAgICAgIGF1dG8gY2hpbGQgPSBtYWtlUmVmUHRyKE5vZGVUcmF2ZXJzYWw6Om5leHQobm9k
ZSwgJm5vZGUpKTsKICAgICAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgICAgICBpZiAoc2hv
dWxkUmVtb3ZlQ29udGVudE9ubHkoKmNoaWxkKSkgewogICAgICAgICAgICAgICAgIGNoaWxkID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dCgqY2hpbGQsICZub2RlKTsKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8qIHJlbW92ZSA9IGNoaWxkOwot
ICAgICAgICAgICAgY2hpbGQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigq
Y2hpbGQsICZub2RlKTsKLSAgICAgICAgICAgIHJlbW92ZU5vZGVVcGRhdGluZ1N0YXRlcygqcmVt
b3ZlLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CisgICAgICAgICAgICBh
dXRvIG5leHRDaGlsZCA9IG1ha2VSZWZQdHIoTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hp
bGRyZW4oKmNoaWxkLCAmbm9kZSkpOworICAgICAgICAgICAgcmVtb3ZlTm9kZVVwZGF0aW5nU3Rh
dGVzKCpjaGlsZCwgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOworICAgICAg
ICAgICAgY2hpbGQgPSBXVEZNb3ZlKG5leHRDaGlsZCk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIEFTU0VSVChpczxFbGVtZW50Pihub2RlKSk7CiAgICAgICAgIGF1dG8mIGVsZW1lbnQg
PSBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKICAgICAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVl
ZCB0byBpbnNlcnQgYSBwbGFjZWhvbGRlciBmb3IgZGVzY2VuZGFudCB0YWJsZSBjZWxscy4KLSAg
ICAgICAgYXV0byogZGVzY2VuZGFudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCwg
JmVsZW1lbnQpOworICAgICAgICBhdXRvIGRlc2NlbmRhbnQgPSBtYWtlUmVmUHRyKEVsZW1lbnRU
cmF2ZXJzYWw6Om5leHQoZWxlbWVudCwgJmVsZW1lbnQpKTsKICAgICAgICAgd2hpbGUgKGRlc2Nl
bmRhbnQpIHsKLSAgICAgICAgICAgIGF1dG8qIHBsYWNlaG9sZGVyQ2FuZGlkYXRlID0gZGVzY2Vu
ZGFudDsKLSAgICAgICAgICAgIGRlc2NlbmRhbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KCpk
ZXNjZW5kYW50LCAmZWxlbWVudCk7Ci0gICAgICAgICAgICBpbnNlcnRCbG9ja1BsYWNlaG9sZGVy
Rm9yVGFibGVDZWxsSWZOZWVkZWQoKnBsYWNlaG9sZGVyQ2FuZGlkYXRlKTsKKyAgICAgICAgICAg
IGF1dG8gbmV4dERlc2NlbmRhbnQgPSBtYWtlUmVmUHRyKEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQo
KmRlc2NlbmRhbnQsICZlbGVtZW50KSk7CisgICAgICAgICAgICBpbnNlcnRCbG9ja1BsYWNlaG9s
ZGVyRm9yVGFibGVDZWxsSWZOZWVkZWQoKmRlc2NlbmRhbnQpOworICAgICAgICAgICAgZGVzY2Vu
ZGFudCA9IFdURk1vdmUobmV4dERlc2NlbmRhbnQpOwogICAgICAgICB9CiAgICAgICAgIGluc2Vy
dEJsb2NrUGxhY2Vob2xkZXJGb3JUYWJsZUNlbGxJZk5lZWRlZChlbGVtZW50KTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNTM1LDggKzYxNCw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGludCBzdGFydE9m
ZnNldCA9IG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotICAgIE5v
ZGUqIHN0YXJ0Tm9kZSA9IG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpOwotICAgIAor
ICAgIGF1dG8gc3RhcnROb2RlID0gbWFrZVJlZlB0cihtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRl
ZE5vZGUoKSk7CisKICAgICBtYWtlU3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRyZW5PZkVkaXRh
YmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcygpOwogCiAgICAgLy8gTmV2ZXIgcmVtb3ZlIHRoZSBz
dGFydCBibG9jayB1bmxlc3MgaXQncyBhIHRhYmxlLCBpbiB3aGljaCBjYXNlIHdlIHdvbid0IG1l
cmdlIGNvbnRlbnQgaW4uCkBAIC01ODIsMTkgKzY2MSwxOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogICAgIGVsc2UgewogICAgICAgICBib29s
IHN0YXJ0Tm9kZVdhc0Rlc2NlbmRhbnRPZkVuZE5vZGUgPSBtX3Vwc3RyZWFtU3RhcnQuZGVwcmVj
YXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2Rl
KCkpOwogICAgICAgICAvLyBUaGUgc2VsZWN0aW9uIHRvIGRlbGV0ZSBzcGFucyBtb3JlIHRoYW4g
b25lIG5vZGUuCi0gICAgICAgIFJlZlB0cjxOb2RlPiBub2RlKHN0YXJ0Tm9kZSk7CisgICAgICAg
IGF1dG8gbm9kZSA9IHN0YXJ0Tm9kZS5jb3B5UmVmKCk7CiAgICAgICAgIAogICAgICAgICBpZiAo
c3RhcnRPZmZzZXQgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoaXM8VGV4dD4oKnN0YXJ0Tm9kZSkp
IHsKKyAgICAgICAgICAgIGlmIChpczxUZXh0Pigqbm9kZSkpIHsKICAgICAgICAgICAgICAgICAv
LyBpbiBhIHRleHQgbm9kZSB0aGF0IG5lZWRzIHRvIGJlIHRyaW1tZWQKLSAgICAgICAgICAgICAg
ICBUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm5vZGUpOworICAgICAgICAgICAgICAgIFRl
eHQmIHRleHQgPSBkb3duY2FzdDxUZXh0Pigqc3RhcnROb2RlKTsKICAgICAgICAgICAgICAgICBk
ZWxldGVUZXh0RnJvbU5vZGUodGV4dCwgc3RhcnRPZmZzZXQsIHRleHQubGVuZ3RoKCkgLSBzdGFy
dE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5v
ZGUpOworICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpzdGFydE5v
ZGUpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBub2RlID0gc3RhcnRO
b2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChzdGFydE9mZnNldCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSBpZiAoc3RhcnROb2RlID09IG1fdXBzdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUo
KSAmJiBpczxUZXh0Pigqc3RhcnROb2RlKSkgewotICAgICAgICAgICAgVGV4dCYgdGV4dCA9IGRv
d25jYXN0PFRleHQ+KCptX3Vwc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICAg
ICAgVGV4dCYgdGV4dCA9IGRvd25jYXN0PFRleHQ+KCpzdGFydE5vZGUpOwogICAgICAgICAgICAg
ZGVsZXRlVGV4dEZyb21Ob2RlKHRleHQsIDAsIG1fdXBzdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02MTEsOCArNjkwLDggQEAgdm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAgICAg
ICAgICAgICByZW1vdmVOb2RlKCpub2RlKTsKICAgICAgICAgICAgICAgICBub2RlID0gbmV4dE5v
ZGUuZ2V0KCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE5vZGUqIG4g
PSBub2RlLT5sYXN0RGVzY2VuZGFudCgpOwotICAgICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJl
YW1FbmQuZGVwcmVjYXRlZE5vZGUoKSA9PSBuICYmIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KCpuKSkgeworICAgICAgICAgICAgICAg
IGF1dG8gbGFzdERlc2NlbmRhbnQgPSBtYWtlUmVmUHRyKG5vZGUtPmxhc3REZXNjZW5kYW50KCkp
OworICAgICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSA9
PSBsYXN0RGVzY2VuZGFudCAmJiBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSA+PSBjYXJldE1heE9mZnNldCgqbGFzdERlc2NlbmRhbnQpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHJlbW92ZU5vZGUoKm5vZGUpOwogICAgICAgICAgICAgICAgICAgICBub2RlID0gbnVs
bHB0cjsKICAgICAgICAgICAgICAgICB9IGVsc2UKQEAgLTYzMCw5ICs3MDksOCBAQCB2b2lkIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogICAgICAgICAgICAg
ICAgIGlmIChpczxUZXh0PigqbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIGluIGEgdGV4dCBub2RlIHRoYXQgbmVlZHMgdG8gYmUgdHJp
bW1lZAogICAgICAgICAgICAgICAgICAgICBUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm1f
ZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMCkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCkgPiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRleHQs
IDAsIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBjaGlsZHJlbiBvZiBtX2Rv
d25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSB0aGF0IGNvbWUgYWZ0ZXIgbV91cHN0cmVhbVN0
YXJ0LgogICAgICAgICAgICAgICAgIC8vIERvbid0IHRyeSB0byByZW1vdmUgY2hpbGRyZW4gaWYg
bV91cHN0cmVhbVN0YXJ0IHdhcyBpbnNpZGUgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2Rl
KCkKICAgICAgICAgICAgICAgICAvLyBhbmQgbV91cHN0cmVhbVN0YXJ0IGhhcyBiZWVuIHJlbW92
ZWQgZnJvbSB0aGUgZG9jdW1lbnQsIGJlY2F1c2UgdGhlbiB3ZSBkb24ndCAKQEAgLTY0Miw3ICs3
MjAsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUo
KQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIShzdGFydE5vZGVXYXNEZXNjZW5kYW50T2ZF
bmROb2RlICYmICFtX3Vwc3RyZWFtU3RhcnQuYW5jaG9yTm9kZSgpLT5pc0Nvbm5lY3RlZCgpKSkg
ewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOwogICAgICAgICAgICAg
ICAgICAgICBpZiAobV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFu
dE9mKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogbiA9IG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBuID0gbWFrZVJlZlB0cihtX3Vwc3RyZWFtU3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiBu
LT5wYXJlbnROb2RlKCkgIT0gbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChuKQpAQCAtNzAyLDcgKzc4MCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhzKCkKICAgICAKICAgICAvLyBtX2Rvd25zdHJlYW1F
bmQncyBibG9jayBoYXMgYmVlbiBlbXB0aWVkIG91dCBieSBkZWxldGlvbi4gIFRoZXJlIGlzIG5v
IGNvbnRlbnQgaW5zaWRlIG9mIGl0IHRvCiAgICAgLy8gbW92ZSwgc28ganVzdCByZW1vdmUgaXQu
Ci0gICAgRWxlbWVudCogZW5kQmxvY2sgPSBlbmNsb3NpbmdCbG9jayhtX2Rvd25zdHJlYW1FbmQu
ZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgYXV0byBlbmRCbG9jayA9IG1ha2VSZWZQdHIoZW5jbG9z
aW5nQmxvY2sobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKTsKICAgICBpZiAoIWVu
ZEJsb2NrKQogICAgICAgICByZXR1cm47CiAKQEAgLTcyOSw3ICs4MDcsOCBAQCB2b2lkIERlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBocygpCiAgICAgLy8gRklYTUU6IENvbnNp
ZGVyIFJUTC4KICAgICBpZiAoIW1fc3RhcnRzQXRFbXB0eUxpbmUgJiYgaXNTdGFydE9mUGFyYWdy
YXBoKG1lcmdlRGVzdGluYXRpb24pICYmIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuYWJzb2x1dGVD
YXJldEJvdW5kcygpLngoKSA+IG1lcmdlRGVzdGluYXRpb24uYWJzb2x1dGVDYXJldEJvdW5kcygp
LngoKSkgewogICAgICAgICBpZiAobWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRv
d25zdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkgewotICAgICAg
ICAgICAgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKCptZXJnZURlc3RpbmF0aW9uLmRlZXBF
cXVpdmFsZW50KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICAgICAg
YXV0byBub2RlVG9SZW1vdmUgPSBtYWtlUmVmUHRyKG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2
YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgICAgICAgICByZW1v
dmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoKm5vZGVUb1JlbW92ZSk7CiAgICAgICAgICAgICBtX2Vu
ZGluZ1Bvc2l0aW9uID0gc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC03NjgsMjUgKzg0NywyNiBAQCB2b2lk
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBocygpCiB2b2lkIERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVByZXZpb3VzbHlTZWxlY3RlZEVtcHR5VGFibGVSb3dzKCkK
IHsKICAgICBpZiAobV9lbmRUYWJsZVJvdyAmJiBtX2VuZFRhYmxlUm93LT5pc0Nvbm5lY3RlZCgp
ICYmIG1fZW5kVGFibGVSb3cgIT0gbV9zdGFydFRhYmxlUm93KSB7Ci0gICAgICAgIE5vZGUqIHJv
dyA9IG1fZW5kVGFibGVSb3ctPnByZXZpb3VzU2libGluZygpOworICAgICAgICBhdXRvIHJvdyA9
IG1ha2VSZWZQdHIobV9lbmRUYWJsZVJvdy0+cHJldmlvdXNTaWJsaW5nKCkpOwogICAgICAgICB3
aGlsZSAocm93ICYmIHJvdyAhPSBtX3N0YXJ0VGFibGVSb3cpIHsKLSAgICAgICAgICAgIFJlZlB0
cjxOb2RlPiBwcmV2aW91c1JvdyA9IHJvdy0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgICAg
ICBpZiAoaXNUYWJsZVJvd0VtcHR5KHJvdykpCisgICAgICAgICAgICBhdXRvIHByZXZpb3VzUm93
ID0gbWFrZVJlZlB0cihyb3ctPnByZXZpb3VzU2libGluZygpKTsKKyAgICAgICAgICAgIGlmIChp
c1RhYmxlUm93RW1wdHkocm93LmdldCgpKSkgewogICAgICAgICAgICAgICAgIC8vIFVzZSBhIHJh
dyByZW1vdmVOb2RlLCBpbnN0ZWFkIG9mIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQncywgYmVjYXVz
ZQogICAgICAgICAgICAgICAgIC8vIHRoYXQgd29uJ3QgcmVtb3ZlIHJvd3MsIGl0IG9ubHkgZW1w
dGllcyB0aGVtIGluIHByZXBhcmF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uLgogICAgICAgICAgICAg
ICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKCpyb3cpOwotICAgICAgICAgICAg
cm93ID0gcHJldmlvdXNSb3cuZ2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByb3cg
PSBXVEZNb3ZlKHByZXZpb3VzUm93KTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICAvLyBS
ZW1vdmUgZW1wdHkgcm93cyBhZnRlciB0aGUgc3RhcnQgcm93LgogICAgIGlmIChtX3N0YXJ0VGFi
bGVSb3cgJiYgbV9zdGFydFRhYmxlUm93LT5pc0Nvbm5lY3RlZCgpICYmIG1fc3RhcnRUYWJsZVJv
dyAhPSBtX2VuZFRhYmxlUm93KSB7Ci0gICAgICAgIE5vZGUqIHJvdyA9IG1fc3RhcnRUYWJsZVJv
dy0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgYXV0byByb3cgPSBtYWtlUmVmUHRyKG1fc3RhcnRU
YWJsZVJvdy0+bmV4dFNpYmxpbmcoKSk7CiAgICAgICAgIHdoaWxlIChyb3cgJiYgcm93ICE9IG1f
ZW5kVGFibGVSb3cpIHsKLSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0Um93ID0gcm93LT5u
ZXh0U2libGluZygpOwotICAgICAgICAgICAgaWYgKGlzVGFibGVSb3dFbXB0eShyb3cpKQorICAg
ICAgICAgICAgYXV0byBuZXh0Um93ID0gbWFrZVJlZlB0cihyb3ctPm5leHRTaWJsaW5nKCkpOwor
ICAgICAgICAgICAgaWYgKGlzVGFibGVSb3dFbXB0eShyb3cuZ2V0KCkpKQogICAgICAgICAgICAg
ICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKCpyb3cpOwotICAgICAgICAgICAg
cm93ID0gbmV4dFJvdy5nZXQoKTsKKyAgICAgICAgICAgIHJvdyA9IFdURk1vdmUobmV4dFJvdyk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTg1NCw2ICs5MzQsNyBAQCBTdHJpbmcgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6b3JpZ2luYWxTdHJpbmdGb3JBdXRvY29ycmVjdGlvbkF0QmVnaW5uaW5n
T2ZTZWxlYwogICAgIGlmICghcmFuZ2VPZkZpcnN0Q2hhcmFjdGVyKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAKKyAgICBTY3JpcHREaXNhbGxvd2VkU2NvcGUgc2NyaXB0RGlzYWxsb3dlZFNj
b3BlOwogICAgIGZvciAoYXV0byogbWFya2VyIDogZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vy
c0luUmFuZ2UoKnJhbmdlT2ZGaXJzdENoYXJhY3RlciwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3Jy
ZWN0ZWQpKSB7CiAgICAgICAgIGludCBzdGFydE9mZnNldCA9IG1hcmtlci0+c3RhcnRPZmZzZXQo
KTsKICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID09IHN0YXJ0T2ZTZWxlY3Rpb24uZGVlcEVxdWl2
YWxlbnQoKS5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkKQEAgLTg5Niw5ICs5NzcsOCBAQCB2b2lk
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgLy8gSWYgdGhlIGRlbGV0
aW9uIGlzIG9jY3VycmluZyBpbiBhIHRleHQgZmllbGQsIGFuZCB3ZSdyZSBub3QgZGVsZXRpbmcg
dG8gcmVwbGFjZSB0aGUgc2VsZWN0aW9uLCB0aGVuIGxldCB0aGUgZnJhbWUgY2FsbCBhY3Jvc3Mg
dGhlIGJyaWRnZSB0byBub3RpZnkgdGhlIGZvcm0gZGVsZWdhdGUuIAogICAgIGlmICghbV9yZXBs
YWNlKSB7Ci0gICAgICAgIEVsZW1lbnQqIHRleHRDb250cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1D
b250cm9sKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKSk7Ci0gICAgICAgIGlmICh0ZXh0Q29u
dHJvbCAmJiB0ZXh0Q29udHJvbC0+Zm9jdXNlZCgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS5l
ZGl0b3IoKS50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKHRleHRDb250cm9sKTsKKyAgICAg
ICAgaWYgKGF1dG8gdGV4dENvbnRyb2wgPSBtYWtlUmVmUHRyKGVuY2xvc2luZ1RleHRGb3JtQ29u
dHJvbChtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkpKTsgdGV4dENvbnRyb2wgJiYgdGV4dENv
bnRyb2wtPmZvY3VzZWQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkudGV4dFdp
bGxCZURlbGV0ZWRJblRleHRGaWVsZCh0ZXh0Q29udHJvbC5nZXQoKSk7CiAgICAgfQogCiAgICAg
Ly8gc2F2ZSB0aGlzIHRvIGxhdGVyIG1ha2UgdGhlIHNlbGVjdGlvbiB3aXRoCkBAIC05MTIsNyAr
OTkyLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAg
Ly8gRG9uJ3QgbmVlZCBhIHBsYWNlaG9sZGVyIHdoZW4gZGVsZXRpbmcgYSBzZWxlY3Rpb24gdGhh
dCBzdGFydHMganVzdCBiZWZvcmUgYSB0YWJsZQogICAgICAgICAvLyBhbmQgZW5kcyBpbnNpZGUg
aXQgKHdlIGRvIG5lZWQgcGxhY2Vob2xkZXJzIHRvIGhvbGQgb3BlbiBlbXB0eSBjZWxscywgYnV0
IHRoYXQncwogICAgICAgICAvLyBoYW5kbGVkIGVsc2V3aGVyZSkuCi0gICAgICAgIGlmIChhdXRv
KiB0YWJsZSA9IGlzTGFzdFBvc2l0aW9uQmVmb3JlVGFibGUobV9zZWxlY3Rpb25Ub0RlbGV0ZS52
aXNpYmxlU3RhcnQoKSkpIHsKKyAgICAgICAgaWYgKGF1dG8gdGFibGUgPSBtYWtlUmVmUHRyKGlz
TGFzdFBvc2l0aW9uQmVmb3JlVGFibGUobV9zZWxlY3Rpb25Ub0RlbGV0ZS52aXNpYmxlU3RhcnQo
KSkpKSB7CiAgICAgICAgICAgICBpZiAobV9zZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5kZXByZWNh
dGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZigqdGFibGUpKQogICAgICAgICAgICAgICAgIG1fbmVl
ZFBsYWNlaG9sZGVyID0gZmFsc2U7CiAgICAgICAgIH0KQEAgLTk2MSw5ICsxMDQxLDkgQEAgdm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIAogICAgIGJvb2wgc2hvdWxkUmVi
YWxhY2VXaGl0ZVNwYWNlID0gdHJ1ZTsKICAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCkuYmVo
YXZpb3IoKS5zaG91bGRSZWJhbGFuY2VXaGl0ZVNwYWNlc0luU2VjdXJlRmllbGQoKSkgewotICAg
ICAgICBOb2RlKiBub2RlID0gbV9lbmRpbmdQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOwotICAg
ICAgICBpZiAoaXM8VGV4dD4obm9kZSkpIHsKLSAgICAgICAgICAgIFRleHQmIHRleHROb2RlID0g
ZG93bmNhc3Q8VGV4dD4oKm5vZGUpOworICAgICAgICBpZiAoYXV0byBlbmROb2RlID0gbWFrZVJl
ZlB0cihtX2VuZGluZ1Bvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpOyBpczxUZXh0PihlbmROb2Rl
KSkgeworICAgICAgICAgICAgYXV0byYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0PigqZW5kTm9k
ZSk7CisgICAgICAgICAgICBTY3JpcHREaXNhbGxvd2VkU2NvcGUgc2NyaXB0RGlzYWxsb3dlZFNj
b3BlOwogICAgICAgICAgICAgaWYgKHRleHROb2RlLmxlbmd0aCgpICYmIHRleHROb2RlLnJlbmRl
cmVyKCkpCiAgICAgICAgICAgICAgICAgc2hvdWxkUmViYWxhY2VXaGl0ZVNwYWNlID0gdGV4dE5v
ZGUucmVuZGVyZXIoKS0+c3R5bGUoKS50ZXh0U2VjdXJpdHkoKSA9PSBUZXh0U2VjdXJpdHk6Ok5v
bmU7CiAgICAgICAgIH0gICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5kZXgg
ZTMzZGE1ODlkN2MyZGE1MGQ4YTY2N2YwMzE5MDMzOWM0NWE2OTQ2My4uMzQ1NmE3NjlmMTg0NWUw
OTQxOWM3YWM1NDFmZDk4M2MzYzAyNGM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3Bw
CkBAIC00MDMsODQgKzQwMyw2IEBAIGNvbnN0IFN0cmluZyYgbm9uQnJlYWtpbmdTcGFjZVN0cmlu
ZygpCiAgICAgcmV0dXJuIG5vbkJyZWFraW5nU3BhY2VTdHJpbmc7CiB9CiAKLXN0YXRpYyBib29s
IGlzU3BlY2lhbEhUTUxFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFpczxI
VE1MRWxlbWVudD4obm9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChkb3du
Y2FzdDxIVE1MRWxlbWVudD4oKm5vZGUpLmlzTGluaygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGF1dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpub2RlKS5yZW5k
ZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChyZW5kZXJlci0+c3R5bGUoKS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OlRhYmxlIHx8
IHJlbmRlcmVyLT5zdHlsZSgpLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6SW5saW5lVGFibGUp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLmlzRmxv
YXRpbmcoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAocmVuZGVyZXItPnN0eWxl
KCkucG9zaXRpb24oKSAhPSBQb3NpdGlvblR5cGU6OlN0YXRpYykKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBIVE1MRWxlbWVudCogZmlyc3RJ
blNwZWNpYWxFbGVtZW50KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKLXsKLSAgICBhdXRvKiBy
b290RWRpdGFibGVFbGVtZW50ID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpLT5yb290RWRpdGFi
bGVFbGVtZW50KCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5v
ZGUoKTsgbm9kZSAmJiBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkgPT0gcm9vdEVkaXRhYmxl
RWxlbWVudDsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoIWlzU3Bl
Y2lhbEhUTUxFbGVtZW50KG5vZGUpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFZp
c2libGVQb3NpdGlvbiB2UG9zKHBvc2l0aW9uKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZp
cnN0SW5FbGVtZW50KGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSk7Ci0gICAgICAg
IGlmICgoaXNSZW5kZXJlZFRhYmxlKG5vZGUpICYmIHZQb3MgPT0gZmlyc3RJbkVsZW1lbnQubmV4
dCgpKSB8fCB2UG9zID09IGZpcnN0SW5FbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuICZkb3du
Y2FzdDxIVE1MRWxlbWVudD4oKm5vZGUpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
LQotc3RhdGljIEhUTUxFbGVtZW50KiBsYXN0SW5TcGVjaWFsRWxlbWVudChjb25zdCBQb3NpdGlv
biYgcG9zaXRpb24pCi17Ci0gICAgYXV0byogcm9vdEVkaXRhYmxlRWxlbWVudCA9IHBvc2l0aW9u
LmNvbnRhaW5lck5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIGZvciAoTm9kZSog
bm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7IG5vZGUgJiYgbm9kZS0+cm9vdEVkaXRh
YmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQ7IG5vZGUgPSBub2RlLT5wYXJlbnRO
b2RlKCkpIHsKLSAgICAgICAgaWYgKCFpc1NwZWNpYWxIVE1MRWxlbWVudChub2RlKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdlBvcyhwb3NpdGlvbik7
Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBsYXN0SW5FbGVtZW50KGxhc3RQb3NpdGlvbkluT3JB
ZnRlck5vZGUobm9kZSkpOwotICAgICAgICBpZiAoKGlzUmVuZGVyZWRUYWJsZShub2RlKSAmJiB2
UG9zID09IGxhc3RJbkVsZW1lbnQucHJldmlvdXMoKSkgfHwgdlBvcyA9PSBsYXN0SW5FbGVtZW50
KQotICAgICAgICAgICAgcmV0dXJuICZkb3duY2FzdDxIVE1MRWxlbWVudD4oKm5vZGUpOwotICAg
IH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUG9zaXRpb24gcG9zaXRpb25CZWZvcmVDb250
YWluaW5nU3BlY2lhbEVsZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBIVE1MRWxlbWVu
dCoqIGNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudCkKLXsKLSAgICBhdXRvKiBlbGVtZW50ID0gZmly
c3RJblNwZWNpYWxFbGVtZW50KHBvc2l0aW9uKTsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAg
IHJldHVybiBwb3NpdGlvbjsKLSAgICBQb3NpdGlvbiByZXN1bHQgPSBwb3NpdGlvbkluUGFyZW50
QmVmb3JlTm9kZShlbGVtZW50KTsKLSAgICBpZiAocmVzdWx0LmlzTnVsbCgpIHx8IHJlc3VsdC5k
ZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gcG9zaXRpb24uZGVwcmVj
YXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gcG9zaXRp
b247Ci0gICAgaWYgKGNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudCkKLSAgICAgICAgKmNvbnRhaW5p
bmdTcGVjaWFsRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUG9z
aXRpb24gcG9zaXRpb25BZnRlckNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudChjb25zdCBQb3NpdGlv
biYgcG9zaXRpb24sIEhUTUxFbGVtZW50KiogY29udGFpbmluZ1NwZWNpYWxFbGVtZW50KQotewot
ICAgIGF1dG8qIGVsZW1lbnQgPSBsYXN0SW5TcGVjaWFsRWxlbWVudChwb3NpdGlvbik7Ci0gICAg
aWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm4gcG9zaXRpb247Ci0gICAgUG9zaXRpb24gcmVz
dWx0ID0gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShlbGVtZW50KTsKLSAgICBpZiAocmVzdWx0
LmlzTnVsbCgpIHx8IHJlc3VsdC5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50
KCkgIT0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQot
ICAgICAgICByZXR1cm4gcG9zaXRpb247Ci0gICAgaWYgKGNvbnRhaW5pbmdTcGVjaWFsRWxlbWVu
dCkKLSAgICAgICAgKmNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQogRWxlbWVudCogaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZShjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIFBvc2l0aW9uIHVwc3RyZWFtKHBv
c2l0aW9uLmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKSk7CkBAIC04MTAsOSArNzMyLDkgQEAg
Tm9kZSogbmV4dExlYWZOb2RlKGNvbnN0IE5vZGUqIG5vZGUpCiAvLyBGSVhNRTogRG8gbm90IHJl
cXVpcmUgcmVuZGVyZXIsIHNvIHRoYXQgdGhpcyBjYW4gYmUgdXNlZCB3aXRoaW4gZnJhZ21lbnRz
LgogYm9vbCBpc1JlbmRlcmVkVGFibGUoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIWlz
PEVsZW1lbnQ+KG5vZGUpKQorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxFbGVtZW50Pigq
bm9kZSkucmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGRvd25jYXN0PEhUTUxFbGVt
ZW50Pigqbm9kZSkucmVuZGVyZXIoKTsKICAgICByZXR1cm4gcmVuZGVyZXIgJiYgcmVuZGVyZXIt
PmlzVGFibGUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaAppbmRleCBkMTQ0OGY5NTAy
ZmRlOWJhYWI3OGNmZTU3YjZiOGY2ZjE4MmVkMDM1Li43OTEzYzZkOTgxNTJkNTA2ZGFkYWRmNmU4
YTY1YmYyYzFiYTU2ZTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaApAQCAtMTE4LDkgKzEx
OCw2IEBAIFBvc2l0aW9uIHByZXZpb3VzQ2FuZGlkYXRlKGNvbnN0IFBvc2l0aW9uJik7CiBQb3Np
dGlvbiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShjb25zdCBQb3NpdGlvbiYpOwogUG9z
aXRpb24gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKGNvbnN0IFBvc2l0aW9uJik7
CiAKLVBvc2l0aW9uIHBvc2l0aW9uQmVmb3JlQ29udGFpbmluZ1NwZWNpYWxFbGVtZW50KGNvbnN0
IFBvc2l0aW9uJiwgSFRNTEVsZW1lbnQqKiBjb250YWluaW5nU3BlY2lhbEVsZW1lbnQgPSBudWxs
cHRyKTsKLVBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJDb250YWluaW5nU3BlY2lhbEVsZW1lbnQoY29u
c3QgUG9zaXRpb24mLCBIVE1MRWxlbWVudCoqIGNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudCA9IG51
bGxwdHIpOwotCiBQb3NpdGlvbiBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoTm9kZSopOwog
UG9zaXRpb24gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShOb2RlKik7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>