<?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>8608</bug_id>
          
          <creation_ts>2006-04-26 09:38:44 -0700</creation_ts>
          <short_desc>make GraphicsContext more suitable for cross-platform use, step 2</short_desc>
          <delta_ts>2006-04-28 10:01:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></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>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>40487</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-04-26 09:38:44 -0700</bug_when>
    <thetext>I&apos;m taking the next step in adding operations to GraphicsContext and using it in the canvas implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>40490</commentid>
    <comment_count>1</comment_count>
      <attachid>7984</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-04-26 10:09:34 -0700</bug_when>
    <thetext>Created attachment 7984
patch to change more code to use GraphicsContext instead of CGContext</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>40660</commentid>
    <comment_count>2</comment_count>
      <attachid>7984</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-04-28 05:14:49 -0700</bug_when>
    <thetext>Comment on attachment 7984
patch to change more code to use GraphicsContext instead of CGContext

No need to call CGMakeRect here:
-            m_cropBox = CGRectMake(m_mediaBox.origin.x, m_mediaBox.origin.y, m_mediaBox.size.width, m_mediaBox.size.height);
+            m_cropBox = CGRectMake(m_mediaBox.x(), m_mediaBox.y(), m_mediaBox.width(), m_mediaBox.height());

the magic constuctors should take care of the translation, I think.

+    // Need a flip.
could be a better comment.

+        CGContextSetFillColorWithColor(context-&gt;platformContext(), color);

could also be context-&gt;setFillColor(color)

+        CGContextFillRect(context-&gt;platformContext(), rect);

and context-&gt;fillRect(rect);

This seems unfortunate:
+            GraphicsContext(bmap).setCompositeOperation(CompositeCopy);

Why not just use:
CGContextSetShouldAntialias instead of:

+static void setShouldAntialias(CGContextRef context, bool should)
+{
+    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+    [[NSGraphicsContext graphicsContextWithGraphicsPort:context flipped:YES] setShouldAntialias:should];
+    [pool release];
+}

+void GraphicsContext::setLineCap(LineCap cap)
+void GraphicsContext::setLineJoin(LineJoin join)

I think the style I see more frequently in the code is to not indent the case: statements an extra tab width.

in canvas:
+        CGContextSaveGState(c-&gt;platformContext());        
+        CGContextClip(c-&gt;platformContext());
+        CGContextDrawShading(c-&gt;platformContext(), state().m_fillStyle-&gt;gradient()-&gt;platformShading());        
+        CGContextRestoreGState(c-&gt;platformContext());

at least he save and restore can be done using GraphicsContext methods.

This patch is fabulous, but I think it could go through one more round of tweaks before landing.  I don&apos;t necessarily need to read through it again, but we should at least chat briefly about the above issues (assuming we disagree at all).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>40666</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-04-28 08:45:27 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 7984 [edit])
&gt; No need to call CGMakeRect here:
&gt; -            m_cropBox = CGRectMake(m_mediaBox.origin.x, m_mediaBox.origin.y,
&gt; m_mediaBox.size.width, m_mediaBox.size.height);
&gt; +            m_cropBox = CGRectMake(m_mediaBox.x(), m_mediaBox.y(),
&gt; m_mediaBox.width(), m_mediaBox.height());
&gt; 
&gt; the magic constuctors should take care of the translation, I think.

Yes, great, will do.

&gt; +    // Need a flip.
&gt; could be a better comment.
&gt; 
&gt; +        CGContextSetFillColorWithColor(context-&gt;platformContext(), color);
&gt; 
&gt; could also be context-&gt;setFillColor(color)

If I did change this to use setFillColor right now, it would be a problem since that function only works when the context is the current NSGraphicsContext. So I will make changes like that one only after changing the GraphicsContext functions themselves to work better.

&gt; +        CGContextFillRect(context-&gt;platformContext(), rect);
&gt; 
&gt; and context-&gt;fillRect(rect);

Same issue as above.

&gt; This seems unfortunate:
&gt; +            GraphicsContext(bmap).setCompositeOperation(CompositeCopy);

It&apos;s just temporary -- we won&apos;t need that once we move entirely to the cross-platform API.

&gt; Why not just use:
&gt; CGContextSetShouldAntialias instead of:
&gt; 
&gt; +static void setShouldAntialias(CGContextRef context, bool should)
&gt; +{
&gt; +    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
&gt; +    [[NSGraphicsContext graphicsContextWithGraphicsPort:context flipped:YES]
&gt; setShouldAntialias:should];
&gt; +    [pool release];
&gt; +}

Good point. I&apos;ll change it to save/restore graphics state and use the CG call.

&gt; +void GraphicsContext::setLineCap(LineCap cap)
&gt; +void GraphicsContext::setLineJoin(LineJoin join)
&gt; 
&gt; I think the style I see more frequently in the code is to not indent the case:
&gt; statements an extra tab width.

Yes, more frequently in older code, but in newer code we&apos;ve been using the additional indenting, which seems good to me.

&gt; in canvas:
&gt; +        CGContextSaveGState(c-&gt;platformContext());        
&gt; +        CGContextClip(c-&gt;platformContext());
&gt; +        CGContextDrawShading(c-&gt;platformContext(),
&gt; state().m_fillStyle-&gt;gradient()-&gt;platformShading());        
&gt; +        CGContextRestoreGState(c-&gt;platformContext());
&gt; 
&gt; at least he save and restore can be done using GraphicsContext methods.

Sure, that&apos;s fine. But I&apos;m going to convert that function completely to GraphicsContext in the next pass so it&apos;s not really all that important to convert it slightly more during the current patch.

&gt; This patch is fabulous, but I think it could go through one more round of
&gt; tweaks before landing.  I don&apos;t necessarily need to read through it again, but
&gt; we should at least chat briefly about the above issues (assuming we disagree at
&gt; all).

I don&apos;t think there&apos;s any real disagreement here. I&apos;ll land this round after making the specific changes you requested that are easy to do, and then we can go the next round and get even more of these done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>40671</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-04-28 10:01:49 -0700</bug_when>
    <thetext>Committed revision 14102.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7984</attachid>
            <date>2006-04-26 10:09:34 -0700</date>
            <delta_ts>2006-04-28 05:14:49 -0700</delta_ts>
            <desc>patch to change more code to use GraphicsContext instead of CGContext</desc>
            <filename>GraphicsPatch.txt</filename>
            <type>text/plain</type>
            <size>112859</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3Jt
L0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNDA3MSkKKysrIHBsYXRmb3JtL0dyYXBoaWNz
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxOSArMzQsMTQgQEAKICNpbmNsdWRlIDxr
eG1sY29yZS9Ob25jb3B5YWJsZS5oPgogCiAjaWYgX19BUFBMRV9fCi0jaWYgX19PQkpDX18KLUBj
bGFzcyBOU0dyYXBoaWNzQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IENHQ29udGV4dCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDsKKyNlbGlmIFdJTjMyCit0eXBlZGVmIHN0cnVjdCBIRENfXyogSERD
OwordHlwZWRlZiBzdHJ1Y3QgX2NhaXJvIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2Vsc2UK
LWNsYXNzIE5TR3JhcGhpY3NDb250ZXh0OwordHlwZWRlZiB2b2lkIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0OwogI2VuZGlmCi10eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQqIENHQ29udGV4dFJlZjsK
LSNlbmRpZgogCi0jaWYgV0lOMzIKLXR5cGVkZWYgc3RydWN0IEhEQ19fKiBIREM7Ci10eXBlZGVm
IHN0cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKLSNlbmRpZgotCiBjbGFzcyBEZXByZWNhdGVkU3RyaW5n
OwogY2xhc3MgUUNoYXI7CiAKQEAgLTU3LDIwICs1MiwxOSBAQAogICAgIGNsYXNzIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKICAgICBjbGFzcyBJbnRQb2ludDsKICAgICBjbGFzcyBJ
bnRQb2ludEFycmF5OworICAgIGNsYXNzIFBhdGg7CiAKICNpZiBTVkdfU1VQUE9SVAogICAgIGNs
YXNzIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0OwogI2VuZGlmCiAKLSNpZiBfX0FQUExFX18KLSAg
ICBDR0NvbnRleHRSZWYgY3VycmVudENHQ29udGV4dCgpOwotICAgIHZvaWQgc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKENHQ29udGV4dFJlZiwgQ29tcG9zaXRlT3BlcmF0b3IpOwotI2VuZGlmCi0KICAg
ICBjbGFzcyBHcmFwaGljc0NvbnRleHQgOiBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgorICAg
ICAgICBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTsKICAgICAgICAg
fkdyYXBoaWNzQ29udGV4dCgpOwogICAgICAgIAorICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CisKICAgICAgICAgY29uc3QgRm9udCYgZm9u
dCgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEZvbnQoY29uc3QgRm9udCYpOwogICAgICAgICAK
QEAgLTkyLDYgKzg2LDggQEAKICAgICAgICAgdm9pZCBkcmF3Q29udmV4UG9seWdvbihjb25zdCBJ
bnRQb2ludEFycmF5Jik7CiAKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBJbnRSZWN0Jiwg
Y29uc3QgQ29sb3ImKTsKKyAgICAgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0Jik7
CisgICAgICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lk
dGgpOwogCiAgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgY29uc3QgSW50UG9pbnQmLCBD
b21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogICAgICAgICB2b2lkIGRy
YXdJbWFnZShJbWFnZSosIGNvbnN0IEludFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBv
c2l0ZVNvdXJjZU92ZXIpOwpAQCAtMTQzLDMyICsxMzksMjMgQEAKICAgICAgICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IENvbG9yJik7CiAgICAgICAgIHZvaWQgY2xlYXJGb2N1c1JpbmcoKTsK
IAotICAgICAgICBib29sIHByaW50aW5nKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0TGluZVdp
ZHRoKGZsb2F0KTsKKyAgICAgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApOworICAgICAgICB2
b2lkIHNldExpbmVKb2luKExpbmVKb2luKTsKKyAgICAgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZs
b2F0KTsKIAorICAgICAgICB2b2lkIHNldEFscGhhKGZsb2F0KTsKKworICAgICAgICB2b2lkIHNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcik7CisKKyAgICAgICAgdm9pZCBj
bGlwKGNvbnN0IFBhdGgmKTsKKwogI2lmIFNWR19TVVBQT1JUCiAgICAgICAgIEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiBjcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCk7CiAjZW5kaWYKIAot
I2lmIF9fQVBQTEVfXwotICAgICAgICBHcmFwaGljc0NvbnRleHQoTlNHcmFwaGljc0NvbnRleHQq
KTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0KENHQ29udGV4dFJlZiwgYm9vbCBmbGlwVGV4dCwg
Ym9vbCBmb3JQcmludGluZyk7Ci0gICAgICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQo
KSBjb25zdDsKLSNlbmRpZgotCiAjaWYgV0lOMzIKLSAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0
byB1c2UgR2V0REMgdG8gZ3JhYiB0aGUgY3VycmVudCBjb250ZXh0IGZyb20KLSAgICAgICAgLy8g
YW4gSFdORDsgaG93ZXZlciwgd2UgY3VycmVudGx5IHJlcXVpcmUgY2xpZW50cyB0byBwYXNzIGlu
IHRoZQotICAgICAgICAvLyBEZXZpY2UgQ29udGV4dCBoYW5kbGUgZGlyZWN0bHkuICBQcmludGlu
ZyB3aWxsIGFsc28KLSAgICAgICAgLy8gZXZlbnR1YWxseSByZXF1aXJlIGNsaWVudHMgdG8gcGFz
cyBzb21lIHNvcnQgb2YgcHJpbnRlci1pbmZvCi0gICAgICAgIC8vIHN0cnVjdCB0byB0aGF0IHdl
IGNhbiBDcmVhdGVEQyB0aGUgcHJpbnRlciBkZXZpY2UgY29ycmVjdGx5LgotICAgICAgICBHcmFw
aGljc0NvbnRleHQoSERDKTsKLQotICAgICAgICAvLyBUaGlzIGlzIHRlbXBvcmFyaWx5IHB1Ymxp
YyB0byBhbGxvdyBTcGlubmVyZXQgdG8gZG8gZG91YmxlLWJ1ZmZlcmluZy4KLSAgICAgICAgLy8g
TG9uZyB0ZXJtLCB3ZSBzaG91bGQgZ2V0IHRoZSBHcmFwaGljc0NvbnRleHQgZnJvbSB0aGUgRnJh
bWVWaWV3Ci0gICAgICAgIC8vIGFuZCB0aGVuIGhhdmUgYSBibGl0KCkgbWV0aG9kIG9uIHRoZSBG
cmFtZVZpZXcuCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dChjYWlyb190KiBjb250ZXh0KTsKLQot
ICAgICAgICBjYWlyb190KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KEhEQyk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgogI2VuZGlmCiAKICAgICBw
cml2YXRlOgpAQCAtMTgyLDcgKzE2OSw3IEBACiAgICAgICAgIGludCBmb2N1c1JpbmdPZmZzZXQo
KSBjb25zdDsKICAgICAgICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiBmb2N1c1JpbmdSZWN0cygp
IGNvbnN0OwogICAgICAgICAKLSAgICAgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dFByaXZhdGUq
IGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoYm9vbCBpc0ZvclByaW50aW5nID0gZmFsc2Up
OworICAgICAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSogY3JlYXRlR3JhcGhpY3ND
b250ZXh0UHJpdmF0ZSgpOwogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95R3JhcGhpY3NDb250
ZXh0UHJpdmF0ZShHcmFwaGljc0NvbnRleHRQcml2YXRlKik7CiAgICAgICAgIAogICAgICAgICBH
cmFwaGljc0NvbnRleHRQcml2YXRlKiBtX2NvbW1vbjsKSW5kZXg6IHBsYXRmb3JtL21hYy9QREZE
b2N1bWVudEltYWdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9QREZEb2N1bWVudElt
YWdlLm1tCShyZXZpc2lvbiAxNDA3MSkKKysrIHBsYXRmb3JtL21hYy9QREZEb2N1bWVudEltYWdl
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw5ICsyNCwxMCBAQAogICovCiAKICNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiSW1hZ2UuaCIKICNpbXBvcnQgIlBERkRvY3VtZW50SW1hZ2UuaCIK
IAorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RhdGljIHZvaWQgcmVsZWFzZVBERkRvY3VtZW50RGF0YSh2b2lkICppbmZvLCBjb25zdCB2b2lk
ICpkYXRhLCBzaXplX3Qgc2l6ZSkKQEAgLTU1LDcgKzU2LDcgQEAKICAgICByZXR1cm4gbV9kb2N1
bWVudDsKIH0KIAotQ0dSZWN0IFBERkRvY3VtZW50SW1hZ2U6Om1lZGlhQm94KCkKK0Zsb2F0UmVj
dCBQREZEb2N1bWVudEltYWdlOjptZWRpYUJveCgpCiB7CiAgICAgcmV0dXJuIG1fbWVkaWFCb3g7
CiB9CkBAIC02NywyOCArNjgsMjggQEAKICAgICAvLyByb3RhdGUgdGhlIG1lZGlhIGJveCBhbmQg
Y2FsY3VsYXRlIGJvdW5kaW5nIGJveAogICAgIGZsb2F0IHNpbmEgICA9IHNpbmYobV9yb3RhdGlv
bik7CiAgICAgZmxvYXQgY29zYSAgID0gY29zZihtX3JvdGF0aW9uKTsKLSAgICBmbG9hdCB3aWR0
aCAgPSBtX2Nyb3BCb3guc2l6ZS53aWR0aDsKLSAgICBmbG9hdCBoZWlnaHQgPSBtX2Nyb3BCb3gu
c2l6ZS5oZWlnaHQ7CisgICAgZmxvYXQgd2lkdGggID0gbV9jcm9wQm94LndpZHRoKCk7CisgICAg
ZmxvYXQgaGVpZ2h0ID0gbV9jcm9wQm94LmhlaWdodCgpOwogCiAgICAgLy8gY2FsY3VsYXRlIHJv
dGF0ZWQgeCBhbmQgeSBheGlzCiAgICAgTlNQb2ludCByeCA9IE5TTWFrZVBvaW50KCB3aWR0aCAg
KiBjb3NhLCB3aWR0aCAgKiBzaW5hKTsKICAgICBOU1BvaW50IHJ5ID0gTlNNYWtlUG9pbnQoLWhl
aWdodCAqIHNpbmEsIGhlaWdodCAqIGNvc2EpOwogCiAgICAgLy8gZmluZCBkZWx0YSB3aWR0aCBh
bmQgaGVpZ2h0IG9mIHJvdGF0ZWQgcG9pbnRzCi0gICAgcm90YXRlZFJlY3Qub3JpZ2luICAgICAg
PSBtX2Nyb3BCb3gub3JpZ2luOworICAgIHJvdGF0ZWRSZWN0Lm9yaWdpbiAgICAgID0gbV9jcm9w
Qm94LmxvY2F0aW9uKCk7CiAgICAgcm90YXRlZFJlY3Quc2l6ZS53aWR0aCAgPSBjZWlsZihmYWJz
KHJ4LnggLSByeS54KSk7CiAgICAgcm90YXRlZFJlY3Quc2l6ZS5oZWlnaHQgPSBjZWlsZihmYWJz
KHJ5LnkgLSByeC55KSk7CiAKICAgICByZXR1cm4gcm90YXRlZFJlY3Q7CiB9CiAKLXZvaWQgUERG
RG9jdW1lbnRJbWFnZTo6YWRqdXN0Q1RNKENHQ29udGV4dFJlZiBjb250ZXh0KQordm9pZCBQREZE
b2N1bWVudEltYWdlOjphZGp1c3RDVE0oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogewogICAg
IC8vIHJvdGF0ZSB0aGUgY3JvcCBib3ggYW5kIGNhbGN1bGF0ZSBib3VuZGluZyBib3gKICAgICBm
bG9hdCBzaW5hICAgPSBzaW5mKC1tX3JvdGF0aW9uKTsKICAgICBmbG9hdCBjb3NhICAgPSBjb3Nm
KC1tX3JvdGF0aW9uKTsKLSAgICBmbG9hdCB3aWR0aCAgPSBtX2Nyb3BCb3guc2l6ZS53aWR0aDsK
LSAgICBmbG9hdCBoZWlnaHQgPSBtX2Nyb3BCb3guc2l6ZS5oZWlnaHQ7CisgICAgZmxvYXQgd2lk
dGggID0gbV9jcm9wQm94LndpZHRoKCk7CisgICAgZmxvYXQgaGVpZ2h0ID0gbV9jcm9wQm94Lmhl
aWdodCgpOwogCiAgICAgLy8gY2FsY3VsYXRlIHJvdGF0ZWQgeCBhbmQgeSBlZGdlcyBvZiB0aGUg
Y29ycCBib3guIGlmIHRoZXkncmUgbmVnYXRpdmUsIGl0IG1lYW5zIHBhcnQgb2YgdGhlIGltYWdl
IGhhcwogICAgIC8vIGJlZW4gcm90YXRlZCBvdXRzaWRlIG9mIHRoZSBib3VuZHMgYW5kIHdlIG5l
ZWQgdG8gc2hpZnQgb3ZlciB0aGUgaW1hZ2Ugc28gaXQgbGllcyBpbnNpZGUgdGhlIGJvdW5kcyBh
Z2FpbgpAQCAtOTYsMTMgKzk3LDEzIEBACiAgICAgTlNQb2ludCByeSA9IE5TTWFrZVBvaW50KC1o
ZWlnaHQgKiBzaW5hLCBoZWlnaHQgKiBjb3NhKTsKIAogICAgIC8vIGFkanVzdCBzbyB3ZSBhcmUg
YXQgdGhlIGNyb3AgYm94IG9yaWdpbgotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0
LCBmbG9vcmYoLU1JTigwLE1JTihyeC54LCByeS54KSkpLCBmbG9vcmYoLU1JTigwLE1JTihyeC55
LCByeS55KSkpKTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCksIGZsb29yZigtTUlOKDAsTUlOKHJ4LngsIHJ5LngpKSksIGZsb29yZigtTUlOKDAs
TUlOKHJ4LnksIHJ5LnkpKSkpOwogCiAgICAgLy8gcm90YXRlIC12ZSB0byByZW1vdmUgcm90YXRp
b24KLSAgICBDR0NvbnRleHRSb3RhdGVDVE0oY29udGV4dCwgLW1fcm90YXRpb24pOworICAgIENH
Q29udGV4dFJvdGF0ZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgLW1fcm90YXRpb24p
OwogCiAgICAgLy8gc2hpZnQgc28gd2UgYXJlIGNvbXBsZXRlbHkgd2l0aGluIG1lZGlhIGJveAot
ICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBtX21lZGlhQm94Lm9yaWdpbi54IC0g
bV9jcm9wQm94Lm9yaWdpbi54LCBtX21lZGlhQm94Lm9yaWdpbi55IC0gbV9jcm9wQm94Lm9yaWdp
bi55KTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCksIG1fbWVkaWFCb3gueCgpIC0gbV9jcm9wQm94LngoKSwgbV9tZWRpYUJveC55KCkgLSBtX2Ny
b3BCb3gueSgpKTsKIH0KIAogdm9pZCBQREZEb2N1bWVudEltYWdlOjpzZXRDdXJyZW50UGFnZShp
bnQgcGFnZSkKQEAgLTEyMSw3ICsxMjIsNyBAQAogICAgICAgICBpZiAoIUNHUmVjdElzRW1wdHko
cikpIHsKICAgICAgICAgICAgIG1fY3JvcEJveCA9IENHUmVjdE1ha2Uoci5vcmlnaW4ueCwgci5v
cmlnaW4ueSwgci5zaXplLndpZHRoLCByLnNpemUuaGVpZ2h0KTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIG1fY3JvcEJveCA9IENHUmVjdE1ha2UobV9tZWRpYUJveC5vcmlnaW4ueCwg
bV9tZWRpYUJveC5vcmlnaW4ueSwgbV9tZWRpYUJveC5zaXplLndpZHRoLCBtX21lZGlhQm94LnNp
emUuaGVpZ2h0KTsKKyAgICAgICAgICAgIG1fY3JvcEJveCA9IENHUmVjdE1ha2UobV9tZWRpYUJv
eC54KCksIG1fbWVkaWFCb3gueSgpLCBtX21lZGlhQm94LndpZHRoKCksIG1fbWVkaWFCb3guaGVp
Z2h0KCkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gZ2V0IHBhZ2Ugcm90YXRpb24gYW5nbGUK
QEAgLTEzOSw0NiArMTQwLDM2IEBACiAgICAgcmV0dXJuIENHUERGRG9jdW1lbnRHZXROdW1iZXJP
ZlBhZ2VzKG1fZG9jdW1lbnQpOwogfQogCi12b2lkIFBERkRvY3VtZW50SW1hZ2U6OmRyYXcoTlNS
ZWN0IHNyY1JlY3QsIE5TUmVjdCBkc3RSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYWxwaGEsIGJvb2wgZmxpcHBlZCwgQ0dDb250
ZXh0UmVmIGNvbnRleHQpCit2b2lkIFBERkRvY3VtZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7Ci0gICAgQ0dDb250ZXh0U2F2ZUdTdGF0
ZShjb250ZXh0KTsKKyAgICBjb250ZXh0LT5zYXZlKCk7CiAKLSAgICBOU0F1dG9yZWxlYXNlUG9v
bCAqcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOwotICAgIFtbTlNHcmFw
aGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEdyYXBoaWNzUG9ydDpjb250ZXh0IGZsaXBw
ZWQ6Tk9dIHNldENvbXBvc2l0aW5nT3BlcmF0aW9uOihOU0NvbXBvc2l0aW5nT3BlcmF0aW9uKW9w
XTsKLSAgICBbcG9vbCByZWxlYXNlXTsKKyAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRp
b24ob3ApOwogCiAgICAgLy8gU2NhbGUgYW5kIHRyYW5zbGF0ZSBzbyB0aGUgZG9jdW1lbnQgaXMg
cmVuZGVyZWQgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uCi0gICAgZmxvYXQgaFNjYWxlID0gZHN0
UmVjdC5zaXplLndpZHRoICAvIHNyY1JlY3Quc2l6ZS53aWR0aDsKLSAgICBmbG9hdCB2U2NhbGUg
PSBkc3RSZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5zaXplLmhlaWdodDsKKyAgICBmbG9hdCBo
U2NhbGUgPSBkc3RSZWN0LndpZHRoKCkgLyBzcmNSZWN0LndpZHRoKCk7CisgICAgZmxvYXQgdlNj
YWxlID0gZHN0UmVjdC5oZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CiAKLSAgICBDR0NvbnRl
eHRUcmFuc2xhdGVDVE0oY29udGV4dCwgZHN0UmVjdC5vcmlnaW4ueCAtIHNyY1JlY3Qub3JpZ2lu
LnggKiBoU2NhbGUsIGRzdFJlY3Qub3JpZ2luLnkgLSBzcmNSZWN0Lm9yaWdpbi55ICogdlNjYWxl
KTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCBoU2NhbGUsIHZTY2FsZSk7CisgICAg
Q0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBkc3RSZWN0
LngoKSAtIHNyY1JlY3QueCgpICogaFNjYWxlLCBkc3RSZWN0LnkoKSAtIHNyY1JlY3QueSgpICog
dlNjYWxlKTsKKyAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgaFNjYWxlLCB2U2NhbGUpOwogCi0gICAgLy8gUmV2ZXJzZSBpZiBmbGlwcGVkIGltYWdlLgot
ICAgIGlmIChmbGlwcGVkKSB7Ci0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEs
IC0xKTsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1kc3RSZWN0
LnNpemUuaGVpZ2h0KTsKLSAgICB9CisgICAgLy8gTmVlZCBhIGZsaXAuCisgICAgQ0dDb250ZXh0
U2NhbGVDVE0oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIDEsIC0xKTsKKyAgICBDR0NvbnRl
eHRUcmFuc2xhdGVDVE0oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIDAsIC1kc3RSZWN0Lmhl
aWdodCgpKTsKIAogICAgIC8vIENsaXAgdG8gZGVzdGluYXRpb24gaW4gY2FzZSB3ZSBhcmUgaW1h
Z2luZyBwYXJ0IG9mIHRoZSBzb3VyY2Ugb25seQotICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29u
dGV4dCwgQ0dSZWN0SW50ZWdyYWwoKihDR1JlY3QqKSZzcmNSZWN0KSk7CisgICAgQ0dDb250ZXh0
Q2xpcFRvUmVjdChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dSZWN0SW50ZWdyYWwoc3Jj
UmVjdCkpOwogCi0gICAgLy8gYW5kIGRyYXcKICAgICBpZiAobV9kb2N1bWVudCkgewotICAgICAg
ICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICAvLyBSb3RhdGUgdHJhbnNs
YXRlIGltYWdlIGludG8gcG9zaXRpb24gYWNjb3JkaW5nIHRvIGRvYyBwcm9wZXJ0aWVzLgotICAg
ICAgICBhZGp1c3RDVE0oY29udGV4dCk7CisgICAgICAgIGFkanVzdENUTShjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSk7CiAKLSAgICAgICAgLy8gTWVkaWEgYm94IG1heSBoYXZlIG5vbi16ZXJv
IG9yaWdpbiB3aGljaCB3ZSBpZ25vcmUuIENHUERGRG9jdW1lbnRTaG93UGFnZSBwYWdlcyBzdGFy
dAotICAgICAgICAvLyBhdCAxLCBub3QgMC4KLSAgICAgICAgQ0dDb250ZXh0RHJhd1BERkRvY3Vt
ZW50KGNvbnRleHQsIENHUmVjdE1ha2UoMCwgMCwgbV9tZWRpYUJveC5zaXplLndpZHRoLCBtX21l
ZGlhQm94LnNpemUuaGVpZ2h0KSwgbV9kb2N1bWVudCwgMSk7Ci0KLSAgICAgICAgQ0dDb250ZXh0
UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKKyAgICAgICAgLy8gTWVkaWEgYm94IG1heSBoYXZlIG5v
bi16ZXJvIG9yaWdpbiB3aGljaCB3ZSBpZ25vcmUuIENHUERGRG9jdW1lbnRTaG93UGFnZSBwYWdl
cyBzdGFydCBhdCAxLCBub3QgMC4KKyAgICAgICAgQ0dDb250ZXh0RHJhd1BERkRvY3VtZW50KGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBDR1JlY3RNYWtlKDAsIDAsIG1fbWVkaWFCb3gud2lk
dGgoKSwgbV9tZWRpYUJveC5oZWlnaHQoKSksIG1fZG9jdW1lbnQsIDEpOwogICAgIH0KIAogICAg
IC8vIGRvbmUgd2l0aCBvdXIgZmFuY3kgdHJhbnNmb3JtcwotICAgIENHQ29udGV4dFJlc3RvcmVH
U3RhdGUoY29udGV4dCk7CisgICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCiB9CkluZGV4OiBw
bGF0Zm9ybS9tYWMvSW1hZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL0ltYWdl
TWFjLm1tCShyZXZpc2lvbiAxNDA3MSkKKysrIHBsYXRmb3JtL21hYy9JbWFnZU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTA0LDE0ICsxMDQsMTQgQEAKIAogLy8gRHJhd2luZyBSb3V0aW5lcwog
Ci1zdGF0aWMgdm9pZCBmaWxsU29saWRDb2xvckluUmVjdChDR0NvbG9yUmVmIGNvbG9yLCBDR1Jl
Y3QgcmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIENHQ29udGV4dFJlZiBjb250ZXh0KQorc3Rh
dGljIHZvaWQgZmlsbFNvbGlkQ29sb3JJblJlY3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBD
R0NvbG9yUmVmIGNvbG9yLCBDR1JlY3QgcmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAg
ICAgaWYgKGNvbG9yKSB7Ci0gICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0g
ICAgICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjb2xvcik7Ci0g
ICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb250ZXh0LCBvcCk7Ci0gICAgICAgIENHQ29u
dGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3QpOwotICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0
YXRlKGNvbnRleHQpOworICAgICAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgICAgIENHQ29udGV4
dFNldEZpbGxDb2xvcldpdGhDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgY29sb3Ip
OworICAgICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOworICAgICAgICBD
R0NvbnRleHRGaWxsUmVjdChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CisgICAg
ICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICB9CiB9CiAKQEAgLTEzNiw3ICsxMzYsNyBAQAog
ICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwRmxv
YXRDb21wb25lbnRzIHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0KTsKICNlbmRpZgogICAgICAg
ICBpZiAoYm1hcCkgewotICAgICAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGJtYXAsIENv
bXBvc2l0ZUNvcHkpOworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KGJtYXApLnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKICAgICAgICAgICAgIENHUmVjdCBkc3QgPSB7
IHswLCAwfSwgezEsIDF9IH07CiAgICAgICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoYm1hcCwg
ZHN0LCBpbWFnZSk7CiAgICAgICAgICAgICBpZiAocGl4ZWxbM10gPiAwKQpAQCAtMTkwLDEwICsx
OTAsOSBAQAogCiB2b2lkIEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wKQogewotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gY3R4dC0+
cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgaWYgKG1faXNQREYpIHsKICAgICAgICAgaWYgKG1fUERG
RG9jKQotICAgICAgICAgICAgbV9QREZEb2MtPmRyYXcoc3JjUmVjdCwgZHN0UmVjdCwgY29tcG9z
aXRlT3AsIDEuMCwgdHJ1ZSwgY29udGV4dCk7CisgICAgICAgICAgICBtX1BERkRvYy0+ZHJhdyhj
dHh0LCBzcmNSZWN0LCBkc3RSZWN0LCBjb21wb3NpdGVPcCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9IAogICAgIApAQCAtMjA4LDkgKzIwNywxMSBAQAogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAobV9pc1NvbGlkQ29sb3IgJiYgbV9jdXJyZW50RnJhbWUgPT0gMCkKLSAgICAgICAgcmV0dXJu
IGZpbGxTb2xpZENvbG9ySW5SZWN0KG1fc29saWRDb2xvciwgaXIsIGNvbXBvc2l0ZU9wLCBjb250
ZXh0KTsKKyAgICAgICAgcmV0dXJuIGZpbGxTb2xpZENvbG9ySW5SZWN0KGN0eHQsIG1fc29saWRD
b2xvciwgaXIsIGNvbXBvc2l0ZU9wKTsKIAotICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4
dCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
KworICAgIGN0eHQtPnNhdmUoKTsKICAgICAgICAgCiAgICAgLy8gR2V0IHRoZSBoZWlnaHQgKGlu
IGFkanVzdGVkLCBpLmUuIHNjYWxlZCwgY29vcmRzKSBvZiB0aGUgcG9ydGlvbiBvZiB0aGUgaW1h
Z2UKICAgICAvLyB0aGF0IGlzIGN1cnJlbnRseSBkZWNvZGVkLiAgVGhpcyBjb3VsZCBiZSBsZXNz
IHRoYXQgdGhlIGFjdHVhbCBoZWlnaHQuCkBAIC0yMzMsNyArMjM0LDcgQEAKICAgICB9CiAKICAg
ICAvLyBGbGlwIHRoZSBjb29yZHMuCi0gICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbnRleHQs
IGNvbXBvc2l0ZU9wKTsKKyAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRl
T3ApOwogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBpci5vcmlnaW4ueCwgaXIu
b3JpZ2luLnkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKICAgICBD
R0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLWlyLnNpemUuaGVpZ2h0KTsKQEAgLTI2
MSw3ICsyNjIsNyBAQAogICAgIH0gZWxzZSAvLyBEcmF3IHRoZSB3aG9sZSBpbWFnZS4KICAgICAg
ICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIGlyLCBpbWFnZSk7CiAKLSAgICBDR0NvbnRl
eHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworICAgIGN0eHQtPnJlc3RvcmUoKTsKICAgICAKICAg
ICBzdGFydEFuaW1hdGlvbigpOwogCkBAIC0yODQsMTAgKzI4NSw4IEBACiAgICAgaWYgKCFpbWFn
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjdHh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKLQogICAgIGlmIChtX2N1cnJlbnRGcmFtZSA9PSAwICYmIG1faXNT
b2xpZENvbG9yKSB7Ci0gICAgICAgIGZpbGxTb2xpZENvbG9ySW5SZWN0KG1fc29saWRDb2xvciwg
ZGVzdFJlY3QsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGNvbnRleHQpOworICAgICAgICBmaWxsU29s
aWRDb2xvckluUmVjdChjdHh0LCBtX3NvbGlkQ29sb3IsIGRlc3RSZWN0LCBDb21wb3NpdGVTb3Vy
Y2VPdmVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzM2LDggKzMzNSwxMCBAQAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR1BhdHRlcm5UaWxp
bmdDb25zdGFudFNwYWNpbmcsIHRydWUsICZwYXR0ZXJuQ2FsbGJhY2tzKTsKICAgICAKICAgICBp
ZiAocGF0dGVybikgewotICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworICAg
ICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwogCisg
ICAgICAgIGN0eHQtPnNhdmUoKTsKKwogICAgICAgICBDR1BvaW50IHRpbGVPcmlnaW4gPSBDR1Bv
aW50TWFrZShvbmVUaWxlUmVjdC5vcmlnaW4ueCwgb25lVGlsZVJlY3Qub3JpZ2luLnkpOwogICAg
ICAgICBbW1dlYkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBzZXRQYXR0
ZXJuUGhhc2VGb3JDb250ZXh0OmNvbnRleHQgaW5Vc2VyU3BhY2U6dGlsZU9yaWdpbl07CiAKQEAg
LTM0OCwxMSArMzQ5LDExIEBACiAgICAgICAgIENHRmxvYXQgcGF0dGVybkFscGhhID0gMTsKICAg
ICAgICAgQ0dDb250ZXh0U2V0RmlsbFBhdHRlcm4oY29udGV4dCwgcGF0dGVybiwgJnBhdHRlcm5B
bHBoYSk7CiAKLSAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbnRleHQsIENvbXBvc2l0
ZVNvdXJjZU92ZXIpOworICAgICAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlU291cmNlT3Zlcik7CiAKICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgZGVz
dFJlY3QpOwogCi0gICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CisgICAg
ICAgIGN0eHQtPnJlc3RvcmUoKTsKIAogICAgICAgICBDR1BhdHRlcm5SZWxlYXNlKHBhdHRlcm4p
OwogICAgIH0KQEAgLTM2NywxMiArMzY4LDExIEBACiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjdHh0LT5wbGF0Zm9ybUNvbnRl
eHQoKTsKLSAgICAKICAgICBpZiAobV9jdXJyZW50RnJhbWUgPT0gMCAmJiBtX2lzU29saWRDb2xv
cikKLSAgICAgICAgcmV0dXJuIGZpbGxTb2xpZENvbG9ySW5SZWN0KG1fc29saWRDb2xvciwgZHN0
UmVjdCwgQ29tcG9zaXRlU291cmNlT3ZlciwgY29udGV4dCk7CisgICAgICAgIHJldHVybiBmaWxs
U29saWRDb2xvckluUmVjdChjdHh0LCBtX3NvbGlkQ29sb3IsIGRzdFJlY3QsIENvbXBvc2l0ZVNv
dXJjZU92ZXIpOwogCi0gICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKyAgICBjdHh0
LT5zYXZlKCk7CisKICAgICBDR1NpemUgdGlsZVNpemUgPSBzcmNSZWN0LnNpemUoKTsKICAgICBD
R1JlY3QgaXIgPSBkc3RSZWN0OwogICAgIENHUmVjdCBmciA9IHNyY1JlY3Q7CkBAIC00MTIsNiAr
NDEyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0
ZXJuVHJhbnNmb3JtLCB0aWxlU2l6ZS53aWR0aCwgdGlsZVNpemUuaGVpZ2h0LCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dQYXR0ZXJuVGlsaW5nQ29uc3Rh
bnRTcGFjaW5nLCB0cnVlLCAmcGF0dGVybkNhbGxiYWNrcyk7CiAgICAgaWYgKHBhdHRlcm4pIHsK
KyAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
KyAgICAKICAgICAgICAgLy8gV2Ugd2FudCB0byBjb25zdHJ1Y3QgdGhlIHBoYXNlIHN1Y2ggdGhh
dCB0aGUgcGF0dGVybiBpcyBjZW50ZXJlZCAod2hlbiBzdHJldGNoIGlzIG5vdAogICAgICAgICAv
LyBzZXQgZm9yIGEgcGFydGljdWxhciBydWxlKS4KICAgICAgICAgZmxvYXQgaFBoYXNlID0gc2Nh
bGVYICogZnIub3JpZ2luLng7CkBAIC00MzEsMTQgKzQzMywxNCBAQAogICAgICAgICBDR0Zsb2F0
IHBhdHRlcm5BbHBoYSA9IDE7CiAgICAgICAgIENHQ29udGV4dFNldEZpbGxQYXR0ZXJuKGNvbnRl
eHQsIHBhdHRlcm4sICZwYXR0ZXJuQWxwaGEpOwogCi0gICAgICAgIHNldENvbXBvc2l0ZU9wZXJh
dGlvbihjb250ZXh0LCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICAgICAgY3R4dC0+c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogICAgICAgICAKICAgICAgICAg
Q0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgaXIpOwogCi0gICAgICAgIENHUGF0dGVyblJlbGVh
c2UgKHBhdHRlcm4pOworICAgICAgICBDR1BhdHRlcm5SZWxlYXNlKHBhdHRlcm4pOwogICAgIH0K
IAotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CisgICAgY3R4dC0+cmVzdG9y
ZSgpOwogCiAgICAgc3RhcnRBbmltYXRpb24oKTsKIH0KSW5kZXg6IHBsYXRmb3JtL21hYy9XaWRn
ZXRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQkocmV2aXNp
b24gMTQwNzEpCisrKyBwbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTUsMTIgKzMxNSwxNiBAQAogICAgIHJldHVybiB2aWV3OwogfQogCisvLyBGSVhNRTogR2V0
IHJpZCBvZiB0aGUgc2luZ2xlIHVzZSBvZiB0aGVzZSBuZXh0IHR3byBmdW5jdGlvbnMgKGZyYW1l
IHJlc2l6aW5nKSwgYW5kIHJlbW92ZSB0aGVtLgorCiBHcmFwaGljc0NvbnRleHQqIFdpZGdldDo6
bG9ja0RyYXdpbmdGb2N1cygpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwog
ICAgIFtnZXRWaWV3KCkgbG9ja0ZvY3VzXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwotICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0KFtOU0dyYXBoaWNzQ29udGV4dCBjdXJy
ZW50Q29udGV4dF0pOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRl
eHQgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCo+KFtbTlNHcmFwaGljc0Nv
bnRleHQgY3VycmVudENvbnRleHRdIGdyYXBoaWNzUG9ydF0pOworICAgIEFTU0VSVChbW05TR3Jh
cGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0ZsaXBwZWRdKTsKKyAgICByZXR1cm4gbmV3
IEdyYXBoaWNzQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpOwogfQogCiB2b2lkIFdpZGdldDo6dW5s
b2NrRHJhd2luZ0ZvY3VzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKSW5kZXg6IHBsYXRmb3Jt
L21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL0dy
YXBoaWNzQ29udGV4dE1hYy5tbQkocmV2aXNpb24gMTQwNzEpCisrKyBwbGF0Zm9ybS9tYWMvR3Jh
cGhpY3NDb250ZXh0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW1w
b3J0ICJGb3VuZGF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJJbnRQb2ludEFycmF5LmgiCiAjaW1w
b3J0ICJLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgiCisjaW1wb3J0ICJQYXRoLmgiCiAjaW1wb3J0
ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAKIC8vIEZJWE1FOiBBIGxvdCBtb3JlIG9mIHRo
aXMgc2hvdWxkIHVzZSBDb3JlR3JhcGhpY3MgaW5zdGVhZCBvZiBBcHBLaXQuCkBAIC00NywxMSAr
NDgsMTAgQEAKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlIHsKIHB1Ymxp
YzoKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQ0dDb250ZXh0UmVmLCBOU0dy
YXBoaWNzQ29udGV4dCopOworICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShDR0Nv
bnRleHRSZWYpOwogICAgIH5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKTsKIAogICAg
IENHQ29udGV4dFJlZiBtX2NnQ29udGV4dDsKLSAgICBOU0dyYXBoaWNzQ29udGV4dCogbV9uc0Nv
bnRleHQ7CiAgICAgSW50UmVjdCBtX2ZvY3VzUmluZ0NsaXA7IC8vIFdvcmsgYXJvdW5kIENHIGJ1
ZyBpbiBmb2N1cyByaW5nIGNsaXBwaW5nLgogfTsKIApAQCAtNjIsMzggKzYyLDIxIEBACiAgICAg
TlNSZWN0RmlsbFVzaW5nT3BlcmF0aW9uKHJlY3QsIE5TQ29tcG9zaXRlU291cmNlT3Zlcik7CiB9
CiAKLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKENHQ29udGV4dFJlZiBjZ0NvbnRleHQsIE5TR3JhcGhpY3NDb250ZXh0KiBuc0Nv
bnRleHQpCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZShDR0NvbnRleHRSZWYgY2dDb250ZXh0KQogewotICAgIGlmIChjZ0NvbnRl
eHQpCi0gICAgICAgIG1fY2dDb250ZXh0ID0gY2dDb250ZXh0OwotICAgIGVsc2UgaWYgKG5zQ29u
dGV4dCkKLSAgICAgICAgbV9jZ0NvbnRleHQgPSBzdGF0aWNfY2FzdDxDR0NvbnRleHRSZWY+KFtu
c0NvbnRleHQgZ3JhcGhpY3NQb3J0XSk7Ci0gICAgZWxzZQotICAgICAgICBtX2NnQ29udGV4dCA9
IDA7Ci0KLSAgICBtX25zQ29udGV4dCA9IG5zQ29udGV4dDsKLQorICAgIG1fY2dDb250ZXh0ID0g
Y2dDb250ZXh0OwogICAgIENHQ29udGV4dFJldGFpbihtX2NnQ29udGV4dCk7Ci0gICAgS1dRUmV0
YWluKG1fbnNDb250ZXh0KTsKIH0KIAogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKIHsKICAgICBDR0NvbnRleHRSZWxlYXNl
KG1fY2dDb250ZXh0KTsKLSAgICBLV1FSZWxlYXNlKG1fbnNDb250ZXh0KTsKIH0KIAotR3JhcGhp
Y3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoTlNHcmFwaGljc0NvbnRleHQqIG5zQ29udGV4dCkK
LSAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUobnNDb250ZXh0ICYm
ICFbbnNDb250ZXh0IGlzRHJhd2luZ1RvU2NyZWVuXSkpCi0gICAgLCBtX2RhdGEobmV3IEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgwLCBuc0NvbnRleHQpKQorR3JhcGhpY3NDb250ZXh0
OjpHcmFwaGljc0NvbnRleHQoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKKyAgICA6IG1fY29tbW9u
KGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKKyAgICAsIG1fZGF0YShuZXcgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCkpCiB7Ci0gICAgc2V0UGFpbnRpbmdE
aXNhYmxlZCghbnNDb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRl
eHQoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCwgYm9vbCAvKmZsaXBUZXh0Ki8sIGJvb2wgZm9yUHJp
bnRpbmcpCi0gICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKGZvclBy
aW50aW5nKSkKLSAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KGNnQ29udGV4dCwgMCkpCi17CiAgICAgc2V0UGFpbnRpbmdEaXNhYmxlZCghY2dDb250ZXh0KTsK
IH0KIApAQCAtMTA1LDIyICs4OCwxMiBAQAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBs
YXRmb3JtU3RhdGUoKQogewotICAgIGlmIChtX2RhdGEtPm1fbnNDb250ZXh0KQotICAgICAgICBb
bV9kYXRhLT5tX25zQ29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07Ci0gICAgZWxzZSBpZiAobV9k
YXRhLT5tX2NnQ29udGV4dCkKLSAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShtX2RhdGEtPm1f
Y2dDb250ZXh0KTsKLSAgICBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IENHQ29udGV4dFNhdmVHU3RhdGUocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQogewotICAgIGlmIChtX2RhdGEtPm1f
bnNDb250ZXh0KQotICAgICAgICBbbV9kYXRhLT5tX25zQ29udGV4dCByZXN0b3JlR3JhcGhpY3NT
dGF0ZV07Ci0gICAgZWxzZSBpZiAobV9kYXRhLT5tX2NnQ29udGV4dCkKLSAgICAgICAgQ0dDb250
ZXh0UmVzdG9yZUdTdGF0ZShtX2RhdGEtPm1fY2dDb250ZXh0KTsKLSAgICBlbHNlCi0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUocGxhdGZv
cm1Db250ZXh0KCkpOwogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0
cm9rZWQgYm9yZGVyLgpAQCAtMTI5LDkgKzEwMiw4IEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBjdXJyZW50bHkg
d29ya3Mgb25seSB3aXRoIE5TR3JhcGhpY3NDb250ZXh0LgotICAgIEFTU0VSVChtX2RhdGEtPm1f
bnNDb250ZXh0KTsKLSAgICBBU1NFUlQobV9kYXRhLT5tX25zQ29udGV4dCA9PSBbTlNHcmFwaGlj
c0NvbnRleHQgY3VycmVudENvbnRleHRdKTsKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBj
dXJyZW50bHkgd29ya3Mgb25seSB3aGVuIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgdGhlIGN1cnJl
bnQgTlNHcmFwaGljc0NvbnRleHQuCisgICAgQVNTRVJUKHBsYXRmb3JtQ29udGV4dCgpID09IFtb
TlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGdyYXBoaWNzUG9ydF0pOwogCiAgICAg
aWYgKGZpbGxDb2xvcigpICYgMHhGRjAwMDAwMCkKICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVy
KHJlY3QsIGZpbGxDb2xvcigpKTsKQEAgLTE0NCwzMSArMTE2LDQzIEBACiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRDb2xvckZyb21GaWxsQ29sb3IoKQogewotICAgIC8vIFRoaXMgZnVuY3Rp
b24gY3VycmVudGx5IHdvcmtzIG9ubHkgd2l0aCBOU0dyYXBoaWNzQ29udGV4dC4KLSAgICBBU1NF
UlQobV9kYXRhLT5tX25zQ29udGV4dCk7Ci0gICAgQVNTRVJUKG1fZGF0YS0+bV9uc0NvbnRleHQg
PT0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSk7CisgICAgLy8gRklYTUU6IFRo
aXMgZnVuY3Rpb24gY3VycmVudGx5IHdvcmtzIG9ubHkgd2hlbiB0aGUgY3VycmVudCBjb250ZXh0
IGlzIHRoZSBjdXJyZW50IE5TR3JhcGhpY3NDb250ZXh0LgorICAgIEFTU0VSVChwbGF0Zm9ybUNv
bnRleHQoKSA9PSBbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1Bv
cnRdKTsKIAogICAgIFtuc0NvbG9yKGZpbGxDb2xvcigpKSBzZXRdOwogfQogICAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRDb2xvckZyb21QZW4oKQogewotICAgIC8vIFRoaXMgZnVuY3Rpb24g
Y3VycmVudGx5IHdvcmtzIG9ubHkgd2l0aCBOU0dyYXBoaWNzQ29udGV4dC4KLSAgICBBU1NFUlQo
bV9kYXRhLT5tX25zQ29udGV4dCk7Ci0gICAgQVNTRVJUKG1fZGF0YS0+bV9uc0NvbnRleHQgPT0g
W05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSk7CisgICAgLy8gRklYTUU6IFRoaXMg
ZnVuY3Rpb24gY3VycmVudGx5IHdvcmtzIG9ubHkgd2hlbiB0aGUgY3VycmVudCBjb250ZXh0IGlz
IHRoZSBjdXJyZW50IE5TR3JhcGhpY3NDb250ZXh0LgorICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRl
eHQoKSA9PSBbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRd
KTsKIAogICAgIFtuc0NvbG9yKHBlbigpLmNvbG9yKCkpIHNldF07CiB9CiAgIAotICAvLyBUaGlz
IGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCitzdGF0aWMgYm9vbCBzaG91bGRBbnRpYWxp
YXMoQ0dDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgTlNBdXRvcmVsZWFzZVBvb2wqIHBvb2wg
PSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKKyAgICBib29sIHNob3VsZCA9IFtb
TlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEdyYXBoaWNzUG9ydDpjb250ZXh0
IGZsaXBwZWQ6WUVTXSBzaG91bGRBbnRpYWxpYXNdOworICAgIFtwb29sIHJlbGVhc2VdOworICAg
IHJldHVybiBzaG91bGQ7Cit9CisKK3N0YXRpYyB2b2lkIHNldFNob3VsZEFudGlhbGlhcyhDR0Nv
bnRleHRSZWYgY29udGV4dCwgYm9vbCBzaG91bGQpCit7CisgICAgTlNBdXRvcmVsZWFzZVBvb2wq
IHBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKKyAgICBbW05TR3JhcGhp
Y3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6Y29udGV4dCBmbGlwcGVk
OllFU10gc2V0U2hvdWxkQW50aWFsaWFzOnNob3VsZF07CisgICAgW3Bvb2wgcmVsZWFzZV07Cit9
CisKKy8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYg
cG9pbnQyKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIC8vIFRoaXMgZnVuY3Rpb24gY3VycmVudGx5IHdvcmtzIG9ubHkgd2l0aCBOU0dyYXBo
aWNzQ29udGV4dC4KLSAgICBBU1NFUlQobV9kYXRhLT5tX25zQ29udGV4dCk7Ci0gICAgQVNTRVJU
KG1fZGF0YS0+bV9uc0NvbnRleHQgPT0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XSk7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gY3VycmVudGx5IHdvcmtzIG9ubHkgd2hl
biB0aGUgY3VycmVudCBjb250ZXh0IGlzIHRoZSBjdXJyZW50IE5TR3JhcGhpY3NDb250ZXh0Lgor
ICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQoKSA9PSBbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJl
bnRDb250ZXh0XSBncmFwaGljc1BvcnRdKTsKIAogICAgIFBlbjo6UGVuU3R5bGUgcGVuU3R5bGUg
PSBwZW4oKS5zdHlsZSgpOwogICAgIGlmIChwZW5TdHlsZSA9PSBQZW46OlBlbjo6Tm9QZW4pCkBA
IC0yMjQsMTEgKzIwOCwxMCBAQAogICAgIH0KIAogICAgIHNldENvbG9yRnJvbVBlbigpOworCisg
ICAgYm9vbCBzYXZlZEFudGlhbGlhc0ZsYWcgPSBzaG91bGRBbnRpYWxpYXMocGxhdGZvcm1Db250
ZXh0KCkpOworICAgIHNldFNob3VsZEFudGlhbGlhcyhwbGF0Zm9ybUNvbnRleHQoKSwgZmFsc2Up
OwogICAgIAotICAgIE5TR3JhcGhpY3NDb250ZXh0ICpncmFwaGljc0NvbnRleHQgPSBbTlNHcmFw
aGljc0NvbnRleHQgY3VycmVudENvbnRleHRdOwotICAgIEJPT0wgZmxhZyA9IFtncmFwaGljc0Nv
bnRleHQgc2hvdWxkQW50aWFsaWFzXTsKLSAgICBbZ3JhcGhpY3NDb250ZXh0IHNldFNob3VsZEFu
dGlhbGlhczogTk9dOwotICAgIAogICAgIGlmIChwYXRXaWR0aCkgewogICAgICAgICAvLyBEbyBh
IHJlY3QgZmlsbCBvZiBvdXIgZW5kcG9pbnRzLiAgVGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBoYXZl
IHRoZQogICAgICAgICAvLyBhcHBlYXJhbmNlIG9mIGJlaW5nIGEgYm9yZGVyLiAgV2UgdGhlbiBk
cmF3IHRoZSBhY3R1YWwgZG90dGVkL2Rhc2hlZCBsaW5lLgpAQCAtMjgyLDcgKzI2NSw3IEBACiAg
ICAgCiAgICAgW3BhdGggcmVsZWFzZV07CiAKLSAgICBbZ3JhcGhpY3NDb250ZXh0IHNldFNob3Vs
ZEFudGlhbGlhczogZmxhZ107CisgICAgc2V0U2hvdWxkQW50aWFsaWFzKHBsYXRmb3JtQ29udGV4
dCgpLCBzYXZlZEFudGlhbGlhc0ZsYWcpOwogfQogCiAKQEAgLTM4NSwxMyArMzY4LDYgQEAKICAg
ICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCi12b2lkIHNldENvbXBvc2l0
ZU9wZXJhdGlvbihDR0NvbnRleHRSZWYgY29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCi17
Ci0gICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9j
XSBpbml0XTsKLSAgICBbW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFw
aGljc1BvcnQ6Y29udGV4dCBmbGlwcGVkOk5PXSBzZXRDb21wb3NpdGluZ09wZXJhdGlvbjooTlND
b21wb3NpdGluZ09wZXJhdGlvbilvcF07Ci0gICAgW3Bvb2wgcmVsZWFzZV07Ci19Ci0KIHN0YXRp
YyBpbnQgZ2V0QmxlbmRlZENvbG9yQ29tcG9uZW50KGludCBjLCBpbnQgYSkKIHsKICAgICAvLyBX
ZSB1c2Ugd2hpdGUuCkBAIC00MjYsOSArNDAyLDggQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGN1cnJlbnRseSB3
b3JrcyBvbmx5IHdpdGggTlNHcmFwaGljc0NvbnRleHQuCi0gICAgQVNTRVJUKG1fZGF0YS0+bV9u
c0NvbnRleHQpOwotICAgIEFTU0VSVChtX2RhdGEtPm1fbnNDb250ZXh0ID09IFtOU0dyYXBoaWNz
Q29udGV4dCBjdXJyZW50Q29udGV4dF0pOworICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGN1
cnJlbnRseSB3b3JrcyBvbmx5IHdoZW4gdGhlIGN1cnJlbnQgY29udGV4dCBpcyB0aGUgY3VycmVu
dCBOU0dyYXBoaWNzQ29udGV4dC4KKyAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0KCkgPT0gW1tO
U0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gZ3JhcGhpY3NQb3J0XSk7CiAKICAgICBp
ZiAoY29sb3IuYWxwaGEoKSkKICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKHJlY3QsIGNvbG9y
LnJnYigpKTsKQEAgLTYxNCw0ICs1ODksNzQgQEAKICAgICByZXR1cm4gbV9kYXRhLT5tX2NnQ29u
dGV4dDsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVXaWR0aChmbG9hdCB3aWR0
aCkKK3sKKyAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgocGxhdGZvcm1Db250ZXh0KCksIHdpZHRo
KTsKIH0KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQp
Cit7CisgICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdChwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxvYXQgYWxwaGEpCit7Cisg
ICAgQ0dDb250ZXh0U2V0QWxwaGEocGxhdGZvcm1Db250ZXh0KCksIGFscGhhKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRv
ciBvcCkKK3sKKyAgICBOU0F1dG9yZWxlYXNlUG9vbCogcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBv
b2wgYWxsb2NdIGluaXRdOworICAgIFtbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0
V2l0aEdyYXBoaWNzUG9ydDpwbGF0Zm9ybUNvbnRleHQoKSBmbGlwcGVkOllFU10KKyAgICAgICAg
c2V0Q29tcG9zaXRpbmdPcGVyYXRpb246KE5TQ29tcG9zaXRpbmdPcGVyYXRpb24pb3BdOworICAg
IFtwb29sIHJlbGVhc2VdOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBDR0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250
ZXh0KCksIHIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHIsIGZsb2F0IGxpbmVXaWR0aCkKK3sKKyAgICBDR0NvbnRleHRTdHJva2VSZWN0
V2l0aFdpZHRoKHBsYXRmb3JtQ29udGV4dCgpLCByLCBsaW5lV2lkdGgpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKK3sKKyAgICBzd2l0Y2ggKGNh
cCkgeworICAgICAgICBjYXNlIEJ1dHRDYXA6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5l
Q2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwQnV0dCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBSb3VuZENhcDoKKyAgICAgICAgICAgIENHQ29udGV4dFNldExpbmVD
YXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBSb3VuZCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTcXVhcmVDYXA6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5l
Q2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwU3F1YXJlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVK
b2luIGpvaW4pCit7CisgICAgc3dpdGNoIChqb2luKSB7CisgICAgICAgIGNhc2UgTWl0ZXJKb2lu
OgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4ocGxhdGZvcm1Db250ZXh0KCksIGtD
R0xpbmVKb2luTWl0ZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUm91bmRK
b2luOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4ocGxhdGZvcm1Db250ZXh0KCks
IGtDR0xpbmVKb2luUm91bmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmV2
ZWxKb2luOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4ocGxhdGZvcm1Db250ZXh0
KCksIGtDR0xpbmVKb2luQmV2ZWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIENHQ29u
dGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQ0dDb250ZXh0QWRkUGF0aChw
bGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CisgICAgQ0dDb250ZXh0Q2xp
cChwbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKK30KSW5kZXg6IHBsYXRmb3JtL21hYy9QREZEb2N1
bWVudEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL1BERkRvY3VtZW50SW1hZ2Uu
aAkocmV2aXNpb24gMTQwNzEpCisrKyBwbGF0Zm9ybS9tYWMvUERGRG9jdW1lbnRJbWFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw5ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0v
LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIFBE
RiBJbWFnZXMgKEFwcGxlLU9ubHkpCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1R5cGVzLmgiCiAKICNpZiBfX0FQUExFX18KICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KQEAgLTM4LDI3ICszNywzMCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKwogY2xhc3MgUERGRG9jdW1l
bnRJbWFnZSB7CiBwdWJsaWM6Ci0gICAgUERGRG9jdW1lbnRJbWFnZShOU0RhdGEqIGRhdGEpOwor
ICAgIFBERkRvY3VtZW50SW1hZ2UoTlNEYXRhKik7CiAgICAgflBERkRvY3VtZW50SW1hZ2UoKTsK
LSAgICAKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
IGZyb21SZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRvUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IpOwor
CisgICAgRmxvYXRSZWN0IG1lZGlhQm94KCk7CisKK3ByaXZhdGU6CiAgICAgQ0dQREZEb2N1bWVu
dFJlZiBkb2N1bWVudFJlZigpOwotICAgIENHUmVjdCBtZWRpYUJveCgpOwogICAgIENHUmVjdCBi
b3VuZHMoKTsgLy8gYWRqdXN0IGZvciByb3RhdGlvbgogICAgIHZvaWQgc2V0Q3VycmVudFBhZ2Uo
aW50IHBhZ2UpOwogICAgIGludCBjdXJyZW50UGFnZSgpOwogICAgIGludCBwYWdlQ291bnQoKTsK
LSAgICB2b2lkIGFkanVzdENUTShDR0NvbnRleHRSZWYgY29udGV4dCk7CisgICAgdm9pZCBhZGp1
c3RDVE0oR3JhcGhpY3NDb250ZXh0Kik7CiAKLSAgICB2b2lkIGRyYXcoTlNSZWN0IGZyb21SZWN0
LCBOU1JlY3QgdG9SZWN0LCBDb21wb3NpdGVPcGVyYXRvciwgZmxvYXQgYWxwaGEsIGJvb2wgZmxp
cHBlZCwgQ0dDb250ZXh0UmVmKTsKLQotcHJpdmF0ZToKICAgICBDR1BERkRvY3VtZW50UmVmIG1f
ZG9jdW1lbnQ7Ci0gICAgQ0dSZWN0ICAgICAgICAgICBtX21lZGlhQm94OwotICAgIENHUmVjdCAg
ICAgICAgICAgbV9jcm9wQm94OwotICAgIGZsb2F0ICAgICAgICAgICAgbV9yb3RhdGlvbjsKLSAg
ICBpbnQgICAgICAgICAgICAgIG1fY3VycmVudFBhZ2U7CisgICAgRmxvYXRSZWN0IG1fbWVkaWFC
b3g7CisgICAgRmxvYXRSZWN0IG1fY3JvcEJveDsKKyAgICBmbG9hdCBtX3JvdGF0aW9uOworICAg
IGludCBtX2N1cnJlbnRQYWdlOwogfTsKIAogfQpJbmRleDogcGxhdGZvcm0vR3JhcGhpY3NUeXBl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0dyYXBoaWNzVHlwZXMuaAkocmV2aXNpb24gMTQw
NzEpCisrKyBwbGF0Zm9ybS9HcmFwaGljc1R5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDgg
KzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgQ29tcG9zaXRlT3BlcmF0
b3JfaAotI2RlZmluZSBDb21wb3NpdGVPcGVyYXRvcl9oCisjaWZuZGVmIEdyYXBoaWNzVHlwZXNf
aAorI2RlZmluZSBHcmFwaGljc1R5cGVzX2gKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01
MCw5ICs1MCwxOSBAQAogICAgICAgICBDb21wb3NpdGVQbHVzTGlnaHRlcgogICAgIH07CiAKKyAg
ICBlbnVtIExpbmVDYXAgeyBCdXR0Q2FwLCBSb3VuZENhcCwgU3F1YXJlQ2FwIH07CisKKyAgICBl
bnVtIExpbmVKb2luIHsgTWl0ZXJKb2luLCBSb3VuZEpvaW4sIEJldmVsSm9pbiB9OworCiAgICAg
U3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgYm9v
bCBwYXJzZUNvbXBvc2l0ZU9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIENvbXBvc2l0ZU9wZXJhdG9y
Jik7CiAKKyAgICBTdHJpbmcgbGluZUNhcE5hbWUoTGluZUNhcCk7CisgICAgYm9vbCBwYXJzZUxp
bmVDYXAoY29uc3QgU3RyaW5nJiwgTGluZUNhcCYpOworCisgICAgU3RyaW5nIGxpbmVKb2luTmFt
ZShMaW5lSm9pbik7CisgICAgYm9vbCBwYXJzZUxpbmVKb2luKGNvbnN0IFN0cmluZyYsIExpbmVK
b2luJik7CisKIH0KIAogI2VuZGlmCkluZGV4OiBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDE0
MDcxKQorKysgcGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsMzAgKzQ1LDI4IEBACiAgICAgICAgIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSB7
CiBwdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZShib29sIGlzRm9yUHJpbnRpbmcp
OworICAgIEdyYXBoaWNzQ29udGV4dFByaXZhdGUoKTsKICAgICAKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZSBzdGF0ZTsKICAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0U3RhdGU+IHN0YWNrOwog
ICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ZvY3VzUmluZ1JlY3RzOwogICAgIGludCBtX2ZvY3VzUmlu
Z1dpZHRoOwogICAgIGludCBtX2ZvY3VzUmluZ09mZnNldDsKLSAgICBib29sIG1faXNGb3JQcmlu
dGluZzsKICAgICBib29sIG1fdXNlc0luYWN0aXZlVGV4dEJhY2tncm91bmRDb2xvcjsKICAgICBi
b29sIG1fdXBkYXRpbmdDb250cm9sVGludHM7CiB9OwogCi1HcmFwaGljc0NvbnRleHRQcml2YXRl
OjpHcmFwaGljc0NvbnRleHRQcml2YXRlKGJvb2wgaXNGb3JQcmludGluZykKK0dyYXBoaWNzQ29u
dGV4dFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFByaXZhdGUoKQogICAgIDogbV9mb2N1c1JpbmdX
aWR0aCgwKQogICAgICwgbV9mb2N1c1JpbmdPZmZzZXQoMCkKLSAgICAsIG1faXNGb3JQcmludGlu
Zyhpc0ZvclByaW50aW5nKQogICAgICwgbV91c2VzSW5hY3RpdmVUZXh0QmFja2dyb3VuZENvbG9y
KGZhbHNlKQogICAgICwgbV91cGRhdGluZ0NvbnRyb2xUaW50cyhmYWxzZSkKIHsKIH0KIAotR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZSogR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVHcmFwaGljc0NvbnRl
eHRQcml2YXRlKGJvb2wgaXNGb3JQcmludGluZykKK0dyYXBoaWNzQ29udGV4dFByaXZhdGUqIEdy
YXBoaWNzQ29udGV4dDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpCiB7Ci0gICAgcmV0
dXJuIG5ldyBHcmFwaGljc0NvbnRleHRQcml2YXRlKGlzRm9yUHJpbnRpbmcpOworICAgIHJldHVy
biBuZXcgR3JhcGhpY3NDb250ZXh0UHJpdmF0ZTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKEdyYXBoaWNzQ29udGV4dFByaXZhdGUqIGRl
bGV0ZU1lKQpAQCAtMTc2LDExICsxNzQsNiBAQAogICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUu
cGFpbnRpbmdEaXNhYmxlZDsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnByaW50aW5nKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9jb21tb24tPm1faXNGb3JQcmludGluZzsKLX0KLQogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50
JiBwLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsgICAgICAgIAogICAgIGRyYXdJbWFnZShpbWFn
ZSwgcCwgSW50UmVjdCgwLCAwLCAtMSwgLTEpLCBvcCk7CkluZGV4OiBwbGF0Zm9ybS9jZy9QYXRo
Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL2NnL1BhdGhDRy5jcHAJKHJldmlzaW9uIDE0
MDcxKQorKysgcGxhdGZvcm0vY2cvUGF0aENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNzIg
KzI2LDEwMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhdGguaCIKIAotI2lu
Y2x1ZGUgIkludFBvaW50QXJyYXkuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNl
cnZpY2VzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGF0aDo6UGF0aCgpCi0gICAgOiBt
X3BhdGgoMCkKKyAgICA6IG1fcGF0aChDR1BhdGhDcmVhdGVNdXRhYmxlKCkpCiB7CiB9CiAKLVBh
dGg6OlBhdGgoY29uc3QgSW50UmVjdCYgciwgVHlwZSB0KQotewotICAgIENHTXV0YWJsZVBhdGhS
ZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKLSAgICBpZiAodCA9PSBSZWN0YW5nbGUp
Ci0gICAgICAgIENHUGF0aEFkZFJlY3QocGF0aCwgMCwgcik7Ci0gICAgZWxzZSAvLyBFbGxpcHNl
Ci0gICAgICAgIENHUGF0aEFkZEVsbGlwc2VJblJlY3QocGF0aCwgMCwgcik7Ci0gICAgbV9wYXRo
ID0gcGF0aDsKLX0KLQotUGF0aDo6UGF0aChjb25zdCBJbnRQb2ludEFycmF5JiBhcnIpCi17Ci0g
ICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotICAgIENH
UGF0aE1vdmVUb1BvaW50KHBhdGgsIDAsIGFyclswXS54KCksIGFyclswXS55KCkpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPCBhcnIuY291bnQoKTsgKytpKQotICAgICAgICBDR1BhdGhB
ZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBhcnJbaV0ueCgpLCBhcnJbaV0ueSgpKTsKLSAgICBDR1Bh
dGhDbG9zZVN1YnBhdGgocGF0aCk7Ci0gICAgbV9wYXRoID0gcGF0aDsKLX0KLQogUGF0aDo6flBh
dGgoKQogewogICAgIENHUGF0aFJlbGVhc2UobV9wYXRoKTsKIH0KIAogUGF0aDo6UGF0aChjb25z
dCBQYXRoJiBvdGhlcikKLSAgICA6IG1fcGF0aChDR1BhdGhDcmVhdGVDb3B5KG90aGVyLm1fcGF0
aCkpCisgICAgOiBtX3BhdGgoQ0dQYXRoQ3JlYXRlTXV0YWJsZUNvcHkob3RoZXIubV9wYXRoKSkK
IHsKIH0KIAogUGF0aCYgUGF0aDo6b3BlcmF0b3I9KGNvbnN0IFBhdGgmIG90aGVyKQogewotICAg
IENHUGF0aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlQ29weShvdGhlci5tX3BhdGgpOworICAgIENH
TXV0YWJsZVBhdGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGVDb3B5KG90aGVyLm1fcGF0
aCk7CiAgICAgQ0dQYXRoUmVsZWFzZShtX3BhdGgpOwogICAgIG1fcGF0aCA9IHBhdGg7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCi1ib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBw
b2ludCkgY29uc3QKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIENHUGF0aENvbnRhaW5zUG9pbnQobV9wYXRoLCAwLCBwb2lu
dCwgZmFsc2UpOwogfQogCi12b2lkIFBhdGg6OnRyYW5zbGF0ZShpbnQgZGVsdGFYLCBpbnQgZGVs
dGFZKQordm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewotICAg
IENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0aW9uID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEs
IDAsIDAsIDEsIGRlbHRhWCwgZGVsdGFZKTsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2xh
dGlvbiA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAwLCAwLCAxLCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOwogICAgIENHTXV0YWJsZVBhdGhSZWYgbmV3UGF0aCA9IENHUGF0aENyZWF0
ZU11dGFibGUoKTsKICAgICBDR1BhdGhBZGRQYXRoKG5ld1BhdGgsICZ0cmFuc2xhdGlvbiwgbV9w
YXRoKTsKICAgICBDR1BhdGhSZWxlYXNlKG1fcGF0aCk7CiAgICAgbV9wYXRoID0gbmV3UGF0aDsK
IH0KIAotSW50UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAorRmxvYXRSZWN0IFBhdGg6
OmJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGF0aCA/IGVuY2xvc2luZ0lu
dFJlY3QoQ0dQYXRoR2V0Qm91bmRpbmdCb3gobV9wYXRoKSkgOiBJbnRSZWN0KCk7CisgICAgcmV0
dXJuIENHUGF0aEdldEJvdW5kaW5nQm94KG1fcGF0aCk7CiB9CiAKK3ZvaWQgUGF0aDo6bW92ZVRv
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIENHUGF0aE1vdmVUb1BvaW50KG1fcGF0
aCwgMCwgcG9pbnQueCgpLCBwb2ludC55KCkpOwogfQorCit2b2lkIFBhdGg6OmFkZExpbmVUbyhj
b25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIENHUGF0aEFkZExpbmVUb1BvaW50KG1fcGF0aCwg
MCwgcC54KCksIHAueSgpKTsKK30KKwordm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBG
bG9hdFBvaW50JiBjcCwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBDR1BhdGhBZGRRdWFk
Q3VydmVUb1BvaW50KG1fcGF0aCwgMCwgY3AueCgpLCBjcC55KCksIHAueCgpLCBwLnkoKSk7Cit9
CisKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcDEsIGNv
bnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBDR1BhdGhB
ZGRDdXJ2ZVRvUG9pbnQobV9wYXRoLCAwLCBjcDEueCgpLCBjcDEueSgpLCBjcDIueCgpLCBjcDIu
eSgpLCBwLngoKSwgcC55KCkpOworfQorCit2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0
UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQoreworICAgIENH
UGF0aEFkZEFyY1RvUG9pbnQobV9wYXRoLCAwLCBwMS54KCksIHAxLnkoKSwgcDIueCgpLCBwMi55
KCksIHJhZGl1cyk7Cit9CisKK3ZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKK3sKKyAgICBDR1Bh
dGhDbG9zZVN1YnBhdGgobV9wYXRoKTsKK30KKwordm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxv
YXRQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc2EsIGZsb2F0IGVhLCBib29sIGNsb2Nrd2lzZSkK
K3sKKyAgICBDR1BhdGhBZGRBcmMobV9wYXRoLCAwLCBwLngoKSwgcC55KCksIHIsIHNhLCBlYSwg
Y2xvY2t3aXNlKTsKK30KKwordm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikK
K3sKKyAgICBDR1BhdGhBZGRSZWN0KG1fcGF0aCwgMCwgcik7Cit9CisKK3ZvaWQgUGF0aDo6YWRk
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHIpCit7CisgICAgQ0dQYXRoQWRkRWxsaXBzZUluUmVj
dChtX3BhdGgsIDAsIHIpOworfQorCit2b2lkIFBhdGg6OmNsZWFyKCkKK3sKKyAgICBDR1BhdGhS
ZWxlYXNlKG1fcGF0aCk7CisgICAgbV9wYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOworfQor
Cit9CkluZGV4OiBwbGF0Zm9ybS93aW4vVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBwbGF0Zm9ybS93aW4vVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMTQwNzEp
CisrKyBwbGF0Zm9ybS93aW4vVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjczLDE2ICsyNzMsMzMgQEAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVu
Y3lMYXllcigpIHsgfQogQ29sb3IgR3JhcGhpY3NDb250ZXh0OjpzZWxlY3RlZFRleHRCYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBDb2xvcigwLDAsMjU1KTsgfQogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFkZFJvdW5kZWRSZWN0Q2xpcChJbnRSZWN0IGNvbnN0JixJbnRTaXplIGNvbnN0
JixJbnRTaXplIGNvbnN0JixJbnRTaXplIGNvbnN0JixJbnRTaXplIGNvbnN0JikgeyB9Cit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIHsgfQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIHsgfQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVXaWR0aChmbG9hdCkgeyB9Cit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwKSB7IH0KK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lSm9pbihMaW5lSm9pbikgeyB9Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0
ZXJMaW1pdChmbG9hdCkgeyB9Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxvYXQp
IHsgfQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVPcGVyYXRvcikgeyB9Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJikg
eyB9CiAKIFBhdGg6OlBhdGgoKXsgfQogUGF0aDo6flBhdGgoKXsgfQogUGF0aDo6UGF0aChjb25z
dCBQYXRoJil7IH0KLVBhdGg6OlBhdGgoY29uc3QgSW50UmVjdCYsIFR5cGUpeyB9Ci1QYXRoOjpQ
YXRoKGNvbnN0IEludFBvaW50QXJyYXkmKXsgfQogYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBJ
bnRQb2ludCYpIGNvbnN0eyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgUGF0aDo6dHJhbnNsYXRlKGlu
dCwgaW50KXsgfQordm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJil7IH0KIElu
dFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgpOyB9CiBQ
YXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYpeyByZXR1cm4qdGhpczsgfQordm9pZCBQ
YXRoOjpjbGVhcigpIHsgfQordm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYpIHsg
fQordm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYpIHsgfQordm9pZCBQYXRo
OjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIHsg
fQordm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIHsgfQordm9pZCBQYXRoOjphZGRBcmNUbyhj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0KSB7IH0KK3ZvaWQgUGF0
aDo6Y2xvc2VTdWJwYXRoKCkgeyB9Cit2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50
JiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgYm9vbCkgeyB9Cit2b2lkIFBhdGg6OmFkZFJlY3QoY29u
c3QgRmxvYXRSZWN0JikgeyB9Cit2b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JikgeyB9CiAKIFFMaW5lRWRpdDo6UUxpbmVFZGl0KFFMaW5lRWRpdDo6VHlwZSkgeyB9CiBRTGlu
ZUVkaXQ6On5RTGluZUVkaXQoKSB7IH0KSW5kZXg6IHBsYXRmb3JtL0NvbXBvc2l0ZU9wZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9Db21wb3NpdGVPcGVyYXRvci5jcHAJKHJldmlz
aW9uIDE0MDcxKQorKysgcGxhdGZvcm0vQ29tcG9zaXRlT3BlcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJDb21wb3NpdGVPcGVyYXRvci5oIgotCi0jaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgY29tcG9zaXRlT3BlcmF0b3JOYW1lc1tdID0gewotICAgICJjbGVhciIsCi0gICAgImNv
cHkiLAotICAgICJzb3VyY2Utb3ZlciIsCi0gICAgInNvdXJjZS1pbiIsCi0gICAgInNvdXJjZS1v
dXQiLAotICAgICJzb3VyY2UtYXRvcCIsCi0gICAgImRlc3RpbmF0aW9uLW92ZXIiLAotICAgICJk
ZXN0aW5hdGlvbi1pbiIsCi0gICAgImRlc3RpbmF0aW9uLW91dCIsCi0gICAgImRlc3RpbmF0aW9u
LWF0b3AiLAotICAgICJ4b3IiLAotICAgICJkYXJrZXIiLAotICAgICJoaWdobGlnaHQiLAotICAg
ICJsaWdodGVyIgotfTsKLQotYm9vbCBwYXJzZUNvbXBvc2l0ZU9wZXJhdG9yKGNvbnN0IFN0cmlu
ZyYgcywgQ29tcG9zaXRlT3BlcmF0b3ImIG9wKQotewotICAgIGNvbnN0IGludCBudW0gPSBzaXpl
b2YoY29tcG9zaXRlT3BlcmF0b3JOYW1lcykgLyBzaXplb2YoY29tcG9zaXRlT3BlcmF0b3JOYW1l
c1swXSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykKLSAgICAgICAgaWYgKHMg
PT0gY29tcG9zaXRlT3BlcmF0b3JOYW1lc1tpXSkgewotICAgICAgICAgICAgb3AgPSBzdGF0aWNf
Y2FzdDxDb21wb3NpdGVPcGVyYXRvcj4oaSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9y
TmFtZShDb21wb3NpdGVPcGVyYXRvciBvcCkKLXsKLSAgICByZXR1cm4gY29tcG9zaXRlT3BlcmF0
b3JOYW1lc1tvcF07Ci19Ci0KLX0KSW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzVHlwZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHBsYXRmb3JtL0dyYXBoaWNzVHlwZXMuY3BwCShyZXZpc2lvbiAxNDA3MSkK
KysrIHBsYXRmb3JtL0dyYXBoaWNzVHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw5ICsy
NCwxMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb21wb3NpdGVP
cGVyYXRvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKIAogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDExICs0NywxMSBAQAogICAgICJoaWdobGlnaHQiLAogICAg
ICJsaWdodGVyIgogfTsKK2NvbnN0IGludCBudW1Db21wb3NpdGVPcGVyYXRvck5hbWVzID0gc2l6
ZW9mKGNvbXBvc2l0ZU9wZXJhdG9yTmFtZXMpIC8gc2l6ZW9mKGNvbXBvc2l0ZU9wZXJhdG9yTmFt
ZXNbMF0pOwogCiBib29sIHBhcnNlQ29tcG9zaXRlT3BlcmF0b3IoY29uc3QgU3RyaW5nJiBzLCBD
b21wb3NpdGVPcGVyYXRvciYgb3ApCiB7Ci0gICAgY29uc3QgaW50IG51bSA9IHNpemVvZihjb21w
b3NpdGVPcGVyYXRvck5hbWVzKSAvIHNpemVvZihjb21wb3NpdGVPcGVyYXRvck5hbWVzWzBdKTsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKQorICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbnVtQ29tcG9zaXRlT3BlcmF0b3JOYW1lczsgaSsrKQogICAgICAgICBpZiAocyA9PSBjb21w
b3NpdGVPcGVyYXRvck5hbWVzW2ldKSB7CiAgICAgICAgICAgICBvcCA9IHN0YXRpY19jYXN0PENv
bXBvc2l0ZU9wZXJhdG9yPihpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNjAsNyAr
NjEsNTkgQEAKIAogU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRv
ciBvcCkKIHsKKyAgICBBU1NFUlQob3AgPj0gMCk7CisgICAgQVNTRVJUKG9wIDwgbnVtQ29tcG9z
aXRlT3BlcmF0b3JOYW1lcyk7CiAgICAgcmV0dXJuIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZXNbb3Bd
OwogfQogCitib29sIHBhcnNlTGluZUNhcChjb25zdCBTdHJpbmcmIHMsIExpbmVDYXAmIGNhcCkK
K3sKKyAgICBpZiAocyA9PSAiYnV0dCIpIHsKKyAgICAgICAgY2FwID0gQnV0dENhcDsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChzID09ICJyb3VuZCIpIHsKKyAgICAgICAg
Y2FwID0gUm91bmRDYXA7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAocyA9
PSAic3F1YXJlIikgeworICAgICAgICBjYXAgPSBTcXVhcmVDYXA7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CisKK1N0cmluZyBsaW5lQ2FwTmFtZShM
aW5lQ2FwIGNhcCkKK3sKKyAgICBBU1NFUlQoY2FwID49IDApOworICAgIEFTU0VSVChjYXAgPCAz
KTsKKyAgICBjb25zdCBjaGFyKiBjb25zdCBuYW1lc1szXSA9IHsgImJ1dHQiLCAicm91bmQiLCAi
c3F1YXJlIiB9OworICAgIHJldHVybiBuYW1lc1tjYXBdOworfQorCitib29sIHBhcnNlTGluZUpv
aW4oY29uc3QgU3RyaW5nJiBzLCBMaW5lSm9pbiYgam9pbikKK3sKKyAgICBpZiAocyA9PSAibWl0
ZXIiKSB7CisgICAgICAgIGpvaW4gPSBNaXRlckpvaW47CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICBpZiAocyA9PSAicm91bmQiKSB7CisgICAgICAgIGpvaW4gPSBSb3VuZEpvaW47
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAocyA9PSAiYmV2ZWwiKSB7Cisg
ICAgICAgIGpvaW4gPSBCZXZlbEpvaW47CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBsaW5lSm9pbk5hbWUoTGluZUpvaW4gam9pbikK
K3sKKyAgICBBU1NFUlQoam9pbiA+PSAwKTsKKyAgICBBU1NFUlQoam9pbiA8IDMpOworICAgIGNv
bnN0IGNoYXIqIGNvbnN0IG5hbWVzWzNdID0geyAibWl0ZXIiLCAicm91bmQiLCAiYmV2ZWwiIH07
CisgICAgcmV0dXJuIG5hbWVzW2pvaW5dOworfQorCit9CkluZGV4OiBwbGF0Zm9ybS9Db21wb3Np
dGVPcGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0NvbXBvc2l0ZU9wZXJhdG9yLmgJ
KHJldmlzaW9uIDE0MDcxKQorKysgcGxhdGZvcm0vQ29tcG9zaXRlT3BlcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWZuZGVmIENvbXBvc2l0ZU9wZXJhdG9yX2gKLSNkZWZpbmUgQ29tcG9zaXRlT3BlcmF0b3Jf
aAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBTdHJpbmc7Ci0KLSAgICAvLyBO
b3RlOiBUaGVzZSBjb25zdGFudHMgZXhhY3RseSBtYXRjaCB0aGUgTlNDb21wb3NpdGVPcGVyYXRv
ciBjb25zdGFudHMgb2YKLSAgICAvLyBBcHBLaXQgb24gTWFjIE9TIFguIElmIHRoYXQncyBldmVy
IGNoYW5nZWQsIHdlJ2xsIG5lZWQgdG8gY2hhbmdlIHRoZSBNYWMKLSAgICAvLyBwbGF0Zm9ybSBj
b2RlIHRvIG1hcCBvbmUgdG8gdGhlIG90aGVyLgotICAgIGVudW0gQ29tcG9zaXRlT3BlcmF0b3Ig
ewotICAgICAgICBDb21wb3NpdGVDbGVhciwKLSAgICAgICAgQ29tcG9zaXRlQ29weSwKLSAgICAg
ICAgQ29tcG9zaXRlU291cmNlT3ZlciwKLSAgICAgICAgQ29tcG9zaXRlU291cmNlSW4sCi0gICAg
ICAgIENvbXBvc2l0ZVNvdXJjZU91dCwKLSAgICAgICAgQ29tcG9zaXRlU291cmNlQXRvcCwKLSAg
ICAgICAgQ29tcG9zaXRlRGVzdGluYXRpb25PdmVyLAotICAgICAgICBDb21wb3NpdGVEZXN0aW5h
dGlvbkluLAotICAgICAgICBDb21wb3NpdGVEZXN0aW5hdGlvbk91dCwKLSAgICAgICAgQ29tcG9z
aXRlRGVzdGluYXRpb25BdG9wLAotICAgICAgICBDb21wb3NpdGVYT1IsCi0gICAgICAgIENvbXBv
c2l0ZVBsdXNEYXJrZXIsCi0gICAgICAgIENvbXBvc2l0ZUhpZ2hsaWdodCwKLSAgICAgICAgQ29t
cG9zaXRlUGx1c0xpZ2h0ZXIKLSAgICB9OwotCi0gICAgU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9y
TmFtZShDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgYm9vbCBwYXJzZUNvbXBvc2l0ZU9wZXJhdG9y
KGNvbnN0IFN0cmluZyYsIENvbXBvc2l0ZU9wZXJhdG9yJik7Ci0KLX0KLQotI2VuZGlmCkluZGV4
OiBwbGF0Zm9ybS9QYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vUGF0aC5oCShyZXZpc2lv
biAxNDA3MSkKKysrIHBsYXRmb3JtL1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzYgKzI3
LDQ3IEBACiAjZGVmaW5lIFBhdGhfaAogCiAjaWYgX19BUFBMRV9fCi10eXBlZGVmIGNvbnN0IHN0
cnVjdCBDR1BhdGgqIENHUGF0aFJlZjsKK3R5cGVkZWYgc3RydWN0IENHUGF0aCBQbGF0Zm9ybVBh
dGg7CisjZWxzZQordHlwZWRlZiB2b2lkIFBsYXRmb3JtUGF0aDsKICNlbmRpZgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBJbnRQb2ludDsKLSAgICBjbGFzcyBJbnRQb2ludEFy
cmF5OwotICAgIGNsYXNzIEludFJlY3Q7CisgICAgY2xhc3MgRmxvYXRQb2ludDsKKyAgICBjbGFz
cyBGbG9hdFNpemU7CisgICAgY2xhc3MgRmxvYXRSZWN0OwogCiAgICAgY2xhc3MgUGF0aCB7CiAg
ICAgcHVibGljOgotICAgICAgICBlbnVtIFR5cGUgeyBFbGxpcHNlLCBSZWN0YW5nbGUgfTsKLQog
ICAgICAgICBQYXRoKCk7Ci0gICAgICAgIFBhdGgoY29uc3QgSW50UmVjdCYsIFR5cGUgPSBSZWN0
YW5nbGUpOwotICAgICAgICBQYXRoKGNvbnN0IEludFBvaW50QXJyYXkmKTsKICAgICAgICAgflBh
dGgoKTsKIAogICAgICAgICBQYXRoKGNvbnN0IFBhdGgmKTsKICAgICAgICAgUGF0aCYgb3BlcmF0
b3I9KGNvbnN0IFBhdGgmKTsKIAotICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEludFBvaW50
JikgY29uc3Q7Ci0gICAgICAgIEludFJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CisgICAgICAg
IGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgICAgICBGbG9hdFJl
Y3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCB0cmFuc2xhdGUoaW50IGRl
bHRhWCwgaW50IGRlbHRhWSk7CisgICAgICAgIHZvaWQgY2xlYXIoKTsKIAorICAgICAgICB2b2lk
IG1vdmVUbyhjb25zdCBGbG9hdFBvaW50Jik7CisgICAgICAgIHZvaWQgYWRkTGluZVRvKGNvbnN0
IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBhZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBv
aW50JiBjb250cm9sUG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KTsKKyAgICAgICAgdm9p
ZCBhZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAg
dm9pZCBhZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0
IHJhZGl1cyk7CisgICAgICAgIHZvaWQgY2xvc2VTdWJwYXRoKCk7CisKKyAgICAgICAgdm9pZCBh
ZGRBcmMoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwg
ZmxvYXQgZW5kQW5nbGUsIGJvb2wgY2xvY2t3aXNlKTsKKyAgICAgICAgdm9pZCBhZGRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpOworICAgICAgICB2b2lkIGFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
Jik7CisKKyAgICAgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJik7CisKKyAgICAg
ICAgUGxhdGZvcm1QYXRoKiBwbGF0Zm9ybVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0K
KwogICAgIHByaXZhdGU6Ci0jaWYgX19BUFBMRV9fCi0gICAgICAgIENHUGF0aFJlZiBtX3BhdGg7
Ci0jZW5kaWYKKyAgICAgICAgUGxhdGZvcm1QYXRoKiBtX3BhdGg7CiAgICAgfTsKIAogfQpJbmRl
eDogcGxhdGZvcm0vSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9JbWFnZS5oCShyZXZp
c2lvbiAxNDA3MSkKKysrIHBsYXRmb3JtL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDgg
KzI2LDggQEAKICNpZm5kZWYgSU1BR0VfSF8KICNkZWZpbmUgSU1BR0VfSF8KIAotI2luY2x1ZGUg
IkNvbXBvc2l0ZU9wZXJhdG9yLmgiCiAjaW5jbHVkZSAiRGVwcmVjYXRlZEFycmF5LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCiAjaW5jbHVk
ZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgpJbmRleDogaHRtbC9DYW52YXNT
dHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvQ2FudmFzU3R5bGUuaAkocmV2aXNpb24gMTQwNzEp
CisrKyBodG1sL0NhbnZhc1N0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE0ICsyOCwxMSBA
QAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAotI2lmIF9fQVBQTEVfXwotdHlwZWRl
ZiBzdHJ1Y3QgQ0dDb250ZXh0KiBDR0NvbnRleHRSZWY7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY2xhc3MgQ2FudmFzR3JhZGllbnQ7CiAgICAgY2xhc3MgQ2FudmFzUGF0
dGVybjsKKyAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAKICAgICBjbGFzcyBDYW52YXNTdHls
ZSA6IHB1YmxpYyBTaGFyZWQ8Q2FudmFzU3R5bGU+IHsKICAgICBwdWJsaWM6CkBAIC01MiwxMSAr
NDksOSBAQAogICAgICAgICBDYW52YXNHcmFkaWVudCogZ3JhZGllbnQoKSBjb25zdCB7IHJldHVy
biBtX2dyYWRpZW50LmdldCgpOyB9CiAgICAgICAgIENhbnZhc1BhdHRlcm4qIHBhdHRlcm4oKSBj
b25zdCB7IHJldHVybiBtX3BhdHRlcm4uZ2V0KCk7IH0KIAotI2lmIF9fQVBQTEVfXwogICAgICAg
ICAvLyBUaGVzZSBkbyBub3RoaW5nIGZvciBncmFkaWVudHMgb3IgcGF0dGVybnMuCi0gICAgICAg
IHZvaWQgYXBwbHlGaWxsQ29sb3IoQ0dDb250ZXh0UmVmKTsKLSAgICAgICAgdm9pZCBhcHBseVN0
cm9rZUNvbG9yKENHQ29udGV4dFJlZik7Ci0jZW5kaWYKKyAgICAgICAgdm9pZCBhcHBseUZpbGxD
b2xvcihHcmFwaGljc0NvbnRleHQqKTsKKyAgICAgICAgdm9pZCBhcHBseVN0cm9rZUNvbG9yKEdy
YXBoaWNzQ29udGV4dCopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBUeXBlIHsgQ29s
b3JTdHJpbmcsIENvbG9yU3RyaW5nV2l0aEFscGhhLCBHcmF5TGV2ZWwsIFJHQkEsIENNWUtBLCBH
cmFkaWVudCwgSW1hZ2VQYXR0ZXJuIH07CkluZGV4OiBodG1sL0NhbnZhc1BhdHRlcm4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGh0bWwvQ2FudmFzUGF0dGVybi5jcHAJKHJldmlzaW9uIDE0MDcxKQorKysg
aHRtbC9DYW52YXNQYXR0ZXJuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDkgKzEyMyw3IEBA
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogV29uJ3QgaGFuZGxlIHRl
eHQgZmxpcHBpbmcgcmlnaHQgZm9yIGltYWdlIHR5cGVzIHRoYXQgaW5jbHVkZSB0ZXh0Ci0gICAg
Ly8gc2luY2Ugd2UganVzdCBwYXNzIGZhbHNlIGZvciB0aGUgY29udGV4dCdzIGZsaXBwZWQgc3Rh
dGUuCi0gICAgR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIGZhbHNlLCBmYWxzZSkuZHJhd0ltYWdl
KGltYWdlLCByZWN0KTsKKyAgICBHcmFwaGljc0NvbnRleHQoY29udGV4dCkuZHJhd0ltYWdlKGlt
YWdlLCByZWN0KTsKIH0KIAogc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lk
KiBpbmZvKQpJbmRleDogaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRt
bC9odG1sX2ltYWdlaW1wbC5jcHAJKHJldmlzaW9uIDE0MDcxKQorKysgaHRtbC9odG1sX2ltYWdl
aW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKIAogI2luY2x1ZGUgIkRv
Y0xvYWRlci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnRQb2ludEFycmF5
LmgiCiAjaW5jbHVkZSAiY3NzaGVscGVyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKQEAgLTU3Miw5ICs1NzIsOSBAQAogewog
ICAgIGludCBkeCwgZHk7CiAgICAgb2JqLT5hYnNvbHV0ZVBvc2l0aW9uKGR4LCBkeSk7Ci0gICAg
UGF0aCBwID0gZ2V0UmVnaW9uKGxhc3R3LGxhc3RoKTsKLSAgICBwLnRyYW5zbGF0ZShkeCwgZHkp
OwotICAgIHJldHVybiBwLmJvdW5kaW5nUmVjdCgpOworICAgIFBhdGggcCA9IGdldFJlZ2lvbihs
YXN0dywgbGFzdGgpOworICAgIHAudHJhbnNsYXRlKEludFNpemUoZHgsIGR5KSk7CisgICAgcmV0
dXJuIGVuY2xvc2luZ0ludFJlY3QocC5ib3VuZGluZ1JlY3QoKSk7CiB9CiAKIFBhdGggSFRNTEFy
ZWFFbGVtZW50OjpnZXRSZWdpb24oaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdApAQCAtNTkz
LDIyICs1OTMsMjQgQEAKICAgICAgICAgICAgIHNoYXBlID0gUG9seTsKICAgICB9CiAKKyAgICBQ
YXRoIHBhdGg7CiAgICAgc3dpdGNoIChzaGFwZSkgewogICAgICAgICBjYXNlIFBvbHk6CiAgICAg
ICAgICAgICBpZiAobV9jb29yZHNMZW4gPj0gNikgeworICAgICAgICAgICAgICAgIFBhdGggcGF0
aDsKICAgICAgICAgICAgICAgICBpbnQgbnVtUG9pbnRzID0gbV9jb29yZHNMZW4gLyAyOwotICAg
ICAgICAgICAgICAgIEludFBvaW50QXJyYXkgcG9pbnRzKG51bVBvaW50cyk7Ci0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Qb2ludHM7ICsraSkKLSAgICAgICAgICAgICAg
ICAgICAgcG9pbnRzLnNldFBvaW50KGksIG1fY29vcmRzW2kgKiAyXS5jYWxjTWluVmFsdWUod2lk
dGgpLCBtX2Nvb3Jkc1tpICogMiArIDFdLmNhbGNNaW5WYWx1ZShoZWlnaHQpKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gUGF0aChwb2ludHMpOworICAgICAgICAgICAgICAgIHBhdGgubW92ZVRv
KEZsb2F0UG9pbnQobV9jb29yZHNbMF0uY2FsY01pblZhbHVlKHdpZHRoKSwgbV9jb29yZHNbMV0u
Y2FsY01pblZhbHVlKGhlaWdodCkpKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsg
aSA8IG51bVBvaW50czsgKytpKQorICAgICAgICAgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyhG
bG9hdFBvaW50KG1fY29vcmRzW2kgKiAyXS5jYWxjTWluVmFsdWUod2lkdGgpLCBtX2Nvb3Jkc1tp
ICogMiArIDFdLmNhbGNNaW5WYWx1ZShoZWlnaHQpKSk7CisgICAgICAgICAgICAgICAgcGF0aC5j
bG9zZVN1YnBhdGgoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENpcmNsZToKICAgICAgICAgICAgIGlmIChtX2Nvb3Jkc0xlbiA+PSAzKSB7CiAgICAg
ICAgICAgICAgICAgTGVuZ3RoIHJhZGl1cyA9IG1fY29vcmRzWzJdOwogICAgICAgICAgICAgICAg
IGludCByID0gbWluKHJhZGl1cy5jYWxjTWluVmFsdWUod2lkdGgpLCByYWRpdXMuY2FsY01pblZh
bHVlKGhlaWdodCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBQYXRoKEludFJlY3QobV9jb29y
ZHNbMF0uY2FsY01pblZhbHVlKHdpZHRoKSAtIHIsIG1fY29vcmRzWzFdLmNhbGNNaW5WYWx1ZSho
ZWlnaHQpIC0gciwKLSAgICAgICAgICAgICAgICAgICAgMiAqIHIsIDIgKiByKSwgUGF0aDo6RWxs
aXBzZSk7CisgICAgICAgICAgICAgICAgcGF0aC5hZGRFbGxpcHNlKEZsb2F0UmVjdChtX2Nvb3Jk
c1swXS5jYWxjTWluVmFsdWUod2lkdGgpIC0gciwgbV9jb29yZHNbMV0uY2FsY01pblZhbHVlKGhl
aWdodCkgLSByLAorICAgICAgICAgICAgICAgICAgICAyICogciwgMiAqIHIpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlY3Q6CkBAIC02MTcsMTYg
KzYxOSwxNyBAQAogICAgICAgICAgICAgICAgIGludCB5MCA9IG1fY29vcmRzWzFdLmNhbGNNaW5W
YWx1ZShoZWlnaHQpOwogICAgICAgICAgICAgICAgIGludCB4MSA9IG1fY29vcmRzWzJdLmNhbGNN
aW5WYWx1ZSh3aWR0aCk7CiAgICAgICAgICAgICAgICAgaW50IHkxID0gbV9jb29yZHNbM10uY2Fs
Y01pblZhbHVlKGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFBhdGgoSW50UmVjdCh4
MCwgeTAsIHgxIC0geDAsIHkxIC0geTApKTsKKyAgICAgICAgICAgICAgICBwYXRoLmFkZFJlY3Qo
RmxvYXRSZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBQYXRoKEludFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCkpOworICAgICAgICAgICAgcGF0aC5h
ZGRSZWN0KEZsb2F0UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBVbmtub3duOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgcmV0dXJuIFBhdGgoKTsKKyAgICByZXR1cm4gcGF0aDsKIH0KIAogU3RyaW5nIEhUTUxBcmVh
RWxlbWVudDo6YWNjZXNzS2V5KCkgY29uc3QKSW5kZXg6IGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAJKHJldmlzaW9uIDE0MDcxKQorKysgaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MywxMCArNjMsOCBAQAogICAgICwgbV9zaGFkb3dDb2xvcigi
YmxhY2siKQogICAgICwgbV9nbG9iYWxBbHBoYSgxKQogICAgICwgbV9nbG9iYWxDb21wb3NpdGUo
Q29tcG9zaXRlU291cmNlT3ZlcikKLSNpZiBfX0FQUExFX18KLSAgICAsIG1fcGxhdGZvcm1Db250
ZXh0U3Ryb2tlU3R5bGVJc1BhdHRlcm4oZmFsc2UpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dEZp
bGxTdHlsZUlzUGF0dGVybihmYWxzZSkKLSNlbmRpZgorICAgICwgbV9hcHBsaWVkU3Ryb2tlUGF0
dGVybihmYWxzZSkKKyAgICAsIG1fYXBwbGllZEZpbGxQYXR0ZXJuKGZhbHNlKQogewogfQogCkBA
IC03NCwxNCArNzIsMTAgQEAKIHsKICAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA+PSAx
KTsKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHN0YXRlKCkpOwotCi0gICAgLy8gRklYTUU6IERv
IHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgot
I2lmIF9fQVBQTEVfXwotICAgIENHQ29udGV4dFJlZiBjID0gcGxhdGZvcm1Db250ZXh0KCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAg
ICAgICAgIHJldHVybjsKLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGMpOwotI2VuZGlmCisgICAg
Yy0+c2F2ZSgpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVzdG9yZSgp
CkBAIC05MCwxNCArODQsMTAgQEAKICAgICBpZiAobV9zdGF0ZVN0YWNrLnNpemUoKSA8PSAxKQog
ICAgICAgICByZXR1cm47CiAgICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLQotICAgIC8v
IEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250
ZXh0IEFQSS4KLSNpZiBfX0FQUExFX18KLSAgICBDR0NvbnRleHRSZWYgYyA9IHBsYXRmb3JtQ29u
dGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAg
aWYgKCFjKQogICAgICAgICByZXR1cm47Ci0gICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjKTsK
LSNlbmRpZgorICAgIGMtPnJlc3RvcmUoKTsKIH0KIAogQ2FudmFzU3R5bGUqIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c3Ryb2tlU3R5bGUoKSBjb25zdApAQCAtMTEwLDEyICsxMDAsMTEgQEAK
ICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47CiAgICAgc3RhdGUoKS5tX3N0cm9rZVN0
eWxlID0gc3R5bGU7Ci0KLSAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWlu
ZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgX19BUFBMRV9fCi0gICAgc3RhdGUo
KS5tX3N0cm9rZVN0eWxlLT5hcHBseVN0cm9rZUNvbG9yKHBsYXRmb3JtQ29udGV4dCgpKTsKLSAg
ICBzdGF0ZSgpLm1fcGxhdGZvcm1Db250ZXh0U3Ryb2tlU3R5bGVJc1BhdHRlcm4gPSBmYWxzZTsK
LSNlbmRpZgorICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAg
aWYgKCFjKQorICAgICAgICByZXR1cm47CisgICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5hcHBs
eVN0cm9rZUNvbG9yKGMpOworICAgIHN0YXRlKCkubV9hcHBsaWVkU3Ryb2tlUGF0dGVybiA9IGZh
bHNlOwogfQogCiBDYW52YXNTdHlsZSogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5
bGUoKSBjb25zdApAQCAtMTI4LDEyICsxMTcsMTEgQEAKICAgICBpZiAoIXN0eWxlKQogICAgICAg
ICByZXR1cm47CiAgICAgc3RhdGUoKS5tX2ZpbGxTdHlsZSA9IHN0eWxlOwotCi0gICAgLy8gRklY
TUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQg
QVBJLgotI2lmIF9fQVBQTEVfXwotICAgIHN0YXRlKCkubV9maWxsU3R5bGUtPmFwcGx5RmlsbENv
bG9yKHBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBzdGF0ZSgpLm1fcGxhdGZvcm1Db250ZXh0Rmls
bFN0eWxlSXNQYXR0ZXJuID0gZmFsc2U7Ci0jZW5kaWYKKyAgICBHcmFwaGljc0NvbnRleHQqIGMg
PSBkcmF3aW5nQ29udGV4dCgpOworICAgIGlmICghYykKKyAgICAgICAgcmV0dXJuOworICAgIHN0
YXRlKCkubV9maWxsU3R5bGUtPmFwcGx5RmlsbENvbG9yKGMpOworICAgIHN0YXRlKCkubV9hcHBs
aWVkRmlsbFBhdHRlcm4gPSBmYWxzZTsKIH0KIAogZmxvYXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpsaW5lV2lkdGgoKSBjb25zdApAQCAtMTQ1LDg1ICsxMzMsNDUgQEAKIHsKICAgICBpZiAo
ISh3aWR0aCA+IDApKQogICAgICAgICByZXR1cm47Ci0KICAgICBzdGF0ZSgpLm1fbGluZVdpZHRo
ID0gd2lkdGg7Ci0KLSAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVw
ZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgX19BUFBMRV9fCi0gICAgQ0dDb250ZXh0
U2V0TGluZVdpZHRoKHBsYXRmb3JtQ29udGV4dCgpLCB3aWR0aCk7Ci0jZW5kaWYKKyAgICBHcmFw
aGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOworICAgIGlmICghYykKKyAgICAgICAg
cmV0dXJuOworICAgIGMtPnNldExpbmVXaWR0aCh3aWR0aCk7CiB9CiAKIFN0cmluZyBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmxpbmVDYXAoKSBjb25zdAogewotICAgIGNvbnN0IGNoYXIqIGNv
bnN0IG5hbWVzWzNdID0geyAiYnV0dCIsICJyb3VuZCIsICJzcXVhcmUiIH07Ci0gICAgcmV0dXJu
IG5hbWVzW3N0YXRlKCkubV9saW5lQ2FwXTsKKyAgICByZXR1cm4gbGluZUNhcE5hbWUoc3RhdGUo
KS5tX2xpbmVDYXApOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGlu
ZUNhcChjb25zdCBTdHJpbmcmIHMpCiB7Ci0gICAgQ2FwIGNhcDsKLSAgICBpZiAocyA9PSAiYnV0
dCIpCi0gICAgICAgIGNhcCA9IEJ1dHRDYXA7Ci0gICAgZWxzZSBpZiAocyA9PSAicm91bmQiKQot
ICAgICAgICBjYXAgPSBSb3VuZENhcDsKLSAgICBlbHNlIGlmIChzID09ICJzcXVhcmUiKQotICAg
ICAgICBjYXAgPSBTcXVhcmVDYXA7Ci0gICAgZWxzZQorICAgIExpbmVDYXAgY2FwOworICAgIGlm
ICghcGFyc2VMaW5lQ2FwKHMsIGNhcCkpCiAgICAgICAgIHJldHVybjsKLQogICAgIHN0YXRlKCku
bV9saW5lQ2FwID0gY2FwOwotCi0gICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9y
bS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgotI2lmIF9fQVBQTEVfXwotICAgIHN3
aXRjaCAoY2FwKSB7Ci0gICAgICAgIGNhc2UgQnV0dENhcDoKLSAgICAgICAgICAgIENHQ29udGV4
dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBCdXR0KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJvdW5kQ2FwOgotICAgICAgICAgICAgQ0dDb250ZXh0
U2V0TGluZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcFJvdW5kKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNxdWFyZUNhcDoKLSAgICAgICAgICAgIENHQ29udGV4
dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBTcXVhcmUpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCisgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJh
d2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAgICBjLT5zZXRM
aW5lQ2FwKGNhcCk7CiB9CiAKIFN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmxpbmVK
b2luKCkgY29uc3QKIHsKLSAgICBjb25zdCBjaGFyKiBjb25zdCBuYW1lc1szXSA9IHsgIm1pdGVy
IiwgInJvdW5kIiwgImJldmVsIiB9OwotICAgIHJldHVybiBuYW1lc1tzdGF0ZSgpLm1fbGluZUpv
aW5dOworICAgIHJldHVybiBsaW5lSm9pbk5hbWUoc3RhdGUoKS5tX2xpbmVKb2luKTsKIH0KIAog
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldExpbmVKb2luKGNvbnN0IFN0cmluZyYg
cykKIHsKLSAgICBKb2luIGpvaW47Ci0gICAgaWYgKHMgPT0gIm1pdGVyIikKLSAgICAgICAgam9p
biA9IE1pdGVySm9pbjsKLSAgICBlbHNlIGlmIChzID09ICJyb3VuZCIpCi0gICAgICAgIGpvaW4g
PSBSb3VuZEpvaW47Ci0gICAgZWxzZSBpZiAocyA9PSAiYmV2ZWwiKQotICAgICAgICBqb2luID0g
QmV2ZWxKb2luOwotICAgIGVsc2UKKyAgICBMaW5lSm9pbiBqb2luOworICAgIGlmICghcGFyc2VM
aW5lSm9pbihzLCBqb2luKSkKICAgICAgICAgcmV0dXJuOwotCiAgICAgc3RhdGUoKS5tX2xpbmVK
b2luID0gam9pbjsKLQotICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5k
ZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBfX0FQUExFX18KLSAgICBzd2l0Y2gg
KGpvaW4pIHsKLSAgICAgICAgY2FzZSBNaXRlckpvaW46Ci0gICAgICAgICAgICBDR0NvbnRleHRT
ZXRMaW5lSm9pbihwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5NaXRlcik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSb3VuZEpvaW46Ci0gICAgICAgICAgICBDR0NvbnRl
eHRTZXRMaW5lSm9pbihwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5Sb3VuZCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCZXZlbEpvaW46Ci0gICAgICAgICAgICBDR0Nv
bnRleHRTZXRMaW5lSm9pbihwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5CZXZlbCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYKKyAgICBHcmFwaGljc0NvbnRleHQqIGMg
PSBkcmF3aW5nQ29udGV4dCgpOworICAgIGlmICghYykKKyAgICAgICAgcmV0dXJuOworICAgIGMt
PnNldExpbmVKb2luKGpvaW4pOwogfQogCiBmbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
Om1pdGVyTGltaXQoKSBjb25zdApAQCAtMjM1LDEzICsxODMsMTEgQEAKIHsKICAgICBpZiAoIShs
aW1pdCA+IDApKQogICAgICAgICByZXR1cm47Ci0KICAgICBzdGF0ZSgpLm1fbWl0ZXJMaW1pdCA9
IGxpbWl0OwotCi0gICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVu
ZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgotI2lmIF9fQVBQTEVfXwotICAgIENHQ29udGV4dFNl
dE1pdGVyTGltaXQocGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKLSNlbmRpZgorICAgIEdyYXBo
aWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICBy
ZXR1cm47CisgICAgYy0+c2V0TWl0ZXJMaW1pdChsaW1pdCk7CiB9CiAKIGZsb2F0IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6c2hhZG93T2Zmc2V0WCgpIGNvbnN0CkBAIC0yNzksNyArMjI1LDcg
QEAKIAogU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2hhZG93Q29sb3IoKSBjb25z
dAogewotICAgIC8vIEZJWE1FOiBXaGF0IHNob3VsZCB0aGlzIHJldHVybiBpZiB5b3UgY2FsbGVk
IHNldFNoYWRvdyB3aXRoIGEgbm9uLXN0cmluZyBjb2xvci4KKyAgICAvLyBGSVhNRTogV2hhdCBz
aG91bGQgdGhpcyByZXR1cm4gaWYgeW91IGNhbGxlZCBzZXRTaGFkb3cgd2l0aCBhIG5vbi1zdHJp
bmcgY29sb3I/CiAgICAgcmV0dXJuIHN0YXRlKCkubV9zaGFkb3dDb2xvcjsKIH0KIApAQCAtMjk4
LDEzICsyNDQsMTEgQEAKIHsKICAgICBpZiAoIShhbHBoYSA+PSAwICYmIGFscGhhIDw9IDEpKQog
ICAgICAgICByZXR1cm47Ci0KICAgICBzdGF0ZSgpLm1fZ2xvYmFsQWxwaGEgPSBhbHBoYTsKLQot
ICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhp
Y3NDb250ZXh0IEFQSS4KLSNpZiBfX0FQUExFX18KLSAgICBDR0NvbnRleHRTZXRBbHBoYShwbGF0
Zm9ybUNvbnRleHQoKSwgYWxwaGEpOwotI2VuZGlmCisgICAgR3JhcGhpY3NDb250ZXh0KiBjID0g
ZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAgICBjLT5z
ZXRBbHBoYShhbHBoYSk7CiB9CiAKIFN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Omds
b2JhbENvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0CkBAIC0zMTcsMzYgKzI2MSw0MyBAQAogICAg
IENvbXBvc2l0ZU9wZXJhdG9yIG9wOwogICAgIGlmICghcGFyc2VDb21wb3NpdGVPcGVyYXRvcihv
cGVyYXRpb24sIG9wKSkKICAgICAgICAgcmV0dXJuOwotCiAgICAgc3RhdGUoKS5tX2dsb2JhbENv
bXBvc2l0ZSA9IG9wOwotCi0gICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1p
bmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgotI2lmIF9fQVBQTEVfXwotICAgIFdlYkNv
cmU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQoKSwgb3ApOwotI2VuZGlm
CisgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMp
CisgICAgICAgIHJldHVybjsKKyAgICBjLT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOwogfQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5
KQogeworICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYg
KCFjKQorICAgICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0
Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgogI2lmIF9fQVBQTEVfXwotICAg
IENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBzeCwgc3kpOworICAgIENHQ29u
dGV4dFNjYWxlQ1RNKGMtPnBsYXRmb3JtQ29udGV4dCgpLCBzeCwgc3kpOwogI2VuZGlmCiB9CiAK
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlh
bnMpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBp
ZiAoIWMpCisgICAgICAgIHJldHVybjsKICAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBs
YXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCiAjaWYgX19BUFBMRV9fCi0g
ICAgQ0dDb250ZXh0Um90YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZUluUmFkaWFucyk7
CisgICAgQ0dDb250ZXh0Um90YXRlQ1RNKGMtPnBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZUluUmFk
aWFucyk7CiAjZW5kaWYKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRyYW5z
bGF0ZShmbG9hdCB0eCwgZmxvYXQgdHkpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJh
d2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKICAgICAvLyBGSVhN
RTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBB
UEkuCiAjaWYgX19BUFBMRV9fCi0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29u
dGV4dCgpLCB0eCwgdHkpOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjLT5wbGF0Zm9ybUNv
bnRleHQoKSwgdHgsIHR5KTsKICNlbmRpZgogfQogCkBAIC00MTIsMjA5ICszNjMsMTQyIEBACiAK
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpiZWdpblBhdGgoKQogewotICAgIC8vIEZJ
WE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0
IEFQSS4KLSNpZiBfX0FQUExFX18KLSAgICBDR0NvbnRleHRSZWYgYyA9IHBsYXRmb3JtQ29udGV4
dCgpOwotICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwotICAgIENHQ29udGV4dEJlZ2luUGF0
aChjKTsKLSNlbmRpZgorICAgIHN0YXRlKCkubV9wYXRoLmNsZWFyKCk7CiB9CiAKIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjbG9zZVBhdGgoKQogewotICAgIC8vIEZJWE1FOiBEbyB0
aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNp
ZiBfX0FQUExFX18KLSAgICBDR0NvbnRleHRSZWYgYyA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAg
IGlmICghYykKLSAgICAgICAgcmV0dXJuOwotICAgIENHQ29udGV4dENsb3NlUGF0aChjKTsKLSNl
bmRpZgorICAgIHN0YXRlKCkubV9wYXRoLmNsb3NlU3VicGF0aCgpOwogfQogCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6bW92ZVRvKGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAgLy8g
RklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRl
eHQgQVBJLgotI2lmIF9fQVBQTEVfXwotICAgIENHQ29udGV4dFJlZiBjID0gcGxhdGZvcm1Db250
ZXh0KCk7Ci0gICAgaWYgKCFjKQotICAgICAgICByZXR1cm47Ci0gICAgQ0dDb250ZXh0TW92ZVRv
UG9pbnQoYywgeCwgeSk7Ci0jZW5kaWYKKyAgICBzdGF0ZSgpLm1fcGF0aC5tb3ZlVG8oRmxvYXRQ
b2ludCh4LCB5KSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpsaW5lVG8o
ZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRm
b3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgX19BUFBMRV9fCi0gICAg
Q0dDb250ZXh0UmVmIGMgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBpZiAoIWMpCi0gICAgICAg
IHJldHVybjsKLSAgICBDR0NvbnRleHRBZGRMaW5lVG9Qb2ludChjLCB4LCB5KTsKLSNlbmRpZgor
ICAgIHN0YXRlKCkubV9wYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHgsIHkpKTsKIH0KIAogdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnF1YWRyYXRpY0N1cnZlVG8oZmxvYXQgY3B4LCBm
bG9hdCBjcHksIGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAgLy8gRklYTUU6IERvIHRoaXMgdGhy
b3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgotI2lmIF9fQVBQ
TEVfXwotICAgIENHQ29udGV4dFJlZiBjID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgaWYgKCFj
KQotICAgICAgICByZXR1cm47Ci0gICAgQ0dDb250ZXh0QWRkUXVhZEN1cnZlVG9Qb2ludChjLCBj
cHgsIGNweSwgeCwgeSk7Ci0jZW5kaWYKKyAgICBzdGF0ZSgpLm1fcGF0aC5hZGRRdWFkQ3VydmVU
byhGbG9hdFBvaW50KGNweCwgY3B5KSwgRmxvYXRQb2ludCh4LCB5KSk7CiB9CiAKIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpiZXppZXJDdXJ2ZVRvKGZsb2F0IGNwMXgsIGZsb2F0IGNw
MXksIGZsb2F0IGNwMngsIGZsb2F0IGNwMnksIGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAgLy8g
RklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRl
eHQgQVBJLgotI2lmIF9fQVBQTEVfXwotICAgIENHQ29udGV4dFJlZiBjID0gcGxhdGZvcm1Db250
ZXh0KCk7Ci0gICAgaWYgKCFjKQotICAgICAgICByZXR1cm47Ci0gICAgQ0dDb250ZXh0QWRkQ3Vy
dmVUb1BvaW50KGMsIGNwMXgsIGNwMXksIGNwMngsIGNwMnksIHgsIHkpOwotI2VuZGlmCisgICAg
c3RhdGUoKS5tX3BhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KGNwMXgsIGNwMXkpLCBG
bG9hdFBvaW50KGNwMngsIGNwMnkpLCBGbG9hdFBvaW50KHgsIHkpKTsKIH0KIAotdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFyY1RvKGZsb2F0IHgwLCBmbG9hdCB5MCwgZmxvYXQgeDEs
IGZsb2F0IHkxLCBmbG9hdCByYWRpdXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmFyY1RvKGZsb2F0IHgwLCBmbG9hdCB5MCwgZmxvYXQgeDEsIGZs
b2F0IHkxLCBmbG9hdCByLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7Ci0KLSAg
ICBpZiAoIShyYWRpdXMgPiAwKSkgeworICAgIGlmICghKHIgPiAwKSkgewogICAgICAgICBlYyA9
IElOREVYX1NJWkVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgLy8gRklYTUU6
IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJ
LgotI2lmIF9fQVBQTEVfXwotICAgIENHQ29udGV4dFJlZiBjID0gcGxhdGZvcm1Db250ZXh0KCk7
Ci0gICAgaWYgKCFjKQotICAgICAgICByZXR1cm47Ci0gICAgQ0dDb250ZXh0QWRkQXJjVG9Qb2lu
dChjLCB4MCwgeTAsIHgxLCB5MSwgcmFkaXVzKTsKLSNlbmRpZgorICAgIHN0YXRlKCkubV9wYXRo
LmFkZEFyY1RvKEZsb2F0UG9pbnQoeDAsIHkwKSwgRmxvYXRQb2ludCh4MSwgeTEpLCByKTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFyYyhmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCByLCBmbG9hdCBzYSwgZmxvYXQgZWEsIGJvb2wgY2xvY2t3aXNlLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBlYyA9IDA7Ci0KICAgICBpZiAoIShyID4gMCkpIHsKICAgICAgICAgZWMg
PSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIC8vIEZJWE1F
OiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQ
SS4KLSNpZiBfX0FQUExFX18KLSAgICBDR0NvbnRleHRSZWYgYyA9IHBsYXRmb3JtQ29udGV4dCgp
OwotICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwotICAgIENHQ29udGV4dEFkZEFyYyhjLCB4
LCB5LCByLCBzYSwgZWEsIGNsb2Nrd2lzZSk7Ci0jZW5kaWYKKyAgICBzdGF0ZSgpLm1fcGF0aC5h
ZGRBcmMoRmxvYXRQb2ludCh4LCB5KSwgciwgc2EsIGVhLCBjbG9ja3dpc2UpOwogfQogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3
aWR0aCwgZmxvYXQgaGVpZ2h0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7Ci0K
ICAgICBpZiAoISh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkpIHsKICAgICAgICAgZWMgPSBJTkRF
WF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIC8vIEZJWE1FOiBEbyB0
aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNp
ZiBfX0FQUExFX18KLSAgICBDR0NvbnRleHRSZWYgYyA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAg
IGlmICghYykKLSAgICAgICAgcmV0dXJuOwotICAgIENHQ29udGV4dEFkZFJlY3QoYywgQ0dSZWN0
TWFrZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7Ci0jZW5kaWYKKyAgICBzdGF0ZSgpLm1fcGF0aC5h
ZGRSZWN0KEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CiB9CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsKCkKIHsKLSAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJv
dWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgX19BUFBM
RV9fCi0gICAgQ0dDb250ZXh0UmVmIGMgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBHcmFwaGlj
c0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0
dXJuOworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQg
R3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KKyAgICBDR0NvbnRleHRCZWdpblBh
dGgoYy0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIENHQ29udGV4dEFkZFBhdGgoYy0+cGxhdGZv
cm1Db250ZXh0KCksIHN0YXRlKCkubV9wYXRoLnBsYXRmb3JtUGF0aCgpKTsKIAotICAgIHdpbGxE
cmF3KENHQ29udGV4dEdldFBhdGhCb3VuZGluZ0JveChjKSk7CisgICAgd2lsbERyYXcoQ0dDb250
ZXh0R2V0UGF0aEJvdW5kaW5nQm94KGMtPnBsYXRmb3JtQ29udGV4dCgpKSk7CiAKICAgICBpZiAo
c3RhdGUoKS5tX2ZpbGxTdHlsZS0+Z3JhZGllbnQoKSkgewogICAgICAgICAvLyBTaGFkaW5nIHdv
cmtzIG9uIHRoZSBlbnRpcmUgY2xpcCByZWdpb24sIHNvIGNvbnZlcnQgdGhlIGN1cnJlbnQgcGF0
aCB0byBhIGNsaXAuCi0gICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoYyk7ICAgICAgICAKLSAg
ICAgICAgQ0dDb250ZXh0Q2xpcChjKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoYywg
c3RhdGUoKS5tX2ZpbGxTdHlsZS0+Z3JhZGllbnQoKS0+cGxhdGZvcm1TaGFkaW5nKCkpOyAgICAg
ICAgCi0gICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoYyk7CisgICAgICAgIENHQ29udGV4
dFNhdmVHU3RhdGUoYy0+cGxhdGZvcm1Db250ZXh0KCkpOyAgICAgICAgCisgICAgICAgIENHQ29u
dGV4dENsaXAoYy0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgICAgICBDR0NvbnRleHREcmF3U2hh
ZGluZyhjLT5wbGF0Zm9ybUNvbnRleHQoKSwgc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Z3JhZGllbnQo
KS0+cGxhdGZvcm1TaGFkaW5nKCkpOyAgICAgICAgCisgICAgICAgIENHQ29udGV4dFJlc3RvcmVH
U3RhdGUoYy0+cGxhdGZvcm1Db250ZXh0KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChz
dGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCiAgICAgICAgICAgICBhcHBseUZpbGxQYXR0
ZXJuKCk7Ci0gICAgICAgIENHQ29udGV4dEZpbGxQYXRoKGMpOworICAgICAgICBDR0NvbnRleHRG
aWxsUGF0aChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgfQogI2VuZGlmCiB9CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2UoKQogewotICAgIC8vIEZJWE1FOiBEbyB0
aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNp
ZiBfX0FQUExFX18KLSAgICBDR0NvbnRleHRSZWYgYyA9IHBsYXRmb3JtQ29udGV4dCgpOworICAg
IEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAg
ICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRl
cGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgorI2lmIF9fQVBQTEVfXworICAgIENHQ29udGV4
dEJlZ2luUGF0aChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQ0dDb250ZXh0QWRkUGF0aChj
LT5wbGF0Zm9ybUNvbnRleHQoKSwgc3RhdGUoKS5tX3BhdGgucGxhdGZvcm1QYXRoKCkpOwogCi0g
ICAgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQgZm9yIG5lZ2F0aXZlIHdpZHRocz8KICAgICBmbG9h
dCBsaW5lV2lkdGggPSBzdGF0ZSgpLm1fbGluZVdpZHRoOwogICAgIGZsb2F0IGluc2V0ID0gLWxp
bmVXaWR0aCAvIDI7Ci0gICAgQ0dSZWN0IGJvdW5kaW5nUmVjdCA9IENHUmVjdEluc2V0KENHQ29u
dGV4dEdldFBhdGhCb3VuZGluZ0JveChjKSwgaW5zZXQsIGluc2V0KTsKKyAgICBDR1JlY3QgYm91
bmRpbmdSZWN0ID0gQ0dSZWN0SW5zZXQoQ0dDb250ZXh0R2V0UGF0aEJvdW5kaW5nQm94KGMtPnBs
YXRmb3JtQ29udGV4dCgpKSwgaW5zZXQsIGluc2V0KTsKIAogICAgIHdpbGxEcmF3KGJvdW5kaW5n
UmVjdCk7CiAKICAgICBpZiAoc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5ncmFkaWVudCgpKSB7CiAg
ICAgICAgIC8vIFNoYWRpbmcgd29ya3Mgb24gdGhlIGVudGlyZSBjbGlwIHJlZ2lvbiwgc28gY29u
dmVydCB0aGUgY3VycmVudCBwYXRoIHRvIGEgY2xpcC4KLSAgICAgICAgQ0dDb250ZXh0U2F2ZUdT
dGF0ZShjKTsgICAgICAgIAotICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2Vk
UGF0aChjKTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcChjKTsKLSAgICAgICAgQ0dDb250ZXh0RHJh
d1NoYWRpbmcoYywgc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5ncmFkaWVudCgpLT5wbGF0Zm9ybVNo
YWRpbmcoKSk7ICAgICAgICAKLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjKTsKKyAg
ICAgICAgYy0+c2F2ZSgpOworICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2Vk
UGF0aChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgICAgIENHQ29udGV4dENsaXAoYy0+cGxh
dGZvcm1Db250ZXh0KCkpOworICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjLT5wbGF0Zm9y
bUNvbnRleHQoKSwgc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5ncmFkaWVudCgpLT5wbGF0Zm9ybVNo
YWRpbmcoKSk7ICAgICAgICAKKyAgICAgICAgYy0+cmVzdG9yZSgpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBhdHRlcm4oKSkKICAgICAgICAgICAg
IGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGMpOwor
ICAgICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICB9
CiAjZW5kaWYKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNsaXAoKQogewot
ICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhp
Y3NDb250ZXh0IEFQSS4KLSNpZiBfX0FQUExFX18KLSAgICBDR0NvbnRleHRSZWYgYyA9IHBsYXRm
b3JtQ29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7
CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47Ci0gICAgQ0dDb250ZXh0Q2xpcChjKTsKLSNl
bmRpZgorICAgIGMtPmNsaXAoc3RhdGUoKS5tX3BhdGgpOwogfQogCiB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6Y2xlYXJSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBm
bG9hdCBoZWlnaHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKLQogICAgIGlm
ICghKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSkgewogICAgICAgICBlYyA9IElOREVYX1NJWkVf
RVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgLy8gRklYTUU6IERvIHRoaXMgdGhy
b3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgotI2lmIF9fQVBQ
TEVfXwotICAgIENHQ29udGV4dFJlZiBjID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgR3JhcGhp
Y3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJl
dHVybjsKLSAgICBDR1JlY3QgcmVjdCA9IENHUmVjdE1ha2UoeCwgeSwgd2lkdGgsIGhlaWdodCk7
Ci0KKyAgICBGbG9hdFJlY3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB3aWxsRHJh
dyhyZWN0KTsKLQotICAgIENHQ29udGV4dENsZWFyUmVjdChjLCByZWN0KTsKLSNlbmRpZgorICAg
IGMtPmNsZWFyUmVjdChyZWN0KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmZpbGxSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNjI2LDI1ICs1MTAsMjUgQEAKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRl
bnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBfX0FQUExFX18KLSAgICBDR0NvbnRleHRSZWYg
YyA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdD
b250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IERv
IHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgor
I2lmIF9fQVBQTEVfXwogICAgIENHUmVjdCByZWN0ID0gQ0dSZWN0TWFrZSh4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKIAogICAgIHdpbGxEcmF3KHJlY3QpOwogCiAgICAgaWYgKHN0YXRlKCkubV9maWxs
U3R5bGUtPmdyYWRpZW50KCkpIHsKICAgICAgICAgLy8gU2hhZGluZyB3b3JrcyBvbiB0aGUgZW50
aXJlIGNsaXAgcmVnaW9uLCBzbyBjb252ZXJ0IHRoZSByZWN0IHRvIGEgY2xpcC4KLSAgICAgICAg
Q0dDb250ZXh0U2F2ZUdTdGF0ZShjKTsgICAgICAgIAotICAgICAgICBDR0NvbnRleHRDbGlwVG9S
ZWN0KGMsIHJlY3QpOwotICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjLCBzdGF0ZSgpLm1f
ZmlsbFN0eWxlLT5ncmFkaWVudCgpLT5wbGF0Zm9ybVNoYWRpbmcoKSk7ICAgICAgICAKLSAgICAg
ICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjKTsKKyAgICAgICAgYy0+c2F2ZSgpOyAgICAgICAg
CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoYy0+cGxhdGZvcm1Db250ZXh0KCksIHJlY3Qp
OworICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjLT5wbGF0Zm9ybUNvbnRleHQoKSwgc3Rh
dGUoKS5tX2ZpbGxTdHlsZS0+Z3JhZGllbnQoKS0+cGxhdGZvcm1TaGFkaW5nKCkpOyAgICAgICAg
CisgICAgICAgIGMtPnJlc3RvcmUoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc3RhdGUo
KS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpKQogICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigp
OwotICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjLCByZWN0KTsKKyAgICAgICAgQ0dDb250ZXh0
RmlsbFJlY3QoYy0+cGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogICAgIH0KICNlbmRpZgogfQpA
QCAtNjYzLDI0ICs1NDcsMjEgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEZJ
WE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0
IEFQSS4KLSNpZiBfX0FQUExFX18KLSAgICBDR0NvbnRleHRSZWYgYyA9IHBsYXRmb3JtQ29udGV4
dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYg
KCFjKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogSXMgdGhpcyByaWdodCBmb3Ig
bmVnYXRpdmUgd2lkdGhzPwotICAgIGZsb2F0IGluc2V0ID0gLWxpbmVXaWR0aCAvIDI7Ci0gICAg
Q0dSZWN0IHJlY3QgPSBDR1JlY3RNYWtlKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIENHUmVj
dCBib3VuZGluZ1JlY3QgPSBDR1JlY3RJbnNldChyZWN0LCBpbnNldCwgaW5zZXQpOworICAgIEZs
b2F0UmVjdCByZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogCisgICAgRmxvYXRSZWN0IGJvdW5k
aW5nUmVjdCA9IHJlY3Q7CisgICAgYm91bmRpbmdSZWN0LmluZmxhdGUobGluZVdpZHRoIC8gMik7
CiAgICAgd2lsbERyYXcoYm91bmRpbmdSZWN0KTsKIAogICAgIC8vIEZJWE1FOiBObyBzdXBwb3J0
IGZvciBncmFkaWVudHMhCiAgICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+cGF0dGVybigp
KQogICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKLSAgICBDR0NvbnRleHRTdHJva2VSZWN0
V2l0aFdpZHRoKGMsIHJlY3QsIGxpbmVXaWR0aCk7Ci0jZW5kaWYKKworICAgIGMtPnN0cm9rZVJl
Y3QocmVjdCwgbGluZVdpZHRoKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyKQpAQCAtNzA1
LDE2ICs1ODYsMTYgQEAKICAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IGJsdXI7CiAgICAgc3Rh
dGUoKS5tX3NoYWRvd0NvbG9yID0gIiI7CiAKLSAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdo
IHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgX19BUFBMRV9f
Ci0gICAgQ0dDb250ZXh0UmVmIGMgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJu
OworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3Jh
cGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KICAgICBjb25zdCBDR0Zsb2F0IGNvbXBv
bmVudHNbMl0gPSB7IGdyYXlMZXZlbCwgMSB9OwogICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNw
YWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlR3JheSgpOwogICAgIENHQ29sb3JSZWYgY29s
b3IgPSBDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UsIGNvbXBvbmVudHMpOwogICAgIENHQ29sb3JT
cGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7Ci0gICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9y
KGMsIENHU2l6ZU1ha2Uod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbG9yKTsKKyAgICBDR0NvbnRl
eHRTZXRTaGFkb3dXaXRoQ29sb3IoYy0+cGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZU1ha2Uod2lk
dGgsIGhlaWdodCksIGJsdXIsIGNvbG9yKTsKICAgICBDR0NvbG9yUmVsZWFzZShjb2xvcik7CiAj
ZW5kaWYKIH0KQEAgLTcyNSwxMSArNjA2LDExIEBACiAgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIg
PSBibHVyOwogICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9IGNvbG9yOwogCi0gICAgLy8gRklY
TUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQg
QVBJLgotI2lmIF9fQVBQTEVfXwotICAgIENHQ29udGV4dFJlZiBjID0gcGxhdGZvcm1Db250ZXh0
KCk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAo
IWMpCiAgICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRm
b3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCisjaWYgX19BUFBMRV9fCiAgICAg
UkdCQTMyIHJnYmEgPSBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3IpOwogICAgIGNvbnN0IENH
RmxvYXQgY29tcG9uZW50c1s0XSA9IHsKICAgICAgICAgKChyZ2JhID4+IDE2KSAmIDB4RkYpIC8g
MjU1LjAsCkBAIC03NDAsNyArNjIxLDcgQEAKICAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFj
ZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwogICAgIENHQ29sb3JSZWYgc2hhZG93
Q29sb3IgPSBDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UsIGNvbXBvbmVudHMpOwogICAgIENHQ29s
b3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7Ci0gICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENv
bG9yKGMsIENHU2l6ZU1ha2Uod2lkdGgsIGhlaWdodCksIGJsdXIsIHNoYWRvd0NvbG9yKTsKKyAg
ICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoYy0+cGxhdGZvcm1Db250ZXh0KCksIENHU2l6
ZU1ha2Uod2lkdGgsIGhlaWdodCksIGJsdXIsIHNoYWRvd0NvbG9yKTsKICAgICBDR0NvbG9yUmVs
ZWFzZShzaGFkb3dDb2xvcik7CiAjZW5kaWYKIH0KQEAgLTc1MSwxNiArNjMyLDE2IEBACiAgICAg
c3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOwogICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9
ICIiOwogCi0gICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVu
dCBHcmFwaGljc0NvbnRleHQgQVBJLgotI2lmIF9fQVBQTEVfXwotICAgIENHQ29udGV4dFJlZiBj
ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0Nv
bnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhNRTogRG8g
dGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCisj
aWYgX19BUFBMRV9fCiAgICAgY29uc3QgQ0dGbG9hdCBjb21wb25lbnRzWzJdID0geyBncmF5TGV2
ZWwsIGFscGhhIH07CiAgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3Bh
Y2VDcmVhdGVEZXZpY2VHcmF5KCk7CiAgICAgQ0dDb2xvclJlZiBjb2xvciA9IENHQ29sb3JDcmVh
dGUoY29sb3JTcGFjZSwgY29tcG9uZW50cyk7CiAgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xv
clNwYWNlKTsKLSAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoYywgQ0dTaXplTWFrZSh3
aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29sb3IpOworICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhD
b2xvcihjLT5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplTWFrZSh3aWR0aCwgaGVpZ2h0KSwgYmx1
ciwgY29sb3IpOwogICAgIENHQ29sb3JSZWxlYXNlKGNvbG9yKTsKICNlbmRpZgogfQpAQCAtNzcx
LDE2ICs2NTIsMTYgQEAKICAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IGJsdXI7CiAgICAgc3Rh
dGUoKS5tX3NoYWRvd0NvbG9yID0gIiI7CiAKLSAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdo
IHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgX19BUFBMRV9f
Ci0gICAgQ0dDb250ZXh0UmVmIGMgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJu
OworICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3Jh
cGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KICAgICBjb25zdCBDR0Zsb2F0IGNvbXBv
bmVudHNbNF0gPSB7IHIsIGcsIGIsIGEgfTsKICAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFj
ZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwogICAgIENHQ29sb3JSZWYgc2hhZG93
Q29sb3IgPSBDR0NvbG9yQ3JlYXRlKGNvbG9yU3BhY2UsIGNvbXBvbmVudHMpOwogICAgIENHQ29s
b3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7Ci0gICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENv
bG9yKGMsIENHU2l6ZU1ha2Uod2lkdGgsIGhlaWdodCksIGJsdXIsIHNoYWRvd0NvbG9yKTsKKyAg
ICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoYy0+cGxhdGZvcm1Db250ZXh0KCksIENHU2l6
ZU1ha2Uod2lkdGgsIGhlaWdodCksIGJsdXIsIHNoYWRvd0NvbG9yKTsKICAgICBDR0NvbG9yUmVs
ZWFzZShzaGFkb3dDb2xvcik7CiAjZW5kaWYKIH0KQEAgLTc5MSwxNiArNjcyLDE2IEBACiAgICAg
c3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOwogICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9
ICIiOwogCi0gICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVu
dCBHcmFwaGljc0NvbnRleHQgQVBJLgotI2lmIF9fQVBQTEVfXwotICAgIENHQ29udGV4dFJlZiBk
YyA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogZGMgPSBkcmF3aW5n
Q29udGV4dCgpOwogICAgIGlmICghZGMpCiAgICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhNRTog
RG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEku
CisjaWYgX19BUFBMRV9fCiAgICAgY29uc3QgQ0dGbG9hdCBjb21wb25lbnRzWzVdID0geyBjLCBt
LCB5LCBrLCBhIH07CiAgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3Bh
Y2VDcmVhdGVEZXZpY2VDTVlLKCk7CiAgICAgQ0dDb2xvclJlZiBzaGFkb3dDb2xvciA9IENHQ29s
b3JDcmVhdGUoY29sb3JTcGFjZSwgY29tcG9uZW50cyk7CiAgICAgQ0dDb2xvclNwYWNlUmVsZWFz
ZShjb2xvclNwYWNlKTsKLSAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoZGMsIENHU2l6
ZU1ha2Uod2lkdGgsIGhlaWdodCksIGJsdXIsIHNoYWRvd0NvbG9yKTsKKyAgICBDR0NvbnRleHRT
ZXRTaGFkb3dXaXRoQ29sb3IoZGMtPnBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVNYWtlKHdpZHRo
LCBoZWlnaHQpLCBibHVyLCBzaGFkb3dDb2xvcik7CiAgICAgQ0dDb2xvclJlbGVhc2Uoc2hhZG93
Q29sb3IpOwogI2VuZGlmCiB9CkBAIC04MTUsMTEgKzY5NiwxMSBAQAogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6YXBwbHlTaGFkb3coKQogewotICAgIC8vIEZJWE1FOiBEbyB0aGlz
IHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBf
X0FQUExFX18KLSAgICBDR0NvbnRleHRSZWYgYyA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIEdy
YXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAg
ICByZXR1cm47CisgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVu
ZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgorI2lmIF9fQVBQTEVfXwogICAgIFJHQkEzMiByZ2Jh
ID0gc3RhdGUoKS5tX3NoYWRvd0NvbG9yLmlzRW1wdHkoKSA/IDAgOiBDU1NQYXJzZXI6OnBhcnNl
Q29sb3Ioc3RhdGUoKS5tX3NoYWRvd0NvbG9yKTsKICAgICBjb25zdCBDR0Zsb2F0IGNvbXBvbmVu
dHNbNF0gPSB7CiAgICAgICAgICgocmdiYSA+PiAxNikgJiAweEZGKSAvIDI1NS4wLApAQCAtODMw
LDcgKzcxMSw3IEBACiAgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3Bh
Y2VDcmVhdGVEZXZpY2VSR0IoKTsKICAgICBDR0NvbG9yUmVmIGNvbG9yID0gQ0dDb2xvckNyZWF0
ZShjb2xvclNwYWNlLCBjb21wb25lbnRzKTsKICAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9y
U3BhY2UpOwotICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjLCBzdGF0ZSgpLm1fc2hh
ZG93T2Zmc2V0LCBzdGF0ZSgpLm1fc2hhZG93Qmx1ciwgY29sb3IpOworICAgIENHQ29udGV4dFNl
dFNoYWRvd1dpdGhDb2xvcihjLT5wbGF0Zm9ybUNvbnRleHQoKSwgc3RhdGUoKS5tX3NoYWRvd09m
ZnNldCwgc3RhdGUoKS5tX3NoYWRvd0JsdXIsIGNvbG9yKTsKICAgICBDR0NvbG9yUmVsZWFzZShj
b2xvcik7CiAjZW5kaWYKIH0KQEAgLTkxNywxMiArNzk4LDExIEBACiAgICAgaWYgKCFjYW52YXMp
CiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZv
cm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBfX0FQUExFX18KLSAgICBD
R0NvbnRleHRSZWYgYyA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCog
YyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47Ci0KKyAg
ICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNz
Q29udGV4dCBBUEkuCisjaWYgX19BUFBMRV9fCiAgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdl
ID0gY2FudmFzLT5jcmVhdGVQbGF0Zm9ybUltYWdlKCk7CiAgICAgaWYgKCFwbGF0Zm9ybUltYWdl
KQogICAgICAgICByZXR1cm47CkBAIC05MzQsNyArODE0LDcgQEAKICAgICBmbG9hdCBpaCA9IENH
SW1hZ2VHZXRIZWlnaHQocGxhdGZvcm1JbWFnZSk7CiAgICAgaWYgKHN4ID09IDAgJiYgc3kgPT0g
MCAmJiBpdyA9PSBzdyAmJiBpaCA9PSBzaCkgewogICAgICAgICAvLyBGYXN0IHBhdGgsIHlheSEK
LSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGMsIENHUmVjdE1ha2UoZHgsIGR5LCBkdywgZGgp
LCBwbGF0Zm9ybUltYWdlKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGMtPnBsYXRmb3Jt
Q29udGV4dCgpLCBDR1JlY3RNYWtlKGR4LCBkeSwgZHcsIGRoKSwgcGxhdGZvcm1JbWFnZSk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgLy8gU2xvdyBwYXRoLCBib28hCiAgICAgICAgIC8vIENyZWF0
ZSBhIG5ldyBiaXRtYXAgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUgYW5kIHRoZW4gZHJhdyB0aGF0
IGludG8gb3VyIGNvbnRleHQuCkBAIC05NTUsNyArODM1LDcgQEAKICAgICAgICAgQ0dJbWFnZVJl
ZiBjbGlwcGVkU291cmNlSW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjbGlwcGVk
U291cmNlQ29udGV4dCk7CiAgICAgICAgIENHQ29udGV4dFJlbGVhc2UoY2xpcHBlZFNvdXJjZUNv
bnRleHQpOwogCi0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjLCBDR1JlY3RNYWtlKGR4LCBk
eSwgZHcsIGRoKSwgY2xpcHBlZFNvdXJjZUltYWdlKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0lt
YWdlKGMtPnBsYXRmb3JtQ29udGV4dCgpLCBDR1JlY3RNYWtlKGR4LCBkeSwgZHcsIGRoKSwgY2xp
cHBlZFNvdXJjZUltYWdlKTsKICAgICAgICAgQ0dJbWFnZVJlbGVhc2UoY2xpcHBlZFNvdXJjZUlt
YWdlKTsKICAgICAgICAgCiAgICAgICAgIGZhc3RGcmVlKGJ1ZmZlcik7CkBAIC05ODYsNyArODY2
LDYgQEAKICAgICBpZiAoIXBhcnNlQ29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3BlcmF0aW9u
LCBvcCkpCiAgICAgICAgIG9wID0gQ29tcG9zaXRlU291cmNlT3ZlcjsKIAotICAgIC8vIEZJWE1F
OiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQ
SS4KICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9hdFJlY3QoZHgsIGR5LCBkdywgZGgpOwog
ICAgIHdpbGxEcmF3KGRlc3RSZWN0KTsKICAgICBjLT5kcmF3SW1hZ2UoY2FjaGVkSW1hZ2UtPmlt
YWdlKCksIGRlc3RSZWN0LCBGbG9hdFJlY3Qoc3gsIHN5LCBzdywgc2gpLCBvcCk7CkBAIC0xMDI5
LDYgKzkwOCw3IEBACiAgICAgQ2FudmFzUGF0dGVybjo6cGFyc2VSZXBldGl0aW9uVHlwZShyZXBl
dGl0aW9uVHlwZSwgcmVwZWF0WCwgcmVwZWF0WSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAg
cmV0dXJuIDA7CisgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVu
ZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgogI2lmIF9fQVBQTEVfXwogICAgIENHSW1hZ2VSZWYg
aW1hZ2UgPSBjYW52YXMtPmNyZWF0ZVBsYXRmb3JtSW1hZ2UoKTsKICAgICBpZiAoIWltYWdlKQpA
QCAtMTA1NSwyNSArOTM1LDE2IEBACiAgICAgcmV0dXJuIG1fY2FudmFzLT5kcmF3aW5nQ29udGV4
dCgpOwogfQogCi0jaWYgX19BUFBMRV9fCi0KLUNHQ29udGV4dFJlZiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKICAgICBHcmFwaGljc0NvbnRleHQqIGMg
PSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIGMtPnBsYXRmb3JtQ29udGV4dCgpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKLXsKLSAgICBDR0NvbnRleHRSZWYgYyA9IHBs
YXRmb3JtQ29udGV4dCgpOwotICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwogCisjaWYgX19B
UFBMRV9fCiAgICAgLy8gQ2hlY2sgZm9yIGNhc2Ugd2hlcmUgdGhlIHBhdHRlcm4gaXMgYWxyZWFk
eSBzZXQuCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbSA9IENHQ29udGV4dEdldENUTShjKTsKLSAg
ICBpZiAoc3RhdGUoKS5tX3BsYXRmb3JtQ29udGV4dFN0cm9rZVN0eWxlSXNQYXR0ZXJuCisgICAg
Q0dBZmZpbmVUcmFuc2Zvcm0gbSA9IENHQ29udGV4dEdldENUTShjLT5wbGF0Zm9ybUNvbnRleHQo
KSk7CisgICAgaWYgKHN0YXRlKCkubV9hcHBsaWVkU3Ryb2tlUGF0dGVybgogICAgICAgICAgICAg
JiYgQ0dBZmZpbmVUcmFuc2Zvcm1FcXVhbFRvVHJhbnNmb3JtKG0sIHN0YXRlKCkubV9zdHJva2VT
dHlsZVBhdHRlcm5UcmFuc2Zvcm0pKQogICAgICAgICByZXR1cm47CiAKQEAgLTEwODYsMjYgKzk1
NywyOCBAQAogICAgICAgICByZXR1cm47CiAKICAgICBDR0NvbG9yU3BhY2VSZWYgcGF0dGVyblNw
YWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlUGF0dGVybigwKTsKLSAgICBDR0NvbnRleHRTZXRTdHJv
a2VDb2xvclNwYWNlKGMsIHBhdHRlcm5TcGFjZSk7CisgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29s
b3JTcGFjZShjLT5wbGF0Zm9ybUNvbnRleHQoKSwgcGF0dGVyblNwYWNlKTsKICAgICBDR0NvbG9y
U3BhY2VSZWxlYXNlKHBhdHRlcm5TcGFjZSk7CiAKICAgICBjb25zdCBDR0Zsb2F0IHBhdHRlcm5B
bHBoYSA9IDE7Ci0gICAgQ0dDb250ZXh0U2V0U3Ryb2tlUGF0dGVybihjLCBwbGF0Zm9ybVBhdHRl
cm4sICZwYXR0ZXJuQWxwaGEpOworICAgIENHQ29udGV4dFNldFN0cm9rZVBhdHRlcm4oYy0+cGxh
dGZvcm1Db250ZXh0KCksIHBsYXRmb3JtUGF0dGVybiwgJnBhdHRlcm5BbHBoYSk7CiAgICAgQ0dQ
YXR0ZXJuUmVsZWFzZShwbGF0Zm9ybVBhdHRlcm4pOwogCi0gICAgc3RhdGUoKS5tX3BsYXRmb3Jt
Q29udGV4dFN0cm9rZVN0eWxlSXNQYXR0ZXJuID0gdHJ1ZTsKICAgICBzdGF0ZSgpLm1fc3Ryb2tl
U3R5bGVQYXR0ZXJuVHJhbnNmb3JtID0gbTsKKyNlbmRpZgorICAgIHN0YXRlKCkubV9hcHBsaWVk
U3Ryb2tlUGF0dGVybiA9IHRydWU7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBDR0NvbnRleHRSZWYgYyA9IHBsYXRmb3JtQ29u
dGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAg
aWYgKCFjKQogICAgICAgICByZXR1cm47CiAKKyNpZiBfX0FQUExFX18KICAgICAvLyBDaGVjayBm
b3IgY2FzZSB3aGVyZSB0aGUgcGF0dGVybiBpcyBhbHJlYWR5IHNldC4KLSAgICBDR0FmZmluZVRy
YW5zZm9ybSBtID0gQ0dDb250ZXh0R2V0Q1RNKGMpOwotICAgIGlmIChzdGF0ZSgpLm1fcGxhdGZv
cm1Db250ZXh0RmlsbFN0eWxlSXNQYXR0ZXJuCisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbSA9IENH
Q29udGV4dEdldENUTShjLT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgaWYgKHN0YXRlKCkubV9h
cHBsaWVkRmlsbFBhdHRlcm4KICAgICAgICAgICAgICYmIENHQWZmaW5lVHJhbnNmb3JtRXF1YWxU
b1RyYW5zZm9ybShtLCBzdGF0ZSgpLm1fZmlsbFN0eWxlUGF0dGVyblRyYW5zZm9ybSkpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMTExOCwxNyArOTkxLDE2IEBACiAgICAgICAgIHJldHVybjsKIAog
ICAgIENHQ29sb3JTcGFjZVJlZiBwYXR0ZXJuU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0
ZXJuKDApOwotICAgIENHQ29udGV4dFNldEZpbGxDb2xvclNwYWNlKGMsIHBhdHRlcm5TcGFjZSk7
CisgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yU3BhY2UoYy0+cGxhdGZvcm1Db250ZXh0KCksIHBh
dHRlcm5TcGFjZSk7CiAgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShwYXR0ZXJuU3BhY2UpOwogCiAg
ICAgY29uc3QgQ0dGbG9hdCBwYXR0ZXJuQWxwaGEgPSAxOwotICAgIENHQ29udGV4dFNldEZpbGxQ
YXR0ZXJuKGMsIHBsYXRmb3JtUGF0dGVybiwgJnBhdHRlcm5BbHBoYSk7CisgICAgQ0dDb250ZXh0
U2V0RmlsbFBhdHRlcm4oYy0+cGxhdGZvcm1Db250ZXh0KCksIHBsYXRmb3JtUGF0dGVybiwgJnBh
dHRlcm5BbHBoYSk7CiAgICAgQ0dQYXR0ZXJuUmVsZWFzZShwbGF0Zm9ybVBhdHRlcm4pOwogCi0g
ICAgc3RhdGUoKS5tX3BsYXRmb3JtQ29udGV4dEZpbGxTdHlsZUlzUGF0dGVybiA9IHRydWU7CiAg
ICAgc3RhdGUoKS5tX2ZpbGxTdHlsZVBhdHRlcm5UcmFuc2Zvcm0gPSBtOworI2VuZGlmCisgICAg
c3RhdGUoKS5tX2FwcGxpZWRGaWxsUGF0dGVybiA9IHRydWU7CiB9CiAKLSNlbmRpZgotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBodG1sL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBodG1sL0NhbnZhc1N0eWxlLmNwcAkocmV2aXNpb24gMTQwNzEpCisrKyBodG1sL0NhbnZh
c1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAi
Q2FudmFzR3JhZGllbnQuaCIKICNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiY3NzcGFyc2VyLmgiCiAjaW5jbHVkZSA8a3ht
bGNvcmUvUGFzc1JlZlB0ci5oPgogCkBAIC03MywzOSArNzQsNTIgQEAKIHsKIH0KIAotI2lmIF9f
QVBQTEVfXwotCi12b2lkIENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKENHQ29udGV4dFJl
ZiBjb250ZXh0KQordm9pZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VDb2xvcihHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQpCiB7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47CiAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICAgICAgY2FzZSBDb2xvclN0cmluZzogewogICAgICAg
ICAgICAgUkdCQTMyIGNvbG9yID0gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKG1fY29sb3IpOwotICAg
ICAgICAgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4dCwKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3ND
b250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KKyAgICAgICAgICAgIENHQ29udGV4dFNldFJHQlN0
cm9rZUNvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLAogICAgICAgICAgICAgICAgICgo
Y29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTUuMCwKICAgICAgICAgICAgICAgICAoKGNvbG9yID4+
IDgpICYgMHhGRikgLyAyNTUuMCwKICAgICAgICAgICAgICAgICAoY29sb3IgJiAweEZGKSAvIDI1
NS4wLAogICAgICAgICAgICAgICAgICgoY29sb3IgPj4gMjQpICYgMHhGRikgLyAyNTUuMCk7Cisj
ZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ29sb3JT
dHJpbmdXaXRoQWxwaGE6IHsKICAgICAgICAgICAgIFJHQkEzMiBjb2xvciA9IENTU1BhcnNlcjo6
cGFyc2VDb2xvcihtX2NvbG9yKTsKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNv
bG9yKGNvbnRleHQsCisgICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRm
b3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCisjaWYgX19BUFBMRV9fCisgICAg
ICAgICAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSwKICAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDE2KSAmIDB4RkYpIC8gMjU1LjAsCiAg
ICAgICAgICAgICAgICAgKChjb2xvciA+PiA4KSAmIDB4RkYpIC8gMjU1LjAsCiAgICAgICAgICAg
ICAgICAgKGNvbG9yICYgMHhGRikgLyAyNTUuMCwKICAgICAgICAgICAgICAgICBtX2FscGhhKTsK
KyNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHcmF5
TGV2ZWw6Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRHcmF5U3Ryb2tlQ29sb3IoY29udGV4dCwg
bV9ncmF5TGV2ZWwsIG1fYWxwaGEpOworICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhy
b3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgorI2lmIF9fQVBQ
TEVfXworICAgICAgICAgICAgQ0dDb250ZXh0U2V0R3JheVN0cm9rZUNvbG9yKGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLCBtX2dyYXlMZXZlbCwgbV9hbHBoYSk7CisjZW5kaWYKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJHQkE6Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRS
R0JTdHJva2VDb2xvcihjb250ZXh0LCBtX3JlZCwgbV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKTsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRl
bnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KKyAgICAgICAgICAgIENHQ29u
dGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBtX3JlZCwg
bV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKTsKKyNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQ01ZS0E6Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRDTVlLU3Ryb2tlQ29s
b3IoY29udGV4dCwgbV9jeWFuLCBtX21hZ2VudGEsIG1feWVsbG93LCBtX2JsYWNrLCBtX2FscGhh
KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBl
bmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KKyNpZiBfX0FQUExFX18KKyAgICAgICAgICAgIENH
Q29udGV4dFNldENNWUtTdHJva2VDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9j
eWFuLCBtX21hZ2VudGEsIG1feWVsbG93LCBtX2JsYWNrLCBtX2FscGhhKTsKKyNlbmRpZgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR3JhZGllbnQ6CiAgICAgICAgIGNhc2UgSW1h
Z2VQYXR0ZXJuOgpAQCAtMTEzLDM3ICsxMjcsNTIgQEAKICAgICB9CiB9CiAKLXZvaWQgQ2FudmFz
U3R5bGU6OmFwcGx5RmlsbENvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0KQordm9pZCBDYW52YXNT
dHlsZTo6YXBwbHlGaWxsQ29sb3IoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogewogICAgIGlm
ICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAg
ICAgIGNhc2UgQ29sb3JTdHJpbmc6IHsKICAgICAgICAgICAgIFJHQkEzMiBjb2xvciA9IENTU1Bh
cnNlcjo6cGFyc2VDb2xvcihtX2NvbG9yKTsKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZp
bGxDb2xvcihjb250ZXh0LAorICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBw
bGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgorI2lmIF9fQVBQTEVfXwor
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLAogICAgICAgICAgICAgICAgICgoY29sb3IgPj4gMTYpICYgMHhGRikgLyAyNTUuMCwK
ICAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDgpICYgMHhGRikgLyAyNTUuMCwKICAgICAgICAg
ICAgICAgICAoY29sb3IgJiAweEZGKSAvIDI1NS4wLAogICAgICAgICAgICAgICAgICgoY29sb3Ig
Pj4gMjQpICYgMHhGRikgLyAyNTUuMCk7CisjZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ29sb3JTdHJpbmdXaXRoQWxwaGE6IHsKICAgICAgICAgICAg
IFJHQkEzMiBjb2xvciA9IENTU1BhcnNlcjo6cGFyc2VDb2xvcihtX2NvbG9yKTsKLSAgICAgICAg
ICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LAorICAgICAgICAgICAgLy8gRklY
TUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQg
QVBJLgorI2lmIF9fQVBQTEVfXworICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9y
KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLAogICAgICAgICAgICAgICAgICgoY29sb3IgPj4g
MTYpICYgMHhGRikgLyAyNTUuMCwKICAgICAgICAgICAgICAgICAoKGNvbG9yID4+IDgpICYgMHhG
RikgLyAyNTUuMCwKICAgICAgICAgICAgICAgICAoY29sb3IgJiAweEZGKSAvIDI1NS4wLAogICAg
ICAgICAgICAgICAgIG1fYWxwaGEpOworI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEdyYXlMZXZlbDoKLSAgICAgICAgICAgIENHQ29udGV4dFNldEdy
YXlGaWxsQ29sb3IoY29udGV4dCwgbV9ncmF5TGV2ZWwsIG1fYWxwaGEpOworICAgICAgICAgICAg
Ly8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0Nv
bnRleHQgQVBJLgorI2lmIF9fQVBQTEVfXworICAgICAgICAgICAgQ0dDb250ZXh0U2V0R3JheUZp
bGxDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9ncmF5TGV2ZWwsIG1fYWxwaGEp
OworI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSR0JBOgotICAgICAg
ICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIG1fcmVkLCBtX2dyZWVuLCBt
X2JsdWUsIG1fYWxwaGEpOworICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBw
bGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgorI2lmIF9fQVBQTEVfXwor
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLCBtX3JlZCwgbV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKTsKKyNlbmRpZgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ01ZS0E6Ci0gICAgICAgICAgICBDR0NvbnRleHRT
ZXRDTVlLRmlsbENvbG9yKGNvbnRleHQsIG1fY3lhbiwgbV9tYWdlbnRhLCBtX3llbGxvdywgbV9i
bGFjaywgbV9hbHBoYSk7CisgICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBs
YXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCisjaWYgX19BUFBMRV9fCisg
ICAgICAgICAgICBDR0NvbnRleHRTZXRDTVlLRmlsbENvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLCBtX2N5YW4sIG1fbWFnZW50YSwgbV95ZWxsb3csIG1fYmxhY2ssIG1fYWxwaGEpOwor
I2VuZGlmCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHcmFkaWVudDoKICAgICAg
ICAgY2FzZSBJbWFnZVBhdHRlcm46CkBAIC0xNTEsNiArMTgwLDQgQEAKICAgICB9CiB9CiAKLSNl
bmRpZgotCiB9CkluZGV4OiBodG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJldmlzaW9uIDE0MDcxKQor
KysgaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
OCArMjYsOSBAQAogI2lmbmRlZiBIVE1MQ2FudmFzMkRDb250ZXh0X2gKICNkZWZpbmUgSFRNTENh
bnZhczJEQ29udGV4dF9oCiAKLSNpbmNsdWRlICJDb21wb3NpdGVPcGVyYXRvci5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzVHlwZXMuaCIKKyNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKICNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIApAQCAtNDAsNiArNDEsNyBAQAogICAg
IGNsYXNzIENhbnZhc0dyYWRpZW50OwogICAgIGNsYXNzIENhbnZhc1BhdHRlcm47CiAgICAgY2xh
c3MgQ2FudmFzU3R5bGU7CisgICAgY2xhc3MgRmxvYXRSZWN0OwogICAgIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKICAgICBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKICAgICBjbGFzcyBIVE1MSW1h
Z2VFbGVtZW50OwpAQCAtMTY0LDI3ICsxNjYsMjUgQEAKICAgICAgICAgdm9pZCBkZXRhY2hDYW52
YXMoKSB7IG1fY2FudmFzID0gMDsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgZW51bSBDYXAg
eyBCdXR0Q2FwLCBSb3VuZENhcCwgU3F1YXJlQ2FwIH07Ci0gICAgICAgIGVudW0gSm9pbiB7IE1p
dGVySm9pbiwgUm91bmRKb2luLCBCZXZlbEpvaW4gfTsKLQogICAgICAgICBzdHJ1Y3QgU3RhdGUg
ewogICAgICAgICAgICAgU3RhdGUoKTsKIAogICAgICAgICAgICAgUmVmUHRyPENhbnZhc1N0eWxl
PiBtX3N0cm9rZVN0eWxlOwogICAgICAgICAgICAgUmVmUHRyPENhbnZhc1N0eWxlPiBtX2ZpbGxT
dHlsZTsKKyAgICAgICAgICAgIFBhdGggbV9wYXRoOwogICAgICAgICAgICAgZmxvYXQgbV9saW5l
V2lkdGg7Ci0gICAgICAgICAgICBDYXAgbV9saW5lQ2FwOwotICAgICAgICAgICAgSm9pbiBtX2xp
bmVKb2luOworICAgICAgICAgICAgTGluZUNhcCBtX2xpbmVDYXA7CisgICAgICAgICAgICBMaW5l
Sm9pbiBtX2xpbmVKb2luOwogICAgICAgICAgICAgZmxvYXQgbV9taXRlckxpbWl0OwogICAgICAg
ICAgICAgRmxvYXRTaXplIG1fc2hhZG93T2Zmc2V0OwogICAgICAgICAgICAgZmxvYXQgbV9zaGFk
b3dCbHVyOwogICAgICAgICAgICAgU3RyaW5nIG1fc2hhZG93Q29sb3I7CiAgICAgICAgICAgICBm
bG9hdCBtX2dsb2JhbEFscGhhOwogICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9nbG9i
YWxDb21wb3NpdGU7CisgICAgICAgICAgICBib29sIG1fYXBwbGllZFN0cm9rZVBhdHRlcm47Cisg
ICAgICAgICAgICBib29sIG1fYXBwbGllZEZpbGxQYXR0ZXJuOwogI2lmIF9fQVBQTEVfXwotICAg
ICAgICAgICAgYm9vbCBtX3BsYXRmb3JtQ29udGV4dFN0cm9rZVN0eWxlSXNQYXR0ZXJuOwogICAg
ICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zvcm07
Ci0gICAgICAgICAgICBib29sIG1fcGxhdGZvcm1Db250ZXh0RmlsbFN0eWxlSXNQYXR0ZXJuOwog
ICAgICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3Jt
OwogI2VuZGlmCiAgICAgICAgIH07CkBAIC0xOTgsMTMgKzE5OCw5IEBACiAKICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIGNvbnN0OwogCi0jaWYgX19BUFBMRV9fCiAg
ICAgICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAgICAgICAgIHZvaWQgYXBwbHlGaWxs
UGF0dGVybigpOwogCi0gICAgICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQoKSBjb25z
dDsKLSNlbmRpZgotCiAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBtX2NhbnZhczsKICAgICAg
ICAgVmVjdG9yPFN0YXRlLCAxPiBtX3N0YXRlU3RhY2s7CiAgICAgfTsKSW5kZXg6IGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNDA3MSkKKysrIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcgQEAKICAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JT
cGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwogICAgIENHQ29udGV4dFJlZiBi
aXRtYXBDb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YSwgdywgaGVpZ2h0KCks
IDgsIGJ5dGVzUGVyUm93LCBjb2xvclNwYWNlLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExh
c3QpOwogICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7Ci0gICAgbV9kcmF3aW5n
Q29udGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQoYml0bWFwQ29udGV4dCwgZmFsc2UsIGZhbHNl
KTsKKyAgICBtX2RyYXdpbmdDb250ZXh0ID0gbmV3IEdyYXBoaWNzQ29udGV4dChiaXRtYXBDb250
ZXh0KTsKICAgICBDR0NvbnRleHRSZWxlYXNlKGJpdG1hcENvbnRleHQpOwogI2VuZGlmCiB9Cklu
ZGV4OiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAxNDA3MSkKKysrIHJlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTE3LDcgKzUxNyw3IEBACiAgICAgfQogCiAg
ICAgW2J1dHRvbiBkcmF3V2l0aEZyYW1lOk5TUmVjdChpbmZsYXRlZFJlY3QpIGluVmlldzpvLT5j
YW52YXMoKS0+dmlldygpLT5nZXREb2N1bWVudFZpZXcoKV07Ci0gICAgW2J1dHRvbiBzZXRDb250
cm9sVmlldzogbmlsXTsKKyAgICBbYnV0dG9uIHNldENvbnRyb2xWaWV3Om5pbF07CiAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CkluZGV4OiByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCShyZXZpc2lvbiAxNDA3
MSkKKysrIHJlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlckhUTUxD
YW52YXMuaCIKIAorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKQEAgLTY0LDcgKzY1LDcgQEAKICAgICBpZiAoIXNob3VsZFBhaW50V2l0aGluUm9vdChp
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBkcmF3U2VsZWN0aW9uVGludCA9IHNlbGVj
dGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSAmJiAhaS5wLT5wcmludGluZygpOworICAgIGJv
b2wgZHJhd1NlbGVjdGlvblRpbnQgPSBzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUg
JiYgIWRvY3VtZW50KCktPnByaW50aW5nKCk7CiAgICAgaWYgKGkucGhhc2UgPT0gUGFpbnRQaGFz
ZVNlbGVjdGlvbikgewogICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25O
b25lKQogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZsb3cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkocmV2aXNpb24gMTQwNzEp
CisrKyByZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OCw3ICsz
NzgsNyBAQAogICAgIC8vIFNlZSBpZiBvdXIgcm9vdCBsaW5lcyBpbnRlcnNlY3Qgd2l0aCB0aGUg
ZGlydHkgcmVjdC4gIElmIHNvLCB0aGVuIHdlIHBhaW50CiAgICAgLy8gdGhlbS4gIE5vdGUgdGhh
dCBib3hlcyBjYW4gZWFzaWx5IG92ZXJsYXAsIHNvIHdlIGNhbid0IG1ha2UgYW55IGFzc3VtcHRp
b25zCiAgICAgLy8gYmFzZWQgb2ZmIHBvc2l0aW9ucyBvZiBvdXIgZmlyc3QgbGluZSBib3ggb3Ig
b3VyIGxhc3QgbGluZSBib3guCi0gICAgYm9vbCBpc1ByaW50aW5nID0gaW5mby5wLT5wcmludGlu
ZygpOworICAgIGJvb2wgaXNQcmludGluZyA9IGRvY3VtZW50KCktPnByaW50aW5nKCk7CiAgICAg
Zm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gZmlyc3RMaW5lQm94KCk7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0Rmxvd0JveCgpKSB7CiAgICAgICAgIGlmIChpc1ByaW50aW5nKSB7CiAgICAgICAg
ICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGZlZWJsZSBlZmZvcnQgdG8gYXZvaWQgc3BsaXR0aW5n
IGEgbGluZSBhY3Jvc3MgdHdvIHBhZ2VzLgpJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCShyZXZpc2lvbiAxNDA3
MSkKKysrIHJlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMiw3
ICs0MDIsNyBAQAogICAgIEdyYXBoaWNzQ29udGV4dCogcCA9IGkucDsKICAgICBwLT5zZXRGb250
KHN0eWxlKCktPmZvbnQoKSk7CiAKLSAgICBpZiAocC0+cHJpbnRpbmcoKSkgeworICAgIGlmIChk
b2N1bWVudCgpLT5wcmludGluZygpKSB7CiAgICAgICAgIGlmIChib3gueSgpIDwgaS5yLnkoKSkK
ICAgICAgICAgICAgIC8vIFRoaXMgaGFzIGJlZW4gcHJpbnRlZCBhbHJlYWR5IHdlIHN1cHBvc2Uu
CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDE0MDcxKQor
KysgcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDcgKzE4
Nyw3IEBACiAgICAgaWYgKCFzaG91bGRQYWludFdpdGhpblJvb3QoaSkpCiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCi0gICAgYm9vbCBpc1ByaW50aW5nID0gaS5wLT5wcmludGluZygpOworICAg
IGJvb2wgaXNQcmludGluZyA9IGRvY3VtZW50KCktPnByaW50aW5nKCk7CiAgICAgYm9vbCBkcmF3
U2VsZWN0aW9uVGludCA9IGlzU2VsZWN0ZWQoKSAmJiAhaXNQcmludGluZzsKICAgICBpZiAoaS5w
aGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKSB7CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0
ZSgpID09IFNlbGVjdGlvbk5vbmUpCkluZGV4OiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxNDA3
MSkKKysrIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0
LDggKzI0NCw4IEBACiAgICAgaW50IHcgPSB3aWR0aCgpICsgMiAqIHBhcmVudCgpLT5tYXhIb3Jp
em9udGFsU2hhZG93KCk7CiAgICAgaWYgKHhQb3MgPj0gaS5yLnJpZ2h0KCkgfHwgeFBvcyArIHcg
PD0gaS5yLngoKSkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBib29sIGlzUHJpbnRp
bmcgPSBpLnAtPnByaW50aW5nKCk7CisKKyAgICBib29sIGlzUHJpbnRpbmcgPSB0ZXh0T2JqZWN0
KCktPmRvY3VtZW50KCktPnByaW50aW5nKCk7CiAgICAgCiAgICAgLy8gRGV0ZXJtaW5lIHdoZXRo
ZXIgb3Igbm90IHdlJ3JlIHNlbGVjdGVkLgogICAgIGJvb2wgaGF2ZVNlbGVjdGlvbiA9ICFpc1By
aW50aW5nICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25l
OwpJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9yZXBsYWNlZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL3JlbmRlcl9yZXBsYWNlZC5jcHAJKHJldmlzaW9uIDE0MDcxKQorKysgcmVuZGVyaW5n
L3JlbmRlcl9yZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Niw3ICszODYsNyBAQAog
ICAgIH0KIAogICAgIC8vIFBhaW50IGEgcGFydGlhbGx5IHRyYW5zcGFyZW50IHdhc2ggb3ZlciBz
ZWxlY3RlZCB3aWRnZXRzLgotICAgIGlmIChpc1NlbGVjdGVkKCkgJiYgIWkucC0+cHJpbnRpbmco
KSkKKyAgICBpZiAoaXNTZWxlY3RlZCgpICYmICFkb2N1bWVudCgpLT5wcmludGluZygpKQogICAg
ICAgICBpLnAtPmZpbGxSZWN0KHNlbGVjdGlvblJlY3QoKSwgc2VsZWN0aW9uQ29sb3IoaS5wKSk7
CiB9CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTQwNzEpCisrKyByZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYxLDcgKzEyNjEsNyBAQAogICAgIC8v
IFdlIGRvbid0IHBhaW50IG91ciBvd24gYmFja2dyb3VuZCwgYnV0IHdlIGRvIGxldCB0aGUga2lk
cyBwYWludCB0aGVpciBiYWNrZ3JvdW5kcy4KICAgICBQYWludEluZm8gcGFpbnRJbmZvKGkpOwog
ICAgIHBhaW50SW5mby5waGFzZSA9IG5ld1BoYXNlOwotICAgIGJvb2wgaXNQcmludGluZyA9IGku
cC0+cHJpbnRpbmcoKTsKKyAgICBib29sIGlzUHJpbnRpbmcgPSBkb2N1bWVudCgpLT5wcmludGlu
ZygpOwogCiAgICAgZm9yIChSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeyAgICAgICAgCiAgICAgICAgIC8vIENo
ZWNrIGZvciBwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzLCBhbmQgaWYgaXQncyBzZXQsIGJyZWFr
IGFuZCBiYWlsLgpAQCAtMTMzMiw3ICsxMzMyLDcgQEAKICAgICB9CiAgICAgCiAgICAgLy8gMy4g
cGFpbnQgc2VsZWN0aW9uCi0gICAgYm9vbCBpc1ByaW50aW5nID0gaS5wLT5wcmludGluZygpOwor
ICAgIGJvb2wgaXNQcmludGluZyA9IGRvY3VtZW50KCktPnByaW50aW5nKCk7CiAgICAgaWYgKCFp
bmxpbmVGbG93ICYmICFpc1ByaW50aW5nKQogICAgICAgICBwYWludFNlbGVjdGlvbihpLCBzY3Jv
bGxlZFgsIHNjcm9sbGVkWSk7IC8vIEZpbGwgaW4gZ2FwcyBpbiBzZWxlY3Rpb24gb24gbGluZXMg
YW5kIGJldHdlZW4gYmxvY2tzLgogCkluZGV4OiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNDA3MSkKKysrIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzA3LDggKzMwNyw4IEBACiAJCTkzOEU2NUY3MDlGMDk4NUQwMDhBNDhF
QyAvKiBKU0hUTUxFbGVtZW50V3JhcHBlckZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM4RTY1RjYwOUYwOTg1RDAwOEE0OEVDIC8qIEpT
SFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAgKi87IH07CiAJCTkzOEU2NjYwMDlGMDlCODEw
MDhBNDhFQyAvKiBKU0hUTUxDYW52YXNFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOEU2NjVGMDlGMDlCODEwMDhBNDhFQyAvKiBKU0hU
TUxDYW52YXNFbGVtZW50LmNwcCAqLzsgfTsKIAkJOTM4RTY2NjIwOUYwOUI4NzAwOEE0OEVDIC8q
IEpTSFRNTENhbnZhc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzOEU2NjYxMDlGMDlCODcwMDhBNDhFQyAvKiBKU0hUTUxDYW52YXNFbGVt
ZW50LmggKi87IH07Ci0JCTkzOEU2ODNDMDlGMEJEN0IwMDhBNDhFQyAvKiBDb21wb3NpdGVPcGVy
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM4
RTY4M0IwOUYwQkQ3QTAwOEE0OEVDIC8qIENvbXBvc2l0ZU9wZXJhdG9yLmggKi87IH07Ci0JCTkz
OEU2ODU0MDlGMEJFMDQwMDhBNDhFQyAvKiBDb21wb3NpdGVPcGVyYXRvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzhFNjg1MzA5RjBCRTA0MDA4
QTQ4RUMgLyogQ29tcG9zaXRlT3BlcmF0b3IuY3BwICovOyB9OworCQk5MzhFNjgzQzA5RjBCRDdC
MDA4QTQ4RUMgLyogR3JhcGhpY3NUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM4RTY4M0IwOUYwQkQ3QTAwOEE0OEVDIC8qIEdyYXBoaWNzVHlw
ZXMuaCAqLzsgfTsKKwkJOTM4RTY4NTQwOUYwQkUwNDAwOEE0OEVDIC8qIEdyYXBoaWNzVHlwZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM4RTY4
NTMwOUYwQkUwNDAwOEE0OEVDIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovOyB9OwogCQk5Mzk4ODVD
MzA4QjdFM0QxMDBFNzA3QzQgLyogRXZlbnROYW1lcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzk4ODVDMTA4QjdFM0QxMDBFNzA3QzQgLyogRXZl
bnROYW1lcy5jcHAgKi87IH07CiAJCTkzOTg4NUM0MDhCN0UzRDEwMEU3MDdDNCAvKiBFdmVudE5h
bWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzk4
ODVDMjA4QjdFM0QxMDBFNzA3QzQgLyogRXZlbnROYW1lcy5oICovOyB9OwogCQk5M0I3MEQ1QjA5
RUIwQzdDMDA5RDg0NjggLyogSlNET01QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBEM0YwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTRE9N
UGFyc2VyLmNwcCAqLzsgfTsKQEAgLTE1NjIsOCArMTU2Miw4IEBACiAJCTkzOEU2NjI1MDlGMDk5
NTYwMDhBNDhFQyAvKiBIVE1MQ2FudmFzRWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gSFRNTENhbnZhc0VsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
MzhFNjY1RjA5RjA5QjgxMDA4QTQ4RUMgLyogSlNIVE1MQ2FudmFzRWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxDYW52YXNFbGVtZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM4RTY2NjEwOUYwOUI4NzAwOEE0OEVDIC8q
IEpTSFRNTENhbnZhc0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNIVE1MQ2FudmFzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MzhF
NjgzQjA5RjBCRDdBMDA4QTQ4RUMgLyogQ29tcG9zaXRlT3BlcmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcG9zaXRlT3BlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJOTM4RTY4NTMwOUYwQkUwNDAwOEE0OEVDIC8qIENvbXBvc2l0ZU9wZXJh
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBvc2l0ZU9w
ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTM4RTY4M0IwOUYwQkQ3
QTAwOEE0OEVDIC8qIEdyYXBoaWNzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR3JhcGhpY3NUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzhF
Njg1MzA5RjBCRTA0MDA4QTQ4RUMgLyogR3JhcGhpY3NUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc1R5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTM5NEUwQTQwM0FBNUJCRTAwODYzNUNFIC8qIEtXUVBhZ2VTdGF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtXUVBh
Z2VTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKIAkJOTM5NEUwQTUwM0FBNUJCRTAwODYzNUNFIC8qIEtXUVBhZ2VTdGF0ZS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
S1dRUGFnZVN0YXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKIAkJOTM5NTVBNDEwM0Q3MjkzMjAwODYzNUNFIC8qIFJlbmRlclRyZWVB
c1RleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJUcmVlQXNUZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAtMzgzNCw4ICszODM0LDYgQEAKIAkJCQlCQ0M4Q0ZDODA5
ODZDRDI0MDAxNDBCRjIgLyogQ29sb3IuY3BwICovLAogCQkJCUJDQzhDRkM5MDk4NkNEMjQwMDE0
MEJGMiAvKiBDb2xvci5oICovLAogCQkJCUJDQzhDRkNBMDk4NkNEMjQwMDE0MEJGMiAvKiBDb2xv
ckRhdGEuZ3BlcmYgKi8sCi0JCQkJOTM4RTY4NTMwOUYwQkUwNDAwOEE0OEVDIC8qIENvbXBvc2l0
ZU9wZXJhdG9yLmNwcCAqLywKLQkJCQk5MzhFNjgzQjA5RjBCRDdBMDA4QTQ4RUMgLyogQ29tcG9z
aXRlT3BlcmF0b3IuaCAqLywKIAkJCQk5MzUyMDg4MTA5QkQ0NUU5MDBGMjAzOEQgLyogQ29va2ll
SmFyLmggKi8sCiAJCQkJRjU4Nzg2ODQwMkRFM0I4NjAxRUE0MTIyIC8qIEN1cnNvci5oICovLAog
CQkJCUJDQjE2Qjg4MDk3OUIwMTQwMDQ2Nzc0MSAvKiBEZXByZWNhdGVkQXJyYXkuaCAqLywKQEAg
LTM4NjMsNiArMzg2MSw4IEBACiAJCQkJQkNDNDdFMjUwOUEzRDZGMTAwQURCNzcxIC8qIEZvbnRG
YW1pbHkuaCAqLywKIAkJCQlBODIzQTc1QjA5QjZFNTM5MDBCNjA2NDEgLyogR3JhcGhpY3NDb250
ZXh0LmNwcCAqLywKIAkJCQk5MzUzNjdFNDA5QUY3N0REMDBEMzVDRDYgLyogR3JhcGhpY3NDb250
ZXh0LmggKi8sCisJCQkJOTM4RTY4NTMwOUYwQkUwNDAwOEE0OEVDIC8qIEdyYXBoaWNzVHlwZXMu
Y3BwICovLAorCQkJCTkzOEU2ODNCMDlGMEJEN0EwMDhBNDhFQyAvKiBHcmFwaGljc1R5cGVzLmgg
Ki8sCiAJCQkJQkM2QjdCQUUwOTkzNjAzQzAwNTI4NjdCIC8qIEltYWdlLmNwcCAqLywKIAkJCQlC
Q0Q3NUFCQjA5ODlBNDQ2MDAzRTI4REYgLyogSW1hZ2UuaCAqLywKIAkJCQlCQzlDMzI4QTA5OTMz
QTZEMDAxRDY5MjQgLyogSW1hZ2VBbmltYXRpb25PYnNlcnZlci5oICovLApAQCAtNDgwNCw3ICs0
ODA0LDcgQEAKIAkJCQkxNENGN0IzNDA5RjZFQ0Q3MDBFQjM2NjUgLyogSlNDU1NSdWxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzhFNjVGMTA5RjA5ODQwMDA4QTQ4RUMgLyogSlNIVE1MRWxlbWVu
dFdyYXBwZXJGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzhFNjY2MjA5RjA5Qjg3MDA4
QTQ4RUMgLyogSlNIVE1MQ2FudmFzRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTM4RTY4
M0MwOUYwQkQ3QjAwOEE0OEVDIC8qIENvbXBvc2l0ZU9wZXJhdG9yLmggaW4gSGVhZGVycyAqLywK
KwkJCQk5MzhFNjgzQzA5RjBCRDdCMDA4QTQ4RUMgLyogR3JhcGhpY3NUeXBlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODExNjg5NjAwOUYyQTRBMDAwNzcyQ0EwIC8qIFNWR1RSZWZFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDExNUI1MjA5Rjg0QjcxMDBDQTRGQzEgLyogTm9kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQxMTVCNzMwOUY4NENENjAwQ0E0RkMxIC8qIEpTTm9kZUZpbHRl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC01NTE2LDcgKzU1MTYsNyBAQAogCQkJCTE0Q0Y3QjMzMDlG
NkVDRDcwMEVCMzY2NSAvKiBKU0NTU1J1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM4RTY1
RjcwOUYwOTg1RDAwOEE0OEVDIC8qIEpTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5MzhFNjY2MDA5RjA5QjgxMDA4QTQ4RUMgLyogSlNIVE1MQ2FudmFz
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5MzhFNjg1NDA5RjBCRTA0MDA4QTQ4RUMg
LyogQ29tcG9zaXRlT3BlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTM4RTY4NTQwOUYw
QkUwNDAwOEE0OEVDIC8qIEdyYXBoaWNzVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODEx
Njg5NUYwOUYyQTRBMDAwNzcyQ0EwIC8qIFNWR1RSZWZFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0MTE1QjcyMDlGODRDRDYwMENBNEZDMSAvKiBKU05vZGVGaWx0ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTRFODM3ODQwOUY4NUQxQzAwQjg1QUU0IC8qIEpTRXZlbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0Rldmlj
ZVF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmlu
Z0RldmljZVF1YXJ0ei5tbQkocmV2aXNpb24gMTQwNzEpCisrKyBrY2FudmFzL2RldmljZS9xdWFy
dHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEw
MCw3IEBACiAKIEdyYXBoaWNzQ29udGV4dCogS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6
OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpCiB7Ci0gICAgcmV0dXJuIG5ldyBHcmFwaGljc0NvbnRl
eHQobV9jZ0NvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0Nv
bnRleHQobV9jZ0NvbnRleHQpOwogfQogCiBzdGF0aWMgYm9vbCBfX3VzZUZpbHRlcnMgPSB0cnVl
OwpJbmRleDogQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24gMTQw
NzEpCisrKyBDaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMDEgQEAKKzIwMDYt
MDQtMjYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3
aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD04NjA4CisgICAgICAgICAgbWFrZSBHcmFwaGljc0NvbnRl
eHQgbW9yZSBzdWl0YWJsZSBmb3IgY3Jvc3MtcGxhdGZvcm0gdXNlLCBzdGVwIDIKKworICAgICAg
ICAtIENoYW5nZWQgR3JhcGhpY3NDb250ZXh0IHRvIHVzZSBOU0dyYXBoaWNzQ29udGV4dCBhcyBs
aXR0bGUgYXMgcG9zc2libGUuCisgICAgICAgIC0gUmVtb3ZlZCB0aGUgcHJpbnRpbmcgZmxhZyBm
cm9tIEdyYXBoaWNzQ29udGV4dC4KKyAgICAgICAgLSBDaGFuZ2VkIEdyYXBoaWNzQ29udGV4dCB0
byBhc3N1bWUgdGhlIE5TR3JhcGhpY3NDb250ZXh0IGlzIGFsd2F5cyBmbGlwcGVkLAorICAgICAg
ICAgIGFuZCBnb3QgcmlkIG9mIHBhcmFtZXRlcnMgdG8gcGFzcyB0aGUgZmxpcHBlZCBib29sZWFu
IGFyb3VuZC4KKworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2o6IEFkZCBHcmFwaGljc1R5cGVzLmgvY3BwIGFuZCByZW1vdmUKKyAgICAgICAgQ29tcG9zaXRl
T3BlcmF0b3IuaC9jcHAuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOiBEaXR0by4KKworICAgICAgICAqIGJyaWRnZS9tYWMvRnJhbWVNYWMubW06IChXZWJDb3Jl
OjpGcmFtZU1hYzo6c2V0RGlzcGxheXNXaXRoRm9jdXNBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBi
cmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbTogKC1bV2ViQ29yZUZyYW1lQnJpZGdlIGRy
YXdSZWN0Ol0pOgorICAgICAgICAqIGh0bWwvQ2FudmFzUGF0dGVybi5jcHA6IChXZWJDb3JlOjpw
YXR0ZXJuQ2FsbGJhY2spOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOiAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZURyYXdpbmdDb250ZXh0KToKKyAgICAg
ICAgKiBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6OjpjcmVhdGVHcmFw
aGljc0NvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XaWRnZXRNYWMubW06IChXZWJD
b3JlOjpXaWRnZXQ6OmxvY2tEcmF3aW5nRm9jdXMpOgorICAgICAgICBVcGRhdGUgZm9yIGNoYW5n
ZXMgdG8gR3JhcGhpY3NDb250ZXh0IGNvbnN0cnVjdG9yIChubyBmbGlwcGVkIG9yIHByaW50aW5n
IGJvb2xlYW4pLgorCisgICAgICAgICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDog
QWRkZWQgYSBQYXRoIHRvIHRoZSBjb250ZXh0IHN0YXRlLiBDaGFuZ2VkIHRoZQorICAgICAgICBM
aW5lQ2FwIGFuZCBMaW5lSm9pbiB0eXBlcyB0byB1c2UgdGhlIG5ldyBvbmVzIGluIEdyYXBoaWNz
VHlwZXMuaCBpbnN0ZWFkIG9mIGRlZmluaW5nCisgICAgICAgIHR5cGVzIGhlcmUgaW4gdGhpcyBj
bGFzcy4gQ2hhbmdlZCBtX3BsYXRmb3JtQ29udGV4dFN0cm9rZVN0eWxlSXNQYXR0ZXJuIGFuZAor
ICAgICAgICBtX3BsYXRmb3JtQ29udGV4dEZpbGxTdHlsZUlzUGF0dGVybiB0byBiZSBuYW1lZCBt
X2FwcGxpZWRTdHJva2VQYXR0ZXJuIGFuZAorICAgICAgICBtX2FwcGxpZWRGaWxsUGF0dGVybiBh
bmQgbW92ZWQgdGhlbSBvdXRzaWRlIHRoZSBfX0FQUExFX18gaWZkZWZzLiBSZW1vdmVkIHRoZQor
ICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKSBmdW5jdGlvbi4gTW92ZWQgYXBwbHlTdHJva2VQYXR0
ZXJuIGFuZCBhcHBseUZpbGxQYXR0ZXJuIG91dCBvZgorICAgICAgICB0aGUgX19BUFBMRV9fIGlm
ZGVmLgorCisgICAgICAgICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZTo6U3RhdGUpOiBN
b3ZlZCB0aGUgc3Ryb2tlIHBhdHRlcm4KKyAgICAgICAgYm9vbGVhbnMgb3V0IG9mIE1hYy1zcGVj
aWZpYyBpZmRlZi4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2F2ZSk6IENoYW5nZWQgdG8gdXNlIEdyYXBoaWNzQ29udGV4dCBpbnN0ZWFkCisgICAgICAgIG9m
IHVzaW5nIENHQ29udGV4dCBkaXJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6cmVzdG9yZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VTdHlsZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGluZVdpZHRoKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmxpbmVD
YXApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0TGluZUNhcCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpsaW5lSm9pbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRMaW5lSm9pbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRNaXRlckxpbWl0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNoYWRvd0NvbG9yKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEdsb2JhbEFscGhh
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNl
dEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzY2FsZSk6IFVwZGF0ZSBzaW5jZSBwbGF0Zm9ybUNvbnRl
eHQoKSBmdW5jdGlvbgorICAgICAgICBubyBsb25nZXIgZXhpc3RzLgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyb3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNsYXRlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmJlZ2luUGF0aCk6IENoYW5n
ZWQgdG8gdXNlIEdyYXBoaWNzQ29udGV4dCBpbnN0ZWFkCisgICAgICAgIG9mIHVzaW5nIENHQ29u
dGV4dCBkaXJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6Y2xvc2VQYXRoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6Om1vdmVUbyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpsaW5lVG8pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6cXVhZHJhdGljQ3VydmVUbyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpiZXppZXJDdXJ2ZVRvKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFyY1RvKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFyYyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZWN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGwpOiBD
aGFuZ2VkIHRvIHVzZSB0aGUgY3VycmVudCBwYXRoIGZyb20gdGhpcyBjbGFzcworICAgICAgICBp
bnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIENHQ29udGV4dCdzIGN1cnJlbnQgcGF0aC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNsaXApOiBDaGFuZ2Vk
IHRvIHVzZSB0aGUgY3VycmVudCBwYXRoIGFuZCB1c2UgdGhlCisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCBpbnN0ZWFkIG9mIHVzaW5nIENHQ29udGV4dCBkaXJlY3RseS4KKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y2xlYXJSZWN0KTogQ2hhbmdlZCB0byB1c2Ug
R3JhcGhpY3NDb250ZXh0IGluc3RlYWQKKyAgICAgICAgb2YgdXNpbmcgQ0dDb250ZXh0IGRpcmVj
dGx5LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsUmVj
dCk6IFVwZGF0ZSBzaW5jZSBwbGF0Zm9ybUNvbnRleHQoKSBmdW5jdGlvbgorICAgICAgICBubyBs
b25nZXIgZXhpc3RzLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzdHJva2VSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNldFNoYWRvdyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjphcHBseVNoYWRvdyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlRnJvbVJlY3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0
dGVybik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjphcHBseVN0cm9rZVBhdHRlcm4pOiBNYWRlIGEgdGlueSBiaXQgb2YgdGhpcyBmdW5jdGlvbgor
ICAgICAgICBjcm9zcy1wbGF0Zm9ybS4gVGhlIGJ1bGsgaXMgc3RpbGwgTWFjLXNwZWNpZmljLgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphcHBseUZpbGxQYXR0
ZXJuKTogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0NhbnZhc1N0eWxlLmg6IENoYW5nZWQgdG8g
dXNlIEdyYXBoaWNzQ29udGV4dCBpbnN0ZWFkIG9mIENHQ29udGV4dC4gTm93IHRoZQorICAgICAg
ICBwbGF0Zm9ybS1zcGVjaWZpYyBzdHVmZiBpcyBpbiB0aGUgaW1wbGVtZW50YXRpb24sIG5vdCB0
aGUgaGVhZGVyLgorICAgICAgICAqIGh0bWwvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzU3R5bGU6OmFwcGx5U3Ryb2tlQ29sb3IpOiBNb3ZlZCB0aGUgaWZkZWZzIGlu
c2lkZSB0aGUgZnVuY3Rpb24sIGdldHRpbmcKKyAgICAgICAgdXMgb25lIHN0ZXAgY2xvc2VyIHRv
IHBsYXRmb3JtIGluZGVwZW5kZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjph
cHBseUZpbGxDb2xvcik6IERpdHRvLgorCisgICAgICAgICogaHRtbC9odG1sX2ltYWdlaW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQ6OmdldFJlY3QpOiBVcGRhdGUg
Zm9yIGNoYW5nZXMgdG8gdGhlIFBhdGggY2xhc3MuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQXJl
YUVsZW1lbnQ6OmdldFJlZ2lvbik6IERpdHRvLgorCisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cGFpbnQpOiBDaGFuZ2UgdG8gY2hlY2sgcHJpbnRp
bmcgZmxhZyBvbiB0aGUgZG9jdW1lbnQsIHJhdGhlciB0aGFuIG9uCisgICAgICAgIHRoZSBHcmFw
aGljc0NvbnRleHQsIHNpbmNlIHRoZXJlIGlzIG5vIHByaW50aW5nIGZsYWcgZm9yIEdyYXBoaWNz
Q29udGV4dCBhbnkgbW9yZS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjphZGp1c3RQYWdlSGVp
Z2h0KTogVXBkYXRlIGZvciBjaGFuZ2UgdG8gR3JhcGhpY3NDb250ZXh0IGNvbnN0cnVjdG9yLgor
CisgICAgICAgICogcGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0Lmg6IERlZmluZSBhIHR5cGUgY2Fs
bGVkIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0IHNvIHRoZQorICAgICAgICBwbGF0Zm9ybS1zcGVj
aWZpYyBnZXR0ZXIgYW5kIGNvbnN0cnVjdG9yIGRvbid0IGhhdmUgdG8gYmUgaWZkZWYnZC4gQWRk
ZWQgY2xlYXJSZWN0LAorICAgICAgICBzdHJva2VSZWN0LCBzZXRMaW5lV2lkdGgsIHNldExpbmVD
YXAsIHNldExpbmVKb2luLCBzZXRNaXRlckxpbWl0LCBzZXRBbHBoYSwgc2V0Q29tcG9zaXRlT3Bl
cmF0aW9uLAorICAgICAgICBhbmQgY2xpcCBmdW5jdGlvbnMuIFJlbW92ZWQgdGhlIGlzRm9yUHJp
bnRpbmcgcGFyYW1ldGVyIGZyb20gY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UHJpdmF0ZSk6IFJlbW92ZWQgaXNG
b3JQcmludGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9HcmFw
aGljc0NvbnRleHRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAgICAgIFJl
bW92ZWQgTlNHcmFwaGljc0NvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpOgorICAg
ICAgICBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3ND
b250ZXh0KTogUmVtb3ZlZCBjb25zdHJ1Y3RvciB0aGF0CisgICAgICAgIHRha2VzIGFuIE5TR3Jh
cGhpY3NDb250ZXh0LiBSZW1vdmVkIHRoZSBmbGlwVGV4dCBhbmQgZm9yUHJpbnRpbmcgcGFyYW1l
dGVycworICAgICAgICB0byB0aGUgb3RoZXIgY29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKTogUmVtb3ZlZCBOU0dyYXBoaWNz
Q29udGV4dCBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0b3Jl
UGxhdGZvcm1TdGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3UmVjdCk6IFVwZGF0ZWQgYXNzZXJ0aW9uIHRvIG1vcmUtcHJlY2lzZWx5CisgICAgICAg
IHJlZmxlY3QgdGhlIGxpbWl0YXRpb24gb2YgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGlzIGZ1
bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb2xvckZyb21G
aWxsQ29sb3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
Q29sb3JGcm9tUGVuKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpzaG91bGRBbnRpYWxpYXMp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldFNob3VsZEFudGlhbGlhcyk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6IFVwZGF0ZWQgYXNz
ZXJ0aW9uIHRvIG1vcmUtcHJlY2lzZWx5CisgICAgICAgIHJlZmxlY3QgdGhlIGxpbWl0YXRpb24g
b2YgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0TGluZVdpZHRoKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldE1pdGVyTGltaXQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0QWxwaGEpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmNsZWFyUmVjdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VSZWN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVDYXApOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZUpvaW4pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y2xpcCk6IEFkZGVkLgorCisgICAgICAgICogcGxhdGZvcm0vQ29tcG9zaXRlT3Bl
cmF0b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL0NvbXBvc2l0ZU9wZXJhdG9y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vR3JhcGhpY3NUeXBlcy5jcHA6IEFkZGVk
LiBJbmNsdWRlcyBDb21wb3NpdGVPcGVyYXRvciwgTGluZUNhcCwgYW5kIExpbmVKb2luLgorICAg
ICAgICAqIHBsYXRmb3JtL0dyYXBoaWNzVHlwZXMuaDogQWRkZWQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9JbWFnZS5oOiBDaGFuZ2VkIGluY2x1ZGUgdG8gR3JhcGhpY3NUeXBlcy5oIGZyb20gQ29t
cG9zaXRlT3BlcmF0b3IuaC4KKworICAgICAgICAqIHBsYXRmb3JtL1BhdGguaDogUmVtb3ZlZCBj
b25zdHJ1Y3RvcnMgdGhhdCB0YWtlIGEgUmVjdCBhbmQgYW4gYXJyYXkgb2YgcG9pbnRzLiBNYWRl
CisgICAgICAgIHRoZSBQYXRoIG11dGFibGUuIENoYW5nZWQgdGhlIHR5cGVzIGZvciBjb250YWlu
cyBhbmQgYm91bmRpbmdSZWN0IHRvIGJlIGZsb2F0LWJhc2VkCisgICAgICAgIGluc3RlYWQgb2Yg
aW50LWJhc2VkLiBDaGFuZ2VkIHRyYW5zbGF0ZSB0byB0YWtlIGEgRmxvYXRTaXplIGluc3RlYWQg
b2YgdHdvIGludGVnZXJzLgorICAgICAgICBBZGRlZCBjbGVhciwgbW92ZVRvLCBhZGRMaW5lVG8s
IGFkZFF1YWRDdXJ2ZVRvLCBhZGRCZXppZXJDdXJ2ZVRvLCBhZGRBcmNUbywgY2xvc2VTdWJwYXRo
LAorICAgICAgICBhZGRBcmMsIGFkZFJlY3QsIGFkZEVsbGlwc2UsIGFuZCBwbGF0Zm9ybVBhdGgg
ZnVuY3Rpb25zLiBEZWZpbmVkIGEgUGxhdGZvcm1QYXRoIHR5cGUKKyAgICAgICAgc28gd2UgZG9u
J3QgaGF2ZSB0byBpZmRlZiB0aGUgaGVhZGVyIHNvIG11Y2guCisgICAgICAgICogcGxhdGZvcm0v
Y2cvUGF0aENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OlBhdGgpOiBDaGFuZ2VkIGNs
YXNzIHRvIGFsd2F5cyBoYXZlIGEgbXV0YWJsZSBwYXRoLgorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6b3BlcmF0b3I9KTogQ2hhbmdlZCB0byBtYWtlIGEgbXV0YWJsZSBjb3B5LgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6Y29udGFpbnMpOiBDaGFuZ2VkIHRvIHRha2UgYSBGbG9hdFBvaW50IGlu
c3RlYWQgb2YgSW50UG9pbnQuCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFuc2xhdGUpOiBD
aGFuZ2VkIHRvIHVzZSBhIEZsb2F0U2l6ZSBpbnN0ZWFkIG9mIHR3byBpbnRzLgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6Ym91bmRpbmdSZWN0KTogQ2hhbmdlZCB0byByZXR1cm4gYSBGbG9hdFJl
Y3QuCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjptb3ZlVG8pOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6OmFkZExpbmVUbyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
YWRkUXVhZEN1cnZlVG8pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZEJlemll
ckN1cnZlVG8pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZEFyY1RvKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbG9zZVN1YnBhdGgpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhdGg6OmFkZEFyYyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6YWRkUmVjdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkRWxsaXBzZSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Y2xlYXIpOiBBZGRlZC4KKworICAgICAg
ICAqIHBsYXRmb3JtL21hYy9JbWFnZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxTb2xp
ZENvbG9ySW5SZWN0KTogQ2hhbmdlZCB0byB0YWtlIGEgR3JhcGhpY3NDb250ZXh0IGluc3RlYWQg
b2YKKyAgICAgICAgYSBDR0NvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6Y2hlY2tG
b3JTb2xpZENvbG9yKTogQ2hhbmdlZCB0byB1c2UgdGhlIG5ldyBzZXRDb21wb3NpdGVPcGVyYXRp
b24KKyAgICAgICAgaW4gR3JhcGhpY3NDb250ZXguCisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
ZHJhdyk6IENoYW5nZWQgdG8gdXNlIHRoZSBuZXcgUERGIGltYWdlIGFuZCBmaWxsU29saWRDb2xv
ckluUmVjdAorICAgICAgICBmdW5jdGlvbiB0aGF0IHRha2UgR3JhcGhpY3NDb250ZXh0IGluc3Rl
YWQgb2YgQ0dDb250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdUaWxlZCk6IERp
dHRvLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL1BERkRvY3VtZW50SW1hZ2UuaDogTWFkZSBt
b3N0IGZ1bmN0aW9ucyBwcml2YXRlLiBDaGFuZ2VkIHRvCisgICAgICAgIHVzZSBHcmFwaGljc0Nv
bnRleHQgYW5kIEZsb2F0UmVjdCBpbnN0ZWFkIG9mIENHQ29udGV4dCBhbmQgTlNSZWN0LiBBbHNv
CisgICAgICAgIHJlbW92ZWQgdGhlIHVudXNlZCBhbHBoYSBhbmQgZmxpcHBlZCBib29sZWFucy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUERGRG9jdW1lbnRJbWFnZS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmJvdW5kcyk6IFVwZGF0ZSBmb3IgY2hhbmdlIGluIHR5
cGVzLgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6YWRqdXN0Q1RNKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpzZXRDdXJyZW50UGFnZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZHJhdyk6IERpdHRv
LgorCisgICAgICAgICogcGxhdGZvcm0vd2luL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6IEFkZGVk
IGxvdHMgb2YgbmV3IHN0dWJzLgorCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwOiAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOiBDaGFuZ2VkIHRvIGdldAorICAg
ICAgICBwcmludGluZyBib29sZWFuIGZyb20gZG9jdW1lbnQgaW5zdGVhZCBncmFwaGljcyBjb250
ZXh0LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckZsb3cuY3BwOiAoV2ViQ29yZTo6UmVuZGVyRmxvdzo6cGFpbnRMaW5lcyk6IERpdHRv
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcDogKFdlYkNvcmU6OlJl
bmRlckhUTUxDYW52YXM6OnBhaW50KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmNwcDogKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWludCk6IERpdHRvLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbTogKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
OjpwYWludEJ1dHRvbik6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9yZW5kZXJfbGlzdC5j
cHA6IChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpwYWludCk6IERpdHRvLgorICAgICAgICAq
IHJlbmRlcmluZy9yZW5kZXJfcmVwbGFjZWQuY3BwOiAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0Ojpw
YWludCk6IERpdHRvLgorCiAyMDA2LTA0LTI1ICBKdXN0aW4gR2FyY2lhICA8anVzdGluLmdhcmNp
YUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgaGFycmlzb24KSW5kZXg6IFdlYkNv
cmUudmNwcm9qL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTQwNzEpCisrKyBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MDcsMTQg
KzYwNyw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXC4uXHBsYXRmb3JtXENvbXBvc2l0ZU9wZXJhdG9yLmgiDQotCQkJCT4NCi0JCQk8L0Zp
bGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwbGF0Zm9ybVxDb21wb3Np
dGVPcGVyYXRvci5jcHAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlwuLlxwbGF0Zm9ybVxDdXJzb3IuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4N
CkBAIC03MTksNiArNzExLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsYXRmb3JtXEdyYXBoaWNzVHlwZXMuaCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsYXRmb3Jt
XEdyYXBoaWNzVHlwZXMuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5ccGxhdGZvcm1cSW1hZ2UuY3BwIg0KIAkJCQk+DQogCQkJPC9G
aWxlPg0KSW5kZXg6IGJyaWRnZS9tYWMvRnJhbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYnJpZGdl
L21hYy9GcmFtZU1hYy5tbQkocmV2aXNpb24gMTQwNzEpCisrKyBicmlkZ2UvbWFjL0ZyYW1lTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yODc0LDcgKzI4NzQsNyBAQAogICAgIGlmIChkb2MgJiYg
ZC0+bV92aWV3ICYmIGQtPm1fdmlldy0+Z2V0RG9jdW1lbnRWaWV3KCkgJiYgdGhlbWUoKS0+c3Vw
cG9ydHNDb250cm9sVGludHMoKSAmJiByZW5kZXJlcigpKSB7CiAgICAgICAgIGRvYy0+dXBkYXRl
TGF5b3V0KCk7IC8vIEVuc3VyZSBsYXlvdXQgaXMgdXAgdG8gZGF0ZS4KICAgICAgICAgSW50UmVj
dCB2aXNpYmxlUmVjdChlbmNsb3NpbmdJbnRSZWN0KGQtPm1fdmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KCkpKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoMCwgZmFsc2UsIGZhbHNl
KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoMCk7CiAgICAgICAgIGNvbnRleHQu
c2V0VXBkYXRpbmdDb250cm9sVGludHModHJ1ZSk7CiAgICAgICAgIHBhaW50KCZjb250ZXh0LCB2
aXNpYmxlUmVjdCk7CiAgICAgfQpJbmRleDogYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2Uu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHJldmlz
aW9uIDE0MDcxKQorKysgYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTgzNCw3ICs4MzQsMTAgQEAKIAogLSAodm9pZClkcmF3UmVjdDooTlNSZWN0KXJl
Y3QKIHsKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChbTlNHcmFwaGljc0NvbnRleHQgY3Vy
cmVudENvbnRleHRdKTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250
ZXh0ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqPihbW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdKTsKKyAgICBBU1NFUlQoW1tOU0dy
YXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNGbGlwcGVkXSk7CisgICAgQVNTRVJUKCFt
X2ZyYW1lLT5kb2N1bWVudCgpIHx8IG1fZnJhbWUtPmRvY3VtZW50KCktPnByaW50aW5nKCkgPT0g
IVtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl0pOworICAg
IEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHBsYXRmb3JtQ29udGV4dCk7CiAgICAgY29udGV4dC5z
ZXRVc2VzSW5hY3RpdmVUZXh0QmFja2dyb3VuZENvbG9yKCFtX2ZyYW1lLT5kaXNwbGF5c1dpdGhG
b2N1c0F0dHJpYnV0ZXMoKSk7CiAgICAgW3NlbGYgX3NldHVwUm9vdEZvclByaW50aW5nOllFU107
CiAgICAgbV9mcmFtZS0+cGFpbnQoJmNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QocmVjdCkpOwpJ
bmRleDogcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZS5jcHAJKHJldmlz
aW9uIDE0MDcxKQorKysgcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsx
MTIsNyBAQAogICAgIENhY2hlZENTU1N0eWxlU2hlZXQqIG1fY2FjaGVkU2hlZXQ7CiB9OwogCi0j
aWYgIU5ERUJVRworI2lmbmRlZiBOREVCVUcKIHN0cnVjdCBGcmFtZUNvdW50ZXIgeyAKICAgICBz
dGF0aWMgaW50IGNvdW50OyAKICAgICB+RnJhbWVDb3VudGVyKCkgeyBpZiAoY291bnQgIT0gMCkg
ZnByaW50ZihzdGRlcnIsICJMRUFLOiAlZCBGcmFtZVxuIiwgY291bnQpOyB9CkBAIC0xNDUsNyAr
MTQ1LDcgQEAKICAgICAvLyBGSVhNRTogRnJhbWVzIHdlcmUgb3JpZ2luYWxseSBjcmVhdGVkIHdp
dGggYSByZWZjb3VudCBvZiAxLCBsZWF2ZSB0aGlzCiAgICAgLy8gcmVmIGNhbGwgaGVyZSB1bnRp
bCB3ZSBjYW4gc3RyYWlnaHRlbiB0aGF0IG91dC4KICAgICByZWYoKTsKLSNpZiAhTkRFQlVHCisj
aWZuZGVmIE5ERUJVRwogICAgICsrRnJhbWVDb3VudGVyOjpjb3VudDsKICNlbmRpZgogCkBAIC0x
NTcsNyArMTU3LDcgQEAKIHsKICAgICBBU1NFUlQoIWQtPm1fbGlmZVN1cHBvcnRUaW1lci5pc0Fj
dGl2ZSgpKTsKIAotI2lmICFOREVCVUcKKyNpZm5kZWYgTkRFQlVHCiAgICAgLS1GcmFtZUNvdW50
ZXI6OmNvdW50OwogI2VuZGlmCiAKQEAgLTIzNTgsMTMgKzIzNTgsMTMgQEAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotI2lmICFOREVCVUcKKyNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgSGFzaFNldDxG
cmFtZSo+IGxpZmVTdXBwb3J0U2V0OwogI2VuZGlmCiAKIHZvaWQgRnJhbWU6OmVuZEFsbExpZmVT
dXBwb3J0KCkKIHsKLSNpZiAhTkRFQlVHCisjaWZuZGVmIE5ERUJVRwogICAgIEhhc2hTZXQ8RnJh
bWUqPiBsaWZlU3VwcG9ydENvcHkgPSBsaWZlU3VwcG9ydFNldDsKICAgICBIYXNoU2V0PEZyYW1l
Kj46Oml0ZXJhdG9yIGVuZCA9IGxpZmVTdXBwb3J0Q29weS5lbmQoKTsKICAgICBmb3IgKEhhc2hT
ZXQ8RnJhbWUqPjo6aXRlcmF0b3IgaXQgPSBsaWZlU3VwcG9ydENvcHkuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQpAQCAtMjM3Nyw3ICsyMzc3LDcgQEAKICAgICBpZiAoZC0+bV9saWZlU3VwcG9y
dFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKICAgICByZWYoKTsKLSNpZiAhTkRF
QlVHCisjaWZuZGVmIE5ERUJVRwogICAgIGxpZmVTdXBwb3J0U2V0LmFkZCh0aGlzKTsKICNlbmRp
ZgogICAgIGQtPm1fbGlmZVN1cHBvcnRUaW1lci5zdGFydE9uZVNob3QoMCk7CkBAIC0yMzg4LDcg
KzIzODgsNyBAQAogICAgIGlmICghZC0+bV9saWZlU3VwcG9ydFRpbWVyLmlzQWN0aXZlKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBkLT5tX2xpZmVTdXBwb3J0VGltZXIuc3RvcCgpOwotI2lmICFO
REVCVUcKKyNpZm5kZWYgTkRFQlVHCiAgICAgbGlmZVN1cHBvcnRTZXQucmVtb3ZlKHRoaXMpOwog
I2VuZGlmCiAgICAgZGVyZWYoKTsKQEAgLTIzOTYsNyArMjM5Niw3IEBACiAKIHZvaWQgRnJhbWU6
OmxpZmVTdXBwb3J0VGltZXJGaXJlZChUaW1lcjxGcmFtZT4qKQogewotI2lmICFOREVCVUcKKyNp
Zm5kZWYgTkRFQlVHCiAgICAgbGlmZVN1cHBvcnRTZXQucmVtb3ZlKHRoaXMpOwogI2VuZGlmCiAg
ICAgZGVyZWYoKTsKQEAgLTI3NDAsMTEgKzI3NDAsMTEgQEAKIC8vIEZJWE1FOiB3aHkgaXMgdGhp
cyBoZXJlIGluc3RlYWQgb2Ygb24gdGhlIEZyYW1lVmlldz8KIHZvaWQgRnJhbWU6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogcCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSNpZiAhTkRFQlVHCisj
aWZuZGVmIE5ERUJVRwogICAgIGJvb2wgZmlsbFdpdGhSZWQ7Ci0gICAgaWYgKHAtPnByaW50aW5n
KCkpCisgICAgaWYgKCFkb2N1bWVudCgpIHx8IGRvY3VtZW50KCktPnByaW50aW5nKCkpCiAgICAg
ICAgIGZpbGxXaXRoUmVkID0gZmFsc2U7IC8vIFByaW50aW5nLCBkb24ndCBmaWxsIHdpdGggcmVk
IChjYW4ndCByZW1lbWJlciB3aHkpLgotICAgIGVsc2UgaWYgKCFkb2N1bWVudCgpIHx8IGRvY3Vt
ZW50KCktPm93bmVyRWxlbWVudCgpKQorICAgIGVsc2UgaWYgKGRvY3VtZW50KCktPm93bmVyRWxl
bWVudCgpKQogICAgICAgICBmaWxsV2l0aFJlZCA9IGZhbHNlOyAvLyBTdWJmcmFtZSwgZG9uJ3Qg
ZmlsbCB3aXRoIHJlZC4KICAgICBlbHNlIGlmICh2aWV3KCkgJiYgdmlldygpLT5pc1RyYW5zcGFy
ZW50KCkpCiAgICAgICAgIGZpbGxXaXRoUmVkID0gZmFsc2U7IC8vIFRyYW5zcGFyZW50LCBkb24n
dCBmaWxsIHdpdGggcmVkLgpAQCAtMjc3OSw4ICsyNzc5LDggQEAKIHsKICAgICBSZW5kZXJDYW52
YXMgKnJvb3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJDYW52YXMgKj4oZG9jdW1lbnQoKS0+cmVuZGVy
ZXIoKSk7CiAgICAgaWYgKHJvb3QpIHsKLSAgICAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRoIHBh
aW50aW5nIGRpc2FibGVkIGJ1dCB3aXRoICJmb3IgcHJpbnRlciIgc2V0IHRvIHRydWUuCi0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KDAsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgLy8g
VXNlIGEgY29udGV4dCB3aXRoIHBhaW50aW5nIGRpc2FibGVkLgorICAgICAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dCgwKTsKICAgICAgICAgcm9vdC0+c2V0VHJ1bmNhdGVkQXQoKGludClmbG9v
cmYob2xkQm90dG9tKSk7CiAgICAgICAgIEludFJlY3QgZGlydHlSZWN0KDAsIChpbnQpZmxvb3Jm
KG9sZFRvcCksIHJvb3QtPmRvY1dpZHRoKCksIChpbnQpY2VpbGYob2xkQm90dG9tIC0gb2xkVG9w
KSk7CiAgICAgICAgIHJvb3QtPmxheWVyKCktPnBhaW50KCZjb250ZXh0LCBkaXJ0eVJlY3QpOwo=
</data>
<flag name="review"
          id="2210"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>