<?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>208114</bug_id>
          
          <creation_ts>2020-02-23 14:55:18 -0800</creation_ts>
          <short_desc>Refactor TextTrackCue to use more traditional design patterns</short_desc>
          <delta_ts>2020-02-24 23:26:16 -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>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>dbates</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1622033</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-23 14:55:18 -0800</bug_when>
    <thetext>Refactor TextTrackCue to use more traditional design patterns</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622037</commentid>
    <comment_count>1</comment_count>
      <attachid>391503</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-23 16:00:57 -0800</bug_when>
    <thetext>Created attachment 391503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622493</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-24 22:10:15 -0800</bug_when>
    <thetext>Wow, tests are failing because the special value of &quot;-1&quot; to mean invalid is apparently web-facing behavior! Who would have thought? I guess I will revert that part of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622496</commentid>
    <comment_count>3</comment_count>
      <attachid>391624</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-24 22:19:19 -0800</bug_when>
    <thetext>Created attachment 391624
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622501</commentid>
    <comment_count>4</comment_count>
      <attachid>391624</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-02-24 22:25:25 -0800</bug_when>
    <thetext>Comment on attachment 391624
Patch

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

r=me, assuming this passes EWS.

&gt; Source/WebCore/html/track/TextTrackCueGeneric.cpp:159
&gt; +    return adoptRef(*new TextTrackCueGeneric(downcast&lt;Document&gt;(context), start, end, content));

How do we know this is a Document?

&gt; Source/WebCore/html/track/TextTrackCueGeneric.cpp:236
&gt; +            std::pair&lt;double, double&gt; thisPosition = getPositionCoordinates();
&gt; +            std::pair&lt;double, double&gt; thatPosition = downcast&lt;TextTrackCueGeneric&gt;(*that).getPositionCoordinates();

This looks like a good place for auto, FloatPoint, or structured bindings.

&gt; Source/WebCore/html/track/VTTCue.h:141
&gt;      enum WritingDirection {

It would be nice to make these enum classes, but that kind of thing can explode the patch.

&gt; Source/WebCore/html/track/VTTCue.h:149
&gt;      enum CueAlignment {

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622510</commentid>
    <comment_count>5</comment_count>
      <attachid>391624</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-24 22:55:05 -0800</bug_when>
    <thetext>Comment on attachment 391624
Patch

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

&gt;&gt; Source/WebCore/html/track/TextTrackCueGeneric.cpp:159
&gt;&gt; +    return adoptRef(*new TextTrackCueGeneric(downcast&lt;Document&gt;(context), start, end, content));
&gt; 
&gt; How do we know this is a Document?

The practical answer to this is that this is derived from TextTrackCue, and the TextTrackCue constructor has this line of code in it:

    ASSERT(m_scriptExecutionContext.isDocument());

The more abstract answer is that these classes can only be used inside documents, not in workers, and ideally our DOM bindings would know that and pass a Document rather than a ScriptExecutionContext to all the create functions and such. Really all this ScriptExecutionContext when we know this is a Document is messy and worth cleaning up. Among other things the type name &quot;Document&quot; is much, much shorter.

&gt;&gt; Source/WebCore/html/track/TextTrackCueGeneric.cpp:236
&gt;&gt; +            std::pair&lt;double, double&gt; thatPosition = downcast&lt;TextTrackCueGeneric&gt;(*that).getPositionCoordinates();
&gt; 
&gt; This looks like a good place for auto, FloatPoint, or structured bindings.

Not the kind of thing I was tempted to touch. Of those three, I think I’d go for auto, though. Related: too bad that the line below is not *quite* std::pair&apos;s &gt; or &lt; operator; it’s a mix of both.

&gt;&gt; Source/WebCore/html/track/VTTCue.h:141
&gt;&gt;      enum WritingDirection {
&gt; 
&gt; It would be nice to make these enum classes, but that kind of thing can explode the patch.

Agreed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622511</commentid>
    <comment_count>6</comment_count>
      <attachid>391624</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-24 22:57:26 -0800</bug_when>
    <thetext>Comment on attachment 391624
Patch

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

&gt;&gt;&gt; Source/WebCore/html/track/TextTrackCueGeneric.cpp:159
&gt;&gt;&gt; +    return adoptRef(*new TextTrackCueGeneric(downcast&lt;Document&gt;(context), start, end, content));
&gt;&gt; 
&gt;&gt; How do we know this is a Document?
&gt; 
&gt; The practical answer to this is that this is derived from TextTrackCue, and the TextTrackCue constructor has this line of code in it:
&gt; 
&gt;     ASSERT(m_scriptExecutionContext.isDocument());
&gt; 
&gt; The more abstract answer is that these classes can only be used inside documents, not in workers, and ideally our DOM bindings would know that and pass a Document rather than a ScriptExecutionContext to all the create functions and such. Really all this ScriptExecutionContext when we know this is a Document is messy and worth cleaning up. Among other things the type name &quot;Document&quot; is much, much shorter.

Looks like I can change ConstructorCallWith=ScriptExecutionContext to ConstructorCallWith=Document and fix part of the messiness that way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622515</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-24 23:25:20 -0800</bug_when>
    <thetext>Committed r257296: &lt;https://trac.webkit.org/changeset/257296&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622516</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-24 23:26:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/59756108&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391503</attachid>
            <date>2020-02-23 16:00:57 -0800</date>
            <delta_ts>2020-02-24 22:19:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208114-20200223160056.patch</filename>
            <type>text/plain</type>
            <size>67225</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmNmYmQzM2Q4NWUzMjM4
MGVkNmEyMGMxNjA1MzY5ZTFlMzczOTNhYS4uZDM5MGM1NTJiNzE4MjI2MzkzZWZiMGFkN2Y0ZGVm
YzhhMjMwOWZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3NCBAQAorMjAyMC0wMi0yMyAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgVGV4dFRyYWNr
Q3VlIHRvIHVzZSBtb3JlIHRyYWRpdGlvbmFsIGRlc2lnbiBwYXR0ZXJucworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4MTE0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBGaXhlZCBpczxWVFRDdWU+IHRv
IGFjY3VyYXRlbHkgbWF0Y2ggdGhlIGNsYXNzIGhpZXJhcmNoeS4gQmVmb3JlLCBUZXh0VHJhY2tD
dWVHZW5lcmljCisgICAgICAgICAgZGVyaXZlZCBmcm9tIFZUVEN1ZSwgYnV0IGlzPFZUVEN1ZT4g
d291bGQgcmV0dXJuIGZhbHNlLiBOb3JtYWxpemluZyB0aGlzIGxldHMgdXMgdXNlCisgICAgICAg
ICAgaXM8VlRUQ3VlPiBhbmQgZG93bmNhc3Q8VlRUQ3VlPiBpbiB0aGUgY29udmVudGlvbmFsIHdh
eS4KKyAgICAgICAgLSBNYWRlIHRoZSBUZXh0VHJhY2tDdWU6OmlzRXF1YWwgZnVuY3Rpb24gYSBu
b24tdmlydHVhbCBmdW5jdGlvbiB0aGF0IGNhbGxzIGEgdmlydHVhbAorICAgICAgICAgIGZ1bmN0
aW9uIFRleHRUcmFja0N1ZTo6Y3VlQ29udGVudHNNYXRjaC4gQmVmb3JlIHRoZXJlIHdhcyBhIG1p
eCBvZiBvdmVycmlkZGluZyBib3RoCisgICAgICAgICAgZnVuY3Rpb25zIGluIGRlcml2ZWQgY2xh
c3NlcywgYWNoaWV2aW5nIHRoZSBzYW1lIHRoaW5nIGluIG11bHRpcGxlIHdheXMgd2l0aAorICAg
ICAgICAgIHVubmVjY2Vzc2FyeSBhZGRpdGlvbmFsIHZpcnR1YWwgZnVuY3Rpb24gY2FsbCBvdmVy
aGVhZC4KKyAgICAgICAgLSBNYWRlIHRoZSBUZXh0VHJhY2tDdWU6OnRvSlNPTlN0cmluZyBmdW5j
dGlvbiBhIG5vbi12aXJ0dWFsIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYQorICAgICAgICAgIHZpcnR1
YWwgZnVudGlvbiBUZXh0VHJhY2tDdWU6OnRvSlNPTi4gQmVmb3JlIHRoZXJlIHdlcmUgdHdvIHZp
cnR1YWwgZnVuY3Rpb25zIGFuZAorICAgICAgICAgIGluY29uc2lzdGVudCBwYXR0ZXJucyBmb3Ig
d2hpY2ggb25lIHdhcyBvdmVycmlkZGVuLgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja1Jl
bW92ZUN1ZSk6IFVzZSBkb3duY2FzdCBpbnN0ZWFkIG9mIHRvVlRUQ3VlLgorCisgICAgICAgICog
aHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6IFJlbW92ZWQgc29tZSB1bm5lZWRlZCBpbmNsdWRlcy4K
KworICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0
ZURpc3BsYXkpOiBVc2UgZG93bmNhc3QKKyAgICAgICAgaW5zdGVhZCBvZiB0b1ZUVEN1ZS4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnBy
b2Nlc3NBY3RpdmVWVFRDdWUpOiBSZW1vdmVkCisgICAgICAgIGFuIGFzc2VydGlvbiB0aGF0IG5v
IGxvbmdlciBtYWtlcyBzZW5zZTsgZ3VhcmFudGVlZCBhdCBydW50aW1lLgorCisgICAgICAgICog
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oOiBSZW1vdmVkIGFuIHVubmVlZGVkIGluY2x1ZGUu
CisKKyAgICAgICAgKiBodG1sL3RyYWNrL0RhdGFDdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
dG9EYXRhQ3VlKTogRGVsZXRlZC4gTm8gbmVlZCBmb3IgdGhpcyBmdW5jdGlvbiBzaW5jZSB3ZSBj
YW4gdXNlCisgICAgICAgIGRvd25jYXN0PERhdGFDdWU+IGluc3RlYWQuCisgICAgICAgIChXZWJD
b3JlOjpEYXRhQ3VlOjpjdWVDb250ZW50c01hdGNoIGNvbnN0KTogUmVtb3ZlZCB1bm5lY2Vzc2Fy
eSBjaGVjayBvZiBjdWVUeXBlLgorICAgICAgICBUaGUgaXNFcXVhbCBmdW5jdGlvbiBjaGVja3Mg
Y3VlVHlwZSBhbmQgb25seSBjYWxscyB0aGlzIGZ1bmN0aW9uIGlmIGl0IG1hdGNoZXMuCisgICAg
ICAgIFVzZSBkb3duY2FzdCBpbnN0ZWFkIG9mIHRvRGF0YUN1ZS4KKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFDdWU6OmlzRXF1YWwgY29uc3QpOiBEZWxldGVkLiBCYXNlIGNsYXNzIG5vdyBoYW5kbGVz
IHRoaXMuCisgICAgICAgIChXZWJDb3JlOjpEYXRhQ3VlOjpkb2VzRXh0ZW5kQ3VlIGNvbnN0KTog
RGVsZXRlZC4gV2FzIG5ldmVyIGJlaW5nIGNhbGxlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFD
dWU6OnRvSlNPTlN0cmluZyBjb25zdCk6IERlbGV0ZWQuIE92ZXJyaWRlIHRvSlNPTiBpbnN0ZWFk
LgorICAgICAgICAoV2ViQ29yZTo6RGF0YUN1ZTo6dG9KU09OIGNvbnN0KTogTW92ZWQgdGhlIGNv
ZGUgaGVyZSB0aGF0IHVzZWQgdG8gYmUgaW4gdG9KU09OU3RyaW5nLgorCisgICAgICAgICogaHRt
bC90cmFjay9EYXRhQ3VlLmg6IFJlZHVjZWQgaW5jbHVkZXMuIE1hZGUgb3ZlcnJpZGRlbiBmdW5j
dGlvbnMgcHJpdmF0ZQorICAgICAgICBhbmQgZmluYWwuIFJlbW92ZWQgZnVuY3Rpb25zIGFzIG1t
ZW50aW9uZWQgYWJvdmUuIENoYW5nZWQgV1RGOjpMb2dBcmd1bWVudCBpbXBsZW1lbnRhdGlvbgor
ICAgICAgICB0byBqdXN0IGZvcndhcmQgdG8gVGV4dFRyYWNrQ3VlIGluc3RlYWQgb2YgcmVpbXBs
ZW1lbnRpbmcgaGVyZS4KKworICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kRGF0YVRleHRUcmFj
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmREYXRhVGV4dFRyYWNrOjpyZW1vdmVDdWUp
OiBVc2UgZG93bmNhc3QgaW5zdGVhZCBvZiB0b0RhdGFDdWUuCisKKyAgICAgICAgKiBodG1sL3Ry
YWNrL0luYmFuZEdlbmVyaWNUZXh0VHJhY2suY3BwOiBSZW1vdmVkIGFuIHVubmVlZGVkIGluY2x1
ZGUuCisKKyAgICAgICAgKiBodG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxvYWRhYmxlVGV4dFRyYWNrOjpMb2FkYWJsZVRleHRUcmFjayk6IFJlbW92
ZWQgdW5uZWVkZWQgaW5pdGlhbGl6YXRpb24gb2YKKyAgICAgICAgbV9pc0RlZmF1bHQsIHdoaWNo
IGlzIGluaXRpYWxpemVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZGFibGVUZXh0VHJhY2s6Om5ld0N1ZXNBdmFpbGFibGUpOiBSZW1vdmVkIHVubmVlZGVk
IGNhbGwgdG8gdG9WVFRDdWUsCisgICAgICAgIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIGJldHRl
ciBpbnRlcmZhY2Ugb2YgZ2V0TmV3Q3Vlcywgd2hpY2ggbm93IHJldHVybnMKKyAgICAgICAgVmVj
dG9yPFJlZjxWVFRDdWU+PiwgbWFraW5nIHRoZSB0eXBlIGV4cGxpY2l0LgorCisgICAgICAgICog
aHRtbC90cmFjay9UZXh0VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjph
ZGRDdWUpOiBVc2UgaXM8RGF0YUN1ZT4gaW5zdGVhZCBvZiBjaGVja2luZyBjdWVUeXBlLgorCisg
ICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFRyYWNrQ3VlOjpjcmVhdGUpOiBGaXhlZCBjb25mdXNpbmcgbmFtaW5nIHRoYXQgY2FsbGVk
IHRoZSBmcmFnbWVudCB0aGUKKyAgICAgICAgY3VlIGlzIGNvbnRhaW5lZCBpbiAiY3VlRG9jdW1l
bnQiOyBjYWxsIGl0IGN1ZUZyYWdtZW50IGluc3RlYWQuIFRoaXMgY29uc3RydWN0b3IKKyAgICAg
ICAgYWxyZWFkeSByZXF1aXJlZCB0aGF0IHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGJlIGEg
RG9jdW1lbnQuIERpZCB0aGUgdHlwZSBjYXN0CisgICAgICAgIGZvciB0aGF0IHVwIGZyb250LiBJ
biB0aGUgZnV0dXJlIHdvdWxkIGJlIGdvb2QgdG8gY2hhbmdlIHRoZSBhcmd1bWVudCB0eXBlIHRv
IERvY3VtZW50LgorICAgICAgICBBbHNvIGZpeGVkIGhvdyB0aGUgbmV3bHktY3JlYXRlZCBmcmFn
bWVudCBpcyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLiBUaGUgb2xkIGNvZGUKKyAgICAgICAg
dHJpZWQgdG8gdXNlIERvY3VtZW50RnJhZ21lbnQmJiB0byBwYXNzIG93bmVyc2hpcCwgYnV0IHNp
bmNlIHRoaXMgaXMgYSByZWZlcmVuY2UtY291bnRlZAorICAgICAgICBvYmplY3QgaXQgbmVlZHMg
dG8gYmUgUmVmPERvY3VtZW50RnJhZ21lbnQ+JiYuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJh
Y2tDdWU6OlRleHRUcmFja0N1ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgY29uc3QpOiBNb3ZlZCB0aGlzIGhlcmUgZnJvbSB0aGUgaGVh
ZGVyCisgICAgICAgIGZpbGUgc28gd2UgY2FuIGNvbXBpbGUgd2l0aG91dCBUZXh0VHJhY2tDdWUu
aCBpbmNsdWRpbmcgRG9jdW1lbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6
Y3VlQ29udGVudHNNYXRjaCBjb25zdCk6IFJlbW92ZWQgdGhlIGNvZGUgdGhhdCBjaGVja3MgY3Vl
VHlwZS4KKyAgICAgICAgSXQncyBub3cgaXNFcXVhbCB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBj
aGVja2luZyB0aGF0IHRoZSBjdWVUeXBlIG1hdGNoZXMsIGFuZAorICAgICAgICBjdWVDb250ZW50
c01hdGNoIGlzIG9ubHkgY2FsbGVkIHdoZW4gdGhlIHR5cGVzIGFyZSB0aGUgc2FtZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6aXNFcXVhbCBjb25zdCk6IFJlb3JkZXJlZCB0aGUg
Ym9vbGVhbiBjaGVja3MgYSBiaXQgc28gaXQncworICAgICAgICBlYXNpZXIgdG8gc2VlIHRoZSBs
b2dpYzsgbm8gbmVlZCBmb3IgYSBjYXNjYWRlIG9mIGlmIHN0YXRlbWVudHMuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0VHJhY2tDdWU6OmRvZXNFeHRlbmRDdWUgY29uc3QpOiBEZWxldGVkLiBXYXMg
bmV2ZXIgYmVpbmcgY2FsbGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6IFVzZSBk
b3duY2FzdCBpbnN0ZWFkIG9mIHRvVlRUQ3VlLgorCisgICAgICAgICogaHRtbC90cmFjay9UZXh0
VHJhY2tDdWUuaDogTWFkZSBpc0VxdWFsIG5vIGxvbmdlciB2aXJ0dWFsLiBUaGUgcGVyLWNsYXNz
IGJlaGF2aW9yCisgICAgICAgIGlzIG5vdyBhbGwgaW4gdGhlIHZpcnR1YWwgY3VlQ29udGVudHNN
YXRjaCBmdW5jdGlvbiwgb25seSBjYWxsZWQgYnkgaXNFcXVhbC4KKyAgICAgICAgUmVtb3ZlZCB1
bmNhbGxlZCBkb2VzRXh0ZW5kQ3VlIGZ1bmN0aW9uLiBBZGRlZCBzb21lIGFyZ3VtZW50IG5hbWVz
IGluIGNhc2VzIHdoZXJlCisgICAgICAgIHRoZSB0eXBlIGFsb25lIGRpZCBub3QgbWFrZSB0aGVp
ciBwdXJwb3NlIGNsZWFyLiBNYWRlIHNvbWUgdGhpbmdzIG1vcmUgcHJpdmF0ZS4KKyAgICAgICAg
UmVwbGFjZWQgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0IHdpdGggbV9kb2N1bWVudC4KKworICAg
ICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVhdGUpOiBNb3ZlZCB0aGlzIGZ1bmN0aW9uIGhl
cmUgZnJvbSB0aGUgaGVhZGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJp
Yzo6VGV4dFRyYWNrQ3VlR2VuZXJpYyk6IEluaXRpYWxpemVkIGRhdGEgbWVtYmVycyBpbiB0aGUK
KyAgICAgICAgY2xhc3MgZGVmaW5pdGlvbiBzbyB0aGV5IGRvbid0IGFsc28gbmVlZCB0byBiZSBp
bml0aWFsaXplZCBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6
Y3VlQ29udGVudHNNYXRjaCBjb25zdCk6IFJld3JvdGUgdXNpbmcgJiYgcmF0aGVyIHRoYW4KKyAg
ICAgICAgY2FzdGNhZGluZyBpZiBzdGF0ZW1lbnRzLCBtYWtpbmcgdGhlIGZ1bmN0aW9uIHNob3J0
ZXIgYW5kZCBlYXNpZXIgdG8gcmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdl
bmVyaWM6OmlzRXF1YWwgY29uc3QpOiBEZWxldGVkLiBCYXNlIGNsYXNzIG5vdyBoYW5kZXMgdGhp
cy4KKyAgICAgICAgVGhlIG9sZCB2ZXJzaW9uIGhhZCBjb25mdXNpbmcgbG9naWMgdG8gZGVhbCB3
aXRoIGNoZWNraW5nIGN1ZSB0eXBlOyBjYW4gbm93IGRvIHRoaXMKKyAgICAgICAgaW4gYSBtb3Jl
IHN0cmFpZ2h0Zm9yd2FyZCB3YXkuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5l
cmljOjpkb2VzRXh0ZW5kQ3VlIGNvbnN0KTogRGVsZXRlZC4gV2FzIG5ldmVyIGNhbGxlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OmlzT3JkZXJlZEJlZm9yZSBjb25z
dCk6IFVzZSBpczxUZXh0VHJhY2tDdWVHZW5lcmljPgorICAgICAgICBhbmQgZG93bmNhc3Q8VGV4
dFRyYWNrQ3VlR2VuZXJpYz4uCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmlj
Ojppc1Bvc2l0aW9uZWRBYm92ZSBjb25zdCk6IERpdHRvLiBBbHNvIG1lcmdlZCB0d28KKyAgICAg
ICAgaWYgc3RhdGVtZW50cyBzbyB0aGVyZSBpcyBsZXNzIHJlcGVhdGVkIGxvZ2ljLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6dG9KU09OU3RyaW5nIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OnRvSlNPTiBjb25z
dCk6IE1vdmVkIGNvZGUgaGVyZSB0aGF0IHdhcyBpbiB0b0pTT05TdHJpbmcuCisKKyAgICAgICAg
KiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuaDogTWFkZSB0aGluZ3MgbW9yZSBwcml2
YXRlLiBDaGFuZ2VkIFdURjo6TG9nQXJndW1lbnQKKyAgICAgICAgaW1wbGVtZW50YXRpb24gdG8g
anVzdCBmb3J3YXJkIHRvIFRleHRUcmFja0N1ZSBpbnN0ZWFkIG9mIHJlaW1wbGVtZW50aW5nIGhl
cmUuCisKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlTGlzdDo6Y3JlYXRlKTogTW92ZWQgaGVyZSBmcm9tIGhl
YWRlci4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuaDogRGl0dG8uCisK
KyAgICAgICAgKiBodG1sL3RyYWNrL1ZUVEN1ZS5jcHA6IFJlbW92ZWQgdW5kZWZpbmVkUG9zaXRp
b24uIEluc3RlYWQgd2UnbGwgdXNlIE5hTiBzaW5jZQorICAgICAgICB0aGVzZSBhcmUgZmxvYXRp
bmcgcG9pbnQgbnVtYmVycy4KKyAgICAgICAgKFdlYkNvcmU6OlZUVEN1ZUJveDo6YXBwbHlDU1NQ
cm9wZXJ0aWVzKTogVXNlIGlzPFZUVEN1ZT4gYW5kIGRvd25jYXN0PFZUVEN1ZT4uCisgICAgICAg
IChXZWJDb3JlOjpWVFRDdWU6OmNyZWF0ZSk6IE1vdmVkIG1vcmUgb3ZlcmxvYWRzIG9mIHRoaXMg
ZnVuY3Rpb24gaGVyZSBmcm9tIHRoZQorICAgICAgICBoZWFkZXIgZmlsZS4KKyAgICAgICAgKFdl
YkNvcmU6OlZUVEN1ZTo6VlRUQ3VlKTogVGFrZSBEb2N1bWVudCBpbnN0ZWFkIG9mIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuCisgICAgICAgIEFsc28gdG9vayB0aGUgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCBhcmd1bWVudCBhd2F5IGZyb20gdGhlIGluaXRpYWxpemUgZnVuY3Rpb24uCisgICAgICAg
IChXZWJDb3JlOjpWVFRDdWU6OmluaXRpYWxpemUpOiBEbyBsZXNzIGluaXRpYWxpemF0aW9uIGhl
cmUuIFRoaXMgZnVuY3Rpb24gaXMKKyAgICAgICAgb25seSBjYWxsZWQgaW4gY29uc3RydWN0b3Jz
LCBzbyBpdCBkb2Vzbid0IG5lZWQgdG8gaW5pdGlhbGl6ZSBhbnl0aGluZyB0aGF0CisgICAgICAg
IGlzIGluaXRpYWxpemVkIGluIGFsbCBjb25zdHJ1Y3RvcnMgb3IgaW5pdGlhbGl6ZWQgaW4gdGhl
IGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIFdoYXQgcmVtYWlucyBhcmUgdGhpbmdzIHRoYXQg
cmVxdWlyZSBhIGxpdHRsZSBjb2RlIHRvIGluaXRpYWxpemUgYW5kIHRoZQorICAgICAgICBiaXRm
aWVsZHMsIHdoaWNoIGNhbid0IGJlIGluaXRpYWxpemVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6VlRUQ3VlOjpzZXRQb3NpdGlvbik6IFJlYXJyYW5nZWQgdGhl
IGNvZGUgYSB0aW55IGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OmNvcHlXZWJWVFROb2RlVG9ET01U
cmVlKTogTWFkZSB0aGlzIGEgbm9uLW1lbWJlciBmdW5jdGlvbi4gQWxzbyBjaGFuZ2VkCisgICAg
ICAgIHRoZSBhcmd1bWVudCB0eXBlcyB0byB1c2UgcmVmZXJlbmNlcy4KKyAgICAgICAgKFdlYkNv
cmU6OlZUVEN1ZTo6Z2V0Q3VlQXNIVE1MKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBjb3B5V2Vi
VlRUTm9kZVRvRE9NVHJlZS4KKyAgICAgICAgKFdlYkNvcmU6OlZUVEN1ZTo6Y2FsY3VsYXRlQ29t
cHV0ZWRMaW5lUG9zaXRpb24pOiBVc2UgTmFOIGluc3RlYWQgb2YKKyAgICAgICAgdW5kZWZpbmVk
UG9zaXRpb24sIGNoZWNraW5nIHdpdGggc3RkOjppc25hbi4KKyAgICAgICAgKFdlYkNvcmU6OlZU
VEN1ZTo6Y2FsY3VsYXRlRGlzcGxheVBhcmFtZXRlcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlZUVEN1ZTo6cmVtb3ZlRGlzcGxheVRyZWUpOiBDaGVjayBtX2Rpc3BsYXlUcmVlIGRpcmVj
dGx5IGluc3RlYWQKKyAgICAgICAgb2YgY2FsbGluZyBhIGhhc0Rpc3BsYXlUcmVlIGZ1bmN0aW9u
LCBzaW5jZSB0aGF0J3MgbW9yZSBhIG1vcmUgc3RyYWlnaHRmb3J3YXJkCisgICAgICAgIHdheSB0
byBndWFyZCBhIHN1YnNlcXVlbnQgbGluZSBvZiBjb2RlIHRoYXQgdGhlbiB1c2VzIG1fZGlzcGxh
eVRyZWUuCisgICAgICAgIChXZWJDb3JlOjpWVFRDdWU6OnNldEN1ZVNldHRpbmdzKTogTWVyZ2Vk
IHR3byBpZiBzdGF0ZW1lbnRzIGludG8gb25lLCBhbmQgdXNlCisgICAgICAgIHN0ZDo6aXNuYW4g
aW5zdGVhZCBvZiB1bmRlZmluZWRQb3NpdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlZUVEN1ZTo6
Y3VlQ29udGVudHNNYXRjaCBjb25zdCk6IFJld3JvdGUgdXNpbmcgJiYgcmF0aGVyIHRoYW4KKyAg
ICAgICAgY2FzdGNhZGluZyBpZiBzdGF0ZW1lbnRzLCBtYWtpbmcgdGhlIGZ1bmN0aW9uIHNob3J0
ZXIgYW5kZCBlYXNpZXIgdG8gcmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OlZUVEN1ZTo6aXNFcXVh
bCBjb25zdCk6IERlbGV0ZWQuIEJhc2UgY2xhc3Mgbm93IGhhbmRsZXMgdGhpcy4KKyAgICAgICAg
KFdlYkNvcmU6OlZUVEN1ZTo6ZG9lc0V4dGVuZEN1ZSBjb25zdCk6IERlbGV0ZWQuIFdhcyBuZXZl
ciBjYWxsZWQuCisgICAgICAgIChXZWJDb3JlOjp0b1ZUVEN1ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpWVFRDdWU6OnRvSlNPTlN0cmluZyBjb25zdCk6IERlbGV0ZWQuIEJhc2UgY2xh
c3Mgbm93IGhhbmRsZXMgdGhpcy4KKyAgICAgICAgKFdlYkNvcmU6OlZUVEN1ZTo6dG9KU09OIGNv
bnN0KTogQ29ycmVjdGx5IGhhbmRsZSBpbnZhbGlkIHBvc2l0aW9ucyB0aGF0IGFyZQorICAgICAg
ICBOYU4gbm93LCBjb2RlIHVzZWQgdW5kZWZpbmVkUG9zaXRpb24gYmVmb3JlLgorCisgICAgICAg
ICogaHRtbC90cmFjay9WVFRDdWUuaDogTXZvZWQgY3JlYXRlIGZ1bmN0aW9ucyBvdXQgb2YgaGVh
ZGVyLCBtYWRlIHNvbWUgdGhpbmdzCisgICAgICAgIG1vcmUgcHJpdmF0ZSBhbmQgZmluYWwsIGlu
aXRpYWxpemVkIG1vcmUgZGF0YSBtZW1iZXJzIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLgorICAg
ICAgICBSZW1vdmVkIHRvVlRUQ3VlLiBDaGFuZ2VkIFdURjo6TG9nQXJndW1lbnQgaW1wbGVtZW50
YXRpb24gdG8ganVzdCBmb3J3YXJkIHRvCisgICAgICAgIFRleHRUcmFja0N1ZSBpbnN0ZWFkIG9m
IHJlaW1wbGVtZW50aW5nIGhlcmUuIENvcnJlY3RlZCB0aGUgaXNUeXBlIGZ1bmN0aW9uIHNvCisg
ICAgICAgIGl0IGtub3dzIGFib3V0IGJvdGggY3VlIHR5cGVzIHRoYXQgcmVzdWx0IGluIGEgVlRU
Q3VlIG9iamVjdC4gVGhpcyBhbGxvd3MgdXMKKyAgICAgICAgdG8gdXNlIGlzPFZUVEN1ZT4gYW5k
IGRvd25jYXN0PFZUVEN1ZT4gaW4gdGhlIG5vcm1hbCB3YXkuIFJlbW92ZWQgdGhlIEZJWE1FCisg
ICAgICAgIHNheWluZyB3ZSBzaG91bGQgZG8gdGhhdC4KKworICAgICAgICAqIGxvYWRlci9UZXh0
VHJhY2tMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrTG9hZGVyOjpnZXRO
ZXdDdWVzKTogQ2hhbmdlZCB0byByZXR1cm4gYSBWZWN0b3I8UmVmPFZUVEN1ZT4+LgorICAgICAg
ICBJbiBtb2Rlcm4gQysrIHJldHVybiB2YWx1ZSBpcyBiZXR0ZXIgdGhhbiBhbiBvdXQgYXJndW1l
bnQgZm9yIGEgZnVuY3Rpb24gbGlrZQorICAgICAgICB0aGlzLCBhbmQgdGhlIG1vcmUtc3BlY2lm
aWMgdHlwZSBoZWxwcyB1cyBhdCB0aGUgY2FsbCBzaXRlcy4KKworICAgICAgICAqIGxvYWRlci9U
ZXh0VHJhY2tMb2FkZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogcGFn
ZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5j
bHVkZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb24uaDoKKyAgICAgICAgVXNlICNwcmFnbWEgb25jZSBhbmQg
cmVtb3ZlZCBzb21lIHVubmVkZWQgaW5jbHVkZXMgYW5kIGZvcndhcmQgZGVjbGFyYXRpb25zLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZUVEN1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJWVFRDdWU6OlJlbmRlclZUVEN1ZSk6IFVzZSBkb3duY2FzdDxWVFRDdWU+LgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVlRUQ3VlOjpsYXlvdXQpOiBSZW1vdmVkIHVubmVlZGVkIGNh
bGwgdG8gdG9WVFRDdWUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWVFRDdWU6OnJlcG9zaXRp
b25HZW5lcmljQ3VlKTogVXNlIGRvd25jYXN0IGluc3RlYWQgb2YKKyAgICAgICAgc3RhdGljX2Nh
c3QgZm9yIFRleHRUcmFja0N1ZUdlbmVyaWMuCisKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0LmNw
cDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlLgorCiAyMDIwLTAyLTIzICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBGb2xsb3cgdXAgZWxlbWVudCBpdGVyYXRvciB3
b3JrIGJ5IHJlZHVjaW5nIGluY2x1ZGVzIGFuZCB1c2luZyBpczw+IGluIGEgZmV3IG1vcmUgcGxh
Y2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAzZjc1Nzg0
YjMxZTllM2U3ZjdmOTU0ZTg5N2M2YmY5MmYwNjYxNjllLi45NjljNTBkODMwNjE4YTg3NDk1YjVk
ZDEyOTAzZGM2M2VhNDhjNTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAKQEAgLTIwMzEsMTEgKzIwMzEsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0
VHJhY2tSZW1vdmVDdWUoVGV4dFRyYWNrJiwgVGV4dFRyYWNrQ3VlJiBjdWUpCiAgICAgbV9jdWVE
YXRhLT5jdWVUcmVlLnJlbW92ZShpbnRlcnZhbCk7CiAKICAgICAvLyBTaW5jZSB0aGUgY3VlIHdp
bGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBtZWRpYSBlbGVtZW50IGFuZCBsaWtlbHkgdGhlCi0gICAg
Ly8gVGV4dFRyYWNrIG1pZ2h0IGFsc28gYmUgZGVzdHJ1Y3RlZCwgbm90aWZ5aW5nIHRoZSByZWdp
b24gb2YgdGhlIGN1ZQorICAgIC8vIFRleHRUcmFjayBtaWdodCBhbHNvIGJlIGRlc3Ryb3llZCwg
bm90aWZ5aW5nIHRoZSByZWdpb24gb2YgdGhlIGN1ZQogICAgIC8vIHJlbW92YWwgc2hvdWxkbid0
IGJlIGRvbmUuCiAgICAgYXV0byBpc1ZUVCA9IGlzPFZUVEN1ZT4oY3VlKTsKICAgICBpZiAoaXNW
VFQpCi0gICAgICAgIHRvVlRUQ3VlKCZjdWUpLT5ub3RpZnlSZWdpb25XaGVuUmVtb3ZpbmdEaXNw
bGF5VHJlZShmYWxzZSk7CisgICAgICAgIGRvd25jYXN0PFZUVEN1ZT4oY3VlKS5ub3RpZnlSZWdp
b25XaGVuUmVtb3ZpbmdEaXNwbGF5VHJlZShmYWxzZSk7CiAKICAgICBzaXplX3QgaW5kZXggPSBt
X2N1ZURhdGEtPmN1cnJlbnRseUFjdGl2ZUN1ZXMuZmluZChpbnRlcnZhbCk7CiAgICAgaWYgKGlu
ZGV4ICE9IG5vdEZvdW5kKSB7CkBAIC0yMDQ3LDcgKzIwNDcsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnRleHRUcmFja1JlbW92ZUN1ZShUZXh0VHJhY2smLCBUZXh0VHJhY2tDdWUmIGN1ZSkK
ICAgICB1cGRhdGVBY3RpdmVUZXh0VHJhY2tDdWVzKGN1cnJlbnRNZWRpYVRpbWUoKSk7CiAKICAg
ICBpZiAoaXNWVFQpCi0gICAgICAgIHRvVlRUQ3VlKCZjdWUpLT5ub3RpZnlSZWdpb25XaGVuUmVt
b3ZpbmdEaXNwbGF5VHJlZSh0cnVlKTsKKyAgICAgICAgZG93bmNhc3Q8VlRUQ3VlPihjdWUpLm5v
dGlmeVJlZ2lvbldoZW5SZW1vdmluZ0Rpc3BsYXlUcmVlKHRydWUpOwogfQogCiBDdWVMaXN0IEhU
TUxNZWRpYUVsZW1lbnQ6OmN1cnJlbnRseUFjdGl2ZUN1ZXMoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCBlNzE1NjNjZmY2MWE1MTQ1NTY3MjRkZmQzY2E3
MGIwMTA5ZmZmNTYwLi41ZGUwZDExMTg1MWFjN2ZhOGMzZTk1ZGI2ZWVkOWFmMzFjZjUxNThkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAtNDcsOCArNDcsNiBAQAog
I2luY2x1ZGUgIkF1ZGlvVHJhY2suaCIKICNpbmNsdWRlICJDYXB0aW9uVXNlclByZWZlcmVuY2Vz
LmgiCiAjaW5jbHVkZSAiVGV4dFRyYWNrLmgiCi0jaW5jbHVkZSAiVGV4dFRyYWNrQ3VlLmgiCi0j
aW5jbHVkZSAiVlRUQ3VlLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFjay5oIgogI2VuZGlmCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNw
cAppbmRleCA3MzMzNzZjZjliYTg4OGZjN2JlZjQ5Mjg3MWNjYWU0MWU1NTUzNmMxLi5lZWJhODk0
YzVlYTUyMTVhMDNhMTE3Y2RiNjZhZjgxODQ5ZDBkMDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0xMTkwLDggKzEx
OTAsOCBAQCB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0
ZURpc3BsYXkoKQogICAgICAgICBmb3IgKGF1dG8mIGludGVydmFsIDogYWN0aXZlQ3Vlcykgewog
ICAgICAgICAgICAgYXV0byBjdWUgPSBpbnRlcnZhbC5kYXRhKCk7CiAgICAgICAgICAgICBjdWUt
PnNldEZvbnRTaXplKG1fZm9udFNpemUsIG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCksIG1fZm9u
dFNpemVJc0ltcG9ydGFudCk7Ci0gICAgICAgICAgICBpZiAoaXM8VlRUQ3VlPihjdWUpIHx8IGlz
PFRleHRUcmFja0N1ZUdlbmVyaWM+KGN1ZSkpCi0gICAgICAgICAgICAgICAgcHJvY2Vzc0FjdGl2
ZVZUVEN1ZSgqdG9WVFRDdWUoY3VlKSk7CisgICAgICAgICAgICBpZiAoaXM8VlRUQ3VlPigqY3Vl
KSkKKyAgICAgICAgICAgICAgICBwcm9jZXNzQWN0aXZlVlRUQ3VlKGRvd25jYXN0PFZUVEN1ZT4o
KmN1ZSkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgYXV0byBkaXNwbGF5
Qm94ID0gY3VlLT5nZXREaXNwbGF5VHJlZShtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpLCBtX2Zv
bnRTaXplKTsKICAgICAgICAgICAgICAgICBpZiAoZGlzcGxheUJveC0+aGFzQ2hpbGROb2Rlcygp
ICYmICFjb250YWlucyhkaXNwbGF5Qm94LmdldCgpKSkKQEAgLTEyMTIsOCArMTIxMiw2IEBAIHZv
aWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSgp
CiAKIHZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6cHJvY2Vzc0Fj
dGl2ZVZUVEN1ZShWVFRDdWUmIGN1ZSkKIHsKLSAgICBBU1NFUlQoaXM8VlRUQ3VlPihjdWUpIHx8
IGlzPFRleHRUcmFja0N1ZUdlbmVyaWM+KGN1ZSkpOwotCiAgICAgREVCVUdfTE9HKExPR0lERU5U
SUZJRVIsICJhZGRpbmcgYW5kIHBvc2l0aW9uaW5nIGN1ZTogXCIiLCBjdWUudGV4dCgpLCAiXCIs
IHN0YXJ0PSIsIGN1ZS5zdGFydFRpbWUoKSwgIiwgZW5kPSIsIGN1ZS5lbmRUaW1lKCksICIsIGxp
bmU9IiwgY3VlLmxpbmUoKSk7CiAgICAgUmVmPFRleHRUcmFja0N1ZUJveD4gZGlzcGxheUJveCA9
ICpjdWUuZ2V0RGlzcGxheVRyZWUobV92aWRlb0Rpc3BsYXlTaXplLnNpemUoKSwgbV9mb250U2l6
ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bHMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaAppbmRleCA0
NzY2YjM0YTU5OTAyOGMwZTJjODY1ZTg1NDlmZTljN2Y0OGY3OWFkLi5mNGYwZDFjMGUyNzA0YjFh
MTA4ZWU5Y2U5YzE0Yjg0NDQwZjE0YmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9scy5oCkBAIC0zMywxNiArMzMsMTEgQEAKICNpbmNsdWRlICJNZWRpYUNvbnRy
b2xFbGVtZW50cy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotI2lmIEVOQUJMRShWSURF
T19UUkFDSykKLSNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBNZWRpYVBs
YXllcjsKLQogY2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyTWVkaWE7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL0RhdGFDdWUuY3BwCmluZGV4IDVkNWUzZjNkNzM4MzI2M2RjMThhN2U3N2Jk
N2Y0ZjUwNzM0Y2I2ZTEuLjNiMDMyZjEwNzM3OTRhOWZmMmY4MzE5ZTE2NTkxMGY3YzUxZjY2MTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3VlLmNwcApAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCiAjaW5jbHVk
ZSAiRGF0YUN1ZS5oIgogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtOTAsMjQgKzkxLDkgQEAg
dm9pZCBEYXRhQ3VlOjpzZXREYXRhKEFycmF5QnVmZmVyJiBkYXRhKQogICAgIG1fZGF0YSA9IEFy
cmF5QnVmZmVyOjpjcmVhdGUoZGF0YSk7CiB9CiAKLURhdGFDdWUqIHRvRGF0YUN1ZShUZXh0VHJh
Y2tDdWUqIGN1ZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjdWUt
PmN1ZVR5cGUoKSA9PSBUZXh0VHJhY2tDdWU6OkRhdGEpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxEYXRhQ3VlKj4oY3VlKTsKLX0KLQotY29uc3QgRGF0YUN1ZSogdG9EYXRhQ3VlKGNvbnN0IFRl
eHRUcmFja0N1ZSogY3VlKQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KGN1ZS0+Y3VlVHlwZSgpID09IFRleHRUcmFja0N1ZTo6RGF0YSk7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IERhdGFDdWUqPihjdWUpOwotfQotCiBib29sIERhdGFDdWU6OmN1ZUNvbnRl
bnRzTWF0Y2goY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0CiB7Ci0gICAgaWYgKGN1ZS5j
dWVUeXBlKCkgIT0gVGV4dFRyYWNrQ3VlOjpEYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBjb25zdCBEYXRhQ3VlKiBkYXRhQ3VlID0gdG9EYXRhQ3VlKCZjdWUpOworICAgIGNvbnN0
IERhdGFDdWUqIGRhdGFDdWUgPSBkb3duY2FzdDxEYXRhQ3VlPigmY3VlKTsKICAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IG90aGVyRGF0YSA9IGRhdGFDdWUtPmRhdGEoKTsKICAgICBpZiAoKG90aGVy
RGF0YSAmJiAhbV9kYXRhKSB8fCAoIW90aGVyRGF0YSAmJiBtX2RhdGEpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xMzIsMjUgKzExOCw2IEBAIGJvb2wgRGF0YUN1ZTo6Y3VlQ29udGVudHNN
YXRjaChjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBEYXRhQ3VlOjppc0VxdWFsKGNvbnN0IFRleHRUcmFja0N1ZSYgY3VlLCBUZXh0VHJh
Y2tDdWU6OkN1ZU1hdGNoUnVsZXMgbWF0Y2gpIGNvbnN0Ci17Ci0gICAgaWYgKCFUZXh0VHJhY2tD
dWU6OmlzRXF1YWwoY3VlLCBtYXRjaCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChjdWUuY3VlVHlwZSgpICE9IFRleHRUcmFja0N1ZTo6RGF0YSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIGN1ZUNvbnRlbnRzTWF0Y2goY3VlKTsKLX0KLQotYm9vbCBEYXRh
Q3VlOjpkb2VzRXh0ZW5kQ3VlKGNvbnN0IFRleHRUcmFja0N1ZSYgY3VlKSBjb25zdAotewotICAg
IGlmICghY3VlQ29udGVudHNNYXRjaChjdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gVGV4dFRyYWNrQ3VlOjpkb2VzRXh0ZW5kQ3VlKGN1ZSk7Ci19Ci0KIEpTQzo6SlNW
YWx1ZSBEYXRhQ3VlOjp2YWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSkgY29uc3QKIHsK
ICAgICBpZiAobV9wbGF0Zm9ybVZhbHVlKQpAQCAtMTc4LDE2ICsxNDUsMTIgQEAgSlNWYWx1ZSBE
YXRhQ3VlOjp2YWx1ZU9yTnVsbCgpIGNvbnN0CiAgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi1T
dHJpbmcgRGF0YUN1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKK3ZvaWQgRGF0YUN1ZTo6dG9KU09O
KEpTT046Ok9iamVjdCYgb2JqZWN0KSBjb25zdAogewotICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLQotICAgIFRleHRUcmFja0N1ZTo6dG9KU09OKG9iamVjdC5nZXQo
KSk7CisgICAgVGV4dFRyYWNrQ3VlOjp0b0pTT04ob2JqZWN0KTsKIAogICAgIGlmICghbV90eXBl
LmlzRW1wdHkoKSkKLSAgICAgICAgb2JqZWN0LT5zZXRTdHJpbmcoInR5cGUiX3MsIG1fdHlwZSk7
Ci0KLSAgICByZXR1cm4gb2JqZWN0LT50b0pTT05TdHJpbmcoKTsKKyAgICAgICAgb2JqZWN0LnNl
dFN0cmluZygidHlwZSJfcywgbV90eXBlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3VlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL0RhdGFDdWUuaAppbmRleCA2M2E2N2MwNDkxNWU2M2YzMjQyNmY2
MjMwZDg2ZTQyODE3ZjUyMWFiLi41N2U5YWU5ZDA1ZjA3MThmNjA2MDc0YWEzZDRkNTY0MDEyNTQ3
ZDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0RhdGFDdWUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0RhdGFDdWUuaApAQCAtMzAsMTEgKzMwLDE0IEBA
CiAKICNpbmNsdWRlICJTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlLmgiCiAjaW5jbHVkZSAiVGV4
dFRyYWNrQ3VlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NKU1ZhbHVlLmg+CiAjaW5jbHVkZSA8d3RmL01lZGlh
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KIAorbmFtZXNwYWNlIEpTQyB7Citj
bGFzcyBBcnJheUJ1ZmZlcjsKK2NsYXNzIEpTVmFsdWU7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKQEAgLTcyLDcgKzc1LDYgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgfkRhdGFDdWUoKTsKLSAgICBDdWVUeXBlIGN1ZVR5
cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBEYXRhOyB9CiAKICAgICBSZWZQdHI8SlNDOjpB
cnJheUJ1ZmZlcj4gZGF0YSgpIGNvbnN0OwogICAgIHZvaWQgc2V0RGF0YShKU0M6OkFycmF5QnVm
ZmVyJik7CkBAIC04NSwxMiArODcsNiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KICAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJiB0eXBl
KSB7IG1fdHlwZSA9IHR5cGU7IH0KIAotICAgIGJvb2wgaXNFcXVhbChjb25zdCBUZXh0VHJhY2tD
dWUmLCBDdWVNYXRjaFJ1bGVzKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGN1ZUNvbnRlbnRz
TWF0Y2goY29uc3QgVGV4dFRyYWNrQ3VlJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBkb2Vz
RXh0ZW5kQ3VlKGNvbnN0IFRleHRUcmFja0N1ZSYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgU3Ry
aW5nIHRvSlNPTlN0cmluZygpIGNvbnN0OwotCiBwcml2YXRlOgogICAgIERhdGFDdWUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGlt
ZSYgZW5kLCBBcnJheUJ1ZmZlciYsIGNvbnN0IFN0cmluZyYpOwogICAgIERhdGFDdWUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGlt
ZSYgZW5kLCBjb25zdCB2b2lkKiwgdW5zaWduZWQpOwpAQCAtOTgsNiArOTQsOSBAQCBwcml2YXRl
OgogICAgIERhdGFDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGltZSYg
c3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBKU0M6OkpTVmFsdWUsIGNvbnN0IFN0cmluZyYp
OwogCiAgICAgSlNDOjpKU1ZhbHVlIHZhbHVlT3JOdWxsKCkgY29uc3Q7CisgICAgQ3VlVHlwZSBj
dWVUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gRGF0YTsgfQorICAgIGJvb2wgY3VlQ29udGVu
dHNNYXRjaChjb25zdCBUZXh0VHJhY2tDdWUmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHRvSlNP
TihKU09OOjpPYmplY3QmKSBjb25zdCBmaW5hbDsKIAogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
bV9kYXRhOwogICAgIFN0cmluZyBtX3R5cGU7CkBAIC0xMDgsMjMgKzEwNywxMSBAQCBwcml2YXRl
OgogICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4gbV92YWx1ZTsKIH07CiAKLURhdGFDdWUq
IHRvRGF0YUN1ZShUZXh0VHJhY2tDdWUqKTsKLWNvbnN0IERhdGFDdWUqIHRvRGF0YUN1ZShjb25z
dCBUZXh0VHJhY2tDdWUqKTsKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2Ug
V1RGIHsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLXN0cnVjdCBMb2dBcmd1bWVudDsKLQot
dGVtcGxhdGUgPD4KLXN0cnVjdCBMb2dBcmd1bWVudDxXZWJDb3JlOjpEYXRhQ3VlPiB7Ci0gICAg
c3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBXZWJDb3JlOjpEYXRhQ3VlJiBjdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gY3VlLnRvSlNPTlN0cmluZygpOwotICAgIH0KLX07Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBMb2dBcmd1bWVudDxXZWJDb3JlOjpEYXRhQ3VlPiA6IExvZ0FyZ3VtZW50PFdl
YkNvcmU6OlRleHRUcmFja0N1ZT4geyB9OwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svSW5iYW5kRGF0YVRleHRUcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suY3BwCmluZGV4IDBjMDRmM2MxYjVmMTcyZTcy
ZGNmM2ZhNWUzNWJiMGU5NzMyMDg2NTEuLjRkNjBkNmJhMDg0ZTc2YmQ3YmQ5MTA4OGRlMzQ2NTc5
ZTczNTgyM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kRGF0
YVRleHRUcmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmREYXRh
VGV4dFRyYWNrLmNwcApAQCAtMTI1LDcgKzEyNSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEluYmFu
ZERhdGFUZXh0VHJhY2s6OnJlbW92ZUN1ZShUZXh0VHJhY2tDdWUmIGN1ZSkKIHsKICAgICBBU1NF
UlQoY3VlLmN1ZVR5cGUoKSA9PSBUZXh0VHJhY2tDdWU6OkRhdGEpOwogCi0gICAgaWYgKGF1dG8g
cGxhdGZvcm1WYWx1ZSA9IGNvbnN0X2Nhc3Q8U2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZSo+KHRv
RGF0YUN1ZSgmY3VlKS0+cGxhdGZvcm1WYWx1ZSgpKSkKKyAgICBpZiAoYXV0byBwbGF0Zm9ybVZh
bHVlID0gY29uc3RfY2FzdDxTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlKj4oZG93bmNhc3Q8RGF0
YUN1ZT4oY3VlKS5wbGF0Zm9ybVZhbHVlKCkpKQogICAgICAgICByZW1vdmVEYXRhQ3VlKHsgfSwg
eyB9LCAqcGxhdGZvcm1WYWx1ZSk7CiAKICAgICByZXR1cm4gSW5iYW5kVGV4dFRyYWNrOjpyZW1v
dmVDdWUoY3VlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5k
R2VuZXJpY1RleHRUcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZEdl
bmVyaWNUZXh0VHJhY2suY3BwCmluZGV4IDI2Mjg5NGYyZTEzMjU5ZDQ0ODI4ODFlNTFlMGM0NTYw
YTllNWEwM2YuLjY1MWJiYzFiMDc0YWM4M2NhMjhmNDYxYmIxZjRlNDk3YjdiZTk1NzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFjay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmljVGV4dFRyYWNr
LmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogCi0jaW5j
bHVkZSAiRGF0YUN1ZS5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9Mb2FkYWJsZVRleHRUcmFjay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAppbmRleCA3YTFl
MWJjNDY5MWIyMTE2ODhjM2NmNWRhNjE5YWM2MWRiZDZmZTBhLi5jZWIwMmNmNGJlNDUzYzBkNjQx
OTI3OWZkNDdlOWU1NDliNjY2NTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0xvYWRhYmxlVGV4dFRyYWNrLmNwcApAQCAtNDMsNyArNDMsNiBAQCBMb2FkYWJsZVRleHRUcmFj
azo6TG9hZGFibGVUZXh0VHJhY2soSFRNTFRyYWNrRWxlbWVudCYgdHJhY2ssIGNvbnN0IFN0cmlu
ZyYga2luZAogICAgIDogVGV4dFRyYWNrKCZ0cmFjay5kb2N1bWVudCgpLCAmdHJhY2ssIGtpbmQs
IGVtcHR5U3RyaW5nKCksIGxhYmVsLCBsYW5ndWFnZSwgVHJhY2tFbGVtZW50KQogICAgICwgbV90
cmFja0VsZW1lbnQoJnRyYWNrKQogICAgICwgbV9sb2FkVGltZXIoKnRoaXMsICZMb2FkYWJsZVRl
eHRUcmFjazo6bG9hZFRpbWVyRmlyZWQpCi0gICAgLCBtX2lzRGVmYXVsdChmYWxzZSkKIHsKIH0K
IApAQCAtOTMsMTYgKzkyLDEzIEBAIHZvaWQgTG9hZGFibGVUZXh0VHJhY2s6Om5ld0N1ZXNBdmFp
bGFibGUoVGV4dFRyYWNrTG9hZGVyJiBsb2FkZXIpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChsb2Fk
ZXIsIG1fbG9hZGVyLmdldCgpID09ICZsb2FkZXIpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxUZXh0
VHJhY2tDdWU+PiBuZXdDdWVzOwotICAgIG1fbG9hZGVyLT5nZXROZXdDdWVzKG5ld0N1ZXMpOwot
CiAgICAgaWYgKCFtX2N1ZXMpCiAgICAgICAgIG1fY3VlcyA9IFRleHRUcmFja0N1ZUxpc3Q6OmNy
ZWF0ZSgpOyAgICAKIAotICAgIGZvciAoYXV0byYgbmV3Q3VlIDogbmV3Q3VlcykgeworICAgIGZv
ciAoYXV0byYgbmV3Q3VlIDogbV9sb2FkZXItPmdldE5ld0N1ZXMoKSkgewogICAgICAgICBuZXdD
dWUtPnNldFRyYWNrKHRoaXMpOwotICAgICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSLCAqdG9W
VFRDdWUobmV3Q3VlLmdldCgpKSk7Ci0gICAgICAgIG1fY3Vlcy0+YWRkKG5ld0N1ZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgbmV3Q3VlLmdldCgp
KTsKKyAgICAgICAgbV9jdWVzLT5hZGQoV1RGTW92ZShuZXdDdWUpKTsKICAgICB9CiAKICAgICBp
ZiAoY2xpZW50KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAKaW5kZXgg
ZmY2ZWM4YmFiMDY0NGM1NmU2ZWRlNjU4NGYxYmM1MjMwMTc1OTk2MC4uM2ZlMDU0MDJlNDU5Njcz
N2JhNzA0YzVlMTgzODM4ZTU3MTBlOWYxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9UZXh0VHJhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4
dFRyYWNrLmNwcApAQCAtMzQsNiArMzQsNyBAQAogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQog
CisjaW5jbHVkZSAiRGF0YUN1ZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RXZlbnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCkBAIC0zMDEsNyArMzAyLDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gVGV4dFRyYWNrOjphZGRDdWUoUmVmPFRleHRUcmFja0N1ZT4m
JiBjdWUpCiAgICAgLy8gSWYgYSBEYXRhQ3VlIGlzIGFkZGVkIHRvIGEgVGV4dFRyYWNrIHZpYSB0
aGUgYWRkQ3VlKCkgbWV0aG9kIGJ1dCB0aGUgdGV4dCB0cmFjayBkb2VzIG5vdCBoYXZlIGl0cyB0
ZXh0CiAgICAgLy8gdHJhY2sga2luZCBzZXQgdG8gbWV0YWRhdGEsIHRocm93IGEgSW52YWxpZE5v
ZGVUeXBlRXJyb3IgZXhjZXB0aW9uIGFuZCBkb24ndCBhZGQgdGhlIGN1ZSB0byB0aGUgVGV4dFRy
YWNrTGlzdAogICAgIC8vIG9mIHRoZSBUZXh0VHJhY2suCi0gICAgaWYgKGN1ZS0+Y3VlVHlwZSgp
ID09IFRleHRUcmFja0N1ZTo6RGF0YSAmJiBtX2tpbmQgIT0gS2luZDo6TWV0YWRhdGEpCisgICAg
aWYgKGlzPERhdGFDdWU+KGN1ZS5nZXQoKSkgJiYgbV9raW5kICE9IEtpbmQ6Ok1ldGFkYXRhKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKIAogICAg
IElORk9fTE9HKExPR0lERU5USUZJRVIsIGN1ZS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKaW5kZXggOWY5MmU4ODRiMDcxZGM5NzQ5OTM0Njg0NTFj
N2UzYmYyNjFmNTI5My4uZmEzN2RiODQ0N2MyYmJmMTRkYjdkMmQ2OGEyZjNiMzc1Yzc3ZWQ1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcApAQCAtMTgzLDI3
ICsxODMsMjYgQEAgc3RhdGljIHZvaWQgcmVtb3ZlUHNldWRvQXR0cmlidXRlcyhOb2RlJiBub2Rl
KQogICAgICAgICByZW1vdmVQc2V1ZG9BdHRyaWJ1dGVzKCpjaGlsZCk7CiB9CiAKLUV4Y2VwdGlv
bk9yPFJlZjxUZXh0VHJhY2tDdWU+PiBUZXh0VHJhY2tDdWU6OmNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIERvY3VtZW50RnJh
Z21lbnQmIGN1ZURvY3VtZW50KQorRXhjZXB0aW9uT3I8UmVmPFRleHRUcmFja0N1ZT4+IFRleHRU
cmFja0N1ZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGRvdWJsZSBz
dGFydCwgZG91YmxlIGVuZCwgRG9jdW1lbnRGcmFnbWVudCYgY3VlRnJhZ21lbnQpCiB7Ci0gICAg
QVNTRVJUKGNvbnRleHQuaXNEb2N1bWVudCgpKTsKLSAgICBBU1NFUlQoaXM8RG9jdW1lbnRGcmFn
bWVudD4oY3VlRG9jdW1lbnQpKTsKKyAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50Pihjb250ZXh0KTsKIAotICAgIGlmICghY3VlRG9jdW1lbnQuZmlyc3RDaGlsZCgpKQorICAg
IGlmICghY3VlRnJhZ21lbnQuZmlyc3RDaGlsZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZE5vZGVUeXBlRXJyb3IsICJFbXB0eSBjdWUgZnJhZ21lbnQiIH07CiAKLSAgICBm
b3IgKE5vZGUqIG5vZGUgPSBjdWVEb2N1bWVudC5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBu
b2RlLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gY3VlRnJhZ21lbnQu
Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewogICAgICAg
ICBhdXRvIHJlc3VsdCA9IGNoZWNrRm9ySW52YWxpZE5vZGVUeXBlcygqbm9kZSk7CiAgICAgICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKTsKICAgICB9CiAKLSAgICBhdXRvIGZyYWdtZW50ID0gRG9jdW1lbnRG
cmFnbWVudDo6Y3JlYXRlKGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KSk7Ci0gICAgZm9yIChO
b2RlKiBub2RlID0gY3VlRG9jdW1lbnQuZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+
bmV4dFNpYmxpbmcoKSkgeworICAgIGF1dG8gZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50Ojpj
cmVhdGUoZG9jdW1lbnQpOworICAgIGZvciAoTm9kZSogbm9kZSA9IGN1ZUZyYWdtZW50LmZpcnN0
Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgYXV0
byByZXN1bHQgPSBmcmFnbWVudC0+ZW5zdXJlUHJlSW5zZXJ0aW9uVmFsaWRpdHkoKm5vZGUsIG51
bGxwdHIpOwogICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgfQotICAgIGN1ZURvY3VtZW50
LmNsb25lQ2hpbGROb2RlcyhmcmFnbWVudCk7CisgICAgY3VlRnJhZ21lbnQuY2xvbmVDaGlsZE5v
ZGVzKGZyYWdtZW50KTsKIAogICAgIE9wdGlvblNldDxSZXF1aXJlZE5vZGVzPiBub2RlVHlwZXMg
PSB7IH07CiAgICAgZm9yIChOb2RlKiBub2RlID0gZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsgbm9k
ZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpCkBAIC0yMTQsMjEgKzIxMywyNyBAQCBFeGNl
cHRpb25PcjxSZWY8VGV4dFRyYWNrQ3VlPj4gVGV4dFRyYWNrQ3VlOjpjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udAogICAgIGlmICghbm9kZVR5cGVzLmNvbnRhaW5zKFJlcXVpcmVk
Tm9kZXM6OkN1ZUJhY2tncm91bmQpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZFN0YXRlRXJyb3IsIG1ha2VTdHJpbmcoIk1pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlOiAiLCBj
dWVCYWNrZ3JvdW5kQXR0cmlidXROYW1lKCkudG9TdHJpbmcoKSkgfTsKIAotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFRleHRUcmFja0N1ZShjb250ZXh0LCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhE
b3VibGUoc3RhcnQpLCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoZW5kKSwgV1RGTW92ZShm
cmFnbWVudC5nZXQoKSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0VHJhY2tDdWUo
ZG9jdW1lbnQsIE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShzdGFydCksIE1lZGlhVGltZTo6
Y3JlYXRlV2l0aERvdWJsZShlbmQpLCBXVEZNb3ZlKGZyYWdtZW50KSkpOwogfQogCi1UZXh0VHJh
Y2tDdWU6OlRleHRUcmFja0N1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25z
dCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgRG9jdW1lbnRGcmFnbWVu
dCYmIGN1ZUZyYWdtZW50KQotICAgIDogVGV4dFRyYWNrQ3VlKGNvbnRleHQsIHN0YXJ0LCBlbmQp
CitUZXh0VHJhY2tDdWU6OlRleHRUcmFja0N1ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IE1l
ZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBSZWY8RG9jdW1lbnRGcmFnbWVu
dD4mJiBjdWVGcmFnbWVudCkKKyAgICA6IG1fc3RhcnRUaW1lKHN0YXJ0KQorICAgICwgbV9lbmRU
aW1lKGVuZCkKKyAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX2N1ZU5vZGUoV1RG
TW92ZShjdWVGcmFnbWVudCkpCiB7Ci0gICAgbV9jdWVOb2RlID0gJmN1ZUZyYWdtZW50OwogfQog
CiBUZXh0VHJhY2tDdWU6OlRleHRUcmFja0N1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCkKICAgICA6
IG1fc3RhcnRUaW1lKHN0YXJ0KQogICAgICwgbV9lbmRUaW1lKGVuZCkKLSAgICAsIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQorICAgICwgbV9kb2N1bWVudChkb3duY2FzdDxEb2N1
bWVudD4oY29udGV4dCkpCit7Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFRleHRUcmFj
a0N1ZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5pc0RvY3VtZW50KCkpOworICAgIHJldHVybiAmbV9kb2N1bWVu
dDsKIH0KIAogdm9pZCBUZXh0VHJhY2tDdWU6OndpbGxDaGFuZ2UoKQpAQCAtMzYzLDMwICszNjgs
MTYgQEAgYm9vbCBUZXh0VHJhY2tDdWU6OmlzT3JkZXJlZEJlZm9yZShjb25zdCBUZXh0VHJhY2tD
dWUqIG90aGVyKSBjb25zdAogICAgIHJldHVybiBjdWVJbmRleCgpIDwgb3RoZXItPmN1ZUluZGV4
KCk7CiB9CiAKLWJvb2wgVGV4dFRyYWNrQ3VlOjpjdWVDb250ZW50c01hdGNoKGNvbnN0IFRleHRU
cmFja0N1ZSYgY3VlKSBjb25zdAorYm9vbCBUZXh0VHJhY2tDdWU6OmN1ZUNvbnRlbnRzTWF0Y2go
Y29uc3QgVGV4dFRyYWNrQ3VlJiBvdGhlcikgY29uc3QKIHsKLSAgICBpZiAoY3VlVHlwZSgpICE9
IGN1ZS5jdWVUeXBlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpZCgpICE9
IGN1ZS5pZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gbV9pZCA9PSBvdGhlci5tX2lkOwogfQogCi1ib29sIFRleHRUcmFja0N1ZTo6aXNF
cXVhbChjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSwgVGV4dFRyYWNrQ3VlOjpDdWVNYXRjaFJ1bGVz
IG1hdGNoKSBjb25zdAorYm9vbCBUZXh0VHJhY2tDdWU6OmlzRXF1YWwoY29uc3QgVGV4dFRyYWNr
Q3VlJiBvdGhlciwgVGV4dFRyYWNrQ3VlOjpDdWVNYXRjaFJ1bGVzIG1hdGNoKSBjb25zdAogewot
ICAgIGlmIChjdWVUeXBlKCkgIT0gY3VlLmN1ZVR5cGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKG1hdGNoICE9IElnbm9yZUR1cmF0aW9uICYmIGVuZE1lZGlhVGltZSgpICE9
IGN1ZS5lbmRNZWRpYVRpbWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghaGFz
RXF1aXZhbGVudFN0YXJ0VGltZShjdWUpKQorICAgIGlmIChtYXRjaCAhPSBJZ25vcmVEdXJhdGlv
biAmJiBlbmRNZWRpYVRpbWUoKSAhPSBvdGhlci5lbmRNZWRpYVRpbWUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghY3VlQ29udGVudHNNYXRjaChjdWUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gY3VlVHlwZSgpID09IG90
aGVyLmN1ZVR5cGUoKSAmJiBoYXNFcXVpdmFsZW50U3RhcnRUaW1lKG90aGVyKSAmJiBjdWVDb250
ZW50c01hdGNoKG90aGVyKTsKIH0KIAogYm9vbCBUZXh0VHJhY2tDdWU6Omhhc0VxdWl2YWxlbnRT
dGFydFRpbWUoY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0CkBAIC00MDAsMTcgKzM5MSw2
IEBAIGJvb2wgVGV4dFRyYWNrQ3VlOjpoYXNFcXVpdmFsZW50U3RhcnRUaW1lKGNvbnN0IFRleHRU
cmFja0N1ZSYgY3VlKSBjb25zdAogICAgIHJldHVybiBhYnMoYWJzKHN0YXJ0TWVkaWFUaW1lKCkp
IC0gYWJzKGN1ZS5zdGFydE1lZGlhVGltZSgpKSkgPD0gc3RhcnRUaW1lVmFyaWFuY2U7CiB9CiAK
LWJvb2wgVGV4dFRyYWNrQ3VlOjpkb2VzRXh0ZW5kQ3VlKGNvbnN0IFRleHRUcmFja0N1ZSYgY3Vl
KSBjb25zdAotewotICAgIGlmICghY3VlQ29udGVudHNNYXRjaChjdWUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoZW5kTWVkaWFUaW1lKCkgIT0gY3VlLnN0YXJ0TWVkaWFUaW1l
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
dm9pZCBUZXh0VHJhY2tDdWU6OnRvSlNPTihKU09OOjpPYmplY3QmIHZhbHVlKSBjb25zdAogewog
ICAgIEFTQ0lJTGl0ZXJhbCB0eXBlID0gIkdlbmVyaWMiX3M7CkBAIC00MzcsOSArNDE3LDcgQEAg
dm9pZCBUZXh0VHJhY2tDdWU6OnRvSlNPTihKU09OOjpPYmplY3QmIHZhbHVlKSBjb25zdAogU3Ry
aW5nIFRleHRUcmFja0N1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKIHsKICAgICBhdXRvIG9iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0KICAgICB0b0pTT04ob2JqZWN0LmdldCgpKTsK
LQogICAgIHJldHVybiBvYmplY3QtPnRvSlNPTlN0cmluZygpOwogfQogCkBAIC00NDksNyArNDI3
LDcgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IFRl
eHRUcmFja0N1ZSYgY3VlKQogewogICAgIFN0cmluZyB0ZXh0OwogICAgIGlmIChpczxWVFRDdWU+
KGN1ZSkpCi0gICAgICAgIHRleHQgPSB0b1ZUVEN1ZSgmY3VlKS0+dGV4dCgpOworICAgICAgICB0
ZXh0ID0gZG93bmNhc3Q8VlRUQ3VlPihjdWUpLnRleHQoKTsKICAgICByZXR1cm4gc3RyZWFtIDw8
ICZjdWUgPDwgIiBpZD0iIDw8IGN1ZS5pZCgpIDw8ICIgaW50ZXJ2YWw9IiA8PCBjdWUuc3RhcnRU
aW1lKCkgPDwgIi0tPiIgPDwgY3VlLmVuZFRpbWUoKSA8PCAiIGN1ZT0iIDw8IHRleHQgPDwgJykn
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1
ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAppbmRleCA2ZjNl
ZWFiY2FkOWYyZjc4MmU4OTc2ZmFkNjg5ZGUwMmUwYzVkNWFhLi5jNmU3MzhiMDViNmRiZGMxMzg4
ZDJmY2Q4ZjA3MmJkNTVlYjg0ZTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL1RleHRUcmFja0N1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrQ3VlLmgKQEAgLTMzLDcgKzMzLDYgQEAKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIAot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KQEAgLTEw
NywxMyArMTA2LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJhYmxlKCkg
Y29uc3Q7CiAKICAgICBlbnVtIEN1ZU1hdGNoUnVsZXMgeyBNYXRjaEFsbEZpZWxkcywgSWdub3Jl
RHVyYXRpb24gfTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNFcXVhbChjb25zdCBUZXh0VHJhY2tDdWUm
LCBDdWVNYXRjaFJ1bGVzKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZG9lc0V4dGVuZEN1ZShj
b25zdCBUZXh0VHJhY2tDdWUmKSBjb25zdDsKKyAgICBib29sIGlzRXF1YWwoY29uc3QgVGV4dFRy
YWNrQ3VlJiwgQ3VlTWF0Y2hSdWxlcykgY29uc3Q7CiAKICAgICB2b2lkIHdpbGxDaGFuZ2UoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlKCk7CiAKLSAgICB2aXJ0dWFsIFJlZlB0cjxUZXh0
VHJhY2tDdWVCb3g+IGdldERpc3BsYXlUcmVlKGNvbnN0IEludFNpemUmLCBpbnQpOworICAgIHZp
cnR1YWwgUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gZ2V0RGlzcGxheVRyZWUoY29uc3QgSW50U2l6
ZSYgdmlkZW9TaXplLCBpbnQgZm9udFNpemUpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVEaXNw
bGF5VHJlZSgpOwogCiAgICAgdmlydHVhbCBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZ2V0Q3Vl
QXNIVE1MKCk7CkBAIC0xMjQsMjAgKzEyMiwyMiBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVmQ291
bnRlZDo6ZGVyZWY7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjdWxhdGVTdHlsZXMoKSB7IG1f
ZGlzcGxheVRyZWVOZWVkc1VwZGF0ZSA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9u
dFNpemUoaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBpbXBvcnRhbnQpOwotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVEaXNwbGF5VHJlZShjb25zdCBNZWRpYVRpbWUmKSB7IH07CisgICAgdmlydHVh
bCB2b2lkIHNldEZvbnRTaXplKGludCBmb250U2l6ZSwgY29uc3QgSW50U2l6ZSYgdmlkZW9TaXpl
LCBib29sIGltcG9ydGFudCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlUcmVlKGNv
bnN0IE1lZGlhVGltZSYpIHsgfQogCiAgICAgdW5zaWduZWQgY3VlSW5kZXgoKSBjb25zdDsKIAog
cHJvdGVjdGVkOgotICAgIFRleHRUcmFja0N1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29u
c3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIERvY3VtZW50RnJhZ21l
bnQmJik7CiAgICAgVGV4dFRyYWNrQ3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBN
ZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCk7CiAKLSAgICBEb2N1bWVudCYg
b3duZXJEb2N1bWVudCgpIHsgcmV0dXJuIGRvd25jYXN0PERvY3VtZW50PihtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpOyB9CisgICAgRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQoKSB7IHJldHVybiBt
X2RvY3VtZW50OyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgY3VlQ29udGVudHNNYXRjaChjb25zdCBU
ZXh0VHJhY2tDdWUmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgdG9KU09OKEpTT046Ok9iamVj
dCYpIGNvbnN0OwogCiBwcml2YXRlOgorICAgIFRleHRUcmFja0N1ZShEb2N1bWVudCYsIGNvbnN0
IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBSZWY8RG9jdW1lbnRGcmFn
bWVudD4mJik7CisKICAgICB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgZmluYWwgeyByZWYoKTsgfQog
ICAgIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgZGVyZWYoKTsgfQogCkBAIC0xNDUs
OSArMTQ1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBmaW5h
bDsKIAogICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gVGV4dFRyYWNrQ3VlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9
Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuICZtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7IH0KLQotICAgIHZp
cnR1YWwgYm9vbCBjdWVDb250ZW50c01hdGNoKGNvbnN0IFRleHRUcmFja0N1ZSYpIGNvbnN0Owor
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dCBmaW5hbDsKIAogICAgIHZvaWQgcmVidWlsZERpc3BsYXlUcmVlKCk7CiAKQEAgLTE1OCw3ICsx
NTYsNyBAQCBwcml2YXRlOgogCiAgICAgVGV4dFRyYWNrKiBtX3RyYWNrIHsgbnVsbHB0ciB9Owog
Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Owor
ICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwogCiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IG1fY3VlTm9kZTsKICAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBtX2Rpc3BsYXlUcmVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmlj
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAK
aW5kZXggOTgyZjI4Njc3OGNmZDYxNGYxY2EyMWM3M2I4OTA4NzU2MDhhMDI3Yi4uZWVmZWNhYWY1
ZDliYmFkNzQxMTBjZWNmMzE0N2U3ZGZhYjlhMWM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwCkBAIC0zOCw3ICszOCw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgotI2luY2x1ZGUgIlRleHRUcmFja0N1
ZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KIApAQCAtMTU1LDEwICsxNTQsMTMgQEAgdm9pZCBUZXh0VHJhY2tDdWVHZW5l
cmljQm94RWxlbWVudDo6YXBwbHlDU1NQcm9wZXJ0aWVzKGNvbnN0IEludFNpemUmIHZpZGVvU2l6
ZSkKICAgICBjdWVFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5T3Zl
cmZsb3csIENTU1ZhbHVlVmlzaWJsZSk7CiB9CiAKLVRleHRUcmFja0N1ZUdlbmVyaWM6OlRleHRU
cmFja0N1ZUdlbmVyaWMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgTWVk
aWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVu
dCkKLSAgICA6IFZUVEN1ZShjb250ZXh0LCBzdGFydCwgZW5kLCBjb250ZW50KQotICAgICwgbV9i
YXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQoMCkKLSAgICAsIG1fZm9udFNpemVNdWx0
aXBsaWVyKDApCitSZWY8VGV4dFRyYWNrQ3VlR2VuZXJpYz4gVGV4dFRyYWNrQ3VlR2VuZXJpYzo6
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYg
c3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dFRyYWNrQ3VlR2VuZXJpYyhkb3duY2FzdDxEb2N1
bWVudD4oY29udGV4dCksIHN0YXJ0LCBlbmQsIGNvbnRlbnQpKTsKK30KKworVGV4dFRyYWNrQ3Vl
R2VuZXJpYzo6VGV4dFRyYWNrQ3VlR2VuZXJpYyhEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IE1l
ZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRl
bnQpCisgICAgOiBWVFRDdWUoZG9jdW1lbnQsIHN0YXJ0LCBlbmQsIGNvbnRlbnQpCiB7CiB9CiAK
QEAgLTE5OSw0OSArMjAxLDE1IEBAIHZvaWQgVGV4dFRyYWNrQ3VlR2VuZXJpYzo6c2V0Rm9udFNp
emUoaW50IGZvbnRTaXplLCBjb25zdCBJbnRTaXplJiB2aWRlb1NpemUsIGJvCiAgICAgZGlzcGxh
eVRyZWVJbnRlcm5hbCgpLnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6
ZSwgbHJvdW5kKHNpemUpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKIH0KIAotYm9vbCBUZXh0VHJh
Y2tDdWVHZW5lcmljOjpjdWVDb250ZW50c01hdGNoKGNvbnN0IFRleHRUcmFja0N1ZSYgY3VlKSBj
b25zdAotewotICAgIC8vIERvIGNhbGwgdGhlIHBhcmVudCBjbGFzcyBjdWVDb250ZW50c01hdGNo
IGhlcmUsIGJlY2F1c2Ugd2Ugd2FudCB0byBjb25maXJtCi0gICAgLy8gdGhlIGNvbnRlbnQgb2Yg
dGhlIHR3byBjdWVzIGFyZSBpZGVudGljYWwgKGV2ZW4gdGhvdWdoIHRoZSB0eXBlcyBhcmUgbm90
IHRoZSBzYW1lKS4KLSAgICBpZiAoIVZUVEN1ZTo6Y3VlQ29udGVudHNNYXRjaChjdWUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgY29uc3QgVGV4dFRyYWNrQ3VlR2VuZXJpYyog
b3RoZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBUZXh0VHJhY2tDdWVHZW5lcmljKj4oJmN1ZSk7Ci0K
LSAgICBpZiAobV9iYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQgIT0gb3RoZXItPmJh
c2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKG1fZm9udFNpemVNdWx0aXBsaWVyICE9IG90aGVyLT5mb250U2l6ZU11bHRpcGxp
ZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2ZvbnROYW1lICE9IG90aGVy
LT5mb250TmFtZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fZm9yZWdyb3Vu
ZENvbG9yICE9IG90aGVyLT5mb3JlZ3JvdW5kQ29sb3IoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChtX2JhY2tncm91bmRDb2xvciAhPSBvdGhlci0+YmFja2dyb3VuZENvbG9yKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRl
eHRUcmFja0N1ZUdlbmVyaWM6OmlzRXF1YWwoY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUsIFRleHRU
cmFja0N1ZTo6Q3VlTWF0Y2hSdWxlcyBtYXRjaCkgY29uc3QKLXsKLSAgICAvLyBEbyBub3QgY2Fs
bCB0aGUgcGFyZW50IGNsYXNzIGlzRXF1YWwgaGVyZSwgYmVjYXVzZSB3ZSBhcmUgbm90IGN1ZVR5
cGUoKSA9PSBWVFRDdWUsCi0gICAgLy8gYW5kIHdpbGwgZmFpbCB0aGF0IGVxdWFsaXR5IHRlc3Qu
Ci0gICAgaWYgKCFUZXh0VHJhY2tDdWU6OmlzRXF1YWwoY3VlLCBtYXRjaCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChjdWUuY3VlVHlwZSgpICE9IFRleHRUcmFja0N1ZTo6Q29u
dmVydGVkVG9XZWJWVFQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBjdWVD
b250ZW50c01hdGNoKGN1ZSk7Ci19Ci0KLSAgICAKLWJvb2wgVGV4dFRyYWNrQ3VlR2VuZXJpYzo6
ZG9lc0V4dGVuZEN1ZShjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkgY29uc3QKK2Jvb2wgVGV4dFRy
YWNrQ3VlR2VuZXJpYzo6Y3VlQ29udGVudHNNYXRjaChjb25zdCBUZXh0VHJhY2tDdWUmIG90aGVy
VGV4dFRyYWNrQ3VlKSBjb25zdAogewotICAgIGlmICghY3VlQ29udGVudHNNYXRjaChjdWUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIFZUVEN1ZTo6ZG9lc0V4dGVu
ZEN1ZShjdWUpOworICAgIGF1dG8mIG90aGVyID0gZG93bmNhc3Q8VGV4dFRyYWNrQ3VlR2VuZXJp
Yz4ob3RoZXJUZXh0VHJhY2tDdWUpOworICAgIHJldHVybiBWVFRDdWU6OmN1ZUNvbnRlbnRzTWF0
Y2gob3RoZXIpCisgICAgICAgICYmIG1fYmFzZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0
ID09IG90aGVyLm1fYmFzZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0CisgICAgICAgICYm
IG1fZm9udFNpemVNdWx0aXBsaWVyID09IG90aGVyLm1fZm9udFNpemVNdWx0aXBsaWVyCisgICAg
ICAgICYmIG1fZm9udE5hbWUgPT0gb3RoZXIubV9mb250TmFtZQorICAgICAgICAmJiBtX2ZvcmVn
cm91bmRDb2xvciA9PSBvdGhlci5tX2ZvcmVncm91bmRDb2xvcgorICAgICAgICAmJiBtX2JhY2tn
cm91bmRDb2xvciA9PSBvdGhlci5tX2JhY2tncm91bmRDb2xvcjsKIH0KIAogYm9vbCBUZXh0VHJh
Y2tDdWVHZW5lcmljOjppc09yZGVyZWRCZWZvcmUoY29uc3QgVGV4dFRyYWNrQ3VlKiB0aGF0KSBj
b25zdApAQCAtMjQ5LDEwICsyMTcsMTAgQEAgYm9vbCBUZXh0VHJhY2tDdWVHZW5lcmljOjppc09y
ZGVyZWRCZWZvcmUoY29uc3QgVGV4dFRyYWNrQ3VlKiB0aGF0KSBjb25zdAogICAgIGlmIChWVFRD
dWU6OmlzT3JkZXJlZEJlZm9yZSh0aGF0KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBp
ZiAodGhhdC0+Y3VlVHlwZSgpID09IENvbnZlcnRlZFRvV2ViVlRUICYmIHN0YXJ0VGltZSgpID09
IHRoYXQtPnN0YXJ0VGltZSgpICYmIGVuZFRpbWUoKSA9PSB0aGF0LT5lbmRUaW1lKCkpIHsKKyAg
ICBpZiAoaXM8VGV4dFRyYWNrQ3VlR2VuZXJpYz4oKnRoYXQpICYmIHN0YXJ0VGltZSgpID09IHRo
YXQtPnN0YXJ0VGltZSgpICYmIGVuZFRpbWUoKSA9PSB0aGF0LT5lbmRUaW1lKCkpIHsKICAgICAg
ICAgLy8gRnVydGhlciBvcmRlciBnZW5lcmljIGN1ZXMgYnkgdGhlaXIgY2FsY3VsYXRlZCBsaW5l
IHZhbHVlLgogICAgICAgICBzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+IHRoaXNQb3NpdGlvbiA9
IGdldFBvc2l0aW9uQ29vcmRpbmF0ZXMoKTsKLSAgICAgICAgc3RkOjpwYWlyPGRvdWJsZSwgZG91
YmxlPiB0aGF0UG9zaXRpb24gPSB0b1ZUVEN1ZSh0aGF0KS0+Z2V0UG9zaXRpb25Db29yZGluYXRl
cygpOworICAgICAgICBzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+IHRoYXRQb3NpdGlvbiA9IGRv
d25jYXN0PFRleHRUcmFja0N1ZUdlbmVyaWM+KCp0aGF0KS5nZXRQb3NpdGlvbkNvb3JkaW5hdGVz
KCk7CiAgICAgICAgIHJldHVybiB0aGlzUG9zaXRpb24uc2Vjb25kID4gdGhhdFBvc2l0aW9uLnNl
Y29uZCB8fCAodGhpc1Bvc2l0aW9uLnNlY29uZCA9PSB0aGF0UG9zaXRpb24uc2Vjb25kICYmIHRo
aXNQb3NpdGlvbi5maXJzdCA8IHRoYXRQb3NpdGlvbi5maXJzdCk7CiAgICAgfQogCkBAIC0yNjEs
MzkgKzIyOSwzMyBAQCBib29sIFRleHRUcmFja0N1ZUdlbmVyaWM6OmlzT3JkZXJlZEJlZm9yZShj
b25zdCBUZXh0VHJhY2tDdWUqIHRoYXQpIGNvbnN0CiAKIGJvb2wgVGV4dFRyYWNrQ3VlR2VuZXJp
Yzo6aXNQb3NpdGlvbmVkQWJvdmUoY29uc3QgVGV4dFRyYWNrQ3VlKiB0aGF0KSBjb25zdAogewot
ICAgIGlmICh0aGF0LT5jdWVUeXBlKCkgPT0gQ29udmVydGVkVG9XZWJWVFQgJiYgc3RhcnRUaW1l
KCkgPT0gdGhhdC0+c3RhcnRUaW1lKCkgJiYgZW5kVGltZSgpID09IHRoYXQtPmVuZFRpbWUoKSkg
ewotICAgICAgICAvLyBGdXJ0aGVyIG9yZGVyIGdlbmVyaWMgY3VlcyBieSB0aGVpciBjYWxjdWxh
dGVkIGxpbmUgdmFsdWUuCi0gICAgICAgIHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4gdGhpc1Bv
c2l0aW9uID0gZ2V0UG9zaXRpb25Db29yZGluYXRlcygpOwotICAgICAgICBzdGQ6OnBhaXI8ZG91
YmxlLCBkb3VibGU+IHRoYXRQb3NpdGlvbiA9IHRvVlRUQ3VlKHRoYXQpLT5nZXRQb3NpdGlvbkNv
b3JkaW5hdGVzKCk7Ci0gICAgICAgIHJldHVybiB0aGlzUG9zaXRpb24uc2Vjb25kID4gdGhhdFBv
c2l0aW9uLnNlY29uZCB8fCAodGhpc1Bvc2l0aW9uLnNlY29uZCA9PSB0aGF0UG9zaXRpb24uc2Vj
b25kICYmIHRoaXNQb3NpdGlvbi5maXJzdCA8IHRoYXRQb3NpdGlvbi5maXJzdCk7Ci0gICAgfQot
ICAgIAotICAgIGlmICh0aGF0LT5jdWVUeXBlKCkgPT0gQ29udmVydGVkVG9XZWJWVFQpCisgICAg
aWYgKGlzPFRleHRUcmFja0N1ZUdlbmVyaWM+KCp0aGF0KSkgeworICAgICAgICBpZiAoc3RhcnRU
aW1lKCkgPT0gdGhhdC0+c3RhcnRUaW1lKCkgJiYgZW5kVGltZSgpID09IHRoYXQtPmVuZFRpbWUo
KSkgeworICAgICAgICAgICAgLy8gRnVydGhlciBvcmRlciBnZW5lcmljIGN1ZXMgYnkgdGhlaXIg
Y2FsY3VsYXRlZCBsaW5lIHZhbHVlLgorICAgICAgICAgICAgc3RkOjpwYWlyPGRvdWJsZSwgZG91
YmxlPiB0aGlzUG9zaXRpb24gPSBnZXRQb3NpdGlvbkNvb3JkaW5hdGVzKCk7CisgICAgICAgICAg
ICBzdGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+IHRoYXRQb3NpdGlvbiA9IGRvd25jYXN0PFRleHRU
cmFja0N1ZUdlbmVyaWM+KCp0aGF0KS5nZXRQb3NpdGlvbkNvb3JkaW5hdGVzKCk7CisgICAgICAg
ICAgICByZXR1cm4gdGhpc1Bvc2l0aW9uLnNlY29uZCA+IHRoYXRQb3NpdGlvbi5zZWNvbmQgfHwg
KHRoaXNQb3NpdGlvbi5zZWNvbmQgPT0gdGhhdFBvc2l0aW9uLnNlY29uZCAmJiB0aGlzUG9zaXRp
b24uZmlyc3QgPCB0aGF0UG9zaXRpb24uZmlyc3QpOworICAgICAgICB9CiAgICAgICAgIHJldHVy
biBzdGFydFRpbWUoKSA+IHRoYXQtPnN0YXJ0VGltZSgpOwotICAgIAorICAgIH0KKwogICAgIHJl
dHVybiBWVFRDdWU6OmlzT3JkZXJlZEJlZm9yZSh0aGF0KTsKIH0KIAotU3RyaW5nIFRleHRUcmFj
a0N1ZUdlbmVyaWM6OnRvSlNPTlN0cmluZygpIGNvbnN0Cit2b2lkIFRleHRUcmFja0N1ZUdlbmVy
aWM6OnRvSlNPTihKU09OOjpPYmplY3QmIG9iamVjdCkgY29uc3QKIHsKLSAgICBhdXRvIG9iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0KLSAgICB0b0pTT04ob2JqZWN0LmdldCgpKTsK
LQogICAgIGlmIChtX2ZvcmVncm91bmRDb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG9iamVjdC0+
c2V0U3RyaW5nKCJmb3JlZ3JvdW5kQ29sb3IiX3MsIG1fZm9yZWdyb3VuZENvbG9yLnNlcmlhbGl6
ZWQoKSk7CisgICAgICAgIG9iamVjdC5zZXRTdHJpbmcoImZvcmVncm91bmRDb2xvciJfcywgbV9m
b3JlZ3JvdW5kQ29sb3Iuc2VyaWFsaXplZCgpKTsKICAgICBpZiAobV9iYWNrZ3JvdW5kQ29sb3Iu
aXNWYWxpZCgpKQotICAgICAgICBvYmplY3QtPnNldFN0cmluZygiYmFja2dyb3VuZENvbG9yIl9z
LCBtX2JhY2tncm91bmRDb2xvci5zZXJpYWxpemVkKCkpOworICAgICAgICBvYmplY3Quc2V0U3Ry
aW5nKCJiYWNrZ3JvdW5kQ29sb3IiX3MsIG1fYmFja2dyb3VuZENvbG9yLnNlcmlhbGl6ZWQoKSk7
CiAgICAgaWYgKG1faGlnaGxpZ2h0Q29sb3IuaXNWYWxpZCgpKQotICAgICAgICBvYmplY3QtPnNl
dFN0cmluZygiaGlnaGxpZ2h0Q29sb3IiX3MsIG1faGlnaGxpZ2h0Q29sb3Iuc2VyaWFsaXplZCgp
KTsKKyAgICAgICAgb2JqZWN0LnNldFN0cmluZygiaGlnaGxpZ2h0Q29sb3IiX3MsIG1faGlnaGxp
Z2h0Q29sb3Iuc2VyaWFsaXplZCgpKTsKICAgICBpZiAobV9iYXNlRm9udFNpemVSZWxhdGl2ZVRv
VmlkZW9IZWlnaHQpCi0gICAgICAgIG9iamVjdC0+c2V0RG91YmxlKCJyZWxhdGl2ZUZvbnRTaXpl
Il9zLCBtX2Jhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodCk7CisgICAgICAgIG9iamVj
dC5zZXREb3VibGUoInJlbGF0aXZlRm9udFNpemUiX3MsIG1fYmFzZUZvbnRTaXplUmVsYXRpdmVU
b1ZpZGVvSGVpZ2h0KTsKICAgICBpZiAobV9mb250U2l6ZU11bHRpcGxpZXIpCi0gICAgICAgIG9i
amVjdC0+c2V0RG91YmxlKCJmb250U2l6ZU11bHRpcGxpZXIiX3MsIG1fZm9udFNpemVNdWx0aXBs
aWVyKTsKKyAgICAgICAgb2JqZWN0LnNldERvdWJsZSgiZm9udFNpemVNdWx0aXBsaWVyIl9zLCBt
X2ZvbnRTaXplTXVsdGlwbGllcik7CiAgICAgaWYgKCFtX2ZvbnROYW1lLmlzRW1wdHkoKSkKLSAg
ICAgICAgb2JqZWN0LT5zZXRTdHJpbmcoImZvbnQiX3MsIG1fZm9udE5hbWUpOwotCi0gICAgcmV0
dXJuIG9iamVjdC0+dG9KU09OU3RyaW5nKCk7CisgICAgICAgIG9iamVjdC5zZXRTdHJpbmcoImZv
bnQiX3MsIG1fZm9udE5hbWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5oCmluZGV4IGZkMGNi
M2ViMzExOGNjM2YzM2M5YjY4ODZhYTBmNjJhMDY0ZjFkNGUuLjFmY2Q0MTk2OGFjMmU0Mzk2MTFk
NGI0YWY4Yjk0N2MxZWEzMTVkYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VGV4dFRyYWNrQ3VlR2VuZXJpYy5oCkBAIC0zMiwxNiArMzIsMTEgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBHZW5lcmljQ3VlRGF0YTsKLQogLy8gQSAiZ2VuZXJpYyIgY3VlIGlz
IGEgbm9uLVdlYlZUVCBjdWUsIHNvIGl0IGlzIG5vdCBwb3NpdGlvbmVkL3NpemVkIHdpdGggdGhl
IFdlYlZUVCBsb2dpYy4KIGNsYXNzIFRleHRUcmFja0N1ZUdlbmVyaWMgZmluYWwgOiBwdWJsaWMg
VlRUQ3VlIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0VYUE9SVChUZXh0VHJhY2tDdWVH
ZW5lcmljLCBXRUJDT1JFX0VYUE9SVCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxUZXh0VHJh
Y2tDdWVHZW5lcmljPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29u
c3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0IFN0cmluZyYg
Y29udGVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRleHRUcmFja0N1
ZUdlbmVyaWMoY29udGV4dCwgc3RhcnQsIGVuZCwgY29udGVudCkpOwotICAgIH0KKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmPFRleHRUcmFja0N1ZUdlbmVyaWM+IGNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1l
JiBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCk7CiAKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBz
ZXRMaW5lKGRvdWJsZSkgZmluYWw7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0UG9zaXRpb24o
Y29uc3QgTGluZUFuZFBvc2l0aW9uU2V0dGluZyYpIGZpbmFsOwpAQCAtNjgsMjIgKzYzLDIwIEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Rm9udFNpemUoaW50LCBjb25zdCBJbnRTaXplJiwgYm9v
bCBpbXBvcnRhbnQpIGZpbmFsOwogCi0gICAgU3RyaW5nIHRvSlNPTlN0cmluZygpIGNvbnN0Owot
CiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFRleHRUcmFja0N1ZUdlbmVyaWMoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGlt
ZSYgZW5kLCBjb25zdCBTdHJpbmcmKTsKLSAgICAKKyAgICBUZXh0VHJhY2tDdWVHZW5lcmljKERv
Y3VtZW50JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNv
bnN0IFN0cmluZyYpOworCiAgICAgYm9vbCBpc09yZGVyZWRCZWZvcmUoY29uc3QgVGV4dFRyYWNr
Q3VlKikgY29uc3QgZmluYWw7CiAgICAgYm9vbCBpc1Bvc2l0aW9uZWRBYm92ZShjb25zdCBUZXh0
VHJhY2tDdWUqKSBjb25zdCBmaW5hbDsKIAogICAgIFJlZjxWVFRDdWVCb3g+IGNyZWF0ZURpc3Bs
YXlUcmVlKCkgZmluYWw7CiAKLSAgICBib29sIGlzRXF1YWwoY29uc3QgVGV4dFRyYWNrQ3VlJiwg
Q3VlTWF0Y2hSdWxlcykgY29uc3QgZmluYWw7CiAgICAgYm9vbCBjdWVDb250ZW50c01hdGNoKGNv
bnN0IFRleHRUcmFja0N1ZSYpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZG9lc0V4dGVuZEN1ZShj
b25zdCBUZXh0VHJhY2tDdWUmKSBjb25zdCBmaW5hbDsKIAogICAgIEN1ZVR5cGUgY3VlVHlwZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIENvbnZlcnRlZFRvV2ViVlRUOyB9CiAKKyAgICB2b2lkIHRv
SlNPTihKU09OOjpPYmplY3QmKSBjb25zdCBmaW5hbDsKKwogICAgIENvbG9yIG1fZm9yZWdyb3Vu
ZENvbG9yOwogICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOwogICAgIENvbG9yIG1faGlnaGxp
Z2h0Q29sb3I7CkBAIC05NywxNiArOTAsNyBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgV1RGIHsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLXN0cnVjdCBMb2dBcmd1bWVudDsKLQotdGVtcGxh
dGUgPD4KLXN0cnVjdCBMb2dBcmd1bWVudDxXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljPiB7
Ci0gICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBXZWJDb3JlOjpUZXh0VHJhY2tDdWVH
ZW5lcmljJiBjdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY3VlLnRvSlNPTlN0cmluZygpOwot
ICAgIH0KLX07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBMb2dBcmd1bWVudDxXZWJDb3JlOjpUZXh0VHJh
Y2tDdWVHZW5lcmljPiA6IExvZ0FyZ3VtZW50PFdlYkNvcmU6OlRleHRUcmFja0N1ZT4geyB9Owog
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3Vl
TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuY3Bw
CmluZGV4IDhhMGZkMGIyMjY4ODdhNDM3YmY1YzllNjFhOWZjMmU0YjY4Njk2NGYuLjQzZGI4ZmU1
NzQ2NzczOTFhZDJhYjllNTdlNjYxZmYzYmM1MmE1YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2tDdWVMaXN0LmNwcApAQCAtNDksNiArNDksMTEgQEAgc3RhdGlj
IGlubGluZSBib29sIGN1ZVNvcnRzQmVmb3JlKGNvbnN0IFJlZlB0cjxUZXh0VHJhY2tDdWU+JiBh
LCBjb25zdCBSZWZQdHI8VGUKICAgICByZXR1cm4gYS0+c3RhcnRNZWRpYVRpbWUoKSA9PSBiLT5z
dGFydE1lZGlhVGltZSgpICYmIGEtPmVuZE1lZGlhVGltZSgpID4gYi0+ZW5kTWVkaWFUaW1lKCk7
CiB9CiAKK1JlZjxUZXh0VHJhY2tDdWVMaXN0PiBUZXh0VHJhY2tDdWVMaXN0OjpjcmVhdGUoKQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRleHRUcmFja0N1ZUxpc3QpOworfQorCiB1bnNp
Z25lZCBUZXh0VHJhY2tDdWVMaXN0OjpjdWVJbmRleChjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkg
Y29uc3QKIHsKICAgICBBU1NFUlQobV92ZWN0b3IuY29udGFpbnMoJmN1ZSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVMaXN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuaAppbmRleCBjNGY3ODZiYjgyZTg2
YWY5NTEzYTNkMWQ1MTJhZjdiMjk5NzE0ZDMyLi42NmZmMDhlODVmMzVjNGIzMDRjYzNlM2JhOTQx
NDhkMTY0NWM2NDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFja0N1ZUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1
ZUxpc3QuaApAQCAtNTcsMTEgKzU3LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8VGV4dFRyYWNr
Q3VlTGlzdD4gbV9hY3RpdmVDdWVzOwogfTsKIAotaW5saW5lIFJlZjxUZXh0VHJhY2tDdWVMaXN0
PiBUZXh0VHJhY2tDdWVMaXN0OjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFRleHRUcmFja0N1ZUxpc3QpOwotfQotCiBpbmxpbmUgdW5zaWduZWQgVGV4dFRyYWNrQ3VlTGlz
dDo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9WVFRDdWUuY3BwCmluZGV4IGVjNDk4NGU1MzY3N2FkM2JkZGIwNTViMjIx
YzcwNTYyODNmNzgyYTcuLmFiZDZkYWYzMGQzOWUyNDNhZmNkMDdiY2RhYjlkMWMyMzdhM2RkZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAKQEAgLTY0LDkgKzY0LDcgQEAgV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFZUVEN1ZSk7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0lNUEwoVlRUQ3VlQm94KTsKIAogLy8gVGhpcyBjb25zdGFudCBzaG91bGQgY29ycmVzcG9uZCB3
aXRoIHRoZSBwZXJjZW50YWdlIHJldHVybmVkIGJ5IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OmNh
cHRpb25Gb250U2l6ZVNjYWxlQW5kSW1wb3J0YW5jZS4KLXN0YXRpYyBjb25zdGV4cHIgZG91Ymxl
IERFRkFVTFRDQVBUSU9ORk9OVFNJWkVQRVJDRU5UQUdFID0gNTsKLQotc3RhdGljIGNvbnN0ZXhw
ciBpbnQgdW5kZWZpbmVkUG9zaXRpb24gPSAtMTsKK2NvbnN0ZXhwciBkb3VibGUgREVGQVVMVENB
UFRJT05GT05UU0laRVBFUkNFTlRBR0UgPSA1OwogCiBzdGF0aWMgY29uc3QgQ1NTVmFsdWVJRCBk
aXNwbGF5V3JpdGluZ01vZGVNYXBbXSA9IHsKICAgICBDU1NWYWx1ZUhvcml6b250YWxUYiwgQ1NT
VmFsdWVWZXJ0aWNhbFJsLCBDU1NWYWx1ZVZlcnRpY2FsTHIKQEAgLTEzNSwxMSArMTMzLDExIEBA
IFZUVEN1ZUJveDo6VlRUQ3VlQm94KERvY3VtZW50JiBkb2N1bWVudCwgVlRUQ3VlJiBjdWUpCiB2
b2lkIFZUVEN1ZUJveDo6YXBwbHlDU1NQcm9wZXJ0aWVzKGNvbnN0IEludFNpemUmIHZpZGVvU2l6
ZSkKIHsKICAgICBhdXRvIHRleHRUcmFja0N1ZSA9IGdldEN1ZSgpOwotICAgIGlmICghdGV4dFRy
YWNrQ3VlKQorICAgIEFTU0VSVCghdGV4dFRyYWNrQ3VlIHx8IGlzPFZUVEN1ZT4odGV4dFRyYWNr
Q3VlKSk7CisgICAgaWYgKCFpczxWVFRDdWU+KHRleHRUcmFja0N1ZSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEFTU0VSVChpczxWVFRDdWU+KHRleHRUcmFja0N1ZSkgfHwgaXM8VGV4dFRyYWNr
Q3VlR2VuZXJpYz4odGV4dFRyYWNrQ3VlKSk7Ci0gICAgYXV0byBjdWUgPSBtYWtlUmVmKCp0b1ZU
VEN1ZSh0ZXh0VHJhY2tDdWUpKTsKKyAgICBhdXRvIGN1ZSA9IG1ha2VSZWYoZG93bmNhc3Q8VlRU
Q3VlPigqdGV4dFRyYWNrQ3VlKSk7CiAKICAgICAvLyBGSVhNRTogQXBwbHkgYWxsIHRoZSBpbml0
aWFsIENTUyBwb3NpdGlvbmluZyBwcm9wZXJ0aWVzLiBodHRwOi8vd2tiLnVnLzc5OTE2CiAgICAg
aWYgKCFjdWUtPnJlZ2lvbklkKCkuaXNFbXB0eSgpKSB7CkBAIC0yMzksNTEgKzIzNyw1MiBAQCBS
ZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gVlRUQ3VlQm94OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIo
UmVuZGVyU3R5bGUmJiBzdHlsZSwgYwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKK1JlZjxWVFRDdWU+IFZUVEN1ZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZUVEN1ZShkb3duY2FzdDxEb2N1bWVudD4oY29u
dGV4dCksIE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShzdGFydCksIE1lZGlhVGltZTo6Y3Jl
YXRlV2l0aERvdWJsZShlbmQpLCBjb250ZW50KSk7Cit9CisKK1JlZjxWVFRDdWU+IFZUVEN1ZTo6
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYg
c3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVlRUQ3VlKGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0
KSwgc3RhcnQsIGVuZCwgY29udGVudCkpOworfQorCiBSZWY8VlRUQ3VlPiBWVFRDdWU6OmNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBXZWJWVFRDdWVEYXRhJiBk
YXRhKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZUVEN1ZShjb250ZXh0LCBkYXRhKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVlRUQ3VlKGRvd25jYXN0PERvY3VtZW50Pihjb250
ZXh0KSwgZGF0YSkpOwogfQogCi1WVFRDdWU6OlZUVEN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwg
Y29uc3QgU3RyaW5nJiBjb250ZW50KQotICAgIDogVGV4dFRyYWNrQ3VlKGNvbnRleHQsIHN0YXJ0
LCBlbmQpCitWVFRDdWU6OlZUVEN1ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IE1lZGlhVGlt
ZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCisg
ICAgOiBUZXh0VHJhY2tDdWUoZG9jdW1lbnQsIHN0YXJ0LCBlbmQpCiAgICAgLCBtX2NvbnRlbnQo
Y29udGVudCkKKyAgICAsIG1fb3JpZ2luYWxTdGFydFRpbWUoTWVkaWFUaW1lOjp6ZXJvVGltZSgp
KQogewotICAgIGluaXRpYWxpemUoY29udGV4dCk7CisgICAgaW5pdGlhbGl6ZSgpOwogfQogCi1W
VFRDdWU6OlZUVEN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBXZWJW
VFRDdWVEYXRhJiBjdWVEYXRhKQotICAgIDogVGV4dFRyYWNrQ3VlKGNvbnRleHQsIE1lZGlhVGlt
ZTo6emVyb1RpbWUoKSwgTWVkaWFUaW1lOjp6ZXJvVGltZSgpKQorVlRUQ3VlOjpWVFRDdWUoRG9j
dW1lbnQmIGRvY3VtZW50LCBjb25zdCBXZWJWVFRDdWVEYXRhJiBjdWVEYXRhKQorICAgIDogVGV4
dFRyYWNrQ3VlKGRvY3VtZW50LCBNZWRpYVRpbWU6Onplcm9UaW1lKCksIE1lZGlhVGltZTo6emVy
b1RpbWUoKSkKKyAgICAsIG1fb3JpZ2luYWxTdGFydFRpbWUoY3VlRGF0YS5vcmlnaW5hbFN0YXJ0
VGltZSgpKQogewotICAgIGluaXRpYWxpemUoY29udGV4dCk7CisgICAgaW5pdGlhbGl6ZSgpOwog
ICAgIHNldFRleHQoY3VlRGF0YS5jb250ZW50KCkpOwogICAgIHNldFN0YXJ0VGltZShjdWVEYXRh
LnN0YXJ0VGltZSgpKTsKICAgICBzZXRFbmRUaW1lKGN1ZURhdGEuZW5kVGltZSgpKTsKICAgICBz
ZXRJZChjdWVEYXRhLmlkKCkpOwogICAgIHNldEN1ZVNldHRpbmdzKGN1ZURhdGEuc2V0dGluZ3Mo
KSk7Ci0gICAgbV9vcmlnaW5hbFN0YXJ0VGltZSA9IGN1ZURhdGEub3JpZ2luYWxTdGFydFRpbWUo
KTsKIH0KIAogVlRUQ3VlOjp+VlRUQ3VlKCkKIHsKIH0KIAotdm9pZCBWVFRDdWU6OmluaXRpYWxp
emUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKK3ZvaWQgVlRUQ3VlOjppbml0aWFs
aXplKCkKIHsKLSAgICBtX2xpbmVQb3NpdGlvbiA9IHVuZGVmaW5lZFBvc2l0aW9uOwotICAgIG1f
Y29tcHV0ZWRMaW5lUG9zaXRpb24gPSB1bmRlZmluZWRQb3NpdGlvbjsKLSAgICBtX3RleHRQb3Np
dGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgbV9j
dWVTaXplID0gMTAwOwotICAgIG1fd3JpdGluZ0RpcmVjdGlvbiA9IEhvcml6b250YWw7Ci0gICAg
bV9jdWVBbGlnbm1lbnQgPSBDZW50ZXI7Ci0gICAgbV93ZWJWVFROb2RlVHJlZSA9IG51bGxwdHI7
Ci0gICAgbV9jdWVCYWNrZHJvcEJveCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG93bmNhc3Q8
RG9jdW1lbnQ+KGNvbnRleHQpKTsKLSAgICBtX2N1ZUhpZ2hsaWdodEJveCA9IEhUTUxTcGFuRWxl
bWVudDo6Y3JlYXRlKHNwYW5UYWcsIGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KSk7Ci0gICAg
bV9kaXNwbGF5RGlyZWN0aW9uID0gQ1NTVmFsdWVMdHI7Ci0gICAgbV9kaXNwbGF5U2l6ZSA9IDA7
CisgICAgbV9jdWVCYWNrZHJvcEJveCA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUob3duZXJEb2N1
bWVudCgpKTsKKyAgICBtX2N1ZUhpZ2hsaWdodEJveCA9IEhUTUxTcGFuRWxlbWVudDo6Y3JlYXRl
KHNwYW5UYWcsIG93bmVyRG9jdW1lbnQoKSk7CiAgICAgbV9zbmFwVG9MaW5lcyA9IHRydWU7CiAg
ICAgbV9kaXNwbGF5VHJlZVNob3VsZENoYW5nZSA9IHRydWU7CiAgICAgbV9ub3RpZnlSZWdpb24g
PSB0cnVlOwotICAgIG1fb3JpZ2luYWxTdGFydFRpbWUgPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7
CiB9CiAKIFJlZjxWVFRDdWVCb3g+IFZUVEN1ZTo6Y3JlYXRlRGlzcGxheVRyZWUoKQpAQCAtMzk3
LDExICszOTYsMTEgQEAgRXhjZXB0aW9uT3I8dm9pZD4gVlRUQ3VlOjpzZXRQb3NpdGlvbihjb25z
dCBMaW5lQW5kUG9zaXRpb25TZXR0aW5nJiBwb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiB7
IH07CiAgICAgICAgIHRleHRQb3NpdGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
cXVpZXRfTmFOKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCEoV1RGOjpnZXQ8ZG91Ymxl
Pihwb3NpdGlvbikgPj0gMCAmJiBXVEY6OmdldDxkb3VibGU+KHBvc2l0aW9uKSA8PSAxMDApKQor
ICAgICAgICB0ZXh0UG9zaXRpb24gPSBXVEY6OmdldDxkb3VibGU+KHBvc2l0aW9uKTsKKyAgICAg
ICAgaWYgKCEodGV4dFBvc2l0aW9uID49IDAgJiYgdGV4dFBvc2l0aW9uIDw9IDEwMCkpCiAgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAogICAgICAgICAv
LyBPdGhlcndpc2UsIHNldCB0aGUgdGV4dCB0cmFjayBjdWUgbGluZSBwb3NpdGlvbiB0byB0aGUg
bmV3IHZhbHVlLgotICAgICAgICB0ZXh0UG9zaXRpb24gPSBXVEY6OmdldDxkb3VibGU+KHBvc2l0
aW9uKTsKICAgICAgICAgaWYgKG1fdGV4dFBvc2l0aW9uID09IHRleHRQb3NpdGlvbikKICAgICAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtNTAyLDE3ICs1MDEsMTcgQEAgdm9pZCBWVFRD
dWU6OmNyZWF0ZVdlYlZUVE5vZGVUcmVlKCkKICAgICAgICAgbV93ZWJWVFROb2RlVHJlZSA9IFdl
YlZUVFBhcnNlcjo6Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEZyb21DdWVUZXh0KG93bmVyRG9jdW1l
bnQoKSwgbV9jb250ZW50KTsKIH0KIAotdm9pZCBWVFRDdWU6OmNvcHlXZWJWVFROb2RlVG9ET01U
cmVlKENvbnRhaW5lck5vZGUqIHdlYlZUVE5vZGUsIENvbnRhaW5lck5vZGUqIHBhcmVudCkKK3N0
YXRpYyB2b2lkIGNvcHlXZWJWVFROb2RlVG9ET01UcmVlKENvbnRhaW5lck5vZGUmIHdlYlZUVE5v
ZGUsIE5vZGUmIHBhcmVudCkKIHsKLSAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gd2ViVlRU
Tm9kZS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewor
ICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSB3ZWJWVFROb2RlLmZpcnN0Q2hpbGQoKTsgbm9k
ZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgUmVmUHRyPE5vZGU+IGNs
b25lZE5vZGU7CiAgICAgICAgIGlmIChpczxXZWJWVFRFbGVtZW50Pigqbm9kZSkpCi0gICAgICAg
ICAgICBjbG9uZWROb2RlID0gZG93bmNhc3Q8V2ViVlRURWxlbWVudD4oKm5vZGUpLmNyZWF0ZUVx
dWl2YWxlbnRIVE1MRWxlbWVudChvd25lckRvY3VtZW50KCkpOworICAgICAgICAgICAgY2xvbmVk
Tm9kZSA9IGRvd25jYXN0PFdlYlZUVEVsZW1lbnQ+KCpub2RlKS5jcmVhdGVFcXVpdmFsZW50SFRN
TEVsZW1lbnQocGFyZW50LmRvY3VtZW50KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBj
bG9uZWROb2RlID0gbm9kZS0+Y2xvbmVOb2RlKGZhbHNlKTsKLSAgICAgICAgcGFyZW50LT5hcHBl
bmRDaGlsZCgqY2xvbmVkTm9kZSk7CisgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZCgqY2xvbmVk
Tm9kZSk7CiAgICAgICAgIGlmIChpczxDb250YWluZXJOb2RlPigqbm9kZSkpCi0gICAgICAgICAg
ICBjb3B5V2ViVlRUTm9kZVRvRE9NVHJlZShkb3duY2FzdDxDb250YWluZXJOb2RlPihub2RlLmdl
dCgpKSwgZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oY2xvbmVkTm9kZS5nZXQoKSkpOworICAgICAg
ICAgICAgY29weVdlYlZUVE5vZGVUb0RPTVRyZWUoZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKm5v
ZGUpLCAqY2xvbmVkTm9kZSk7CiAgICAgfQogfQogCkBAIC01MjMsNyArNTIyLDcgQEAgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IFZUVEN1ZTo6Z2V0Q3VlQXNIVE1MKCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICBhdXRvIGNsb25lZEZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6
Y3JlYXRlKG93bmVyRG9jdW1lbnQoKSk7Ci0gICAgY29weVdlYlZUVE5vZGVUb0RPTVRyZWUobV93
ZWJWVFROb2RlVHJlZS5nZXQoKSwgY2xvbmVkRnJhZ21lbnQucHRyKCkpOworICAgIGNvcHlXZWJW
VFROb2RlVG9ET01UcmVlKCptX3dlYlZUVE5vZGVUcmVlLCBjbG9uZWRGcmFnbWVudCk7CiAgICAg
cmV0dXJuIGNsb25lZEZyYWdtZW50OwogfQogCkBAIC01NzYsNyArNTc1LDcgQEAgaW50IFZUVEN1
ZTo6Y2FsY3VsYXRlQ29tcHV0ZWRMaW5lUG9zaXRpb24oKQogCiAgICAgLy8gSWYgdGhlIHRleHQg
dHJhY2sgY3VlIGxpbmUgcG9zaXRpb24gaXMgbnVtZXJpYywgdGhlbiB0aGF0IGlzIHRoZSB0ZXh0
CiAgICAgLy8gdHJhY2sgY3VlIGNvbXB1dGVkIGxpbmUgcG9zaXRpb24uCi0gICAgaWYgKG1fbGlu
ZVBvc2l0aW9uICE9IHVuZGVmaW5lZFBvc2l0aW9uKQorICAgIGlmICghc3RkOjppc25hbihtX2xp
bmVQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBtX2xpbmVQb3NpdGlvbjsKIAogICAgIC8vIElm
IHRoZSB0ZXh0IHRyYWNrIGN1ZSBzbmFwLXRvLWxpbmVzIGZsYWcgb2YgdGhlIHRleHQgdHJhY2sg
Y3VlIGlzIG5vdApAQCAtNzc3LDEzICs3NzYsMTMgQEAgdm9pZCBWVFRDdWU6OmNhbGN1bGF0ZURp
c3BsYXlQYXJhbWV0ZXJzKCkKICAgICAvLyAxMC45IERldGVybWluZSB0aGUgdmFsdWUgb2Ygd2hp
Y2hldmVyIG9mIHgtcG9zaXRpb24gb3IgeS1wb3NpdGlvbiBpcyBub3QKICAgICAvLyB5ZXQgY2Fs
Y3VsYXRlZCBmb3IgY3VlIGFzIHBlciB0aGUgYXBwcm9wcmlhdGUgcnVsZXMgZnJvbSB0aGUgZm9s
bG93aW5nCiAgICAgLy8gbGlzdDoKLSAgICBpZiAobV9zbmFwVG9MaW5lcyAmJiBtX2Rpc3BsYXlQ
b3NpdGlvbi5zZWNvbmQgPT0gdW5kZWZpbmVkUG9zaXRpb24gJiYgbV93cml0aW5nRGlyZWN0aW9u
ID09IEhvcml6b250YWwpCisgICAgaWYgKG1fc25hcFRvTGluZXMgJiYgc3RkOjppc25hbihtX2Rp
c3BsYXlQb3NpdGlvbi5zZWNvbmQpICYmIG1fd3JpdGluZ0RpcmVjdGlvbiA9PSBIb3Jpem9udGFs
KQogICAgICAgICBtX2Rpc3BsYXlQb3NpdGlvbi5zZWNvbmQgPSAwOwogCi0gICAgaWYgKCFtX3Nu
YXBUb0xpbmVzICYmIG1fZGlzcGxheVBvc2l0aW9uLnNlY29uZCA9PSB1bmRlZmluZWRQb3NpdGlv
biAmJiBtX3dyaXRpbmdEaXJlY3Rpb24gPT0gSG9yaXpvbnRhbCkKKyAgICBpZiAoIW1fc25hcFRv
TGluZXMgJiYgc3RkOjppc25hbihtX2Rpc3BsYXlQb3NpdGlvbi5zZWNvbmQpICYmIG1fd3JpdGlu
Z0RpcmVjdGlvbiA9PSBIb3Jpem9udGFsKQogICAgICAgICBtX2Rpc3BsYXlQb3NpdGlvbi5zZWNv
bmQgPSBtX2NvbXB1dGVkTGluZVBvc2l0aW9uOwogCi0gICAgaWYgKG1fc25hcFRvTGluZXMgJiYg
bV9kaXNwbGF5UG9zaXRpb24uZmlyc3QgPT0gdW5kZWZpbmVkUG9zaXRpb24KKyAgICBpZiAobV9z
bmFwVG9MaW5lcyAmJiBzdGQ6OmlzbmFuKG1fZGlzcGxheVBvc2l0aW9uLmZpcnN0KQogICAgICAg
ICAmJiAobV93cml0aW5nRGlyZWN0aW9uID09IFZlcnRpY2FsR3Jvd2luZ0xlZnQgfHwgbV93cml0
aW5nRGlyZWN0aW9uID09IFZlcnRpY2FsR3Jvd2luZ1JpZ2h0KSkKICAgICAgICAgbV9kaXNwbGF5
UG9zaXRpb24uZmlyc3QgPSAwOwogCkBAIC05MjEsNyArOTIwLDcgQEAgdm9pZCBWVFRDdWU6OnJl
bW92ZURpc3BsYXlUcmVlKCkKICAgICBpZiAobV9ub3RpZnlSZWdpb24gJiYgdHJhY2soKSkgewog
ICAgICAgICBpZiAoVlRUUmVnaW9uTGlzdCogcmVnaW9ucyA9IHRyYWNrKCktPnJlZ2lvbnMoKSkg
ewogICAgICAgICAgICAgaWYgKFJlZlB0cjxWVFRSZWdpb24+IHJlZ2lvbiA9IHJlZ2lvbnMtPmdl
dFJlZ2lvbkJ5SWQobV9yZWdpb25JZCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaGFzRGlzcGxh
eVRyZWUoKSkKKyAgICAgICAgICAgICAgICBpZiAobV9kaXNwbGF5VHJlZSkKICAgICAgICAgICAg
ICAgICAgICAgcmVnaW9uLT53aWxsUmVtb3ZlVGV4dFRyYWNrQ3VlQm94KG1fZGlzcGxheVRyZWUu
Z2V0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMTYxLDEwICsxMTYwLDcgQEAg
dm9pZCBWVFRDdWU6OnNldEN1ZVNldHRpbmdzKGNvbnN0IFN0cmluZyYgaW5wdXRTdHJpbmcpCiAg
ICAgLy8gSWYgY3VlJ3MgbGluZSBwb3NpdGlvbiBpcyBub3QgYXV0byBvciBjdWUncyBzaXplIGlz
IG5vdCAxMDAgb3IgY3VlJ3MKICAgICAvLyB3cml0aW5nIGRpcmVjdGlvbiBpcyBub3QgaG9yaXpv
bnRhbCwgYnV0IGN1ZSdzIHJlZ2lvbiBpZGVudGlmaWVyIGlzIG5vdAogICAgIC8vIHRoZSBlbXB0
eSBzdHJpbmcsIGxldCBjdWUncyByZWdpb24gaWRlbnRpZmllciBiZSB0aGUgZW1wdHkgc3RyaW5n
LgotICAgIGlmIChtX3JlZ2lvbklkLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1fbGluZVBvc2l0aW9uICE9IHVuZGVmaW5lZFBvc2l0aW9uIHx8IG1fY3VlU2l6ZSAhPSAx
MDAgfHwgbV93cml0aW5nRGlyZWN0aW9uICE9IEhvcml6b250YWwpCisgICAgaWYgKCFtX3JlZ2lv
bklkLmlzRW1wdHkoKSAmJiAoIXN0ZDo6aXNuYW4obV9saW5lUG9zaXRpb24pIHx8IG1fY3VlU2l6
ZSAhPSAxMDAgfHwgbV93cml0aW5nRGlyZWN0aW9uICE9IEhvcml6b250YWwpKQogICAgICAgICBt
X3JlZ2lvbklkID0gZW1wdHlTdHJpbmcoKTsKIH0KIApAQCAtMTE5Niw0NCArMTE5MiwxOCBAQCBz
dGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+IFZUVEN1ZTo6Z2V0Q1NTUG9zaXRpb24oKSBjb25zdAog
ICAgIHJldHVybiBtX2Rpc3BsYXlQb3NpdGlvbjsKIH0KIAotYm9vbCBWVFRDdWU6OmN1ZUNvbnRl
bnRzTWF0Y2goY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPGNv
bnN0IFZUVEN1ZT4gdnR0Q3VlID0gdG9WVFRDdWUoJmN1ZSk7Ci0gICAgaWYgKHRleHQoKSAhPSB2
dHRDdWUtPnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjdWVTZXR0aW5n
cygpICE9IHZ0dEN1ZS0+Y3VlU2V0dGluZ3MoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChwb3NpdGlvbigpICE9IHZ0dEN1ZS0+cG9zaXRpb24oKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChsaW5lKCkgIT0gdnR0Q3VlLT5saW5lKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoc2l6ZSgpICE9IHZ0dEN1ZS0+c2l6ZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKGFsaWduKCkgIT0gdnR0Q3VlLT5hbGlnbigpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVlRUQ3VlOjppc0Vx
dWFsKGNvbnN0IFRleHRUcmFja0N1ZSYgY3VlLCBUZXh0VHJhY2tDdWU6OkN1ZU1hdGNoUnVsZXMg
bWF0Y2gpIGNvbnN0Citib29sIFZUVEN1ZTo6Y3VlQ29udGVudHNNYXRjaChjb25zdCBUZXh0VHJh
Y2tDdWUmIG90aGVyVGV4dFRyYWNrQ3VlKSBjb25zdAogewotICAgIGlmICghVGV4dFRyYWNrQ3Vl
Ojppc0VxdWFsKGN1ZSwgbWF0Y2gpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
Y3VlLmN1ZVR5cGUoKSAhPSBXZWJWVFQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBjdWVDb250ZW50c01hdGNoKGN1ZSk7CisgICAgYXV0byYgb3RoZXIgPSBkb3duY2FzdDxW
VFRDdWU+KG90aGVyVGV4dFRyYWNrQ3VlKTsKKyAgICByZXR1cm4gVGV4dFRyYWNrQ3VlOjpjdWVD
b250ZW50c01hdGNoKG90aGVyKQorICAgICAgICAmJiB0ZXh0KCkgPT0gb3RoZXIudGV4dCgpCisg
ICAgICAgICYmIGN1ZVNldHRpbmdzKCkgPT0gb3RoZXIuY3VlU2V0dGluZ3MoKQorICAgICAgICAm
JiBwb3NpdGlvbigpID09IG90aGVyLnBvc2l0aW9uKCkKKyAgICAgICAgJiYgbGluZSgpID09IG90
aGVyLmxpbmUoKQorICAgICAgICAmJiBzaXplKCkgPT0gb3RoZXIuc2l6ZSgpCisgICAgICAgICYm
IGFsaWduKCkgPT0gb3RoZXIuYWxpZ24oKTsKIH0KIAotYm9vbCBWVFRDdWU6OmRvZXNFeHRlbmRD
dWUoY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0Ci17Ci0gICAgaWYgKCFjdWVDb250ZW50
c01hdGNoKGN1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gVGV4
dFRyYWNrQ3VlOjpkb2VzRXh0ZW5kQ3VlKGN1ZSk7Ci19Ci0gICAgCiB2b2lkIFZUVEN1ZTo6c2V0
Rm9udFNpemUoaW50IGZvbnRTaXplLCBjb25zdCBJbnRTaXplJiwgYm9vbCBpbXBvcnRhbnQpCiB7
CiAgICAgaWYgKGZvbnRTaXplID09IG1fZm9udFNpemUgJiYgaW1wb3J0YW50ID09IG1fZm9udFNp
emVJc0ltcG9ydGFudCkKQEAgLTEyNDQsMzcgKzEyMTQsMjMgQEAgdm9pZCBWVFRDdWU6OnNldEZv
bnRTaXplKGludCBmb250U2l6ZSwgY29uc3QgSW50U2l6ZSYsIGJvb2wgaW1wb3J0YW50KQogICAg
IG1fZm9udFNpemUgPSBmb250U2l6ZTsKIH0KIAotVlRUQ3VlKiB0b1ZUVEN1ZShUZXh0VHJhY2tD
dWUqIGN1ZSkKLXsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxWVFRDdWUqPih0b1ZUVEN1ZShjb25z
dF9jYXN0PGNvbnN0IFRleHRUcmFja0N1ZSo+KGN1ZSkpKTsKLX0KLQotY29uc3QgVlRUQ3VlKiB0
b1ZUVEN1ZShjb25zdCBUZXh0VHJhY2tDdWUqIGN1ZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzPFZUVEN1ZT4oY3VlKSB8fCBpczxUZXh0VHJhY2tD
dWVHZW5lcmljPihjdWUpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVlRUQ3VlKj4o
Y3VlKTsKLX0KLQotU3RyaW5nIFZUVEN1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKLXsKLSAgICBh
dXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgdG9KU09OKG9iamVjdC5n
ZXQoKSk7Ci0KLSAgICByZXR1cm4gb2JqZWN0LT50b0pTT05TdHJpbmcoKTsKLX0KLQogdm9pZCBW
VFRDdWU6OnRvSlNPTihKU09OOjpPYmplY3QmIG9iamVjdCkgY29uc3QKIHsKICAgICBUZXh0VHJh
Y2tDdWU6OnRvSlNPTihvYmplY3QpOwogCisgICAgLy8gRklYTUU6IFNlZW1zIGRhbmdlcm91cyB0
byBpbmNsdWRlIHRoaXMgYmFzZWQgb24gTE9HX0RJU0FCTEVELiBDYW4gd2UganVzdCBpbmNsdWRl
IGl0IHVuY29uZGl0aW9uYWxseT8KICNpZiAhTE9HX0RJU0FCTEVECiAgICAgb2JqZWN0LnNldFN0
cmluZygidGV4dCJfcywgdGV4dCgpKTsKICNlbmRpZgorCiAgICAgb2JqZWN0LnNldFN0cmluZygi
dmVydGljYWwiX3MsIHZlcnRpY2FsKCkpOwogICAgIG9iamVjdC5zZXRCb29sZWFuKCJzbmFwVG9M
aW5lcyJfcywgc25hcFRvTGluZXMoKSk7Ci0gICAgb2JqZWN0LnNldERvdWJsZSgibGluZSJfcywg
bV9saW5lUG9zaXRpb24pOworICAgIGlmIChzdGQ6OmlzbmFuKG1fbGluZVBvc2l0aW9uKSkKKyAg
ICAgICAgb2JqZWN0LnNldFN0cmluZygibGluZSJfcywgImF1dG8iX3MpOworICAgIGVsc2UKKyAg
ICAgICAgb2JqZWN0LnNldERvdWJsZSgibGluZSJfcywgbV9saW5lUG9zaXRpb24pOwogICAgIGlm
ICh0ZXh0UG9zaXRpb25Jc0F1dG8oKSkKLSAgICAgICAgb2JqZWN0LnNldFN0cmluZygicG9zaXRp
b24iX3MsICJhdXRvIik7CisgICAgICAgIG9iamVjdC5zZXRTdHJpbmcoInBvc2l0aW9uIl9zLCAi
YXV0byJfcyk7CiAgICAgZWxzZQogICAgICAgICBvYmplY3Quc2V0RG91YmxlKCJwb3NpdGlvbiJf
cywgbV90ZXh0UG9zaXRpb24pOwogICAgIG9iamVjdC5zZXRJbnRlZ2VyKCJzaXplIl9zLCBtX2N1
ZVNpemUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmgKaW5kZXggZTNjZTk5MmI0YWNkMmI4
MWRhNTVkNGUzMmE2MGE0NGNjYTI0NDM2Mi4uYmQ0MzBhMDZjYjBhYWJhNDk0NDFmMWIzYjNkY2Ji
NzYxYTBjNDhiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5oCkBAIC03OCwyNCArNzgs
MTMgQEAgcHJpdmF0ZToKIGNsYXNzIFZUVEN1ZSA6IHB1YmxpYyBUZXh0VHJhY2tDdWUgewogICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoVlRUQ3VlKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PFZUVEN1ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGRvdWJsZSBz
dGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGNyZWF0ZShjb250ZXh0LCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoc3RhcnQp
LCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoZW5kKSwgY29udGVudCk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIFJlZjxWVFRDdWU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgY29uc3Qg
U3RyaW5nJiBjb250ZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVlRU
Q3VlKGNvbnRleHQsIHN0YXJ0LCBlbmQsIGNvbnRlbnQpKTsKLSAgICB9Ci0KKyAgICBzdGF0aWMg
UmVmPFZUVEN1ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBkb3VibGUgc3RhcnQs
IGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCk7CisgICAgc3RhdGljIFJlZjxWVFRD
dWU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFy
dCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCk7CiAgICAgc3Rh
dGljIFJlZjxWVFRDdWU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgV2Vi
VlRUQ3VlRGF0YSYpOwogCiAgICAgdmlydHVhbCB+VlRUQ3VlKCk7CiAKLSAgICBlbnVtIEF1dG9L
ZXl3b3JkIHsKLSAgICAgICAgQXV0bwotICAgIH07Ci0gICAgCisgICAgZW51bSBBdXRvS2V5d29y
ZCB7IEF1dG8gfTsKICAgICB1c2luZyBMaW5lQW5kUG9zaXRpb25TZXR0aW5nID0gVmFyaWFudDxk
b3VibGUsIEF1dG9LZXl3b3JkPjsKIAogICAgIGNvbnN0IFN0cmluZyYgdmVydGljYWwoKSBjb25z
dDsKQEAgLTEzMiw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc0FjdGl2ZShib29s
KSBvdmVycmlkZTsKIAogICAgIGJvb2wgaGFzRGlzcGxheVRyZWUoKSBjb25zdCB7IHJldHVybiBt
X2Rpc3BsYXlUcmVlOyB9Ci0gICAgUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gZ2V0RGlzcGxheVRy
ZWUoY29uc3QgSW50U2l6ZSYsIGludCkgZmluYWw7CisgICAgUmVmUHRyPFRleHRUcmFja0N1ZUJv
eD4gZ2V0RGlzcGxheVRyZWUoY29uc3QgSW50U2l6ZSYgdmlkZW9TaXplLCBpbnQgZm9udFNpemUp
IGZpbmFsOwogICAgIEhUTUxTcGFuRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuICpt
X2N1ZUhpZ2hsaWdodEJveDsgfQogCiAgICAgdm9pZCB1cGRhdGVEaXNwbGF5VHJlZShjb25zdCBN
ZWRpYVRpbWUmKSBmaW5hbDsKQEAgLTE1MCw3ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgQ1NTVmFs
dWVJRCBnZXRDU1NXcml0aW5nTW9kZSgpIGNvbnN0OwogCiAgICAgZW51bSBXcml0aW5nRGlyZWN0
aW9uIHsKLSAgICAgICAgSG9yaXpvbnRhbCA9IDAsCisgICAgICAgIEhvcml6b250YWwsCiAgICAg
ICAgIFZlcnRpY2FsR3Jvd2luZ0xlZnQsCiAgICAgICAgIFZlcnRpY2FsR3Jvd2luZ1JpZ2h0LAog
ICAgICAgICBOdW1iZXJPZldyaXRpbmdEaXJlY3Rpb25zCkBAIC0xNTgsNyArMTQ3LDcgQEAgcHVi
bGljOgogICAgIFdyaXRpbmdEaXJlY3Rpb24gZ2V0V3JpdGluZ0RpcmVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fd3JpdGluZ0RpcmVjdGlvbjsgfQogCiAgICAgZW51bSBDdWVBbGlnbm1lbnQgewot
ICAgICAgICBTdGFydCA9IDAsCisgICAgICAgIFN0YXJ0LAogICAgICAgICBDZW50ZXIsCiAgICAg
ICAgIEVuZCwKICAgICAgICAgTGVmdCwKQEAgLTE3MCwzMiArMTU5LDI4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHJlY2FsY3VsYXRlU3R5bGVzKCkgZmluYWwgeyBtX2Rpc3BsYXlUcmVlU2hvdWxkQ2hh
bmdlID0gdHJ1ZTsgfQogICAgIHZvaWQgc2V0Rm9udFNpemUoaW50LCBjb25zdCBJbnRTaXplJiwg
Ym9vbCBpbXBvcnRhbnQpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBpc0VxdWFsKGNvbnN0IFRleHRU
cmFja0N1ZSYsIEN1ZU1hdGNoUnVsZXMpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgY3VlQ29u
dGVudHNNYXRjaChjb25zdCBUZXh0VHJhY2tDdWUmKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29s
IGRvZXNFeHRlbmRDdWUoY29uc3QgVGV4dFRyYWNrQ3VlJikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAg
ICBDdWVUeXBlIGN1ZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBXZWJWVFQ7IH0KICAg
ICBib29sIGlzUmVuZGVyYWJsZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICFtX2NvbnRlbnQuaXNF
bXB0eSgpOyB9CiAKLSAgICB2b2lkIGRpZENoYW5nZSgpIG92ZXJyaWRlOwotCi0gICAgU3RyaW5n
IHRvSlNPTlN0cmluZygpIGNvbnN0OworICAgIHZvaWQgZGlkQ2hhbmdlKCkgZmluYWw7CiAKICAg
ICBkb3VibGUgY2FsY3VsYXRlQ29tcHV0ZWRUZXh0UG9zaXRpb24oKSBjb25zdDsKIAogcHJvdGVj
dGVkOgotICAgIFZUVEN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgTWVkaWFUaW1l
JiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCk7Ci0g
ICAgVlRUQ3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBXZWJWVFRDdWVEYXRhJik7
CisgICAgVlRUQ3VlKERvY3VtZW50JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVk
aWFUaW1lJiBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCk7CisKKyAgICBib29sIGN1ZUNvbnRl
bnRzTWF0Y2goY29uc3QgVGV4dFRyYWNrQ3VlJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0
dWFsIFJlZjxWVFRDdWVCb3g+IGNyZWF0ZURpc3BsYXlUcmVlKCk7CiAgICAgVlRUQ3VlQm94JiBk
aXNwbGF5VHJlZUludGVybmFsKCk7CiAKLSAgICB2b2lkIHRvSlNPTihKU09OOjpPYmplY3QmKSBj
b25zdCBmaW5hbDsKKyAgICB2b2lkIHRvSlNPTihKU09OOjpPYmplY3QmKSBjb25zdCBvdmVycmlk
ZTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGluaXRpYWxpemUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYpOworICAgIFZUVEN1ZShEb2N1bWVudCYsIGNvbnN0IFdlYlZUVEN1ZURhdGEmKTsKKworICAg
IHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgIHZvaWQgY3JlYXRlV2ViVlRUTm9kZVRyZWUoKTsKLSAg
ICB2b2lkIGNvcHlXZWJWVFROb2RlVG9ET01UcmVlKENvbnRhaW5lck5vZGUqIFdlYlZUVE5vZGUs
IENvbnRhaW5lck5vZGUqIHJvb3QpOwogCiAgICAgdm9pZCBwYXJzZVNldHRpbmdzKGNvbnN0IFN0
cmluZyYpOwogCkBAIC0yMTcsMTMgKzIwMiwxMyBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIG1f
Y29udGVudDsKICAgICBTdHJpbmcgbV9zZXR0aW5nczsKLSAgICBkb3VibGUgbV9saW5lUG9zaXRp
b247Ci0gICAgZG91YmxlIG1fY29tcHV0ZWRMaW5lUG9zaXRpb247Ci0gICAgZG91YmxlIG1fdGV4
dFBvc2l0aW9uOwotICAgIGludCBtX2N1ZVNpemU7CisgICAgZG91YmxlIG1fbGluZVBvc2l0aW9u
IHsgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSB9OworICAgIGRvdWJs
ZSBtX2NvbXB1dGVkTGluZVBvc2l0aW9uIHsgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpx
dWlldF9OYU4oKSB9OworICAgIGRvdWJsZSBtX3RleHRQb3NpdGlvbiB7IHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCkgfTsKKyAgICBpbnQgbV9jdWVTaXplIHsgMTAwIH07
CiAKLSAgICBXcml0aW5nRGlyZWN0aW9uIG1fd3JpdGluZ0RpcmVjdGlvbjsKLSAgICBDdWVBbGln
bm1lbnQgbV9jdWVBbGlnbm1lbnQ7CisgICAgV3JpdGluZ0RpcmVjdGlvbiBtX3dyaXRpbmdEaXJl
Y3Rpb24geyBIb3Jpem9udGFsIH07CisgICAgQ3VlQWxpZ25tZW50IG1fY3VlQWxpZ25tZW50IHsg
Q2VudGVyIH07CiAgICAgU3RyaW5nIG1fcmVnaW9uSWQ7CiAKICAgICBSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gbV93ZWJWVFROb2RlVHJlZTsKQEAgLTIzMSw4ICsyMTYsOCBAQCBwcml2YXRlOgog
ICAgIFJlZlB0cjxIVE1MRGl2RWxlbWVudD4gbV9jdWVCYWNrZHJvcEJveDsKICAgICBSZWZQdHI8
VlRUQ3VlQm94PiBtX2Rpc3BsYXlUcmVlOwogCi0gICAgQ1NTVmFsdWVJRCBtX2Rpc3BsYXlEaXJl
Y3Rpb247Ci0gICAgaW50IG1fZGlzcGxheVNpemU7CisgICAgQ1NTVmFsdWVJRCBtX2Rpc3BsYXlE
aXJlY3Rpb24geyBDU1NWYWx1ZUx0ciB9OworICAgIGludCBtX2Rpc3BsYXlTaXplIHsgMCB9Owog
ICAgIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IG1fZGlzcGxheVBvc2l0aW9uOwogCiAgICAgTWVk
aWFUaW1lIG1fb3JpZ2luYWxTdGFydFRpbWU7CkBAIC0yNDUsMjcgKzIzMCwxNiBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9ub3RpZnlSZWdpb24gOiAxOwogfTsKIAotVlRUQ3VlKiB0b1ZUVEN1ZShU
ZXh0VHJhY2tDdWUqKTsKLWNvbnN0IFZUVEN1ZSogdG9WVFRDdWUoY29uc3QgVGV4dFRyYWNrQ3Vl
Kik7Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogbmFtZXNwYWNlIFdURiB7CiAKLXRlbXBs
YXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTG9nQXJndW1lbnQ7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IExv
Z0FyZ3VtZW50PFdlYkNvcmU6OlZUVEN1ZT4gewotICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmco
Y29uc3QgV2ViQ29yZTo6VlRUQ3VlJiBjdWUpIHsgcmV0dXJuIGN1ZS50b0pTT05TdHJpbmcoKTsg
fQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCit0ZW1wbGF0ZTw+IHN0cnVjdCBMb2dBcmd1bWVu
dDxXZWJDb3JlOjpWVFRDdWU+IDogTG9nQXJndW1lbnQ8V2ViQ29yZTo6VGV4dFRyYWNrQ3VlPiB7
IH07CiAKLS8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGlzVHlwZSBmdW5jdGlvbiBpcyBpbmNvcnJl
Y3QsIHNpbmNlIGl0IHJldHVybnMgdHJ1ZSBmb3IgVGV4dFRyYWNrQ3VlR2VuZXJpYy4KLS8vIFNo
b3VsZCBmaXggdGhpcyBzbyB0aGF0IGlzPFZUVEN1ZT4gYW5kIGRvd25jYXN0PFZUVEN1ZT4gd2ls
bCB3b3JrIGNvcnJlY3RseSBhbmQgZWxpbWluYXRlIHRvVlRUQ3VlCi0vLyBzaW5jZSBpdCdzIGp1
c3QgYW5vdGhlciBuYW1lIGZvciBkb3duY2FzdDxWVFRDdWU+LgorfQogCiBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlZUVEN1ZSkKLXN0YXRpYyBib29sIGlzVHlwZShjb25z
dCBXZWJDb3JlOjpUZXh0VHJhY2tDdWUmIGN1ZSkgeyByZXR1cm4gY3VlLmN1ZVR5cGUoKSA9PSBX
ZWJDb3JlOjpUZXh0VHJhY2tDdWU6OldlYlZUVDsgfQorc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0
IFdlYkNvcmU6OlRleHRUcmFja0N1ZSYgY3VlKSB7IHJldHVybiBjdWUuY3VlVHlwZSgpID09IFdl
YkNvcmU6OlRleHRUcmFja0N1ZTo6V2ViVlRUIHx8IGN1ZS5jdWVUeXBlKCkgPT0gV2ViQ29yZTo6
VGV4dFRyYWNrQ3VlOjpDb252ZXJ0ZWRUb1dlYlZUVDsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19FTkQoKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0
VHJhY2tMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5j
cHAKaW5kZXggZWNkMjY0ZTYxYzQ2ZGJiN2NkZjAwY2QxZGU2NGZlOTAwNGU1MzNkMS4uODc0Zjll
NWQwYmE5N2M2MjRhYzA2YWYwNzZiNGYwZWUxMzMzNjUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1RleHRUcmFja0xvYWRlci5jcHAKQEAgLTE5OSwxNiArMTk5LDIwIEBAIHZvaWQgVGV4dFRy
YWNrTG9hZGVyOjpmaWxlRmFpbGVkVG9QYXJzZSgpCiAgICAgY2FuY2VsTG9hZCgpOwogfQogCi12
b2lkIFRleHRUcmFja0xvYWRlcjo6Z2V0TmV3Q3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1
ZT4+JiBvdXRwdXRDdWVzKQorVmVjdG9yPFJlZjxWVFRDdWU+PiBUZXh0VHJhY2tMb2FkZXI6Omdl
dE5ld0N1ZXMoKQogewogICAgIEFTU0VSVChtX2N1ZVBhcnNlcik7Ci0gICAgaWYgKG1fY3VlUGFy
c2VyKSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8V2ViVlRUQ3VlRGF0YT4+IG5ld0N1ZXM7Ci0g
ICAgICAgIG1fY3VlUGFyc2VyLT5nZXROZXdDdWVzKG5ld0N1ZXMpOworICAgIGlmICghbV9jdWVQ
YXJzZXIpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgZm9yIChhdXRvJiBjdWVEYXRh
IDogbmV3Q3VlcykKLSAgICAgICAgICAgIG91dHB1dEN1ZXMuYXBwZW5kKFZUVEN1ZTo6Y3JlYXRl
KCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsICpjdWVEYXRhKSk7Ci0gICAgfQorICAgIFZlY3Rv
cjxSZWZQdHI8V2ViVlRUQ3VlRGF0YT4+IG5ld0N1ZXM7CisgICAgbV9jdWVQYXJzZXItPmdldE5l
d0N1ZXMobmV3Q3Vlcyk7CisKKyAgICBWZWN0b3I8UmVmPFZUVEN1ZT4+IHJlc3VsdDsKKyAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXdDdWVzLnNpemUoKSk7CisgICAgZm9yIChh
dXRvJiBjdWVEYXRhIDogbmV3Q3VlcykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChW
VFRDdWU6OmNyZWF0ZSgqbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCAqY3VlRGF0YSkpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgVGV4dFRyYWNrTG9hZGVyOjpnZXROZXdSZWdpb25z
KFZlY3RvcjxSZWZQdHI8VlRUUmVnaW9uPj4mIG91dHB1dFJlZ2lvbnMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvVGV4dFRyYWNrTG9hZGVyLmgKaW5kZXggYzdhNGJhM2JiMjI4YmU4ZGQ1MjkxY2Q5NmE5
MmQwYjI4ZmMyNTExYS4uYzBlNzgyOTFkYTc4MGI2ZmU1YmRmMTI4MmYwYWU4ODA2MDEzODE1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0VHJhY2tMb2FkZXIuaApAQCAtNDAsNiArNDAsNyBA
QCBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEhUTUxUcmFja0VsZW1lbnQ7CiBjbGFzcyBUZXh0VHJh
Y2tMb2FkZXI7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgVlRUQ3VlOwog
CiBjbGFzcyBUZXh0VHJhY2tMb2FkZXJDbGllbnQgewogcHVibGljOgpAQCAtNjAsOSArNjEsMTEg
QEAgcHVibGljOgogCiAgICAgYm9vbCBsb2FkKGNvbnN0IFVSTCYsIEhUTUxUcmFja0VsZW1lbnQm
KTsKICAgICB2b2lkIGNhbmNlbExvYWQoKTsKLSAgICB2b2lkIGdldE5ld0N1ZXMoVmVjdG9yPFJl
ZlB0cjxUZXh0VHJhY2tDdWU+PiYgb3V0cHV0Q3Vlcyk7CisKKyAgICBWZWN0b3I8UmVmPFZUVEN1
ZT4+IGdldE5ld0N1ZXMoKTsKICAgICB2b2lkIGdldE5ld1JlZ2lvbnMoVmVjdG9yPFJlZlB0cjxW
VFRSZWdpb24+PiYgb3V0cHV0UmVnaW9ucyk7CiAgICAgVmVjdG9yPFN0cmluZz4gZ2V0TmV3U3R5
bGVTaGVldHMoKTsKKwogcHJpdmF0ZToKIAogICAgIC8vIENhY2hlZFJlc291cmNlQ2xpZW50CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRp
YUFGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlh
QUYuY3BwCmluZGV4IGUwNjBlOWQwYzAzYWU0MTdhMWQ3NDYzYTJhNjNkNGFkZDI2MmM4NTUuLmEz
ODNhODlmNjk4YjIzODM1NDY1N2QwMzEzZTVlZTA2YzE5ODNmZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCkBAIC0z
OSw3ICszOSw2IEBACiAjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRl
ICJUZXh0VHJhY2tMaXN0LmgiCiAjaW5jbHVkZSAiVXNlclN0eWxlU2hlZXRUeXBlcy5oIgotI2lu
Y2x1ZGUgIlZUVEN1ZS5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvTGFu
Z3VhZ2UuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uaAppbmRleCAzOWRhNTU4
ZTZkYjM4ZjBjNzc4YzUxNzgwYTA3NjJiNWY2NTAwYjBmLi4xYTIwYzA1YmU0Y2MwMTM3YTA2MmYz
ZmNlMzg0YjVhNTVlYjY4OTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKICAqLwogCi0jaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbl9oCi0jZGVm
aW5lIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbl9oCisjcHJhZ21hIG9uY2UKIAogI2lm
IEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKIApAQCAtMzQsMTcgKzMzLDE0IEBA
CiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3
dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dlckhlbHBlci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUFWRjsKIGNsYXNzIEluYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkY7Ci1jbGFzcyBHZW5lcmljQ3VlRGF0YTsKIAogLy8gVXNlIGVh
Z2VyIGluaXRpYWxpemF0aW9uIGZvciB0aGUgV2Vha1B0ckZhY3Rvcnkgc2luY2Ugd2UgY2FsbCBt
YWtlV2Vha1B0cigpIGZyb20gYW5vdGhlciB0aHJlYWQuCiBjbGFzcyBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb24gOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uLCBXZWFrUHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdlcj4sIHB1Ymxp
YyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UsIHB1YmxpYyBBVkZJbmJhbmRUcmFja1BhcmVu
dApAQCAtMzc2LDUgKzM3MiwzIEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0KLSNlbmRpZiAv
LyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZUVEN1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVlRUQ3VlLmNwcAppbmRleCA0Y2Y4ZmEzNzJlNWVkOTE5MDc2NjEyMTk3MGQ4MzMz
MWQwYzgxZjYwLi5kMTI2MmMwZmIzZmFhMzIxYzIxMTZkNDk5N2JlZWQyOWEzMTg2Y2YwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVlRUQ3VlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVlRUQ3VlLmNwcApAQCAtNDMsMTAgKzQzLDkg
QEAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlclZUVEN1ZSk7CiAKIFJlbmRlclZU
VEN1ZTo6UmVuZGVyVlRUQ3VlKFZUVEN1ZUJveCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBzdHls
ZSkKICAgICA6IFJlbmRlckJsb2NrRmxvdyhlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSkKLSAgICAs
IG1fY3VlKHRvVlRUQ3VlKGVsZW1lbnQuZ2V0Q3VlKCkpKQorICAgICwgbV9jdWUoZG93bmNhc3Q8
VlRUQ3VlPihlbGVtZW50LmdldEN1ZSgpKSkKIHsKICAgICBBU1NFUlQobV9jdWUpOwotICAgIEFT
U0VSVChpczxWVFRDdWU+KG1fY3VlKSk7CiB9CiAKIHZvaWQgUmVuZGVyVlRUQ3VlOjpsYXlvdXQo
KQpAQCAtNjIsOSArNjEsOSBAQCB2b2lkIFJlbmRlclZUVEN1ZTo6bGF5b3V0KCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKCp0aGlzLCBs
b2NhdGlvbk9mZnNldCgpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5
bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKLSAgICAKKwogICAgIGlmIChtX2N1
ZS0+Y3VlVHlwZSgpPT0gVGV4dFRyYWNrQ3VlOjpXZWJWVFQpIHsKLSAgICAgICAgaWYgKHRvVlRU
Q3VlKG1fY3VlKS0+c25hcFRvTGluZXMoKSkKKyAgICAgICAgaWYgKG1fY3VlLT5zbmFwVG9MaW5l
cygpKQogICAgICAgICAgICAgcmVwb3NpdGlvbkN1ZVNuYXBUb0xpbmVzU2V0KCk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHJlcG9zaXRpb25DdWVTbmFwVG9MaW5lc05vdFNldCgpOwpAQCAt
MzUyLDcgKzM1MSw3IEBAIHZvaWQgUmVuZGVyVlRUQ3VlOjpyZXBvc2l0aW9uR2VuZXJpY0N1ZSgp
CiAgICAgUmVuZGVyRWxlbWVudCYgYmFja2Ryb3BFbGVtZW50ID0gZG93bmNhc3Q8UmVuZGVyRWxl
bWVudD4oZmlyc3RDaGlsZCk7CiAgICAgCiAgICAgSW5saW5lRmxvd0JveCogZmlyc3RMaW5lQm94
ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqYmFja2Ryb3BFbGVtZW50LmZpcnN0Q2hpbGQoKSku
Zmlyc3RMaW5lQm94KCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PFRleHRUcmFja0N1ZUdlbmVyaWMq
PihtX2N1ZSktPnVzZURlZmF1bHRQb3NpdGlvbigpICYmIGZpcnN0TGluZUJveCkgeworICAgIGlm
IChkb3duY2FzdDxUZXh0VHJhY2tDdWVHZW5lcmljPigqbV9jdWUpLnVzZURlZmF1bHRQb3NpdGlv
bigpICYmIGZpcnN0TGluZUJveCkgewogICAgICAgICBMYXlvdXRVbml0IHBhcmVudFdpZHRoID0g
Y29udGFpbmluZ0Jsb2NrKCktPmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IHdp
ZHRoIHsgZmlyc3RMaW5lQm94LT53aWR0aCgpIH07CiAgICAgICAgIExheW91dFVuaXQgcmlnaHQg
PSAocGFyZW50V2lkdGggLyAyKSAtICh3aWR0aCAvIDIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3R5bGUvUnVsZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmNw
cAppbmRleCBlMjdlNTNmZTgyZDUyYzJlMTQ1Njk4NjA1NjYwZWFlYjgzYjI4NTVlLi5hYmIzMzQ2
ZjQ0NzQ0ZTg4NjZmNjJhYmUwZTYyOTdhMjFlYTRiZjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9SdWxlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0
LmNwcApAQCAtNDMsMTAgKzQzLDYgQEAKICNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQuaCIKICNp
bmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKIAotI2lmIEVOQUJMRShWSURFT19UUkFDSykK
LSNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBuYW1lc3BhY2UgU3R5bGUgewogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391624</attachid>
            <date>2020-02-24 22:19:19 -0800</date>
            <delta_ts>2020-02-24 22:25:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208114-20200224221918.patch</filename>
            <type>text/plain</type>
            <size>65404</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MjkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDRkNmU2YzkwZDgxNDA5
MmM0YjY1NDQ2MDU5ZjlhZGVmYjg0YTNkNS4uMGYxNmQ3ODU1NGQzMjczN2YwNGY3OGJkM2E3NWMy
NmNmMTFjZTZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2OSBAQAorMjAyMC0wMi0yMyAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgVGV4dFRyYWNr
Q3VlIHRvIHVzZSBtb3JlIHRyYWRpdGlvbmFsIGRlc2lnbiBwYXR0ZXJucworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4MTE0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBGaXhlZCBpczxWVFRDdWU+IHRv
IGFjY3VyYXRlbHkgbWF0Y2ggdGhlIGNsYXNzIGhpZXJhcmNoeS4gQmVmb3JlLCBUZXh0VHJhY2tD
dWVHZW5lcmljCisgICAgICAgICAgZGVyaXZlZCBmcm9tIFZUVEN1ZSwgYnV0IGlzPFZUVEN1ZT4g
d291bGQgcmV0dXJuIGZhbHNlLiBOb3JtYWxpemluZyB0aGlzIGxldHMgdXMgdXNlCisgICAgICAg
ICAgaXM8VlRUQ3VlPiBhbmQgZG93bmNhc3Q8VlRUQ3VlPiBpbiB0aGUgY29udmVudGlvbmFsIHdh
eS4KKyAgICAgICAgLSBNYWRlIHRoZSBUZXh0VHJhY2tDdWU6OmlzRXF1YWwgZnVuY3Rpb24gYSBu
b24tdmlydHVhbCBmdW5jdGlvbiB0aGF0IGNhbGxzIGEgdmlydHVhbAorICAgICAgICAgIGZ1bmN0
aW9uIFRleHRUcmFja0N1ZTo6Y3VlQ29udGVudHNNYXRjaC4gQmVmb3JlIHRoZXJlIHdhcyBhIG1p
eCBvZiBvdmVycmlkZGluZyBib3RoCisgICAgICAgICAgZnVuY3Rpb25zIGluIGRlcml2ZWQgY2xh
c3NlcywgYWNoaWV2aW5nIHRoZSBzYW1lIHRoaW5nIGluIG11bHRpcGxlIHdheXMgd2l0aAorICAg
ICAgICAgIHVubmVjY2Vzc2FyeSBhZGRpdGlvbmFsIHZpcnR1YWwgZnVuY3Rpb24gY2FsbCBvdmVy
aGVhZC4KKyAgICAgICAgLSBNYWRlIHRoZSBUZXh0VHJhY2tDdWU6OnRvSlNPTlN0cmluZyBmdW5j
dGlvbiBhIG5vbi12aXJ0dWFsIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYQorICAgICAgICAgIHZpcnR1
YWwgZnVudGlvbiBUZXh0VHJhY2tDdWU6OnRvSlNPTi4gQmVmb3JlIHRoZXJlIHdlcmUgdHdvIHZp
cnR1YWwgZnVuY3Rpb25zIGFuZAorICAgICAgICAgIGluY29uc2lzdGVudCBwYXR0ZXJucyBmb3Ig
d2hpY2ggb25lIHdhcyBvdmVycmlkZGVuLgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja1Jl
bW92ZUN1ZSk6IFVzZSBkb3duY2FzdCBpbnN0ZWFkIG9mIHRvVlRUQ3VlLgorCisgICAgICAgICog
aHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6IFJlbW92ZWQgc29tZSB1bm5lZWRlZCBpbmNsdWRlcy4K
KworICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnVwZGF0
ZURpc3BsYXkpOiBVc2UgZG93bmNhc3QKKyAgICAgICAgaW5zdGVhZCBvZiB0b1ZUVEN1ZS4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OnBy
b2Nlc3NBY3RpdmVWVFRDdWUpOiBSZW1vdmVkCisgICAgICAgIGFuIGFzc2VydGlvbiB0aGF0IG5v
IGxvbmdlciBtYWtlcyBzZW5zZTsgZ3VhcmFudGVlZCBhdCBydW50aW1lLgorCisgICAgICAgICog
aHRtbC9zaGFkb3cvTWVkaWFDb250cm9scy5oOiBSZW1vdmVkIGFuIHVubmVlZGVkIGluY2x1ZGUu
CisKKyAgICAgICAgKiBodG1sL3RyYWNrL0RhdGFDdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
dG9EYXRhQ3VlKTogRGVsZXRlZC4gTm8gbmVlZCBmb3IgdGhpcyBmdW5jdGlvbiBzaW5jZSB3ZSBj
YW4gdXNlCisgICAgICAgIGRvd25jYXN0PERhdGFDdWU+IGluc3RlYWQuCisgICAgICAgIChXZWJD
b3JlOjpEYXRhQ3VlOjpjdWVDb250ZW50c01hdGNoIGNvbnN0KTogUmVtb3ZlZCB1bm5lY2Vzc2Fy
eSBjaGVjayBvZiBjdWVUeXBlLgorICAgICAgICBUaGUgaXNFcXVhbCBmdW5jdGlvbiBjaGVja3Mg
Y3VlVHlwZSBhbmQgb25seSBjYWxscyB0aGlzIGZ1bmN0aW9uIGlmIGl0IG1hdGNoZXMuCisgICAg
ICAgIFVzZSBkb3duY2FzdCBpbnN0ZWFkIG9mIHRvRGF0YUN1ZS4KKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFDdWU6OmlzRXF1YWwgY29uc3QpOiBEZWxldGVkLiBCYXNlIGNsYXNzIG5vdyBoYW5kbGVz
IHRoaXMuCisgICAgICAgIChXZWJDb3JlOjpEYXRhQ3VlOjpkb2VzRXh0ZW5kQ3VlIGNvbnN0KTog
RGVsZXRlZC4gV2FzIG5ldmVyIGJlaW5nIGNhbGxlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFD
dWU6OnRvSlNPTlN0cmluZyBjb25zdCk6IERlbGV0ZWQuIE92ZXJyaWRlIHRvSlNPTiBpbnN0ZWFk
LgorICAgICAgICAoV2ViQ29yZTo6RGF0YUN1ZTo6dG9KU09OIGNvbnN0KTogTW92ZWQgdGhlIGNv
ZGUgaGVyZSB0aGF0IHVzZWQgdG8gYmUgaW4gdG9KU09OU3RyaW5nLgorCisgICAgICAgICogaHRt
bC90cmFjay9EYXRhQ3VlLmg6IFJlZHVjZWQgaW5jbHVkZXMuIE1hZGUgb3ZlcnJpZGRlbiBmdW5j
dGlvbnMgcHJpdmF0ZQorICAgICAgICBhbmQgZmluYWwuIFJlbW92ZWQgZnVuY3Rpb25zIGFzIG1t
ZW50aW9uZWQgYWJvdmUuIENoYW5nZWQgV1RGOjpMb2dBcmd1bWVudCBpbXBsZW1lbnRhdGlvbgor
ICAgICAgICB0byBqdXN0IGZvcndhcmQgdG8gVGV4dFRyYWNrQ3VlIGluc3RlYWQgb2YgcmVpbXBs
ZW1lbnRpbmcgaGVyZS4KKworICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kRGF0YVRleHRUcmFj
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmREYXRhVGV4dFRyYWNrOjpyZW1vdmVDdWUp
OiBVc2UgZG93bmNhc3QgaW5zdGVhZCBvZiB0b0RhdGFDdWUuCisKKyAgICAgICAgKiBodG1sL3Ry
YWNrL0luYmFuZEdlbmVyaWNUZXh0VHJhY2suY3BwOiBSZW1vdmVkIGFuIHVubmVlZGVkIGluY2x1
ZGUuCisKKyAgICAgICAgKiBodG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxvYWRhYmxlVGV4dFRyYWNrOjpMb2FkYWJsZVRleHRUcmFjayk6IFJlbW92
ZWQgdW5uZWVkZWQgaW5pdGlhbGl6YXRpb24gb2YKKyAgICAgICAgbV9pc0RlZmF1bHQsIHdoaWNo
IGlzIGluaXRpYWxpemVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLgorICAgICAgICAoV2ViQ29y
ZTo6TG9hZGFibGVUZXh0VHJhY2s6Om5ld0N1ZXNBdmFpbGFibGUpOiBSZW1vdmVkIHVubmVlZGVk
IGNhbGwgdG8gdG9WVFRDdWUsCisgICAgICAgIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIGJldHRl
ciBpbnRlcmZhY2Ugb2YgZ2V0TmV3Q3Vlcywgd2hpY2ggbm93IHJldHVybnMKKyAgICAgICAgVmVj
dG9yPFJlZjxWVFRDdWU+PiwgbWFraW5nIHRoZSB0eXBlIGV4cGxpY2l0LgorCisgICAgICAgICog
aHRtbC90cmFjay9UZXh0VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjph
ZGRDdWUpOiBVc2UgaXM8RGF0YUN1ZT4gaW5zdGVhZCBvZiBjaGVja2luZyBjdWVUeXBlLgorCisg
ICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFRyYWNrQ3VlOjpjcmVhdGUpOiBGaXhlZCBjb25mdXNpbmcgbmFtaW5nIHRoYXQgY2FsbGVk
IHRoZSBmcmFnbWVudCB0aGUKKyAgICAgICAgY3VlIGlzIGNvbnRhaW5lZCBpbiAiY3VlRG9jdW1l
bnQiOyBjYWxsIGl0IGN1ZUZyYWdtZW50IGluc3RlYWQuIFRoaXMgY29uc3RydWN0b3IKKyAgICAg
ICAgYWxyZWFkeSByZXF1aXJlZCB0aGF0IHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGJlIGEg
RG9jdW1lbnQuIERpZCB0aGUgdHlwZSBjYXN0CisgICAgICAgIGZvciB0aGF0IHVwIGZyb250LiBJ
biB0aGUgZnV0dXJlIHdvdWxkIGJlIGdvb2QgdG8gY2hhbmdlIHRoZSBhcmd1bWVudCB0eXBlIHRv
IERvY3VtZW50LgorICAgICAgICBBbHNvIGZpeGVkIGhvdyB0aGUgbmV3bHktY3JlYXRlZCBmcmFn
bWVudCBpcyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLiBUaGUgb2xkIGNvZGUKKyAgICAgICAg
dHJpZWQgdG8gdXNlIERvY3VtZW50RnJhZ21lbnQmJiB0byBwYXNzIG93bmVyc2hpcCwgYnV0IHNp
bmNlIHRoaXMgaXMgYSByZWZlcmVuY2UtY291bnRlZAorICAgICAgICBvYmplY3QgaXQgbmVlZHMg
dG8gYmUgUmVmPERvY3VtZW50RnJhZ21lbnQ+JiYuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJh
Y2tDdWU6OlRleHRUcmFja0N1ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgY29uc3QpOiBNb3ZlZCB0aGlzIGhlcmUgZnJvbSB0aGUgaGVh
ZGVyCisgICAgICAgIGZpbGUgc28gd2UgY2FuIGNvbXBpbGUgd2l0aG91dCBUZXh0VHJhY2tDdWUu
aCBpbmNsdWRpbmcgRG9jdW1lbnQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6
Y3VlQ29udGVudHNNYXRjaCBjb25zdCk6IFJlbW92ZWQgdGhlIGNvZGUgdGhhdCBjaGVja3MgY3Vl
VHlwZS4KKyAgICAgICAgSXQncyBub3cgaXNFcXVhbCB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBj
aGVja2luZyB0aGF0IHRoZSBjdWVUeXBlIG1hdGNoZXMsIGFuZAorICAgICAgICBjdWVDb250ZW50
c01hdGNoIGlzIG9ubHkgY2FsbGVkIHdoZW4gdGhlIHR5cGVzIGFyZSB0aGUgc2FtZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6aXNFcXVhbCBjb25zdCk6IFJlb3JkZXJlZCB0aGUg
Ym9vbGVhbiBjaGVja3MgYSBiaXQgc28gaXQncworICAgICAgICBlYXNpZXIgdG8gc2VlIHRoZSBs
b2dpYzsgbm8gbmVlZCBmb3IgYSBjYXNjYWRlIG9mIGlmIHN0YXRlbWVudHMuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0VHJhY2tDdWU6OmRvZXNFeHRlbmRDdWUgY29uc3QpOiBEZWxldGVkLiBXYXMg
bmV2ZXIgYmVpbmcgY2FsbGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6IFVzZSBk
b3duY2FzdCBpbnN0ZWFkIG9mIHRvVlRUQ3VlLgorCisgICAgICAgICogaHRtbC90cmFjay9UZXh0
VHJhY2tDdWUuaDogTWFkZSBpc0VxdWFsIG5vIGxvbmdlciB2aXJ0dWFsLiBUaGUgcGVyLWNsYXNz
IGJlaGF2aW9yCisgICAgICAgIGlzIG5vdyBhbGwgaW4gdGhlIHZpcnR1YWwgY3VlQ29udGVudHNN
YXRjaCBmdW5jdGlvbiwgb25seSBjYWxsZWQgYnkgaXNFcXVhbC4KKyAgICAgICAgUmVtb3ZlZCB1
bmNhbGxlZCBkb2VzRXh0ZW5kQ3VlIGZ1bmN0aW9uLiBBZGRlZCBzb21lIGFyZ3VtZW50IG5hbWVz
IGluIGNhc2VzIHdoZXJlCisgICAgICAgIHRoZSB0eXBlIGFsb25lIGRpZCBub3QgbWFrZSB0aGVp
ciBwdXJwb3NlIGNsZWFyLiBNYWRlIHNvbWUgdGhpbmdzIG1vcmUgcHJpdmF0ZS4KKyAgICAgICAg
UmVwbGFjZWQgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0IHdpdGggbV9kb2N1bWVudC4KKworICAg
ICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVhdGUpOiBNb3ZlZCB0aGlzIGZ1bmN0aW9uIGhl
cmUgZnJvbSB0aGUgaGVhZGVyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJp
Yzo6VGV4dFRyYWNrQ3VlR2VuZXJpYyk6IEluaXRpYWxpemVkIGRhdGEgbWVtYmVycyBpbiB0aGUK
KyAgICAgICAgY2xhc3MgZGVmaW5pdGlvbiBzbyB0aGV5IGRvbid0IGFsc28gbmVlZCB0byBiZSBp
bml0aWFsaXplZCBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6
Y3VlQ29udGVudHNNYXRjaCBjb25zdCk6IFJld3JvdGUgdXNpbmcgJiYgcmF0aGVyIHRoYW4KKyAg
ICAgICAgY2FzdGNhZGluZyBpZiBzdGF0ZW1lbnRzLCBtYWtpbmcgdGhlIGZ1bmN0aW9uIHNob3J0
ZXIgYW5kZCBlYXNpZXIgdG8gcmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdl
bmVyaWM6OmlzRXF1YWwgY29uc3QpOiBEZWxldGVkLiBCYXNlIGNsYXNzIG5vdyBoYW5kZXMgdGhp
cy4KKyAgICAgICAgVGhlIG9sZCB2ZXJzaW9uIGhhZCBjb25mdXNpbmcgbG9naWMgdG8gZGVhbCB3
aXRoIGNoZWNraW5nIGN1ZSB0eXBlOyBjYW4gbm93IGRvIHRoaXMKKyAgICAgICAgaW4gYSBtb3Jl
IHN0cmFpZ2h0Zm9yd2FyZCB3YXkuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5l
cmljOjpkb2VzRXh0ZW5kQ3VlIGNvbnN0KTogRGVsZXRlZC4gV2FzIG5ldmVyIGNhbGxlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OmlzT3JkZXJlZEJlZm9yZSBjb25z
dCk6IFVzZSBpczxUZXh0VHJhY2tDdWVHZW5lcmljPgorICAgICAgICBhbmQgZG93bmNhc3Q8VGV4
dFRyYWNrQ3VlR2VuZXJpYz4uCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmlj
Ojppc1Bvc2l0aW9uZWRBYm92ZSBjb25zdCk6IERpdHRvLiBBbHNvIG1lcmdlZCB0d28KKyAgICAg
ICAgaWYgc3RhdGVtZW50cyBzbyB0aGVyZSBpcyBsZXNzIHJlcGVhdGVkIGxvZ2ljLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6dG9KU09OU3RyaW5nIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OnRvSlNPTiBjb25z
dCk6IE1vdmVkIGNvZGUgaGVyZSB0aGF0IHdhcyBpbiB0b0pTT05TdHJpbmcuCisKKyAgICAgICAg
KiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuaDogTWFkZSB0aGluZ3MgbW9yZSBwcml2
YXRlLiBDaGFuZ2VkIFdURjo6TG9nQXJndW1lbnQKKyAgICAgICAgaW1wbGVtZW50YXRpb24gdG8g
anVzdCBmb3J3YXJkIHRvIFRleHRUcmFja0N1ZSBpbnN0ZWFkIG9mIHJlaW1wbGVtZW50aW5nIGhl
cmUuCisKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlTGlzdDo6Y3JlYXRlKTogTW92ZWQgaGVyZSBmcm9tIGhl
YWRlci4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuaDogRGl0dG8uCisK
KyAgICAgICAgKiBodG1sL3RyYWNrL1ZUVEN1ZS5jcHA6IE1vdmVkIHVuZGVmaW5lZFBvc2l0aW9u
IHRvIGJlIGEgcHJpdmF0ZSBzdGF0aWMgY29uc3RleHByCisgICAgICAgIGRhdGEgbWVtYmVyIHNv
IGl0IGNhbiBiZSB1c2VkIGluIGluaXRpYWxpemF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6VlRU
Q3VlQm94OjphcHBseUNTU1Byb3BlcnRpZXMpOiBVc2UgaXM8VlRUQ3VlPiBhbmQgZG93bmNhc3Q8
VlRUQ3VlPi4KKyAgICAgICAgKFdlYkNvcmU6OlZUVEN1ZTo6Y3JlYXRlKTogTW92ZWQgbW9yZSBv
dmVybG9hZHMgb2YgdGhpcyBmdW5jdGlvbiBoZXJlIGZyb20gdGhlCisgICAgICAgIGhlYWRlciBm
aWxlLgorICAgICAgICAoV2ViQ29yZTo6VlRUQ3VlOjpWVFRDdWUpOiBUYWtlIERvY3VtZW50IGlu
c3RlYWQgb2YgU2NyaXB0RXhlY3V0aW9uQ29udGV4dC4KKyAgICAgICAgQWxzbyB0b29rIHRoZSBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0IGFyZ3VtZW50IGF3YXkgZnJvbSB0aGUgaW5pdGlhbGl6ZSBm
dW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlZUVEN1ZTo6aW5pdGlhbGl6ZSk6IERvIGxlc3Mg
aW5pdGlhbGl6YXRpb24gaGVyZS4gVGhpcyBmdW5jdGlvbiBpcworICAgICAgICBvbmx5IGNhbGxl
ZCBpbiBjb25zdHJ1Y3RvcnMsIHNvIGl0IGRvZXNuJ3QgbmVlZCB0byBpbml0aWFsaXplIGFueXRo
aW5nIHRoYXQKKyAgICAgICAgaXMgaW5pdGlhbGl6ZWQgaW4gYWxsIGNvbnN0cnVjdG9ycyBvciBp
bml0aWFsaXplZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4KKyAgICAgICAgV2hhdCByZW1haW5z
IGFyZSB0aGluZ3MgdGhhdCByZXF1aXJlIGEgbGl0dGxlIGNvZGUgdG8gaW5pdGlhbGl6ZSBhbmQg
dGhlCisgICAgICAgIGJpdGZpZWxkcywgd2hpY2ggY2FuJ3QgYmUgaW5pdGlhbGl6ZWQgaW4gdGhl
IGNsYXNzIGRlZmluaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpWVFRDdWU6OnNldFBvc2l0aW9u
KTogUmVhcnJhbmdlZCB0aGUgY29kZSBhIHRpbnkgYml0LgorICAgICAgICAoV2ViQ29yZTo6Y29w
eVdlYlZUVE5vZGVUb0RPTVRyZWUpOiBNYWRlIHRoaXMgYSBub24tbWVtYmVyIGZ1bmN0aW9uLiBB
bHNvIGNoYW5nZWQKKyAgICAgICAgdGhlIGFyZ3VtZW50IHR5cGVzIHRvIHVzZSByZWZlcmVuY2Vz
LgorICAgICAgICAoV2ViQ29yZTo6VlRUQ3VlOjpnZXRDdWVBc0hUTUwpOiBVcGRhdGVkIGZvciBj
aGFuZ2VzIHRvIGNvcHlXZWJWVFROb2RlVG9ET01UcmVlLgorICAgICAgICAoV2ViQ29yZTo6VlRU
Q3VlOjpyZW1vdmVEaXNwbGF5VHJlZSk6IENoZWNrIG1fZGlzcGxheVRyZWUgZGlyZWN0bHkgaW5z
dGVhZAorICAgICAgICBvZiBjYWxsaW5nIGEgaGFzRGlzcGxheVRyZWUgZnVuY3Rpb24sIHNpbmNl
IHRoYXQncyBtb3JlIGEgbW9yZSBzdHJhaWdodGZvcndhcmQKKyAgICAgICAgd2F5IHRvIGd1YXJk
IGEgc3Vic2VxdWVudCBsaW5lIG9mIGNvZGUgdGhhdCB0aGVuIHVzZXMgbV9kaXNwbGF5VHJlZS4K
KyAgICAgICAgKFdlYkNvcmU6OlZUVEN1ZTo6c2V0Q3VlU2V0dGluZ3MpOiBNZXJnZWQgdHdvIGlm
IHN0YXRlbWVudHMgaW50byBvbmUuCisgICAgICAgIChXZWJDb3JlOjpWVFRDdWU6OmN1ZUNvbnRl
bnRzTWF0Y2ggY29uc3QpOiBSZXdyb3RlIHVzaW5nICYmIHJhdGhlciB0aGFuCisgICAgICAgIGNh
c3RjYWRpbmcgaWYgc3RhdGVtZW50cywgbWFraW5nIHRoZSBmdW5jdGlvbiBzaG9ydGVyIGFuZGQg
ZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIChXZWJDb3JlOjpWVFRDdWU6OmlzRXF1YWwgY29uc3Qp
OiBEZWxldGVkLiBCYXNlIGNsYXNzIG5vdyBoYW5kbGVzIHRoaXMuCisgICAgICAgIChXZWJDb3Jl
OjpWVFRDdWU6OmRvZXNFeHRlbmRDdWUgY29uc3QpOiBEZWxldGVkLiBXYXMgbmV2ZXIgY2FsbGVk
LgorICAgICAgICAoV2ViQ29yZTo6dG9WVFRDdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6VlRUQ3VlOjp0b0pTT05TdHJpbmcgY29uc3QpOiBEZWxldGVkLiBCYXNlIGNsYXNzIG5vdyBo
YW5kbGVzIHRoaXMuCisgICAgICAgIChXZWJDb3JlOjpWVFRDdWU6OnRvSlNPTiBjb25zdCk6IEFk
ZGVkIGEgY29tbWVudC4KKworICAgICAgICAqIGh0bWwvdHJhY2svVlRUQ3VlLmg6IE1vdmVkIGNy
ZWF0ZSBmdW5jdGlvbnMgb3V0IG9mIGhlYWRlciwgbWFkZSBzb21lIHRoaW5ncworICAgICAgICBt
b3JlIHByaXZhdGUgYW5kIGZpbmFsLCBpbml0aWFsaXplZCBtb3JlIGRhdGEgbWVtYmVycyBpbiB0
aGUgY2xhc3MgZGVmaW5pdGlvbi4KKyAgICAgICAgUmVtb3ZlZCB0b1ZUVEN1ZS4gQ2hhbmdlZCBX
VEY6OkxvZ0FyZ3VtZW50IGltcGxlbWVudGF0aW9uIHRvIGp1c3QgZm9yd2FyZCB0bworICAgICAg
ICBUZXh0VHJhY2tDdWUgaW5zdGVhZCBvZiByZWltcGxlbWVudGluZyBoZXJlLiBDb3JyZWN0ZWQg
dGhlIGlzVHlwZSBmdW5jdGlvbiBzbworICAgICAgICBpdCBrbm93cyBhYm91dCBib3RoIGN1ZSB0
eXBlcyB0aGF0IHJlc3VsdCBpbiBhIFZUVEN1ZSBvYmplY3QuIFRoaXMgYWxsb3dzIHVzCisgICAg
ICAgIHRvIHVzZSBpczxWVFRDdWU+IGFuZCBkb3duY2FzdDxWVFRDdWU+IGluIHRoZSBub3JtYWwg
d2F5LiBSZW1vdmVkIHRoZSBGSVhNRQorICAgICAgICBzYXlpbmcgd2Ugc2hvdWxkIGRvIHRoYXQu
CisKKyAgICAgICAgKiBsb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRUcmFja0xvYWRlcjo6Z2V0TmV3Q3Vlcyk6IENoYW5nZWQgdG8gcmV0dXJuIGEgVmVj
dG9yPFJlZjxWVFRDdWU+Pi4KKyAgICAgICAgSW4gbW9kZXJuIEMrKyByZXR1cm4gdmFsdWUgaXMg
YmV0dGVyIHRoYW4gYW4gb3V0IGFyZ3VtZW50IGZvciBhIGZ1bmN0aW9uIGxpa2UKKyAgICAgICAg
dGhpcywgYW5kIHRoZSBtb3JlLXNwZWNpZmljIHR5cGUgaGVscHMgdXMgYXQgdGhlIGNhbGwgc2l0
ZXMuCisKKyAgICAgICAgKiBsb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmg6IFVwZGF0ZWQgZm9yIHRo
ZSBhYm92ZS4KKworICAgICAgICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYu
Y3BwOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmg6CisgICAg
ICAgIFVzZSAjcHJhZ21hIG9uY2UgYW5kIHJlbW92ZWQgc29tZSB1bm5lZGVkIGluY2x1ZGVzIGFu
ZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWVFRD
dWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVlRUQ3VlOjpSZW5kZXJWVFRDdWUpOiBV
c2UgZG93bmNhc3Q8VlRUQ3VlPi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZUVEN1ZTo6bGF5
b3V0KTogUmVtb3ZlZCB1bm5lZWRlZCBjYWxsIHRvIHRvVlRUQ3VlLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVlRUQ3VlOjpyZXBvc2l0aW9uR2VuZXJpY0N1ZSk6IFVzZSBkb3duY2FzdCBpbnN0
ZWFkIG9mCisgICAgICAgIHN0YXRpY19jYXN0IGZvciBUZXh0VHJhY2tDdWVHZW5lcmljLgorCisg
ICAgICAgICogc3R5bGUvUnVsZVNldC5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZS4KKwog
MjAyMC0wMi0yNCAgQ2hhbmdTZW9rIE9oICA8Y2hhbmdzZW9rQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUFMtMjAxOS0wMDY6IFtHVEtdIFdlYktpdCAtIEFYT2JqZWN0Q2FjaGUgLSBtX2RlZmVycmVk
Rm9jdXNlZE5vZGVDaGFuZ2UgLSBVYUYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCmluZGV4IDNmNzU3ODRiMzFlOWUzZTdmN2Y5NTRlODk3YzZiZjkyZjA2NjE2OWUuLjk2
OWM1MGQ4MzA2MThhODc0OTViNWRkMTI5MDNkYzYzZWE0OGM1NzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtMjAzMSwxMSArMjAzMSwxMSBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja1JlbW92ZUN1ZShUZXh0VHJhY2smLCBUZXh0VHJhY2tD
dWUmIGN1ZSkKICAgICBtX2N1ZURhdGEtPmN1ZVRyZWUucmVtb3ZlKGludGVydmFsKTsKIAogICAg
IC8vIFNpbmNlIHRoZSBjdWUgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIG1lZGlhIGVsZW1lbnQg
YW5kIGxpa2VseSB0aGUKLSAgICAvLyBUZXh0VHJhY2sgbWlnaHQgYWxzbyBiZSBkZXN0cnVjdGVk
LCBub3RpZnlpbmcgdGhlIHJlZ2lvbiBvZiB0aGUgY3VlCisgICAgLy8gVGV4dFRyYWNrIG1pZ2h0
IGFsc28gYmUgZGVzdHJveWVkLCBub3RpZnlpbmcgdGhlIHJlZ2lvbiBvZiB0aGUgY3VlCiAgICAg
Ly8gcmVtb3ZhbCBzaG91bGRuJ3QgYmUgZG9uZS4KICAgICBhdXRvIGlzVlRUID0gaXM8VlRUQ3Vl
PihjdWUpOwogICAgIGlmIChpc1ZUVCkKLSAgICAgICAgdG9WVFRDdWUoJmN1ZSktPm5vdGlmeVJl
Z2lvbldoZW5SZW1vdmluZ0Rpc3BsYXlUcmVlKGZhbHNlKTsKKyAgICAgICAgZG93bmNhc3Q8VlRU
Q3VlPihjdWUpLm5vdGlmeVJlZ2lvbldoZW5SZW1vdmluZ0Rpc3BsYXlUcmVlKGZhbHNlKTsKIAog
ICAgIHNpemVfdCBpbmRleCA9IG1fY3VlRGF0YS0+Y3VycmVudGx5QWN0aXZlQ3Vlcy5maW5kKGlu
dGVydmFsKTsKICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKQEAgLTIwNDcsNyArMjA0Nyw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrUmVtb3ZlQ3VlKFRleHRUcmFjayYs
IFRleHRUcmFja0N1ZSYgY3VlKQogICAgIHVwZGF0ZUFjdGl2ZVRleHRUcmFja0N1ZXMoY3VycmVu
dE1lZGlhVGltZSgpKTsKIAogICAgIGlmIChpc1ZUVCkKLSAgICAgICAgdG9WVFRDdWUoJmN1ZSkt
Pm5vdGlmeVJlZ2lvbldoZW5SZW1vdmluZ0Rpc3BsYXlUcmVlKHRydWUpOworICAgICAgICBkb3du
Y2FzdDxWVFRDdWU+KGN1ZSkubm90aWZ5UmVnaW9uV2hlblJlbW92aW5nRGlzcGxheVRyZWUodHJ1
ZSk7CiB9CiAKIEN1ZUxpc3QgSFRNTE1lZGlhRWxlbWVudDo6Y3VycmVudGx5QWN0aXZlQ3Vlcygp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IGU3MTU2M2Nm
ZjYxYTUxNDU1NjcyNGRmZDNjYTcwYjAxMDlmZmY1NjAuLjVkZTBkMTExODUxYWM3ZmE4YzNlOTVk
YjZlZWQ5YWYzMWNmNTE1OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5o
CkBAIC00Nyw4ICs0Nyw2IEBACiAjaW5jbHVkZSAiQXVkaW9UcmFjay5oIgogI2luY2x1ZGUgIkNh
cHRpb25Vc2VyUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJUZXh0VHJhY2suaCIKLSNpbmNsdWRl
ICJUZXh0VHJhY2tDdWUuaCIKLSNpbmNsdWRlICJWVFRDdWUuaCIKICNpbmNsdWRlICJWaWRlb1Ry
YWNrLmgiCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sRWxlbWVudHMuY3BwCmluZGV4IDczMzM3NmNmOWJhODg4ZmM3YmVmNDkyODcxY2Nh
ZTQxZTU1NTM2YzEuLmVlYmE4OTRjNWVhNTIxNWEwM2ExMTdjZGI2NmFmODE4NDlkMGQwOWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAKQEAgLTExOTAsOCArMTE5MCw4IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29u
dGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSgpCiAgICAgICAgIGZvciAoYXV0byYgaW50ZXJ2
YWwgOiBhY3RpdmVDdWVzKSB7CiAgICAgICAgICAgICBhdXRvIGN1ZSA9IGludGVydmFsLmRhdGEo
KTsKICAgICAgICAgICAgIGN1ZS0+c2V0Rm9udFNpemUobV9mb250U2l6ZSwgbV92aWRlb0Rpc3Bs
YXlTaXplLnNpemUoKSwgbV9mb250U2l6ZUlzSW1wb3J0YW50KTsKLSAgICAgICAgICAgIGlmIChp
czxWVFRDdWU+KGN1ZSkgfHwgaXM8VGV4dFRyYWNrQ3VlR2VuZXJpYz4oY3VlKSkKLSAgICAgICAg
ICAgICAgICBwcm9jZXNzQWN0aXZlVlRUQ3VlKCp0b1ZUVEN1ZShjdWUpKTsKKyAgICAgICAgICAg
IGlmIChpczxWVFRDdWU+KCpjdWUpKQorICAgICAgICAgICAgICAgIHByb2Nlc3NBY3RpdmVWVFRD
dWUoZG93bmNhc3Q8VlRUQ3VlPigqY3VlKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgICAgICBhdXRvIGRpc3BsYXlCb3ggPSBjdWUtPmdldERpc3BsYXlUcmVlKG1fdmlkZW9EaXNw
bGF5U2l6ZS5zaXplKCksIG1fZm9udFNpemUpOwogICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5
Qm94LT5oYXNDaGlsZE5vZGVzKCkgJiYgIWNvbnRhaW5zKGRpc3BsYXlCb3guZ2V0KCkpKQpAQCAt
MTIxMiw4ICsxMjEyLDYgQEAgdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVt
ZW50Ojp1cGRhdGVEaXNwbGF5KCkKIAogdm9pZCBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWlu
ZXJFbGVtZW50Ojpwcm9jZXNzQWN0aXZlVlRUQ3VlKFZUVEN1ZSYgY3VlKQogewotICAgIEFTU0VS
VChpczxWVFRDdWU+KGN1ZSkgfHwgaXM8VGV4dFRyYWNrQ3VlR2VuZXJpYz4oY3VlKSk7Ci0KICAg
ICBERUJVR19MT0coTE9HSURFTlRJRklFUiwgImFkZGluZyBhbmQgcG9zaXRpb25pbmcgY3VlOiBc
IiIsIGN1ZS50ZXh0KCksICJcIiwgc3RhcnQ9IiwgY3VlLnN0YXJ0VGltZSgpLCAiLCBlbmQ9Iiwg
Y3VlLmVuZFRpbWUoKSwgIiwgbGluZT0iLCBjdWUubGluZSgpKTsKICAgICBSZWY8VGV4dFRyYWNr
Q3VlQm94PiBkaXNwbGF5Qm94ID0gKmN1ZS5nZXREaXNwbGF5VHJlZShtX3ZpZGVvRGlzcGxheVNp
emUuc2l6ZSgpLCBtX2ZvbnRTaXplKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9scy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9scy5oCmluZGV4IDQ3NjZiMzRhNTk5MDI4YzBlMmM4NjVlODU0OWZlOWM3ZjQ4Zjc5
YWQuLmY0ZjBkMWMwZTI3MDRiMWExMDhlZTljZTljMTRiODQ0NDBmMTRiZjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbHMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmgKQEAgLTMzLDE2ICszMywxMSBAQAog
I2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotI2luY2x1ZGUgIlRleHRUcmFja0N1ZS5oIgot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBF
dmVudDsKIGNsYXNzIE1lZGlhUGxheWVyOwotCiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5k
ZXJNZWRpYTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9EYXRhQ3Vl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5jcHAKaW5kZXggNWQ1ZTNm
M2Q3MzgzMjYzZGMxOGE3ZTc3YmQ3ZjRmNTA3MzRjYjZlMS4uM2IwMzJmMTA3Mzc5NGE5ZmYyZjgz
MTllMTY1OTEwZjdjNTFmNjYxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9EYXRhQ3VlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0RhdGFDdWUuY3Bw
CkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisKICNpbmNsdWRlICJEYXRhQ3VlLmgiCiAKICNpbmNsdWRlICJMb2dnaW5nLmgi
CkBAIC05MCwyNCArOTEsOSBAQCB2b2lkIERhdGFDdWU6OnNldERhdGEoQXJyYXlCdWZmZXImIGRh
dGEpCiAgICAgbV9kYXRhID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShkYXRhKTsKIH0KIAotRGF0YUN1
ZSogdG9EYXRhQ3VlKFRleHRUcmFja0N1ZSogY3VlKQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKGN1ZS0+Y3VlVHlwZSgpID09IFRleHRUcmFja0N1ZTo6RGF0YSk7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGFDdWUqPihjdWUpOwotfQotCi1jb25zdCBEYXRhQ3Vl
KiB0b0RhdGFDdWUoY29uc3QgVGV4dFRyYWNrQ3VlKiBjdWUpCi17Ci0gICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oY3VlLT5jdWVUeXBlKCkgPT0gVGV4dFRyYWNrQ3VlOjpEYXRh
KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRGF0YUN1ZSo+KGN1ZSk7Ci19Ci0KIGJv
b2wgRGF0YUN1ZTo6Y3VlQ29udGVudHNNYXRjaChjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkgY29u
c3QKIHsKLSAgICBpZiAoY3VlLmN1ZVR5cGUoKSAhPSBUZXh0VHJhY2tDdWU6OkRhdGEpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IERhdGFDdWUqIGRhdGFDdWUgPSB0b0RhdGFD
dWUoJmN1ZSk7CisgICAgY29uc3QgRGF0YUN1ZSogZGF0YUN1ZSA9IGRvd25jYXN0PERhdGFDdWU+
KCZjdWUpOwogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gb3RoZXJEYXRhID0gZGF0YUN1ZS0+ZGF0
YSgpOwogICAgIGlmICgob3RoZXJEYXRhICYmICFtX2RhdGEpIHx8ICghb3RoZXJEYXRhICYmIG1f
ZGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEzMiwyNSArMTE4LDYgQEAgYm9vbCBE
YXRhQ3VlOjpjdWVDb250ZW50c01hdGNoKGNvbnN0IFRleHRUcmFja0N1ZSYgY3VlKSBjb25zdAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIERhdGFDdWU6OmlzRXF1YWwoY29uc3QgVGV4dFRy
YWNrQ3VlJiBjdWUsIFRleHRUcmFja0N1ZTo6Q3VlTWF0Y2hSdWxlcyBtYXRjaCkgY29uc3QKLXsK
LSAgICBpZiAoIVRleHRUcmFja0N1ZTo6aXNFcXVhbChjdWUsIG1hdGNoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKGN1ZS5jdWVUeXBlKCkgIT0gVGV4dFRyYWNrQ3VlOjpEYXRh
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gY3VlQ29udGVudHNNYXRjaChj
dWUpOwotfQotCi1ib29sIERhdGFDdWU6OmRvZXNFeHRlbmRDdWUoY29uc3QgVGV4dFRyYWNrQ3Vl
JiBjdWUpIGNvbnN0Ci17Ci0gICAgaWYgKCFjdWVDb250ZW50c01hdGNoKGN1ZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBUZXh0VHJhY2tDdWU6OmRvZXNFeHRlbmRDdWUo
Y3VlKTsKLX0KLQogSlNDOjpKU1ZhbHVlIERhdGFDdWU6OnZhbHVlKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIHN0YXRlKSBjb25zdAogewogICAgIGlmIChtX3BsYXRmb3JtVmFsdWUpCkBAIC0xNzgsMTYg
KzE0NSwxMiBAQCBKU1ZhbHVlIERhdGFDdWU6OnZhbHVlT3JOdWxsKCkgY29uc3QKICAgICByZXR1
cm4ganNOdWxsKCk7CiB9CiAKLVN0cmluZyBEYXRhQ3VlOjp0b0pTT05TdHJpbmcoKSBjb25zdAor
dm9pZCBEYXRhQ3VlOjp0b0pTT04oSlNPTjo6T2JqZWN0JiBvYmplY3QpIGNvbnN0CiB7Ci0gICAg
YXV0byBvYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotCi0gICAgVGV4dFRyYWNrQ3Vl
Ojp0b0pTT04ob2JqZWN0LmdldCgpKTsKKyAgICBUZXh0VHJhY2tDdWU6OnRvSlNPTihvYmplY3Qp
OwogCiAgICAgaWYgKCFtX3R5cGUuaXNFbXB0eSgpKQotICAgICAgICBvYmplY3QtPnNldFN0cmlu
ZygidHlwZSJfcywgbV90eXBlKTsKLQotICAgIHJldHVybiBvYmplY3QtPnRvSlNPTlN0cmluZygp
OworICAgICAgICBvYmplY3Quc2V0U3RyaW5nKCJ0eXBlIl9zLCBtX3R5cGUpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0RhdGFDdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5oCmluZGV4IDYz
YTY3YzA0OTE1ZTYzZjMyNDI2ZjYyMzBkODZlNDI4MTdmNTIxYWIuLjU3ZTlhZTlkMDVmMDcxOGY2
MDYwNzRhYTNkNGQ1NjQwMTI1NDdkNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svRGF0YUN1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svRGF0YUN1ZS5o
CkBAIC0zMCwxMSArMzAsMTQgQEAKIAogI2luY2x1ZGUgIlNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFD
dWUuaCIKICNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9BcnJheUJ1ZmZlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0pTVmFsdWUuaD4K
ICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgog
CituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEFycmF5QnVmZmVyOworY2xhc3MgSlNWYWx1ZTsKK30K
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwpA
QCAtNzIsNyArNzUsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB+RGF0YUN1ZSgp
OwotICAgIEN1ZVR5cGUgY3VlVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIERhdGE7IH0K
IAogICAgIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiBkYXRhKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXREYXRhKEpTQzo6QXJyYXlCdWZmZXImKTsKQEAgLTg1LDEyICs4Nyw2IEBAIHB1YmxpYzoKICAg
ICBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHZvaWQgc2V0VHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQogCi0gICAgYm9vbCBpc0Vx
dWFsKGNvbnN0IFRleHRUcmFja0N1ZSYsIEN1ZU1hdGNoUnVsZXMpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIGJvb2wgY3VlQ29udGVudHNNYXRjaChjb25zdCBUZXh0VHJhY2tDdWUmKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBib29sIGRvZXNFeHRlbmRDdWUoY29uc3QgVGV4dFRyYWNrQ3VlJikgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3Q7Ci0KIHByaXZhdGU6
CiAgICAgRGF0YUN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgTWVkaWFUaW1lJiBz
dGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIEFycmF5QnVmZmVyJiwgY29uc3QgU3RyaW5nJik7
CiAgICAgRGF0YUN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgTWVkaWFUaW1lJiBz
dGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0IHZvaWQqLCB1bnNpZ25lZCk7CkBAIC05
OCw2ICs5NCw5IEBAIHByaXZhdGU6CiAgICAgRGF0YUN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIEpTQzo6SlNW
YWx1ZSwgY29uc3QgU3RyaW5nJik7CiAKICAgICBKU0M6OkpTVmFsdWUgdmFsdWVPck51bGwoKSBj
b25zdDsKKyAgICBDdWVUeXBlIGN1ZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBEYXRhOyB9
CisgICAgYm9vbCBjdWVDb250ZW50c01hdGNoKGNvbnN0IFRleHRUcmFja0N1ZSYpIGNvbnN0IGZp
bmFsOworICAgIHZvaWQgdG9KU09OKEpTT046Ok9iamVjdCYpIGNvbnN0IGZpbmFsOwogCiAgICAg
UmVmUHRyPEFycmF5QnVmZmVyPiBtX2RhdGE7CiAgICAgU3RyaW5nIG1fdHlwZTsKQEAgLTEwOCwy
MyArMTA3LDExIEBAIHByaXZhdGU6CiAgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX3Zh
bHVlOwogfTsKIAotRGF0YUN1ZSogdG9EYXRhQ3VlKFRleHRUcmFja0N1ZSopOwotY29uc3QgRGF0
YUN1ZSogdG9EYXRhQ3VlKGNvbnN0IFRleHRUcmFja0N1ZSopOwotCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKIG5hbWVzcGFjZSBXVEYgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotc3Ry
dWN0IExvZ0FyZ3VtZW50OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IExvZ0FyZ3VtZW50PFdlYkNv
cmU6OkRhdGFDdWU+IHsKLSAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IFdlYkNvcmU6
OkRhdGFDdWUmIGN1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjdWUudG9KU09OU3RyaW5nKCk7
Ci0gICAgfQotfTsKK3RlbXBsYXRlPD4gc3RydWN0IExvZ0FyZ3VtZW50PFdlYkNvcmU6OkRhdGFD
dWU+IDogTG9nQXJndW1lbnQ8V2ViQ29yZTo6VGV4dFRyYWNrQ3VlPiB7IH07CiAKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmREYXRhVGV4dFRyYWNrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kRGF0YVRleHRUcmFjay5jcHAKaW5k
ZXggMGMwNGYzYzFiNWYxNzJlNzJkY2YzZmE1ZTM1YmIwZTk3MzIwODY1MS4uNGQ2MGQ2YmEwODRl
NzZiZDdiZDkxMDg4ZGUzNDY1NzllNzM1ODIzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9JbmJhbmREYXRhVGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL0luYmFuZERhdGFUZXh0VHJhY2suY3BwCkBAIC0xMjUsNyArMTI1LDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gSW5iYW5kRGF0YVRleHRUcmFjazo6cmVtb3ZlQ3VlKFRleHRUcmFja0N1
ZSYgY3VlKQogewogICAgIEFTU0VSVChjdWUuY3VlVHlwZSgpID09IFRleHRUcmFja0N1ZTo6RGF0
YSk7CiAKLSAgICBpZiAoYXV0byBwbGF0Zm9ybVZhbHVlID0gY29uc3RfY2FzdDxTZXJpYWxpemVk
UGxhdGZvcm1EYXRhQ3VlKj4odG9EYXRhQ3VlKCZjdWUpLT5wbGF0Zm9ybVZhbHVlKCkpKQorICAg
IGlmIChhdXRvIHBsYXRmb3JtVmFsdWUgPSBjb25zdF9jYXN0PFNlcmlhbGl6ZWRQbGF0Zm9ybURh
dGFDdWUqPihkb3duY2FzdDxEYXRhQ3VlPihjdWUpLnBsYXRmb3JtVmFsdWUoKSkpCiAgICAgICAg
IHJlbW92ZURhdGFDdWUoeyB9LCB7IH0sICpwbGF0Zm9ybVZhbHVlKTsKIAogICAgIHJldHVybiBJ
bmJhbmRUZXh0VHJhY2s6OnJlbW92ZUN1ZShjdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9JbmJhbmRHZW5lcmljVGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svSW5iYW5kR2VuZXJpY1RleHRUcmFjay5jcHAKaW5kZXggMjYyODk0ZjJlMTMy
NTlkNDQ4Mjg4MWU1MWUwYzQ1NjBhOWU1YTAzZi4uNjUxYmJjMWIwNzRhYzgzY2EyOGY0NjFiYjFm
NGU0OTdiN2JlOTU3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJh
bmRHZW5lcmljVGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0lu
YmFuZEdlbmVyaWNUZXh0VHJhY2suY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUo
VklERU9fVFJBQ0spCiAKLSNpbmNsdWRlICJEYXRhQ3VlLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlh
RWxlbWVudC5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGUuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0xvYWRh
YmxlVGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svTG9hZGFibGVUZXh0
VHJhY2suY3BwCmluZGV4IDdhMWUxYmM0NjkxYjIxMTY4OGMzY2Y1ZGE2MTlhYzYxZGJkNmZlMGEu
LmNlYjAyY2Y0YmU0NTNjMGQ2NDE5Mjc5ZmQ0N2U5ZTU0OWI2NjY1ODkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suY3BwCkBAIC00Myw3ICs0Myw2
IEBAIExvYWRhYmxlVGV4dFRyYWNrOjpMb2FkYWJsZVRleHRUcmFjayhIVE1MVHJhY2tFbGVtZW50
JiB0cmFjaywgY29uc3QgU3RyaW5nJiBraW5kCiAgICAgOiBUZXh0VHJhY2soJnRyYWNrLmRvY3Vt
ZW50KCksICZ0cmFjaywga2luZCwgZW1wdHlTdHJpbmcoKSwgbGFiZWwsIGxhbmd1YWdlLCBUcmFj
a0VsZW1lbnQpCiAgICAgLCBtX3RyYWNrRWxlbWVudCgmdHJhY2spCiAgICAgLCBtX2xvYWRUaW1l
cigqdGhpcywgJkxvYWRhYmxlVGV4dFRyYWNrOjpsb2FkVGltZXJGaXJlZCkKLSAgICAsIG1faXNE
ZWZhdWx0KGZhbHNlKQogewogfQogCkBAIC05MywxNiArOTIsMTMgQEAgdm9pZCBMb2FkYWJsZVRl
eHRUcmFjazo6bmV3Q3Vlc0F2YWlsYWJsZShUZXh0VHJhY2tMb2FkZXImIGxvYWRlcikKIHsKICAg
ICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbV9sb2FkZXIuZ2V0KCkgPT0gJmxvYWRlcik7CiAKLSAg
ICBWZWN0b3I8UmVmUHRyPFRleHRUcmFja0N1ZT4+IG5ld0N1ZXM7Ci0gICAgbV9sb2FkZXItPmdl
dE5ld0N1ZXMobmV3Q3Vlcyk7Ci0KICAgICBpZiAoIW1fY3VlcykKICAgICAgICAgbV9jdWVzID0g
VGV4dFRyYWNrQ3VlTGlzdDo6Y3JlYXRlKCk7ICAgIAogCi0gICAgZm9yIChhdXRvJiBuZXdDdWUg
OiBuZXdDdWVzKSB7CisgICAgZm9yIChhdXRvJiBuZXdDdWUgOiBtX2xvYWRlci0+Z2V0TmV3Q3Vl
cygpKSB7CiAgICAgICAgIG5ld0N1ZS0+c2V0VHJhY2sodGhpcyk7Ci0gICAgICAgIElORk9fTE9H
KExPR0lERU5USUZJRVIsICp0b1ZUVEN1ZShuZXdDdWUuZ2V0KCkpKTsKLSAgICAgICAgbV9jdWVz
LT5hZGQobmV3Q3VlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBJTkZPX0xPRyhMT0dJREVO
VElGSUVSLCBuZXdDdWUuZ2V0KCkpOworICAgICAgICBtX2N1ZXMtPmFkZChXVEZNb3ZlKG5ld0N1
ZSkpOwogICAgIH0KIAogICAgIGlmIChjbGllbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VGV4dFRyYWNrLmNwcAppbmRleCBmZjZlYzhiYWIwNjQ0YzU2ZTZlZGU2NTg0ZjFiYzUyMzAxNzU5
OTYwLi4zZmUwNTQwMmU0NTk2NzM3YmE3MDRjNWUxODM4MzhlNTcxMGU5ZjFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCkBAIC0zNCw2ICszNCw3IEBACiAKICNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCiAKKyNpbmNsdWRlICJEYXRhQ3VlLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQu
aCIKQEAgLTMwMSw3ICszMDIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBUZXh0VHJhY2s6OmFkZEN1
ZShSZWY8VGV4dFRyYWNrQ3VlPiYmIGN1ZSkKICAgICAvLyBJZiBhIERhdGFDdWUgaXMgYWRkZWQg
dG8gYSBUZXh0VHJhY2sgdmlhIHRoZSBhZGRDdWUoKSBtZXRob2QgYnV0IHRoZSB0ZXh0IHRyYWNr
IGRvZXMgbm90IGhhdmUgaXRzIHRleHQKICAgICAvLyB0cmFjayBraW5kIHNldCB0byBtZXRhZGF0
YSwgdGhyb3cgYSBJbnZhbGlkTm9kZVR5cGVFcnJvciBleGNlcHRpb24gYW5kIGRvbid0IGFkZCB0
aGUgY3VlIHRvIHRoZSBUZXh0VHJhY2tMaXN0CiAgICAgLy8gb2YgdGhlIFRleHRUcmFjay4KLSAg
ICBpZiAoY3VlLT5jdWVUeXBlKCkgPT0gVGV4dFRyYWNrQ3VlOjpEYXRhICYmIG1fa2luZCAhPSBL
aW5kOjpNZXRhZGF0YSkKKyAgICBpZiAoaXM8RGF0YUN1ZT4oY3VlLmdldCgpKSAmJiBtX2tpbmQg
IT0gS2luZDo6TWV0YWRhdGEpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9k
ZVR5cGVFcnJvciB9OwogCiAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgY3VlLmdldCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcAppbmRleCA5ZjkyZTg4
NGIwNzFkYzk3NDk5MzQ2ODQ1MWM3ZTNiZjI2MWY1MjkzLi5mYTM3ZGI4NDQ3YzJiYmYxNGRiN2Qy
ZDY4YTJmM2IzNzVjNzdlZDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RleHRUcmFja0N1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWUuY3BwCkBAIC0xODMsMjcgKzE4MywyNiBAQCBzdGF0aWMgdm9pZCByZW1vdmVQc2V1ZG9B
dHRyaWJ1dGVzKE5vZGUmIG5vZGUpCiAgICAgICAgIHJlbW92ZVBzZXVkb0F0dHJpYnV0ZXMoKmNo
aWxkKTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPFRleHRUcmFja0N1ZT4+IFRleHRUcmFja0N1ZTo6
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGRvdWJsZSBzdGFydCwgZG91
YmxlIGVuZCwgRG9jdW1lbnRGcmFnbWVudCYgY3VlRG9jdW1lbnQpCitFeGNlcHRpb25PcjxSZWY8
VGV4dFRyYWNrQ3VlPj4gVGV4dFRyYWNrQ3VlOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBEb2N1bWVudEZyYWdtZW50JiBj
dWVGcmFnbWVudCkKIHsKLSAgICBBU1NFUlQoY29udGV4dC5pc0RvY3VtZW50KCkpOwotICAgIEFT
U0VSVChpczxEb2N1bWVudEZyYWdtZW50PihjdWVEb2N1bWVudCkpOworICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpOwogCi0gICAgaWYgKCFjdWVEb2N1bWVu
dC5maXJzdENoaWxkKCkpCisgICAgaWYgKCFjdWVGcmFnbWVudC5maXJzdENoaWxkKCkpCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciwgIkVtcHR5IGN1ZSBm
cmFnbWVudCIgfTsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9IGN1ZURvY3VtZW50LmZpcnN0Q2hp
bGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKE5vZGUq
IG5vZGUgPSBjdWVGcmFnbWVudC5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0
U2libGluZygpKSB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gY2hlY2tGb3JJbnZhbGlkTm9kZVR5
cGVzKCpub2RlKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KIAotICAgIGF1dG8g
ZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoZG93bmNhc3Q8RG9jdW1lbnQ+KGNv
bnRleHQpKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBjdWVEb2N1bWVudC5maXJzdENoaWxkKCk7
IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7CisgICAgYXV0byBmcmFnbWVudCA9
IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgZm9yIChOb2RlKiBub2Rl
ID0gY3VlRnJhZ21lbnQuZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxp
bmcoKSkgewogICAgICAgICBhdXRvIHJlc3VsdCA9IGZyYWdtZW50LT5lbnN1cmVQcmVJbnNlcnRp
b25WYWxpZGl0eSgqbm9kZSwgbnVsbHB0cik7CiAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKICAg
ICB9Ci0gICAgY3VlRG9jdW1lbnQuY2xvbmVDaGlsZE5vZGVzKGZyYWdtZW50KTsKKyAgICBjdWVG
cmFnbWVudC5jbG9uZUNoaWxkTm9kZXMoZnJhZ21lbnQpOwogCiAgICAgT3B0aW9uU2V0PFJlcXVp
cmVkTm9kZXM+IG5vZGVUeXBlcyA9IHsgfTsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBmcmFnbWVu
dC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkKQEAgLTIx
NCwyMSArMjEzLDI3IEBAIEV4Y2VwdGlvbk9yPFJlZjxUZXh0VHJhY2tDdWU+PiBUZXh0VHJhY2tD
dWU6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250CiAgICAgaWYgKCFub2RlVHlw
ZXMuY29udGFpbnMoUmVxdWlyZWROb2Rlczo6Q3VlQmFja2dyb3VuZCkpCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgbWFrZVN0cmluZygiTWlzc2luZyByZXF1
aXJlZCBhdHRyaWJ1dGU6ICIsIGN1ZUJhY2tncm91bmRBdHRyaWJ1dE5hbWUoKS50b1N0cmluZygp
KSB9OwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dFRyYWNrQ3VlKGNvbnRleHQsIE1l
ZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShzdGFydCksIE1lZGlhVGltZTo6Y3JlYXRlV2l0aERv
dWJsZShlbmQpLCBXVEZNb3ZlKGZyYWdtZW50LmdldCgpKSkpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFRleHRUcmFja0N1ZShkb2N1bWVudCwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91Ymxl
KHN0YXJ0KSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKGVuZCksIFdURk1vdmUoZnJhZ21l
bnQpKSk7CiB9CiAKLVRleHRUcmFja0N1ZTo6VGV4dFRyYWNrQ3VlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYg
ZW5kLCBEb2N1bWVudEZyYWdtZW50JiYgY3VlRnJhZ21lbnQpCi0gICAgOiBUZXh0VHJhY2tDdWUo
Y29udGV4dCwgc3RhcnQsIGVuZCkKK1RleHRUcmFja0N1ZTo6VGV4dFRyYWNrQ3VlKERvY3VtZW50
JiBkb2N1bWVudCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQs
IFJlZjxEb2N1bWVudEZyYWdtZW50PiYmIGN1ZUZyYWdtZW50KQorICAgIDogbV9zdGFydFRpbWUo
c3RhcnQpCisgICAgLCBtX2VuZFRpbWUoZW5kKQorICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkK
KyAgICAsIG1fY3VlTm9kZShXVEZNb3ZlKGN1ZUZyYWdtZW50KSkKIHsKLSAgICBtX2N1ZU5vZGUg
PSAmY3VlRnJhZ21lbnQ7CiB9CiAKIFRleHRUcmFja0N1ZTo6VGV4dFRyYWNrQ3VlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1l
ZGlhVGltZSYgZW5kKQogICAgIDogbV9zdGFydFRpbWUoc3RhcnQpCiAgICAgLCBtX2VuZFRpbWUo
ZW5kKQotICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgLCBtX2Rv
Y3VtZW50KGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KSkKK3sKK30KKworU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogVGV4dFRyYWNrQ3VlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QK
IHsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmlzRG9jdW1lbnQoKSk7Cisg
ICAgcmV0dXJuICZtX2RvY3VtZW50OwogfQogCiB2b2lkIFRleHRUcmFja0N1ZTo6d2lsbENoYW5n
ZSgpCkBAIC0zNjMsMzAgKzM2OCwxNiBAQCBib29sIFRleHRUcmFja0N1ZTo6aXNPcmRlcmVkQmVm
b3JlKGNvbnN0IFRleHRUcmFja0N1ZSogb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIGN1ZUluZGV4
KCkgPCBvdGhlci0+Y3VlSW5kZXgoKTsKIH0KIAotYm9vbCBUZXh0VHJhY2tDdWU6OmN1ZUNvbnRl
bnRzTWF0Y2goY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0Citib29sIFRleHRUcmFja0N1
ZTo6Y3VlQ29udGVudHNNYXRjaChjb25zdCBUZXh0VHJhY2tDdWUmIG90aGVyKSBjb25zdAogewot
ICAgIGlmIChjdWVUeXBlKCkgIT0gY3VlLmN1ZVR5cGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKGlkKCkgIT0gY3VlLmlkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBtX2lkID09IG90aGVyLm1faWQ7CiB9CiAKLWJv
b2wgVGV4dFRyYWNrQ3VlOjppc0VxdWFsKGNvbnN0IFRleHRUcmFja0N1ZSYgY3VlLCBUZXh0VHJh
Y2tDdWU6OkN1ZU1hdGNoUnVsZXMgbWF0Y2gpIGNvbnN0Citib29sIFRleHRUcmFja0N1ZTo6aXNF
cXVhbChjb25zdCBUZXh0VHJhY2tDdWUmIG90aGVyLCBUZXh0VHJhY2tDdWU6OkN1ZU1hdGNoUnVs
ZXMgbWF0Y2gpIGNvbnN0CiB7Ci0gICAgaWYgKGN1ZVR5cGUoKSAhPSBjdWUuY3VlVHlwZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobWF0Y2ggIT0gSWdub3JlRHVyYXRpb24g
JiYgZW5kTWVkaWFUaW1lKCkgIT0gY3VlLmVuZE1lZGlhVGltZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCFoYXNFcXVpdmFsZW50U3RhcnRUaW1lKGN1ZSkpCisgICAgaWYgKG1h
dGNoICE9IElnbm9yZUR1cmF0aW9uICYmIGVuZE1lZGlhVGltZSgpICE9IG90aGVyLmVuZE1lZGlh
VGltZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFjdWVDb250ZW50c01hdGNo
KGN1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBjdWVUeXBlKCkgPT0gb3RoZXIuY3VlVHlwZSgpICYmIGhhc0VxdWl2YWxlbnRTdGFydFRp
bWUob3RoZXIpICYmIGN1ZUNvbnRlbnRzTWF0Y2gob3RoZXIpOwogfQogCiBib29sIFRleHRUcmFj
a0N1ZTo6aGFzRXF1aXZhbGVudFN0YXJ0VGltZShjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkgY29u
c3QKQEAgLTQwMCwxNyArMzkxLDYgQEAgYm9vbCBUZXh0VHJhY2tDdWU6Omhhc0VxdWl2YWxlbnRT
dGFydFRpbWUoY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0CiAgICAgcmV0dXJuIGFicyhh
YnMoc3RhcnRNZWRpYVRpbWUoKSkgLSBhYnMoY3VlLnN0YXJ0TWVkaWFUaW1lKCkpKSA8PSBzdGFy
dFRpbWVWYXJpYW5jZTsKIH0KIAotYm9vbCBUZXh0VHJhY2tDdWU6OmRvZXNFeHRlbmRDdWUoY29u
c3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0Ci17Ci0gICAgaWYgKCFjdWVDb250ZW50c01hdGNo
KGN1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlbmRNZWRpYVRpbWUoKSAh
PSBjdWUuc3RhcnRNZWRpYVRpbWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IHJldHVybiB0cnVlOwotfQotCiB2b2lkIFRleHRUcmFja0N1ZTo6dG9KU09OKEpTT046Ok9iamVj
dCYgdmFsdWUpIGNvbnN0CiB7CiAgICAgQVNDSUlMaXRlcmFsIHR5cGUgPSAiR2VuZXJpYyJfczsK
QEAgLTQzNyw5ICs0MTcsNyBAQCB2b2lkIFRleHRUcmFja0N1ZTo6dG9KU09OKEpTT046Ok9iamVj
dCYgdmFsdWUpIGNvbnN0CiBTdHJpbmcgVGV4dFRyYWNrQ3VlOjp0b0pTT05TdHJpbmcoKSBjb25z
dAogewogICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLQogICAgIHRv
SlNPTihvYmplY3QuZ2V0KCkpOwotCiAgICAgcmV0dXJuIG9iamVjdC0+dG9KU09OU3RyaW5nKCk7
CiB9CiAKQEAgLTQ0OSw3ICs0MjcsNyBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHN0cmVhbSwgY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpCiB7CiAgICAgU3RyaW5nIHRleHQ7
CiAgICAgaWYgKGlzPFZUVEN1ZT4oY3VlKSkKLSAgICAgICAgdGV4dCA9IHRvVlRUQ3VlKCZjdWUp
LT50ZXh0KCk7CisgICAgICAgIHRleHQgPSBkb3duY2FzdDxWVFRDdWU+KGN1ZSkudGV4dCgpOwog
ICAgIHJldHVybiBzdHJlYW0gPDwgJmN1ZSA8PCAiIGlkPSIgPDwgY3VlLmlkKCkgPDwgIiBpbnRl
cnZhbD0iIDw8IGN1ZS5zdGFydFRpbWUoKSA8PCAiLS0+IiA8PCBjdWUuZW5kVGltZSgpIDw8ICIg
Y3VlPSIgPDwgdGV4dCA8PCAnKSc7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFja0N1ZS5oCmluZGV4IDZmM2VlYWJjYWQ5ZjJmNzgyZTg5NzZmYWQ2ODlkZTAyZTBjNWQ1YWEu
LmM2ZTczOGIwNWI2ZGJkYzEzODhkMmZjZDhmMDcyYmQ1NWViODRlOTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaApAQCAtMzMsNyArMzMsNiBAQAogCiAjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQogCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1
bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgpAQCAtMTA3LDEzICsxMDYsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBpc1JlbmRlcmFibGUoKSBjb25zdDsKIAogICAgIGVudW0gQ3VlTWF0Y2hSdWxlcyB7IE1h
dGNoQWxsRmllbGRzLCBJZ25vcmVEdXJhdGlvbiB9OwotICAgIHZpcnR1YWwgYm9vbCBpc0VxdWFs
KGNvbnN0IFRleHRUcmFja0N1ZSYsIEN1ZU1hdGNoUnVsZXMpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBkb2VzRXh0ZW5kQ3VlKGNvbnN0IFRleHRUcmFja0N1ZSYpIGNvbnN0OworICAgIGJvb2wg
aXNFcXVhbChjb25zdCBUZXh0VHJhY2tDdWUmLCBDdWVNYXRjaFJ1bGVzKSBjb25zdDsKIAogICAg
IHZvaWQgd2lsbENoYW5nZSgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2UoKTsKIAotICAg
IHZpcnR1YWwgUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gZ2V0RGlzcGxheVRyZWUoY29uc3QgSW50
U2l6ZSYsIGludCk7CisgICAgdmlydHVhbCBSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBnZXREaXNw
bGF5VHJlZShjb25zdCBJbnRTaXplJiB2aWRlb1NpemUsIGludCBmb250U2l6ZSk7CiAgICAgdmly
dHVhbCB2b2lkIHJlbW92ZURpc3BsYXlUcmVlKCk7CiAKICAgICB2aXJ0dWFsIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBnZXRDdWVBc0hUTUwoKTsKQEAgLTEyNCwyMCArMTIyLDIyIEBAIHB1Ymxp
YzoKICAgICB1c2luZyBSZWZDb3VudGVkOjpkZXJlZjsKIAogICAgIHZpcnR1YWwgdm9pZCByZWNh
bGN1bGF0ZVN0eWxlcygpIHsgbV9kaXNwbGF5VHJlZU5lZWRzVXBkYXRlID0gdHJ1ZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRGb250U2l6ZShpbnQsIGNvbnN0IEludFNpemUmLCBib29sIGltcG9y
dGFudCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZURpc3BsYXlUcmVlKGNvbnN0IE1lZGlhVGlt
ZSYpIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9udFNpemUoaW50IGZvbnRTaXplLCBjb25z
dCBJbnRTaXplJiB2aWRlb1NpemUsIGJvb2wgaW1wb3J0YW50KTsKKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlRGlzcGxheVRyZWUoY29uc3QgTWVkaWFUaW1lJikgeyB9CiAKICAgICB1bnNpZ25lZCBj
dWVJbmRleCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgVGV4dFRyYWNrQ3VlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUm
IGVuZCwgRG9jdW1lbnRGcmFnbWVudCYmKTsKICAgICBUZXh0VHJhY2tDdWUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5k
KTsKIAotICAgIERvY3VtZW50JiBvd25lckRvY3VtZW50KCkgeyByZXR1cm4gZG93bmNhc3Q8RG9j
dW1lbnQ+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7IH0KKyAgICBEb2N1bWVudCYgb3duZXJE
b2N1bWVudCgpIHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBjdWVD
b250ZW50c01hdGNoKGNvbnN0IFRleHRUcmFja0N1ZSYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCB0b0pTT04oSlNPTjo6T2JqZWN0JikgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgVGV4dFRyYWNr
Q3VlKERvY3VtZW50JiwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBl
bmQsIFJlZjxEb2N1bWVudEZyYWdtZW50PiYmKTsKKwogICAgIHZvaWQgcmVmRXZlbnRUYXJnZXQo
KSBmaW5hbCB7IHJlZigpOyB9CiAgICAgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgZmluYWwgeyBk
ZXJlZigpOyB9CiAKQEAgLTE0NSw5ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlzcGF0
Y2hFdmVudChFdmVudCYpIGZpbmFsOwogCiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRU
YXJnZXRJbnRlcmZhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUZXh0VHJhY2tDdWVFdmVudFRh
cmdldEludGVyZmFjZVR5cGU7IH0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gJm1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsgfQotCi0gICAgdmlydHVhbCBib29sIGN1ZUNvbnRlbnRzTWF0Y2goY29uc3QgVGV4
dFRyYWNrQ3VlJikgY29uc3Q7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCiAgICAgdm9pZCByZWJ1aWxkRGlzcGxheVRy
ZWUoKTsKIApAQCAtMTU4LDcgKzE1Niw3IEBAIHByaXZhdGU6CiAKICAgICBUZXh0VHJhY2sqIG1f
dHJhY2sgeyBudWxscHRyIH07CiAKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiAKICAgICBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gbV9jdWVOb2RlOwogICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVC
b3g+IG1fZGlzcGxheVRyZWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tDdWVHZW5lcmljLmNwcAppbmRleCA5ODJmMjg2Nzc4Y2ZkNjE0ZjFjYTIxYzczYjg5MDg3
NTYwOGEwMjdiLi5lZWZlY2FhZjVkOWJiYWQ3NDExMGNlY2YzMTQ3ZTdkZmFiOWExYzg4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAK
QEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCi0j
aW5jbHVkZSAiVGV4dFRyYWNrQ3VlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMu
aD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC0xNTUsMTAgKzE1NCwxMyBAQCB2
b2lkIFRleHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50OjphcHBseUNTU1Byb3BlcnRpZXMoY29u
c3QgSW50U2l6ZSYgdmlkZW9TaXplKQogICAgIGN1ZUVsZW1lbnQtPnNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlPdmVyZmxvdywgQ1NTVmFsdWVWaXNpYmxlKTsKIH0KIAotVGV4dFRy
YWNrQ3VlR2VuZXJpYzo6VGV4dFRyYWNrQ3VlR2VuZXJpYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwg
Y29uc3QgU3RyaW5nJiBjb250ZW50KQotICAgIDogVlRUQ3VlKGNvbnRleHQsIHN0YXJ0LCBlbmQs
IGNvbnRlbnQpCi0gICAgLCBtX2Jhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodCgwKQot
ICAgICwgbV9mb250U2l6ZU11bHRpcGxpZXIoMCkKK1JlZjxUZXh0VHJhY2tDdWVHZW5lcmljPiBU
ZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0IFN0
cmluZyYgY29udGVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0VHJhY2tDdWVH
ZW5lcmljKGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KSwgc3RhcnQsIGVuZCwgY29udGVudCkp
OworfQorCitUZXh0VHJhY2tDdWVHZW5lcmljOjpUZXh0VHJhY2tDdWVHZW5lcmljKERvY3VtZW50
JiBkb2N1bWVudCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQs
IGNvbnN0IFN0cmluZyYgY29udGVudCkKKyAgICA6IFZUVEN1ZShkb2N1bWVudCwgc3RhcnQsIGVu
ZCwgY29udGVudCkKIHsKIH0KIApAQCAtMTk5LDQ5ICsyMDEsMTUgQEAgdm9pZCBUZXh0VHJhY2tD
dWVHZW5lcmljOjpzZXRGb250U2l6ZShpbnQgZm9udFNpemUsIGNvbnN0IEludFNpemUmIHZpZGVv
U2l6ZSwgYm8KICAgICBkaXNwbGF5VHJlZUludGVybmFsKCkuc2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBscm91bmQoc2l6ZSksIENTU1VuaXRUeXBlOjpDU1NfUFgp
OwogfQogCi1ib29sIFRleHRUcmFja0N1ZUdlbmVyaWM6OmN1ZUNvbnRlbnRzTWF0Y2goY29uc3Qg
VGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0Ci17Ci0gICAgLy8gRG8gY2FsbCB0aGUgcGFyZW50IGNs
YXNzIGN1ZUNvbnRlbnRzTWF0Y2ggaGVyZSwgYmVjYXVzZSB3ZSB3YW50IHRvIGNvbmZpcm0KLSAg
ICAvLyB0aGUgY29udGVudCBvZiB0aGUgdHdvIGN1ZXMgYXJlIGlkZW50aWNhbCAoZXZlbiB0aG91
Z2ggdGhlIHR5cGVzIGFyZSBub3QgdGhlIHNhbWUpLgotICAgIGlmICghVlRUQ3VlOjpjdWVDb250
ZW50c01hdGNoKGN1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBjb25zdCBU
ZXh0VHJhY2tDdWVHZW5lcmljKiBvdGhlciA9IHN0YXRpY19jYXN0PGNvbnN0IFRleHRUcmFja0N1
ZUdlbmVyaWMqPigmY3VlKTsKLQotICAgIGlmIChtX2Jhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRl
b0hlaWdodCAhPSBvdGhlci0+YmFzZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9mb250U2l6ZU11bHRpcGxpZXIgIT0gb3Ro
ZXItPmZvbnRTaXplTXVsdGlwbGllcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KG1fZm9udE5hbWUgIT0gb3RoZXItPmZvbnROYW1lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAobV9mb3JlZ3JvdW5kQ29sb3IgIT0gb3RoZXItPmZvcmVncm91bmRDb2xvcigpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fYmFja2dyb3VuZENvbG9yICE9IG90aGVy
LT5iYWNrZ3JvdW5kQ29sb3IoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgVGV4dFRyYWNrQ3VlR2VuZXJpYzo6aXNFcXVhbChjb25zdCBUZXh0
VHJhY2tDdWUmIGN1ZSwgVGV4dFRyYWNrQ3VlOjpDdWVNYXRjaFJ1bGVzIG1hdGNoKSBjb25zdAot
ewotICAgIC8vIERvIG5vdCBjYWxsIHRoZSBwYXJlbnQgY2xhc3MgaXNFcXVhbCBoZXJlLCBiZWNh
dXNlIHdlIGFyZSBub3QgY3VlVHlwZSgpID09IFZUVEN1ZSwKLSAgICAvLyBhbmQgd2lsbCBmYWls
IHRoYXQgZXF1YWxpdHkgdGVzdC4KLSAgICBpZiAoIVRleHRUcmFja0N1ZTo6aXNFcXVhbChjdWUs
IG1hdGNoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGN1ZS5jdWVUeXBlKCkg
IT0gVGV4dFRyYWNrQ3VlOjpDb252ZXJ0ZWRUb1dlYlZUVCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIGN1ZUNvbnRlbnRzTWF0Y2goY3VlKTsKLX0KLQotICAgIAotYm9vbCBU
ZXh0VHJhY2tDdWVHZW5lcmljOjpkb2VzRXh0ZW5kQ3VlKGNvbnN0IFRleHRUcmFja0N1ZSYgY3Vl
KSBjb25zdAorYm9vbCBUZXh0VHJhY2tDdWVHZW5lcmljOjpjdWVDb250ZW50c01hdGNoKGNvbnN0
IFRleHRUcmFja0N1ZSYgb3RoZXJUZXh0VHJhY2tDdWUpIGNvbnN0CiB7Ci0gICAgaWYgKCFjdWVD
b250ZW50c01hdGNoKGN1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1
cm4gVlRUQ3VlOjpkb2VzRXh0ZW5kQ3VlKGN1ZSk7CisgICAgYXV0byYgb3RoZXIgPSBkb3duY2Fz
dDxUZXh0VHJhY2tDdWVHZW5lcmljPihvdGhlclRleHRUcmFja0N1ZSk7CisgICAgcmV0dXJuIFZU
VEN1ZTo6Y3VlQ29udGVudHNNYXRjaChvdGhlcikKKyAgICAgICAgJiYgbV9iYXNlRm9udFNpemVS
ZWxhdGl2ZVRvVmlkZW9IZWlnaHQgPT0gb3RoZXIubV9iYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlk
ZW9IZWlnaHQKKyAgICAgICAgJiYgbV9mb250U2l6ZU11bHRpcGxpZXIgPT0gb3RoZXIubV9mb250
U2l6ZU11bHRpcGxpZXIKKyAgICAgICAgJiYgbV9mb250TmFtZSA9PSBvdGhlci5tX2ZvbnROYW1l
CisgICAgICAgICYmIG1fZm9yZWdyb3VuZENvbG9yID09IG90aGVyLm1fZm9yZWdyb3VuZENvbG9y
CisgICAgICAgICYmIG1fYmFja2dyb3VuZENvbG9yID09IG90aGVyLm1fYmFja2dyb3VuZENvbG9y
OwogfQogCiBib29sIFRleHRUcmFja0N1ZUdlbmVyaWM6OmlzT3JkZXJlZEJlZm9yZShjb25zdCBU
ZXh0VHJhY2tDdWUqIHRoYXQpIGNvbnN0CkBAIC0yNDksMTAgKzIxNywxMCBAQCBib29sIFRleHRU
cmFja0N1ZUdlbmVyaWM6OmlzT3JkZXJlZEJlZm9yZShjb25zdCBUZXh0VHJhY2tDdWUqIHRoYXQp
IGNvbnN0CiAgICAgaWYgKFZUVEN1ZTo6aXNPcmRlcmVkQmVmb3JlKHRoYXQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIGlmICh0aGF0LT5jdWVUeXBlKCkgPT0gQ29udmVydGVkVG9XZWJW
VFQgJiYgc3RhcnRUaW1lKCkgPT0gdGhhdC0+c3RhcnRUaW1lKCkgJiYgZW5kVGltZSgpID09IHRo
YXQtPmVuZFRpbWUoKSkgeworICAgIGlmIChpczxUZXh0VHJhY2tDdWVHZW5lcmljPigqdGhhdCkg
JiYgc3RhcnRUaW1lKCkgPT0gdGhhdC0+c3RhcnRUaW1lKCkgJiYgZW5kVGltZSgpID09IHRoYXQt
PmVuZFRpbWUoKSkgewogICAgICAgICAvLyBGdXJ0aGVyIG9yZGVyIGdlbmVyaWMgY3VlcyBieSB0
aGVpciBjYWxjdWxhdGVkIGxpbmUgdmFsdWUuCiAgICAgICAgIHN0ZDo6cGFpcjxkb3VibGUsIGRv
dWJsZT4gdGhpc1Bvc2l0aW9uID0gZ2V0UG9zaXRpb25Db29yZGluYXRlcygpOwotICAgICAgICBz
dGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+IHRoYXRQb3NpdGlvbiA9IHRvVlRUQ3VlKHRoYXQpLT5n
ZXRQb3NpdGlvbkNvb3JkaW5hdGVzKCk7CisgICAgICAgIHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJs
ZT4gdGhhdFBvc2l0aW9uID0gZG93bmNhc3Q8VGV4dFRyYWNrQ3VlR2VuZXJpYz4oKnRoYXQpLmdl
dFBvc2l0aW9uQ29vcmRpbmF0ZXMoKTsKICAgICAgICAgcmV0dXJuIHRoaXNQb3NpdGlvbi5zZWNv
bmQgPiB0aGF0UG9zaXRpb24uc2Vjb25kIHx8ICh0aGlzUG9zaXRpb24uc2Vjb25kID09IHRoYXRQ
b3NpdGlvbi5zZWNvbmQgJiYgdGhpc1Bvc2l0aW9uLmZpcnN0IDwgdGhhdFBvc2l0aW9uLmZpcnN0
KTsKICAgICB9CiAKQEAgLTI2MSwzOSArMjI5LDMzIEBAIGJvb2wgVGV4dFRyYWNrQ3VlR2VuZXJp
Yzo6aXNPcmRlcmVkQmVmb3JlKGNvbnN0IFRleHRUcmFja0N1ZSogdGhhdCkgY29uc3QKIAogYm9v
bCBUZXh0VHJhY2tDdWVHZW5lcmljOjppc1Bvc2l0aW9uZWRBYm92ZShjb25zdCBUZXh0VHJhY2tD
dWUqIHRoYXQpIGNvbnN0CiB7Ci0gICAgaWYgKHRoYXQtPmN1ZVR5cGUoKSA9PSBDb252ZXJ0ZWRU
b1dlYlZUVCAmJiBzdGFydFRpbWUoKSA9PSB0aGF0LT5zdGFydFRpbWUoKSAmJiBlbmRUaW1lKCkg
PT0gdGhhdC0+ZW5kVGltZSgpKSB7Ci0gICAgICAgIC8vIEZ1cnRoZXIgb3JkZXIgZ2VuZXJpYyBj
dWVzIGJ5IHRoZWlyIGNhbGN1bGF0ZWQgbGluZSB2YWx1ZS4KLSAgICAgICAgc3RkOjpwYWlyPGRv
dWJsZSwgZG91YmxlPiB0aGlzUG9zaXRpb24gPSBnZXRQb3NpdGlvbkNvb3JkaW5hdGVzKCk7Ci0g
ICAgICAgIHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4gdGhhdFBvc2l0aW9uID0gdG9WVFRDdWUo
dGhhdCktPmdldFBvc2l0aW9uQ29vcmRpbmF0ZXMoKTsKLSAgICAgICAgcmV0dXJuIHRoaXNQb3Np
dGlvbi5zZWNvbmQgPiB0aGF0UG9zaXRpb24uc2Vjb25kIHx8ICh0aGlzUG9zaXRpb24uc2Vjb25k
ID09IHRoYXRQb3NpdGlvbi5zZWNvbmQgJiYgdGhpc1Bvc2l0aW9uLmZpcnN0IDwgdGhhdFBvc2l0
aW9uLmZpcnN0KTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHRoYXQtPmN1ZVR5cGUoKSA9PSBDb252
ZXJ0ZWRUb1dlYlZUVCkKKyAgICBpZiAoaXM8VGV4dFRyYWNrQ3VlR2VuZXJpYz4oKnRoYXQpKSB7
CisgICAgICAgIGlmIChzdGFydFRpbWUoKSA9PSB0aGF0LT5zdGFydFRpbWUoKSAmJiBlbmRUaW1l
KCkgPT0gdGhhdC0+ZW5kVGltZSgpKSB7CisgICAgICAgICAgICAvLyBGdXJ0aGVyIG9yZGVyIGdl
bmVyaWMgY3VlcyBieSB0aGVpciBjYWxjdWxhdGVkIGxpbmUgdmFsdWUuCisgICAgICAgICAgICBz
dGQ6OnBhaXI8ZG91YmxlLCBkb3VibGU+IHRoaXNQb3NpdGlvbiA9IGdldFBvc2l0aW9uQ29vcmRp
bmF0ZXMoKTsKKyAgICAgICAgICAgIHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4gdGhhdFBvc2l0
aW9uID0gZG93bmNhc3Q8VGV4dFRyYWNrQ3VlR2VuZXJpYz4oKnRoYXQpLmdldFBvc2l0aW9uQ29v
cmRpbmF0ZXMoKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzUG9zaXRpb24uc2Vjb25kID4gdGhh
dFBvc2l0aW9uLnNlY29uZCB8fCAodGhpc1Bvc2l0aW9uLnNlY29uZCA9PSB0aGF0UG9zaXRpb24u
c2Vjb25kICYmIHRoaXNQb3NpdGlvbi5maXJzdCA8IHRoYXRQb3NpdGlvbi5maXJzdCk7CisgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIHN0YXJ0VGltZSgpID4gdGhhdC0+c3RhcnRUaW1lKCk7Ci0g
ICAgCisgICAgfQorCiAgICAgcmV0dXJuIFZUVEN1ZTo6aXNPcmRlcmVkQmVmb3JlKHRoYXQpOwog
fQogCi1TdHJpbmcgVGV4dFRyYWNrQ3VlR2VuZXJpYzo6dG9KU09OU3RyaW5nKCkgY29uc3QKK3Zv
aWQgVGV4dFRyYWNrQ3VlR2VuZXJpYzo6dG9KU09OKEpTT046Ok9iamVjdCYgb2JqZWN0KSBjb25z
dAogewotICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLQotICAgIHRv
SlNPTihvYmplY3QuZ2V0KCkpOwotCiAgICAgaWYgKG1fZm9yZWdyb3VuZENvbG9yLmlzVmFsaWQo
KSkKLSAgICAgICAgb2JqZWN0LT5zZXRTdHJpbmcoImZvcmVncm91bmRDb2xvciJfcywgbV9mb3Jl
Z3JvdW5kQ29sb3Iuc2VyaWFsaXplZCgpKTsKKyAgICAgICAgb2JqZWN0LnNldFN0cmluZygiZm9y
ZWdyb3VuZENvbG9yIl9zLCBtX2ZvcmVncm91bmRDb2xvci5zZXJpYWxpemVkKCkpOwogICAgIGlm
IChtX2JhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG9iamVjdC0+c2V0U3RyaW5n
KCJiYWNrZ3JvdW5kQ29sb3IiX3MsIG1fYmFja2dyb3VuZENvbG9yLnNlcmlhbGl6ZWQoKSk7Cisg
ICAgICAgIG9iamVjdC5zZXRTdHJpbmcoImJhY2tncm91bmRDb2xvciJfcywgbV9iYWNrZ3JvdW5k
Q29sb3Iuc2VyaWFsaXplZCgpKTsKICAgICBpZiAobV9oaWdobGlnaHRDb2xvci5pc1ZhbGlkKCkp
Ci0gICAgICAgIG9iamVjdC0+c2V0U3RyaW5nKCJoaWdobGlnaHRDb2xvciJfcywgbV9oaWdobGln
aHRDb2xvci5zZXJpYWxpemVkKCkpOworICAgICAgICBvYmplY3Quc2V0U3RyaW5nKCJoaWdobGln
aHRDb2xvciJfcywgbV9oaWdobGlnaHRDb2xvci5zZXJpYWxpemVkKCkpOwogICAgIGlmIChtX2Jh
c2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodCkKLSAgICAgICAgb2JqZWN0LT5zZXREb3Vi
bGUoInJlbGF0aXZlRm9udFNpemUiX3MsIG1fYmFzZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVp
Z2h0KTsKKyAgICAgICAgb2JqZWN0LnNldERvdWJsZSgicmVsYXRpdmVGb250U2l6ZSJfcywgbV9i
YXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQpOwogICAgIGlmIChtX2ZvbnRTaXplTXVs
dGlwbGllcikKLSAgICAgICAgb2JqZWN0LT5zZXREb3VibGUoImZvbnRTaXplTXVsdGlwbGllciJf
cywgbV9mb250U2l6ZU11bHRpcGxpZXIpOworICAgICAgICBvYmplY3Quc2V0RG91YmxlKCJmb250
U2l6ZU11bHRpcGxpZXIiX3MsIG1fZm9udFNpemVNdWx0aXBsaWVyKTsKICAgICBpZiAoIW1fZm9u
dE5hbWUuaXNFbXB0eSgpKQotICAgICAgICBvYmplY3QtPnNldFN0cmluZygiZm9udCJfcywgbV9m
b250TmFtZSk7Ci0KLSAgICByZXR1cm4gb2JqZWN0LT50b0pTT05TdHJpbmcoKTsKKyAgICAgICAg
b2JqZWN0LnNldFN0cmluZygiZm9udCJfcywgbV9mb250TmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrQ3VlR2VuZXJpYy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVH
ZW5lcmljLmgKaW5kZXggZmQwY2IzZWIzMTE4Y2MzZjMzYzliNjg4NmFhMGY2MmEwNjRmMWQ0ZS4u
MWZjZDQxOTY4YWMyZTQzOTYxMWQ0YjRhZjhiOTQ3YzFlYTMxNWRiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmgKQEAgLTMyLDE2ICszMiwx
MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdlbmVyaWNDdWVEYXRhOwotCiAv
LyBBICJnZW5lcmljIiBjdWUgaXMgYSBub24tV2ViVlRUIGN1ZSwgc28gaXQgaXMgbm90IHBvc2l0
aW9uZWQvc2l6ZWQgd2l0aCB0aGUgV2ViVlRUIGxvZ2ljLgogY2xhc3MgVGV4dFRyYWNrQ3VlR2Vu
ZXJpYyBmaW5hbCA6IHB1YmxpYyBWVFRDdWUgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURURf
RVhQT1JUKFRleHRUcmFja0N1ZUdlbmVyaWMsIFdFQkNPUkVfRVhQT1JUKTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPFRleHRUcmFja0N1ZUdlbmVyaWM+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUm
IGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgVGV4dFRyYWNrQ3VlR2VuZXJpYyhjb250ZXh0LCBzdGFydCwgZW5kLCBjb250ZW50
KSk7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8VGV4dFRyYWNrQ3VlR2Vu
ZXJpYz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBNZWRpYVRpbWUmIHN0
YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKIAogICAg
IEV4Y2VwdGlvbk9yPHZvaWQ+IHNldExpbmUoZG91YmxlKSBmaW5hbDsKICAgICBFeGNlcHRpb25P
cjx2b2lkPiBzZXRQb3NpdGlvbihjb25zdCBMaW5lQW5kUG9zaXRpb25TZXR0aW5nJikgZmluYWw7
CkBAIC02OCwyMiArNjMsMjAgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRGb250U2l6ZShpbnQs
IGNvbnN0IEludFNpemUmLCBib29sIGltcG9ydGFudCkgZmluYWw7CiAKLSAgICBTdHJpbmcgdG9K
U09OU3RyaW5nKCkgY29uc3Q7Ci0KIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgVGV4dFRy
YWNrQ3VlR2VuZXJpYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgTWVkaWFUaW1lJiBz
dGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0IFN0cmluZyYpOwotICAgIAorICAgIFRl
eHRUcmFja0N1ZUdlbmVyaWMoRG9jdW1lbnQmLCBjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25z
dCBNZWRpYVRpbWUmIGVuZCwgY29uc3QgU3RyaW5nJik7CisKICAgICBib29sIGlzT3JkZXJlZEJl
Zm9yZShjb25zdCBUZXh0VHJhY2tDdWUqKSBjb25zdCBmaW5hbDsKICAgICBib29sIGlzUG9zaXRp
b25lZEFib3ZlKGNvbnN0IFRleHRUcmFja0N1ZSopIGNvbnN0IGZpbmFsOwogCiAgICAgUmVmPFZU
VEN1ZUJveD4gY3JlYXRlRGlzcGxheVRyZWUoKSBmaW5hbDsKIAotICAgIGJvb2wgaXNFcXVhbChj
b25zdCBUZXh0VHJhY2tDdWUmLCBDdWVNYXRjaFJ1bGVzKSBjb25zdCBmaW5hbDsKICAgICBib29s
IGN1ZUNvbnRlbnRzTWF0Y2goY29uc3QgVGV4dFRyYWNrQ3VlJikgY29uc3QgZmluYWw7Ci0gICAg
Ym9vbCBkb2VzRXh0ZW5kQ3VlKGNvbnN0IFRleHRUcmFja0N1ZSYpIGNvbnN0IGZpbmFsOwogCiAg
ICAgQ3VlVHlwZSBjdWVUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ29udmVydGVkVG9XZWJW
VFQ7IH0KIAorICAgIHZvaWQgdG9KU09OKEpTT046Ok9iamVjdCYpIGNvbnN0IGZpbmFsOworCiAg
ICAgQ29sb3IgbV9mb3JlZ3JvdW5kQ29sb3I7CiAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7
CiAgICAgQ29sb3IgbV9oaWdobGlnaHRDb2xvcjsKQEAgLTk3LDE2ICs5MCw3IEBAIHByaXZhdGU6
CiAKIG5hbWVzcGFjZSBXVEYgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotc3RydWN0IExv
Z0FyZ3VtZW50OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IExvZ0FyZ3VtZW50PFdlYkNvcmU6OlRl
eHRUcmFja0N1ZUdlbmVyaWM+IHsKLSAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IFdl
YkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWMmIGN1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBj
dWUudG9KU09OU3RyaW5nKCk7Ci0gICAgfQotfTsKK3RlbXBsYXRlPD4gc3RydWN0IExvZ0FyZ3Vt
ZW50PFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM+IDogTG9nQXJndW1lbnQ8V2ViQ29yZTo6
VGV4dFRyYWNrQ3VlPiB7IH07CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9UZXh0VHJhY2tDdWVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VGV4dFRyYWNrQ3VlTGlzdC5jcHAKaW5kZXggOGEwZmQwYjIyNjg4N2E0MzdiZjVjOWU2MWE5ZmMy
ZTRiNjg2OTY0Zi4uNDNkYjhmZTU3NDY3NzM5MWFkMmFiOWU1N2U2NjFmZjNiYzUyYTVjMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVMaXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuY3BwCkBAIC00
OSw2ICs0OSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY3VlU29ydHNCZWZvcmUoY29uc3QgUmVm
UHRyPFRleHRUcmFja0N1ZT4mIGEsIGNvbnN0IFJlZlB0cjxUZQogICAgIHJldHVybiBhLT5zdGFy
dE1lZGlhVGltZSgpID09IGItPnN0YXJ0TWVkaWFUaW1lKCkgJiYgYS0+ZW5kTWVkaWFUaW1lKCkg
PiBiLT5lbmRNZWRpYVRpbWUoKTsKIH0KIAorUmVmPFRleHRUcmFja0N1ZUxpc3Q+IFRleHRUcmFj
a0N1ZUxpc3Q6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dFRyYWNr
Q3VlTGlzdCk7Cit9CisKIHVuc2lnbmVkIFRleHRUcmFja0N1ZUxpc3Q6OmN1ZUluZGV4KGNvbnN0
IFRleHRUcmFja0N1ZSYgY3VlKSBjb25zdAogewogICAgIEFTU0VSVChtX3ZlY3Rvci5jb250YWlu
cygmY3VlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFj
a0N1ZUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlTGlzdC5o
CmluZGV4IGM0Zjc4NmJiODJlODZhZjk1MTNhM2QxZDUxMmFmN2IyOTk3MTRkMzIuLjY2ZmYwOGU4
NWYzNWM0YjMwNGNjM2UzYmE5NDE0OGQxNjQ1YzY0MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVGV4dFRyYWNrQ3VlTGlzdC5oCkBAIC01NywxMSArNTcsNiBAQCBwcml2YXRlOgog
ICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVMaXN0PiBtX2FjdGl2ZUN1ZXM7CiB9OwogCi1pbmxpbmUg
UmVmPFRleHRUcmFja0N1ZUxpc3Q+IFRleHRUcmFja0N1ZUxpc3Q6OmNyZWF0ZSgpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dFRyYWNrQ3VlTGlzdCk7Ci19Ci0KIGlubGluZSB1bnNp
Z25lZCBUZXh0VHJhY2tDdWVMaXN0OjpsZW5ndGgoKSBjb25zdAogewogICAgIHJldHVybiBtX3Zl
Y3Rvci5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAKaW5kZXggZWM0OTg0
ZTUzNjc3YWQzYmRkYjA1NWIyMjFjNzA1NjI4M2Y3ODJhNy4uZDQ4ZjMyOWE4YWI3MzY3NTcyNjJm
YWUyZTM1YjRiMTQ0YzY2MzU5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9WVFRDdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcApA
QCAtNjQsOSArNjQsNyBAQCBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoVlRUQ3VlKTsKIFdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChWVFRDdWVCb3gpOwogCiAvLyBUaGlzIGNvbnN0YW50
IHNob3VsZCBjb3JyZXNwb25kIHdpdGggdGhlIHBlcmNlbnRhZ2UgcmV0dXJuZWQgYnkgQ2FwdGlv
blVzZXJQcmVmZXJlbmNlczo6Y2FwdGlvbkZvbnRTaXplU2NhbGVBbmRJbXBvcnRhbmNlLgotc3Rh
dGljIGNvbnN0ZXhwciBkb3VibGUgREVGQVVMVENBUFRJT05GT05UU0laRVBFUkNFTlRBR0UgPSA1
OwotCi1zdGF0aWMgY29uc3RleHByIGludCB1bmRlZmluZWRQb3NpdGlvbiA9IC0xOworY29uc3Rl
eHByIGRvdWJsZSBERUZBVUxUQ0FQVElPTkZPTlRTSVpFUEVSQ0VOVEFHRSA9IDU7CiAKIHN0YXRp
YyBjb25zdCBDU1NWYWx1ZUlEIGRpc3BsYXlXcml0aW5nTW9kZU1hcFtdID0gewogICAgIENTU1Zh
bHVlSG9yaXpvbnRhbFRiLCBDU1NWYWx1ZVZlcnRpY2FsUmwsIENTU1ZhbHVlVmVydGljYWxMcgpA
QCAtMTM1LDExICsxMzMsMTEgQEAgVlRUQ3VlQm94OjpWVFRDdWVCb3goRG9jdW1lbnQmIGRvY3Vt
ZW50LCBWVFRDdWUmIGN1ZSkKIHZvaWQgVlRUQ3VlQm94OjphcHBseUNTU1Byb3BlcnRpZXMoY29u
c3QgSW50U2l6ZSYgdmlkZW9TaXplKQogewogICAgIGF1dG8gdGV4dFRyYWNrQ3VlID0gZ2V0Q3Vl
KCk7Ci0gICAgaWYgKCF0ZXh0VHJhY2tDdWUpCisgICAgQVNTRVJUKCF0ZXh0VHJhY2tDdWUgfHwg
aXM8VlRUQ3VlPih0ZXh0VHJhY2tDdWUpKTsKKyAgICBpZiAoIWlzPFZUVEN1ZT4odGV4dFRyYWNr
Q3VlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGlzPFZUVEN1ZT4odGV4dFRyYWNr
Q3VlKSB8fCBpczxUZXh0VHJhY2tDdWVHZW5lcmljPih0ZXh0VHJhY2tDdWUpKTsKLSAgICBhdXRv
IGN1ZSA9IG1ha2VSZWYoKnRvVlRUQ3VlKHRleHRUcmFja0N1ZSkpOworICAgIGF1dG8gY3VlID0g
bWFrZVJlZihkb3duY2FzdDxWVFRDdWU+KCp0ZXh0VHJhY2tDdWUpKTsKIAogICAgIC8vIEZJWE1F
OiBBcHBseSBhbGwgdGhlIGluaXRpYWwgQ1NTIHBvc2l0aW9uaW5nIHByb3BlcnRpZXMuIGh0dHA6
Ly93a2IudWcvNzk5MTYKICAgICBpZiAoIWN1ZS0+cmVnaW9uSWQoKS5pc0VtcHR5KCkpIHsKQEAg
LTIzOSw1MSArMjM3LDUyIEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBWVFRDdWVCb3g6OmNy
ZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlLCBjCiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorUmVmPFZUVEN1ZT4gVlRUQ3VlOjpjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVlRUQ3VlKGRv
d25jYXN0PERvY3VtZW50Pihjb250ZXh0KSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHN0
YXJ0KSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKGVuZCksIGNvbnRlbnQpKTsKK30KKwor
UmVmPFZUVEN1ZT4gVlRUQ3VlOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0IFN0
cmluZyYgY29udGVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWVFRDdWUoZG93bmNh
c3Q8RG9jdW1lbnQ+KGNvbnRleHQpLCBzdGFydCwgZW5kLCBjb250ZW50KSk7Cit9CisKIFJlZjxW
VFRDdWU+IFZUVEN1ZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNv
bnN0IFdlYlZUVEN1ZURhdGEmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVlRU
Q3VlKGNvbnRleHQsIGRhdGEpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWVFRDdWUoZG93
bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLCBkYXRhKSk7CiB9CiAKLVZUVEN1ZTo6VlRUQ3VlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNv
bnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi0gICAgOiBUZXh0VHJh
Y2tDdWUoY29udGV4dCwgc3RhcnQsIGVuZCkKK1ZUVEN1ZTo6VlRUQ3VlKERvY3VtZW50JiBkb2N1
bWVudCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0
IFN0cmluZyYgY29udGVudCkKKyAgICA6IFRleHRUcmFja0N1ZShkb2N1bWVudCwgc3RhcnQsIGVu
ZCkKICAgICAsIG1fY29udGVudChjb250ZW50KQorICAgICwgbV9vcmlnaW5hbFN0YXJ0VGltZShN
ZWRpYVRpbWU6Onplcm9UaW1lKCkpCiB7Ci0gICAgaW5pdGlhbGl6ZShjb250ZXh0KTsKKyAgICBp
bml0aWFsaXplKCk7CiB9CiAKLVZUVEN1ZTo6VlRUQ3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFdlYlZUVEN1ZURhdGEmIGN1ZURhdGEpCi0gICAgOiBUZXh0VHJhY2tD
dWUoY29udGV4dCwgTWVkaWFUaW1lOjp6ZXJvVGltZSgpLCBNZWRpYVRpbWU6Onplcm9UaW1lKCkp
CitWVFRDdWU6OlZUVEN1ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFdlYlZUVEN1ZURhdGEm
IGN1ZURhdGEpCisgICAgOiBUZXh0VHJhY2tDdWUoZG9jdW1lbnQsIE1lZGlhVGltZTo6emVyb1Rp
bWUoKSwgTWVkaWFUaW1lOjp6ZXJvVGltZSgpKQorICAgICwgbV9vcmlnaW5hbFN0YXJ0VGltZShj
dWVEYXRhLm9yaWdpbmFsU3RhcnRUaW1lKCkpCiB7Ci0gICAgaW5pdGlhbGl6ZShjb250ZXh0KTsK
KyAgICBpbml0aWFsaXplKCk7CiAgICAgc2V0VGV4dChjdWVEYXRhLmNvbnRlbnQoKSk7CiAgICAg
c2V0U3RhcnRUaW1lKGN1ZURhdGEuc3RhcnRUaW1lKCkpOwogICAgIHNldEVuZFRpbWUoY3VlRGF0
YS5lbmRUaW1lKCkpOwogICAgIHNldElkKGN1ZURhdGEuaWQoKSk7CiAgICAgc2V0Q3VlU2V0dGlu
Z3MoY3VlRGF0YS5zZXR0aW5ncygpKTsKLSAgICBtX29yaWdpbmFsU3RhcnRUaW1lID0gY3VlRGF0
YS5vcmlnaW5hbFN0YXJ0VGltZSgpOwogfQogCiBWVFRDdWU6On5WVFRDdWUoKQogewogfQogCi12
b2lkIFZUVEN1ZTo6aW5pdGlhbGl6ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQor
dm9pZCBWVFRDdWU6OmluaXRpYWxpemUoKQogewotICAgIG1fbGluZVBvc2l0aW9uID0gdW5kZWZp
bmVkUG9zaXRpb247Ci0gICAgbV9jb21wdXRlZExpbmVQb3NpdGlvbiA9IHVuZGVmaW5lZFBvc2l0
aW9uOwotICAgIG1fdGV4dFBvc2l0aW9uID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpx
dWlldF9OYU4oKTsKLSAgICBtX2N1ZVNpemUgPSAxMDA7Ci0gICAgbV93cml0aW5nRGlyZWN0aW9u
ID0gSG9yaXpvbnRhbDsKLSAgICBtX2N1ZUFsaWdubWVudCA9IENlbnRlcjsKLSAgICBtX3dlYlZU
VE5vZGVUcmVlID0gbnVsbHB0cjsKLSAgICBtX2N1ZUJhY2tkcm9wQm94ID0gSFRNTERpdkVsZW1l
bnQ6OmNyZWF0ZShkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCkpOwotICAgIG1fY3VlSGlnaGxp
Z2h0Qm94ID0gSFRNTFNwYW5FbGVtZW50OjpjcmVhdGUoc3BhblRhZywgZG93bmNhc3Q8RG9jdW1l
bnQ+KGNvbnRleHQpKTsKLSAgICBtX2Rpc3BsYXlEaXJlY3Rpb24gPSBDU1NWYWx1ZUx0cjsKLSAg
ICBtX2Rpc3BsYXlTaXplID0gMDsKKyAgICBtX2N1ZUJhY2tkcm9wQm94ID0gSFRNTERpdkVsZW1l
bnQ6OmNyZWF0ZShvd25lckRvY3VtZW50KCkpOworICAgIG1fY3VlSGlnaGxpZ2h0Qm94ID0gSFRN
TFNwYW5FbGVtZW50OjpjcmVhdGUoc3BhblRhZywgb3duZXJEb2N1bWVudCgpKTsKICAgICBtX3Nu
YXBUb0xpbmVzID0gdHJ1ZTsKICAgICBtX2Rpc3BsYXlUcmVlU2hvdWxkQ2hhbmdlID0gdHJ1ZTsK
ICAgICBtX25vdGlmeVJlZ2lvbiA9IHRydWU7Ci0gICAgbV9vcmlnaW5hbFN0YXJ0VGltZSA9IE1l
ZGlhVGltZTo6emVyb1RpbWUoKTsKIH0KIAogUmVmPFZUVEN1ZUJveD4gVlRUQ3VlOjpjcmVhdGVE
aXNwbGF5VHJlZSgpCkBAIC0zOTcsMTEgKzM5NiwxMSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBWVFRD
dWU6OnNldFBvc2l0aW9uKGNvbnN0IExpbmVBbmRQb3NpdGlvblNldHRpbmcmIHBvc2l0aW9uKQog
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4dFBvc2l0aW9uID0gc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKICAgICB9IGVsc2UgewotICAgICAgICBp
ZiAoIShXVEY6OmdldDxkb3VibGU+KHBvc2l0aW9uKSA+PSAwICYmIFdURjo6Z2V0PGRvdWJsZT4o
cG9zaXRpb24pIDw9IDEwMCkpCisgICAgICAgIHRleHRQb3NpdGlvbiA9IFdURjo6Z2V0PGRvdWJs
ZT4ocG9zaXRpb24pOworICAgICAgICBpZiAoISh0ZXh0UG9zaXRpb24gPj0gMCAmJiB0ZXh0UG9z
aXRpb24gPD0gMTAwKSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVF
cnJvciB9OwogCiAgICAgICAgIC8vIE90aGVyd2lzZSwgc2V0IHRoZSB0ZXh0IHRyYWNrIGN1ZSBs
aW5lIHBvc2l0aW9uIHRvIHRoZSBuZXcgdmFsdWUuCi0gICAgICAgIHRleHRQb3NpdGlvbiA9IFdU
Rjo6Z2V0PGRvdWJsZT4ocG9zaXRpb24pOwogICAgICAgICBpZiAobV90ZXh0UG9zaXRpb24gPT0g
dGV4dFBvc2l0aW9uKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC01MDIsMTcg
KzUwMSwxNyBAQCB2b2lkIFZUVEN1ZTo6Y3JlYXRlV2ViVlRUTm9kZVRyZWUoKQogICAgICAgICBt
X3dlYlZUVE5vZGVUcmVlID0gV2ViVlRUUGFyc2VyOjpjcmVhdGVEb2N1bWVudEZyYWdtZW50RnJv
bUN1ZVRleHQob3duZXJEb2N1bWVudCgpLCBtX2NvbnRlbnQpOwogfQogCi12b2lkIFZUVEN1ZTo6
Y29weVdlYlZUVE5vZGVUb0RPTVRyZWUoQ29udGFpbmVyTm9kZSogd2ViVlRUTm9kZSwgQ29udGFp
bmVyTm9kZSogcGFyZW50KQorc3RhdGljIHZvaWQgY29weVdlYlZUVE5vZGVUb0RPTVRyZWUoQ29u
dGFpbmVyTm9kZSYgd2ViVlRUTm9kZSwgTm9kZSYgcGFyZW50KQogewotICAgIGZvciAoUmVmUHRy
PE5vZGU+IG5vZGUgPSB3ZWJWVFROb2RlLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2Rl
LT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IHdlYlZUVE5v
ZGUuZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewogICAg
ICAgICBSZWZQdHI8Tm9kZT4gY2xvbmVkTm9kZTsKICAgICAgICAgaWYgKGlzPFdlYlZUVEVsZW1l
bnQ+KCpub2RlKSkKLSAgICAgICAgICAgIGNsb25lZE5vZGUgPSBkb3duY2FzdDxXZWJWVFRFbGVt
ZW50Pigqbm9kZSkuY3JlYXRlRXF1aXZhbGVudEhUTUxFbGVtZW50KG93bmVyRG9jdW1lbnQoKSk7
CisgICAgICAgICAgICBjbG9uZWROb2RlID0gZG93bmNhc3Q8V2ViVlRURWxlbWVudD4oKm5vZGUp
LmNyZWF0ZUVxdWl2YWxlbnRIVE1MRWxlbWVudChwYXJlbnQuZG9jdW1lbnQoKSk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGNsb25lZE5vZGUgPSBub2RlLT5jbG9uZU5vZGUoZmFsc2UpOwot
ICAgICAgICBwYXJlbnQtPmFwcGVuZENoaWxkKCpjbG9uZWROb2RlKTsKKyAgICAgICAgcGFyZW50
LmFwcGVuZENoaWxkKCpjbG9uZWROb2RlKTsKICAgICAgICAgaWYgKGlzPENvbnRhaW5lck5vZGU+
KCpub2RlKSkKLSAgICAgICAgICAgIGNvcHlXZWJWVFROb2RlVG9ET01UcmVlKGRvd25jYXN0PENv
bnRhaW5lck5vZGU+KG5vZGUuZ2V0KCkpLCBkb3duY2FzdDxDb250YWluZXJOb2RlPihjbG9uZWRO
b2RlLmdldCgpKSk7CisgICAgICAgICAgICBjb3B5V2ViVlRUTm9kZVRvRE9NVHJlZShkb3duY2Fz
dDxDb250YWluZXJOb2RlPigqbm9kZSksICpjbG9uZWROb2RlKTsKICAgICB9CiB9CiAKQEAgLTUy
Myw3ICs1MjIsNyBAQCBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gVlRUQ3VlOjpnZXRDdWVBc0hU
TUwoKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gY2xvbmVkRnJhZ21lbnQg
PSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUob3duZXJEb2N1bWVudCgpKTsKLSAgICBjb3B5V2Vi
VlRUTm9kZVRvRE9NVHJlZShtX3dlYlZUVE5vZGVUcmVlLmdldCgpLCBjbG9uZWRGcmFnbWVudC5w
dHIoKSk7CisgICAgY29weVdlYlZUVE5vZGVUb0RPTVRyZWUoKm1fd2ViVlRUTm9kZVRyZWUsIGNs
b25lZEZyYWdtZW50KTsKICAgICByZXR1cm4gY2xvbmVkRnJhZ21lbnQ7CiB9CiAKQEAgLTkyMSw3
ICs5MjAsNyBAQCB2b2lkIFZUVEN1ZTo6cmVtb3ZlRGlzcGxheVRyZWUoKQogICAgIGlmIChtX25v
dGlmeVJlZ2lvbiAmJiB0cmFjaygpKSB7CiAgICAgICAgIGlmIChWVFRSZWdpb25MaXN0KiByZWdp
b25zID0gdHJhY2soKS0+cmVnaW9ucygpKSB7CiAgICAgICAgICAgICBpZiAoUmVmUHRyPFZUVFJl
Z2lvbj4gcmVnaW9uID0gcmVnaW9ucy0+Z2V0UmVnaW9uQnlJZChtX3JlZ2lvbklkKSkgewotICAg
ICAgICAgICAgICAgIGlmIChoYXNEaXNwbGF5VHJlZSgpKQorICAgICAgICAgICAgICAgIGlmICht
X2Rpc3BsYXlUcmVlKQogICAgICAgICAgICAgICAgICAgICByZWdpb24tPndpbGxSZW1vdmVUZXh0
VHJhY2tDdWVCb3gobV9kaXNwbGF5VHJlZS5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTExNjEsMTAgKzExNjAsNyBAQCB2b2lkIFZUVEN1ZTo6c2V0Q3VlU2V0dGluZ3MoY29u
c3QgU3RyaW5nJiBpbnB1dFN0cmluZykKICAgICAvLyBJZiBjdWUncyBsaW5lIHBvc2l0aW9uIGlz
IG5vdCBhdXRvIG9yIGN1ZSdzIHNpemUgaXMgbm90IDEwMCBvciBjdWUncwogICAgIC8vIHdyaXRp
bmcgZGlyZWN0aW9uIGlzIG5vdCBob3Jpem9udGFsLCBidXQgY3VlJ3MgcmVnaW9uIGlkZW50aWZp
ZXIgaXMgbm90CiAgICAgLy8gdGhlIGVtcHR5IHN0cmluZywgbGV0IGN1ZSdzIHJlZ2lvbiBpZGVu
dGlmaWVyIGJlIHRoZSBlbXB0eSBzdHJpbmcuCi0gICAgaWYgKG1fcmVnaW9uSWQuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9saW5lUG9zaXRpb24gIT0gdW5kZWZpbmVk
UG9zaXRpb24gfHwgbV9jdWVTaXplICE9IDEwMCB8fCBtX3dyaXRpbmdEaXJlY3Rpb24gIT0gSG9y
aXpvbnRhbCkKKyAgICBpZiAoIW1fcmVnaW9uSWQuaXNFbXB0eSgpICYmIChtX2xpbmVQb3NpdGlv
biAhPSB1bmRlZmluZWRQb3NpdGlvbiB8fCBtX2N1ZVNpemUgIT0gMTAwIHx8IG1fd3JpdGluZ0Rp
cmVjdGlvbiAhPSBIb3Jpem9udGFsKSkKICAgICAgICAgbV9yZWdpb25JZCA9IGVtcHR5U3RyaW5n
KCk7CiB9CiAKQEAgLTExOTYsNDQgKzExOTIsMTggQEAgc3RkOjpwYWlyPGRvdWJsZSwgZG91Ymxl
PiBWVFRDdWU6OmdldENTU1Bvc2l0aW9uKCkgY29uc3QKICAgICByZXR1cm4gbV9kaXNwbGF5UG9z
aXRpb247CiB9CiAKLWJvb2wgVlRUQ3VlOjpjdWVDb250ZW50c01hdGNoKGNvbnN0IFRleHRUcmFj
a0N1ZSYgY3VlKSBjb25zdAorYm9vbCBWVFRDdWU6OmN1ZUNvbnRlbnRzTWF0Y2goY29uc3QgVGV4
dFRyYWNrQ3VlJiBvdGhlclRleHRUcmFja0N1ZSkgY29uc3QKIHsKLSAgICBSZWZQdHI8Y29uc3Qg
VlRUQ3VlPiB2dHRDdWUgPSB0b1ZUVEN1ZSgmY3VlKTsKLSAgICBpZiAodGV4dCgpICE9IHZ0dEN1
ZS0+dGV4dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGN1ZVNldHRpbmdzKCkg
IT0gdnR0Q3VlLT5jdWVTZXR0aW5ncygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KHBvc2l0aW9uKCkgIT0gdnR0Q3VlLT5wb3NpdGlvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKGxpbmUoKSAhPSB2dHRDdWUtPmxpbmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChzaXplKCkgIT0gdnR0Q3VlLT5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoYWxpZ24oKSAhPSB2dHRDdWUtPmFsaWduKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBhdXRvJiBvdGhlciA9IGRvd25jYXN0
PFZUVEN1ZT4ob3RoZXJUZXh0VHJhY2tDdWUpOworICAgIHJldHVybiBUZXh0VHJhY2tDdWU6OmN1
ZUNvbnRlbnRzTWF0Y2gob3RoZXIpCisgICAgICAgICYmIHRleHQoKSA9PSBvdGhlci50ZXh0KCkK
KyAgICAgICAgJiYgY3VlU2V0dGluZ3MoKSA9PSBvdGhlci5jdWVTZXR0aW5ncygpCisgICAgICAg
ICYmIHBvc2l0aW9uKCkgPT0gb3RoZXIucG9zaXRpb24oKQorICAgICAgICAmJiBsaW5lKCkgPT0g
b3RoZXIubGluZSgpCisgICAgICAgICYmIHNpemUoKSA9PSBvdGhlci5zaXplKCkKKyAgICAgICAg
JiYgYWxpZ24oKSA9PSBvdGhlci5hbGlnbigpOwogfQogCi1ib29sIFZUVEN1ZTo6aXNFcXVhbChj
b25zdCBUZXh0VHJhY2tDdWUmIGN1ZSwgVGV4dFRyYWNrQ3VlOjpDdWVNYXRjaFJ1bGVzIG1hdGNo
KSBjb25zdAotewotICAgIGlmICghVGV4dFRyYWNrQ3VlOjppc0VxdWFsKGN1ZSwgbWF0Y2gpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY3VlLmN1ZVR5cGUoKSAhPSBXZWJWVFQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBjdWVDb250ZW50c01hdGNoKGN1
ZSk7Ci19Ci0KLWJvb2wgVlRUQ3VlOjpkb2VzRXh0ZW5kQ3VlKGNvbnN0IFRleHRUcmFja0N1ZSYg
Y3VlKSBjb25zdAotewotICAgIGlmICghY3VlQ29udGVudHNNYXRjaChjdWUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIFRleHRUcmFja0N1ZTo6ZG9lc0V4dGVuZEN1
ZShjdWUpOwotfQotICAgIAogdm9pZCBWVFRDdWU6OnNldEZvbnRTaXplKGludCBmb250U2l6ZSwg
Y29uc3QgSW50U2l6ZSYsIGJvb2wgaW1wb3J0YW50KQogewogICAgIGlmIChmb250U2l6ZSA9PSBt
X2ZvbnRTaXplICYmIGltcG9ydGFudCA9PSBtX2ZvbnRTaXplSXNJbXBvcnRhbnQpCkBAIC0xMjQ0
LDM3ICsxMjE0LDIwIEBAIHZvaWQgVlRUQ3VlOjpzZXRGb250U2l6ZShpbnQgZm9udFNpemUsIGNv
bnN0IEludFNpemUmLCBib29sIGltcG9ydGFudCkKICAgICBtX2ZvbnRTaXplID0gZm9udFNpemU7
CiB9CiAKLVZUVEN1ZSogdG9WVFRDdWUoVGV4dFRyYWNrQ3VlKiBjdWUpCi17Ci0gICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8VlRUQ3VlKj4odG9WVFRDdWUoY29uc3RfY2FzdDxjb25zdCBUZXh0VHJhY2tD
dWUqPihjdWUpKSk7Ci19Ci0KLWNvbnN0IFZUVEN1ZSogdG9WVFRDdWUoY29uc3QgVGV4dFRyYWNr
Q3VlKiBjdWUpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihpczxWVFRDdWU+KGN1ZSkgfHwgaXM8VGV4dFRyYWNrQ3VlR2VuZXJpYz4oY3VlKSk7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFZUVEN1ZSo+KGN1ZSk7Ci19Ci0KLVN0cmluZyBWVFRD
dWU6OnRvSlNPTlN0cmluZygpIGNvbnN0Ci17Ci0gICAgYXV0byBvYmplY3QgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIHRvSlNPTihvYmplY3QuZ2V0KCkpOwotCi0gICAgcmV0dXJuIG9i
amVjdC0+dG9KU09OU3RyaW5nKCk7Ci19Ci0KIHZvaWQgVlRUQ3VlOjp0b0pTT04oSlNPTjo6T2Jq
ZWN0JiBvYmplY3QpIGNvbnN0CiB7CiAgICAgVGV4dFRyYWNrQ3VlOjp0b0pTT04ob2JqZWN0KTsK
IAorICAgIC8vIEZJWE1FOiBTZWVtcyBkYW5nZXJvdXMgdG8gaW5jbHVkZSB0aGlzIGJhc2VkIG9u
IExPR19ESVNBQkxFRC4gQ2FuIHdlIGp1c3QgaW5jbHVkZSBpdCB1bmNvbmRpdGlvbmFsbHk/CiAj
aWYgIUxPR19ESVNBQkxFRAogICAgIG9iamVjdC5zZXRTdHJpbmcoInRleHQiX3MsIHRleHQoKSk7
CiAjZW5kaWYKKwogICAgIG9iamVjdC5zZXRTdHJpbmcoInZlcnRpY2FsIl9zLCB2ZXJ0aWNhbCgp
KTsKICAgICBvYmplY3Quc2V0Qm9vbGVhbigic25hcFRvTGluZXMiX3MsIHNuYXBUb0xpbmVzKCkp
OwogICAgIG9iamVjdC5zZXREb3VibGUoImxpbmUiX3MsIG1fbGluZVBvc2l0aW9uKTsKICAgICBp
ZiAodGV4dFBvc2l0aW9uSXNBdXRvKCkpCi0gICAgICAgIG9iamVjdC5zZXRTdHJpbmcoInBvc2l0
aW9uIl9zLCAiYXV0byIpOworICAgICAgICBvYmplY3Quc2V0U3RyaW5nKCJwb3NpdGlvbiJfcywg
ImF1dG8iX3MpOwogICAgIGVsc2UKICAgICAgICAgb2JqZWN0LnNldERvdWJsZSgicG9zaXRpb24i
X3MsIG1fdGV4dFBvc2l0aW9uKTsKICAgICBvYmplY3Quc2V0SW50ZWdlcigic2l6ZSJfcywgbV9j
dWVTaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5oCmluZGV4IGUzY2U5OTJiNGFjZDJi
ODFkYTU1ZDRlMzJhNjBhNDRjY2EyNDQzNjIuLmFlYWM4ZGYwZmU0Y2ZmNGExOWY5YmY3ZDE3MDcw
ODMxNTUwOTlmNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3Vl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuaApAQCAtNzgsMjQgKzc4
LDEzIEBAIHByaXZhdGU6CiBjbGFzcyBWVFRDdWUgOiBwdWJsaWMgVGV4dFRyYWNrQ3VlIHsKICAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFZUVEN1ZSk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxWVFRDdWU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBkb3VibGUg
c3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBjcmVhdGUoY29udGV4dCwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHN0YXJ0
KSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKGVuZCksIGNvbnRlbnQpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBSZWY8VlRUQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0
IFN0cmluZyYgY29udGVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZU
VEN1ZShjb250ZXh0LCBzdGFydCwgZW5kLCBjb250ZW50KSk7Ci0gICAgfQotCisgICAgc3RhdGlj
IFJlZjxWVFRDdWU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgZG91YmxlIHN0YXJ0
LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOworICAgIHN0YXRpYyBSZWY8VlRU
Q3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGltZSYgc3Rh
cnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOwogICAgIHN0
YXRpYyBSZWY8VlRUQ3VlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFdl
YlZUVEN1ZURhdGEmKTsKIAogICAgIHZpcnR1YWwgflZUVEN1ZSgpOwogCi0gICAgZW51bSBBdXRv
S2V5d29yZCB7Ci0gICAgICAgIEF1dG8KLSAgICB9OwotICAgIAorICAgIGVudW0gQXV0b0tleXdv
cmQgeyBBdXRvIH07CiAgICAgdXNpbmcgTGluZUFuZFBvc2l0aW9uU2V0dGluZyA9IFZhcmlhbnQ8
ZG91YmxlLCBBdXRvS2V5d29yZD47CiAKICAgICBjb25zdCBTdHJpbmcmIHZlcnRpY2FsKCkgY29u
c3Q7CkBAIC0xMzIsNyArMTIxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNBY3RpdmUoYm9v
bCkgb3ZlcnJpZGU7CiAKICAgICBib29sIGhhc0Rpc3BsYXlUcmVlKCkgY29uc3QgeyByZXR1cm4g
bV9kaXNwbGF5VHJlZTsgfQotICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGdldERpc3BsYXlU
cmVlKGNvbnN0IEludFNpemUmLCBpbnQpIGZpbmFsOworICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVC
b3g+IGdldERpc3BsYXlUcmVlKGNvbnN0IEludFNpemUmIHZpZGVvU2l6ZSwgaW50IGZvbnRTaXpl
KSBmaW5hbDsKICAgICBIVE1MU3BhbkVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiAq
bV9jdWVIaWdobGlnaHRCb3g7IH0KIAogICAgIHZvaWQgdXBkYXRlRGlzcGxheVRyZWUoY29uc3Qg
TWVkaWFUaW1lJikgZmluYWw7CkBAIC0xNTAsNyArMTM5LDcgQEAgcHVibGljOgogICAgIENTU1Zh
bHVlSUQgZ2V0Q1NTV3JpdGluZ01vZGUoKSBjb25zdDsKIAogICAgIGVudW0gV3JpdGluZ0RpcmVj
dGlvbiB7Ci0gICAgICAgIEhvcml6b250YWwgPSAwLAorICAgICAgICBIb3Jpem9udGFsLAogICAg
ICAgICBWZXJ0aWNhbEdyb3dpbmdMZWZ0LAogICAgICAgICBWZXJ0aWNhbEdyb3dpbmdSaWdodCwK
ICAgICAgICAgTnVtYmVyT2ZXcml0aW5nRGlyZWN0aW9ucwpAQCAtMTU4LDcgKzE0Nyw3IEBAIHB1
YmxpYzoKICAgICBXcml0aW5nRGlyZWN0aW9uIGdldFdyaXRpbmdEaXJlY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX3dyaXRpbmdEaXJlY3Rpb247IH0KIAogICAgIGVudW0gQ3VlQWxpZ25tZW50IHsK
LSAgICAgICAgU3RhcnQgPSAwLAorICAgICAgICBTdGFydCwKICAgICAgICAgQ2VudGVyLAogICAg
ICAgICBFbmQsCiAgICAgICAgIExlZnQsCkBAIC0xNzAsMzIgKzE1OSwyOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCByZWNhbGN1bGF0ZVN0eWxlcygpIGZpbmFsIHsgbV9kaXNwbGF5VHJlZVNob3VsZENo
YW5nZSA9IHRydWU7IH0KICAgICB2b2lkIHNldEZvbnRTaXplKGludCwgY29uc3QgSW50U2l6ZSYs
IGJvb2wgaW1wb3J0YW50KSBvdmVycmlkZTsKIAotICAgIGJvb2wgaXNFcXVhbChjb25zdCBUZXh0
VHJhY2tDdWUmLCBDdWVNYXRjaFJ1bGVzKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGN1ZUNv
bnRlbnRzTWF0Y2goY29uc3QgVGV4dFRyYWNrQ3VlJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBkb2VzRXh0ZW5kQ3VlKGNvbnN0IFRleHRUcmFja0N1ZSYpIGNvbnN0IG92ZXJyaWRlOwotCiAg
ICAgQ3VlVHlwZSBjdWVUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gV2ViVlRUOyB9CiAg
ICAgYm9vbCBpc1JlbmRlcmFibGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAhbV9jb250ZW50Lmlz
RW1wdHkoKTsgfQogCi0gICAgdm9pZCBkaWRDaGFuZ2UoKSBvdmVycmlkZTsKLQotICAgIFN0cmlu
ZyB0b0pTT05TdHJpbmcoKSBjb25zdDsKKyAgICB2b2lkIGRpZENoYW5nZSgpIGZpbmFsOwogCiAg
ICAgZG91YmxlIGNhbGN1bGF0ZUNvbXB1dGVkVGV4dFBvc2l0aW9uKCkgY29uc3Q7CiAKIHByb3Rl
Y3RlZDoKLSAgICBWVFRDdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IE1lZGlhVGlt
ZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOwot
ICAgIFZUVEN1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgV2ViVlRUQ3VlRGF0YSYp
OworICAgIFZUVEN1ZShEb2N1bWVudCYsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1l
ZGlhVGltZSYgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOworCisgICAgYm9vbCBjdWVDb250
ZW50c01hdGNoKGNvbnN0IFRleHRUcmFja0N1ZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmly
dHVhbCBSZWY8VlRUQ3VlQm94PiBjcmVhdGVEaXNwbGF5VHJlZSgpOwogICAgIFZUVEN1ZUJveCYg
ZGlzcGxheVRyZWVJbnRlcm5hbCgpOwogCi0gICAgdm9pZCB0b0pTT04oSlNPTjo6T2JqZWN0Jikg
Y29uc3QgZmluYWw7CisgICAgdm9pZCB0b0pTT04oSlNPTjo6T2JqZWN0JikgY29uc3Qgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBpbml0aWFsaXplKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmKTsKKyAgICBWVFRDdWUoRG9jdW1lbnQmLCBjb25zdCBXZWJWVFRDdWVEYXRhJik7CisKKyAg
ICB2b2lkIGluaXRpYWxpemUoKTsKICAgICB2b2lkIGNyZWF0ZVdlYlZUVE5vZGVUcmVlKCk7Ci0g
ICAgdm9pZCBjb3B5V2ViVlRUTm9kZVRvRE9NVHJlZShDb250YWluZXJOb2RlKiBXZWJWVFROb2Rl
LCBDb250YWluZXJOb2RlKiByb290KTsKIAogICAgIHZvaWQgcGFyc2VTZXR0aW5ncyhjb25zdCBT
dHJpbmcmKTsKIApAQCAtMjE1LDE1ICsyMDAsMTcgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIEN1
ZVNldHRpbmcgc2V0dGluZ05hbWUoVlRUU2Nhbm5lciYpOwogCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBkb3VibGUgdW5kZWZpbmVkUG9zaXRpb24gPSAtMTsKKwogICAgIFN0cmluZyBtX2NvbnRlbnQ7
CiAgICAgU3RyaW5nIG1fc2V0dGluZ3M7Ci0gICAgZG91YmxlIG1fbGluZVBvc2l0aW9uOwotICAg
IGRvdWJsZSBtX2NvbXB1dGVkTGluZVBvc2l0aW9uOwotICAgIGRvdWJsZSBtX3RleHRQb3NpdGlv
bjsKLSAgICBpbnQgbV9jdWVTaXplOworICAgIGRvdWJsZSBtX2xpbmVQb3NpdGlvbiB7IHVuZGVm
aW5lZFBvc2l0aW9uIH07CisgICAgZG91YmxlIG1fY29tcHV0ZWRMaW5lUG9zaXRpb24geyB1bmRl
ZmluZWRQb3NpdGlvbiB9OworICAgIGRvdWJsZSBtX3RleHRQb3NpdGlvbiB7IHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCkgfTsKKyAgICBpbnQgbV9jdWVTaXplIHsgMTAw
IH07CiAKLSAgICBXcml0aW5nRGlyZWN0aW9uIG1fd3JpdGluZ0RpcmVjdGlvbjsKLSAgICBDdWVB
bGlnbm1lbnQgbV9jdWVBbGlnbm1lbnQ7CisgICAgV3JpdGluZ0RpcmVjdGlvbiBtX3dyaXRpbmdE
aXJlY3Rpb24geyBIb3Jpem9udGFsIH07CisgICAgQ3VlQWxpZ25tZW50IG1fY3VlQWxpZ25tZW50
IHsgQ2VudGVyIH07CiAgICAgU3RyaW5nIG1fcmVnaW9uSWQ7CiAKICAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gbV93ZWJWVFROb2RlVHJlZTsKQEAgLTIzMSw4ICsyMTgsOCBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxIVE1MRGl2RWxlbWVudD4gbV9jdWVCYWNrZHJvcEJveDsKICAgICBSZWZQ
dHI8VlRUQ3VlQm94PiBtX2Rpc3BsYXlUcmVlOwogCi0gICAgQ1NTVmFsdWVJRCBtX2Rpc3BsYXlE
aXJlY3Rpb247Ci0gICAgaW50IG1fZGlzcGxheVNpemU7CisgICAgQ1NTVmFsdWVJRCBtX2Rpc3Bs
YXlEaXJlY3Rpb24geyBDU1NWYWx1ZUx0ciB9OworICAgIGludCBtX2Rpc3BsYXlTaXplIHsgMCB9
OwogICAgIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IG1fZGlzcGxheVBvc2l0aW9uOwogCiAgICAg
TWVkaWFUaW1lIG1fb3JpZ2luYWxTdGFydFRpbWU7CkBAIC0yNDUsMjcgKzIzMiwxNiBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9ub3RpZnlSZWdpb24gOiAxOwogfTsKIAotVlRUQ3VlKiB0b1ZUVEN1
ZShUZXh0VHJhY2tDdWUqKTsKLWNvbnN0IFZUVEN1ZSogdG9WVFRDdWUoY29uc3QgVGV4dFRyYWNr
Q3VlKik7Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogbmFtZXNwYWNlIFdURiB7CiAKLXRl
bXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTG9nQXJndW1lbnQ7Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IExvZ0FyZ3VtZW50PFdlYkNvcmU6OlZUVEN1ZT4gewotICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJp
bmcoY29uc3QgV2ViQ29yZTo6VlRUQ3VlJiBjdWUpIHsgcmV0dXJuIGN1ZS50b0pTT05TdHJpbmco
KTsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCit0ZW1wbGF0ZTw+IHN0cnVjdCBMb2dBcmd1
bWVudDxXZWJDb3JlOjpWVFRDdWU+IDogTG9nQXJndW1lbnQ8V2ViQ29yZTo6VGV4dFRyYWNrQ3Vl
PiB7IH07CiAKLS8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGlzVHlwZSBmdW5jdGlvbiBpcyBpbmNv
cnJlY3QsIHNpbmNlIGl0IHJldHVybnMgdHJ1ZSBmb3IgVGV4dFRyYWNrQ3VlR2VuZXJpYy4KLS8v
IFNob3VsZCBmaXggdGhpcyBzbyB0aGF0IGlzPFZUVEN1ZT4gYW5kIGRvd25jYXN0PFZUVEN1ZT4g
d2lsbCB3b3JrIGNvcnJlY3RseSBhbmQgZWxpbWluYXRlIHRvVlRUQ3VlCi0vLyBzaW5jZSBpdCdz
IGp1c3QgYW5vdGhlciBuYW1lIGZvciBkb3duY2FzdDxWVFRDdWU+LgorfQogCiBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlZUVEN1ZSkKLXN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpUZXh0VHJhY2tDdWUmIGN1ZSkgeyByZXR1cm4gY3VlLmN1ZVR5cGUoKSA9
PSBXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OldlYlZUVDsgfQorc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYkNvcmU6OlRleHRUcmFja0N1ZSYgY3VlKSB7IHJldHVybiBjdWUuY3VlVHlwZSgpID09
IFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6V2ViVlRUIHx8IGN1ZS5jdWVUeXBlKCkgPT0gV2ViQ29y
ZTo6VGV4dFRyYWNrQ3VlOjpDb252ZXJ0ZWRUb1dlYlZUVDsgfQogU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19FTkQoKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9U
ZXh0VHJhY2tMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRl
ci5jcHAKaW5kZXggZWNkMjY0ZTYxYzQ2ZGJiN2NkZjAwY2QxZGU2NGZlOTAwNGU1MzNkMS4uODc0
ZjllNWQwYmE5N2M2MjRhYzA2YWYwNzZiNGYwZWUxMzMzNjUxMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL1RleHRUcmFja0xvYWRlci5jcHAKQEAgLTE5OSwxNiArMTk5LDIwIEBAIHZvaWQgVGV4
dFRyYWNrTG9hZGVyOjpmaWxlRmFpbGVkVG9QYXJzZSgpCiAgICAgY2FuY2VsTG9hZCgpOwogfQog
Ci12b2lkIFRleHRUcmFja0xvYWRlcjo6Z2V0TmV3Q3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFj
a0N1ZT4+JiBvdXRwdXRDdWVzKQorVmVjdG9yPFJlZjxWVFRDdWU+PiBUZXh0VHJhY2tMb2FkZXI6
OmdldE5ld0N1ZXMoKQogewogICAgIEFTU0VSVChtX2N1ZVBhcnNlcik7Ci0gICAgaWYgKG1fY3Vl
UGFyc2VyKSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8V2ViVlRUQ3VlRGF0YT4+IG5ld0N1ZXM7
Ci0gICAgICAgIG1fY3VlUGFyc2VyLT5nZXROZXdDdWVzKG5ld0N1ZXMpOworICAgIGlmICghbV9j
dWVQYXJzZXIpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgZm9yIChhdXRvJiBjdWVE
YXRhIDogbmV3Q3VlcykKLSAgICAgICAgICAgIG91dHB1dEN1ZXMuYXBwZW5kKFZUVEN1ZTo6Y3Jl
YXRlKCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsICpjdWVEYXRhKSk7Ci0gICAgfQorICAgIFZl
Y3RvcjxSZWZQdHI8V2ViVlRUQ3VlRGF0YT4+IG5ld0N1ZXM7CisgICAgbV9jdWVQYXJzZXItPmdl
dE5ld0N1ZXMobmV3Q3Vlcyk7CisKKyAgICBWZWN0b3I8UmVmPFZUVEN1ZT4+IHJlc3VsdDsKKyAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuZXdDdWVzLnNpemUoKSk7CisgICAgZm9y
IChhdXRvJiBjdWVEYXRhIDogbmV3Q3VlcykKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChWVFRDdWU6OmNyZWF0ZSgqbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCAqY3VlRGF0YSkpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgVGV4dFRyYWNrTG9hZGVyOjpnZXROZXdSZWdp
b25zKFZlY3RvcjxSZWZQdHI8VlRUUmVnaW9uPj4mIG91dHB1dFJlZ2lvbnMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvVGV4dFRyYWNrTG9hZGVyLmgKaW5kZXggYzdhNGJhM2JiMjI4YmU4ZGQ1MjkxY2Q5
NmE5MmQwYjI4ZmMyNTExYS4uYzBlNzgyOTFkYTc4MGI2ZmU1YmRmMTI4MmYwYWU4ODA2MDEzODE1
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1RleHRUcmFja0xvYWRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0VHJhY2tMb2FkZXIuaApAQCAtNDAsNiArNDAs
NyBAQCBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEhUTUxUcmFja0VsZW1lbnQ7CiBjbGFzcyBUZXh0
VHJhY2tMb2FkZXI7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgVlRUQ3Vl
OwogCiBjbGFzcyBUZXh0VHJhY2tMb2FkZXJDbGllbnQgewogcHVibGljOgpAQCAtNjAsOSArNjEs
MTEgQEAgcHVibGljOgogCiAgICAgYm9vbCBsb2FkKGNvbnN0IFVSTCYsIEhUTUxUcmFja0VsZW1l
bnQmKTsKICAgICB2b2lkIGNhbmNlbExvYWQoKTsKLSAgICB2b2lkIGdldE5ld0N1ZXMoVmVjdG9y
PFJlZlB0cjxUZXh0VHJhY2tDdWU+PiYgb3V0cHV0Q3Vlcyk7CisKKyAgICBWZWN0b3I8UmVmPFZU
VEN1ZT4+IGdldE5ld0N1ZXMoKTsKICAgICB2b2lkIGdldE5ld1JlZ2lvbnMoVmVjdG9yPFJlZlB0
cjxWVFRSZWdpb24+PiYgb3V0cHV0UmVnaW9ucyk7CiAgICAgVmVjdG9yPFN0cmluZz4gZ2V0TmV3
U3R5bGVTaGVldHMoKTsKKwogcHJpdmF0ZToKIAogICAgIC8vIENhY2hlZFJlc291cmNlQ2xpZW50
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNN
ZWRpYUFGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUYuY3BwCmluZGV4IGUwNjBlOWQwYzAzYWU0MTdhMWQ3NDYzYTJhNjNkNGFkZDI2MmM4NTUu
LmEzODNhODlmNjk4YjIzODM1NDY1N2QwMzEzZTVlZTA2YzE5ODNmZTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCkBA
IC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNs
dWRlICJUZXh0VHJhY2tMaXN0LmgiCiAjaW5jbHVkZSAiVXNlclN0eWxlU2hlZXRUeXBlcy5oIgot
I2luY2x1ZGUgIlZUVEN1ZS5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYv
TGFuZ3VhZ2UuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uaAppbmRleCAzOWRh
NTU4ZTZkYjM4ZjBjNzc4YzUxNzgwYTA3NjJiNWY2NTAwYjBmLi4xYTIwYzA1YmU0Y2MwMTM3YTA2
MmYzZmNlMzg0YjVhNTVlYjY4OTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKICAqLwogCi0jaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbl9oCi0j
ZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbl9oCisjcHJhZ21hIG9uY2UKIAog
I2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKIApAQCAtMzQsMTcgKzMzLDE0
IEBACiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRl
IDx3dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dlckhlbHBlci5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUFWRjsKIGNsYXNzIElu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkY7Ci1jbGFzcyBHZW5lcmljQ3VlRGF0YTsKIAogLy8gVXNl
IGVhZ2VyIGluaXRpYWxpemF0aW9uIGZvciB0aGUgV2Vha1B0ckZhY3Rvcnkgc2luY2Ugd2UgY2Fs
bCBtYWtlV2Vha1B0cigpIGZyb20gYW5vdGhlciB0aHJlYWQuCiBjbGFzcyBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb24gOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uLCBXZWFrUHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdlcj4sIHB1
YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UsIHB1YmxpYyBBVkZJbmJhbmRUcmFja1Bh
cmVudApAQCAtMzc2LDUgKzM3MiwzIEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0KLSNlbmRp
ZiAvLyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZUVEN1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVlRUQ3VlLmNwcAppbmRleCA0Y2Y4ZmEzNzJlNWVkOTE5MDc2NjEyMTk3MGQ4
MzMzMWQwYzgxZjYwLi5kMTI2MmMwZmIzZmFhMzIxYzIxMTZkNDk5N2JlZWQyOWEzMTg2Y2YwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVlRUQ3VlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVlRUQ3VlLmNwcApAQCAtNDMsMTAgKzQz
LDkgQEAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlclZUVEN1ZSk7CiAKIFJlbmRl
clZUVEN1ZTo6UmVuZGVyVlRUQ3VlKFZUVEN1ZUJveCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmJiBz
dHlsZSkKICAgICA6IFJlbmRlckJsb2NrRmxvdyhlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSkKLSAg
ICAsIG1fY3VlKHRvVlRUQ3VlKGVsZW1lbnQuZ2V0Q3VlKCkpKQorICAgICwgbV9jdWUoZG93bmNh
c3Q8VlRUQ3VlPihlbGVtZW50LmdldEN1ZSgpKSkKIHsKICAgICBBU1NFUlQobV9jdWUpOwotICAg
IEFTU0VSVChpczxWVFRDdWU+KG1fY3VlKSk7CiB9CiAKIHZvaWQgUmVuZGVyVlRUQ3VlOjpsYXlv
dXQoKQpAQCAtNjIsOSArNjEsOSBAQCB2b2lkIFJlbmRlclZUVEN1ZTo6bGF5b3V0KCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKCp0aGlz
LCBsb2NhdGlvbk9mZnNldCgpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwg
c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKLSAgICAKKwogICAgIGlmICht
X2N1ZS0+Y3VlVHlwZSgpPT0gVGV4dFRyYWNrQ3VlOjpXZWJWVFQpIHsKLSAgICAgICAgaWYgKHRv
VlRUQ3VlKG1fY3VlKS0+c25hcFRvTGluZXMoKSkKKyAgICAgICAgaWYgKG1fY3VlLT5zbmFwVG9M
aW5lcygpKQogICAgICAgICAgICAgcmVwb3NpdGlvbkN1ZVNuYXBUb0xpbmVzU2V0KCk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHJlcG9zaXRpb25DdWVTbmFwVG9MaW5lc05vdFNldCgpOwpA
QCAtMzUyLDcgKzM1MSw3IEBAIHZvaWQgUmVuZGVyVlRUQ3VlOjpyZXBvc2l0aW9uR2VuZXJpY0N1
ZSgpCiAgICAgUmVuZGVyRWxlbWVudCYgYmFja2Ryb3BFbGVtZW50ID0gZG93bmNhc3Q8UmVuZGVy
RWxlbWVudD4oZmlyc3RDaGlsZCk7CiAgICAgCiAgICAgSW5saW5lRmxvd0JveCogZmlyc3RMaW5l
Qm94ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqYmFja2Ryb3BFbGVtZW50LmZpcnN0Q2hpbGQo
KSkuZmlyc3RMaW5lQm94KCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PFRleHRUcmFja0N1ZUdlbmVy
aWMqPihtX2N1ZSktPnVzZURlZmF1bHRQb3NpdGlvbigpICYmIGZpcnN0TGluZUJveCkgeworICAg
IGlmIChkb3duY2FzdDxUZXh0VHJhY2tDdWVHZW5lcmljPigqbV9jdWUpLnVzZURlZmF1bHRQb3Np
dGlvbigpICYmIGZpcnN0TGluZUJveCkgewogICAgICAgICBMYXlvdXRVbml0IHBhcmVudFdpZHRo
ID0gY29udGFpbmluZ0Jsb2NrKCktPmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0
IHdpZHRoIHsgZmlyc3RMaW5lQm94LT53aWR0aCgpIH07CiAgICAgICAgIExheW91dFVuaXQgcmln
aHQgPSAocGFyZW50V2lkdGggLyAyKSAtICh3aWR0aCAvIDIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3R5bGUvUnVsZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0
LmNwcAppbmRleCBlMjdlNTNmZTgyZDUyYzJlMTQ1Njk4NjA1NjYwZWFlYjgzYjI4NTVlLi5hYmIz
MzQ2ZjQ0NzQ0ZTg4NjZmNjJhYmUwZTYyOTdhMjFlYTRiZjcyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9SdWxlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxl
U2V0LmNwcApAQCAtNDMsMTAgKzQzLDYgQEAKICNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQuaCIK
ICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKIAotI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLSNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBuYW1lc3BhY2UgU3R5bGUgewogCg==
</data>
<flag name="review"
          id="407139"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>