<?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>222095</bug_id>
          
          <creation_ts>2021-02-18 00:59:51 -0800</creation_ts>
          <short_desc>Avoid heap allocation for EventContexts</short_desc>
          <delta_ts>2021-02-25 00:31:02 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</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>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>mifenton</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1730776</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-18 00:59:51 -0800</bug_when>
    <thetext>We don&apos;t need to a class hierarchy to represent different kinds of EventContext.
Merge all the subclasses of EventContext onto itself to avoid heap allocation in EventPath.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1730777</commentid>
    <comment_count>1</comment_count>
      <attachid>420804</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-18 01:00:10 -0800</bug_when>
    <thetext>Created attachment 420804
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731159</commentid>
    <comment_count>2</comment_count>
      <attachid>420901</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-18 18:58:12 -0800</bug_when>
    <thetext>Created attachment 420901
WIP2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731704</commentid>
    <comment_count>3</comment_count>
      <attachid>421066</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-19 17:59:50 -0800</bug_when>
    <thetext>Created attachment 421066
WIP2 + cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732048</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-22 00:33:39 -0800</bug_when>
    <thetext>&lt;rdar://problem/74586915&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733206</commentid>
    <comment_count>5</comment_count>
      <attachid>421500</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-24 21:51:29 -0800</bug_when>
    <thetext>Created attachment 421500
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733213</commentid>
    <comment_count>6</comment_count>
      <attachid>421500</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-02-24 22:16:06 -0800</bug_when>
    <thetext>Comment on attachment 421500
Patch

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

&gt; Source/WebCore/dom/EventContext.h:62
&gt; +    bool isMouseOrFocusEventContext() const { return m_type == Type::MouseOrFocus; }
&gt; +    bool isTouchEventContext() const { return m_type == Type::Touch; }
&gt; +    bool isWindowContext() const { return m_type == Type::Window; }

Not this patch, but it&apos;s weird how the context is sometimes about the type of event, and sometimes about the object it&apos;s fired on?

&gt; Source/WebCore/dom/EventContext.h:104
&gt; +    , m_type(type)

Can&apos;t this be m_type { type } ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733244</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-25 00:22:48 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #6)
&gt; Comment on attachment 421500 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=421500&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/EventContext.h:62
&gt; &gt; +    bool isMouseOrFocusEventContext() const { return m_type == Type::MouseOrFocus; }
&gt; &gt; +    bool isTouchEventContext() const { return m_type == Type::Touch; }
&gt; &gt; +    bool isWindowContext() const { return m_type == Type::Window; }
&gt; 
&gt; Not this patch, but it&apos;s weird how the context is sometimes about the type
&gt; of event, and sometimes about the object it&apos;s fired on?

Yup, we should do that. I was initially going to do that in this patch but I decided against it to keep this patch simple &amp; mechanical.

&gt; &gt; Source/WebCore/dom/EventContext.h:104
&gt; &gt; +    , m_type(type)
&gt; 
&gt; Can&apos;t this be m_type { type } ?

Oops, fixed. Not sure what happened there.

Thanks for the reviews!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733246</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-02-25 00:31:02 -0800</bug_when>
    <thetext>Committed r273477 (234556@main): &lt;https://commits.webkit.org/234556@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420804</attachid>
            <date>2021-02-18 01:00:10 -0800</date>
            <delta_ts>2021-02-18 18:58:12 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>avoid-event-context-malloc.patch</filename>
            <type>text/plain</type>
            <size>21588</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggNGNjYjA2YzYyNmNlLi44OTJhMGVl
ZjVkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRDb250ZXh0LmgiCiAKKyNpbmNs
dWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZvY3Vz
RXZlbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCkBAIC0zNSw5OCArMzYsNzkgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1FdmVudENvbnRleHQ6OkV2ZW50Q29udGV4dChOb2RlKiBu
b2RlLCBFdmVudFRhcmdldCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJnZXQqIHRhcmdldCwgaW50
IGNsb3NlZFNoYWRvd0RlcHRoKQotICAgIDogbV9ub2RlIHsgbm9kZSB9Ci0gICAgLCBtX2N1cnJl
bnRUYXJnZXQgeyBjdXJyZW50VGFyZ2V0IH0KLSAgICAsIG1fdGFyZ2V0IHsgdGFyZ2V0IH0KLSAg
ICAsIG1fY2xvc2VkU2hhZG93RGVwdGggeyBjbG9zZWRTaGFkb3dEZXB0aCB9Ci0gICAgLCBtX2N1
cnJlbnRUYXJnZXRJc0luU2hhZG93VHJlZSB7IGlzPE5vZGU+KGN1cnJlbnRUYXJnZXQpICYmIGRv
d25jYXN0PE5vZGU+KCpjdXJyZW50VGFyZ2V0KS5pc0luU2hhZG93VHJlZSgpIH0KLXsKLSAgICBB
U1NFUlQoIWlzVW5yZWFjaGFibGVOb2RlKG1fdGFyZ2V0LmdldCgpKSk7Ci19Ci0KIEV2ZW50Q29u
dGV4dDo6fkV2ZW50Q29udGV4dCgpID0gZGVmYXVsdDsKIAogdm9pZCBFdmVudENvbnRleHQ6Omhh
bmRsZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCwgRXZlbnRJbnZva2VQaGFzZSBwaGFzZSkgY29u
c3QKIHsKICAgICBldmVudC5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkpOwogICAgIGV2ZW50LnNl
dEN1cnJlbnRUYXJnZXQobV9jdXJyZW50VGFyZ2V0LmdldCgpLCBtX2N1cnJlbnRUYXJnZXRJc0lu
U2hhZG93VHJlZSk7Ci0gICAgLy8gRklYTUU6IENvbnNpZGVyIG1lcmdpbmcgaGFuZGxlTG9jYWxF
dmVudHMgYW5kIGZpcmVFdmVudExpc3RlbmVycy4KLSAgICBpZiAobV9ub2RlKQotICAgICAgICBt
X25vZGUtPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LCBwaGFzZSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2N1cnJlbnRUYXJnZXQtPmZpcmVFdmVudExpc3RlbmVycyhldmVudCwgcGhhc2UpOwotfQog
Ci1ib29sIEV2ZW50Q29udGV4dDo6aXNNb3VzZU9yRm9jdXNFdmVudENvbnRleHQoKSBjb25zdAot
ewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudENvbnRleHQ6OmlzVG91Y2hFdmVu
dENvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotTW91c2VPckZvY3Vz
RXZlbnRDb250ZXh0OjpNb3VzZU9yRm9jdXNFdmVudENvbnRleHQoTm9kZSYgbm9kZSwgRXZlbnRU
YXJnZXQqIGN1cnJlbnRUYXJnZXQsIEV2ZW50VGFyZ2V0KiB0YXJnZXQsIGludCBjbG9zZWRTaGFk
b3dEZXB0aCkKLSAgICA6IEV2ZW50Q29udGV4dCgmbm9kZSwgY3VycmVudFRhcmdldCwgdGFyZ2V0
LCBjbG9zZWRTaGFkb3dEZXB0aCkKLXsKLX0KKyAgICBpZiAobV9yZWxhdGVkVGFyZ2V0KSB7Cisg
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6TW91c2VPckZvY3VzKTsKKyAgICAgICAgZXZl
bnQuc2V0UmVsYXRlZFRhcmdldChtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkpOworICAgIH0KIAotTW91
c2VPckZvY3VzRXZlbnRDb250ZXh0Ojp+TW91c2VPckZvY3VzRXZlbnRDb250ZXh0KCkgPSBkZWZh
dWx0OworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgaWYgKG1fdHlwZSA9PSBUeXBlOjpU
b3VjaCkgewogCi12b2lkIE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVu
dHMoRXZlbnQmIGV2ZW50LCBFdmVudEludm9rZVBoYXNlIHBoYXNlKSBjb25zdAotewotICAgIGlm
IChtX3JlbGF0ZWRUYXJnZXQpCi0gICAgICAgIGV2ZW50LnNldFJlbGF0ZWRUYXJnZXQobV9yZWxh
dGVkVGFyZ2V0LmdldCgpKTsKLSAgICBFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKGV2
ZW50LCBwaGFzZSk7Ci19CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgYXV0byBjaGVja1Jl
YWNoYWJpbGl0eSA9IFsmXShjb25zdCBSZWY8VG91Y2hMaXN0PiYgdG91Y2hMaXN0KSB7CisgICAg
ICAgICAgICBzaXplX3QgbGVuZ3RoID0gdG91Y2hMaXN0LT5sZW5ndGgoKTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgQVNT
RVJUKCFpc1VucmVhY2hhYmxlTm9kZShkb3duY2FzdDxOb2RlPih0b3VjaExpc3QtPml0ZW0oaSkt
PnRhcmdldCgpKSkpOworICAgICAgICB9CisgICAgICAgIGNoZWNrUmVhY2hhYmlsaXR5KG1fdG91
Y2hlcyk7CisgICAgICAgIGNoZWNrUmVhY2hhYmlsaXR5KG1fdGFyZ2V0VG91Y2hlcyk7CisgICAg
ICAgIGNoZWNrUmVhY2hhYmlsaXR5KG1fY2hhbmdlZFRvdWNoZXMpOworI2VuZGlmCisKKyAgICAg
ICAgYXV0byYgdG91Y2hFdmVudCA9IGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50KTsKKyAgICAg
ICAgdG91Y2hFdmVudC5zZXRUb3VjaGVzKG1fdG91Y2hlcy5wdHIoKSk7CisgICAgICAgIHRvdWNo
RXZlbnQuc2V0VGFyZ2V0VG91Y2hlcyhtX3RhcmdldFRvdWNoZXMucHRyKCkpOworICAgICAgICB0
b3VjaEV2ZW50LnNldENoYW5nZWRUb3VjaGVzKG1fY2hhbmdlZFRvdWNoZXMucHRyKCkpOworICAg
IH0KKyNlbmRpZgogCi1ib29sIE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dDo6aXNNb3VzZU9yRm9j
dXNFdmVudENvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOworICAgIC8vIEZJWE1F
OiBDb25zaWRlciBtZXJnaW5nIGhhbmRsZUxvY2FsRXZlbnRzIGFuZCBmaXJlRXZlbnRMaXN0ZW5l
cnMuCisgICAgaWYgKG1fbm9kZSAmJiBMSUtFTFkobV90eXBlICE9IFR5cGU6OldpbmRvdykpCisg
ICAgICAgIG1fbm9kZS0+aGFuZGxlTG9jYWxFdmVudHMoZXZlbnQsIHBoYXNlKTsKKyAgICBlbHNl
CisgICAgICAgIG1fY3VycmVudFRhcmdldC0+ZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LCBwaGFz
ZSk7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogCi1Ub3VjaEV2ZW50Q29udGV4dDo6
VG91Y2hFdmVudENvbnRleHQoTm9kZSYgbm9kZSwgRXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJnZXQs
IEV2ZW50VGFyZ2V0KiB0YXJnZXQsIGludCBjbG9zZWRTaGFkb3dEZXB0aCkKLSAgICA6IEV2ZW50
Q29udGV4dCgmbm9kZSwgY3VycmVudFRhcmdldCwgdGFyZ2V0LCBjbG9zZWRTaGFkb3dEZXB0aCkK
LSAgICAsIG1fdG91Y2hlcyhUb3VjaExpc3Q6OmNyZWF0ZSgpKQotICAgICwgbV90YXJnZXRUb3Vj
aGVzKFRvdWNoTGlzdDo6Y3JlYXRlKCkpCi0gICAgLCBtX2NoYW5nZWRUb3VjaGVzKFRvdWNoTGlz
dDo6Y3JlYXRlKCkpCit2b2lkIEV2ZW50Q29udGV4dDo6aW5pdGlhbGl6ZVRvdWNoTGlzdHMoKQog
eworICAgIG1fdG91Y2hlcyA9IFRvdWNoTGlzdDo6Y3JlYXRlKCk7CisgICAgbV90YXJnZXRUb3Vj
aGVzID0gVG91Y2hMaXN0OjpjcmVhdGUoKTsKKyAgICBtX2NoYW5nZWRUb3VjaGVzID0gVG91Y2hM
aXN0OjpjcmVhdGUoKTsKIH0KIAotVG91Y2hFdmVudENvbnRleHQ6On5Ub3VjaEV2ZW50Q29udGV4
dCgpID0gZGVmYXVsdDsKLQotdm9pZCBUb3VjaEV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVu
dHMoRXZlbnQmIGV2ZW50LCBFdmVudEludm9rZVBoYXNlIHBoYXNlKSBjb25zdAorVG91Y2hMaXN0
JiBFdmVudENvbnRleHQ6OnRvdWNoTGlzdChUb3VjaExpc3RUeXBlIHR5cGUpCiB7Ci0gICAgY2hl
Y2tSZWFjaGFiaWxpdHkobV90b3VjaGVzKTsKLSAgICBjaGVja1JlYWNoYWJpbGl0eShtX3Rhcmdl
dFRvdWNoZXMpOwotICAgIGNoZWNrUmVhY2hhYmlsaXR5KG1fY2hhbmdlZFRvdWNoZXMpOwotICAg
IGF1dG8mIHRvdWNoRXZlbnQgPSBkb3duY2FzdDxUb3VjaEV2ZW50PihldmVudCk7Ci0gICAgdG91
Y2hFdmVudC5zZXRUb3VjaGVzKG1fdG91Y2hlcy5wdHIoKSk7Ci0gICAgdG91Y2hFdmVudC5zZXRU
YXJnZXRUb3VjaGVzKG1fdGFyZ2V0VG91Y2hlcy5wdHIoKSk7Ci0gICAgdG91Y2hFdmVudC5zZXRD
aGFuZ2VkVG91Y2hlcyhtX2NoYW5nZWRUb3VjaGVzLnB0cigpKTsKLSAgICBFdmVudENvbnRleHQ6
OmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LCBwaGFzZSk7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBUb3VjaGVzOgorICAgICAgICByZXR1cm4gbV90b3VjaGVzLmdldCgpOworICAgIGNh
c2UgVGFyZ2V0VG91Y2hlczoKKyAgICAgICAgcmV0dXJuIG1fdGFyZ2V0VG91Y2hlcy5nZXQoKTsK
KyAgICBjYXNlIENoYW5nZWRUb3VjaGVzOgorICAgICAgICByZXR1cm4gbV9jaGFuZ2VkVG91Y2hl
cy5nZXQoKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1f
dG91Y2hlcy5nZXQoKTsKIH0KIAotYm9vbCBUb3VjaEV2ZW50Q29udGV4dDo6aXNUb3VjaEV2ZW50
Q29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19CisjZW5kaWYgLy8gRU5BQkxF
KFRPVUNIX0VWRU5UUykKIAogI2lmIEFTU0VSVF9FTkFCTEVECiAKLXZvaWQgVG91Y2hFdmVudENv
bnRleHQ6OmNoZWNrUmVhY2hhYmlsaXR5KGNvbnN0IFJlZjxUb3VjaExpc3Q+JiB0b3VjaExpc3Qp
IGNvbnN0Citib29sIEV2ZW50Q29udGV4dDo6aXNVbnJlYWNoYWJsZU5vZGUoRXZlbnRUYXJnZXQq
IHRhcmdldCkgY29uc3QKIHsKLSAgICBzaXplX3QgbGVuZ3RoID0gdG91Y2hMaXN0LT5sZW5ndGgo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBBU1NF
UlQoIWlzVW5yZWFjaGFibGVOb2RlKGRvd25jYXN0PE5vZGU+KHRvdWNoTGlzdC0+aXRlbShpKS0+
dGFyZ2V0KCkpKSk7CisgICAgLy8gRklYTUU6IENoZWNrcyBhbHNvIGZvciBTVkcgZWxlbWVudHMu
CisgICAgcmV0dXJuIGlzPE5vZGU+KHRhcmdldCkgJiYgIWRvd25jYXN0PE5vZGU+KCp0YXJnZXQp
LmlzU1ZHRWxlbWVudCgpICYmIG1fbm9kZS0+aXNDbG9zZWRTaGFkb3dIaWRkZW4oZG93bmNhc3Q8
Tm9kZT4oKnRhcmdldCkpOwogfQogCi0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKLQotI2VuZGlm
IC8vIEVOQUJMRShUT1VDSF9FVkVOVFMpCisjZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29u
dGV4dC5oCmluZGV4IDdjZmZlOGQ3NGQwYS4uNzUyZTIyZjYzYjhlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50Q29udGV4dC5oCkBAIC0zOCw4ICszOCwxNSBAQCBjbGFzcyBFdmVudENvbnRleHQgewogcHVi
bGljOgogICAgIHVzaW5nIEV2ZW50SW52b2tlUGhhc2UgPSBFdmVudFRhcmdldDo6RXZlbnRJbnZv
a2VQaGFzZTsKIAotICAgIEV2ZW50Q29udGV4dChOb2RlKiwgRXZlbnRUYXJnZXQqIGN1cnJlbnRU
YXJnZXQsIEV2ZW50VGFyZ2V0KiwgaW50IGNsb3NlZFNoYWRvd0RlcHRoKTsKLSAgICB2aXJ0dWFs
IH5FdmVudENvbnRleHQoKTsKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICAg
ICAgTm9ybWFsID0gMCwKKyAgICAgICAgTW91c2VPckZvY3VzLAorICAgICAgICBUb3VjaCwKKyAg
ICAgICAgV2luZG93LAorICAgIH07CisKKyAgICBFdmVudENvbnRleHQoVHlwZSwgTm9kZSosIEV2
ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0LCBFdmVudFRhcmdldCogdGFyZ2V0LCBpbnQgY2xvc2Vk
U2hhZG93RGVwdGgpOworICAgIH5FdmVudENvbnRleHQoKTsKIAogICAgIE5vZGUqIG5vZGUoKSBj
b25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KICAgICBFdmVudFRhcmdldCogY3VycmVudFRh
cmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRhcmdldC5nZXQoKTsgfQpAQCAtNDcsMTQg
KzU0LDI1IEBAIHB1YmxpYzoKICAgICBFdmVudFRhcmdldCogdGFyZ2V0KCkgY29uc3QgeyByZXR1
cm4gbV90YXJnZXQuZ2V0KCk7IH0KICAgICBpbnQgY2xvc2VkU2hhZG93RGVwdGgoKSBjb25zdCB7
IHJldHVybiBtX2Nsb3NlZFNoYWRvd0RlcHRoOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
TG9jYWxFdmVudHMoRXZlbnQmLCBFdmVudEludm9rZVBoYXNlKSBjb25zdDsKKyAgICB2b2lkIGhh
bmRsZUxvY2FsRXZlbnRzKEV2ZW50JiwgRXZlbnRJbnZva2VQaGFzZSkgY29uc3Q7CisKKyAgICBi
b29sIGlzTW91c2VPckZvY3VzRXZlbnRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09
IFR5cGU6Ok1vdXNlT3JGb2N1czsgfQorICAgIGJvb2wgaXNUb3VjaEV2ZW50Q29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpUb3VjaDsgfQorICAgIGJvb2wgaXNXaW5kb3dD
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OldpbmRvdzsgfQogCi0gICAg
dmlydHVhbCBib29sIGlzTW91c2VPckZvY3VzRXZlbnRDb250ZXh0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIGlzVG91Y2hFdmVudENvbnRleHQoKSBjb25zdDsKKyAgICBOb2RlKiByZWxhdGVk
VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGVkVGFyZ2V0LmdldCgpOyB9CisgICAgdm9p
ZCBzZXRSZWxhdGVkVGFyZ2V0KE5vZGUqKTsKIAotICAgIHZpcnR1YWwgTm9kZSogcmVsYXRlZFRh
cmdldCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQorICAgIGVudW0gVG91Y2hMaXN0VHlwZSB7IFRvdWNoZXMsIFRhcmdldFRvdWNoZXMsIENoYW5n
ZWRUb3VjaGVzIH07CisgICAgVG91Y2hMaXN0JiB0b3VjaExpc3QoVG91Y2hMaXN0VHlwZSk7Cisj
ZW5kaWYKIAogcHJvdGVjdGVkOgorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgdm9pZCBp
bml0aWFsaXplVG91Y2hMaXN0cygpOworI2VuZGlmCisKICNpZiBBU1NFUlRfRU5BQkxFRAogICAg
IGJvb2wgaXNVbnJlYWNoYWJsZU5vZGUoRXZlbnRUYXJnZXQqKSBjb25zdDsKICNlbmRpZgpAQCAt
NjIsNTkgKzgwLDM1IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwogICAg
IFJlZlB0cjxFdmVudFRhcmdldD4gbV9jdXJyZW50VGFyZ2V0OwogICAgIFJlZlB0cjxFdmVudFRh
cmdldD4gbV90YXJnZXQ7Ci0gICAgaW50IG1fY2xvc2VkU2hhZG93RGVwdGggeyAwIH07Ci0gICAg
Ym9vbCBtX2N1cnJlbnRUYXJnZXRJc0luU2hhZG93VHJlZSB7IGZhbHNlIH07Ci19OwotCi1jbGFz
cyBNb3VzZU9yRm9jdXNFdmVudENvbnRleHQgZmluYWwgOiBwdWJsaWMgRXZlbnRDb250ZXh0IHsK
LXB1YmxpYzoKLSAgICBNb3VzZU9yRm9jdXNFdmVudENvbnRleHQoTm9kZSYsIEV2ZW50VGFyZ2V0
KiBjdXJyZW50VGFyZ2V0LCBFdmVudFRhcmdldCosIGludCBjbG9zZWRTaGFkb3dEZXB0aCk7Ci0g
ICAgdmlydHVhbCB+TW91c2VPckZvY3VzRXZlbnRDb250ZXh0KCk7Ci0KLSAgICBOb2RlKiByZWxh
dGVkVGFyZ2V0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9yZWxhdGVkVGFyZ2V0LmdldCgpOyB9
Ci0gICAgdm9pZCBzZXRSZWxhdGVkVGFyZ2V0KE5vZGUqKTsKLQotcHJpdmF0ZToKLSAgICB2b2lk
IGhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50JiwgRXZlbnRJbnZva2VQaGFzZSkgY29uc3QgZmluYWw7
Ci0gICAgYm9vbCBpc01vdXNlT3JGb2N1c0V2ZW50Q29udGV4dCgpIGNvbnN0IGZpbmFsOwotCiAg
ICAgUmVmUHRyPE5vZGU+IG1fcmVsYXRlZFRhcmdldDsKLX07Ci0KICNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQotCi1jbGFzcyBUb3VjaEV2ZW50Q29udGV4dCBmaW5hbCA6IHB1YmxpYyBFdmVudENv
bnRleHQgewotcHVibGljOgotICAgIFRvdWNoRXZlbnRDb250ZXh0KE5vZGUmLCBFdmVudFRhcmdl
dCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJnZXQqLCBpbnQgY2xvc2VkU2hhZG93RGVwdGgpOwot
ICAgIHZpcnR1YWwgflRvdWNoRXZlbnRDb250ZXh0KCk7Ci0KLSAgICBlbnVtIFRvdWNoTGlzdFR5
cGUgeyBUb3VjaGVzLCBUYXJnZXRUb3VjaGVzLCBDaGFuZ2VkVG91Y2hlcyB9OwotICAgIFRvdWNo
TGlzdCYgdG91Y2hMaXN0KFRvdWNoTGlzdFR5cGUpOwotCi1wcml2YXRlOgotICAgIHZvaWQgaGFu
ZGxlTG9jYWxFdmVudHMoRXZlbnQmLCBFdmVudEludm9rZVBoYXNlKSBjb25zdCBmaW5hbDsKLSAg
ICBib29sIGlzVG91Y2hFdmVudENvbnRleHQoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgY2hl
Y2tSZWFjaGFiaWxpdHkoY29uc3QgUmVmPFRvdWNoTGlzdD4mKSBjb25zdDsKLQotICAgIFJlZjxU
b3VjaExpc3Q+IG1fdG91Y2hlczsKLSAgICBSZWY8VG91Y2hMaXN0PiBtX3RhcmdldFRvdWNoZXM7
Ci0gICAgUmVmPFRvdWNoTGlzdD4gbV9jaGFuZ2VkVG91Y2hlczsKKyAgICBSZWZQdHI8VG91Y2hM
aXN0PiBtX3RvdWNoZXM7CisgICAgUmVmUHRyPFRvdWNoTGlzdD4gbV90YXJnZXRUb3VjaGVzOwor
ICAgIFJlZlB0cjxUb3VjaExpc3Q+IG1fY2hhbmdlZFRvdWNoZXM7CisjZW5kaWYKKyAgICBpbnQg
bV9jbG9zZWRTaGFkb3dEZXB0aCB7IDAgfTsKKyAgICBib29sIG1fY3VycmVudFRhcmdldElzSW5T
aGFkb3dUcmVlIHsgZmFsc2UgfTsKKyAgICBUeXBlIG1fdHlwZSB7IFR5cGU6Ok5vcm1hbCB9Owog
fTsKIAotI2VuZGlmIC8vIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0KLSNpZiBBU1NFUlRfRU5BQkxF
RAotCi1pbmxpbmUgYm9vbCBFdmVudENvbnRleHQ6OmlzVW5yZWFjaGFibGVOb2RlKEV2ZW50VGFy
Z2V0KiB0YXJnZXQpIGNvbnN0CitpbmxpbmUgRXZlbnRDb250ZXh0OjpFdmVudENvbnRleHQoVHlw
ZSB0eXBlLCBOb2RlKiBub2RlLCBFdmVudFRhcmdldCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJn
ZXQqIHRhcmdldCwgaW50IGNsb3NlZFNoYWRvd0RlcHRoKQorICAgIDogbV9ub2RlIHsgbm9kZSB9
CisgICAgLCBtX2N1cnJlbnRUYXJnZXQgeyBjdXJyZW50VGFyZ2V0IH0KKyAgICAsIG1fdGFyZ2V0
IHsgdGFyZ2V0IH0KKyAgICAsIG1fY2xvc2VkU2hhZG93RGVwdGggeyBjbG9zZWRTaGFkb3dEZXB0
aCB9CisgICAgLCBtX2N1cnJlbnRUYXJnZXRJc0luU2hhZG93VHJlZSB7IGlzPE5vZGU+KGN1cnJl
bnRUYXJnZXQpICYmIGRvd25jYXN0PE5vZGU+KCpjdXJyZW50VGFyZ2V0KS5pc0luU2hhZG93VHJl
ZSgpIH0KKyAgICAsIG1fdHlwZSh0eXBlKQogewotICAgIC8vIEZJWE1FOiBDaGVja3MgYWxzbyBm
b3IgU1ZHIGVsZW1lbnRzLgotICAgIHJldHVybiBpczxOb2RlPih0YXJnZXQpICYmICFkb3duY2Fz
dDxOb2RlPigqdGFyZ2V0KS5pc1NWR0VsZW1lbnQoKSAmJiBtX25vZGUtPmlzQ2xvc2VkU2hhZG93
SGlkZGVuKGRvd25jYXN0PE5vZGU+KCp0YXJnZXQpKTsKLX0KLQorICAgIEFTU0VSVCghaXNVbnJl
YWNoYWJsZU5vZGUobV90YXJnZXQuZ2V0KCkpKTsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQor
ICAgIGlmIChtX3R5cGUgPT0gVHlwZTo6VG91Y2gpCisgICAgICAgIGluaXRpYWxpemVUb3VjaExp
c3RzKCk7CisjZWxzZQorICAgIEFTU0VSVChtX3R5cGUgIT0gVHlwZTo6VG91Y2gpOwogI2VuZGlm
Cit9CiAKLWlubGluZSB2b2lkIE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dDo6c2V0UmVsYXRlZFRh
cmdldChOb2RlKiByZWxhdGVkVGFyZ2V0KQoraW5saW5lIHZvaWQgRXZlbnRDb250ZXh0OjpzZXRS
ZWxhdGVkVGFyZ2V0KE5vZGUqIHJlbGF0ZWRUYXJnZXQpCiB7CiAgICAgQVNTRVJUKCFpc1VucmVh
Y2hhYmxlTm9kZShyZWxhdGVkVGFyZ2V0KSk7CiAgICAgbV9yZWxhdGVkVGFyZ2V0ID0gcmVsYXRl
ZFRhcmdldDsKQEAgLTEyMiw3ICsxMTYsNyBAQCBpbmxpbmUgdm9pZCBNb3VzZU9yRm9jdXNFdmVu
dENvbnRleHQ6OnNldFJlbGF0ZWRUYXJnZXQoTm9kZSogcmVsYXRlZFRhcmdldCkKIAogI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCiAKLWlubGluZSBUb3VjaExpc3QmIFRvdWNoRXZlbnRDb250ZXh0
Ojp0b3VjaExpc3QoVG91Y2hMaXN0VHlwZSB0eXBlKQoraW5saW5lIFRvdWNoTGlzdCYgRXZlbnRD
b250ZXh0Ojp0b3VjaExpc3QoVG91Y2hMaXN0VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlw
ZSkgewogICAgIGNhc2UgVG91Y2hlczoKQEAgLTEzOCwyMiArMTMyLDQgQEAgaW5saW5lIFRvdWNo
TGlzdCYgVG91Y2hFdmVudENvbnRleHQ6OnRvdWNoTGlzdChUb3VjaExpc3RUeXBlIHR5cGUpCiAK
ICNlbmRpZgogCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgIUFTU0VSVF9FTkFCTEVECi0K
LWlubGluZSB2b2lkIFRvdWNoRXZlbnRDb250ZXh0OjpjaGVja1JlYWNoYWJpbGl0eShjb25zdCBS
ZWY8VG91Y2hMaXN0PiYpIGNvbnN0Ci17Ci19Ci0KLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6TW91c2VPckZv
Y3VzRXZlbnRDb250ZXh0KQotc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkV2ZW50
Q29udGV4dCYgY29udGV4dCkgeyByZXR1cm4gY29udGV4dC5pc01vdXNlT3JGb2N1c0V2ZW50Q29u
dGV4dCgpOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLSNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb3VjaEV2
ZW50Q29udGV4dCkKLXN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpFdmVudENvbnRl
eHQmIGNvbnRleHQpIHsgcmV0dXJuIGNvbnRleHQuaXNUb3VjaEV2ZW50Q29udGV4dCgpOyB9Ci1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudFBhdGguY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5j
cHAKaW5kZXggNzk1MWI3Yjc4YjdkLi4zNWQzMmQ3NDQ2YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudFBhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBh
dGguY3BwCkBAIC0zNSwyNSArMzUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IFdpbmRvd0V2ZW50Q29udGV4dCBmaW5hbCA6IHB1YmxpYyBFdmVudENvbnRleHQgewotcHVibGlj
OgotICAgIFdpbmRvd0V2ZW50Q29udGV4dChOb2RlJiwgRE9NV2luZG93JiwgRXZlbnRUYXJnZXQm
LCBpbnQgY2xvc2VkU2hhZG93RGVwdGgpOwotcHJpdmF0ZToKLSAgICB2b2lkIGhhbmRsZUxvY2Fs
RXZlbnRzKEV2ZW50JiwgRXZlbnRJbnZva2VQaGFzZSkgY29uc3QgZmluYWw7Ci19OwotCi1pbmxp
bmUgV2luZG93RXZlbnRDb250ZXh0OjpXaW5kb3dFdmVudENvbnRleHQoTm9kZSYgbm9kZSwgRE9N
V2luZG93JiBjdXJyZW50VGFyZ2V0LCBFdmVudFRhcmdldCYgdGFyZ2V0LCBpbnQgY2xvc2VkU2hh
ZG93RGVwdGgpCi0gICAgOiBFdmVudENvbnRleHQoJm5vZGUsICZjdXJyZW50VGFyZ2V0LCAmdGFy
Z2V0LCBjbG9zZWRTaGFkb3dEZXB0aCkKLXsKLX0KLQotdm9pZCBXaW5kb3dFdmVudENvbnRleHQ6
OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCwgRXZlbnRJbnZva2VQaGFzZSBwaGFzZSkg
Y29uc3QKLXsKLSAgICBldmVudC5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkpOwotICAgIGV2ZW50
LnNldEN1cnJlbnRUYXJnZXQobV9jdXJyZW50VGFyZ2V0LmdldCgpLCBtX2N1cnJlbnRUYXJnZXRJ
c0luU2hhZG93VHJlZSk7Ci0gICAgbV9jdXJyZW50VGFyZ2V0LT5maXJlRXZlbnRMaXN0ZW5lcnMo
ZXZlbnQsIHBoYXNlKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIHNob3VsZEV2ZW50Q3Jvc3NT
aGFkb3dCb3VuZGFyeShFdmVudCYgZXZlbnQsIFNoYWRvd1Jvb3QmIHNoYWRvd1Jvb3QsIEV2ZW50
VGFyZ2V0JiB0YXJnZXQpCiB7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBFTkFCTEUo
VklERU8pCkBAIC0xMTMsMjIgKzk0LDE1IEBAIEV2ZW50UGF0aDo6RXZlbnRQYXRoKE5vZGUmIG9y
aWdpbmFsVGFyZ2V0LCBFdmVudCYgZXZlbnQpCiAKIHZvaWQgRXZlbnRQYXRoOjpidWlsZFBhdGgo
Tm9kZSYgb3JpZ2luYWxUYXJnZXQsIEV2ZW50JiBldmVudCkKIHsKLSAgICB1c2luZyBNYWtlRXZl
bnRDb250ZXh0ID0gc3RkOjp1bmlxdWVfcHRyPEV2ZW50Q29udGV4dD4gKCopKE5vZGUmLCBFdmVu
dFRhcmdldCosIEV2ZW50VGFyZ2V0KiwgaW50IGNsb3NlZFNoYWRvd0RlcHRoKTsKLSAgICBNYWtl
RXZlbnRDb250ZXh0IG1ha2VFdmVudENvbnRleHQgPSBbXSAoTm9kZSYgbm9kZSwgRXZlbnRUYXJn
ZXQqIGN1cnJlbnRUYXJnZXQsIEV2ZW50VGFyZ2V0KiB0YXJnZXQsIGludCBjbG9zZWRTaGFkb3dE
ZXB0aCkgewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxFdmVudENvbnRleHQ+KCZub2RlLCBj
dXJyZW50VGFyZ2V0LCB0YXJnZXQsIGNsb3NlZFNoYWRvd0RlcHRoKTsKLSAgICB9OwotICAgIGlm
IChpczxNb3VzZUV2ZW50PihldmVudCkgfHwgZXZlbnQuaXNGb2N1c0V2ZW50KCkpIHsKLSAgICAg
ICAgbWFrZUV2ZW50Q29udGV4dCA9IFtdIChOb2RlJiBub2RlLCBFdmVudFRhcmdldCogY3VycmVu
dFRhcmdldCwgRXZlbnRUYXJnZXQqIHRhcmdldCwgaW50IGNsb3NlZFNoYWRvd0RlcHRoKSAtPiBz
dGQ6OnVuaXF1ZV9wdHI8RXZlbnRDb250ZXh0PiB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVu
aXF1ZTxNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ+KG5vZGUsIGN1cnJlbnRUYXJnZXQsIHRhcmdl
dCwgY2xvc2VkU2hhZG93RGVwdGgpOwotICAgICAgICB9OwotICAgIH0KKyAgICBFdmVudENvbnRl
eHQ6OlR5cGUgY29udGV4dFR5cGUgPSBbJl0oKSB7CisgICAgICAgIGlmIChpczxNb3VzZUV2ZW50
PihldmVudCkgfHwgZXZlbnQuaXNGb2N1c0V2ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gRXZl
bnRDb250ZXh0OjpUeXBlOjpNb3VzZU9yRm9jdXM7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
LSAgICBpZiAoaXM8VG91Y2hFdmVudD4oZXZlbnQpKSB7Ci0gICAgICAgIG1ha2VFdmVudENvbnRl
eHQgPSBbXSAoTm9kZSYgbm9kZSwgRXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJnZXQsIEV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGludCBjbG9zZWRTaGFkb3dEZXB0aCkgLT4gc3RkOjp1bmlxdWVfcHRyPEV2
ZW50Q29udGV4dD4gewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8VG91Y2hFdmVudENv
bnRleHQ+KG5vZGUsIGN1cnJlbnRUYXJnZXQsIHRhcmdldCwgY2xvc2VkU2hhZG93RGVwdGgpOwot
ICAgICAgICB9OwotICAgIH0KKyAgICAgICAgaWYgKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSkKKyAg
ICAgICAgICAgIHJldHVybiBFdmVudENvbnRleHQ6OlR5cGU6OlRvdWNoOwogI2VuZGlmCisgICAg
ICAgIHJldHVybiBFdmVudENvbnRleHQ6OlR5cGU6Ok5vcm1hbDsKKyAgICB9KCk7CiAKICAgICBO
b2RlKiBub2RlID0gbm9kZU9ySG9zdElmUHNldWRvRWxlbWVudCgmb3JpZ2luYWxUYXJnZXQpOwog
ICAgIE5vZGUqIHRhcmdldCA9IG5vZGUgPyBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxl
cygqbm9kZSkgOiBudWxscHRyOwpAQCAtMTM3LDcgKzExMSw3IEBAIHZvaWQgRXZlbnRQYXRoOjpi
dWlsZFBhdGgoTm9kZSYgb3JpZ2luYWxUYXJnZXQsIEV2ZW50JiBldmVudCkKICAgICAvLyBUaGV5
IGNvdWxkIGJlIG5lZ2F0aXZlIGZvciBub2RlcyBvdXRzaWRlIHRoZSBzaGFkb3cgdHJlZSBvZiB0
aGUgdGFyZ2V0IG5vZGUuCiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgd2hpbGUgKG5vZGUp
IHsKLSAgICAgICAgICAgIG1fcGF0aC5hcHBlbmQobWFrZUV2ZW50Q29udGV4dCgqbm9kZSwgZXZl
bnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoKm5vZGUpLCB0YXJnZXQsIGNsb3NlZFNoYWRv
d0RlcHRoKSk7CisgICAgICAgICAgICBtX3BhdGguYXBwZW5kKEV2ZW50Q29udGV4dCB7IGNvbnRl
eHRUeXBlLCBub2RlLCBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcygqbm9kZSksIHRh
cmdldCwgY2xvc2VkU2hhZG93RGVwdGggfSk7CiAKICAgICAgICAgICAgIGlmIChpczxTaGFkb3dS
b290Pigqbm9kZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDksMTQgKzEyMywxMyBA
QCB2b2lkIEV2ZW50UGF0aDo6YnVpbGRQYXRoKE5vZGUmIG9yaWdpbmFsVGFyZ2V0LCBFdmVudCYg
ZXZlbnQpCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0YXJnZXQpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAodGFyZ2V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byog
d2luZG93ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpub2RlKS5kb21XaW5kb3coKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3BhdGguYXBwZW5kKG1ha2VVbmlxdWU8V2luZG93RXZlbnRD
b250ZXh0Pigqbm9kZSwgKndpbmRvdywgKnRhcmdldCwgY2xvc2VkU2hhZG93RGVwdGgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhdGguYXBwZW5kKEV2ZW50Q29udGV4dCB7IEV2
ZW50Q29udGV4dDo6VHlwZTo6V2luZG93LCBub2RlLCB3aW5kb3csIHRhcmdldCwgY2xvc2VkU2hh
ZG93RGVwdGggfSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhdXRv
KiBzaGFkb3dSb290T2ZQYXJlbnQgPSBwYXJlbnQtPnNoYWRvd1Jvb3QoKTsKLSAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzaGFkb3dSb290T2ZQYXJlbnQpKSB7CisgICAgICAgICAgICBpZiAoYXV0
byogc2hhZG93Um9vdE9mUGFyZW50ID0gcGFyZW50LT5zaGFkb3dSb290KCk7IFVOTElLRUxZKHNo
YWRvd1Jvb3RPZlBhcmVudCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYXV0byogYXNzaWduZWRT
bG90ID0gc2hhZG93Um9vdE9mUGFyZW50LT5maW5kQXNzaWduZWRTbG90KCpub2RlKSkgewogICAg
ICAgICAgICAgICAgICAgICBpZiAoc2hhZG93Um9vdE9mUGFyZW50LT5tb2RlKCkgIT0gU2hhZG93
Um9vdE1vZGU6Ok9wZW4pCiAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWRTaGFkb3dEZXB0
aCsrOwpAQCAtMTg1LDE3ICsxNTgsMTYgQEAgdm9pZCBFdmVudFBhdGg6OnNldFJlbGF0ZWRUYXJn
ZXQoTm9kZSYgb3JpZ2luLCBFdmVudFRhcmdldCYgcmVsYXRlZFRhcmdldCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYXV0byYgcmVsYXRlZE5vZGUgPSBkb3duY2FzdDxOb2RlPihyZWxhdGVkVGFy
Z2V0KTsKLSAgICBSZWxhdGVkTm9kZVJldGFyZ2V0ZXIgcmV0YXJnZXRlcihyZWxhdGVkTm9kZSwg
Km1fcGF0aFswXS0+bm9kZSgpKTsKKyAgICBSZWxhdGVkTm9kZVJldGFyZ2V0ZXIgcmV0YXJnZXRl
cihyZWxhdGVkTm9kZSwgKm1fcGF0aFswXS5ub2RlKCkpOwogCiAgICAgYm9vbCBvcmlnaW5Jc1Jl
bGF0ZWRUYXJnZXQgPSAmb3JpZ2luID09ICZyZWxhdGVkTm9kZTsKICAgICBOb2RlJiByb290Tm9k
ZUluT3JpZ2luVHJlZVNjb3BlID0gb3JpZ2luLnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7CiAgICAg
VHJlZVNjb3BlKiBwcmV2aW91c1RyZWVTY29wZSA9IG51bGxwdHI7CiAgICAgc2l6ZV90IG9yaWdp
bmFsRXZlbnRQYXRoU2l6ZSA9IG1fcGF0aC5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBjb250
ZXh0SW5kZXggPSAwOyBjb250ZXh0SW5kZXggPCBvcmlnaW5hbEV2ZW50UGF0aFNpemU7IGNvbnRl
eHRJbmRleCsrKSB7Ci0gICAgICAgIGF1dG8mIGFtYmdpb3VzQ29udGV4dCA9ICptX3BhdGhbY29u
dGV4dEluZGV4XTsKLSAgICAgICAgaWYgKCFpczxNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ+KGFt
Ymdpb3VzQ29udGV4dCkpCisgICAgICAgIGF1dG8mIGNvbnRleHQgPSBtX3BhdGhbY29udGV4dElu
ZGV4XTsKKyAgICAgICAgaWYgKCFjb250ZXh0LmlzTW91c2VPckZvY3VzRXZlbnRDb250ZXh0KCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byYgY29udGV4dCA9IGRvd25jYXN0
PE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dD4oYW1iZ2lvdXNDb250ZXh0KTsKIAogICAgICAgICBO
b2RlJiBjdXJyZW50VGFyZ2V0ID0gKmNvbnRleHQubm9kZSgpOwogICAgICAgICBUcmVlU2NvcGUm
IGN1cnJlbnRUcmVlU2NvcGUgPSBjdXJyZW50VGFyZ2V0LnRyZWVTY29wZSgpOwpAQCAtMjI3LDE3
ICsxOTksMTcgQEAgdm9pZCBFdmVudFBhdGg6OnJldGFyZ2V0VG91Y2goVG91Y2hFdmVudENvbnRl
eHQ6OlRvdWNoTGlzdFR5cGUgdHlwZSwgY29uc3QgVG91Y2gKICAgICBpZiAoIWlzPE5vZGU+KGV2
ZW50VGFyZ2V0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVsYXRlZE5vZGVSZXRhcmdldGVy
IHJldGFyZ2V0ZXIoZG93bmNhc3Q8Tm9kZT4oKmV2ZW50VGFyZ2V0KSwgKm1fcGF0aFswXS0+bm9k
ZSgpKTsKKyAgICBSZWxhdGVkTm9kZVJldGFyZ2V0ZXIgcmV0YXJnZXRlcihkb3duY2FzdDxOb2Rl
PigqZXZlbnRUYXJnZXQpLCAqbV9wYXRoWzBdLm5vZGUoKSk7CiAgICAgVHJlZVNjb3BlKiBwcmV2
aW91c1RyZWVTY29wZSA9IG51bGxwdHI7CiAgICAgZm9yIChhdXRvJiBjb250ZXh0IDogbV9wYXRo
KSB7Ci0gICAgICAgIE5vZGUmIGN1cnJlbnRUYXJnZXQgPSAqY29udGV4dC0+bm9kZSgpOworICAg
ICAgICBOb2RlJiBjdXJyZW50VGFyZ2V0ID0gKmNvbnRleHQubm9kZSgpOwogICAgICAgICBUcmVl
U2NvcGUmIGN1cnJlbnRUcmVlU2NvcGUgPSBjdXJyZW50VGFyZ2V0LnRyZWVTY29wZSgpOwogICAg
ICAgICBpZiAoVU5MSUtFTFkocHJldmlvdXNUcmVlU2NvcGUgJiYgJmN1cnJlbnRUcmVlU2NvcGUg
IT0gcHJldmlvdXNUcmVlU2NvcGUpKQogICAgICAgICAgICAgcmV0YXJnZXRlci5tb3ZlVG9OZXdU
cmVlU2NvcGUocHJldmlvdXNUcmVlU2NvcGUsIGN1cnJlbnRUcmVlU2NvcGUpOwogCi0gICAgICAg
IGlmIChpczxUb3VjaEV2ZW50Q29udGV4dD4oKmNvbnRleHQpKSB7CisgICAgICAgIGlmIChjb250
ZXh0LmlzVG91Y2hFdmVudENvbnRleHQoKSkgewogICAgICAgICAgICAgTm9kZSogY3VycmVudFJl
bGF0ZWROb2RlID0gcmV0YXJnZXRlci5jdXJyZW50Tm9kZShjdXJyZW50VGFyZ2V0KTsKLSAgICAg
ICAgICAgIGRvd25jYXN0PFRvdWNoRXZlbnRDb250ZXh0PigqY29udGV4dCkudG91Y2hMaXN0KHR5
cGUpLmFwcGVuZCh0b3VjaC5jbG9uZVdpdGhOZXdUYXJnZXQoY3VycmVudFJlbGF0ZWROb2RlKSk7
CisgICAgICAgICAgICBjb250ZXh0LnRvdWNoTGlzdCh0eXBlKS5hcHBlbmQodG91Y2guY2xvbmVX
aXRoTmV3VGFyZ2V0KGN1cnJlbnRSZWxhdGVkTm9kZSkpOwogICAgICAgICB9CiAKICAgICAgICAg
cHJldmlvdXNUcmVlU2NvcGUgPSAmY3VycmVudFRyZWVTY29wZTsKQEAgLTI1Miw5ICsyMjQsOSBA
QCB2b2lkIEV2ZW50UGF0aDo6cmV0YXJnZXRUb3VjaExpc3QoVG91Y2hFdmVudENvbnRleHQ6OlRv
dWNoTGlzdFR5cGUgdHlwZSwgY29uc3QgVAogCiB2b2lkIEV2ZW50UGF0aDo6cmV0YXJnZXRUb3Vj
aExpc3RzKGNvbnN0IFRvdWNoRXZlbnQmIGV2ZW50KQogewotICAgIHJldGFyZ2V0VG91Y2hMaXN0
KFRvdWNoRXZlbnRDb250ZXh0OjpUb3VjaGVzLCBldmVudC50b3VjaGVzKCkpOwotICAgIHJldGFy
Z2V0VG91Y2hMaXN0KFRvdWNoRXZlbnRDb250ZXh0OjpUYXJnZXRUb3VjaGVzLCBldmVudC50YXJn
ZXRUb3VjaGVzKCkpOwotICAgIHJldGFyZ2V0VG91Y2hMaXN0KFRvdWNoRXZlbnRDb250ZXh0OjpD
aGFuZ2VkVG91Y2hlcywgZXZlbnQuY2hhbmdlZFRvdWNoZXMoKSk7CisgICAgcmV0YXJnZXRUb3Vj
aExpc3QoRXZlbnRDb250ZXh0OjpUb3VjaExpc3RUeXBlOjpUb3VjaGVzLCBldmVudC50b3VjaGVz
KCkpOworICAgIHJldGFyZ2V0VG91Y2hMaXN0KEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlwZTo6
VGFyZ2V0VG91Y2hlcywgZXZlbnQudGFyZ2V0VG91Y2hlcygpKTsKKyAgICByZXRhcmdldFRvdWNo
TGlzdChFdmVudENvbnRleHQ6OlRvdWNoTGlzdFR5cGU6OkNoYW5nZWRUb3VjaGVzLCBldmVudC5j
aGFuZ2VkVG91Y2hlcygpKTsKIH0KIAogI2VuZGlmCkBAIC0yNzEsMTAgKzI0MywxMCBAQCBWZWN0
b3I8RXZlbnRUYXJnZXQqPiBFdmVudFBhdGg6OmNvbXB1dGVQYXRoVW5jbG9zZWRUb1RhcmdldChj
b25zdCBFdmVudFRhcmdldCYgdAogICAgIHBhdGgucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRo
U2l6ZSk7CiAKICAgICBhdXRvIGN1cnJlbnRUYXJnZXRJbmRleCA9IG1fcGF0aC5maW5kTWF0Y2hp
bmcoWyZ0YXJnZXRdIChhdXRvJiBjb250ZXh0KSB7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LT5j
dXJyZW50VGFyZ2V0KCkgPT0gJnRhcmdldDsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3VycmVu
dFRhcmdldCgpID09ICZ0YXJnZXQ7CiAgICAgfSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVu
dFRhcmdldEluZGV4ICE9IG5vdEZvdW5kKTsKLSAgICBhdXRvIGN1cnJlbnRUYXJnZXREZXB0aCA9
IG1fcGF0aFtjdXJyZW50VGFyZ2V0SW5kZXhdLT5jbG9zZWRTaGFkb3dEZXB0aCgpOworICAgIGF1
dG8gY3VycmVudFRhcmdldERlcHRoID0gbV9wYXRoW2N1cnJlbnRUYXJnZXRJbmRleF0uY2xvc2Vk
U2hhZG93RGVwdGgoKTsKIAogICAgIGF1dG8gYXBwZW5kVGFyZ2V0V2l0aExlc3NlckRlcHRoID0g
WyZwYXRoXSAoY29uc3QgRXZlbnRDb250ZXh0JiBjdXJyZW50Q29udGV4dCwgaW50JiBjdXJyZW50
RGVwdGhBbGxvd2VkKSB7CiAgICAgICAgIGF1dG8gZGVwdGggPSBjdXJyZW50Q29udGV4dC5jbG9z
ZWRTaGFkb3dEZXB0aCgpOwpAQCAtMjkwLDE0ICsyNjIsMTQgQEAgVmVjdG9yPEV2ZW50VGFyZ2V0
Kj4gRXZlbnRQYXRoOjpjb21wdXRlUGF0aFVuY2xvc2VkVG9UYXJnZXQoY29uc3QgRXZlbnRUYXJn
ZXQmIHQKICAgICBhdXRvIGN1cnJlbnREZXB0aEFsbG93ZWQgPSBjdXJyZW50VGFyZ2V0RGVwdGg7
CiAgICAgYXV0byBpID0gY3VycmVudFRhcmdldEluZGV4OwogICAgIGRvIHsKLSAgICAgICAgYXBw
ZW5kVGFyZ2V0V2l0aExlc3NlckRlcHRoKCptX3BhdGhbaV0sIGN1cnJlbnREZXB0aEFsbG93ZWQp
OworICAgICAgICBhcHBlbmRUYXJnZXRXaXRoTGVzc2VyRGVwdGgobV9wYXRoW2ldLCBjdXJyZW50
RGVwdGhBbGxvd2VkKTsKICAgICB9IHdoaWxlIChpLS0pOwogICAgIHBhdGgucmV2ZXJzZSgpOwog
CiAgICAgY3VycmVudERlcHRoQWxsb3dlZCA9IGN1cnJlbnRUYXJnZXREZXB0aDsKICAgICBmb3Ig
KGF1dG8gaSA9IGN1cnJlbnRUYXJnZXRJbmRleCArIDE7IGkgPCBwYXRoU2l6ZTsgKytpKQotICAg
ICAgICBhcHBlbmRUYXJnZXRXaXRoTGVzc2VyRGVwdGgoKm1fcGF0aFtpXSwgY3VycmVudERlcHRo
QWxsb3dlZCk7Ci0gICAgCisgICAgICAgIGFwcGVuZFRhcmdldFdpdGhMZXNzZXJEZXB0aChtX3Bh
dGhbaV0sIGN1cnJlbnREZXB0aEFsbG93ZWQpOworCiAgICAgcmV0dXJuIHBhdGg7CiB9CiAKQEAg
LTMwOCw3ICsyODAsNyBAQCBFdmVudFBhdGg6OkV2ZW50UGF0aChjb25zdCBWZWN0b3I8RWxlbWVu
dCo+JiB0YXJnZXRzKQogICAgICAgICBBU1NFUlQodGFyZ2V0KTsKICAgICAgICAgTm9kZSogb3Jp
Z2luID0gKnRhcmdldHMuYmVnaW4oKTsKICAgICAgICAgaWYgKCF0YXJnZXQtPmlzQ2xvc2VkU2hh
ZG93SGlkZGVuKCpvcmlnaW4pKQotICAgICAgICAgICAgbV9wYXRoLmFwcGVuZChtYWtlVW5pcXVl
PEV2ZW50Q29udGV4dD4odGFyZ2V0LCB0YXJnZXQsIG9yaWdpbiwgMCkpOworICAgICAgICAgICAg
bV9wYXRoLmFwcGVuZChFdmVudENvbnRleHQgeyBFdmVudENvbnRleHQ6OlR5cGU6Ok5vcm1hbCwg
dGFyZ2V0LCB0YXJnZXQsIG9yaWdpbiwgMCB9KTsKICAgICB9CiB9CiAKQEAgLTMxNyw3ICsyODks
NyBAQCBFdmVudFBhdGg6OkV2ZW50UGF0aChjb25zdCBWZWN0b3I8RXZlbnRUYXJnZXQqPiYgdGFy
Z2V0cykKICAgICBmb3IgKGF1dG8qIHRhcmdldCA6IHRhcmdldHMpIHsKICAgICAgICAgQVNTRVJU
KHRhcmdldCk7CiAgICAgICAgIEFTU0VSVCghaXM8Tm9kZT4odGFyZ2V0KSk7Ci0gICAgICAgIG1f
cGF0aC5hcHBlbmQobWFrZVVuaXF1ZTxFdmVudENvbnRleHQ+KG51bGxwdHIsIHRhcmdldCwgKnRh
cmdldHMuYmVnaW4oKSwgMCkpOworICAgICAgICBtX3BhdGguYXBwZW5kKEV2ZW50Q29udGV4dCB7
IEV2ZW50Q29udGV4dDo6VHlwZTo6Tm9ybWFsLCBudWxscHRyLCB0YXJnZXQsICp0YXJnZXRzLmJl
Z2luKCksIDAgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRoLmgKaW5kZXggYjk0NTJm
MzA1NjBlLi40YmQ1YTNkMWJlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRoLmgKQEAgLTM5LDggKzM5
LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9wYXRo
LmlzRW1wdHkoKTsgfQogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoLnNp
emUoKTsgfQotICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgY29udGV4dEF0KHNpemVfdCBpKSBjb25z
dCB7IHJldHVybiAqbV9wYXRoW2ldOyB9Ci0gICAgRXZlbnRDb250ZXh0JiBjb250ZXh0QXQoc2l6
ZV90IGkpIHsgcmV0dXJuICptX3BhdGhbaV07IH0KKyAgICBjb25zdCBFdmVudENvbnRleHQmIGNv
bnRleHRBdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9wYXRoW2ldOyB9CisgICAgRXZlbnRD
b250ZXh0JiBjb250ZXh0QXQoc2l6ZV90IGkpIHsgcmV0dXJuIG1fcGF0aFtpXTsgfQogCiAgICAg
VmVjdG9yPEV2ZW50VGFyZ2V0Kj4gY29tcHV0ZVBhdGhVbmNsb3NlZFRvVGFyZ2V0KGNvbnN0IEV2
ZW50VGFyZ2V0JikgY29uc3Q7CiAKQEAgLTUxLDEyICs1MSwxMiBAQCBwcml2YXRlOgogICAgIHZv
aWQgc2V0UmVsYXRlZFRhcmdldChOb2RlJiBvcmlnaW4sIEV2ZW50VGFyZ2V0Jik7CiAKICNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHZvaWQgcmV0YXJnZXRUb3VjaChUb3VjaEV2ZW50Q29u
dGV4dDo6VG91Y2hMaXN0VHlwZSwgY29uc3QgVG91Y2gmKTsKLSAgICB2b2lkIHJldGFyZ2V0VG91
Y2hMaXN0KFRvdWNoRXZlbnRDb250ZXh0OjpUb3VjaExpc3RUeXBlLCBjb25zdCBUb3VjaExpc3Qq
KTsKKyAgICB2b2lkIHJldGFyZ2V0VG91Y2goRXZlbnRDb250ZXh0OjpUb3VjaExpc3RUeXBlLCBj
b25zdCBUb3VjaCYpOworICAgIHZvaWQgcmV0YXJnZXRUb3VjaExpc3QoRXZlbnRDb250ZXh0OjpU
b3VjaExpc3RUeXBlLCBjb25zdCBUb3VjaExpc3QqKTsKICAgICB2b2lkIHJldGFyZ2V0VG91Y2hM
aXN0cyhjb25zdCBUb3VjaEV2ZW50Jik7CiAjZW5kaWYKIAotICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8RXZlbnRDb250ZXh0PiwgMzI+IG1fcGF0aDsKKyAgICBWZWN0b3I8RXZlbnRDb250ZXh0
LCAxNj4gbV9wYXRoOwogfTsKIAogaW5saW5lIE5vZGUqIEV2ZW50UGF0aDo6ZXZlbnRUYXJnZXRS
ZXNwZWN0aW5nVGFyZ2V0UnVsZXMoTm9kZSYgcmVmZXJlbmNlTm9kZSkK
</data>
<flag name="commit-queue"
          id="439455"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420901</attachid>
            <date>2021-02-18 18:58:12 -0800</date>
            <delta_ts>2021-02-24 21:51:24 -0800</delta_ts>
            <desc>WIP2</desc>
            <filename>avoid-event-context-malloc2.patch</filename>
            <type>text/plain</type>
            <size>22048</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggNGNjYjA2YzYyNmNlLi43MTI3OTBk
NTdmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRDb250ZXh0LmgiCiAKKyNpbmNs
dWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZvY3Vz
RXZlbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCkBAIC0zNSw5OCArMzYsNjUgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1FdmVudENvbnRleHQ6OkV2ZW50Q29udGV4dChOb2RlKiBu
b2RlLCBFdmVudFRhcmdldCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJnZXQqIHRhcmdldCwgaW50
IGNsb3NlZFNoYWRvd0RlcHRoKQotICAgIDogbV9ub2RlIHsgbm9kZSB9Ci0gICAgLCBtX2N1cnJl
bnRUYXJnZXQgeyBjdXJyZW50VGFyZ2V0IH0KLSAgICAsIG1fdGFyZ2V0IHsgdGFyZ2V0IH0KLSAg
ICAsIG1fY2xvc2VkU2hhZG93RGVwdGggeyBjbG9zZWRTaGFkb3dEZXB0aCB9Ci0gICAgLCBtX2N1
cnJlbnRUYXJnZXRJc0luU2hhZG93VHJlZSB7IGlzPE5vZGU+KGN1cnJlbnRUYXJnZXQpICYmIGRv
d25jYXN0PE5vZGU+KCpjdXJyZW50VGFyZ2V0KS5pc0luU2hhZG93VHJlZSgpIH0KLXsKLSAgICBB
U1NFUlQoIWlzVW5yZWFjaGFibGVOb2RlKG1fdGFyZ2V0LmdldCgpKSk7Ci19Ci0KIEV2ZW50Q29u
dGV4dDo6fkV2ZW50Q29udGV4dCgpID0gZGVmYXVsdDsKIAogdm9pZCBFdmVudENvbnRleHQ6Omhh
bmRsZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCwgRXZlbnRJbnZva2VQaGFzZSBwaGFzZSkgY29u
c3QKIHsKICAgICBldmVudC5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkpOwogICAgIGV2ZW50LnNl
dEN1cnJlbnRUYXJnZXQobV9jdXJyZW50VGFyZ2V0LmdldCgpLCBtX2N1cnJlbnRUYXJnZXRJc0lu
U2hhZG93VHJlZSk7Ci0gICAgLy8gRklYTUU6IENvbnNpZGVyIG1lcmdpbmcgaGFuZGxlTG9jYWxF
dmVudHMgYW5kIGZpcmVFdmVudExpc3RlbmVycy4KLSAgICBpZiAobV9ub2RlKQotICAgICAgICBt
X25vZGUtPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LCBwaGFzZSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2N1cnJlbnRUYXJnZXQtPmZpcmVFdmVudExpc3RlbmVycyhldmVudCwgcGhhc2UpOwotfQot
Ci1ib29sIEV2ZW50Q29udGV4dDo6aXNNb3VzZU9yRm9jdXNFdmVudENvbnRleHQoKSBjb25zdAot
ewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudENvbnRleHQ6OmlzVG91Y2hFdmVu
dENvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotTW91c2VPckZvY3Vz
RXZlbnRDb250ZXh0OjpNb3VzZU9yRm9jdXNFdmVudENvbnRleHQoTm9kZSYgbm9kZSwgRXZlbnRU
YXJnZXQqIGN1cnJlbnRUYXJnZXQsIEV2ZW50VGFyZ2V0KiB0YXJnZXQsIGludCBjbG9zZWRTaGFk
b3dEZXB0aCkKLSAgICA6IEV2ZW50Q29udGV4dCgmbm9kZSwgY3VycmVudFRhcmdldCwgdGFyZ2V0
LCBjbG9zZWRTaGFkb3dEZXB0aCkKLXsKLX0KLQotTW91c2VPckZvY3VzRXZlbnRDb250ZXh0Ojp+
TW91c2VPckZvY3VzRXZlbnRDb250ZXh0KCkgPSBkZWZhdWx0OwogCi12b2lkIE1vdXNlT3JGb2N1
c0V2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmIGV2ZW50LCBFdmVudEludm9r
ZVBoYXNlIHBoYXNlKSBjb25zdAotewotICAgIGlmIChtX3JlbGF0ZWRUYXJnZXQpCisgICAgaWYg
KG1fcmVsYXRlZFRhcmdldCkgeworICAgICAgICBBU1NFUlQobV90eXBlID09IFR5cGU6Ok1vdXNl
T3JGb2N1cyk7CiAgICAgICAgIGV2ZW50LnNldFJlbGF0ZWRUYXJnZXQobV9yZWxhdGVkVGFyZ2V0
LmdldCgpKTsKLSAgICBFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LCBwaGFz
ZSk7Ci19Ci0KLWJvb2wgTW91c2VPckZvY3VzRXZlbnRDb250ZXh0Ojppc01vdXNlT3JGb2N1c0V2
ZW50Q29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgfQogCiAjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBpZiAobV90eXBlID09IFR5cGU6OlRvdWNoKSB7CiAK
LVRvdWNoRXZlbnRDb250ZXh0OjpUb3VjaEV2ZW50Q29udGV4dChOb2RlJiBub2RlLCBFdmVudFRh
cmdldCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJnZXQqIHRhcmdldCwgaW50IGNsb3NlZFNoYWRv
d0RlcHRoKQotICAgIDogRXZlbnRDb250ZXh0KCZub2RlLCBjdXJyZW50VGFyZ2V0LCB0YXJnZXQs
IGNsb3NlZFNoYWRvd0RlcHRoKQotICAgICwgbV90b3VjaGVzKFRvdWNoTGlzdDo6Y3JlYXRlKCkp
Ci0gICAgLCBtX3RhcmdldFRvdWNoZXMoVG91Y2hMaXN0OjpjcmVhdGUoKSkKLSAgICAsIG1fY2hh
bmdlZFRvdWNoZXMoVG91Y2hMaXN0OjpjcmVhdGUoKSkKLXsKKyNpZiBBU1NFUlRfRU5BQkxFRAor
ICAgICAgICBhdXRvIGNoZWNrUmVhY2hhYmlsaXR5ID0gWyZdKGNvbnN0IFJlZjxUb3VjaExpc3Q+
JiB0b3VjaExpc3QpIHsKKyAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSB0b3VjaExpc3QtPmxl
bmd0aCgpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkK
KyAgICAgICAgICAgICAgICBBU1NFUlQoIWlzVW5yZWFjaGFibGVOb2RlKGRvd25jYXN0PE5vZGU+
KHRvdWNoTGlzdC0+aXRlbShpKS0+dGFyZ2V0KCkpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2hl
Y2tSZWFjaGFiaWxpdHkobV90b3VjaGVzKTsKKyAgICAgICAgY2hlY2tSZWFjaGFiaWxpdHkobV90
YXJnZXRUb3VjaGVzKTsKKyAgICAgICAgY2hlY2tSZWFjaGFiaWxpdHkobV9jaGFuZ2VkVG91Y2hl
cyk7CisjZW5kaWYKKworICAgICAgICBhdXRvJiB0b3VjaEV2ZW50ID0gZG93bmNhc3Q8VG91Y2hF
dmVudD4oZXZlbnQpOworICAgICAgICB0b3VjaEV2ZW50LnNldFRvdWNoZXMobV90b3VjaGVzLmdl
dCgpKTsKKyAgICAgICAgdG91Y2hFdmVudC5zZXRUYXJnZXRUb3VjaGVzKG1fdGFyZ2V0VG91Y2hl
cy5nZXQoKSk7CisgICAgICAgIHRvdWNoRXZlbnQuc2V0Q2hhbmdlZFRvdWNoZXMobV9jaGFuZ2Vk
VG91Y2hlcy5nZXQoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIg
bWVyZ2luZyBoYW5kbGVMb2NhbEV2ZW50cyBhbmQgZmlyZUV2ZW50TGlzdGVuZXJzLgorICAgIGlm
IChtX25vZGUgJiYgTElLRUxZKG1fdHlwZSAhPSBUeXBlOjpXaW5kb3cpKQorICAgICAgICBtX25v
ZGUtPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LCBwaGFzZSk7CisgICAgZWxzZQorICAgICAgICBt
X2N1cnJlbnRUYXJnZXQtPmZpcmVFdmVudExpc3RlbmVycyhldmVudCwgcGhhc2UpOwogfQogCi1U
b3VjaEV2ZW50Q29udGV4dDo6flRvdWNoRXZlbnRDb250ZXh0KCkgPSBkZWZhdWx0OworI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCiAKLXZvaWQgVG91Y2hFdmVudENvbnRleHQ6OmhhbmRsZUxvY2Fs
RXZlbnRzKEV2ZW50JiBldmVudCwgRXZlbnRJbnZva2VQaGFzZSBwaGFzZSkgY29uc3QKK3ZvaWQg
RXZlbnRDb250ZXh0Ojppbml0aWFsaXplVG91Y2hMaXN0cygpCiB7Ci0gICAgY2hlY2tSZWFjaGFi
aWxpdHkobV90b3VjaGVzKTsKLSAgICBjaGVja1JlYWNoYWJpbGl0eShtX3RhcmdldFRvdWNoZXMp
OwotICAgIGNoZWNrUmVhY2hhYmlsaXR5KG1fY2hhbmdlZFRvdWNoZXMpOwotICAgIGF1dG8mIHRv
dWNoRXZlbnQgPSBkb3duY2FzdDxUb3VjaEV2ZW50PihldmVudCk7Ci0gICAgdG91Y2hFdmVudC5z
ZXRUb3VjaGVzKG1fdG91Y2hlcy5wdHIoKSk7Ci0gICAgdG91Y2hFdmVudC5zZXRUYXJnZXRUb3Vj
aGVzKG1fdGFyZ2V0VG91Y2hlcy5wdHIoKSk7Ci0gICAgdG91Y2hFdmVudC5zZXRDaGFuZ2VkVG91
Y2hlcyhtX2NoYW5nZWRUb3VjaGVzLnB0cigpKTsKLSAgICBFdmVudENvbnRleHQ6OmhhbmRsZUxv
Y2FsRXZlbnRzKGV2ZW50LCBwaGFzZSk7CisgICAgbV90b3VjaGVzID0gVG91Y2hMaXN0OjpjcmVh
dGUoKTsKKyAgICBtX3RhcmdldFRvdWNoZXMgPSBUb3VjaExpc3Q6OmNyZWF0ZSgpOworICAgIG1f
Y2hhbmdlZFRvdWNoZXMgPSBUb3VjaExpc3Q6OmNyZWF0ZSgpOwogfQogCi1ib29sIFRvdWNoRXZl
bnRDb250ZXh0Ojppc1RvdWNoRXZlbnRDb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KKyNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogCiAjaWYgQVNTRVJUX0VOQUJM
RUQKIAotdm9pZCBUb3VjaEV2ZW50Q29udGV4dDo6Y2hlY2tSZWFjaGFiaWxpdHkoY29uc3QgUmVm
PFRvdWNoTGlzdD4mIHRvdWNoTGlzdCkgY29uc3QKK2Jvb2wgRXZlbnRDb250ZXh0Ojppc1VucmVh
Y2hhYmxlTm9kZShFdmVudFRhcmdldCogdGFyZ2V0KSBjb25zdAogewotICAgIHNpemVfdCBsZW5n
dGggPSB0b3VjaExpc3QtPmxlbmd0aCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCi0gICAgICAgIEFTU0VSVCghaXNVbnJlYWNoYWJsZU5vZGUoZG93bmNhc3Q8Tm9k
ZT4odG91Y2hMaXN0LT5pdGVtKGkpLT50YXJnZXQoKSkpKTsKKyAgICAvLyBGSVhNRTogQ2hlY2tz
IGFsc28gZm9yIFNWRyBlbGVtZW50cy4KKyAgICByZXR1cm4gaXM8Tm9kZT4odGFyZ2V0KSAmJiAh
ZG93bmNhc3Q8Tm9kZT4oKnRhcmdldCkuaXNTVkdFbGVtZW50KCkgJiYgbV9ub2RlLT5pc0Nsb3Nl
ZFNoYWRvd0hpZGRlbihkb3duY2FzdDxOb2RlPigqdGFyZ2V0KSk7CiB9CiAKLSNlbmRpZiAvLyBB
U1NFUlRfRU5BQkxFRAotCi0jZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5UUykKKyNlbmRpZgog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgKaW5kZXggN2NmZmU4ZDc0ZDBhLi45MjUxZmJj
ZmQzNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgKQEAgLTM4LDggKzM4LDE1IEBAIGNs
YXNzIEV2ZW50Q29udGV4dCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgRXZlbnRJbnZva2VQaGFzZSA9
IEV2ZW50VGFyZ2V0OjpFdmVudEludm9rZVBoYXNlOwogCi0gICAgRXZlbnRDb250ZXh0KE5vZGUq
LCBFdmVudFRhcmdldCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJnZXQqLCBpbnQgY2xvc2VkU2hh
ZG93RGVwdGgpOwotICAgIHZpcnR1YWwgfkV2ZW50Q29udGV4dCgpOworICAgIGVudW0gY2xhc3Mg
VHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBOb3JtYWwgPSAwLAorICAgICAgICBNb3VzZU9yRm9j
dXMsCisgICAgICAgIFRvdWNoLAorICAgICAgICBXaW5kb3csCisgICAgfTsKKworICAgIEV2ZW50
Q29udGV4dChUeXBlLCBOb2RlKiwgRXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJnZXQsIEV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGludCBjbG9zZWRTaGFkb3dEZXB0aCk7CisgICAgfkV2ZW50Q29udGV4dCgp
OwogCiAgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQogICAg
IEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VGFy
Z2V0LmdldCgpOyB9CkBAIC00NywxNCArNTQsMjUgQEAgcHVibGljOgogICAgIEV2ZW50VGFyZ2V0
KiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5nZXQoKTsgfQogICAgIGludCBjbG9z
ZWRTaGFkb3dEZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2VkU2hhZG93RGVwdGg7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCYsIEV2ZW50SW52b2tlUGhh
c2UpIGNvbnN0OworICAgIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmLCBFdmVudEludm9r
ZVBoYXNlKSBjb25zdDsKKworICAgIGJvb2wgaXNNb3VzZU9yRm9jdXNFdmVudENvbnRleHQoKSBj
b25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6TW91c2VPckZvY3VzOyB9CisgICAgYm9vbCBp
c1RvdWNoRXZlbnRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OlRvdWNo
OyB9CisgICAgYm9vbCBpc1dpbmRvd0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0g
VHlwZTo6V2luZG93OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZU9yRm9jdXNFdmVudENv
bnRleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNUb3VjaEV2ZW50Q29udGV4dCgpIGNv
bnN0OworICAgIE5vZGUqIHJlbGF0ZWRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0ZWRU
YXJnZXQuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFJlbGF0ZWRUYXJnZXQoTm9kZSopOwogCi0gICAg
dmlydHVhbCBOb2RlKiByZWxhdGVkVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQor
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgZW51bSBUb3VjaExpc3RUeXBlIHsgVG91Y2hl
cywgVGFyZ2V0VG91Y2hlcywgQ2hhbmdlZFRvdWNoZXMgfTsKKyAgICBUb3VjaExpc3QmIHRvdWNo
TGlzdChUb3VjaExpc3RUeXBlKTsKKyNlbmRpZgogCiBwcm90ZWN0ZWQ6CisjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKKyAgICB2b2lkIGluaXRpYWxpemVUb3VjaExpc3RzKCk7CisjZW5kaWYKKwog
I2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBpc1VucmVhY2hhYmxlTm9kZShFdmVudFRhcmdl
dCopIGNvbnN0OwogI2VuZGlmCkBAIC02Miw1OSArODAsMzUgQEAgcHJvdGVjdGVkOgogICAgIFJl
ZlB0cjxOb2RlPiBtX25vZGU7CiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBtX2N1cnJlbnRUYXJn
ZXQ7CiAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBtX3RhcmdldDsKLSAgICBpbnQgbV9jbG9zZWRT
aGFkb3dEZXB0aCB7IDAgfTsKLSAgICBib29sIG1fY3VycmVudFRhcmdldElzSW5TaGFkb3dUcmVl
IHsgZmFsc2UgfTsKLX07Ci0KLWNsYXNzIE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dCBmaW5hbCA6
IHB1YmxpYyBFdmVudENvbnRleHQgewotcHVibGljOgotICAgIE1vdXNlT3JGb2N1c0V2ZW50Q29u
dGV4dChOb2RlJiwgRXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJnZXQsIEV2ZW50VGFyZ2V0KiwgaW50
IGNsb3NlZFNoYWRvd0RlcHRoKTsKLSAgICB2aXJ0dWFsIH5Nb3VzZU9yRm9jdXNFdmVudENvbnRl
eHQoKTsKLQotICAgIE5vZGUqIHJlbGF0ZWRUYXJnZXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X3JlbGF0ZWRUYXJnZXQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFJlbGF0ZWRUYXJnZXQoTm9kZSop
OwotCi1wcml2YXRlOgotICAgIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmLCBFdmVudElu
dm9rZVBoYXNlKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzTW91c2VPckZvY3VzRXZlbnRDb250
ZXh0KCkgY29uc3QgZmluYWw7Ci0KICAgICBSZWZQdHI8Tm9kZT4gbV9yZWxhdGVkVGFyZ2V0Owot
fTsKLQogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0KLWNsYXNzIFRvdWNoRXZlbnRDb250ZXh0
IGZpbmFsIDogcHVibGljIEV2ZW50Q29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgVG91Y2hFdmVudENv
bnRleHQoTm9kZSYsIEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0LCBFdmVudFRhcmdldCosIGlu
dCBjbG9zZWRTaGFkb3dEZXB0aCk7Ci0gICAgdmlydHVhbCB+VG91Y2hFdmVudENvbnRleHQoKTsK
LQotICAgIGVudW0gVG91Y2hMaXN0VHlwZSB7IFRvdWNoZXMsIFRhcmdldFRvdWNoZXMsIENoYW5n
ZWRUb3VjaGVzIH07Ci0gICAgVG91Y2hMaXN0JiB0b3VjaExpc3QoVG91Y2hMaXN0VHlwZSk7Ci0K
LXByaXZhdGU6Ci0gICAgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCYsIEV2ZW50SW52b2tl
UGhhc2UpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNUb3VjaEV2ZW50Q29udGV4dCgpIGNvbnN0
IGZpbmFsOwotCi0gICAgdm9pZCBjaGVja1JlYWNoYWJpbGl0eShjb25zdCBSZWY8VG91Y2hMaXN0
PiYpIGNvbnN0OwotCi0gICAgUmVmPFRvdWNoTGlzdD4gbV90b3VjaGVzOwotICAgIFJlZjxUb3Vj
aExpc3Q+IG1fdGFyZ2V0VG91Y2hlczsKLSAgICBSZWY8VG91Y2hMaXN0PiBtX2NoYW5nZWRUb3Vj
aGVzOworICAgIFJlZlB0cjxUb3VjaExpc3Q+IG1fdG91Y2hlczsKKyAgICBSZWZQdHI8VG91Y2hM
aXN0PiBtX3RhcmdldFRvdWNoZXM7CisgICAgUmVmUHRyPFRvdWNoTGlzdD4gbV9jaGFuZ2VkVG91
Y2hlczsKKyNlbmRpZgorICAgIGludCBtX2Nsb3NlZFNoYWRvd0RlcHRoIHsgMCB9OworICAgIGJv
b2wgbV9jdXJyZW50VGFyZ2V0SXNJblNoYWRvd1RyZWUgeyBmYWxzZSB9OworICAgIFR5cGUgbV90
eXBlIHsgVHlwZTo6Tm9ybWFsIH07CiB9OwogCi0jZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5U
UykKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0KLWlubGluZSBib29sIEV2ZW50Q29udGV4dDo6aXNV
bnJlYWNoYWJsZU5vZGUoRXZlbnRUYXJnZXQqIHRhcmdldCkgY29uc3QKK2lubGluZSBFdmVudENv
bnRleHQ6OkV2ZW50Q29udGV4dChUeXBlIHR5cGUsIE5vZGUqIG5vZGUsIEV2ZW50VGFyZ2V0KiBj
dXJyZW50VGFyZ2V0LCBFdmVudFRhcmdldCogdGFyZ2V0LCBpbnQgY2xvc2VkU2hhZG93RGVwdGgp
CisgICAgOiBtX25vZGUgeyBub2RlIH0KKyAgICAsIG1fY3VycmVudFRhcmdldCB7IGN1cnJlbnRU
YXJnZXQgfQorICAgICwgbV90YXJnZXQgeyB0YXJnZXQgfQorICAgICwgbV9jbG9zZWRTaGFkb3dE
ZXB0aCB7IGNsb3NlZFNoYWRvd0RlcHRoIH0KKyAgICAsIG1fY3VycmVudFRhcmdldElzSW5TaGFk
b3dUcmVlIHsgaXM8Tm9kZT4oY3VycmVudFRhcmdldCkgJiYgZG93bmNhc3Q8Tm9kZT4oKmN1cnJl
bnRUYXJnZXQpLmlzSW5TaGFkb3dUcmVlKCkgfQorICAgICwgbV90eXBlKHR5cGUpCiB7Ci0gICAg
Ly8gRklYTUU6IENoZWNrcyBhbHNvIGZvciBTVkcgZWxlbWVudHMuCi0gICAgcmV0dXJuIGlzPE5v
ZGU+KHRhcmdldCkgJiYgIWRvd25jYXN0PE5vZGU+KCp0YXJnZXQpLmlzU1ZHRWxlbWVudCgpICYm
IG1fbm9kZS0+aXNDbG9zZWRTaGFkb3dIaWRkZW4oZG93bmNhc3Q8Tm9kZT4oKnRhcmdldCkpOwot
fQotCisgICAgQVNTRVJUKCFpc1VucmVhY2hhYmxlTm9kZShtX3RhcmdldC5nZXQoKSkpOworI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgaWYgKG1fdHlwZSA9PSBUeXBlOjpUb3VjaCkKKyAg
ICAgICAgaW5pdGlhbGl6ZVRvdWNoTGlzdHMoKTsKKyNlbHNlCisgICAgQVNTRVJUKG1fdHlwZSAh
PSBUeXBlOjpUb3VjaCk7CiAjZW5kaWYKK30KIAotaW5saW5lIHZvaWQgTW91c2VPckZvY3VzRXZl
bnRDb250ZXh0OjpzZXRSZWxhdGVkVGFyZ2V0KE5vZGUqIHJlbGF0ZWRUYXJnZXQpCitpbmxpbmUg
dm9pZCBFdmVudENvbnRleHQ6OnNldFJlbGF0ZWRUYXJnZXQoTm9kZSogcmVsYXRlZFRhcmdldCkK
IHsKICAgICBBU1NFUlQoIWlzVW5yZWFjaGFibGVOb2RlKHJlbGF0ZWRUYXJnZXQpKTsKICAgICBt
X3JlbGF0ZWRUYXJnZXQgPSByZWxhdGVkVGFyZ2V0OwpAQCAtMTIyLDM4ICsxMTYsMjAgQEAgaW5s
aW5lIHZvaWQgTW91c2VPckZvY3VzRXZlbnRDb250ZXh0OjpzZXRSZWxhdGVkVGFyZ2V0KE5vZGUq
IHJlbGF0ZWRUYXJnZXQpCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogCi1pbmxpbmUgVG91
Y2hMaXN0JiBUb3VjaEV2ZW50Q29udGV4dDo6dG91Y2hMaXN0KFRvdWNoTGlzdFR5cGUgdHlwZSkK
K2lubGluZSBUb3VjaExpc3QmIEV2ZW50Q29udGV4dDo6dG91Y2hMaXN0KFRvdWNoTGlzdFR5cGUg
dHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFRvdWNoZXM6Ci0gICAgICAg
IHJldHVybiBtX3RvdWNoZXMuZ2V0KCk7CisgICAgICAgIHJldHVybiAqbV90b3VjaGVzOwogICAg
IGNhc2UgVGFyZ2V0VG91Y2hlczoKLSAgICAgICAgcmV0dXJuIG1fdGFyZ2V0VG91Y2hlcy5nZXQo
KTsKKyAgICAgICAgcmV0dXJuICptX3RhcmdldFRvdWNoZXM7CiAgICAgY2FzZSBDaGFuZ2VkVG91
Y2hlczoKLSAgICAgICAgcmV0dXJuIG1fY2hhbmdlZFRvdWNoZXMuZ2V0KCk7CisgICAgICAgIHJl
dHVybiAqbV9jaGFuZ2VkVG91Y2hlczsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIG1fdG91Y2hlcy5nZXQoKTsKLX0KLQotI2VuZGlmCi0KLSNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKSAmJiAhQVNTRVJUX0VOQUJMRUQKLQotaW5saW5lIHZvaWQgVG91Y2hFdmVu
dENvbnRleHQ6OmNoZWNrUmVhY2hhYmlsaXR5KGNvbnN0IFJlZjxUb3VjaExpc3Q+JikgY29uc3QK
LXsKKyAgICByZXR1cm4gKm1fdG91Y2hlczsKIH0KIAogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpNb3VzZU9y
Rm9jdXNFdmVudENvbnRleHQpCi1zdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RXZl
bnRDb250ZXh0JiBjb250ZXh0KSB7IHJldHVybiBjb250ZXh0LmlzTW91c2VPckZvY3VzRXZlbnRD
b250ZXh0KCk7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvdWNo
RXZlbnRDb250ZXh0KQotc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkV2ZW50Q29u
dGV4dCYgY29udGV4dCkgeyByZXR1cm4gY29udGV4dC5pc1RvdWNoRXZlbnRDb250ZXh0KCk7IH0K
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRo
LmNwcAppbmRleCA3OTUxYjdiNzhiN2QuLjY1Y2VlMjI2MGU5MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
UGF0aC5jcHAKQEAgLTM1LDI1ICszNSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgV2luZG93RXZlbnRDb250ZXh0IGZpbmFsIDogcHVibGljIEV2ZW50Q29udGV4dCB7Ci1wdWJs
aWM6Ci0gICAgV2luZG93RXZlbnRDb250ZXh0KE5vZGUmLCBET01XaW5kb3cmLCBFdmVudFRhcmdl
dCYsIGludCBjbG9zZWRTaGFkb3dEZXB0aCk7Ci1wcml2YXRlOgotICAgIHZvaWQgaGFuZGxlTG9j
YWxFdmVudHMoRXZlbnQmLCBFdmVudEludm9rZVBoYXNlKSBjb25zdCBmaW5hbDsKLX07Ci0KLWlu
bGluZSBXaW5kb3dFdmVudENvbnRleHQ6OldpbmRvd0V2ZW50Q29udGV4dChOb2RlJiBub2RlLCBE
T01XaW5kb3cmIGN1cnJlbnRUYXJnZXQsIEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGludCBjbG9zZWRT
aGFkb3dEZXB0aCkKLSAgICA6IEV2ZW50Q29udGV4dCgmbm9kZSwgJmN1cnJlbnRUYXJnZXQsICZ0
YXJnZXQsIGNsb3NlZFNoYWRvd0RlcHRoKQotewotfQotCi12b2lkIFdpbmRvd0V2ZW50Q29udGV4
dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmIGV2ZW50LCBFdmVudEludm9rZVBoYXNlIHBoYXNl
KSBjb25zdAotewotICAgIGV2ZW50LnNldFRhcmdldChtX3RhcmdldC5nZXQoKSk7Ci0gICAgZXZl
bnQuc2V0Q3VycmVudFRhcmdldChtX2N1cnJlbnRUYXJnZXQuZ2V0KCksIG1fY3VycmVudFRhcmdl
dElzSW5TaGFkb3dUcmVlKTsKLSAgICBtX2N1cnJlbnRUYXJnZXQtPmZpcmVFdmVudExpc3RlbmVy
cyhldmVudCwgcGhhc2UpOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkRXZlbnRDcm9z
c1NoYWRvd0JvdW5kYXJ5KEV2ZW50JiBldmVudCwgU2hhZG93Um9vdCYgc2hhZG93Um9vdCwgRXZl
bnRUYXJnZXQmIHRhcmdldCkKIHsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIEVOQUJM
RShWSURFTykKQEAgLTExMywyMiArOTQsMTUgQEAgRXZlbnRQYXRoOjpFdmVudFBhdGgoTm9kZSYg
b3JpZ2luYWxUYXJnZXQsIEV2ZW50JiBldmVudCkKIAogdm9pZCBFdmVudFBhdGg6OmJ1aWxkUGF0
aChOb2RlJiBvcmlnaW5hbFRhcmdldCwgRXZlbnQmIGV2ZW50KQogewotICAgIHVzaW5nIE1ha2VF
dmVudENvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRDb250ZXh0PiAoKikoTm9kZSYsIEV2
ZW50VGFyZ2V0KiwgRXZlbnRUYXJnZXQqLCBpbnQgY2xvc2VkU2hhZG93RGVwdGgpOwotICAgIE1h
a2VFdmVudENvbnRleHQgbWFrZUV2ZW50Q29udGV4dCA9IFtdIChOb2RlJiBub2RlLCBFdmVudFRh
cmdldCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJnZXQqIHRhcmdldCwgaW50IGNsb3NlZFNoYWRv
d0RlcHRoKSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEV2ZW50Q29udGV4dD4oJm5vZGUs
IGN1cnJlbnRUYXJnZXQsIHRhcmdldCwgY2xvc2VkU2hhZG93RGVwdGgpOwotICAgIH07Ci0gICAg
aWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSB8fCBldmVudC5pc0ZvY3VzRXZlbnQoKSkgewotICAg
ICAgICBtYWtlRXZlbnRDb250ZXh0ID0gW10gKE5vZGUmIG5vZGUsIEV2ZW50VGFyZ2V0KiBjdXJy
ZW50VGFyZ2V0LCBFdmVudFRhcmdldCogdGFyZ2V0LCBpbnQgY2xvc2VkU2hhZG93RGVwdGgpIC0+
IHN0ZDo6dW5pcXVlX3B0cjxFdmVudENvbnRleHQ+IHsKLSAgICAgICAgICAgIHJldHVybiBtYWtl
VW5pcXVlPE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dD4obm9kZSwgY3VycmVudFRhcmdldCwgdGFy
Z2V0LCBjbG9zZWRTaGFkb3dEZXB0aCk7Ci0gICAgICAgIH07Ci0gICAgfQorICAgIEV2ZW50Q29u
dGV4dDo6VHlwZSBjb250ZXh0VHlwZSA9IFsmXSgpIHsKKyAgICAgICAgaWYgKGlzPE1vdXNlRXZl
bnQ+KGV2ZW50KSB8fCBldmVudC5pc0ZvY3VzRXZlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBF
dmVudENvbnRleHQ6OlR5cGU6Ok1vdXNlT3JGb2N1czsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQotICAgIGlmIChpczxUb3VjaEV2ZW50PihldmVudCkpIHsKLSAgICAgICAgbWFrZUV2ZW50Q29u
dGV4dCA9IFtdIChOb2RlJiBub2RlLCBFdmVudFRhcmdldCogY3VycmVudFRhcmdldCwgRXZlbnRU
YXJnZXQqIHRhcmdldCwgaW50IGNsb3NlZFNoYWRvd0RlcHRoKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8
RXZlbnRDb250ZXh0PiB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxUb3VjaEV2ZW50
Q29udGV4dD4obm9kZSwgY3VycmVudFRhcmdldCwgdGFyZ2V0LCBjbG9zZWRTaGFkb3dEZXB0aCk7
Ci0gICAgICAgIH07Ci0gICAgfQorICAgICAgICBpZiAoaXM8VG91Y2hFdmVudD4oZXZlbnQpKQor
ICAgICAgICAgICAgcmV0dXJuIEV2ZW50Q29udGV4dDo6VHlwZTo6VG91Y2g7CiAjZW5kaWYKKyAg
ICAgICAgcmV0dXJuIEV2ZW50Q29udGV4dDo6VHlwZTo6Tm9ybWFsOworICAgIH0oKTsKIAogICAg
IE5vZGUqIG5vZGUgPSBub2RlT3JIb3N0SWZQc2V1ZG9FbGVtZW50KCZvcmlnaW5hbFRhcmdldCk7
CiAgICAgTm9kZSogdGFyZ2V0ID0gbm9kZSA/IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1
bGVzKCpub2RlKSA6IG51bGxwdHI7CkBAIC0xMzcsNyArMTExLDcgQEAgdm9pZCBFdmVudFBhdGg6
OmJ1aWxkUGF0aChOb2RlJiBvcmlnaW5hbFRhcmdldCwgRXZlbnQmIGV2ZW50KQogICAgIC8vIFRo
ZXkgY291bGQgYmUgbmVnYXRpdmUgZm9yIG5vZGVzIG91dHNpZGUgdGhlIHNoYWRvdyB0cmVlIG9m
IHRoZSB0YXJnZXQgbm9kZS4KICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICB3aGlsZSAobm9k
ZSkgewotICAgICAgICAgICAgbV9wYXRoLmFwcGVuZChtYWtlRXZlbnRDb250ZXh0KCpub2RlLCBl
dmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcygqbm9kZSksIHRhcmdldCwgY2xvc2VkU2hh
ZG93RGVwdGgpKTsKKyAgICAgICAgICAgIG1fcGF0aC5hcHBlbmQoRXZlbnRDb250ZXh0IHsgY29u
dGV4dFR5cGUsIG5vZGUsIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2RlKSwg
dGFyZ2V0LCBjbG9zZWRTaGFkb3dEZXB0aCB9KTsKIAogICAgICAgICAgICAgaWYgKGlzPFNoYWRv
d1Jvb3Q+KCpub2RlKSkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE0OSwxNCArMTIzLDEz
IEBAIHZvaWQgRXZlbnRQYXRoOjpidWlsZFBhdGgoTm9kZSYgb3JpZ2luYWxUYXJnZXQsIEV2ZW50
JiBldmVudCkKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRhcmdldCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICh0YXJnZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRv
KiB3aW5kb3cgPSBkb3duY2FzdDxEb2N1bWVudD4oKm5vZGUpLmRvbVdpbmRvdygpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fcGF0aC5hcHBlbmQobWFrZVVuaXF1ZTxXaW5kb3dFdmVu
dENvbnRleHQ+KCpub2RlLCAqd2luZG93LCAqdGFyZ2V0LCBjbG9zZWRTaGFkb3dEZXB0aCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGF0aC5hcHBlbmQoRXZlbnRDb250ZXh0IHsg
RXZlbnRDb250ZXh0OjpUeXBlOjpXaW5kb3csIG5vZGUsIHdpbmRvdywgdGFyZ2V0LCBjbG9zZWRT
aGFkb3dEZXB0aCB9KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGF1
dG8qIHNoYWRvd1Jvb3RPZlBhcmVudCA9IHBhcmVudC0+c2hhZG93Um9vdCgpOwotICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKHNoYWRvd1Jvb3RPZlBhcmVudCkpIHsKKyAgICAgICAgICAgIGlmIChh
dXRvKiBzaGFkb3dSb290T2ZQYXJlbnQgPSBwYXJlbnQtPnNoYWRvd1Jvb3QoKTsgVU5MSUtFTFko
c2hhZG93Um9vdE9mUGFyZW50KSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvKiBhc3NpZ25l
ZFNsb3QgPSBzaGFkb3dSb290T2ZQYXJlbnQtPmZpbmRBc3NpZ25lZFNsb3QoKm5vZGUpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChzaGFkb3dSb290T2ZQYXJlbnQtPm1vZGUoKSAhPSBTaGFk
b3dSb290TW9kZTo6T3BlbikKICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlZFNoYWRvd0Rl
cHRoKys7CkBAIC0xODUsMTcgKzE1OCwxNiBAQCB2b2lkIEV2ZW50UGF0aDo6c2V0UmVsYXRlZFRh
cmdldChOb2RlJiBvcmlnaW4sIEV2ZW50VGFyZ2V0JiByZWxhdGVkVGFyZ2V0KQogICAgICAgICBy
ZXR1cm47CiAKICAgICBhdXRvJiByZWxhdGVkTm9kZSA9IGRvd25jYXN0PE5vZGU+KHJlbGF0ZWRU
YXJnZXQpOwotICAgIFJlbGF0ZWROb2RlUmV0YXJnZXRlciByZXRhcmdldGVyKHJlbGF0ZWROb2Rl
LCAqbV9wYXRoWzBdLT5ub2RlKCkpOworICAgIFJlbGF0ZWROb2RlUmV0YXJnZXRlciByZXRhcmdl
dGVyKHJlbGF0ZWROb2RlLCAqbV9wYXRoWzBdLm5vZGUoKSk7CiAKICAgICBib29sIG9yaWdpbklz
UmVsYXRlZFRhcmdldCA9ICZvcmlnaW4gPT0gJnJlbGF0ZWROb2RlOwogICAgIE5vZGUmIHJvb3RO
b2RlSW5PcmlnaW5UcmVlU2NvcGUgPSBvcmlnaW4udHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKICAg
ICBUcmVlU2NvcGUqIHByZXZpb3VzVHJlZVNjb3BlID0gbnVsbHB0cjsKICAgICBzaXplX3Qgb3Jp
Z2luYWxFdmVudFBhdGhTaXplID0gbV9wYXRoLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGNv
bnRleHRJbmRleCA9IDA7IGNvbnRleHRJbmRleCA8IG9yaWdpbmFsRXZlbnRQYXRoU2l6ZTsgY29u
dGV4dEluZGV4KyspIHsKLSAgICAgICAgYXV0byYgYW1iZ2lvdXNDb250ZXh0ID0gKm1fcGF0aFtj
b250ZXh0SW5kZXhdOwotICAgICAgICBpZiAoIWlzPE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dD4o
YW1iZ2lvdXNDb250ZXh0KSkKKyAgICAgICAgYXV0byYgY29udGV4dCA9IG1fcGF0aFtjb250ZXh0
SW5kZXhdOworICAgICAgICBpZiAoIWNvbnRleHQuaXNNb3VzZU9yRm9jdXNFdmVudENvbnRleHQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvJiBjb250ZXh0ID0gZG93bmNh
c3Q8TW91c2VPckZvY3VzRXZlbnRDb250ZXh0PihhbWJnaW91c0NvbnRleHQpOwogCiAgICAgICAg
IE5vZGUmIGN1cnJlbnRUYXJnZXQgPSAqY29udGV4dC5ub2RlKCk7CiAgICAgICAgIFRyZWVTY29w
ZSYgY3VycmVudFRyZWVTY29wZSA9IGN1cnJlbnRUYXJnZXQudHJlZVNjb3BlKCk7CkBAIC0yMjEs
MzAgKzE5MywzMCBAQCB2b2lkIEV2ZW50UGF0aDo6c2V0UmVsYXRlZFRhcmdldChOb2RlJiBvcmln
aW4sIEV2ZW50VGFyZ2V0JiByZWxhdGVkVGFyZ2V0KQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKIAotdm9pZCBFdmVudFBhdGg6OnJldGFyZ2V0VG91Y2goVG91Y2hFdmVudENvbnRleHQ6OlRv
dWNoTGlzdFR5cGUgdHlwZSwgY29uc3QgVG91Y2gmIHRvdWNoKQordm9pZCBFdmVudFBhdGg6OnJl
dGFyZ2V0VG91Y2goRXZlbnRDb250ZXh0OjpUb3VjaExpc3RUeXBlIHR5cGUsIGNvbnN0IFRvdWNo
JiB0b3VjaCkKIHsKICAgICBhdXRvKiBldmVudFRhcmdldCA9IHRvdWNoLnRhcmdldCgpOwogICAg
IGlmICghaXM8Tm9kZT4oZXZlbnRUYXJnZXQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWxh
dGVkTm9kZVJldGFyZ2V0ZXIgcmV0YXJnZXRlcihkb3duY2FzdDxOb2RlPigqZXZlbnRUYXJnZXQp
LCAqbV9wYXRoWzBdLT5ub2RlKCkpOworICAgIFJlbGF0ZWROb2RlUmV0YXJnZXRlciByZXRhcmdl
dGVyKGRvd25jYXN0PE5vZGU+KCpldmVudFRhcmdldCksICptX3BhdGhbMF0ubm9kZSgpKTsKICAg
ICBUcmVlU2NvcGUqIHByZXZpb3VzVHJlZVNjb3BlID0gbnVsbHB0cjsKICAgICBmb3IgKGF1dG8m
IGNvbnRleHQgOiBtX3BhdGgpIHsKLSAgICAgICAgTm9kZSYgY3VycmVudFRhcmdldCA9ICpjb250
ZXh0LT5ub2RlKCk7CisgICAgICAgIE5vZGUmIGN1cnJlbnRUYXJnZXQgPSAqY29udGV4dC5ub2Rl
KCk7CiAgICAgICAgIFRyZWVTY29wZSYgY3VycmVudFRyZWVTY29wZSA9IGN1cnJlbnRUYXJnZXQu
dHJlZVNjb3BlKCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShwcmV2aW91c1RyZWVTY29wZSAmJiAm
Y3VycmVudFRyZWVTY29wZSAhPSBwcmV2aW91c1RyZWVTY29wZSkpCiAgICAgICAgICAgICByZXRh
cmdldGVyLm1vdmVUb05ld1RyZWVTY29wZShwcmV2aW91c1RyZWVTY29wZSwgY3VycmVudFRyZWVT
Y29wZSk7CiAKLSAgICAgICAgaWYgKGlzPFRvdWNoRXZlbnRDb250ZXh0PigqY29udGV4dCkpIHsK
KyAgICAgICAgaWYgKGNvbnRleHQuaXNUb3VjaEV2ZW50Q29udGV4dCgpKSB7CiAgICAgICAgICAg
ICBOb2RlKiBjdXJyZW50UmVsYXRlZE5vZGUgPSByZXRhcmdldGVyLmN1cnJlbnROb2RlKGN1cnJl
bnRUYXJnZXQpOwotICAgICAgICAgICAgZG93bmNhc3Q8VG91Y2hFdmVudENvbnRleHQ+KCpjb250
ZXh0KS50b3VjaExpc3QodHlwZSkuYXBwZW5kKHRvdWNoLmNsb25lV2l0aE5ld1RhcmdldChjdXJy
ZW50UmVsYXRlZE5vZGUpKTsKKyAgICAgICAgICAgIGNvbnRleHQudG91Y2hMaXN0KHR5cGUpLmFw
cGVuZCh0b3VjaC5jbG9uZVdpdGhOZXdUYXJnZXQoY3VycmVudFJlbGF0ZWROb2RlKSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBwcmV2aW91c1RyZWVTY29wZSA9ICZjdXJyZW50VHJlZVNjb3BlOwog
ICAgIH0KIH0KIAotdm9pZCBFdmVudFBhdGg6OnJldGFyZ2V0VG91Y2hMaXN0KFRvdWNoRXZlbnRD
b250ZXh0OjpUb3VjaExpc3RUeXBlIHR5cGUsIGNvbnN0IFRvdWNoTGlzdCogbGlzdCkKK3ZvaWQg
RXZlbnRQYXRoOjpyZXRhcmdldFRvdWNoTGlzdChFdmVudENvbnRleHQ6OlRvdWNoTGlzdFR5cGUg
dHlwZSwgY29uc3QgVG91Y2hMaXN0KiBsaXN0KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDAs
IGxlbmd0aCA9IGxpc3QgPyBsaXN0LT5sZW5ndGgoKSA6IDA7IGkgPCBsZW5ndGg7ICsraSkKICAg
ICAgICAgcmV0YXJnZXRUb3VjaCh0eXBlLCAqbGlzdC0+aXRlbShpKSk7CkBAIC0yNTIsOSArMjI0
LDkgQEAgdm9pZCBFdmVudFBhdGg6OnJldGFyZ2V0VG91Y2hMaXN0KFRvdWNoRXZlbnRDb250ZXh0
OjpUb3VjaExpc3RUeXBlIHR5cGUsIGNvbnN0IFQKIAogdm9pZCBFdmVudFBhdGg6OnJldGFyZ2V0
VG91Y2hMaXN0cyhjb25zdCBUb3VjaEV2ZW50JiBldmVudCkKIHsKLSAgICByZXRhcmdldFRvdWNo
TGlzdChUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hlcywgZXZlbnQudG91Y2hlcygpKTsKLSAgICBy
ZXRhcmdldFRvdWNoTGlzdChUb3VjaEV2ZW50Q29udGV4dDo6VGFyZ2V0VG91Y2hlcywgZXZlbnQu
dGFyZ2V0VG91Y2hlcygpKTsKLSAgICByZXRhcmdldFRvdWNoTGlzdChUb3VjaEV2ZW50Q29udGV4
dDo6Q2hhbmdlZFRvdWNoZXMsIGV2ZW50LmNoYW5nZWRUb3VjaGVzKCkpOworICAgIHJldGFyZ2V0
VG91Y2hMaXN0KEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlwZTo6VG91Y2hlcywgZXZlbnQudG91
Y2hlcygpKTsKKyAgICByZXRhcmdldFRvdWNoTGlzdChFdmVudENvbnRleHQ6OlRvdWNoTGlzdFR5
cGU6OlRhcmdldFRvdWNoZXMsIGV2ZW50LnRhcmdldFRvdWNoZXMoKSk7CisgICAgcmV0YXJnZXRU
b3VjaExpc3QoRXZlbnRDb250ZXh0OjpUb3VjaExpc3RUeXBlOjpDaGFuZ2VkVG91Y2hlcywgZXZl
bnQuY2hhbmdlZFRvdWNoZXMoKSk7CiB9CiAKICNlbmRpZgpAQCAtMjcxLDEwICsyNDMsMTAgQEAg
VmVjdG9yPEV2ZW50VGFyZ2V0Kj4gRXZlbnRQYXRoOjpjb21wdXRlUGF0aFVuY2xvc2VkVG9UYXJn
ZXQoY29uc3QgRXZlbnRUYXJnZXQmIHQKICAgICBwYXRoLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
cGF0aFNpemUpOwogCiAgICAgYXV0byBjdXJyZW50VGFyZ2V0SW5kZXggPSBtX3BhdGguZmluZE1h
dGNoaW5nKFsmdGFyZ2V0XSAoYXV0byYgY29udGV4dCkgewotICAgICAgICByZXR1cm4gY29udGV4
dC0+Y3VycmVudFRhcmdldCgpID09ICZ0YXJnZXQ7CisgICAgICAgIHJldHVybiBjb250ZXh0LmN1
cnJlbnRUYXJnZXQoKSA9PSAmdGFyZ2V0OwogICAgIH0pOwogICAgIFJFTEVBU0VfQVNTRVJUKGN1
cnJlbnRUYXJnZXRJbmRleCAhPSBub3RGb3VuZCk7Ci0gICAgYXV0byBjdXJyZW50VGFyZ2V0RGVw
dGggPSBtX3BhdGhbY3VycmVudFRhcmdldEluZGV4XS0+Y2xvc2VkU2hhZG93RGVwdGgoKTsKKyAg
ICBhdXRvIGN1cnJlbnRUYXJnZXREZXB0aCA9IG1fcGF0aFtjdXJyZW50VGFyZ2V0SW5kZXhdLmNs
b3NlZFNoYWRvd0RlcHRoKCk7CiAKICAgICBhdXRvIGFwcGVuZFRhcmdldFdpdGhMZXNzZXJEZXB0
aCA9IFsmcGF0aF0gKGNvbnN0IEV2ZW50Q29udGV4dCYgY3VycmVudENvbnRleHQsIGludCYgY3Vy
cmVudERlcHRoQWxsb3dlZCkgewogICAgICAgICBhdXRvIGRlcHRoID0gY3VycmVudENvbnRleHQu
Y2xvc2VkU2hhZG93RGVwdGgoKTsKQEAgLTI5MCwxNCArMjYyLDE0IEBAIFZlY3RvcjxFdmVudFRh
cmdldCo+IEV2ZW50UGF0aDo6Y29tcHV0ZVBhdGhVbmNsb3NlZFRvVGFyZ2V0KGNvbnN0IEV2ZW50
VGFyZ2V0JiB0CiAgICAgYXV0byBjdXJyZW50RGVwdGhBbGxvd2VkID0gY3VycmVudFRhcmdldERl
cHRoOwogICAgIGF1dG8gaSA9IGN1cnJlbnRUYXJnZXRJbmRleDsKICAgICBkbyB7Ci0gICAgICAg
IGFwcGVuZFRhcmdldFdpdGhMZXNzZXJEZXB0aCgqbV9wYXRoW2ldLCBjdXJyZW50RGVwdGhBbGxv
d2VkKTsKKyAgICAgICAgYXBwZW5kVGFyZ2V0V2l0aExlc3NlckRlcHRoKG1fcGF0aFtpXSwgY3Vy
cmVudERlcHRoQWxsb3dlZCk7CiAgICAgfSB3aGlsZSAoaS0tKTsKICAgICBwYXRoLnJldmVyc2Uo
KTsKIAogICAgIGN1cnJlbnREZXB0aEFsbG93ZWQgPSBjdXJyZW50VGFyZ2V0RGVwdGg7CiAgICAg
Zm9yIChhdXRvIGkgPSBjdXJyZW50VGFyZ2V0SW5kZXggKyAxOyBpIDwgcGF0aFNpemU7ICsraSkK
LSAgICAgICAgYXBwZW5kVGFyZ2V0V2l0aExlc3NlckRlcHRoKCptX3BhdGhbaV0sIGN1cnJlbnRE
ZXB0aEFsbG93ZWQpOwotICAgIAorICAgICAgICBhcHBlbmRUYXJnZXRXaXRoTGVzc2VyRGVwdGgo
bV9wYXRoW2ldLCBjdXJyZW50RGVwdGhBbGxvd2VkKTsKKwogICAgIHJldHVybiBwYXRoOwogfQog
CkBAIC0zMDgsNyArMjgwLDcgQEAgRXZlbnRQYXRoOjpFdmVudFBhdGgoY29uc3QgVmVjdG9yPEVs
ZW1lbnQqPiYgdGFyZ2V0cykKICAgICAgICAgQVNTRVJUKHRhcmdldCk7CiAgICAgICAgIE5vZGUq
IG9yaWdpbiA9ICp0YXJnZXRzLmJlZ2luKCk7CiAgICAgICAgIGlmICghdGFyZ2V0LT5pc0Nsb3Nl
ZFNoYWRvd0hpZGRlbigqb3JpZ2luKSkKLSAgICAgICAgICAgIG1fcGF0aC5hcHBlbmQobWFrZVVu
aXF1ZTxFdmVudENvbnRleHQ+KHRhcmdldCwgdGFyZ2V0LCBvcmlnaW4sIDApKTsKKyAgICAgICAg
ICAgIG1fcGF0aC5hcHBlbmQoRXZlbnRDb250ZXh0IHsgRXZlbnRDb250ZXh0OjpUeXBlOjpOb3Jt
YWwsIHRhcmdldCwgdGFyZ2V0LCBvcmlnaW4sIDAgfSk7CiAgICAgfQogfQogCkBAIC0zMTcsNyAr
Mjg5LDcgQEAgRXZlbnRQYXRoOjpFdmVudFBhdGgoY29uc3QgVmVjdG9yPEV2ZW50VGFyZ2V0Kj4m
IHRhcmdldHMpCiAgICAgZm9yIChhdXRvKiB0YXJnZXQgOiB0YXJnZXRzKSB7CiAgICAgICAgIEFT
U0VSVCh0YXJnZXQpOwogICAgICAgICBBU1NFUlQoIWlzPE5vZGU+KHRhcmdldCkpOwotICAgICAg
ICBtX3BhdGguYXBwZW5kKG1ha2VVbmlxdWU8RXZlbnRDb250ZXh0PihudWxscHRyLCB0YXJnZXQs
ICp0YXJnZXRzLmJlZ2luKCksIDApKTsKKyAgICAgICAgbV9wYXRoLmFwcGVuZChFdmVudENvbnRl
eHQgeyBFdmVudENvbnRleHQ6OlR5cGU6Ok5vcm1hbCwgbnVsbHB0ciwgdGFyZ2V0LCAqdGFyZ2V0
cy5iZWdpbigpLCAwIH0pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5oCmluZGV4IGI5
NDUyZjMwNTYwZS4uNGJkNWEzZDFiZTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRQYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5oCkBAIC0zOSw4
ICszOSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
cGF0aC5pc0VtcHR5KCk7IH0KICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0
aC5zaXplKCk7IH0KLSAgICBjb25zdCBFdmVudENvbnRleHQmIGNvbnRleHRBdChzaXplX3QgaSkg
Y29uc3QgeyByZXR1cm4gKm1fcGF0aFtpXTsgfQotICAgIEV2ZW50Q29udGV4dCYgY29udGV4dEF0
KHNpemVfdCBpKSB7IHJldHVybiAqbV9wYXRoW2ldOyB9CisgICAgY29uc3QgRXZlbnRDb250ZXh0
JiBjb250ZXh0QXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aFtpXTsgfQorICAgIEV2
ZW50Q29udGV4dCYgY29udGV4dEF0KHNpemVfdCBpKSB7IHJldHVybiBtX3BhdGhbaV07IH0KIAog
ICAgIFZlY3RvcjxFdmVudFRhcmdldCo+IGNvbXB1dGVQYXRoVW5jbG9zZWRUb1RhcmdldChjb25z
dCBFdmVudFRhcmdldCYpIGNvbnN0OwogCkBAIC01MSwxMiArNTEsMTIgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHNldFJlbGF0ZWRUYXJnZXQoTm9kZSYgb3JpZ2luLCBFdmVudFRhcmdldCYpOwogCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICB2b2lkIHJldGFyZ2V0VG91Y2goVG91Y2hFdmVu
dENvbnRleHQ6OlRvdWNoTGlzdFR5cGUsIGNvbnN0IFRvdWNoJik7Ci0gICAgdm9pZCByZXRhcmdl
dFRvdWNoTGlzdChUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlwZSwgY29uc3QgVG91Y2hM
aXN0Kik7CisgICAgdm9pZCByZXRhcmdldFRvdWNoKEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlw
ZSwgY29uc3QgVG91Y2gmKTsKKyAgICB2b2lkIHJldGFyZ2V0VG91Y2hMaXN0KEV2ZW50Q29udGV4
dDo6VG91Y2hMaXN0VHlwZSwgY29uc3QgVG91Y2hMaXN0Kik7CiAgICAgdm9pZCByZXRhcmdldFRv
dWNoTGlzdHMoY29uc3QgVG91Y2hFdmVudCYpOwogI2VuZGlmCiAKLSAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEV2ZW50Q29udGV4dD4sIDMyPiBtX3BhdGg7CisgICAgVmVjdG9yPEV2ZW50Q29u
dGV4dCwgMTY+IG1fcGF0aDsKIH07CiAKIGlubGluZSBOb2RlKiBFdmVudFBhdGg6OmV2ZW50VGFy
Z2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKE5vZGUmIHJlZmVyZW5jZU5vZGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421066</attachid>
            <date>2021-02-19 17:59:50 -0800</date>
            <delta_ts>2021-02-24 21:51:27 -0800</delta_ts>
            <desc>WIP2 + cleanup</desc>
            <filename>wip222095-with-cleanup.patch</filename>
            <type>text/plain</type>
            <size>28167</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5jcHAKaW5kZXggNGNjYjA2YzYyNmNlLi5jNjkwNzRm
MTU1NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuY3BwCkBAIC0yOCwxMDUgKzI4LDg4
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRDb250ZXh0LmgiCiAKKyNp
bmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZv
Y3VzRXZlbnQuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJNb3Vz
ZUV2ZW50LmgiCiAjaW5jbHVkZSAiVG91Y2hFdmVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUV2ZW50Q29udGV4dDo6RXZlbnRDb250ZXh0KE5vZGUqIG5vZGUsIEV2ZW50VGFyZ2V0KiBj
dXJyZW50VGFyZ2V0LCBFdmVudFRhcmdldCogdGFyZ2V0LCBpbnQgY2xvc2VkU2hhZG93RGVwdGgp
Ci0gICAgOiBtX25vZGUgeyBub2RlIH0KLSAgICAsIG1fY3VycmVudFRhcmdldCB7IGN1cnJlbnRU
YXJnZXQgfQotICAgICwgbV90YXJnZXQgeyB0YXJnZXQgfQotICAgICwgbV9jbG9zZWRTaGFkb3dE
ZXB0aCB7IGNsb3NlZFNoYWRvd0RlcHRoIH0KLSAgICAsIG1fY3VycmVudFRhcmdldElzSW5TaGFk
b3dUcmVlIHsgaXM8Tm9kZT4oY3VycmVudFRhcmdldCkgJiYgZG93bmNhc3Q8Tm9kZT4oKmN1cnJl
bnRUYXJnZXQpLmlzSW5TaGFkb3dUcmVlKCkgfQotewotICAgIEFTU0VSVCghaXNVbnJlYWNoYWJs
ZU5vZGUobV90YXJnZXQuZ2V0KCkpKTsKLX0KLQogRXZlbnRDb250ZXh0Ojp+RXZlbnRDb250ZXh0
KCkgPSBkZWZhdWx0OwogCiB2b2lkIEV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZl
bnQmIGV2ZW50LCBFdmVudEludm9rZVBoYXNlIHBoYXNlKSBjb25zdAogewogICAgIGV2ZW50LnNl
dFRhcmdldChtX3RhcmdldC5nZXQoKSk7CiAgICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChtX2N1
cnJlbnRUYXJnZXQuZ2V0KCksIG1fY3VycmVudFRhcmdldElzSW5TaGFkb3dUcmVlKTsKLSAgICAv
LyBGSVhNRTogQ29uc2lkZXIgbWVyZ2luZyBoYW5kbGVMb2NhbEV2ZW50cyBhbmQgZmlyZUV2ZW50
TGlzdGVuZXJzLgotICAgIGlmIChtX25vZGUpCi0gICAgICAgIG1fbm9kZS0+aGFuZGxlTG9jYWxF
dmVudHMoZXZlbnQsIHBoYXNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VycmVudFRhcmdldC0+
ZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LCBwaGFzZSk7Ci19Ci0KLWJvb2wgRXZlbnRDb250ZXh0
Ojppc01vdXNlT3JGb2N1c0V2ZW50Q29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQogCi1ib29sIEV2ZW50Q29udGV4dDo6aXNUb3VjaEV2ZW50Q29udGV4dCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQorICAgIGlmIChtX3JlbGF0ZWRUYXJnZXQpIHsKKyAgICAg
ICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpNb3VzZU9yRm9jdXMpOworICAgICAgICBldmVudC5z
ZXRSZWxhdGVkVGFyZ2V0KG1fcmVsYXRlZFRhcmdldC5nZXQoKSk7CisgICAgfQogCi1Nb3VzZU9y
Rm9jdXNFdmVudENvbnRleHQ6Ok1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dChOb2RlJiBub2RlLCBF
dmVudFRhcmdldCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJnZXQqIHRhcmdldCwgaW50IGNsb3Nl
ZFNoYWRvd0RlcHRoKQotICAgIDogRXZlbnRDb250ZXh0KCZub2RlLCBjdXJyZW50VGFyZ2V0LCB0
YXJnZXQsIGNsb3NlZFNoYWRvd0RlcHRoKQotewotfQorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CisgICAgaWYgKG1fdHlwZSA9PSBUeXBlOjpUb3VjaCkgewogCi1Nb3VzZU9yRm9jdXNFdmVudENv
bnRleHQ6On5Nb3VzZU9yRm9jdXNFdmVudENvbnRleHQoKSA9IGRlZmF1bHQ7CisjaWYgQVNTRVJU
X0VOQUJMRUQKKyAgICAgICAgYXV0byBjaGVja1JlYWNoYWJpbGl0eSA9IFsmXShjb25zdCBSZWY8
VG91Y2hMaXN0PiYgdG91Y2hMaXN0KSB7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0gdG91
Y2hMaXN0LT5sZW5ndGgoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCisgICAgICAgICAgICAgICAgQVNTRVJUKCFpc1VucmVhY2hhYmxlTm9kZShkb3du
Y2FzdDxOb2RlPih0b3VjaExpc3QtPml0ZW0oaSktPnRhcmdldCgpKSkpOworICAgICAgICB9Cisg
ICAgICAgIGNoZWNrUmVhY2hhYmlsaXR5KG1fdG91Y2hlcyk7CisgICAgICAgIGNoZWNrUmVhY2hh
YmlsaXR5KG1fdGFyZ2V0VG91Y2hlcyk7CisgICAgICAgIGNoZWNrUmVhY2hhYmlsaXR5KG1fY2hh
bmdlZFRvdWNoZXMpOworI2VuZGlmCisKKyAgICAgICAgYXV0byYgdG91Y2hFdmVudCA9IGRvd25j
YXN0PFRvdWNoRXZlbnQ+KGV2ZW50KTsKKyAgICAgICAgdG91Y2hFdmVudC5zZXRUb3VjaGVzKG1f
dG91Y2hlcy5nZXQoKSk7CisgICAgICAgIHRvdWNoRXZlbnQuc2V0VGFyZ2V0VG91Y2hlcyhtX3Rh
cmdldFRvdWNoZXMuZ2V0KCkpOworICAgICAgICB0b3VjaEV2ZW50LnNldENoYW5nZWRUb3VjaGVz
KG1fY2hhbmdlZFRvdWNoZXMuZ2V0KCkpOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIGlmICgh
bV9ub2RlIHx8IFVOTElLRUxZKG1fdHlwZSA9PSBUeXBlOjpXaW5kb3cpKSB7CisgICAgICAgIG1f
Y3VycmVudFRhcmdldC0+ZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LCBwaGFzZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLXZvaWQgTW91c2VPckZvY3VzRXZlbnRDb250ZXh0OjpoYW5kbGVM
b2NhbEV2ZW50cyhFdmVudCYgZXZlbnQsIEV2ZW50SW52b2tlUGhhc2UgcGhhc2UpIGNvbnN0Ci17
Ci0gICAgaWYgKG1fcmVsYXRlZFRhcmdldCkKLSAgICAgICAgZXZlbnQuc2V0UmVsYXRlZFRhcmdl
dChtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkpOwotICAgIEV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxF
dmVudHMoZXZlbnQsIHBoYXNlKTsKLX0KKyAgICBpZiAoZXZlbnQuZXZlbnRQaGFzZSgpICE9IEV2
ZW50OjpDQVBUVVJJTkdfUEhBU0UgJiYgZXZlbnQudGFyZ2V0KCkgIT0gbV9ub2RlICYmIGlzPE5v
ZGU+KGV2ZW50LnRhcmdldCgpKQorICAgICAgICAmJiBpczxIVE1MRm9ybUVsZW1lbnQ+KCptX25v
ZGUpICYmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50IHx8IGV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudCkpIHsKKyAgICAgICAgZXZlbnQuc3Rv
cFByb3BhZ2F0aW9uKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLWJvb2wgTW91c2VPckZv
Y3VzRXZlbnRDb250ZXh0Ojppc01vdXNlT3JGb2N1c0V2ZW50Q29udGV4dCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHRydWU7Ci19CisgICAgaWYgKCFtX25vZGUtPmhhc0V2ZW50VGFyZ2V0RGF0YSgp
KQorICAgICAgICByZXR1cm47CiAKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIC8vIEZJ
WE1FOiBTaG91bGQgd2UgZGVsaXZlciB3aGVlbCBldmVudHMgdG8gZGlzYWJsZWQgZm9ybSBjb250
cm9scyBvciBub3Q/CisgICAgaWYgKGV2ZW50LmlzVHJ1c3RlZCgpICYmIGlzPEVsZW1lbnQ+KG1f
bm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKm1fbm9kZSkuaXNEaXNhYmxlZEZvcm1Db250cm9s
KCkgJiYgZXZlbnQuaXNNb3VzZUV2ZW50KCkgJiYgIWV2ZW50LmlzV2hlZWxFdmVudCgpKQorICAg
ICAgICByZXR1cm47CiAKLVRvdWNoRXZlbnRDb250ZXh0OjpUb3VjaEV2ZW50Q29udGV4dChOb2Rl
JiBub2RlLCBFdmVudFRhcmdldCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJnZXQqIHRhcmdldCwg
aW50IGNsb3NlZFNoYWRvd0RlcHRoKQotICAgIDogRXZlbnRDb250ZXh0KCZub2RlLCBjdXJyZW50
VGFyZ2V0LCB0YXJnZXQsIGNsb3NlZFNoYWRvd0RlcHRoKQotICAgICwgbV90b3VjaGVzKFRvdWNo
TGlzdDo6Y3JlYXRlKCkpCi0gICAgLCBtX3RhcmdldFRvdWNoZXMoVG91Y2hMaXN0OjpjcmVhdGUo
KSkKLSAgICAsIG1fY2hhbmdlZFRvdWNoZXMoVG91Y2hMaXN0OjpjcmVhdGUoKSkKLXsKKyAgICBt
X25vZGUtPmZpcmVFdmVudExpc3RlbmVycyhldmVudCwgcGhhc2UpOwogfQogCi1Ub3VjaEV2ZW50
Q29udGV4dDo6flRvdWNoRXZlbnRDb250ZXh0KCkgPSBkZWZhdWx0OworI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCiAKLXZvaWQgVG91Y2hFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKEV2
ZW50JiBldmVudCwgRXZlbnRJbnZva2VQaGFzZSBwaGFzZSkgY29uc3QKK3ZvaWQgRXZlbnRDb250
ZXh0Ojppbml0aWFsaXplVG91Y2hMaXN0cygpCiB7Ci0gICAgY2hlY2tSZWFjaGFiaWxpdHkobV90
b3VjaGVzKTsKLSAgICBjaGVja1JlYWNoYWJpbGl0eShtX3RhcmdldFRvdWNoZXMpOwotICAgIGNo
ZWNrUmVhY2hhYmlsaXR5KG1fY2hhbmdlZFRvdWNoZXMpOwotICAgIGF1dG8mIHRvdWNoRXZlbnQg
PSBkb3duY2FzdDxUb3VjaEV2ZW50PihldmVudCk7Ci0gICAgdG91Y2hFdmVudC5zZXRUb3VjaGVz
KG1fdG91Y2hlcy5wdHIoKSk7Ci0gICAgdG91Y2hFdmVudC5zZXRUYXJnZXRUb3VjaGVzKG1fdGFy
Z2V0VG91Y2hlcy5wdHIoKSk7Ci0gICAgdG91Y2hFdmVudC5zZXRDaGFuZ2VkVG91Y2hlcyhtX2No
YW5nZWRUb3VjaGVzLnB0cigpKTsKLSAgICBFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRz
KGV2ZW50LCBwaGFzZSk7CisgICAgbV90b3VjaGVzID0gVG91Y2hMaXN0OjpjcmVhdGUoKTsKKyAg
ICBtX3RhcmdldFRvdWNoZXMgPSBUb3VjaExpc3Q6OmNyZWF0ZSgpOworICAgIG1fY2hhbmdlZFRv
dWNoZXMgPSBUb3VjaExpc3Q6OmNyZWF0ZSgpOwogfQogCi1ib29sIFRvdWNoRXZlbnRDb250ZXh0
Ojppc1RvdWNoRXZlbnRDb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyNl
bmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogCiAjaWYgQVNTRVJUX0VOQUJMRUQKIAotdm9p
ZCBUb3VjaEV2ZW50Q29udGV4dDo6Y2hlY2tSZWFjaGFiaWxpdHkoY29uc3QgUmVmPFRvdWNoTGlz
dD4mIHRvdWNoTGlzdCkgY29uc3QKK2Jvb2wgRXZlbnRDb250ZXh0Ojppc1VucmVhY2hhYmxlTm9k
ZShFdmVudFRhcmdldCogdGFyZ2V0KSBjb25zdAogewotICAgIHNpemVfdCBsZW5ndGggPSB0b3Vj
aExpc3QtPmxlbmd0aCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
Ci0gICAgICAgIEFTU0VSVCghaXNVbnJlYWNoYWJsZU5vZGUoZG93bmNhc3Q8Tm9kZT4odG91Y2hM
aXN0LT5pdGVtKGkpLT50YXJnZXQoKSkpKTsKKyAgICAvLyBGSVhNRTogQ2hlY2tzIGFsc28gZm9y
IFNWRyBlbGVtZW50cy4KKyAgICByZXR1cm4gaXM8Tm9kZT4odGFyZ2V0KSAmJiAhZG93bmNhc3Q8
Tm9kZT4oKnRhcmdldCkuaXNTVkdFbGVtZW50KCkgJiYgbV9ub2RlLT5pc0Nsb3NlZFNoYWRvd0hp
ZGRlbihkb3duY2FzdDxOb2RlPigqdGFyZ2V0KSk7CiB9CiAKLSNlbmRpZiAvLyBBU1NFUlRfRU5B
QkxFRAotCi0jZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5UUykKKyNlbmRpZgogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRDb250ZXh0LmgKaW5kZXggN2NmZmU4ZDc0ZDBhLi4wYmVlZjM3MTAzMjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmgKQEAgLTM4LDggKzM4LDE2IEBAIGNsYXNzIEV2ZW50
Q29udGV4dCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgRXZlbnRJbnZva2VQaGFzZSA9IEV2ZW50VGFy
Z2V0OjpFdmVudEludm9rZVBoYXNlOwogCi0gICAgRXZlbnRDb250ZXh0KE5vZGUqLCBFdmVudFRh
cmdldCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJnZXQqLCBpbnQgY2xvc2VkU2hhZG93RGVwdGgp
OwotICAgIHZpcnR1YWwgfkV2ZW50Q29udGV4dCgpOworICAgIGVudW0gY2xhc3MgVHlwZSA6IHVp
bnQ4X3QgeworICAgICAgICBOb3JtYWwgPSAwLAorICAgICAgICBNb3VzZU9yRm9jdXMsCisgICAg
ICAgIFRvdWNoLAorICAgICAgICBXaW5kb3csCisgICAgfTsKKworICAgIEV2ZW50Q29udGV4dChU
eXBlLCBOb2RlKiwgRXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJnZXQsIEV2ZW50VGFyZ2V0KiBvcmln
aW4sIGludCBjbG9zZWRTaGFkb3dEZXB0aCk7CisgICAgRXZlbnRDb250ZXh0KFR5cGUsIE5vZGUq
LCBOb2RlKiBjdXJyZW50VGFyZ2V0LCBFdmVudFRhcmdldCogb3JpZ2luLCBpbnQgY2xvc2VkU2hh
ZG93RGVwdGgpOworICAgIH5FdmVudENvbnRleHQoKTsKIAogICAgIE5vZGUqIG5vZGUoKSBjb25z
dCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KICAgICBFdmVudFRhcmdldCogY3VycmVudFRhcmdl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRhcmdldC5nZXQoKTsgfQpAQCAtNDcsMTQgKzU1
LDI3IEBAIHB1YmxpYzoKICAgICBFdmVudFRhcmdldCogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV90YXJnZXQuZ2V0KCk7IH0KICAgICBpbnQgY2xvc2VkU2hhZG93RGVwdGgoKSBjb25zdCB7IHJl
dHVybiBtX2Nsb3NlZFNoYWRvd0RlcHRoOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9j
YWxFdmVudHMoRXZlbnQmLCBFdmVudEludm9rZVBoYXNlKSBjb25zdDsKKyAgICB2b2lkIGhhbmRs
ZUxvY2FsRXZlbnRzKEV2ZW50JiwgRXZlbnRJbnZva2VQaGFzZSkgY29uc3Q7CisKKyAgICBib29s
IGlzTW91c2VPckZvY3VzRXZlbnRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5
cGU6Ok1vdXNlT3JGb2N1czsgfQorICAgIGJvb2wgaXNUb3VjaEV2ZW50Q29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpUb3VjaDsgfQorICAgIGJvb2wgaXNXaW5kb3dDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OldpbmRvdzsgfQorCisgICAgTm9k
ZSogcmVsYXRlZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRlZFRhcmdldC5nZXQoKTsg
fQorICAgIHZvaWQgc2V0UmVsYXRlZFRhcmdldChOb2RlKik7CisKKyNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQorICAgIGVudW0gVG91Y2hMaXN0VHlwZSB7IFRvdWNoZXMsIFRhcmdldFRvdWNoZXMs
IENoYW5nZWRUb3VjaGVzIH07CisgICAgVG91Y2hMaXN0JiB0b3VjaExpc3QoVG91Y2hMaXN0VHlw
ZSk7CisjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlT3JGb2N1c0V2ZW50Q29udGV4
dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1RvdWNoRXZlbnRDb250ZXh0KCkgY29uc3Q7
Citwcml2YXRlOgorICAgIGlubGluZSBFdmVudENvbnRleHQoVHlwZSwgTm9kZSogY3VycmVudE5v
ZGUsIFJlZlB0cjxFdmVudFRhcmdldD4mJiBjdXJyZW50VGFyZ2V0LCBFdmVudFRhcmdldCogb3Jp
Z2luLCBpbnQgY2xvc2VkU2hhZG93RGVwdGgsIGJvb2wgY3VycmVudFRhcmdldElzSW5TaGFkb3dU
cmVlID0gZmFsc2UpOwogCi0gICAgdmlydHVhbCBOb2RlKiByZWxhdGVkVGFyZ2V0KCkgY29uc3Qg
eyByZXR1cm4gbnVsbHB0cjsgfQorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgdm9pZCBp
bml0aWFsaXplVG91Y2hMaXN0cygpOworI2VuZGlmCiAKLXByb3RlY3RlZDoKICNpZiBBU1NFUlRf
RU5BQkxFRAogICAgIGJvb2wgaXNVbnJlYWNoYWJsZU5vZGUoRXZlbnRUYXJnZXQqKSBjb25zdDsK
ICNlbmRpZgpAQCAtNjIsNTkgKzgzLDQ5IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8Tm9kZT4g
bV9ub2RlOwogICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV9jdXJyZW50VGFyZ2V0OwogICAgIFJl
ZlB0cjxFdmVudFRhcmdldD4gbV90YXJnZXQ7CisgICAgUmVmUHRyPE5vZGU+IG1fcmVsYXRlZFRh
cmdldDsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIFJlZlB0cjxUb3VjaExpc3Q+IG1f
dG91Y2hlczsKKyAgICBSZWZQdHI8VG91Y2hMaXN0PiBtX3RhcmdldFRvdWNoZXM7CisgICAgUmVm
UHRyPFRvdWNoTGlzdD4gbV9jaGFuZ2VkVG91Y2hlczsKKyNlbmRpZgogICAgIGludCBtX2Nsb3Nl
ZFNoYWRvd0RlcHRoIHsgMCB9OwogICAgIGJvb2wgbV9jdXJyZW50VGFyZ2V0SXNJblNoYWRvd1Ry
ZWUgeyBmYWxzZSB9OworICAgIFR5cGUgbV90eXBlIHsgVHlwZTo6Tm9ybWFsIH07CiB9OwogCi1j
bGFzcyBNb3VzZU9yRm9jdXNFdmVudENvbnRleHQgZmluYWwgOiBwdWJsaWMgRXZlbnRDb250ZXh0
IHsKLXB1YmxpYzoKLSAgICBNb3VzZU9yRm9jdXNFdmVudENvbnRleHQoTm9kZSYsIEV2ZW50VGFy
Z2V0KiBjdXJyZW50VGFyZ2V0LCBFdmVudFRhcmdldCosIGludCBjbG9zZWRTaGFkb3dEZXB0aCk7
Ci0gICAgdmlydHVhbCB+TW91c2VPckZvY3VzRXZlbnRDb250ZXh0KCk7Ci0KLSAgICBOb2RlKiBy
ZWxhdGVkVGFyZ2V0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9yZWxhdGVkVGFyZ2V0LmdldCgp
OyB9Ci0gICAgdm9pZCBzZXRSZWxhdGVkVGFyZ2V0KE5vZGUqKTsKLQotcHJpdmF0ZToKLSAgICB2
b2lkIGhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50JiwgRXZlbnRJbnZva2VQaGFzZSkgY29uc3QgZmlu
YWw7Ci0gICAgYm9vbCBpc01vdXNlT3JGb2N1c0V2ZW50Q29udGV4dCgpIGNvbnN0IGZpbmFsOwot
Ci0gICAgUmVmUHRyPE5vZGU+IG1fcmVsYXRlZFRhcmdldDsKLX07Ci0KK2lubGluZSBFdmVudENv
bnRleHQ6OkV2ZW50Q29udGV4dChUeXBlIHR5cGUsIE5vZGUqIG5vZGUsIFJlZlB0cjxFdmVudFRh
cmdldD4mJiBjdXJyZW50VGFyZ2V0LCBFdmVudFRhcmdldCogb3JpZ2luLCBpbnQgY2xvc2VkU2hh
ZG93RGVwdGgsIGJvb2wgY3VycmVudFRhcmdldElzSW5TaGFkb3dUcmVlKQorICAgIDogbV9ub2Rl
IHsgbm9kZSB9CisgICAgLCBtX2N1cnJlbnRUYXJnZXQgeyBXVEZNb3ZlKGN1cnJlbnRUYXJnZXQp
IH0KKyAgICAsIG1fdGFyZ2V0IHsgb3JpZ2luIH0KKyAgICAsIG1fY2xvc2VkU2hhZG93RGVwdGgg
eyBjbG9zZWRTaGFkb3dEZXB0aCB9CisgICAgLCBtX2N1cnJlbnRUYXJnZXRJc0luU2hhZG93VHJl
ZSB7IGN1cnJlbnRUYXJnZXRJc0luU2hhZG93VHJlZSB9CisgICAgLCBtX3R5cGUodHlwZSkKK3sK
KyAgICBBU1NFUlQoIWlzVW5yZWFjaGFibGVOb2RlKG1fdGFyZ2V0LmdldCgpKSk7CiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKKyAgICBpZiAobV90eXBlID09IFR5cGU6OlRvdWNoKQorICAgICAg
ICBpbml0aWFsaXplVG91Y2hMaXN0cygpOworI2Vsc2UKKyAgICBBU1NFUlQobV90eXBlICE9IFR5
cGU6OlRvdWNoKTsKKyNlbmRpZgorfQogCi1jbGFzcyBUb3VjaEV2ZW50Q29udGV4dCBmaW5hbCA6
IHB1YmxpYyBFdmVudENvbnRleHQgewotcHVibGljOgotICAgIFRvdWNoRXZlbnRDb250ZXh0KE5v
ZGUmLCBFdmVudFRhcmdldCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJnZXQqLCBpbnQgY2xvc2Vk
U2hhZG93RGVwdGgpOwotICAgIHZpcnR1YWwgflRvdWNoRXZlbnRDb250ZXh0KCk7Ci0KLSAgICBl
bnVtIFRvdWNoTGlzdFR5cGUgeyBUb3VjaGVzLCBUYXJnZXRUb3VjaGVzLCBDaGFuZ2VkVG91Y2hl
cyB9OwotICAgIFRvdWNoTGlzdCYgdG91Y2hMaXN0KFRvdWNoTGlzdFR5cGUpOwotCi1wcml2YXRl
OgotICAgIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmLCBFdmVudEludm9rZVBoYXNlKSBj
b25zdCBmaW5hbDsKLSAgICBib29sIGlzVG91Y2hFdmVudENvbnRleHQoKSBjb25zdCBmaW5hbDsK
LQotICAgIHZvaWQgY2hlY2tSZWFjaGFiaWxpdHkoY29uc3QgUmVmPFRvdWNoTGlzdD4mKSBjb25z
dDsKLQotICAgIFJlZjxUb3VjaExpc3Q+IG1fdG91Y2hlczsKLSAgICBSZWY8VG91Y2hMaXN0PiBt
X3RhcmdldFRvdWNoZXM7Ci0gICAgUmVmPFRvdWNoTGlzdD4gbV9jaGFuZ2VkVG91Y2hlczsKLX07
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotCi0jaWYgQVNTRVJUX0VOQUJMRUQK
LQotaW5saW5lIGJvb2wgRXZlbnRDb250ZXh0Ojppc1VucmVhY2hhYmxlTm9kZShFdmVudFRhcmdl
dCogdGFyZ2V0KSBjb25zdAoraW5saW5lIEV2ZW50Q29udGV4dDo6RXZlbnRDb250ZXh0KFR5cGUg
dHlwZSwgTm9kZSogbm9kZSwgRXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJnZXQsIEV2ZW50VGFyZ2V0
KiBvcmlnaW4sIGludCBjbG9zZWRTaGFkb3dEZXB0aCkKKyAgICA6IEV2ZW50Q29udGV4dCh0eXBl
LCBub2RlLCBtYWtlUmVmUHRyKGN1cnJlbnRUYXJnZXQpLG9yaWdpbiwgY2xvc2VkU2hhZG93RGVw
dGgpCiB7Ci0gICAgLy8gRklYTUU6IENoZWNrcyBhbHNvIGZvciBTVkcgZWxlbWVudHMuCi0gICAg
cmV0dXJuIGlzPE5vZGU+KHRhcmdldCkgJiYgIWRvd25jYXN0PE5vZGU+KCp0YXJnZXQpLmlzU1ZH
RWxlbWVudCgpICYmIG1fbm9kZS0+aXNDbG9zZWRTaGFkb3dIaWRkZW4oZG93bmNhc3Q8Tm9kZT4o
KnRhcmdldCkpOworICAgIG1fY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQ7CisgICAgQVNT
RVJUKCFpczxOb2RlPihjdXJyZW50VGFyZ2V0KSk7CiB9CiAKLSNlbmRpZgorLy8gVGhpcyB2YXJp
YW50IGF2b2lkcyBjYWxsaW5nIEV2ZW50VGFyZ2V0OjpyZWYoKSB3aGljaCBpcyBhIHZpcnR1YWwg
ZnVuY3Rpb24gY2FsbC4KK2lubGluZSBFdmVudENvbnRleHQ6OkV2ZW50Q29udGV4dChUeXBlIHR5
cGUsIE5vZGUqIG5vZGUsIE5vZGUqIGN1cnJlbnRUYXJnZXQsIEV2ZW50VGFyZ2V0KiBvcmlnaW4s
IGludCBjbG9zZWRTaGFkb3dEZXB0aCkKKyAgICA6IEV2ZW50Q29udGV4dCh0eXBlLCBub2RlLCBt
YWtlUmVmUHRyKGN1cnJlbnRUYXJnZXQpLCBvcmlnaW4sIGNsb3NlZFNoYWRvd0RlcHRoLCBjdXJy
ZW50VGFyZ2V0ICYmIGN1cnJlbnRUYXJnZXQtPmlzSW5TaGFkb3dUcmVlKCkpCit7CisgICAgbV9j
dXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDsKK30KIAotaW5saW5lIHZvaWQgTW91c2VPckZv
Y3VzRXZlbnRDb250ZXh0OjpzZXRSZWxhdGVkVGFyZ2V0KE5vZGUqIHJlbGF0ZWRUYXJnZXQpCitp
bmxpbmUgdm9pZCBFdmVudENvbnRleHQ6OnNldFJlbGF0ZWRUYXJnZXQoTm9kZSogcmVsYXRlZFRh
cmdldCkKIHsKICAgICBBU1NFUlQoIWlzVW5yZWFjaGFibGVOb2RlKHJlbGF0ZWRUYXJnZXQpKTsK
ICAgICBtX3JlbGF0ZWRUYXJnZXQgPSByZWxhdGVkVGFyZ2V0OwpAQCAtMTIyLDM4ICsxMzMsMjAg
QEAgaW5saW5lIHZvaWQgTW91c2VPckZvY3VzRXZlbnRDb250ZXh0OjpzZXRSZWxhdGVkVGFyZ2V0
KE5vZGUqIHJlbGF0ZWRUYXJnZXQpCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogCi1pbmxp
bmUgVG91Y2hMaXN0JiBUb3VjaEV2ZW50Q29udGV4dDo6dG91Y2hMaXN0KFRvdWNoTGlzdFR5cGUg
dHlwZSkKK2lubGluZSBUb3VjaExpc3QmIEV2ZW50Q29udGV4dDo6dG91Y2hMaXN0KFRvdWNoTGlz
dFR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFRvdWNoZXM6Ci0g
ICAgICAgIHJldHVybiBtX3RvdWNoZXMuZ2V0KCk7CisgICAgICAgIHJldHVybiAqbV90b3VjaGVz
OwogICAgIGNhc2UgVGFyZ2V0VG91Y2hlczoKLSAgICAgICAgcmV0dXJuIG1fdGFyZ2V0VG91Y2hl
cy5nZXQoKTsKKyAgICAgICAgcmV0dXJuICptX3RhcmdldFRvdWNoZXM7CiAgICAgY2FzZSBDaGFu
Z2VkVG91Y2hlczoKLSAgICAgICAgcmV0dXJuIG1fY2hhbmdlZFRvdWNoZXMuZ2V0KCk7CisgICAg
ICAgIHJldHVybiAqbV9jaGFuZ2VkVG91Y2hlczsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIG1fdG91Y2hlcy5nZXQoKTsKLX0KLQotI2VuZGlmCi0KLSNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAhQVNTRVJUX0VOQUJMRUQKLQotaW5saW5lIHZvaWQgVG91
Y2hFdmVudENvbnRleHQ6OmNoZWNrUmVhY2hhYmlsaXR5KGNvbnN0IFJlZjxUb3VjaExpc3Q+Jikg
Y29uc3QKLXsKKyAgICByZXR1cm4gKm1fdG91Y2hlczsKIH0KIAogI2VuZGlmCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpN
b3VzZU9yRm9jdXNFdmVudENvbnRleHQpCi1zdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RXZlbnRDb250ZXh0JiBjb250ZXh0KSB7IHJldHVybiBjb250ZXh0LmlzTW91c2VPckZvY3Vz
RXZlbnRDb250ZXh0KCk7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OlRvdWNoRXZlbnRDb250ZXh0KQotc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkV2
ZW50Q29udGV4dCYgY29udGV4dCkgeyByZXR1cm4gY29udGV4dC5pc1RvdWNoRXZlbnRDb250ZXh0
KCk7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCA5YjFhNzhiOTE4NzQuLmM4YTYzZDM3OTZhZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTIzMCw5ICsyMzAsNCBA
QCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChjb25zdCBWZWN0b3I8RXZlbnRU
YXJnZXQqPiYgdGFyZ2V0cywgRXZlbnQmCiAgICAgZGlzcGF0Y2hFdmVudFdpdGhUeXBlPEV2ZW50
VGFyZ2V0Pih0YXJnZXRzLCBldmVudCk7CiB9CiAKLXZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNw
YXRjaEV2ZW50KGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIHRhcmdldHMsIEV2ZW50JiBldmVudCkK
LXsKLSAgICBkaXNwYXRjaEV2ZW50V2l0aFR5cGU8RWxlbWVudD4odGFyZ2V0cywgZXZlbnQpOwot
fQotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggOGJiYmE4NGQ2ODlk
Li4xMTc3MTM3MjU0ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3Bh
dGNoZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTMz
LDcgKzMzLDYgQEAgbmFtZXNwYWNlIEV2ZW50RGlzcGF0Y2hlciB7CiAKIHZvaWQgZGlzcGF0Y2hF
dmVudChOb2RlJiwgRXZlbnQmKTsKIHZvaWQgZGlzcGF0Y2hFdmVudChjb25zdCBWZWN0b3I8RXZl
bnRUYXJnZXQqPiYsIEV2ZW50Jik7Ci12b2lkIGRpc3BhdGNoRXZlbnQoY29uc3QgVmVjdG9yPEVs
ZW1lbnQqPiYsIEV2ZW50Jik7CiAKIHZvaWQgZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiwgRXZl
bnQmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRoLmNwcAppbmRleCA3OTUxYjdiNzhiN2QuLmQzOWIx
OWRmMjJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKQEAgLTM1LDI1ICszNSw2IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2luZG93RXZlbnRDb250ZXh0IGZpbmFsIDog
cHVibGljIEV2ZW50Q29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgV2luZG93RXZlbnRDb250ZXh0KE5v
ZGUmLCBET01XaW5kb3cmLCBFdmVudFRhcmdldCYsIGludCBjbG9zZWRTaGFkb3dEZXB0aCk7Ci1w
cml2YXRlOgotICAgIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmLCBFdmVudEludm9rZVBo
YXNlKSBjb25zdCBmaW5hbDsKLX07Ci0KLWlubGluZSBXaW5kb3dFdmVudENvbnRleHQ6OldpbmRv
d0V2ZW50Q29udGV4dChOb2RlJiBub2RlLCBET01XaW5kb3cmIGN1cnJlbnRUYXJnZXQsIEV2ZW50
VGFyZ2V0JiB0YXJnZXQsIGludCBjbG9zZWRTaGFkb3dEZXB0aCkKLSAgICA6IEV2ZW50Q29udGV4
dCgmbm9kZSwgJmN1cnJlbnRUYXJnZXQsICZ0YXJnZXQsIGNsb3NlZFNoYWRvd0RlcHRoKQotewot
fQotCi12b2lkIFdpbmRvd0V2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmIGV2
ZW50LCBFdmVudEludm9rZVBoYXNlIHBoYXNlKSBjb25zdAotewotICAgIGV2ZW50LnNldFRhcmdl
dChtX3RhcmdldC5nZXQoKSk7Ci0gICAgZXZlbnQuc2V0Q3VycmVudFRhcmdldChtX2N1cnJlbnRU
YXJnZXQuZ2V0KCksIG1fY3VycmVudFRhcmdldElzSW5TaGFkb3dUcmVlKTsKLSAgICBtX2N1cnJl
bnRUYXJnZXQtPmZpcmVFdmVudExpc3RlbmVycyhldmVudCwgcGhhc2UpOwotfQotCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2hvdWxkRXZlbnRDcm9zc1NoYWRvd0JvdW5kYXJ5KEV2ZW50JiBldmVudCwg
U2hhZG93Um9vdCYgc2hhZG93Um9vdCwgRXZlbnRUYXJnZXQmIHRhcmdldCkKIHsKICNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpICYmIEVOQUJMRShWSURFTykKQEAgLTEwMiw4ICs4Myw4IEBAIEV2
ZW50UGF0aDo6RXZlbnRQYXRoKE5vZGUmIG9yaWdpbmFsVGFyZ2V0LCBFdmVudCYgZXZlbnQpCiB7
CiAgICAgYnVpbGRQYXRoKG9yaWdpbmFsVGFyZ2V0LCBldmVudCk7CiAKLSAgICBpZiAoYXV0byog
cmVsYXRlZFRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQoKSkKLSAgICAgICAgc2V0UmVsYXRl
ZFRhcmdldChvcmlnaW5hbFRhcmdldCwgKnJlbGF0ZWRUYXJnZXQpOworICAgIGlmIChhdXRvKiBy
ZWxhdGVkVGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldCgpOyBpczxOb2RlPihyZWxhdGVkVGFy
Z2V0KSAmJiAhbV9wYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgc2V0UmVsYXRlZFRhcmdldChvcmln
aW5hbFRhcmdldCwgZG93bmNhc3Q8Tm9kZT4oKnJlbGF0ZWRUYXJnZXQpKTsKIAogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCiAgICAgaWYgKGlzPFRvdWNoRXZlbnQ+KGV2ZW50KSkKQEAgLTExMywy
MiArOTQsMTUgQEAgRXZlbnRQYXRoOjpFdmVudFBhdGgoTm9kZSYgb3JpZ2luYWxUYXJnZXQsIEV2
ZW50JiBldmVudCkKIAogdm9pZCBFdmVudFBhdGg6OmJ1aWxkUGF0aChOb2RlJiBvcmlnaW5hbFRh
cmdldCwgRXZlbnQmIGV2ZW50KQogewotICAgIHVzaW5nIE1ha2VFdmVudENvbnRleHQgPSBzdGQ6
OnVuaXF1ZV9wdHI8RXZlbnRDb250ZXh0PiAoKikoTm9kZSYsIEV2ZW50VGFyZ2V0KiwgRXZlbnRU
YXJnZXQqLCBpbnQgY2xvc2VkU2hhZG93RGVwdGgpOwotICAgIE1ha2VFdmVudENvbnRleHQgbWFr
ZUV2ZW50Q29udGV4dCA9IFtdIChOb2RlJiBub2RlLCBFdmVudFRhcmdldCogY3VycmVudFRhcmdl
dCwgRXZlbnRUYXJnZXQqIHRhcmdldCwgaW50IGNsb3NlZFNoYWRvd0RlcHRoKSB7Ci0gICAgICAg
IHJldHVybiBtYWtlVW5pcXVlPEV2ZW50Q29udGV4dD4oJm5vZGUsIGN1cnJlbnRUYXJnZXQsIHRh
cmdldCwgY2xvc2VkU2hhZG93RGVwdGgpOwotICAgIH07Ci0gICAgaWYgKGlzPE1vdXNlRXZlbnQ+
KGV2ZW50KSB8fCBldmVudC5pc0ZvY3VzRXZlbnQoKSkgewotICAgICAgICBtYWtlRXZlbnRDb250
ZXh0ID0gW10gKE5vZGUmIG5vZGUsIEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0LCBFdmVudFRh
cmdldCogdGFyZ2V0LCBpbnQgY2xvc2VkU2hhZG93RGVwdGgpIC0+IHN0ZDo6dW5pcXVlX3B0cjxF
dmVudENvbnRleHQ+IHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPE1vdXNlT3JGb2N1
c0V2ZW50Q29udGV4dD4obm9kZSwgY3VycmVudFRhcmdldCwgdGFyZ2V0LCBjbG9zZWRTaGFkb3dE
ZXB0aCk7Ci0gICAgICAgIH07Ci0gICAgfQorICAgIEV2ZW50Q29udGV4dDo6VHlwZSBjb250ZXh0
VHlwZSA9IFsmXSgpIHsKKyAgICAgICAgaWYgKGlzPE1vdXNlRXZlbnQ+KGV2ZW50KSB8fCBldmVu
dC5pc0ZvY3VzRXZlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBFdmVudENvbnRleHQ6OlR5cGU6
Ok1vdXNlT3JGb2N1czsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIGlmIChpczxUb3Vj
aEV2ZW50PihldmVudCkpIHsKLSAgICAgICAgbWFrZUV2ZW50Q29udGV4dCA9IFtdIChOb2RlJiBu
b2RlLCBFdmVudFRhcmdldCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJnZXQqIHRhcmdldCwgaW50
IGNsb3NlZFNoYWRvd0RlcHRoKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRDb250ZXh0PiB7Ci0g
ICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxUb3VjaEV2ZW50Q29udGV4dD4obm9kZSwgY3Vy
cmVudFRhcmdldCwgdGFyZ2V0LCBjbG9zZWRTaGFkb3dEZXB0aCk7Ci0gICAgICAgIH07Ci0gICAg
fQorICAgICAgICBpZiAoaXM8VG91Y2hFdmVudD4oZXZlbnQpKQorICAgICAgICAgICAgcmV0dXJu
IEV2ZW50Q29udGV4dDo6VHlwZTo6VG91Y2g7CiAjZW5kaWYKKyAgICAgICAgcmV0dXJuIEV2ZW50
Q29udGV4dDo6VHlwZTo6Tm9ybWFsOworICAgIH0oKTsKIAogICAgIE5vZGUqIG5vZGUgPSBub2Rl
T3JIb3N0SWZQc2V1ZG9FbGVtZW50KCZvcmlnaW5hbFRhcmdldCk7CiAgICAgTm9kZSogdGFyZ2V0
ID0gbm9kZSA/IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2RlKSA6IG51bGxw
dHI7CkBAIC0xMzcsNyArMTExLDcgQEAgdm9pZCBFdmVudFBhdGg6OmJ1aWxkUGF0aChOb2RlJiBv
cmlnaW5hbFRhcmdldCwgRXZlbnQmIGV2ZW50KQogICAgIC8vIFRoZXkgY291bGQgYmUgbmVnYXRp
dmUgZm9yIG5vZGVzIG91dHNpZGUgdGhlIHNoYWRvdyB0cmVlIG9mIHRoZSB0YXJnZXQgbm9kZS4K
ICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICAgICAg
bV9wYXRoLmFwcGVuZChtYWtlRXZlbnRDb250ZXh0KCpub2RlLCBldmVudFRhcmdldFJlc3BlY3Rp
bmdUYXJnZXRSdWxlcygqbm9kZSksIHRhcmdldCwgY2xvc2VkU2hhZG93RGVwdGgpKTsKKyAgICAg
ICAgICAgIG1fcGF0aC5hcHBlbmQoRXZlbnRDb250ZXh0IHsgY29udGV4dFR5cGUsIG5vZGUsIGV2
ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2RlKSwgdGFyZ2V0LCBjbG9zZWRTaGFk
b3dEZXB0aCB9KTsKIAogICAgICAgICAgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KCpub2RlKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTE0OSwxNCArMTIzLDEzIEBAIHZvaWQgRXZlbnRQYXRo
OjpidWlsZFBhdGgoTm9kZSYgb3JpZ2luYWxUYXJnZXQsIEV2ZW50JiBldmVudCkKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHRhcmdldCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJn
ZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiB3aW5kb3cgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKm5vZGUpLmRvbVdpbmRvdygpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcGF0aC5hcHBlbmQobWFrZVVuaXF1ZTxXaW5kb3dFdmVudENvbnRleHQ+KCpub2RlLCAq
d2luZG93LCAqdGFyZ2V0LCBjbG9zZWRTaGFkb3dEZXB0aCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fcGF0aC5hcHBlbmQoRXZlbnRDb250ZXh0IHsgRXZlbnRDb250ZXh0OjpUeXBl
OjpXaW5kb3csIG5vZGUsIHdpbmRvdywgdGFyZ2V0LCBjbG9zZWRTaGFkb3dEZXB0aCB9KTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGF1dG8qIHNoYWRvd1Jvb3RPZlBh
cmVudCA9IHBhcmVudC0+c2hhZG93Um9vdCgpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNo
YWRvd1Jvb3RPZlBhcmVudCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzaGFkb3dSb290T2ZQ
YXJlbnQgPSBwYXJlbnQtPnNoYWRvd1Jvb3QoKTsgVU5MSUtFTFkoc2hhZG93Um9vdE9mUGFyZW50
KSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvKiBhc3NpZ25lZFNsb3QgPSBzaGFkb3dSb290
T2ZQYXJlbnQtPmZpbmRBc3NpZ25lZFNsb3QoKm5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChzaGFkb3dSb290T2ZQYXJlbnQtPm1vZGUoKSAhPSBTaGFkb3dSb290TW9kZTo6T3BlbikK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlZFNoYWRvd0RlcHRoKys7CkBAIC0xNzksMjMg
KzE1MiwyMCBAQCB2b2lkIEV2ZW50UGF0aDo6YnVpbGRQYXRoKE5vZGUmIG9yaWdpbmFsVGFyZ2V0
LCBFdmVudCYgZXZlbnQpCiAgICAgfQogfQogCi12b2lkIEV2ZW50UGF0aDo6c2V0UmVsYXRlZFRh
cmdldChOb2RlJiBvcmlnaW4sIEV2ZW50VGFyZ2V0JiByZWxhdGVkVGFyZ2V0KQordm9pZCBFdmVu
dFBhdGg6OnNldFJlbGF0ZWRUYXJnZXQoTm9kZSYgb3JpZ2luLCBOb2RlJiByZWxhdGVkTm9kZSkK
IHsKLSAgICBpZiAoIWlzPE5vZGU+KHJlbGF0ZWRUYXJnZXQpIHx8IG1fcGF0aC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHJlbGF0ZWROb2RlID0gZG93bmNhc3Q8Tm9k
ZT4ocmVsYXRlZFRhcmdldCk7Ci0gICAgUmVsYXRlZE5vZGVSZXRhcmdldGVyIHJldGFyZ2V0ZXIo
cmVsYXRlZE5vZGUsICptX3BhdGhbMF0tPm5vZGUoKSk7CisgICAgUmVsYXRlZE5vZGVSZXRhcmdl
dGVyIHJldGFyZ2V0ZXIocmVsYXRlZE5vZGUsICptX3BhdGhbMF0ubm9kZSgpKTsKIAogICAgIGJv
b2wgb3JpZ2luSXNSZWxhdGVkVGFyZ2V0ID0gJm9yaWdpbiA9PSAmcmVsYXRlZE5vZGU7CiAgICAg
Tm9kZSYgcm9vdE5vZGVJbk9yaWdpblRyZWVTY29wZSA9IG9yaWdpbi50cmVlU2NvcGUoKS5yb290
Tm9kZSgpOwogICAgIFRyZWVTY29wZSogcHJldmlvdXNUcmVlU2NvcGUgPSBudWxscHRyOwogICAg
IHNpemVfdCBvcmlnaW5hbEV2ZW50UGF0aFNpemUgPSBtX3BhdGguc2l6ZSgpOwogICAgIGZvciAo
dW5zaWduZWQgY29udGV4dEluZGV4ID0gMDsgY29udGV4dEluZGV4IDwgb3JpZ2luYWxFdmVudFBh
dGhTaXplOyBjb250ZXh0SW5kZXgrKykgewotICAgICAgICBhdXRvJiBhbWJnaW91c0NvbnRleHQg
PSAqbV9wYXRoW2NvbnRleHRJbmRleF07Ci0gICAgICAgIGlmICghaXM8TW91c2VPckZvY3VzRXZl
bnRDb250ZXh0PihhbWJnaW91c0NvbnRleHQpKQorICAgICAgICBhdXRvJiBjb250ZXh0ID0gbV9w
YXRoW2NvbnRleHRJbmRleF07CisgICAgICAgIGlmICghY29udGV4dC5pc01vdXNlT3JGb2N1c0V2
ZW50Q29udGV4dCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoY29udGV4dC5pc1dpbmRvd0NvbnRl
eHQoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byYgY29udGV4dCA9IGRv
d25jYXN0PE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dD4oYW1iZ2lvdXNDb250ZXh0KTsKKyAgICAg
ICAgfQogCiAgICAgICAgIE5vZGUmIGN1cnJlbnRUYXJnZXQgPSAqY29udGV4dC5ub2RlKCk7CiAg
ICAgICAgIFRyZWVTY29wZSYgY3VycmVudFRyZWVTY29wZSA9IGN1cnJlbnRUYXJnZXQudHJlZVNj
b3BlKCk7CkBAIC0yMjEsMzAgKzE5MSwzMSBAQCB2b2lkIEV2ZW50UGF0aDo6c2V0UmVsYXRlZFRh
cmdldChOb2RlJiBvcmlnaW4sIEV2ZW50VGFyZ2V0JiByZWxhdGVkVGFyZ2V0KQogCiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKIAotdm9pZCBFdmVudFBhdGg6OnJldGFyZ2V0VG91Y2goVG91Y2hF
dmVudENvbnRleHQ6OlRvdWNoTGlzdFR5cGUgdHlwZSwgY29uc3QgVG91Y2gmIHRvdWNoKQordm9p
ZCBFdmVudFBhdGg6OnJldGFyZ2V0VG91Y2goRXZlbnRDb250ZXh0OjpUb3VjaExpc3RUeXBlIHR5
cGUsIGNvbnN0IFRvdWNoJiB0b3VjaCkKIHsKICAgICBhdXRvKiBldmVudFRhcmdldCA9IHRvdWNo
LnRhcmdldCgpOwogICAgIGlmICghaXM8Tm9kZT4oZXZlbnRUYXJnZXQpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBSZWxhdGVkTm9kZVJldGFyZ2V0ZXIgcmV0YXJnZXRlcihkb3duY2FzdDxOb2Rl
PigqZXZlbnRUYXJnZXQpLCAqbV9wYXRoWzBdLT5ub2RlKCkpOworICAgIFJlbGF0ZWROb2RlUmV0
YXJnZXRlciByZXRhcmdldGVyKGRvd25jYXN0PE5vZGU+KCpldmVudFRhcmdldCksICptX3BhdGhb
MF0ubm9kZSgpKTsKICAgICBUcmVlU2NvcGUqIHByZXZpb3VzVHJlZVNjb3BlID0gbnVsbHB0cjsK
ICAgICBmb3IgKGF1dG8mIGNvbnRleHQgOiBtX3BhdGgpIHsKLSAgICAgICAgTm9kZSYgY3VycmVu
dFRhcmdldCA9ICpjb250ZXh0LT5ub2RlKCk7CisgICAgICAgIE5vZGUmIGN1cnJlbnRUYXJnZXQg
PSAqY29udGV4dC5ub2RlKCk7CiAgICAgICAgIFRyZWVTY29wZSYgY3VycmVudFRyZWVTY29wZSA9
IGN1cnJlbnRUYXJnZXQudHJlZVNjb3BlKCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShwcmV2aW91
c1RyZWVTY29wZSAmJiAmY3VycmVudFRyZWVTY29wZSAhPSBwcmV2aW91c1RyZWVTY29wZSkpCiAg
ICAgICAgICAgICByZXRhcmdldGVyLm1vdmVUb05ld1RyZWVTY29wZShwcmV2aW91c1RyZWVTY29w
ZSwgY3VycmVudFRyZWVTY29wZSk7CiAKLSAgICAgICAgaWYgKGlzPFRvdWNoRXZlbnRDb250ZXh0
PigqY29udGV4dCkpIHsKKyAgICAgICAgaWYgKGNvbnRleHQuaXNUb3VjaEV2ZW50Q29udGV4dCgp
KSB7CiAgICAgICAgICAgICBOb2RlKiBjdXJyZW50UmVsYXRlZE5vZGUgPSByZXRhcmdldGVyLmN1
cnJlbnROb2RlKGN1cnJlbnRUYXJnZXQpOwotICAgICAgICAgICAgZG93bmNhc3Q8VG91Y2hFdmVu
dENvbnRleHQ+KCpjb250ZXh0KS50b3VjaExpc3QodHlwZSkuYXBwZW5kKHRvdWNoLmNsb25lV2l0
aE5ld1RhcmdldChjdXJyZW50UmVsYXRlZE5vZGUpKTsKLSAgICAgICAgfQorICAgICAgICAgICAg
Y29udGV4dC50b3VjaExpc3QodHlwZSkuYXBwZW5kKHRvdWNoLmNsb25lV2l0aE5ld1RhcmdldChj
dXJyZW50UmVsYXRlZE5vZGUpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlQo
Y29udGV4dC5pc1dpbmRvd0NvbnRleHQoKSk7CiAKICAgICAgICAgcHJldmlvdXNUcmVlU2NvcGUg
PSAmY3VycmVudFRyZWVTY29wZTsKICAgICB9CiB9CiAKLXZvaWQgRXZlbnRQYXRoOjpyZXRhcmdl
dFRvdWNoTGlzdChUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlwZSB0eXBlLCBjb25zdCBU
b3VjaExpc3QqIGxpc3QpCit2b2lkIEV2ZW50UGF0aDo6cmV0YXJnZXRUb3VjaExpc3QoRXZlbnRD
b250ZXh0OjpUb3VjaExpc3RUeXBlIHR5cGUsIGNvbnN0IFRvdWNoTGlzdCogbGlzdCkKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBsZW5ndGggPSBsaXN0ID8gbGlzdC0+bGVuZ3RoKCkgOiAw
OyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgIHJldGFyZ2V0VG91Y2godHlwZSwgKmxpc3QtPml0
ZW0oaSkpOwpAQCAtMjUyLDkgKzIyMyw5IEBAIHZvaWQgRXZlbnRQYXRoOjpyZXRhcmdldFRvdWNo
TGlzdChUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlwZSB0eXBlLCBjb25zdCBUCiAKIHZv
aWQgRXZlbnRQYXRoOjpyZXRhcmdldFRvdWNoTGlzdHMoY29uc3QgVG91Y2hFdmVudCYgZXZlbnQp
CiB7Ci0gICAgcmV0YXJnZXRUb3VjaExpc3QoVG91Y2hFdmVudENvbnRleHQ6OlRvdWNoZXMsIGV2
ZW50LnRvdWNoZXMoKSk7Ci0gICAgcmV0YXJnZXRUb3VjaExpc3QoVG91Y2hFdmVudENvbnRleHQ6
OlRhcmdldFRvdWNoZXMsIGV2ZW50LnRhcmdldFRvdWNoZXMoKSk7Ci0gICAgcmV0YXJnZXRUb3Vj
aExpc3QoVG91Y2hFdmVudENvbnRleHQ6OkNoYW5nZWRUb3VjaGVzLCBldmVudC5jaGFuZ2VkVG91
Y2hlcygpKTsKKyAgICByZXRhcmdldFRvdWNoTGlzdChFdmVudENvbnRleHQ6OlRvdWNoTGlzdFR5
cGU6OlRvdWNoZXMsIGV2ZW50LnRvdWNoZXMoKSk7CisgICAgcmV0YXJnZXRUb3VjaExpc3QoRXZl
bnRDb250ZXh0OjpUb3VjaExpc3RUeXBlOjpUYXJnZXRUb3VjaGVzLCBldmVudC50YXJnZXRUb3Vj
aGVzKCkpOworICAgIHJldGFyZ2V0VG91Y2hMaXN0KEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlw
ZTo6Q2hhbmdlZFRvdWNoZXMsIGV2ZW50LmNoYW5nZWRUb3VjaGVzKCkpOwogfQogCiAjZW5kaWYK
QEAgLTI3MSwxMCArMjQyLDEwIEBAIFZlY3RvcjxFdmVudFRhcmdldCo+IEV2ZW50UGF0aDo6Y29t
cHV0ZVBhdGhVbmNsb3NlZFRvVGFyZ2V0KGNvbnN0IEV2ZW50VGFyZ2V0JiB0CiAgICAgcGF0aC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdGhTaXplKTsKIAogICAgIGF1dG8gY3VycmVudFRhcmdl
dEluZGV4ID0gbV9wYXRoLmZpbmRNYXRjaGluZyhbJnRhcmdldF0gKGF1dG8mIGNvbnRleHQpIHsK
LSAgICAgICAgcmV0dXJuIGNvbnRleHQtPmN1cnJlbnRUYXJnZXQoKSA9PSAmdGFyZ2V0OworICAg
ICAgICByZXR1cm4gY29udGV4dC5jdXJyZW50VGFyZ2V0KCkgPT0gJnRhcmdldDsKICAgICB9KTsK
ICAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50VGFyZ2V0SW5kZXggIT0gbm90Rm91bmQpOwotICAg
IGF1dG8gY3VycmVudFRhcmdldERlcHRoID0gbV9wYXRoW2N1cnJlbnRUYXJnZXRJbmRleF0tPmNs
b3NlZFNoYWRvd0RlcHRoKCk7CisgICAgYXV0byBjdXJyZW50VGFyZ2V0RGVwdGggPSBtX3BhdGhb
Y3VycmVudFRhcmdldEluZGV4XS5jbG9zZWRTaGFkb3dEZXB0aCgpOwogCiAgICAgYXV0byBhcHBl
bmRUYXJnZXRXaXRoTGVzc2VyRGVwdGggPSBbJnBhdGhdIChjb25zdCBFdmVudENvbnRleHQmIGN1
cnJlbnRDb250ZXh0LCBpbnQmIGN1cnJlbnREZXB0aEFsbG93ZWQpIHsKICAgICAgICAgYXV0byBk
ZXB0aCA9IGN1cnJlbnRDb250ZXh0LmNsb3NlZFNoYWRvd0RlcHRoKCk7CkBAIC0yOTAsMTQgKzI2
MSwxNCBAQCBWZWN0b3I8RXZlbnRUYXJnZXQqPiBFdmVudFBhdGg6OmNvbXB1dGVQYXRoVW5jbG9z
ZWRUb1RhcmdldChjb25zdCBFdmVudFRhcmdldCYgdAogICAgIGF1dG8gY3VycmVudERlcHRoQWxs
b3dlZCA9IGN1cnJlbnRUYXJnZXREZXB0aDsKICAgICBhdXRvIGkgPSBjdXJyZW50VGFyZ2V0SW5k
ZXg7CiAgICAgZG8gewotICAgICAgICBhcHBlbmRUYXJnZXRXaXRoTGVzc2VyRGVwdGgoKm1fcGF0
aFtpXSwgY3VycmVudERlcHRoQWxsb3dlZCk7CisgICAgICAgIGFwcGVuZFRhcmdldFdpdGhMZXNz
ZXJEZXB0aChtX3BhdGhbaV0sIGN1cnJlbnREZXB0aEFsbG93ZWQpOwogICAgIH0gd2hpbGUgKGkt
LSk7CiAgICAgcGF0aC5yZXZlcnNlKCk7CiAKICAgICBjdXJyZW50RGVwdGhBbGxvd2VkID0gY3Vy
cmVudFRhcmdldERlcHRoOwogICAgIGZvciAoYXV0byBpID0gY3VycmVudFRhcmdldEluZGV4ICsg
MTsgaSA8IHBhdGhTaXplOyArK2kpCi0gICAgICAgIGFwcGVuZFRhcmdldFdpdGhMZXNzZXJEZXB0
aCgqbV9wYXRoW2ldLCBjdXJyZW50RGVwdGhBbGxvd2VkKTsKLSAgICAKKyAgICAgICAgYXBwZW5k
VGFyZ2V0V2l0aExlc3NlckRlcHRoKG1fcGF0aFtpXSwgY3VycmVudERlcHRoQWxsb3dlZCk7CisK
ICAgICByZXR1cm4gcGF0aDsKIH0KIApAQCAtMzA4LDcgKzI3OSw3IEBAIEV2ZW50UGF0aDo6RXZl
bnRQYXRoKGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIHRhcmdldHMpCiAgICAgICAgIEFTU0VSVCh0
YXJnZXQpOwogICAgICAgICBOb2RlKiBvcmlnaW4gPSAqdGFyZ2V0cy5iZWdpbigpOwogICAgICAg
ICBpZiAoIXRhcmdldC0+aXNDbG9zZWRTaGFkb3dIaWRkZW4oKm9yaWdpbikpCi0gICAgICAgICAg
ICBtX3BhdGguYXBwZW5kKG1ha2VVbmlxdWU8RXZlbnRDb250ZXh0Pih0YXJnZXQsIHRhcmdldCwg
b3JpZ2luLCAwKSk7CisgICAgICAgICAgICBtX3BhdGguYXBwZW5kKEV2ZW50Q29udGV4dCB7IEV2
ZW50Q29udGV4dDo6VHlwZTo6Tm9ybWFsLCB0YXJnZXQsIHRhcmdldCwgb3JpZ2luLCAwIH0pOwog
ICAgIH0KIH0KIApAQCAtMzE3LDcgKzI4OCw3IEBAIEV2ZW50UGF0aDo6RXZlbnRQYXRoKGNvbnN0
IFZlY3RvcjxFdmVudFRhcmdldCo+JiB0YXJnZXRzKQogICAgIGZvciAoYXV0byogdGFyZ2V0IDog
dGFyZ2V0cykgewogICAgICAgICBBU1NFUlQodGFyZ2V0KTsKICAgICAgICAgQVNTRVJUKCFpczxO
b2RlPih0YXJnZXQpKTsKLSAgICAgICAgbV9wYXRoLmFwcGVuZChtYWtlVW5pcXVlPEV2ZW50Q29u
dGV4dD4obnVsbHB0ciwgdGFyZ2V0LCAqdGFyZ2V0cy5iZWdpbigpLCAwKSk7CisgICAgICAgIG1f
cGF0aC5hcHBlbmQoRXZlbnRDb250ZXh0IHsgRXZlbnRDb250ZXh0OjpUeXBlOjpOb3JtYWwsIG51
bGxwdHIsIHRhcmdldCwgKnRhcmdldHMuYmVnaW4oKSwgMCB9KTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudFBhdGguaAppbmRleCBiOTQ1MmYzMDU2MGUuLjc5MDlhMmVmMzZlMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudFBhdGguaApAQCAtMzksOCArMzksOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBtX3BhdGguaXNFbXB0eSgpOyB9CiAgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3BhdGguc2l6ZSgpOyB9Ci0gICAgY29uc3QgRXZlbnRDb250ZXh0
JiBjb250ZXh0QXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuICptX3BhdGhbaV07IH0KLSAgICBF
dmVudENvbnRleHQmIGNvbnRleHRBdChzaXplX3QgaSkgeyByZXR1cm4gKm1fcGF0aFtpXTsgfQor
ICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgY29udGV4dEF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVy
biBtX3BhdGhbaV07IH0KKyAgICBFdmVudENvbnRleHQmIGNvbnRleHRBdChzaXplX3QgaSkgeyBy
ZXR1cm4gbV9wYXRoW2ldOyB9CiAKICAgICBWZWN0b3I8RXZlbnRUYXJnZXQqPiBjb21wdXRlUGF0
aFVuY2xvc2VkVG9UYXJnZXQoY29uc3QgRXZlbnRUYXJnZXQmKSBjb25zdDsKIApAQCAtNDgsMTUg
KzQ4LDE1IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIGJ1aWxkUGF0aChOb2RlJiBv
cmlnaW4sIEV2ZW50Jik7Ci0gICAgdm9pZCBzZXRSZWxhdGVkVGFyZ2V0KE5vZGUmIG9yaWdpbiwg
RXZlbnRUYXJnZXQmKTsKKyAgICB2b2lkIHNldFJlbGF0ZWRUYXJnZXQoTm9kZSYgb3JpZ2luLCBO
b2RlJik7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHZvaWQgcmV0YXJnZXRUb3Vj
aChUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlwZSwgY29uc3QgVG91Y2gmKTsKLSAgICB2
b2lkIHJldGFyZ2V0VG91Y2hMaXN0KFRvdWNoRXZlbnRDb250ZXh0OjpUb3VjaExpc3RUeXBlLCBj
b25zdCBUb3VjaExpc3QqKTsKKyAgICB2b2lkIHJldGFyZ2V0VG91Y2goRXZlbnRDb250ZXh0OjpU
b3VjaExpc3RUeXBlLCBjb25zdCBUb3VjaCYpOworICAgIHZvaWQgcmV0YXJnZXRUb3VjaExpc3Qo
RXZlbnRDb250ZXh0OjpUb3VjaExpc3RUeXBlLCBjb25zdCBUb3VjaExpc3QqKTsKICAgICB2b2lk
IHJldGFyZ2V0VG91Y2hMaXN0cyhjb25zdCBUb3VjaEV2ZW50Jik7CiAjZW5kaWYKIAotICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRDb250ZXh0PiwgMzI+IG1fcGF0aDsKKyAgICBWZWN0
b3I8RXZlbnRDb250ZXh0LCAxNj4gbV9wYXRoOwogfTsKIAogaW5saW5lIE5vZGUqIEV2ZW50UGF0
aDo6ZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoTm9kZSYgcmVmZXJlbmNlTm9kZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAppbmRleCAwYTM4Mjc1NTIwNjYuLmJmMmVkMWJkMzlhOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcApAQCAtMjM2NCwxOCArMjM2NCw2IEBAIHZvaWQgTm9kZTo6bm90aWZ5TXV0YXRpb25P
YnNlcnZlcnNOb2RlV2lsbERldGFjaCgpCiAgICAgfQogfQogCi12b2lkIE5vZGU6OmhhbmRsZUxv
Y2FsRXZlbnRzKEV2ZW50JiBldmVudCwgRXZlbnRJbnZva2VQaGFzZSBwaGFzZSkKLXsKLSAgICBp
ZiAoIWhhc0V2ZW50VGFyZ2V0RGF0YSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhN
RTogU2hvdWxkIHdlIGRlbGl2ZXIgd2hlZWwgZXZlbnRzIHRvIGRpc2FibGVkIGZvcm0gY29udHJv
bHMgb3Igbm90PwotICAgIGlmIChpczxFbGVtZW50PigqdGhpcykgJiYgZG93bmNhc3Q8RWxlbWVu
dD4oKnRoaXMpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICYmIGV2ZW50LmlzVHJ1c3RlZCgpICYm
IGV2ZW50LmlzTW91c2VFdmVudCgpICYmICFldmVudC5pc1doZWVsRXZlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LCBwaGFzZSk7Ci19Ci0KIHZv
aWQgTm9kZTo6ZGlzcGF0Y2hTY29wZWRFdmVudChFdmVudCYgZXZlbnQpCiB7CiAgICAgRXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaFNjb3BlZEV2ZW50KCp0aGlzLCBldmVudCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApp
bmRleCAyZWNkMTVkNmQ5NGQuLjRjYTliNTg4ZjIwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC00NTIsOCAr
NDUyLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaXNwYXRjaFNjb3BlZEV2ZW50KEV2ZW50Jik7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmLCBFdmVudEludm9r
ZVBoYXNlKTsKLQogICAgIHZvaWQgZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCgpOwogICAg
IHZvaWQgZGlzcGF0Y2hET01BY3RpdmF0ZUV2ZW50KEV2ZW50JiB1bmRlcmx5aW5nQ2xpY2tFdmVu
dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCA5ZjllZGRm
ZWFhOWYuLjEyZWFmNDM2MDdlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmNwcApAQCAtMTQ5LDE1ICsxNDksNiBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVtb3ZlZEZy
b21BbmNlc3RvcihSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZQogICAgIEhU
TUxFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKHJlbW92YWxUeXBlLCBvbGRQYXJlbnRPZlJl
bW92ZWRUcmVlKTsKIH0KIAotdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmhhbmRsZUxvY2FsRXZlbnRz
KEV2ZW50JiBldmVudCwgRXZlbnRJbnZva2VQaGFzZSBwaGFzZSkKLXsKLSAgICBpZiAoZXZlbnQu
ZXZlbnRQaGFzZSgpICE9IEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UgJiYgaXM8Tm9kZT4oZXZlbnQu
dGFyZ2V0KCkpICYmIGV2ZW50LnRhcmdldCgpICE9IHRoaXMgJiYgKGV2ZW50LnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuc3VibWl0RXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5y
ZXNldEV2ZW50KSkgewotICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBIVE1MRWxlbWVudDo6aGFuZGxlTG9jYWxFdmVudHMoZXZlbnQs
IHBoYXNlKTsKLX0KLQogdW5zaWduZWQgSFRNTEZvcm1FbGVtZW50OjpsZW5ndGgoKSBjb25zdAog
ewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuaAppbmRleCA4MDcyODhmNGFkMGIuLjg5MzZmNzgyZDFmNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtRWxlbWVudC5oCkBAIC0xMzEsOCArMTMxLDYgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsK
ICAgICB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbigpIGZpbmFsOwogCi0gICAgdm9pZCBoYW5k
bGVMb2NhbEV2ZW50cyhFdmVudCYsIEV2ZW50SW52b2tlUGhhc2UpIGZpbmFsOwotCiAgICAgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYp
IGZpbmFsOwogICAgIGJvb2wgaXNVUkxBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJikgY29uc3Qg
ZmluYWw7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421500</attachid>
            <date>2021-02-24 21:51:29 -0800</date>
            <delta_ts>2021-02-24 22:16:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222095-20210224215128.patch</filename>
            <type>text/plain</type>
            <size>34518</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyODkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGIwNWExMGQ5N2Q5MTVk
YmM4ODkwZDdhNjE0YTNkMWUwMjE4NzYwOS4uMzE4YTExOGZjZDhlM2JlNDNjMGFlZTMwM2JjOTJi
MjdmNmU0MDNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDIxLTAyLTIyICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEF2b2lkIGhlYXAgYWxsb2Nh
dGlvbiBmb3IgRXZlbnRDb250ZXh0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjIyMDk1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NDU4NjkxNT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIG1lcmdlcyBhbGwgc3ViY2xhc3NlcyBvZiBFdmVudENvbnRleHQgaW50byBpdHNlbGYgdG8g
YXZvaWQgaGVhcCBhbGxvY2F0aW9uIGZvciBlYWNoCisgICAgICAgIEV2ZW50Q29udGV4dCBpbiBF
dmVudFBhdGg6Om1fcGF0aC4gSXQgYWxzbyBtZXJnZXMgTm9kZTo6aGFuZGxlTG9jYWxFdmVudHMg
aW50byBFdmVudENvbnRleHQncworICAgICAgICBoYW5kbGVMb2NhbEV2ZW50cyB0byBhdm9pZCB0
aGUgZXh0cmEgdmlydHVhbCBmdW5jdGlvbiBjYWxsLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBz
aW5jZSB0aGVyZSBzaG91bGQgYmUgbm8gb2JzZXJ2YWJsZSBiZWhhdmlvcmFsIGRpZmZlcmVuY2Vz
LgorCisgICAgICAgICogZG9tL0V2ZW50Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudENvbnRleHQ6OkV2ZW50Q29udGV4dCk6IE1vdmVkIHRvIHRoZSBoZWFkZXIgdG8gYmUgaW5s
aW5lZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMg
Y29uc3QpOiBNZXJnZWQgaGFuZGxlTG9jYWxFdmVudHMgb2YgSFRNTEZvcm1FbGVtZW50CisgICAg
ICAgIGFuZCBOb2RlLiBNb3ZlZCB0aGUgY29kZSB0byBoYW5kbGUgcmVsYXRlZCB0YXJnZXQgYW5k
IHRvdWNoIHRhcmdldHMgZnJvbSBNb3VzZU9yRm9jdXNFdmVudENvbnRleHQKKyAgICAgICAgYW5k
IFRvdWNoRXZlbnRDb250ZXh0IGFzIHRoZXkgaGF2ZSBiZWVuIG1lcmdlZCBpbnRvIHRoaXMgY2xh
c3MuIEFsc28gc3BlY2lhbCBjYXNlIGRpc3BhdGNoaW5nCisgICAgICAgIGFuIGV2ZW50IG9uIHdp
bmRvdyB0byBwcmVzZXJ2ZSB0aGUgYmVoYXZpb3Igb2YgV2luZG93RXZlbnRDb250ZXh0LgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0Ojppbml0aWFsaXplVG91Y2hMaXN0cyk6IEFkZGVk
LiBDcmVhdGVzIFRvdWNoTGlzdCBvYmplY3RzLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250
ZXh0Ojppc1VucmVhY2hhYmxlTm9kZSBjb25zdCk6IE1vdmVkIGZyb20gdGhlIGhlYWRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6aXNNb3VzZU9yRm9jdXNFdmVudENvbnRleHQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0Ojppc1RvdWNo
RXZlbnRDb250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vdXNlT3JG
b2N1c0V2ZW50Q29udGV4dDo6TW91c2VPckZvY3VzRXZlbnRDb250ZXh0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVu
dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TW91c2VPckZvY3VzRXZlbnRD
b250ZXh0Ojppc01vdXNlT3JGb2N1c0V2ZW50Q29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hFdmVudENvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZl
bnRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRXZlbnRDb250ZXh0
Ojppc1RvdWNoRXZlbnRDb250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlRvdWNoRXZlbnRDb250ZXh0OjpjaGVja1JlYWNoYWJpbGl0eSBjb25zdCk6IERlbGV0ZWQuIE1l
cmdlZCBpbnRvIGhhbmRsZUxvY2FsRXZlbnRzLgorICAgICAgICAqIGRvbS9FdmVudENvbnRleHQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6aXNNb3VzZU9yRm9jdXNFdmVudENv
bnRleHQgY29uc3QpOiBOb3cgc2ltcGx5IGNoZWNrcyBtX3R5cGUuCisgICAgICAgIChXZWJDb3Jl
OjpFdmVudENvbnRleHQ6OmlzVG91Y2hFdmVudENvbnRleHQgY29uc3QpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50Q29udGV4dDo6aXNXaW5kb3dDb250ZXh0IGNvbnN0KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpFdmVudENvbnRleHQ6OnJlbGF0ZWRUYXJnZXQgY29uc3QpOiBN
b3ZlZCBmcm9tIE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50Q29udGV4dDo6c2V0UmVsYXRlZFRhcmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRDb250ZXh0Ojp0b3VjaExpc3QpOiBNb3ZlZCBmcm9tIFRvdWNoRXZlbnRDb250ZXh0Lgor
ICAgICAgICAoV2ViQ29yZTo6bV9jb250ZXh0Tm9kZUlzRm9ybUVsZW1lbnQpOiBBZGRlZC4gQ2Fj
aGluZyB0aGlzIHN0YXRlIGhlcmUgaW5zdGVhZCBvZiBjaGVja2luZyBpdCBhdAorICAgICAgICBl
dmVyeSBldmVudCBjb250ZXh0IGR1cmluZyBkaXNwYXRjaGluZyBpbiBFdmVudENvbnRleHQ6Omhh
bmRsZUxvY2FsRXZlbnRzIHNlZW1zIHRvIGJlIGltcG9ydGFudAorICAgICAgICB0byBnZXQgYSBz
cGVlZCB1cCBpbiBJbnRlbCBwcm9jZXNzb3JzLiBBcHBsZSBzaWxpY29ucyBkb24ndCBzZWVtIHRv
IGJlIGFmZmVjdGVkIGJ5IHRoaXMuCisgICAgICAgIChXZWJDb3JlOjptX3R5cGUpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Ok1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ6OnJlbGF0ZWRUYXJnZXQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hFdmVudENvbnRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0OjpFdmVudENvbnRleHQpOiBN
b3ZlZCBmcm9tIGNwcCBmaWxlIHRvIGJlIGlubGluZWQgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50Q29udGV4dDo6aXNVbnJlYWNoYWJsZU5vZGUgY29uc3QpOiBNb3ZlZCBpbnRvIGNwcCBh
cyB0aGlzIGlzIG9ubHkgdXNlZCBmb3IKKyAgICAgICAgYXNzZXJ0aW5nIHNoYWRvdyBET00gcmVs
YXRlZCBjb25kaXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRDb250ZXh0Ojp0b3VjaExp
c3QpOiBSZW5hbWVkIGZyb20gVG91Y2hFdmVudENvbnRleHQ6OnRvdWNoTGlzdC4KKyAgICAgICAg
KGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQpOiBEZWxldGVk
IHRoZSB2YXJpYW50IHRoYXQgdGFrZXMgYSB2ZWN0b3Igb2YgZWxlbWVudHMKKyAgICAgICAgc2lu
Y2UgaXQncyBub3QgdXNlZCBhbnl3aGVyZS4KKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVy
Lmg6CisgICAgICAgICogZG9tL0V2ZW50UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaW5k
b3dFdmVudENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRQYXRoOjpF
dmVudFBhdGgpOiBBdm9pZCBjYWxsaW5nIHNldFJlbGF0ZWRUYXJnZXQgaWYgcmVsYXRlZCB0YXJn
ZXQgaXMgbm90IGEgbm9kZQorICAgICAgICBvciB0aGUgcGF0aCBpcyBlbXB0eS4gVGhlc2Ugd2Vy
ZSBlYXJseSByZXR1cm4gY29uZGl0aW9ucyBpbiBzZXRSZWxhdGVkVGFyZ2V0IGJlZm9yZSB0aGlz
IHBhdGNoLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRQYXRoOjpidWlsZFBhdGgpOiBBbHdheXMg
Y3JlYXRlIEV2ZW50Q29udGV4dC4gRHJhbWF0aWNhbGx5IHNpbXBsaWZpZXMgdGhlIGNvZGUuCisg
ICAgICAgIChXZWJDb3JlOjpFdmVudFBhdGg6OnNldFJlbGF0ZWRUYXJnZXQpOiBNb3ZlZCB0aGUg
ZWFybHkgZXhpdCB0byBFdmVudFBhdGg6OkV2ZW50UGF0aC4KKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50UGF0aDo6cmV0YXJnZXRUb3VjaCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFBhdGg6OnJl
dGFyZ2V0VG91Y2hMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UGF0aDo6cmV0YXJnZXRU
b3VjaExpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UGF0aDo6RXZlbnRQYXRoKTogRGVs
ZXRlZCB0aGUgdmFyaWFudCB3aGljaCB0YWtlcyBhIHZlY3RvciBvZiBlbGVtZW50cyBhcyBpdCdz
CisgICAgICAgIG5vdCB1c2VkIGFueXdoZXJlLgorICAgICAgICAqIGRvbS9FdmVudFBhdGguaDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UGF0aDo6Y29udGV4dEF0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50UGF0aDo6Y29udGV4dEF0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
UGF0aDo6bV9wYXRoKTogTm93IGFsbG9jYXRlcyBFdmVudENvbnRleHQgaW4gcGxhY2UuIFRoZSBz
aXplIG9mIHRoZSBpbmxpbmUgYnVmZmVyCisgICAgICAgIGhhcyBiZWVuIHJlZHVjZWQgdG8gMTYg
ZW50cmllcyBmb3IgRXZlbnRDb250ZXh0IGZyb20gMzIgZW50cmllcyBmb3Igc3RkOjp1bmlxdWVf
cHRyPEV2ZW50Q29udGV4dD4KKyAgICAgICAgc2luY2UgdGhlIGZvcm1lciBpcyBjb25zaWRlcmFi
bHkgbGFyZ2VyIHRoYW4gdGhlIGxhdHRlci4KKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpoYW5kbGVMb2NhbEV2ZW50cyk6IERlbGV0ZWQuIE1lcmdlZCBp
bnRvIEV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMuCisgICAgICAgICogZG9tL05vZGUu
aDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRm9ybUVsZW1lbnQ6OmhhbmRsZUxvY2FsRXZlbnRzKTogRGl0dG8uCisgICAgICAgICog
aHRtbC9IVE1MRm9ybUVsZW1lbnQuaDoKKwogMjAyMS0wMi0xNSAgRXJpYyBDYXJsc29uICA8ZXJp
Yy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjT1NdIENvbm5lY3QgVG91Y2ggQmFy
IHRvIE1lZGlhU2Vzc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmNwcAppbmRleCA0Y2Ni
MDZjNjI2Y2VkNTg1NWJmYzA2ZWJiNDc3ZGQzOWI2MTE5MjQzLi41YzJmZjc3YzBmYTUyNDUwZmUy
MjQ2ZjAwZmQxZDg0MTYwM2Q5NWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnRDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmNwcApA
QCAtMjgsMTA1ICsyOCw5MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50
Q29udGV4dC5oIgogCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJGb2N1c0V2ZW50LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50Lmgi
CiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlRvdWNoRXZlbnQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1FdmVudENvbnRleHQ6OkV2ZW50Q29udGV4dChOb2RlKiBub2Rl
LCBFdmVudFRhcmdldCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJnZXQqIHRhcmdldCwgaW50IGNs
b3NlZFNoYWRvd0RlcHRoKQotICAgIDogbV9ub2RlIHsgbm9kZSB9Ci0gICAgLCBtX2N1cnJlbnRU
YXJnZXQgeyBjdXJyZW50VGFyZ2V0IH0KLSAgICAsIG1fdGFyZ2V0IHsgdGFyZ2V0IH0KLSAgICAs
IG1fY2xvc2VkU2hhZG93RGVwdGggeyBjbG9zZWRTaGFkb3dEZXB0aCB9Ci0gICAgLCBtX2N1cnJl
bnRUYXJnZXRJc0luU2hhZG93VHJlZSB7IGlzPE5vZGU+KGN1cnJlbnRUYXJnZXQpICYmIGRvd25j
YXN0PE5vZGU+KCpjdXJyZW50VGFyZ2V0KS5pc0luU2hhZG93VHJlZSgpIH0KLXsKLSAgICBBU1NF
UlQoIWlzVW5yZWFjaGFibGVOb2RlKG1fdGFyZ2V0LmdldCgpKSk7Ci19Ci0KIEV2ZW50Q29udGV4
dDo6fkV2ZW50Q29udGV4dCgpID0gZGVmYXVsdDsKIAogdm9pZCBFdmVudENvbnRleHQ6OmhhbmRs
ZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCwgRXZlbnRJbnZva2VQaGFzZSBwaGFzZSkgY29uc3QK
IHsKICAgICBldmVudC5zZXRUYXJnZXQobV90YXJnZXQuZ2V0KCkpOwogICAgIGV2ZW50LnNldEN1
cnJlbnRUYXJnZXQobV9jdXJyZW50VGFyZ2V0LmdldCgpLCBtX2N1cnJlbnRUYXJnZXRJc0luU2hh
ZG93VHJlZSk7Ci0gICAgLy8gRklYTUU6IENvbnNpZGVyIG1lcmdpbmcgaGFuZGxlTG9jYWxFdmVu
dHMgYW5kIGZpcmVFdmVudExpc3RlbmVycy4KLSAgICBpZiAobV9ub2RlKQotICAgICAgICBtX25v
ZGUtPmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LCBwaGFzZSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2N1cnJlbnRUYXJnZXQtPmZpcmVFdmVudExpc3RlbmVycyhldmVudCwgcGhhc2UpOwotfQotCi1i
b29sIEV2ZW50Q29udGV4dDo6aXNNb3VzZU9yRm9jdXNFdmVudENvbnRleHQoKSBjb25zdAotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudENvbnRleHQ6OmlzVG91Y2hFdmVudENv
bnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotTW91c2VPckZvY3VzRXZl
bnRDb250ZXh0OjpNb3VzZU9yRm9jdXNFdmVudENvbnRleHQoTm9kZSYgbm9kZSwgRXZlbnRUYXJn
ZXQqIGN1cnJlbnRUYXJnZXQsIEV2ZW50VGFyZ2V0KiB0YXJnZXQsIGludCBjbG9zZWRTaGFkb3dE
ZXB0aCkKLSAgICA6IEV2ZW50Q29udGV4dCgmbm9kZSwgY3VycmVudFRhcmdldCwgdGFyZ2V0LCBj
bG9zZWRTaGFkb3dEZXB0aCkKLXsKLX0KLQotTW91c2VPckZvY3VzRXZlbnRDb250ZXh0Ojp+TW91
c2VPckZvY3VzRXZlbnRDb250ZXh0KCkgPSBkZWZhdWx0OwogCi12b2lkIE1vdXNlT3JGb2N1c0V2
ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmIGV2ZW50LCBFdmVudEludm9rZVBo
YXNlIHBoYXNlKSBjb25zdAotewotICAgIGlmIChtX3JlbGF0ZWRUYXJnZXQpCisgICAgaWYgKG1f
cmVsYXRlZFRhcmdldCkgeworICAgICAgICBBU1NFUlQobV90eXBlID09IFR5cGU6Ok1vdXNlT3JG
b2N1cyk7CiAgICAgICAgIGV2ZW50LnNldFJlbGF0ZWRUYXJnZXQobV9yZWxhdGVkVGFyZ2V0Lmdl
dCgpKTsKLSAgICBFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LCBwaGFzZSk7
Ci19Ci0KLWJvb2wgTW91c2VPckZvY3VzRXZlbnRDb250ZXh0Ojppc01vdXNlT3JGb2N1c0V2ZW50
Q29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgfQogCiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKKyAgICBpZiAobV90eXBlID09IFR5cGU6OlRvdWNoKSB7CiAKLVRv
dWNoRXZlbnRDb250ZXh0OjpUb3VjaEV2ZW50Q29udGV4dChOb2RlJiBub2RlLCBFdmVudFRhcmdl
dCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJnZXQqIHRhcmdldCwgaW50IGNsb3NlZFNoYWRvd0Rl
cHRoKQotICAgIDogRXZlbnRDb250ZXh0KCZub2RlLCBjdXJyZW50VGFyZ2V0LCB0YXJnZXQsIGNs
b3NlZFNoYWRvd0RlcHRoKQotICAgICwgbV90b3VjaGVzKFRvdWNoTGlzdDo6Y3JlYXRlKCkpCi0g
ICAgLCBtX3RhcmdldFRvdWNoZXMoVG91Y2hMaXN0OjpjcmVhdGUoKSkKLSAgICAsIG1fY2hhbmdl
ZFRvdWNoZXMoVG91Y2hMaXN0OjpjcmVhdGUoKSkKLXsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAg
ICAgICBhdXRvIGNoZWNrUmVhY2hhYmlsaXR5ID0gWyZdKGNvbnN0IFJlZjxUb3VjaExpc3Q+JiB0
b3VjaExpc3QpIHsKKyAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSB0b3VjaExpc3QtPmxlbmd0
aCgpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoIWlzVW5yZWFjaGFibGVOb2RlKGRvd25jYXN0PE5vZGU+KHRv
dWNoTGlzdC0+aXRlbShpKS0+dGFyZ2V0KCkpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tS
ZWFjaGFiaWxpdHkobV90b3VjaGVzKTsKKyAgICAgICAgY2hlY2tSZWFjaGFiaWxpdHkobV90YXJn
ZXRUb3VjaGVzKTsKKyAgICAgICAgY2hlY2tSZWFjaGFiaWxpdHkobV9jaGFuZ2VkVG91Y2hlcyk7
CisjZW5kaWYKKworICAgICAgICBhdXRvJiB0b3VjaEV2ZW50ID0gZG93bmNhc3Q8VG91Y2hFdmVu
dD4oZXZlbnQpOworICAgICAgICB0b3VjaEV2ZW50LnNldFRvdWNoZXMobV90b3VjaGVzLmdldCgp
KTsKKyAgICAgICAgdG91Y2hFdmVudC5zZXRUYXJnZXRUb3VjaGVzKG1fdGFyZ2V0VG91Y2hlcy5n
ZXQoKSk7CisgICAgICAgIHRvdWNoRXZlbnQuc2V0Q2hhbmdlZFRvdWNoZXMobV9jaGFuZ2VkVG91
Y2hlcy5nZXQoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoIW1fbm9kZSB8fCBVTkxJS0VM
WShtX3R5cGUgPT0gVHlwZTo6V2luZG93KSkgeworICAgICAgICBtX2N1cnJlbnRUYXJnZXQtPmZp
cmVFdmVudExpc3RlbmVycyhldmVudCwgcGhhc2UpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKFVOTElLRUxZKG1fY29udGV4dE5vZGVJc0Zvcm1FbGVtZW50KSkgeworICAgICAg
ICBBU1NFUlQoaXM8SFRNTEZvcm1FbGVtZW50PigqbV9ub2RlKSk7CisgICAgICAgIGlmICgoZXZl
bnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudCB8fCBldmVudC50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLnJlc2V0RXZlbnQpCisgICAgICAgICAgICAmJiBldmVudC5ldmVudFBoYXNl
KCkgIT0gRXZlbnQ6OkNBUFRVUklOR19QSEFTRSAmJiBldmVudC50YXJnZXQoKSAhPSBtX25vZGUg
JiYgaXM8Tm9kZT4oZXZlbnQudGFyZ2V0KCkpKSB7CisgICAgICAgICAgICBldmVudC5zdG9wUHJv
cGFnYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmICghbV9ub2RlLT5oYXNFdmVudFRhcmdldERhdGEoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gRklYTUU6IFNob3VsZCB3ZSBkZWxpdmVyIHdoZWVsIGV2ZW50cyB0byBkaXNhYmxlZCBm
b3JtIGNvbnRyb2xzIG9yIG5vdD8KKyAgICBpZiAoZXZlbnQuaXNUcnVzdGVkKCkgJiYgaXM8RWxl
bWVudD4obV9ub2RlKSAmJiBkb3duY2FzdDxFbGVtZW50PigqbV9ub2RlKS5pc0Rpc2FibGVkRm9y
bUNvbnRyb2woKSAmJiBldmVudC5pc01vdXNlRXZlbnQoKSAmJiAhZXZlbnQuaXNXaGVlbEV2ZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbm9kZS0+ZmlyZUV2ZW50TGlzdGVuZXJzKGV2
ZW50LCBwaGFzZSk7CiB9CiAKLVRvdWNoRXZlbnRDb250ZXh0Ojp+VG91Y2hFdmVudENvbnRleHQo
KSA9IGRlZmF1bHQ7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIAotdm9pZCBUb3VjaEV2ZW50
Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmIGV2ZW50LCBFdmVudEludm9rZVBoYXNl
IHBoYXNlKSBjb25zdAordm9pZCBFdmVudENvbnRleHQ6OmluaXRpYWxpemVUb3VjaExpc3RzKCkK
IHsKLSAgICBjaGVja1JlYWNoYWJpbGl0eShtX3RvdWNoZXMpOwotICAgIGNoZWNrUmVhY2hhYmls
aXR5KG1fdGFyZ2V0VG91Y2hlcyk7Ci0gICAgY2hlY2tSZWFjaGFiaWxpdHkobV9jaGFuZ2VkVG91
Y2hlcyk7Ci0gICAgYXV0byYgdG91Y2hFdmVudCA9IGRvd25jYXN0PFRvdWNoRXZlbnQ+KGV2ZW50
KTsKLSAgICB0b3VjaEV2ZW50LnNldFRvdWNoZXMobV90b3VjaGVzLnB0cigpKTsKLSAgICB0b3Vj
aEV2ZW50LnNldFRhcmdldFRvdWNoZXMobV90YXJnZXRUb3VjaGVzLnB0cigpKTsKLSAgICB0b3Vj
aEV2ZW50LnNldENoYW5nZWRUb3VjaGVzKG1fY2hhbmdlZFRvdWNoZXMucHRyKCkpOwotICAgIEV2
ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMoZXZlbnQsIHBoYXNlKTsKKyAgICBtX3RvdWNo
ZXMgPSBUb3VjaExpc3Q6OmNyZWF0ZSgpOworICAgIG1fdGFyZ2V0VG91Y2hlcyA9IFRvdWNoTGlz
dDo6Y3JlYXRlKCk7CisgICAgbV9jaGFuZ2VkVG91Y2hlcyA9IFRvdWNoTGlzdDo6Y3JlYXRlKCk7
CiB9CiAKLWJvb2wgVG91Y2hFdmVudENvbnRleHQ6OmlzVG91Y2hFdmVudENvbnRleHQoKSBjb25z
dAotewotICAgIHJldHVybiB0cnVlOwotfQorI2VuZGlmIC8vIEVOQUJMRShUT1VDSF9FVkVOVFMp
CiAKICNpZiBBU1NFUlRfRU5BQkxFRAogCi12b2lkIFRvdWNoRXZlbnRDb250ZXh0OjpjaGVja1Jl
YWNoYWJpbGl0eShjb25zdCBSZWY8VG91Y2hMaXN0PiYgdG91Y2hMaXN0KSBjb25zdAorYm9vbCBF
dmVudENvbnRleHQ6OmlzVW5yZWFjaGFibGVOb2RlKEV2ZW50VGFyZ2V0KiB0YXJnZXQpIGNvbnN0
CiB7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHRvdWNoTGlzdC0+bGVuZ3RoKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgQVNTRVJUKCFpc1VucmVhY2hh
YmxlTm9kZShkb3duY2FzdDxOb2RlPih0b3VjaExpc3QtPml0ZW0oaSktPnRhcmdldCgpKSkpOwor
ICAgIC8vIEZJWE1FOiBDaGVja3MgYWxzbyBmb3IgU1ZHIGVsZW1lbnRzLgorICAgIHJldHVybiBp
czxOb2RlPih0YXJnZXQpICYmICFkb3duY2FzdDxOb2RlPigqdGFyZ2V0KS5pc1NWR0VsZW1lbnQo
KSAmJiBtX25vZGUtPmlzQ2xvc2VkU2hhZG93SGlkZGVuKGRvd25jYXN0PE5vZGU+KCp0YXJnZXQp
KTsKIH0KIAotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECi0KLSNlbmRpZiAvLyBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQorI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaAppbmRleCA3
Y2ZmZThkNzRkMGE5ODUxZjBkZDVhMTQ2NzRkZjcwZTE0ZDIyMDc2Li5hNjQ1YjQ1ZDlmNzJhMjYy
ZDRlZjA5NWIyODk1ZmZkNDdhYmMyYzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oCkBA
IC0yNyw3ICsyNyw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiTm9kZS5oIgorI2lu
Y2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4
LDggKzM4LDE2IEBAIGNsYXNzIEV2ZW50Q29udGV4dCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgRXZl
bnRJbnZva2VQaGFzZSA9IEV2ZW50VGFyZ2V0OjpFdmVudEludm9rZVBoYXNlOwogCi0gICAgRXZl
bnRDb250ZXh0KE5vZGUqLCBFdmVudFRhcmdldCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJnZXQq
LCBpbnQgY2xvc2VkU2hhZG93RGVwdGgpOwotICAgIHZpcnR1YWwgfkV2ZW50Q29udGV4dCgpOwor
ICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBOb3JtYWwgPSAwLAorICAg
ICAgICBNb3VzZU9yRm9jdXMsCisgICAgICAgIFRvdWNoLAorICAgICAgICBXaW5kb3csCisgICAg
fTsKKworICAgIEV2ZW50Q29udGV4dChUeXBlLCBOb2RlKiwgRXZlbnRUYXJnZXQqIGN1cnJlbnRU
YXJnZXQsIEV2ZW50VGFyZ2V0KiBvcmlnaW4sIGludCBjbG9zZWRTaGFkb3dEZXB0aCk7CisgICAg
RXZlbnRDb250ZXh0KFR5cGUsIE5vZGUmLCBOb2RlKiBjdXJyZW50VGFyZ2V0LCBFdmVudFRhcmdl
dCogb3JpZ2luLCBpbnQgY2xvc2VkU2hhZG93RGVwdGgpOworICAgIH5FdmVudENvbnRleHQoKTsK
IAogICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KICAgICBF
dmVudFRhcmdldCogY3VycmVudFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRhcmdl
dC5nZXQoKTsgfQpAQCAtNDcsMTQgKzU1LDI3IEBAIHB1YmxpYzoKICAgICBFdmVudFRhcmdldCog
dGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KICAgICBpbnQgY2xvc2Vk
U2hhZG93RGVwdGgoKSBjb25zdCB7IHJldHVybiBtX2Nsb3NlZFNoYWRvd0RlcHRoOyB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmLCBFdmVudEludm9rZVBoYXNl
KSBjb25zdDsKKyAgICB2b2lkIGhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50JiwgRXZlbnRJbnZva2VQ
aGFzZSkgY29uc3Q7CisKKyAgICBib29sIGlzTW91c2VPckZvY3VzRXZlbnRDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6Ok1vdXNlT3JGb2N1czsgfQorICAgIGJvb2wgaXNU
b3VjaEV2ZW50Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpUb3VjaDsg
fQorICAgIGJvb2wgaXNXaW5kb3dDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5
cGU6OldpbmRvdzsgfQorCisgICAgTm9kZSogcmVsYXRlZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVsYXRlZFRhcmdldC5nZXQoKTsgfQorICAgIHZvaWQgc2V0UmVsYXRlZFRhcmdldChOb2Rl
Kik7CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGVudW0gVG91Y2hMaXN0VHlwZSB7
IFRvdWNoZXMsIFRhcmdldFRvdWNoZXMsIENoYW5nZWRUb3VjaGVzIH07CisgICAgVG91Y2hMaXN0
JiB0b3VjaExpc3QoVG91Y2hMaXN0VHlwZSk7CisjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBp
c01vdXNlT3JGb2N1c0V2ZW50Q29udGV4dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1Rv
dWNoRXZlbnRDb250ZXh0KCkgY29uc3Q7Citwcml2YXRlOgorICAgIGlubGluZSBFdmVudENvbnRl
eHQoVHlwZSwgTm9kZSogY3VycmVudE5vZGUsIFJlZlB0cjxFdmVudFRhcmdldD4mJiBjdXJyZW50
VGFyZ2V0LCBFdmVudFRhcmdldCogb3JpZ2luLCBpbnQgY2xvc2VkU2hhZG93RGVwdGgsIGJvb2wg
Y3VycmVudFRhcmdldElzSW5TaGFkb3dUcmVlID0gZmFsc2UpOwogCi0gICAgdmlydHVhbCBOb2Rl
KiByZWxhdGVkVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCisgICAgdm9pZCBpbml0aWFsaXplVG91Y2hMaXN0cygpOworI2VuZGlmCiAK
LXByb3RlY3RlZDoKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGJvb2wgaXNVbnJlYWNoYWJsZU5v
ZGUoRXZlbnRUYXJnZXQqKSBjb25zdDsKICNlbmRpZgpAQCAtNjIsNTkgKzgzLDQ5IEBAIHByb3Rl
Y3RlZDoKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwogICAgIFJlZlB0cjxFdmVudFRhcmdldD4g
bV9jdXJyZW50VGFyZ2V0OwogICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV90YXJnZXQ7CisgICAg
UmVmUHRyPE5vZGU+IG1fcmVsYXRlZFRhcmdldDsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQor
ICAgIFJlZlB0cjxUb3VjaExpc3Q+IG1fdG91Y2hlczsKKyAgICBSZWZQdHI8VG91Y2hMaXN0PiBt
X3RhcmdldFRvdWNoZXM7CisgICAgUmVmUHRyPFRvdWNoTGlzdD4gbV9jaGFuZ2VkVG91Y2hlczsK
KyNlbmRpZgogICAgIGludCBtX2Nsb3NlZFNoYWRvd0RlcHRoIHsgMCB9OwogICAgIGJvb2wgbV9j
dXJyZW50VGFyZ2V0SXNJblNoYWRvd1RyZWUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9jb250ZXh0
Tm9kZUlzRm9ybUVsZW1lbnQgeyBmYWxzZSB9OworICAgIFR5cGUgbV90eXBlIHsgVHlwZTo6Tm9y
bWFsIH07CiB9OwogCi1jbGFzcyBNb3VzZU9yRm9jdXNFdmVudENvbnRleHQgZmluYWwgOiBwdWJs
aWMgRXZlbnRDb250ZXh0IHsKLXB1YmxpYzoKLSAgICBNb3VzZU9yRm9jdXNFdmVudENvbnRleHQo
Tm9kZSYsIEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0LCBFdmVudFRhcmdldCosIGludCBjbG9z
ZWRTaGFkb3dEZXB0aCk7Ci0gICAgdmlydHVhbCB+TW91c2VPckZvY3VzRXZlbnRDb250ZXh0KCk7
Ci0KLSAgICBOb2RlKiByZWxhdGVkVGFyZ2V0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9yZWxh
dGVkVGFyZ2V0LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRSZWxhdGVkVGFyZ2V0KE5vZGUqKTsKLQot
cHJpdmF0ZToKLSAgICB2b2lkIGhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50JiwgRXZlbnRJbnZva2VQ
aGFzZSkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc01vdXNlT3JGb2N1c0V2ZW50Q29udGV4dCgp
IGNvbnN0IGZpbmFsOwotCi0gICAgUmVmUHRyPE5vZGU+IG1fcmVsYXRlZFRhcmdldDsKLX07Ci0K
K2lubGluZSBFdmVudENvbnRleHQ6OkV2ZW50Q29udGV4dChUeXBlIHR5cGUsIE5vZGUqIG5vZGUs
IFJlZlB0cjxFdmVudFRhcmdldD4mJiBjdXJyZW50VGFyZ2V0LCBFdmVudFRhcmdldCogb3JpZ2lu
LCBpbnQgY2xvc2VkU2hhZG93RGVwdGgsIGJvb2wgY3VycmVudFRhcmdldElzSW5TaGFkb3dUcmVl
KQorICAgIDogbV9ub2RlIHsgbm9kZSB9CisgICAgLCBtX2N1cnJlbnRUYXJnZXQgeyBXVEZNb3Zl
KGN1cnJlbnRUYXJnZXQpIH0KKyAgICAsIG1fdGFyZ2V0IHsgb3JpZ2luIH0KKyAgICAsIG1fY2xv
c2VkU2hhZG93RGVwdGggeyBjbG9zZWRTaGFkb3dEZXB0aCB9CisgICAgLCBtX2N1cnJlbnRUYXJn
ZXRJc0luU2hhZG93VHJlZSB7IGN1cnJlbnRUYXJnZXRJc0luU2hhZG93VHJlZSB9CisgICAgLCBt
X3R5cGUodHlwZSkKK3sKKyAgICBBU1NFUlQoIWlzVW5yZWFjaGFibGVOb2RlKG1fdGFyZ2V0Lmdl
dCgpKSk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBpZiAobV90eXBlID09IFR5cGU6
OlRvdWNoKQorICAgICAgICBpbml0aWFsaXplVG91Y2hMaXN0cygpOworI2Vsc2UKKyAgICBBU1NF
UlQobV90eXBlICE9IFR5cGU6OlRvdWNoKTsKKyNlbmRpZgorfQogCi1jbGFzcyBUb3VjaEV2ZW50
Q29udGV4dCBmaW5hbCA6IHB1YmxpYyBFdmVudENvbnRleHQgewotcHVibGljOgotICAgIFRvdWNo
RXZlbnRDb250ZXh0KE5vZGUmLCBFdmVudFRhcmdldCogY3VycmVudFRhcmdldCwgRXZlbnRUYXJn
ZXQqLCBpbnQgY2xvc2VkU2hhZG93RGVwdGgpOwotICAgIHZpcnR1YWwgflRvdWNoRXZlbnRDb250
ZXh0KCk7Ci0KLSAgICBlbnVtIFRvdWNoTGlzdFR5cGUgeyBUb3VjaGVzLCBUYXJnZXRUb3VjaGVz
LCBDaGFuZ2VkVG91Y2hlcyB9OwotICAgIFRvdWNoTGlzdCYgdG91Y2hMaXN0KFRvdWNoTGlzdFR5
cGUpOwotCi1wcml2YXRlOgotICAgIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQmLCBFdmVu
dEludm9rZVBoYXNlKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzVG91Y2hFdmVudENvbnRleHQo
KSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgY2hlY2tSZWFjaGFiaWxpdHkoY29uc3QgUmVmPFRv
dWNoTGlzdD4mKSBjb25zdDsKLQotICAgIFJlZjxUb3VjaExpc3Q+IG1fdG91Y2hlczsKLSAgICBS
ZWY8VG91Y2hMaXN0PiBtX3RhcmdldFRvdWNoZXM7Ci0gICAgUmVmPFRvdWNoTGlzdD4gbV9jaGFu
Z2VkVG91Y2hlczsKLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotCi0jaWYg
QVNTRVJUX0VOQUJMRUQKLQotaW5saW5lIGJvb2wgRXZlbnRDb250ZXh0Ojppc1VucmVhY2hhYmxl
Tm9kZShFdmVudFRhcmdldCogdGFyZ2V0KSBjb25zdAoraW5saW5lIEV2ZW50Q29udGV4dDo6RXZl
bnRDb250ZXh0KFR5cGUgdHlwZSwgTm9kZSogbm9kZSwgRXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJn
ZXQsIEV2ZW50VGFyZ2V0KiBvcmlnaW4sIGludCBjbG9zZWRTaGFkb3dEZXB0aCkKKyAgICA6IEV2
ZW50Q29udGV4dCh0eXBlLCBub2RlLCBtYWtlUmVmUHRyKGN1cnJlbnRUYXJnZXQpLCBvcmlnaW4s
IGNsb3NlZFNoYWRvd0RlcHRoKQogewotICAgIC8vIEZJWE1FOiBDaGVja3MgYWxzbyBmb3IgU1ZH
IGVsZW1lbnRzLgotICAgIHJldHVybiBpczxOb2RlPih0YXJnZXQpICYmICFkb3duY2FzdDxOb2Rl
PigqdGFyZ2V0KS5pc1NWR0VsZW1lbnQoKSAmJiBtX25vZGUtPmlzQ2xvc2VkU2hhZG93SGlkZGVu
KGRvd25jYXN0PE5vZGU+KCp0YXJnZXQpKTsKKyAgICBBU1NFUlQoIWlzPE5vZGU+KGN1cnJlbnRU
YXJnZXQpKTsKIH0KIAotI2VuZGlmCisvLyBUaGlzIHZhcmlhbnQgYXZvaWRzIGNhbGxpbmcgRXZl
bnRUYXJnZXQ6OnJlZigpIHdoaWNoIGlzIGEgdmlydHVhbCBmdW5jdGlvbiBjYWxsLgoraW5saW5l
IEV2ZW50Q29udGV4dDo6RXZlbnRDb250ZXh0KFR5cGUgdHlwZSwgTm9kZSYgbm9kZSwgTm9kZSog
Y3VycmVudFRhcmdldCwgRXZlbnRUYXJnZXQqIG9yaWdpbiwgaW50IGNsb3NlZFNoYWRvd0RlcHRo
KQorICAgIDogRXZlbnRDb250ZXh0KHR5cGUsICZub2RlLCBtYWtlUmVmUHRyKGN1cnJlbnRUYXJn
ZXQpLCBvcmlnaW4sIGNsb3NlZFNoYWRvd0RlcHRoLCBjdXJyZW50VGFyZ2V0ICYmIGN1cnJlbnRU
YXJnZXQtPmlzSW5TaGFkb3dUcmVlKCkpCit7CisgICAgbV9jb250ZXh0Tm9kZUlzRm9ybUVsZW1l
bnQgPSBpczxIVE1MRm9ybUVsZW1lbnQ+KG5vZGUpOworfQogCi1pbmxpbmUgdm9pZCBNb3VzZU9y
Rm9jdXNFdmVudENvbnRleHQ6OnNldFJlbGF0ZWRUYXJnZXQoTm9kZSogcmVsYXRlZFRhcmdldCkK
K2lubGluZSB2b2lkIEV2ZW50Q29udGV4dDo6c2V0UmVsYXRlZFRhcmdldChOb2RlKiByZWxhdGVk
VGFyZ2V0KQogewogICAgIEFTU0VSVCghaXNVbnJlYWNoYWJsZU5vZGUocmVsYXRlZFRhcmdldCkp
OwogICAgIG1fcmVsYXRlZFRhcmdldCA9IHJlbGF0ZWRUYXJnZXQ7CkBAIC0xMjIsMzggKzEzMywy
MCBAQCBpbmxpbmUgdm9pZCBNb3VzZU9yRm9jdXNFdmVudENvbnRleHQ6OnNldFJlbGF0ZWRUYXJn
ZXQoTm9kZSogcmVsYXRlZFRhcmdldCkKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAKLWlu
bGluZSBUb3VjaExpc3QmIFRvdWNoRXZlbnRDb250ZXh0Ojp0b3VjaExpc3QoVG91Y2hMaXN0VHlw
ZSB0eXBlKQoraW5saW5lIFRvdWNoTGlzdCYgRXZlbnRDb250ZXh0Ojp0b3VjaExpc3QoVG91Y2hM
aXN0VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgVG91Y2hlczoK
LSAgICAgICAgcmV0dXJuIG1fdG91Y2hlcy5nZXQoKTsKKyAgICAgICAgcmV0dXJuICptX3RvdWNo
ZXM7CiAgICAgY2FzZSBUYXJnZXRUb3VjaGVzOgotICAgICAgICByZXR1cm4gbV90YXJnZXRUb3Vj
aGVzLmdldCgpOworICAgICAgICByZXR1cm4gKm1fdGFyZ2V0VG91Y2hlczsKICAgICBjYXNlIENo
YW5nZWRUb3VjaGVzOgotICAgICAgICByZXR1cm4gbV9jaGFuZ2VkVG91Y2hlcy5nZXQoKTsKKyAg
ICAgICAgcmV0dXJuICptX2NoYW5nZWRUb3VjaGVzOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gbV90b3VjaGVzLmdldCgpOwotfQotCi0jZW5kaWYKLQotI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpICYmICFBU1NFUlRfRU5BQkxFRAotCi1pbmxpbmUgdm9pZCBU
b3VjaEV2ZW50Q29udGV4dDo6Y2hlY2tSZWFjaGFiaWxpdHkoY29uc3QgUmVmPFRvdWNoTGlzdD4m
KSBjb25zdAoteworICAgIHJldHVybiAqbV90b3VjaGVzOwogfQogCiAjZW5kaWYKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
Ok1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dCkKLXN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpFdmVudENvbnRleHQmIGNvbnRleHQpIHsgcmV0dXJuIGNvbnRleHQuaXNNb3VzZU9yRm9j
dXNFdmVudENvbnRleHQoKTsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotCi0jaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29y
ZTo6VG91Y2hFdmVudENvbnRleHQpCi1zdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6
RXZlbnRDb250ZXh0JiBjb250ZXh0KSB7IHJldHVybiBjb250ZXh0LmlzVG91Y2hFdmVudENvbnRl
eHQoKTsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IDliMWE3OGI5MTg3NDI5MzRhYzMwZjgyNTU4
YzJmYmFhYTZiMDA4ZDYuLmM4YTYzZDM3OTZhZDU4ZjBiY2Q2ODdkYzA2ZTY4MDM3Yjg2MDE1OWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0yMzAsOSArMjMwLDQg
QEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoY29uc3QgVmVjdG9yPEV2ZW50
VGFyZ2V0Kj4mIHRhcmdldHMsIEV2ZW50JgogICAgIGRpc3BhdGNoRXZlbnRXaXRoVHlwZTxFdmVu
dFRhcmdldD4odGFyZ2V0cywgZXZlbnQpOwogfQogCi12b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hFdmVudChjb25zdCBWZWN0b3I8RWxlbWVudCo+JiB0YXJnZXRzLCBFdmVudCYgZXZlbnQp
Ci17Ci0gICAgZGlzcGF0Y2hFdmVudFdpdGhUeXBlPEVsZW1lbnQ+KHRhcmdldHMsIGV2ZW50KTsK
LX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDhiYmJhODRkNjg5
ZGUxZWIzZmU2NmU2YTQ4MTY5ZjBmNWI3ODRhYjAuLjExNzcxMzcyNTRlODNiZjE1NzdlZTNkODZk
ZTYxNWZlZTM3YzgyMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3Bh
dGNoZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAgLTMz
LDcgKzMzLDYgQEAgbmFtZXNwYWNlIEV2ZW50RGlzcGF0Y2hlciB7CiAKIHZvaWQgZGlzcGF0Y2hF
dmVudChOb2RlJiwgRXZlbnQmKTsKIHZvaWQgZGlzcGF0Y2hFdmVudChjb25zdCBWZWN0b3I8RXZl
bnRUYXJnZXQqPiYsIEV2ZW50Jik7Ci12b2lkIGRpc3BhdGNoRXZlbnQoY29uc3QgVmVjdG9yPEVs
ZW1lbnQqPiYsIEV2ZW50Jik7CiAKIHZvaWQgZGlzcGF0Y2hTY29wZWRFdmVudChOb2RlJiwgRXZl
bnQmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRoLmNwcAppbmRleCA3OTUxYjdiNzhiN2Q1NGU3NmU4
MzMzZjQwODY0ODUzNDM1OTlmZjIwLi45ZmRlOWY3ZjE0YjVlYTQzYWZmMjYyM2ViNDZjMzkwZGMy
MTIxODNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRoLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRoLmNwcApAQCAtMzUsMjUgKzM1LDYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXaW5kb3dFdmVudENvbnRleHQgZmluYWwgOiBw
dWJsaWMgRXZlbnRDb250ZXh0IHsKLXB1YmxpYzoKLSAgICBXaW5kb3dFdmVudENvbnRleHQoTm9k
ZSYsIERPTVdpbmRvdyYsIEV2ZW50VGFyZ2V0JiwgaW50IGNsb3NlZFNoYWRvd0RlcHRoKTsKLXBy
aXZhdGU6Ci0gICAgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCYsIEV2ZW50SW52b2tlUGhh
c2UpIGNvbnN0IGZpbmFsOwotfTsKLQotaW5saW5lIFdpbmRvd0V2ZW50Q29udGV4dDo6V2luZG93
RXZlbnRDb250ZXh0KE5vZGUmIG5vZGUsIERPTVdpbmRvdyYgY3VycmVudFRhcmdldCwgRXZlbnRU
YXJnZXQmIHRhcmdldCwgaW50IGNsb3NlZFNoYWRvd0RlcHRoKQotICAgIDogRXZlbnRDb250ZXh0
KCZub2RlLCAmY3VycmVudFRhcmdldCwgJnRhcmdldCwgY2xvc2VkU2hhZG93RGVwdGgpCi17Ci19
Ci0KLXZvaWQgV2luZG93RXZlbnRDb250ZXh0OjpoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCYgZXZl
bnQsIEV2ZW50SW52b2tlUGhhc2UgcGhhc2UpIGNvbnN0Ci17Ci0gICAgZXZlbnQuc2V0VGFyZ2V0
KG1fdGFyZ2V0LmdldCgpKTsKLSAgICBldmVudC5zZXRDdXJyZW50VGFyZ2V0KG1fY3VycmVudFRh
cmdldC5nZXQoKSwgbV9jdXJyZW50VGFyZ2V0SXNJblNoYWRvd1RyZWUpOwotICAgIG1fY3VycmVu
dFRhcmdldC0+ZmlyZUV2ZW50TGlzdGVuZXJzKGV2ZW50LCBwaGFzZSk7Ci19Ci0KIHN0YXRpYyBp
bmxpbmUgYm9vbCBzaG91bGRFdmVudENyb3NzU2hhZG93Qm91bmRhcnkoRXZlbnQmIGV2ZW50LCBT
aGFkb3dSb290JiBzaGFkb3dSb290LCBFdmVudFRhcmdldCYgdGFyZ2V0KQogewogI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFKFZJREVPKQpAQCAtMTAyLDggKzgzLDggQEAgRXZl
bnRQYXRoOjpFdmVudFBhdGgoTm9kZSYgb3JpZ2luYWxUYXJnZXQsIEV2ZW50JiBldmVudCkKIHsK
ICAgICBidWlsZFBhdGgob3JpZ2luYWxUYXJnZXQsIGV2ZW50KTsKIAotICAgIGlmIChhdXRvKiBy
ZWxhdGVkVGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldCgpKQotICAgICAgICBzZXRSZWxhdGVk
VGFyZ2V0KG9yaWdpbmFsVGFyZ2V0LCAqcmVsYXRlZFRhcmdldCk7CisgICAgaWYgKGF1dG8qIHJl
bGF0ZWRUYXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0KCk7IGlzPE5vZGU+KHJlbGF0ZWRUYXJn
ZXQpICYmICFtX3BhdGguaXNFbXB0eSgpKQorICAgICAgICBzZXRSZWxhdGVkVGFyZ2V0KG9yaWdp
bmFsVGFyZ2V0LCBkb3duY2FzdDxOb2RlPigqcmVsYXRlZFRhcmdldCkpOwogCiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKICAgICBpZiAoaXM8VG91Y2hFdmVudD4oZXZlbnQpKQpAQCAtMTEzLDIy
ICs5NCwxNSBAQCBFdmVudFBhdGg6OkV2ZW50UGF0aChOb2RlJiBvcmlnaW5hbFRhcmdldCwgRXZl
bnQmIGV2ZW50KQogCiB2b2lkIEV2ZW50UGF0aDo6YnVpbGRQYXRoKE5vZGUmIG9yaWdpbmFsVGFy
Z2V0LCBFdmVudCYgZXZlbnQpCiB7Ci0gICAgdXNpbmcgTWFrZUV2ZW50Q29udGV4dCA9IHN0ZDo6
dW5pcXVlX3B0cjxFdmVudENvbnRleHQ+ICgqKShOb2RlJiwgRXZlbnRUYXJnZXQqLCBFdmVudFRh
cmdldCosIGludCBjbG9zZWRTaGFkb3dEZXB0aCk7Ci0gICAgTWFrZUV2ZW50Q29udGV4dCBtYWtl
RXZlbnRDb250ZXh0ID0gW10gKE5vZGUmIG5vZGUsIEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0
LCBFdmVudFRhcmdldCogdGFyZ2V0LCBpbnQgY2xvc2VkU2hhZG93RGVwdGgpIHsKLSAgICAgICAg
cmV0dXJuIG1ha2VVbmlxdWU8RXZlbnRDb250ZXh0Pigmbm9kZSwgY3VycmVudFRhcmdldCwgdGFy
Z2V0LCBjbG9zZWRTaGFkb3dEZXB0aCk7Ci0gICAgfTsKLSAgICBpZiAoaXM8TW91c2VFdmVudD4o
ZXZlbnQpIHx8IGV2ZW50LmlzRm9jdXNFdmVudCgpKSB7Ci0gICAgICAgIG1ha2VFdmVudENvbnRl
eHQgPSBbXSAoTm9kZSYgbm9kZSwgRXZlbnRUYXJnZXQqIGN1cnJlbnRUYXJnZXQsIEV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGludCBjbG9zZWRTaGFkb3dEZXB0aCkgLT4gc3RkOjp1bmlxdWVfcHRyPEV2
ZW50Q29udGV4dD4gewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8TW91c2VPckZvY3Vz
RXZlbnRDb250ZXh0Pihub2RlLCBjdXJyZW50VGFyZ2V0LCB0YXJnZXQsIGNsb3NlZFNoYWRvd0Rl
cHRoKTsKLSAgICAgICAgfTsKLSAgICB9CisgICAgRXZlbnRDb250ZXh0OjpUeXBlIGNvbnRleHRU
eXBlID0gWyZdKCkgeworICAgICAgICBpZiAoaXM8TW91c2VFdmVudD4oZXZlbnQpIHx8IGV2ZW50
LmlzRm9jdXNFdmVudCgpKQorICAgICAgICAgICAgcmV0dXJuIEV2ZW50Q29udGV4dDo6VHlwZTo6
TW91c2VPckZvY3VzOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgaWYgKGlzPFRvdWNo
RXZlbnQ+KGV2ZW50KSkgewotICAgICAgICBtYWtlRXZlbnRDb250ZXh0ID0gW10gKE5vZGUmIG5v
ZGUsIEV2ZW50VGFyZ2V0KiBjdXJyZW50VGFyZ2V0LCBFdmVudFRhcmdldCogdGFyZ2V0LCBpbnQg
Y2xvc2VkU2hhZG93RGVwdGgpIC0+IHN0ZDo6dW5pcXVlX3B0cjxFdmVudENvbnRleHQ+IHsKLSAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFRvdWNoRXZlbnRDb250ZXh0Pihub2RlLCBjdXJy
ZW50VGFyZ2V0LCB0YXJnZXQsIGNsb3NlZFNoYWRvd0RlcHRoKTsKLSAgICAgICAgfTsKLSAgICB9
CisgICAgICAgIGlmIChpczxUb3VjaEV2ZW50PihldmVudCkpCisgICAgICAgICAgICByZXR1cm4g
RXZlbnRDb250ZXh0OjpUeXBlOjpUb3VjaDsKICNlbmRpZgorICAgICAgICByZXR1cm4gRXZlbnRD
b250ZXh0OjpUeXBlOjpOb3JtYWw7CisgICAgfSgpOwogCiAgICAgTm9kZSogbm9kZSA9IG5vZGVP
ckhvc3RJZlBzZXVkb0VsZW1lbnQoJm9yaWdpbmFsVGFyZ2V0KTsKICAgICBOb2RlKiB0YXJnZXQg
PSBub2RlID8gZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoKm5vZGUpIDogbnVsbHB0
cjsKQEAgLTEzNyw3ICsxMTEsNyBAQCB2b2lkIEV2ZW50UGF0aDo6YnVpbGRQYXRoKE5vZGUmIG9y
aWdpbmFsVGFyZ2V0LCBFdmVudCYgZXZlbnQpCiAgICAgLy8gVGhleSBjb3VsZCBiZSBuZWdhdGl2
ZSBmb3Igbm9kZXMgb3V0c2lkZSB0aGUgc2hhZG93IHRyZWUgb2YgdGhlIHRhcmdldCBub2RlLgog
ICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgICAgICBt
X3BhdGguYXBwZW5kKG1ha2VFdmVudENvbnRleHQoKm5vZGUsIGV2ZW50VGFyZ2V0UmVzcGVjdGlu
Z1RhcmdldFJ1bGVzKCpub2RlKSwgdGFyZ2V0LCBjbG9zZWRTaGFkb3dEZXB0aCkpOworICAgICAg
ICAgICAgbV9wYXRoLmFwcGVuZChFdmVudENvbnRleHQgeyBjb250ZXh0VHlwZSwgKm5vZGUsIGV2
ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKCpub2RlKSwgdGFyZ2V0LCBjbG9zZWRTaGFk
b3dEZXB0aCB9KTsKIAogICAgICAgICAgICAgaWYgKGlzPFNoYWRvd1Jvb3Q+KCpub2RlKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTE0OSwxNCArMTIzLDEzIEBAIHZvaWQgRXZlbnRQYXRo
OjpidWlsZFBhdGgoTm9kZSYgb3JpZ2luYWxUYXJnZXQsIEV2ZW50JiBldmVudCkKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHRhcmdldCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJn
ZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiB3aW5kb3cgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKm5vZGUpLmRvbVdpbmRvdygpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcGF0aC5hcHBlbmQobWFrZVVuaXF1ZTxXaW5kb3dFdmVudENvbnRleHQ+KCpub2RlLCAq
d2luZG93LCAqdGFyZ2V0LCBjbG9zZWRTaGFkb3dEZXB0aCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fcGF0aC5hcHBlbmQoRXZlbnRDb250ZXh0IHsgRXZlbnRDb250ZXh0OjpUeXBl
OjpXaW5kb3csIG5vZGUsIHdpbmRvdywgdGFyZ2V0LCBjbG9zZWRTaGFkb3dEZXB0aCB9KTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGF1dG8qIHNoYWRvd1Jvb3RPZlBh
cmVudCA9IHBhcmVudC0+c2hhZG93Um9vdCgpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNo
YWRvd1Jvb3RPZlBhcmVudCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzaGFkb3dSb290T2ZQ
YXJlbnQgPSBwYXJlbnQtPnNoYWRvd1Jvb3QoKTsgVU5MSUtFTFkoc2hhZG93Um9vdE9mUGFyZW50
KSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvKiBhc3NpZ25lZFNsb3QgPSBzaGFkb3dSb290
T2ZQYXJlbnQtPmZpbmRBc3NpZ25lZFNsb3QoKm5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChzaGFkb3dSb290T2ZQYXJlbnQtPm1vZGUoKSAhPSBTaGFkb3dSb290TW9kZTo6T3BlbikK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlZFNoYWRvd0RlcHRoKys7CkBAIC0xNzksMjMg
KzE1MiwyMCBAQCB2b2lkIEV2ZW50UGF0aDo6YnVpbGRQYXRoKE5vZGUmIG9yaWdpbmFsVGFyZ2V0
LCBFdmVudCYgZXZlbnQpCiAgICAgfQogfQogCi12b2lkIEV2ZW50UGF0aDo6c2V0UmVsYXRlZFRh
cmdldChOb2RlJiBvcmlnaW4sIEV2ZW50VGFyZ2V0JiByZWxhdGVkVGFyZ2V0KQordm9pZCBFdmVu
dFBhdGg6OnNldFJlbGF0ZWRUYXJnZXQoTm9kZSYgb3JpZ2luLCBOb2RlJiByZWxhdGVkTm9kZSkK
IHsKLSAgICBpZiAoIWlzPE5vZGU+KHJlbGF0ZWRUYXJnZXQpIHx8IG1fcGF0aC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHJlbGF0ZWROb2RlID0gZG93bmNhc3Q8Tm9k
ZT4ocmVsYXRlZFRhcmdldCk7Ci0gICAgUmVsYXRlZE5vZGVSZXRhcmdldGVyIHJldGFyZ2V0ZXIo
cmVsYXRlZE5vZGUsICptX3BhdGhbMF0tPm5vZGUoKSk7CisgICAgUmVsYXRlZE5vZGVSZXRhcmdl
dGVyIHJldGFyZ2V0ZXIocmVsYXRlZE5vZGUsICptX3BhdGhbMF0ubm9kZSgpKTsKIAogICAgIGJv
b2wgb3JpZ2luSXNSZWxhdGVkVGFyZ2V0ID0gJm9yaWdpbiA9PSAmcmVsYXRlZE5vZGU7CiAgICAg
Tm9kZSYgcm9vdE5vZGVJbk9yaWdpblRyZWVTY29wZSA9IG9yaWdpbi50cmVlU2NvcGUoKS5yb290
Tm9kZSgpOwogICAgIFRyZWVTY29wZSogcHJldmlvdXNUcmVlU2NvcGUgPSBudWxscHRyOwogICAg
IHNpemVfdCBvcmlnaW5hbEV2ZW50UGF0aFNpemUgPSBtX3BhdGguc2l6ZSgpOwogICAgIGZvciAo
dW5zaWduZWQgY29udGV4dEluZGV4ID0gMDsgY29udGV4dEluZGV4IDwgb3JpZ2luYWxFdmVudFBh
dGhTaXplOyBjb250ZXh0SW5kZXgrKykgewotICAgICAgICBhdXRvJiBhbWJnaW91c0NvbnRleHQg
PSAqbV9wYXRoW2NvbnRleHRJbmRleF07Ci0gICAgICAgIGlmICghaXM8TW91c2VPckZvY3VzRXZl
bnRDb250ZXh0PihhbWJnaW91c0NvbnRleHQpKQorICAgICAgICBhdXRvJiBjb250ZXh0ID0gbV9w
YXRoW2NvbnRleHRJbmRleF07CisgICAgICAgIGlmICghY29udGV4dC5pc01vdXNlT3JGb2N1c0V2
ZW50Q29udGV4dCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoY29udGV4dC5pc1dpbmRvd0NvbnRl
eHQoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byYgY29udGV4dCA9IGRv
d25jYXN0PE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dD4oYW1iZ2lvdXNDb250ZXh0KTsKKyAgICAg
ICAgfQogCiAgICAgICAgIE5vZGUmIGN1cnJlbnRUYXJnZXQgPSAqY29udGV4dC5ub2RlKCk7CiAg
ICAgICAgIFRyZWVTY29wZSYgY3VycmVudFRyZWVTY29wZSA9IGN1cnJlbnRUYXJnZXQudHJlZVNj
b3BlKCk7CkBAIC0yMjEsMzAgKzE5MSwzMSBAQCB2b2lkIEV2ZW50UGF0aDo6c2V0UmVsYXRlZFRh
cmdldChOb2RlJiBvcmlnaW4sIEV2ZW50VGFyZ2V0JiByZWxhdGVkVGFyZ2V0KQogCiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKIAotdm9pZCBFdmVudFBhdGg6OnJldGFyZ2V0VG91Y2goVG91Y2hF
dmVudENvbnRleHQ6OlRvdWNoTGlzdFR5cGUgdHlwZSwgY29uc3QgVG91Y2gmIHRvdWNoKQordm9p
ZCBFdmVudFBhdGg6OnJldGFyZ2V0VG91Y2goRXZlbnRDb250ZXh0OjpUb3VjaExpc3RUeXBlIHR5
cGUsIGNvbnN0IFRvdWNoJiB0b3VjaCkKIHsKICAgICBhdXRvKiBldmVudFRhcmdldCA9IHRvdWNo
LnRhcmdldCgpOwogICAgIGlmICghaXM8Tm9kZT4oZXZlbnRUYXJnZXQpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBSZWxhdGVkTm9kZVJldGFyZ2V0ZXIgcmV0YXJnZXRlcihkb3duY2FzdDxOb2Rl
PigqZXZlbnRUYXJnZXQpLCAqbV9wYXRoWzBdLT5ub2RlKCkpOworICAgIFJlbGF0ZWROb2RlUmV0
YXJnZXRlciByZXRhcmdldGVyKGRvd25jYXN0PE5vZGU+KCpldmVudFRhcmdldCksICptX3BhdGhb
MF0ubm9kZSgpKTsKICAgICBUcmVlU2NvcGUqIHByZXZpb3VzVHJlZVNjb3BlID0gbnVsbHB0cjsK
ICAgICBmb3IgKGF1dG8mIGNvbnRleHQgOiBtX3BhdGgpIHsKLSAgICAgICAgTm9kZSYgY3VycmVu
dFRhcmdldCA9ICpjb250ZXh0LT5ub2RlKCk7CisgICAgICAgIE5vZGUmIGN1cnJlbnRUYXJnZXQg
PSAqY29udGV4dC5ub2RlKCk7CiAgICAgICAgIFRyZWVTY29wZSYgY3VycmVudFRyZWVTY29wZSA9
IGN1cnJlbnRUYXJnZXQudHJlZVNjb3BlKCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShwcmV2aW91
c1RyZWVTY29wZSAmJiAmY3VycmVudFRyZWVTY29wZSAhPSBwcmV2aW91c1RyZWVTY29wZSkpCiAg
ICAgICAgICAgICByZXRhcmdldGVyLm1vdmVUb05ld1RyZWVTY29wZShwcmV2aW91c1RyZWVTY29w
ZSwgY3VycmVudFRyZWVTY29wZSk7CiAKLSAgICAgICAgaWYgKGlzPFRvdWNoRXZlbnRDb250ZXh0
PigqY29udGV4dCkpIHsKKyAgICAgICAgaWYgKGNvbnRleHQuaXNUb3VjaEV2ZW50Q29udGV4dCgp
KSB7CiAgICAgICAgICAgICBOb2RlKiBjdXJyZW50UmVsYXRlZE5vZGUgPSByZXRhcmdldGVyLmN1
cnJlbnROb2RlKGN1cnJlbnRUYXJnZXQpOwotICAgICAgICAgICAgZG93bmNhc3Q8VG91Y2hFdmVu
dENvbnRleHQ+KCpjb250ZXh0KS50b3VjaExpc3QodHlwZSkuYXBwZW5kKHRvdWNoLmNsb25lV2l0
aE5ld1RhcmdldChjdXJyZW50UmVsYXRlZE5vZGUpKTsKLSAgICAgICAgfQorICAgICAgICAgICAg
Y29udGV4dC50b3VjaExpc3QodHlwZSkuYXBwZW5kKHRvdWNoLmNsb25lV2l0aE5ld1RhcmdldChj
dXJyZW50UmVsYXRlZE5vZGUpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlQo
Y29udGV4dC5pc1dpbmRvd0NvbnRleHQoKSk7CiAKICAgICAgICAgcHJldmlvdXNUcmVlU2NvcGUg
PSAmY3VycmVudFRyZWVTY29wZTsKICAgICB9CiB9CiAKLXZvaWQgRXZlbnRQYXRoOjpyZXRhcmdl
dFRvdWNoTGlzdChUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlwZSB0eXBlLCBjb25zdCBU
b3VjaExpc3QqIGxpc3QpCit2b2lkIEV2ZW50UGF0aDo6cmV0YXJnZXRUb3VjaExpc3QoRXZlbnRD
b250ZXh0OjpUb3VjaExpc3RUeXBlIHR5cGUsIGNvbnN0IFRvdWNoTGlzdCogbGlzdCkKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBsZW5ndGggPSBsaXN0ID8gbGlzdC0+bGVuZ3RoKCkgOiAw
OyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgIHJldGFyZ2V0VG91Y2godHlwZSwgKmxpc3QtPml0
ZW0oaSkpOwpAQCAtMjUyLDkgKzIyMyw5IEBAIHZvaWQgRXZlbnRQYXRoOjpyZXRhcmdldFRvdWNo
TGlzdChUb3VjaEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlwZSB0eXBlLCBjb25zdCBUCiAKIHZv
aWQgRXZlbnRQYXRoOjpyZXRhcmdldFRvdWNoTGlzdHMoY29uc3QgVG91Y2hFdmVudCYgZXZlbnQp
CiB7Ci0gICAgcmV0YXJnZXRUb3VjaExpc3QoVG91Y2hFdmVudENvbnRleHQ6OlRvdWNoZXMsIGV2
ZW50LnRvdWNoZXMoKSk7Ci0gICAgcmV0YXJnZXRUb3VjaExpc3QoVG91Y2hFdmVudENvbnRleHQ6
OlRhcmdldFRvdWNoZXMsIGV2ZW50LnRhcmdldFRvdWNoZXMoKSk7Ci0gICAgcmV0YXJnZXRUb3Vj
aExpc3QoVG91Y2hFdmVudENvbnRleHQ6OkNoYW5nZWRUb3VjaGVzLCBldmVudC5jaGFuZ2VkVG91
Y2hlcygpKTsKKyAgICByZXRhcmdldFRvdWNoTGlzdChFdmVudENvbnRleHQ6OlRvdWNoTGlzdFR5
cGU6OlRvdWNoZXMsIGV2ZW50LnRvdWNoZXMoKSk7CisgICAgcmV0YXJnZXRUb3VjaExpc3QoRXZl
bnRDb250ZXh0OjpUb3VjaExpc3RUeXBlOjpUYXJnZXRUb3VjaGVzLCBldmVudC50YXJnZXRUb3Vj
aGVzKCkpOworICAgIHJldGFyZ2V0VG91Y2hMaXN0KEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlw
ZTo6Q2hhbmdlZFRvdWNoZXMsIGV2ZW50LmNoYW5nZWRUb3VjaGVzKCkpOwogfQogCiAjZW5kaWYK
QEAgLTI3MSwxMCArMjQyLDEwIEBAIFZlY3RvcjxFdmVudFRhcmdldCo+IEV2ZW50UGF0aDo6Y29t
cHV0ZVBhdGhVbmNsb3NlZFRvVGFyZ2V0KGNvbnN0IEV2ZW50VGFyZ2V0JiB0CiAgICAgcGF0aC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdGhTaXplKTsKIAogICAgIGF1dG8gY3VycmVudFRhcmdl
dEluZGV4ID0gbV9wYXRoLmZpbmRNYXRjaGluZyhbJnRhcmdldF0gKGF1dG8mIGNvbnRleHQpIHsK
LSAgICAgICAgcmV0dXJuIGNvbnRleHQtPmN1cnJlbnRUYXJnZXQoKSA9PSAmdGFyZ2V0OworICAg
ICAgICByZXR1cm4gY29udGV4dC5jdXJyZW50VGFyZ2V0KCkgPT0gJnRhcmdldDsKICAgICB9KTsK
ICAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50VGFyZ2V0SW5kZXggIT0gbm90Rm91bmQpOwotICAg
IGF1dG8gY3VycmVudFRhcmdldERlcHRoID0gbV9wYXRoW2N1cnJlbnRUYXJnZXRJbmRleF0tPmNs
b3NlZFNoYWRvd0RlcHRoKCk7CisgICAgYXV0byBjdXJyZW50VGFyZ2V0RGVwdGggPSBtX3BhdGhb
Y3VycmVudFRhcmdldEluZGV4XS5jbG9zZWRTaGFkb3dEZXB0aCgpOwogCiAgICAgYXV0byBhcHBl
bmRUYXJnZXRXaXRoTGVzc2VyRGVwdGggPSBbJnBhdGhdIChjb25zdCBFdmVudENvbnRleHQmIGN1
cnJlbnRDb250ZXh0LCBpbnQmIGN1cnJlbnREZXB0aEFsbG93ZWQpIHsKICAgICAgICAgYXV0byBk
ZXB0aCA9IGN1cnJlbnRDb250ZXh0LmNsb3NlZFNoYWRvd0RlcHRoKCk7CkBAIC0yOTAsMjYgKzI2
MSwxNSBAQCBWZWN0b3I8RXZlbnRUYXJnZXQqPiBFdmVudFBhdGg6OmNvbXB1dGVQYXRoVW5jbG9z
ZWRUb1RhcmdldChjb25zdCBFdmVudFRhcmdldCYgdAogICAgIGF1dG8gY3VycmVudERlcHRoQWxs
b3dlZCA9IGN1cnJlbnRUYXJnZXREZXB0aDsKICAgICBhdXRvIGkgPSBjdXJyZW50VGFyZ2V0SW5k
ZXg7CiAgICAgZG8gewotICAgICAgICBhcHBlbmRUYXJnZXRXaXRoTGVzc2VyRGVwdGgoKm1fcGF0
aFtpXSwgY3VycmVudERlcHRoQWxsb3dlZCk7CisgICAgICAgIGFwcGVuZFRhcmdldFdpdGhMZXNz
ZXJEZXB0aChtX3BhdGhbaV0sIGN1cnJlbnREZXB0aEFsbG93ZWQpOwogICAgIH0gd2hpbGUgKGkt
LSk7CiAgICAgcGF0aC5yZXZlcnNlKCk7CiAKICAgICBjdXJyZW50RGVwdGhBbGxvd2VkID0gY3Vy
cmVudFRhcmdldERlcHRoOwogICAgIGZvciAoYXV0byBpID0gY3VycmVudFRhcmdldEluZGV4ICsg
MTsgaSA8IHBhdGhTaXplOyArK2kpCi0gICAgICAgIGFwcGVuZFRhcmdldFdpdGhMZXNzZXJEZXB0
aCgqbV9wYXRoW2ldLCBjdXJyZW50RGVwdGhBbGxvd2VkKTsKLSAgICAKLSAgICByZXR1cm4gcGF0
aDsKLX0KKyAgICAgICAgYXBwZW5kVGFyZ2V0V2l0aExlc3NlckRlcHRoKG1fcGF0aFtpXSwgY3Vy
cmVudERlcHRoQWxsb3dlZCk7CiAKLUV2ZW50UGF0aDo6RXZlbnRQYXRoKGNvbnN0IFZlY3RvcjxF
bGVtZW50Kj4mIHRhcmdldHMpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2VlbXMg
d3JvbmcuIFdoeSBhcmUgd2Ugbm90IGZpcmluZyBldmVudHMgaW4gdGhlIGNsb3NlZCBzaGFkb3cg
dHJlZXM/Ci0gICAgZm9yIChhdXRvKiB0YXJnZXQgOiB0YXJnZXRzKSB7Ci0gICAgICAgIEFTU0VS
VCh0YXJnZXQpOwotICAgICAgICBOb2RlKiBvcmlnaW4gPSAqdGFyZ2V0cy5iZWdpbigpOwotICAg
ICAgICBpZiAoIXRhcmdldC0+aXNDbG9zZWRTaGFkb3dIaWRkZW4oKm9yaWdpbikpCi0gICAgICAg
ICAgICBtX3BhdGguYXBwZW5kKG1ha2VVbmlxdWU8RXZlbnRDb250ZXh0Pih0YXJnZXQsIHRhcmdl
dCwgb3JpZ2luLCAwKSk7Ci0gICAgfQorICAgIHJldHVybiBwYXRoOwogfQogCiBFdmVudFBhdGg6
OkV2ZW50UGF0aChjb25zdCBWZWN0b3I8RXZlbnRUYXJnZXQqPiYgdGFyZ2V0cykKQEAgLTMxNyw3
ICsyNzcsNyBAQCBFdmVudFBhdGg6OkV2ZW50UGF0aChjb25zdCBWZWN0b3I8RXZlbnRUYXJnZXQq
PiYgdGFyZ2V0cykKICAgICBmb3IgKGF1dG8qIHRhcmdldCA6IHRhcmdldHMpIHsKICAgICAgICAg
QVNTRVJUKHRhcmdldCk7CiAgICAgICAgIEFTU0VSVCghaXM8Tm9kZT4odGFyZ2V0KSk7Ci0gICAg
ICAgIG1fcGF0aC5hcHBlbmQobWFrZVVuaXF1ZTxFdmVudENvbnRleHQ+KG51bGxwdHIsIHRhcmdl
dCwgKnRhcmdldHMuYmVnaW4oKSwgMCkpOworICAgICAgICBtX3BhdGguYXBwZW5kKEV2ZW50Q29u
dGV4dCB7IEV2ZW50Q29udGV4dDo6VHlwZTo6Tm9ybWFsLCBudWxscHRyLCB0YXJnZXQsICp0YXJn
ZXRzLmJlZ2luKCksIDAgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRoLmgKaW5kZXgg
Yjk0NTJmMzA1NjBlMDVlZDEyNDBlMzAyZmNjOWRlOWU1ZTY5YzUyZC4uNDFmMjRhMDM5Nzc2MDkw
NzZjNTQ1MGZiNDdhMThmNzI5N2JjMzk2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50UGF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguaApAQCAtMzUs
MTIgKzM1LDExIEBAIGNsYXNzIEV2ZW50UGF0aCB7CiBwdWJsaWM6CiAgICAgRXZlbnRQYXRoKE5v
ZGUmIG9yaWdpbiwgRXZlbnQmKTsKICAgICBleHBsaWNpdCBFdmVudFBhdGgoY29uc3QgVmVjdG9y
PEV2ZW50VGFyZ2V0Kj4mKTsKLSAgICBleHBsaWNpdCBFdmVudFBhdGgoY29uc3QgVmVjdG9yPEVs
ZW1lbnQqPiYpOwogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9wYXRoLmlz
RW1wdHkoKTsgfQogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoLnNpemUo
KTsgfQotICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgY29udGV4dEF0KHNpemVfdCBpKSBjb25zdCB7
IHJldHVybiAqbV9wYXRoW2ldOyB9Ci0gICAgRXZlbnRDb250ZXh0JiBjb250ZXh0QXQoc2l6ZV90
IGkpIHsgcmV0dXJuICptX3BhdGhbaV07IH0KKyAgICBjb25zdCBFdmVudENvbnRleHQmIGNvbnRl
eHRBdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9wYXRoW2ldOyB9CisgICAgRXZlbnRDb250
ZXh0JiBjb250ZXh0QXQoc2l6ZV90IGkpIHsgcmV0dXJuIG1fcGF0aFtpXTsgfQogCiAgICAgVmVj
dG9yPEV2ZW50VGFyZ2V0Kj4gY29tcHV0ZVBhdGhVbmNsb3NlZFRvVGFyZ2V0KGNvbnN0IEV2ZW50
VGFyZ2V0JikgY29uc3Q7CiAKQEAgLTQ4LDE1ICs0NywxNSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6
CiAgICAgdm9pZCBidWlsZFBhdGgoTm9kZSYgb3JpZ2luLCBFdmVudCYpOwotICAgIHZvaWQgc2V0
UmVsYXRlZFRhcmdldChOb2RlJiBvcmlnaW4sIEV2ZW50VGFyZ2V0Jik7CisgICAgdm9pZCBzZXRS
ZWxhdGVkVGFyZ2V0KE5vZGUmIG9yaWdpbiwgTm9kZSYpOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKLSAgICB2b2lkIHJldGFyZ2V0VG91Y2goVG91Y2hFdmVudENvbnRleHQ6OlRvdWNoTGlz
dFR5cGUsIGNvbnN0IFRvdWNoJik7Ci0gICAgdm9pZCByZXRhcmdldFRvdWNoTGlzdChUb3VjaEV2
ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlwZSwgY29uc3QgVG91Y2hMaXN0Kik7CisgICAgdm9pZCBy
ZXRhcmdldFRvdWNoKEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlwZSwgY29uc3QgVG91Y2gmKTsK
KyAgICB2b2lkIHJldGFyZ2V0VG91Y2hMaXN0KEV2ZW50Q29udGV4dDo6VG91Y2hMaXN0VHlwZSwg
Y29uc3QgVG91Y2hMaXN0Kik7CiAgICAgdm9pZCByZXRhcmdldFRvdWNoTGlzdHMoY29uc3QgVG91
Y2hFdmVudCYpOwogI2VuZGlmCiAKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV2ZW50Q29u
dGV4dD4sIDMyPiBtX3BhdGg7CisgICAgVmVjdG9yPEV2ZW50Q29udGV4dCwgMTY+IG1fcGF0aDsK
IH07CiAKIGlubGluZSBOb2RlKiBFdmVudFBhdGg6OmV2ZW50VGFyZ2V0UmVzcGVjdGluZ1Rhcmdl
dFJ1bGVzKE5vZGUmIHJlZmVyZW5jZU5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggMGEzODI3NTUy
MDY2YmI2NTY3MzhjMDU1OGY3OWE5MThhODIyMzU4NC4uYmYyZWQxYmQzOWE4YjlkY2I1M2RkN2My
MWNiNTUwNjM0MGVmZjM1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjM2NCwxOCArMjM2NCw2IEBA
IHZvaWQgTm9kZTo6bm90aWZ5TXV0YXRpb25PYnNlcnZlcnNOb2RlV2lsbERldGFjaCgpCiAgICAg
fQogfQogCi12b2lkIE5vZGU6OmhhbmRsZUxvY2FsRXZlbnRzKEV2ZW50JiBldmVudCwgRXZlbnRJ
bnZva2VQaGFzZSBwaGFzZSkKLXsKLSAgICBpZiAoIWhhc0V2ZW50VGFyZ2V0RGF0YSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGRlbGl2ZXIgd2hlZWwgZXZl
bnRzIHRvIGRpc2FibGVkIGZvcm0gY29udHJvbHMgb3Igbm90PwotICAgIGlmIChpczxFbGVtZW50
PigqdGhpcykgJiYgZG93bmNhc3Q8RWxlbWVudD4oKnRoaXMpLmlzRGlzYWJsZWRGb3JtQ29udHJv
bCgpICYmIGV2ZW50LmlzVHJ1c3RlZCgpICYmIGV2ZW50LmlzTW91c2VFdmVudCgpICYmICFldmVu
dC5pc1doZWVsRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmlyZUV2ZW50TGlzdGVu
ZXJzKGV2ZW50LCBwaGFzZSk7Ci19Ci0KIHZvaWQgTm9kZTo6ZGlzcGF0Y2hTY29wZWRFdmVudChF
dmVudCYgZXZlbnQpCiB7CiAgICAgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNjb3BlZEV2ZW50
KCp0aGlzLCBldmVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCAyZWNkMTVkNmQ5NGQ1YTk0YWY3NTlmYmQ1
NTc2NTI1N2FmNGQ2NmUxLi40Y2E5YjU4OGYyMGU5NGVmMzI1NGRjYTc4YWJmMmI5ZWU4MGJhMzk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgKQEAgLTQ1Miw4ICs0NTIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRp
c3BhdGNoU2NvcGVkRXZlbnQoRXZlbnQmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVMb2Nh
bEV2ZW50cyhFdmVudCYsIEV2ZW50SW52b2tlUGhhc2UpOwotCiAgICAgdm9pZCBkaXNwYXRjaFN1
YnRyZWVNb2RpZmllZEV2ZW50KCk7CiAgICAgdm9pZCBkaXNwYXRjaERPTUFjdGl2YXRlRXZlbnQo
RXZlbnQmIHVuZGVybHlpbmdDbGlja0V2ZW50KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUVsZW1lbnQuY3BwCmluZGV4IDlmOWVkZGZlYWE5ZjA1YjQ5YjAyNmE5ZmFhZTBkZGY3NWE4MjYw
YTcuLjEyZWFmNDM2MDdlZTM0M2JiNWJkN2Y4MGQ1ZjkyMzI5YmUyZmRiOTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTE0OSwxNSArMTQ5LDYgQEAgdm9pZCBI
VE1MRm9ybUVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5
cGUsIENvbnRhaW5lck5vZGUKICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21BbmNlc3Rvcihy
ZW1vdmFsVHlwZSwgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZSk7CiB9CiAKLXZvaWQgSFRNTEZvcm1F
bGVtZW50OjpoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCYgZXZlbnQsIEV2ZW50SW52b2tlUGhhc2Ug
cGhhc2UpCi17Ci0gICAgaWYgKGV2ZW50LmV2ZW50UGhhc2UoKSAhPSBFdmVudDo6Q0FQVFVSSU5H
X1BIQVNFICYmIGlzPE5vZGU+KGV2ZW50LnRhcmdldCgpKSAmJiBldmVudC50YXJnZXQoKSAhPSB0
aGlzICYmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50IHx8IGV2ZW50
LnR5cGUoKSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudCkpIHsKLSAgICAgICAgZXZlbnQuc3Rv
cFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgSFRNTEVsZW1lbnQ6
OmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LCBwaGFzZSk7Ci19Ci0KIHVuc2lnbmVkIEhUTUxGb3Jt
RWxlbWVudDo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKaW5kZXggODA3Mjg4ZjRhZDBiMjJjNjUwOWQ5
MDliM2RiMmU3MjUwOWE2NWJjYS4uODkzNmY3ODJkMWY3YjZmZTNlYTBlNzUxYjNiYWM2OTM5YTE0
ZDcyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCkBAIC0xMzEsOCArMTMx
LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUs
IENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbigp
IGZpbmFsOwogCi0gICAgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCYsIEV2ZW50SW52b2tl
UGhhc2UpIGZpbmFsOwotCiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIGZpbmFsOwogICAgIGJvb2wgaXNVUkxBdHRyaWJ1dGUo
Y29uc3QgQXR0cmlidXRlJikgY29uc3QgZmluYWw7CiAK
</data>
<flag name="review"
          id="440358"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>